- 07 Dec, 2007 3 commits
-
-
ggaren@apple.com authored
Reviewed by Sam Weinig. Next step in refactoring JSGlobalObject: Added JSVariableObject class, and factored symbol-table-related code into it. (JSGlobalObject doesn't use the symbol table code yet, though.) Layout and JS tests, and testapi, pass. SunSpider reports no regression. WebCore: Reviewed by Sam Weinig. Added some namespace qualifications and a forwarding header, now that KJS::Node is sometimes #included in WebCore by JavaScriptCore headers. * ForwardingHeaders/wtf/ListRefPtr.h: Added. * bindings/js/JSXSLTProcessor.cpp: (KJS::JSXSLTProcessorPrototypeFunctionTransformToFragment::callAsFunction): * bindings/js/kjs_binding.cpp: (KJS::ScriptInterpreter::getDOMNodeForDocument): (KJS::ScriptInterpreter::forgetDOMNodeForDocument): (KJS::ScriptInterpreter::putDOMNodeForDocument): (KJS::ScriptInterpreter::markDOMNodesForDocument): (KJS::ScriptInterpreter::updateDOMNodeDocument): WebKit/mac: Reviewed by Sam Weinig. Added a forwarding header, since we now #include nodes.h through some JavaScriptCore headers. * ForwardingHeaders/wtf/ListRefPtr.h: Added. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28527 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
darin@apple.com authored
- fix http://bugs.webkit.org/show_bug.cgi?id=16185 jsRegExpCompile should not add implicit non-capturing bracket While this does not make SunSpider faster, it will make many regular expressions a bit faster. * pcre/pcre_compile.cpp: Moved CompileData struct in here from the header since it's private to this file. (compile_branch): Updated for function name change. (compile_bracket): Renamed from compile_regex, since, for one thing, this does not compile an entire regular expression. (calculateCompiledPatternLengthAndFlags): Removed unused item_count local variable. Renamed CompileData to cd instead of compile_block to be consistent with other functions. Added code to set the needOuterBracket flag if there's at least one "|" at the outer level. (jsRegExpCompile): Renamed CompileData to cd instead of compile_block to be consistent with other functions. Removed unneeded "size" field from the compiled regular expression. If no outer bracket is needed, then use compile_branch to compile the regular expression. * pcre/pcre_internal.h: Removed the CompileData struct, which is now private to pcre_compile.cpp. Removed the size member from JSRegExp. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28525 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
kevino@webkit.org authored
Reviewed by Darin Adler. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28517 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 06 Dec, 2007 1 commit
-
-
darin@apple.com authored
Reviewed by Eric Seidel. - fix http://bugs.webkit.org/show_bug.cgi?id=16321 new RegExp("[\u0097]{4,6}", "gmy") crashes in DEBUG builds <rdar://problem/5632992> Test: fast/js/regexp-oveflow.html * pcre/pcre_compile.cpp: (calculateCompiledPatternLengthAndFlags): In the case where a single character character class is optimized to not use a character class at all, the preflight code was not setting the lastitemlength variable. LayoutTests: Reviewed by Eric Seidel. - fix http://bugs.webkit.org/show_bug.cgi?id=16321 new RegExp("[\u0097]{4,6}", "gmy") crashes in DEBUG builds <rdar://problem/5632992> * fast/js/regexp-overflow-expected.txt: Updated. * fast/js/resources/regexp-overflow.js: Added test. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28491 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 05 Dec, 2007 15 commits
-
-
mrowe@apple.com authored
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28479 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
darin@apple.com authored
- remove earlier incorrect fix for http://bugs.webkit.org/show_bug.cgi?id=16220 <rdar://problem/5625221> Crash opening www.news.com (CNet) The real bug was the backwards ?: in the compile function, which Geoff just fixed. Rolling out the incorrect earlier fix. * pcre/pcre_compile.cpp: (calculateCompiledPatternLengthAndFlags): Take out the unneeded preflight change. The regression test proves this is still working fine, so the bug remains fixed. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28478 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
mrowe@apple.com authored
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28476 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
ggaren@apple.com authored
* kjs/JSImmediate.cpp: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28475 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
ggaren@apple.com authored
* kjs/JSGlobalObject.cpp: * kjs/JSImmediate.cpp: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28474 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
ggaren@apple.com authored
* kjs/debugger.cpp: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28473 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
ggaren@apple.com authored
* kjs/debugger.cpp: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28472 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
ggaren@apple.com authored
* kjs/debugger.h: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28471 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
ggaren@apple.com authored
* kjs/error_object.cpp: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28470 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
ggaren@apple.com authored
* kjs/bool_object.cpp: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28469 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
ggaren@apple.com authored
Reviewed by Darin Adler. Third step in refactoring JSGlobalObject: Moved data members and functions accessing data members from Interpreter to JSGlobalObject. Changed Interpreter member functions to static functions. This resolves a bug in global object bootstrapping, where the global ExecState could be used when uninitialized. This is a big change, but it's mostly code motion and renaming. Layout and JS tests, and testjsglue and testapi, pass. SunSpider reports a .7% regression, but Shark sees no difference related to this patch, and SunSpider reported a .7% speedup from an earlier step in this refactoring, so I think it's fair to call that a wash. JavaScriptGlue: Reviewed by Darin Adler. Third step in refactoring JSGlobalObject: Moved data members and data member access from Interpreter to JSGlobalObject. Replaced JSInterpreter subclass with JSGlobalObject subclass. * JSRun.cpp: (JSRun::JSRun): (JSRun::Evaluate): (JSRun::CheckSyntax): * JSRun.h: (JSGlueGlobalObject::JSGlueGlobalObject): * JSUtils.cpp: (KJSValueToCFTypeInternal): * JSValueWrapper.cpp: (getThreadGlobalExecState): WebCore: Reviewed by Darin Adler. Third step in refactoring JSGlobalObject: Moved data members and data member access from Interpreter to JSGlobalObject. Changed Interpreter member functions to static functions. Same for the subclass, ScriptInterpreter. This is a big change, but it's mostly code motion and renaming. WebKit/mac: Reviewed by Darin Adler. Third step in refactoring JSGlobalObject: Moved data members and data member access from Interpreter to JSGlobalObject. * WebView/WebFrame.mm: (-[WebFrame _attachScriptDebugger]): WebKit/win: Reviewed by Darin Adler. Third step in refactoring JSGlobalObject: Moved data members and data member access from Interpreter to JSGlobalObject. * WebFrame.cpp: (WebFrame::globalContext): (WebFrame::attachScriptDebugger): (WebFrame::windowObjectCleared): * WebScriptDebugger.cpp: (WebScriptDebugger::WebScriptDebugger): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28468 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
ggaren@apple.com authored
Fixed ASSERT during run-javascriptcore-tests. (Darin just added the ASSERT, but the bug wasn't new.) * pcre/pcre_compile.cpp: (compile_branch): The ?: operator here was backwards, causing us to execute the loop too many times, adding stray KET opcodes to the compiled regular expression. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28463 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
kmccullough@apple.com authored
- Wait until local variable data is fully constructed before notifying the debugger of entering or leaving a call frame. * kjs/function.cpp: (KJS::FunctionImp::callAsFunction): * kjs/nodes.cpp: (KJS::FunctionBodyNode::execute): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28458 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
mrowe@apple.com authored
Reviewed by Oliver. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28455 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
mrowe@apple.com authored
When built for 64-bit the TCMalloc spin lock uses pthread mutexes rather than a custom spin lock implemented in assembly. If we fail to initialize the pthread mutex, attempts to lock or unlock it will fail and trigger a call to abort. Reviewed by Darin. * wtf/FastMalloc.cpp: Initialize the spin lock so that we can later lock and unlock it. * wtf/TCSpinLock.h: Add an Init method to the optimised spin lock. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28449 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 04 Dec, 2007 4 commits
-
-
oliver@apple.com authored
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28435 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
oliver@apple.com authored
Reviewed by Mark Rowe and Geoff Garen. It also result in a performance progression between 0.5% and 0.9% depending on the test, however most if not all of this gain will be consumed by the overhead involved in the later change to release memory to the system. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28434 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
andersca@apple.com authored
Reviewed by Sam. Make isSafeScript const. * kjs/JSGlobalObject.h: (KJS::JSGlobalObject::isSafeScript): WebCore: Reviewed by Sam. Add isSafeScript(const JSGlobalObject*) so we won't get the JSGlobalObject implementation, which always returns true(!). * bindings/js/kjs_window.cpp: (KJS::Window::isSafeScript): Make the static isSafeScript method take two JSGlobalObjects. * bindings/js/kjs_window.h: (KJS::Window::isSafeScript): Implement isSafeScript and have it call the static method. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28415 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
darin@apple.com authored
Reviewed by Geoff. - fix first part of http://bugs.webkit.org/show_bug.cgi?id=16220 <rdar://problem/5625221> Crash opening www.news.com (CNet) Test: fast/js/regexp-overflow.html * pcre/pcre_compile.cpp: (calculateCompiledPatternLengthAndFlags): Add room for the additional BRA/KET that was generated in the compile code but not taken into account here. LayoutTests: Reviewed by Geoff. - test for first part of http://bugs.webkit.org/show_bug.cgi?id=16220 <rdar://problem/5625221> Crash opening www.news.com (CNet) * fast/js/regexp-overflow-expected.txt: Updated. * fast/js/resources/regexp-overflow.js: Added test cases. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28395 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 03 Dec, 2007 6 commits
-
-
darin@apple.com authored
Reviewed by Geoff. - fix http://bugs.webkit.org/show_bug.cgi?id=15618 <rdar://problem/5619353> REGRESSION: Stack overflow/crash in KJS::equal (15618) Test: fast/js/recursion-limit-equal.html * kjs/operations.cpp: (KJS::equal): Check the exception from toPrimitive. LayoutTests: Reviewed by Geoff. - test for http://bugs.webkit.org/show_bug.cgi?id=15618 <rdar://problem/5619353> REGRESSION: Stack overflow/crash in KJS::equal (15618) * fast/js/recursion-limit-equal-expected.txt: Added. * fast/js/recursion-limit-equal.html: Added. * fast/js/resources/recursion-limit-equal.js: Added. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28370 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
mitz@apple.com authored
* bindings/npruntime.cpp: (_NPN_GetIntIdentifier): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28368 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
mitz@apple.com authored
Reviewed by Darin Adler. - fix an ASSERT when getIntIdentifier is called with 0 or -1 * bindings/npruntime.cpp: (_NPN_GetIntIdentifier): We cannot use the hashmap for 0 and -1 since they are the empty value and the deleted value. Instead, keep the identifiers for those two integers in a static array. WebKitTools: Reviewed by Darin Adler. - added a testGetIntIdentifier() method to TestNetscapePlugIn * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c: (pluginInvoke): LayoutTests: Reviewed by Darin Adler. - added a test of the behavior of getIntIdentifier with the integers 0 and -1 * plugins/getintidentifier-special-values-expected.txt: Added. * plugins/getintidentifier-special-values.html: Added. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28366 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
darin@apple.com authored
Reviewed by Mitz. - fix http://bugs.webkit.org/show_bug.cgi?id=15848 <rdar://problem/5619330> REGRESSION: Assertion failure viewing comments page on digg.com Test: fast/js/sparse-array.html * kjs/array_instance.cpp: (KJS::ArrayInstance::inlineGetOwnPropertySlot): Check sparse array cutoff before looking in hash map. Can't avoid the branch because we can't look for 0 in the hash. (KJS::ArrayInstance::deleteProperty): Ditto. LayoutTests: Reviewed by Mitz. - test for http://bugs.webkit.org/show_bug.cgi?id=15848 <rdar://problem/5619330> REGRESSION: Assertion failure viewing comments page on digg.com * fast/js/resources/sparse-array.js: Added. * fast/js/sparse-array-expected.txt: Added. * fast/js/sparse-array.html: Added. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28346 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
ggaren@apple.com authored
* kjs/collector.cpp: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28329 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
ggaren@apple.com authored
Reviewed by Eric Seidel. Second step in refactoring JSGlobalObject: moved virtual functions from Interpreter to JSGlobalObject. Layout and JS tests pass. SunSpider reports a .7% speedup -- don't believe his lies. JavaScriptGlue: Reviewed by Eric Seidel. Updated to match the JavaScriptCore change to move virtual methods from Interpreter to JSGlobalObject. * JSRun.cpp: * JSRun.h: * JSValueWrapper.cpp: (getThreadGlobalExecState): * JavaScriptGlue.cpp: (JSRunCopyGlobalObject): (JSRunEvaluate): WebCore: Reviewed by Eric Seidel. Updated to match the JavaScriptCore change to move virtual methods from Interpreter to JSGlobalObject. Moved virtual ScriptInterpreter functions to Window. WebKit/mac: Reviewed by Eric Seidel. Updated to match the JavaScriptCore change to move virtual methods from Interpreter to JSGlobalObject. * WebView/WebFrame.mm: (-[WebFrame globalContext]): Use the toRef function instead of manually casting. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28328 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 01 Dec, 2007 2 commits
-
-
alp@webkit.org authored
Reviewed by Adam Roben. http://bugs.webkit.org/show_bug.cgi?id=16228 kJSClassDefinitionEmpty is not exported with JS_EXPORT Add JS_EXPORT to kJSClassDefinitionEmpty. Make the gcc compiler check take precedence over the WIN32||_WIN32 check to ensure that symbols are exported on Windows when using gcc. Add a TODO referencing the bug about JS_EXPORT in the Win build (http://bugs.webkit.org/show_bug.cgi?id=16227) Don't define JS_EXPORT as 'extern' when the compiler is unknown since it would result in the incorrect expansion: extern extern const JSClassDefinition kJSClassDefinitionEmpty; (This was something we inherited from CFBase.h that doesn't make sense for JSBase.h) * API/JSBase.h: * API/JSObjectRef.h: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28311 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
ggaren@apple.com authored
Reviewed by Beth Dakin. Reversed the ownership relationship between Interpreter and JSGlobalObject. Now, the JSGlobalObject owns the Interpreter, and top-level objects that need the two to persist just protect the JSGlobalObject from GC. Global object bootstrapping looks a little odd right now, but it will make much more sense soon, after further rounds of refactoring. * bindings/runtime_root.h: Made this class inherit from RefCounted, to avoid code duplication. * kjs/collector.cpp: (KJS::Collector::collect): No need to give special GC treatment to Interpreters, since we mark their global objects, which mark them. * kjs/interpreter.cpp: (KJS::Interpreter::mark): No need to mark our global object, since it marks us. * kjs/interpreter.h: Don't inherit from RefCounted -- JSGlobalObject owns us directly. * kjs/testkjs.cpp: Modified to follow the new rules. (createGlobalObject): (runWithScripts): JavaScriptGlue: Reviewed by Beth Dakin. Modified to follow new JSGlobalObject/Interpreter ownership rules in JavaScriptCore. * JSRun.cpp: (JSRun::JSRun): (JSRun::GetInterpreter): (JSRun::Evaluate): (JSRun::CheckSyntax): * JSRun.h: * JSValueWrapper.cpp: (unprotectGlobalObject): (initializeGlobalObjectKey): (getThreadGlobalExecState): WebCore: Reviewed by Beth Dakin. Modified WebCore to follow the new JSGlobalObject/Interpreter ownership rules in JavaScriptCore. * bindings/js/kjs_binding.cpp: * bindings/js/kjs_binding.h: Removed stale, unused interpreterForGlobalObject(). * bindings/js/kjs_proxy.cpp: Changed to store a global object, rather than an interpreter. (WebCore::KJSProxy::finishedWithEvent): Need to NULL check m_globalObject here because we no longer unnecessarily instantiate it. * bindings/js/kjs_window.cpp: (KJS::ScheduledAction::execute): * bindings/js/kjs_window.h: Removed redundant and less efficient interpreter() function -- global objects have direct access to their interpreters now. Changed these functions to pass around JSGlobalObjects instead of Interpreters: * page/Frame.cpp: (WebCore::Frame::bindingRootObject): (WebCore::Frame::createRootObject): * page/Frame.h: * page/mac/WebCoreFrameBridge.mm: (createRootObject): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28309 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 30 Nov, 2007 5 commits
-
-
aroben@apple.com authored
* ChangeLog: * pcre/pcre_compile.cpp: (compile_branch): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28272 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
eric@webkit.org authored
No review, build fix only. Fix uninitialized var warnings in release build. * JavaScriptCore.xcodeproj/project.pbxproj: * pcre/pcre_compile.cpp: (compile_regex): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28263 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
eric@webkit.org authored
Reviewed by darin. PCRE crashes under GuardMalloc http://bugs.webkit.org/show_bug.cgi?id=16127 check against patternEnd to make sure we don't walk off the end of the string * pcre/pcre_compile.cpp: (compile_branch): (calculateCompiledPatternLengthAndFlags): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28260 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
darin@apple.com authored
Reviewed by Adam Roben. - fix http://bugs.webkit.org/show_bug.cgi?id=16207 JavaScript regular expressions should match UTF-16 code units rather than characters SunSpider says this is 5.5% faster on the regexp test, 0.4% faste overall. Test: fast/js/regexp-non-bmp.html Renamed ANY_CHAR to NOT_NEWLINE to more-accurately reflect its meaning. * pcre/pcre_compile.cpp: (compile_branch): Removed calls to the UTF-16 character accessor functions, replacing them with simple pointer dereferences in some cases, and no code at all in others. (calculateCompiledPatternLengthAndFlags): Ditto. * pcre/pcre_exec.cpp: (match): Fixed indentation of some case labels (including all the BEGIN_OPCODE). Removed calls to the UTF-16 character accessor functions, replacing them with simple pointer dereferences in some cases, and no code at all in others. Also removed some explicit UTF-16 support code in a few cases. Removed the unneeded "UTF-8" code path in the ANY_CHAR repeat code, and in another case, eliminated the code to check against end_subject in because it is already done outside the loop. (jsRegExpExecute): * pcre/pcre_internal.h: Removed all the UTF-16 helper functions. LayoutTests: Reviewed by Adam Roben. - test for http://bugs.webkit.org/show_bug.cgi?id=16207 JavaScript regular expressions should match UTF-16 code units rather than characters * fast/js/regexp-non-bmp-expected.txt: Added. * fast/js/regexp-non-bmp.html: Added. * fast/js/resources/regexp-non-bmp.js: Added. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28243 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
eric@webkit.org authored
Reviewed by Maciej. Fix layout test regressions caused by r28186 http://bugs.webkit.org/show_bug.cgi?id=16195 change first_byte and req_byte back to shorts instead of chars (I think PCRE stuffs information in the high bits) * pcre/pcre_internal.h: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28229 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
- 29 Nov, 2007 4 commits
-
-
oliver@apple.com authored
Reviewed by Maciej and Darin. Under heavy contention it was possible the GC to suspend other threads inside the pthread spinlock, which could lead to the GC thread blocking on the pthread spinlock itself. We now determine and store each thread's stack base when it is registered, thus removing the need for any calls to pthread_get_stackaddr_np that needed the pthread spinlock. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28223 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
aroben@apple.com authored
Removed some unreachable code (ironically, the code was some ASSERT_NOT_REACHED()s). * pcre/pcre_compile.cpp: (compile_branch): * pcre/pcre_exec.cpp: (match): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28201 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
eric@webkit.org authored
Reviewed by Mark Rowe. Fix for --guard crash of fast/js/regexp-charclass-crash introduced by r28151. * pcre/pcre_compile.cpp: (is_anchored): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28186 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-
mrowe@apple.com authored
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@28185 268f45cc-cd09-0410-ab3c-d52691b4dbfc
-