From 259c32cd921fcbb85f79f21923d0efa0d6743d8a Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Wed, 24 Jun 2009 13:42:15 +0200 Subject: Updated WebKit from /home/shausman/src/webkit/trunk to qtwebkit-4.6-snapshot-24062009 ( 6d5a2a0472a6af0b7f781da018e76bb8522d57a5 ) ++ b/WebKit/qt/ChangeLog 2009-06-19 Daniel Reviewed by Simon Hausmann. Remove warnings for QString() constructions from const char * By explicitly wrapping it with QLatin1String() / QLatin1Char() * Api/qwebelement.cpp: (QWebElement::classes): Use QLatin1String. (QWebElement::addClass): Ditto. (QWebElement::removeClass): Ditto. (QWebElement::toggleClass): Ditto. 2009-06-18 Friedemann Kleint Reviewed by Simon Hausmann. Fixed MinGW compilation. * Api/qwebelement.cpp: (QWebElement::evaluateScript): 2009-06-18 Markus Goetz Reviewed by Simon Hausman. Clarify in docs how to compile with debug information. * docs/qtwebkit.qdoc: 2009-06-17 Markus Goetz Reviewed by Simon Hausmann. QWebPage: Don't call supportsSsl() This stops QWebPage from loading the OpenSSL libs, certificates etc. when they are not needed for the non-HTTPS case. Loading the SSL libraries can be a very slow operation. * Api/qwebpage.cpp: (QWebPage::userAgentForUrl): 2009-06-15 Benjamin C Meyer Reviewed by Adam Treat. Support the back/forward/stop/refresh multimedia keys and accept the event when handling backspace and shift backspace as we should. * Api/qwebpage.cpp: (QWebPagePrivate::keyPressEvent): 2009-06-15 Andre Pedralho Reviewed by Adam Treat. https://bugs.webkit.org/show_bug.cgi?id=26351 Remove bool QWebHitTestResult::isScrollBar() const and make sure a null QWebHitTestResult is returned instead. * Api/qwebframe.cpp: (QWebFrame::hitTestContent): * Api/qwebframe.h: * Api/qwebpage.cpp: (QWebPage::updatePositionDependentActions): 2009-06-15 Simon Hausmann Reviewed by Adam Treat. Fix the logic for disabling the fixed layout feature, when an invalid QSize is set. * Api/qwebpage.cpp: (QWebPage::setFixedContentsSize): 2009-06-13 Adam Barth Reviewed by Darin Fisher. https://bugs.webkit.org/show_bug.cgi?id=24492 Move registerURLSchemeAsLocal from FrameLoader to SecurityOrigin. * Api/qwebpage.cpp: (QWebPage::acceptNavigationRequest): Rubber-stamped by Simon Hausmann. 2009-06-09 Simon Hausmann Reviewed by Ariya Hidayat. Renamed QWebSettings::AllowUniversalAccessFromFileUrls to LocalContentCanAccessRemoteUrls, as discussed in the API review. * Api/qwebsettings.cpp: (QWebSettingsPrivate::apply): (QWebSettings::QWebSettings): * Api/qwebsettings.h: 2009-06-09 Simon Hausmann Reviewed by Ariya Hidayat. Merged useFixedLayout property with fixedLayoutSize and renamed the latter to fixedContentsSize. * Api/qwebpage.cpp: (QWebPage::fixedContentsSize): (QWebPage::setFixedContentsSize): * Api/qwebpage.h: * WebCoreSupport/FrameLoaderClientQt.cpp: (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage): 2009-06-09 Simon Hausmann Reviewed by Ariya Hidayat. Renamed QWebHitTestResult::linkTarget to linkElement() and made it return a QWebElement. The link target itself is always the target DOM attribute. * Api/qwebframe.cpp: (QWebHitTestResultPrivate::QWebHitTestResultPrivate): (QWebHitTestResult::linkElement): * Api/qwebframe.h: * Api/qwebframe_p.h: * tests/qwebframe/tst_qwebframe.cpp: --- src/3rdparty/webkit/ChangeLog | 69 + src/3rdparty/webkit/JavaScriptCore/API/JSBase.h | 8 + src/3rdparty/webkit/JavaScriptCore/ChangeLog | 39632 +------- .../webkit/JavaScriptCore/ChangeLog-2007-10-14 | 8 +- .../webkit/JavaScriptCore/ChangeLog-2009-06-16 | 39978 ++++++++ .../webkit/JavaScriptCore/DerivedSources.make | 1 + .../webkit/JavaScriptCore/JavaScriptCore.order | 2 +- .../webkit/JavaScriptCore/JavaScriptCore.pri | 5 +- .../JavaScriptCore/assembler/ARMv7Assembler.h | 1758 + .../assembler/AbstractMacroAssembler.h | 514 +- .../webkit/JavaScriptCore/assembler/CodeLocation.h | 186 + .../JavaScriptCore/assembler/MacroAssembler.h | 6 +- .../JavaScriptCore/assembler/MacroAssemblerARMv7.h | 1063 + .../assembler/MacroAssemblerCodeRef.h | 50 +- .../JavaScriptCore/assembler/MacroAssemblerX86.h | 9 + .../assembler/MacroAssemblerX86_64.h | 9 + .../webkit/JavaScriptCore/bytecode/CodeBlock.cpp | 33 + .../webkit/JavaScriptCore/bytecode/CodeBlock.h | 45 +- .../webkit/JavaScriptCore/bytecode/Instruction.h | 4 +- .../webkit/JavaScriptCore/bytecode/JumpTable.h | 12 +- .../JavaScriptCore/bytecode/StructureStubInfo.h | 6 +- .../bytecompiler/BytecodeGenerator.cpp | 2 +- .../bytecompiler/BytecodeGenerator.h | 12 +- .../JavaScriptCore/bytecompiler/SegmentedVector.h | 170 - src/3rdparty/webkit/JavaScriptCore/config.h | 2 +- .../JavaScriptCore/generated/DatePrototype.lut.h | 4 +- .../webkit/JavaScriptCore/generated/Grammar.cpp | 1002 +- .../webkit/JavaScriptCore/generated/Grammar.h | 109 +- .../JavaScriptCore/generated/JSONObject.lut.h | 15 + .../webkit/JavaScriptCore/interpreter/CallFrame.h | 1 + .../JavaScriptCore/interpreter/Interpreter.cpp | 20 +- .../JavaScriptCore/interpreter/RegisterFile.h | 20 +- .../JavaScriptCore/jit/ExecutableAllocator.h | 42 +- src/3rdparty/webkit/JavaScriptCore/jit/JIT.cpp | 139 +- src/3rdparty/webkit/JavaScriptCore/jit/JIT.h | 101 +- .../webkit/JavaScriptCore/jit/JITArithmetic.cpp | 41 +- src/3rdparty/webkit/JavaScriptCore/jit/JITCall.cpp | 58 +- .../webkit/JavaScriptCore/jit/JITInlineMethods.h | 44 +- .../webkit/JavaScriptCore/jit/JITOpcodes.cpp | 68 +- .../JavaScriptCore/jit/JITPropertyAccess.cpp | 174 +- .../webkit/JavaScriptCore/jit/JITStubCall.h | 3 +- .../webkit/JavaScriptCore/jit/JITStubs.cpp | 224 +- src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.h | 33 +- src/3rdparty/webkit/JavaScriptCore/jsc.cpp | 22 +- src/3rdparty/webkit/JavaScriptCore/parser/Lexer.h | 4 +- .../webkit/JavaScriptCore/parser/Nodes.cpp | 30 +- src/3rdparty/webkit/JavaScriptCore/parser/Nodes.h | 9 +- .../webkit/JavaScriptCore/pcre/pcre_exec.cpp | 2 +- .../JavaScriptCore/profiler/CallIdentifier.h | 3 +- .../webkit/JavaScriptCore/profiler/ProfileNode.cpp | 4 +- .../JavaScriptCore/profiler/ProfilerServer.mm | 11 +- .../webkit/JavaScriptCore/runtime/ArgList.h | 21 +- .../webkit/JavaScriptCore/runtime/Collector.cpp | 99 +- .../JavaScriptCore/runtime/CommonIdentifiers.cpp | 5 +- .../JavaScriptCore/runtime/CommonIdentifiers.h | 5 +- .../JavaScriptCore/runtime/DateConstructor.cpp | 9 +- .../JavaScriptCore/runtime/DateConversion.cpp | 101 + .../webkit/JavaScriptCore/runtime/DateConversion.h | 60 + .../webkit/JavaScriptCore/runtime/DateInstance.cpp | 8 +- .../webkit/JavaScriptCore/runtime/DateInstance.h | 12 +- .../webkit/JavaScriptCore/runtime/DateMath.cpp | 935 - .../webkit/JavaScriptCore/runtime/DateMath.h | 191 - .../JavaScriptCore/runtime/DatePrototype.cpp | 61 +- .../JavaScriptCore/runtime/InitializeThreading.cpp | 4 +- .../webkit/JavaScriptCore/runtime/JSFunction.cpp | 17 +- .../webkit/JavaScriptCore/runtime/JSGlobalData.cpp | 17 +- .../webkit/JavaScriptCore/runtime/JSGlobalData.h | 13 +- .../JavaScriptCore/runtime/JSGlobalObject.cpp | 4 +- .../webkit/JavaScriptCore/runtime/JSGlobalObject.h | 8 +- .../runtime/JSGlobalObjectFunctions.cpp | 2 +- .../webkit/JavaScriptCore/runtime/JSONObject.cpp | 766 + .../webkit/JavaScriptCore/runtime/JSONObject.h | 58 + .../webkit/JavaScriptCore/runtime/JSObject.h | 27 - .../JavaScriptCore/runtime/JSStaticScopeObject.cpp | 5 - .../JavaScriptCore/runtime/JSStaticScopeObject.h | 1 - .../JavaScriptCore/runtime/LiteralParser.cpp | 399 +- .../webkit/JavaScriptCore/runtime/LiteralParser.h | 42 +- .../webkit/JavaScriptCore/runtime/PropertySlot.h | 10 - .../webkit/JavaScriptCore/runtime/ScopeChain.h | 4 +- .../webkit/JavaScriptCore/runtime/Structure.cpp | 6 +- .../JavaScriptCore/runtime/StructureChain.cpp | 11 + .../webkit/JavaScriptCore/runtime/StructureChain.h | 1 + .../webkit/JavaScriptCore/runtime/UString.cpp | 15 +- .../webkit/JavaScriptCore/runtime/UString.h | 3 +- .../webkit/JavaScriptCore/wtf/Assertions.cpp | 6 +- .../webkit/JavaScriptCore/wtf/Assertions.h | 2 +- .../webkit/JavaScriptCore/wtf/CurrentTime.cpp | 8 +- .../webkit/JavaScriptCore/wtf/DateMath.cpp | 911 + src/3rdparty/webkit/JavaScriptCore/wtf/DateMath.h | 187 + src/3rdparty/webkit/JavaScriptCore/wtf/Deque.h | 2 +- .../webkit/JavaScriptCore/wtf/FastMalloc.cpp | 2 +- .../webkit/JavaScriptCore/wtf/HashCountedSet.h | 3 +- src/3rdparty/webkit/JavaScriptCore/wtf/HashSet.h | 3 +- .../webkit/JavaScriptCore/wtf/MathExtras.h | 4 +- .../webkit/JavaScriptCore/wtf/MessageQueue.h | 14 +- src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h | 136 +- .../webkit/JavaScriptCore/wtf/RandomNumberSeed.h | 2 +- src/3rdparty/webkit/JavaScriptCore/wtf/RefPtr.h | 3 +- .../webkit/JavaScriptCore/wtf/SegmentedVector.h | 252 + .../webkit/JavaScriptCore/wtf/StringExtras.h | 4 +- src/3rdparty/webkit/JavaScriptCore/wtf/Threading.h | 28 +- .../webkit/JavaScriptCore/wtf/ThreadingNone.cpp | 4 +- .../JavaScriptCore/wtf/ThreadingPthreads.cpp | 57 +- src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h | 7 +- .../webkit/JavaScriptCore/yarr/RegexJIT.cpp | 40 +- src/3rdparty/webkit/VERSION | 4 +- src/3rdparty/webkit/WebCore/ChangeLog | 97260 +----------------- src/3rdparty/webkit/WebCore/ChangeLog-2006-12-31 | 22 +- src/3rdparty/webkit/WebCore/ChangeLog-2007-10-14 | 18 +- src/3rdparty/webkit/WebCore/ChangeLog-2008-08-10 | 20 +- src/3rdparty/webkit/WebCore/ChangeLog-2009-06-16 | 97559 +++++++++++++++++++ src/3rdparty/webkit/WebCore/DerivedSources.cpp | 5 +- .../WebCore/ForwardingHeaders/runtime/DateMath.h | 4 - .../WebCore/ForwardingHeaders/wtf/DateMath.h | 4 + src/3rdparty/webkit/WebCore/WebCore.pro | 63 +- .../accessibility/AccessibilityRenderObject.cpp | 4 +- .../accessibility/AccessibilityTableCell.cpp | 6 + .../bindings/js/JSCSSStyleDeclarationCustom.cpp | 4 +- .../js/JSCanvasRenderingContext2DCustom.cpp | 27 +- .../webkit/WebCore/bindings/js/JSDOMBinding.cpp | 8 +- .../WebCore/bindings/js/JSDOMStringListCustom.cpp | 49 - .../webkit/WebCore/bindings/js/JSDOMWindowBase.cpp | 86 - .../webkit/WebCore/bindings/js/JSDOMWindowBase.h | 11 - .../WebCore/bindings/js/JSDOMWindowCustom.cpp | 205 +- .../webkit/WebCore/bindings/js/JSDOMWindowCustom.h | 116 - .../WebCore/bindings/js/JSDataGridDataSource.cpp | 80 + .../WebCore/bindings/js/JSDataGridDataSource.h | 75 + .../bindings/js/JSHTMLAppletElementCustom.cpp | 4 +- .../bindings/js/JSHTMLDataGridElementCustom.cpp | 50 + .../bindings/js/JSHTMLEmbedElementCustom.cpp | 4 +- .../bindings/js/JSHTMLObjectElementCustom.cpp | 4 +- .../webkit/WebCore/bindings/js/JSHistoryCustom.cpp | 18 +- .../WebCore/bindings/js/JSLocationCustom.cpp | 20 +- .../WebCore/bindings/js/JSMessagePortCustom.cpp | 12 +- .../webkit/WebCore/bindings/js/JSStorageCustom.cpp | 6 +- .../WebCore/bindings/js/JSWorkerContextCustom.cpp | 2 +- .../WebCore/bindings/js/ScriptController.cpp | 9 +- .../webkit/WebCore/bindings/js/ScriptController.h | 6 + .../WebCore/bindings/js/ScriptEventListener.cpp | 11 + .../webkit/WebCore/bindings/js/ScriptSourceCode.h | 2 + .../WebCore/bindings/js/StringSourceProvider.h | 1 + .../WebCore/bindings/js/WorkerScriptController.cpp | 2 +- .../WebCore/bindings/scripts/CodeGenerator.pm | 35 + .../WebCore/bindings/scripts/CodeGeneratorJS.pm | 187 +- .../WebCore/bindings/scripts/CodeGeneratorObjC.pm | 28 +- .../WebCore/bindings/scripts/CodeGeneratorV8.pm | 2189 + .../webkit/WebCore/bindings/scripts/IDLParser.pm | 4 + .../webkit/WebCore/bridge/qt/qt_runtime.cpp | 8 +- src/3rdparty/webkit/WebCore/config.h | 5 - .../WebCore/css/CSSComputedStyleDeclaration.cpp | 17 + .../WebCore/css/CSSComputedStyleDeclaration.h | 3 + .../webkit/WebCore/css/CSSPrimitiveValue.h | 2 +- .../webkit/WebCore/css/CSSStyleDeclaration.cpp | 9 +- .../webkit/WebCore/css/CSSStyleDeclaration.h | 4 + .../webkit/WebCore/css/CSSStyleDeclaration.idl | 2 +- .../webkit/WebCore/css/CSSStyleSelector.cpp | 14 +- src/3rdparty/webkit/WebCore/css/html4.css | 20 +- .../webkit/WebCore/css/mediaControlsQT.css | 4 +- .../webkit/WebCore/css/themeChromiumLinux.css | 36 + src/3rdparty/webkit/WebCore/css/view-source.css | 4 +- src/3rdparty/webkit/WebCore/dom/ContainerNode.cpp | 4 +- src/3rdparty/webkit/WebCore/dom/DOMStringList.cpp | 35 - src/3rdparty/webkit/WebCore/dom/DOMStringList.h | 46 - src/3rdparty/webkit/WebCore/dom/DOMStringList.idl | 41 - src/3rdparty/webkit/WebCore/dom/Document.cpp | 24 +- src/3rdparty/webkit/WebCore/dom/Document.h | 1 + src/3rdparty/webkit/WebCore/dom/Document.idl | 72 + src/3rdparty/webkit/WebCore/dom/Element.cpp | 11 + src/3rdparty/webkit/WebCore/dom/Element.h | 3 +- src/3rdparty/webkit/WebCore/dom/Element.idl | 71 + src/3rdparty/webkit/WebCore/dom/MessageChannel.cpp | 7 +- src/3rdparty/webkit/WebCore/dom/MessagePort.cpp | 254 +- src/3rdparty/webkit/WebCore/dom/MessagePort.h | 68 +- src/3rdparty/webkit/WebCore/dom/MessagePort.idl | 3 - .../webkit/WebCore/dom/MessagePortChannel.cpp | 64 + .../webkit/WebCore/dom/MessagePortChannel.h | 103 + src/3rdparty/webkit/WebCore/dom/MessagePortProxy.h | 54 - src/3rdparty/webkit/WebCore/dom/Node.cpp | 184 +- src/3rdparty/webkit/WebCore/dom/Node.h | 63 +- src/3rdparty/webkit/WebCore/dom/Node.idl | 41 - src/3rdparty/webkit/WebCore/dom/Position.cpp | 14 +- src/3rdparty/webkit/WebCore/dom/Range.cpp | 6 +- .../webkit/WebCore/dom/RangeBoundaryPoint.h | 9 +- src/3rdparty/webkit/WebCore/dom/ScriptElement.cpp | 3 +- .../webkit/WebCore/dom/ScriptExecutionContext.cpp | 2 +- .../webkit/WebCore/dom/StaticStringList.cpp | 67 - src/3rdparty/webkit/WebCore/dom/StaticStringList.h | 61 - src/3rdparty/webkit/WebCore/dom/Tokenizer.h | 8 + .../dom/default/PlatformMessagePortChannel.cpp | 222 + .../dom/default/PlatformMessagePortChannel.h | 129 + .../WebCore/editing/BreakBlockquoteCommand.cpp | 10 +- .../WebCore/editing/CompositeEditCommand.cpp | 7 + src/3rdparty/webkit/WebCore/editing/Editor.cpp | 18 +- .../editing/InsertParagraphSeparatorCommand.cpp | 12 +- .../webkit/WebCore/editing/InsertTextCommand.cpp | 16 +- .../webkit/WebCore/editing/SelectionController.cpp | 2 +- .../webkit/WebCore/editing/TextIterator.cpp | 211 +- src/3rdparty/webkit/WebCore/editing/TextIterator.h | 52 +- .../WebCore/editing/gtk/SelectionControllerGtk.cpp | 2 +- .../webkit/WebCore/editing/htmlediting.cpp | 1 + .../webkit/WebCore/generated/CSSGrammar.cpp | 877 +- src/3rdparty/webkit/WebCore/generated/CSSGrammar.h | 109 +- .../webkit/WebCore/generated/DatePrototype.lut.h | 4 +- src/3rdparty/webkit/WebCore/generated/Grammar.cpp | 1002 +- src/3rdparty/webkit/WebCore/generated/Grammar.h | 109 +- .../WebCore/generated/HTMLElementFactory.cpp | 28 + .../webkit/WebCore/generated/HTMLNames.cpp | 128 +- src/3rdparty/webkit/WebCore/generated/HTMLNames.h | 31 + src/3rdparty/webkit/WebCore/generated/JSAttr.cpp | 6 +- src/3rdparty/webkit/WebCore/generated/JSAttr.h | 3 +- .../webkit/WebCore/generated/JSBarInfo.cpp | 5 +- .../webkit/WebCore/generated/JSCDATASection.cpp | 6 +- .../webkit/WebCore/generated/JSCSSCharsetRule.cpp | 6 +- .../webkit/WebCore/generated/JSCSSFontFaceRule.cpp | 6 +- .../webkit/WebCore/generated/JSCSSImportRule.cpp | 6 +- .../webkit/WebCore/generated/JSCSSMediaRule.cpp | 5 +- .../webkit/WebCore/generated/JSCSSPageRule.cpp | 6 +- .../WebCore/generated/JSCSSPrimitiveValue.cpp | 5 +- .../webkit/WebCore/generated/JSCSSRule.cpp | 5 +- .../webkit/WebCore/generated/JSCSSRuleList.cpp | 7 +- .../WebCore/generated/JSCSSStyleDeclaration.cpp | 9 +- .../WebCore/generated/JSCSSStyleDeclaration.h | 2 +- .../webkit/WebCore/generated/JSCSSStyleRule.cpp | 6 +- .../webkit/WebCore/generated/JSCSSStyleSheet.cpp | 5 +- .../webkit/WebCore/generated/JSCSSValue.cpp | 5 +- .../webkit/WebCore/generated/JSCSSValueList.cpp | 7 +- .../generated/JSCSSVariablesDeclaration.cpp | 7 +- .../WebCore/generated/JSCSSVariablesRule.cpp | 6 +- .../webkit/WebCore/generated/JSCanvasGradient.cpp | 5 +- .../webkit/WebCore/generated/JSCanvasPattern.cpp | 5 +- .../generated/JSCanvasRenderingContext2D.cpp | 5 +- .../webkit/WebCore/generated/JSCharacterData.cpp | 5 +- .../webkit/WebCore/generated/JSClientRect.cpp | 5 +- .../webkit/WebCore/generated/JSClientRectList.cpp | 7 +- .../webkit/WebCore/generated/JSClipboard.cpp | 6 +- .../webkit/WebCore/generated/JSComment.cpp | 6 +- .../webkit/WebCore/generated/JSConsole.cpp | 5 +- .../webkit/WebCore/generated/JSCoordinates.cpp | 5 +- .../webkit/WebCore/generated/JSCounter.cpp | 6 +- .../WebCore/generated/JSDOMApplicationCache.cpp | 5 +- .../WebCore/generated/JSDOMApplicationCache.h | 1 - .../WebCore/generated/JSDOMCoreException.cpp | 5 +- .../WebCore/generated/JSDOMImplementation.cpp | 6 +- .../webkit/WebCore/generated/JSDOMParser.cpp | 6 +- .../webkit/WebCore/generated/JSDOMSelection.cpp | 5 +- .../webkit/WebCore/generated/JSDOMStringList.cpp | 214 - .../webkit/WebCore/generated/JSDOMStringList.h | 88 - .../webkit/WebCore/generated/JSDOMWindow.cpp | 86 +- .../webkit/WebCore/generated/JSDOMWindow.h | 12 +- .../webkit/WebCore/generated/JSDatabase.cpp | 5 +- src/3rdparty/webkit/WebCore/generated/JSDatabase.h | 1 - .../webkit/WebCore/generated/JSDocument.cpp | 852 +- src/3rdparty/webkit/WebCore/generated/JSDocument.h | 79 +- .../WebCore/generated/JSDocumentFragment.cpp | 6 +- .../webkit/WebCore/generated/JSDocumentType.cpp | 6 +- .../webkit/WebCore/generated/JSDocumentType.h | 3 +- .../webkit/WebCore/generated/JSElement.cpp | 849 +- src/3rdparty/webkit/WebCore/generated/JSElement.h | 79 +- src/3rdparty/webkit/WebCore/generated/JSEntity.cpp | 6 +- .../webkit/WebCore/generated/JSEntityReference.cpp | 6 +- src/3rdparty/webkit/WebCore/generated/JSEvent.cpp | 5 +- .../webkit/WebCore/generated/JSEventException.cpp | 5 +- src/3rdparty/webkit/WebCore/generated/JSFile.cpp | 5 +- .../webkit/WebCore/generated/JSFileList.cpp | 7 +- .../webkit/WebCore/generated/JSGeolocation.cpp | 5 +- .../webkit/WebCore/generated/JSGeoposition.cpp | 5 +- .../WebCore/generated/JSHTMLAnchorElement.cpp | 6 +- .../WebCore/generated/JSHTMLAppletElement.cpp | 10 +- .../webkit/WebCore/generated/JSHTMLAppletElement.h | 4 +- .../webkit/WebCore/generated/JSHTMLAreaElement.cpp | 6 +- .../WebCore/generated/JSHTMLAudioElement.cpp | 6 +- .../webkit/WebCore/generated/JSHTMLAudioElement.h | 1 - .../webkit/WebCore/generated/JSHTMLBRElement.cpp | 6 +- .../webkit/WebCore/generated/JSHTMLBaseElement.cpp | 6 +- .../WebCore/generated/JSHTMLBaseFontElement.cpp | 5 +- .../WebCore/generated/JSHTMLBlockquoteElement.cpp | 6 +- .../webkit/WebCore/generated/JSHTMLBodyElement.cpp | 170 +- .../webkit/WebCore/generated/JSHTMLBodyElement.h | 14 + .../WebCore/generated/JSHTMLButtonElement.cpp | 6 +- .../WebCore/generated/JSHTMLCanvasElement.cpp | 5 +- .../webkit/WebCore/generated/JSHTMLCollection.cpp | 7 +- .../webkit/WebCore/generated/JSHTMLCollection.h | 2 +- .../WebCore/generated/JSHTMLDListElement.cpp | 6 +- .../generated/JSHTMLDataGridCellElement.cpp | 212 + .../WebCore/generated/JSHTMLDataGridCellElement.h | 74 + .../WebCore/generated/JSHTMLDataGridColElement.cpp | 211 + .../WebCore/generated/JSHTMLDataGridColElement.h | 74 + .../WebCore/generated/JSHTMLDataGridElement.cpp | 192 + .../WebCore/generated/JSHTMLDataGridElement.h | 76 + .../WebCore/generated/JSHTMLDataGridRowElement.cpp | 181 + .../WebCore/generated/JSHTMLDataGridRowElement.h | 70 + .../WebCore/generated/JSHTMLDirectoryElement.cpp | 6 +- .../webkit/WebCore/generated/JSHTMLDivElement.cpp | 6 +- .../webkit/WebCore/generated/JSHTMLDocument.cpp | 5 +- .../webkit/WebCore/generated/JSHTMLElement.cpp | 26 +- .../webkit/WebCore/generated/JSHTMLElement.h | 3 +- .../generated/JSHTMLElementWrapperFactory.cpp | 32 + .../WebCore/generated/JSHTMLEmbedElement.cpp | 10 +- .../webkit/WebCore/generated/JSHTMLEmbedElement.h | 4 +- .../WebCore/generated/JSHTMLFieldSetElement.cpp | 6 +- .../webkit/WebCore/generated/JSHTMLFontElement.cpp | 6 +- .../webkit/WebCore/generated/JSHTMLFormElement.cpp | 7 +- .../WebCore/generated/JSHTMLFrameElement.cpp | 5 +- .../WebCore/generated/JSHTMLFrameSetElement.cpp | 170 +- .../WebCore/generated/JSHTMLFrameSetElement.h | 14 + .../webkit/WebCore/generated/JSHTMLHRElement.cpp | 6 +- .../webkit/WebCore/generated/JSHTMLHeadElement.cpp | 6 +- .../WebCore/generated/JSHTMLHeadingElement.cpp | 6 +- .../webkit/WebCore/generated/JSHTMLHtmlElement.cpp | 6 +- .../WebCore/generated/JSHTMLIFrameElement.cpp | 6 +- .../WebCore/generated/JSHTMLImageElement.cpp | 38 +- .../WebCore/generated/JSHTMLInputElement.cpp | 5 +- .../WebCore/generated/JSHTMLIsIndexElement.cpp | 6 +- .../webkit/WebCore/generated/JSHTMLLIElement.cpp | 5 +- .../WebCore/generated/JSHTMLLabelElement.cpp | 6 +- .../WebCore/generated/JSHTMLLegendElement.cpp | 6 +- .../webkit/WebCore/generated/JSHTMLLinkElement.cpp | 6 +- .../webkit/WebCore/generated/JSHTMLMapElement.cpp | 6 +- .../WebCore/generated/JSHTMLMarqueeElement.cpp | 6 +- .../WebCore/generated/JSHTMLMediaElement.cpp | 23 +- .../webkit/WebCore/generated/JSHTMLMediaElement.h | 3 +- .../webkit/WebCore/generated/JSHTMLMenuElement.cpp | 6 +- .../webkit/WebCore/generated/JSHTMLMetaElement.cpp | 6 +- .../webkit/WebCore/generated/JSHTMLModElement.cpp | 6 +- .../WebCore/generated/JSHTMLOListElement.cpp | 5 +- .../WebCore/generated/JSHTMLObjectElement.cpp | 9 +- .../webkit/WebCore/generated/JSHTMLObjectElement.h | 4 +- .../WebCore/generated/JSHTMLOptGroupElement.cpp | 6 +- .../WebCore/generated/JSHTMLOptionElement.cpp | 5 +- .../webkit/WebCore/generated/JSHTMLOptionElement.h | 3 +- .../WebCore/generated/JSHTMLOptionsCollection.cpp | 5 +- .../WebCore/generated/JSHTMLOptionsCollection.h | 3 +- .../WebCore/generated/JSHTMLParagraphElement.cpp | 6 +- .../WebCore/generated/JSHTMLParamElement.cpp | 6 +- .../webkit/WebCore/generated/JSHTMLPreElement.cpp | 5 +- .../WebCore/generated/JSHTMLQuoteElement.cpp | 6 +- .../WebCore/generated/JSHTMLScriptElement.cpp | 6 +- .../WebCore/generated/JSHTMLSelectElement.cpp | 7 +- .../WebCore/generated/JSHTMLSourceElement.cpp | 6 +- .../webkit/WebCore/generated/JSHTMLSourceElement.h | 1 - .../WebCore/generated/JSHTMLStyleElement.cpp | 6 +- .../generated/JSHTMLTableCaptionElement.cpp | 6 +- .../WebCore/generated/JSHTMLTableCaptionElement.h | 3 +- .../WebCore/generated/JSHTMLTableCellElement.cpp | 5 +- .../WebCore/generated/JSHTMLTableColElement.cpp | 5 +- .../WebCore/generated/JSHTMLTableElement.cpp | 6 +- .../WebCore/generated/JSHTMLTableRowElement.cpp | 5 +- .../generated/JSHTMLTableSectionElement.cpp | 6 +- .../WebCore/generated/JSHTMLTableSectionElement.h | 3 +- .../WebCore/generated/JSHTMLTextAreaElement.cpp | 5 +- .../WebCore/generated/JSHTMLTitleElement.cpp | 6 +- .../WebCore/generated/JSHTMLUListElement.cpp | 6 +- .../WebCore/generated/JSHTMLVideoElement.cpp | 5 +- .../webkit/WebCore/generated/JSHTMLVideoElement.h | 1 - .../webkit/WebCore/generated/JSHistory.cpp | 16 +- src/3rdparty/webkit/WebCore/generated/JSHistory.h | 5 +- .../webkit/WebCore/generated/JSImageData.cpp | 5 +- .../WebCore/generated/JSInspectorController.cpp | 10 +- .../WebCore/generated/JSJavaScriptCallFrame.cpp | 5 +- .../WebCore/generated/JSJavaScriptCallFrame.h | 1 - .../webkit/WebCore/generated/JSKeyboardEvent.cpp | 5 +- .../webkit/WebCore/generated/JSLocation.cpp | 18 +- src/3rdparty/webkit/WebCore/generated/JSLocation.h | 7 +- .../webkit/WebCore/generated/JSMediaError.cpp | 5 +- .../webkit/WebCore/generated/JSMediaError.h | 1 - .../webkit/WebCore/generated/JSMediaList.cpp | 7 +- .../webkit/WebCore/generated/JSMessageChannel.cpp | 5 +- .../webkit/WebCore/generated/JSMessageEvent.cpp | 6 +- .../webkit/WebCore/generated/JSMessagePort.cpp | 58 +- .../webkit/WebCore/generated/JSMessagePort.h | 5 - .../webkit/WebCore/generated/JSMimeType.cpp | 6 +- .../webkit/WebCore/generated/JSMimeTypeArray.cpp | 7 +- .../webkit/WebCore/generated/JSMouseEvent.cpp | 5 +- .../webkit/WebCore/generated/JSMutationEvent.cpp | 5 +- .../webkit/WebCore/generated/JSNamedNodeMap.cpp | 7 +- .../webkit/WebCore/generated/JSNavigator.cpp | 5 +- src/3rdparty/webkit/WebCore/generated/JSNode.cpp | 893 +- src/3rdparty/webkit/WebCore/generated/JSNode.h | 82 +- .../webkit/WebCore/generated/JSNodeFilter.cpp | 6 +- .../webkit/WebCore/generated/JSNodeIterator.cpp | 5 +- .../webkit/WebCore/generated/JSNodeList.cpp | 7 +- src/3rdparty/webkit/WebCore/generated/JSNodeList.h | 2 +- .../webkit/WebCore/generated/JSNotation.cpp | 6 +- .../webkit/WebCore/generated/JSONObject.lut.h | 15 + .../webkit/WebCore/generated/JSOverflowEvent.cpp | 5 +- src/3rdparty/webkit/WebCore/generated/JSPlugin.cpp | 7 +- .../webkit/WebCore/generated/JSPluginArray.cpp | 7 +- .../webkit/WebCore/generated/JSPositionError.cpp | 5 +- .../WebCore/generated/JSProcessingInstruction.cpp | 6 +- .../webkit/WebCore/generated/JSProgressEvent.cpp | 5 +- src/3rdparty/webkit/WebCore/generated/JSRange.cpp | 5 +- .../webkit/WebCore/generated/JSRangeException.cpp | 5 +- src/3rdparty/webkit/WebCore/generated/JSRect.cpp | 6 +- .../webkit/WebCore/generated/JSSQLError.cpp | 5 +- src/3rdparty/webkit/WebCore/generated/JSSQLError.h | 1 - .../webkit/WebCore/generated/JSSQLResultSet.cpp | 5 +- .../webkit/WebCore/generated/JSSQLResultSet.h | 1 - .../WebCore/generated/JSSQLResultSetRowList.cpp | 5 +- .../WebCore/generated/JSSQLResultSetRowList.h | 1 - .../webkit/WebCore/generated/JSSQLTransaction.cpp | 5 +- .../webkit/WebCore/generated/JSSQLTransaction.h | 1 - .../webkit/WebCore/generated/JSSVGAElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGAElement.h | 2 +- .../WebCore/generated/JSSVGAltGlyphElement.cpp | 6 +- .../WebCore/generated/JSSVGAltGlyphElement.h | 2 +- .../webkit/WebCore/generated/JSSVGAngle.cpp | 6 +- src/3rdparty/webkit/WebCore/generated/JSSVGAngle.h | 2 +- .../WebCore/generated/JSSVGAnimateColorElement.cpp | 6 +- .../WebCore/generated/JSSVGAnimateColorElement.h | 2 +- .../WebCore/generated/JSSVGAnimateElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGAnimateElement.h | 2 +- .../generated/JSSVGAnimateTransformElement.cpp | 6 +- .../generated/JSSVGAnimateTransformElement.h | 2 +- .../WebCore/generated/JSSVGAnimatedAngle.cpp | 6 +- .../webkit/WebCore/generated/JSSVGAnimatedAngle.h | 2 +- .../WebCore/generated/JSSVGAnimatedBoolean.cpp | 4 - .../WebCore/generated/JSSVGAnimatedBoolean.h | 2 +- .../WebCore/generated/JSSVGAnimatedEnumeration.cpp | 6 +- .../WebCore/generated/JSSVGAnimatedEnumeration.h | 2 +- .../WebCore/generated/JSSVGAnimatedInteger.cpp | 6 +- .../WebCore/generated/JSSVGAnimatedInteger.h | 2 +- .../WebCore/generated/JSSVGAnimatedLength.cpp | 6 +- .../webkit/WebCore/generated/JSSVGAnimatedLength.h | 2 +- .../WebCore/generated/JSSVGAnimatedLengthList.cpp | 6 +- .../WebCore/generated/JSSVGAnimatedLengthList.h | 2 +- .../WebCore/generated/JSSVGAnimatedNumber.cpp | 6 +- .../webkit/WebCore/generated/JSSVGAnimatedNumber.h | 2 +- .../WebCore/generated/JSSVGAnimatedNumberList.cpp | 6 +- .../WebCore/generated/JSSVGAnimatedNumberList.h | 2 +- .../generated/JSSVGAnimatedPreserveAspectRatio.cpp | 6 +- .../generated/JSSVGAnimatedPreserveAspectRatio.h | 2 +- .../webkit/WebCore/generated/JSSVGAnimatedRect.cpp | 6 +- .../webkit/WebCore/generated/JSSVGAnimatedRect.h | 2 +- .../WebCore/generated/JSSVGAnimatedString.cpp | 6 +- .../webkit/WebCore/generated/JSSVGAnimatedString.h | 2 +- .../generated/JSSVGAnimatedTransformList.cpp | 6 +- .../WebCore/generated/JSSVGAnimatedTransformList.h | 2 +- .../WebCore/generated/JSSVGAnimationElement.cpp | 6 +- .../WebCore/generated/JSSVGAnimationElement.h | 2 +- .../WebCore/generated/JSSVGCircleElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGCircleElement.h | 2 +- .../WebCore/generated/JSSVGClipPathElement.cpp | 6 +- .../WebCore/generated/JSSVGClipPathElement.h | 2 +- .../webkit/WebCore/generated/JSSVGColor.cpp | 6 +- src/3rdparty/webkit/WebCore/generated/JSSVGColor.h | 2 +- .../JSSVGComponentTransferFunctionElement.cpp | 7 +- .../JSSVGComponentTransferFunctionElement.h | 2 +- .../WebCore/generated/JSSVGCursorElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGCursorElement.h | 2 +- .../generated/JSSVGDefinitionSrcElement.cpp | 6 +- .../WebCore/generated/JSSVGDefinitionSrcElement.h | 2 +- .../webkit/WebCore/generated/JSSVGDefsElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGDefsElement.h | 2 +- .../webkit/WebCore/generated/JSSVGDescElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGDescElement.h | 2 +- .../webkit/WebCore/generated/JSSVGDocument.cpp | 6 +- .../webkit/WebCore/generated/JSSVGDocument.h | 2 +- .../webkit/WebCore/generated/JSSVGElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGElement.h | 2 +- .../WebCore/generated/JSSVGElementInstance.cpp | 6 +- .../WebCore/generated/JSSVGElementInstance.h | 2 +- .../WebCore/generated/JSSVGElementInstanceList.cpp | 6 +- .../WebCore/generated/JSSVGElementInstanceList.h | 2 +- .../WebCore/generated/JSSVGEllipseElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGEllipseElement.h | 2 +- .../webkit/WebCore/generated/JSSVGException.cpp | 6 +- .../webkit/WebCore/generated/JSSVGException.h | 2 +- .../WebCore/generated/JSSVGFEBlendElement.cpp | 7 +- .../webkit/WebCore/generated/JSSVGFEBlendElement.h | 2 +- .../generated/JSSVGFEColorMatrixElement.cpp | 7 +- .../WebCore/generated/JSSVGFEColorMatrixElement.h | 2 +- .../generated/JSSVGFEComponentTransferElement.cpp | 6 +- .../generated/JSSVGFEComponentTransferElement.h | 2 +- .../WebCore/generated/JSSVGFECompositeElement.cpp | 7 +- .../WebCore/generated/JSSVGFECompositeElement.h | 2 +- .../generated/JSSVGFEDiffuseLightingElement.cpp | 6 +- .../generated/JSSVGFEDiffuseLightingElement.h | 2 +- .../generated/JSSVGFEDisplacementMapElement.cpp | 7 +- .../generated/JSSVGFEDisplacementMapElement.h | 2 +- .../generated/JSSVGFEDistantLightElement.cpp | 6 +- .../WebCore/generated/JSSVGFEDistantLightElement.h | 2 +- .../WebCore/generated/JSSVGFEFloodElement.cpp | 7 +- .../webkit/WebCore/generated/JSSVGFEFloodElement.h | 2 +- .../WebCore/generated/JSSVGFEFuncAElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGFEFuncAElement.h | 2 +- .../WebCore/generated/JSSVGFEFuncBElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGFEFuncBElement.h | 2 +- .../WebCore/generated/JSSVGFEFuncGElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGFEFuncGElement.h | 2 +- .../WebCore/generated/JSSVGFEFuncRElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGFEFuncRElement.h | 2 +- .../generated/JSSVGFEGaussianBlurElement.cpp | 6 +- .../WebCore/generated/JSSVGFEGaussianBlurElement.h | 2 +- .../WebCore/generated/JSSVGFEImageElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGFEImageElement.h | 2 +- .../WebCore/generated/JSSVGFEMergeElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGFEMergeElement.h | 2 +- .../WebCore/generated/JSSVGFEMergeNodeElement.cpp | 6 +- .../WebCore/generated/JSSVGFEMergeNodeElement.h | 2 +- .../WebCore/generated/JSSVGFEOffsetElement.cpp | 6 +- .../WebCore/generated/JSSVGFEOffsetElement.h | 2 +- .../WebCore/generated/JSSVGFEPointLightElement.cpp | 6 +- .../WebCore/generated/JSSVGFEPointLightElement.h | 2 +- .../generated/JSSVGFESpecularLightingElement.cpp | 6 +- .../generated/JSSVGFESpecularLightingElement.h | 2 +- .../WebCore/generated/JSSVGFESpotLightElement.cpp | 6 +- .../WebCore/generated/JSSVGFESpotLightElement.h | 2 +- .../WebCore/generated/JSSVGFETileElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGFETileElement.h | 2 +- .../WebCore/generated/JSSVGFETurbulenceElement.cpp | 7 +- .../WebCore/generated/JSSVGFETurbulenceElement.h | 2 +- .../WebCore/generated/JSSVGFilterElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGFilterElement.h | 2 +- .../webkit/WebCore/generated/JSSVGFontElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGFontElement.h | 2 +- .../WebCore/generated/JSSVGFontFaceElement.cpp | 6 +- .../WebCore/generated/JSSVGFontFaceElement.h | 2 +- .../generated/JSSVGFontFaceFormatElement.cpp | 6 +- .../WebCore/generated/JSSVGFontFaceFormatElement.h | 2 +- .../WebCore/generated/JSSVGFontFaceNameElement.cpp | 6 +- .../WebCore/generated/JSSVGFontFaceNameElement.h | 2 +- .../WebCore/generated/JSSVGFontFaceSrcElement.cpp | 6 +- .../WebCore/generated/JSSVGFontFaceSrcElement.h | 2 +- .../WebCore/generated/JSSVGFontFaceUriElement.cpp | 6 +- .../WebCore/generated/JSSVGFontFaceUriElement.h | 2 +- .../generated/JSSVGForeignObjectElement.cpp | 6 +- .../WebCore/generated/JSSVGForeignObjectElement.h | 2 +- .../webkit/WebCore/generated/JSSVGGElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGGElement.h | 2 +- .../webkit/WebCore/generated/JSSVGGlyphElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGGlyphElement.h | 2 +- .../WebCore/generated/JSSVGGradientElement.cpp | 7 +- .../WebCore/generated/JSSVGGradientElement.h | 2 +- .../webkit/WebCore/generated/JSSVGHKernElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGHKernElement.h | 2 +- .../webkit/WebCore/generated/JSSVGImageElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGImageElement.h | 2 +- .../webkit/WebCore/generated/JSSVGLength.cpp | 6 +- .../webkit/WebCore/generated/JSSVGLength.h | 6 +- .../webkit/WebCore/generated/JSSVGLengthList.cpp | 6 +- .../webkit/WebCore/generated/JSSVGLengthList.h | 2 +- .../webkit/WebCore/generated/JSSVGLineElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGLineElement.h | 2 +- .../generated/JSSVGLinearGradientElement.cpp | 6 +- .../WebCore/generated/JSSVGLinearGradientElement.h | 2 +- .../WebCore/generated/JSSVGMarkerElement.cpp | 7 +- .../webkit/WebCore/generated/JSSVGMarkerElement.h | 2 +- .../webkit/WebCore/generated/JSSVGMaskElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGMaskElement.h | 2 +- .../webkit/WebCore/generated/JSSVGMatrix.cpp | 6 +- .../webkit/WebCore/generated/JSSVGMatrix.h | 6 +- .../WebCore/generated/JSSVGMetadataElement.cpp | 6 +- .../WebCore/generated/JSSVGMetadataElement.h | 2 +- .../WebCore/generated/JSSVGMissingGlyphElement.cpp | 6 +- .../WebCore/generated/JSSVGMissingGlyphElement.h | 2 +- .../webkit/WebCore/generated/JSSVGNumber.cpp | 6 +- .../webkit/WebCore/generated/JSSVGNumber.h | 4 +- .../webkit/WebCore/generated/JSSVGNumberList.cpp | 6 +- .../webkit/WebCore/generated/JSSVGNumberList.h | 2 +- .../webkit/WebCore/generated/JSSVGPaint.cpp | 6 +- src/3rdparty/webkit/WebCore/generated/JSSVGPaint.h | 2 +- .../webkit/WebCore/generated/JSSVGPathElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGPathElement.h | 2 +- .../webkit/WebCore/generated/JSSVGPathSeg.cpp | 6 +- .../webkit/WebCore/generated/JSSVGPathSeg.h | 2 +- .../WebCore/generated/JSSVGPathSegArcAbs.cpp | 6 +- .../webkit/WebCore/generated/JSSVGPathSegArcAbs.h | 2 +- .../WebCore/generated/JSSVGPathSegArcRel.cpp | 6 +- .../webkit/WebCore/generated/JSSVGPathSegArcRel.h | 2 +- .../WebCore/generated/JSSVGPathSegClosePath.cpp | 6 +- .../WebCore/generated/JSSVGPathSegClosePath.h | 2 +- .../generated/JSSVGPathSegCurvetoCubicAbs.cpp | 6 +- .../generated/JSSVGPathSegCurvetoCubicAbs.h | 2 +- .../generated/JSSVGPathSegCurvetoCubicRel.cpp | 6 +- .../generated/JSSVGPathSegCurvetoCubicRel.h | 2 +- .../JSSVGPathSegCurvetoCubicSmoothAbs.cpp | 6 +- .../generated/JSSVGPathSegCurvetoCubicSmoothAbs.h | 2 +- .../JSSVGPathSegCurvetoCubicSmoothRel.cpp | 6 +- .../generated/JSSVGPathSegCurvetoCubicSmoothRel.h | 2 +- .../generated/JSSVGPathSegCurvetoQuadraticAbs.cpp | 6 +- .../generated/JSSVGPathSegCurvetoQuadraticAbs.h | 2 +- .../generated/JSSVGPathSegCurvetoQuadraticRel.cpp | 6 +- .../generated/JSSVGPathSegCurvetoQuadraticRel.h | 2 +- .../JSSVGPathSegCurvetoQuadraticSmoothAbs.cpp | 6 +- .../JSSVGPathSegCurvetoQuadraticSmoothAbs.h | 2 +- .../JSSVGPathSegCurvetoQuadraticSmoothRel.cpp | 6 +- .../JSSVGPathSegCurvetoQuadraticSmoothRel.h | 2 +- .../WebCore/generated/JSSVGPathSegLinetoAbs.cpp | 6 +- .../WebCore/generated/JSSVGPathSegLinetoAbs.h | 2 +- .../generated/JSSVGPathSegLinetoHorizontalAbs.cpp | 6 +- .../generated/JSSVGPathSegLinetoHorizontalAbs.h | 2 +- .../generated/JSSVGPathSegLinetoHorizontalRel.cpp | 6 +- .../generated/JSSVGPathSegLinetoHorizontalRel.h | 2 +- .../WebCore/generated/JSSVGPathSegLinetoRel.cpp | 6 +- .../WebCore/generated/JSSVGPathSegLinetoRel.h | 2 +- .../generated/JSSVGPathSegLinetoVerticalAbs.cpp | 6 +- .../generated/JSSVGPathSegLinetoVerticalAbs.h | 2 +- .../generated/JSSVGPathSegLinetoVerticalRel.cpp | 6 +- .../generated/JSSVGPathSegLinetoVerticalRel.h | 2 +- .../webkit/WebCore/generated/JSSVGPathSegList.cpp | 6 +- .../webkit/WebCore/generated/JSSVGPathSegList.h | 2 +- .../WebCore/generated/JSSVGPathSegMovetoAbs.cpp | 6 +- .../WebCore/generated/JSSVGPathSegMovetoAbs.h | 2 +- .../WebCore/generated/JSSVGPathSegMovetoRel.cpp | 6 +- .../WebCore/generated/JSSVGPathSegMovetoRel.h | 2 +- .../WebCore/generated/JSSVGPatternElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGPatternElement.h | 2 +- .../webkit/WebCore/generated/JSSVGPoint.cpp | 6 +- src/3rdparty/webkit/WebCore/generated/JSSVGPoint.h | 6 +- .../webkit/WebCore/generated/JSSVGPointList.cpp | 6 +- .../webkit/WebCore/generated/JSSVGPointList.h | 2 +- .../WebCore/generated/JSSVGPolygonElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGPolygonElement.h | 2 +- .../WebCore/generated/JSSVGPolylineElement.cpp | 6 +- .../WebCore/generated/JSSVGPolylineElement.h | 2 +- .../WebCore/generated/JSSVGPreserveAspectRatio.cpp | 6 +- .../WebCore/generated/JSSVGPreserveAspectRatio.h | 2 +- .../generated/JSSVGRadialGradientElement.cpp | 6 +- .../WebCore/generated/JSSVGRadialGradientElement.h | 2 +- .../webkit/WebCore/generated/JSSVGRect.cpp | 6 +- src/3rdparty/webkit/WebCore/generated/JSSVGRect.h | 6 +- .../webkit/WebCore/generated/JSSVGRectElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGRectElement.h | 2 +- .../WebCore/generated/JSSVGRenderingIntent.cpp | 7 +- .../WebCore/generated/JSSVGRenderingIntent.h | 2 +- .../webkit/WebCore/generated/JSSVGSVGElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGSVGElement.h | 2 +- .../WebCore/generated/JSSVGScriptElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGScriptElement.h | 2 +- .../webkit/WebCore/generated/JSSVGSetElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGSetElement.h | 2 +- .../webkit/WebCore/generated/JSSVGStopElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGStopElement.h | 2 +- .../webkit/WebCore/generated/JSSVGStringList.cpp | 6 +- .../webkit/WebCore/generated/JSSVGStringList.h | 2 +- .../webkit/WebCore/generated/JSSVGStyleElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGStyleElement.h | 2 +- .../WebCore/generated/JSSVGSwitchElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGSwitchElement.h | 2 +- .../WebCore/generated/JSSVGSymbolElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGSymbolElement.h | 2 +- .../webkit/WebCore/generated/JSSVGTRefElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGTRefElement.h | 2 +- .../webkit/WebCore/generated/JSSVGTSpanElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGTSpanElement.h | 2 +- .../WebCore/generated/JSSVGTextContentElement.cpp | 6 +- .../WebCore/generated/JSSVGTextContentElement.h | 2 +- .../webkit/WebCore/generated/JSSVGTextElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGTextElement.h | 2 +- .../WebCore/generated/JSSVGTextPathElement.cpp | 7 +- .../WebCore/generated/JSSVGTextPathElement.h | 2 +- .../generated/JSSVGTextPositioningElement.cpp | 6 +- .../generated/JSSVGTextPositioningElement.h | 2 +- .../webkit/WebCore/generated/JSSVGTitleElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGTitleElement.h | 2 +- .../webkit/WebCore/generated/JSSVGTransform.cpp | 6 +- .../webkit/WebCore/generated/JSSVGTransform.h | 6 +- .../WebCore/generated/JSSVGTransformList.cpp | 6 +- .../webkit/WebCore/generated/JSSVGTransformList.h | 2 +- .../webkit/WebCore/generated/JSSVGUnitTypes.cpp | 7 +- .../webkit/WebCore/generated/JSSVGUnitTypes.h | 2 +- .../webkit/WebCore/generated/JSSVGUseElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGUseElement.h | 2 +- .../webkit/WebCore/generated/JSSVGViewElement.cpp | 6 +- .../webkit/WebCore/generated/JSSVGViewElement.h | 2 +- .../webkit/WebCore/generated/JSSVGZoomEvent.cpp | 6 +- .../webkit/WebCore/generated/JSSVGZoomEvent.h | 2 +- src/3rdparty/webkit/WebCore/generated/JSScreen.cpp | 5 +- .../webkit/WebCore/generated/JSStorage.cpp | 17 +- src/3rdparty/webkit/WebCore/generated/JSStorage.h | 7 +- .../webkit/WebCore/generated/JSStorageEvent.cpp | 9 +- .../webkit/WebCore/generated/JSStorageEvent.h | 4 + .../webkit/WebCore/generated/JSStyleSheet.cpp | 6 +- .../webkit/WebCore/generated/JSStyleSheetList.cpp | 7 +- src/3rdparty/webkit/WebCore/generated/JSText.cpp | 6 +- .../webkit/WebCore/generated/JSTextEvent.cpp | 6 +- .../webkit/WebCore/generated/JSTextMetrics.cpp | 5 +- .../webkit/WebCore/generated/JSTimeRanges.cpp | 5 +- .../webkit/WebCore/generated/JSTreeWalker.cpp | 5 +- .../webkit/WebCore/generated/JSUIEvent.cpp | 5 +- .../webkit/WebCore/generated/JSVoidCallback.cpp | 5 +- .../WebCore/generated/JSWebKitAnimationEvent.cpp | 5 +- .../WebCore/generated/JSWebKitCSSKeyframeRule.cpp | 6 +- .../WebCore/generated/JSWebKitCSSKeyframesRule.cpp | 8 +- .../webkit/WebCore/generated/JSWebKitCSSMatrix.cpp | 5 +- .../generated/JSWebKitCSSTransformValue.cpp | 5 +- .../webkit/WebCore/generated/JSWebKitPoint.cpp | 5 +- .../WebCore/generated/JSWebKitTransitionEvent.cpp | 5 +- .../webkit/WebCore/generated/JSWheelEvent.cpp | 5 +- src/3rdparty/webkit/WebCore/generated/JSWorker.cpp | 5 +- src/3rdparty/webkit/WebCore/generated/JSWorker.h | 1 - .../webkit/WebCore/generated/JSWorkerContext.cpp | 7 +- .../webkit/WebCore/generated/JSWorkerContext.h | 3 +- .../webkit/WebCore/generated/JSWorkerLocation.cpp | 6 +- .../webkit/WebCore/generated/JSWorkerLocation.h | 1 - .../webkit/WebCore/generated/JSWorkerNavigator.cpp | 5 +- .../webkit/WebCore/generated/JSWorkerNavigator.h | 1 - .../webkit/WebCore/generated/JSXMLHttpRequest.cpp | 5 +- .../generated/JSXMLHttpRequestException.cpp | 5 +- .../generated/JSXMLHttpRequestProgressEvent.cpp | 5 +- .../WebCore/generated/JSXMLHttpRequestUpload.cpp | 6 +- .../webkit/WebCore/generated/JSXMLSerializer.cpp | 6 +- .../webkit/WebCore/generated/JSXPathEvaluator.cpp | 6 +- .../webkit/WebCore/generated/JSXPathEvaluator.h | 1 - .../webkit/WebCore/generated/JSXPathException.cpp | 5 +- .../webkit/WebCore/generated/JSXPathException.h | 1 - .../webkit/WebCore/generated/JSXPathExpression.cpp | 6 +- .../webkit/WebCore/generated/JSXPathExpression.h | 1 - .../webkit/WebCore/generated/JSXPathNSResolver.cpp | 5 +- .../webkit/WebCore/generated/JSXPathNSResolver.h | 1 - .../webkit/WebCore/generated/JSXPathResult.cpp | 5 +- .../webkit/WebCore/generated/JSXPathResult.h | 1 - .../WebCore/generated/UserAgentStyleSheets.h | 4 +- .../WebCore/generated/UserAgentStyleSheetsData.cpp | 909 +- .../webkit/WebCore/generated/XPathGrammar.cpp | 418 +- .../webkit/WebCore/generated/XPathGrammar.h | 64 +- .../webkit/WebCore/history/HistoryItem.cpp | 15 + src/3rdparty/webkit/WebCore/history/HistoryItem.h | 3 + .../WebCore/html/CanvasRenderingContext2D.cpp | 87 +- .../webkit/WebCore/html/CanvasRenderingContext2D.h | 8 +- .../webkit/WebCore/html/DataGridDataSource.h | 46 + .../webkit/WebCore/html/HTMLAppletElement.idl | 4 +- .../webkit/WebCore/html/HTMLAttributeNames.in | 27 + .../webkit/WebCore/html/HTMLBodyElement.cpp | 110 + src/3rdparty/webkit/WebCore/html/HTMLBodyElement.h | 28 +- .../webkit/WebCore/html/HTMLBodyElement.idl | 31 +- .../WebCore/html/HTMLDataGridCellElement.cpp | 92 + .../webkit/WebCore/html/HTMLDataGridCellElement.h | 59 + .../WebCore/html/HTMLDataGridCellElement.idl | 39 + .../webkit/WebCore/html/HTMLDataGridColElement.cpp | 92 + .../webkit/WebCore/html/HTMLDataGridColElement.h | 59 + .../webkit/WebCore/html/HTMLDataGridColElement.idl | 38 + .../webkit/WebCore/html/HTMLDataGridElement.cpp | 103 + .../webkit/WebCore/html/HTMLDataGridElement.h | 66 + .../webkit/WebCore/html/HTMLDataGridElement.idl | 38 + .../webkit/WebCore/html/HTMLDataGridRowElement.cpp | 78 + .../webkit/WebCore/html/HTMLDataGridRowElement.h | 54 + .../webkit/WebCore/html/HTMLDataGridRowElement.idl | 35 + src/3rdparty/webkit/WebCore/html/HTMLElement.cpp | 3 + src/3rdparty/webkit/WebCore/html/HTMLElement.idl | 12 +- .../webkit/WebCore/html/HTMLElementsAllInOne.cpp | 4 + .../webkit/WebCore/html/HTMLEmbedElement.idl | 4 +- .../webkit/WebCore/html/HTMLFormControlElement.cpp | 4 +- .../webkit/WebCore/html/HTMLFrameSetElement.cpp | 134 +- .../webkit/WebCore/html/HTMLFrameSetElement.h | 37 +- .../webkit/WebCore/html/HTMLFrameSetElement.idl | 29 +- .../webkit/WebCore/html/HTMLImageElement.idl | 18 +- .../webkit/WebCore/html/HTMLInputElement.cpp | 8 +- .../webkit/WebCore/html/HTMLMediaElement.cpp | 143 +- .../webkit/WebCore/html/HTMLMediaElement.h | 17 +- .../webkit/WebCore/html/HTMLMediaElement.idl | 3 + .../webkit/WebCore/html/HTMLObjectElement.idl | 4 +- src/3rdparty/webkit/WebCore/html/HTMLParser.cpp | 1 + .../webkit/WebCore/html/HTMLTableColElement.cpp | 9 +- src/3rdparty/webkit/WebCore/html/HTMLTagNames.in | 4 + src/3rdparty/webkit/WebCore/html/HTMLTokenizer.cpp | 72 +- src/3rdparty/webkit/WebCore/html/HTMLTokenizer.h | 4 +- .../webkit/WebCore/html/HTMLVideoElement.cpp | 14 +- .../webkit/WebCore/html/HTMLVideoElement.h | 5 +- .../webkit/WebCore/inspector/ConsoleMessage.cpp | 4 +- .../WebCore/inspector/InspectorController.cpp | 73 +- .../webkit/WebCore/inspector/InspectorController.h | 12 +- .../WebCore/inspector/InspectorController.idl | 4 +- .../inspector/InspectorDOMStorageResource.cpp | 4 +- .../inspector/InspectorDatabaseResource.cpp | 4 +- .../webkit/WebCore/inspector/InspectorFrontend.cpp | 18 +- .../webkit/WebCore/inspector/InspectorFrontend.h | 14 +- .../WebCore/inspector/InspectorJSONObject.cpp | 95 + .../webkit/WebCore/inspector/InspectorJSONObject.h | 60 + .../webkit/WebCore/inspector/InspectorResource.cpp | 14 +- .../webkit/WebCore/inspector/JSONObject.cpp | 95 - src/3rdparty/webkit/WebCore/inspector/JSONObject.h | 60 - .../webkit/WebCore/inspector/front-end/Console.js | 74 +- .../inspector/front-end/DatabaseQueryView.js | 4 +- .../front-end/Images/resourcesSilhouette.png | Bin 0 -> 42925 bytes .../inspector/front-end/ObjectPropertiesSection.js | 11 +- .../WebCore/inspector/front-end/ProfilesPanel.js | 6 +- .../WebCore/inspector/front-end/ScriptsPanel.js | 29 +- .../WebCore/inspector/front-end/TextPrompt.js | 13 +- .../WebCore/inspector/front-end/inspector.css | 10 +- .../webkit/WebCore/loader/CachedCSSStyleSheet.cpp | 4 +- .../webkit/WebCore/loader/CachedCSSStyleSheet.h | 2 +- src/3rdparty/webkit/WebCore/loader/CachedFont.cpp | 4 +- src/3rdparty/webkit/WebCore/loader/CachedFont.h | 2 +- src/3rdparty/webkit/WebCore/loader/CachedImage.cpp | 4 +- src/3rdparty/webkit/WebCore/loader/CachedImage.h | 2 +- .../webkit/WebCore/loader/CachedResource.cpp | 55 +- .../webkit/WebCore/loader/CachedResource.h | 7 +- .../webkit/WebCore/loader/CachedScript.cpp | 3 +- src/3rdparty/webkit/WebCore/loader/CachedScript.h | 2 +- .../webkit/WebCore/loader/CachedXSLStyleSheet.cpp | 6 +- .../webkit/WebCore/loader/CachedXSLStyleSheet.h | 2 +- src/3rdparty/webkit/WebCore/loader/DocLoader.cpp | 3 + .../webkit/WebCore/loader/DocumentLoader.cpp | 2 +- .../WebCore/loader/DocumentThreadableLoader.cpp | 11 +- .../WebCore/loader/DocumentThreadableLoader.h | 5 +- src/3rdparty/webkit/WebCore/loader/EmptyClients.h | 6 + src/3rdparty/webkit/WebCore/loader/FrameLoader.cpp | 97 +- src/3rdparty/webkit/WebCore/loader/FrameLoader.h | 7 - .../webkit/WebCore/loader/TextResourceDecoder.cpp | 6 +- .../webkit/WebCore/loader/ThreadableLoader.cpp | 8 +- .../webkit/WebCore/loader/ThreadableLoader.h | 7 +- .../WebCore/loader/WorkerThreadableLoader.cpp | 50 +- .../webkit/WebCore/loader/WorkerThreadableLoader.h | 18 +- .../WebCore/loader/appcache/ApplicationCache.cpp | 28 +- .../WebCore/loader/appcache/ApplicationCache.h | 9 - .../loader/appcache/ApplicationCacheGroup.cpp | 2 +- .../loader/appcache/ApplicationCacheResource.cpp | 2 - .../loader/appcache/ApplicationCacheResource.h | 3 +- .../loader/appcache/ApplicationCacheStorage.cpp | 3 - .../loader/appcache/DOMApplicationCache.cpp | 60 - .../WebCore/loader/appcache/DOMApplicationCache.h | 6 - .../loader/appcache/DOMApplicationCache.idl | 11 - src/3rdparty/webkit/WebCore/loader/loader.cpp | 47 +- src/3rdparty/webkit/WebCore/loader/loader.h | 28 +- src/3rdparty/webkit/WebCore/page/Console.cpp | 3 + src/3rdparty/webkit/WebCore/page/DOMWindow.cpp | 35 +- src/3rdparty/webkit/WebCore/page/DOMWindow.idl | 9 +- .../webkit/WebCore/page/DragController.cpp | 121 +- src/3rdparty/webkit/WebCore/page/DragController.h | 4 +- src/3rdparty/webkit/WebCore/page/EventHandler.cpp | 9 +- src/3rdparty/webkit/WebCore/page/Frame.cpp | 2 +- src/3rdparty/webkit/WebCore/page/FrameView.cpp | 31 +- src/3rdparty/webkit/WebCore/page/FrameView.h | 1 + src/3rdparty/webkit/WebCore/page/History.idl | 4 +- src/3rdparty/webkit/WebCore/page/Location.idl | 6 +- src/3rdparty/webkit/WebCore/page/Page.cpp | 2 + src/3rdparty/webkit/WebCore/page/Page.h | 7 +- src/3rdparty/webkit/WebCore/page/PageGroup.cpp | 15 +- src/3rdparty/webkit/WebCore/page/PageGroup.h | 4 +- .../webkit/WebCore/page/SecurityOrigin.cpp | 93 +- src/3rdparty/webkit/WebCore/page/SecurityOrigin.h | 7 + src/3rdparty/webkit/WebCore/page/Settings.cpp | 8 +- src/3rdparty/webkit/WebCore/page/Settings.h | 4 + src/3rdparty/webkit/WebCore/page/XSSAuditor.cpp | 158 + src/3rdparty/webkit/WebCore/page/XSSAuditor.h | 102 + .../WebCore/page/animation/CompositeAnimation.cpp | 173 +- .../WebCore/page/animation/ImplicitAnimation.cpp | 1 + .../WebCore/page/animation/ImplicitAnimation.h | 4 + .../webkit/WebCore/page/win/FrameCGWin.cpp | 3 +- .../webkit/WebCore/platform/FileChooser.cpp | 4 + .../webkit/WebCore/platform/KeyboardCodes.h | 4 +- src/3rdparty/webkit/WebCore/platform/Logging.cpp | 4 +- src/3rdparty/webkit/WebCore/platform/Logging.h | 2 +- .../webkit/WebCore/platform/PlatformWheelEvent.h | 1 + .../webkit/WebCore/platform/ScrollView.cpp | 14 +- src/3rdparty/webkit/WebCore/platform/ScrollView.h | 3 +- src/3rdparty/webkit/WebCore/platform/Scrollbar.h | 1 + .../WebCore/platform/android/CursorAndroid.cpp | 295 + .../WebCore/platform/android/DragDataAndroid.cpp | 96 + .../WebCore/platform/android/EventLoopAndroid.cpp | 38 + .../platform/android/FileChooserAndroid.cpp | 61 + .../WebCore/platform/android/FileSystemAndroid.cpp | 131 + .../WebCore/platform/android/KeyEventAndroid.cpp | 273 + .../WebCore/platform/android/KeyboardCodes.h | 545 + .../platform/android/LocalizedStringsAndroid.cpp | 54 + .../WebCore/platform/android/PopupMenuAndroid.cpp | 57 + .../platform/android/RenderThemeAndroid.cpp | 334 + .../WebCore/platform/android/RenderThemeAndroid.h | 109 + .../WebCore/platform/android/ScreenAndroid.cpp | 109 + .../WebCore/platform/android/ScrollViewAndroid.cpp | 105 + .../platform/android/SearchPopupMenuAndroid.cpp | 52 + .../WebCore/platform/android/SystemTimeAndroid.cpp | 37 + .../platform/android/TemporaryLinkStubs.cpp | 682 + .../WebCore/platform/android/WidgetAndroid.cpp | 128 + .../webkit/WebCore/platform/graphics/Color.cpp | 35 + .../webkit/WebCore/platform/graphics/Color.h | 1 + .../webkit/WebCore/platform/graphics/FloatPoint.h | 9 - .../webkit/WebCore/platform/graphics/FloatRect.h | 5 - .../webkit/WebCore/platform/graphics/Font.cpp | 22 +- .../webkit/WebCore/platform/graphics/Font.h | 13 +- .../webkit/WebCore/platform/graphics/FontCache.cpp | 22 +- .../WebCore/platform/graphics/FontFallbackList.cpp | 9 +- .../WebCore/platform/graphics/FontFallbackList.h | 14 +- .../WebCore/platform/graphics/FontFastPath.cpp | 15 +- .../webkit/WebCore/platform/graphics/IntPoint.h | 7 - .../webkit/WebCore/platform/graphics/IntRect.h | 8 - .../webkit/WebCore/platform/graphics/IntSize.h | 7 - .../WebCore/platform/graphics/MediaPlayer.cpp | 32 + .../webkit/WebCore/platform/graphics/MediaPlayer.h | 38 +- .../WebCore/platform/graphics/MediaPlayerPrivate.h | 11 + .../WebCore/platform/graphics/filters/FEBlend.h | 3 +- .../platform/graphics/filters/FEColorMatrix.h | 3 +- .../graphics/filters/FEComponentTransfer.h | 3 +- .../platform/graphics/filters/FEComposite.h | 3 +- .../WebCore/platform/graphics/filters/Filter.h | 14 +- .../platform/graphics/filters/FilterEffect.cpp | 37 + .../platform/graphics/filters/FilterEffect.h | 35 +- .../platform/graphics/filters/SourceAlpha.h | 2 + .../platform/graphics/filters/SourceGraphic.cpp | 18 +- .../platform/graphics/filters/SourceGraphic.h | 4 +- .../platform/graphics/qt/FontFallbackListQt.cpp | 15 +- .../platform/graphics/qt/GraphicsContextQt.cpp | 2 +- .../platform/graphics/qt/ImageDecoderQt.cpp | 12 +- .../WebCore/platform/graphics/qt/ImageDecoderQt.h | 2 +- .../graphics/transforms/TransformationMatrix.h | 4 + .../WebCore/platform/image-decoders/ImageDecoder.h | 193 +- .../image-decoders/cairo/ImageDecoderCairo.cpp | 124 + .../platform/image-decoders/wx/ImageDecoderWx.cpp | 172 + .../webkit/WebCore/platform/mac/LoggingMac.mm | 2 +- .../WebCore/platform/network/HTTPParsers.cpp | 9 + .../webkit/WebCore/platform/network/HTTPParsers.h | 1 + .../platform/network/ResourceResponseBase.cpp | 32 +- .../platform/network/ResourceResponseBase.h | 2 + .../platform/network/qt/QNetworkReplyHandler.cpp | 36 +- .../platform/network/qt/QNetworkReplyHandler.h | 8 +- .../webkit/WebCore/platform/qt/ClipboardQt.cpp | 3 +- .../webkit/WebCore/platform/qt/LoggingQt.cpp | 44 +- .../webkit/WebCore/platform/qt/RenderThemeQt.cpp | 129 +- .../webkit/WebCore/platform/qt/RenderThemeQt.h | 15 +- .../webkit/WebCore/platform/text/BidiResolver.h | 25 + .../webkit/WebCore/platform/text/PlatformString.h | 4 + .../webkit/WebCore/platform/text/String.cpp | 31 + .../webkit/WebCore/platform/text/StringImpl.cpp | 17 +- .../webkit/WebCore/platform/text/StringImpl.h | 2 + .../text/android/TextBreakIteratorInternalICU.cpp | 36 + .../platform/text/symbian/StringImplSymbian.cpp | 53 - .../platform/text/symbian/StringSymbian.cpp | 50 - .../webkit/WebCore/platform/win/SystemTimeWin.cpp | 2 +- src/3rdparty/webkit/WebCore/plugins/PluginDebug.h | 4 +- .../WebCore/plugins/mac/PluginPackageMac.cpp | 8 +- .../webkit/WebCore/plugins/mac/PluginViewMac.cpp | 20 +- .../webkit/WebCore/plugins/qt/PluginPackageQt.cpp | 2 +- .../webkit/WebCore/plugins/win/PluginViewWin.cpp | 17 +- .../webkit/WebCore/rendering/AutoTableLayout.cpp | 4 +- .../webkit/WebCore/rendering/FixedTableLayout.cpp | 1 + .../webkit/WebCore/rendering/InlineTextBox.cpp | 4 +- .../WebCore/rendering/MediaControlElements.cpp | 7 +- .../WebCore/rendering/MediaControlElements.h | 1 + .../webkit/WebCore/rendering/RenderBlock.cpp | 12 +- .../webkit/WebCore/rendering/RenderBlock.h | 15 +- .../webkit/WebCore/rendering/RenderDataGrid.cpp | 110 + .../webkit/WebCore/rendering/RenderDataGrid.h | 59 + .../webkit/WebCore/rendering/RenderLayer.cpp | 73 +- .../webkit/WebCore/rendering/RenderLayer.h | 15 +- .../WebCore/rendering/RenderLayerBacking.cpp | 113 +- .../webkit/WebCore/rendering/RenderLayerBacking.h | 16 +- .../WebCore/rendering/RenderLayerCompositor.cpp | 177 +- .../WebCore/rendering/RenderLayerCompositor.h | 17 +- .../webkit/WebCore/rendering/RenderMedia.cpp | 22 +- .../WebCore/rendering/RenderMediaControls.cpp | 38 +- .../webkit/WebCore/rendering/RenderObject.cpp | 24 +- .../webkit/WebCore/rendering/RenderObject.h | 4 + .../webkit/WebCore/rendering/RenderReplica.cpp | 5 +- .../webkit/WebCore/rendering/RenderScrollbar.h | 1 + .../webkit/WebCore/rendering/RenderTable.cpp | 3 + .../webkit/WebCore/rendering/RenderTableCol.cpp | 23 +- .../webkit/WebCore/rendering/RenderTableCol.h | 7 +- .../webkit/WebCore/rendering/RenderTextControl.cpp | 8 +- .../rendering/RenderTextControlMultiLine.cpp | 3 + .../rendering/RenderTextControlSingleLine.cpp | 23 +- .../webkit/WebCore/rendering/RenderTheme.cpp | 2 +- .../webkit/WebCore/rendering/RenderTheme.h | 26 +- .../WebCore/rendering/RenderThemeChromiumLinux.cpp | 546 +- .../WebCore/rendering/RenderThemeChromiumLinux.h | 98 +- .../WebCore/rendering/RenderThemeChromiumMac.h | 7 +- .../WebCore/rendering/RenderThemeChromiumMac.mm | 12 +- .../WebCore/rendering/RenderThemeChromiumSkia.cpp | 609 +- .../WebCore/rendering/RenderThemeChromiumSkia.h | 138 +- .../WebCore/rendering/RenderThemeChromiumWin.cpp | 415 +- .../WebCore/rendering/RenderThemeChromiumWin.h | 75 +- .../webkit/WebCore/rendering/RenderThemeMac.h | 6 +- .../webkit/WebCore/rendering/RenderThemeSafari.cpp | 20 +- .../webkit/WebCore/rendering/RenderThemeSafari.h | 7 +- .../webkit/WebCore/rendering/RenderThemeWin.cpp | 12 +- .../webkit/WebCore/rendering/RenderThemeWin.h | 7 +- .../webkit/WebCore/rendering/RenderVideo.cpp | 35 + .../webkit/WebCore/rendering/RenderVideo.h | 15 +- .../webkit/WebCore/rendering/SVGRenderSupport.cpp | 4 +- src/3rdparty/webkit/WebCore/rendering/bidi.cpp | 175 +- .../webkit/WebCore/rendering/style/RenderStyle.cpp | 4 +- .../webkit/WebCore/rendering/style/RenderStyle.h | 6 +- .../rendering/style/StyleRareInheritedData.cpp | 1 + .../webkit/WebCore/storage/LocalStorage.cpp | 78 +- src/3rdparty/webkit/WebCore/storage/LocalStorage.h | 31 +- .../webkit/WebCore/storage/LocalStorageArea.cpp | 154 +- .../webkit/WebCore/storage/LocalStorageArea.h | 22 +- .../webkit/WebCore/storage/LocalStorageTask.cpp | 21 +- .../webkit/WebCore/storage/LocalStorageTask.h | 11 +- .../webkit/WebCore/storage/LocalStorageThread.cpp | 17 +- .../webkit/WebCore/storage/LocalStorageThread.h | 7 +- .../webkit/WebCore/storage/SessionStorage.cpp | 5 + .../webkit/WebCore/storage/SessionStorage.h | 5 +- .../webkit/WebCore/storage/SessionStorageArea.cpp | 5 + .../webkit/WebCore/storage/SessionStorageArea.h | 4 + src/3rdparty/webkit/WebCore/storage/Storage.cpp | 5 + src/3rdparty/webkit/WebCore/storage/Storage.h | 4 + src/3rdparty/webkit/WebCore/storage/Storage.idl | 3 +- .../webkit/WebCore/storage/StorageArea.cpp | 30 +- src/3rdparty/webkit/WebCore/storage/StorageArea.h | 31 +- .../webkit/WebCore/storage/StorageEvent.cpp | 5 + src/3rdparty/webkit/WebCore/storage/StorageEvent.h | 4 + .../webkit/WebCore/storage/StorageEvent.idl | 3 +- src/3rdparty/webkit/WebCore/storage/StorageMap.cpp | 5 + src/3rdparty/webkit/WebCore/storage/StorageMap.h | 4 + .../webkit/WebCore/storage/StorageSyncManager.cpp | 98 + .../webkit/WebCore/storage/StorageSyncManager.h | 66 + src/3rdparty/webkit/WebCore/svg/SVGDocument.cpp | 7 + src/3rdparty/webkit/WebCore/svg/SVGDocument.h | 2 + .../svg/SVGFilterPrimitiveStandardAttributes.cpp | 9 + src/3rdparty/webkit/WebCore/svg/SVGUseElement.cpp | 6 +- .../WebCore/svg/graphics/SVGResourceFilter.cpp | 45 +- .../WebCore/svg/graphics/SVGResourceFilter.h | 7 +- .../svg/graphics/filters/SVGFEConvolveMatrix.h | 1 + .../svg/graphics/filters/SVGFEDiffuseLighting.h | 1 + .../svg/graphics/filters/SVGFEDisplacementMap.h | 1 + .../WebCore/svg/graphics/filters/SVGFEFlood.cpp | 9 + .../svg/graphics/filters/SVGFEGaussianBlur.h | 1 + .../WebCore/svg/graphics/filters/SVGFEImage.cpp | 1 + .../WebCore/svg/graphics/filters/SVGFEImage.h | 2 +- .../WebCore/svg/graphics/filters/SVGFEMerge.cpp | 34 +- .../WebCore/svg/graphics/filters/SVGFEMerge.h | 3 +- .../WebCore/svg/graphics/filters/SVGFEMorphology.h | 1 + .../WebCore/svg/graphics/filters/SVGFEOffset.cpp | 26 +- .../WebCore/svg/graphics/filters/SVGFEOffset.h | 1 + .../svg/graphics/filters/SVGFESpecularLighting.h | 1 + .../WebCore/svg/graphics/filters/SVGFETile.cpp | 41 +- .../WebCore/svg/graphics/filters/SVGFETile.h | 1 + .../WebCore/svg/graphics/filters/SVGFilter.cpp | 39 +- .../WebCore/svg/graphics/filters/SVGFilter.h | 4 + src/3rdparty/webkit/WebCore/workers/Worker.cpp | 26 +- src/3rdparty/webkit/WebCore/workers/Worker.h | 14 +- .../webkit/WebCore/workers/WorkerContext.cpp | 29 +- .../webkit/WebCore/workers/WorkerContext.idl | 2 +- .../WebCore/workers/WorkerImportScriptsClient.cpp | 96 - .../WebCore/workers/WorkerImportScriptsClient.h | 77 - .../webkit/WebCore/workers/WorkerLoaderProxy.h | 64 + .../WebCore/workers/WorkerMessagingProxy.cpp | 13 +- .../webkit/WebCore/workers/WorkerMessagingProxy.h | 11 +- .../webkit/WebCore/workers/WorkerScriptLoader.cpp | 138 + .../webkit/WebCore/workers/WorkerScriptLoader.h | 78 + .../WebCore/workers/WorkerScriptLoaderClient.h | 47 + .../webkit/WebCore/workers/WorkerThread.cpp | 9 +- src/3rdparty/webkit/WebCore/workers/WorkerThread.h | 11 +- src/3rdparty/webkit/WebCore/xml/XMLHttpRequest.cpp | 2 +- src/3rdparty/webkit/WebKit.pri | 9 +- src/3rdparty/webkit/WebKit/ChangeLog | 8 + src/3rdparty/webkit/WebKit/qt/Api/qwebelement.cpp | 16 +- src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp | 28 +- src/3rdparty/webkit/WebKit/qt/Api/qwebframe.h | 4 +- src/3rdparty/webkit/WebKit/qt/Api/qwebframe_p.h | 2 +- src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp | 67 +- src/3rdparty/webkit/WebKit/qt/Api/qwebpage.h | 10 +- src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp | 9 +- src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.h | 2 +- src/3rdparty/webkit/WebKit/qt/ChangeLog | 131 +- .../qt/WebCoreSupport/FrameLoaderClientQt.cpp | 8 +- src/3rdparty/webkit/WebKit/qt/docs/qtwebkit.qdoc | 5 +- .../WebKit/qt/tests/qwebframe/tst_qwebframe.cpp | 3 +- 1049 files changed, 167706 insertions(+), 146720 deletions(-) create mode 100644 src/3rdparty/webkit/JavaScriptCore/ChangeLog-2009-06-16 create mode 100644 src/3rdparty/webkit/JavaScriptCore/assembler/ARMv7Assembler.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/assembler/CodeLocation.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerARMv7.h delete mode 100644 src/3rdparty/webkit/JavaScriptCore/bytecompiler/SegmentedVector.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/generated/JSONObject.lut.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/runtime/DateConversion.cpp create mode 100644 src/3rdparty/webkit/JavaScriptCore/runtime/DateConversion.h delete mode 100644 src/3rdparty/webkit/JavaScriptCore/runtime/DateMath.cpp delete mode 100644 src/3rdparty/webkit/JavaScriptCore/runtime/DateMath.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/runtime/JSONObject.cpp create mode 100644 src/3rdparty/webkit/JavaScriptCore/runtime/JSONObject.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/wtf/DateMath.cpp create mode 100644 src/3rdparty/webkit/JavaScriptCore/wtf/DateMath.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/wtf/SegmentedVector.h create mode 100644 src/3rdparty/webkit/WebCore/ChangeLog-2009-06-16 delete mode 100644 src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/DateMath.h create mode 100644 src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/DateMath.h delete mode 100644 src/3rdparty/webkit/WebCore/bindings/js/JSDOMStringListCustom.cpp create mode 100644 src/3rdparty/webkit/WebCore/bindings/js/JSDataGridDataSource.cpp create mode 100644 src/3rdparty/webkit/WebCore/bindings/js/JSDataGridDataSource.h create mode 100644 src/3rdparty/webkit/WebCore/bindings/js/JSHTMLDataGridElementCustom.cpp create mode 100644 src/3rdparty/webkit/WebCore/bindings/scripts/CodeGeneratorV8.pm create mode 100644 src/3rdparty/webkit/WebCore/css/themeChromiumLinux.css delete mode 100644 src/3rdparty/webkit/WebCore/dom/DOMStringList.cpp delete mode 100644 src/3rdparty/webkit/WebCore/dom/DOMStringList.h delete mode 100644 src/3rdparty/webkit/WebCore/dom/DOMStringList.idl create mode 100644 src/3rdparty/webkit/WebCore/dom/MessagePortChannel.cpp create mode 100644 src/3rdparty/webkit/WebCore/dom/MessagePortChannel.h delete mode 100644 src/3rdparty/webkit/WebCore/dom/MessagePortProxy.h delete mode 100644 src/3rdparty/webkit/WebCore/dom/StaticStringList.cpp delete mode 100644 src/3rdparty/webkit/WebCore/dom/StaticStringList.h create mode 100644 src/3rdparty/webkit/WebCore/dom/default/PlatformMessagePortChannel.cpp create mode 100644 src/3rdparty/webkit/WebCore/dom/default/PlatformMessagePortChannel.h delete mode 100644 src/3rdparty/webkit/WebCore/generated/JSDOMStringList.cpp delete mode 100644 src/3rdparty/webkit/WebCore/generated/JSDOMStringList.h create mode 100644 src/3rdparty/webkit/WebCore/generated/JSHTMLDataGridCellElement.cpp create mode 100644 src/3rdparty/webkit/WebCore/generated/JSHTMLDataGridCellElement.h create mode 100644 src/3rdparty/webkit/WebCore/generated/JSHTMLDataGridColElement.cpp create mode 100644 src/3rdparty/webkit/WebCore/generated/JSHTMLDataGridColElement.h create mode 100644 src/3rdparty/webkit/WebCore/generated/JSHTMLDataGridElement.cpp create mode 100644 src/3rdparty/webkit/WebCore/generated/JSHTMLDataGridElement.h create mode 100644 src/3rdparty/webkit/WebCore/generated/JSHTMLDataGridRowElement.cpp create mode 100644 src/3rdparty/webkit/WebCore/generated/JSHTMLDataGridRowElement.h create mode 100644 src/3rdparty/webkit/WebCore/generated/JSONObject.lut.h create mode 100644 src/3rdparty/webkit/WebCore/html/DataGridDataSource.h create mode 100644 src/3rdparty/webkit/WebCore/html/HTMLDataGridCellElement.cpp create mode 100644 src/3rdparty/webkit/WebCore/html/HTMLDataGridCellElement.h create mode 100644 src/3rdparty/webkit/WebCore/html/HTMLDataGridCellElement.idl create mode 100644 src/3rdparty/webkit/WebCore/html/HTMLDataGridColElement.cpp create mode 100644 src/3rdparty/webkit/WebCore/html/HTMLDataGridColElement.h create mode 100644 src/3rdparty/webkit/WebCore/html/HTMLDataGridColElement.idl create mode 100644 src/3rdparty/webkit/WebCore/html/HTMLDataGridElement.cpp create mode 100644 src/3rdparty/webkit/WebCore/html/HTMLDataGridElement.h create mode 100644 src/3rdparty/webkit/WebCore/html/HTMLDataGridElement.idl create mode 100644 src/3rdparty/webkit/WebCore/html/HTMLDataGridRowElement.cpp create mode 100644 src/3rdparty/webkit/WebCore/html/HTMLDataGridRowElement.h create mode 100644 src/3rdparty/webkit/WebCore/html/HTMLDataGridRowElement.idl create mode 100644 src/3rdparty/webkit/WebCore/inspector/InspectorJSONObject.cpp create mode 100644 src/3rdparty/webkit/WebCore/inspector/InspectorJSONObject.h delete mode 100644 src/3rdparty/webkit/WebCore/inspector/JSONObject.cpp delete mode 100644 src/3rdparty/webkit/WebCore/inspector/JSONObject.h create mode 100644 src/3rdparty/webkit/WebCore/inspector/front-end/Images/resourcesSilhouette.png create mode 100644 src/3rdparty/webkit/WebCore/page/XSSAuditor.cpp create mode 100644 src/3rdparty/webkit/WebCore/page/XSSAuditor.h create mode 100644 src/3rdparty/webkit/WebCore/platform/android/CursorAndroid.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/android/DragDataAndroid.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/android/EventLoopAndroid.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/android/FileChooserAndroid.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/android/FileSystemAndroid.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/android/KeyEventAndroid.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/android/KeyboardCodes.h create mode 100644 src/3rdparty/webkit/WebCore/platform/android/LocalizedStringsAndroid.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/android/PopupMenuAndroid.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/android/RenderThemeAndroid.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/android/RenderThemeAndroid.h create mode 100644 src/3rdparty/webkit/WebCore/platform/android/ScreenAndroid.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/android/ScrollViewAndroid.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/android/SearchPopupMenuAndroid.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/android/SystemTimeAndroid.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/android/TemporaryLinkStubs.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/android/WidgetAndroid.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/image-decoders/cairo/ImageDecoderCairo.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/image-decoders/wx/ImageDecoderWx.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/text/android/TextBreakIteratorInternalICU.cpp delete mode 100644 src/3rdparty/webkit/WebCore/platform/text/symbian/StringImplSymbian.cpp delete mode 100644 src/3rdparty/webkit/WebCore/platform/text/symbian/StringSymbian.cpp create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderDataGrid.cpp create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderDataGrid.h create mode 100644 src/3rdparty/webkit/WebCore/storage/StorageSyncManager.cpp create mode 100644 src/3rdparty/webkit/WebCore/storage/StorageSyncManager.h delete mode 100644 src/3rdparty/webkit/WebCore/workers/WorkerImportScriptsClient.cpp delete mode 100644 src/3rdparty/webkit/WebCore/workers/WorkerImportScriptsClient.h create mode 100644 src/3rdparty/webkit/WebCore/workers/WorkerLoaderProxy.h create mode 100644 src/3rdparty/webkit/WebCore/workers/WorkerScriptLoader.cpp create mode 100644 src/3rdparty/webkit/WebCore/workers/WorkerScriptLoader.h create mode 100644 src/3rdparty/webkit/WebCore/workers/WorkerScriptLoaderClient.h diff --git a/src/3rdparty/webkit/ChangeLog b/src/3rdparty/webkit/ChangeLog index 1946d56..f2cc9a2 100644 --- a/src/3rdparty/webkit/ChangeLog +++ b/src/3rdparty/webkit/ChangeLog @@ -1,3 +1,72 @@ +2009-06-20 Gustavo Noronha Silva + + Reviewed by Jan Alonzo. + + Adding files for the new test case for loading statuses. + + * GNUmakefile.am: + +2009-06-15 Xan Lopez + + Reviewed by Gustavo Noronha. + + Version bump in preparation for 1.1.10 release. + + * configure.ac: + +2009-06-12 Tor Arne Vestbø + + Reviewed by Xan Lopez. + + Refactor handling of options in the build-webkit script + + Options are now defined in one place, and then reused when creating + the usage help text, the arguments to GetOptions(), and when passing + the options on to the underlying port-dependent build systems. + + This allows the Qt port to read the defaults for the options from the + pro file (dynamically), and to pass the options on to qmake at build. + + * configure.ac: + +2009-06-11 Laszlo Gombos + + Reviewed by Holger Freyther. + + [Qt] Fix release build detection + https://bugs.webkit.org/show_bug.cgi?id=26267 + + * WebKit.pri: + +2009-06-10 Gustavo Noronha Silva + + Reviewed by Xan Lopez. + + Add unit tests for our WebKitNetworkRequest object. + + * GNUmakefile.am: + +2009-06-10 Xan Lopez + + Reviewed by Gustavo Noronha. + + Version bump in preparation for 1.1.9 release. + + * configure.ac: + +2009-06-10 Xan Lopez + + Reviewed by Jan Alonzo. + + https://bugs.webkit.org/show_bug.cgi?id=25415 + [GTK][ATK] Please implement support for get_text_at_offset + + Add new dependency on the Gail utils library, needed for our a11y + implementation. + + * GNUmakefile.am: + * configure.ac: + 2009-05-29 Gustavo Noronha Silva Reviewed by Jan Alonzo. diff --git a/src/3rdparty/webkit/JavaScriptCore/API/JSBase.h b/src/3rdparty/webkit/JavaScriptCore/API/JSBase.h index 6f012ca..9f3d88e 100644 --- a/src/3rdparty/webkit/JavaScriptCore/API/JSBase.h +++ b/src/3rdparty/webkit/JavaScriptCore/API/JSBase.h @@ -69,6 +69,14 @@ typedef struct OpaqueJSValue* JSObjectRef; #define JS_EXPORT #elif defined(__GNUC__) #define JS_EXPORT __attribute__((visibility("default"))) +#elif defined(_WIN32_WCE) + #if defined(JS_BUILDING_JS) + #define JS_EXPORT __declspec(dllexport) + #elif defined(JS_IMPORT_JS) + #define JS_EXPORT __declspec(dllimport) + #else + #define JS_EXPORT + #endif #elif defined(WIN32) || defined(_WIN32) /* * TODO: Export symbols with JS_EXPORT when using MSVC. diff --git a/src/3rdparty/webkit/JavaScriptCore/ChangeLog b/src/3rdparty/webkit/JavaScriptCore/ChangeLog index fbda515..55518f5 100644 --- a/src/3rdparty/webkit/JavaScriptCore/ChangeLog +++ b/src/3rdparty/webkit/JavaScriptCore/ChangeLog @@ -1,39240 +1,832 @@ -2009-06-08 Tor Arne Vestbø - - Reviewed by Simon Hausmann. - - [Qt] Use $QMAKE_PATH_SEP instead of hardcoded / to fix Windows build - - * JavaScriptCore.pri: - * JavaScriptCore.pro: - * jsc.pro: - -2009-06-07 Gavin Barraclough - - RS by Sam Weinig. - - Remove bonus bogus \n from last commit. - - * jit/JITStubs.cpp: - (JSC::): - -2009-06-07 Gavin Barraclough - - Reviewed by Sam Weinig. - - Change the implementation of op_throw so the stub function always modifies its - return address - if it doesn't find a 'catch' it will switch to a trampoline - to force a return from JIT execution. This saves memory, by avoiding the need - for a unique return for every op_throw. - - * jit/JITOpcodes.cpp: - (JSC::JIT::emit_op_throw): - JITStubs::cti_op_throw now always changes its return address, - remove return code generated after the stub call (this is now - handled by ctiOpThrowNotCaught). - * jit/JITStubs.cpp: - (JSC::): - Add ctiOpThrowNotCaught definitions. - (JSC::JITStubs::DEFINE_STUB_FUNCTION): - Change cti_op_throw to always change its return address. - * jit/JITStubs.h: - Add ctiOpThrowNotCaught declaration. - -2009-06-05 Gavin Barraclough - - Rudder stamped by Sam Weinig. - - Add missing ASSERT. - - * assembler/X86Assembler.h: - (JSC::X86Assembler::getRelocatedAddress): - -2009-06-05 Gavin Barraclough - - Reviewed by Sam Weinig. - - Switch storePtrWithPatch to take the initial immediate value as an argument. - - * assembler/MacroAssemblerX86.h: - (JSC::MacroAssemblerX86::storePtrWithPatch): - * assembler/MacroAssemblerX86_64.h: - (JSC::MacroAssemblerX86_64::storePtrWithPatch): - * jit/JITOpcodes.cpp: - (JSC::JIT::emit_op_jsr): - -2009-06-05 Gavin Barraclough - - Reviewed by Sam Weinig. - - Remove patchLength..tByIdExternalLoadPrefix magic numbers from JIT.h. - - These aren't really suitable values to be tracking within common code - of the JIT, since they are not (and realistically cannot) be checked - by ASSERTs, as the other repatch offsets are. Move this functionality - (skipping the REX prefix when patching load instructions to LEAs on - x86-64) into the X86Assembler. - - * assembler/AbstractMacroAssembler.h: - (JSC::AbstractMacroAssembler::CodeLocationInstruction::repatchLoadPtrToLEA): - * assembler/X86Assembler.h: - (JSC::X86Assembler::repatchLoadPtrToLEA): - * jit/JIT.h: - * jit/JITPropertyAccess.cpp: - (JSC::JIT::patchGetByIdSelf): - (JSC::JIT::patchPutByIdReplace): - -2009-06-05 Shinichiro Hamaji - - Bug 26160: Compile fails in MacOSX when GNU fileutils are installed - - - - Reviewed by Alexey Proskuryakov. - - Use /bin/ln instead of ln for cases where this command is used with -h option. - As this option is not supported by GNU fileutils, this change helps users - who have GNU fileutils in their PATH. - - * JavaScriptCore.xcodeproj/project.pbxproj: - -2009-06-05 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Remove DoubleNotEqual floating point comparison condition for now - - it is not used, and it is unclear the semantics are correct (I think - this comparison would actually give you not-equal-or-unordered, which - might be what is wanted... we can revisit this interface & get it - right when required). - - Also, fix asserts in branchArith32 ops. All adds & subs can check - for Signed, multiply only sets OF so can only check for overflow. - - * assembler/MacroAssemblerX86Common.h: - (JSC::MacroAssemblerX86Common::): - (JSC::MacroAssemblerX86Common::branchAdd32): - (JSC::MacroAssemblerX86Common::branchMul32): - (JSC::MacroAssemblerX86Common::branchSub32): - -2009-06-05 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Minor tidy up in JITStubs. - - * jit/JITStubs.cpp: - (JSC::StackHack::StackHack): - * jit/JITStubs.h: - -2009-06-05 Koen Kooi - - Reviewed by Xan Lopez. - - Build fix for glib unicode backend. - - * wtf/unicode/glib/UnicodeMacrosFromICU.h: - -2009-06-05 Gavin Barraclough - - Reviewed by Oliver Hunt. - - 3 tiny cleanups: - - * assembler/MacroAssemblerX86.h: - * assembler/MacroAssemblerX86_64.h: - (JSC::MacroAssemblerX86_64::storePtrWithPatch): - store*() methods should take an ImplicitAddress, rather than an Address. - * assembler/X86Assembler.h: - Make patchPointer private. - * jit/JITOpcodes.cpp: - (JSC::JIT::emit_op_ret): - Remove empty line at end of function. - -2009-06-05 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Encapsulate many uses of void* in the assembler & jit with types that provide - more semantic information. The new types are: - - * MacroAssemblerCodePtr - this wraps a pointer into JIT generated code. - * FunctionPtr - this wraps a pointer to a C/C++ function in JSC. - * ReturnAddressPtr - this wraps a return address resulting from a 'call' instruction. - - Wrapping these types allows for stronger type-checking than is possible with everything - represented a void*. For example, it is now enforced by the type system that near - calls can only be linked to JIT code and not to C functions in JSC (this was previously - required, but could not be enforced on the interface). - - * assembler/AbstractMacroAssembler.h: - (JSC::AbstractMacroAssembler::CodeLocationCommon::CodeLocationCommon): - (JSC::AbstractMacroAssembler::CodeLocationCommon::dataLocation): - (JSC::AbstractMacroAssembler::CodeLocationCommon::executableAddress): - (JSC::AbstractMacroAssembler::CodeLocationCommon::reset): - (JSC::AbstractMacroAssembler::CodeLocationInstruction::repatchLoadToLEA): - (JSC::AbstractMacroAssembler::CodeLocationInstruction::CodeLocationInstruction): - (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForSwitch): - (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForExceptionHandler): - (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForJSR): - (JSC::AbstractMacroAssembler::CodeLocationLabel::operator!): - (JSC::AbstractMacroAssembler::CodeLocationLabel::reset): - (JSC::AbstractMacroAssembler::CodeLocationLabel::CodeLocationLabel): - (JSC::AbstractMacroAssembler::CodeLocationLabel::getJumpDestination): - (JSC::AbstractMacroAssembler::CodeLocationJump::relink): - (JSC::AbstractMacroAssembler::CodeLocationJump::CodeLocationJump): - (JSC::AbstractMacroAssembler::CodeLocationCall::relink): - (JSC::AbstractMacroAssembler::CodeLocationCall::calleeReturnAddressValue): - (JSC::AbstractMacroAssembler::CodeLocationCall::CodeLocationCall): - (JSC::AbstractMacroAssembler::CodeLocationNearCall::relink): - (JSC::AbstractMacroAssembler::CodeLocationNearCall::calleeReturnAddressValue): - (JSC::AbstractMacroAssembler::CodeLocationNearCall::CodeLocationNearCall): - (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch): - (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::CodeLocationDataLabel32): - (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch): - (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr): - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToTrampoline): - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkNearCallerToTrampoline): - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::addressForLookup): - (JSC::AbstractMacroAssembler::trampolineAt): - (JSC::AbstractMacroAssembler::PatchBuffer::link): - (JSC::AbstractMacroAssembler::PatchBuffer::performFinalization): - (JSC::::CodeLocationCommon::instructionAtOffset): - (JSC::::CodeLocationCommon::labelAtOffset): - (JSC::::CodeLocationCommon::jumpAtOffset): - (JSC::::CodeLocationCommon::callAtOffset): - (JSC::::CodeLocationCommon::nearCallAtOffset): - (JSC::::CodeLocationCommon::dataLabelPtrAtOffset): - (JSC::::CodeLocationCommon::dataLabel32AtOffset): - * assembler/MacroAssemblerCodeRef.h: - (JSC::FunctionPtr::FunctionPtr): - (JSC::FunctionPtr::value): - (JSC::FunctionPtr::executableAddress): - (JSC::ReturnAddressPtr::ReturnAddressPtr): - (JSC::ReturnAddressPtr::value): - (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr): - (JSC::MacroAssemblerCodePtr::executableAddress): - (JSC::MacroAssemblerCodePtr::dataLocation): - (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef): - * assembler/X86Assembler.h: - (JSC::X86Assembler::patchPointerForCall): - * jit/JIT.cpp: - (JSC::ctiPatchNearCallByReturnAddress): - (JSC::ctiPatchCallByReturnAddress): - (JSC::JIT::privateCompile): - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JIT.h: - (JSC::JIT::compileCTIMachineTrampolines): - * jit/JITCall.cpp: - (JSC::JIT::compileOpCall): - * jit/JITCode.h: - (JSC::JITCode::operator !): - (JSC::JITCode::addressForCall): - (JSC::JITCode::offsetOf): - (JSC::JITCode::execute): - (JSC::JITCode::size): - (JSC::JITCode::HostFunction): - * jit/JITInlineMethods.h: - (JSC::JIT::emitNakedCall): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::patchGetByIdSelf): - (JSC::JIT::patchPutByIdReplace): - (JSC::JIT::privateCompilePatchGetArrayLength): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdChain): - * jit/JITStubs.cpp: - (JSC::JITThunks::JITThunks): - (JSC::JITThunks::tryCachePutByID): - (JSC::JITThunks::tryCacheGetByID): - (JSC::JITStubs::DEFINE_STUB_FUNCTION): - * jit/JITStubs.h: - (JSC::JITThunks::ctiArrayLengthTrampoline): - (JSC::JITThunks::ctiStringLengthTrampoline): - (JSC::JITThunks::ctiVirtualCallPreLink): - (JSC::JITThunks::ctiVirtualCallLink): - (JSC::JITThunks::ctiVirtualCall): - (JSC::JITThunks::ctiNativeCallThunk): - * yarr/RegexJIT.h: - (JSC::Yarr::RegexCodeBlock::operator!): - (JSC::Yarr::RegexCodeBlock::execute): - -2009-06-05 Antti Koivisto - - Try to unbreak Windows build. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-06-03 Antti Koivisto - - Reviewed by Dave Kilzer. - - https://bugs.webkit.org/show_bug.cgi?id=13128 - Safari not obeying cache header - - Export JSC::parseDate() - - * JavaScriptCore.exp: - * JavaScriptCore.xcodeproj/project.pbxproj: - -2009-06-04 Oliver Hunt - - Reviewed by Gavin Barraclough. - - Bug in property caching of getters and setters. - - Make sure that the transition logic accounts for getters and setters. - If we don't we end up screwing up the transition tables so that some - transitions will start incorrectly believing that they need to check - for getters and setters. - - * runtime/JSObject.cpp: - (JSC::JSObject::defineGetter): - (JSC::JSObject::defineSetter): - * runtime/JSObject.h: - (JSC::): - * runtime/Structure.h: - -2009-06-04 Gavin Barraclough - - Reviewed by Sam Weinig. - - Minor tweak to PatchBuffer, change it so it no longer holds a CodeRef, and instead - holds a separate code pointer and executable pool. Since it now always holds its - own copy of the code size, and to simplify the construction sequence, it's neater - this way. - - * assembler/AbstractMacroAssembler.h: - (JSC::AbstractMacroAssembler::PatchBuffer::PatchBuffer): - (JSC::AbstractMacroAssembler::PatchBuffer::finalizeCode): - (JSC::AbstractMacroAssembler::PatchBuffer::code): - (JSC::AbstractMacroAssembler::PatchBuffer::performFinalization): - -2009-06-04 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Remove 'JIT_STUB_ARGUMENT_STACK' this is unused and untested. - - This just leaves JIT_STUB_ARGUMENT_REGISTER and JIT_STUB_ARGUMENT_VA_LIST. - Since JIT_STUB_ARGUMENT_REGISTER is the sensible configuration on most platforms, - remove this define and make this the default behaviour. - Platforms must now define JIT_STUB_ARGUMENT_VA_LIST to get crazy va_list voodoo, - if they so desire. - - (Refactoring of #ifdefs only, no functional change, no performance impact.) - - * jit/JIT.h: - * jit/JITInlineMethods.h: - (JSC::JIT::restoreArgumentReference): - (JSC::JIT::restoreArgumentReferenceForTrampoline): - * jit/JITStubs.cpp: - (JSC::): - * jit/JITStubs.h: - * wtf/Platform.h: - -2009-06-04 Gavin Barraclough - - Rubber stamped by Sam Weinig. - - * jit/JITArithmetic.cpp: - Remove some redundant typedefs, unused since arithmetic was added to the MacroAssembler interface. - -2009-06-04 Brent Fulgham - - Build fix due to header include problem. - - * interpreter/Interpreter.h: Remove wtf from includes so that - compile can find the headers in expected places. - -2009-06-04 Zoltan Horvath - - Reviewed by Darin Adler. - - HashTable class (JavaScriptCore/wtf/HashTable.h) doesn't instantiated by 'new', so - inheritance was removed. HashTable struct has been instantiated by operator new in - JSGlobalData.cpp:106. - HashTable couldn't inherited from FastAllocBase since struct with inheritance is - no longer POD, so HashTable struct has been instantiated by fastNew, destroyed by - fastDelete. - - * interpreter/Interpreter.h: - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): - (JSC::JSGlobalData::~JSGlobalData): - * wtf/HashTable.h: - -2009-06-04 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Wrap the code that plants pushes/pops planted by JIT in explanatorily named - methods; move property storage reallocation into a standard stub function. - - ~No performance impact (possible <1% progression on x86-64, likely just noise). - - * jit/JIT.cpp: - (JSC::JIT::privateCompile): - (JSC::JIT::privateCompileCTIMachineTrampolines): - Wrap calls to push/pop. - * jit/JIT.h: - Declare the new wrapper methods. - * jit/JITInlineMethods.h: - (JSC::JIT::preverveReturnAddressAfterCall): - (JSC::JIT::restoreReturnAddressBeforeReturn): - Define the new wrapper methods. - * jit/JITOpcodes.cpp: - (JSC::JIT::emit_op_end): - (JSC::JIT::emit_op_ret): - Wrap calls to push/pop. - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompilePutByIdTransition): - Move property storage reallocation into a standard stub function. - * jit/JITStubs.cpp: - (JSC::JITStubs::DEFINE_STUB_FUNCTION): - * jit/JITStubs.h: - (JSC::JITStubs::): - -2009-06-04 Laszlo Gombos - - Reviewed by Ariya Hidayat. - - [Qt] Single-threaded QtWebKit configuration - - - * JavaScriptCore.pri: Use ThreadingNone.cpp instead of - ThreadingQt.cpp and make sure ENABLE_JSC_MULTIPLE_THREADS is turned off - when ENABLE_SINGLE_THREADED is tuned on - * wtf/ThreadingNone.cpp: - (WTF::ThreadCondition::wait): Fix compilation warning. - (WTF::ThreadCondition::timedWait): Ditto. - -2009-06-02 Mark Rowe - - Reviewed by Anders Carlsson. - - Remove workaround that was added to address as it no longer affects our Tiger builds. - - * Configurations/Base.xcconfig: - -2009-06-02 Xan Lopez - - Reviewed by Sam Weinig. - - Use C-style comments in Platform.h so it can be included from C - files. - - * wtf/Platform.h: - -2009-06-02 Tor Arne Vestbø - - Rubber-stamped by Simon Hausmann. - - Use File::Spec->tmpdir instead of hardcoded paths for tempfile() dir - - This fixes the Windows-build if the user does not have a /tmp directory. - - * pcre/dftables: - -2009-06-02 Gavin Barraclough - - Reviewed by Oliver ">>" Hunt. - - emitSlow_op_rshift is linking the wrong number of slow cases, if !supportsFloatingPoint(). - Fixerate, and refactor/comment the code a little to make it clearer what is going on. - - * jit/JITArithmetic.cpp: - (JSC::JIT::emit_op_rshift): - (JSC::JIT::emitSlow_op_rshift): - -2009-06-01 Gavin Barraclough - - Reviewed by NOBODY - speculative windows build fix (errm, for the other patch!). - - * jit/JITStubs.cpp: - (JSC::): - -2009-06-01 Gavin Barraclough - - Reviewed by NOBODY - speculative windows build fix. - - * assembler/AbstractMacroAssembler.h: - (JSC::::CodeLocationCall::CodeLocationCall): - (JSC::::CodeLocationNearCall::CodeLocationNearCall): - -2009-06-01 Gavin Barraclough - - Reviewed by Olliej Hunt. - - Change JITStub functions from being static members on the JITStub class to be - global extern "C" functions, and switch their the function signature declaration - in the definition of the functions to be C-macro generated. This makes it easier - to work with the stub functions from assembler code (since the names no longer - require mangling), and by delaring the functions with a macro we can look at - also auto-generating asm thunks to wrap the JITStub functions to perform the - work currently in 'restoreArgumentReference' (as a memory saving). - - Making this change also forces us to be a bit more realistic about what is private - on the Register and CallFrame objects. Presently most everything on these classes - is private, and the classes have plenty of friends. We could befriend all the - global functions to perpetuate the delusion of encapsulation, but using friends is - a bit of a sledgehammer solution here - since friends can poke around with all of - the class's privates, and since all the major classes taht operate on Regsiters are - currently friends, right there is currently in practice very little protection at - all. Better to start removing friend delclarations, and exposing just the parts - that need to be exposed. - - * interpreter/CallFrame.h: - (JSC::ExecState::returnPC): - (JSC::ExecState::setCallerFrame): - (JSC::ExecState::returnValueRegister): - (JSC::ExecState::setArgumentCount): - (JSC::ExecState::setCallee): - (JSC::ExecState::setCodeBlock): - * interpreter/Interpreter.h: - * interpreter/Register.h: - (JSC::Register::Register): - (JSC::Register::i): - * jit/JITStubs.cpp: - (JSC::): - (JSC::JITThunks::JITThunks): - (JSC::JITThunks::tryCachePutByID): - (JSC::JITThunks::tryCacheGetByID): - (JSC::JITStubs::DEFINE_STUB_FUNCTION): - * jit/JITStubs.h: - (JSC::JITStubs::): - * runtime/JSFunction.h: - (JSC::JSFunction::nativeFunction): - (JSC::JSFunction::classInfo): - * runtime/JSGlobalData.h: - -2009-06-01 Oliver Hunt - - Reviewed by Gavin Barraclough. - - Tidy up the literal parser. - - Make the number lexing in the LiteralParser exactly match the JSON spec, which - makes us cover more cases, but also more strict. Also made string lexing only - allow double-quoted strings. - - * runtime/LiteralParser.cpp: - (JSC::LiteralParser::Lexer::lex): - (JSC::LiteralParser::Lexer::lexString): - (JSC::LiteralParser::Lexer::lexNumber): - -2009-06-01 Gavin Barraclough - - Reviewed by Sam "WX" Weinig. - - Allow the JIT to operate without relying on use of RWX memory, on platforms where this is supported. - - This patch adds a switch to Platform.h (ENABLE_ASSEMBLER_WX_EXCLUSIVE) which enables this mode of operation. - When this flag is set, all executable memory will be allocated RX, and switched to RW only whilst being - modified. Upon completion of code generation the protection is switched back to RX to allow execution. - - Further optimization will be required before it is desirable to enable this mode of operation by default; - enabling this presently incurs a 5%-10% regression. - - (Submitting disabled - no performance impact). - - * assembler/AbstractMacroAssembler.h: - (JSC::AbstractMacroAssembler::CodeLocationInstruction::repatchLoadToLEA): - (JSC::AbstractMacroAssembler::CodeLocationLabel::fromFunctionPointer): - (JSC::AbstractMacroAssembler::CodeLocationJump::relink): - (JSC::AbstractMacroAssembler::CodeLocationCall::relink): - (JSC::AbstractMacroAssembler::CodeLocationNearCall::relink): - (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch): - (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch): - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToTrampoline): - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkNearCallerToTrampoline): - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkNearCallerToFunction): - (JSC::AbstractMacroAssembler::PatchBuffer::PatchBuffer): - (JSC::AbstractMacroAssembler::PatchBuffer::~PatchBuffer): - (JSC::AbstractMacroAssembler::PatchBuffer::link): - (JSC::AbstractMacroAssembler::PatchBuffer::patch): - (JSC::AbstractMacroAssembler::PatchBuffer::performFinalization): - (JSC::::CodeLocationCommon::nearCallAtOffset): - (JSC::::CodeLocationCall::CodeLocationCall): - (JSC::::CodeLocationNearCall::CodeLocationNearCall): - * assembler/AssemblerBuffer.h: - (JSC::AssemblerBuffer::executableCopy): - * assembler/X86Assembler.h: - (JSC::CAN_SIGN_EXTEND_U32_64): - (JSC::X86Assembler::linkJump): - (JSC::X86Assembler::linkCall): - (JSC::X86Assembler::patchPointer): - (JSC::X86Assembler::relinkJump): - (JSC::X86Assembler::relinkCall): - (JSC::X86Assembler::repatchInt32): - (JSC::X86Assembler::repatchPointer): - (JSC::X86Assembler::repatchLoadToLEA): - (JSC::X86Assembler::patchInt32): - (JSC::X86Assembler::patchRel32): - * jit/ExecutableAllocator.h: - (JSC::ExecutableAllocator::): - (JSC::ExecutableAllocator::makeWritable): - (JSC::ExecutableAllocator::makeExecutable): - * jit/ExecutableAllocatorFixedVMPool.cpp: - (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): - * jit/ExecutableAllocatorPosix.cpp: - (JSC::ExecutablePool::systemAlloc): - (JSC::ExecutablePool::systemRelease): - (JSC::ExecutableAllocator::reprotectRegion): - * jit/ExecutableAllocatorWin.cpp: - * jit/JITPropertyAccess.cpp: - (JSC::JIT::patchGetByIdSelf): - (JSC::JIT::patchPutByIdReplace): - * wtf/Platform.h: - -2009-05-29 Zoltan Horvath - - Reviewed by Darin Adler. - - Inherits Interpreter class from FastAllocBase because it has been - instantiated by 'new' in JavaScriptCore/runtime/JSGlobalData.cpp. - - * interpreter/Interpreter.h: - -2009-06-01 David Levin - - Reviewed by NOBODY (windows build fix). - - Add exports for windows (corresponding to the JavaScriptCore.exp modification - in the previous change). - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-06-01 David Levin - - Reviewed by Darin Alder and Maciej Stachowiak. - - Bug 26057: StringImpl should share buffers with UString. - https://bugs.webkit.org/show_bug.cgi?id=26057 - - * JavaScriptCore.exp: - * runtime/UString.cpp: - (JSC::UString::Rep::create): - (JSC::UString::BaseString::sharedBuffer): Only do the sharing when - the buffer exceeds a certain size. The size was tuned by running - various dom benchmarks with numbers ranging from 20 to 800 and finding - a place that seemed to do the best overall. - * runtime/UString.h: - -2009-05-31 Gavin Barraclough - - Reviewed by Olliej "you just need to change NativeFunctionWrapper.h" Hunt. - - Add ENABLE_JIT_OPTIMIZE_NATIVE_CALL switch to allow JIT to operate without native call optimizations. - - * runtime/NativeFunctionWrapper.h: - * wtf/Platform.h: - -2009-05-30 Darin Adler - - Reviewed by Sam Weinig. - - REGRESSION (r42734): Celtic Kane JavaScript benchmark does not run: - "Maximum call stack size exceeded" - - * runtime/ArrayPrototype.cpp: - (JSC::arrayProtoFuncToString): Use the same recursion limit as the other recursion checks. - We need a limit of at least 100 to run the benchmark above. - (JSC::arrayProtoFuncToLocaleString): Ditto. - (JSC::arrayProtoFuncJoin): Ditto. - -2009-05-28 Dirk Schulze - - Reviewed by Nikolas Zimmermann. - - Added new build flag --filters for Mac. More details in WebCore/ChangeLog. - - * Configurations/FeatureDefines.xcconfig: - -2009-05-27 Oliver Hunt - - Reviewed by Mark Rowe. - - Stack overflow in JSC::stringProtoFuncReplace() running jsFunFuzz - - We should always check for exceptions after creating a CachedCall, this wasn't being done in - the string replace logic. - - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncReplace): - -2009-05-27 Gustavo Noronha Silva - - Unreviewed (make distcheck) build fix; adding missing headers. - - * GNUmakefile.am: - -2009-05-27 Jessie Berlin - - Reviewed by Adam Roben - - Fix the Windows build. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-27 Fridrich Strba - - Reviewed by Gustavo Noronha. - - When building on Windows, consider Windows specific files. - - * GNUmakefile.am: - -2009-05-27 Fridrich Strba - - Reviewed by Maciej Stachowiak. - - When building with MinGW, don't use the __declspec(dl{import,export}) - decorations and rely on the linker to use its nifty auto-import feature. - It is extremely hard to get the decorations right with MinGW in general - and impossible in WebKit, where the resulting shared library is linking - together some static libraries. - - * config.h: - -2009-05-26 Holger Hans Peter Freyther - - Reviewed by Xan Lopez. - - https://bugs.webkit.org/show_bug.cgi?id=25613 - - Be able to use GOwnPtr for GHashTable as well. The assumption - is that the hash table has been created with g_hash_table_new_full - and has proper destruction functions. - - * wtf/GOwnPtr.cpp: - (WTF::GHashTable): - * wtf/GOwnPtr.h: - -2009-05-26 Oliver Hunt - - Reviewed by Gavin Barraclough. - - REGRESSION: Assertion failure due to forward references - - Add a pattern type for forward references to ensure that we don't confuse the - quantifier alternatives assertion. - - * yarr/RegexCompiler.cpp: - (JSC::Yarr::RegexPatternConstructor::atomBackReference): - (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets): - * yarr/RegexInterpreter.cpp: - (JSC::Yarr::ByteCompiler::emitDisjunction): - * yarr/RegexJIT.cpp: - (JSC::Yarr::RegexGenerator::generateTerm): - * yarr/RegexPattern.h: - (JSC::Yarr::PatternTerm::): - (JSC::Yarr::PatternTerm::PatternTerm): - (JSC::Yarr::PatternTerm::ForwardReference): - -2009-05-26 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Fix for: REGRESSION: jQuery load() issue (25981), - and also an ASSERT failure on http://ihasahotdog.com/. - - When overwriting a property on a dictionary with a cached specific value, - clear the cache if new value being written is different. - - * JavaScriptCore.exp: - Export the new symbols. - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_get_by_id_method_check_second): - Close dictionary prototypes upon caching a method access, as would happen when caching - a regular get_by_id. - * runtime/JSObject.h: - (JSC::JSObject::propertyStorage): - (JSC::JSObject::locationForOffset): - Make these methods private. - (JSC::JSObject::putDirectInternal): - When overwriting a property on a dictionary with a cached specific value, - clear the cache if new value being written is different. - * runtime/Structure.cpp: - (JSC::Structure::despecifyDictionaryFunction): - Reset the specific value field for a given property in a dictionary. - (JSC::Structure::despecifyFunctionTransition): - Rename of 'changeFunctionTransition' (this was already internally refered to as a despecification). - * runtime/Structure.h: - Declare new method. - -2009-05-26 Gavin Barraclough - - Reviewed by Oliver "pieces of eight" Hunt. - - When reseting RegexPattern class, should fully reset the class, not just bits of it. - In particular, we delete the cached character classes (for wordchars, etc), but do - not reset the set of pointers to the cached classes. In the case of a repeated parse - due to an illegal back-reference we will continue to use the deleted character class. - - * yarr/RegexPattern.h: - (JSC::Yarr::RegexPattern::reset): - -2009-05-26 Brent Fulgham - - Build fix to correct r44161. - - * wtf/FastAllocBase.h: - -2009-05-26 Zoltan Horvath - - Reviewed by Maciej Stachowiak. - - Inherite HashTable from FastAllocBase, because it has been instantiated by - 'new' in JavaScriptCore/runtime/JSGlobalData.cpp. - - * wtf/HashTable.h: - * wtf/FastAllocBase.h: Remove 'wtf' path from TypeTraits.h to allow use outside of wtf. - -2009-05-25 David Levin - - Reviewed by Maciej Stachowiak and Oliver Hunt. - - https://bugs.webkit.org/show_bug.cgi?id=25126 - Allow the buffer underlying UString to be shared. - - In order to not grow the underlying size of any structure, - there is a union in the Rep string which holds - + m_sharedBuffer -- a pointer to the shared ref counted buffer - if the class is BaseString and the buffer is being shared OR - + m_baseString -- the BaseString if the class is only UString::Rep - but not a UString::BaseString - - Ideally, m_sharedBuffer would be a RefPtr, but it cannot be because - it is in a union. - - No change in sunspider perf. - - * JavaScriptCore.vcproj/WTF/WTF.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * runtime/UString.cpp: - (JSC::UString::Rep::share): - (JSC::UString::Rep::destroy): - (JSC::UString::BaseString::sharedBuffer): - (JSC::UString::BaseString::setSharedBuffer): - (JSC::UString::BaseString::slowIsBufferReadOnly): - (JSC::expandCapacity): - (JSC::UString::Rep::reserveCapacity): - (JSC::UString::expandPreCapacity): - (JSC::concatenate): - (JSC::UString::append): - * runtime/UString.h: - (JSC::UString::Rep::Rep): - (JSC::UString::Rep::): - (JSC::UString::BaseString::isShared): - (JSC::UString::BaseString::isBufferReadOnly): - (JSC::UString::Rep::baseString): - * wtf/CrossThreadRefCounted.h: - (WTF::CrossThreadRefCounted::isShared): - * wtf/OwnFastMallocPtr.h: Added. - (WTF::OwnFastMallocPtr::OwnFastMallocPtr): - (WTF::OwnFastMallocPtr::~OwnFastMallocPtr): - (WTF::OwnFastMallocPtr::get): - (WTF::OwnFastMallocPtr::release): - -2009-05-25 Oliver Hunt - - Reviewed by Maciej Stachowiak. - - Re-add interpreter logic to jit-enabled builds as GCC mysteriously regresses without it - - * wtf/Platform.h: - -2009-05-25 Fridrich Strba - - Reviewed by Maciej Stachowiak. - - The functions written in assembly need to have a leading - underscore on Windows too. - - * jit/JITStubs.cpp: - -2009-05-24 Steve Falkenburg - - Build fix for experimental PGO Windows target. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - -2009-05-23 David Kilzer - - Part 1 of 2: Bug 25495: Implement PassOwnPtr and replace uses of std::auto_ptr - - - - Reviewed by Oliver Hunt. - - * GNUmakefile.am: Added OwnPtrCommon.h and PassOwnPtr.h. - * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto. - * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. - - * wtf/OwnPtr.h: - (WTF::OwnPtr::OwnPtr): Added constructors that take a - PassOwnPtr. Also added a copy constructor declaration that's - required when assigning a PassOwnPtr to a stack-based OwnPtr. - (WTF::operator=): Added assignment operator methods that take a - PassOwnPtr. - (WTF::swap): Reformatted. - (WTF::operator==): Whitespace changes. - (WTF::operator!=): Ditto. - - * wtf/OwnPtrCommon.h: Added. - (WTF::deleteOwnedPtr): - - * wtf/PassOwnPtr.h: Added. - (WTF::PassOwnPtr::PassOwnPtr): - (WTF::PassOwnPtr::~PassOwnPtr): - (WTF::PassOwnPtr::get): - (WTF::PassOwnPtr::clear): - (WTF::PassOwnPtr::release): - (WTF::PassOwnPtr::operator*): - (WTF::PassOwnPtr::operator->): - (WTF::PassOwnPtr::operator!): - (WTF::PassOwnPtr::operator UnspecifiedBoolType): - (WTF::::operator): - (WTF::operator==): - (WTF::operator!=): - (WTF::static_pointer_cast): - (WTF::const_pointer_cast): - (WTF::getPtr): - -2009-05-23 Oliver Hunt - - Reviewed by Maciej Stachowiak. - - Remove interpreter specific logic from the JIT builds. - - This saves ~100k in JSC release builds. - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - * interpreter/Interpreter.h: - * wtf/Platform.h: - -2009-05-22 Mark Rowe - - Part two of an attempted Windows build fix. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-22 Mark Rowe - - Part one of an attempted Windows build fix. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-21 Gavin Barraclough - - Reviewed by Geoff Garen. - - op_method_check - - Optimize method calls, by caching specific function values within the Structure. - The new opcode is used almost like an x86 opcode prefix byte to optimize op_get_by_id, - where the property access is being used to read a function to be passed to op-call (i.e. - 'foo.bar();'). This patch modifies the Structure class such that when a property is - put to an object for the first time we will check if the value is a function. If it is, - we will cache the function value on the Structure. A Structure in such a state guarantees - that not only does a property with the given identifier exist on the object, but also that - its value is unchanged. Upon any further attempt to put a property with the same identifier - (but a different value) to the object, it will transition back to a normal Structure (where - it will guarantee the presence but not the value of the property). - - op_method_check makes use of the new information made available by the Structure, by - augmenting the functionality of op_get_by_id. Upon generating a FunctionCallDotNode a - check will be emitted prior to the property access reading the function value, and the JIT - will generate an extra (initially unlinked but patchable) set of checks prior to the regular - JIT code for get_by_id. The new code will do inline structure and prototype structure check - (unlike a regular get_by_id, which can only handle 'self' accesses inline), and then performs - an immediate load of the function value, rather than using memory accesses to load the value - from the obejct's property storage array. If the method check fails it will revert, or if - the access is polymorphic, the op_get_by_id will continue to operate - and optimize itself - - just as any other regular op_get_by_id would. - - ~2.5% on v8-tests, due to a ~9% progression on richards. - - * API/JSCallbackObjectFunctions.h: - (JSC::::put): - (JSC::::staticFunctionGetter): - * API/JSObjectRef.cpp: - (JSObjectMakeConstructor): - * JavaScriptCore.exp: - * assembler/AbstractMacroAssembler.h: - (JSC::AbstractMacroAssembler::differenceBetween): - * assembler/MacroAssemblerX86.h: - (JSC::MacroAssemblerX86::moveWithPatch): - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * bytecode/CodeBlock.h: - (JSC::getMethodCallLinkInfoReturnLocation): - (JSC::CodeBlock::getMethodCallLinkInfo): - (JSC::CodeBlock::addMethodCallLinkInfos): - (JSC::CodeBlock::methodCallLinkInfo): - * bytecode/Opcode.h: - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitMethodCheck): - * bytecompiler/BytecodeGenerator.h: - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - (JSC::JIT::privateCompile): - * jit/JIT.h: - (JSC::MethodCallCompilationInfo::MethodCallCompilationInfo): - * jit/JITOpcodes.cpp: - * jit/JITPropertyAccess.cpp: - (JSC::JIT::emit_op_method_check): - (JSC::JIT::emitSlow_op_method_check): - (JSC::JIT::emit_op_get_by_id): - (JSC::JIT::emitSlow_op_get_by_id): - (JSC::JIT::emit_op_put_by_id): - (JSC::JIT::emitSlow_op_put_by_id): - (JSC::JIT::compileGetByIdHotPath): - (JSC::JIT::compileGetByIdSlowCase): - (JSC::JIT::patchMethodCallProto): - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_get_by_id_method_check): - (JSC::JITStubs::cti_op_get_by_id_method_check_second): - * jit/JITStubs.h: - * jsc.cpp: - (GlobalObject::GlobalObject): - * parser/Nodes.cpp: - (JSC::FunctionCallDotNode::emitBytecode): - * runtime/Arguments.cpp: - (JSC::Arguments::put): - * runtime/ArrayConstructor.cpp: - (JSC::ArrayConstructor::ArrayConstructor): - * runtime/BooleanConstructor.cpp: - (JSC::BooleanConstructor::BooleanConstructor): - * runtime/DateConstructor.cpp: - (JSC::DateConstructor::DateConstructor): - * runtime/ErrorConstructor.cpp: - (JSC::ErrorConstructor::ErrorConstructor): - (JSC::constructError): - * runtime/ErrorPrototype.cpp: - (JSC::ErrorPrototype::ErrorPrototype): - * runtime/FunctionConstructor.cpp: - (JSC::FunctionConstructor::FunctionConstructor): - * runtime/FunctionPrototype.cpp: - (JSC::FunctionPrototype::FunctionPrototype): - * runtime/InternalFunction.cpp: - (JSC::InternalFunction::InternalFunction): - * runtime/JSActivation.cpp: - (JSC::JSActivation::put): - (JSC::JSActivation::putWithAttributes): - * runtime/JSByteArray.cpp: - (JSC::JSByteArray::JSByteArray): - * runtime/JSFunction.cpp: - (JSC::JSFunction::JSFunction): - (JSC::JSFunction::getOwnPropertySlot): - * runtime/JSGlobalObject.cpp: - (JSC::JSGlobalObject::putWithAttributes): - (JSC::JSGlobalObject::reset): - (JSC::JSGlobalObject::mark): - * runtime/JSGlobalObject.h: - (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): - (JSC::JSGlobalObject::methodCallDummy): - * runtime/JSObject.cpp: - (JSC::JSObject::put): - (JSC::JSObject::putWithAttributes): - (JSC::JSObject::deleteProperty): - (JSC::JSObject::defineGetter): - (JSC::JSObject::defineSetter): - (JSC::JSObject::getPropertyAttributes): - (JSC::JSObject::getPropertySpecificFunction): - (JSC::JSObject::putDirectFunction): - (JSC::JSObject::putDirectFunctionWithoutTransition): - * runtime/JSObject.h: - (JSC::getJSFunction): - (JSC::JSObject::getDirectLocation): - (JSC::JSObject::putDirect): - (JSC::JSObject::putDirectWithoutTransition): - * runtime/LiteralParser.cpp: - (JSC::LiteralParser::parseObject): - * runtime/Lookup.cpp: - (JSC::setUpStaticFunctionSlot): - * runtime/Lookup.h: - (JSC::lookupPut): - * runtime/MathObject.cpp: - (JSC::MathObject::MathObject): - * runtime/NativeErrorConstructor.cpp: - (JSC::NativeErrorConstructor::NativeErrorConstructor): - (JSC::NativeErrorConstructor::construct): - * runtime/NativeErrorPrototype.cpp: - (JSC::NativeErrorPrototype::NativeErrorPrototype): - * runtime/NumberConstructor.cpp: - (JSC::NumberConstructor::NumberConstructor): - * runtime/ObjectConstructor.cpp: - (JSC::ObjectConstructor::ObjectConstructor): - * runtime/PropertyMapHashTable.h: - (JSC::PropertyMapEntry::PropertyMapEntry): - * runtime/PrototypeFunction.cpp: - (JSC::PrototypeFunction::PrototypeFunction): - * runtime/PutPropertySlot.h: - (JSC::PutPropertySlot::): - (JSC::PutPropertySlot::PutPropertySlot): - (JSC::PutPropertySlot::setNewProperty): - (JSC::PutPropertySlot::setDespecifyFunctionProperty): - (JSC::PutPropertySlot::isCacheable): - (JSC::PutPropertySlot::cachedOffset): - * runtime/RegExpConstructor.cpp: - (JSC::RegExpConstructor::RegExpConstructor): - * runtime/StringConstructor.cpp: - (JSC::StringConstructor::StringConstructor): - * runtime/StringPrototype.cpp: - (JSC::StringPrototype::StringPrototype): - * runtime/Structure.cpp: - (JSC::Structure::Structure): - (JSC::Structure::~Structure): - (JSC::Structure::materializePropertyMap): - (JSC::Structure::addPropertyTransitionToExistingStructure): - (JSC::Structure::addPropertyTransition): - (JSC::Structure::changeFunctionTransition): - (JSC::Structure::addPropertyWithoutTransition): - (JSC::Structure::get): - (JSC::Structure::despecifyFunction): - (JSC::Structure::put): - (JSC::Structure::remove): - * runtime/Structure.h: - (JSC::Structure::get): - (JSC::Structure::specificFunction): - * runtime/StructureTransitionTable.h: - (JSC::StructureTransitionTableHashTraits::emptyValue): - * wtf/Platform.h: - -2009-05-22 Brent Fulgham - - Reviewed by Steve Falkenburg. - - https://bugs.webkit.org/show_bug.cgi?id=25950 - JavaScriptCore Fails to build on Windows (Cairo) due to CoreFoundation - link requirement. - - Modify project to add new Debug_CFLite and Release_CFLite targets. These - use the new JavaScriptCoreCFLite.vsprops to link against CFLite.dll. - Existing projects are changed to use the new JavaScriptCoreCF.vsprops - to link against CoreFoundation.dll. - - The JavaScriptCoreCommon.vsprops is modified to remove the link - against CoreFoundation.dll. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCF.vsprops: Added. - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCFLite.vsprops: Added. - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: - -2009-05-22 Dominik Röttsches - - Reviewed by Gustavo Noronha. - - https://bugs.webkit.org/show_bug.cgi?id=15914 - [GTK] Implement Unicode functionality using GLib - - Original patch by Jürg Billeter and Naiem Shaik. - Implementing WTF Unicode functionality based on GLib. - - * GNUmakefile.am: - * wtf/unicode/Unicode.h: - * wtf/unicode/glib: Added. - * wtf/unicode/glib/UnicodeGLib.cpp: Added. - (WTF::Unicode::foldCase): - (WTF::Unicode::toLower): - (WTF::Unicode::toUpper): - (WTF::Unicode::direction): - (WTF::Unicode::umemcasecmp): - * wtf/unicode/glib/UnicodeGLib.h: Added. - (WTF::Unicode::): - (WTF::Unicode::toLower): - (WTF::Unicode::toUpper): - (WTF::Unicode::toTitleCase): - (WTF::Unicode::isArabicChar): - (WTF::Unicode::isFormatChar): - (WTF::Unicode::isSeparatorSpace): - (WTF::Unicode::isPrintableChar): - (WTF::Unicode::isDigit): - (WTF::Unicode::isPunct): - (WTF::Unicode::mirroredChar): - (WTF::Unicode::category): - (WTF::Unicode::isLower): - (WTF::Unicode::digitValue): - (WTF::Unicode::combiningClass): - (WTF::Unicode::decompositionType): - * wtf/unicode/glib/UnicodeMacrosFromICU.h: Added. - -2009-05-21 Xan Lopez - - Unreviewed build fix. - - Add MacroAssemblerCodeRef.h to file list. - - * GNUmakefile.am: - -2009-05-21 Gavin Barraclough - - Reviewed by Darin Adler. - Addition of MacroAssemblerCodeRef.h rubber stamped by Geoff Garen. - - Refactor JIT code-handle objects. The representation of generated code is currently - a bit of a mess. We have a class JITCode which wraps the pointer to a block of - generated code, but this object does not reference the executable pool meaning that - external events (the pool being derefed) could make the pointer become invalid. - To overcome this both the JIT and Yarr implement further (and similar) objects to - wrap the code pointer with a RefPtr to the pool. To add to the mire, as well as the - CodeBlock containing a handle onto the code the FunctionBodyNode also contains a - copy of the code pointer which is used almost (but not entirely) uniquely to access - the JIT code for a function. - - Rationalization of all this: - - * Add a new type 'MacroAssembler::CodeRef' as a handle for a block of JIT generated code. - * Change the JIT & Yarr to internally handle code using CodeRefs. - * Move the CodeRef (formerly anow defunct JITCodeRef) from CodeBlock to its owner node. - * Remove the (now) redundant code pointer from FunctionBodyNode. - - While tidying this up I've made the PatchBuffer return code in new allocations using a CodeRef, - and have enforced an interface that the PatchBuffer will always be used, and 'finalizeCode()' or - 'finalizeCodeAddendum()' will always be called exactly once on the PatchBuffer to complete code generation. - - This gives us a potentially useful hook ('PatchBuffer::performFinalization()') at the end of generation, - which may have a number of uses. It may be helpful should we wish to switch our generation - model to allow RW/RX exclusive memory, and it may be useful on non-cache-coherent platforms to - give us an oportunity to cache flush as necessary. - - No performance impact. - - * assembler/AbstractMacroAssembler.h: - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToTrampoline): - (JSC::AbstractMacroAssembler::CodeRef::CodeRef): - (JSC::AbstractMacroAssembler::CodeRef::trampolineAt): - (JSC::AbstractMacroAssembler::PatchBuffer::PatchBuffer): - (JSC::AbstractMacroAssembler::PatchBuffer::~PatchBuffer): - (JSC::AbstractMacroAssembler::PatchBuffer::link): - (JSC::AbstractMacroAssembler::PatchBuffer::linkTailRecursive): - (JSC::AbstractMacroAssembler::PatchBuffer::patch): - (JSC::AbstractMacroAssembler::PatchBuffer::complete): - (JSC::AbstractMacroAssembler::PatchBuffer::finalize): - (JSC::AbstractMacroAssembler::PatchBuffer::entry): - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::CodeBlock): - (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): - (JSC::CodeBlock::setJITCode): - * bytecode/CodeBlock.h: - (JSC::CodeBlock::getBytecodeIndex): - (JSC::CodeBlock::executablePool): - * interpreter/CallFrameClosure.h: - * interpreter/Interpreter.cpp: - (JSC::Interpreter::execute): - (JSC::Interpreter::prepareForRepeatCall): - * jit/JIT.cpp: - (JSC::JIT::privateCompile): - (JSC::JIT::privateCompileCTIMachineTrampolines): - (JSC::JIT::linkCall): - * jit/JIT.h: - * jit/JITCode.h: - (JSC::JITCode::JITCode): - (JSC::JITCode::operator bool): - (JSC::JITCode::addressForCall): - (JSC::JITCode::offsetOf): - (JSC::JITCode::execute): - (JSC::JITCode::size): - (JSC::JITCode::executablePool): - (JSC::JITCode::HostFunction): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::privateCompilePatchGetArrayLength): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdSelfList): - (JSC::JIT::privateCompileGetByIdProtoList): - (JSC::JIT::privateCompileGetByIdChainList): - (JSC::JIT::privateCompileGetByIdChain): - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_vm_dontLazyLinkCall): - (JSC::JITStubs::cti_vm_lazyLinkCall): - * parser/Nodes.cpp: - (JSC::ProgramNode::generateJITCode): - (JSC::EvalNode::generateJITCode): - (JSC::FunctionBodyNode::FunctionBodyNode): - (JSC::FunctionBodyNode::createNativeThunk): - (JSC::FunctionBodyNode::generateJITCode): - * parser/Nodes.h: - (JSC::ScopeNode::generatedJITCode): - (JSC::ScopeNode::getExecutablePool): - (JSC::ScopeNode::setJITCode): - (JSC::ProgramNode::jitCode): - (JSC::EvalNode::jitCode): - (JSC::FunctionBodyNode::jitCode): - * runtime/RegExp.cpp: - (JSC::RegExp::match): - * yarr/RegexJIT.cpp: - (JSC::Yarr::RegexGenerator::compile): - (JSC::Yarr::jitCompileRegex): - (JSC::Yarr::executeRegex): - * yarr/RegexJIT.h: - (JSC::Yarr::RegexCodeBlock::RegexCodeBlock): - (JSC::Yarr::RegexCodeBlock::pcreFallback): - (JSC::Yarr::RegexCodeBlock::setFallback): - (JSC::Yarr::RegexCodeBlock::operator bool): - (JSC::Yarr::RegexCodeBlock::set): - (JSC::Yarr::RegexCodeBlock::execute): - -2009-05-21 Oliver Hunt - - Reviewed by Maciej Stachowiak. - - REGRESSION: Cached DOM global object property access fails in browser (25921) - - - When caching properties on the global object we need to ensure that we're - not attempting to cache through a shell object. - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::resolveGlobal): - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_resolve_global): - -2009-05-21 Steve Falkenburg - - Windows build fix. - - * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: - -2009-05-21 Cameron Zwarich - - Reviewed by Mark Rowe. - - Bug 25945: Add support for MADV_FREE to TCMalloc - - - - Add support for MADV_FREE to TCMalloc_SystemRelease for platforms that - don't also support MADV_FREE_REUSE. The code is identical to the MADV_DONTNEED - case except for the advice passed to madvise(), so combining the two cases - makes the most sense. - - * wtf/Platform.h: Only define HAVE_MADV_FREE when not building on Tiger or - Leopard, because while it is defined on these platforms it actually does - nothing. - * wtf/TCSystemAlloc.cpp: - (TCMalloc_SystemRelease): use MADV_FREE if it is available; otherwise use - MADV_DONTNEED. - -2009-05-21 Mark Rowe - - Reviewed by Oliver Hunt. - - Fix / . - Bug 25917: REGRESSION (r43559?): Javascript debugger crashes when pausing page - - The debugger currently retrieves the arguments object from an activation rather than pulling - it from a call frame. This is unreliable to due to the recent optimization to lazily create - the arguments object. In the long-term it should stop doing that (), - but for now we force eager creation of the arguments object when debugging. - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::BytecodeGenerator): - -2009-05-21 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Bug 25912: Harden NumberPrototype.cpp by removing use of strcpy() - - - This causes no change on SunSpider. - - * runtime/NumberPrototype.cpp: - (JSC::integerPartNoExp): replace strcpy() with memcpy(), ASSERT that the - temporary buffer has sufficient space to store the result, and move the - explicit null-termination closer to the memcpy() for easier visual inspection - of the code. - (JSC::fractionalPartToString): replace strcpy() with memcpy(), and ASSERT - that the temporary buffer has sufficient space to store the result. There - is no explicit null-termination because this is done by the caller. The - same is already true for exponentialPartToString(). - (JSC::numberProtoFuncToExponential): replace strcpy() with memcpy(), explicitly - null-terminate the result, and ASSERT that the temporary buffer has sufficient - space to store the result. - -2009-05-20 Sam Weinig - - Reviewed by Cameron Zwarich. - - Cleanup the JSGlobalData when exiting early with the usage statement in jsc. - - * jsc.cpp: - (printUsageStatement): - (parseArguments): - (jscmain): - -2009-05-20 Stephanie Lewis - - Update the order files. Generate new order files. - - * JavaScriptCore.order: - -2009-05-19 Kenneth Rohde Christiansen - - Reviewed by Simon Hausmann. - - Replace WREC with YARR + YARR_JIT for the Qt port. This is only - used when compiled with JIT support for now, so it is a drop-in - replacement for the WREC usage. Still including the wrec headers - as they are being referred from RegExp.h, though the contents of - that header it protected by "#if ENABLE(WREC)". - - * JavaScriptCore.pri: - -2009-05-20 Xan Lopez - - Reviewed by Eric Seidel. - - Fix GTK debug build. - - The function dumpDisjunction, compiled with debug enabled, uses - printf, which needs stdio.h to be included. - - * yarr/RegexInterpreter.cpp: - -2009-05-20 Laszlo Gombos - - Reviewed by George Staikos. - - BUG 25843: [Qt] Remove qt-port build flag - - - * JavaScriptCore.pro: - - -2009-05-19 Geoffrey Garen - - Windows build fix. - - * interpreter/RegisterFile.cpp: - (JSC::RegisterFile::releaseExcessCapacity): Copy-paste typo. - -2009-05-19 Geoffrey Garen - - Reviewed by Sam Weinig. - - Fixed CrashTracer: [USER] 1 crash in Install - Mac OS X at • 0x9274241c - - (Original patch by Joe Sokol and Ronnie Misra.) - - SunSpider says 1.004x faster. - - * interpreter/RegisterFile.cpp: - (JSC::RegisterFile::releaseExcessCapacity): Instead of doing complicated - math that sometimes used to overflow, just release the full range of the - register file. - - * interpreter/RegisterFile.h: - (JSC::isPageAligned): - (JSC::RegisterFile::RegisterFile): Added ASSERTs to verify that it's - safe to release the full range of the register file. - - (JSC::RegisterFile::shrink): No need to releaseExcessCapacity() if the - new end is not smaller than the old end. (Also, doing so used to cause - numeric overflow, unmapping basically the whole process from memory.) - -2009-05-19 Oliver Hunt - - RS=Mark Rowe. - - REGRESSION: Start Debugging JavaScript crashes browser (nightly builds only?) - - - Remove JSC_FAST_CALL as it wasn't gaining us anything, and was - resulting in weird bugs in the nightly builds. - - * parser/Nodes.cpp: - * parser/Nodes.h: - (JSC::ExpressionNode::isNumber): - (JSC::ExpressionNode::isString): - (JSC::ExpressionNode::isNull): - (JSC::ExpressionNode::isPure): - (JSC::ExpressionNode::isLocation): - (JSC::ExpressionNode::isResolveNode): - (JSC::ExpressionNode::isBracketAccessorNode): - (JSC::ExpressionNode::isDotAccessorNode): - (JSC::ExpressionNode::isFuncExprNode): - (JSC::ExpressionNode::isSimpleArray): - (JSC::ExpressionNode::isAdd): - (JSC::ExpressionNode::resultDescriptor): - (JSC::StatementNode::firstLine): - (JSC::StatementNode::lastLine): - (JSC::StatementNode::isEmptyStatement): - (JSC::StatementNode::isReturnNode): - (JSC::StatementNode::isExprStatement): - (JSC::StatementNode::isBlock): - (JSC::NullNode::isNull): - (JSC::BooleanNode::isPure): - (JSC::NumberNode::value): - (JSC::NumberNode::setValue): - (JSC::NumberNode::isNumber): - (JSC::NumberNode::isPure): - (JSC::StringNode::isPure): - (JSC::StringNode::isString): - (JSC::ResolveNode::identifier): - (JSC::ResolveNode::isLocation): - (JSC::ResolveNode::isResolveNode): - (JSC::BracketAccessorNode::isLocation): - (JSC::BracketAccessorNode::isBracketAccessorNode): - (JSC::DotAccessorNode::base): - (JSC::DotAccessorNode::identifier): - (JSC::DotAccessorNode::isLocation): - (JSC::DotAccessorNode::isDotAccessorNode): - (JSC::TypeOfResolveNode::identifier): - (JSC::AddNode::isAdd): - (JSC::BlockNode::isBlock): - (JSC::EmptyStatementNode::isEmptyStatement): - (JSC::ExprStatementNode::isExprStatement): - (JSC::ReturnNode::isReturnNode): - (JSC::ScopeNode::sourceURL): - (JSC::ProgramNode::bytecode): - (JSC::EvalNode::bytecode): - (JSC::FunctionBodyNode::parameters): - (JSC::FunctionBodyNode::toSourceString): - (JSC::FunctionBodyNode::bytecode): - (JSC::FuncExprNode::isFuncExprNode): - -2009-05-19 Maciej Stachowiak - - Reviewed by Gavin Barraclough. - - - speed up string comparison, especially for short strings - - ~1% on SunSpider - - * JavaScriptCore.exp: - * runtime/UString.cpp: - * runtime/UString.h: - (JSC::operator==): Inline UString's operator==, since it is called from - hot places in the runtime. Also, specialize 2-char strings in a similar way to - 1-char, since we're taking the hit of a switch anyway. - -2009-05-18 Maciej Stachowiak - - Reviewed by Gavin Barraclough. - - - for polymorphic prototype lookups, increase the number of slots from 4 to 8 - - ~4% faster on v8 raytrace benchmark - - * bytecode/Instruction.h: - -2009-05-18 Maciej Stachowiak - - Reviewed by Oliver Hunt. - - - tighten up the code for the load_varargs stub - - ~1-2% on v8-raytrace - - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_load_varargs): Hoist some loop invariants that - the compiler didn't feel like hoisting for us. Remove unneeded exception check. - -2009-05-18 Maciej Stachowiak - - Reviewed by Geoff Garen. - - - Improve code generation for access to prototype properties - - ~0.4% speedup on SunSpider. - - Based on a suggestion from Geoff Garen. - - * jit/JIT.h: - * jit/JITPropertyAccess.cpp: - (JSC::JIT::compileGetDirectOffset): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdProtoList): - (JSC::JIT::privateCompileGetByIdChainList): - (JSC::JIT::privateCompileGetByIdChain): - -2009-05-18 Gustavo Noronha Silva - - Reviewed by Gavin Barraclough. - - Enable YARR, and disable WREC for GTK+. - - * GNUmakefile.am: - * yarr/RegexParser.h: - -2009-05-18 Jan Michael Alonzo - - Reviewed by Xan Lopez. - - [Gtk] Various autotools build refactoring and fixes - https://bugs.webkit.org/show_bug.cgi?id=25286 - - Add -no-install and -no-fast-install to programs and tests that we - don't install. Also remove -O2 since this is already handled at - configure time. - - * GNUmakefile.am: - -2009-05-17 Jan Michael Alonzo - - Reviewed by Xan Lopez. - - [Gtk] Various autotools build refactoring and fixes - https://bugs.webkit.org/show_bug.cgi?id=25286 - - Add JavaScriptCore/ to JSC include path only since it's not - required when building WebCore. - - * GNUmakefile.am: - -2009-05-17 Steve Falkenburg - - Windows build fix - - * JavaScriptCore.vcproj/JavaScriptCore.make: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - -2009-05-15 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Looking like MSVC doesn't like static variables in inline methods? - Make the state of the SSE2 check a static variable on the class - MacroAssemblerX86Common as a speculative build fix for Windows. - - * assembler/MacroAssemblerX86Common.h: - (JSC::MacroAssemblerX86Common::convertInt32ToDouble): - (JSC::MacroAssemblerX86Common::branchDouble): - (JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32): - (JSC::MacroAssemblerX86Common::isSSE2Present): - (JSC::MacroAssemblerX86Common::): - * jit/JIT.cpp: - -2009-05-15 Adam Roben - - Add some assembler headers to JavaScriptCore.vcproj - - This is just a convenience for Windows developers. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - -2009-05-15 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Add FP support to the MacroAssembler, port JITArithmetic over to make use of this. Also add - API to determine whether FP support is available 'MacroAssembler::supportsFloatingPoint()', - FP is presently only supported on SSE2 platforms, not x87. On platforms where a suitable - hardware FPU is not available 'supportsFloatingPoint()' may simply return false, and all - other methods ASSERT_NOT_REACHED(). - - * assembler/AbstractMacroAssembler.h: - * assembler/MacroAssemblerX86.h: - (JSC::MacroAssemblerX86::MacroAssemblerX86): - (JSC::MacroAssemblerX86::branch32): - (JSC::MacroAssemblerX86::branchPtrWithPatch): - (JSC::MacroAssemblerX86::supportsFloatingPoint): - * assembler/MacroAssemblerX86Common.h: - (JSC::MacroAssemblerX86Common::): - (JSC::MacroAssemblerX86Common::loadDouble): - (JSC::MacroAssemblerX86Common::storeDouble): - (JSC::MacroAssemblerX86Common::addDouble): - (JSC::MacroAssemblerX86Common::subDouble): - (JSC::MacroAssemblerX86Common::mulDouble): - (JSC::MacroAssemblerX86Common::convertInt32ToDouble): - (JSC::MacroAssemblerX86Common::branchDouble): - (JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32): - (JSC::MacroAssemblerX86Common::branch32): - (JSC::MacroAssemblerX86Common::branch16): - (JSC::MacroAssemblerX86Common::branchTest32): - (JSC::MacroAssemblerX86Common::branchAdd32): - (JSC::MacroAssemblerX86Common::branchMul32): - (JSC::MacroAssemblerX86Common::branchSub32): - (JSC::MacroAssemblerX86Common::set32): - (JSC::MacroAssemblerX86Common::setTest32): - (JSC::MacroAssemblerX86Common::x86Condition): - (JSC::MacroAssemblerX86Common::isSSE2Present): - * assembler/MacroAssemblerX86_64.h: - (JSC::MacroAssemblerX86_64::movePtrToDouble): - (JSC::MacroAssemblerX86_64::moveDoubleToPtr): - (JSC::MacroAssemblerX86_64::setPtr): - (JSC::MacroAssemblerX86_64::branchPtr): - (JSC::MacroAssemblerX86_64::branchTestPtr): - (JSC::MacroAssemblerX86_64::branchAddPtr): - (JSC::MacroAssemblerX86_64::branchSubPtr): - (JSC::MacroAssemblerX86_64::supportsFloatingPoint): - * assembler/X86Assembler.h: - * jit/JIT.cpp: - (JSC::JIT::JIT): - * jit/JIT.h: - * jit/JITArithmetic.cpp: - (JSC::JIT::emit_op_rshift): - (JSC::JIT::emitSlow_op_rshift): - (JSC::JIT::emitSlow_op_jnless): - (JSC::JIT::emitSlow_op_jnlesseq): - (JSC::JIT::compileBinaryArithOp): - (JSC::JIT::compileBinaryArithOpSlowCase): - (JSC::JIT::emit_op_add): - (JSC::JIT::emitSlow_op_add): - (JSC::JIT::emit_op_mul): - (JSC::JIT::emitSlow_op_mul): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompilePutByIdTransition): - -2009-05-15 Francisco Tolmasky - - BUG 25467: JavaScript debugger should use function.displayName as the function's name in the call stack - - - Reviewed by Adam Roben. - - * JavaScriptCore.exp: Added calculatedFunctionName - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Added calculatedFunctionName - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Added calculatedFunctionName - * debugger/DebuggerCallFrame.cpp: Added calculatedFunctionName to match existing one in ProfileNode. - (JSC::DebuggerCallFrame::calculatedFunctionName): - * debugger/DebuggerCallFrame.h: Added calculatedFunctionName to match existing one in ProfileNode. - -2009-05-14 Gavin Barraclough - - Build fix, not reviewed. - - Quick fixes for JIT builds with OPTIMIZE flags disabled. - - * jit/JITCall.cpp: - (JSC::JIT::compileOpCall): - (JSC::JIT::compileOpCallSlowCase): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::compilePutByIdHotPath): - -2009-05-14 Steve Falkenburg - - Back out incorrect Windows build fix - - * JavaScriptCore.vcproj/JavaScriptCore.make: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - -2009-05-14 Steve Falkenburg - - Windows build fix - - * JavaScriptCore.vcproj/JavaScriptCore.make: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - -2009-05-14 Adam Roben - - Windows jsc build fix - - r43648 modified jsc.vcproj's post-build event not to try to copy files - that aren't present. Then r43661 mistakenly un-did that modification. - This patch restores the modification from r43648, but puts the code in - jscCommon.vsprops (where it should have been added in r43648). - - * JavaScriptCore.vcproj/jsc/jsc.vcproj: Restored empty - VCPostBuildEventTool tags. - * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Modified the post-build - event command line to match the one in jsc.vcproj from r43648. - -2009-05-14 Laszlo Gombos - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=25325 - - Make sure pthread_self() is declared before it gets called in Collector.cpp - - * runtime/Collector.cpp: Include pthread.h in most Unix-like platforms - (not just for OPENBSD) - -2009-05-14 Mark Rowe - - Reviewed by Oliver Hunt. - - Fix . - Bug 25785: Segfault in mark when using JSObjectMakeConstructor - - * API/JSObjectRef.cpp: - (JSObjectMakeConstructor): OpaqueJSClass::prototype can return 0. We need to use the default object prototype when it does. - * API/tests/testapi.c: - (main): Add a test case. - * runtime/JSObject.h: - (JSC::JSObject::putDirect): Add a clearer assertion for a null value. The assertion on the next line does catch this, - but the cause of the failure is not clear from the assertion itself. - -2009-05-14 Mark Rowe - - Rubber-stamped by Darin Adler. - - When building with Xcode 3.1.3 should be using gcc 4.2 - - The meaning of XCODE_VERSION_ACTUAL is more sensible in newer versions of Xcode. - Update our logic to select the compiler version to use the more appropriate XCODE_VERSION_MINOR - if the version of Xcode supports it, and fall back to XCODE_VERSION_ACTUAL if not. - - * Configurations/Base.xcconfig: - -2009-05-14 Gavin Barraclough - - Reviewed by Geoff Garen. - - Checking register file bounds should be a ptr comparison (m_end is a Register*). - Also, the compare should be unsigned, pointers don'ts go negative. - - * jit/JIT.cpp: - (JSC::JIT::privateCompile): - -2009-05-13 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Fix REGRESSION: page at Metroauto site crashes in cti_op_loop_if_less (25730) - - op_loop_if_less (imm < op) was loading op into regT1, but in the slow path spills regT0. - This leads to bad happen. - - * jit/JITOpcodes.cpp: - (JSC::JIT::emit_op_loop_if_less): - (JSC::JIT::emitSlow_op_loop_if_less): - -2009-05-13 Dmitry Titov - - Rubber-stamped by Mark Rowe. - - https://bugs.webkit.org/show_bug.cgi?id=25746 - Revert http://trac.webkit.org/changeset/43507 which caused crash in PPC nightlies with Safari 4. - - * JavaScriptCore.exp: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - * bytecode/SamplingTool.cpp: - (JSC::SamplingThread::start): - (JSC::SamplingThread::stop): - * bytecode/SamplingTool.h: - * wtf/CrossThreadRefCounted.h: - (WTF::CrossThreadRefCounted::CrossThreadRefCounted): - (WTF::::ref): - (WTF::::deref): - * wtf/Threading.h: - * wtf/ThreadingNone.cpp: - * wtf/ThreadingPthreads.cpp: - (WTF::threadMapMutex): - (WTF::initializeThreading): - (WTF::threadMap): - (WTF::identifierByPthreadHandle): - (WTF::establishIdentifierForPthreadHandle): - (WTF::pthreadHandleForIdentifier): - (WTF::clearPthreadHandleForIdentifier): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::detachThread): - (WTF::currentThread): - * wtf/ThreadingWin.cpp: - (WTF::threadMapMutex): - (WTF::initializeThreading): - (WTF::threadMap): - (WTF::storeThreadHandleByIdentifier): - (WTF::threadHandleForIdentifier): - (WTF::clearThreadHandleForIdentifier): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::detachThread): - (WTF::currentThread): - * wtf/gtk/ThreadingGtk.cpp: - (WTF::threadMapMutex): - (WTF::initializeThreading): - (WTF::threadMap): - (WTF::identifierByGthreadHandle): - (WTF::establishIdentifierForThread): - (WTF::threadForIdentifier): - (WTF::clearThreadForIdentifier): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::currentThread): - * wtf/qt/ThreadingQt.cpp: - (WTF::threadMapMutex): - (WTF::threadMap): - (WTF::identifierByQthreadHandle): - (WTF::establishIdentifierForThread): - (WTF::clearThreadForIdentifier): - (WTF::threadForIdentifier): - (WTF::initializeThreading): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::currentThread): - -2009-05-13 Darin Adler - - Revert the parser arena change. It was a slowdown, not a speedup. - Better luck next time (I'll break it up into pieces). - -2009-05-13 Darin Adler - - Tiger build fix. - - * parser/Grammar.y: Add back empty code blocks, needed by older - versions of bison on certain rules. - -2009-05-13 Steve Falkenburg - - Windows build fix. - - * JavaScriptCore.vcproj/jsc/jsc.vcproj: - -2009-05-13 Adam Roben - - Windows build fixes after r43642 - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - Updated. - - * debugger/Debugger.cpp: - * runtime/ArrayConstructor.cpp: - * runtime/JSArray.cpp: - * runtime/RegExp.cpp: - * runtime/RegExpConstructor.cpp: - * runtime/RegExpPrototype.cpp: - * runtime/StringPrototype.cpp: - Added missing #includes. - -2009-05-13 Darin Adler - - Reviewed by Cameron Zwarich. - - Bug 25674: syntax tree nodes should use arena allocation - https://bugs.webkit.org/show_bug.cgi?id=25674 - - Step 3: Add some actual arena allocation. About 1% SunSpider speedup. - - * JavaScriptCore.exp: Updated. - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::BytecodeGenerator): Updated since VarStack - contains const Identifier* now. - (JSC::BytecodeGenerator::emitPushNewScope): Updated to take a const - Identifier&. - * bytecompiler/BytecodeGenerator.h: Ditto - - * bytecompiler/SegmentedVector.h: Added isEmpty. - - * debugger/Debugger.cpp: - (JSC::Debugger::recompileAllJSFunctions): Moved this function here from - WebCore so WebCore doesn't need the details of FunctionBodyNode. - * debugger/Debugger.h: Ditto. - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::execute): Updated since VarStack contains const - Identifier* now. - - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_vm_lazyLinkCall): Call isHostFunction on the body - rather than on the function object, since we can't easily have inlined - access to the FunctionBodyNode in JSFunction.h since WebCore needs - access to that header. - (JSC::JITStubs::cti_op_construct_JSConstruct): Ditto. - * profiler/Profiler.cpp: - (JSC::Profiler::createCallIdentifier): Ditto. - - * parser/Grammar.y: Use JSGlobalData* to pass the global data pointer - around whenever possible instead of using void*. Changed - SET_EXCEPTION_LOCATION from a macro to an inline function. Marked - the structure-creating functions inline. Changed the VarStack to use - identifier pointers instead of actual identifiers. This takes - advantage of the fact that all identifier pointers come from the - arena and avoids reference count churn. Changed Identifier* to - const Identifier* to make sure we don't modify any by accident. - Used identifiers for regular expression strings too, using the new - scanRegExp that has out parameters instead of the old one that relied - on side effects in the Lexer. Move the creation of numeric identifiers - out of this file and into the PropertyNode constructor. - - * parser/Lexer.cpp: - (JSC::Lexer::setCode): Pass in ParserArena, used for identifiers. - (JSC::Lexer::makeIdentifier): Changed return type to const Identifier* - and changed to call ParserArena. - (JSC::Lexer::scanRegExp): Added out arguments that are const Identifier* - as well as a prefix character argument so we can handle the /= case - without a string append. - (JSC::Lexer::skipRegExp): Added. Skips a regular expression without - allocating Identifier objects. - (JSC::Lexer::clear): Removed the code to manage m_identifiers, m_pattern, - and m_flags, and added code to set m_arena to 0. - * parser/Lexer.h: Updated for changes above. - - * parser/NodeConstructors.h: - (JSC::ParserArenaFreeable::operator new): Added. Calls allocateFreeable - on the arena. - (JSC::ParserArenaDeletable::operator new): Changed to call the - allocateDeletable function on the arena instead of deleteWithArena. - (JSC::RegExpNode::RegExpNode): Changed arguments to Identifier instead - of UString since these come from the parser which makes identifiers. - (JSC::PropertyNode::PropertyNode): Added new constructor that makes - numeric identifiers. Some day we might want to optimize this for - integers so it doesn't create a string for each one. - (JSC::ContinueNode::ContinueNode): Initialize m_ident to nullIdentifier - since it's now a const Identifier& so it can't be left uninitialized. - (JSC::BreakNode::BreakNode): Ditto. - (JSC::CaseClauseNode::CaseClauseNode): Updated to use SourceElements* - to keep track of the statements rather than a separate statement vector. - (JSC::BlockNode::BlockNode): Ditto. - (JSC::ForInNode::ForInNode): Initialize m_ident to nullIdentifier. - - * parser/Nodes.cpp: Moved the comment explaining emitBytecode in here. - It seemed strangely out of place in the header. - (JSC::ThrowableExpressionData::emitThrowError): Added an overload for - UString as well as Identifier. - (JSC::SourceElements::singleStatement): Added. - (JSC::SourceElements::lastStatement): Added. - (JSC::RegExpNode::emitBytecode): Updated since the pattern and flags - are now Identifier instead of UString. Also changed the throwError code - to use the substitution mechanism instead of doing a string append. - (JSC::SourceElements::emitBytecode): Added. Replaces the old - statementListEmitCode function, since we now keep the SourceElements - objects around. - (JSC::BlockNode::lastStatement): Added. - (JSC::BlockNode::emitBytecode): Changed to use emitBytecode instead of - statementListEmitCode. - (JSC::CaseClauseNode::emitBytecode): Added. - (JSC::CaseBlockNode::emitBytecodeForBlock): Changed to use emitBytecode - instead of statementListEmitCode. - (JSC::ScopeNodeData::ScopeNodeData): Changed to store the - SourceElements* instead of using releaseContentsIntoVector. - (JSC::ScopeNode::emitStatementsBytecode): Added. - (JSC::ScopeNode::singleStatement): Added. - (JSC::ProgramNode::emitBytecode): Call emitStatementsBytecode instead - of statementListEmitCode. - (JSC::EvalNode::emitBytecode): Ditto. - (JSC::EvalNode::generateBytecode): Removed code to clear the children - vector. This optimization is no longer possible since everything is in - a single arena. - (JSC::FunctionBodyNode::emitBytecode): Call emitStatementsBytecode - insetad of statementListEmitCode and check for the return node using - the new functions. - - * parser/Nodes.h: Changed VarStack to store const Identifier* instead - of Identifier and rely on the arena to control lifetime. Added a new - ParserArenaFreeable class. Made ParserArenaDeletable inherit from - FastAllocBase instead of having its own operator new. Base the Node - class on ParserArenaFreeable. Changed the various Node classes - to use const Identifier& instead of Identifier to avoid the need to - call their destructors and allow them to function as "freeable" in the - arena. Removed extraneous JSC_FAST_CALL on definitions of inline functions. - Changed ElementNode, PropertyNode, ArgumentsNode, ParameterNode, - CaseClauseNode, ClauseListNode, and CaseBlockNode to use ParserArenaFreeable - as a base class since they do not descend from Node. Eliminated the - StatementVector type and instead have various classes use SourceElements* - instead of StatementVector. This prevents those classes from having th - use ParserArenaDeletable to make sure the vector destructor is called. - - * parser/Parser.cpp: - (JSC::Parser::parse): Pass the arena to the lexer. - - * parser/Parser.h: Added an include of ParserArena.h, which is no longer - included by Nodes.h. - - * parser/ParserArena.cpp: - (JSC::ParserArena::ParserArena): Added. Initializes the new members, - m_freeableMemory, m_freeablePoolEnd, and m_identifiers. - (JSC::ParserArena::freeablePool): Added. Computes the pool pointer, - since we store only the current pointer and the end of pool pointer. - (JSC::ParserArena::deallocateObjects): Added. Contains the common - memory-deallocation logic used by both the destructor and the - reset function. - (JSC::ParserArena::~ParserArena): Changed to call deallocateObjects. - (JSC::ParserArena::reset): Ditto. Also added code to zero out the - new structures, and switched to use clear() instead of shrink(0) since - we don't really reuse arenas. - (JSC::ParserArena::makeNumericIdentifier): Added. - (JSC::ParserArena::allocateFreeablePool): Added. Used when the pool - is empty. - (JSC::ParserArena::isEmpty): Added. No longer inline, which is fine - since this is used only for assertions at the moment. - - * parser/ParserArena.h: Added an actual arena of "freeable" objects, - ones that don't need destructors to be called. Also added the segmented - vector of identifiers that used to be in the Lexer. - - * runtime/FunctionConstructor.cpp: - (JSC::extractFunctionBody): Use singleStatement function rather than - getting at a StatementVector. - - * runtime/FunctionPrototype.cpp: - (JSC::functionProtoFuncToString): Call isHostFunction on the body - rather than the function object. - - * runtime/JSFunction.cpp: - (JSC::JSFunction::JSFunction): Moved the structure version of this in - here from the header. It's not hot enough that it needs to be inlined. - (JSC::JSFunction::isHostFunction): Moved this in here from the header. - It's now a helper to be used only within the class. - (JSC::JSFunction::setBody): Moved this in here. It's not hot enough that - it needs to be inlined, and we want to be able to compile the header - without the definition of FunctionBodyNode. - - * runtime/JSFunction.h: Eliminated the include of "Nodes.h". This was - exposing too much JavaScriptCore dependency to WebCore. Because of this - change and some changes made to WebCore, we could now export a lot fewer - headers from JavaScriptCore, but I have not done that yet in this check-in. - Made a couple functions non-inline. Removes some isHostFunction() assertions. - - * wtf/FastAllocBase.h: Added the conventional using statements we use in - WTF so we can use identifiers from the WTF namespace without explicit - namespace qualification or namespace directive. This is the usual WTF style, - although it's unconventional in the C++ world. We use the namespace primarily - for link-time disambiguation, not compile-time. - - * wtf/FastMalloc.cpp: Fixed an incorrect comment. - -2009-05-13 Xan Lopez - - Unreviewed build fix: add JITStubCall.h to files list. - - * GNUmakefile.am: - -2009-05-13 Ariya Hidayat - - Unreviewed build fix, as suggested by Yael Aharon . - - * wtf/qt/ThreadingQt.cpp: - (WTF::waitForThreadCompletion): renamed IsValid to isValid. - -2009-05-13 Jan Michael Alonzo - - Revert r43562 - [Gtk] WTF_USE_JSC is already defined in - WebCore/config.h. - - * wtf/Platform.h: - -2009-05-12 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Add SamplingCounter tool to provide a simple mechanism for counting events in JSC - (enabled using ENABLE(SAMPLING_COUNTERS)). To count events within a single function - use the class 'SamplingCounter', where the counter may be incremented from multiple - functions 'GlobalSamplingCounter' may be convenient; all other counters (stack or - heap allocated, rather than statically declared) should use the DeletableSamplingCounter. - Further description of these classes is provided alongside their definition in - SamplingTool.h. - - Counters may be incremented from c++ by calling the 'count()' method on the counter, - or may be incremented by JIT code by using the 'emitCount()' method within the JIT. - - This patch also fixes CODEBLOCK_SAMPLING, which was missing a null pointer check. - - * JavaScriptCore.exp: - * assembler/MacroAssemblerX86.h: - (JSC::MacroAssemblerX86::addWithCarry32): - (JSC::MacroAssemblerX86::and32): - (JSC::MacroAssemblerX86::or32): - * assembler/MacroAssemblerX86Common.h: - (JSC::MacroAssemblerX86Common::and32): - (JSC::MacroAssemblerX86Common::or32): - * assembler/MacroAssemblerX86_64.h: - (JSC::MacroAssemblerX86_64::and32): - (JSC::MacroAssemblerX86_64::or32): - (JSC::MacroAssemblerX86_64::addPtr): - * assembler/X86Assembler.h: - (JSC::X86Assembler::): - (JSC::X86Assembler::adcl_im): - (JSC::X86Assembler::addq_im): - (JSC::X86Assembler::andl_im): - (JSC::X86Assembler::orl_im): - * bytecode/SamplingTool.cpp: - (JSC::AbstractSamplingCounter::dump): - * bytecode/SamplingTool.h: - (JSC::AbstractSamplingCounter::count): - (JSC::GlobalSamplingCounter::name): - (JSC::SamplingCounter::SamplingCounter): - * jit/JIT.h: - * jit/JITCall.cpp: - (JSC::): - * jit/JITInlineMethods.h: - (JSC::JIT::setSamplingFlag): - (JSC::JIT::clearSamplingFlag): - (JSC::JIT::emitCount): - * jsc.cpp: - (runWithScripts): - * parser/Nodes.cpp: - (JSC::ScopeNode::ScopeNode): - * wtf/Platform.h: - -2009-05-13 Steve Falkenburg - - Windows build fix. - - * JavaScriptCore.vcproj/JavaScriptCore.make: - -2009-05-12 Steve Falkenburg - - Windows build fix. - - * JavaScriptCore.vcproj/JavaScriptCore.make: - -2009-05-12 Oliver Hunt - - Reviewed by Gavin Barraclough. - - Crash occurs at JSC::Interpreter::execute() when loading http://www.sears.com - - We created the arguments objects before an op_push_scope but not - before op_push_new_scope, this meant a null arguments object could - be resolved inside catch blocks. - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitPushNewScope): - -2009-05-12 Oliver Hunt - - Reviewed by Gavin Barraclough. - - Crash occurs at JSC::JSActivation::mark() when loading http://www.monster.com; http://www.cnet.com - Crash loading www.google.dk/ig (and other igoogle's as well) - - Following on from the lazy arguments creation patch, it's now - possible for an activation to to have a null register in the callframe - so we can't just blindly mark the local registers in an activation, - and must null check first instead. - - * API/tests/testapi.c: - (functionGC): - * API/tests/testapi.js: - (bludgeonArguments.return.g): - (bludgeonArguments): - * runtime/JSActivation.cpp: - (JSC::JSActivation::mark): - -2009-05-12 Gavin Barraclough - - Rubber stamped by Geoff Garen. - - WTF_USE_CTI_REPATCH_PIC is no longer used, remove. - - * jit/JIT.h: - * jit/JITStubCall.h: - -2009-05-12 Gavin Barraclough - - Reviewed by Maciej Stachowiak. - - We've run into some problems where changing the size of the class JIT leads to - performance fluctuations. Try forcing alignment in an attempt to stabalize this. - - * jit/JIT.h: - -2009-05-12 Kevin Ollivier - - wx build fix. Add ParserArena.cpp to the build. - - * JavaScriptCoreSources.bkl: - -2009-05-12 Oliver Hunt - - Reviewed by Geoff Garen. - - Unsigned underflow on 64bit cannot be treated as a negative number - - This code included some placeswhere we deliberately create negative offsets - from unsigned values, on 32bit this is "safe", but in 64bit builds much - badness occurs. Solution is to use signed types as nature intended. - - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_load_varargs): - -2009-05-12 Jan Michael Alonzo - - Reviewed by Holger Freyther. - - [Gtk] Various autotools build refactoring and fixes - https://bugs.webkit.org/show_bug.cgi?id=25286 - - Define WTF_USE_JSC for the Gtk port. - - * wtf/Platform.h: - -2009-05-12 Maciej Stachowiak - - Reviewed by Oliver Hunt. - - - allow all of strictEqual to be inlined into cti_op_stricteq once again - - We had this optimization once but accidentally lost it at some point. - - * runtime/Operations.h: - (JSC::JSValue::strictEqualSlowCaseInline): - (JSC::JSValue::strictEqual): - -2009-05-12 Gavin Barraclough - - Reviewed by Oliver Hunt. - - instanceof should throw if the constructor being tested does not implement - 'HasInstance" (i.e. is a function). Instead we were returning false. - - * interpreter/Interpreter.cpp: - (JSC::isInvalidParamForIn): - (JSC::isInvalidParamForInstanceOf): - (JSC::Interpreter::privateExecute): - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_instanceof): - * tests/mozilla/ecma_2/instanceof/instanceof-003.js: - Fix broken test case. - * tests/mozilla/ecma_2/instanceof/regress-7635.js: - Remove broken test case (was an exact duplicate of a test in instanceof-003.js). - -2009-05-12 Oliver Hunt - - Reviewed by Gavin Barraclough. - - Improve function call forwarding performance - - Make creation of the Arguments object occur lazily, so it - is not necessarily created for every function that references - it. Then add logic to Function.apply to allow it to avoid - allocating the Arguments object at all. Helps a lot with - the function forwarding/binding logic in jQuery, Prototype, - and numerous other JS libraries. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * bytecode/Opcode.h: - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::BytecodeGenerator): - (JSC::BytecodeGenerator::registerFor): - (JSC::BytecodeGenerator::willResolveToArguments): - (JSC::BytecodeGenerator::uncheckedRegisterForArguments): - (JSC::BytecodeGenerator::createArgumentsIfNecessary): - (JSC::BytecodeGenerator::emitCallEval): - (JSC::BytecodeGenerator::emitPushScope): - * bytecompiler/BytecodeGenerator.h: - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - (JSC::Interpreter::retrieveArguments): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - * jit/JIT.h: - * jit/JITOpcodes.cpp: - (JSC::JIT::emit_op_create_arguments): - (JSC::JIT::emit_op_init_arguments): - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_tear_off_arguments): - (JSC::JITStubs::cti_op_load_varargs): - * parser/Nodes.cpp: - (JSC::ApplyFunctionCallDotNode::emitBytecode): - -2009-05-11 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Enable use of SamplingFlags directly from JIT code. - - * bytecode/SamplingTool.h: - * jit/JIT.h: - (JSC::JIT::sampleCodeBlock): - (JSC::JIT::sampleInstruction): - * jit/JITInlineMethods.h: - (JSC::JIT::setSamplingFlag): - (JSC::JIT::clearSamplingFlag): - -2009-05-11 Gavin Barraclough - - Reviewed by Cameron Zwarich. - - Implement JIT generation for instanceof for non-objects (always returns false). - Also fixes the sequencing of the prototype and value isObject checks, to no match the spec. - - 0.5% progression on v8 tests overall, due to 3.5% on early-boyer. - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - * runtime/JSObject.cpp: - (JSC::JSObject::hasInstance): - * runtime/TypeInfo.h: - (JSC::TypeInfo::TypeInfo): - -2009-05-11 Geoffrey Garen - - Reviewed by Sam Weinig. - - A little more JIT refactoring. - - Rearranged code to more clearly indicate what's conditionally compiled - and why. Now, all shared code is at the top of our JIT files, and all - #if'd code is at the bottom. #if'd code is delineated by large comments. - - Moved functions that relate to the JIT but don't explicitly do codegen - into JIT.cpp. Refactored SSE2 check to store its result as a data member - in the JIT. - - * jit/JIT.cpp: - (JSC::isSSE2Present): - (JSC::JIT::JIT): - (JSC::JIT::unlinkCall): - (JSC::JIT::linkCall): - * jit/JIT.h: - (JSC::JIT::isSSE2Present): - * jit/JITArithmetic.cpp: - (JSC::JIT::emit_op_mod): - (JSC::JIT::emitSlow_op_mod): - * jit/JITCall.cpp: - (JSC::JIT::compileOpCallVarargs): - (JSC::JIT::compileOpCallVarargsSlowCase): - -2009-05-11 Holger Hans Peter Freyther - - Build fix. - - * JavaScriptCore.pri: Build the new JITOpcodes.cpp - -2009-05-11 Sam Weinig - - Reviewed by Geoffrey Garen. - - More re-factoring of JIT code generation. Use a macro to - forward the main switch-statement cases to the helper functions. - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - -2009-05-11 Sam Weinig - - Reviewed by Geoffrey Garen. - - More re-factoring of JIT code generation to move opcode generation - to helper functions outside the main switch-statement and gave those - helper functions standardized names. This patch covers the remaining - slow cases. - - * jit/JIT.cpp: - * jit/JIT.h: - * jit/JITOpcodes.cpp: - -2009-05-11 Geoffrey Garen - - Build fix. - - * GNUmakefile.am: Added JITOpcodes.cpp and JITStubCall.h to the project. - -2009-05-11 Geoffrey Garen - - Build fix. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added - JITOpcodes.cpp and JITStubCall.h to the project. - -2009-05-11 Geoffrey Garen - - Reviewed by Sam Weinig. - - Some JIT refactoring. - - Moved JITStubCall* into its own header. - - Modified JITStubCall to ASSERT that its return value is handled correctly. - Also, replaced function template with explicit instantiations to resolve - some confusion. - - Replaced all uses of emit{Get,Put}CTIArgument with explicit peeks, pokes, - and calls to killLastResultRegister(). - - * JavaScriptCore.xcodeproj/project.pbxproj: - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompile): - * jit/JIT.h: - * jit/JITArithmetic.cpp: - * jit/JITCall.cpp: - * jit/JITInlineMethods.h: - (JSC::JIT::restoreArgumentReference): - * jit/JITPropertyAccess.cpp: - * jit/JITStubCall.h: Copied from jit/JIT.h. - (JSC::JITStubCall::JITStubCall): - (JSC::JITStubCall::addArgument): - (JSC::JITStubCall::call): - (JSC::JITStubCall::): - -2009-05-11 Sam Weinig - - Reviewed by Geoffrey Garen. - - Start re-factoring JIT code generation to move opcode generation - to helper functions outside the main switch-statement and gave those - helper functions standardized names. This patch only covers the main - pass and all the arithmetic opcodes in the slow path. - - * JavaScriptCore.xcodeproj/project.pbxproj: - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - * jit/JIT.h: - * jit/JITArithmetic.cpp: - * jit/JITOpcodes.cpp: Copied from jit/JIT.cpp. - * jit/JITPropertyAccess.cpp: - -2009-05-11 Steve Falkenburg - - Re-add experimental PGO configs. - - Reviewed by Adam Roben. - - * JavaScriptCore.vcproj/JavaScriptCore.make: - * JavaScriptCore.vcproj/JavaScriptCore.sln: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: - * JavaScriptCore.vcproj/jsc/jsc.vcproj: - -2009-05-11 Sam Weinig - - Reviewed by Geoffrey "1" Garen. - - Rip out the !USE(CTI_REPATCH_PIC) code. It was untested and unused. - - * jit/JIT.h: - (JSC::JIT::compileGetByIdChainList): - (JSC::JIT::compileGetByIdChain): - (JSC::JIT::compileCTIMachineTrampolines): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdChainList): - (JSC::JIT::privateCompileGetByIdChain): - * jit/JITStubs.cpp: - (JSC::JITStubs::tryCachePutByID): - (JSC::JITStubs::tryCacheGetByID): - -2009-05-11 Dmitry Titov - - GTK build fix - the deprecated waitForThreadCompletion is not needed on GTK. - - * wtf/ThreadingPthreads.cpp: used #ifdef PLATFORM(DARWIN) around waitForThreadCompletion(). - -2009-05-11 Adam Roben - - Build fix for newer versions of GCC - - * wtf/ThreadingPthreads.cpp: Added a declaration of - waitForThreadCompletion before its definition to silence a warning. - -2009-05-11 Dmitry Titov - - Reviewed by Alexey Proskuryakov and Adam Roben. - - https://bugs.webkit.org/show_bug.cgi?id=25348 - Change WTF::ThreadIdentifier to be an actual (but wrapped) thread id, remove ThreadMap. - - * wtf/Threading.h: - (WTF::ThreadIdentifier::ThreadIdentifier): - (WTF::ThreadIdentifier::isValid): - (WTF::ThreadIdentifier::invalidate): - (WTF::ThreadIdentifier::platformId): - ThreadIdentifier is now a class, containing a PlatformThreadIdentifier and - methods that are used across the code on thread ids: construction, comparisons, - check for 'valid' state etc. '0' is used as invalid id, which happens to just work - with all platform-specific thread id implementations. - - All the following files repeatedly reflect the new ThreadIdentifier for each platform. - We remove ThreadMap and threadMapMutex from all of them, remove the functions that - populated/searched/cleared the map and add platform-specific comparison operators - for ThreadIdentifier. - - There are specific temporary workarounds for Safari 4 beta on OSX and Win32 since the - public build uses WTF threading functions with old type of ThreadingIdentifier. - The next time Safari 4 is rebuilt, it will 'automatically' pick up the new type and new - functions so the deprecated ones can be removed. - - * wtf/gtk/ThreadingGtk.cpp: - (WTF::ThreadIdentifier::operator==): - (WTF::ThreadIdentifier::operator!=): - (WTF::initializeThreading): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::currentThread): - - * wtf/ThreadingNone.cpp: - (WTF::ThreadIdentifier::operator==): - (WTF::ThreadIdentifier::operator!=): - - * wtf/ThreadingPthreads.cpp: - (WTF::ThreadIdentifier::operator==): - (WTF::ThreadIdentifier::operator!=): - (WTF::initializeThreading): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::detachThread): - (WTF::currentThread): - (WTF::waitForThreadCompletion): This is a workaround for Safari 4 beta on Mac. - Safari 4 is linked against old definition of ThreadIdentifier so it treats it as uint32_t. - This 'old' variant of waitForThreadCompletion takes uint32_t and has the old decorated name, so Safari can - load it from JavaScriptCore library. The other functions (CurrentThread() etc) happen to match their previous - decorated names and, while they return pthread_t now, it is a pointer which round-trips through a uint32_t. - This function will be removed as soon as Safari 4 will release next public build. - - * wtf/qt/ThreadingQt.cpp: - (WTF::ThreadIdentifier::operator==): - (WTF::ThreadIdentifier::operator!=): - (WTF::initializeThreading): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::currentThread): - - * wtf/ThreadingWin.cpp: - (WTF::ThreadIdentifier::operator==): - (WTF::ThreadIdentifier::operator!=): - (WTF::initializeThreading): - (WTF::createThreadInternal): All the platforms (except Windows) used a sequential - counter as a thread ID and mapped it into platform ID. Windows was using native thread - id and mapped it into thread handle. Since we can always obtain a thread handle - by thread id, createThread now closes the handle. - (WTF::waitForThreadCompletion): obtains another one using OpenThread(id) API. If can not obtain a handle, - it means the thread already exited. - (WTF::detachThread): - (WTF::currentThread): - (WTF::detachThreadDeprecated): old function, renamed (for Win Safari 4 beta which uses it for now). - (WTF::waitForThreadCompletionDeprecated): same. - (WTF::currentThreadDeprecated): same. - (WTF::createThreadDeprecated): same. - - * bytecode/SamplingTool.h: - * bytecode/SamplingTool.cpp: Use DEFINE_STATIC_LOCAL for a static ThreadIdentifier variable, to avoid static constructor. - - * JavaScriptCore.exp: export lists - updated decorated names of the WTF threading functions - since they now take a different type as a parameter. - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: ditto for Windows, plus added "deprecated" functions - that take old parameter type - turns out public beta of Safari 4 uses those, so they need to be kept along for a while. - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: ditto. - -2009-05-11 Darin Adler - - Reviewed by Oliver Hunt. - - Bug 25560: REGRESSION (r34821): "string value".__proto__ gets the wrong object. - https://bugs.webkit.org/show_bug.cgi?id=25560 - rdar://problem/6861069 - - I missed this case back a year ago when I sped up handling - of JavaScript wrappers. Easy to fix. - - * runtime/JSObject.h: - (JSC::JSValue::get): Return the prototype itself if the property name - is __proto__. - * runtime/JSString.cpp: - (JSC::JSString::getOwnPropertySlot): Ditto. - -2009-05-09 Oliver Hunt - - Reviewed by Maciej Stachowiak. - - Rename emitGetFromCallFrameHeader to emitGetFromCallFrameHeaderPtr - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JIT.h: - * jit/JITInlineMethods.h: - (JSC::JIT::emitGetFromCallFrameHeaderPtr): - (JSC::JIT::emitGetFromCallFrameHeader32): - -2009-05-11 Holger Hans Peter Freyther - - Unreviewed build fix. Build ParserAreana.cpp for Qt - - * JavaScriptCore.pri: - -2009-05-11 Norbert Leser - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=24536 - - Symbian compilers cannot resolve WTF::PassRefPtr - unless Profile.h is included. - - * profiler/ProfileGenerator.h: - -2009-05-11 Csaba Osztrogonac - - Reviewed by Holger Freyther. - - https://bugs.webkit.org/show_bug.cgi?id=24284 - - * JavaScriptCore.pri: coding style modified - * jsc.pro: duplicated values removed from INCLUDEPATH, DEFINES - -2009-05-11 Gustavo Noronha Silva - - Reviewed by NOBODY (build fix). - - Also add ParserArena, in addition to AllInOne, for release builds, - since adding it to AllInOne breaks Mac. - - * GNUmakefile.am: - -2009-05-11 Gustavo Noronha Silva - - Unreviewed build fix. Adding ParserArena to the autotools build. - - * GNUmakefile.am: - -2009-05-11 Adam Roben - - More Windows build fixes after r43479 - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - Export ParserArena::reset. - -2009-05-11 Adam Roben - - Windows build fixes after r43479 - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added - ParserArena to the project. - - * parser/NodeConstructors.h: Added a missing include. - (JSC::ParserArenaDeletable::operator new): Marked these as inline. - -2009-05-10 Maciej Stachowiak - - Reviewed by Geoff Garen. - - - fixed REGRESSION(r43432): Many JavaScriptCore tests crash in 64-bit - https://bugs.webkit.org/show_bug.cgi?id=25680 - - Accound for the 64-bit instruction prefix when rewriting mov to lea on 64-bit. - - * jit/JIT.h: - * jit/JITPropertyAccess.cpp: - (JSC::JIT::patchGetByIdSelf): - (JSC::JIT::patchPutByIdReplace): - -2009-05-10 Darin Adler - - Reviewed by Cameron Zwarich. - - Bug 25674: syntax tree nodes should use arena allocation - https://bugs.webkit.org/show_bug.cgi?id=25674 - - Part two: Remove reference counting from most nodes. - - * JavaScriptCore.exp: Updated. - - * JavaScriptCore.xcodeproj/project.pbxproj: Added ParserArena.h and .cpp. - - * parser/Grammar.y: Replaced uses of ParserRefCountedData with uses of - ParserArenaData. Took out now-nonfunctional code that tries to manually - release declaration list. Changed the new calls that create FuncDeclNode - and FuncExprNode so that they use the proper version of operator new for - the reference-counted idiom, not the deletion idiom. - - * parser/NodeConstructors.h: - (JSC::ParserArenaDeletable::operator new): Added. - (JSC::ParserArenaRefCounted::ParserArenaRefCounted): Added. - (JSC::Node::Node): Removed ParserRefCounted initializer. - (JSC::ElementNode::ElementNode): Ditto. - (JSC::PropertyNode::PropertyNode): Ditto. - (JSC::ArgumentsNode::ArgumentsNode): Ditto. - (JSC::SourceElements::SourceElements): Ditto. - (JSC::ParameterNode::ParameterNode): Ditto. - (JSC::FuncExprNode::FuncExprNode): Added ParserArenaRefCounted initializer. - (JSC::FuncDeclNode::FuncDeclNode): Ditto. - (JSC::CaseClauseNode::CaseClauseNode): Removed ParserRefCounted initializer. - (JSC::ClauseListNode::ClauseListNode): Ditto. - (JSC::CaseBlockNode::CaseBlockNode): Ditto. - - * parser/NodeInfo.h: Replaced uses of ParserRefCountedData with uses of - ParserArenaData. - - * parser/Nodes.cpp: - (JSC::ScopeNode::ScopeNode): Added ParserArenaRefCounted initializer. - (JSC::ProgramNode::create): Use the proper version of operator new for - the reference-counted idiom, not the deletion idiom. Use the arena - contains function instead of the vecctor find function. - (JSC::EvalNode::create): Use the proper version of operator new for - the reference-counted idiom, not the deletion idiom. Use the arena - reset function instead of the vector shrink function. - (JSC::FunctionBodyNode::createNativeThunk): Use the proper version - of operator new for the reference-counted idiom, not the deletion idiom. - (JSC::FunctionBodyNode::create): More of the same. - - * parser/Nodes.h: Added ParserArenaDeletable and ParserArenaRefCounted - to replace ParserRefCounted. Fixed inheritance so only the classes that - need reference counting inherit from ParserArenaRefCounted. - - * parser/Parser.cpp: - (JSC::Parser::parse): Set m_sourceElements to 0 since it now starts - uninitialized. Just set it to 0 again in the failure case, since it's - now just a raw pointer, not an owning one. - (JSC::Parser::reparseInPlace): Removed now-unneeded get() function. - (JSC::Parser::didFinishParsing): Replaced uses of ParserRefCountedData - with uses of ParserArenaData. - - * parser/Parser.h: Less RefPtr, more arena. - - * parser/ParserArena.cpp: Added. - * parser/ParserArena.h: Added. - - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::~JSGlobalData): Removed arena-related code, since it's - now in the Parser. - (JSC::JSGlobalData::createLeaked): Removed unneeded #ifndef. - (JSC::JSGlobalData::createNativeThunk): Tweaked #if a bit. - - * runtime/JSGlobalData.h: Removed parserArena, which is now in Parser. - - * wtf/RefCounted.h: Added deletionHasBegun function, for use in - assertions to catch deletion not done by the deref function. - -2009-05-10 David Kilzer - - Part 2: Try to fix the Windows build by adding a symbol which is really just a re-mangling of a changed method signature - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-10 David Kilzer - - Try to fix the Windows build by removing an unknown symbol - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-10 David Kilzer - - Touch Nodes.cpp to try to fix Windows build - - * parser/Nodes.cpp: Removed whitespace. - -2009-05-10 Darin Adler - - Reviewed by Maciej Stachowiak. - - Quick fix for failures seen on buildbot. Maciej plans a better fix later. - - * wtf/dtoa.cpp: Change the hardcoded number of 32-bit words in a BigInt - from 32 to 64. Parsing "1e500", for example, requires more than 32 words. - -2009-05-10 Darin Adler - - Reviewed by Sam Weinig. - - Bug 25674: syntax tree nodes should use arena allocation - Part one: Change lifetimes so we won't have to use reference - counting so much, but don't eliminate the reference counts - entirely yet. - - * JavaScriptCore.exp: Updated. - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::BytecodeGenerator): Update for use of raw pointers - instead of RefPtr. - (JSC::BytecodeGenerator::emitCall): Ditto. - (JSC::BytecodeGenerator::emitConstruct): Ditto. - - * parser/Grammar.y: Update node creating code to use new (JSGlobalData*) - instead of the plain new. At the moment this is just a hook for future - arena allocation; it's inline and JSGlobalData* is not used. - - * parser/NodeConstructors.h: Updated for name change of parserObjects to - parserArena. Also added explicit initialization for raw pointers that used - to be RefPtr. Also removed some uses of get() that aren't needed now that - the pointers are raw pointers. Also eliminated m_parameter from FuncExprNode - and FuncDeclNode. Also changed node-creating code to use new (JSGlobalData*) - as above. - - * parser/Nodes.cpp: Eliminated NodeReleaser and all use of it. - (JSC::ParserRefCounted::ParserRefCounted): Updated for name change of - parserObjects to parserArena. - (JSC::SourceElements::append): Use raw pointers. - (JSC::ArrayNode::emitBytecode): Ditto. - (JSC::ArrayNode::isSimpleArray): Ditto. - (JSC::ArrayNode::toArgumentList): Ditto. - (JSC::ObjectLiteralNode::emitBytecode): Ditto. - (JSC::PropertyListNode::emitBytecode): Ditto. - (JSC::BracketAccessorNode::emitBytecode): Ditto. - (JSC::DotAccessorNode::emitBytecode): Ditto. - (JSC::ArgumentListNode::emitBytecode): Ditto. - (JSC::NewExprNode::emitBytecode): Ditto. - (JSC::EvalFunctionCallNode::emitBytecode): Ditto. - (JSC::FunctionCallValueNode::emitBytecode): Ditto. - (JSC::FunctionCallResolveNode::emitBytecode): Ditto. - (JSC::FunctionCallBracketNode::emitBytecode): Ditto. - (JSC::FunctionCallDotNode::emitBytecode): Ditto. - (JSC::CallFunctionCallDotNode::emitBytecode): Ditto. - (JSC::ApplyFunctionCallDotNode::emitBytecode): Ditto. - (JSC::PostfixBracketNode::emitBytecode): Ditto. - (JSC::PostfixDotNode::emitBytecode): Ditto. - (JSC::DeleteBracketNode::emitBytecode): Ditto. - (JSC::DeleteDotNode::emitBytecode): Ditto. - (JSC::DeleteValueNode::emitBytecode): Ditto. - (JSC::VoidNode::emitBytecode): Ditto. - (JSC::TypeOfValueNode::emitBytecode): Ditto. - (JSC::PrefixBracketNode::emitBytecode): Ditto. - (JSC::PrefixDotNode::emitBytecode): Ditto. - (JSC::UnaryOpNode::emitBytecode): Ditto. - (JSC::BinaryOpNode::emitStrcat): Ditto. - (JSC::BinaryOpNode::emitBytecode): Ditto. - (JSC::EqualNode::emitBytecode): Ditto. - (JSC::StrictEqualNode::emitBytecode): Ditto. - (JSC::ReverseBinaryOpNode::emitBytecode): Ditto. - (JSC::ThrowableBinaryOpNode::emitBytecode): Ditto. - (JSC::InstanceOfNode::emitBytecode): Ditto. - (JSC::LogicalOpNode::emitBytecode): Ditto. - (JSC::ConditionalNode::emitBytecode): Ditto. - (JSC::ReadModifyResolveNode::emitBytecode): Ditto. - (JSC::AssignResolveNode::emitBytecode): Ditto. - (JSC::AssignDotNode::emitBytecode): Ditto. - (JSC::ReadModifyDotNode::emitBytecode): Ditto. - (JSC::AssignBracketNode::emitBytecode): Ditto. - (JSC::ReadModifyBracketNode::emitBytecode): Ditto. - (JSC::CommaNode::emitBytecode): Ditto. - (JSC::ConstDeclNode::emitCodeSingle): Ditto. - (JSC::ConstDeclNode::emitBytecode): Ditto. - (JSC::ConstStatementNode::emitBytecode): Ditto. - (JSC::statementListEmitCode): Ditto. - (JSC::BlockNode::emitBytecode): Ditto. - (JSC::ExprStatementNode::emitBytecode): Ditto. - (JSC::VarStatementNode::emitBytecode): Ditto. - (JSC::IfNode::emitBytecode): Ditto. - (JSC::IfElseNode::emitBytecode): Ditto. - (JSC::DoWhileNode::emitBytecode): Ditto. - (JSC::WhileNode::emitBytecode): Ditto. - (JSC::ForNode::emitBytecode): Ditto. - (JSC::ForInNode::emitBytecode): Ditto. - (JSC::ReturnNode::emitBytecode): Ditto. - (JSC::WithNode::emitBytecode): Ditto. - (JSC::CaseBlockNode::tryOptimizedSwitch): Ditto. - (JSC::CaseBlockNode::emitBytecodeForBlock): Ditto. - (JSC::SwitchNode::emitBytecode): Ditto. - (JSC::LabelNode::emitBytecode): Ditto. - (JSC::ThrowNode::emitBytecode): Ditto. - (JSC::TryNode::emitBytecode): Ditto. - (JSC::ScopeNodeData::ScopeNodeData): Use swap to transfer ownership - of the arena, varStack and functionStack. - (JSC::ScopeNode::ScopeNode): Pass in the arena when creating the - ScopeNodeData. - (JSC::ProgramNode::ProgramNode): Made this inline since it's used - in only one place. - (JSC::ProgramNode::create): Changed this to return a PassRefPtr since - we plan to have the scope nodes be outside the arena, so they will need - some kind of ownership transfer (maybe auto_ptr instead of PassRefPtr - in the future, though). Remove the node from the newly-created arena to - avoid a circular reference. Later we'll keep the node out of the arena - by using a different operator new, but for now it's the ParserRefCounted - constructor that puts the node into the arena, and there's no way to - bypass that. - (JSC::EvalNode::EvalNode): Ditto. - (JSC::EvalNode::create): Ditto. - (JSC::FunctionBodyNode::FunctionBodyNode): Ditto. - (JSC::FunctionBodyNode::createNativeThunk): Moved the code that - reseets the arena here instead of the caller. - (JSC::FunctionBodyNode::create): Same change as the other create - functions above. - (JSC::FunctionBodyNode::emitBytecode): Use raw pointers. - - * parser/Nodes.h: Removed NodeReleaser. Changed FunctionStack to - use raw pointers. Removed the releaseNodes function. Added an override - of operator new that takes a JSGlobalData* to prepare for future arena use. - Use raw pointers instead of RefPtr everywhere possible. - - * parser/Parser.cpp: - (JSC::Parser::reparseInPlace): Pass the arena in. - - * parser/Parser.h: - (JSC::Parser::parse): Updated for name change of parserObjects to parserArena. - (JSC::Parser::reparse): Ditto. - * runtime/FunctionConstructor.cpp: - (JSC::extractFunctionBody): Ditto. - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::~JSGlobalData): Ditto. - (JSC::JSGlobalData::createNativeThunk): Moved arena manipulation into the - FunctionBodyNode::createNativeThunk function. - - * runtime/JSGlobalData.h: Tweaked formatting and renamed parserObjects to - parserArena. - - * wtf/NotFound.h: Added the usual "using WTF" to this header to match the - rest of WTF. - -2009-05-10 Dimitri Glazkov - - Reviewed by Geoffrey Garen. - - https://bugs.webkit.org/show_bug.cgi?id=25670 - Remove no longer valid chunk of code from dtoa. - - * wtf/dtoa.cpp: - (WTF::dtoa): Removed invalid code. - -2009-05-10 Alexey Proskuryakov - - Reviewed by Geoff Garen. - - "Class const *" is the same as "const Class*", use the latter syntax consistently. - - See . - - * pcre/pcre_compile.cpp: - (calculateCompiledPatternLength): - * runtime/JSObject.h: - (JSC::JSObject::offsetForLocation): - (JSC::JSObject::locationForOffset): - -2009-05-10 Maciej Stachowiak - - Reviewed by Alexey Proskuryakov. - - - speedup dtoa/strtod - - Added a bunch of inlining, and replaced malloc with stack allocation. - - 0.5% SunSpider speedup (7% on string-tagcloud). - - * runtime/NumberPrototype.cpp: - (JSC::integerPartNoExp): - (JSC::numberProtoFuncToExponential): - * runtime/UString.cpp: - (JSC::concatenate): - (JSC::UString::from): - * wtf/dtoa.cpp: - (WTF::BigInt::BigInt): - (WTF::BigInt::operator=): - (WTF::Balloc): - (WTF::Bfree): - (WTF::multadd): - (WTF::s2b): - (WTF::i2b): - (WTF::mult): - (WTF::pow5mult): - (WTF::lshift): - (WTF::cmp): - (WTF::diff): - (WTF::b2d): - (WTF::d2b): - (WTF::ratio): - (WTF::strtod): - (WTF::quorem): - (WTF::freedtoa): - (WTF::dtoa): - * wtf/dtoa.h: - -2009-05-09 Mike Hommey - - Reviewed by Geoffrey Garen. Landed by Jan Alonzo. - - Enable JIT on x86-64 gtk+ - https://bugs.webkit.org/show_bug.cgi?id=24724 - - * GNUmakefile.am: - -2009-05-09 Geoffrey Garen - - Reviewed by Cameron Zwarich. - - Removed the last non-call-related manually managed JIT stub call. - - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArithSlow_op_rshift): Fully use the JITStubCall - abstraction, instead of emitPutJITStubArg. - -2009-05-09 Sebastian Andrzej Siewior - - Reviewed by Gustavo Noronha. - - https://bugs.webkit.org/show_bug.cgi?id=25653 - PLATFORM(X86_64) inherits ia64 - - __ia64__ is defined by gcc in an IA64 arch and has completely - nothing in common with X86-64 exept both are from Intel and have - an 64bit address space. That's it. Since code seems to expect x86 - here, ia64 has to go. - - * wtf/Platform.h: - -2009-05-09 Gustavo Noronha Silva - - Suggested by Geoffrey Garen. - - Assume SSE2 is present on X86-64 and on MAC X86-32. This fixes a - build breakage on non-Mac X86-64 when JIT is enabled. - - * jit/JITArithmetic.cpp: - -2009-05-09 Gustavo Noronha Silva - - Build fix, adding missing files to make dist. - - * GNUmakefile.am: - -2009-05-09 Geoffrey Garen - - Windows build fix. - - * assembler/X86Assembler.h: - (JSC::X86Assembler::patchLoadToLEA): - -2009-05-09 Geoffrey Garen - - Windows build fix. - - * assembler/X86Assembler.h: - (JSC::X86Assembler::patchLoadToLEA): - -2009-05-09 Maciej Stachowiak - - Reviewed by Gavin Barraclough. - - Original patch by John McCall. Updated by Cameron Zwarich. Further refined by me. - - - Assorted speedups to property access - - ~.3%-1% speedup on SunSpider - - 1) When we know from the structure ID that an object is using inline storage, plant direct - loads and stores against it; no need to indirect through storage pointer. - - 2) Also because of the above, union the property storage pointer with the first inline property - slot and add an extra inline property slot. - - * assembler/AbstractMacroAssembler.h: - (JSC::AbstractMacroAssembler::CodeLocationInstruction::CodeLocationInstruction): - (JSC::AbstractMacroAssembler::CodeLocationInstruction::patchLoadToLEA): - (JSC::::CodeLocationCommon::instructionAtOffset): - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::storePtr): - * assembler/MacroAssemblerX86.h: - (JSC::MacroAssemblerX86::store32): - * assembler/MacroAssemblerX86_64.h: - (JSC::MacroAssemblerX86_64::storePtr): - * assembler/X86Assembler.h: - (JSC::X86Assembler::movq_EAXm): - (JSC::X86Assembler::movl_rm): - (JSC::X86Assembler::patchLoadToLEA): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - * jit/JIT.h: - * jit/JITPropertyAccess.cpp: - (JSC::JIT::compileGetByIdHotPath): - (JSC::JIT::compilePutByIdHotPath): - (JSC::JIT::compilePutDirectOffset): - (JSC::JIT::compileGetDirectOffset): - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::patchGetByIdSelf): - (JSC::JIT::patchPutByIdReplace): - (JSC::JIT::privateCompileGetByIdSelf): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdSelfList): - (JSC::JIT::privateCompileGetByIdProtoList): - (JSC::JIT::privateCompileGetByIdChainList): - (JSC::JIT::privateCompileGetByIdChain): - (JSC::JIT::privateCompilePutByIdReplace): - * runtime/JSObject.cpp: - (JSC::JSObject::mark): - (JSC::JSObject::removeDirect): - * runtime/JSObject.h: - (JSC::JSObject::propertyStorage): - (JSC::JSObject::getDirect): - (JSC::JSObject::getOffset): - (JSC::JSObject::offsetForLocation): - (JSC::JSObject::locationForOffset): - (JSC::JSObject::getDirectOffset): - (JSC::JSObject::putDirectOffset): - (JSC::JSObject::isUsingInlineStorage): - (JSC::JSObject::): - (JSC::JSObject::JSObject): - (JSC::JSObject::~JSObject): - (JSC::Structure::isUsingInlineStorage): - (JSC::JSObject::putDirect): - (JSC::JSObject::putDirectWithoutTransition): - (JSC::JSObject::allocatePropertyStorageInline): - * runtime/Structure.h: - -2009-05-09 Geoffrey Garen - - Reviewed by Gavin Barraclough. - - Changed all our JIT stubs so that they return a maximum of 1 JS value or - two non-JS pointers, and do all other value returning through out - parameters, in preparation for 64bit JS values on a 32bit system. - - Stubs that used to return two JSValues now return one JSValue and take - and out parameter specifying where in the register array the second - value should go. - - SunSpider reports no change. - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArithSlow_op_post_inc): - (JSC::JIT::compileFastArithSlow_op_post_dec): - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_call_arityCheck): - (JSC::JITStubs::cti_op_resolve_func): - (JSC::JITStubs::cti_op_post_inc): - (JSC::JITStubs::cti_op_resolve_with_base): - (JSC::JITStubs::cti_op_post_dec): - * jit/JITStubs.h: - (JSC::): - -2009-05-08 Geoffrey Garen - - Reviewed by Cameron Zwarich. - - Fixed CrashTracer: [REGRESSION] >400 crashes - in Safari at com.apple.JavaScriptCore • JSC::BytecodeGenerator::emitComplexJumpScopes + 468 - https://bugs.webkit.org/show_bug.cgi?id=25658 - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitComplexJumpScopes): Guard the whole loop - with a bounds check. The old loop logic would decrement and read topScope - without a bounds check, which could cause crashes on page boundaries. - -2009-05-08 Jan Michael Alonzo - - Reviewed by NOBODY (BuildFix). - - Gtk fix: add LiteralParser to the build script per r43424. - - Add LiteralParser to the Qt and Wx build scripts too. - - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCoreSources.bkl: - -2009-05-08 Oliver Hunt - - Reviewed by Gavin Barraclough and Darin Adler. - - Add a limited literal parser for eval to handle object and array literals fired at eval - - This is a simplified parser and lexer that we can throw at strings passed to eval - in case a site is using eval to parse JSON (eg. json2.js). The lexer is intentionally - limited (in effect it's whitelisting a limited "common" subset of the JSON grammar) - as this decreases the likelihood of us wating time attempting to parse any significant - amount of non-JSON content. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * interpreter/Interpreter.cpp: - (JSC::Interpreter::callEval): - * runtime/JSGlobalObjectFunctions.cpp: - (JSC::globalFuncEval): - * runtime/LiteralParser.cpp: Added. - (JSC::isStringCharacter): - (JSC::LiteralParser::Lexer::lex): - (JSC::LiteralParser::Lexer::lexString): - (JSC::LiteralParser::Lexer::lexNumber): - (JSC::LiteralParser::parseStatement): - (JSC::LiteralParser::parseExpression): - (JSC::LiteralParser::parseArray): - (JSC::LiteralParser::parseObject): - (JSC::LiteralParser::StackGuard::StackGuard): - (JSC::LiteralParser::StackGuard::~StackGuard): - (JSC::LiteralParser::StackGuard::isSafe): - * runtime/LiteralParser.h: Added. - (JSC::LiteralParser::LiteralParser): - (JSC::LiteralParser::attemptJSONParse): - (JSC::LiteralParser::): - (JSC::LiteralParser::Lexer::Lexer): - (JSC::LiteralParser::Lexer::next): - (JSC::LiteralParser::Lexer::currentToken): - (JSC::LiteralParser::abortParse): - -2009-05-08 Geoffrey Garen - - Not reviewed. - - Restored a Mozilla JS test I accidentally gutted. - - * tests/mozilla/ecma/Array/15.4.4.2.js: - (getTestCases): - (test): - -2009-05-08 Geoffrey Garen - - Reviewed by Gavin Barraclough. - - More abstraction for JITStub calls from JITed code. - - Added a JITStubCall class that automatically handles things like assigning - arguments to different stack slots and storing return values. Deployed - the class in about a billion places. A bunch more places remain to be - fixed up, but this is a good stopping point for now. - - * jit/JIT.cpp: - (JSC::JIT::emitTimeoutCheck): - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - (JSC::JIT::privateCompile): - * jit/JIT.h: - (JSC::JIT::JSRInfo::JSRInfo): - (JSC::JITStubCall::JITStubCall): - (JSC::JITStubCall::addArgument): - (JSC::JITStubCall::call): - (JSC::JITStubCall::): - (JSC::CallEvalJITStub::CallEvalJITStub): - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArithSlow_op_lshift): - (JSC::JIT::compileFastArithSlow_op_rshift): - (JSC::JIT::compileFastArithSlow_op_jnless): - (JSC::JIT::compileFastArithSlow_op_bitand): - (JSC::JIT::compileFastArithSlow_op_mod): - (JSC::JIT::compileFastArith_op_mod): - (JSC::JIT::compileFastArithSlow_op_post_inc): - (JSC::JIT::compileFastArithSlow_op_post_dec): - (JSC::JIT::compileFastArithSlow_op_pre_inc): - (JSC::JIT::compileFastArithSlow_op_pre_dec): - (JSC::JIT::compileFastArith_op_add): - (JSC::JIT::compileFastArith_op_mul): - (JSC::JIT::compileFastArith_op_sub): - (JSC::JIT::compileBinaryArithOpSlowCase): - (JSC::JIT::compileFastArithSlow_op_add): - (JSC::JIT::compileFastArithSlow_op_mul): - * jit/JITCall.cpp: - (JSC::JIT::compileOpCall): - (JSC::): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::compileGetByIdHotPath): - (JSC::JIT::compilePutByIdHotPath): - (JSC::JIT::compileGetByIdSlowCase): - (JSC::JIT::compilePutByIdSlowCase): - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_resolve_func): - (JSC::JITStubs::cti_op_resolve_with_base): - -2009-05-08 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Add a new opcode jnlesseq, and optimize its compilation in the JIT using - techniques similar to what were used to optimize jnless in r43363. - - This gives a 0.7% speedup on SunSpider, particularly on the tests 3d-cube, - control-flow-recursive, date-format-xparb, and string-base64. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): Add support for dumping op_jnlesseq. - * bytecode/Opcode.h: Add op_jnlesseq to the list of opcodes. - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitJumpIfFalse): Add a peephole optimization - for op_jnlesseq when emitting lesseq followed by a jump. - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): Add case for op_jnlesseq. - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): Add case for op_jnlesseq. - (JSC::JIT::privateCompileSlowCases): Add case for op_jnlesseq. - * jit/JIT.h: - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArith_op_jnlesseq): Added. - (JSC::JIT::compileFastArithSlow_op_jnlesseq): Added. - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_jlesseq): Added. - * jit/JITStubs.h: - -2009-05-08 Maciej Stachowiak - - Reviewed by Cameron Zwarich. - - - fix test failures on 64-bit - - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArithSlow_op_jnless): Avoid accidentaly treating an - immediate int as an immediate float in the 64-bit value representation. - -2009-05-08 Gavin Barraclough - - Rubber stamped by Oliver Hunt. - - Removing an empty constructor and an uncalled, empty function seems to be a - pretty solid 1% regeression on my machine, so I'm going to put them back. - Um. Yeah, this this pretty pointles and makes no sense at all. I officially - lose the will to live in 3... 2... - - * bytecode/SamplingTool.cpp: - (JSC::SamplingTool::notifyOfScope): - * bytecode/SamplingTool.h: - (JSC::SamplingTool::~SamplingTool): - -2009-05-08 Gavin Barraclough - - Reviewed by Oliver "I see lots of ifdefs" Hunt. - - Fix (kinda) for sampling tool breakage. The codeblock sampling tool has become - b0rked due to recent changes in native function calling. The initialization of - a ScopeNode appears to now occur before the sampling tool (or possibly the - interpreter has been brought into existence, wihich leads to crashyness). - - This patch doesn't fix the problem. The crash occurs when tracking a Scope, but - we shouldn't need to track scopes when we're just sampling opcodes, not - codeblocks. Not retaining Scopes when just opcode sampling will reduce sampling - overhead reducing any instrumentation skew, which is a good thing. As a side - benefit this patch also gets the opcode sampling going again, albeit in a bit of - a lame way. Will come back later with a proper fix from codeblock sampling. - - * JavaScriptCore.exp: - * bytecode/SamplingTool.cpp: - (JSC::compareLineCountInfoSampling): - (JSC::SamplingTool::dump): - * bytecode/SamplingTool.h: - (JSC::SamplingTool::SamplingTool): - * parser/Nodes.cpp: - (JSC::ScopeNode::ScopeNode): - -2009-05-07 Mark Rowe - - Rubber-stamped by Oliver Hunt. - - Fix . - Bug 25640: Crash on quit in r43384 nightly build on Leopard w/ Safari 4 beta installed - - Roll out r43366 as it removed symbols that Safari 4 Beta uses. - - * JavaScriptCore.exp: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - * bytecode/SamplingTool.cpp: - (JSC::SamplingThread::start): - (JSC::SamplingThread::stop): - * bytecode/SamplingTool.h: - * wtf/CrossThreadRefCounted.h: - (WTF::CrossThreadRefCounted::CrossThreadRefCounted): - (WTF::::ref): - (WTF::::deref): - * wtf/Threading.h: - * wtf/ThreadingNone.cpp: - * wtf/ThreadingPthreads.cpp: - (WTF::threadMapMutex): - (WTF::initializeThreading): - (WTF::threadMap): - (WTF::identifierByPthreadHandle): - (WTF::establishIdentifierForPthreadHandle): - (WTF::pthreadHandleForIdentifier): - (WTF::clearPthreadHandleForIdentifier): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::detachThread): - (WTF::currentThread): - * wtf/ThreadingWin.cpp: - (WTF::threadMapMutex): - (WTF::initializeThreading): - (WTF::threadMap): - (WTF::storeThreadHandleByIdentifier): - (WTF::threadHandleForIdentifier): - (WTF::clearThreadHandleForIdentifier): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::detachThread): - (WTF::currentThread): - * wtf/gtk/ThreadingGtk.cpp: - (WTF::threadMapMutex): - (WTF::initializeThreading): - (WTF::threadMap): - (WTF::identifierByGthreadHandle): - (WTF::establishIdentifierForThread): - (WTF::threadForIdentifier): - (WTF::clearThreadForIdentifier): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::currentThread): - * wtf/qt/ThreadingQt.cpp: - (WTF::threadMapMutex): - (WTF::threadMap): - (WTF::identifierByQthreadHandle): - (WTF::establishIdentifierForThread): - (WTF::clearThreadForIdentifier): - (WTF::threadForIdentifier): - (WTF::initializeThreading): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::currentThread): - -2009-05-07 Gustavo Noronha Silva - - Suggested by Oliver Hunt. - - Also check for Linux for the special-cased calling convention. - - * jit/JIT.cpp: - (JSC::JIT::privateCompileCTIMachineTrampolines): - * wtf/Platform.h: - -2009-05-07 Gavin Barraclough - - Reviewed by Maciej Stachowiak. - - Previously, when appending to an existing string and growing the underlying buffer, - we would actually allocate 110% of the required size in order to give us some space - to expand into. Now we treat strings differently based on their size: - - Small Strings (up to 4 pages): - Expand the allocation size to 112.5% of the amount requested. This is largely sicking - to our previous policy, however 112.5% is cheaper to calculate. - - Medium Strings (up to 128 pages): - For pages covering multiple pages over-allocation is less of a concern - any unused - space will not be paged in if it is not used, so this is purely a VM overhead. For - these strings allocate 2x the requested size. - - Large Strings (to infinity and beyond!): - Revert to our 112.5% policy - probably best to limit the amount of unused VM we allow - any individual string be responsible for. - - Additionally, round small allocations up to a multiple of 16 bytes, and medium and - large allocations up to a multiple of page size. - - ~1.5% progression on Sunspider, due to 5% improvement on tagcloud & 15% on validate. - - * runtime/UString.cpp: - (JSC::expandedSize): - -2009-05-07 Geoffrey Garen - - Reviewed by Cameron Zwarich. - - Fixed a minor sequencing error introduced by recent Parser speedups. - - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::createNativeThunk): Missed a spot in my last patch. - -2009-05-07 Geoffrey Garen - - Not reviewed. - - * wtf/Platform.h: Reverted an accidental (and performance-catastrophic) - change. - -2009-05-07 Geoffrey Garen - - Reviewed by Cameron Zwarich. - - Fixed a minor sequencing error introduced by recent Parser speedups. - - * parser/Parser.cpp: - (JSC::Parser::reparseInPlace): Missed a spot in my last patch. - -2009-05-07 Geoffrey Garen - - Reviewed by Cameron Zwarich. - - Fixed a minor sequencing error introduced by recent Parser speedups. - - * parser/Parser.cpp: - (JSC::Parser::parse): - * parser/Parser.h: - (JSC::Parser::parse): - (JSC::Parser::reparse): Shrink the parsedObjects vector after allocating - the root node, to avoid leaving a stray node in the vector, since that's - a slight memory leak, and it causes problems during JSGlobalData teardown. - - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::~JSGlobalData): ASSERT that we're not being torn - down while we think we're still parsing, since that would cause lots of - bad memory references during our destruction. - -2009-05-07 Geoffrey Garen - - Reviewed by Cameron Zwarich. - - Replaced two more macros with references to the JITStackFrame structure. - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - * jit/JITInlineMethods.h: - (JSC::JIT::restoreArgumentReference): - * jit/JITStubs.cpp: - (JSC::): - * jit/JITStubs.h: - -2009-05-07 Oliver Hunt - - Reviewed by Gavin Barraclough. - - Improve native call performance - - Fix the windows build by adding calling convention declarations everywhere, - chose fastcall as that seemed most sensible given we were having to declare - the convention explicitly. In addition switched to fastcall on mac in the - deluded belief that documented fastcall behavior on windows would match - actual its actual behavior. - - * API/JSCallbackFunction.h: - * API/JSCallbackObject.h: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - * interpreter/CallFrame.h: - (JSC::ExecState::argumentCount): - * jit/JIT.cpp: - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jsc.cpp: - (functionPrint): - (functionDebug): - (functionGC): - (functionVersion): - (functionRun): - (functionLoad): - (functionSetSamplingFlags): - (functionClearSamplingFlags): - (functionReadline): - (functionQuit): - * runtime/ArrayConstructor.cpp: - (JSC::callArrayConstructor): - * runtime/ArrayPrototype.cpp: - (JSC::arrayProtoFuncToString): - (JSC::arrayProtoFuncToLocaleString): - (JSC::arrayProtoFuncJoin): - (JSC::arrayProtoFuncConcat): - (JSC::arrayProtoFuncPop): - (JSC::arrayProtoFuncPush): - (JSC::arrayProtoFuncReverse): - (JSC::arrayProtoFuncShift): - (JSC::arrayProtoFuncSlice): - (JSC::arrayProtoFuncSort): - (JSC::arrayProtoFuncSplice): - (JSC::arrayProtoFuncUnShift): - (JSC::arrayProtoFuncFilter): - (JSC::arrayProtoFuncMap): - (JSC::arrayProtoFuncEvery): - (JSC::arrayProtoFuncForEach): - (JSC::arrayProtoFuncSome): - (JSC::arrayProtoFuncReduce): - (JSC::arrayProtoFuncReduceRight): - (JSC::arrayProtoFuncIndexOf): - (JSC::arrayProtoFuncLastIndexOf): - * runtime/BooleanConstructor.cpp: - (JSC::callBooleanConstructor): - * runtime/BooleanPrototype.cpp: - (JSC::booleanProtoFuncToString): - (JSC::booleanProtoFuncValueOf): - * runtime/CallData.h: - * runtime/DateConstructor.cpp: - (JSC::callDate): - (JSC::dateParse): - (JSC::dateNow): - (JSC::dateUTC): - * runtime/DatePrototype.cpp: - (JSC::dateProtoFuncToString): - (JSC::dateProtoFuncToUTCString): - (JSC::dateProtoFuncToDateString): - (JSC::dateProtoFuncToTimeString): - (JSC::dateProtoFuncToLocaleString): - (JSC::dateProtoFuncToLocaleDateString): - (JSC::dateProtoFuncToLocaleTimeString): - (JSC::dateProtoFuncGetTime): - (JSC::dateProtoFuncGetFullYear): - (JSC::dateProtoFuncGetUTCFullYear): - (JSC::dateProtoFuncToGMTString): - (JSC::dateProtoFuncGetMonth): - (JSC::dateProtoFuncGetUTCMonth): - (JSC::dateProtoFuncGetDate): - (JSC::dateProtoFuncGetUTCDate): - (JSC::dateProtoFuncGetDay): - (JSC::dateProtoFuncGetUTCDay): - (JSC::dateProtoFuncGetHours): - (JSC::dateProtoFuncGetUTCHours): - (JSC::dateProtoFuncGetMinutes): - (JSC::dateProtoFuncGetUTCMinutes): - (JSC::dateProtoFuncGetSeconds): - (JSC::dateProtoFuncGetUTCSeconds): - (JSC::dateProtoFuncGetMilliSeconds): - (JSC::dateProtoFuncGetUTCMilliseconds): - (JSC::dateProtoFuncGetTimezoneOffset): - (JSC::dateProtoFuncSetTime): - (JSC::dateProtoFuncSetMilliSeconds): - (JSC::dateProtoFuncSetUTCMilliseconds): - (JSC::dateProtoFuncSetSeconds): - (JSC::dateProtoFuncSetUTCSeconds): - (JSC::dateProtoFuncSetMinutes): - (JSC::dateProtoFuncSetUTCMinutes): - (JSC::dateProtoFuncSetHours): - (JSC::dateProtoFuncSetUTCHours): - (JSC::dateProtoFuncSetDate): - (JSC::dateProtoFuncSetUTCDate): - (JSC::dateProtoFuncSetMonth): - (JSC::dateProtoFuncSetUTCMonth): - (JSC::dateProtoFuncSetFullYear): - (JSC::dateProtoFuncSetUTCFullYear): - (JSC::dateProtoFuncSetYear): - (JSC::dateProtoFuncGetYear): - * runtime/ErrorConstructor.cpp: - (JSC::callErrorConstructor): - * runtime/ErrorPrototype.cpp: - (JSC::errorProtoFuncToString): - * runtime/FunctionConstructor.cpp: - (JSC::callFunctionConstructor): - * runtime/FunctionPrototype.cpp: - (JSC::callFunctionPrototype): - (JSC::functionProtoFuncToString): - (JSC::functionProtoFuncApply): - (JSC::functionProtoFuncCall): - * runtime/JSFunction.h: - (JSC::JSFunction::nativeFunction): - (JSC::JSFunction::setScopeChain): - * runtime/JSGlobalObjectFunctions.cpp: - (JSC::globalFuncEval): - (JSC::globalFuncParseInt): - (JSC::globalFuncParseFloat): - (JSC::globalFuncIsNaN): - (JSC::globalFuncIsFinite): - (JSC::globalFuncDecodeURI): - (JSC::globalFuncDecodeURIComponent): - (JSC::globalFuncEncodeURI): - (JSC::globalFuncEncodeURIComponent): - (JSC::globalFuncEscape): - (JSC::globalFuncUnescape): - (JSC::globalFuncJSCPrint): - * runtime/JSGlobalObjectFunctions.h: - * runtime/MathObject.cpp: - (JSC::mathProtoFuncAbs): - (JSC::mathProtoFuncACos): - (JSC::mathProtoFuncASin): - (JSC::mathProtoFuncATan): - (JSC::mathProtoFuncATan2): - (JSC::mathProtoFuncCeil): - (JSC::mathProtoFuncCos): - (JSC::mathProtoFuncExp): - (JSC::mathProtoFuncFloor): - (JSC::mathProtoFuncLog): - (JSC::mathProtoFuncMax): - (JSC::mathProtoFuncMin): - (JSC::mathProtoFuncPow): - (JSC::mathProtoFuncRandom): - (JSC::mathProtoFuncRound): - (JSC::mathProtoFuncSin): - (JSC::mathProtoFuncSqrt): - (JSC::mathProtoFuncTan): - * runtime/NativeErrorConstructor.cpp: - (JSC::callNativeErrorConstructor): - * runtime/NativeFunctionWrapper.h: - * runtime/NumberConstructor.cpp: - (JSC::callNumberConstructor): - * runtime/NumberPrototype.cpp: - (JSC::numberProtoFuncToString): - (JSC::numberProtoFuncToLocaleString): - (JSC::numberProtoFuncValueOf): - (JSC::numberProtoFuncToFixed): - (JSC::numberProtoFuncToExponential): - (JSC::numberProtoFuncToPrecision): - * runtime/ObjectConstructor.cpp: - (JSC::callObjectConstructor): - * runtime/ObjectPrototype.cpp: - (JSC::objectProtoFuncValueOf): - (JSC::objectProtoFuncHasOwnProperty): - (JSC::objectProtoFuncIsPrototypeOf): - (JSC::objectProtoFuncDefineGetter): - (JSC::objectProtoFuncDefineSetter): - (JSC::objectProtoFuncLookupGetter): - (JSC::objectProtoFuncLookupSetter): - (JSC::objectProtoFuncPropertyIsEnumerable): - (JSC::objectProtoFuncToLocaleString): - (JSC::objectProtoFuncToString): - * runtime/ObjectPrototype.h: - * runtime/RegExpConstructor.cpp: - (JSC::callRegExpConstructor): - * runtime/RegExpObject.cpp: - (JSC::callRegExpObject): - * runtime/RegExpPrototype.cpp: - (JSC::regExpProtoFuncTest): - (JSC::regExpProtoFuncExec): - (JSC::regExpProtoFuncCompile): - (JSC::regExpProtoFuncToString): - * runtime/StringConstructor.cpp: - (JSC::stringFromCharCode): - (JSC::callStringConstructor): - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncReplace): - (JSC::stringProtoFuncToString): - (JSC::stringProtoFuncCharAt): - (JSC::stringProtoFuncCharCodeAt): - (JSC::stringProtoFuncConcat): - (JSC::stringProtoFuncIndexOf): - (JSC::stringProtoFuncLastIndexOf): - (JSC::stringProtoFuncMatch): - (JSC::stringProtoFuncSearch): - (JSC::stringProtoFuncSlice): - (JSC::stringProtoFuncSplit): - (JSC::stringProtoFuncSubstr): - (JSC::stringProtoFuncSubstring): - (JSC::stringProtoFuncToLowerCase): - (JSC::stringProtoFuncToUpperCase): - (JSC::stringProtoFuncLocaleCompare): - (JSC::stringProtoFuncBig): - (JSC::stringProtoFuncSmall): - (JSC::stringProtoFuncBlink): - (JSC::stringProtoFuncBold): - (JSC::stringProtoFuncFixed): - (JSC::stringProtoFuncItalics): - (JSC::stringProtoFuncStrike): - (JSC::stringProtoFuncSub): - (JSC::stringProtoFuncSup): - (JSC::stringProtoFuncFontcolor): - (JSC::stringProtoFuncFontsize): - (JSC::stringProtoFuncAnchor): - (JSC::stringProtoFuncLink): - * wtf/Platform.h: - -2009-05-07 Geoffrey Garen - - Not reviewed. - - Rolled out a portion of r43352 because it broke 64bit. - - * jit/JITStubs.h: - -2009-05-07 Kevin Ollivier - - Build fix for functions reaturning ThreadIdentifier. - - * wtf/ThreadingNone.cpp: - (WTF::createThreadInternal): - (WTF::currentThread): - -2009-05-07 Maciej Stachowiak - - Reviewed by John Honeycutt. - - - enable optimization case im the last patch that I accidentally had disabled. - - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArithSlow_op_jnless): - -2009-05-07 Dmitry Titov - - Attempt to fix Win build. - - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArithSlow_op_jnless): - -2009-05-07 Dmitry Titov - - Reviewed by Alexey Proskuryakov and Adam Roben. - - https://bugs.webkit.org/show_bug.cgi?id=25348 - Change WTF::ThreadIdentifier to be an actual (but wrapped) thread id, remove ThreadMap. - - * wtf/Threading.h: - (WTF::ThreadIdentifier::ThreadIdentifier): - (WTF::ThreadIdentifier::isValid): - (WTF::ThreadIdentifier::invalidate): - (WTF::ThreadIdentifier::platformId): - ThreadIdentifier is now a class, containing a PlatformThreadIdentifier and - methods that are used across the code on thread ids: construction, comparisons, - check for 'valid' state etc. '0' is used as invalid id, which happens to just work - with all platform-specific thread id implementations. - - All the following files repeatedly reflect the new ThreadIdentifier for each platform. - We remove ThreadMap and threadMapMutex from all of them, remove the functions that - populated/searched/cleared the map and add platform-specific comparison operators - for ThreadIdentifier. - - * wtf/gtk/ThreadingGtk.cpp: - (WTF::ThreadIdentifier::operator==): - (WTF::ThreadIdentifier::operator!=): - (WTF::initializeThreading): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::currentThread): - - * wtf/ThreadingNone.cpp: - (WTF::ThreadIdentifier::operator==): - (WTF::ThreadIdentifier::operator!=): - - * wtf/ThreadingPthreads.cpp: - (WTF::ThreadIdentifier::operator==): - (WTF::ThreadIdentifier::operator!=): - (WTF::initializeThreading): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::detachThread): - (WTF::currentThread): - - * wtf/qt/ThreadingQt.cpp: - (WTF::ThreadIdentifier::operator==): - (WTF::ThreadIdentifier::operator!=): - (WTF::initializeThreading): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::currentThread): - - * wtf/ThreadingWin.cpp: - (WTF::ThreadIdentifier::operator==): - (WTF::ThreadIdentifier::operator!=): - (WTF::initializeThreading): - (WTF::createThreadInternal): All the platforms (except Windows) used a sequential - counter as a thread ID and mapped it into platform ID. Windows was using native thread - id and mapped it into thread handle. Since we can always obtain a thread handle - by thread id, createThread now closes the handle. - (WTF::waitForThreadCompletion): obtains another one using OpenThread(id) API. If can not obtain a handle, - it means the thread already exited. - (WTF::detachThread): - (WTF::currentThread): - (WTF::detachThreadDeprecated): old function, renamed (for Win Safari 4 beta which uses it for now). - (WTF::waitForThreadCompletionDeprecated): same. - (WTF::currentThreadDeprecated): same. - (WTF::createThreadDeprecated): same. - - * bytecode/SamplingTool.h: - * bytecode/SamplingTool.cpp: Use DEFINE_STATIC_LOCAL for a static ThreadIdentifier variable, to avoid static constructor. - - * JavaScriptCore.exp: export lists - updated the WTF threading functions decorated names - since they now take a different type as a parameter. - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: ditto for Windows, plus added "deprecated" functions - that take old parameter type - turns out public beta of Safari 4 uses those, so they need to be kept along for a while. - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: ditto. - -2009-05-07 Maciej Stachowiak - - Reviewed by Sam Weinig. - - - optimize various cases of branch-fused less - - 1% speedup on SunSpider overall - 13% speedup on math-cordic - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - op_loop_if_less: Optimize case of constant as first operand, just as case of constant as - second operand. - op_jnless: Factored out into compileFastArith_op_jnless. - (JSC::JIT::privateCompileSlowCases): - op_jnless: Factored out into compileFastArithSlow_op_jnless. - * jit/JIT.h: - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArith_op_jnless): Factored out from main compile loop. - - Generate inline code for comparison of constant immediate int as first operand to another - immediate int, as for loop_if_less - - (JSC::JIT::compileFastArithSlow_op_jnless): - - Generate inline code for comparing two floating point numbers. - - Generate code for both cases of comparing a floating point number to a constant immediate - int. - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): Fix dumping of op_jnless (tangentially related bugfix). - -2009-05-07 Geoffrey Garen - - Reviewed by Sam Weinig. - - Added the return address of a stub function to the JITStackFrame abstraction. - - * jit/JIT.cpp: - * jit/JIT.h: - * jit/JITStubs.cpp: - (JSC::): - (JSC::StackHack::StackHack): - (JSC::StackHack::~StackHack): - (JSC::returnToThrowTrampoline): - (JSC::JITStubs::cti_op_convert_this): - (JSC::JITStubs::cti_op_end): - (JSC::JITStubs::cti_op_add): - (JSC::JITStubs::cti_op_pre_inc): - (JSC::JITStubs::cti_timeout_check): - (JSC::JITStubs::cti_register_file_check): - (JSC::JITStubs::cti_op_loop_if_less): - (JSC::JITStubs::cti_op_loop_if_lesseq): - (JSC::JITStubs::cti_op_new_object): - (JSC::JITStubs::cti_op_put_by_id_generic): - (JSC::JITStubs::cti_op_get_by_id_generic): - (JSC::JITStubs::cti_op_put_by_id): - (JSC::JITStubs::cti_op_put_by_id_second): - (JSC::JITStubs::cti_op_put_by_id_fail): - (JSC::JITStubs::cti_op_get_by_id): - (JSC::JITStubs::cti_op_get_by_id_second): - (JSC::JITStubs::cti_op_get_by_id_self_fail): - (JSC::JITStubs::cti_op_get_by_id_proto_list): - (JSC::JITStubs::cti_op_get_by_id_proto_list_full): - (JSC::JITStubs::cti_op_get_by_id_proto_fail): - (JSC::JITStubs::cti_op_get_by_id_array_fail): - (JSC::JITStubs::cti_op_get_by_id_string_fail): - (JSC::JITStubs::cti_op_instanceof): - (JSC::JITStubs::cti_op_del_by_id): - (JSC::JITStubs::cti_op_mul): - (JSC::JITStubs::cti_op_new_func): - (JSC::JITStubs::cti_op_call_JSFunction): - (JSC::JITStubs::cti_op_call_arityCheck): - (JSC::JITStubs::cti_vm_dontLazyLinkCall): - (JSC::JITStubs::cti_vm_lazyLinkCall): - (JSC::JITStubs::cti_op_push_activation): - (JSC::JITStubs::cti_op_call_NotJSFunction): - (JSC::JITStubs::cti_op_create_arguments): - (JSC::JITStubs::cti_op_create_arguments_no_params): - (JSC::JITStubs::cti_op_tear_off_activation): - (JSC::JITStubs::cti_op_tear_off_arguments): - (JSC::JITStubs::cti_op_profile_will_call): - (JSC::JITStubs::cti_op_profile_did_call): - (JSC::JITStubs::cti_op_ret_scopeChain): - (JSC::JITStubs::cti_op_new_array): - (JSC::JITStubs::cti_op_resolve): - (JSC::JITStubs::cti_op_construct_JSConstruct): - (JSC::JITStubs::cti_op_construct_NotJSConstruct): - (JSC::JITStubs::cti_op_get_by_val): - (JSC::JITStubs::cti_op_get_by_val_string): - (JSC::JITStubs::cti_op_get_by_val_byte_array): - (JSC::JITStubs::cti_op_resolve_func): - (JSC::JITStubs::cti_op_sub): - (JSC::JITStubs::cti_op_put_by_val): - (JSC::JITStubs::cti_op_put_by_val_array): - (JSC::JITStubs::cti_op_put_by_val_byte_array): - (JSC::JITStubs::cti_op_lesseq): - (JSC::JITStubs::cti_op_loop_if_true): - (JSC::JITStubs::cti_op_load_varargs): - (JSC::JITStubs::cti_op_negate): - (JSC::JITStubs::cti_op_resolve_base): - (JSC::JITStubs::cti_op_resolve_skip): - (JSC::JITStubs::cti_op_resolve_global): - (JSC::JITStubs::cti_op_div): - (JSC::JITStubs::cti_op_pre_dec): - (JSC::JITStubs::cti_op_jless): - (JSC::JITStubs::cti_op_not): - (JSC::JITStubs::cti_op_jtrue): - (JSC::JITStubs::cti_op_post_inc): - (JSC::JITStubs::cti_op_eq): - (JSC::JITStubs::cti_op_lshift): - (JSC::JITStubs::cti_op_bitand): - (JSC::JITStubs::cti_op_rshift): - (JSC::JITStubs::cti_op_bitnot): - (JSC::JITStubs::cti_op_resolve_with_base): - (JSC::JITStubs::cti_op_new_func_exp): - (JSC::JITStubs::cti_op_mod): - (JSC::JITStubs::cti_op_less): - (JSC::JITStubs::cti_op_neq): - (JSC::JITStubs::cti_op_post_dec): - (JSC::JITStubs::cti_op_urshift): - (JSC::JITStubs::cti_op_bitxor): - (JSC::JITStubs::cti_op_new_regexp): - (JSC::JITStubs::cti_op_bitor): - (JSC::JITStubs::cti_op_call_eval): - (JSC::JITStubs::cti_op_throw): - (JSC::JITStubs::cti_op_get_pnames): - (JSC::JITStubs::cti_op_next_pname): - (JSC::JITStubs::cti_op_push_scope): - (JSC::JITStubs::cti_op_pop_scope): - (JSC::JITStubs::cti_op_typeof): - (JSC::JITStubs::cti_op_is_undefined): - (JSC::JITStubs::cti_op_is_boolean): - (JSC::JITStubs::cti_op_is_number): - (JSC::JITStubs::cti_op_is_string): - (JSC::JITStubs::cti_op_is_object): - (JSC::JITStubs::cti_op_is_function): - (JSC::JITStubs::cti_op_stricteq): - (JSC::JITStubs::cti_op_to_primitive): - (JSC::JITStubs::cti_op_strcat): - (JSC::JITStubs::cti_op_nstricteq): - (JSC::JITStubs::cti_op_to_jsnumber): - (JSC::JITStubs::cti_op_in): - (JSC::JITStubs::cti_op_push_new_scope): - (JSC::JITStubs::cti_op_jmp_scopes): - (JSC::JITStubs::cti_op_put_by_index): - (JSC::JITStubs::cti_op_switch_imm): - (JSC::JITStubs::cti_op_switch_char): - (JSC::JITStubs::cti_op_switch_string): - (JSC::JITStubs::cti_op_del_by_val): - (JSC::JITStubs::cti_op_put_getter): - (JSC::JITStubs::cti_op_put_setter): - (JSC::JITStubs::cti_op_new_error): - (JSC::JITStubs::cti_op_debug): - (JSC::JITStubs::cti_vm_throw): - * jit/JITStubs.h: - (JSC::JITStackFrame::returnAddressSlot): - -2009-05-07 Darin Adler - - Reviewed by Geoff Garen. - - * parser/Lexer.cpp: - (JSC::Lexer::lex): Fix missing braces. This would make us always - take the slower case for string parsing and Visual Studio correctly - noticed unreachable code. - -2009-05-07 Darin Adler - - Reviewed by Sam Weinig. - - Bug 25589: goto instead of state machine in lexer - https://bugs.webkit.org/show_bug.cgi?id=25589 - - SunSpider is 0.8% faster. - - * parser/Lexer.cpp: - (JSC::Lexer::currentCharacter): Added. - (JSC::Lexer::currentOffset): Changed to call currentCharacter for clarity. - (JSC::Lexer::setCode): Removed code to set now-obsolete m_skipLineEnd. - (JSC::Lexer::shiftLineTerminator): Added. Handles line numbers and the - two-character line terminators. - (JSC::Lexer::makeIdentifier): Changed to take characters and length rather - than a vector, since we now make these directly out of the source buffer - when possible. - (JSC::Lexer::lastTokenWasRestrKeyword): Added. - (JSC::isNonASCIIIdentStart): Broke out the non-inline part. - (JSC::isIdentStart): Moved here. - (JSC::isNonASCIIIdentPart): Broke out the non-inline part. - (JSC::isIdentPart): Moved here. - (JSC::singleEscape): Moved here, and removed some unneeded cases. - (JSC::Lexer::record8): Moved here. - (JSC::Lexer::record16): Moved here. - (JSC::Lexer::lex): Rewrote this whole function to use goto and not use - a state machine. Got rid of most of the local variables. Also rolled the - matchPunctuator function in here. - (JSC::Lexer::scanRegExp): Changed to use the new version of isLineTerminator. - Clear m_buffer16 after using it instead of before. - - * parser/Lexer.h: Removed State enum, setDone function, nextLine function, - lookupKeywordFunction, one of the isLineTerminator functions, m_done data member, - m_skipLineEnd data member, and m_state data member. Added shiftLineTerminator - function, currentCharacter function, and changed the arguments to the makeIdentifier - function. Removed one branch from the isLineTerminator function. - - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncReplace): Streamlined the case where we don't replace anything. - -2009-05-07 Geoffrey Garen - - Reviewed by Gavin Barraclough. - - Removed a few more special constants, and replaced them with uses of - the JITStackFrame struct. - - Removed one of the two possible definitions of VoidPtrPair. The Mac - definition was more elegant, but SunSpider doesn't think it's any - faster, and it's net less elegant to have two ways of doing things. - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompile): - * jit/JITStubs.h: - (JSC::): - -2009-05-07 Darin Adler - - * runtime/ScopeChain.h: - (JSC::ScopeChainNode::~ScopeChainNode): Tweak formatting. - -2009-05-07 Simon Hausmann - - Reviewed by Tor Arne Vestbø. - - Fix the build thread stack base determination build on Symbian, - by moving the code block before PLATFORM(UNIX), which is also - enabled on Symbian builds. - - * runtime/Collector.cpp: - (JSC::currentThreadStackBase): - -2009-05-07 Oliver Hunt - - Reviewed by Gavin Barraclough. - - Fix crash due to incorrectly using an invalid scopechain - - stringProtoFuncReplace was checking for an exception on a CachedCall - by asking for the cached callframes exception. Unfortunately this - could crash in certain circumstances as CachedCall does not guarantee - a valid callframe following a call. Even more unfortunately the check - was entirely unnecessary as there is only a single exception slot per - global data, so it was already checked via the initial exec->hadException() - check. - - To make bugs like this more obvious, i've added a debug only destructor - to ScopeChainNode that 0's all of its fields. This exposed a crash in - the standard javascriptcore tests. - - * runtime/ScopeChain.h: - (JSC::ScopeChainNode::~ScopeChainNode): - (JSC::ScopeChain::~ScopeChain): - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncReplace): - -2009-05-07 Gavin Barraclough - - Reviewed by Geoff Garen. - - Enable op_strcat across += assignments. This patch allows the lhs of a read/modify node - to be included within the concatenation operation, and also modifies the implementation - of the concatenation to attempt to reuse and cat onto the leftmost string, rather than - always allocating a new empty output string to copy into (as was previously the behaviour). - - ~0.5% progression, due to a 3%-3.5% progression on the string tests (particularly validate). - - * parser/Nodes.cpp: - (JSC::BinaryOpNode::emitStrcat): - (JSC::emitReadModifyAssignment): - (JSC::ReadModifyResolveNode::emitBytecode): - (JSC::ReadModifyDotNode::emitBytecode): - (JSC::ReadModifyBracketNode::emitBytecode): - * parser/Nodes.h: - * runtime/Operations.h: - (JSC::concatenateStrings): - * runtime/UString.cpp: - (JSC::UString::reserveCapacity): - * runtime/UString.h: - -2009-05-07 Simon Hausmann - - Reviewed by Oliver Hunt. - - Fix the build on Windows without JIT: interpreter/RegisterFile.h needs - roundUpAllocationSize, which is protected by #if ENABLED(ASSEMBLER). - Moved the #ifdef down and always offer the function. - - * jit/ExecutableAllocator.h: - -2009-05-06 Geoffrey Garen - - Reviewed by Gavin "++" Barraclough. - - Added some abstraction around the JIT stub calling convention by creating - a struct to represent the persistent stack frame JIT code shares with - JIT stubs. - - SunSpider reports no change. - - * jit/JIT.h: - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_convert_this): - (JSC::JITStubs::cti_op_end): - (JSC::JITStubs::cti_op_add): - (JSC::JITStubs::cti_op_pre_inc): - (JSC::JITStubs::cti_timeout_check): - (JSC::JITStubs::cti_register_file_check): - (JSC::JITStubs::cti_op_loop_if_less): - (JSC::JITStubs::cti_op_loop_if_lesseq): - (JSC::JITStubs::cti_op_new_object): - (JSC::JITStubs::cti_op_put_by_id_generic): - (JSC::JITStubs::cti_op_get_by_id_generic): - (JSC::JITStubs::cti_op_put_by_id): - (JSC::JITStubs::cti_op_put_by_id_second): - (JSC::JITStubs::cti_op_put_by_id_fail): - (JSC::JITStubs::cti_op_get_by_id): - (JSC::JITStubs::cti_op_get_by_id_second): - (JSC::JITStubs::cti_op_get_by_id_self_fail): - (JSC::JITStubs::cti_op_get_by_id_proto_list): - (JSC::JITStubs::cti_op_get_by_id_proto_list_full): - (JSC::JITStubs::cti_op_get_by_id_proto_fail): - (JSC::JITStubs::cti_op_get_by_id_array_fail): - (JSC::JITStubs::cti_op_get_by_id_string_fail): - (JSC::JITStubs::cti_op_instanceof): - (JSC::JITStubs::cti_op_del_by_id): - (JSC::JITStubs::cti_op_mul): - (JSC::JITStubs::cti_op_new_func): - (JSC::JITStubs::cti_op_call_JSFunction): - (JSC::JITStubs::cti_op_call_arityCheck): - (JSC::JITStubs::cti_vm_dontLazyLinkCall): - (JSC::JITStubs::cti_vm_lazyLinkCall): - (JSC::JITStubs::cti_op_push_activation): - (JSC::JITStubs::cti_op_call_NotJSFunction): - (JSC::JITStubs::cti_op_create_arguments): - (JSC::JITStubs::cti_op_create_arguments_no_params): - (JSC::JITStubs::cti_op_tear_off_activation): - (JSC::JITStubs::cti_op_tear_off_arguments): - (JSC::JITStubs::cti_op_profile_will_call): - (JSC::JITStubs::cti_op_profile_did_call): - (JSC::JITStubs::cti_op_ret_scopeChain): - (JSC::JITStubs::cti_op_new_array): - (JSC::JITStubs::cti_op_resolve): - (JSC::JITStubs::cti_op_construct_JSConstruct): - (JSC::JITStubs::cti_op_construct_NotJSConstruct): - (JSC::JITStubs::cti_op_get_by_val): - (JSC::JITStubs::cti_op_get_by_val_string): - (JSC::JITStubs::cti_op_get_by_val_byte_array): - (JSC::JITStubs::cti_op_resolve_func): - (JSC::JITStubs::cti_op_sub): - (JSC::JITStubs::cti_op_put_by_val): - (JSC::JITStubs::cti_op_put_by_val_array): - (JSC::JITStubs::cti_op_put_by_val_byte_array): - (JSC::JITStubs::cti_op_lesseq): - (JSC::JITStubs::cti_op_loop_if_true): - (JSC::JITStubs::cti_op_load_varargs): - (JSC::JITStubs::cti_op_negate): - (JSC::JITStubs::cti_op_resolve_base): - (JSC::JITStubs::cti_op_resolve_skip): - (JSC::JITStubs::cti_op_resolve_global): - (JSC::JITStubs::cti_op_div): - (JSC::JITStubs::cti_op_pre_dec): - (JSC::JITStubs::cti_op_jless): - (JSC::JITStubs::cti_op_not): - (JSC::JITStubs::cti_op_jtrue): - (JSC::JITStubs::cti_op_post_inc): - (JSC::JITStubs::cti_op_eq): - (JSC::JITStubs::cti_op_lshift): - (JSC::JITStubs::cti_op_bitand): - (JSC::JITStubs::cti_op_rshift): - (JSC::JITStubs::cti_op_bitnot): - (JSC::JITStubs::cti_op_resolve_with_base): - (JSC::JITStubs::cti_op_new_func_exp): - (JSC::JITStubs::cti_op_mod): - (JSC::JITStubs::cti_op_less): - (JSC::JITStubs::cti_op_neq): - (JSC::JITStubs::cti_op_post_dec): - (JSC::JITStubs::cti_op_urshift): - (JSC::JITStubs::cti_op_bitxor): - (JSC::JITStubs::cti_op_new_regexp): - (JSC::JITStubs::cti_op_bitor): - (JSC::JITStubs::cti_op_call_eval): - (JSC::JITStubs::cti_op_throw): - (JSC::JITStubs::cti_op_get_pnames): - (JSC::JITStubs::cti_op_next_pname): - (JSC::JITStubs::cti_op_push_scope): - (JSC::JITStubs::cti_op_pop_scope): - (JSC::JITStubs::cti_op_typeof): - (JSC::JITStubs::cti_op_is_undefined): - (JSC::JITStubs::cti_op_is_boolean): - (JSC::JITStubs::cti_op_is_number): - (JSC::JITStubs::cti_op_is_string): - (JSC::JITStubs::cti_op_is_object): - (JSC::JITStubs::cti_op_is_function): - (JSC::JITStubs::cti_op_stricteq): - (JSC::JITStubs::cti_op_to_primitive): - (JSC::JITStubs::cti_op_strcat): - (JSC::JITStubs::cti_op_nstricteq): - (JSC::JITStubs::cti_op_to_jsnumber): - (JSC::JITStubs::cti_op_in): - (JSC::JITStubs::cti_op_push_new_scope): - (JSC::JITStubs::cti_op_jmp_scopes): - (JSC::JITStubs::cti_op_put_by_index): - (JSC::JITStubs::cti_op_switch_imm): - (JSC::JITStubs::cti_op_switch_char): - (JSC::JITStubs::cti_op_switch_string): - (JSC::JITStubs::cti_op_del_by_val): - (JSC::JITStubs::cti_op_put_getter): - (JSC::JITStubs::cti_op_put_setter): - (JSC::JITStubs::cti_op_new_error): - (JSC::JITStubs::cti_op_debug): - (JSC::JITStubs::cti_vm_throw): - * jit/JITStubs.h: - (JSC::): - -2009-05-06 Gavin Barraclough - - Reviewed by Maciej Stachowiak & Darin Adler. - - Improve string concatenation (as coded in JS as a sequence of adds). - - Detect patterns corresponding to string concatenation, and change the bytecode - generation to emit a new op_strcat instruction. By handling the full set of - additions within a single function we do not need allocate JSString wrappers - for intermediate results, and we can calculate the size of the output string - prior to allocating storage, in order to prevent reallocation of the buffer. - - 1.5%-2% progression on Sunspider, largely due to a 30% progression on date-format-xparb. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): - Add new opcodes. - * bytecode/Opcode.h: - Add new opcodes. - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitStrcat): - (JSC::BytecodeGenerator::emitToPrimitive): - Add generation of new opcodes. - * bytecompiler/BytecodeGenerator.h: - Add generation of new opcodes. - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - Add implmentation of new opcodes. - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - Add implmentation of new opcodes. - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_to_primitive): - (JSC::JITStubs::cti_op_strcat): - Add implmentation of new opcodes. - * jit/JITStubs.h: - Add implmentation of new opcodes. - * parser/Nodes.cpp: - (JSC::BinaryOpNode::emitStrcat): - (JSC::BinaryOpNode::emitBytecode): - (JSC::ReadModifyResolveNode::emitBytecode): - Add generation of new opcodes. - * parser/Nodes.h: - (JSC::ExpressionNode::): - (JSC::AddNode::): - Add methods to allow identification of add nodes. - * parser/ResultType.h: - (JSC::ResultType::definitelyIsString): - (JSC::ResultType::forAdd): - Fix error in detection of adds that will produce string results. - * runtime/Operations.h: - (JSC::concatenateStrings): - Add implmentation of new opcodes. - * runtime/UString.cpp: - (JSC::UString::appendNumeric): - Add methods to append numbers to an existing string. - * runtime/UString.h: - (JSC::UString::Rep::createEmptyBuffer): - (JSC::UString::BaseString::BaseString): - Add support for creating an empty string with a non-zero capacity available in the BaseString. - -2009-05-06 Darin Adler - - Reviewed by Sam Weinig. - - Made RefCounted::m_refCount private. - - * runtime/Structure.h: Removed addressOfCount. - * wtf/RefCounted.h: Made m_refCount private. - Added addressOfCount. - -2009-05-06 Darin Adler - - Fixed assertion seen a lot! - - * parser/Nodes.cpp: - (JSC::FunctionBodyNode::~FunctionBodyNode): Removed now-bogus assertion. - -2009-05-06 Darin Adler - - Working with Sam Weinig. - - Redo parse tree constructor optimization without breaking the Windows - build the way I did yesterday. The previous try broke the build by adding - an include of Lexer.h and all its dependencies that had to work outside - the JavaScriptCore project. - - * GNUmakefile.am: Added NodeConstructors.h. - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: - Removed byteocde directory -- we no longer are trying to include Lexer.h - outside JavaScriptCore. - - * JavaScriptCore.xcodeproj/project.pbxproj: Change SegmentedVector.h - and Lexer.h back to internal files. Added NodeConstructors.h. - - * parser/Grammar.y: Added include of NodeConstructors.h. - Changed use of ConstDeclNode to use public functions. - - * parser/NodeConstructors.h: Copied from parser/Nodes.h. - Just contains the inlined constructors now. - - * parser/Nodes.cpp: Added include of NodeConstructors.h. - Moved node constructors into the header. - (JSC::FunctionBodyNode::FunctionBodyNode): Removed m_refCount - initialization. - - * parser/Nodes.h: Removed all the constructor definitions, and also - removed the JSC_FAST_CALL from them since these are all inlined, so the - calling convention is irrelevant. Made more things private. Used a data - member for operator opcodes instead of a virtual function. Removed the - special FunctionBodyNode::ref/deref functions since the default functions - are now just as fast. - - * runtime/FunctionConstructor.cpp: - (JSC::extractFunctionBody): Fixed types here so we don't typecast until - after we do type checking. - -2009-05-06 Simon Hausmann - - Reviewed by Ariya Hidayat. - - Fix the Qt build on Windows. - - * JavaScriptCore.pri: Define BUILDING_JavaScriptCore/WTF to get the meaning - of the JS_EXPORTDATA macros correct - -2009-05-06 Simon Hausmann - - Reviewed by Ariya Hidayat. - - Enable the JIT for the Qt build on Windows. - - * JavaScriptCore.pri: - -2009-05-06 Simon Hausmann - - Reviewed by Tor Arne Vestbø. - - Tweak JavaScriptCore.pri for being able to override the generated sources dir for the - generated_files target. - - * JavaScriptCore.pri: - -2009-05-06 Tor Arne Vestbø - - Reviewed by Simon Hausmann. - - Build QtWebKit as a framework on Mac - - This implies both debug and release build by default, unless - one of the --debug or --release config options are passed to - the build-webkit script. - - Frameworks can be disabled by passing CONFIG+=webkit_no_framework - to the build-webkit script. - - To be able to build both debug and release targets in parallel - we have to use separate output directories for the generated - sources, which is not optimal, but required to avoid race conditions. - - An optimization would be to only require this spit-up on Mac. - - * JavaScriptCore.pri: - * JavaScriptCore.pro: - * jsc.pro: - -2009-05-06 Tor Arne Vestbø - - Reviewed by Simon Hausmann. - - [Qt] Use $$GENERATED_SOURCES_DIR as output when running bison - - A couple of the generators left the bison output file in the source - tree, and then moved it into $$GENERATED_SOURCES_DIR, which did not - work well when building release and debug configurations in parallel. - - * JavaScriptCore.pri: - -2009-05-05 Geoffrey Garen - - Reviewed by Maciej Stachowiak. - - Simplified a bit of codegen. - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - -2009-05-05 Geoffrey Garen - - Reviewed by Cameron Zwarich. - - Moved all the JIT stub related code into one place. - - * jit/JIT.cpp: - * jit/JIT.h: - * jit/JITCode.h: - * jit/JITStubs.cpp: - (JSC::): - * jit/JITStubs.h: - -2009-05-05 Sam Weinig - - Try to fix Windows build. - - Move Node constructor to the .cpp file. - - * parser/Nodes.cpp: - * parser/Nodes.h: - -2009-05-05 Darin Adler - - Try to fix Windows build. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - - Try to fix Mac build. - - * JavaScriptCore.xcodeproj/project.pbxproj: Made SegmentedVector.h private. - -2009-05-05 Darin Adler - - Try to fix Mac build. - - * JavaScriptCore.xcodeproj/project.pbxproj: Made Lexer.h private. - -2009-05-05 Darin Adler - - Reviewed by Sam Weinig. - - Bug 25569: make ParserRefCounted use conventional reference counting - https://bugs.webkit.org/show_bug.cgi?id=25569 - - SunSpider speedup of about 1.6%. - - * JavaScriptCore.exp: Updated. - - * parser/Nodes.cpp: - (JSC::NodeReleaser::releaseAllNodes): ALWAYS_INLINE. - (JSC::NodeReleaser::adopt): Ditto. - (JSC::ParserRefCounted::ParserRefCounted): Removed most of the code. - Add the object to a Vector that gets cleared after parsing. - (JSC::ParserRefCounted::~ParserRefCounted): Removed most of the code. - - * parser/Nodes.h: Made ParserRefCounted inherit from RefCounted and - made inline versions of the constructor and destructor. Made the - Node constructor inline. - - * parser/Parser.cpp: - (JSC::Parser::parse): Call globalData->parserObjects.shrink(0) after - parsing, where it used to call ParserRefCounted::deleteNewObjects. - - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): Eliminated code to manage the - newParserObjects and parserObjectExtraRefCounts. - (JSC::JSGlobalData::~JSGlobalData): Ditto. - - * runtime/JSGlobalData.h: Replaced the HashSet and HashCountedSet - with a Vector. - - * wtf/PassRefPtr.h: - (WTF::PassRefPtr::~PassRefPtr): The most common thing to do with a - PassRefPtr in hot code is to pass it and then destroy it once it's - set to zero. Help the optimizer by telling it that's true. - -2009-05-05 Xan Lopez and Gustavo Noronha Silva - - Reviewed by Oliver Hunt. - - Disable the NativeFunctionWrapper for all non-Mac ports for now, - as it is also crashing on Linux/x86. - - * runtime/NativeFunctionWrapper.h: - -2009-05-05 Steve Falkenburg - - Fix build. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-05 Oliver Hunt - - Reviewed by Maciej Stachowiak. - - Expose toThisObject for the DOM Window - - * JavaScriptCore.exp: - -2009-05-05 Oliver Hunt - - Reviewed by NOBODY (Make windows go again until i work out the - accursed calling convention). - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * jit/JIT.cpp: - * runtime/NativeFunctionWrapper.h: - -2009-05-05 Oliver Hunt - - Reviewed by NOBODY (Fix windows debug builds). - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-05 Oliver Hunt - - Reviewed by NOBODY (Hopefully the last fix). - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - -2009-05-05 Oliver Hunt - - Reviewed by NOBODY (Fix the build fix caused by a different build fix). - - * parser/Nodes.cpp: - * parser/Nodes.h: - -2009-05-05 Oliver Hunt - - Reviewed by NOBODY (No idea how my changes could have broken these). - - * runtime/DatePrototype.cpp: - * runtime/RegExpObject.cpp: - -2009-05-05 Oliver Hunt - - Reviewed by NOBODY (Why should i expect msvc to list all the errors in a file?). - - * parser/Nodes.cpp: - -2009-05-05 Oliver Hunt - - Reviewed by NOBODY (Fix warning, and another missing include). - - * jit/JIT.cpp: - * parser/Nodes.h: - -2009-05-05 Oliver Hunt - - Reviewed by NOBODY (More build fixes). - - * runtime/ErrorPrototype.cpp: - * runtime/JSGlobalObject.cpp: - * runtime/NumberPrototype.cpp: - * runtime/ObjectPrototype.cpp: - * runtime/StringConstructor.cpp: - -2009-05-05 Oliver Hunt - - Reviewed by NOBODY (Will the fixes never end?). - - * runtime/FunctionPrototype.h: - * runtime/Lookup.cpp: - -2009-05-05 Oliver Hunt - - Reviewed by NOBODY (More build fixes). - - * jit/JIT.cpp: - -2009-05-05 Oliver Hunt - - Reviewed by NOBODY (More build fixing). - - * runtime/CallData.h: - -2009-05-05 Oliver Hunt - - Reviewed by NOBODY (Build fix). - - * runtime/ArrayConstructor.cpp: - * runtime/BooleanPrototype.cpp: - * runtime/DateConstructor.cpp: - * runtime/Error.cpp: - * runtime/ObjectConstructor.cpp: - * runtime/RegExpPrototype.cpp: - -2009-05-05 Oliver Hunt - - Reviewed by NOBODY (Buildfix). - - Add missing file - - * runtime/NativeFunctionWrapper.h: Copied from JavaScriptCore/jit/ExecutableAllocator.cpp. - -2009-05-05 Oliver Hunt - - Reviewed by Gavin Barraclough. - - Bug 25559: Improve native function call performance - - - In order to cache calls to native functions we now make the standard - prototype functions use a small assembly thunk that converts the JS - calling convention into the native calling convention. As this is - only beneficial in the JIT we use the NativeFunctionWrapper typedef - to alternate between PrototypeFunction and JSFunction to keep the - code sane. This change from PrototypeFunction to NativeFunctionWrapper - is the bulk of this patch. - - * JavaScriptCore.exp: - * JavaScriptCore.xcodeproj/project.pbxproj: - * assembler/MacroAssemblerX86Common.h: - (JSC::MacroAssemblerX86Common::call): - * assembler/MacroAssemblerX86_64.h: - (JSC::MacroAssemblerX86_64::addPtr): - * assembler/X86Assembler.h: - (JSC::X86Assembler::leaq_mr): - (JSC::X86Assembler::call_m): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::execute): - (JSC::Interpreter::prepareForRepeatCall): - * jit/JIT.cpp: - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JIT.h: - (JSC::JIT::compileCTIMachineTrampolines): - * jit/JITCall.cpp: - (JSC::JIT::linkCall): - (JSC::JIT::compileOpCallInitializeCallFrame): - (JSC::JIT::compileOpCall): - * jit/JITCode.h: - (JSC::JITCode::operator bool): - * jit/JITInlineMethods.h: - (JSC::JIT::emitGetFromCallFrameHeader): - (JSC::JIT::emitGetFromCallFrameHeader32): - * jit/JITStubs.cpp: - (JSC::JITStubs::JITStubs): - (JSC::JITStubs::cti_op_call_JSFunction): - (JSC::JITStubs::cti_vm_dontLazyLinkCall): - (JSC::JITStubs::cti_vm_lazyLinkCall): - (JSC::JITStubs::cti_op_construct_JSConstruct): - * jit/JITStubs.h: - (JSC::JITStubs::ctiNativeCallThunk): - * jsc.cpp: - (GlobalObject::GlobalObject): - * parser/Nodes.cpp: - (JSC::FunctionBodyNode::FunctionBodyNode): - (JSC::FunctionBodyNode::createNativeThunk): - (JSC::FunctionBodyNode::generateJITCode): - * parser/Nodes.h: - (JSC::FunctionBodyNode::): - (JSC::FunctionBodyNode::generatedJITCode): - (JSC::FunctionBodyNode::jitCode): - * profiler/Profiler.cpp: - (JSC::Profiler::createCallIdentifier): - * runtime/ArgList.h: - * runtime/ArrayPrototype.cpp: - (JSC::isNumericCompareFunction): - * runtime/BooleanPrototype.cpp: - (JSC::BooleanPrototype::BooleanPrototype): - * runtime/DateConstructor.cpp: - (JSC::DateConstructor::DateConstructor): - * runtime/ErrorPrototype.cpp: - (JSC::ErrorPrototype::ErrorPrototype): - * runtime/FunctionPrototype.cpp: - (JSC::FunctionPrototype::addFunctionProperties): - (JSC::functionProtoFuncToString): - * runtime/FunctionPrototype.h: - * runtime/JSFunction.cpp: - (JSC::JSFunction::JSFunction): - (JSC::JSFunction::~JSFunction): - (JSC::JSFunction::mark): - (JSC::JSFunction::getCallData): - (JSC::JSFunction::call): - (JSC::JSFunction::argumentsGetter): - (JSC::JSFunction::callerGetter): - (JSC::JSFunction::lengthGetter): - (JSC::JSFunction::getOwnPropertySlot): - (JSC::JSFunction::put): - (JSC::JSFunction::deleteProperty): - (JSC::JSFunction::getConstructData): - (JSC::JSFunction::construct): - * runtime/JSFunction.h: - (JSC::JSFunction::JSFunction): - (JSC::JSFunction::setScope): - (JSC::JSFunction::scope): - (JSC::JSFunction::isHostFunction): - (JSC::JSFunction::scopeChain): - (JSC::JSFunction::clearScopeChain): - (JSC::JSFunction::setScopeChain): - (JSC::JSFunction::nativeFunction): - (JSC::JSFunction::setNativeFunction): - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::~JSGlobalData): - (JSC::JSGlobalData::createNativeThunk): - * runtime/JSGlobalData.h: - (JSC::JSGlobalData::nativeFunctionThunk): - * runtime/JSGlobalObject.cpp: - (JSC::JSGlobalObject::reset): - * runtime/JSGlobalObject.h: - * runtime/Lookup.cpp: - (JSC::setUpStaticFunctionSlot): - * runtime/Lookup.h: - * runtime/NumberPrototype.cpp: - (JSC::NumberPrototype::NumberPrototype): - * runtime/ObjectPrototype.cpp: - (JSC::ObjectPrototype::ObjectPrototype): - * runtime/RegExpPrototype.cpp: - (JSC::RegExpPrototype::RegExpPrototype): - * runtime/StringConstructor.cpp: - (JSC::StringConstructor::StringConstructor): - -2009-05-05 Gavin Barraclough - - Reviewed by Oliver Hunt. - - For convenience, let the sampling flags tool clear multiple flags at once. - - * jsc.cpp: - (GlobalObject::GlobalObject): - (functionSetSamplingFlags): - (functionClearSamplingFlags): - -2009-05-04 Maciej Stachowiak - - Rubber stamped by Gavin. - - - inline Vector::resize for a ~1.5% speedup on string-tagcloud - - * wtf/Vector.h: - (WTF::Vector::resize): Inline - -2009-05-03 Steve Falkenburg - - Windows build fix. - - * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: - -2009-05-03 Mark Rowe - - Fix the 64-bit build. - - * API/APICast.h: - (toJS): - (toRef): - * runtime/JSNumberCell.cpp: - (JSC::jsAPIMangledNumber): - * runtime/JSNumberCell.h: - -2009-05-02 Sam Weinig - - Roll JSC API number marshaling back in one last time (I hope). - -2009-05-03 Sam Weinig - - Roll JSC API number marshaling back out. It still breaks windows. - -2009-05-03 Sam Weinig - - Roll JSC API number marshaling back in. - -2009-05-02 Darin Adler - - Reviewed by Maciej Stachowiak. - - Bug 25519: streamline lexer by handling BOMs differently - https://bugs.webkit.org/show_bug.cgi?id=25519 - - Roughly 1% faster SunSpider. - - * parser/Grammar.y: Tweak formatting a bit. - - * parser/Lexer.cpp: - (JSC::Lexer::Lexer): Remove unnnecessary initialization of data members - that are set up by setCode. - (JSC::Lexer::currentOffset): Added. Used where the old code would look at - m_currentOffset. - (JSC::Lexer::shift1): Replaces the old shift function. No longer does anything - to handle BOM characters. - (JSC::Lexer::shift2): Ditto. - (JSC::Lexer::shift3): Ditto. - (JSC::Lexer::shift4): Ditto. - (JSC::Lexer::setCode): Updated for name change from yylineno to m_line. - Removed now-unused m_eatNextIdentifier, m_stackToken, and m_restrKeyword. - Replaced m_skipLF and m_skipCR with m_skipLineEnd. Replaced the old - m_length with m_codeEnd and m_currentOffset with m_codeStart. Added code - to scan for a BOM character and call copyCodeWithoutBOMs() if we find any. - (JSC::Lexer::copyCodeWithoutBOMs): Added. - (JSC::Lexer::nextLine): Updated for name change from yylineno to m_line. - (JSC::Lexer::makeIdentifier): Moved up higher in the file. - (JSC::Lexer::matchPunctuator): Moved up higher in the file and changed to - use a switch statement instead of just if statements. - (JSC::Lexer::isLineTerminator): Moved up higher in the file and changed to - have fewer branches. - (JSC::Lexer::lastTokenWasRestrKeyword): Added. This replaces the old - m_restrKeyword boolean. - (JSC::Lexer::isIdentStart): Moved up higher in the file. Changed to use - fewer branches in the ASCII but not identifier case. - (JSC::Lexer::isIdentPart): Ditto. - (JSC::Lexer::singleEscape): Moved up higher in the file. - (JSC::Lexer::convertOctal): Moved up higher in the file. - (JSC::Lexer::convertHex): Moved up higher in the file. Changed to use - toASCIIHexValue instead of rolling our own here. - (JSC::Lexer::convertUnicode): Ditto. - (JSC::Lexer::record8): Moved up higher in the file. - (JSC::Lexer::record16): Moved up higher in the file. - (JSC::Lexer::lex): Changed type of stringType to int. Replaced m_skipLF - and m_skipCR with m_skipLineEnd, which requires fewer branches in the - main lexer loop. Use currentOffset instead of m_currentOffset. Removed - unneeded m_stackToken. Use isASCIIDigit instead of isDecimalDigit. - Split out the two cases for InIdentifierOrKeyword and InIdentifier. - Added special case tight loops for identifiers and other simple states. - Removed a branch from the code that sets m_atLineStart to false using goto. - Streamlined the number-handling code so we don't check for the same types - twice for non-numeric cases and don't add a null to m_buffer8 when it's - not being used. Removed m_eatNextIdentifier, which wasn't working anyway, - and m_restrKeyword, which is redundant with m_lastToken. Set the - m_delimited flag without using a branch. - (JSC::Lexer::scanRegExp): Tweaked style a bit. - (JSC::Lexer::clear): Clear m_codeWithoutBOMs so we don't use memory after - parsing. Clear out UString objects in the more conventional way. - (JSC::Lexer::sourceCode): Made this no-longer inline since it has more - work to do in the case where we stripped BOMs. - - * parser/Lexer.h: Renamed yylineno to m_lineNumber. Removed convertHex - function, which is the same as toASCIIHexValue. Removed isHexDigit - function, which is the same as isASCIIHedDigit. Replaced shift with four - separate shift functions. Removed isWhiteSpace function that passes - m_current, instead just passing m_current explicitly. Removed isOctalDigit, - which is the same as isASCIIOctalDigit. Eliminated unused arguments from - matchPunctuator. Added copyCoodeWithoutBOMs and currentOffset. Moved the - makeIdentifier function out of the header. Added lastTokenWasRestrKeyword - function. Added new constants for m_skipLineEnd. Removed unused yycolumn, - m_restrKeyword, m_skipLF, m_skipCR, m_eatNextIdentifier, m_stackToken, - m_position, m_length, m_currentOffset, m_nextOffset1, m_nextOffset2, - m_nextOffset3. Added m_skipLineEnd, m_codeStart, m_codeEnd, and - m_codeWithoutBOMs. - - * parser/SourceProvider.h: Added hasBOMs function. In the future this can - be used to tell the lexer about strings known not to have BOMs. - - * runtime/JSGlobalObjectFunctions.cpp: - (JSC::globalFuncUnescape): Changed to use isASCIIHexDigit. - - * wtf/ASCIICType.h: Added using statements to match the design of the - other WTF headers. - -2009-05-02 Ada Chan - - Fix windows build (when doing a clean build) - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-02 Geoffrey Garen - - Reviewed by Sam Weinig. - - Simplified null-ish JSValues. - - Replaced calls to noValue() with calls to JSValue() (which is what - noValue() returned). Removed noValue(). - - Replaced almost all uses of jsImpossibleValue() with uses of JSValue(). - Its one remaining use is for construction of hash table deleted values. - For that specific task, I made a new, private constructor with a special - tag. Removed jsImpossibleValue(). - - Removed "JSValue()" initialiazers, since default construction happens... - by default. - - * API/JSCallbackObjectFunctions.h: - (JSC::::call): - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitLoad): - * bytecompiler/BytecodeGenerator.h: - * debugger/DebuggerCallFrame.cpp: - (JSC::DebuggerCallFrame::evaluate): - * debugger/DebuggerCallFrame.h: - (JSC::DebuggerCallFrame::DebuggerCallFrame): - * interpreter/CallFrame.h: - (JSC::ExecState::clearException): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - (JSC::Interpreter::retrieveLastCaller): - * interpreter/Register.h: - (JSC::Register::Register): - * jit/JITCall.cpp: - (JSC::JIT::unlinkCall): - (JSC::JIT::compileOpCallInitializeCallFrame): - (JSC::JIT::compileOpCall): - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_call_eval): - (JSC::JITStubs::cti_vm_throw): - * profiler/Profiler.cpp: - (JSC::Profiler::willExecute): - (JSC::Profiler::didExecute): - * runtime/ArrayPrototype.cpp: - (JSC::getProperty): - * runtime/Completion.cpp: - (JSC::evaluate): - * runtime/Completion.h: - (JSC::Completion::Completion): - * runtime/GetterSetter.cpp: - (JSC::GetterSetter::getPrimitiveNumber): - * runtime/JSArray.cpp: - (JSC::JSArray::putSlowCase): - (JSC::JSArray::deleteProperty): - (JSC::JSArray::increaseVectorLength): - (JSC::JSArray::setLength): - (JSC::JSArray::pop): - (JSC::JSArray::sort): - (JSC::JSArray::compactForSorting): - * runtime/JSCell.cpp: - (JSC::JSCell::getJSNumber): - * runtime/JSCell.h: - (JSC::JSValue::getJSNumber): - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): - * runtime/JSImmediate.h: - (JSC::JSImmediate::fromNumberOutsideIntegerRange): - (JSC::JSImmediate::from): - * runtime/JSNumberCell.cpp: - (JSC::jsNumberCell): - * runtime/JSObject.cpp: - (JSC::callDefaultValueFunction): - * runtime/JSObject.h: - (JSC::JSObject::getDirect): - * runtime/JSPropertyNameIterator.cpp: - (JSC::JSPropertyNameIterator::toPrimitive): - * runtime/JSPropertyNameIterator.h: - (JSC::JSPropertyNameIterator::next): - * runtime/JSValue.h: - (JSC::JSValue::): - (JSC::JSValueHashTraits::constructDeletedValue): - (JSC::JSValueHashTraits::isDeletedValue): - (JSC::JSValue::JSValue): - * runtime/JSWrapperObject.h: - (JSC::JSWrapperObject::JSWrapperObject): - * runtime/Operations.h: - (JSC::resolveBase): - * runtime/PropertySlot.h: - (JSC::PropertySlot::clearBase): - (JSC::PropertySlot::clearValue): - -2009-05-02 Maciej Stachowiak - - Reviewed by Cameron Zwarich. - - - speed up the lexer in various ways - - ~2% command-line SunSpider speedup - - * parser/Lexer.cpp: - (JSC::Lexer::setCode): Moved below shift() so it can inline. - (JSC::Lexer::scanRegExp): Use resize(0) instead of clear() on Vectors, since the intent - here is not to free the underlying buffer. - (JSC::Lexer::lex): ditto; also, change the loop logic a bit for the main lexing loop - to avoid branching on !m_done twice per iteration. Now we only check it once. - (JSC::Lexer::shift): Make this ALWAYS_INLINE and tag an unusual branch as UNLIKELY - * parser/Lexer.h: - (JSC::Lexer::makeIdentifier): force to be ALWAYS_INLINE - * wtf/Vector.h: - (WTF::::append): force to be ALWAYS_INLINE (may have helped in ways other than parsing but it wasn't - getting inlined in a hot code path in the lexer) - -2009-05-01 Steve Falkenburg - - Windows build fix. - - * JavaScriptCore.vcproj/JavaScriptCore.make: - -2009-05-01 Sam Weinig - - Fix 64bit build. - - * runtime/JSNumberCell.h: - (JSC::JSValue::JSValue): - * runtime/JSValue.h: - (JSC::jsNumber): - -2009-05-01 Sam Weinig - - Roll out JavaScriptCore API number marshaling. - - * API/APICast.h: - (toJS): - (toRef): - * API/JSBase.cpp: - (JSEvaluateScript): - (JSCheckScriptSyntax): - * API/JSCallbackConstructor.cpp: - (JSC::constructJSCallback): - * API/JSCallbackFunction.cpp: - (JSC::JSCallbackFunction::call): - * API/JSCallbackObjectFunctions.h: - (JSC::::getOwnPropertySlot): - (JSC::::put): - (JSC::::deleteProperty): - (JSC::::construct): - (JSC::::hasInstance): - (JSC::::call): - (JSC::::toNumber): - (JSC::::toString): - (JSC::::staticValueGetter): - (JSC::::callbackGetter): - * API/JSObjectRef.cpp: - (JSObjectMakeFunction): - (JSObjectMakeArray): - (JSObjectMakeDate): - (JSObjectMakeError): - (JSObjectMakeRegExp): - (JSObjectGetPrototype): - (JSObjectSetPrototype): - (JSObjectGetProperty): - (JSObjectSetProperty): - (JSObjectGetPropertyAtIndex): - (JSObjectSetPropertyAtIndex): - (JSObjectDeleteProperty): - (JSObjectCallAsFunction): - (JSObjectCallAsConstructor): - * API/JSValueRef.cpp: - (JSValueGetType): - (JSValueIsUndefined): - (JSValueIsNull): - (JSValueIsBoolean): - (JSValueIsNumber): - (JSValueIsString): - (JSValueIsObject): - (JSValueIsObjectOfClass): - (JSValueIsEqual): - (JSValueIsStrictEqual): - (JSValueIsInstanceOfConstructor): - (JSValueMakeUndefined): - (JSValueMakeNull): - (JSValueMakeBoolean): - (JSValueMakeNumber): - (JSValueMakeString): - (JSValueToBoolean): - (JSValueToNumber): - (JSValueToStringCopy): - (JSValueToObject): - (JSValueProtect): - (JSValueUnprotect): - * JavaScriptCore.exp: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - * runtime/JSNumberCell.cpp: - * runtime/JSNumberCell.h: - * runtime/JSValue.h: - -2009-05-01 Sam Weinig - - Fix windows build. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-01 Sam Weinig - - Fix the build. - - * JavaScriptCore.exp: - -2009-05-01 Sam Weinig - - Reviewed by Geoffrey "Too Far!" Garen. - - Move JS number construction into JSValue. - - * runtime/JSImmediate.h: - * runtime/JSNumberCell.h: - (JSC::JSValue::JSValue): - * runtime/JSValue.h: - (JSC::jsNumber): - -2009-05-01 Sam Weinig - - Reviewed by Geoff "The Minneapolis" Garen. - - Add mechanism to vend heap allocated JS numbers to JavaScriptCore API clients with a - representation that is independent of the number representation in the VM. - - Numbers leaving the interpreter are converted to a tagged JSNumberCell. - - The numbers coming into the interpreter (asserted to be the tagged JSNumberCell) are - converted back to the VM's internal number representation. - - * API/APICast.h: - (toJS): - (toRef): - * API/JSBase.cpp: - (JSEvaluateScript): - (JSCheckScriptSyntax): - * API/JSCallbackConstructor.cpp: - (JSC::constructJSCallback): - * API/JSCallbackFunction.cpp: - (JSC::JSCallbackFunction::call): - * API/JSCallbackObjectFunctions.h: - (JSC::::getOwnPropertySlot): - (JSC::::put): - (JSC::::deleteProperty): - (JSC::::construct): - (JSC::::hasInstance): - (JSC::::call): - (JSC::::toNumber): - (JSC::::toString): - (JSC::::staticValueGetter): - (JSC::::callbackGetter): - * API/JSObjectRef.cpp: - (JSObjectMakeFunction): - (JSObjectMakeArray): - (JSObjectMakeDate): - (JSObjectMakeError): - (JSObjectMakeRegExp): - (JSObjectGetPrototype): - (JSObjectSetPrototype): - (JSObjectGetProperty): - (JSObjectSetProperty): - (JSObjectGetPropertyAtIndex): - (JSObjectSetPropertyAtIndex): - (JSObjectDeleteProperty): - (JSObjectCallAsFunction): - (JSObjectCallAsConstructor): - * API/JSValueRef.cpp: - (JSValueGetType): - (JSValueIsUndefined): - (JSValueIsNull): - (JSValueIsBoolean): - (JSValueIsNumber): - (JSValueIsString): - (JSValueIsObject): - (JSValueIsObjectOfClass): - (JSValueIsEqual): - (JSValueIsStrictEqual): - (JSValueIsInstanceOfConstructor): - (JSValueMakeUndefined): - (JSValueMakeNull): - (JSValueMakeBoolean): - (JSValueMakeNumber): - (JSValueMakeString): - (JSValueToBoolean): - (JSValueToNumber): - (JSValueToStringCopy): - (JSValueToObject): - (JSValueProtect): - (JSValueUnprotect): - * runtime/JSNumberCell.cpp: - (JSC::jsAPIMangledNumber): - * runtime/JSNumberCell.h: - (JSC::JSNumberCell::isAPIMangledNumber): - (JSC::JSNumberCell::): - (JSC::JSNumberCell::JSNumberCell): - (JSC::JSValue::isAPIMangledNumber): - * runtime/JSValue.h: - -2009-05-01 Geoffrey Garen - - Windows build fix take 6. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - -2009-05-01 Geoffrey Garen - - Windows build fix take 5. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-01 Geoffrey Garen - - Windows build fix take 4. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-01 Geoffrey Garen - - Windows build fix take 3. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-01 Geoffrey Garen - - Windows build fix take 2. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - -2009-05-01 Geoffrey Garen - - Windows build fix take 1. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-01 Geoffrey Garen - - Rubber Stamped by Sam Weinig. - - Renamed JSValuePtr => JSValue. - - * API/APICast.h: - (toJS): - (toRef): - * API/JSCallbackConstructor.h: - (JSC::JSCallbackConstructor::createStructure): - * API/JSCallbackFunction.cpp: - (JSC::JSCallbackFunction::call): - * API/JSCallbackFunction.h: - (JSC::JSCallbackFunction::createStructure): - * API/JSCallbackObject.h: - (JSC::JSCallbackObject::createStructure): - * API/JSCallbackObjectFunctions.h: - (JSC::::asCallbackObject): - (JSC::::put): - (JSC::::hasInstance): - (JSC::::call): - (JSC::::staticValueGetter): - (JSC::::staticFunctionGetter): - (JSC::::callbackGetter): - * API/JSContextRef.cpp: - * API/JSObjectRef.cpp: - (JSObjectMakeConstructor): - (JSObjectSetPrototype): - (JSObjectGetProperty): - (JSObjectSetProperty): - (JSObjectGetPropertyAtIndex): - (JSObjectSetPropertyAtIndex): - * API/JSValueRef.cpp: - (JSValueGetType): - (JSValueIsUndefined): - (JSValueIsNull): - (JSValueIsBoolean): - (JSValueIsNumber): - (JSValueIsString): - (JSValueIsObject): - (JSValueIsObjectOfClass): - (JSValueIsEqual): - (JSValueIsStrictEqual): - (JSValueIsInstanceOfConstructor): - (JSValueToBoolean): - (JSValueToNumber): - (JSValueToStringCopy): - (JSValueToObject): - (JSValueProtect): - (JSValueUnprotect): - * JavaScriptCore.exp: - * bytecode/CodeBlock.cpp: - (JSC::valueToSourceString): - (JSC::constantName): - (JSC::CodeBlock::dump): - * bytecode/CodeBlock.h: - (JSC::CodeBlock::getConstant): - (JSC::CodeBlock::addUnexpectedConstant): - (JSC::CodeBlock::unexpectedConstant): - * bytecode/EvalCodeCache.h: - (JSC::EvalCodeCache::get): - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::addConstant): - (JSC::BytecodeGenerator::addUnexpectedConstant): - (JSC::BytecodeGenerator::emitLoad): - (JSC::BytecodeGenerator::emitGetScopedVar): - (JSC::BytecodeGenerator::emitPutScopedVar): - (JSC::BytecodeGenerator::emitNewError): - (JSC::keyForImmediateSwitch): - * bytecompiler/BytecodeGenerator.h: - (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue): - (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue): - * debugger/Debugger.cpp: - (JSC::evaluateInGlobalCallFrame): - * debugger/Debugger.h: - * debugger/DebuggerActivation.cpp: - (JSC::DebuggerActivation::put): - (JSC::DebuggerActivation::putWithAttributes): - (JSC::DebuggerActivation::lookupGetter): - (JSC::DebuggerActivation::lookupSetter): - * debugger/DebuggerActivation.h: - (JSC::DebuggerActivation::createStructure): - * debugger/DebuggerCallFrame.cpp: - (JSC::DebuggerCallFrame::evaluate): - * debugger/DebuggerCallFrame.h: - (JSC::DebuggerCallFrame::DebuggerCallFrame): - (JSC::DebuggerCallFrame::exception): - * interpreter/CachedCall.h: - (JSC::CachedCall::CachedCall): - (JSC::CachedCall::call): - (JSC::CachedCall::setThis): - (JSC::CachedCall::setArgument): - * interpreter/CallFrame.cpp: - (JSC::CallFrame::thisValue): - (JSC::CallFrame::dumpCaller): - * interpreter/CallFrame.h: - (JSC::ExecState::setException): - (JSC::ExecState::exception): - (JSC::ExecState::exceptionSlot): - * interpreter/CallFrameClosure.h: - (JSC::CallFrameClosure::setArgument): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::resolve): - (JSC::Interpreter::resolveSkip): - (JSC::Interpreter::resolveGlobal): - (JSC::Interpreter::resolveBase): - (JSC::Interpreter::resolveBaseAndProperty): - (JSC::Interpreter::resolveBaseAndFunc): - (JSC::isNotObject): - (JSC::Interpreter::callEval): - (JSC::Interpreter::unwindCallFrame): - (JSC::Interpreter::throwException): - (JSC::Interpreter::execute): - (JSC::Interpreter::prepareForRepeatCall): - (JSC::Interpreter::createExceptionScope): - (JSC::Interpreter::tryCachePutByID): - (JSC::Interpreter::tryCacheGetByID): - (JSC::Interpreter::privateExecute): - (JSC::Interpreter::retrieveArguments): - (JSC::Interpreter::retrieveCaller): - (JSC::Interpreter::retrieveLastCaller): - * interpreter/Interpreter.h: - * interpreter/Register.h: - (JSC::Register::): - (JSC::Register::Register): - (JSC::Register::jsValue): - * jit/JIT.cpp: - (JSC::): - (JSC::JIT::privateCompileMainPass): - * jit/JIT.h: - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArith_op_mod): - * jit/JITCall.cpp: - (JSC::JIT::unlinkCall): - (JSC::JIT::compileOpCallInitializeCallFrame): - (JSC::JIT::compileOpCall): - * jit/JITCode.h: - (JSC::): - (JSC::JITCode::execute): - * jit/JITInlineMethods.h: - (JSC::JIT::emitGetVirtualRegister): - (JSC::JIT::getConstantOperand): - (JSC::JIT::emitPutJITStubArgFromVirtualRegister): - (JSC::JIT::emitInitRegister): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::patchGetByIdSelf): - (JSC::JIT::patchPutByIdReplace): - (JSC::JIT::privateCompileGetByIdSelf): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdSelfList): - (JSC::JIT::privateCompileGetByIdProtoList): - (JSC::JIT::privateCompileGetByIdChainList): - (JSC::JIT::privateCompileGetByIdChain): - (JSC::JIT::privateCompilePutByIdReplace): - * jit/JITStubs.cpp: - (JSC::JITStubs::tryCachePutByID): - (JSC::JITStubs::tryCacheGetByID): - (JSC::JITStubs::cti_op_convert_this): - (JSC::JITStubs::cti_op_add): - (JSC::JITStubs::cti_op_pre_inc): - (JSC::JITStubs::cti_op_loop_if_less): - (JSC::JITStubs::cti_op_loop_if_lesseq): - (JSC::JITStubs::cti_op_get_by_id_generic): - (JSC::JITStubs::cti_op_get_by_id): - (JSC::JITStubs::cti_op_get_by_id_second): - (JSC::JITStubs::cti_op_get_by_id_self_fail): - (JSC::JITStubs::cti_op_get_by_id_proto_list): - (JSC::JITStubs::cti_op_get_by_id_proto_list_full): - (JSC::JITStubs::cti_op_get_by_id_proto_fail): - (JSC::JITStubs::cti_op_get_by_id_array_fail): - (JSC::JITStubs::cti_op_get_by_id_string_fail): - (JSC::JITStubs::cti_op_instanceof): - (JSC::JITStubs::cti_op_del_by_id): - (JSC::JITStubs::cti_op_mul): - (JSC::JITStubs::cti_op_call_NotJSFunction): - (JSC::JITStubs::cti_op_resolve): - (JSC::JITStubs::cti_op_construct_NotJSConstruct): - (JSC::JITStubs::cti_op_get_by_val): - (JSC::JITStubs::cti_op_get_by_val_string): - (JSC::JITStubs::cti_op_get_by_val_byte_array): - (JSC::JITStubs::cti_op_resolve_func): - (JSC::JITStubs::cti_op_sub): - (JSC::JITStubs::cti_op_put_by_val): - (JSC::JITStubs::cti_op_put_by_val_array): - (JSC::JITStubs::cti_op_put_by_val_byte_array): - (JSC::JITStubs::cti_op_lesseq): - (JSC::JITStubs::cti_op_loop_if_true): - (JSC::JITStubs::cti_op_load_varargs): - (JSC::JITStubs::cti_op_negate): - (JSC::JITStubs::cti_op_resolve_base): - (JSC::JITStubs::cti_op_resolve_skip): - (JSC::JITStubs::cti_op_resolve_global): - (JSC::JITStubs::cti_op_div): - (JSC::JITStubs::cti_op_pre_dec): - (JSC::JITStubs::cti_op_jless): - (JSC::JITStubs::cti_op_not): - (JSC::JITStubs::cti_op_jtrue): - (JSC::JITStubs::cti_op_post_inc): - (JSC::JITStubs::cti_op_eq): - (JSC::JITStubs::cti_op_lshift): - (JSC::JITStubs::cti_op_bitand): - (JSC::JITStubs::cti_op_rshift): - (JSC::JITStubs::cti_op_bitnot): - (JSC::JITStubs::cti_op_resolve_with_base): - (JSC::JITStubs::cti_op_mod): - (JSC::JITStubs::cti_op_less): - (JSC::JITStubs::cti_op_neq): - (JSC::JITStubs::cti_op_post_dec): - (JSC::JITStubs::cti_op_urshift): - (JSC::JITStubs::cti_op_bitxor): - (JSC::JITStubs::cti_op_bitor): - (JSC::JITStubs::cti_op_call_eval): - (JSC::JITStubs::cti_op_throw): - (JSC::JITStubs::cti_op_next_pname): - (JSC::JITStubs::cti_op_typeof): - (JSC::JITStubs::cti_op_is_undefined): - (JSC::JITStubs::cti_op_is_boolean): - (JSC::JITStubs::cti_op_is_number): - (JSC::JITStubs::cti_op_is_string): - (JSC::JITStubs::cti_op_is_object): - (JSC::JITStubs::cti_op_is_function): - (JSC::JITStubs::cti_op_stricteq): - (JSC::JITStubs::cti_op_nstricteq): - (JSC::JITStubs::cti_op_to_jsnumber): - (JSC::JITStubs::cti_op_in): - (JSC::JITStubs::cti_op_switch_imm): - (JSC::JITStubs::cti_op_switch_char): - (JSC::JITStubs::cti_op_switch_string): - (JSC::JITStubs::cti_op_del_by_val): - (JSC::JITStubs::cti_op_new_error): - (JSC::JITStubs::cti_vm_throw): - * jit/JITStubs.h: - * jsc.cpp: - (functionPrint): - (functionDebug): - (functionGC): - (functionVersion): - (functionRun): - (functionLoad): - (functionSetSamplingFlag): - (functionClearSamplingFlag): - (functionReadline): - (functionQuit): - * parser/Nodes.cpp: - (JSC::processClauseList): - * profiler/ProfileGenerator.cpp: - (JSC::ProfileGenerator::addParentForConsoleStart): - * profiler/Profiler.cpp: - (JSC::Profiler::willExecute): - (JSC::Profiler::didExecute): - (JSC::Profiler::createCallIdentifier): - * profiler/Profiler.h: - * runtime/ArgList.cpp: - (JSC::MarkedArgumentBuffer::slowAppend): - * runtime/ArgList.h: - (JSC::MarkedArgumentBuffer::at): - (JSC::MarkedArgumentBuffer::append): - (JSC::ArgList::ArgList): - (JSC::ArgList::at): - * runtime/Arguments.cpp: - (JSC::Arguments::put): - * runtime/Arguments.h: - (JSC::Arguments::createStructure): - (JSC::asArguments): - * runtime/ArrayConstructor.cpp: - (JSC::callArrayConstructor): - * runtime/ArrayPrototype.cpp: - (JSC::getProperty): - (JSC::putProperty): - (JSC::arrayProtoFuncToString): - (JSC::arrayProtoFuncToLocaleString): - (JSC::arrayProtoFuncJoin): - (JSC::arrayProtoFuncConcat): - (JSC::arrayProtoFuncPop): - (JSC::arrayProtoFuncPush): - (JSC::arrayProtoFuncReverse): - (JSC::arrayProtoFuncShift): - (JSC::arrayProtoFuncSlice): - (JSC::arrayProtoFuncSort): - (JSC::arrayProtoFuncSplice): - (JSC::arrayProtoFuncUnShift): - (JSC::arrayProtoFuncFilter): - (JSC::arrayProtoFuncMap): - (JSC::arrayProtoFuncEvery): - (JSC::arrayProtoFuncForEach): - (JSC::arrayProtoFuncSome): - (JSC::arrayProtoFuncReduce): - (JSC::arrayProtoFuncReduceRight): - (JSC::arrayProtoFuncIndexOf): - (JSC::arrayProtoFuncLastIndexOf): - * runtime/BooleanConstructor.cpp: - (JSC::callBooleanConstructor): - (JSC::constructBooleanFromImmediateBoolean): - * runtime/BooleanConstructor.h: - * runtime/BooleanObject.h: - (JSC::asBooleanObject): - * runtime/BooleanPrototype.cpp: - (JSC::booleanProtoFuncToString): - (JSC::booleanProtoFuncValueOf): - * runtime/CallData.cpp: - (JSC::call): - * runtime/CallData.h: - * runtime/Collector.cpp: - (JSC::Heap::protect): - (JSC::Heap::unprotect): - (JSC::Heap::heap): - * runtime/Collector.h: - * runtime/Completion.cpp: - (JSC::evaluate): - * runtime/Completion.h: - (JSC::Completion::Completion): - (JSC::Completion::value): - (JSC::Completion::setValue): - * runtime/ConstructData.cpp: - (JSC::construct): - * runtime/ConstructData.h: - * runtime/DateConstructor.cpp: - (JSC::constructDate): - (JSC::callDate): - (JSC::dateParse): - (JSC::dateNow): - (JSC::dateUTC): - * runtime/DateInstance.h: - (JSC::asDateInstance): - * runtime/DatePrototype.cpp: - (JSC::dateProtoFuncToString): - (JSC::dateProtoFuncToUTCString): - (JSC::dateProtoFuncToDateString): - (JSC::dateProtoFuncToTimeString): - (JSC::dateProtoFuncToLocaleString): - (JSC::dateProtoFuncToLocaleDateString): - (JSC::dateProtoFuncToLocaleTimeString): - (JSC::dateProtoFuncGetTime): - (JSC::dateProtoFuncGetFullYear): - (JSC::dateProtoFuncGetUTCFullYear): - (JSC::dateProtoFuncToGMTString): - (JSC::dateProtoFuncGetMonth): - (JSC::dateProtoFuncGetUTCMonth): - (JSC::dateProtoFuncGetDate): - (JSC::dateProtoFuncGetUTCDate): - (JSC::dateProtoFuncGetDay): - (JSC::dateProtoFuncGetUTCDay): - (JSC::dateProtoFuncGetHours): - (JSC::dateProtoFuncGetUTCHours): - (JSC::dateProtoFuncGetMinutes): - (JSC::dateProtoFuncGetUTCMinutes): - (JSC::dateProtoFuncGetSeconds): - (JSC::dateProtoFuncGetUTCSeconds): - (JSC::dateProtoFuncGetMilliSeconds): - (JSC::dateProtoFuncGetUTCMilliseconds): - (JSC::dateProtoFuncGetTimezoneOffset): - (JSC::dateProtoFuncSetTime): - (JSC::setNewValueFromTimeArgs): - (JSC::setNewValueFromDateArgs): - (JSC::dateProtoFuncSetMilliSeconds): - (JSC::dateProtoFuncSetUTCMilliseconds): - (JSC::dateProtoFuncSetSeconds): - (JSC::dateProtoFuncSetUTCSeconds): - (JSC::dateProtoFuncSetMinutes): - (JSC::dateProtoFuncSetUTCMinutes): - (JSC::dateProtoFuncSetHours): - (JSC::dateProtoFuncSetUTCHours): - (JSC::dateProtoFuncSetDate): - (JSC::dateProtoFuncSetUTCDate): - (JSC::dateProtoFuncSetMonth): - (JSC::dateProtoFuncSetUTCMonth): - (JSC::dateProtoFuncSetFullYear): - (JSC::dateProtoFuncSetUTCFullYear): - (JSC::dateProtoFuncSetYear): - (JSC::dateProtoFuncGetYear): - * runtime/DatePrototype.h: - (JSC::DatePrototype::createStructure): - * runtime/ErrorConstructor.cpp: - (JSC::callErrorConstructor): - * runtime/ErrorPrototype.cpp: - (JSC::errorProtoFuncToString): - * runtime/ExceptionHelpers.cpp: - (JSC::createInterruptedExecutionException): - (JSC::createError): - (JSC::createStackOverflowError): - (JSC::createUndefinedVariableError): - (JSC::createErrorMessage): - (JSC::createInvalidParamError): - (JSC::createNotAConstructorError): - (JSC::createNotAFunctionError): - * runtime/ExceptionHelpers.h: - * runtime/FunctionConstructor.cpp: - (JSC::callFunctionConstructor): - * runtime/FunctionPrototype.cpp: - (JSC::callFunctionPrototype): - (JSC::functionProtoFuncToString): - (JSC::functionProtoFuncApply): - (JSC::functionProtoFuncCall): - * runtime/FunctionPrototype.h: - (JSC::FunctionPrototype::createStructure): - * runtime/GetterSetter.cpp: - (JSC::GetterSetter::toPrimitive): - (JSC::GetterSetter::getPrimitiveNumber): - * runtime/GetterSetter.h: - (JSC::asGetterSetter): - * runtime/InternalFunction.cpp: - (JSC::InternalFunction::displayName): - * runtime/InternalFunction.h: - (JSC::InternalFunction::createStructure): - (JSC::asInternalFunction): - * runtime/JSActivation.cpp: - (JSC::JSActivation::getOwnPropertySlot): - (JSC::JSActivation::put): - (JSC::JSActivation::putWithAttributes): - (JSC::JSActivation::argumentsGetter): - * runtime/JSActivation.h: - (JSC::JSActivation::createStructure): - (JSC::asActivation): - * runtime/JSArray.cpp: - (JSC::storageSize): - (JSC::JSArray::JSArray): - (JSC::JSArray::getOwnPropertySlot): - (JSC::JSArray::put): - (JSC::JSArray::putSlowCase): - (JSC::JSArray::deleteProperty): - (JSC::JSArray::setLength): - (JSC::JSArray::pop): - (JSC::JSArray::push): - (JSC::JSArray::mark): - (JSC::compareNumbersForQSort): - (JSC::JSArray::sortNumeric): - (JSC::JSArray::sort): - (JSC::JSArray::compactForSorting): - (JSC::JSArray::checkConsistency): - (JSC::constructArray): - * runtime/JSArray.h: - (JSC::JSArray::getIndex): - (JSC::JSArray::setIndex): - (JSC::JSArray::createStructure): - (JSC::asArray): - (JSC::isJSArray): - * runtime/JSByteArray.cpp: - (JSC::JSByteArray::createStructure): - (JSC::JSByteArray::put): - * runtime/JSByteArray.h: - (JSC::JSByteArray::getIndex): - (JSC::JSByteArray::setIndex): - (JSC::asByteArray): - (JSC::isJSByteArray): - * runtime/JSCell.cpp: - (JSC::JSCell::put): - (JSC::JSCell::getJSNumber): - * runtime/JSCell.h: - (JSC::asCell): - (JSC::JSValue::asCell): - (JSC::JSValue::isString): - (JSC::JSValue::isGetterSetter): - (JSC::JSValue::isObject): - (JSC::JSValue::getString): - (JSC::JSValue::getObject): - (JSC::JSValue::getCallData): - (JSC::JSValue::getConstructData): - (JSC::JSValue::getUInt32): - (JSC::JSValue::getTruncatedInt32): - (JSC::JSValue::getTruncatedUInt32): - (JSC::JSValue::mark): - (JSC::JSValue::marked): - (JSC::JSValue::toPrimitive): - (JSC::JSValue::getPrimitiveNumber): - (JSC::JSValue::toBoolean): - (JSC::JSValue::toNumber): - (JSC::JSValue::toString): - (JSC::JSValue::toObject): - (JSC::JSValue::toThisObject): - (JSC::JSValue::needsThisConversion): - (JSC::JSValue::toThisString): - (JSC::JSValue::getJSNumber): - * runtime/JSFunction.cpp: - (JSC::JSFunction::call): - (JSC::JSFunction::argumentsGetter): - (JSC::JSFunction::callerGetter): - (JSC::JSFunction::lengthGetter): - (JSC::JSFunction::getOwnPropertySlot): - (JSC::JSFunction::put): - (JSC::JSFunction::construct): - * runtime/JSFunction.h: - (JSC::JSFunction::createStructure): - (JSC::asFunction): - * runtime/JSGlobalData.h: - * runtime/JSGlobalObject.cpp: - (JSC::markIfNeeded): - (JSC::JSGlobalObject::put): - (JSC::JSGlobalObject::putWithAttributes): - (JSC::JSGlobalObject::reset): - (JSC::JSGlobalObject::resetPrototype): - * runtime/JSGlobalObject.h: - (JSC::JSGlobalObject::createStructure): - (JSC::JSGlobalObject::GlobalPropertyInfo::GlobalPropertyInfo): - (JSC::asGlobalObject): - (JSC::Structure::prototypeForLookup): - (JSC::Structure::prototypeChain): - (JSC::Structure::isValid): - * runtime/JSGlobalObjectFunctions.cpp: - (JSC::encode): - (JSC::decode): - (JSC::globalFuncEval): - (JSC::globalFuncParseInt): - (JSC::globalFuncParseFloat): - (JSC::globalFuncIsNaN): - (JSC::globalFuncIsFinite): - (JSC::globalFuncDecodeURI): - (JSC::globalFuncDecodeURIComponent): - (JSC::globalFuncEncodeURI): - (JSC::globalFuncEncodeURIComponent): - (JSC::globalFuncEscape): - (JSC::globalFuncUnescape): - (JSC::globalFuncJSCPrint): - * runtime/JSGlobalObjectFunctions.h: - * runtime/JSImmediate.cpp: - (JSC::JSImmediate::toThisObject): - (JSC::JSImmediate::toObject): - (JSC::JSImmediate::prototype): - (JSC::JSImmediate::toString): - * runtime/JSImmediate.h: - (JSC::JSImmediate::isImmediate): - (JSC::JSImmediate::isNumber): - (JSC::JSImmediate::isIntegerNumber): - (JSC::JSImmediate::isDoubleNumber): - (JSC::JSImmediate::isPositiveIntegerNumber): - (JSC::JSImmediate::isBoolean): - (JSC::JSImmediate::isUndefinedOrNull): - (JSC::JSImmediate::isEitherImmediate): - (JSC::JSImmediate::areBothImmediate): - (JSC::JSImmediate::areBothImmediateIntegerNumbers): - (JSC::JSImmediate::makeValue): - (JSC::JSImmediate::makeInt): - (JSC::JSImmediate::makeDouble): - (JSC::JSImmediate::makeBool): - (JSC::JSImmediate::makeUndefined): - (JSC::JSImmediate::makeNull): - (JSC::JSImmediate::doubleValue): - (JSC::JSImmediate::intValue): - (JSC::JSImmediate::uintValue): - (JSC::JSImmediate::boolValue): - (JSC::JSImmediate::rawValue): - (JSC::JSImmediate::trueImmediate): - (JSC::JSImmediate::falseImmediate): - (JSC::JSImmediate::undefinedImmediate): - (JSC::JSImmediate::nullImmediate): - (JSC::JSImmediate::zeroImmediate): - (JSC::JSImmediate::oneImmediate): - (JSC::JSImmediate::impossibleValue): - (JSC::JSImmediate::toBoolean): - (JSC::JSImmediate::getTruncatedUInt32): - (JSC::JSImmediate::fromNumberOutsideIntegerRange): - (JSC::JSImmediate::from): - (JSC::JSImmediate::getTruncatedInt32): - (JSC::JSImmediate::toDouble): - (JSC::JSImmediate::getUInt32): - (JSC::JSValue::JSValue): - (JSC::JSValue::isUndefinedOrNull): - (JSC::JSValue::isBoolean): - (JSC::JSValue::getBoolean): - (JSC::JSValue::toInt32): - (JSC::JSValue::toUInt32): - (JSC::JSValue::isCell): - (JSC::JSValue::isInt32Fast): - (JSC::JSValue::getInt32Fast): - (JSC::JSValue::isUInt32Fast): - (JSC::JSValue::getUInt32Fast): - (JSC::JSValue::makeInt32Fast): - (JSC::JSValue::areBothInt32Fast): - (JSC::JSFastMath::canDoFastBitwiseOperations): - (JSC::JSFastMath::equal): - (JSC::JSFastMath::notEqual): - (JSC::JSFastMath::andImmediateNumbers): - (JSC::JSFastMath::xorImmediateNumbers): - (JSC::JSFastMath::orImmediateNumbers): - (JSC::JSFastMath::canDoFastRshift): - (JSC::JSFastMath::canDoFastUrshift): - (JSC::JSFastMath::rightShiftImmediateNumbers): - (JSC::JSFastMath::canDoFastAdditiveOperations): - (JSC::JSFastMath::addImmediateNumbers): - (JSC::JSFastMath::subImmediateNumbers): - (JSC::JSFastMath::incImmediateNumber): - (JSC::JSFastMath::decImmediateNumber): - * runtime/JSNotAnObject.cpp: - (JSC::JSNotAnObject::toPrimitive): - (JSC::JSNotAnObject::getPrimitiveNumber): - (JSC::JSNotAnObject::put): - * runtime/JSNotAnObject.h: - (JSC::JSNotAnObject::createStructure): - * runtime/JSNumberCell.cpp: - (JSC::JSNumberCell::toPrimitive): - (JSC::JSNumberCell::getPrimitiveNumber): - (JSC::JSNumberCell::getJSNumber): - (JSC::jsNumberCell): - * runtime/JSNumberCell.h: - (JSC::JSNumberCell::createStructure): - (JSC::isNumberCell): - (JSC::asNumberCell): - (JSC::jsNumber): - (JSC::JSValue::isDoubleNumber): - (JSC::JSValue::getDoubleNumber): - (JSC::JSValue::isNumber): - (JSC::JSValue::uncheckedGetNumber): - (JSC::jsNaN): - (JSC::JSValue::toJSNumber): - (JSC::JSValue::getNumber): - (JSC::JSValue::numberToInt32): - (JSC::JSValue::numberToUInt32): - * runtime/JSObject.cpp: - (JSC::JSObject::mark): - (JSC::JSObject::put): - (JSC::JSObject::putWithAttributes): - (JSC::callDefaultValueFunction): - (JSC::JSObject::getPrimitiveNumber): - (JSC::JSObject::defaultValue): - (JSC::JSObject::defineGetter): - (JSC::JSObject::defineSetter): - (JSC::JSObject::lookupGetter): - (JSC::JSObject::lookupSetter): - (JSC::JSObject::hasInstance): - (JSC::JSObject::toNumber): - (JSC::JSObject::toString): - (JSC::JSObject::fillGetterPropertySlot): - * runtime/JSObject.h: - (JSC::JSObject::getDirect): - (JSC::JSObject::getDirectLocation): - (JSC::JSObject::offsetForLocation): - (JSC::JSObject::locationForOffset): - (JSC::JSObject::getDirectOffset): - (JSC::JSObject::putDirectOffset): - (JSC::JSObject::createStructure): - (JSC::asObject): - (JSC::JSObject::prototype): - (JSC::JSObject::setPrototype): - (JSC::JSValue::isObject): - (JSC::JSObject::inlineGetOwnPropertySlot): - (JSC::JSObject::getOwnPropertySlotForWrite): - (JSC::JSObject::getPropertySlot): - (JSC::JSObject::get): - (JSC::JSObject::putDirect): - (JSC::JSObject::putDirectWithoutTransition): - (JSC::JSObject::toPrimitive): - (JSC::JSValue::get): - (JSC::JSValue::put): - (JSC::JSObject::allocatePropertyStorageInline): - * runtime/JSPropertyNameIterator.cpp: - (JSC::JSPropertyNameIterator::toPrimitive): - (JSC::JSPropertyNameIterator::getPrimitiveNumber): - * runtime/JSPropertyNameIterator.h: - (JSC::JSPropertyNameIterator::create): - (JSC::JSPropertyNameIterator::next): - * runtime/JSStaticScopeObject.cpp: - (JSC::JSStaticScopeObject::put): - (JSC::JSStaticScopeObject::putWithAttributes): - * runtime/JSStaticScopeObject.h: - (JSC::JSStaticScopeObject::JSStaticScopeObject): - (JSC::JSStaticScopeObject::createStructure): - * runtime/JSString.cpp: - (JSC::JSString::toPrimitive): - (JSC::JSString::getPrimitiveNumber): - (JSC::JSString::getOwnPropertySlot): - * runtime/JSString.h: - (JSC::JSString::createStructure): - (JSC::asString): - (JSC::isJSString): - (JSC::JSValue::toThisJSString): - * runtime/JSValue.cpp: - (JSC::JSValue::toInteger): - (JSC::JSValue::toIntegerPreserveNaN): - * runtime/JSValue.h: - (JSC::JSValue::makeImmediate): - (JSC::JSValue::asValue): - (JSC::noValue): - (JSC::jsImpossibleValue): - (JSC::jsNull): - (JSC::jsUndefined): - (JSC::jsBoolean): - (JSC::operator==): - (JSC::operator!=): - (JSC::JSValue::encode): - (JSC::JSValue::decode): - (JSC::JSValue::JSValue): - (JSC::JSValue::operator bool): - (JSC::JSValue::operator==): - (JSC::JSValue::operator!=): - (JSC::JSValue::isUndefined): - (JSC::JSValue::isNull): - * runtime/JSVariableObject.h: - (JSC::JSVariableObject::symbolTablePut): - (JSC::JSVariableObject::symbolTablePutWithAttributes): - * runtime/JSWrapperObject.h: - (JSC::JSWrapperObject::internalValue): - (JSC::JSWrapperObject::setInternalValue): - * runtime/Lookup.cpp: - (JSC::setUpStaticFunctionSlot): - * runtime/Lookup.h: - (JSC::lookupPut): - * runtime/MathObject.cpp: - (JSC::mathProtoFuncAbs): - (JSC::mathProtoFuncACos): - (JSC::mathProtoFuncASin): - (JSC::mathProtoFuncATan): - (JSC::mathProtoFuncATan2): - (JSC::mathProtoFuncCeil): - (JSC::mathProtoFuncCos): - (JSC::mathProtoFuncExp): - (JSC::mathProtoFuncFloor): - (JSC::mathProtoFuncLog): - (JSC::mathProtoFuncMax): - (JSC::mathProtoFuncMin): - (JSC::mathProtoFuncPow): - (JSC::mathProtoFuncRandom): - (JSC::mathProtoFuncRound): - (JSC::mathProtoFuncSin): - (JSC::mathProtoFuncSqrt): - (JSC::mathProtoFuncTan): - * runtime/MathObject.h: - (JSC::MathObject::createStructure): - * runtime/NativeErrorConstructor.cpp: - (JSC::callNativeErrorConstructor): - * runtime/NumberConstructor.cpp: - (JSC::numberConstructorNaNValue): - (JSC::numberConstructorNegInfinity): - (JSC::numberConstructorPosInfinity): - (JSC::numberConstructorMaxValue): - (JSC::numberConstructorMinValue): - (JSC::callNumberConstructor): - * runtime/NumberConstructor.h: - (JSC::NumberConstructor::createStructure): - * runtime/NumberObject.cpp: - (JSC::NumberObject::getJSNumber): - (JSC::constructNumber): - * runtime/NumberObject.h: - * runtime/NumberPrototype.cpp: - (JSC::numberProtoFuncToString): - (JSC::numberProtoFuncToLocaleString): - (JSC::numberProtoFuncValueOf): - (JSC::numberProtoFuncToFixed): - (JSC::numberProtoFuncToExponential): - (JSC::numberProtoFuncToPrecision): - * runtime/ObjectConstructor.cpp: - (JSC::constructObject): - (JSC::callObjectConstructor): - * runtime/ObjectPrototype.cpp: - (JSC::objectProtoFuncValueOf): - (JSC::objectProtoFuncHasOwnProperty): - (JSC::objectProtoFuncIsPrototypeOf): - (JSC::objectProtoFuncDefineGetter): - (JSC::objectProtoFuncDefineSetter): - (JSC::objectProtoFuncLookupGetter): - (JSC::objectProtoFuncLookupSetter): - (JSC::objectProtoFuncPropertyIsEnumerable): - (JSC::objectProtoFuncToLocaleString): - (JSC::objectProtoFuncToString): - * runtime/ObjectPrototype.h: - * runtime/Operations.cpp: - (JSC::JSValue::equalSlowCase): - (JSC::JSValue::strictEqualSlowCase): - (JSC::throwOutOfMemoryError): - (JSC::jsAddSlowCase): - (JSC::jsTypeStringForValue): - (JSC::jsIsObjectType): - (JSC::jsIsFunctionType): - * runtime/Operations.h: - (JSC::JSValue::equal): - (JSC::JSValue::equalSlowCaseInline): - (JSC::JSValue::strictEqual): - (JSC::JSValue::strictEqualSlowCaseInline): - (JSC::jsLess): - (JSC::jsLessEq): - (JSC::jsAdd): - (JSC::countPrototypeChainEntriesAndCheckForProxies): - (JSC::resolveBase): - * runtime/PropertySlot.cpp: - (JSC::PropertySlot::functionGetter): - * runtime/PropertySlot.h: - (JSC::PropertySlot::PropertySlot): - (JSC::PropertySlot::getValue): - (JSC::PropertySlot::putValue): - (JSC::PropertySlot::setValueSlot): - (JSC::PropertySlot::setValue): - (JSC::PropertySlot::setCustom): - (JSC::PropertySlot::setCustomIndex): - (JSC::PropertySlot::slotBase): - (JSC::PropertySlot::setBase): - (JSC::PropertySlot::): - * runtime/Protect.h: - (JSC::gcProtect): - (JSC::gcUnprotect): - (JSC::ProtectedPtr::operator JSValue): - (JSC::ProtectedJSValue::ProtectedJSValue): - (JSC::ProtectedJSValue::get): - (JSC::ProtectedJSValue::operator JSValue): - (JSC::ProtectedJSValue::operator->): - (JSC::ProtectedJSValue::~ProtectedJSValue): - (JSC::ProtectedJSValue::operator=): - (JSC::operator==): - (JSC::operator!=): - * runtime/RegExpConstructor.cpp: - (JSC::RegExpConstructor::getBackref): - (JSC::RegExpConstructor::getLastParen): - (JSC::RegExpConstructor::getLeftContext): - (JSC::RegExpConstructor::getRightContext): - (JSC::regExpConstructorDollar1): - (JSC::regExpConstructorDollar2): - (JSC::regExpConstructorDollar3): - (JSC::regExpConstructorDollar4): - (JSC::regExpConstructorDollar5): - (JSC::regExpConstructorDollar6): - (JSC::regExpConstructorDollar7): - (JSC::regExpConstructorDollar8): - (JSC::regExpConstructorDollar9): - (JSC::regExpConstructorInput): - (JSC::regExpConstructorMultiline): - (JSC::regExpConstructorLastMatch): - (JSC::regExpConstructorLastParen): - (JSC::regExpConstructorLeftContext): - (JSC::regExpConstructorRightContext): - (JSC::RegExpConstructor::put): - (JSC::setRegExpConstructorInput): - (JSC::setRegExpConstructorMultiline): - (JSC::constructRegExp): - (JSC::callRegExpConstructor): - * runtime/RegExpConstructor.h: - (JSC::RegExpConstructor::createStructure): - (JSC::asRegExpConstructor): - * runtime/RegExpMatchesArray.h: - (JSC::RegExpMatchesArray::put): - * runtime/RegExpObject.cpp: - (JSC::regExpObjectGlobal): - (JSC::regExpObjectIgnoreCase): - (JSC::regExpObjectMultiline): - (JSC::regExpObjectSource): - (JSC::regExpObjectLastIndex): - (JSC::RegExpObject::put): - (JSC::setRegExpObjectLastIndex): - (JSC::RegExpObject::test): - (JSC::RegExpObject::exec): - (JSC::callRegExpObject): - * runtime/RegExpObject.h: - (JSC::RegExpObject::createStructure): - (JSC::asRegExpObject): - * runtime/RegExpPrototype.cpp: - (JSC::regExpProtoFuncTest): - (JSC::regExpProtoFuncExec): - (JSC::regExpProtoFuncCompile): - (JSC::regExpProtoFuncToString): - * runtime/StringConstructor.cpp: - (JSC::stringFromCharCodeSlowCase): - (JSC::stringFromCharCode): - (JSC::callStringConstructor): - * runtime/StringObject.cpp: - (JSC::StringObject::put): - * runtime/StringObject.h: - (JSC::StringObject::createStructure): - (JSC::asStringObject): - * runtime/StringObjectThatMasqueradesAsUndefined.h: - (JSC::StringObjectThatMasqueradesAsUndefined::createStructure): - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncReplace): - (JSC::stringProtoFuncToString): - (JSC::stringProtoFuncCharAt): - (JSC::stringProtoFuncCharCodeAt): - (JSC::stringProtoFuncConcat): - (JSC::stringProtoFuncIndexOf): - (JSC::stringProtoFuncLastIndexOf): - (JSC::stringProtoFuncMatch): - (JSC::stringProtoFuncSearch): - (JSC::stringProtoFuncSlice): - (JSC::stringProtoFuncSplit): - (JSC::stringProtoFuncSubstr): - (JSC::stringProtoFuncSubstring): - (JSC::stringProtoFuncToLowerCase): - (JSC::stringProtoFuncToUpperCase): - (JSC::stringProtoFuncLocaleCompare): - (JSC::stringProtoFuncBig): - (JSC::stringProtoFuncSmall): - (JSC::stringProtoFuncBlink): - (JSC::stringProtoFuncBold): - (JSC::stringProtoFuncFixed): - (JSC::stringProtoFuncItalics): - (JSC::stringProtoFuncStrike): - (JSC::stringProtoFuncSub): - (JSC::stringProtoFuncSup): - (JSC::stringProtoFuncFontcolor): - (JSC::stringProtoFuncFontsize): - (JSC::stringProtoFuncAnchor): - (JSC::stringProtoFuncLink): - * runtime/Structure.cpp: - (JSC::Structure::Structure): - (JSC::Structure::changePrototypeTransition): - * runtime/Structure.h: - (JSC::Structure::create): - (JSC::Structure::setPrototypeWithoutTransition): - (JSC::Structure::storedPrototype): - -2009-05-01 Geoffrey Garen - - Reviewed by Sam "That doesn't look like what I thought it looks like" Weinig. - - Beefed up the JSValuePtr class and removed some non-JSValuePtr dependencies - on JSImmediate, in prepapration for making JSImmediate an implementation - detail of JSValuePtr. - - SunSpider reports no change. - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArith_op_mod): - * runtime/JSGlobalObjectFunctions.cpp: - (JSC::globalFuncParseInt): Updated for interface changes. - - * runtime/JSImmediate.h: - (JSC::JSValuePtr::JSValuePtr): - * runtime/JSValue.h: - (JSC::JSValuePtr::): - (JSC::jsImpossibleValue): - (JSC::jsNull): - (JSC::jsUndefined): - (JSC::jsBoolean): - (JSC::JSValuePtr::encode): - (JSC::JSValuePtr::decode): - (JSC::JSValuePtr::JSValuePtr): - (JSC::JSValuePtr::operator bool): - (JSC::JSValuePtr::operator==): - (JSC::JSValuePtr::operator!=): - (JSC::JSValuePtr::isUndefined): - (JSC::JSValuePtr::isNull): Changed jsImpossibleValue(), jsNull(), - jsUndefined(), and jsBoolean() to operate in terms of JSValuePtr instead - of JSImmediate. - - * wtf/StdLibExtras.h: - (WTF::bitwise_cast): Fixed up for clarity. - -2009-04-30 Gavin Barraclough - - Reviewed by Geoff Garen. - - Bug fix for rdar:/6845379. If a case-insensitive regex contains - a character class containing a range with an upper bound of \uFFFF - the parser will infinite-loop whist adding other-case characters - for characters in the range that do have another case. - - * yarr/RegexCompiler.cpp: - (JSC::Yarr::CharacterClassConstructor::putRange): - -2009-04-30 Gavin Barraclough - - Reviewed by Oliver Hunt. - - OPCODE_SAMPLING without CODEBLOCK_SAMPLING is currently broken, - since SamplingTool::Sample::isNull() checks the m_codeBlock - member (which is always null without CODEBLOCK_SAMPLING). - - Restructure the checks so make this work again. - - * bytecode/SamplingTool.cpp: - (JSC::SamplingTool::doRun): - * bytecode/SamplingTool.h: - (JSC::SamplingTool::Sample::isNull): - -2009-04-30 Maciej Stachowiak - - Reviewed by Gavin Barraclough. - - - Concatenate final three strings in simple replace case at one go - - ~0.2% SunSpider speedup - - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncReplace): Use new replaceRange helper instead of - taking substrings and concatenating three strings. - * runtime/UString.cpp: - (JSC::UString::replaceRange): New helper function. - * runtime/UString.h: - -2009-04-30 Geoffrey Garen - - Rubber Stamped by Gavin Barraclough. - - Changed JSValueEncodedAsPtr* => EncodedJSValuePtr to support a non-pointer - encoding for JSValuePtrs. - - * API/APICast.h: - (toJS): - * bytecompiler/BytecodeGenerator.h: - (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue): - (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue): - * interpreter/Register.h: - (JSC::Register::): - * jit/JIT.cpp: - (JSC::): - * jit/JIT.h: - * jit/JITCode.h: - (JSC::): - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_add): - (JSC::JITStubs::cti_op_pre_inc): - (JSC::JITStubs::cti_op_get_by_id_generic): - (JSC::JITStubs::cti_op_get_by_id): - (JSC::JITStubs::cti_op_get_by_id_second): - (JSC::JITStubs::cti_op_get_by_id_self_fail): - (JSC::JITStubs::cti_op_get_by_id_proto_list): - (JSC::JITStubs::cti_op_get_by_id_proto_list_full): - (JSC::JITStubs::cti_op_get_by_id_proto_fail): - (JSC::JITStubs::cti_op_get_by_id_array_fail): - (JSC::JITStubs::cti_op_get_by_id_string_fail): - (JSC::JITStubs::cti_op_instanceof): - (JSC::JITStubs::cti_op_del_by_id): - (JSC::JITStubs::cti_op_mul): - (JSC::JITStubs::cti_op_call_NotJSFunction): - (JSC::JITStubs::cti_op_resolve): - (JSC::JITStubs::cti_op_construct_NotJSConstruct): - (JSC::JITStubs::cti_op_get_by_val): - (JSC::JITStubs::cti_op_get_by_val_string): - (JSC::JITStubs::cti_op_get_by_val_byte_array): - (JSC::JITStubs::cti_op_sub): - (JSC::JITStubs::cti_op_lesseq): - (JSC::JITStubs::cti_op_negate): - (JSC::JITStubs::cti_op_resolve_base): - (JSC::JITStubs::cti_op_resolve_skip): - (JSC::JITStubs::cti_op_resolve_global): - (JSC::JITStubs::cti_op_div): - (JSC::JITStubs::cti_op_pre_dec): - (JSC::JITStubs::cti_op_not): - (JSC::JITStubs::cti_op_eq): - (JSC::JITStubs::cti_op_lshift): - (JSC::JITStubs::cti_op_bitand): - (JSC::JITStubs::cti_op_rshift): - (JSC::JITStubs::cti_op_bitnot): - (JSC::JITStubs::cti_op_mod): - (JSC::JITStubs::cti_op_less): - (JSC::JITStubs::cti_op_neq): - (JSC::JITStubs::cti_op_urshift): - (JSC::JITStubs::cti_op_bitxor): - (JSC::JITStubs::cti_op_bitor): - (JSC::JITStubs::cti_op_call_eval): - (JSC::JITStubs::cti_op_throw): - (JSC::JITStubs::cti_op_next_pname): - (JSC::JITStubs::cti_op_typeof): - (JSC::JITStubs::cti_op_is_undefined): - (JSC::JITStubs::cti_op_is_boolean): - (JSC::JITStubs::cti_op_is_number): - (JSC::JITStubs::cti_op_is_string): - (JSC::JITStubs::cti_op_is_object): - (JSC::JITStubs::cti_op_is_function): - (JSC::JITStubs::cti_op_stricteq): - (JSC::JITStubs::cti_op_nstricteq): - (JSC::JITStubs::cti_op_to_jsnumber): - (JSC::JITStubs::cti_op_in): - (JSC::JITStubs::cti_op_del_by_val): - (JSC::JITStubs::cti_vm_throw): - * jit/JITStubs.h: - * runtime/JSValue.h: - (JSC::JSValuePtr::encode): - (JSC::JSValuePtr::decode): - -2009-04-30 Gavin Barraclough - - Reviewed by Oliver "Abandon Ship!" Hunt. - - Fix a leak in Yarr. - - All Disjunctions should be recorded in RegexPattern::m_disjunctions, - so that they can be freed at the end of compilation - copyDisjunction - is failing to do so. - - * yarr/RegexCompiler.cpp: - (JSC::Yarr::RegexPatternConstructor::copyDisjunction): - -2009-04-30 Oliver Hunt - - Reviewed by Gavin Barraclough. - - Add function to CallFrame for dumping the current JS caller - - Added debug only method CallFrame::dumpCaller() that provide the call location - of the deepest currently executing JS function. - - * interpreter/CallFrame.cpp: - (JSC::CallFrame::dumpCaller): - * interpreter/CallFrame.h: - -2009-04-30 Maciej Stachowiak - - Reviewed by Geoff Garen. - - - make BaseStrings have themselves as a base, instead of nothing, to remove common branches - - ~0.7% SunSpider speedup - - * runtime/UString.h: - (JSC::UString::Rep::Rep): For the constructor without a base, set self as base instead of null. - (JSC::UString::Rep::baseString): Just read m_baseString - no more branching. - -2009-04-30 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Two quick improvements to SamplingFlags mechanism. - - SamplingFlags::ScopedFlag class to provide support for automagically - clearing a flag as it goes out of scope, and add a little more detail - to the output generated by the tool. - - * bytecode/SamplingTool.cpp: - (JSC::SamplingFlags::stop): - * bytecode/SamplingTool.h: - (JSC::SamplingFlags::ScopedFlag::ScopedFlag): - (JSC::SamplingFlags::ScopedFlag::~ScopedFlag): - -2009-04-30 Adam Roben - - Restore build event steps that were truncated in r43082 - - Rubber-stamped by Steve Falkenburg. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: - * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: - * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: - Re-copied the command lines for the build events from the pre-r43082 - .vcproj files. - - * JavaScriptCore.vcproj/jsc/jsc.vcproj: Removed an unnecessary - attribute. - -2009-04-30 Adam Roben - - Move settings from .vcproj files to .vsprops files within the - JavaScriptCore directory - - Moving the settings to a .vsprops file means that we will only have to - change a single setting to affect all configurations, instead of one - setting per configuration. - - Reviewed by Steve Falkenburg. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.vcproj/WTF/WTF.vcproj: - * JavaScriptCore.vcproj/jsc/jsc.vcproj: - * JavaScriptCore.vcproj/testapi/testapi.vcproj: - Moved settings from these files to the new .vsprops files. Note that - testapi.vcproj had a lot of overrides of default settings that were - the same as the defaults, which I've removed. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: Added. - * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops: Added. - * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Added. - * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: Added. - -2009-04-30 Dimitri Glazkov - - Reviewed by Timothy Hatcher. - - https://bugs.webkit.org/show_bug.cgi?id=25470 - Extend the cover of ENABLE_JAVASCRIPT_DEBUGGER to profiler. - - * Configurations/FeatureDefines.xcconfig: Added ENABLE_JAVASCRIPT_DEBUGGER define. - -2009-04-30 Maciej Stachowiak - - Reviewed by Alexey Proskuryakov. - - - speed up string concatenation by reorganizing some simple cases - - 0.7% SunSpider speedup - - * runtime/UString.cpp: - (JSC::concatenate): Put fast case for appending a single character - before the empty string special cases; streamline code a bit to - delay computing values that are not needed in the fast path. - -2009-04-30 Gavin Barraclough - - Reviewed by Maciej Stachowiak. - - Add SamplingFlags mechanism. - - This mechanism allows fine-grained JSC and JavaScript program aware - performance measurement. The mechanism provides a set of 32 flags, - numbered #1..#32. Flag #16 is initially set, and all other flags - are cleared. Flags may be set and cleared from within - - Enable by setting ENABLE_SAMPLING_FLAGS to 1 in wtf/Platform.h. - Disabled by default, no performance impact. Flags may be modified - by calling SamplingFlags::setFlag() and SamplingFlags::clearFlag() - from within JSC implementation, or by calling setSamplingFlag() and - clearSamplingFlag() from JavaScript. - - The flags are sampled with a frequency of 10000Hz, and the highest - set flag in recorded, allowing multiple events to be measured (with - the highest flag number representing the highest priority). - - Disabled by default; no performance impact. - - * JavaScriptCore.exp: - * bytecode/SamplingTool.cpp: - (JSC::SamplingFlags::sample): - (JSC::SamplingFlags::start): - (JSC::SamplingFlags::stop): - (JSC::SamplingThread::threadStartFunc): - (JSC::SamplingThread::start): - (JSC::SamplingThread::stop): - (JSC::ScopeSampleRecord::sample): - (JSC::SamplingTool::doRun): - (JSC::SamplingTool::sample): - (JSC::SamplingTool::start): - (JSC::SamplingTool::stop): - * bytecode/SamplingTool.h: - (JSC::SamplingFlags::setFlag): - (JSC::SamplingFlags::clearFlag): - (JSC::SamplingTool::SamplingTool): - * jsc.cpp: - (GlobalObject::GlobalObject): - (functionSetSamplingFlag): - (functionClearSamplingFlag): - (runWithScripts): - * wtf/Platform.h: - -2009-04-29 Sam Weinig - - Another attempt to fix the windows build. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-04-29 Sam Weinig - - Try and fix the windows build. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-04-29 Gavin Barraclough - - Reviewed by Oliver "Peg-Leg" Hunt. - - Coallesce input checking and reduce futzing with the index position - between alternatives and iterations of the main loop of a regex, - when run in YARR. - - Consider the following regex: /foo|bar/ - - Prior to this patch, this will be implemented something like this pseudo-code description: - - loop: - check_for_available_input(3) // this increments the index by 3, for the first alterantive. - if (available) { test "foo" } - decrement_index(3) - check_for_available_input(3) // this increments the index by 3, for the second alterantive. - if (available) { test "bar" } - decrement_index(3) - check_for_available_input(1) // can we loop again? - if (available) { goto loop } - - With these changes it will look more like this: - - check_for_available_input(3) // this increments the index by 3, for the first alterantive. - if (!available) { goto fail } - loop: - test "foo" - test "bar" - check_for_available_input(1) // can we loop again? - if (available) { goto loop } - fail: - - - This gives about a 5% gain on v8-regex, no change on Sunspider. - - * yarr/RegexJIT.cpp: - (JSC::Yarr::RegexGenerator::TermGenerationState::linkAlternativeBacktracksTo): - (JSC::Yarr::RegexGenerator::generateDisjunction): - -2009-04-29 Oliver Hunt - - Reviewed by Gavin Barraclough. - - Clean up ArgList to be a trivial type - - Separate out old ArgList logic to handle buffering and marking arguments - into a distinct MarkedArgumentBuffer type. ArgList becomes a trivial - struct of a pointer and length. - - * API/JSObjectRef.cpp: - (JSObjectMakeFunction): - (JSObjectMakeArray): - (JSObjectMakeDate): - (JSObjectMakeError): - (JSObjectMakeRegExp): - (JSObjectCallAsFunction): - (JSObjectCallAsConstructor): - * JavaScriptCore.exp: - * interpreter/CallFrame.h: - (JSC::ExecState::emptyList): - * runtime/ArgList.cpp: - (JSC::ArgList::getSlice): - (JSC::MarkedArgumentBuffer::markLists): - (JSC::MarkedArgumentBuffer::slowAppend): - * runtime/ArgList.h: - (JSC::MarkedArgumentBuffer::MarkedArgumentBuffer): - (JSC::MarkedArgumentBuffer::~MarkedArgumentBuffer): - (JSC::ArgList::ArgList): - (JSC::ArgList::at): - (JSC::ArgList::isEmpty): - (JSC::ArgList::size): - (JSC::ArgList::begin): - (JSC::ArgList::end): - * runtime/Arguments.cpp: - (JSC::Arguments::fillArgList): - * runtime/Arguments.h: - * runtime/ArrayPrototype.cpp: - (JSC::arrayProtoFuncConcat): - (JSC::arrayProtoFuncPush): - (JSC::arrayProtoFuncSort): - (JSC::arrayProtoFuncFilter): - (JSC::arrayProtoFuncMap): - (JSC::arrayProtoFuncEvery): - (JSC::arrayProtoFuncForEach): - (JSC::arrayProtoFuncSome): - (JSC::arrayProtoFuncReduce): - (JSC::arrayProtoFuncReduceRight): - * runtime/Collector.cpp: - (JSC::Heap::collect): - * runtime/Collector.h: - (JSC::Heap::markListSet): - * runtime/CommonIdentifiers.h: - * runtime/Error.cpp: - (JSC::Error::create): - * runtime/FunctionPrototype.cpp: - (JSC::functionProtoFuncApply): - * runtime/JSArray.cpp: - (JSC::JSArray::JSArray): - (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key): - (JSC::JSArray::fillArgList): - (JSC::constructArray): - * runtime/JSArray.h: - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): - * runtime/JSGlobalData.h: - * runtime/JSObject.cpp: - (JSC::JSObject::put): - * runtime/StringConstructor.cpp: - (JSC::stringFromCharCodeSlowCase): - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncReplace): - (JSC::stringProtoFuncConcat): - (JSC::stringProtoFuncMatch): - -2009-04-29 Laszlo Gombos - - Reviewed by Sam Weinig. - - https://bugs.webkit.org/show_bug.cgi?id=25334 - - Fix Qt build when ENABLE_JIT is explicitly set to 1 - to overrule defaults. - - * JavaScriptCore.pri: - -2009-04-29 Oliver Hunt - - Reviewed by Steve Falkenburg. - - Crash in profiler due to incorrect assuming displayName would be a string. - - Fixed by adding a type guard. - - * runtime/InternalFunction.cpp: - (JSC::InternalFunction::displayName): - -2009-04-28 Geoffrey Garen - - Rubber stamped by Beth Dakin. - - Removed scaffolding supporting dynamically converting between 32bit and - 64bit value representations. - - * API/JSCallbackConstructor.cpp: - (JSC::constructJSCallback): - * API/JSCallbackFunction.cpp: - (JSC::JSCallbackFunction::call): - * API/JSCallbackObjectFunctions.h: - (JSC::::construct): - (JSC::::call): - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * bytecode/CodeBlock.h: - (JSC::CodeBlock::getConstant): - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitEqualityOp): - * interpreter/CallFrame.cpp: - (JSC::CallFrame::thisValue): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::callEval): - (JSC::Interpreter::throwException): - (JSC::Interpreter::createExceptionScope): - (JSC::Interpreter::privateExecute): - (JSC::Interpreter::retrieveArguments): - * interpreter/Register.h: - (JSC::Register::): - (JSC::Register::Register): - (JSC::Register::jsValue): - (JSC::Register::marked): - (JSC::Register::mark): - (JSC::Register::i): - (JSC::Register::activation): - (JSC::Register::arguments): - (JSC::Register::callFrame): - (JSC::Register::codeBlock): - (JSC::Register::function): - (JSC::Register::propertyNameIterator): - (JSC::Register::scopeChain): - (JSC::Register::vPC): - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_call_NotJSFunction): - (JSC::JITStubs::cti_op_load_varargs): - (JSC::JITStubs::cti_op_call_eval): - * jsc.cpp: - (functionPrint): - (functionDebug): - (functionRun): - (functionLoad): - * runtime/ArgList.h: - (JSC::ArgList::at): - * runtime/Arguments.cpp: - (JSC::Arguments::copyToRegisters): - (JSC::Arguments::fillArgList): - (JSC::Arguments::getOwnPropertySlot): - * runtime/ArrayConstructor.cpp: - (JSC::constructArrayWithSizeQuirk): - * runtime/ArrayPrototype.cpp: - (JSC::arrayProtoFuncJoin): - (JSC::arrayProtoFuncConcat): - (JSC::arrayProtoFuncPush): - (JSC::arrayProtoFuncSlice): - (JSC::arrayProtoFuncSort): - (JSC::arrayProtoFuncSplice): - (JSC::arrayProtoFuncUnShift): - (JSC::arrayProtoFuncFilter): - (JSC::arrayProtoFuncMap): - (JSC::arrayProtoFuncEvery): - (JSC::arrayProtoFuncForEach): - (JSC::arrayProtoFuncSome): - (JSC::arrayProtoFuncReduce): - (JSC::arrayProtoFuncReduceRight): - (JSC::arrayProtoFuncIndexOf): - (JSC::arrayProtoFuncLastIndexOf): - * runtime/BooleanConstructor.cpp: - (JSC::constructBoolean): - (JSC::callBooleanConstructor): - * runtime/DateConstructor.cpp: - (JSC::constructDate): - (JSC::dateParse): - (JSC::dateUTC): - * runtime/DatePrototype.cpp: - (JSC::formatLocaleDate): - (JSC::fillStructuresUsingTimeArgs): - (JSC::fillStructuresUsingDateArgs): - (JSC::dateProtoFuncSetTime): - (JSC::dateProtoFuncSetYear): - * runtime/ErrorConstructor.cpp: - (JSC::constructError): - * runtime/FunctionConstructor.cpp: - (JSC::constructFunction): - * runtime/FunctionPrototype.cpp: - (JSC::functionProtoFuncApply): - (JSC::functionProtoFuncCall): - * runtime/JSArray.cpp: - (JSC::JSArray::JSArray): - (JSC::constructArray): - * runtime/JSArray.h: - * runtime/JSGlobalObjectFunctions.cpp: - (JSC::encode): - (JSC::decode): - (JSC::globalFuncEval): - (JSC::globalFuncParseInt): - (JSC::globalFuncParseFloat): - (JSC::globalFuncIsNaN): - (JSC::globalFuncIsFinite): - (JSC::globalFuncEscape): - (JSC::globalFuncUnescape): - (JSC::globalFuncJSCPrint): - * runtime/MathObject.cpp: - (JSC::mathProtoFuncAbs): - (JSC::mathProtoFuncACos): - (JSC::mathProtoFuncASin): - (JSC::mathProtoFuncATan): - (JSC::mathProtoFuncATan2): - (JSC::mathProtoFuncCeil): - (JSC::mathProtoFuncCos): - (JSC::mathProtoFuncExp): - (JSC::mathProtoFuncFloor): - (JSC::mathProtoFuncLog): - (JSC::mathProtoFuncMax): - (JSC::mathProtoFuncMin): - (JSC::mathProtoFuncPow): - (JSC::mathProtoFuncRound): - (JSC::mathProtoFuncSin): - (JSC::mathProtoFuncSqrt): - (JSC::mathProtoFuncTan): - * runtime/NativeErrorConstructor.cpp: - (JSC::NativeErrorConstructor::construct): - * runtime/NumberConstructor.cpp: - (JSC::constructWithNumberConstructor): - (JSC::callNumberConstructor): - * runtime/NumberPrototype.cpp: - (JSC::numberProtoFuncToString): - (JSC::numberProtoFuncToFixed): - (JSC::numberProtoFuncToExponential): - (JSC::numberProtoFuncToPrecision): - * runtime/ObjectConstructor.cpp: - (JSC::constructObject): - * runtime/ObjectPrototype.cpp: - (JSC::objectProtoFuncHasOwnProperty): - (JSC::objectProtoFuncIsPrototypeOf): - (JSC::objectProtoFuncDefineGetter): - (JSC::objectProtoFuncDefineSetter): - (JSC::objectProtoFuncLookupGetter): - (JSC::objectProtoFuncLookupSetter): - (JSC::objectProtoFuncPropertyIsEnumerable): - * runtime/PropertySlot.h: - (JSC::PropertySlot::getValue): - * runtime/RegExpConstructor.cpp: - (JSC::constructRegExp): - * runtime/RegExpObject.cpp: - (JSC::RegExpObject::match): - * runtime/RegExpPrototype.cpp: - (JSC::regExpProtoFuncCompile): - * runtime/StringConstructor.cpp: - (JSC::stringFromCharCodeSlowCase): - (JSC::stringFromCharCode): - (JSC::constructWithStringConstructor): - (JSC::callStringConstructor): - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncReplace): - (JSC::stringProtoFuncCharAt): - (JSC::stringProtoFuncCharCodeAt): - (JSC::stringProtoFuncConcat): - (JSC::stringProtoFuncIndexOf): - (JSC::stringProtoFuncLastIndexOf): - (JSC::stringProtoFuncMatch): - (JSC::stringProtoFuncSearch): - (JSC::stringProtoFuncSlice): - (JSC::stringProtoFuncSplit): - (JSC::stringProtoFuncSubstr): - (JSC::stringProtoFuncSubstring): - (JSC::stringProtoFuncLocaleCompare): - (JSC::stringProtoFuncFontcolor): - (JSC::stringProtoFuncFontsize): - (JSC::stringProtoFuncAnchor): - (JSC::stringProtoFuncLink): - -2009-04-28 David Kilzer - - A little more hardening for UString - - Reviewed by Maciej Stachowiak. - - Revised fix for in r42644. - - * runtime/UString.cpp: - (JSC::newCapacityWithOverflowCheck): Added. - (JSC::concatenate): Used newCapacityWithOverflowCheck(). - (JSC::UString::append): Ditto. - -2009-04-28 Oliver Hunt - - Reviewed by Gavin Barraclough. - - Bring back r42969, this time with correct codegen - - Add logic to the codegen for right shift to avoid jumping to a helper function - when shifting a small floating point value. - - * jit/JITArithmetic.cpp: - (isSSE2Present): - (JSC::JIT::compileFastArith_op_rshift): - (JSC::JIT::compileFastArithSlow_op_rshift): - -2009-04-28 Kevin Ollivier - - wxMSW build fix. Switch JSCore build back to static. - - * API/JSBase.h: - * config.h: - * jscore.bkl: - -2009-04-28 Oliver Hunt - - Reviewed by NOBODY (Build fix). - - Roll out r42969, due to hangs in build bot. - - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArith_op_rshift): - (JSC::JIT::compileFastArithSlow_op_rshift): - (JSC::isSSE2Present): - -2009-04-28 Xan Lopez - - Unreviewed: fix distcheck build, add (even more) missing files to list. - - * GNUmakefile.am: - -2009-04-28 Oliver Hunt - - Reviewed by Geoff Garen. - - Improve performance of string indexing - - Add a cti_get_by_val_string function to specialise indexing into a string object. - This gives us a slight performance win on a number of string tests. - - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_get_by_val): - (JSC::JITStubs::cti_op_get_by_val_string): - * jit/JITStubs.h: - -2009-04-28 Oliver Hunt - - Reviewed by Geoff Garen. - - Improve performance of right shifts of large or otherwise floating point values. - - Add logic to the codegen for right shift to avoid jumping to a helper function - when shifting a small floating point value. - - * jit/JITArithmetic.cpp: - (isSSE2Present): Moved to the head of file. - (JSC::JIT::compileFastArith_op_rshift): - (JSC::JIT::compileFastArithSlow_op_rshift): - -2009-04-28 Xan Lopez - - Unreviewed: fix distcheck build, add (more) missing files to list. - - * GNUmakefile.am: - -2009-04-28 Xan Lopez - - Unreviewed: fix distcheck build, add missing header to file list. - - * GNUmakefile.am: - -2009-04-28 Gavin Barraclough - - Rubber stamped by Maciej "Henry Morgan" Stachowiak. - - Enable YARR. - (Again.) - - * wtf/Platform.h: - -2009-04-27 Gavin Barraclough - - Reviewed by Maciej Stachowiak. - - Tweak a loop condition to keep GCC happy, - some GCCs seem to be having issues with this. :-/ - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::breakTarget): - * wtf/Platform.h: - -2009-04-27 Adam Roben - - Windows Debug build fix - - Not sure why the buildbots weren't affected by this problem. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Let VS - re-order the file list, and added JavaScriptCore[_debug].def to the - project. This was not necessary for the fix, but made making the fix - easier. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - Removed a function that no longer exists. - -2009-04-26 Gavin Barraclough - - Reviewed by Weinig Sam. - - Fix for https://bugs.webkit.org/show_bug.cgi?id=25416 - "Cached prototype accesses unsafely hoist property storage load above structure checks." - - Do not hoist the load of the pointer to the property storage array. - - No performance impact. - - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdProtoList): - -2009-04-26 Gavin Barraclough - - Reviewed by Geoffrey "Gaffe or energy?" Garen. - - Randomize address requested by ExecutableAllocatorFixedVMPool. - - * jit/ExecutableAllocatorFixedVMPool.cpp: - (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): - -2009-04-26 Sam Weinig - - Reviewed by Eric Seidel. - - Remove scons-based build system. - - * JavaScriptCore.scons: Removed. - -2009-04-25 Oliver Hunt - - Reviewed by NOBODY (Buildfix). - - Make HAVE_MADV_FREE darwin only for now - - * wtf/Platform.h: - -2009-04-25 Jan Michael Alonzo - - Reviewed by Oliver Hunt. - - Gtk build fix - check if we have MADV_FREE before using it. - - * interpreter/RegisterFile.cpp: - (JSC::RegisterFile::releaseExcessCapacity): - * wtf/Platform.h: - -2009-04-24 Kevin Ollivier - - wx build fix. Switching JSCore from a static lib to a dynamic lib - to match the Apple build and fix symbol exports. - - * jscore.bkl: - -2009-04-24 Laszlo Gombos - - Rubber-stamped by Mark Rowe. - - https://bugs.webkit.org/show_bug.cgi?id=25337 - Move ThreadingQt.cpp under the qt directory. - - * JavaScriptCore.pri: - * wtf/ThreadingQt.cpp: Removed. - * wtf/qt/ThreadingQt.cpp: Copied from JavaScriptCore/wtf/ThreadingQt.cpp. - -2009-04-24 Laszlo Gombos - - Rubber-stamped by Mark Rowe. - - https://bugs.webkit.org/show_bug.cgi?id=25338 - Move ThreadingGtk.cpp under the gtk directory. - - * GNUmakefile.am: - * wtf/ThreadingGtk.cpp: Removed. - * wtf/gtk/ThreadingGtk.cpp: Copied from JavaScriptCore/wtf/ThreadingGtk.cpp. - -2009-04-24 Gavin Barraclough - - Reviewed by Sam "Wesley" Weinig. - - Improve performance to YARR interpreter. - (From about 3x slower than PCRE on regex-dna to about 30% slower). - - * yarr/RegexCompiler.cpp: - (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets): - * yarr/RegexInterpreter.cpp: - (JSC::Yarr::Interpreter::checkCharacter): - (JSC::Yarr::Interpreter::checkCasedCharacter): - (JSC::Yarr::Interpreter::backtrackPatternCharacter): - (JSC::Yarr::Interpreter::backtrackPatternCasedCharacter): - (JSC::Yarr::Interpreter::matchParentheticalAssertionBegin): - (JSC::Yarr::Interpreter::matchParentheticalAssertionEnd): - (JSC::Yarr::Interpreter::backtrackParentheticalAssertionBegin): - (JSC::Yarr::Interpreter::backtrackParentheticalAssertionEnd): - (JSC::Yarr::Interpreter::matchDisjunction): - (JSC::Yarr::Interpreter::interpret): - (JSC::Yarr::ByteCompiler::atomPatternCharacter): - (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternBegin): - (JSC::Yarr::ByteCompiler::atomParentheticalAssertionBegin): - (JSC::Yarr::ByteCompiler::closeAlternative): - (JSC::Yarr::ByteCompiler::closeBodyAlternative): - (JSC::Yarr::ByteCompiler::atomParenthesesEnd): - (JSC::Yarr::ByteCompiler::regexBegin): - (JSC::Yarr::ByteCompiler::regexEnd): - (JSC::Yarr::ByteCompiler::alterantiveBodyDisjunction): - (JSC::Yarr::ByteCompiler::alterantiveDisjunction): - (JSC::Yarr::ByteCompiler::emitDisjunction): - * yarr/RegexInterpreter.h: - (JSC::Yarr::ByteTerm::): - (JSC::Yarr::ByteTerm::ByteTerm): - (JSC::Yarr::ByteTerm::BodyAlternativeBegin): - (JSC::Yarr::ByteTerm::BodyAlternativeDisjunction): - (JSC::Yarr::ByteTerm::BodyAlternativeEnd): - (JSC::Yarr::ByteTerm::AlternativeBegin): - (JSC::Yarr::ByteTerm::AlternativeDisjunction): - (JSC::Yarr::ByteTerm::AlternativeEnd): - (JSC::Yarr::ByteTerm::SubpatternBegin): - (JSC::Yarr::ByteTerm::SubpatternEnd): - * yarr/RegexJIT.cpp: - (JSC::Yarr::RegexGenerator::generateParentheticalAssertion): - * yarr/RegexPattern.h: - -2009-04-24 Rob Raguet-Schofield - - Rubber-stamped by Mark Rowe. - - * wtf/CurrentTime.h: Fix a typo in a comment. - -2009-04-24 Oliver Hunt - - Reviewed by NOBODY (Build fix). - - Add reinterpret_cast - - * interpreter/RegisterFile.cpp: - (JSC::RegisterFile::releaseExcessCapacity): - -2009-04-23 Oliver Hunt - - Reviewed by Geoff Garen. - - JavaScript register file should remap to release physical pages accumulated during deep recursion - - We now track the maximum extent of the RegisterFile, and when we reach the final - return from JS (so the stack portion of the registerfile becomes empty) we see - if that extent is greater than maxExcessCapacity. If it is we use madvise or - VirtualFree to release the physical pages that were backing the excess. - - * interpreter/RegisterFile.cpp: - (JSC::RegisterFile::releaseExcessCapacity): - * interpreter/RegisterFile.h: - (JSC::RegisterFile::RegisterFile): - (JSC::RegisterFile::shrink): - (JSC::RegisterFile::grow): - -2009-04-23 Mark Rowe - - With great sadness and a heavy heart I switch us back from YARR to WREC in - order to restore greenness to the world once more. - - * wtf/Platform.h: - -2009-04-23 Mark Rowe - - More Windows build fixage. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-04-23 Mark Rowe - - Attempt to fix the Windows build. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Remove a symbol that no longer exists. - -2009-04-23 Francisco Tolmasky - - BUG 24604: WebKit profiler reports incorrect total times - - - Reviewed by Timothy Hatcher and Kevin McCullough. - - * JavaScriptCore.exp: - * JavaScriptCore.xcodeproj/project.pbxproj: - * profiler/CallIdentifier.h: - (JSC::CallIdentifier::Hash::hash): - (JSC::CallIdentifier::Hash::equal): - (JSC::CallIdentifier::hash): - (WTF::): - * profiler/HeavyProfile.cpp: Removed. - * profiler/HeavyProfile.h: Removed. - * profiler/Profile.cpp: No more need for TreeProfile/HeavyProfile - (JSC::Profile::create): - * profiler/Profile.h: - * profiler/ProfileNode.cpp: - * profiler/ProfileNode.h: - * profiler/TreeProfile.cpp: Removed. - * profiler/TreeProfile.h: Removed. - -2009-04-23 Gavin Barraclough - - Not Reviewed. - - Speculative Windows build fix II. - - * yarr/RegexInterpreter.cpp: - -2009-04-23 Gavin Barraclough - - Not Reviewed. - - Speculative Windows build fix. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * runtime/RegExp.cpp: - -2009-04-23 Gavin Barraclough - - Rubber stamped by salty sea dogs Sam & Geoff. - - Enable YARR_JIT by default (where supported), replacing WREC. - - * wtf/Platform.h: - -2009-04-23 Gavin Barraclough - - Reviewed by Geoff "Dread Pirate Roberts" Garen. - - Various small fixes to YARR JIT, in preparation for enabling it by default. - - * Correctly index into the callframe when storing restart addresses for - nested alternatives. - * Allow backtracking back into matched alternatives of parentheses. - * Fix callframe offset calculation for parenthetical assertions. - * When a set of parenthese are quantified with a fixed and variable portion, - and the variable portion is quantified once, this should not reset the - pattern match on failure to match (the last match from the firxed portion - should be preserved). - * Up the pattern size limit to match PCRE's new limit. - * Unlclosed parentheses should be reported with the message "missing )". - - * wtf/Platform.h: - * yarr/RegexCompiler.cpp: - (JSC::Yarr::RegexPatternConstructor::quantifyAtom): - (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets): - * yarr/RegexInterpreter.cpp: - (JSC::Yarr::Interpreter::matchParentheses): - (JSC::Yarr::Interpreter::backtrackParentheses): - (JSC::Yarr::ByteCompiler::emitDisjunction): - * yarr/RegexJIT.cpp: - (JSC::Yarr::RegexGenerator::loadFromFrameAndJump): - (JSC::Yarr::RegexGenerator::generateParenthesesDisjunction): - (JSC::Yarr::RegexGenerator::generateParentheticalAssertion): - (JSC::Yarr::RegexGenerator::generateTerm): - (JSC::Yarr::executeRegex): - * yarr/RegexParser.h: - (JSC::Yarr::Parser::): - (JSC::Yarr::Parser::parseTokens): - (JSC::Yarr::Parser::parse): - * yarr/RegexPattern.h: - (JSC::Yarr::PatternTerm::): - (JSC::Yarr::PatternTerm::PatternTerm): - -2009-04-22 Mark Rowe - - Rubber-stamped by Gavin Barraclough. - - Add the m_ prefix on FixedVMPoolAllocator's member variables, and fix typos in a few comments. - - * jit/ExecutableAllocatorFixedVMPool.cpp: - (JSC::FixedVMPoolAllocator::addToFreeList): - (JSC::FixedVMPoolAllocator::coalesceFreeSpace): - (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): - (JSC::FixedVMPoolAllocator::alloc): - (JSC::FixedVMPoolAllocator::free): - (JSC::FixedVMPoolAllocator::isWithinVMPool): - -2009-04-22 Mark Rowe - - Rubber-stamped by Gavin Barraclough. - - Add some assertions to FixedVMPoolAllocator to guard against cases where we - attempt to free memory that didn't originate from the pool, or we attempt to - hand out a bogus address from alloc. - - * jit/ExecutableAllocatorFixedVMPool.cpp: - (JSC::FixedVMPoolAllocator::release): - (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): - (JSC::FixedVMPoolAllocator::alloc): - (JSC::FixedVMPoolAllocator::free): - (JSC::FixedVMPoolAllocator::isWithinVMPool): - -2009-04-22 Gavin Barraclough - - Rubber stamped by Sam "Blackbeard" Weinig. - - Although pirates do spell the word 'generate' as 'genertate', - webkit developers do not. Fixertate. - - * yarr/RegexJIT.cpp: - (JSC::Yarr::RegexGenerator::generateAssertionBOL): - (JSC::Yarr::RegexGenerator::generateAssertionEOL): - (JSC::Yarr::RegexGenerator::generateAssertionWordBoundary): - (JSC::Yarr::RegexGenerator::generatePatternCharacterSingle): - (JSC::Yarr::RegexGenerator::generatePatternCharacterPair): - (JSC::Yarr::RegexGenerator::generatePatternCharacterFixed): - (JSC::Yarr::RegexGenerator::generatePatternCharacterGreedy): - (JSC::Yarr::RegexGenerator::generatePatternCharacterNonGreedy): - (JSC::Yarr::RegexGenerator::generateCharacterClassSingle): - (JSC::Yarr::RegexGenerator::generateCharacterClassFixed): - (JSC::Yarr::RegexGenerator::generateCharacterClassGreedy): - (JSC::Yarr::RegexGenerator::generateCharacterClassNonGreedy): - (JSC::Yarr::RegexGenerator::generateTerm): - -2009-04-22 Gavin Barraclough - - Reviewed by Sam "Blackbeard" Weinig. - - Improvements to YARR JIT. This patch expands support in three key areas: - * Add (temporary) support for falling back to PCRE for expressions not supported. - * Add support for x86_64 and Windows. - * Add support for singly quantified parentheses (? and ??), alternatives within - parentheses, and parenthetical assertions. - - * runtime/RegExp.cpp: - (JSC::RegExp::match): - * yarr/RegexJIT.cpp: - (JSC::Yarr::RegexGenerator::storeToFrame): - (JSC::Yarr::RegexGenerator::storeToFrameWithPatch): - (JSC::Yarr::RegexGenerator::loadFromFrameAndJump): - (JSC::Yarr::RegexGenerator::AlternativeBacktrackRecord::AlternativeBacktrackRecord): - (JSC::Yarr::RegexGenerator::TermGenerationState::resetAlternative): - (JSC::Yarr::RegexGenerator::TermGenerationState::resetTerm): - (JSC::Yarr::RegexGenerator::TermGenerationState::jumpToBacktrack): - (JSC::Yarr::RegexGenerator::TermGenerationState::plantJumpToBacktrackIfExists): - (JSC::Yarr::RegexGenerator::TermGenerationState::addBacktrackJump): - (JSC::Yarr::RegexGenerator::TermGenerationState::linkAlternativeBacktracks): - (JSC::Yarr::RegexGenerator::TermGenerationState::propagateBacktrackingFrom): - (JSC::Yarr::RegexGenerator::genertateAssertionBOL): - (JSC::Yarr::RegexGenerator::genertateAssertionEOL): - (JSC::Yarr::RegexGenerator::matchAssertionWordchar): - (JSC::Yarr::RegexGenerator::genertateAssertionWordBoundary): - (JSC::Yarr::RegexGenerator::genertatePatternCharacterSingle): - (JSC::Yarr::RegexGenerator::genertatePatternCharacterPair): - (JSC::Yarr::RegexGenerator::genertatePatternCharacterFixed): - (JSC::Yarr::RegexGenerator::genertatePatternCharacterGreedy): - (JSC::Yarr::RegexGenerator::genertatePatternCharacterNonGreedy): - (JSC::Yarr::RegexGenerator::genertateCharacterClassSingle): - (JSC::Yarr::RegexGenerator::genertateCharacterClassFixed): - (JSC::Yarr::RegexGenerator::genertateCharacterClassGreedy): - (JSC::Yarr::RegexGenerator::genertateCharacterClassNonGreedy): - (JSC::Yarr::RegexGenerator::generateParenthesesDisjunction): - (JSC::Yarr::RegexGenerator::generateParenthesesSingle): - (JSC::Yarr::RegexGenerator::generateParentheticalAssertion): - (JSC::Yarr::RegexGenerator::generateTerm): - (JSC::Yarr::RegexGenerator::generateDisjunction): - (JSC::Yarr::RegexGenerator::generateEnter): - (JSC::Yarr::RegexGenerator::generateReturn): - (JSC::Yarr::RegexGenerator::RegexGenerator): - (JSC::Yarr::RegexGenerator::generate): - (JSC::Yarr::RegexGenerator::compile): - (JSC::Yarr::RegexGenerator::generationFailed): - (JSC::Yarr::jitCompileRegex): - (JSC::Yarr::executeRegex): - * yarr/RegexJIT.h: - (JSC::Yarr::RegexCodeBlock::RegexCodeBlock): - (JSC::Yarr::RegexCodeBlock::~RegexCodeBlock): - -2009-04-22 Sam Weinig - - Rubber-stamped by Darin Adler. - - Fix for - Turn off Geolocation by default - - * Configurations/FeatureDefines.xcconfig: - -2009-04-22 Oliver Hunt - - Reviewed by NOBODY (Buildfix). - - * interpreter/CachedCall.h: - -2009-04-21 Oliver Hunt - - Reviewed by NOBODY (Build fix). - - * runtime/StringPrototype.cpp: - -2009-04-21 Oliver Hunt - - Reviewed by Maciej Stachowiak. - - Improve String.replace performance slightly - - Apply our vm reentry caching logic to String.replace with global - regexes. - - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncReplace): - -2009-04-21 Geoffrey Garen - - Reviewed by Cameron Zwarich and Oliver Hunt. - - Re-Fixed REGRESSION: Stack overflow on PowerPC on - fast/workers/use-machine-stack.html (22531) - - SunSpider reports no change. - - Use a larger recursion limit on the main thread (because we can, and - there's some evidence that it may improve compatibility), and a smaller - recursion limit on secondary threads (because they tend to have smaller - stacks). - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::execute): - (JSC::Interpreter::prepareForRepeatCall): - * interpreter/Interpreter.h: - (JSC::): Ditto. I wrote the recursion test slightly funny, so that the - common case remains a simple compare to constant. - - * runtime/ArrayPrototype.cpp: - (JSC::arrayProtoFuncToString): - (JSC::arrayProtoFuncToLocaleString): - (JSC::arrayProtoFuncJoin): Conservatively, set the array recursion limits - to the lower, secondary thread limit. We can do something fancier if - compatibility moves us, but this seems sufficient for now. - -2009-04-21 Geoffrey Garen - - Rubber-stamped by Adam Roben. - - Disabled one more Mozilla JS test because it fails intermittently on Windows. - (See https://bugs.webkit.org/show_bug.cgi?id=25160.) - - * tests/mozilla/expected.html: - -2009-04-21 Adam Roben - - Rename JavaScriptCore_debug.dll to JavaScriptCore.dll in the Debug - configuration - - This matches the naming scheme for WebKit.dll, and will be necessary - once Safari links against JavaScriptCore.dll. This change also causes - run-safari not to fail (because the launcher printed by FindSafari was - always looking for JavaScriptCore.dll, never - JavaScriptCore_debug.dll). - - Part of Bug 25305: can't run safari or drt on windows - - - Reviewed by Steve Falkenburg and Sam Weinig. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.vcproj/jsc/jsc.vcproj: - * JavaScriptCore.vcproj/testapi/testapi.vcproj: - Use $(WebKitDLLConfigSuffix) for naming JavaScriptCore.{dll,lib}. - -2009-04-21 Adam Roben - - Fix JavaScriptCore build on VC++ Express - - Reviewed by Steve Falkenburg and Sam Weinig. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Link - explicitly against gdi32.lib and oleaut32.lib. - -2009-04-21 Geoffrey Garen - - Reviewed by Mark Rowe. - - Tiger crash fix: Put VM tags in their own header file, and fixed up the - #ifdefs so they're not used on Tiger. - - * JavaScriptCore.xcodeproj/project.pbxproj: - * interpreter/RegisterFile.h: - (JSC::RegisterFile::RegisterFile): - * jit/ExecutableAllocatorFixedVMPool.cpp: - (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): - * jit/ExecutableAllocatorPosix.cpp: - (JSC::ExecutablePool::systemAlloc): - * runtime/Collector.cpp: - (JSC::allocateBlock): - * wtf/VMTags.h: Added. - -2009-04-20 Steve Falkenburg - - More Windows build fixes. - - * JavaScriptCore.vcproj/JavaScriptCore.make: Copy DLLs, PDBs. - * JavaScriptCore.vcproj/JavaScriptCore.resources: Added. - * JavaScriptCore.vcproj/JavaScriptCore.resources/Info.plist: Added. - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.rc: Added. - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add version stamping, resource copying. - -2009-04-20 Steve Falkenburg - - Separate JavaScriptCore.dll from WebKit.dll. - Slight performance improvement or no change on benchmarks. - - Allows us to break a circular dependency between CFNetwork and WebKit on Windows, - and simplifies standalone JavaScriptCore builds. - - Reviewed by Oliver Hunt. - - * API/JSBase.h: Export symbols with JS_EXPORT when using MSVC. - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.vcproj/WTF/WTF.vcproj: Build JavaScriptCore as a DLL instead of a static library. - * config.h: Specify __declspec(dllexport/dllimport) appropriately when exporting data. - * runtime/InternalFunction.h: Specify JS_EXPORTDATA on exported data. - * runtime/JSArray.h: Specify JS_EXPORTDATA on exported data. - * runtime/JSFunction.h: Specify JS_EXPORTDATA on exported data. - * runtime/StringObject.h: Specify JS_EXPORTDATA on exported data. - * runtime/UString.h: Specify JS_EXPORTDATA on exported data. - -2009-04-20 Sam Weinig - - Reviewed by Kevin McCullough. - - Always tag mmaped memory on darwin and clean up #defines - now that they are a little bigger. - - * interpreter/RegisterFile.h: - (JSC::RegisterFile::RegisterFile): - * jit/ExecutableAllocatorFixedVMPool.cpp: - (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): - * jit/ExecutableAllocatorPosix.cpp: - (JSC::ExecutablePool::systemAlloc): - * runtime/Collector.cpp: - (JSC::allocateBlock): - -2009-04-20 Sam Weinig - - Rubber-stamped by Tim Hatcher. - - Add licenses for xcconfig files. - - * Configurations/Base.xcconfig: - * Configurations/DebugRelease.xcconfig: - * Configurations/FeatureDefines.xcconfig: - * Configurations/JavaScriptCore.xcconfig: - * Configurations/Version.xcconfig: - -2009-04-20 Ariya Hidayat - - Build fix for Qt port (after r42646). Not reviewed. - - * wtf/unicode/qt4/UnicodeQt4.h: Added U16_PREV. - -2009-04-19 Sam Weinig - - Reviewed by Darin Adler. - - Better fix for JSStringCreateWithCFString hardening. - - * API/JSStringRefCF.cpp: - (JSStringCreateWithCFString): - -2009-04-19 Sam Weinig - - Reviewed by Dan Bernstein. - - Fix for - Harden JSStringCreateWithCFString against malformed CFStringRefs. - - * API/JSStringRefCF.cpp: - (JSStringCreateWithCFString): - -2009-04-19 David Kilzer - - Make FEATURE_DEFINES completely dynamic - - Reviewed by Darin Adler. - - Make FEATURE_DEFINES depend on individual ENABLE_FEATURE_NAME - variables for each feature, making it possible to remove all - knowledge of FEATURE_DEFINES from build-webkit. - - * Configurations/FeatureDefines.xcconfig: Extract a variable - from FEATURE_DEFINES for each feature setting. - -2009-04-18 Sam Weinig - - Reviewed by Dan Bernstein. - - Fix typo. s/VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE/VM_MEMORY_JAVASCRIPT_CORE/ - - * runtime/Collector.cpp: - (JSC::allocateBlock): Fix bozo typo. - -2009-04-18 Sam Weinig - - Reviewed by Anders Carlsson. - - Fix for Tag JavaScript memory on SnowLeopard - - * interpreter/RegisterFile.h: - (JSC::RegisterFile::RegisterFile): - * jit/ExecutableAllocatorFixedVMPool.cpp: - (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): - * jit/ExecutableAllocatorPosix.cpp: - (JSC::ExecutablePool::systemAlloc): - * runtime/Collector.cpp: - (JSC::allocateBlock): - -2009-04-18 Drew Wilson - - VisiblePosition.characterAfter should return UChar32 - - Reviewed by Dan Bernstein. - - * wtf/unicode/icu/UnicodeIcu.h: - (WTF::Unicode::hasLineBreakingPropertyComplexContextOrIdeographic): Added. - -2009-04-18 Sam Weinig - - Reviewed by Mark Rowe. - - Fix for - A little bit of hardening for UString. - - * runtime/UString.cpp: - (JSC::concatenate): - (JSC::UString::append): - -2009-04-18 Sam Weinig - - Reviewed by Mark Rowe and Dan Bernstein. - - Fix for - A little bit of hardening for Vector. - - * wtf/Vector.h: - (WTF::Vector::append): - (WTF::Vector::insert): - -2009-04-17 Gavin Barraclough - - Reviewed by Geoff Garen. - - On x86_64, make all JIT-code allocations from a new heap, managed - by FixedVMPoolAllocator. This class allocates a single large (2Gb) - pool of virtual memory from which all further allocations take place. - Since all JIT code is allocated from this pool, we can continue to - safely assume (as is already asserted) that it will always be possible - to link any JIT-code to JIT-code jumps and calls. - - * JavaScriptCore.xcodeproj/project.pbxproj: - Add new file. - * jit/ExecutableAllocatorFixedVMPool.cpp: Added. - (JSC::FreeListEntry::FreeListEntry): - (JSC::AVLTreeAbstractorForFreeList::get_less): - (JSC::AVLTreeAbstractorForFreeList::set_less): - (JSC::AVLTreeAbstractorForFreeList::get_greater): - (JSC::AVLTreeAbstractorForFreeList::set_greater): - (JSC::AVLTreeAbstractorForFreeList::get_balance_factor): - (JSC::AVLTreeAbstractorForFreeList::set_balance_factor): - (JSC::AVLTreeAbstractorForFreeList::null): - (JSC::AVLTreeAbstractorForFreeList::compare_key_key): - (JSC::AVLTreeAbstractorForFreeList::compare_key_node): - (JSC::AVLTreeAbstractorForFreeList::compare_node_node): - (JSC::sortFreeListEntriesByPointer): - (JSC::sortCommonSizedAllocations): - (JSC::FixedVMPoolAllocator::release): - (JSC::FixedVMPoolAllocator::reuse): - (JSC::FixedVMPoolAllocator::addToFreeList): - (JSC::FixedVMPoolAllocator::coalesceFreeSpace): - (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): - (JSC::FixedVMPoolAllocator::alloc): - (JSC::FixedVMPoolAllocator::free): - (JSC::ExecutableAllocator::intializePageSize): - (JSC::ExecutablePool::systemAlloc): - (JSC::ExecutablePool::systemRelease): - The new 2Gb heap class! - * jit/ExecutableAllocatorPosix.cpp: - Disable use of this implementation on x86_64. - * wtf/AVLTree.h: - Add missing variable initialization. - (WTF::::remove): - -2009-04-17 Oliver Hunt - - Reviewed by Darin Adler. - - Fix bug where the VM reentry cache would not correctly unroll the cached callframe - - Fix a check that was intended to mark a cached call as invalid when the callframe could - not be constructed. Instead it was just checking that there was a place to put the - exception. This eventually results in a non-recoverable RegisterFile starvation. - - * interpreter/CachedCall.h: - (JSC::CachedCall::CachedCall): - (JSC::CachedCall::call): add assertion to ensure we don't use a bad callframe - -2009-04-17 David Kilzer - - Simplify FEATURE_DEFINES definition - - Reviewed by Darin Adler. - - This moves FEATURE_DEFINES and its related ENABLE_FEATURE_NAME - variables to their own FeatureDefines.xcconfig file. It also - extracts a new ENABLE_GEOLOCATION variable so that - FEATURE_DEFINES only needs to be defined once. - - * Configurations/FeatureDefines.xcconfig: Added. - * Configurations/JavaScriptCore.xcconfig: Removed definition of - ENABLE_SVG_DOM_OBJC_BINDINGS and FEATURE_DEFINES. Added include - of FeatureDefines.xcconfig. - * JavaScriptCore.xcodeproj/project.pbxproj: Added - FeatureDefines.xcconfig file. - -2009-04-08 Mihnea Ovidenie - - Reviewed by Oliver Hunt. - - Bug 25027: JavaScript parseInt wrong on negative numbers - - - When dealing with negative numbers, parseInt should use ceil instead of floor. - - * runtime/JSGlobalObjectFunctions.cpp: - (JSC::globalFuncParseInt): - -2009-04-16 Stephanie Lewis - - Reviewed by Oliver Hunt. - - 32-bit to 64-bit: Javascript hash tables double in size - - Remove perfect hash optimization which removes 1 MB of overhead on 32-bit and almost 2 MB on 64-bit. Removing the optimization was not a regression on SunSpider and the acid 3 test still passes. - - * create_hash_table: - * runtime/Lookup.cpp: - (JSC::HashTable::createTable): - (JSC::HashTable::deleteTable): - * runtime/Lookup.h: - (JSC::HashEntry::initialize): - (JSC::HashEntry::next): - (JSC::HashTable::entry): - * runtime/Structure.cpp: - (JSC::Structure::getEnumerableNamesFromClassInfoTable): - -2009-04-16 Oliver Hunt - - Reviewed by Gavin Barraclough. - - Fix subtle error in optimised VM reentry in Array.sort - - Basically to ensure we don't accidentally invalidate the cached callframe - we should be using the cached callframe rather than our own exec state. - While the old behaviour was wrong i have been unable to actually create a - test case where anything actually ends up going wrong. - - * interpreter/CachedCall.h: - (JSC::CachedCall::newCallFrame): - * runtime/JSArray.cpp: - (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key): - -2009-04-16 Oliver Hunt - - Reviewed by Gavin Barraclough. - - Optimise op_resolve_base - - If we can statically find a property we are trying to resolve - the base of, the base is guaranteed to be the global object. - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitResolveBase): - -2009-04-16 Oliver Hunt - - Reviewed by Gavin Barraclough. - - Improve performance of read-write-modify operators - - Implement cross scope optimisation for read-write-modify - operators, to avoid unnecessary calls to property resolve - helper functions. - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::BytecodeGenerator): - (JSC::BytecodeGenerator::emitLoadGlobalObject): - (JSC::BytecodeGenerator::emitResolveWithBase): - * bytecompiler/BytecodeGenerator.h: - -2009-04-16 Oliver Hunt - - Reviewed by Gavin Barraclough. - - Improve performance of remaining array enumeration functions - - Make use of function entry cache for remaining Array enumeration functions. - - * runtime/ArrayPrototype.cpp: - (JSC::arrayProtoFuncMap): - (JSC::arrayProtoFuncEvery): - (JSC::arrayProtoFuncForEach): - (JSC::arrayProtoFuncSome): - -2009-04-15 Oliver Hunt - - Reviewed by Gavin Barraclough. - - Improve performance of Array.sort - - Cache the VM entry for Array.sort when using a JS comparison function. - - * runtime/JSArray.cpp: - (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key): - (JSC::JSArray::sort): - -2009-04-15 Oliver Hunt - - Reviewed by Gavin Barraclough. - - Bug 25229: Need support for Array.prototype.reduceRight - - - Implement Array.reduceRight - - * runtime/ArrayPrototype.cpp: - (JSC::arrayProtoFuncReduceRight): - -2009-04-15 Oliver Hunt - - Reviewed by Gavin Barraclough. - - Bug 25227: Array.filter triggers an assertion when the target array shrinks while being filtered - - - We correct this simply by making the fast array path fall back on the slow path if - we ever discover the fast access is unsafe. - - * runtime/ArrayPrototype.cpp: - (JSC::arrayProtoFuncFilter): - -2009-04-13 Oliver Hunt - - Reviewed by Gavin Barraclough. - - Bug 25159: Support Array.prototype.reduce - - - Implement Array.prototype.reduce - - * runtime/ArrayPrototype.cpp: - (JSC::arrayProtoFuncReduce): - -2009-04-15 Oliver Hunt - - Reviewed by NOBODY (Build fix). - - Move CallFrameClosure from inside the Interpreter class to its own file. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * interpreter/CachedCall.h: - * interpreter/CallFrameClosure.h: Copied from JavaScriptCore/yarr/RegexJIT.h. - (JSC::CallFrameClosure::setArgument): - (JSC::CallFrameClosure::resetCallFrame): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::prepareForRepeatCall): - * interpreter/Interpreter.h: - -2009-04-14 Oliver Hunt - - Reviewed by Cameron Zwarich. - - Bug 25202: Improve performance of repeated callbacks into the VM - - Add the concept of a CachedCall to native code for use in Array - prototype and similar functions where a single callback function - is called repeatedly with the same number of arguments. - - Used Array.prototype.filter as the test function and got a 50% win - over a naive non-caching specialised version. This makes the native - implementation of Array.prototype.filter faster than the JS one once - more. - - * JavaScriptCore.vcproj/JavaScriptCore.sln: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * interpreter/CachedCall.h: Added. - (JSC::CachedCall::CachedCall): - (JSC::CachedCall::call): - (JSC::CachedCall::setThis): - (JSC::CachedCall::setArgument): - (JSC::CachedCall::~CachedCall): - CachedCall is a wrapper that automates the calling and teardown - for a CallFrameClosure - * interpreter/CallFrame.h: - * interpreter/Interpreter.cpp: - (JSC::Interpreter::prepareForRepeatCall): - Create the basic entry closure for a function - (JSC::Interpreter::execute): - A new ::execute method to enter the interpreter from a closure - (JSC::Interpreter::endRepeatCall): - Clear the entry closure - * interpreter/Interpreter.h: - (JSC::Interpreter::CallFrameClosure::setArgument): - (JSC::Interpreter::CallFrameClosure::resetCallFrame): - Helper functions to simplify setting up the closure's callframe - * runtime/ArrayPrototype.cpp: - (JSC::arrayProtoFuncFilter): - -2009-04-14 Xan Lopez - - Fix the build. - - Add the yarr headers (and only the headers) to the build, so that - RegExp.cpp can compile. The headers are ifdefed out with yarr - disabled, so we don't need anything else for now. - - * GNUmakefile.am: - -2009-04-14 Adam Roben - - Remove support for profile-guided optimization on Windows - - Rubber-stamped by Steve Falkenburg. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Removed - the Release_PGO configuration. Also let VS re-order the source files - list. - -2009-04-14 Xan Lopez - - Unreviewed build fix. - - * GNUmakefile.am: - -2009-04-14 Jan Michael Alonzo - - Gtk build fix when building minidom. Not reviewed. - - Use C-style comment instead of C++ style since autotools builds - minidom using gcc and not g++. - - * wtf/Platform.h: - -2009-04-14 Gavin Barraclough - - Reviewed by NOBODY - speculative build fix. - - * runtime/RegExp.h: - -2009-04-13 Gavin Barraclough - - Reviewed by Cap'n Geoff Garen. - - Yarr! - (Yet another regex runtime). - - Currently disabled by default since the interpreter, whilst awesomely - functional, has not been optimized and is likely slower than PCRE, and - the JIT, whilst faster than WREC, is presently incomplete and does not - fallback to using an interpreter for the cases it cannot handle. - - * JavaScriptCore.xcodeproj/project.pbxproj: - * assembler/MacroAssemblerX86Common.h: - (JSC::MacroAssemblerX86Common::move): - (JSC::MacroAssemblerX86Common::swap): - (JSC::MacroAssemblerX86Common::signExtend32ToPtr): - (JSC::MacroAssemblerX86Common::zeroExtend32ToPtr): - (JSC::MacroAssemblerX86Common::branch32): - (JSC::MacroAssemblerX86Common::branch16): - * assembler/X86Assembler.h: - (JSC::X86Assembler::cmpw_im): - (JSC::X86Assembler::testw_rr): - (JSC::X86Assembler::X86InstructionFormatter::immediate16): - * runtime/RegExp.cpp: - (JSC::RegExp::RegExp): - (JSC::RegExp::~RegExp): - (JSC::RegExp::create): - (JSC::RegExp::compile): - (JSC::RegExp::match): - * runtime/RegExp.h: - * wtf/Platform.h: - * yarr: Added. - * yarr/RegexCompiler.cpp: Added. - (JSC::Yarr::CharacterClassConstructor::CharacterClassConstructor): - (JSC::Yarr::CharacterClassConstructor::reset): - (JSC::Yarr::CharacterClassConstructor::append): - (JSC::Yarr::CharacterClassConstructor::putChar): - (JSC::Yarr::CharacterClassConstructor::isUnicodeUpper): - (JSC::Yarr::CharacterClassConstructor::isUnicodeLower): - (JSC::Yarr::CharacterClassConstructor::putRange): - (JSC::Yarr::CharacterClassConstructor::charClass): - (JSC::Yarr::CharacterClassConstructor::addSorted): - (JSC::Yarr::CharacterClassConstructor::addSortedRange): - (JSC::Yarr::newlineCreate): - (JSC::Yarr::digitsCreate): - (JSC::Yarr::spacesCreate): - (JSC::Yarr::wordcharCreate): - (JSC::Yarr::nondigitsCreate): - (JSC::Yarr::nonspacesCreate): - (JSC::Yarr::nonwordcharCreate): - (JSC::Yarr::RegexPatternConstructor::RegexPatternConstructor): - (JSC::Yarr::RegexPatternConstructor::~RegexPatternConstructor): - (JSC::Yarr::RegexPatternConstructor::reset): - (JSC::Yarr::RegexPatternConstructor::assertionBOL): - (JSC::Yarr::RegexPatternConstructor::assertionEOL): - (JSC::Yarr::RegexPatternConstructor::assertionWordBoundary): - (JSC::Yarr::RegexPatternConstructor::atomPatternCharacter): - (JSC::Yarr::RegexPatternConstructor::atomBuiltInCharacterClass): - (JSC::Yarr::RegexPatternConstructor::atomCharacterClassBegin): - (JSC::Yarr::RegexPatternConstructor::atomCharacterClassAtom): - (JSC::Yarr::RegexPatternConstructor::atomCharacterClassRange): - (JSC::Yarr::RegexPatternConstructor::atomCharacterClassBuiltIn): - (JSC::Yarr::RegexPatternConstructor::atomCharacterClassEnd): - (JSC::Yarr::RegexPatternConstructor::atomParenthesesSubpatternBegin): - (JSC::Yarr::RegexPatternConstructor::atomParentheticalAssertionBegin): - (JSC::Yarr::RegexPatternConstructor::atomParenthesesEnd): - (JSC::Yarr::RegexPatternConstructor::atomBackReference): - (JSC::Yarr::RegexPatternConstructor::copyDisjunction): - (JSC::Yarr::RegexPatternConstructor::copyTerm): - (JSC::Yarr::RegexPatternConstructor::quantifyAtom): - (JSC::Yarr::RegexPatternConstructor::disjunction): - (JSC::Yarr::RegexPatternConstructor::regexBegin): - (JSC::Yarr::RegexPatternConstructor::regexEnd): - (JSC::Yarr::RegexPatternConstructor::regexError): - (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets): - (JSC::Yarr::RegexPatternConstructor::setupDisjunctionOffsets): - (JSC::Yarr::RegexPatternConstructor::setupOffsets): - (JSC::Yarr::compileRegex): - * yarr/RegexCompiler.h: Added. - * yarr/RegexInterpreter.cpp: Added. - (JSC::Yarr::Interpreter::appendParenthesesDisjunctionContext): - (JSC::Yarr::Interpreter::popParenthesesDisjunctionContext): - (JSC::Yarr::Interpreter::DisjunctionContext::DisjunctionContext): - (JSC::Yarr::Interpreter::DisjunctionContext::operator new): - (JSC::Yarr::Interpreter::allocDisjunctionContext): - (JSC::Yarr::Interpreter::freeDisjunctionContext): - (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::ParenthesesDisjunctionContext): - (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::operator new): - (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::restoreOutput): - (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::getDisjunctionContext): - (JSC::Yarr::Interpreter::allocParenthesesDisjunctionContext): - (JSC::Yarr::Interpreter::freeParenthesesDisjunctionContext): - (JSC::Yarr::Interpreter::InputStream::InputStream): - (JSC::Yarr::Interpreter::InputStream::next): - (JSC::Yarr::Interpreter::InputStream::rewind): - (JSC::Yarr::Interpreter::InputStream::read): - (JSC::Yarr::Interpreter::InputStream::readChecked): - (JSC::Yarr::Interpreter::InputStream::reread): - (JSC::Yarr::Interpreter::InputStream::prev): - (JSC::Yarr::Interpreter::InputStream::getPos): - (JSC::Yarr::Interpreter::InputStream::setPos): - (JSC::Yarr::Interpreter::InputStream::atStart): - (JSC::Yarr::Interpreter::InputStream::atEnd): - (JSC::Yarr::Interpreter::InputStream::checkInput): - (JSC::Yarr::Interpreter::InputStream::uncheckInput): - (JSC::Yarr::Interpreter::testCharacterClass): - (JSC::Yarr::Interpreter::tryConsumeCharacter): - (JSC::Yarr::Interpreter::checkCharacter): - (JSC::Yarr::Interpreter::tryConsumeCharacterClass): - (JSC::Yarr::Interpreter::checkCharacterClass): - (JSC::Yarr::Interpreter::tryConsumeBackReference): - (JSC::Yarr::Interpreter::matchAssertionBOL): - (JSC::Yarr::Interpreter::matchAssertionEOL): - (JSC::Yarr::Interpreter::matchAssertionWordBoundary): - (JSC::Yarr::Interpreter::matchPatternCharacter): - (JSC::Yarr::Interpreter::backtrackPatternCharacter): - (JSC::Yarr::Interpreter::matchCharacterClass): - (JSC::Yarr::Interpreter::backtrackCharacterClass): - (JSC::Yarr::Interpreter::matchBackReference): - (JSC::Yarr::Interpreter::backtrackBackReference): - (JSC::Yarr::Interpreter::recordParenthesesMatch): - (JSC::Yarr::Interpreter::resetMatches): - (JSC::Yarr::Interpreter::resetAssertionMatches): - (JSC::Yarr::Interpreter::parenthesesDoBacktrack): - (JSC::Yarr::Interpreter::matchParenthesesOnceBegin): - (JSC::Yarr::Interpreter::matchParenthesesOnceEnd): - (JSC::Yarr::Interpreter::backtrackParenthesesOnceBegin): - (JSC::Yarr::Interpreter::backtrackParenthesesOnceEnd): - (JSC::Yarr::Interpreter::matchParentheticalAssertionOnceBegin): - (JSC::Yarr::Interpreter::matchParentheticalAssertionOnceEnd): - (JSC::Yarr::Interpreter::backtrackParentheticalAssertionOnceBegin): - (JSC::Yarr::Interpreter::backtrackParentheticalAssertionOnceEnd): - (JSC::Yarr::Interpreter::matchParentheses): - (JSC::Yarr::Interpreter::backtrackParentheses): - (JSC::Yarr::Interpreter::matchTerm): - (JSC::Yarr::Interpreter::backtrackTerm): - (JSC::Yarr::Interpreter::matchAlternative): - (JSC::Yarr::Interpreter::matchDisjunction): - (JSC::Yarr::Interpreter::matchNonZeroDisjunction): - (JSC::Yarr::Interpreter::interpret): - (JSC::Yarr::Interpreter::Interpreter): - (JSC::Yarr::ByteCompiler::ParenthesesStackEntry::ParenthesesStackEntry): - (JSC::Yarr::ByteCompiler::ByteCompiler): - (JSC::Yarr::ByteCompiler::compile): - (JSC::Yarr::ByteCompiler::checkInput): - (JSC::Yarr::ByteCompiler::assertionBOL): - (JSC::Yarr::ByteCompiler::assertionEOL): - (JSC::Yarr::ByteCompiler::assertionWordBoundary): - (JSC::Yarr::ByteCompiler::atomPatternCharacter): - (JSC::Yarr::ByteCompiler::atomCharacterClass): - (JSC::Yarr::ByteCompiler::atomBackReference): - (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternBegin): - (JSC::Yarr::ByteCompiler::atomParentheticalAssertionBegin): - (JSC::Yarr::ByteCompiler::popParenthesesStack): - (JSC::Yarr::ByteCompiler::dumpDisjunction): - (JSC::Yarr::ByteCompiler::closeAlternative): - (JSC::Yarr::ByteCompiler::atomParenthesesEnd): - (JSC::Yarr::ByteCompiler::regexBegin): - (JSC::Yarr::ByteCompiler::regexEnd): - (JSC::Yarr::ByteCompiler::alterantiveDisjunction): - (JSC::Yarr::ByteCompiler::emitDisjunction): - (JSC::Yarr::byteCompileRegex): - (JSC::Yarr::interpretRegex): - * yarr/RegexInterpreter.h: Added. - (JSC::Yarr::ByteTerm::): - (JSC::Yarr::ByteTerm::ByteTerm): - (JSC::Yarr::ByteTerm::BOL): - (JSC::Yarr::ByteTerm::CheckInput): - (JSC::Yarr::ByteTerm::EOL): - (JSC::Yarr::ByteTerm::WordBoundary): - (JSC::Yarr::ByteTerm::BackReference): - (JSC::Yarr::ByteTerm::AlternativeBegin): - (JSC::Yarr::ByteTerm::AlternativeDisjunction): - (JSC::Yarr::ByteTerm::AlternativeEnd): - (JSC::Yarr::ByteTerm::PatternEnd): - (JSC::Yarr::ByteTerm::invert): - (JSC::Yarr::ByteTerm::capture): - (JSC::Yarr::ByteDisjunction::ByteDisjunction): - (JSC::Yarr::BytecodePattern::BytecodePattern): - (JSC::Yarr::BytecodePattern::~BytecodePattern): - * yarr/RegexJIT.cpp: Added. - (JSC::Yarr::RegexGenerator::optimizeAlternative): - (JSC::Yarr::RegexGenerator::matchCharacterClassRange): - (JSC::Yarr::RegexGenerator::matchCharacterClass): - (JSC::Yarr::RegexGenerator::jumpIfNoAvailableInput): - (JSC::Yarr::RegexGenerator::jumpIfAvailableInput): - (JSC::Yarr::RegexGenerator::checkInput): - (JSC::Yarr::RegexGenerator::atEndOfInput): - (JSC::Yarr::RegexGenerator::notAtEndOfInput): - (JSC::Yarr::RegexGenerator::jumpIfCharEquals): - (JSC::Yarr::RegexGenerator::jumpIfCharNotEquals): - (JSC::Yarr::RegexGenerator::readCharacter): - (JSC::Yarr::RegexGenerator::storeToFrame): - (JSC::Yarr::RegexGenerator::loadFromFrame): - (JSC::Yarr::RegexGenerator::TermGenerationState::TermGenerationState): - (JSC::Yarr::RegexGenerator::TermGenerationState::resetAlternative): - (JSC::Yarr::RegexGenerator::TermGenerationState::alternativeValid): - (JSC::Yarr::RegexGenerator::TermGenerationState::nextAlternative): - (JSC::Yarr::RegexGenerator::TermGenerationState::alternative): - (JSC::Yarr::RegexGenerator::TermGenerationState::resetTerm): - (JSC::Yarr::RegexGenerator::TermGenerationState::termValid): - (JSC::Yarr::RegexGenerator::TermGenerationState::nextTerm): - (JSC::Yarr::RegexGenerator::TermGenerationState::term): - (JSC::Yarr::RegexGenerator::TermGenerationState::lookaheadTerm): - (JSC::Yarr::RegexGenerator::TermGenerationState::isSinglePatternCharacterLookaheadTerm): - (JSC::Yarr::RegexGenerator::TermGenerationState::inputOffset): - (JSC::Yarr::RegexGenerator::TermGenerationState::jumpToBacktrack): - (JSC::Yarr::RegexGenerator::TermGenerationState::setBacktrackGenerated): - (JSC::Yarr::RegexGenerator::jumpToBacktrackCheckEmitPending): - (JSC::Yarr::RegexGenerator::genertateAssertionBOL): - (JSC::Yarr::RegexGenerator::genertateAssertionEOL): - (JSC::Yarr::RegexGenerator::matchAssertionWordchar): - (JSC::Yarr::RegexGenerator::genertateAssertionWordBoundary): - (JSC::Yarr::RegexGenerator::genertatePatternCharacterSingle): - (JSC::Yarr::RegexGenerator::genertatePatternCharacterPair): - (JSC::Yarr::RegexGenerator::genertatePatternCharacterFixed): - (JSC::Yarr::RegexGenerator::genertatePatternCharacterGreedy): - (JSC::Yarr::RegexGenerator::genertatePatternCharacterNonGreedy): - (JSC::Yarr::RegexGenerator::genertateCharacterClassSingle): - (JSC::Yarr::RegexGenerator::genertateCharacterClassFixed): - (JSC::Yarr::RegexGenerator::genertateCharacterClassGreedy): - (JSC::Yarr::RegexGenerator::genertateCharacterClassNonGreedy): - (JSC::Yarr::RegexGenerator::generateParenthesesSingleDisjunctionOneAlternative): - (JSC::Yarr::RegexGenerator::generateParenthesesSingle): - (JSC::Yarr::RegexGenerator::generateTerm): - (JSC::Yarr::RegexGenerator::generateDisjunction): - (JSC::Yarr::RegexGenerator::RegexGenerator): - (JSC::Yarr::RegexGenerator::generate): - (JSC::Yarr::jitCompileRegex): - (JSC::Yarr::executeRegex): - * yarr/RegexJIT.h: Added. - (JSC::Yarr::RegexCodeBlock::RegexCodeBlock): - * yarr/RegexParser.h: Added. - (JSC::Yarr::): - (JSC::Yarr::Parser::): - (JSC::Yarr::Parser::CharacterClassParserDelegate::CharacterClassParserDelegate): - (JSC::Yarr::Parser::CharacterClassParserDelegate::begin): - (JSC::Yarr::Parser::CharacterClassParserDelegate::atomPatternCharacterUnescaped): - (JSC::Yarr::Parser::CharacterClassParserDelegate::atomPatternCharacter): - (JSC::Yarr::Parser::CharacterClassParserDelegate::atomBuiltInCharacterClass): - (JSC::Yarr::Parser::CharacterClassParserDelegate::end): - (JSC::Yarr::Parser::CharacterClassParserDelegate::assertionWordBoundary): - (JSC::Yarr::Parser::CharacterClassParserDelegate::atomBackReference): - (JSC::Yarr::Parser::CharacterClassParserDelegate::flush): - (JSC::Yarr::Parser::CharacterClassParserDelegate::): - (JSC::Yarr::Parser::Parser): - (JSC::Yarr::Parser::parseEscape): - (JSC::Yarr::Parser::parseAtomEscape): - (JSC::Yarr::Parser::parseCharacterClassEscape): - (JSC::Yarr::Parser::parseCharacterClass): - (JSC::Yarr::Parser::parseParenthesesBegin): - (JSC::Yarr::Parser::parseParenthesesEnd): - (JSC::Yarr::Parser::parseQuantifier): - (JSC::Yarr::Parser::parseTokens): - (JSC::Yarr::Parser::parse): - (JSC::Yarr::Parser::saveState): - (JSC::Yarr::Parser::restoreState): - (JSC::Yarr::Parser::atEndOfPattern): - (JSC::Yarr::Parser::peek): - (JSC::Yarr::Parser::peekIsDigit): - (JSC::Yarr::Parser::peekDigit): - (JSC::Yarr::Parser::consume): - (JSC::Yarr::Parser::consumeDigit): - (JSC::Yarr::Parser::consumeNumber): - (JSC::Yarr::Parser::consumeOctal): - (JSC::Yarr::Parser::tryConsume): - (JSC::Yarr::Parser::tryConsumeHex): - (JSC::Yarr::parse): - * yarr/RegexPattern.h: Added. - (JSC::Yarr::CharacterRange::CharacterRange): - (JSC::Yarr::): - (JSC::Yarr::PatternTerm::): - (JSC::Yarr::PatternTerm::PatternTerm): - (JSC::Yarr::PatternTerm::BOL): - (JSC::Yarr::PatternTerm::EOL): - (JSC::Yarr::PatternTerm::WordBoundary): - (JSC::Yarr::PatternTerm::invert): - (JSC::Yarr::PatternTerm::capture): - (JSC::Yarr::PatternTerm::quantify): - (JSC::Yarr::PatternAlternative::PatternAlternative): - (JSC::Yarr::PatternAlternative::lastTerm): - (JSC::Yarr::PatternAlternative::removeLastTerm): - (JSC::Yarr::PatternDisjunction::PatternDisjunction): - (JSC::Yarr::PatternDisjunction::~PatternDisjunction): - (JSC::Yarr::PatternDisjunction::addNewAlternative): - (JSC::Yarr::RegexPattern::RegexPattern): - (JSC::Yarr::RegexPattern::~RegexPattern): - (JSC::Yarr::RegexPattern::reset): - (JSC::Yarr::RegexPattern::containsIllegalBackReference): - (JSC::Yarr::RegexPattern::newlineCharacterClass): - (JSC::Yarr::RegexPattern::digitsCharacterClass): - (JSC::Yarr::RegexPattern::spacesCharacterClass): - (JSC::Yarr::RegexPattern::wordcharCharacterClass): - (JSC::Yarr::RegexPattern::nondigitsCharacterClass): - (JSC::Yarr::RegexPattern::nonspacesCharacterClass): - (JSC::Yarr::RegexPattern::nonwordcharCharacterClass): - -2009-04-13 Oliver Hunt - - Reviewed by NOBODY (Missed code from last patch). - - * runtime/InternalFunction.cpp: - (JSC::InternalFunction::displayName): - (JSC::InternalFunction::calculatedDisplayName): - * runtime/InternalFunction.h: - -2009-04-13 Francisco Tolmasky - - Reviewed by Oliver Hunt. - - BUG 25171: It should be possible to manually set the name of an anonymous function - - - This change adds the displayName property to functions, which when set overrides the - normal name when appearing in the console. - - * profiler/Profiler.cpp: - (JSC::createCallIdentifierFromFunctionImp): Changed call to InternalFunction::name to InternalFunction::calculatedDisplayName - * runtime/CommonIdentifiers.h: Added displayName common identifier. - * runtime/InternalFunction.cpp: - (JSC::InternalFunction::displayName): Access to user settable displayName property - (JSC::InternalFunction::calculatedDisplayName): Returns displayName if it exists, if not then the natural name - -2009-04-13 Geoffrey Garen - - Reviewed by Sam Weinig. - - Disabled another JavaScriptCore test because it fails on Windows but - not Mac, so it makes the bots red. - - * tests/mozilla/expected.html: - -2009-04-13 Geoffrey Garen - - Reviewed by Sam Weinig. - - Disabled two JavaScriptCore tests because they fail on Window or Mac but - not both, so they make the bots red. - - * tests/mozilla/expected.html: Updated expected results. - -2009-04-09 Ben Murdoch - - Reviewed by Alexey Proskuryakov. - - https://bugs.webkit.org/show_bug.cgi?id=25091 - The Android platform requires threads to be registered with the VM. - This patch implements this behaviour inside ThreadingPthreads.cpp. - - * wtf/ThreadingPthreads.cpp: Add a level above threadEntryPoint that takes care of (un)registering threads with the VM. - (WTF::runThreadWithRegistration): register the thread and run entryPoint. Unregister the thread afterwards. - (WTF::createThreadInternal): call runThreadWithRegistration instead of entryPoint directly. - -2009-04-09 David Kilzer - - Reinstating Option to turn off SVG DOM Objective-C bindings - - Rolled r42345 back in. The build failure was caused by an - internal script which had not been updated the same way that - build-webkit was updated. - - * Configurations/JavaScriptCore.xcconfig: - -2009-04-09 Alexey Proskuryakov - - Reverting Option to turn off SVG DOM Objective-C bindings. - It broke Mac build, and I don't know how to fix it. - - * Configurations/JavaScriptCore.xcconfig: - -2009-04-09 Xan Lopez - - Unreviewed build fix. - - Checking for __GLIBCXX__ being bigger than some date is not enough - to get std::tr1, C++0x has to be in use too. Add another check for - __GXX_EXPERIMENTAL_CXX0X__. - - * wtf/TypeTraits.h: - -2009-04-08 Oliver Hunt - - Reviewed by Adam Roben. - - Fix assertion failure in function.apply - - The result of excess arguments to function.apply is irrelevant - so we don't need to provide a result register. We were providing - temporary result register but not ref'ing it resulting in an - assertion failure. - - * parser/Nodes.cpp: - (JSC::ApplyFunctionCallDotNode::emitBytecode): - -2009-04-08 David Kilzer - - Option to turn off SVG DOM Objective-C bindings - - Reviewed by Darin Adler and Maciej Stachowiak. - - Introduce the ENABLE_SVG_DOM_OBJC_BINDINGS feature define so - that SVG DOM Objective-C bindings may be optionally disabled. - - * Configurations/JavaScriptCore.xcconfig: Added - ENABLE_SVG_DOM_OBJC_BINDINGS variable and use it in - FEATURE_DEFINES. - -2009-04-08 Paul Pedriana - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=20422 - Allow custom memory allocation control. - - * wtf/FastAllocBase.h: - New added file. Implements allocation base class. - * wtf/TypeTraits.h: - Augments existing type traits support as needed by FastAllocBase. - * wtf/FastMalloc.h: - Changed to support FastMalloc match validation. - * wtf/FastMalloc.cpp: - Changed to support FastMalloc match validation. - * wtf/Platform.h: - Added ENABLE_FAST_MALLOC_MATCH_VALIDATION; defaults to 0. - * GNUmakefile.am: - Updated to include added FastAllocBase.h. - * JavaScriptCore.xcodeproj/project.pbxproj: - Updated to include added FastAllocBase.h. - * JavaScriptCore.vcproj/WTF/WTF.vcproj: - Updated to include added FastAllocBase.h. - -2009-04-07 Oliver Hunt - - Reviewed by Geoff Garen. - - Improve function.apply performance - - Jump through a few hoops to improve performance of function.apply in the general case. - - In the case of zero or one arguments, or if there are only two arguments and the - second is an array literal we treat function.apply as function.call. - - Otherwise we use the new opcodes op_load_varargs and op_call_varargs to do the .apply call - without re-entering the virtual machine. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * bytecode/Opcode.h: - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply): - (JSC::BytecodeGenerator::emitLoadVarargs): - (JSC::BytecodeGenerator::emitCallVarargs): - * bytecompiler/BytecodeGenerator.h: - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - * jit/JIT.h: - * jit/JITCall.cpp: - (JSC::JIT::compileOpCallSetupArgs): - (JSC::JIT::compileOpCallVarargsSetupArgs): - (JSC::JIT::compileOpCallVarargs): - (JSC::JIT::compileOpCallVarargsSlowCase): - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_load_varargs): - * jit/JITStubs.h: - * parser/Grammar.y: - * parser/Nodes.cpp: - (JSC::ArrayNode::isSimpleArray): - (JSC::ArrayNode::toArgumentList): - (JSC::CallFunctionCallDotNode::emitBytecode): - (JSC::ApplyFunctionCallDotNode::emitBytecode): - * parser/Nodes.h: - (JSC::ExpressionNode::): - (JSC::ApplyFunctionCallDotNode::): - * runtime/Arguments.cpp: - (JSC::Arguments::copyToRegisters): - (JSC::Arguments::fillArgList): - * runtime/Arguments.h: - (JSC::Arguments::numProvidedArguments): - * runtime/FunctionPrototype.cpp: - (JSC::FunctionPrototype::addFunctionProperties): - * runtime/FunctionPrototype.h: - * runtime/JSArray.cpp: - (JSC::JSArray::copyToRegisters): - * runtime/JSArray.h: - * runtime/JSGlobalObject.cpp: - (JSC::JSGlobalObject::reset): - (JSC::JSGlobalObject::mark): - * runtime/JSGlobalObject.h: - -2009-04-08 Alexey Proskuryakov - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=25073 - JavaScriptCore tests don't run if time zone is not PST - - * API/tests/testapi.c: - (timeZoneIsPST): Added a function that checks whether the time zone is PST, using the same - method as functions in DateMath.cpp do for formatting the result. - (main): Skip date string format test if the time zone is not PST. - -2009-04-07 David Levin - - Reviewed by Sam Weinig and Geoff Garen. - - https://bugs.webkit.org/show_bug.cgi?id=25039 - UString refactoring to support UChar* sharing. - - No change in sunspider perf. - - * runtime/SmallStrings.cpp: - (JSC::SmallStringsStorage::SmallStringsStorage): - * runtime/UString.cpp: - (JSC::initializeStaticBaseString): - (JSC::initializeUString): - (JSC::UString::BaseString::isShared): - Encapsulate the meaning behind the refcount == 1 checks because - this needs to do slightly more when sharing is added. - (JSC::concatenate): - (JSC::UString::append): - (JSC::UString::operator=): - * runtime/UString.h: - Make m_baseString part of a union to get rid of casts, but make it protected because - it is tricky to use it correctly since it is only valid when the Rep is not a BaseString. - The void* will be filled in when sharing is added. - - Add constructors due to the making members protected and it make ensuring proper - initialization work better (like in SmallStringsStorage). - (JSC::UString::Rep::create): - (JSC::UString::Rep::Rep): - (JSC::UString::Rep::): - (JSC::UString::BaseString::BaseString): - (JSC::UString::Rep::setBaseString): - (JSC::UString::Rep::baseString): - -2009-04-04 Xan Lopez - - Reviewed by Alexey Proskuryakov. - - https://bugs.webkit.org/show_bug.cgi?id=25033 - dtoa.cpp segfaults with g++ 4.4.0 - - g++ 4.4.0 seems to be more strict about aliasing rules, so it - produces incorrect code if dtoa.cpp is compiled with - -fstrict-aliasing (it also emits a ton of warnings, so fair enough - I guess). The problem was that we were only casting variables to - union types in order to do type punning, but GCC and the C - standard require that we actually use a union to store the value. - - This patch does just that, the code is mostly copied from the dtoa - version in GCC: - http://gcc.gnu.org/viewcvs/trunk/libjava/classpath/native/fdlibm/dtoa.c?view=markup. - - * wtf/dtoa.cpp: - (WTF::ulp): - (WTF::b2d): - (WTF::ratio): - (WTF::hexnan): - (WTF::strtod): - (WTF::dtoa): - -2009-04-04 Kevin Ollivier - - wx build fix for Win port. Build the assembler sources to get missing functions. - - * JavaScriptCoreSources.bkl: - * jscore.bkl: - * wtf/Platform.h: - -2009-04-02 Darin Adler - - Reviewed by Kevin Decker. - - crash in GC due to uninitialized callFunction pointer - - * runtime/JSGlobalObject.h: - (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Initialize - callFunction as we do the other data members that are used in the mark function. - -2009-04-02 Yael Aharon - - Reviewed by Simon Hausmann - - https://bugs.webkit.org/show_bug.cgi?id=24490 - - Implement WTF::ThreadSpecific in the Qt build using - QThreadStorage. - - * wtf/ThreadSpecific.h: - -2009-04-01 Greg Bolsinga - - Reviewed by Mark Rowe. - - https://bugs.webkit.org/show_bug.cgi?id=24990 - Put SECTORDER_FLAGS into xcconfig files. - - * Configurations/Base.xcconfig: - * Configurations/DebugRelease.xcconfig: - * JavaScriptCore.xcodeproj/project.pbxproj: - -2009-03-27 Oliver Hunt - - Reviewed by NOBODY (Build fix). - - Fix non-AllInOneFile builds. - - * bytecompiler/BytecodeGenerator.cpp: - -2009-03-27 Oliver Hunt - - Reviewed by Gavin Barraclough. - - Improve performance of Function.prototype.call - - - Optimistically assume that expression.call(..) is going to be a call to - Function.prototype.call, and handle it specially to attempt to reduce the - degree of VM reentrancy. - - When everything goes right this removes the vm reentry improving .call() - by around a factor of 10. - - * JavaScriptCore.xcodeproj/project.pbxproj: - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * bytecode/Opcode.h: - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall): - * bytecompiler/BytecodeGenerator.h: - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - * parser/Grammar.y: - * parser/Nodes.cpp: - (JSC::CallFunctionCallDotNode::emitBytecode): - * parser/Nodes.h: - (JSC::CallFunctionCallDotNode::): - * runtime/FunctionPrototype.cpp: - (JSC::FunctionPrototype::addFunctionProperties): - * runtime/FunctionPrototype.h: - * runtime/JSGlobalObject.cpp: - (JSC::JSGlobalObject::reset): - (JSC::JSGlobalObject::mark): - * runtime/JSGlobalObject.h: - -2009-03-27 Laszlo Gombos - - Reviewed by Darin Adler. - - Bug 24884: Include strings.h for strcasecmp() - https://bugs.webkit.org/show_bug.cgi?id=24884 - - * runtime/DateMath.cpp: Reversed previous change including strings.h - * wtf/StringExtras.h: Include strings.h here is available - -2009-03-26 Adam Roben - - Copy testapi.js to $WebKitOutputDir on Windows - - Part of Bug 24856: run-javascriptcore-tests should run testapi on - Windows - - - This matches what Mac does, which will help once we enable running - testapi from run-javascriptcore-tests on Windows. - - Reviewed by Steve Falkenburg. - - * JavaScriptCore.vcproj/testapi/testapi.vcproj: Copy testapi.js next - to testapi.exe. - -2009-03-25 Oliver Hunt - - Reviewed by Geoff Garen. - - Fix exception handling for instanceof in the interpreter. - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - -2009-03-25 Geoffrey Garen - - Reviewed by Cameron Zwarich. - - Fixed Write to freed memory in JSC::Label::deref - when reloading http://helpme.att.net/speedtest/ - - * bytecompiler/BytecodeGenerator.h: Reversed the declaration order for - m_labelScopes and m_labels to reverse their destruction order. - m_labelScopes has references to memory within m_labels, so its destructor - needs to run first. - -2009-03-24 Eli Fidler - - Reviewed by George Staikos. - - Correct warnings which in some environments are treated as errors. - - * wtf/dtoa.cpp: - (WTF::b2d): - (WTF::d2b): - (WTF::strtod): - (WTF::dtoa): - -2009-03-24 Kevin Ollivier - - Reviewed by Darin Adler. - - Explicitly define HAVE_LANGINFO_H on Darwin. Fixes the wx build bot jscore - test failure. - - https://bugs.webkit.org/show_bug.cgi?id=24780 - - * wtf/Platform.h: - -2009-03-23 Oliver Hunt - - Reviewed by Cameron Zwarich. - - Fix className() for API defined class - - * API/JSCallbackObjectFunctions.h: - (JSC::::className): - * API/tests/testapi.c: - (EmptyObject_class): - (main): - * API/tests/testapi.js: - -2009-03-23 Oliver Hunt - - Reviewed by Geoff Garen. - - Make testapi assertions run in release builds, so that testapi actually - works in a release build. - - Many of the testapi assertions have side effects that are necessary, and - given testapi is a testing program, perf impact of an assertion is not - important, so it makes sense to apply the assertions in release builds - anyway. - - * API/tests/testapi.c: - (EvilExceptionObject_hasInstance): - -2009-03-23 David Kilzer - - Provide JavaScript exception information after slow script timeout - - Reviewed by Oliver Hunt. - - * runtime/Completion.cpp: - (JSC::evaluate): Set the exception object as the Completion - object's value for slow script timeouts. This is used in - WebCore when reporting the exception. - * runtime/ExceptionHelpers.cpp: - (JSC::InterruptedExecutionError::toString): Added. Provides a - description message for the exception when it is reported. - -2009-03-23 Gustavo Noronha Silva and Thadeu Lima de Souza Cascardo - - Reviewed by Adam Roben. - - https://bugs.webkit.org/show_bug.cgi?id=24674 - Crashes in !PLATFORM(MAC)'s formatLocaleDate, in very specific situations - - Make sure strftime never returns 2-digits years to avoid ambiguity - and a crash. We wrap this new code option in HAVE_LANGINFO_H, - since it is apparently not available in all platforms. - - * runtime/DatePrototype.cpp: - (JSC::formatLocaleDate): - * wtf/Platform.h: - -2009-03-22 Oliver Hunt - - Reviewed by Cameron Zwarich. - - Fix exception handling in API - - We can't just use the ExecState exception slot for returning exceptions - from class introspection functions provided through the API as many JSC - functions will explicitly clear the ExecState exception when returning. - - * API/JSCallbackObjectFunctions.h: - (JSC::JSCallbackObject::getOwnPropertySlot): - (JSC::JSCallbackObject::put): - (JSC::JSCallbackObject::deleteProperty): - (JSC::JSCallbackObject::construct): - (JSC::JSCallbackObject::hasInstance): - (JSC::JSCallbackObject::call): - (JSC::JSCallbackObject::toNumber): - (JSC::JSCallbackObject::toString): - (JSC::JSCallbackObject::staticValueGetter): - (JSC::JSCallbackObject::callbackGetter): - * API/tests/testapi.c: - (MyObject_hasProperty): - (MyObject_getProperty): - (MyObject_setProperty): - (MyObject_deleteProperty): - (MyObject_callAsFunction): - (MyObject_callAsConstructor): - (MyObject_hasInstance): - (EvilExceptionObject_hasInstance): - (EvilExceptionObject_convertToType): - (EvilExceptionObject_class): - (main): - * API/tests/testapi.js: - (EvilExceptionObject.hasInstance): - (EvilExceptionObject.toNumber): - (EvilExceptionObject.toStringExplicit): - -2009-03-21 Cameron Zwarich - - Reviewed by Oliver Hunt. - - Bug 20049: testapi failure: MyObject - 0 should be NaN but instead is 1. - - - - In this case, the test is wrong. According to the ECMA spec, subtraction - uses ToNumber, not ToPrimitive. Change the test to match the spec. - - * API/tests/testapi.js: - -2009-03-21 Oliver Hunt - - Reviewed by Cameron Zwarich. - - Ensure that JSObjectMakeFunction doesn't produce incorrect line numbers. - - Also make test api correctly propagate failures. - - * API/tests/testapi.c: - (main): - * runtime/FunctionConstructor.cpp: - (JSC::constructFunction): - -2009-03-21 Oliver Hunt - - Reviewed by Mark Rowe. - - Improve testapi by making it report failures in a way we can pick up - from our test scripts. - - * API/tests/testapi.c: - (assertEqualsAsBoolean): - (assertEqualsAsNumber): - (assertEqualsAsUTF8String): - (assertEqualsAsCharactersPtr): - (main): - * API/tests/testapi.js: - (pass): - (fail): - (shouldBe): - (shouldThrow): - -2009-03-20 Norbert Leser - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=24535 - - Fixes missing line terminator character (;) after macro call. - It is common practice to add the trailing ";" where macros are substituted - and not where they are defined with #define. - This change is consistent with other macro declarations across webkit, - and it also solves compilation failure with symbian compilers. - - * runtime/UString.cpp: - * wtf/Assertions.h: - -2009-03-20 Geoffrey Garen - - Reviewed by Darin Adler. - - Fixed a JavaScriptCore crash on the Windows buildbot. - - * bytecompiler/BytecodeGenerator.h: Reduced the AST recursion limit. - Apparently, Windows has small stacks. - -2009-03-20 Geoffrey Garen - - Reviewed by Oliver Hunt. - - A little cleanup in the RegisterFile code. - - Moved large inline functions out of the class declaration, to make it - more readable. - - Switched over to using the roundUpAllocationSize function to avoid - duplicate code and subtle bugs. - - Renamed m_maxCommitted to m_commitEnd, to match m_end. - - Renamed allocationSize to commitSize because it's the chunk size for - committing memory, not allocating memory. - - SunSpider reports no change. - - * interpreter/RegisterFile.h: - (JSC::RegisterFile::RegisterFile): - (JSC::RegisterFile::shrink): - (JSC::RegisterFile::grow): - * jit/ExecutableAllocator.h: - (JSC::roundUpAllocationSize): - -2009-03-19 Geoffrey Garen - - Reviewed by Oliver Hunt. - - Fixed -- a little bit of hardening in the Collector. - - SunSpider reports no change. I also verified in the disassembly that - we end up with a single compare to constant. - - * runtime/Collector.cpp: - (JSC::Heap::heapAllocate): - -2009-03-19 Geoffrey Garen - - Reviewed by Cameron Zwarich and Oliver Hunt. - - Fixed REGRESSION: Stack overflow on PowerPC on - fast/workers/use-machine-stack.html (22531) - - Dialed down the re-entry allowance to 64 (from 128). - - On a 512K stack, this leaves about 64K for other code on the stack while - JavaScript is running. Not perfect, but it solves our crash on PPC. - - Different platforms may want to dial this down even more. - - Also, substantially shrunk BytecodeGenerator. Since we allocate one on - the stack in order to throw a stack overflow exception -- well, let's - just say the old code had an appreciation for irony. - - SunSpider reports no change. - - * bytecompiler/BytecodeGenerator.h: - * interpreter/Interpreter.h: - (JSC::): - -2009-03-19 Cameron Zwarich - - Reviewed by Oliver Hunt. - - Bug 24350: REGRESSION: Safari 4 breaks SPAW wysiwyg editor multiple instances - - - - The SPAW editor's JavaScript assumes that toString() on a function - constructed with the Function constructor produces a function with - a newline after the opening brace. - - * runtime/FunctionConstructor.cpp: - (JSC::constructFunction): Add a newline after the opening brace of the - function's source code. - -2009-03-19 Cameron Zwarich - - Reviewed by Geoff Garen. - - Bug 23771: REGRESSION (r36016): JSObjectHasProperty freezes on global class without kJSClassAttributeNoAutomaticPrototype - - - - * API/tests/testapi.c: - (main): Add a test for this bug. - * runtime/JSGlobalObject.cpp: - (JSC::JSGlobalObject::resetPrototype): Don't set the prototype of the - last object in the prototype chain to the object prototype when the - object prototype is already the last object in the prototype chain. - -2009-03-19 Timothy Hatcher - - -[WebView scheduleInRunLoop:forMode:] has no affect on timers - - Reviewed by Darin Adler. - - * wtf/Platform.h: Added HAVE_RUNLOOP_TIMER for PLATFORM(MAC). - -2009-03-19 Geoffrey Garen - - Reviewed by Oliver Hunt. - - Fixed Regular expression run-time complexity - limit too low for long inputs (21485) - - I raised PCRE's "matchLimit" (limit on backtracking) by an order of - magnitude. This fixes all the reported examples of timing out on legitimate - regular expression matches. - - In my testing on a Core Duo MacBook Pro, the longest you can get stuck - trying to match a string is still under 1s, so this seems like a safe change. - - I can think of a number of better solutions that are more complicated, - but this is a good improvement for now. - - * pcre/pcre_exec.cpp: - -2009-03-19 Geoffrey Garen - - Reviewed by Sam Weinig. - - Fixed REGRESSION (Safari 4): regular expression - pattern size limit lower than Safari 3.2, other browsers, breaks SAP (14873) - - Bumped the pattern size limit to 1MB, and standardized it between PCRE - and WREC. (Empirical testing says that we can easily compile a 1MB regular - expression without risking a hang. Other browsers support bigger regular - expressions, but also hang.) - - SunSpider reports no change. - - I started with a patch posted to Bugzilla by Erik Corry (erikcorry@google.com). - - * pcre/pcre_internal.h: - (put3ByteValue): - (get3ByteValue): - (put3ByteValueAndAdvance): - (putLinkValueAllowZero): - (getLinkValueAllowZero): Made PCRE's "LINK_SIZE" (the number of bytes - used to record jumps between bytecodes) 3, to accomodate larger potential - jumps. Bumped PCRE's "MAX_PATTERN_SIZE" to 1MB. (Technically, at this - LINK_SIZE, we can support even larger patterns, but we risk a hang during - compilation, and it's not clear that such large patterns are important - on the web.) - - * wrec/WREC.cpp: - (JSC::WREC::Generator::compileRegExp): Match PCRE's maximum pattern size, - to avoid quirks between platforms. - -2009-03-18 Ada Chan - - Rolling out r41818 since it broke the windows build. - Error: ..\..\runtime\DatePrototype.cpp(30) : fatal error C1083: Cannot open include file: 'langinfo.h': No such file or directory - - * runtime/DatePrototype.cpp: - (JSC::formatLocaleDate): - -2009-03-17 Oliver Hunt - - Reviewed by Cameron Zwarich. - - REGRESSION (Safari 4): Incorrect function return value when using IE "try ... finally" memory leak work-around (24654) - - - If the return value for a function is in a local register we need - to copy it before executing any finalisers, otherwise it is possible - for the finaliser to clobber the result. - - * bytecompiler/BytecodeGenerator.h: - (JSC::BytecodeGenerator::hasFinaliser): - * parser/Nodes.cpp: - (JSC::ReturnNode::emitBytecode): - -2009-03-17 Kevin Ollivier - - Reviewed by Mark Rowe. - - Move BUILDING_ON_* defines into Platform.h to make them available to other ports. - Also tweak the defines so that they work with the default values set by - AvailabilityMacros.h. - - https://bugs.webkit.org/show_bug.cgi?id=24630 - - * JavaScriptCorePrefix.h: - * wtf/Platform.h: - -2009-03-15 Simon Fraser - - Revert r41718 because it broke DumpRenderTree on Tiger. - - * JavaScriptCorePrefix.h: - * wtf/Platform.h: - -2009-03-15 Kevin Ollivier - - Non-Apple Mac ports build fix. Move defines for the BUILDING_ON_ macros into - Platform.h so that they're defined for all ports building on Mac, and tweak - the definitions of those macros based on Mark Rowe's suggestions to accomodate - cases where the values may not be <= to the .0 release for that version. - - * JavaScriptCorePrefix.h: - * wtf/Platform.h: - -2009-03-13 Mark Rowe - - Rubber-stamped by Dan Bernstein. - - Take advantage of the ability of recent versions of Xcode to easily switch the active - architecture. - - * Configurations/DebugRelease.xcconfig: - -2009-03-13 Mark Rowe - - Reviewed by David Kilzer. - - Prevent AllInOneFile.cpp and ProfileGenerator.cpp from rebuilding unnecessarily when - switching between building in Xcode and via build-webkit. - - build-webkit passes FEATURE_DEFINES to xcodebuild, resulting in it being present in the - Derived Sources build settings. When building in Xcode, this setting isn't present so - Xcode reruns the script build phases. This results in a new version of TracingDtrace.h - being generated, and the files that include it being rebuilt. - - * JavaScriptCore.xcodeproj/project.pbxproj: Don't regenerate TracingDtrace.h if it is - already newer than the input file. - -2009-03-13 Norbert Leser - - Reviewed by Darin Adler. - - Resolved name conflict with globally defined tzname in Symbian. - Replaced with different name instead of using namespace qualifier - (appeared to be less clumsy). - - * runtime/DateMath.cpp: - -2009-03-12 Mark Rowe - - Reviewed by Darin Adler. - - TCMalloc_SystemRelease should use madvise rather than re-mmaping span of pages - - * wtf/FastMalloc.cpp: - (WTF::mergeDecommittedStates): If either of the spans has been released to the system, release the other - span as well so that the flag in the merged span is accurate. - * wtf/Platform.h: - * wtf/TCSystemAlloc.cpp: Track decommitted spans when using MADV_FREE_REUSABLE / MADV_FREE_REUSE. - (TCMalloc_SystemRelease): Use madvise with MADV_FREE_REUSABLE when it is available. - (TCMalloc_SystemCommit): Use madvise with MADV_FREE_REUSE when it is available. - * wtf/TCSystemAlloc.h: - -2009-03-12 Adam Treat - - Reviewed by NOBODY (Build fix). - - Include string.h for strlen usage. - - * wtf/Threading.cpp: - -2009-03-12 David Kilzer - - Add NO_RETURN attribute to runInteractive() when not using readline - - Reviewed by Darin Adler. - - * jsc.cpp: - (runInteractive): If the readline library is not used, this method - will never return, thus the NO_RETURN attribute is needed to prevent - a gcc warning. - -2009-03-12 Adam Roben - - Adopt setThreadNameInternal on Windows - - Also changed a Windows-only assertion about thread name length to an - all-platform log message. - - Reviewed by Adam Treat. - - * wtf/Threading.cpp: - (WTF::createThread): Warn if the thread name is longer than 31 - characters, as Visual Studio will truncate names longer than that - length. - - * wtf/ThreadingWin.cpp: - (WTF::setThreadNameInternal): Renamed from setThreadName and changed - to always operate on the current thread. - (WTF::initializeThreading): Changed to use setThreadNameInternal. - (WTF::createThreadInternal): Removed call to setThreadName. This is - now handled by threadEntryPoint and setThreadNameInternal. - -2009-03-11 David Kilzer - - Clarify comments regarding order of FEATURE_DEFINES - - Rubber-stamped by Mark Rowe. - - * Configurations/JavaScriptCore.xcconfig: Added warning about - the consequences when FEATURE_DEFINES are not kept in sync. - -2009-03-11 Dan Bernstein - - Reviewed by Darin Adler. - - - WTF support for fixing Thai text selection - in Safari is incorrect - - * wtf/unicode/icu/UnicodeIcu.h: - (WTF::Unicode::hasLineBreakingPropertyComplexContext): Added. Returns - whether the character has Unicode line breaking property value SA - ("Complex Context"). - * wtf/unicode/qt4/UnicodeQt4.h: - (WTF::Unicode::hasLineBreakingPropertyComplexContext): Added an - implementation that always returns false. - -2009-03-11 Darin Adler - - Reviewed by Mark Rowe. - - Give threads names on platforms with pthread_setname_np. - - * wtf/Threading.cpp: - (WTF::NewThreadContext::NewThreadContext): Initialize thread name. - (WTF::threadEntryPoint): Call setThreadNameInternal. - (WTF::createThread): Pass thread name. - - * wtf/Threading.h: Added new comments, setThreadNameInternal. - - * wtf/ThreadingGtk.cpp: - (WTF::setThreadNameInternal): Added. Empty. - * wtf/ThreadingNone.cpp: - (WTF::setThreadNameInternal): Added. Empty. - * wtf/ThreadingPthreads.cpp: - (WTF::setThreadNameInternal): Call pthread_setname_np when available. - * wtf/ThreadingQt.cpp: - (WTF::setThreadNameInternal): Added. Empty. - * wtf/ThreadingWin.cpp: - (WTF::setThreadNameInternal): Added. Empty. - -2009-03-11 Adam Roben - - Change the Windows implementation of ThreadSpecific to use functions - instead of extern globals - - This will make it easier to export ThreadSpecific from WebKit. - - Reviewed by John Sullivan. - - * API/JSBase.cpp: - (JSEvaluateScript): - Touched this file to force ThreadSpecific.h to be copied into - $WebKitOutputDir. - - * wtf/ThreadSpecific.h: Replaced g_tls_key_count with tlsKeyCount() - and g_tls_keys with tlsKeys(). - - (WTF::::ThreadSpecific): - (WTF::::~ThreadSpecific): - (WTF::::get): - (WTF::::set): - (WTF::::destroy): - Updated to use the new functions. - - * wtf/ThreadSpecificWin.cpp: - (WTF::tlsKeyCount): - (WTF::tlsKeys): - Added. - - (WTF::ThreadSpecificThreadExit): Changed to use the new functions. - -2009-03-10 Cameron Zwarich - - Reviewed by Geoff Garen. - - Bug 24291: REGRESSION (r38635): Single line JavaScript comment prevents HTML button click handler execution - - - - Add an extra newline to the end of the body of the program text constructed - by the Function constructor for parsing. This allows single line comments to - be handled correctly by the parser. - - * runtime/FunctionConstructor.cpp: - (JSC::constructFunction): - -2009-03-09 Oliver Hunt - - Reviewed by Gavin Barraclough. - - Bug 24447: REGRESSION (r41508): Google Maps does not complete initialization - - - r41508 actually exposed a pre-existing bug where we were not invalidating the result - register cache at jump targets. This causes problems when condition loads occur in an - expression -- namely through the ?: and || operators. This patch corrects these issues - by marking the target of all forward jumps as being a jump target, and then clears the - result register cache when ever it starts generating code for a targeted instruction. - - I do not believe it is possible to cause this class of failure outside of a single - expression, and expressions only provide forward branches, so this should resolve this - entire class of bug. That said i've included a test case that gets as close as possible - to hitting this bug with a back branch, to hopefully prevent anyone from introducing the - problem in future. - - * assembler/AbstractMacroAssembler.h: - (JSC::AbstractMacroAssembler::Label::isUsed): - (JSC::AbstractMacroAssembler::Label::used): - * assembler/X86Assembler.h: - (JSC::X86Assembler::JmpDst::JmpDst): - (JSC::X86Assembler::JmpDst::isUsed): - (JSC::X86Assembler::JmpDst::used): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - -2009-03-09 David Levin - - Reviewed by Darin Adler. - - Bug 23175: String and UString should be able to share a UChar* buffer. - - - Add CrossThreadRefCounted. - - * wtf/CrossThreadRefCounted.h: Added. - (WTF::CrossThreadRefCounted::create): - (WTF::CrossThreadRefCounted::isShared): - (WTF::CrossThreadRefCounted::dataAccessMustBeThreadSafe): - (WTF::CrossThreadRefCounted::mayBePassedToAnotherThread): - (WTF::CrossThreadRefCounted::CrossThreadRefCounted): - (WTF::CrossThreadRefCounted::~CrossThreadRefCounted): - (WTF::CrossThreadRefCounted::ref): - (WTF::CrossThreadRefCounted::deref): - (WTF::CrossThreadRefCounted::release): - (WTF::CrossThreadRefCounted::copy): - (WTF::CrossThreadRefCounted::threadSafeDeref): - * wtf/RefCounted.h: - * wtf/Threading.h: - (WTF::ThreadSafeSharedBase::ThreadSafeSharedBase): - (WTF::ThreadSafeSharedBase::derefBase): - (WTF::ThreadSafeShared::ThreadSafeShared): - (WTF::ThreadSafeShared::deref): - -2009-03-09 Laszlo Gombos - - Reviewed by George Staikos. - - https://bugs.webkit.org/show_bug.cgi?id=24353 - Allow to overrule default build options for Qt build. - - * JavaScriptCore.pri: Allow to overrule ENABLE_JIT - -2009-03-08 Oliver Hunt - - Reviewed by NOBODY (build fix). - - Build fix. - - * runtime/ArrayPrototype.cpp: - (JSC::arrayProtoFuncConcat): - -2009-03-01 Oliver Hunt - - Reviewed by Cameron Zwarich. - - Bug 24268: RuntimeArray is not a fully implemented JSArray - - - Don't cast a type to JSArray, just because it reportsArray as a supertype - in the JS type system. Doesn't appear feasible to create a testcase - unfortunately as setting up the failure conditions requires internal access - to JSC not present in DRT. - - * runtime/ArrayPrototype.cpp: - (JSC::arrayProtoFuncConcat): - -2009-03-06 Gavin Barraclough - - Reviewed by Oliver Hunt. - - When preforming an op_mov, preserve any existing register mapping. - - ~0.5% progression on v8 tests x86-64. - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - -2009-03-05 Simone Fiorentino - - Bug 24382: request to add SH4 platform - - - - Reviewed by David Kilzer. - - * wtf/Platform.h: Added support for SH4 platform. - -2009-03-05 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Writes of constant values to SF registers should be made with direct memory - writes where possible, rather than moving the value via a hardware register. - - ~3% win on SunSpider tests on x86, ~1.5% win on v8 tests on x86-64. - - * assembler/MacroAssemblerX86_64.h: - (JSC::MacroAssemblerX86_64::storePtr): - * assembler/X86Assembler.h: - (JSC::X86Assembler::movq_i32m): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - -2009-03-05 Mark Rowe - - Fix the build. - - Sprinkle "static" around NumberConstructor.cpp in order to please the compiler. - - * runtime/NumberConstructor.cpp: - (JSC::numberConstructorNaNValue): - (JSC::numberConstructorNegInfinity): - (JSC::numberConstructorPosInfinity): - (JSC::numberConstructorMaxValue): - (JSC::numberConstructorMinValue): - -2009-03-04 Mark Rowe - - Reviewed by Oliver Hunt. - - FastMallocZone's enumeration code reports fragmented administration space - - The handling of MALLOC_ADMIN_REGION_RANGE_TYPE in FastMalloc's zone was incorrect. It was attempting - to record the memory containing and individual span as an administrative region, when all memory - allocated via MetaDataAlloc should in fact be recorded. This was causing memory regions allocated - via MetaDataAlloc to appear as "VM_ALLOCATE ?" in vmmap output. They are now correctly reported as - "MALLOC_OTHER" regions associated with the JavaScriptCore FastMalloc zone. - - Memory is allocated via MetaDataAlloc from two locations: PageHeapAllocator, and TCMalloc_PageMap{2,3}. - These two cases are handled differently. - - PageHeapAllocator is extended to keep a linked list of memory regions that it has allocated. The - first object in an allocated region contains the link to the previously allocated region. To record - the administrative regions of a PageHeapAllocator we can simply walk the linked list and record - each allocated region we encounter. - - TCMalloc_PageMaps allocate memory via MetaDataAlloc to store each level of the radix tree. To record - the administrative regions of a TCMalloc_PageMap we walk the tree and record the storage used for nodes - at each position rather than the nodes themselves. - - A small performance improvement is achieved by coalescing adjacent memory regions inside the PageMapMemoryUsageRecorder - so that fewer calls in to the range recorder are necessary. We further reduce the number of calls to the - range recorder by aggregating the in-use ranges of a given memory region into a local buffer before recording - them with a single call. A similar approach is also used by AdminRegionRecorder. - - * wtf/FastMalloc.cpp: - (WTF::PageHeapAllocator::Init): - (WTF::PageHeapAllocator::New): - (WTF::PageHeapAllocator::recordAdministrativeRegions): - (WTF::TCMallocStats::FreeObjectFinder::isFreeObject): - (WTF::TCMallocStats::PageMapMemoryUsageRecorder::~PageMapMemoryUsageRecorder): - (WTF::TCMallocStats::PageMapMemoryUsageRecorder::recordPendingRegions): - (WTF::TCMallocStats::PageMapMemoryUsageRecorder::visit): - (WTF::TCMallocStats::AdminRegionRecorder::AdminRegionRecorder): - (WTF::TCMallocStats::AdminRegionRecorder::recordRegion): - (WTF::TCMallocStats::AdminRegionRecorder::visit): - (WTF::TCMallocStats::AdminRegionRecorder::recordPendingRegions): - (WTF::TCMallocStats::AdminRegionRecorder::~AdminRegionRecorder): - (WTF::TCMallocStats::FastMallocZone::enumerate): - (WTF::TCMallocStats::FastMallocZone::FastMallocZone): - (WTF::TCMallocStats::FastMallocZone::init): - * wtf/TCPageMap.h: - (TCMalloc_PageMap2::visitValues): - (TCMalloc_PageMap2::visitAllocations): - (TCMalloc_PageMap3::visitValues): - (TCMalloc_PageMap3::visitAllocations): - -2009-03-04 Antti Koivisto - - Reviewed by Dave Hyatt. - - https://bugs.webkit.org/show_bug.cgi?id=24359 - Repaint throttling mechanism - - Set ENABLE_REPAINT_THROTTLING to 0 by default. - - * wtf/Platform.h: - -2009-03-03 David Kilzer - - WebCore and WebKit should install the same set of headers during installhdrs phase as build phase - - Reviewed by Mark Rowe. - - * Configurations/Base.xcconfig: Defined REAL_PLATFORM_NAME based - on PLATFORM_NAME to work around the missing definition on Tiger. - Updated HAVE_DTRACE to use REAL_PLATFORM_NAME. - -2009-03-03 Kevin McCullough - - Reviewed by Oliver Hunt. - - console.profile() doesn't work without a title - - * profiler/Profiler.cpp: - (JSC::Profiler::startProfiling): assert if there is not title to ensure - we don't start profiling without one. - -2009-03-02 Sam Weinig - - Reviewed by Mark Rowe. - - Enable Geolocation (except on Tiger and Leopard). - - * Configurations/JavaScriptCore.xcconfig: - -2009-03-01 David Kilzer - - Move HAVE_DTRACE check to Base.xcconfig - - Reviewed by Mark Rowe. - - * Configurations/Base.xcconfig: Set HAVE_DTRACE Xcode variable - based on PLATFORM_NAME and MAC_OS_X_VERSION_MAJOR. Also define - it as a preprocessor macro by modifying - GCC_PREPROCESSOR_DEFINITIONS. - * JavaScriptCore.xcodeproj/project.pbxproj: Changed "Generate - DTrace header" script phase to check for HAVE_DTRACE instead of - MACOSX_DEPLOYMENT_TARGET. - * wtf/Platform.h: Removed definition of HAVE_DTRACE macro since - it's defined in Base.xcconfig now. - -2009-03-01 Horia Olaru - - By looking in grammar.y there are only a few types of statement nodes - on which the debugger should stop. - - Removed isBlock and isLoop virtual calls. No need to emit debug hooks in - the "statementListEmitCode" method as long as the necessary hooks can be - added in each "emitCode". - - https://bugs.webkit.org/show_bug.cgi?id=21073 - - Reviewed by Kevin McCullough. - - * parser/Nodes.cpp: - (JSC::ConstStatementNode::emitBytecode): - (JSC::statementListEmitCode): - (JSC::EmptyStatementNode::emitBytecode): - (JSC::ExprStatementNode::emitBytecode): - (JSC::VarStatementNode::emitBytecode): - (JSC::IfNode::emitBytecode): - (JSC::IfElseNode::emitBytecode): - (JSC::DoWhileNode::emitBytecode): - (JSC::WhileNode::emitBytecode): - (JSC::ForNode::emitBytecode): - (JSC::ForInNode::emitBytecode): - (JSC::ContinueNode::emitBytecode): - (JSC::BreakNode::emitBytecode): - (JSC::ReturnNode::emitBytecode): - (JSC::WithNode::emitBytecode): - (JSC::SwitchNode::emitBytecode): - (JSC::LabelNode::emitBytecode): - (JSC::ThrowNode::emitBytecode): - (JSC::TryNode::emitBytecode): - * parser/Nodes.h: - -2009-02-26 Gavin Barraclough - - Reviewed by Geoff Garen. - - Fix bug #23614. Switches on double precision values were incorrectly - truncating the scrutinee value. E.g.: - - switch (1.1) { case 1: print("FAIL"); } - - Was resulting in FAIL. - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_switch_imm): - -2009-02-26 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Integer Immediate representation need not be canonical in x86 JIT code. - On x86-64 we already have loosened the requirement that the int immediate - representation in canonical, we should bring x86 into line. - - This patch is a minor (~0.5%) improvement on sunspider & v8-tests, and - should reduce memory footoprint (reduces JIT code size). - - * jit/JIT.cpp: - (JSC::JIT::compileOpStrictEq): - (JSC::JIT::privateCompileSlowCases): - * jit/JIT.h: - (JSC::JIT::emitJumpIfImmediateNumber): - (JSC::JIT::emitJumpIfNotImmediateNumber): - * jit/JITArithmetic.cpp: - (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): - (JSC::JIT::compileBinaryArithOp): - -2009-02-26 Carol Szabo - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=24099 - ARM Compiler Warnings in pcre_exec.cpp - - * pcre/pcre_exec.cpp: - (match): - -2009-02-25 Cameron Zwarich - - Reviewed by Gavin Barraclough. - - Bug 24086: Regression (r40993): WebKit crashes after logging in to lists.zenbe - - - - The numeric sort optimization in r40993 generated bytecode for a function - without generating JIT code. This breaks an assumption in some parts of - the JIT's function calling logic that the presence of a CodeBlock implies - the existence of JIT code. - - In order to fix this, we simply generate JIT code whenever we check whether - a function is a numeric sort function. This only incurs an additional cost - in the case when the function is a numeric sort function, in which case it - is not expensive to generate JIT code for it. - - * runtime/ArrayPrototype.cpp: - (JSC::isNumericCompareFunction): - -2009-02-25 Geoffrey Garen - - Reviewed by Maciej Stachowiak. - - Fixed REGRESSION (r36701): Unable to select - messages on hotmail (24052) - - The bug was that for-in enumeration used a cached prototype chain without - validating that it was up-to-date. - - This led me to refactor prototype chain caching so it was easier to work - with and harder to get wrong. - - After a bit of inlining, this patch is performance-neutral on SunSpider - and the v8 benchmarks. - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::tryCachePutByID): - (JSC::Interpreter::tryCacheGetByID): - * jit/JITStubs.cpp: - (JSC::JITStubs::tryCachePutByID): - (JSC::JITStubs::tryCacheGetByID): - (JSC::JITStubs::cti_op_get_by_id_proto_list): Use the new refactored goodness. See - lines beginning with "-" and smile. - - * runtime/JSGlobalObject.h: - (JSC::Structure::prototypeForLookup): A shout out to const. - - * runtime/JSPropertyNameIterator.h: - (JSC::JSPropertyNameIterator::next): We can use a pointer comparison to - see if our cached structure chain is equal to the object's structure chain, - since in the case of a cache hit, we share references to the same structure - chain. - - * runtime/Operations.h: - (JSC::countPrototypeChainEntriesAndCheckForProxies): Use the new refactored - goodness. - - * runtime/PropertyNameArray.h: - (JSC::PropertyNameArray::PropertyNameArray): - (JSC::PropertyNameArray::setShouldCache): - (JSC::PropertyNameArray::shouldCache): Renamed "cacheable" to "shouldCache" - to communicate that the client is specifying a recommendation, not a - capability. - - * runtime/Structure.cpp: - (JSC::Structure::Structure): No need to initialize a RefPtr. - (JSC::Structure::getEnumerablePropertyNames): Moved some code into helper - functions. - - (JSC::Structure::prototypeChain): New centralized accessor for a prototype - chain. Revalidates on every access, since the objects in the prototype - chain may have mutated. - - (JSC::Structure::isValid): Helper function for revalidating a cached - prototype chain. - - (JSC::Structure::getEnumerableNamesFromPropertyTable): - (JSC::Structure::getEnumerableNamesFromClassInfoTable): Factored out of - getEnumerablePropertyNames. - - * runtime/Structure.h: - - * runtime/StructureChain.cpp: - (JSC::StructureChain::StructureChain): - * runtime/StructureChain.h: - (JSC::StructureChain::create): No need for structureChainsAreEqual, since - we use pointer equality now. Refactored StructureChain to make a little - more sense and eliminate special cases for null prototypes. - -2009-02-25 Steve Falkenburg - - Use timeBeginPeriod to enable timing resolution greater than 16ms in command line jsc for Windows. - Allows more accurate reporting of benchmark times via command line jsc.exe. Doesn't affect WebKit's use of JavaScriptCore. - - Reviewed by Adam Roben. - - * jsc.cpp: - (main): - -2009-02-24 Geoffrey Garen - - Build fix? - - * GNUmakefile.am: - -2009-02-24 Mark Rowe - - Reviewed by Oliver Hunt. - - Rename AVAILABLE_AFTER_WEBKIT_VERSION_3_1 (etc.) to match the other macros - - * API/JSBasePrivate.h: - * API/JSContextRef.h: - * API/JSObjectRef.h: - * API/WebKitAvailability.h: - -2009-02-23 Geoffrey Garen - - Reviewed by Sam Weinig. - - Next step in splitting JIT functionality out of the Interpreter class: - Moved vptr storage from Interpreter to JSGlobalData, so it could be shared - between Interpreter and JITStubs, and moved the *Trampoline JIT stubs - into the JITStubs class. Also added a VPtrSet class to encapsulate vptr - hacks during JSGlobalData initialization. - - SunSpider says 0.4% faster. Meh. - - * JavaScriptCore.exp: - * JavaScriptCore.xcodeproj/project.pbxproj: - * interpreter/Interpreter.cpp: - (JSC::Interpreter::Interpreter): - (JSC::Interpreter::tryCacheGetByID): - (JSC::Interpreter::privateExecute): - * interpreter/Interpreter.h: - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompile): - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JIT.h: - (JSC::JIT::compileCTIMachineTrampolines): - * jit/JITCall.cpp: - (JSC::JIT::compileOpCall): - (JSC::JIT::compileOpCallSlowCase): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompilePatchGetArrayLength): - * jit/JITStubs.cpp: - (JSC::JITStubs::JITStubs): - (JSC::JITStubs::tryCacheGetByID): - (JSC::JITStubs::cti_vm_dontLazyLinkCall): - (JSC::JITStubs::cti_op_get_by_val): - (JSC::JITStubs::cti_op_get_by_val_byte_array): - (JSC::JITStubs::cti_op_put_by_val): - (JSC::JITStubs::cti_op_put_by_val_array): - (JSC::JITStubs::cti_op_put_by_val_byte_array): - (JSC::JITStubs::cti_op_is_string): - * jit/JITStubs.h: - (JSC::JITStubs::ctiArrayLengthTrampoline): - (JSC::JITStubs::ctiStringLengthTrampoline): - (JSC::JITStubs::ctiVirtualCallPreLink): - (JSC::JITStubs::ctiVirtualCallLink): - (JSC::JITStubs::ctiVirtualCall): - * runtime/ArrayPrototype.cpp: - (JSC::arrayProtoFuncPop): - (JSC::arrayProtoFuncPush): - * runtime/FunctionPrototype.cpp: - (JSC::functionProtoFuncApply): - * runtime/JSArray.h: - (JSC::isJSArray): - * runtime/JSByteArray.h: - (JSC::asByteArray): - (JSC::isJSByteArray): - * runtime/JSCell.h: - * runtime/JSFunction.h: - * runtime/JSGlobalData.cpp: - (JSC::VPtrSet::VPtrSet): - (JSC::JSGlobalData::JSGlobalData): - (JSC::JSGlobalData::create): - (JSC::JSGlobalData::sharedInstance): - * runtime/JSGlobalData.h: - * runtime/JSString.h: - (JSC::isJSString): - * runtime/Operations.h: - (JSC::jsLess): - (JSC::jsLessEq): - * wrec/WREC.cpp: - (JSC::WREC::Generator::compileRegExp): - -2009-02-23 Csaba Osztrogonac - - Reviewed by Oliver Hunt. - - Bug 23787: Allow JIT to generate SSE2 code if using GCC - - - GCC version of the cpuid check. - - * jit/JITArithmetic.cpp: - (JSC::isSSE2Present): previous assembly code fixed. - -2009-02-23 David Levin - - Reviewed by Alexey Proskuryakov. - - Bug 24047: Need to simplify nested if's in WorkerRunLoop::runInMode - - - * wtf/MessageQueue.h: - (WTF::MessageQueue::infiniteTime): - Allows for one to call waitForMessageFilteredWithTimeout and wait forever. - - (WTF::MessageQueue::alwaysTruePredicate): - (WTF::MessageQueue::waitForMessage): - Made waitForMessage call waitForMessageFilteredWithTimeout, so that there is less - duplicate code. - - (WTF::MessageQueue::waitForMessageFilteredWithTimeout): - - * wtf/ThreadingQt.cpp: - (WTF::ThreadCondition::timedWait): - * wtf/ThreadingWin.cpp: - (WTF::ThreadCondition::timedWait): - Made these two implementations consistent with the pthread and gtk implementations. - Currently, the time calculations would overflow when passed large values. - -2009-02-23 Jeremy Moskovich - - Reviewed by Adam Roben. - - https://bugs.webkit.org/show_bug.cgi?id=24096 - PLATFORM(MAC)->PLATFORM(CF) since we want to use the CF functions in Chrome on OS X. - - * wtf/CurrentTime.cpp: - -2009-02-22 Geoffrey Garen - - Build fix? - - * GNUmakefile.am: - -2009-02-22 Geoffrey Garen - - Build fix. - - * GNUmakefile.am: - -2009-02-22 Geoffrey Garen - - Reviewed by Sam Weinig. - - Next step in splitting JIT functionality out of the Interpreter class: - Created a JITStubs class and renamed Interpreter::cti_* to JITStubs::cti_*. - - Also, moved timeout checking into its own class, located in JSGlobalData, - so both the Interpreter and the JIT could have access to it. - - * JavaScriptCore.exp: - * JavaScriptCore.pri: - * JavaScriptCore.scons: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - * interpreter/CallFrame.h: - * interpreter/Interpreter.cpp: - (JSC::Interpreter::Interpreter): - (JSC::Interpreter::privateExecute): - * interpreter/Interpreter.h: - * interpreter/Register.h: - * jit/JIT.cpp: - (JSC::): - (JSC::JIT::emitTimeoutCheck): - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - (JSC::JIT::privateCompile): - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JIT.h: - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArithSlow_op_lshift): - (JSC::JIT::compileFastArithSlow_op_rshift): - (JSC::JIT::compileFastArithSlow_op_bitand): - (JSC::JIT::compileFastArithSlow_op_mod): - (JSC::JIT::compileFastArith_op_mod): - (JSC::JIT::compileFastArithSlow_op_post_inc): - (JSC::JIT::compileFastArithSlow_op_post_dec): - (JSC::JIT::compileFastArithSlow_op_pre_inc): - (JSC::JIT::compileFastArithSlow_op_pre_dec): - (JSC::JIT::compileFastArith_op_add): - (JSC::JIT::compileFastArith_op_mul): - (JSC::JIT::compileFastArith_op_sub): - (JSC::JIT::compileBinaryArithOpSlowCase): - (JSC::JIT::compileFastArithSlow_op_add): - (JSC::JIT::compileFastArithSlow_op_mul): - * jit/JITCall.cpp: - (JSC::JIT::compileOpCall): - (JSC::JIT::compileOpCallSlowCase): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::compileGetByIdHotPath): - (JSC::JIT::compilePutByIdHotPath): - (JSC::JIT::compileGetByIdSlowCase): - (JSC::JIT::compilePutByIdSlowCase): - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::patchGetByIdSelf): - (JSC::JIT::patchPutByIdReplace): - (JSC::JIT::privateCompilePatchGetArrayLength): - (JSC::JIT::privateCompileGetByIdSelf): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdChain): - (JSC::JIT::privateCompilePutByIdReplace): - * jit/JITStubs.cpp: - (JSC::JITStubs::tryCachePutByID): - (JSC::JITStubs::tryCacheGetByID): - (JSC::JITStubs::cti_op_convert_this): - (JSC::JITStubs::cti_op_end): - (JSC::JITStubs::cti_op_add): - (JSC::JITStubs::cti_op_pre_inc): - (JSC::JITStubs::cti_timeout_check): - (JSC::JITStubs::cti_register_file_check): - (JSC::JITStubs::cti_op_loop_if_less): - (JSC::JITStubs::cti_op_loop_if_lesseq): - (JSC::JITStubs::cti_op_new_object): - (JSC::JITStubs::cti_op_put_by_id_generic): - (JSC::JITStubs::cti_op_get_by_id_generic): - (JSC::JITStubs::cti_op_put_by_id): - (JSC::JITStubs::cti_op_put_by_id_second): - (JSC::JITStubs::cti_op_put_by_id_fail): - (JSC::JITStubs::cti_op_get_by_id): - (JSC::JITStubs::cti_op_get_by_id_second): - (JSC::JITStubs::cti_op_get_by_id_self_fail): - (JSC::JITStubs::cti_op_get_by_id_proto_list): - (JSC::JITStubs::cti_op_get_by_id_proto_list_full): - (JSC::JITStubs::cti_op_get_by_id_proto_fail): - (JSC::JITStubs::cti_op_get_by_id_array_fail): - (JSC::JITStubs::cti_op_get_by_id_string_fail): - (JSC::JITStubs::cti_op_instanceof): - (JSC::JITStubs::cti_op_del_by_id): - (JSC::JITStubs::cti_op_mul): - (JSC::JITStubs::cti_op_new_func): - (JSC::JITStubs::cti_op_call_JSFunction): - (JSC::JITStubs::cti_op_call_arityCheck): - (JSC::JITStubs::cti_vm_dontLazyLinkCall): - (JSC::JITStubs::cti_vm_lazyLinkCall): - (JSC::JITStubs::cti_op_push_activation): - (JSC::JITStubs::cti_op_call_NotJSFunction): - (JSC::JITStubs::cti_op_create_arguments): - (JSC::JITStubs::cti_op_create_arguments_no_params): - (JSC::JITStubs::cti_op_tear_off_activation): - (JSC::JITStubs::cti_op_tear_off_arguments): - (JSC::JITStubs::cti_op_profile_will_call): - (JSC::JITStubs::cti_op_profile_did_call): - (JSC::JITStubs::cti_op_ret_scopeChain): - (JSC::JITStubs::cti_op_new_array): - (JSC::JITStubs::cti_op_resolve): - (JSC::JITStubs::cti_op_construct_JSConstruct): - (JSC::JITStubs::cti_op_construct_NotJSConstruct): - (JSC::JITStubs::cti_op_get_by_val): - (JSC::JITStubs::cti_op_get_by_val_byte_array): - (JSC::JITStubs::cti_op_resolve_func): - (JSC::JITStubs::cti_op_sub): - (JSC::JITStubs::cti_op_put_by_val): - (JSC::JITStubs::cti_op_put_by_val_array): - (JSC::JITStubs::cti_op_put_by_val_byte_array): - (JSC::JITStubs::cti_op_lesseq): - (JSC::JITStubs::cti_op_loop_if_true): - (JSC::JITStubs::cti_op_negate): - (JSC::JITStubs::cti_op_resolve_base): - (JSC::JITStubs::cti_op_resolve_skip): - (JSC::JITStubs::cti_op_resolve_global): - (JSC::JITStubs::cti_op_div): - (JSC::JITStubs::cti_op_pre_dec): - (JSC::JITStubs::cti_op_jless): - (JSC::JITStubs::cti_op_not): - (JSC::JITStubs::cti_op_jtrue): - (JSC::JITStubs::cti_op_post_inc): - (JSC::JITStubs::cti_op_eq): - (JSC::JITStubs::cti_op_lshift): - (JSC::JITStubs::cti_op_bitand): - (JSC::JITStubs::cti_op_rshift): - (JSC::JITStubs::cti_op_bitnot): - (JSC::JITStubs::cti_op_resolve_with_base): - (JSC::JITStubs::cti_op_new_func_exp): - (JSC::JITStubs::cti_op_mod): - (JSC::JITStubs::cti_op_less): - (JSC::JITStubs::cti_op_neq): - (JSC::JITStubs::cti_op_post_dec): - (JSC::JITStubs::cti_op_urshift): - (JSC::JITStubs::cti_op_bitxor): - (JSC::JITStubs::cti_op_new_regexp): - (JSC::JITStubs::cti_op_bitor): - (JSC::JITStubs::cti_op_call_eval): - (JSC::JITStubs::cti_op_throw): - (JSC::JITStubs::cti_op_get_pnames): - (JSC::JITStubs::cti_op_next_pname): - (JSC::JITStubs::cti_op_push_scope): - (JSC::JITStubs::cti_op_pop_scope): - (JSC::JITStubs::cti_op_typeof): - (JSC::JITStubs::cti_op_is_undefined): - (JSC::JITStubs::cti_op_is_boolean): - (JSC::JITStubs::cti_op_is_number): - (JSC::JITStubs::cti_op_is_string): - (JSC::JITStubs::cti_op_is_object): - (JSC::JITStubs::cti_op_is_function): - (JSC::JITStubs::cti_op_stricteq): - (JSC::JITStubs::cti_op_nstricteq): - (JSC::JITStubs::cti_op_to_jsnumber): - (JSC::JITStubs::cti_op_in): - (JSC::JITStubs::cti_op_push_new_scope): - (JSC::JITStubs::cti_op_jmp_scopes): - (JSC::JITStubs::cti_op_put_by_index): - (JSC::JITStubs::cti_op_switch_imm): - (JSC::JITStubs::cti_op_switch_char): - (JSC::JITStubs::cti_op_switch_string): - (JSC::JITStubs::cti_op_del_by_val): - (JSC::JITStubs::cti_op_put_getter): - (JSC::JITStubs::cti_op_put_setter): - (JSC::JITStubs::cti_op_new_error): - (JSC::JITStubs::cti_op_debug): - (JSC::JITStubs::cti_vm_throw): - * jit/JITStubs.h: - (JSC::): - * runtime/JSFunction.h: - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): - * runtime/JSGlobalData.h: - * runtime/JSGlobalObject.cpp: - * runtime/JSGlobalObject.h: - * runtime/TimeoutChecker.cpp: Copied from interpreter/Interpreter.cpp. - (JSC::TimeoutChecker::TimeoutChecker): - (JSC::TimeoutChecker::reset): - (JSC::TimeoutChecker::didTimeOut): - * runtime/TimeoutChecker.h: Copied from interpreter/Interpreter.h. - (JSC::TimeoutChecker::setTimeoutInterval): - (JSC::TimeoutChecker::ticksUntilNextCheck): - (JSC::TimeoutChecker::start): - (JSC::TimeoutChecker::stop): - -2009-02-20 Gustavo Noronha Silva - - Unreviewed build fix after r41100. - - * GNUmakefile.am: - -2009-02-20 Oliver Hunt - - Reviewed by Mark Rowe. - - 2==null returns true in 64bit jit - - Code for op_eq_null and op_neq_null was incorrectly performing - a 32bit compare, which truncated the type tag from an integer - immediate, leading to incorrect behaviour. - - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::setPtr): - * assembler/MacroAssemblerX86_64.h: - (JSC::MacroAssemblerX86_64::setPtr): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - -2009-02-19 Geoffrey Garen - - Reviewed by Gavin Barraclough. - - First step in splitting JIT functionality out of the Interpreter class: - Created JITStubs.h/.cpp, and moved Interpreter::cti_* into JITStubs.cpp. - - Functions that the Interpreter and JITStubs share moved to Operations.h/.cpp. - - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * interpreter/Interpreter.cpp: - (JSC::Interpreter::resolveBase): - (JSC::Interpreter::checkTimeout): - (JSC::Interpreter::privateExecute): - * interpreter/Interpreter.h: - * jit/JITStubs.cpp: Copied from interpreter/Interpreter.cpp. - (JSC::Interpreter::cti_op_resolve_base): - * jit/JITStubs.h: Copied from interpreter/Interpreter.h. - * runtime/Operations.cpp: - (JSC::jsAddSlowCase): - (JSC::jsTypeStringForValue): - (JSC::jsIsObjectType): - (JSC::jsIsFunctionType): - * runtime/Operations.h: - (JSC::jsLess): - (JSC::jsLessEq): - (JSC::jsAdd): - (JSC::cachePrototypeChain): - (JSC::countPrototypeChainEntriesAndCheckForProxies): - (JSC::resolveBase): - -2009-02-19 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Fix for x86-64. Where the JavaScriptCore text segment lies outside - a 2gb range of the heap containing JIT generated code, callbacks - from JIT code to the stub functions in Interpreter will be incorrectly - linked. - - No performance impact on Sunspider, 1% regression on v8-tests, - due to a 3% regression on richards. - - * assembler/AbstractMacroAssembler.h: - (JSC::AbstractMacroAssembler::Call::Call): - (JSC::AbstractMacroAssembler::Jump::link): - (JSC::AbstractMacroAssembler::Jump::linkTo): - (JSC::AbstractMacroAssembler::CodeLocationJump::relink): - (JSC::AbstractMacroAssembler::CodeLocationCall::relink): - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): - (JSC::AbstractMacroAssembler::PatchBuffer::link): - (JSC::AbstractMacroAssembler::PatchBuffer::linkTailRecursive): - (JSC::AbstractMacroAssembler::differenceBetween): - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::tailRecursiveCall): - (JSC::MacroAssembler::makeTailRecursiveCall): - * assembler/MacroAssemblerX86.h: - (JSC::MacroAssemblerX86::call): - * assembler/MacroAssemblerX86Common.h: - * assembler/MacroAssemblerX86_64.h: - (JSC::MacroAssemblerX86_64::call): - (JSC::MacroAssemblerX86_64::moveWithPatch): - (JSC::MacroAssemblerX86_64::branchPtrWithPatch): - (JSC::MacroAssemblerX86_64::storePtrWithPatch): - * assembler/X86Assembler.h: - (JSC::X86Assembler::jmp_r): - (JSC::X86Assembler::linkJump): - (JSC::X86Assembler::patchJump): - (JSC::X86Assembler::patchCall): - (JSC::X86Assembler::linkCall): - (JSC::X86Assembler::patchAddress): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::tryCTICachePutByID): - * jit/JIT.cpp: - (JSC::JIT::privateCompile): - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JIT.h: - * jit/JITArithmetic.cpp: - (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): - (JSC::JIT::compileBinaryArithOp): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::privateCompileGetByIdSelf): - (JSC::JIT::privateCompilePutByIdReplace): - -2009-02-18 Geoffrey Garen - - Reviewed by Oliver Hunt. - - Simplified .call and .apply in preparation for optimizing them. Also, - a little cleanup. - - * runtime/FunctionPrototype.cpp: - (JSC::functionProtoFuncApply): - (JSC::functionProtoFuncCall): No need to do any specific conversion on - 'this' -- op_convert_this will do it if necessary. - - * runtime/JSImmediate.cpp: - (JSC::JSImmediate::toThisObject): Slightly relaxed the rules on - toThisObject to allow for 'undefined', which can be passed through - .call and .apply. - -2009-02-19 David Levin - - Reviewed by Alexey Proskuryakov. - - Bug 23976: MessageQueue needs a way to wait for a message that satisfies an arbitrary criteria. - - - * wtf/Deque.h: - (WTF::Deque::findIf): - * wtf/MessageQueue.h: - (WTF::MessageQueue::waitForMessageFiltered): - -2009-02-18 David Levin - - Reviewed by Alexey Proskuryakov. - - Bug 23974: Deque::Remove would be a useful method. - - - Add Deque::remove and DequeIteratorBase::operator=. - - Why was operator= added? Every concrete iterator (DequeIterator..DequeConstReverseIterator) - was calling DequeIteratorBase::assign(), which called Base::operator=(). Base::operator=() - was not implemented. This went unnoticed because the iterator copy code has been unused. - - * wtf/Deque.h: - (WTF::Deque::remove): - (WTF::DequeIteratorBase::removeFromIteratorsList): - (WTF::DequeIteratorBase::operator=): - (WTF::DequeIteratorBase::~DequeIteratorBase): - -2009-02-18 Gustavo Noronha Silva - - Reviewed by Holger Freyther. - - Fix symbols.filter location, and add other missing files to the - autotools build, so that make dist works. - - * GNUmakefile.am: - -2009-02-17 Geoffrey Garen - - Reviewed by Sam Weinig. - - Fixed failure in js1_5/Regress/regress-168347.js, as seen on the Oliver - bot. - - Technically, both behaviors are OK, but we might as well keep this test - passing. - - * runtime/FunctionPrototype.cpp: - (JSC::insertSemicolonIfNeeded): No need to add a trailing semicolon - after a trailing '}', since '}' ends a block, indicating the end of a - statement. - -2009-02-17 Geoffrey Garen - - Build fix. - - * runtime/FunctionPrototype.cpp: - -2009-02-17 Oliver Hunt - - Reviewed by Geoff Garen. - - Add assertion to guard against oversized pc relative calls. - - * assembler/X86Assembler.h: - (JSC::X86Assembler::link): - -2009-02-17 Geoffrey Garen - - Reviewed by Sam Weinig. - - Fixed REGRESSION: http://www.amnestyusa.org/ - fails to load. - - amnestyusa.org uses the Optimist JavaScript library, which adds event - listeners by concatenating string-ified functions. This is only sure to - be syntactically valid if the string-ified functions end in semicolons. - - * parser/Lexer.cpp: - (JSC::Lexer::isWhiteSpace): - * parser/Lexer.h: - (JSC::Lexer::isWhiteSpace): - (JSC::Lexer::isLineTerminator): Added some helper functions for examining - whitespace. - - * runtime/FunctionPrototype.cpp: - (JSC::appendSemicolonIfNeeded): - (JSC::functionProtoFuncToString): When string-ifying a function, insert - a semicolon in the last non-whitespace position, if one doesn't already exist. - -2009-02-16 Oliver Hunt - - Reviewed by NOBODY (Build fix). - - Roll out r41022 as it breaks qt and gtk builds - - * jit/JITArithmetic.cpp: - (JSC::isSSE2Present): - -2009-02-16 Sam Weinig - - Reviewed by Geoffrey Garen. - - Fix for - REGRESSION (r36779): Adding link, images, flash in TinyMCE blocks entire page (21382) - - No performance regression. - - * runtime/Arguments.cpp: - (JSC::Arguments::fillArgList): Add codepath for when the "length" property has been - overridden. - -2009-02-16 Mark Rowe - - Build fix. - - * wtf/FastMalloc.cpp: - (WTF::TCMallocStats::): - (WTF::TCMallocStats::FastMallocZone::FastMallocZone): - -2009-02-16 Csaba Osztrogonac - - Reviewed by Oliver Hunt. - - Bug 23787: Allow JIT to generate SSE2 code if using GCC - - - GCC version of the cpuid check. - - * jit/JITArithmetic.cpp: - (JSC::isSSE2Present): GCC assembly code added. - 6.6% progression on x86 Linux with JIT and WREC on SunSpider if using SSE2 capable machine. - -2009-02-13 Adam Treat - - Reviewed by George Staikos. - - https://bugs.webkit.org/show_bug.cgi?id=23960 - Crash Fix. - - Don't depend on 'initializeThreading()' to come before a call to 'isMainThread()' - as QtWebKit only calls 'initializeThreading()' during QWebPage construction. - - A client app may well make a call to QWebSettings::iconForUrl() for instance - before creating a QWebPage and that call to QWebSettings triggers an - ASSERT(isMainThread()) deep within WebCore. - - * wtf/ThreadingQt.cpp: - (WTF::isMainThread): - -2009-02-13 Gavin Barraclough - - Reviewed by Darin Adler. - - Some data in the instruction stream is potentially uninitialized - fix this. - - Change the OperandTypes constructor so that uninitialized memory in the int - is zeroed, and modify the Instruction constructor taking an Opcode so that - if !HAVE(COMPUTED_GOTO) (i.e. when Opcode is an enum, and is potentially only - a byte) it zeros the Instruction first before writing the opcode. - - * bytecode/Instruction.h: - (JSC::Instruction::Instruction): - * parser/ResultType.h: - (JSC::OperandTypes::OperandTypes): - -2009-02-13 Geoffrey Garen - - Build fix for non_JIT platforms. - - * bytecode/CodeBlock.h: - (JSC::CodeBlock::setIsNumericCompareFunction): - (JSC::CodeBlock::isNumericCompareFunction): - -2009-02-13 Geoffrey Garen - - Reviewed by Darin Adler. - - Fixed Optimize sort by JS numeric comparison - function not to run the comparison function - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::CodeBlock): - * bytecode/CodeBlock.h: - (JSC::CodeBlock::setIsNumericCompareFunction): - (JSC::CodeBlock::isNumericCompareFunction): Added the ability to track - whether a CodeBlock performs a sort-like numeric comparison. - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::generate): Set the isNumericCompareFunction bit - after compiling. - - * parser/Nodes.cpp: - (JSC::FunctionBodyNode::emitBytecode): Fixed a bug that caused us to - codegen an extra return at the end of all functions (eek!), since this - made it harder / weirder to detect the numeric comparison pattern in - bytecode. - - * runtime/ArrayPrototype.cpp: - (JSC::arrayProtoFuncSort): Use the isNumericCompareFunction bit to do - a faster sort if we can. - - * runtime/FunctionConstructor.cpp: - (JSC::extractFunctionBody): - (JSC::constructFunction): - * runtime/FunctionConstructor.h: Renamed and exported extractFunctionBody for - use in initializing lazyNumericCompareFunction. - - * runtime/JSArray.cpp: - (JSC::compareNumbersForQSort): - (JSC::compareByStringPairForQSort): - (JSC::JSArray::sortNumeric): - (JSC::JSArray::sort): - * runtime/JSArray.h: Added a fast numeric sort. Renamed ArrayQSortPair - to be more specific since we do different kinds of qsort now. - - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): - (JSC::JSGlobalData::numericCompareFunction): - (JSC::JSGlobalData::ClientData::~ClientData): - * runtime/JSGlobalData.h: Added helper data for computing the - isNumericCompareFunction bit. - -2009-02-13 Darin Adler - - * Configurations/JavaScriptCore.xcconfig: Undo accidental commit of this file. - -2009-02-12 Darin Adler - - Reviewed by Oliver Hunt and Alexey Proskuryakov. - - Speed up a couple string functions. - - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncIndexOf): Added a fast path for cases where the second - argument is either missing or an integer. - (JSC::stringProtoFuncBig): Use jsNontrivialString since the string is guaranteed - to be 2 or more characters long. - (JSC::stringProtoFuncSmall): Ditto. - (JSC::stringProtoFuncBlink): Ditto. - (JSC::stringProtoFuncBold): Ditto. - (JSC::stringProtoFuncItalics): Ditto. - (JSC::stringProtoFuncStrike): Ditto. - (JSC::stringProtoFuncSub): Ditto. - (JSC::stringProtoFuncSup): Ditto. - (JSC::stringProtoFuncFontcolor): Ditto. - (JSC::stringProtoFuncFontsize): Make the fast path Sam recently added even faster - by avoiding all but the minimum memory allocation. - (JSC::stringProtoFuncAnchor): Use jsNontrivialString. - (JSC::stringProtoFuncLink): Added a fast path. - - * runtime/UString.cpp: - (JSC::UString::find): Added a fast path for single-character search strings. - -2009-02-13 David Levin - - Reviewed by Darin Adler. - - Bug 23926: Race condition in callOnMainThreadAndWait - - - * wtf/MainThread.cpp: - Removed callOnMainThreadAndWait since it isn't used. - -2009-02-13 Oliver Hunt - - Reviewed by Jon Honeycutt. - - Math.random is really slow on windows. - - Math.random calls WTF::randomNumber which is implemented as - the secure rand_s on windows. Unfortunately rand_s is an order - of magnitude slower than arc4random. For this reason I've - added "weakRandomNumber" for use by JavaScript's Math Object. - In the long term we should look at using our own secure PRNG - in place of the system, but this will do for now. - - 30% win on SunSpider on Windows, resolving most of the remaining - disparity vs. Mac. - - * runtime/MathObject.cpp: - (JSC::MathObject::MathObject): - (JSC::mathProtoFuncRandom): - * wtf/RandomNumber.cpp: - (WTF::weakRandomNumber): - (WTF::randomNumber): - * wtf/RandomNumber.h: - * wtf/RandomNumberSeed.h: - (WTF::initializeWeakRandomNumberGenerator): - -2009-02-12 Mark Rowe - - Fix the build for other platforms. - - * wtf/RandomNumber.cpp: - (WTF::randomNumber): - -2009-02-12 Gavin Barraclough - - Reviewed by Sam Weinig. - - Remove (/reduce) use of hard-wired register names from the JIT. - Currently there is no abstraction of registers used in the JIT, - which has a number of negative consequences. Hard-wiring x86 - register names makes the JIT less portable to other platforms, - and prevents us from performing dynamic register allocation to - attempt to maintain more temporary values in machine registers. - (The latter will be more important on x86-64, where we have more - registers to make use of). - - Also, remove MacroAssembler::mod32. This was not providing a - useful abstraction, and was not in keeping with the rest of the - MacroAssembler interface, in having specific register requirements. - - * assembler/MacroAssemblerX86Common.h: - * jit/JIT.cpp: - (JSC::JIT::compileOpStrictEq): - (JSC::JIT::emitSlowScriptCheck): - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - (JSC::JIT::privateCompile): - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JIT.h: - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArith_op_lshift): - (JSC::JIT::compileFastArithSlow_op_lshift): - (JSC::JIT::compileFastArith_op_rshift): - (JSC::JIT::compileFastArithSlow_op_rshift): - (JSC::JIT::compileFastArith_op_bitand): - (JSC::JIT::compileFastArithSlow_op_bitand): - (JSC::JIT::compileFastArith_op_mod): - (JSC::JIT::compileFastArithSlow_op_mod): - (JSC::JIT::compileFastArith_op_post_inc): - (JSC::JIT::compileFastArithSlow_op_post_inc): - (JSC::JIT::compileFastArith_op_post_dec): - (JSC::JIT::compileFastArithSlow_op_post_dec): - (JSC::JIT::compileFastArith_op_pre_inc): - (JSC::JIT::compileFastArithSlow_op_pre_inc): - (JSC::JIT::compileFastArith_op_pre_dec): - (JSC::JIT::compileFastArithSlow_op_pre_dec): - (JSC::JIT::compileFastArith_op_add): - (JSC::JIT::compileFastArith_op_mul): - (JSC::JIT::compileFastArith_op_sub): - (JSC::JIT::compileBinaryArithOp): - * jit/JITCall.cpp: - (JSC::JIT::compileOpCallInitializeCallFrame): - (JSC::JIT::compileOpCallSetupArgs): - (JSC::JIT::compileOpCallEvalSetupArgs): - (JSC::JIT::compileOpConstructSetupArgs): - (JSC::JIT::compileOpCall): - (JSC::JIT::compileOpCallSlowCase): - * jit/JITInlineMethods.h: - (JSC::JIT::emitGetVirtualRegister): - (JSC::JIT::emitPutVirtualRegister): - (JSC::JIT::emitNakedCall): - (JSC::JIT::restoreArgumentReference): - (JSC::JIT::restoreArgumentReferenceForTrampoline): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::compileGetByIdHotPath): - (JSC::JIT::compilePutByIdHotPath): - (JSC::JIT::compileGetByIdSlowCase): - (JSC::JIT::compilePutByIdSlowCase): - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::privateCompilePatchGetArrayLength): - (JSC::JIT::privateCompileGetByIdSelf): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdSelfList): - (JSC::JIT::privateCompileGetByIdProtoList): - (JSC::JIT::privateCompileGetByIdChainList): - (JSC::JIT::privateCompileGetByIdChain): - (JSC::JIT::privateCompilePutByIdReplace): - -2009-02-12 Horia Olaru - - Reviewed by Oliver Hunt. - - https://bugs.webkit.org/show_bug.cgi?id=23400 - - When throwing an exception within an eval argument string, the dst parameter was - modified in the functions below and the return value for eval was altered. Changed - the emitNode call in JSC::ThrowNode::emitBytecode to use a temporary register - to store its results instead of dst. The JSC::FunctionCallResolveNode::emitBytecode - would load the function within the dst registry, also altering the result returned - by eval. Replaced it with another temporary. - - * parser/Nodes.cpp: - (JSC::FunctionCallResolveNode::emitBytecode): - (JSC::ThrowNode::emitBytecode): - -2009-02-12 Sam Weinig - - Reviewed by Geoffrey Garen. - - Speed up String.prototype.fontsize. - - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncFontsize): Specialize for defined/commonly used values. - -2009-02-12 Geoffrey Garen - - Reviewed by Sam Weinig. - - Correctness fix. - - * wtf/RandomNumber.cpp: - (WTF::randomNumber): Divide by the maximum representable value, which - is different on each platform now, to get values between 0 and 1. - -2009-02-12 Geoffrey Garen - - Build fix. - - * wtf/RandomNumber.cpp: - (WTF::randomNumber): - -2009-02-12 Geoffrey Garen - - Reviewed by Sam Weinig. - - Fixed . - - * wtf/RandomNumber.cpp: - (WTF::randomNumber): Make only one call to the random number generator - on platforms where the generator is cryptographically secure. The value - of randomness over and above cryptographically secure randomness is not - clear, and it caused some performance problems. - -2009-02-12 Adam Roben - - Fix lots of Perl warnings when building JavaScriptCoreGenerated on - Windows - - Reviewed by John Sullivan. - - * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: - Create the docs/ directory so that we can write bytecode.html into it. - This matches what JavaScriptCore.xcodeproj does. - -2009-02-12 Simon Hausmann - - Rubber-stamped by Lars. - - Re-enable the JIT in the Qt build with -fno-stack-protector on Linux. - - * JavaScriptCore.pri: - -2009-02-11 Dmitry Titov - - Reviewed by Alexey Proskuryakov. - - https://bugs.webkit.org/show_bug.cgi?id=23705 - Fix the UI freeze caused by Worker generating a flood of messages. - Measure time we spend in executing posted work items. If too much time is spent - without returning to the run loop, exit and reschedule. - - * wtf/MainThread.h: - Added initializeMainThreadPlatform() to initialize low-level mechanism for posting - work items from thread to thread. This removes #ifdefs for WIN and CHROMIUM from platform-independent code. - - * wtf/MainThread.cpp: - (WTF::initializeMainThread): - (WTF::dispatchFunctionsFromMainThread): - Instead of dispatching all work items in the queue, dispatch them one by one - and measure elapsed time. After a threshold, reschedule and quit. - - (WTF::callOnMainThread): - (WTF::callOnMainThreadAndWait): - Only schedule dispatch if the queue was empty - to avoid many posted messages in the run loop queue. - - * wtf/mac/MainThreadMac.mm: - (WTF::scheduleDispatchFunctionsOnMainThread): - Use static instance of the mainThreadCaller instead of allocating and releasing it each time. - (WTF::initializeMainThreadPlatform): - * wtf/gtk/MainThreadChromium.cpp: - (WTF::initializeMainThreadPlatform): - * wtf/gtk/MainThreadGtk.cpp: - (WTF::initializeMainThreadPlatform): - * wtf/qt/MainThreadQt.cpp: - (WTF::initializeMainThreadPlatform): - * wtf/win/MainThreadWin.cpp: - (WTF::initializeMainThreadPlatform): - * wtf/wx/MainThreadWx.cpp: - (WTF::initializeMainThreadPlatform): - -2009-02-11 Sam Weinig - - Reviewed by Gavin Barraclough. - - Style cleanup. - - * assembler/AbstractMacroAssembler.h: - (JSC::AbstractMacroAssembler::CodeLocationCommon::CodeLocationCommon): - (JSC::AbstractMacroAssembler::CodeLocationCommon::operator bool): - (JSC::AbstractMacroAssembler::CodeLocationCommon::reset): - (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForSwitch): - (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForExceptionHandler): - (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForJSR): - (JSC::AbstractMacroAssembler::CodeLocationLabel::getJumpDestination): - (JSC::AbstractMacroAssembler::CodeLocationJump::relink): - (JSC::AbstractMacroAssembler::CodeLocationJump::CodeLocationJump): - (JSC::AbstractMacroAssembler::CodeLocationCall::relink): - (JSC::AbstractMacroAssembler::CodeLocationCall::calleeReturnAddressValue): - (JSC::AbstractMacroAssembler::CodeLocationCall::CodeLocationCall): - (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch): - (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::CodeLocationDataLabel32): - (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch): - (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr): - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::ProcessorReturnAddress): - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::operator void*): - (JSC::AbstractMacroAssembler::PatchBuffer::link): - (JSC::::CodeLocationCommon::labelAtOffset): - (JSC::::CodeLocationCommon::jumpAtOffset): - (JSC::::CodeLocationCommon::callAtOffset): - (JSC::::CodeLocationCommon::dataLabelPtrAtOffset): - (JSC::::CodeLocationCommon::dataLabel32AtOffset): - -2009-02-11 Sam Weinig - - Reviewed by Gavin Barraclough. - - * assembler/AbstractMacroAssembler.h: Fix comments. - -2009-02-11 Alexey Proskuryakov - - Trying to fix wx build. - - * bytecode/JumpTable.h: Include "MacroAssembler.h", not . - * jscore.bkl: Added assembler directory to search paths. - -2009-02-10 Gavin Barraclough - - Build - fix. - (Narrow - changelog - for - dhyatt). - - * bytecode/Instruction.h: - (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set): - (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList): - -2009-02-10 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Reduce use of void* / reinterpret_cast in JIT repatching code, - add strong types for Calls and for the various types of pointers - we retain into the JIT generated instruction stream. - - No performance impact. - - * assembler/AbstractMacroAssembler.h: - (JSC::AbstractMacroAssembler::ImmPtr::ImmPtr): - (JSC::AbstractMacroAssembler::ImmPtr::asIntptr): - (JSC::AbstractMacroAssembler::Imm32::Imm32): - (JSC::AbstractMacroAssembler::Label::Label): - (JSC::AbstractMacroAssembler::DataLabelPtr::DataLabelPtr): - (JSC::AbstractMacroAssembler::Call::Call): - (JSC::AbstractMacroAssembler::Call::link): - (JSC::AbstractMacroAssembler::Call::linkTo): - (JSC::AbstractMacroAssembler::Jump::Jump): - (JSC::AbstractMacroAssembler::Jump::linkTo): - (JSC::AbstractMacroAssembler::CodeLocationCommon::CodeLocationCommon): - (JSC::AbstractMacroAssembler::CodeLocationCommon::operator bool): - (JSC::AbstractMacroAssembler::CodeLocationCommon::reset): - (JSC::AbstractMacroAssembler::CodeLocationLabel::CodeLocationLabel): - (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForSwitch): - (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForExceptionHandler): - (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForJSR): - (JSC::AbstractMacroAssembler::CodeLocationLabel::getJumpDestination): - (JSC::AbstractMacroAssembler::CodeLocationJump::CodeLocationJump): - (JSC::AbstractMacroAssembler::CodeLocationJump::relink): - (JSC::AbstractMacroAssembler::CodeLocationCall::CodeLocationCall): - (JSC::AbstractMacroAssembler::CodeLocationCall::relink): - (JSC::AbstractMacroAssembler::CodeLocationCall::calleeReturnAddressValue): - (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::CodeLocationDataLabel32): - (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch): - (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr): - (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch): - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::ProcessorReturnAddress): - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::operator void*): - (JSC::AbstractMacroAssembler::PatchBuffer::entry): - (JSC::AbstractMacroAssembler::PatchBuffer::trampolineAt): - (JSC::AbstractMacroAssembler::PatchBuffer::link): - (JSC::AbstractMacroAssembler::PatchBuffer::linkTailRecursive): - (JSC::AbstractMacroAssembler::PatchBuffer::patch): - (JSC::AbstractMacroAssembler::PatchBuffer::locationOf): - (JSC::AbstractMacroAssembler::PatchBuffer::returnAddressOffset): - (JSC::AbstractMacroAssembler::differenceBetween): - (JSC::::CodeLocationCommon::labelAtOffset): - (JSC::::CodeLocationCommon::jumpAtOffset): - (JSC::::CodeLocationCommon::callAtOffset): - (JSC::::CodeLocationCommon::dataLabelPtrAtOffset): - (JSC::::CodeLocationCommon::dataLabel32AtOffset): - * assembler/MacroAssemblerX86Common.h: - (JSC::MacroAssemblerX86Common::call): - * assembler/X86Assembler.h: - (JSC::X86Assembler::getCallReturnOffset): - * bytecode/CodeBlock.h: - (JSC::CallLinkInfo::CallLinkInfo): - (JSC::getStructureStubInfoReturnLocation): - (JSC::getCallLinkInfoReturnLocation): - * bytecode/Instruction.h: - (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set): - (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList): - * bytecode/JumpTable.h: - (JSC::StringJumpTable::ctiForValue): - (JSC::SimpleJumpTable::ctiForValue): - * bytecode/StructureStubInfo.h: - (JSC::StructureStubInfo::StructureStubInfo): - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitCatch): - (JSC::prepareJumpTableForStringSwitch): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::cti_op_get_by_id_self_fail): - (JSC::getPolymorphicAccessStructureListSlot): - (JSC::Interpreter::cti_op_throw): - (JSC::Interpreter::cti_op_switch_imm): - (JSC::Interpreter::cti_op_switch_char): - (JSC::Interpreter::cti_op_switch_string): - (JSC::Interpreter::cti_vm_throw): - * jit/JIT.cpp: - (JSC::ctiSetReturnAddress): - (JSC::ctiPatchCallByReturnAddress): - (JSC::JIT::privateCompile): - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JIT.h: - (JSC::CallRecord::CallRecord): - (JSC::JIT::compileGetByIdSelf): - (JSC::JIT::compileGetByIdProto): - (JSC::JIT::compileGetByIdChain): - (JSC::JIT::compilePutByIdReplace): - (JSC::JIT::compilePutByIdTransition): - (JSC::JIT::compilePatchGetArrayLength): - (JSC::JIT::emitCTICall): - * jit/JITCall.cpp: - (JSC::JIT::unlinkCall): - (JSC::JIT::linkCall): - * jit/JITInlineMethods.h: - (JSC::JIT::emitNakedCall): - (JSC::JIT::emitCTICall_internal): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::compileGetByIdSlowCase): - (JSC::JIT::compilePutByIdSlowCase): - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::patchGetByIdSelf): - (JSC::JIT::patchPutByIdReplace): - (JSC::JIT::privateCompilePatchGetArrayLength): - (JSC::JIT::privateCompileGetByIdSelf): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdSelfList): - (JSC::JIT::privateCompileGetByIdProtoList): - (JSC::JIT::privateCompileGetByIdChainList): - (JSC::JIT::privateCompileGetByIdChain): - (JSC::JIT::privateCompilePutByIdReplace): - -2009-02-10 Adam Roben - - Windows build fix after r40813 - - * JavaScriptCore.vcproj/jsc/jsc.vcproj: Added profiler/ to the include - path so that Profiler.h can be found. - -2009-02-09 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Provide a class type for a generated block of JIT code. - Also changes the return address -> bytecode index map to - track the return addess as an unsigned offset into the code - instead of a ptrdiff_t in terms of void**s - the latter is - equal to the actual offset / sizeof(void*), making it a - potentially lossy representation. - - * JavaScriptCore.xcodeproj/project.pbxproj: - * assembler/AbstractMacroAssembler.h: - (JSC::AbstractMacroAssembler::PatchBuffer::returnAddressOffset): - * assembler/X86Assembler.h: - (JSC::X86Assembler::getCallReturnOffset): - * bytecode/CodeBlock.h: - (JSC::CallReturnOffsetToBytecodeIndex::CallReturnOffsetToBytecodeIndex): - (JSC::getCallReturnOffset): - (JSC::CodeBlock::getBytecodeIndex): - (JSC::CodeBlock::jitCode): - (JSC::CodeBlock::callReturnIndexVector): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::execute): - (JSC::Interpreter::cti_vm_dontLazyLinkCall): - (JSC::Interpreter::cti_vm_lazyLinkCall): - * jit/JIT.cpp: - (JSC::JIT::privateCompile): - * jit/JIT.h: - (JSC::): - * jit/JITCall.cpp: - (JSC::JIT::linkCall): - * jit/JITCode.h: Added. - (JSC::): - (JSC::JITCode::JITCode): - (JSC::JITCode::operator bool): - (JSC::JITCode::addressForCall): - (JSC::JITCode::offsetOf): - (JSC::JITCode::execute): - -2009-02-09 John Grabowski - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=23856 - Change the definition of "main thread" for Chromium on OSX. - It does not match the DARWIN definition. - - * wtf/ThreadingPthreads.cpp: - (WTF::initializeThreading): - (WTF::isMainThread): - -2009-02-09 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Minor bugfix, incorrect check meant that subtraction causing integer overflow - would be missed on x86-64 JIT. - - * jit/JITArithmetic.cpp: - (JSC::JIT::compileBinaryArithOp): - -2009-02-09 Gavin Barraclough - - Reviewed by Oliver Hunt. - - A more sensible register allocation for x86-64. - - When WREC was ported to x86-64 it stuck with the same register allocation as x86. - This requires registers to be reordered on entry into WREC generated code, since - argument passing is different on x86-64 and x86 (regparm(3)). This patch switches - x86-64 to use a native register allocation, that does not require argument registers - to be reordered. - - * wrec/WRECGenerator.cpp: - (JSC::WREC::Generator::generateEnter): - (JSC::WREC::Generator::generateReturnSuccess): - (JSC::WREC::Generator::generateReturnFailure): - * wrec/WRECGenerator.h: - -2009-02-05 Adam Roben - - Build fix - - Rubberstamped by Sam Weinig. - - * wtf/TypeTraits.h: Include Platform.h, since this header uses macros - defined there. - -2009-02-05 Dimitri Glazkov - - Reviewed by Eric Seidel. - - https://bugs.webkit.org/show_bug.cgi?id=23747 - Add Chromium threading-related files. - - * wtf/MainThread.cpp: Added platform guard to initializeMainThread. - * wtf/chromium/ChromiumThreading.h: Added. - * wtf/chromium/MainThreadChromium.cpp: Added. - (WTF::initializeMainThread): - (WTF::scheduleDispatchFunctionsOnMainThread): - -2009-02-05 David Levin - - Reviewed by Darin Adler. - - Bug 23713: COMPILE_ASSERTS should be moved out of TypeTraits.h and into .cpp file - - - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCore.scons: - * JavaScriptCore.vcproj/WTF/WTF.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - - * wtf/HashTraits.h: - Remove unnecessary header file that I missed when moving out the type traits form this file. - - * wtf/TypeTraits.cpp: Added. - (WTF::): - * wtf/TypeTraits.h: - Moved the compile asserts into TypeTraits.cpp file. - -2009-02-04 Gavin Barraclough - - Reviewed by Oliver 'the nun' Hunt. - - Add -e switch to jsc to enable evaluation of scripts passed on the command line. - - * jsc.cpp: - (Script::Script): - (runWithScripts): - (printUsageStatement): - (parseArguments): - (jscmain): - -2009-02-04 Gavin Barraclough - - Rubber stamped by Sam 'Big Mac' Weinig. - - * assembler/AbstractMacroAssembler.h: Copied from assembler/MacroAssembler.h. - * assembler/MacroAssemblerX86.h: Copied from assembler/MacroAssembler.h. - * assembler/MacroAssemblerX86Common.h: Copied from assembler/MacroAssembler.h. - * assembler/MacroAssemblerX86_64.h: Copied from assembler/MacroAssembler.h. - -2009-02-04 Gavin Barraclough - - Reviewed by Sam Weinig. - - This patch tidies up the MacroAssembler, cleaning up the code and refactoring out the - platform-specific parts. The MacroAssembler gets split up like a beef burger, with the - platform-agnostic data types being the lower bun (in the form of the class AbstractMacroAssembler), - the plaform-specific code generation forming a big meaty patty of methods like 'add32', - 'branch32', etc (MacroAssemblerX86), and finally topped off with the bun-lid of the - MacroAssembler class itself, providing covenience methods such as the stack peek & poke, - and backwards branch methods, all of which can be described in a platform independent - way using methods from the base class. The AbstractMacroAssembler is templated on the - type of the assembler class that will be used for code generation, and the three layers - are held together with the cocktail stick of inheritance. - - The above description is a slight simplification since the MacroAssemblerX86 is actually - formed from two layers (in effect giving us a kind on bacon double cheeseburger) - with the - bulk of methods that are common between x86 & x86-64 implemented in MacroAssemblerX86Common, - which forms a base class for MacroAssemblerX86 and MacroAssemblerX86_64 (which add the methods - specific to the given platform). - - I'm landing these changes first without splitting the classes across multiple files, - I will follow up with a second patch to split up the file MacroAssembler.h. - - * assembler/MacroAssembler.h: - (JSC::AbstractMacroAssembler::): - (JSC::AbstractMacroAssembler::DataLabelPtr::DataLabelPtr): - (JSC::AbstractMacroAssembler::DataLabelPtr::patch): - (JSC::AbstractMacroAssembler::DataLabel32::DataLabel32): - (JSC::AbstractMacroAssembler::DataLabel32::patch): - (JSC::AbstractMacroAssembler::Label::Label): - (JSC::AbstractMacroAssembler::Jump::Jump): - (JSC::AbstractMacroAssembler::Jump::link): - (JSC::AbstractMacroAssembler::Jump::linkTo): - (JSC::AbstractMacroAssembler::Jump::patch): - (JSC::AbstractMacroAssembler::JumpList::link): - (JSC::AbstractMacroAssembler::JumpList::linkTo): - (JSC::AbstractMacroAssembler::PatchBuffer::link): - (JSC::AbstractMacroAssembler::PatchBuffer::addressOf): - (JSC::AbstractMacroAssembler::PatchBuffer::setPtr): - (JSC::AbstractMacroAssembler::size): - (JSC::AbstractMacroAssembler::copyCode): - (JSC::AbstractMacroAssembler::label): - (JSC::AbstractMacroAssembler::align): - (JSC::AbstractMacroAssembler::differenceBetween): - (JSC::MacroAssemblerX86Common::xor32): - (JSC::MacroAssemblerX86Common::load32WithAddressOffsetPatch): - (JSC::MacroAssemblerX86Common::store32WithAddressOffsetPatch): - (JSC::MacroAssemblerX86Common::move): - (JSC::MacroAssemblerX86Common::swap): - (JSC::MacroAssemblerX86Common::signExtend32ToPtr): - (JSC::MacroAssemblerX86Common::zeroExtend32ToPtr): - (JSC::MacroAssemblerX86Common::branch32): - (JSC::MacroAssemblerX86Common::jump): - (JSC::MacroAssemblerX86_64::add32): - (JSC::MacroAssemblerX86_64::sub32): - (JSC::MacroAssemblerX86_64::load32): - (JSC::MacroAssemblerX86_64::store32): - (JSC::MacroAssemblerX86_64::addPtr): - (JSC::MacroAssemblerX86_64::andPtr): - (JSC::MacroAssemblerX86_64::orPtr): - (JSC::MacroAssemblerX86_64::rshiftPtr): - (JSC::MacroAssemblerX86_64::subPtr): - (JSC::MacroAssemblerX86_64::xorPtr): - (JSC::MacroAssemblerX86_64::loadPtr): - (JSC::MacroAssemblerX86_64::loadPtrWithAddressOffsetPatch): - (JSC::MacroAssemblerX86_64::storePtr): - (JSC::MacroAssemblerX86_64::storePtrWithAddressOffsetPatch): - (JSC::MacroAssemblerX86_64::branchPtr): - (JSC::MacroAssemblerX86_64::branchTestPtr): - (JSC::MacroAssemblerX86_64::branchAddPtr): - (JSC::MacroAssemblerX86_64::branchSubPtr): - (JSC::MacroAssemblerX86_64::branchPtrWithPatch): - (JSC::MacroAssemblerX86_64::storePtrWithPatch): - (JSC::MacroAssemblerX86::add32): - (JSC::MacroAssemblerX86::sub32): - (JSC::MacroAssemblerX86::load32): - (JSC::MacroAssemblerX86::store32): - (JSC::MacroAssemblerX86::branch32): - (JSC::MacroAssemblerX86::branchPtrWithPatch): - (JSC::MacroAssemblerX86::storePtrWithPatch): - (JSC::MacroAssembler::pop): - (JSC::MacroAssembler::peek): - (JSC::MacroAssembler::poke): - (JSC::MacroAssembler::branchPtr): - (JSC::MacroAssembler::branch32): - (JSC::MacroAssembler::branch16): - (JSC::MacroAssembler::branchTestPtr): - (JSC::MacroAssembler::addPtr): - (JSC::MacroAssembler::andPtr): - (JSC::MacroAssembler::orPtr): - (JSC::MacroAssembler::rshiftPtr): - (JSC::MacroAssembler::subPtr): - (JSC::MacroAssembler::xorPtr): - (JSC::MacroAssembler::loadPtr): - (JSC::MacroAssembler::loadPtrWithAddressOffsetPatch): - (JSC::MacroAssembler::storePtr): - (JSC::MacroAssembler::storePtrWithAddressOffsetPatch): - (JSC::MacroAssembler::branchAddPtr): - (JSC::MacroAssembler::branchSubPtr): - * jit/JITArithmetic.cpp: - (JSC::JIT::compileBinaryArithOp): - -2009-02-04 Alexey Proskuryakov - - Reviewed by Sam Weinig. - - https://bugs.webkit.org/show_bug.cgi?id=23681 - Worker tests crash in debug builds if run --singly - - The crash happened because worker threads continued running while debug-only static objects - were already being destroyed on main thread. - - * runtime/Structure.cpp: Create static debug-only sets in heap, so that they don't get - destroyed. - - * wtf/ThreadingPthreads.cpp: Changed assertions to conventional form. - -2009-02-03 Gavin Barraclough - - Reviewed by Geoff Garen. - - https://bugs.webkit.org/show_bug.cgi?id=23715 - - Simplify MacroAssembler interface, by combining comparison methods. - Seprate operations are combined as follows: - jz32/jnz32/jzPtr/jnzPtr -> branchTest32/branchTestPtr, - j*(Add|Mul|Sub)32/j*(Add|Mul|Sub)Ptr -> branch(Add|Mul|Sub)32/branch(Add|Mul|Sub)Ptr - j*32/j*Ptr (all other two op combparisons) -> branch32/brnachPtr - set*32 -> set32 - - Also, represent the Scale of BaseIndex addresses as a plain enum (0,1,2,3), - instead of as multiplicands (1,2,4,8). - - This patch singificantly reduces replication of code, and increases functionality supported - by the MacroAssembler. No performance impact. - - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::): - (JSC::MacroAssembler::branchPtr): - (JSC::MacroAssembler::branchPtrWithPatch): - (JSC::MacroAssembler::branch32): - (JSC::MacroAssembler::branch16): - (JSC::MacroAssembler::branchTestPtr): - (JSC::MacroAssembler::branchTest32): - (JSC::MacroAssembler::branchAddPtr): - (JSC::MacroAssembler::branchAdd32): - (JSC::MacroAssembler::branchMul32): - (JSC::MacroAssembler::branchSubPtr): - (JSC::MacroAssembler::branchSub32): - (JSC::MacroAssembler::set32): - (JSC::MacroAssembler::setTest32): - * assembler/X86Assembler.h: - (JSC::X86Assembler::): - (JSC::X86Assembler::jccRel32): - (JSC::X86Assembler::setccOpcode): - (JSC::X86Assembler::cmpq_mr): - (JSC::X86Assembler::setcc_r): - (JSC::X86Assembler::sete_r): - (JSC::X86Assembler::setne_r): - (JSC::X86Assembler::jne): - (JSC::X86Assembler::je): - (JSC::X86Assembler::jl): - (JSC::X86Assembler::jb): - (JSC::X86Assembler::jle): - (JSC::X86Assembler::jbe): - (JSC::X86Assembler::jge): - (JSC::X86Assembler::jg): - (JSC::X86Assembler::ja): - (JSC::X86Assembler::jae): - (JSC::X86Assembler::jo): - (JSC::X86Assembler::jp): - (JSC::X86Assembler::js): - (JSC::X86Assembler::jcc): - (JSC::X86Assembler::X86InstructionFormatter::putModRmSib): - * jit/JIT.cpp: - (JSC::JIT::compileOpStrictEq): - (JSC::JIT::emitSlowScriptCheck): - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - (JSC::JIT::privateCompile): - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArith_op_lshift): - (JSC::JIT::compileFastArith_op_mod): - (JSC::JIT::compileFastArith_op_post_inc): - (JSC::JIT::compileFastArith_op_post_dec): - (JSC::JIT::compileFastArith_op_pre_inc): - (JSC::JIT::compileFastArith_op_pre_dec): - (JSC::JIT::compileBinaryArithOp): - (JSC::JIT::compileFastArith_op_add): - (JSC::JIT::compileFastArith_op_mul): - * jit/JITCall.cpp: - (JSC::JIT::compileOpCall): - (JSC::JIT::compileOpCallSlowCase): - * jit/JITInlineMethods.h: - (JSC::JIT::checkStructure): - (JSC::JIT::emitJumpIfJSCell): - (JSC::JIT::emitJumpIfNotJSCell): - (JSC::JIT::emitJumpIfImmediateNumber): - (JSC::JIT::emitJumpIfNotImmediateNumber): - (JSC::JIT::emitJumpIfImmediateInteger): - (JSC::JIT::emitJumpIfNotImmediateInteger): - (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::compileGetByIdHotPath): - (JSC::JIT::compilePutByIdHotPath): - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::privateCompilePatchGetArrayLength): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdProtoList): - (JSC::JIT::privateCompileGetByIdChainList): - (JSC::JIT::privateCompileGetByIdChain): - * runtime/RegExp.cpp: - (JSC::RegExp::match): - * wrec/WRECGenerator.cpp: - (JSC::WREC::Generator::generateEnter): - (JSC::WREC::Generator::generateIncrementIndex): - (JSC::WREC::Generator::generateLoadCharacter): - (JSC::WREC::Generator::generateJumpIfNotEndOfInput): - (JSC::WREC::Generator::generateBackreferenceQuantifier): - (JSC::WREC::Generator::generateNonGreedyQuantifier): - (JSC::WREC::Generator::generateGreedyQuantifier): - (JSC::WREC::Generator::generatePatternCharacterPair): - (JSC::WREC::Generator::generatePatternCharacter): - (JSC::WREC::Generator::generateCharacterClassInvertedRange): - (JSC::WREC::Generator::generateCharacterClassInverted): - (JSC::WREC::Generator::generateAssertionBOL): - (JSC::WREC::Generator::generateAssertionEOL): - (JSC::WREC::Generator::generateAssertionWordBoundary): - (JSC::WREC::Generator::generateBackreference): - -2009-02-03 David Hyatt - - Fix a bug in Vector's shrinkCapacity method. It did not properly copy elements into the inline buffer - when shrinking down from a size that was greater than the inline capacity. - - Reviewed by Maciej - - * wtf/Vector.h: - (WTF::VectorBuffer::VectorBuffer): - (WTF::VectorBuffer::allocateBuffer): - -2009-02-03 Simon Hausmann - - Reviewed by Tor Arne Vestbø. - - Added accessor for JSByteArray storage. - - * runtime/JSByteArray.h: - (JSC::JSByteArray::storage): - -2009-02-03 Dmitry Titov - - Reviewed by Alexey Proskuryakov. - - https://bugs.webkit.org/show_bug.cgi?id=23560 - Implement SharedTimer on WorkerRunLoop - - * JavaScriptCore.exp: - Forgot to expose ThreadCondition::timedWait() in one of previous patches. - -2009-02-02 Oliver Hunt - - Reviewed by Gavin Barraclough. - - REGRESSION: Regular Expressions and character classes, shorthands and ranges - - - In certain circumstances when WREC::Generator::generateCharacterClassInvertedRange invokes - itself recursively, it will incorrectly emit (and thus consume) the next single character - match in the current character class. As WREC uses a binary search this out of sequence - codegen could result in a character match being missed and so cause the regex to produce - incorrect results. - - * wrec/WRECGenerator.cpp: - (JSC::WREC::Generator::generateCharacterClassInvertedRange): - -2009-02-02 Darin Adler - - Reviewed by Dave Hyatt. - - Bug 23676: Speed up uses of reserveCapacity on new vectors by adding a new reserveInitialCapacity - https://bugs.webkit.org/show_bug.cgi?id=23676 - - * API/JSObjectRef.cpp: - (JSObjectCopyPropertyNames): Use reserveInitialCapacity. - * parser/Lexer.cpp: - (JSC::Lexer::Lexer): Ditto. - (JSC::Lexer::clear): Ditto. - - * wtf/Vector.h: Added reserveInitialCapacity, a more efficient version of - reserveCapacity for use when the vector is brand new (still size 0 with no - capacity other than the inline capacity). - -2009-01-30 Mark Rowe - - Rubber-stamped by Oliver Hunt. - - Enable the JIT on Mac OS X x86_64 as it passes all tests. - - * wtf/Platform.h: - -2009-01-30 Oliver Hunt - - Reviewed by Mark Rowe and Sam Weinig. - - Finally fix load() to propagate exceptions correctly. - - * jsc.cpp: - (functionLoad): - -2009-01-30 David Levin - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=23618 - Templated worker tasks should be more error proof to use. - Fix Chromium build. - - * wtf/TypeTraits.h: - (WTF::IsConvertibleToInteger::IsConvertibleToDouble): - Avoid "possible loss of data" warning when using Microsoft's C++ compiler - by avoiding an implicit conversion of int types to doubles. - -2009-01-30 Laszlo Gombos - - Reviewed by Simon Hausmann. - - Bug 23580: GNU mode RVCT compilation support - - - * pcre/pcre_exec.cpp: Use COMPILER(GCC) instead of __GNUC__. - * wtf/FastMalloc.cpp: Ditto. - (WTF::TCMallocStats::): - * wtf/Platform.h: Don't define COMPILER(GCC) with RVCT --gnu. - -2009-01-30 David Levin - - Reviewed by Alexey Proskuryakov. - - Bug 23618: Templated worker tasks should be more error proof to use - - - Add the type traits needed for the generic worker tasks - and compile asserts for them. - - Add a summary header to the TypeTraits.h file to explain what is in there. - - Add a note to explain IsPod's deficiencies. - - * wtf/TypeTraits.h: - -2009-01-30 David Levin - - Reviewed by Alexey Proskuryakov. - - Bug 23616: Various "template helpers" should be consolidated from isolated files in JavaScriptCore. - - - * wtf/TypeTraits.h: Moved RemovePointer, IsPod, IsInteger to this file. - - * wtf/OwnPtr.h: Use RemovePointer from TypeTraits.h. - * wtf/RetainPtr.h: Ditto. - - * wtf/HashTraits.h: Use IsInteger from TypeTraits.h. - - * wtf/VectorTraits.h: Use IsPod from TypeTraits.h. - - * GNUmakefile.am: - * JavaScriptCore.vcproj/WTF/WTF.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - Added TypeTraits.h. - -2009-01-29 Stephanie Lewis - - RS by Oliver Hunt. - - Update the order files. - - * JavaScriptCore.order: - -2009-01-29 Cameron Zwarich - - Reviewed by Oliver Hunt. - - Bug 23551: Crash on page load with profiler enabled and running - - - - Interpreter::execute(FunctionBodyNode*, ...) calls Profiler::didExecute() - with a stale CallFrame. If some part of the scope chain has already been - freed, Profiler::didExecute() will crash when attempting to get the lexical - global object. The fix is to make the didExecute() call use the caller's - CallFrame, not the one made for the function call. In this case, the - willExecute() call should also be changed to match. - - Since this occurs in the actual inspector JS, it is difficult to reduce. - I couldn't make a layout test. - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::execute): - -2009-01-28 Sam Weinig - - Reviewed by Gavin Barraclough. - - Fix for - Hang occurs when closing Installer window (iTunes, Aperture) - - * JavaScriptCore.exp: Export JSGlobalData::sharedInstance. - -2009-01-28 Sam Weinig - - Reviewed by Geoff Garen. - - Initial patch by Mark Rowe. - - - REGRESSION (r36006): "out of memory" alert running dromaeo on Windows - - Report the cost of the ArrayStorage vector more accurately/often. - - * runtime/JSArray.cpp: - (JSC::JSArray::JSArray): Report the extra cost even for a filled array - because JSString using the single character optimization and immediates - wont increase the cost themselves. - (JSC::JSArray::putSlowCase): Update the cost when increasing the size of - the array. - (JSC::JSArray::increaseVectorLength): Ditto. - -2009-01-28 Sam Weinig - - Reviewed by Geoff Garen. - - Fix for - REGRESSION (Safari 3-4): Local variable not accessible from Dashcode console or variables view - - Iterating the properties of activation objects accessed through the WebKit debugging - APIs was broken by forced conversion of JSActivation to the global object. To fix this, - we use a proxy activation object that acts more like a normal JSObject. - - * debugger/DebuggerActivation.cpp: Added. - (JSC::DebuggerActivation::DebuggerActivation): - (JSC::DebuggerActivation::mark): - (JSC::DebuggerActivation::className): - (JSC::DebuggerActivation::getOwnPropertySlot): - (JSC::DebuggerActivation::put): - (JSC::DebuggerActivation::putWithAttributes): - (JSC::DebuggerActivation::deleteProperty): - (JSC::DebuggerActivation::getPropertyNames): - (JSC::DebuggerActivation::getPropertyAttributes): - (JSC::DebuggerActivation::defineGetter): - (JSC::DebuggerActivation::defineSetter): - (JSC::DebuggerActivation::lookupGetter): - (JSC::DebuggerActivation::lookupSetter): - * debugger/DebuggerActivation.h: Added. - Proxy JSActivation object for Debugging. - - * runtime/JSActivation.h: - (JSC::JSActivation::isActivationObject): Added. - * runtime/JSObject.h: - (JSC::JSObject::isActivationObject): Added. - -2009-01-28 David Kilzer - - Bug 23490: Remove initialRefCount argument from RefCounted class - - - - Reviewed by Darin Adler. - - RefCountedBase now always starts with a ref count of 1, so there - is no need to pass the initialRefCount into the class anymore. - - * wtf/ByteArray.h: - (WTF::ByteArray::ByteArray): Removed call to RefCounted(1). - * wtf/RefCounted.h: - (WTF::RefCountedBase::RefCountedBase): Changed to start with a - ref count of 1. - (WTF::RefCounted::RefCounted): Removed initialRefCount argument - and removed call to RefCounted(1). - -2009-01-26 Adele Peterson - - Build fix. - - * debugger/Debugger.cpp: - -2009-01-26 Gavin Barraclough - - Reviewed by Darin Adler. - - Fixes for eq null & neq null, on 64-bit JIT. - https://bugs.webkit.org/show_bug.cgi?id=23559 - - This patch degrades 64-bit JIT performance on some benchmarks, - due to the whole not-being-incorrect thing. - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - -2009-01-26 Cameron Zwarich - - Reviewed by Gavin Barraclough. - - Bug 23552: Dashcode evaluator no longer works after making ExecStates actual call frames - - - - * JavaScriptCore.exp: - * debugger/Debugger.cpp: - (JSC::evaluateInGlobalCallFrame): Added so that WebScriptCallFrame can - evaluate JS starting from a global call frame. - * debugger/Debugger.h: - -2009-01-25 Mark Rowe - - Rubber-stamped by Dan Bernstein. - - Improve the consistency of settings in our .xcconfig files. - - * Configurations/Base.xcconfig: Enable GCC_OBJC_CALL_CXX_CDTORS to match other projects. - -2009-01-25 Darin Adler - - Reviewed by Mark Rowe. - - Bug 23352: Turn on more compiler warnings in the Mac build - https://bugs.webkit.org/show_bug.cgi?id=23352 - - Turn on the following warnings: - - -Wcast-qual - -Wextra-tokens - -Wformat=2 - -Winit-self - -Wmissing-noreturn - -Wpacked - -Wrendundant-decls - - * Configurations/Base.xcconfig: Added the new warnings. Switched to -Wextra instead of - -W for clarity since we don't have to support the older versions of gcc that require the - old -W syntax. Since we now use -Wformat=2, removed -Wformat-security. Also removed - -Wno-format-y2k since we can have that one on now. - -2009-01-25 Judit Jasz - - Reviewed by Darin Adler. - - Compilation problem fixing - http://bugs.webkit.org/show_bug.cgi?id=23497 - - * jit/JITCall.cpp: - (JSC::JIT::compileOpCall): Use JSValuePtr::encode. - -2009-01-25 Darin Adler - - Reviewed by Sam Weinig. - - Bug 23352: Turn on more compiler warnings in the Mac build - https://bugs.webkit.org/show_bug.cgi?id=23352 - - Fourth patch: Deal with the last few stray warnings. - - * parser/Parser.cpp: Only declare jscyyparse if it's not already declared. - This makes both separate compilation and all-in-one compilation work with the - -Wredundant-decls warning. - -2009-01-25 Darin Adler - - Reviewed by Sam Weinig. - - Bug 23352: Turn on more compiler warnings in the Mac build - https://bugs.webkit.org/show_bug.cgi?id=23352 - - Third patch: Use the noreturn attribute on functions that don't - return to prepare for the use of the -Wmissing-noreturn warning. - - * jit/JITCall.cpp: - (JSC::unreachable): Added NO_RETURN. - * jsc.cpp: - (functionQuit): Ditto. - (printUsageStatement): Ditto. - * wtf/AlwaysInline.h: Added definition of NO_RETURN. - -2009-01-24 Oliver Hunt - - Reviewed by Maciej Stachowiak. - - Force inlining of Lexer::matchPunctuator - - 2.2% win when parsing jQuery, Mootools, Prototype, etc - - * parser/Lexer.h: - -2009-01-23 Gavin Barraclough - - Reviewed by Geoff Garen. - - Fix for - Ensure that callbacks out from the JSC interface are only allowed - to return in reverse-chronological order to that in which they were - made. If we allow earlier callbacks to return first, then this may - result in setions of the RegisterFile in use by another thread - being trampled. - - See uber-comment in JSLock.h for details. - - * runtime/JSLock.cpp: - (JSC::JSLock::DropAllLocks::DropAllLocks): - (JSC::JSLock::DropAllLocks::~DropAllLocks): - -2009-01-23 Darin Adler - - Try to fix WX build. - - * runtime/JSGlobalObjectFunctions.h: Include - for the definition of UChar. - -2009-01-23 Anders Carlsson - - * Configurations/Base.xcconfig: - GCC 4.0 build fix. - - * runtime/JSNumberCell.h: - 64-bit build fix. - -2009-01-23 Anders Carlsson - - Reviewed by Sam Weinig. - - Turn on -Wmissing-prototypes and fix the warnings. - - * API/JSClassRef.cpp: - (clearReferenceToPrototype): - * Configurations/Base.xcconfig: - * runtime/Collector.cpp: - (JSC::getPlatformThreadRegisters): - * runtime/ExceptionHelpers.cpp: - (JSC::createError): - * runtime/JSGlobalObjectFunctions.h: - * runtime/JSNumberCell.h: - * runtime/UString.cpp: - (JSC::initializeStaticBaseString): - (JSC::createRep): - * wtf/FastMalloc.cpp: - * wtf/Threading.cpp: - -2009-01-22 Mark Rowe - - Rubber-stamped by Anders Carlsson. - - Disable GCC_WARN_ABOUT_MISSING_PROTOTYPES temporarily. - - Current versions of Xcode only respect it for C and Objective-C files, - and our code doesn't currently compile if it is applied to C++ and - Objective-C++ files. - - * Configurations/Base.xcconfig: - -2009-01-22 Steve Falkenburg - - https://bugs.webkit.org/show_bug.cgi?id=23489 - - Return currentTime() in correct units for the two early return cases. - - Reviewed by Mark Rowe. - - * wtf/CurrentTime.cpp: - (WTF::currentTime): - -2009-01-22 Sam Weinig - - Reviewed by Mark Rowe. - - Fix for - FastMalloc allocating an extra 4MB of meta-data on 64-bit - - Rely on the fact that on all known x86-64 platforms only use 48 bits of - address space to shrink the initial size of the PageMap from ~4MB to 120K. - For 64-bit we still use a 3-level radix tree, but now each level is only 12 - bits wide. - - No performance change. - - * wtf/FastMalloc.cpp: - (WTF::MapSelector): Add specialization for 64 bit that takes into account the - 16 bits of unused address space on x86-64. - -2009-01-22 Beth Dakin - - Reviewed by Sam Weinig. - - Fix for https://bugs.webkit.org/show_bug.cgi?id=23461 LayoutTests/ - fast/js/numeric-conversion.html is broken, and corresponding - - - The basic problem here is that parseInt(Infinity) should be NaN, - but we were returning 0. NaN matches Safari 3.2.1 and Firefox. - - * runtime/JSGlobalObjectFunctions.cpp: - (JSC::globalFuncParseInt): - -2009-01-22 Oliver Hunt - - Reviewed by Geoff Garen. - - (r39682-r39736) JSFunFuzz: crash on "(function(){({ x2: x }), })()" - - - Automatic semicolon insertion was resulting in this being accepted in the initial - nodeless parsing, but subsequent reparsing for code generation would fail, leading - to a crash. The solution is to ensure that reparsing a function performs parsing - in the same state as the initial parse. We do this by modifying the saved source - ranges to include rather than exclude the opening and closing braces. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): add an assertion for successful recompile - * parser/Lexer.h: - (JSC::Lexer::sourceCode): include rather than exclude braces. - * parser/Nodes.h: - (JSC::FunctionBodyNode::toSourceString): No need to append braces anymore. - -2009-01-22 Dmitry Titov - - Reviewed by Alexey Proskuryakov. - - https://bugs.webkit.org/show_bug.cgi?id=23373 - - Implement ThreadCondition::timedWait(). - Since we borrow the code for condition variables from other sources, - I did the same for timedWait(). See comments in ThreadingWin.cpp for - rationale and more info. - - * wtf/CONTRIBUTORS.pthreads-win32: - Added. A list of Pthreads-win32 contributors mentioned in their license. The license itself - is included into wtf/ThreadingWin32.cpp. - - * wtf/Threading.h: - * wtf/ThreadingWin.cpp: - Additional info and Pthreads-win32 license at the beginning. - (WTF::PlatformCondition::timedWait): new method, derived from Pthreads-win32. - (WTF::PlatformCondition::signal): same - (WTF::ThreadCondition::ThreadCondition): - (WTF::ThreadCondition::~ThreadCondition): - (WTF::ThreadCondition::wait): this now calls PlatformCondition::timedWait. - (WTF::ThreadCondition::timedWait): same - (WTF::ThreadCondition::signal): this now calls PlatformCondition::signal. - (WTF::ThreadCondition::broadcast): same - -2009-01-21 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Fix for https://bugs.webkit.org/show_bug.cgi?id=23469. - - We need to check all numbers in integer switches, not just those - represented as integer JSImmediates. - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - (JSC::Interpreter::cti_op_switch_imm): - -2009-01-21 Gavin Barraclough - - Reviewed by Geoff Garen. - - Fix for https://bugs.webkit.org/show_bug.cgi?id=23468. - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - -2009-01-21 Alexey Proskuryakov - - Suggested by Oliver Hunt. Reviewed by Oliver Hunt. - - https://bugs.webkit.org/show_bug.cgi?id=23456 - Function argument names leak - - * parser/Nodes.cpp: (JSC::FunctionBodyNode::~FunctionBodyNode): Destruct parameter names. - -2009-01-20 Oliver Hunt - - Reviewed by NOBODY (Build fix). - - Windows build fix - - * JavaScriptCore.vcproj/WTF/WTF.vcproj: - -2009-01-20 Gavin Barraclough - - Reviewed by Mark Rowe. - - Structure property table deleted offset maps are being leaked. - Probably shouldn't be doing that. - - https://bugs.webkit.org/show_bug.cgi?id=23442 - - * runtime/Structure.cpp: - (JSC::Structure::~Structure): - -2009-01-20 Oliver Hunt - - Reviewed by NOBODY (build fix). - - Attempt to fix gtk build - - * GNUmakefile.am: - -2009-01-20 Darin Adler - - * runtime/StringPrototype.cpp: - (JSC::substituteBackreferences): Add back the initialization to fix the build. - -2009-01-20 Darin Adler - - Reviewed by Mark Rowe. - - Bug 23352: Turn on more compiler warnings in the Mac build - https://bugs.webkit.org/show_bug.cgi?id=23352 - - First patch: Fix some simple cases of various warnings. - - * pcre/pcre_compile.cpp: - (jsRegExpCompile): Use const_cast to change const-ness. - - * runtime/StringPrototype.cpp: - (JSC::substituteBackreferences): Remove unneeded initialization and - use UChar instead of unsigned short for UTF-16 values. - - * wtf/dtoa.cpp: - (WTF::strtod): Use const_cast to change const-ness. - -2009-01-20 Oliver Hunt - - Reviewed by NOBODY (build fix). - - Whoops, remove runtime/ByteArray references from .pri and .scons builds, update .bkl - - * JavaScriptCore.pri: - * JavaScriptCore.scons: - * JavaScriptCoreSources.bkl: - -2009-01-20 Oliver Hunt - - RS=Dan Bernstein. - - Move runtime/ByteArray to wtf/ByteArray - - * GNUmakefile.am: - * JavaScriptCore.exp: - * JavaScriptCore.pri: - * JavaScriptCore.scons: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.vcproj/WTF/WTF.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * runtime/JSByteArray.cpp: - * runtime/JSByteArray.h: - * wtf/ByteArray.cpp: Renamed from JavaScriptCore/runtime/ByteArray.cpp. - (WTF::ByteArray::create): - * wtf/ByteArray.h: Renamed from JavaScriptCore/runtime/ByteArray.h. - (WTF::ByteArray::length): - (WTF::ByteArray::set): - (WTF::ByteArray::get): - (WTF::ByteArray::data): - (WTF::ByteArray::deref): - (WTF::ByteArray::ByteArray): - -2009-01-19 Sam Weinig - - Rubber-stamped by Gavin Barraclough. - - Remove temporary operator-> from JSValuePtr. - - * API/JSCallbackFunction.cpp: - (JSC::JSCallbackFunction::call): - * API/JSCallbackObjectFunctions.h: - (JSC::::call): - (JSC::::toNumber): - (JSC::::toString): - * API/JSObjectRef.cpp: - (JSObjectSetPrototype): - * API/JSValueRef.cpp: - (JSValueGetType): - (JSValueIsUndefined): - (JSValueIsNull): - (JSValueIsBoolean): - (JSValueIsNumber): - (JSValueIsString): - (JSValueIsObject): - (JSValueIsObjectOfClass): - (JSValueToBoolean): - (JSValueToNumber): - (JSValueToStringCopy): - (JSValueToObject): - * bytecode/CodeBlock.cpp: - (JSC::valueToSourceString): - (JSC::CodeBlock::mark): - * bytecode/CodeBlock.h: - (JSC::CodeBlock::isKnownNotImmediate): - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitEqualityOp): - (JSC::keyForImmediateSwitch): - * interpreter/Interpreter.cpp: - (JSC::jsLess): - (JSC::jsLessEq): - (JSC::jsAddSlowCase): - (JSC::jsAdd): - (JSC::jsTypeStringForValue): - (JSC::jsIsObjectType): - (JSC::jsIsFunctionType): - (JSC::isNotObject): - (JSC::Interpreter::callEval): - (JSC::Interpreter::throwException): - (JSC::cachePrototypeChain): - (JSC::Interpreter::tryCachePutByID): - (JSC::countPrototypeChainEntriesAndCheckForProxies): - (JSC::Interpreter::tryCacheGetByID): - (JSC::Interpreter::privateExecute): - (JSC::Interpreter::tryCTICachePutByID): - (JSC::Interpreter::tryCTICacheGetByID): - (JSC::Interpreter::cti_op_convert_this): - (JSC::Interpreter::cti_op_add): - (JSC::Interpreter::cti_op_pre_inc): - (JSC::Interpreter::cti_op_put_by_id_generic): - (JSC::Interpreter::cti_op_get_by_id_generic): - (JSC::Interpreter::cti_op_put_by_id): - (JSC::Interpreter::cti_op_put_by_id_second): - (JSC::Interpreter::cti_op_put_by_id_fail): - (JSC::Interpreter::cti_op_get_by_id): - (JSC::Interpreter::cti_op_get_by_id_second): - (JSC::Interpreter::cti_op_get_by_id_self_fail): - (JSC::Interpreter::cti_op_get_by_id_proto_list): - (JSC::Interpreter::cti_op_get_by_id_proto_list_full): - (JSC::Interpreter::cti_op_get_by_id_proto_fail): - (JSC::Interpreter::cti_op_get_by_id_array_fail): - (JSC::Interpreter::cti_op_get_by_id_string_fail): - (JSC::Interpreter::cti_op_instanceof): - (JSC::Interpreter::cti_op_del_by_id): - (JSC::Interpreter::cti_op_mul): - (JSC::Interpreter::cti_op_call_JSFunction): - (JSC::Interpreter::cti_op_call_NotJSFunction): - (JSC::Interpreter::cti_op_construct_JSConstruct): - (JSC::Interpreter::cti_op_construct_NotJSConstruct): - (JSC::Interpreter::cti_op_get_by_val): - (JSC::Interpreter::cti_op_get_by_val_byte_array): - (JSC::Interpreter::cti_op_sub): - (JSC::Interpreter::cti_op_put_by_val): - (JSC::Interpreter::cti_op_put_by_val_array): - (JSC::Interpreter::cti_op_put_by_val_byte_array): - (JSC::Interpreter::cti_op_loop_if_true): - (JSC::Interpreter::cti_op_negate): - (JSC::Interpreter::cti_op_div): - (JSC::Interpreter::cti_op_pre_dec): - (JSC::Interpreter::cti_op_not): - (JSC::Interpreter::cti_op_jtrue): - (JSC::Interpreter::cti_op_post_inc): - (JSC::Interpreter::cti_op_lshift): - (JSC::Interpreter::cti_op_bitand): - (JSC::Interpreter::cti_op_rshift): - (JSC::Interpreter::cti_op_bitnot): - (JSC::Interpreter::cti_op_mod): - (JSC::Interpreter::cti_op_post_dec): - (JSC::Interpreter::cti_op_urshift): - (JSC::Interpreter::cti_op_bitxor): - (JSC::Interpreter::cti_op_bitor): - (JSC::Interpreter::cti_op_push_scope): - (JSC::Interpreter::cti_op_is_undefined): - (JSC::Interpreter::cti_op_is_boolean): - (JSC::Interpreter::cti_op_is_number): - (JSC::Interpreter::cti_op_to_jsnumber): - (JSC::Interpreter::cti_op_in): - (JSC::Interpreter::cti_op_put_by_index): - (JSC::Interpreter::cti_op_switch_imm): - (JSC::Interpreter::cti_op_switch_char): - (JSC::Interpreter::cti_op_switch_string): - (JSC::Interpreter::cti_op_del_by_val): - (JSC::Interpreter::cti_op_put_getter): - (JSC::Interpreter::cti_op_put_setter): - (JSC::Interpreter::cti_op_new_error): - * interpreter/Interpreter.h: - (JSC::Interpreter::isJSArray): - (JSC::Interpreter::isJSString): - (JSC::Interpreter::isJSByteArray): - * interpreter/Register.h: - (JSC::Register::marked): - (JSC::Register::mark): - * jit/JITInlineMethods.h: - (JSC::JIT::getConstantOperandImmediateInt): - (JSC::JIT::isOperandConstantImmediateInt): - * jsc.cpp: - (functionPrint): - (functionDebug): - (functionRun): - (functionLoad): - (runWithScripts): - (runInteractive): - * parser/Nodes.cpp: - (JSC::processClauseList): - * profiler/ProfileGenerator.cpp: - (JSC::ProfileGenerator::addParentForConsoleStart): - * profiler/Profiler.cpp: - (JSC::Profiler::createCallIdentifier): - * runtime/ArrayConstructor.cpp: - (JSC::constructArrayWithSizeQuirk): - * runtime/ArrayPrototype.cpp: - (JSC::arrayProtoFuncToString): - (JSC::arrayProtoFuncToLocaleString): - (JSC::arrayProtoFuncJoin): - (JSC::arrayProtoFuncConcat): - (JSC::arrayProtoFuncPop): - (JSC::arrayProtoFuncPush): - (JSC::arrayProtoFuncReverse): - (JSC::arrayProtoFuncShift): - (JSC::arrayProtoFuncSlice): - (JSC::arrayProtoFuncSort): - (JSC::arrayProtoFuncSplice): - (JSC::arrayProtoFuncUnShift): - (JSC::arrayProtoFuncFilter): - (JSC::arrayProtoFuncMap): - (JSC::arrayProtoFuncEvery): - (JSC::arrayProtoFuncForEach): - (JSC::arrayProtoFuncSome): - (JSC::arrayProtoFuncIndexOf): - (JSC::arrayProtoFuncLastIndexOf): - * runtime/BooleanConstructor.cpp: - (JSC::constructBoolean): - (JSC::callBooleanConstructor): - * runtime/BooleanPrototype.cpp: - (JSC::booleanProtoFuncToString): - (JSC::booleanProtoFuncValueOf): - * runtime/Collector.cpp: - (JSC::Heap::protect): - (JSC::Heap::unprotect): - (JSC::Heap::heap): - (JSC::Heap::collect): - (JSC::typeName): - * runtime/Completion.cpp: - (JSC::evaluate): - * runtime/DateConstructor.cpp: - (JSC::constructDate): - (JSC::dateParse): - (JSC::dateUTC): - * runtime/DateInstance.h: - (JSC::DateInstance::internalNumber): - * runtime/DatePrototype.cpp: - (JSC::formatLocaleDate): - (JSC::fillStructuresUsingTimeArgs): - (JSC::fillStructuresUsingDateArgs): - (JSC::dateProtoFuncToString): - (JSC::dateProtoFuncToUTCString): - (JSC::dateProtoFuncToDateString): - (JSC::dateProtoFuncToTimeString): - (JSC::dateProtoFuncToLocaleString): - (JSC::dateProtoFuncToLocaleDateString): - (JSC::dateProtoFuncToLocaleTimeString): - (JSC::dateProtoFuncGetTime): - (JSC::dateProtoFuncGetFullYear): - (JSC::dateProtoFuncGetUTCFullYear): - (JSC::dateProtoFuncToGMTString): - (JSC::dateProtoFuncGetMonth): - (JSC::dateProtoFuncGetUTCMonth): - (JSC::dateProtoFuncGetDate): - (JSC::dateProtoFuncGetUTCDate): - (JSC::dateProtoFuncGetDay): - (JSC::dateProtoFuncGetUTCDay): - (JSC::dateProtoFuncGetHours): - (JSC::dateProtoFuncGetUTCHours): - (JSC::dateProtoFuncGetMinutes): - (JSC::dateProtoFuncGetUTCMinutes): - (JSC::dateProtoFuncGetSeconds): - (JSC::dateProtoFuncGetUTCSeconds): - (JSC::dateProtoFuncGetMilliSeconds): - (JSC::dateProtoFuncGetUTCMilliseconds): - (JSC::dateProtoFuncGetTimezoneOffset): - (JSC::dateProtoFuncSetTime): - (JSC::setNewValueFromTimeArgs): - (JSC::setNewValueFromDateArgs): - (JSC::dateProtoFuncSetYear): - (JSC::dateProtoFuncGetYear): - * runtime/ErrorConstructor.cpp: - (JSC::constructError): - * runtime/ErrorPrototype.cpp: - (JSC::errorProtoFuncToString): - * runtime/ExceptionHelpers.cpp: - (JSC::createError): - (JSC::createErrorMessage): - * runtime/FunctionConstructor.cpp: - (JSC::constructFunction): - * runtime/FunctionPrototype.cpp: - (JSC::functionProtoFuncToString): - (JSC::functionProtoFuncApply): - (JSC::functionProtoFuncCall): - * runtime/GetterSetter.cpp: - (JSC::GetterSetter::toObject): - * runtime/JSActivation.cpp: - (JSC::JSActivation::getOwnPropertySlot): - * runtime/JSArray.cpp: - (JSC::JSArray::put): - (JSC::JSArray::mark): - (JSC::JSArray::sort): - (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key): - (JSC::JSArray::compactForSorting): - * runtime/JSByteArray.h: - (JSC::JSByteArray::setIndex): - * runtime/JSCell.h: - (JSC::asCell): - * runtime/JSFunction.cpp: - (JSC::JSFunction::call): - (JSC::JSFunction::construct): - * runtime/JSGlobalObject.cpp: - (JSC::markIfNeeded): - (JSC::lastInPrototypeChain): - * runtime/JSGlobalObjectFunctions.cpp: - (JSC::encode): - (JSC::decode): - (JSC::globalFuncEval): - (JSC::globalFuncParseInt): - (JSC::globalFuncParseFloat): - (JSC::globalFuncIsNaN): - (JSC::globalFuncIsFinite): - (JSC::globalFuncEscape): - (JSC::globalFuncUnescape): - (JSC::globalFuncJSCPrint): - * runtime/JSImmediate.cpp: - (JSC::JSImmediate::toThisObject): - (JSC::JSImmediate::toObject): - (JSC::JSImmediate::prototype): - (JSC::JSImmediate::toString): - * runtime/JSImmediate.h: - * runtime/JSObject.cpp: - (JSC::JSObject::mark): - (JSC::JSObject::put): - (JSC::callDefaultValueFunction): - (JSC::JSObject::getPrimitiveNumber): - (JSC::JSObject::defineGetter): - (JSC::JSObject::defineSetter): - (JSC::JSObject::lookupGetter): - (JSC::JSObject::lookupSetter): - (JSC::JSObject::hasInstance): - (JSC::JSObject::toNumber): - (JSC::JSObject::toString): - * runtime/JSObject.h: - (JSC::JSObject::JSObject): - (JSC::JSObject::inlineGetOwnPropertySlot): - (JSC::JSObject::getOwnPropertySlotForWrite): - (JSC::JSObject::getPropertySlot): - (JSC::JSValuePtr::get): - * runtime/JSPropertyNameIterator.h: - (JSC::JSPropertyNameIterator::create): - * runtime/JSString.cpp: - (JSC::JSString::getOwnPropertySlot): - * runtime/JSValue.h: - * runtime/JSWrapperObject.cpp: - (JSC::JSWrapperObject::mark): - * runtime/JSWrapperObject.h: - (JSC::JSWrapperObject::setInternalValue): - * runtime/MathObject.cpp: - (JSC::mathProtoFuncAbs): - (JSC::mathProtoFuncACos): - (JSC::mathProtoFuncASin): - (JSC::mathProtoFuncATan): - (JSC::mathProtoFuncATan2): - (JSC::mathProtoFuncCeil): - (JSC::mathProtoFuncCos): - (JSC::mathProtoFuncExp): - (JSC::mathProtoFuncFloor): - (JSC::mathProtoFuncLog): - (JSC::mathProtoFuncMax): - (JSC::mathProtoFuncMin): - (JSC::mathProtoFuncPow): - (JSC::mathProtoFuncRound): - (JSC::mathProtoFuncSin): - (JSC::mathProtoFuncSqrt): - (JSC::mathProtoFuncTan): - * runtime/NativeErrorConstructor.cpp: - (JSC::NativeErrorConstructor::NativeErrorConstructor): - (JSC::NativeErrorConstructor::construct): - * runtime/NumberConstructor.cpp: - (JSC::constructWithNumberConstructor): - (JSC::callNumberConstructor): - * runtime/NumberPrototype.cpp: - (JSC::numberProtoFuncToString): - (JSC::numberProtoFuncToLocaleString): - (JSC::numberProtoFuncValueOf): - (JSC::numberProtoFuncToFixed): - (JSC::numberProtoFuncToExponential): - (JSC::numberProtoFuncToPrecision): - * runtime/ObjectConstructor.cpp: - (JSC::constructObject): - * runtime/ObjectPrototype.cpp: - (JSC::objectProtoFuncValueOf): - (JSC::objectProtoFuncHasOwnProperty): - (JSC::objectProtoFuncIsPrototypeOf): - (JSC::objectProtoFuncDefineGetter): - (JSC::objectProtoFuncDefineSetter): - (JSC::objectProtoFuncLookupGetter): - (JSC::objectProtoFuncLookupSetter): - (JSC::objectProtoFuncPropertyIsEnumerable): - (JSC::objectProtoFuncToLocaleString): - (JSC::objectProtoFuncToString): - * runtime/Operations.h: - (JSC::JSValuePtr::equalSlowCaseInline): - (JSC::JSValuePtr::strictEqual): - (JSC::JSValuePtr::strictEqualSlowCaseInline): - * runtime/Protect.h: - (JSC::gcProtect): - (JSC::gcUnprotect): - * runtime/RegExpConstructor.cpp: - (JSC::setRegExpConstructorInput): - (JSC::setRegExpConstructorMultiline): - (JSC::constructRegExp): - * runtime/RegExpObject.cpp: - (JSC::setRegExpObjectLastIndex): - (JSC::RegExpObject::match): - * runtime/RegExpPrototype.cpp: - (JSC::regExpProtoFuncTest): - (JSC::regExpProtoFuncExec): - (JSC::regExpProtoFuncCompile): - (JSC::regExpProtoFuncToString): - * runtime/StringConstructor.cpp: - (JSC::stringFromCharCodeSlowCase): - (JSC::stringFromCharCode): - (JSC::constructWithStringConstructor): - (JSC::callStringConstructor): - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncReplace): - (JSC::stringProtoFuncToString): - (JSC::stringProtoFuncCharAt): - (JSC::stringProtoFuncCharCodeAt): - (JSC::stringProtoFuncConcat): - (JSC::stringProtoFuncIndexOf): - (JSC::stringProtoFuncLastIndexOf): - (JSC::stringProtoFuncMatch): - (JSC::stringProtoFuncSearch): - (JSC::stringProtoFuncSlice): - (JSC::stringProtoFuncSplit): - (JSC::stringProtoFuncSubstr): - (JSC::stringProtoFuncSubstring): - (JSC::stringProtoFuncToLowerCase): - (JSC::stringProtoFuncToUpperCase): - (JSC::stringProtoFuncLocaleCompare): - (JSC::stringProtoFuncBig): - (JSC::stringProtoFuncSmall): - (JSC::stringProtoFuncBlink): - (JSC::stringProtoFuncBold): - (JSC::stringProtoFuncFixed): - (JSC::stringProtoFuncItalics): - (JSC::stringProtoFuncStrike): - (JSC::stringProtoFuncSub): - (JSC::stringProtoFuncSup): - (JSC::stringProtoFuncFontcolor): - (JSC::stringProtoFuncFontsize): - (JSC::stringProtoFuncAnchor): - (JSC::stringProtoFuncLink): - * runtime/Structure.cpp: - (JSC::Structure::Structure): - (JSC::Structure::getEnumerablePropertyNames): - (JSC::Structure::createCachedPrototypeChain): - * runtime/Structure.h: - (JSC::Structure::mark): - * runtime/StructureChain.cpp: - (JSC::StructureChain::StructureChain): - -2009-01-19 Darin Adler - - Reviewed by Sam Weinig. - - Bug 23409: REGRESSION: RegExp 'replace()' function improperly processes '$$' - - - - Test: fast/js/string-replace-3.html - - * runtime/StringPrototype.cpp: - (JSC::substituteBackreferences): Remove code that adds an extra $ -- not sure - how this ever worked. - -2009-01-16 Gavin Barraclough - - Reviewed by Oliver Hunt. - - On x86-64 jit, cache JSImmedate::TagMask & JSImmedate::TagTypeNumber in - registers, save reloading them every time they're used. - - Draws x86-64 jit performance close to that of i386 jit. - - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::subPtr): - (JSC::MacroAssembler::jnzPtr): - (JSC::MacroAssembler::jzPtr): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - * jit/JIT.h: - * jit/JITArithmetic.cpp: - (JSC::JIT::compileBinaryArithOpSlowCase): - * jit/JITInlineMethods.h: - (JSC::JIT::emitJumpIfJSCell): - (JSC::JIT::emitJumpIfNotJSCell): - (JSC::JIT::emitJumpIfImmediateNumber): - (JSC::JIT::emitJumpIfNotImmediateNumber): - (JSC::JIT::emitJumpIfImmediateInteger): - (JSC::JIT::emitJumpIfNotImmediateInteger): - (JSC::JIT::emitFastArithIntToImmNoCheck): - -2009-01-16 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Add support to x86-64 JIT for inline double precision arithmetic ops. - +5/6% on x86-64, JIT enabled, sunspider. - - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::addPtr): - * assembler/X86Assembler.h: - (JSC::X86Assembler::movq_rr): - * jit/JIT.h: - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArith_op_pre_inc): - (JSC::JIT::compileBinaryArithOp): - (JSC::JIT::compileBinaryArithOpSlowCase): - (JSC::JIT::compileFastArith_op_add): - (JSC::JIT::compileFastArithSlow_op_add): - (JSC::JIT::compileFastArith_op_mul): - (JSC::JIT::compileFastArithSlow_op_mul): - (JSC::JIT::compileFastArith_op_sub): - (JSC::JIT::compileFastArithSlow_op_sub): - * parser/ResultType.h: - (JSC::ResultType::isReusable): - (JSC::ResultType::isInt32): - (JSC::ResultType::definitelyIsNumber): - (JSC::ResultType::mightBeNumber): - (JSC::ResultType::isNotNumber): - (JSC::ResultType::unknownType): - -2009-01-16 Gavin Barraclough - - Reviewed by Geoff Garen. - - Fixes for SamplingTool. - - https://bugs.webkit.org/show_bug.cgi?id=23390 - - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::storePtr): - * bytecode/SamplingTool.cpp: - (JSC::SamplingTool::run): - (JSC::SamplingTool::dump): - * bytecode/SamplingTool.h: - (JSC::SamplingTool::encodeSample): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompile): - * jit/JIT.h: - (JSC::JIT::samplingToolTrackCodeBlock): - * jit/JITCall.cpp: - (JSC::JIT::compileOpCall): - (JSC::JIT::compileOpCallSlowCase): - * jit/JITInlineMethods.h: - (JSC::JIT::emitCTICall_internal): - -2009-01-16 Geoffrey Garen - - Reviewed by Darin Adler. - - Fixed REGRESSION: Latest WebKit nightlies - turn "c" into "" when stripping \\c_ character - - * wrec/WRECParser.cpp: - (JSC::WREC::Parser::consumeEscape): Mimic a Firefox quirk when parsing - control escapes inside character classes. - -2009-01-16 Adam Roben - - Windows build fix - - * wrec/WRECParser.cpp: - (JSC::WREC::Parser::parseParentheses): Removed unreachable code. - -2009-01-15 Geoffrey Garen - - Reviewed by Cameron Zwarich. - - Fixed REGRESSION (r39164): Discarding quantifier - on assertion gives incorrect result (23075) - - https://bugs.webkit.org/show_bug.cgi?id=23075 - - * pcre/pcre_compile.cpp: - (compileBranch): Throw away an assertion if it's followed by a quantifier - with a 0 minimum, to match SpiderMonkey, v8, and the ECMA spec. - - * wrec/WRECParser.cpp: - (JSC::WREC::Parser::parseParentheses): Fall back on PCRE for the rare - case of an assertion with a quantifier with a 0 minimum, since we - don't handle quantified subexpressions yet, and in this special case, - we can't just throw away the quantifier. - -2009-01-15 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Add support in ResultType to track that the results of bitops - are always of type int32_t. - - * parser/Nodes.cpp: - (JSC::ReadModifyResolveNode::emitBytecode): - (JSC::ReadModifyDotNode::emitBytecode): - (JSC::ReadModifyBracketNode::emitBytecode): - * parser/Nodes.h: - (JSC::ExpressionNode::): - (JSC::BooleanNode::): - (JSC::NumberNode::): - (JSC::StringNode::): - (JSC::PrePostResolveNode::): - (JSC::TypeOfResolveNode::): - (JSC::TypeOfValueNode::): - (JSC::UnaryPlusNode::): - (JSC::NegateNode::): - (JSC::BitwiseNotNode::): - (JSC::LogicalNotNode::): - (JSC::MultNode::): - (JSC::DivNode::): - (JSC::ModNode::): - (JSC::SubNode::): - (JSC::LeftShiftNode::): - (JSC::RightShiftNode::): - (JSC::UnsignedRightShiftNode::): - (JSC::LessNode::): - (JSC::GreaterNode::): - (JSC::LessEqNode::): - (JSC::GreaterEqNode::): - (JSC::InstanceOfNode::): - (JSC::EqualNode::): - (JSC::NotEqualNode::): - (JSC::StrictEqualNode::): - (JSC::NotStrictEqualNode::): - (JSC::BitAndNode::): - (JSC::BitOrNode::): - (JSC::BitXOrNode::): - (JSC::LogicalOpNode::): - * parser/ResultType.h: - (JSC::ResultType::isInt32): - (JSC::ResultType::isNotNumber): - (JSC::ResultType::booleanType): - (JSC::ResultType::numberType): - (JSC::ResultType::numberTypeCanReuse): - (JSC::ResultType::numberTypeCanReuseIsInt32): - (JSC::ResultType::stringOrNumberTypeCanReuse): - (JSC::ResultType::stringType): - (JSC::ResultType::unknownType): - (JSC::ResultType::forAdd): - (JSC::ResultType::forBitOp): - (JSC::OperandTypes::OperandTypes): - -2009-01-15 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Add support for integer addition, subtraction and multiplication - in JIT code on x86-64. - - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::mul32): - (JSC::MacroAssembler::sub32): - (JSC::MacroAssembler::joMul32): - (JSC::MacroAssembler::joSub32): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - * jit/JIT.h: - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArith_op_add): - (JSC::JIT::compileFastArithSlow_op_add): - (JSC::JIT::compileFastArith_op_mul): - (JSC::JIT::compileFastArithSlow_op_mul): - (JSC::JIT::compileFastArith_op_sub): - (JSC::JIT::compileFastArithSlow_op_sub): - -2009-01-15 Gavin Barraclough - - Reviewed by Geoff Garen. - - On x86-64 allow JSImmediate to encode 64-bit double precision values. - This patch only affects builds that set USE(ALTERNATE_JSIMMEDIATE). - Updates the implementation of JSValuePtr:: and JSImmediate:: methods - that operate on neumeric values to be be aware of the new representation. - When this representation is in use, the class JSNumberCell is redundant - and is compiled out. - - The format of the new immediate representation is documented in JSImmediate.h. - - * JavaScriptCore.exp: - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::subPtr): - * assembler/X86Assembler.h: - (JSC::X86Assembler::): - (JSC::X86Assembler::subq_rr): - (JSC::X86Assembler::movq_rr): - (JSC::X86Assembler::ucomisd_rr): - (JSC::X86Assembler::X86InstructionFormatter::twoByteOp64): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::cti_op_stricteq): - (JSC::Interpreter::cti_op_nstricteq): - * jit/JIT.cpp: - (JSC::JIT::compileOpStrictEq): - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - * jit/JIT.h: - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArith_op_lshift): - (JSC::JIT::compileFastArith_op_rshift): - (JSC::JIT::compileFastArith_op_bitand): - (JSC::JIT::compileFastArith_op_mod): - (JSC::JIT::compileFastArith_op_add): - (JSC::JIT::compileFastArith_op_mul): - (JSC::JIT::compileFastArith_op_post_inc): - (JSC::JIT::compileFastArith_op_post_dec): - (JSC::JIT::compileFastArith_op_pre_inc): - (JSC::JIT::compileFastArith_op_pre_dec): - (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): - (JSC::JIT::compileBinaryArithOp): - * jit/JITInlineMethods.h: - (JSC::JIT::emitJumpIfBothJSCells): - (JSC::JIT::emitJumpIfEitherNumber): - (JSC::JIT::emitJumpIfNotEitherNumber): - (JSC::JIT::emitJumpIfImmediateIntegerNumber): - (JSC::JIT::emitJumpIfNotImmediateIntegerNumber): - (JSC::JIT::emitJumpIfNotImmediateIntegerNumbers): - (JSC::JIT::emitJumpSlowCaseIfNotImmediateIntegerNumber): - (JSC::JIT::emitJumpSlowCaseIfNotImmediateIntegerNumbers): - (JSC::JIT::emitFastArithDeTagImmediate): - (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): - (JSC::JIT::emitFastArithReTagImmediate): - (JSC::JIT::emitFastArithIntToImmNoCheck): - * runtime/JSCell.h: - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): - * runtime/JSImmediate.cpp: - (JSC::JSImmediate::toThisObject): - (JSC::JSImmediate::toObject): - (JSC::JSImmediate::toString): - * runtime/JSImmediate.h: - (JSC::wtf_reinterpret_cast): - (JSC::JSImmediate::isNumber): - (JSC::JSImmediate::isIntegerNumber): - (JSC::JSImmediate::isDoubleNumber): - (JSC::JSImmediate::isPositiveIntegerNumber): - (JSC::JSImmediate::areBothImmediateIntegerNumbers): - (JSC::JSImmediate::makeInt): - (JSC::JSImmediate::makeDouble): - (JSC::JSImmediate::doubleValue): - (JSC::doubleToBoolean): - (JSC::JSImmediate::toBoolean): - (JSC::JSImmediate::getTruncatedUInt32): - (JSC::JSImmediate::makeOutOfIntegerRange): - (JSC::JSImmediate::from): - (JSC::JSImmediate::getTruncatedInt32): - (JSC::JSImmediate::toDouble): - (JSC::JSImmediate::getUInt32): - (JSC::JSValuePtr::isInt32Fast): - (JSC::JSValuePtr::isUInt32Fast): - (JSC::JSValuePtr::areBothInt32Fast): - (JSC::JSFastMath::canDoFastBitwiseOperations): - (JSC::JSFastMath::xorImmediateNumbers): - (JSC::JSFastMath::canDoFastRshift): - (JSC::JSFastMath::canDoFastUrshift): - (JSC::JSFastMath::rightShiftImmediateNumbers): - (JSC::JSFastMath::canDoFastAdditiveOperations): - (JSC::JSFastMath::addImmediateNumbers): - (JSC::JSFastMath::subImmediateNumbers): - * runtime/JSNumberCell.cpp: - (JSC::jsNumberCell): - * runtime/JSNumberCell.h: - (JSC::createNumberStructure): - (JSC::isNumberCell): - (JSC::asNumberCell): - (JSC::jsNumber): - (JSC::JSValuePtr::isDoubleNumber): - (JSC::JSValuePtr::getDoubleNumber): - (JSC::JSValuePtr::isNumber): - (JSC::JSValuePtr::uncheckedGetNumber): - (JSC::jsNaN): - (JSC::JSValuePtr::getNumber): - (JSC::JSValuePtr::numberToInt32): - (JSC::JSValuePtr::numberToUInt32): - * runtime/JSValue.h: - * runtime/NumberConstructor.cpp: - (JSC::numberConstructorNegInfinity): - (JSC::numberConstructorPosInfinity): - (JSC::numberConstructorMaxValue): - (JSC::numberConstructorMinValue): - * runtime/NumberObject.cpp: - (JSC::constructNumber): - * runtime/NumberObject.h: - * runtime/Operations.h: - (JSC::JSValuePtr::equal): - (JSC::JSValuePtr::equalSlowCaseInline): - (JSC::JSValuePtr::strictEqual): - (JSC::JSValuePtr::strictEqualSlowCaseInline): - * wtf/Platform.h: - -2009-01-15 Sam Weinig - - Reviewed by Geoffrey Garen. - - - REGRESSION (r34838): JavaScript objects appear to be leaked after loading google.com - - Subtract the number of JSStrings cached in SmallStrings when calculating the - number of live JSObjects. - - * runtime/Collector.cpp: - (JSC::Heap::objectCount): - * runtime/SmallStrings.cpp: - (JSC::SmallStrings::count): - * runtime/SmallStrings.h: - -2009-01-15 Sam Weinig - - Fix Qt build. - - * runtime/Collector.cpp: - -2009-01-15 Sam Weinig - - Reviewed by Gavin Barraclough. - - Fix crash seen running fast/canvas. - - Make sure to mark the ScopeNode and CodeBlock being created - in the re-parse for exception information. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): - * parser/Nodes.h: - (JSC::ScopeNode::mark): - * runtime/Collector.cpp: - (JSC::Heap::collect): - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): - * runtime/JSGlobalData.h: - -2009-01-15 Craig Schlenter - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=23347 - Compilation of JavaScriptCore/wtf/ThreadingPthreads.cpp fails on Linux - - * wtf/ThreadingPthreads.cpp: included limits.h as INT_MAX is defined there. - -2009-01-15 Oliver Hunt - - Reviewed by Geoff Garen. - - Bug 23225: REGRESSION: Assertion failure in reparseInPlace() (m_sourceElements) at sfgate.com - - - Character position for open and closing brace was incorrectly referencing m_position to - record their position in a source document, however this is unsafe as BOMs may lead to - m_position being an arbitrary position from the real position of the current character. - - * parser/Lexer.cpp: - (JSC::Lexer::matchPunctuator): - -2009-01-14 David Kilzer - - Bug 23153: JSC build always touches JavaScriptCore/docs/bytecode.html - - - - Reviewed by Darin Adler. - - Instead of building bytecode.html into ${SRCROOT}/docs/bytecode.html, build it - into ${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore/docs/bytecode.html. - - Also fixes make-bytecode-docs.pl to actually generate documentation. - - * DerivedSources.make: Changed bytecode.html to be built into local docs - directory in ${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore. - * JavaScriptCore.xcodeproj/project.pbxproj: Added "/docs" to the end of the - "mkdir -p" command so that the docs subdirectory is automatically created. - * docs/make-bytecode-docs.pl: Changed BEGIN_OPCODE to DEFINE_OPCODE so that - documentation is actually generated. - -2009-01-14 Adam Treat - - Build fix for Qt from Dmitry Titov. - - * wtf/ThreadingQt.cpp: - (WTF::ThreadCondition::timedWait): - -2009-01-14 Oliver Hunt - - Reviewed by Cameron Zwarich. - - Bug 22903: REGRESSION (r36267): visiting this site reliably crashes WebKit nightly - - EvalCodeBlock's do not reference the functions that are declared inside the eval - code, this means that simply marking the EvalCodeBlock through the global object - is insufficient to mark the declared functions. This patch corrects this by - explicitly marking the CodeBlocks of all the functions declared in the cached - EvalNode. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::mark): - * bytecode/CodeBlock.h: - (JSC::CodeBlock::hasFunctions): - * bytecode/EvalCodeCache.h: - (JSC::EvalCodeCache::mark): - * parser/Nodes.cpp: - (JSC::ScopeNodeData::mark): - (JSC::EvalNode::mark): - * parser/Nodes.h: - -2009-01-14 Dmitry Titov - - Reviewed by Alexey Proskuryakov. - - https://bugs.webkit.org/show_bug.cgi?id=23312 - Implement MessageQueue::waitForMessageTimed() - Also fixed ThreadCondition::timedWait() to take absolute time, as discussed on webkit-dev. - Win32 version of timedWait still has to be implemented. - - * wtf/MessageQueue.h: - (WTF::MessageQueueWaitResult: new enum for the result of MessageQueue::waitForMessageTimed. - (WTF::MessageQueue::waitForMessage): - (WTF::MessageQueue::waitForMessageTimed): New method. - * wtf/Threading.h: - * wtf/ThreadingGtk.cpp: - (WTF::ThreadCondition::timedWait): changed to use absolute time instead of interval. - * wtf/ThreadingNone.cpp: - (WTF::ThreadCondition::timedWait): ditto. - * wtf/ThreadingPthreads.cpp: - (WTF::ThreadCondition::timedWait): ditto. - * wtf/ThreadingQt.cpp: - (WTF::ThreadCondition::timedWait): ditto. - * wtf/ThreadingWin.cpp: - (WTF::ThreadCondition::timedWait): ditto. The actual Win32 code is still to be implemented. - -2009-01-14 Dean McNamee - - Reviewed by Darin Adler and Oliver hunt. - - Correctly match allocation functions by implementing a custom deref(). - - https://bugs.webkit.org/show_bug.cgi?id=23315 - - * runtime/ByteArray.h: - (JSC::ByteArray::deref): - (JSC::ByteArray::ByteArray): - -2009-01-14 Dan Bernstein - - Reviewed by John Sullivan. - - - update copyright - - * Info.plist: - -2009-01-13 Beth Dakin - - Reviewed by Darin Adler and Oliver Hunt. - - REGRESSION: Business widget's front side - fails to render correctly when flipping widget - - The problem here is that parseInt was parsing NaN as 0. This patch - corrects that by parsing NaN as NaN. This matches our old behavior - and Firefox. - - * runtime/JSGlobalObjectFunctions.cpp: - (JSC::globalFuncParseInt): - -2009-01-13 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Fix for: https://bugs.webkit.org/show_bug.cgi?id=23292 - - Implementation of two argument canDoFastAdditiveOperations does not correlate well with reality. - - * runtime/JSImmediate.h: - (JSC::JSFastMath::canDoFastAdditiveOperations): - -2009-01-13 Zalan Bujtas - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=23290 - Fix JSImmediate::isImmediate(src) to !src->isCell() - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - -2009-01-13 Dmitry Titov - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=23281 - Fix the Chromium Win build. - Need to use PLATFORM(WIN_OS) instead of PLATFORM(WIN). - Moved GTK and WX up in #if sequence because they could come with WIN_OS too, - while they have their own implementation even on Windows. - - * wtf/CurrentTime.cpp: - (WTF::currentTime): - -2009-01-12 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Make the JSImmediate interface private. - - All manipulation of JS values should be through the JSValuePtr class, not by using JSImmediate - directly. The key missing methods on JSValuePtr are: - - * isCell() - check for values that are JSCell*s, and as such where asCell() may be used. - * isInt32Fast() getInt32Fast() - fast check/access for integer immediates. - * isUInt32Fast() getUInt32Fast() - ditto for unsigned integer immediates. - - The JIT is allowed full access to JSImmediate, since it needs to be able to directly - manipulate JSValuePtrs. The Interpreter is provided access to perform operations directly - on JSValuePtrs through the new JSFastMath interface. - - No performance impact. - - * API/JSCallbackObjectFunctions.h: - (JSC::::toNumber): - * API/JSValueRef.cpp: - (JSValueIsEqual): - (JSValueIsStrictEqual): - * JavaScriptCore.exp: - * bytecode/CodeBlock.h: - (JSC::CodeBlock::isKnownNotImmediate): - * bytecompiler/BytecodeGenerator.cpp: - (JSC::keyForImmediateSwitch): - * bytecompiler/BytecodeGenerator.h: - (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue): - (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue): - * interpreter/Interpreter.cpp: - (JSC::jsLess): - (JSC::jsLessEq): - (JSC::jsAdd): - (JSC::jsIsObjectType): - (JSC::cachePrototypeChain): - (JSC::Interpreter::tryCachePutByID): - (JSC::Interpreter::tryCacheGetByID): - (JSC::Interpreter::privateExecute): - (JSC::Interpreter::tryCTICachePutByID): - (JSC::Interpreter::tryCTICacheGetByID): - (JSC::Interpreter::cti_op_add): - (JSC::Interpreter::cti_op_get_by_id_self_fail): - (JSC::Interpreter::cti_op_get_by_id_proto_list): - (JSC::Interpreter::cti_op_instanceof): - (JSC::Interpreter::cti_op_mul): - (JSC::Interpreter::cti_op_get_by_val): - (JSC::Interpreter::cti_op_get_by_val_byte_array): - (JSC::Interpreter::cti_op_sub): - (JSC::Interpreter::cti_op_put_by_val): - (JSC::Interpreter::cti_op_put_by_val_array): - (JSC::Interpreter::cti_op_put_by_val_byte_array): - (JSC::Interpreter::cti_op_negate): - (JSC::Interpreter::cti_op_div): - (JSC::Interpreter::cti_op_eq): - (JSC::Interpreter::cti_op_lshift): - (JSC::Interpreter::cti_op_bitand): - (JSC::Interpreter::cti_op_rshift): - (JSC::Interpreter::cti_op_bitnot): - (JSC::Interpreter::cti_op_neq): - (JSC::Interpreter::cti_op_urshift): - (JSC::Interpreter::cti_op_call_eval): - (JSC::Interpreter::cti_op_throw): - (JSC::Interpreter::cti_op_is_undefined): - (JSC::Interpreter::cti_op_stricteq): - (JSC::Interpreter::cti_op_nstricteq): - (JSC::Interpreter::cti_op_switch_imm): - (JSC::Interpreter::cti_vm_throw): - * interpreter/Interpreter.h: - (JSC::Interpreter::isJSArray): - (JSC::Interpreter::isJSString): - (JSC::Interpreter::isJSByteArray): - * jit/JIT.cpp: - (JSC::JIT::compileOpStrictEq): - (JSC::JIT::privateCompileMainPass): - * jit/JIT.h: - (JSC::JIT::isStrictEqCaseHandledInJITCode): - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArith_op_rshift): - (JSC::JIT::compileFastArith_op_bitand): - (JSC::JIT::compileFastArith_op_mod): - * jit/JITCall.cpp: - (JSC::JIT::unlinkCall): - (JSC::JIT::compileOpCall): - * jit/JITInlineMethods.h: - (JSC::JIT::getConstantOperandImmediateInt): - (JSC::JIT::isOperandConstantImmediateInt): - * parser/Nodes.cpp: - (JSC::processClauseList): - * runtime/ArrayPrototype.cpp: - (JSC::arrayProtoFuncIndexOf): - (JSC::arrayProtoFuncLastIndexOf): - * runtime/BooleanPrototype.cpp: - (JSC::booleanProtoFuncValueOf): - * runtime/Collector.cpp: - (JSC::Heap::protect): - (JSC::Heap::unprotect): - (JSC::Heap::heap): - * runtime/JSByteArray.cpp: - (JSC::JSByteArray::getOwnPropertySlot): - * runtime/JSByteArray.h: - (JSC::JSByteArray::getIndex): - * runtime/JSCell.cpp: - * runtime/JSCell.h: - (JSC::JSValuePtr::isNumberCell): - (JSC::JSValuePtr::asCell): - (JSC::JSValuePtr::isNumber): - * runtime/JSGlobalObjectFunctions.cpp: - (JSC::globalFuncParseInt): - * runtime/JSImmediate.h: - (JSC::js0): - (JSC::jsImpossibleValue): - (JSC::JSValuePtr::toInt32): - (JSC::JSValuePtr::toUInt32): - (JSC::JSValuePtr::isCell): - (JSC::JSValuePtr::isInt32Fast): - (JSC::JSValuePtr::getInt32Fast): - (JSC::JSValuePtr::isUInt32Fast): - (JSC::JSValuePtr::getUInt32Fast): - (JSC::JSValuePtr::makeInt32Fast): - (JSC::JSValuePtr::areBothInt32Fast): - (JSC::JSFastMath::canDoFastBitwiseOperations): - (JSC::JSFastMath::equal): - (JSC::JSFastMath::notEqual): - (JSC::JSFastMath::andImmediateNumbers): - (JSC::JSFastMath::xorImmediateNumbers): - (JSC::JSFastMath::orImmediateNumbers): - (JSC::JSFastMath::canDoFastRshift): - (JSC::JSFastMath::canDoFastUrshift): - (JSC::JSFastMath::rightShiftImmediateNumbers): - (JSC::JSFastMath::canDoFastAdditiveOperations): - (JSC::JSFastMath::addImmediateNumbers): - (JSC::JSFastMath::subImmediateNumbers): - (JSC::JSFastMath::incImmediateNumber): - (JSC::JSFastMath::decImmediateNumber): - * runtime/JSNumberCell.h: - (JSC::JSValuePtr::asNumberCell): - (JSC::jsNumber): - (JSC::JSValuePtr::uncheckedGetNumber): - (JSC::JSNumberCell::toInt32): - (JSC::JSNumberCell::toUInt32): - (JSC::JSValuePtr::toJSNumber): - (JSC::JSValuePtr::getNumber): - (JSC::JSValuePtr::numberToInt32): - (JSC::JSValuePtr::numberToUInt32): - * runtime/JSObject.h: - (JSC::JSValuePtr::isObject): - (JSC::JSValuePtr::get): - (JSC::JSValuePtr::put): - * runtime/JSValue.cpp: - (JSC::JSValuePtr::toInteger): - (JSC::JSValuePtr::toIntegerPreserveNaN): - * runtime/JSValue.h: - * runtime/Operations.cpp: - (JSC::JSValuePtr::equalSlowCase): - (JSC::JSValuePtr::strictEqualSlowCase): - * runtime/Operations.h: - (JSC::JSValuePtr::equal): - (JSC::JSValuePtr::equalSlowCaseInline): - (JSC::JSValuePtr::strictEqual): - (JSC::JSValuePtr::strictEqualSlowCaseInline): - * runtime/Protect.h: - (JSC::gcProtect): - (JSC::gcUnprotect): - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncCharAt): - (JSC::stringProtoFuncCharCodeAt): - * runtime/Structure.cpp: - (JSC::Structure::createCachedPrototypeChain): - -2009-01-12 Kevin Ollivier - - Since date time functions have moved here, now the wx port JSC - needs to depend on wx. - - * jscore.bkl: - -2009-01-11 David Levin - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=23245 - - Add initializeThreading to key places in JS API to ensure that - UString is properly initialized. - - * API/JSContextRef.cpp: - (JSContextGroupCreate): - (JSGlobalContextCreate): - * API/JSObjectRef.cpp: - (JSClassCreate): - * API/JSStringRef.cpp: - (JSStringCreateWithCharacters): - (JSStringCreateWithUTF8CString): - * API/JSStringRefCF.cpp: - (JSStringCreateWithCFString): - -2009-01-11 David Levin - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=23175 - - Separate out BaseString information from UString::Rep and make all baseString access go through - a member function, so that it may be used for something else (in the future) in the BaseString - case. - - * runtime/SmallStrings.cpp: - (JSC::SmallStringsStorage::rep): - (JSC::SmallStringsStorage::SmallStringsStorage): - (JSC::SmallStrings::SmallStrings): - (JSC::SmallStrings::mark): - Adjust to account for the changes in UString and put the UString in place in - SmallStringsStorage to aid in locality of reference among the UChar[] and UString::Rep's. - - * runtime/SmallStrings.h: - * runtime/UString.cpp: - (JSC::initializeStaticBaseString): - (JSC::initializeUString): - (JSC::UString::Rep::create): - (JSC::UString::Rep::destroy): - (JSC::UString::Rep::checkConsistency): - (JSC::expandCapacity): - (JSC::UString::expandPreCapacity): - (JSC::concatenate): - (JSC::UString::append): - (JSC::UString::operator=): - * runtime/UString.h: - (JSC::UString::Rep::baseIsSelf): - (JSC::UString::Rep::setBaseString): - (JSC::UString::Rep::baseString): - (JSC::UString::Rep::): - (JSC::UString::Rep::null): - (JSC::UString::Rep::empty): - (JSC::UString::Rep::data): - (JSC::UString::cost): - Separate out the items out used by base strings from those used in Rep's that only - point to base strings. (This potentially saves 24 bytes per Rep.) - -2009-01-11 Darin Adler - - Reviewed by Dan Bernstein. - - Bug 23239: improve handling of unused arguments in JavaScriptCore - https://bugs.webkit.org/show_bug.cgi?id=23239 - - * runtime/DatePrototype.cpp: Moved LocaleDateTimeFormat enum outside #if - so we can use this on all platforms. Changed valueOf to share the same - function with getTime, since the contents of the two are identical. Removed - a FIXME since the idea isn't really specific enough or helpful enough to - need to sit here in the source code. - (JSC::formatLocaleDate): Changed the Mac version of this function to take - the same arguments as the non-Mac version so the caller doesn't have to - special-case the two platforms. Also made the formatString array be const; - before the characters were, but the array was a modifiable global variable. - (JSC::dateProtoFuncToLocaleString): Changed to call the new unified - version of formatLocaleDate and remove the ifdef. - (JSC::dateProtoFuncToLocaleDateString): Ditto. - (JSC::dateProtoFuncToLocaleTimeString): Ditto. - - * runtime/JSNotAnObject.cpp: - (JSC::JSNotAnObject::toObject): Use the new ASSERT_UNUSED instead of the - old UNUSED_PARAM. - - * runtime/RegExp.cpp: - (JSC::RegExp::RegExp): Changed to only use UNUSED_PARAM when the parameter - is actually unused. - - * wtf/TCSystemAlloc.cpp: - (TCMalloc_SystemRelease): Changed to only use UNUSED_PARAM when the parameter - is actually unused. - (TCMalloc_SystemCommit): Changed to omit the argument names instead of using - UNUSED_PARAM. - -2009-01-11 Oliver Hunt - - Reviewed by NOBODY (Build fix). - - Fix the build (whoops) - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::cti_op_get_by_val): - -2009-01-11 Oliver Hunt - - Reviewed by Darin Adler and Anders Carlsson - - Bug 23128: get/put_by_val need to respecialise in the face of ByteArray - - Restructure the code slightly, and add comments per Darin's suggestions - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::cti_op_get_by_val): - (JSC::Interpreter::cti_op_get_by_val_byte_array): - (JSC::Interpreter::cti_op_put_by_val): - (JSC::Interpreter::cti_op_put_by_val_byte_array): - -2009-01-11 Oliver Hunt - - Reviewed by Anders Carlsson. - - Whoops, I accidentally removed an exception check from fast the - fast path for string indexing when i originally landed the - byte array logic. - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::cti_op_get_by_val): - -2009-01-11 Oliver Hunt - - Reviewed by Anders Carlsson. - - Bug 23128: get/put_by_val need to respecialise in the face of ByteArray - - - Fairly simple patch, add specialised versions of cti_op_get/put_by_val - that assume ByteArray, thus avoiding a few branches in the case of bytearray - manipulation. - - No effect on SunSpider. 15% win on the original testcase. - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::cti_op_get_by_val): - (JSC::Interpreter::cti_op_get_by_val_byte_array): - (JSC::Interpreter::cti_op_put_by_val): - (JSC::Interpreter::cti_op_put_by_val_byte_array): - * interpreter/Interpreter.h: - -2009-01-11 Alexey Proskuryakov - - Try to fix Windows build. - - * wtf/CurrentTime.cpp: Added a definition of msPerSecond (previously, this code was in - DateMath.cpp, with constant definition in DateTime.h) - -2009-01-11 Alexey Proskuryakov - - Try to fix Windows build. - - * wtf/CurrentTime.cpp: Include and , as MSDN says to. - -2009-01-11 Dmitry Titov - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=23207 - Moved currentTime() to from WebCore to WTF. - - * GNUmakefile.am: - * JavaScriptCore.exp: added export for WTF::currentTime() - * JavaScriptCore.pri: - * JavaScriptCore.scons: - * JavaScriptCore.vcproj/WTF/WTF.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - * runtime/DateMath.cpp: - (JSC::getCurrentUTCTimeWithMicroseconds): This function had another implementation of currentTime(), essentially. Now uses WTF version. - * wtf/CurrentTime.cpp: Added. - (WTF::currentTime): - (WTF::highResUpTime): - (WTF::lowResUTCTime): - (WTF::qpcAvailable): - * wtf/CurrentTime.h: Added. - -2009-01-09 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Stage two of converting JSValue from a pointer to a class type. - Remove the class JSValue. The functionallity has been transitioned - into the wrapper class type JSValuePtr. - - The last stage will be to rename JSValuePtr to JSValue, remove the - overloaded -> operator, and switch operations on JSValuePtrs from - using '->' to use '.' instead. - - * API/APICast.h: - * JavaScriptCore.exp: - * runtime/JSCell.h: - (JSC::asCell): - (JSC::JSValuePtr::asCell): - (JSC::JSValuePtr::isNumber): - (JSC::JSValuePtr::isString): - (JSC::JSValuePtr::isGetterSetter): - (JSC::JSValuePtr::isObject): - (JSC::JSValuePtr::getNumber): - (JSC::JSValuePtr::getString): - (JSC::JSValuePtr::getObject): - (JSC::JSValuePtr::getCallData): - (JSC::JSValuePtr::getConstructData): - (JSC::JSValuePtr::getUInt32): - (JSC::JSValuePtr::getTruncatedInt32): - (JSC::JSValuePtr::getTruncatedUInt32): - (JSC::JSValuePtr::mark): - (JSC::JSValuePtr::marked): - (JSC::JSValuePtr::toPrimitive): - (JSC::JSValuePtr::getPrimitiveNumber): - (JSC::JSValuePtr::toBoolean): - (JSC::JSValuePtr::toNumber): - (JSC::JSValuePtr::toString): - (JSC::JSValuePtr::toObject): - (JSC::JSValuePtr::toThisObject): - (JSC::JSValuePtr::needsThisConversion): - (JSC::JSValuePtr::toThisString): - (JSC::JSValuePtr::getJSNumber): - * runtime/JSImmediate.h: - (JSC::JSValuePtr::isUndefined): - (JSC::JSValuePtr::isNull): - (JSC::JSValuePtr::isUndefinedOrNull): - (JSC::JSValuePtr::isBoolean): - (JSC::JSValuePtr::getBoolean): - (JSC::JSValuePtr::toInt32): - (JSC::JSValuePtr::toUInt32): - * runtime/JSNumberCell.h: - (JSC::JSValuePtr::uncheckedGetNumber): - (JSC::JSValuePtr::toJSNumber): - * runtime/JSObject.h: - (JSC::JSValuePtr::isObject): - (JSC::JSValuePtr::get): - (JSC::JSValuePtr::put): - * runtime/JSString.h: - (JSC::JSValuePtr::toThisJSString): - * runtime/JSValue.cpp: - (JSC::JSValuePtr::toInteger): - (JSC::JSValuePtr::toIntegerPreserveNaN): - (JSC::JSValuePtr::toInt32SlowCase): - (JSC::JSValuePtr::toUInt32SlowCase): - * runtime/JSValue.h: - (JSC::JSValuePtr::makeImmediate): - (JSC::JSValuePtr::immediateValue): - (JSC::JSValuePtr::JSValuePtr): - (JSC::JSValuePtr::operator->): - (JSC::JSValuePtr::operator bool): - (JSC::JSValuePtr::operator==): - (JSC::JSValuePtr::operator!=): - (JSC::JSValuePtr::encode): - (JSC::JSValuePtr::decode): - (JSC::JSValuePtr::toFloat): - (JSC::JSValuePtr::asValue): - (JSC::operator==): - (JSC::operator!=): - -2009-01-09 David Levin - - Reviewed by Oliver Hunt. - - https://bugs.webkit.org/show_bug.cgi?id=23175 - - Adjustment to previous patch. Remove call to initilizeThreading from JSGlobalCreate - and fix jsc.cpp instead. - - * jsc.cpp: - (main): - (jscmain): - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::create): - -2009-01-09 Sam Weinig - - Roll r39720 back in with a working interpreted mode. - -2009-01-09 David Levin - - Reviewed by Oliver Hunt. - - https://bugs.webkit.org/show_bug.cgi?id=23175 - - Added a template to make the pointer and flags combination - in UString more readable and less error prone. - - * GNUmakefile.am: - * JavaScriptCore.exp: - * JavaScriptCore.vcproj/WTF/WTF.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - Added PtrAndFlags.h (and sorted the xcode project file). - - * runtime/Identifier.cpp: - (JSC::Identifier::add): - (JSC::Identifier::addSlowCase): - * runtime/InitializeThreading.cpp: - (JSC::initializeThreadingOnce): - Made the init threading initialize the UString globals. Before - these were initilized using {} but that became harder due to the - addition of this tempalte class. - - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::create): - * runtime/PropertyNameArray.cpp: - (JSC::PropertyNameArray::add): - * runtime/UString.cpp: - (JSC::initializeStaticBaseString): - (JSC::initializeUString): - (JSC::UString::Rep::create): - (JSC::UString::Rep::createFromUTF8): - (JSC::createRep): - (JSC::UString::UString): - (JSC::concatenate): - (JSC::UString::operator=): - (JSC::UString::makeNull): - (JSC::UString::nullRep): - * runtime/UString.h: - (JSC::UString::Rep::identifierTable): - (JSC::UString::Rep::setIdentifierTable): - (JSC::UString::Rep::isStatic): - (JSC::UString::Rep::setStatic): - (JSC::UString::Rep::): - (JSC::UString::Rep::null): - (JSC::UString::Rep::empty): - (JSC::UString::isNull): - (JSC::UString::null): - (JSC::UString::UString): - - * wtf/PtrAndFlags.h: Added. - (WTF::PtrAndFlags::PtrAndFlags): - (WTF::PtrAndFlags::isFlagSet): - (WTF::PtrAndFlags::setFlag): - (WTF::PtrAndFlags::clearFlag): - (WTF::PtrAndFlags::get): - (WTF::PtrAndFlags::set): - A simple way to layer together a pointer and 2 flags. It relies on the pointer being 4 byte aligned, - which should happen for all allocators (due to aligning pointers, int's, etc. on 4 byte boundaries). - -2009-01-08 Gavin Barraclough - - Reviewed by -O-l-i-v-e-r- -H-u-n-t- Sam Weinig (sorry, Sam!). - - Encode immediates in the low word of JSValuePtrs, on x86-64. - - On 32-bit platforms a JSValuePtr may represent a 31-bit signed integer. - On 64-bit platforms, if USE(ALTERNATE_JSIMMEDIATE) is defined, a full - 32-bit integer may be stored in an immediate. - - Presently USE(ALTERNATE_JSIMMEDIATE) uses the same encoding as the default - immediate format - the value is left shifted by one, so a one bit tag can - be added to indicate the value is an immediate. However this means that - values must be commonly be detagged (by right shifting by one) before - arithmetic operations can be performed on immediates. This patch modifies - the formattting so the the high bits of the immediate mark values as being - integer. - - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::not32): - (JSC::MacroAssembler::orPtr): - (JSC::MacroAssembler::zeroExtend32ToPtr): - (JSC::MacroAssembler::jaePtr): - (JSC::MacroAssembler::jbPtr): - (JSC::MacroAssembler::jnzPtr): - (JSC::MacroAssembler::jzPtr): - * assembler/X86Assembler.h: - (JSC::X86Assembler::): - (JSC::X86Assembler::notl_r): - (JSC::X86Assembler::testq_i32r): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JIT.h: - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArith_op_lshift): - (JSC::JIT::compileFastArith_op_rshift): - (JSC::JIT::compileFastArith_op_bitand): - (JSC::JIT::compileFastArithSlow_op_bitand): - (JSC::JIT::compileFastArith_op_mod): - (JSC::JIT::compileFastArithSlow_op_mod): - (JSC::JIT::compileFastArith_op_add): - (JSC::JIT::compileFastArith_op_mul): - (JSC::JIT::compileFastArith_op_post_inc): - (JSC::JIT::compileFastArith_op_post_dec): - (JSC::JIT::compileFastArith_op_pre_inc): - (JSC::JIT::compileFastArith_op_pre_dec): - (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): - (JSC::JIT::compileBinaryArithOp): - * jit/JITCall.cpp: - (JSC::JIT::compileOpCallSlowCase): - * jit/JITInlineMethods.h: - (JSC::JIT::emitJumpIfJSCell): - (JSC::JIT::emitJumpIfNotJSCell): - (JSC::JIT::emitJumpIfImmNum): - (JSC::JIT::emitJumpSlowCaseIfNotImmNum): - (JSC::JIT::emitJumpSlowCaseIfNotImmNums): - (JSC::JIT::emitFastArithDeTagImmediate): - (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): - (JSC::JIT::emitFastArithReTagImmediate): - (JSC::JIT::emitFastArithImmToInt): - (JSC::JIT::emitFastArithIntToImmNoCheck): - (JSC::JIT::emitTagAsBoolImmediate): - * jit/JITPropertyAccess.cpp: - (JSC::resizePropertyStorage): - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::privateCompilePatchGetArrayLength): - (JSC::JIT::privateCompileGetByIdSelf): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdChain): - (JSC::JIT::privateCompilePutByIdReplace): - * runtime/JSImmediate.h: - (JSC::JSImmediate::isNumber): - (JSC::JSImmediate::isPositiveNumber): - (JSC::JSImmediate::areBothImmediateNumbers): - (JSC::JSImmediate::xorImmediateNumbers): - (JSC::JSImmediate::rightShiftImmediateNumbers): - (JSC::JSImmediate::canDoFastAdditiveOperations): - (JSC::JSImmediate::addImmediateNumbers): - (JSC::JSImmediate::subImmediateNumbers): - (JSC::JSImmediate::makeInt): - (JSC::JSImmediate::toBoolean): - * wtf/Platform.h: - -2009-01-08 Sam Weinig - - Revert r39720. It broke Interpreted mode. - -2009-01-08 Sam Weinig - - Reviewed by Oliver Hunt. - - Fix for https://bugs.webkit.org/show_bug.cgi?id=23197 - Delay creating the PCVector until an exception is thrown - Part of - Don't store exception information for a CodeBlock until first exception is thrown - - - Change the process for re-parsing/re-generating bytecode for exception information - to use data from the original CodeBlock (offsets of GlobalResolve instructions) to - aid in creating an identical instruction stream on re-parse, instead of padding - interchangeable opcodes, which would result in different JITed code. - - Fix bug where the wrong ScopeChainNode was used when re-parsing/regenerating from - within some odd modified scope chains. - - Lazily create the pcVector by re-JITing the regenerated CodeBlock and stealing the - the pcVector from it. - - Saves ~2MB on Membuster head. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): - (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): - (JSC::CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset): - (JSC::CodeBlock::hasGlobalResolveInfoAtBytecodeOffset): - * bytecode/CodeBlock.h: - (JSC::JITCodeRef::JITCodeRef): - (JSC::GlobalResolveInfo::GlobalResolveInfo): - (JSC::CodeBlock::getBytecodeIndex): - (JSC::CodeBlock::addGlobalResolveInstruction): - (JSC::CodeBlock::addGlobalResolveInfo): - (JSC::CodeBlock::addFunctionRegisterInfo): - (JSC::CodeBlock::hasExceptionInfo): - (JSC::CodeBlock::pcVector): - (JSC::EvalCodeBlock::EvalCodeBlock): - (JSC::EvalCodeBlock::baseScopeDepth): - * bytecode/Opcode.h: - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::BytecodeGenerator): - (JSC::BytecodeGenerator::emitResolve): - (JSC::BytecodeGenerator::emitGetScopedVar): - * bytecompiler/BytecodeGenerator.h: - (JSC::BytecodeGenerator::setRegeneratingForExceptionInfo): - * interpreter/Interpreter.cpp: - (JSC::bytecodeOffsetForPC): - (JSC::Interpreter::unwindCallFrame): - (JSC::Interpreter::privateExecute): - (JSC::Interpreter::retrieveLastCaller): - (JSC::Interpreter::cti_op_instanceof): - (JSC::Interpreter::cti_op_call_NotJSFunction): - (JSC::Interpreter::cti_op_resolve): - (JSC::Interpreter::cti_op_construct_NotJSConstruct): - (JSC::Interpreter::cti_op_resolve_func): - (JSC::Interpreter::cti_op_resolve_skip): - (JSC::Interpreter::cti_op_resolve_global): - (JSC::Interpreter::cti_op_resolve_with_base): - (JSC::Interpreter::cti_op_throw): - (JSC::Interpreter::cti_op_in): - (JSC::Interpreter::cti_vm_throw): - * jit/JIT.cpp: - (JSC::JIT::privateCompile): - * parser/Nodes.cpp: - (JSC::EvalNode::generateBytecode): - (JSC::EvalNode::bytecodeForExceptionInfoReparse): - (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse): - * parser/Nodes.h: - -2009-01-08 Jian Li - - Reviewed by Alexey Proskuryakov. - - Add Win32 implementation of ThreadSpecific. - https://bugs.webkit.org/show_bug.cgi?id=22614 - - * JavaScriptCore.vcproj/WTF/WTF.vcproj: - * wtf/ThreadSpecific.h: - (WTF::ThreadSpecific::ThreadSpecific): - (WTF::ThreadSpecific::~ThreadSpecific): - (WTF::ThreadSpecific::get): - (WTF::ThreadSpecific::set): - (WTF::ThreadSpecific::destroy): - * wtf/ThreadSpecificWin.cpp: Added. - (WTF::ThreadSpecificThreadExit): - * wtf/ThreadingWin.cpp: - (WTF::wtfThreadEntryPoint): - -2009-01-08 Justin McPherson - - Reviewed by Simon Hausmann. - - Fix compilation with Qt on NetBSD. - - * runtime/Collector.cpp: - (JSC::currentThreadStackBase): Use PLATFORM(NETBSD) to enter the - code path to retrieve the stack base using pthread_attr_get_np. - The PTHREAD_NP_H define is not used because the header file does - not exist on NetBSD, but the function is declared nevertheless. - * wtf/Platform.h: Introduce WTF_PLATFORM_NETBSD. - -2009-01-07 Sam Weinig - - Reviewed by Geoffrey Garen. - - Don't store exception information for a CodeBlock until first exception is thrown - - Don't initially store exception information (lineNumber/expressionRange/getByIdExcecptionInfo) - in CodeBlocks blocks. Instead, re-parse for the data on demand and cache it then. - - One important change that was needed to make this work was to pad op_get_global_var with nops to - be the same length as op_resolve_global, since one could be replaced for the other on re-parsing, - and we want to keep the offsets bytecode offsets the same. - - 1.3MB improvement on Membuster head. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): Update op_get_global_var to account for the padding. - (JSC::CodeBlock::dumpStatistics): Add more statistic dumping. - (JSC::CodeBlock::CodeBlock): Initialize m_exceptionInfo. - (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): Re-parses the CodeBlocks - associated SourceCode and steals the ExceptionInfo from it. - (JSC::CodeBlock::lineNumberForBytecodeOffset): Creates the exception info on demand. - (JSC::CodeBlock::expressionRangeForBytecodeOffset): Ditto. - (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset): Ditto. - * bytecode/CodeBlock.h: - (JSC::CodeBlock::numberOfExceptionHandlers): Updated to account for m_exceptionInfo indirection. - (JSC::CodeBlock::addExceptionHandler): Ditto. - (JSC::CodeBlock::exceptionHandler): Ditto. - (JSC::CodeBlock::clearExceptionInfo): Ditto. - (JSC::CodeBlock::addExpressionInfo): Ditto. - (JSC::CodeBlock::addGetByIdExceptionInfo): Ditto. - (JSC::CodeBlock::numberOfLineInfos): Ditto. - (JSC::CodeBlock::addLineInfo): Ditto. - (JSC::CodeBlock::lastLineInfo): Ditto. - - * bytecode/Opcode.h: Change length of op_get_global_var to match op_resolve_global. - - * bytecode/SamplingTool.cpp: - (JSC::SamplingTool::dump): Add comment indicating why it is okay not to pass a CallFrame. - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::generate): Clear the exception info after generation for Function and Eval - Code when not in regenerate for exception info mode. - (JSC::BytecodeGenerator::BytecodeGenerator): Initialize m_regeneratingForExceptionInfo to false. - (JSC::BytecodeGenerator::emitGetScopedVar): Pad op_get_global_var with 2 nops. - * bytecompiler/BytecodeGenerator.h: - (JSC::BytecodeGenerator::setRegeneratingForExcpeptionInfo): Added. - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::throwException): Pass the CallFrame to exception info accessors. - (JSC::Interpreter::privateExecute): Ditto. - (JSC::Interpreter::retrieveLastCaller): Ditto. - (JSC::Interpreter::cti_op_new_error): Ditto. - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): Pass the current bytecode offset instead of hard coding the - line number, the stub will do the accessing if it gets called. - - * parser/Nodes.cpp: - (JSC::ProgramNode::emitBytecode): Moved. - (JSC::ProgramNode::generateBytecode): Moved. - (JSC::EvalNode::create): Moved. - (JSC::EvalNode::bytecodeForExceptionInfoReparse): Added. - (JSC::FunctionBodyNode::generateBytecode): Rename reparse to reparseInPlace. - (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse): Addded. - - * parser/Nodes.h: - (JSC::ScopeNode::features): Added getter. - * parser/Parser.cpp: - (JSC::Parser::reparseInPlace): Renamed from reparse. - * parser/Parser.h: - (JSC::Parser::reparse): Added. Re-parses the passed in Node into - a new Node. - * runtime/ExceptionHelpers.cpp: - (JSC::createUndefinedVariableError): Pass along CallFrame. - (JSC::createInvalidParamError): Ditto. - (JSC::createNotAConstructorError): Ditto. - (JSC::createNotAFunctionError): Ditto. - (JSC::createNotAnObjectError): Ditto. - -2009-01-06 Gavin Barraclough - - Reviewed by Maciej Stachowiak. - - Replace accidentally removed references in BytecodeGenerator, deleting these - will be hindering the sharing of constant numbers and strings. - - The code to add a new constant (either number or string) to their respective - map works by attempting to add a null entry, then checking the result of the - add for null. The first time, this should return the null (or noValue). - The code checks for null (to see if this is the initial add), and then allocates - a new number / string object. This code relies on the result returned from - the add to the map being stored as a reference, such that the allocated object - will be stored in the map, and will be resused if the same constant is encountered - again. By failing to use a reference we will be leaking GC object for each - additional entry added to the map. As GC objects they should be clollected, - be we should no be allocatin them in the first place. - - https://bugs.webkit.org/show_bug.cgi?id=23158 - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitLoad): - -2009-01-06 Oliver Hunt - - Reviewed by Gavin Barraclough. - - JavaScript register file should use VirtualAlloc on Windows - - Fairly simple, just reserve 4Mb of address space for the - register file, and then commit one section at a time. We - don't release committed memory as we drop back, but then - mac doesn't either so this probably not too much of a - problem. - - * interpreter/RegisterFile.cpp: - (JSC::RegisterFile::~RegisterFile): - * interpreter/RegisterFile.h: - (JSC::RegisterFile::RegisterFile): - (JSC::RegisterFile::grow): - -2009-01-06 Alexey Proskuryakov - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=23142 - ThreadGlobalData leaks seen on buildbot - - * wtf/ThreadSpecific.h: (WTF::ThreadSpecific::destroy): Temporarily reset the thread - specific value to make getter work on Mac OS X. - - * wtf/Platform.h: Touch this file again to make sure all Windows builds use the most recent - version of ThreadSpecific.h. - -2009-01-05 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Replace all uses of JSValue* with a new smart pointer type, JSValuePtr. - - A JavaScript value may be a heap object or boxed primitive, represented by a - pointer, or may be an unboxed immediate value, such as an integer. Since a - value may dynamically need to contain either a pointer value or an immediate, - we encode immediates as pointer values (since all valid JSCell pointers are - allocated at alligned addesses, unaligned addresses are available to encode - immediates). As such all JavaScript values are represented using a JSValue*. - - This implementation is encumbered by a number of constraints. It ties the - JSValue representation to the size of pointer on the platform, which, for - example, means that we currently can represent different ranges of integers - as immediates on x86 and x86-64. It also prevents us from overloading the - to-boolean conversion used to test for noValue() - effectively forcing us - to represent noValue() as 0. This would potentially be problematic were we - to wish to encode integer values differently (e.g. were we to use the v8 - encoding, where pointers are tagged with 1 and integers with 0, then the - immediate integer 0 would conflict with noValue()). - - This patch replaces all usage of JSValue* with a new class, JSValuePtr, - which encapsulates the pointer. JSValuePtr maintains the same interface as - JSValue*, overloading operator-> and operator bool such that previous - operations in the code on variables of type JSValue* are still supported. - - In order to provide a ProtectPtr<> type with support for the new value - representation (without using the internal JSValue type directly), a new - ProtectJSValuePtr type has been added, equivalent to the previous type - ProtectPtr. - - This patch is likely the first in a sequence of three changes. With the - value now encapsulated it will likely make sense to migrate the functionality - from JSValue into JSValuePtr, such that the internal pointer representation - need not be exposed. Through migrating the functionality to the wrapper - class the existing JSValue should be rendered redundant, and the class is - likely to be removed (the JSValuePtr now wrapping a pointer to a JSCell). - At this stage it will likely make sense to rename JSValuePtr to JSValue. - - https://bugs.webkit.org/show_bug.cgi?id=23114 - - * API/APICast.h: - (toJS): - (toRef): - * API/JSBase.cpp: - (JSEvaluateScript): - * API/JSCallbackConstructor.h: - (JSC::JSCallbackConstructor::createStructure): - * API/JSCallbackFunction.cpp: - (JSC::JSCallbackFunction::call): - * API/JSCallbackFunction.h: - (JSC::JSCallbackFunction::createStructure): - * API/JSCallbackObject.h: - (JSC::JSCallbackObject::createStructure): - * API/JSCallbackObjectFunctions.h: - (JSC::::asCallbackObject): - (JSC::::put): - (JSC::::hasInstance): - (JSC::::call): - (JSC::::staticValueGetter): - (JSC::::staticFunctionGetter): - (JSC::::callbackGetter): - * API/JSContextRef.cpp: - * API/JSObjectRef.cpp: - (JSObjectMakeConstructor): - (JSObjectSetPrototype): - (JSObjectGetProperty): - (JSObjectSetProperty): - (JSObjectGetPropertyAtIndex): - (JSObjectSetPropertyAtIndex): - * API/JSValueRef.cpp: - (JSValueGetType): - (JSValueIsUndefined): - (JSValueIsNull): - (JSValueIsBoolean): - (JSValueIsNumber): - (JSValueIsString): - (JSValueIsObject): - (JSValueIsObjectOfClass): - (JSValueIsEqual): - (JSValueIsStrictEqual): - (JSValueIsInstanceOfConstructor): - (JSValueToBoolean): - (JSValueToNumber): - (JSValueToStringCopy): - (JSValueToObject): - (JSValueProtect): - (JSValueUnprotect): - * JavaScriptCore.exp: - * bytecode/CodeBlock.cpp: - (JSC::valueToSourceString): - (JSC::constantName): - (JSC::CodeBlock::dump): - * bytecode/CodeBlock.h: - (JSC::CodeBlock::getConstant): - (JSC::CodeBlock::addUnexpectedConstant): - (JSC::CodeBlock::unexpectedConstant): - * bytecode/EvalCodeCache.h: - (JSC::EvalCodeCache::get): - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::BytecodeGenerator): - (JSC::BytecodeGenerator::addConstant): - (JSC::BytecodeGenerator::addUnexpectedConstant): - (JSC::BytecodeGenerator::emitLoad): - (JSC::BytecodeGenerator::emitLoadJSV): - (JSC::BytecodeGenerator::emitGetScopedVar): - (JSC::BytecodeGenerator::emitPutScopedVar): - (JSC::BytecodeGenerator::emitNewError): - (JSC::keyForImmediateSwitch): - * bytecompiler/BytecodeGenerator.h: - (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue): - (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue): - * debugger/DebuggerCallFrame.cpp: - (JSC::DebuggerCallFrame::evaluate): - * debugger/DebuggerCallFrame.h: - (JSC::DebuggerCallFrame::DebuggerCallFrame): - (JSC::DebuggerCallFrame::exception): - * interpreter/CallFrame.cpp: - (JSC::CallFrame::thisValue): - * interpreter/CallFrame.h: - (JSC::ExecState::setException): - (JSC::ExecState::exception): - (JSC::ExecState::exceptionSlot): - (JSC::ExecState::hadException): - * interpreter/Interpreter.cpp: - (JSC::fastIsNumber): - (JSC::fastToInt32): - (JSC::fastToUInt32): - (JSC::jsLess): - (JSC::jsLessEq): - (JSC::jsAddSlowCase): - (JSC::jsAdd): - (JSC::jsTypeStringForValue): - (JSC::jsIsObjectType): - (JSC::jsIsFunctionType): - (JSC::Interpreter::resolve): - (JSC::Interpreter::resolveSkip): - (JSC::Interpreter::resolveGlobal): - (JSC::inlineResolveBase): - (JSC::Interpreter::resolveBase): - (JSC::Interpreter::resolveBaseAndProperty): - (JSC::Interpreter::resolveBaseAndFunc): - (JSC::isNotObject): - (JSC::Interpreter::callEval): - (JSC::Interpreter::unwindCallFrame): - (JSC::Interpreter::throwException): - (JSC::Interpreter::execute): - (JSC::Interpreter::checkTimeout): - (JSC::Interpreter::createExceptionScope): - (JSC::cachePrototypeChain): - (JSC::Interpreter::tryCachePutByID): - (JSC::countPrototypeChainEntriesAndCheckForProxies): - (JSC::Interpreter::tryCacheGetByID): - (JSC::Interpreter::privateExecute): - (JSC::Interpreter::retrieveArguments): - (JSC::Interpreter::retrieveCaller): - (JSC::Interpreter::retrieveLastCaller): - (JSC::Interpreter::tryCTICachePutByID): - (JSC::Interpreter::tryCTICacheGetByID): - (JSC::returnToThrowTrampoline): - (JSC::Interpreter::cti_op_convert_this): - (JSC::Interpreter::cti_op_add): - (JSC::Interpreter::cti_op_pre_inc): - (JSC::Interpreter::cti_op_loop_if_less): - (JSC::Interpreter::cti_op_loop_if_lesseq): - (JSC::Interpreter::cti_op_get_by_id_generic): - (JSC::Interpreter::cti_op_get_by_id): - (JSC::Interpreter::cti_op_get_by_id_second): - (JSC::Interpreter::cti_op_get_by_id_self_fail): - (JSC::Interpreter::cti_op_get_by_id_proto_list): - (JSC::Interpreter::cti_op_get_by_id_proto_list_full): - (JSC::Interpreter::cti_op_get_by_id_proto_fail): - (JSC::Interpreter::cti_op_get_by_id_array_fail): - (JSC::Interpreter::cti_op_get_by_id_string_fail): - (JSC::Interpreter::cti_op_instanceof): - (JSC::Interpreter::cti_op_del_by_id): - (JSC::Interpreter::cti_op_mul): - (JSC::Interpreter::cti_op_call_NotJSFunction): - (JSC::Interpreter::cti_op_resolve): - (JSC::Interpreter::cti_op_construct_NotJSConstruct): - (JSC::Interpreter::cti_op_get_by_val): - (JSC::Interpreter::cti_op_resolve_func): - (JSC::Interpreter::cti_op_sub): - (JSC::Interpreter::cti_op_put_by_val): - (JSC::Interpreter::cti_op_put_by_val_array): - (JSC::Interpreter::cti_op_lesseq): - (JSC::Interpreter::cti_op_loop_if_true): - (JSC::Interpreter::cti_op_negate): - (JSC::Interpreter::cti_op_resolve_base): - (JSC::Interpreter::cti_op_resolve_skip): - (JSC::Interpreter::cti_op_resolve_global): - (JSC::Interpreter::cti_op_div): - (JSC::Interpreter::cti_op_pre_dec): - (JSC::Interpreter::cti_op_jless): - (JSC::Interpreter::cti_op_not): - (JSC::Interpreter::cti_op_jtrue): - (JSC::Interpreter::cti_op_post_inc): - (JSC::Interpreter::cti_op_eq): - (JSC::Interpreter::cti_op_lshift): - (JSC::Interpreter::cti_op_bitand): - (JSC::Interpreter::cti_op_rshift): - (JSC::Interpreter::cti_op_bitnot): - (JSC::Interpreter::cti_op_resolve_with_base): - (JSC::Interpreter::cti_op_mod): - (JSC::Interpreter::cti_op_less): - (JSC::Interpreter::cti_op_neq): - (JSC::Interpreter::cti_op_post_dec): - (JSC::Interpreter::cti_op_urshift): - (JSC::Interpreter::cti_op_bitxor): - (JSC::Interpreter::cti_op_bitor): - (JSC::Interpreter::cti_op_call_eval): - (JSC::Interpreter::cti_op_throw): - (JSC::Interpreter::cti_op_next_pname): - (JSC::Interpreter::cti_op_typeof): - (JSC::Interpreter::cti_op_is_undefined): - (JSC::Interpreter::cti_op_is_boolean): - (JSC::Interpreter::cti_op_is_number): - (JSC::Interpreter::cti_op_is_string): - (JSC::Interpreter::cti_op_is_object): - (JSC::Interpreter::cti_op_is_function): - (JSC::Interpreter::cti_op_stricteq): - (JSC::Interpreter::cti_op_nstricteq): - (JSC::Interpreter::cti_op_to_jsnumber): - (JSC::Interpreter::cti_op_in): - (JSC::Interpreter::cti_op_switch_imm): - (JSC::Interpreter::cti_op_switch_char): - (JSC::Interpreter::cti_op_switch_string): - (JSC::Interpreter::cti_op_del_by_val): - (JSC::Interpreter::cti_op_new_error): - (JSC::Interpreter::cti_vm_throw): - * interpreter/Interpreter.h: - (JSC::Interpreter::isJSArray): - (JSC::Interpreter::isJSString): - * interpreter/Register.h: - (JSC::Register::): - (JSC::Register::Register): - (JSC::Register::jsValue): - (JSC::Register::getJSValue): - * jit/JIT.cpp: - (JSC::): - (JSC::JIT::compileOpStrictEq): - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - * jit/JIT.h: - (JSC::): - (JSC::JIT::execute): - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArith_op_rshift): - (JSC::JIT::compileFastArithSlow_op_rshift): - * jit/JITCall.cpp: - (JSC::JIT::unlinkCall): - (JSC::JIT::compileOpCallInitializeCallFrame): - (JSC::JIT::compileOpCall): - * jit/JITInlineMethods.h: - (JSC::JIT::emitGetVirtualRegister): - (JSC::JIT::getConstantOperand): - (JSC::JIT::isOperandConstant31BitImmediateInt): - (JSC::JIT::emitPutJITStubArgFromVirtualRegister): - (JSC::JIT::emitInitRegister): - * jit/JITPropertyAccess.cpp: - (JSC::resizePropertyStorage): - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::patchGetByIdSelf): - (JSC::JIT::patchPutByIdReplace): - (JSC::JIT::privateCompileGetByIdSelf): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdSelfList): - (JSC::JIT::privateCompileGetByIdProtoList): - (JSC::JIT::privateCompileGetByIdChainList): - (JSC::JIT::privateCompileGetByIdChain): - (JSC::JIT::privateCompilePutByIdReplace): - * jsc.cpp: - (functionPrint): - (functionDebug): - (functionGC): - (functionVersion): - (functionRun): - (functionLoad): - (functionReadline): - (functionQuit): - * parser/Nodes.cpp: - (JSC::NullNode::emitBytecode): - (JSC::ArrayNode::emitBytecode): - (JSC::FunctionCallValueNode::emitBytecode): - (JSC::FunctionCallResolveNode::emitBytecode): - (JSC::VoidNode::emitBytecode): - (JSC::ConstDeclNode::emitCodeSingle): - (JSC::ReturnNode::emitBytecode): - (JSC::processClauseList): - (JSC::EvalNode::emitBytecode): - (JSC::FunctionBodyNode::emitBytecode): - (JSC::ProgramNode::emitBytecode): - * profiler/ProfileGenerator.cpp: - (JSC::ProfileGenerator::addParentForConsoleStart): - * profiler/Profiler.cpp: - (JSC::Profiler::willExecute): - (JSC::Profiler::didExecute): - (JSC::Profiler::createCallIdentifier): - * profiler/Profiler.h: - * runtime/ArgList.cpp: - (JSC::ArgList::slowAppend): - * runtime/ArgList.h: - (JSC::ArgList::at): - (JSC::ArgList::append): - * runtime/Arguments.cpp: - (JSC::Arguments::put): - * runtime/Arguments.h: - (JSC::Arguments::createStructure): - (JSC::asArguments): - * runtime/ArrayConstructor.cpp: - (JSC::callArrayConstructor): - * runtime/ArrayPrototype.cpp: - (JSC::getProperty): - (JSC::putProperty): - (JSC::arrayProtoFuncToString): - (JSC::arrayProtoFuncToLocaleString): - (JSC::arrayProtoFuncJoin): - (JSC::arrayProtoFuncConcat): - (JSC::arrayProtoFuncPop): - (JSC::arrayProtoFuncPush): - (JSC::arrayProtoFuncReverse): - (JSC::arrayProtoFuncShift): - (JSC::arrayProtoFuncSlice): - (JSC::arrayProtoFuncSort): - (JSC::arrayProtoFuncSplice): - (JSC::arrayProtoFuncUnShift): - (JSC::arrayProtoFuncFilter): - (JSC::arrayProtoFuncMap): - (JSC::arrayProtoFuncEvery): - (JSC::arrayProtoFuncForEach): - (JSC::arrayProtoFuncSome): - (JSC::arrayProtoFuncIndexOf): - (JSC::arrayProtoFuncLastIndexOf): - * runtime/BooleanConstructor.cpp: - (JSC::callBooleanConstructor): - (JSC::constructBooleanFromImmediateBoolean): - * runtime/BooleanConstructor.h: - * runtime/BooleanObject.h: - (JSC::asBooleanObject): - * runtime/BooleanPrototype.cpp: - (JSC::booleanProtoFuncToString): - (JSC::booleanProtoFuncValueOf): - * runtime/CallData.cpp: - (JSC::call): - * runtime/CallData.h: - * runtime/Collector.cpp: - (JSC::Heap::protect): - (JSC::Heap::unprotect): - (JSC::Heap::heap): - (JSC::Heap::collect): - * runtime/Collector.h: - * runtime/Completion.cpp: - (JSC::evaluate): - * runtime/Completion.h: - (JSC::Completion::Completion): - (JSC::Completion::value): - (JSC::Completion::setValue): - (JSC::Completion::isValueCompletion): - * runtime/ConstructData.cpp: - (JSC::construct): - * runtime/ConstructData.h: - * runtime/DateConstructor.cpp: - (JSC::constructDate): - (JSC::callDate): - (JSC::dateParse): - (JSC::dateNow): - (JSC::dateUTC): - * runtime/DateInstance.h: - (JSC::asDateInstance): - * runtime/DatePrototype.cpp: - (JSC::dateProtoFuncToString): - (JSC::dateProtoFuncToUTCString): - (JSC::dateProtoFuncToDateString): - (JSC::dateProtoFuncToTimeString): - (JSC::dateProtoFuncToLocaleString): - (JSC::dateProtoFuncToLocaleDateString): - (JSC::dateProtoFuncToLocaleTimeString): - (JSC::dateProtoFuncValueOf): - (JSC::dateProtoFuncGetTime): - (JSC::dateProtoFuncGetFullYear): - (JSC::dateProtoFuncGetUTCFullYear): - (JSC::dateProtoFuncToGMTString): - (JSC::dateProtoFuncGetMonth): - (JSC::dateProtoFuncGetUTCMonth): - (JSC::dateProtoFuncGetDate): - (JSC::dateProtoFuncGetUTCDate): - (JSC::dateProtoFuncGetDay): - (JSC::dateProtoFuncGetUTCDay): - (JSC::dateProtoFuncGetHours): - (JSC::dateProtoFuncGetUTCHours): - (JSC::dateProtoFuncGetMinutes): - (JSC::dateProtoFuncGetUTCMinutes): - (JSC::dateProtoFuncGetSeconds): - (JSC::dateProtoFuncGetUTCSeconds): - (JSC::dateProtoFuncGetMilliSeconds): - (JSC::dateProtoFuncGetUTCMilliseconds): - (JSC::dateProtoFuncGetTimezoneOffset): - (JSC::dateProtoFuncSetTime): - (JSC::setNewValueFromTimeArgs): - (JSC::setNewValueFromDateArgs): - (JSC::dateProtoFuncSetMilliSeconds): - (JSC::dateProtoFuncSetUTCMilliseconds): - (JSC::dateProtoFuncSetSeconds): - (JSC::dateProtoFuncSetUTCSeconds): - (JSC::dateProtoFuncSetMinutes): - (JSC::dateProtoFuncSetUTCMinutes): - (JSC::dateProtoFuncSetHours): - (JSC::dateProtoFuncSetUTCHours): - (JSC::dateProtoFuncSetDate): - (JSC::dateProtoFuncSetUTCDate): - (JSC::dateProtoFuncSetMonth): - (JSC::dateProtoFuncSetUTCMonth): - (JSC::dateProtoFuncSetFullYear): - (JSC::dateProtoFuncSetUTCFullYear): - (JSC::dateProtoFuncSetYear): - (JSC::dateProtoFuncGetYear): - * runtime/DatePrototype.h: - (JSC::DatePrototype::createStructure): - * runtime/ErrorConstructor.cpp: - (JSC::callErrorConstructor): - * runtime/ErrorPrototype.cpp: - (JSC::errorProtoFuncToString): - * runtime/ExceptionHelpers.cpp: - (JSC::createInterruptedExecutionException): - (JSC::createError): - (JSC::createStackOverflowError): - (JSC::createUndefinedVariableError): - (JSC::createErrorMessage): - (JSC::createInvalidParamError): - (JSC::createNotAConstructorError): - (JSC::createNotAFunctionError): - * runtime/ExceptionHelpers.h: - * runtime/FunctionConstructor.cpp: - (JSC::callFunctionConstructor): - * runtime/FunctionPrototype.cpp: - (JSC::callFunctionPrototype): - (JSC::functionProtoFuncToString): - (JSC::functionProtoFuncApply): - (JSC::functionProtoFuncCall): - * runtime/FunctionPrototype.h: - (JSC::FunctionPrototype::createStructure): - * runtime/GetterSetter.cpp: - (JSC::GetterSetter::toPrimitive): - (JSC::GetterSetter::getPrimitiveNumber): - * runtime/GetterSetter.h: - (JSC::asGetterSetter): - * runtime/InitializeThreading.cpp: - * runtime/InternalFunction.h: - (JSC::InternalFunction::createStructure): - (JSC::asInternalFunction): - * runtime/JSActivation.cpp: - (JSC::JSActivation::getOwnPropertySlot): - (JSC::JSActivation::put): - (JSC::JSActivation::putWithAttributes): - (JSC::JSActivation::argumentsGetter): - * runtime/JSActivation.h: - (JSC::JSActivation::createStructure): - (JSC::asActivation): - * runtime/JSArray.cpp: - (JSC::storageSize): - (JSC::JSArray::JSArray): - (JSC::JSArray::getOwnPropertySlot): - (JSC::JSArray::put): - (JSC::JSArray::putSlowCase): - (JSC::JSArray::deleteProperty): - (JSC::JSArray::getPropertyNames): - (JSC::JSArray::setLength): - (JSC::JSArray::pop): - (JSC::JSArray::push): - (JSC::JSArray::mark): - (JSC::JSArray::sort): - (JSC::JSArray::compactForSorting): - (JSC::JSArray::checkConsistency): - (JSC::constructArray): - * runtime/JSArray.h: - (JSC::JSArray::getIndex): - (JSC::JSArray::setIndex): - (JSC::JSArray::createStructure): - (JSC::asArray): - * runtime/JSCell.cpp: - (JSC::JSCell::put): - (JSC::JSCell::getJSNumber): - * runtime/JSCell.h: - (JSC::asCell): - (JSC::JSValue::asCell): - (JSC::JSValue::toPrimitive): - (JSC::JSValue::getPrimitiveNumber): - (JSC::JSValue::getJSNumber): - * runtime/JSFunction.cpp: - (JSC::JSFunction::call): - (JSC::JSFunction::argumentsGetter): - (JSC::JSFunction::callerGetter): - (JSC::JSFunction::lengthGetter): - (JSC::JSFunction::getOwnPropertySlot): - (JSC::JSFunction::put): - (JSC::JSFunction::construct): - * runtime/JSFunction.h: - (JSC::JSFunction::createStructure): - (JSC::asFunction): - * runtime/JSGlobalData.h: - * runtime/JSGlobalObject.cpp: - (JSC::markIfNeeded): - (JSC::JSGlobalObject::put): - (JSC::JSGlobalObject::putWithAttributes): - (JSC::JSGlobalObject::reset): - (JSC::JSGlobalObject::resetPrototype): - * runtime/JSGlobalObject.h: - (JSC::JSGlobalObject::createStructure): - (JSC::JSGlobalObject::GlobalPropertyInfo::GlobalPropertyInfo): - (JSC::asGlobalObject): - (JSC::Structure::prototypeForLookup): - * runtime/JSGlobalObjectFunctions.cpp: - (JSC::encode): - (JSC::decode): - (JSC::globalFuncEval): - (JSC::globalFuncParseInt): - (JSC::globalFuncParseFloat): - (JSC::globalFuncIsNaN): - (JSC::globalFuncIsFinite): - (JSC::globalFuncDecodeURI): - (JSC::globalFuncDecodeURIComponent): - (JSC::globalFuncEncodeURI): - (JSC::globalFuncEncodeURIComponent): - (JSC::globalFuncEscape): - (JSC::globalFuncUnescape): - (JSC::globalFuncJSCPrint): - * runtime/JSGlobalObjectFunctions.h: - * runtime/JSImmediate.cpp: - (JSC::JSImmediate::toThisObject): - (JSC::JSImmediate::toObject): - (JSC::JSImmediate::prototype): - (JSC::JSImmediate::toString): - * runtime/JSImmediate.h: - (JSC::JSImmediate::isImmediate): - (JSC::JSImmediate::isNumber): - (JSC::JSImmediate::isPositiveNumber): - (JSC::JSImmediate::isBoolean): - (JSC::JSImmediate::isUndefinedOrNull): - (JSC::JSImmediate::isNegative): - (JSC::JSImmediate::isEitherImmediate): - (JSC::JSImmediate::isAnyImmediate): - (JSC::JSImmediate::areBothImmediate): - (JSC::JSImmediate::areBothImmediateNumbers): - (JSC::JSImmediate::andImmediateNumbers): - (JSC::JSImmediate::xorImmediateNumbers): - (JSC::JSImmediate::orImmediateNumbers): - (JSC::JSImmediate::rightShiftImmediateNumbers): - (JSC::JSImmediate::canDoFastAdditiveOperations): - (JSC::JSImmediate::addImmediateNumbers): - (JSC::JSImmediate::subImmediateNumbers): - (JSC::JSImmediate::incImmediateNumber): - (JSC::JSImmediate::decImmediateNumber): - (JSC::JSImmediate::makeValue): - (JSC::JSImmediate::makeInt): - (JSC::JSImmediate::makeBool): - (JSC::JSImmediate::makeUndefined): - (JSC::JSImmediate::makeNull): - (JSC::JSImmediate::intValue): - (JSC::JSImmediate::uintValue): - (JSC::JSImmediate::boolValue): - (JSC::JSImmediate::rawValue): - (JSC::JSImmediate::trueImmediate): - (JSC::JSImmediate::falseImmediate): - (JSC::JSImmediate::undefinedImmediate): - (JSC::JSImmediate::nullImmediate): - (JSC::JSImmediate::zeroImmediate): - (JSC::JSImmediate::oneImmediate): - (JSC::JSImmediate::impossibleValue): - (JSC::JSImmediate::toBoolean): - (JSC::JSImmediate::getTruncatedUInt32): - (JSC::JSImmediate::from): - (JSC::JSImmediate::getTruncatedInt32): - (JSC::JSImmediate::toDouble): - (JSC::JSImmediate::getUInt32): - (JSC::jsNull): - (JSC::jsBoolean): - (JSC::jsUndefined): - (JSC::JSValue::isUndefined): - (JSC::JSValue::isNull): - (JSC::JSValue::isUndefinedOrNull): - (JSC::JSValue::isBoolean): - (JSC::JSValue::getBoolean): - (JSC::JSValue::toInt32): - (JSC::JSValue::toUInt32): - (JSC::toInt32): - (JSC::toUInt32): - * runtime/JSNotAnObject.cpp: - (JSC::JSNotAnObject::toPrimitive): - (JSC::JSNotAnObject::getPrimitiveNumber): - (JSC::JSNotAnObject::put): - * runtime/JSNotAnObject.h: - (JSC::JSNotAnObject::createStructure): - * runtime/JSNumberCell.cpp: - (JSC::JSNumberCell::toPrimitive): - (JSC::JSNumberCell::getPrimitiveNumber): - (JSC::JSNumberCell::getJSNumber): - (JSC::jsNumberCell): - (JSC::jsNaN): - * runtime/JSNumberCell.h: - (JSC::JSNumberCell::createStructure): - (JSC::asNumberCell): - (JSC::jsNumber): - (JSC::JSValue::toJSNumber): - * runtime/JSObject.cpp: - (JSC::JSObject::mark): - (JSC::JSObject::put): - (JSC::JSObject::putWithAttributes): - (JSC::callDefaultValueFunction): - (JSC::JSObject::getPrimitiveNumber): - (JSC::JSObject::defaultValue): - (JSC::JSObject::defineGetter): - (JSC::JSObject::defineSetter): - (JSC::JSObject::lookupGetter): - (JSC::JSObject::lookupSetter): - (JSC::JSObject::hasInstance): - (JSC::JSObject::toNumber): - (JSC::JSObject::toString): - (JSC::JSObject::fillGetterPropertySlot): - * runtime/JSObject.h: - (JSC::JSObject::getDirect): - (JSC::JSObject::getDirectLocation): - (JSC::JSObject::offsetForLocation): - (JSC::JSObject::locationForOffset): - (JSC::JSObject::getDirectOffset): - (JSC::JSObject::putDirectOffset): - (JSC::JSObject::createStructure): - (JSC::asObject): - (JSC::JSObject::prototype): - (JSC::JSObject::setPrototype): - (JSC::JSObject::inlineGetOwnPropertySlot): - (JSC::JSObject::getOwnPropertySlotForWrite): - (JSC::JSObject::getPropertySlot): - (JSC::JSObject::get): - (JSC::JSObject::putDirect): - (JSC::JSObject::putDirectWithoutTransition): - (JSC::JSObject::toPrimitive): - (JSC::JSValue::get): - (JSC::JSValue::put): - (JSC::JSObject::allocatePropertyStorageInline): - * runtime/JSPropertyNameIterator.cpp: - (JSC::JSPropertyNameIterator::toPrimitive): - (JSC::JSPropertyNameIterator::getPrimitiveNumber): - * runtime/JSPropertyNameIterator.h: - (JSC::JSPropertyNameIterator::create): - (JSC::JSPropertyNameIterator::next): - * runtime/JSStaticScopeObject.cpp: - (JSC::JSStaticScopeObject::put): - (JSC::JSStaticScopeObject::putWithAttributes): - * runtime/JSStaticScopeObject.h: - (JSC::JSStaticScopeObject::JSStaticScopeObject): - (JSC::JSStaticScopeObject::createStructure): - * runtime/JSString.cpp: - (JSC::JSString::toPrimitive): - (JSC::JSString::getPrimitiveNumber): - (JSC::JSString::getOwnPropertySlot): - * runtime/JSString.h: - (JSC::JSString::createStructure): - (JSC::asString): - * runtime/JSValue.h: - (JSC::JSValuePtr::makeImmediate): - (JSC::JSValuePtr::immediateValue): - (JSC::JSValuePtr::JSValuePtr): - (JSC::JSValuePtr::operator->): - (JSC::JSValuePtr::hasValue): - (JSC::JSValuePtr::operator==): - (JSC::JSValuePtr::operator!=): - (JSC::JSValuePtr::encode): - (JSC::JSValuePtr::decode): - (JSC::JSValue::asValue): - (JSC::noValue): - (JSC::operator==): - (JSC::operator!=): - * runtime/JSVariableObject.h: - (JSC::JSVariableObject::symbolTablePut): - (JSC::JSVariableObject::symbolTablePutWithAttributes): - * runtime/JSWrapperObject.cpp: - (JSC::JSWrapperObject::mark): - * runtime/JSWrapperObject.h: - (JSC::JSWrapperObject::internalValue): - (JSC::JSWrapperObject::setInternalValue): - * runtime/Lookup.cpp: - (JSC::setUpStaticFunctionSlot): - * runtime/Lookup.h: - (JSC::lookupPut): - * runtime/MathObject.cpp: - (JSC::mathProtoFuncAbs): - (JSC::mathProtoFuncACos): - (JSC::mathProtoFuncASin): - (JSC::mathProtoFuncATan): - (JSC::mathProtoFuncATan2): - (JSC::mathProtoFuncCeil): - (JSC::mathProtoFuncCos): - (JSC::mathProtoFuncExp): - (JSC::mathProtoFuncFloor): - (JSC::mathProtoFuncLog): - (JSC::mathProtoFuncMax): - (JSC::mathProtoFuncMin): - (JSC::mathProtoFuncPow): - (JSC::mathProtoFuncRandom): - (JSC::mathProtoFuncRound): - (JSC::mathProtoFuncSin): - (JSC::mathProtoFuncSqrt): - (JSC::mathProtoFuncTan): - * runtime/MathObject.h: - (JSC::MathObject::createStructure): - * runtime/NativeErrorConstructor.cpp: - (JSC::callNativeErrorConstructor): - * runtime/NumberConstructor.cpp: - (JSC::numberConstructorNaNValue): - (JSC::numberConstructorNegInfinity): - (JSC::numberConstructorPosInfinity): - (JSC::numberConstructorMaxValue): - (JSC::numberConstructorMinValue): - (JSC::callNumberConstructor): - * runtime/NumberConstructor.h: - (JSC::NumberConstructor::createStructure): - * runtime/NumberObject.cpp: - (JSC::NumberObject::getJSNumber): - (JSC::constructNumberFromImmediateNumber): - * runtime/NumberObject.h: - * runtime/NumberPrototype.cpp: - (JSC::numberProtoFuncToString): - (JSC::numberProtoFuncToLocaleString): - (JSC::numberProtoFuncValueOf): - (JSC::numberProtoFuncToFixed): - (JSC::numberProtoFuncToExponential): - (JSC::numberProtoFuncToPrecision): - * runtime/ObjectConstructor.cpp: - (JSC::constructObject): - (JSC::callObjectConstructor): - * runtime/ObjectPrototype.cpp: - (JSC::objectProtoFuncValueOf): - (JSC::objectProtoFuncHasOwnProperty): - (JSC::objectProtoFuncIsPrototypeOf): - (JSC::objectProtoFuncDefineGetter): - (JSC::objectProtoFuncDefineSetter): - (JSC::objectProtoFuncLookupGetter): - (JSC::objectProtoFuncLookupSetter): - (JSC::objectProtoFuncPropertyIsEnumerable): - (JSC::objectProtoFuncToLocaleString): - (JSC::objectProtoFuncToString): - * runtime/ObjectPrototype.h: - * runtime/Operations.cpp: - (JSC::equal): - (JSC::equalSlowCase): - (JSC::strictEqual): - (JSC::strictEqualSlowCase): - (JSC::throwOutOfMemoryError): - * runtime/Operations.h: - (JSC::equalSlowCaseInline): - (JSC::strictEqualSlowCaseInline): - * runtime/PropertySlot.cpp: - (JSC::PropertySlot::functionGetter): - * runtime/PropertySlot.h: - (JSC::PropertySlot::PropertySlot): - (JSC::PropertySlot::getValue): - (JSC::PropertySlot::putValue): - (JSC::PropertySlot::setValueSlot): - (JSC::PropertySlot::setValue): - (JSC::PropertySlot::setCustom): - (JSC::PropertySlot::setCustomIndex): - (JSC::PropertySlot::slotBase): - (JSC::PropertySlot::setBase): - (JSC::PropertySlot::): - * runtime/Protect.h: - (JSC::gcProtect): - (JSC::gcUnprotect): - (JSC::ProtectedPtr::ProtectedPtr): - (JSC::ProtectedPtr::operator JSValuePtr): - (JSC::ProtectedJSValuePtr::ProtectedJSValuePtr): - (JSC::ProtectedJSValuePtr::get): - (JSC::ProtectedJSValuePtr::operator JSValuePtr): - (JSC::ProtectedJSValuePtr::operator->): - (JSC::::ProtectedPtr): - (JSC::::~ProtectedPtr): - (JSC::::operator): - (JSC::ProtectedJSValuePtr::~ProtectedJSValuePtr): - (JSC::ProtectedJSValuePtr::operator=): - (JSC::operator==): - (JSC::operator!=): - * runtime/RegExpConstructor.cpp: - (JSC::RegExpConstructor::getBackref): - (JSC::RegExpConstructor::getLastParen): - (JSC::RegExpConstructor::getLeftContext): - (JSC::RegExpConstructor::getRightContext): - (JSC::regExpConstructorDollar1): - (JSC::regExpConstructorDollar2): - (JSC::regExpConstructorDollar3): - (JSC::regExpConstructorDollar4): - (JSC::regExpConstructorDollar5): - (JSC::regExpConstructorDollar6): - (JSC::regExpConstructorDollar7): - (JSC::regExpConstructorDollar8): - (JSC::regExpConstructorDollar9): - (JSC::regExpConstructorInput): - (JSC::regExpConstructorMultiline): - (JSC::regExpConstructorLastMatch): - (JSC::regExpConstructorLastParen): - (JSC::regExpConstructorLeftContext): - (JSC::regExpConstructorRightContext): - (JSC::RegExpConstructor::put): - (JSC::setRegExpConstructorInput): - (JSC::setRegExpConstructorMultiline): - (JSC::constructRegExp): - (JSC::callRegExpConstructor): - * runtime/RegExpConstructor.h: - (JSC::RegExpConstructor::createStructure): - (JSC::asRegExpConstructor): - * runtime/RegExpMatchesArray.h: - (JSC::RegExpMatchesArray::put): - * runtime/RegExpObject.cpp: - (JSC::regExpObjectGlobal): - (JSC::regExpObjectIgnoreCase): - (JSC::regExpObjectMultiline): - (JSC::regExpObjectSource): - (JSC::regExpObjectLastIndex): - (JSC::RegExpObject::put): - (JSC::setRegExpObjectLastIndex): - (JSC::RegExpObject::test): - (JSC::RegExpObject::exec): - (JSC::callRegExpObject): - * runtime/RegExpObject.h: - (JSC::RegExpObject::createStructure): - (JSC::asRegExpObject): - * runtime/RegExpPrototype.cpp: - (JSC::regExpProtoFuncTest): - (JSC::regExpProtoFuncExec): - (JSC::regExpProtoFuncCompile): - (JSC::regExpProtoFuncToString): - * runtime/StringConstructor.cpp: - (JSC::stringFromCharCodeSlowCase): - (JSC::stringFromCharCode): - (JSC::callStringConstructor): - * runtime/StringObject.cpp: - (JSC::StringObject::put): - * runtime/StringObject.h: - (JSC::StringObject::createStructure): - (JSC::asStringObject): - * runtime/StringObjectThatMasqueradesAsUndefined.h: - (JSC::StringObjectThatMasqueradesAsUndefined::createStructure): - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncReplace): - (JSC::stringProtoFuncToString): - (JSC::stringProtoFuncCharAt): - (JSC::stringProtoFuncCharCodeAt): - (JSC::stringProtoFuncConcat): - (JSC::stringProtoFuncIndexOf): - (JSC::stringProtoFuncLastIndexOf): - (JSC::stringProtoFuncMatch): - (JSC::stringProtoFuncSearch): - (JSC::stringProtoFuncSlice): - (JSC::stringProtoFuncSplit): - (JSC::stringProtoFuncSubstr): - (JSC::stringProtoFuncSubstring): - (JSC::stringProtoFuncToLowerCase): - (JSC::stringProtoFuncToUpperCase): - (JSC::stringProtoFuncLocaleCompare): - (JSC::stringProtoFuncBig): - (JSC::stringProtoFuncSmall): - (JSC::stringProtoFuncBlink): - (JSC::stringProtoFuncBold): - (JSC::stringProtoFuncFixed): - (JSC::stringProtoFuncItalics): - (JSC::stringProtoFuncStrike): - (JSC::stringProtoFuncSub): - (JSC::stringProtoFuncSup): - (JSC::stringProtoFuncFontcolor): - (JSC::stringProtoFuncFontsize): - (JSC::stringProtoFuncAnchor): - (JSC::stringProtoFuncLink): - * runtime/Structure.cpp: - (JSC::Structure::Structure): - (JSC::Structure::changePrototypeTransition): - (JSC::Structure::createCachedPrototypeChain): - * runtime/Structure.h: - (JSC::Structure::create): - (JSC::Structure::setPrototypeWithoutTransition): - (JSC::Structure::storedPrototype): - -2009-01-06 Oliver Hunt - - Reviewed by Cameron Zwarich. - - [jsfunfuzz] Over released ScopeChainNode - - - So this delightful bug was caused by our unwind code using a ScopeChain to perform - the unwind. The ScopeChain would ref the initial top of the scope chain, then deref - the resultant top of scope chain, which is incorrect. - - This patch removes the dependency on ScopeChain for the unwind, and i've filed - to look into the unintuitive - ScopeChain behaviour. - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::throwException): - -2009-01-06 Adam Roben - - Hopeful Windows crash-on-launch fix - - * wtf/Platform.h: Force a world rebuild by touching this file. - -2009-01-06 Holger Hans Peter Freyther - - Reviewed by NOBODY (Build fix). - - * GNUmakefile.am:Add ByteArray.cpp too - -2009-01-06 Holger Hans Peter Freyther - - Reviewed by NOBODY (Speculative build fix). - - AllInOneFile.cpp does not include the JSByteArray.cpp include it... - - * GNUmakefile.am: - -2009-01-05 Oliver Hunt - - Reviewed by NOBODY (Build fix). - - Fix Wx build - - * JavaScriptCoreSources.bkl: - -2009-01-05 Oliver Hunt - - Windows build fixes - - Rubber-stamped by Alice Liu. - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::Interpreter): - * runtime/ByteArray.cpp: - (JSC::ByteArray::create): - * runtime/ByteArray.h: - -2009-01-05 Oliver Hunt - - Reviewed by Gavin Barraclough. - - CanvasPixelArray performance is too slow - - - The fix to this is to devirtualise get and put in a manner similar to - JSString and JSArray. To do this I've added a ByteArray implementation - and JSByteArray wrapper to JSC. We can then do vptr comparisons to - devirtualise the calls. - - This devirtualisation improves performance by 1.5-2x in my somewhat ad - hoc tests. - - * GNUmakefile.am: - * JavaScriptCore.exp: - * JavaScriptCore.pri: - * JavaScriptCore.scons: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * interpreter/Interpreter.cpp: - (JSC::Interpreter::Interpreter): - (JSC::Interpreter::privateExecute): - (JSC::Interpreter::cti_op_get_by_val): - (JSC::Interpreter::cti_op_put_by_val): - * interpreter/Interpreter.h: - (JSC::Interpreter::isJSByteArray): - * runtime/ByteArray.cpp: Added. - (JSC::ByteArray::create): - * runtime/ByteArray.h: Added. - (JSC::ByteArray::length): - (JSC::ByteArray::set): - (JSC::ByteArray::get): - (JSC::ByteArray::data): - (JSC::ByteArray::ByteArray): - * runtime/JSByteArray.cpp: Added. - (JSC::): - (JSC::JSByteArray::JSByteArray): - (JSC::JSByteArray::createStructure): - (JSC::JSByteArray::getOwnPropertySlot): - (JSC::JSByteArray::put): - (JSC::JSByteArray::getPropertyNames): - * runtime/JSByteArray.h: Added. - (JSC::JSByteArray::canAccessIndex): - (JSC::JSByteArray::getIndex): - (JSC::JSByteArray::setIndex): - (JSC::JSByteArray::classInfo): - (JSC::JSByteArray::length): - (JSC::JSByteArray::): - (JSC::JSByteArray::JSByteArray): - (JSC::asByteArray): - -2009-01-05 Alexey Proskuryakov - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=23073 - Workers crash on Windows Release builds - - * wtf/ThreadSpecific.h: - (WTF::ThreadSpecific::destroy): Changed to clear the pointer only after data object - destruction is finished - otherwise, WebCore::ThreadGlobalData destructor was re-creating - the object in order to access atomic string table. - (WTF::ThreadSpecific::operator T*): Symmetrically, set up the per-thread pointer before - data constructor is called. - - * wtf/ThreadingWin.cpp: (WTF::wtfThreadEntryPoint): Remove a Windows-only hack to finalize - a thread - pthreadVC2 is a DLL, so it gets thread detached messages, and cleans up thread - specific data automatically. Besides, this code wasn't even compiled in for some time now. - -2009-01-05 Alexey Proskuryakov - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=23115 - Create a version of ASSERT for use with otherwise unused variables - - * wtf/Assertions.h: Added ASSERT_UNUSED. - - * jit/ExecutableAllocatorPosix.cpp: - (JSC::ExecutablePool::systemRelease): - * runtime/Collector.cpp: - (JSC::Heap::destroy): - (JSC::Heap::heapAllocate): - * runtime/JSNotAnObject.cpp: - (JSC::JSNotAnObject::toPrimitive): - (JSC::JSNotAnObject::getPrimitiveNumber): - (JSC::JSNotAnObject::toBoolean): - (JSC::JSNotAnObject::toNumber): - (JSC::JSNotAnObject::toString): - (JSC::JSNotAnObject::getOwnPropertySlot): - (JSC::JSNotAnObject::put): - (JSC::JSNotAnObject::deleteProperty): - (JSC::JSNotAnObject::getPropertyNames): - * wtf/TCSystemAlloc.cpp: - (TCMalloc_SystemRelease): - Use it in some places that used other idioms for this purpose. - -2009-01-04 Alice Liu - - Merge m_transitionCount and m_offset in Structure. - - Reviewed by Darin Adler. - - * runtime/Structure.cpp: - (JSC::Structure::Structure): Remove m_transitionCount - (JSC::Structure::addPropertyTransitionToExistingStructure): No need to wait until after the assignment to offset to assert if it's notFound; move it up. - (JSC::Structure::addPropertyTransition): Use method for transitionCount instead of m_transitionCount. Remove line that maintains the m_transitionCount. - (JSC::Structure::changePrototypeTransition): Remove line that maintains the m_transitionCount. - (JSC::Structure::getterSetterTransition): Remove line that maintains the m_transitionCount. - * runtime/Structure.h: - Changed s_maxTransitionLength and m_offset from size_t to signed char. m_offset will never become greater than 64 - because the structure transitions to a dictionary at that time. - (JSC::Structure::transitionCount): method to replace the data member - -2009-01-04 Darin Adler - - Reviewed by David Kilzer. - - Bug 15114: Provide compile-time assertions for sizeof(UChar), sizeof(DeprecatedChar), etc. - https://bugs.webkit.org/show_bug.cgi?id=15114 - - * wtf/unicode/Unicode.h: Assert size of UChar. There is no DeprecatedChar any more. - -2009-01-03 Sam Weinig - - Reviewed by Oliver Hunt. - - Change the pcVector from storing native code pointers to storing offsets - from the base pointer. This will allow us to generate the pcVector on demand - for exceptions. - - * bytecode/CodeBlock.h: - (JSC::PC::PC): - (JSC::getNativePCOffset): - (JSC::CodeBlock::getBytecodeIndex): - * jit/JIT.cpp: - (JSC::JIT::privateCompile): - -2009-01-02 Oliver Hunt - - Reviewed by NOBODY (Build fix). - - * runtime/ScopeChain.cpp: - -2009-01-02 Oliver Hunt - - Reviewed by Gavin Barraclough. - - [jsfunfuzz] unwind logic for exceptions in eval fails to account for dynamic scope external to the eval - https://bugs.webkit.org/show_bug.cgi?id=23078 - - This bug was caused by eval codeblocks being generated without accounting - for the depth of the scope chain they inherited. This meant that exception - handlers would understate their expected scope chain depth, which in turn - led to incorrectly removing nodes from the scope chain. - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::BytecodeGenerator): - (JSC::BytecodeGenerator::emitCatch): - * bytecompiler/BytecodeGenerator.h: - * interpreter/Interpreter.cpp: - (JSC::depth): - * runtime/ScopeChain.cpp: - (JSC::ScopeChain::localDepth): - * runtime/ScopeChain.h: - (JSC::ScopeChainNode::deref): - (JSC::ScopeChainNode::ref): - -2009-01-02 David Smith - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=22699 - Enable NodeList caching for getElementsByTagName - - * wtf/HashFunctions.h: Moved the definition of PHI here and renamed to stringHashingStartValue - -2009-01-02 David Kilzer - - Attempt to fix Qt Linux build after r39553 - - * wtf/RandomNumberSeed.h: Include for gettimeofday(). - Include and for getpid(). - -2009-01-02 David Kilzer - - Bug 23081: These files are no longer part of the KDE libraries - - - - Reviewed by Darin Adler. - - Removed "This file is part of the KDE libraries" comment from - source files. Added or updated Apple copyrights as well. - - * parser/Lexer.h: - * wtf/HashCountedSet.h: - * wtf/RetainPtr.h: - * wtf/VectorTraits.h: - -2009-01-02 David Kilzer - - Bug 23080: Remove last vestiges of KJS references - - - - Reviewed by Darin Adler. - - Also updated Apple copyright statements. - - * DerivedSources.make: Changed bison "kjsyy" prefix to "jscyy". - * GNUmakefile.am: Ditto. - * JavaScriptCore.pri: Ditto. Also changed KJSBISON to JSCBISON - and kjsbison to jscbison. - - * JavaScriptCoreSources.bkl: Changed JSCORE_KJS_SOURCES to - JSCORE_JSC_SOURCES. - * jscore.bkl: Ditto. - - * create_hash_table: Updated copyright and removed old comment. - - * parser/Grammar.y: Changed "kjsyy" prefix to "jscyy" prefix. - * parser/Lexer.cpp: Ditto. Also changed KJS_DEBUG_LEX to - JSC_DEBUG_LEX. - (jscyylex): - (JSC::Lexer::lex): - * parser/Parser.cpp: Ditto. - (JSC::Parser::parse): - - * pcre/dftables: Changed "kjs_pcre_" prefix to "jsc_pcre_". - * pcre/pcre_compile.cpp: Ditto. - (getOthercaseRange): - (encodeUTF8): - (compileBranch): - (calculateCompiledPatternLength): - * pcre/pcre_exec.cpp: Ditto. - (matchRef): - (getUTF8CharAndIncrementLength): - (match): - * pcre/pcre_internal.h: Ditto. - (toLowerCase): - (flipCase): - (classBitmapForChar): - (charTypeForChar): - * pcre/pcre_tables.cpp: Ditto. - * pcre/pcre_ucp_searchfuncs.cpp: Ditto. - (jsc_pcre_ucp_othercase): - * pcre/pcre_xclass.cpp: Ditto. - (getUTF8CharAndAdvancePointer): - (jsc_pcre_xclass): - - * runtime/Collector.h: Updated header guards using the - clean-header-guards script. - * runtime/CollectorHeapIterator.h: Added missing header guard. - * runtime/Identifier.h: Updated header guards. - * runtime/JSFunction.h: Fixed end-of-namespace comment. - - * runtime/JSGlobalObject.cpp: - (JSC::JSGlobalObject::reset): Renamed "kjsprint" debug function - to "jscprint". Changed implementation method from - globalFuncKJSPrint() to globalFuncJSCPrint(). - * runtime/JSGlobalObjectFunctions.cpp: - (JSC::globalFuncJSCPrint): Renamed from globalFuncKJSPrint(). - * runtime/JSGlobalObjectFunctions.h: Ditto. - - * runtime/JSImmediate.h: Updated header guards. - * runtime/JSLock.h: Ditto. - * runtime/JSType.h: Ditto. - * runtime/JSWrapperObject.h: Ditto. - * runtime/Lookup.h: Ditto. - * runtime/Operations.h: Ditto. - * runtime/Protect.h: Ditto. - * runtime/RegExp.h: Ditto. - * runtime/UString.h: Ditto. - - * tests/mozilla/js1_5/Array/regress-157652.js: Changed "KJS" - reference in comment to "JSC". - - * wrec/CharacterClassConstructor.cpp: Change "kjs_pcre_" function - prefixes to "jsc_pcre_". - (JSC::WREC::CharacterClassConstructor::put): - (JSC::WREC::CharacterClassConstructor::flush): - - * wtf/unicode/Unicode.h: Change "KJS_" header guard to "WTF_". - * wtf/unicode/icu/UnicodeIcu.h: Ditto. - * wtf/unicode/qt4/UnicodeQt4.h: Ditto. - -2009-01-02 Oliver Hunt - - Reviewed by Maciej Stachowiak. - - Make randomNumber generate 2^53 values instead of 2^32 (or 2^31 for rand() platforms) - - * wtf/RandomNumber.cpp: - (WTF::randomNumber): - -2009-01-02 David Kilzer - - Remove declaration for JSC::Identifier::initializeIdentifierThreading() - - Reviewed by Alexey Proskuryakov. - - * runtime/Identifier.h: - (JSC::Identifier::initializeIdentifierThreading): Removed - declaration since the implementation was removed in r34412. - -2009-01-01 Darin Adler - - Reviewed by Oliver Hunt. - - String.replace does not support $& replacement metacharacter when search term is not a RegExp - - - - Test: fast/js/string-replace-3.html - - * runtime/StringPrototype.cpp: - (JSC::substituteBackreferences): Added a null check here so we won't try to handle $$-$9 - backreferences when the search term is a string, not a RegExp. Added a check for 0 so we - won't try to handle $0 or $00 as a backreference. - (JSC::stringProtoFuncReplace): Added a call to substituteBackreferences. - -2009-01-01 Gavin Barraclough - - Reviewed by Darin Adler. - - Allow 32-bit integers to be stored in JSImmediates, on x64-bit. - Presently the top 32-bits of a 64-bit JSImmediate serve as a sign extension of a 31-bit - int stored in the low word (shifted left by one, to make room for a tag). In the new - format, the top 31-bits serve as a sign extension of a 32-bit int, still shifted left by - one. - - The new behavior is enabled using a flag in Platform.h, 'WTF_USE_ALTERNATE_JSIMMEDIATE'. - When this is set the constants defining the range of ints allowed to be stored as - JSImmediate values is extended. The code in JSImmediate.h can safely operate on either - format. This patch updates the JIT so that it can also operate with the new format. - - ~2% progression on x86-64, with & without the JIT, on sunspider & v8 tests. - - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::addPtr): - (JSC::MacroAssembler::orPtr): - (JSC::MacroAssembler::or32): - (JSC::MacroAssembler::rshiftPtr): - (JSC::MacroAssembler::rshift32): - (JSC::MacroAssembler::subPtr): - (JSC::MacroAssembler::xorPtr): - (JSC::MacroAssembler::xor32): - (JSC::MacroAssembler::move): - (JSC::MacroAssembler::compareImm64ForBranch): - (JSC::MacroAssembler::compareImm64ForBranchEquality): - (JSC::MacroAssembler::jePtr): - (JSC::MacroAssembler::jgePtr): - (JSC::MacroAssembler::jlPtr): - (JSC::MacroAssembler::jlePtr): - (JSC::MacroAssembler::jnePtr): - (JSC::MacroAssembler::jnzSubPtr): - (JSC::MacroAssembler::joAddPtr): - (JSC::MacroAssembler::jzSubPtr): - * assembler/X86Assembler.h: - (JSC::X86Assembler::addq_rr): - (JSC::X86Assembler::orq_ir): - (JSC::X86Assembler::subq_ir): - (JSC::X86Assembler::xorq_rr): - (JSC::X86Assembler::sarq_CLr): - (JSC::X86Assembler::sarq_i8r): - (JSC::X86Assembler::cmpq_ir): - * jit/JIT.cpp: - (JSC::JIT::compileOpStrictEq): - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JIT.h: - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArith_op_lshift): - (JSC::JIT::compileFastArithSlow_op_lshift): - (JSC::JIT::compileFastArith_op_rshift): - (JSC::JIT::compileFastArithSlow_op_rshift): - (JSC::JIT::compileFastArith_op_bitand): - (JSC::JIT::compileFastArithSlow_op_bitand): - (JSC::JIT::compileFastArith_op_mod): - (JSC::JIT::compileFastArithSlow_op_mod): - (JSC::JIT::compileFastArith_op_add): - (JSC::JIT::compileFastArithSlow_op_add): - (JSC::JIT::compileFastArith_op_mul): - (JSC::JIT::compileFastArithSlow_op_mul): - (JSC::JIT::compileFastArith_op_post_inc): - (JSC::JIT::compileFastArithSlow_op_post_inc): - (JSC::JIT::compileFastArith_op_post_dec): - (JSC::JIT::compileFastArithSlow_op_post_dec): - (JSC::JIT::compileFastArith_op_pre_inc): - (JSC::JIT::compileFastArithSlow_op_pre_inc): - (JSC::JIT::compileFastArith_op_pre_dec): - (JSC::JIT::compileFastArithSlow_op_pre_dec): - (JSC::JIT::compileBinaryArithOp): - * jit/JITInlineMethods.h: - (JSC::JIT::getConstantOperand): - (JSC::JIT::getConstantOperandImmediateInt): - (JSC::JIT::isOperandConstantImmediateInt): - (JSC::JIT::isOperandConstant31BitImmediateInt): - (JSC::JIT::emitFastArithDeTagImmediate): - (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): - (JSC::JIT::emitFastArithReTagImmediate): - (JSC::JIT::emitFastArithImmToInt): - (JSC::JIT::emitFastArithIntToImmNoCheck): - * runtime/JSImmediate.h: - (JSC::JSImmediate::isPositiveNumber): - (JSC::JSImmediate::isNegative): - (JSC::JSImmediate::rightShiftImmediateNumbers): - (JSC::JSImmediate::canDoFastAdditiveOperations): - (JSC::JSImmediate::makeValue): - (JSC::JSImmediate::makeInt): - (JSC::JSImmediate::makeBool): - (JSC::JSImmediate::intValue): - (JSC::JSImmediate::rawValue): - (JSC::JSImmediate::toBoolean): - (JSC::JSImmediate::from): - * wtf/Platform.h: - -2008-12-31 Oliver Hunt - - Reviewed by Cameron Zwarich. - - [jsfunfuzz] Assertion + incorrect behaviour with dynamically created local variable in a catch block - - - Eval inside a catch block attempts to use the catch block's static scope in - an unsafe way by attempting to add new properties to the scope. This patch - fixes this issue simply by preventing the catch block from using a static - scope if it contains an eval. - - * parser/Grammar.y: - * parser/Nodes.cpp: - (JSC::TryNode::emitBytecode): - * parser/Nodes.h: - (JSC::TryNode::): - -2008-12-31 Oliver Hunt - - Reviewed by Gavin Barraclough. - - [jsfunfuzz] Computed exception offset wrong when first instruction is attempt to resolve deleted eval - - - This was caused by the expression information for the initial resolve of - eval not being emitted. If this resolve was the first instruction that - could throw an exception the information search would fail leading to an - assertion failure. If it was not the first throwable opcode the wrong - expression information would used. - - Fix is simply to emit the expression info. - - * parser/Nodes.cpp: - (JSC::EvalFunctionCallNode::emitBytecode): - -2008-12-31 Cameron Zwarich - - Reviewed by Oliver Hunt. - - Bug 23054: Caching of global lookups occurs even when the global object has become a dictionary - - - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::resolveGlobal): Do not cache lookup if the global - object has transitioned to a dictionary. - (JSC::Interpreter::cti_op_resolve_global): Do not cache lookup if the - global object has transitioned to a dictionary. - -2008-12-30 Oliver Hunt - - Reviewed by Darin Adler. - - [jsfunfuzz] With blocks do not correctly protect their scope object - Crash in JSC::TypeInfo::hasStandardGetOwnPropertySlot() running jsfunfuzz - - The problem that caused this was that with nodes were not correctly protecting - the final object that was placed in the scope chain. We correct this by forcing - the use of a temporary register (which stops us relying on a local register - protecting the scope) and changing the behaviour of op_push_scope so that it - will store the final scope object. - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitPushScope): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - (JSC::Interpreter::cti_op_push_scope): - * interpreter/Interpreter.h: - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - * parser/Nodes.cpp: - (JSC::WithNode::emitBytecode): - -2008-12-30 Cameron Zwarich - - Reviewed by Sam Weinig. - - Bug 23037: Parsing and reparsing disagree on automatic semicolon insertion - - - - Parsing and reparsing disagree about automatic semicolon insertion, so that a - function like - - function() { a = 1, } - - is parsed as being syntactically valid but gets a syntax error upon reparsing. - This leads to an assertion failure in Parser::reparse(). It is not that big of - an issue in practice, because in a Release build such a function will return - 'undefined' when called. - - In this case, we are not following the spec and it should be a syntax error. - However, unless there is a newline separating the ',' and the '}', WebKit would - not treat it as a syntax error in the past either. It would be a bit of work to - make the automatic semicolon insertion match the spec exactly, so this patch - changes it to match our past behaviour. - - The problem is that even during reparsing, the Lexer adds a semicolon at the - end of the input, which confuses allowAutomaticSemicolon(), because it is - expecting either a '}', the end of input, or a terminator like a newline. - - * parser/Lexer.cpp: - (JSC::Lexer::Lexer): Initialize m_isReparsing to false. - (JSC::Lexer::lex): Do not perform automatic semicolon insertion in the Lexer if - we are in the middle of reparsing. - (JSC::Lexer::clear): Set m_isReparsing to false. - * parser/Lexer.h: - (JSC::Lexer::setIsReparsing): Added. - * parser/Parser.cpp: - (JSC::Parser::reparse): Call Lexer::setIsReparsing() to notify the Lexer of - reparsing. - -2008-12-29 Oliver Hunt - - Reviewed by NOBODY (Build fix). - - Yet another attempt to fix Tiger. - - * wtf/RandomNumber.cpp: - (WTF::randomNumber): - -2008-12-29 Oliver Hunt - - Reviewed by NOBODY (Build fix). - - Tiger build fix (correct this time) - - * wtf/RandomNumber.cpp: - -2008-12-29 Cameron Zwarich - - Rubber-stamped by Alexey Proskuryakov. - - Revert r39509, because kjsyydebug is used in the generated code if YYDEBUG is 1. - - * parser/Grammar.y: - -2008-12-29 Oliver Hunt - - Reviewed by NOBODY (Build fix). - - Tiger build fix. - - * wtf/RandomNumber.cpp: - -2008-12-29 Oliver Hunt - - Reviewed by Mark Rowe. - - Insecure randomness in Math.random() leads to user tracking - - Switch to arc4random on PLATFORM(DARWIN), this is ~1.5x slower than random(), but the - it is still so fast that there is no fathomable way it could be a bottleneck for anything. - - randomNumber is called in two places - * During form submission where it is called once per form - * Math.random in JSC. For this difference to show up you have to be looping on - a cached local copy of random, for a large (>10000) calls. - - No change in SunSpider. - - * wtf/RandomNumber.cpp: - (WTF::randomNumber): - * wtf/RandomNumberSeed.h: - (WTF::initializeRandomNumberGenerator): - -2008-12-29 Cameron Zwarich - - Rubber-stamped by Sam Weinig. - - Remove unused kjsyydebug #define. - - * parser/Grammar.y: - -2008-12-29 Cameron Zwarich - - Reviewed by Oliver Hunt and Sam Weinig. - - Bug 23029: REGRESSION (r39337): jsfunfuzz generates identical test files - - - - The unification of random number generation in r39337 resulted in random() - being initialized on Darwin, but rand() actually being used. Fix this by - making randomNumber() use random() instead of rand() on Darwin. - - * wtf/RandomNumber.cpp: - (WTF::randomNumber): - -2008-12-29 Sam Weinig - - Fix buildbots. - - * runtime/Structure.cpp: - -2008-12-29 Sam Weinig - - Reviewed by Oliver Hunt. - - Patch for https://bugs.webkit.org/show_bug.cgi?id=23026 - Move the deleted offsets vector into the PropertyMap - - Saves 3 words per Structure. - - * runtime/PropertyMapHashTable.h: - * runtime/Structure.cpp: - (JSC::Structure::addPropertyTransition): - (JSC::Structure::changePrototypeTransition): - (JSC::Structure::getterSetterTransition): - (JSC::Structure::toDictionaryTransition): - (JSC::Structure::fromDictionaryTransition): - (JSC::Structure::copyPropertyTable): - (JSC::Structure::put): - (JSC::Structure::remove): - (JSC::Structure::rehashPropertyMapHashTable): - * runtime/Structure.h: - (JSC::Structure::propertyStorageSize): - -2008-12-29 Cameron Zwarich - - Reviewed by Oliver Hunt. - - Change code using m_body.get() as a boolean to take advantage of the - implicit conversion of RefPtr to boolean. - - * runtime/JSFunction.cpp: - (JSC::JSFunction::~JSFunction): - -2008-12-28 Cameron Zwarich - - Reviewed by Oliver Hunt. - - Bug 22840: REGRESSION (r38349): Gmail doesn't load with profiling enabled - - - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitNewArray): Add an assertion that the range - of registers passed to op_new_array is sequential. - (JSC::BytecodeGenerator::emitCall): Correct the relocation of registers - when emitting profiler hooks so that registers aren't leaked. Also, add - an assertion that the 'this' register is always ref'd (because it is), - remove the needless protection of the 'this' register when relocating, - and add an assertion that the range of registers passed to op_call for - function call arguments is sequential. - (JSC::BytecodeGenerator::emitConstruct): Correct the relocation of - registers when emitting profiler hooks so that registers aren't leaked. - Also, add an assertion that the range of registers passed to op_construct - for function call arguments is sequential. - -2008-12-26 Mark Rowe - - Reviewed by Alexey Proskuryakov. - - Race condition in WTF::currentThread can lead to a thread using two different identifiers during its lifetime - - If a newly-created thread calls WTF::currentThread() before WTF::createThread calls establishIdentifierForPthreadHandle - then more than one identifier will be used for the same thread. We can avoid this by adding some extra synchronization - during thread creation that delays the execution of the thread function until the thread identifier has been set up, and - an assertion to catch this problem should it reappear in the future. - - * wtf/Threading.cpp: Added. - (WTF::NewThreadContext::NewThreadContext): - (WTF::threadEntryPoint): - (WTF::createThread): Add cross-platform createThread function that delays the execution of the thread function until - after the thread identifier has been set up. - * wtf/Threading.h: - * wtf/ThreadingGtk.cpp: - (WTF::establishIdentifierForThread): - (WTF::createThreadInternal): - * wtf/ThreadingNone.cpp: - (WTF::createThreadInternal): - * wtf/ThreadingPthreads.cpp: - (WTF::establishIdentifierForPthreadHandle): - (WTF::createThreadInternal): - * wtf/ThreadingQt.cpp: - (WTF::identifierByQthreadHandle): - (WTF::establishIdentifierForThread): - (WTF::createThreadInternal): - * wtf/ThreadingWin.cpp: - (WTF::storeThreadHandleByIdentifier): - (WTF::createThreadInternal): - - Add Threading.cpp to the build. - - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCore.scons: - * JavaScriptCore.vcproj/WTF/WTF.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - -2008-12-26 Sam Weinig - - Reviewed by Alexey Proskuryakov. - - Remove unused method. - - * runtime/Structure.h: Remove mutableTypeInfo. - -2008-12-22 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Fix rounding / bounds / signed comparison bug in ExecutableAllocator. - - ExecutableAllocator::alloc assumed that m_freePtr would be aligned. This was - not always true, since the first allocation from an additional pool would not - be rounded up. Subsequent allocations would be unaligned, and too much memory - could be erroneously allocated from the pool, when the size requested was - available, but the size rounded up to word granularity was not available in the - pool. This may result in the value of m_freePtr being greater than m_end. - - Under these circumstances, the unsigned check for space will always pass, - resulting in pointers to memory outside of the arena being returned, and - ultimately segfaulty goodness when attempting to memcpy the hot freshly jitted - code from the AssemblerBuffer. - - https://bugs.webkit.org/show_bug.cgi?id=22974 - ... and probably many, many more. - - * jit/ExecutableAllocator.h: - (JSC::ExecutablePool::alloc): - (JSC::ExecutablePool::roundUpAllocationSize): - (JSC::ExecutablePool::ExecutablePool): - (JSC::ExecutablePool::poolAllocate): - -2008-12-22 Sam Weinig - - Reviewed by Gavin Barraclough. - - Rename all uses of the term "repatch" to "patch". - - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::DataLabelPtr::patch): - (JSC::MacroAssembler::DataLabel32::patch): - (JSC::MacroAssembler::Jump::patch): - (JSC::MacroAssembler::PatchBuffer::PatchBuffer): - (JSC::MacroAssembler::PatchBuffer::setPtr): - (JSC::MacroAssembler::loadPtrWithAddressOffsetPatch): - (JSC::MacroAssembler::storePtrWithAddressOffsetPatch): - (JSC::MacroAssembler::storePtrWithPatch): - (JSC::MacroAssembler::jnePtrWithPatch): - * assembler/X86Assembler.h: - (JSC::X86Assembler::patchAddress): - (JSC::X86Assembler::patchImmediate): - (JSC::X86Assembler::patchPointer): - (JSC::X86Assembler::patchBranchOffset): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::tryCTICachePutByID): - (JSC::Interpreter::tryCTICacheGetByID): - (JSC::Interpreter::cti_op_put_by_id): - (JSC::Interpreter::cti_op_get_by_id): - (JSC::Interpreter::cti_op_get_by_id_self_fail): - (JSC::Interpreter::cti_op_get_by_id_proto_list): - (JSC::Interpreter::cti_vm_dontLazyLinkCall): - * jit/JIT.cpp: - (JSC::ctiPatchCallByReturnAddress): - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompile): - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JIT.h: - * jit/JITCall.cpp: - (JSC::JIT::unlinkCall): - (JSC::JIT::linkCall): - (JSC::JIT::compileOpCall): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::compileGetByIdHotPath): - (JSC::JIT::compilePutByIdHotPath): - (JSC::JIT::compileGetByIdSlowCase): - (JSC::JIT::compilePutByIdSlowCase): - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::patchGetByIdSelf): - (JSC::JIT::patchPutByIdReplace): - (JSC::JIT::privateCompilePatchGetArrayLength): - (JSC::JIT::privateCompileGetByIdSelf): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdSelfList): - (JSC::JIT::privateCompileGetByIdProtoList): - (JSC::JIT::privateCompileGetByIdChainList): - (JSC::JIT::privateCompileGetByIdChain): - (JSC::JIT::privateCompilePutByIdReplace): - -2008-12-22 Adam Roben - - Build fix after r39428 - - * jit/JITCall.cpp: - (JSC::JIT::compileOpCallSlowCase): Added a missing MacroAssembler:: - -2008-12-22 Nikolas Zimmermann - - Rubber-stamped by George Staikos. - - Unify all TorchMobile copyright lines. Consolidate in a single line, as requested by Mark Rowe, some time ago. - - * wtf/RandomNumber.cpp: - * wtf/RandomNumber.h: - * wtf/RandomNumberSeed.h: - -2008-12-21 Nikolas Zimmermann - - Rubber-stamped by George Staikos. - - Fix copyright of the new RandomNumber* files. - - * wtf/RandomNumber.cpp: - * wtf/RandomNumber.h: - * wtf/RandomNumberSeed.h: - -2008-12-21 Gavin Barraclough - - Reviewed by Oliver Hunt & Cameron Zwarich. - - Add support for call and property access repatching on x86-64. - - No change in performance on current configurations (2x impovement on v8-tests with JIT enabled on x86-64). - - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::DataLabelPtr::repatch): - (JSC::MacroAssembler::DataLabelPtr::operator X86Assembler::JmpDst): - (JSC::MacroAssembler::DataLabel32::repatch): - (JSC::MacroAssembler::RepatchBuffer::addressOf): - (JSC::MacroAssembler::add32): - (JSC::MacroAssembler::sub32): - (JSC::MacroAssembler::loadPtrWithAddressOffsetRepatch): - (JSC::MacroAssembler::storePtrWithAddressOffsetRepatch): - (JSC::MacroAssembler::jePtr): - (JSC::MacroAssembler::jnePtr): - (JSC::MacroAssembler::jnePtrWithRepatch): - (JSC::MacroAssembler::differenceBetween): - * assembler/X86Assembler.h: - (JSC::X86Assembler::addl_im): - (JSC::X86Assembler::subl_im): - (JSC::X86Assembler::cmpl_rm): - (JSC::X86Assembler::movq_rm_disp32): - (JSC::X86Assembler::movq_mr_disp32): - (JSC::X86Assembler::repatchPointer): - (JSC::X86Assembler::X86InstructionFormatter::oneByteOp64_disp32): - * jit/JIT.cpp: - (JSC::JIT::privateCompile): - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JIT.h: - * jit/JITCall.cpp: - (JSC::JIT::unlinkCall): - (JSC::JIT::linkCall): - (JSC::JIT::compileOpCall): - (JSC::JIT::compileOpCallSlowCase): - * jit/JITInlineMethods.h: - (JSC::JIT::restoreArgumentReferenceForTrampoline): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::compileGetByIdHotPath): - (JSC::JIT::compileGetByIdSlowCase): - (JSC::JIT::compilePutByIdHotPath): - (JSC::JIT::compilePutByIdSlowCase): - (JSC::resizePropertyStorage): - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdProtoList): - (JSC::JIT::privateCompileGetByIdChainList): - (JSC::JIT::privateCompileGetByIdChain): - * wtf/Platform.h: - -2008-12-20 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Port optimized property access generation to the MacroAssembler. - - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::AbsoluteAddress::AbsoluteAddress): - (JSC::MacroAssembler::DataLabelPtr::repatch): - (JSC::MacroAssembler::DataLabel32::DataLabel32): - (JSC::MacroAssembler::DataLabel32::repatch): - (JSC::MacroAssembler::Label::operator X86Assembler::JmpDst): - (JSC::MacroAssembler::Jump::repatch): - (JSC::MacroAssembler::JumpList::empty): - (JSC::MacroAssembler::RepatchBuffer::link): - (JSC::MacroAssembler::add32): - (JSC::MacroAssembler::and32): - (JSC::MacroAssembler::sub32): - (JSC::MacroAssembler::loadPtrWithAddressRepatch): - (JSC::MacroAssembler::storePtrWithAddressRepatch): - (JSC::MacroAssembler::push): - (JSC::MacroAssembler::ja32): - (JSC::MacroAssembler::jePtr): - (JSC::MacroAssembler::jnePtr): - (JSC::MacroAssembler::jnePtrWithRepatch): - (JSC::MacroAssembler::align): - (JSC::MacroAssembler::differenceBetween): - * assembler/X86Assembler.h: - (JSC::X86Assembler::movl_rm_disp32): - (JSC::X86Assembler::movl_mr_disp32): - (JSC::X86Assembler::X86InstructionFormatter::oneByteOp_disp32): - (JSC::X86Assembler::X86InstructionFormatter::memoryModRM): - * jit/JIT.cpp: - (JSC::ctiRepatchCallByReturnAddress): - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompile): - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JIT.h: - * jit/JITPropertyAccess.cpp: - (JSC::JIT::compileGetByIdHotPath): - (JSC::JIT::compileGetByIdSlowCase): - (JSC::JIT::compilePutByIdHotPath): - (JSC::JIT::compilePutByIdSlowCase): - (JSC::resizePropertyStorage): - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::patchGetByIdSelf): - (JSC::JIT::patchPutByIdReplace): - (JSC::JIT::privateCompilePatchGetArrayLength): - (JSC::JIT::privateCompileGetByIdSelf): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdSelfList): - (JSC::JIT::privateCompileGetByIdProtoList): - (JSC::JIT::privateCompileGetByIdChainList): - (JSC::JIT::privateCompileGetByIdChain): - (JSC::JIT::privateCompilePutByIdReplace): - * wtf/RefCounted.h: - (WTF::RefCountedBase::addressOfCount): - -2008-12-19 Gustavo Noronha Silva - - Reviewed by Holger Freyther. - - https://bugs.webkit.org/show_bug.cgi?id=22686 - - Added file which was missing to the javascriptcore_sources - variable, so that it shows up in the tarball created by `make - dist'. - - * GNUmakefile.am: - -2008-12-19 Holger Hans Peter Freyther - - Reviewed by Antti Koivisto. - - Build fix when building JS API tests with a c89 c compiler - - Do not use C++ style comments and convert them to C comments. - - * wtf/Platform.h: - -2008-12-18 Gavin Barraclough - - Reviewed by Sam Weinig. - - Same as last revision, adding cases for pre & post inc & dec. - - https://bugs.webkit.org/show_bug.cgi?id=22928 - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - -2008-12-18 Gavin Barraclough - - Reviewed by Sam Weinig. - - Fixes for the JIT's handling of JSImmediate values on x86-64. - On 64-bit systems, the code in JSImmediate.h relies on the upper - bits of a JSImmediate being a sign extension of the low 32-bits. - This was not being enforced by the JIT, since a number of inline - operations were being performed on 32-bit values in registers, and - when a 32-bit result is written to a register on x86-64 the value - is zero-extended to 64-bits. - - This fix honors previous behavoir. A better fix in the long run - (when the JIT is enabled by default) may be to change JSImmediate.h - so it no longer relies on the upper bits of the pointer,... though - if we're going to change JSImmediate.h for 64-bit, we probably may - as well change the format so that the full range of 32-bit ints can - be stored, rather than just 31-bits. - - https://bugs.webkit.org/show_bug.cgi?id=22925 - - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::addPtr): - (JSC::MacroAssembler::andPtr): - (JSC::MacroAssembler::orPtr): - (JSC::MacroAssembler::or32): - (JSC::MacroAssembler::xor32): - (JSC::MacroAssembler::xorPtr): - (JSC::MacroAssembler::signExtend32ToPtr): - * assembler/X86Assembler.h: - (JSC::X86Assembler::): - (JSC::X86Assembler::andq_rr): - (JSC::X86Assembler::andq_ir): - (JSC::X86Assembler::orq_rr): - (JSC::X86Assembler::xorq_ir): - (JSC::X86Assembler::movsxd_rr): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - * jit/JITInlineMethods.h: - (JSC::JIT::emitFastArithReTagImmediate): - (JSC::JIT::emitFastArithPotentiallyReTagImmediate): - (JSC::JIT::emitFastArithImmToInt): - -2008-12-18 Gavin Barraclough - - Reviewed by Sam Weinig. - - Just a tidy up - rename & refactor some the #defines configuring the JIT. - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::cti_op_convert_this): - (JSC::Interpreter::cti_op_end): - (JSC::Interpreter::cti_op_add): - (JSC::Interpreter::cti_op_pre_inc): - (JSC::Interpreter::cti_timeout_check): - (JSC::Interpreter::cti_register_file_check): - (JSC::Interpreter::cti_op_loop_if_less): - (JSC::Interpreter::cti_op_loop_if_lesseq): - (JSC::Interpreter::cti_op_new_object): - (JSC::Interpreter::cti_op_put_by_id_generic): - (JSC::Interpreter::cti_op_get_by_id_generic): - (JSC::Interpreter::cti_op_put_by_id): - (JSC::Interpreter::cti_op_put_by_id_second): - (JSC::Interpreter::cti_op_put_by_id_fail): - (JSC::Interpreter::cti_op_get_by_id): - (JSC::Interpreter::cti_op_get_by_id_second): - (JSC::Interpreter::cti_op_get_by_id_self_fail): - (JSC::Interpreter::cti_op_get_by_id_proto_list): - (JSC::Interpreter::cti_op_get_by_id_proto_list_full): - (JSC::Interpreter::cti_op_get_by_id_proto_fail): - (JSC::Interpreter::cti_op_get_by_id_array_fail): - (JSC::Interpreter::cti_op_get_by_id_string_fail): - (JSC::Interpreter::cti_op_instanceof): - (JSC::Interpreter::cti_op_del_by_id): - (JSC::Interpreter::cti_op_mul): - (JSC::Interpreter::cti_op_new_func): - (JSC::Interpreter::cti_op_call_JSFunction): - (JSC::Interpreter::cti_op_call_arityCheck): - (JSC::Interpreter::cti_vm_dontLazyLinkCall): - (JSC::Interpreter::cti_vm_lazyLinkCall): - (JSC::Interpreter::cti_op_push_activation): - (JSC::Interpreter::cti_op_call_NotJSFunction): - (JSC::Interpreter::cti_op_create_arguments): - (JSC::Interpreter::cti_op_create_arguments_no_params): - (JSC::Interpreter::cti_op_tear_off_activation): - (JSC::Interpreter::cti_op_tear_off_arguments): - (JSC::Interpreter::cti_op_profile_will_call): - (JSC::Interpreter::cti_op_profile_did_call): - (JSC::Interpreter::cti_op_ret_scopeChain): - (JSC::Interpreter::cti_op_new_array): - (JSC::Interpreter::cti_op_resolve): - (JSC::Interpreter::cti_op_construct_JSConstruct): - (JSC::Interpreter::cti_op_construct_NotJSConstruct): - (JSC::Interpreter::cti_op_get_by_val): - (JSC::Interpreter::cti_op_resolve_func): - (JSC::Interpreter::cti_op_sub): - (JSC::Interpreter::cti_op_put_by_val): - (JSC::Interpreter::cti_op_put_by_val_array): - (JSC::Interpreter::cti_op_lesseq): - (JSC::Interpreter::cti_op_loop_if_true): - (JSC::Interpreter::cti_op_negate): - (JSC::Interpreter::cti_op_resolve_base): - (JSC::Interpreter::cti_op_resolve_skip): - (JSC::Interpreter::cti_op_resolve_global): - (JSC::Interpreter::cti_op_div): - (JSC::Interpreter::cti_op_pre_dec): - (JSC::Interpreter::cti_op_jless): - (JSC::Interpreter::cti_op_not): - (JSC::Interpreter::cti_op_jtrue): - (JSC::Interpreter::cti_op_post_inc): - (JSC::Interpreter::cti_op_eq): - (JSC::Interpreter::cti_op_lshift): - (JSC::Interpreter::cti_op_bitand): - (JSC::Interpreter::cti_op_rshift): - (JSC::Interpreter::cti_op_bitnot): - (JSC::Interpreter::cti_op_resolve_with_base): - (JSC::Interpreter::cti_op_new_func_exp): - (JSC::Interpreter::cti_op_mod): - (JSC::Interpreter::cti_op_less): - (JSC::Interpreter::cti_op_neq): - (JSC::Interpreter::cti_op_post_dec): - (JSC::Interpreter::cti_op_urshift): - (JSC::Interpreter::cti_op_bitxor): - (JSC::Interpreter::cti_op_new_regexp): - (JSC::Interpreter::cti_op_bitor): - (JSC::Interpreter::cti_op_call_eval): - (JSC::Interpreter::cti_op_throw): - (JSC::Interpreter::cti_op_get_pnames): - (JSC::Interpreter::cti_op_next_pname): - (JSC::Interpreter::cti_op_push_scope): - (JSC::Interpreter::cti_op_pop_scope): - (JSC::Interpreter::cti_op_typeof): - (JSC::Interpreter::cti_op_is_undefined): - (JSC::Interpreter::cti_op_is_boolean): - (JSC::Interpreter::cti_op_is_number): - (JSC::Interpreter::cti_op_is_string): - (JSC::Interpreter::cti_op_is_object): - (JSC::Interpreter::cti_op_is_function): - (JSC::Interpreter::cti_op_stricteq): - (JSC::Interpreter::cti_op_nstricteq): - (JSC::Interpreter::cti_op_to_jsnumber): - (JSC::Interpreter::cti_op_in): - (JSC::Interpreter::cti_op_push_new_scope): - (JSC::Interpreter::cti_op_jmp_scopes): - (JSC::Interpreter::cti_op_put_by_index): - (JSC::Interpreter::cti_op_switch_imm): - (JSC::Interpreter::cti_op_switch_char): - (JSC::Interpreter::cti_op_switch_string): - (JSC::Interpreter::cti_op_del_by_val): - (JSC::Interpreter::cti_op_put_getter): - (JSC::Interpreter::cti_op_put_setter): - (JSC::Interpreter::cti_op_new_error): - (JSC::Interpreter::cti_op_debug): - (JSC::Interpreter::cti_vm_throw): - * interpreter/Interpreter.h: - * jit/JIT.cpp: - (JSC::): - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompile): - * jit/JIT.h: - * jit/JITInlineMethods.h: - (JSC::JIT::restoreArgumentReference): - (JSC::JIT::restoreArgumentReferenceForTrampoline): - * wtf/Platform.h: - -2008-12-18 Cameron Zwarich - - Reviewed by Geoff Garen. - - Bug 21855: REGRESSION (r37323): Gmail complains about popup blocking when opening a link - - - - Move DynamicGlobalObjectScope to JSGlobalObject.h so that it can be used - from WebCore. - - * interpreter/Interpreter.cpp: - * runtime/JSGlobalObject.h: - (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): - (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope): - -2008-12-17 Geoffrey Garen - - Reviewed by Gavin Barraclough. - - Fixed https://bugs.webkit.org/show_bug.cgi?id=22393 - Segfault when caching property accesses to primitive cells. - - Changed some asObject casts to asCell casts in cases where a primitive - value may be a cell and not an object. - - Re-enabled property caching for primitives in cases where it had been - disabled because of this bug. - - Updated a comment to better explain something Darin thought needed - explaining in an old patch review. - - * interpreter/Interpreter.cpp: - (JSC::countPrototypeChainEntriesAndCheckForProxies): - (JSC::Interpreter::tryCacheGetByID): - (JSC::Interpreter::tryCTICacheGetByID): - (JSC::Interpreter::cti_op_get_by_id_self_fail): - (JSC::Interpreter::cti_op_get_by_id_proto_list): - -2008-12-17 Gavin Barraclough - - Reviewed by Cameron Zwarich. - - Fixes for Sunspider failures with the JIT enabled on x86-64. - - * assembler/MacroAssembler.h: - Switch the order of the RegisterID & Address form of je32, to keep it consistent with jne32. - * jit/JIT.cpp: - * jit/JIT.h: - * jit/JITInlineMethods.h: - Port the m_ctiVirtualCall tramopline generation to use the MacroAssembler interface. - * jit/JITCall.cpp: - Fix bug in the non-optimizing code path, vptr check should have been to the memory address pointer - to by the register, not to the register itself. - * wrec/WRECGenerator.cpp: - See assembler/MacroAssembler.h, above. - -2008-12-17 Gavin Barraclough - - Reviewed by Sam Weinig. - - print("Hello, 64-bit jitted world!"); - Get hello-world working through the JIT, on x86-64. - - * assembler/X86Assembler.h: - Fix encoding of opcode + RegisterID format instructions for 64-bit. - * interpreter/Interpreter.cpp: - * interpreter/Interpreter.h: - Make VoidPtrPair actually be a pair of void*s. - (Possibly should make this change for 32-bit Mac platforms, too - but won't change 32-bit behaviour in this patch). - * jit/JIT.cpp: - * jit/JIT.h: - Provide names for the timeoutCheckRegister & callFrameRegister on x86-64, - force x86-64 ctiTrampoline arguments onto the stack, - implement the asm trampolines for x86-64, - implement the restoreArgumentReference methods for x86-64 calling conventions. - * jit/JITCall.cpp: - * jit/JITInlineMethods.h: - * wtf/Platform.h: - Add switch settings to ENABLE(JIT), on PLATFORM(X86_64) (currently still disabled). - -2008-12-17 Sam Weinig - - Reviewed by Gavin Barraclough. - - Add more CodeBlock statistics. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dumpStatistics): - -2008-12-17 Sam Weinig - - Reviewed by Darin Adler. - - Fix for https://bugs.webkit.org/show_bug.cgi?id=22897 - - Look into feasibility of discarding bytecode after native codegen - - Clear the bytecode Instruction vector at the end JIT generation. - - Saves 4.8 MB on Membuster head. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): Add logging for the case that someone tries - to dump the instructions of a CodeBlock that has had its bytecode - vector cleared. - (JSC::CodeBlock::CodeBlock): Initialize the instructionCount - (JSC::CodeBlock::handlerForBytecodeOffset): Use instructionCount instead - of the size of the instruction vector in the assertion. - (JSC::CodeBlock::lineNumberForBytecodeOffset): Ditto. - (JSC::CodeBlock::expressionRangeForBytecodeOffset): Ditto. - (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset): Ditto. - (JSC::CodeBlock::functionRegisterForBytecodeOffset): Ditto. - * bytecode/CodeBlock.h: - (JSC::CodeBlock::setInstructionCount): Store the instruction vector size - in debug builds for assertions. - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::generate): - * jit/JIT.cpp: - (JSC::JIT::privateCompile): Clear the bytecode vector unless we - have compiled with Opcode sampling where we will continue to require it - -2008-12-17 Cary Clark - - Reviewed by Darin Adler. - Landed by Adam Barth. - - Add ENABLE_TEXT_CARET to permit the ANDROID platform - to invalidate and draw the caret in a separate thread. - - * wtf/Platform.h: - Default ENABLE_TEXT_CARET to 1. - -2008-12-17 Alexey Proskuryakov - - Reviewed by Darin Adler. - - Don't use unique context group in JSGlobalContextCreate() on Tiger or Leopard, take two. - - * API/JSContextRef.cpp: The previous patch that claimed to do this was making Tiger and - Leopard always use unique context group instead. - -2008-12-16 Sam Weinig - - Reviewed by Geoffrey Garen. - - Fix for https://bugs.webkit.org/show_bug.cgi?id=22838 - Remove dependency on the bytecode Instruction buffer in Interpreter::throwException - Part of - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::functionRegisterForBytecodeOffset): Added. Function to get - a function Register index in a callFrame for a bytecode offset. - (JSC::CodeBlock::shrinkToFit): Shrink m_getByIdExceptionInfo and m_functionRegisterInfos. - * bytecode/CodeBlock.h: - (JSC::FunctionRegisterInfo::FunctionRegisterInfo): Added. - (JSC::CodeBlock::addFunctionRegisterInfo): - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitCall): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::throwException): Use functionRegisterForBytecodeOffset in JIT - mode. - -2008-12-16 Sam Weinig - - Reviewed by Gavin Barraclough. - - Fix for https://bugs.webkit.org/show_bug.cgi?id=22837 - Remove dependency on the bytecode Instruction buffer in Interpreter::cti_op_call_NotJSFunction - Part of - - * interpreter/CallFrame.h: Added comment regarding returnPC storing a void*. - * interpreter/Interpreter.cpp: - (JSC::bytecodeOffsetForPC): We no longer have any cases of the PC - being in the instruction stream for JIT, so we can remove the check. - (JSC::Interpreter::cti_op_call_NotJSFunction): Use the CTI_RETURN_ADDRESS - as the call frame returnPC as it is only necessary for looking up when - throwing an exception. - * interpreter/RegisterFile.h: - (JSC::RegisterFile::): Added comment regarding returnPC storing a void*. - * jit/JIT.h: Remove ARG_instr4. - * jit/JITCall.cpp: - (JSC::JIT::compileOpCallSetupArgs): Don't pass the instruction pointer. - -2008-12-16 Darin Adler - - Reviewed and landed by Cameron Zwarich. - - Preparatory work for fixing - - Bug 22887: Make UString::Rep use RefCounted rather than implementing its own ref counting - - - Change the various string translators used by Identifier:add() so that - they never zero the ref count of a newly created UString::Rep. - - * runtime/Identifier.cpp: - (JSC::CStringTranslator::translate): - (JSC::Identifier::add): - (JSC::UCharBufferTranslator::translate): - -2008-12-16 Gavin Barraclough - - Build fix for 'doze. - - * assembler/AssemblerBuffer.h: - -2008-12-16 Gavin Barraclough - - Reviewed by Cameron Zwarich. - - Make the JIT compile on x86-64. - This largely involves populting the missing calls in MacroAssembler.h. - In addition some reinterpret_casts need removing from the JIT, and the - repatching property access code will need to be fully compiled out for - now. The changes in interpret.cpp are to reorder the functions so that - the _generic forms come before all other property access methods, and - then to place all property access methods other than the generic forms - under control of the ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS macro. - - No performance impact. - - * assembler/AssemblerBuffer.h: - (JSC::AssemblerBuffer::putInt64Unchecked): - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::loadPtr): - (JSC::MacroAssembler::load32): - (JSC::MacroAssembler::storePtr): - (JSC::MacroAssembler::storePtrWithRepatch): - (JSC::MacroAssembler::store32): - (JSC::MacroAssembler::poke): - (JSC::MacroAssembler::move): - (JSC::MacroAssembler::testImm64): - (JSC::MacroAssembler::jePtr): - (JSC::MacroAssembler::jnePtr): - (JSC::MacroAssembler::jnzPtr): - (JSC::MacroAssembler::jzPtr): - * assembler/X86Assembler.h: - (JSC::X86Assembler::): - (JSC::X86Assembler::cmpq_rr): - (JSC::X86Assembler::cmpq_rm): - (JSC::X86Assembler::cmpq_im): - (JSC::X86Assembler::testq_i32m): - (JSC::X86Assembler::movl_mEAX): - (JSC::X86Assembler::movl_i32r): - (JSC::X86Assembler::movl_EAXm): - (JSC::X86Assembler::movq_rm): - (JSC::X86Assembler::movq_mEAX): - (JSC::X86Assembler::movq_mr): - (JSC::X86Assembler::movq_i64r): - (JSC::X86Assembler::movl_mr): - (JSC::X86Assembler::X86InstructionFormatter::oneByteOp64): - (JSC::X86Assembler::X86InstructionFormatter::immediate64): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::cti_op_put_by_id_generic): - (JSC::Interpreter::cti_op_get_by_id_generic): - (JSC::Interpreter::cti_op_put_by_id): - (JSC::Interpreter::cti_op_put_by_id_second): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompile): - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JITCall.cpp: - (JSC::JIT::compileOpCallSetupArgs): - (JSC::JIT::compileOpCall): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::compileGetByIdHotPath): - (JSC::JIT::compilePutByIdHotPath): - * runtime/JSImmediate.h: - (JSC::JSImmediate::makeInt): - -2008-12-16 Cameron Zwarich - - Reviewed by Darin Adler. - - Bug 22869: REGRESSION (r38407): http://news.cnet.com/8301-13579_3-9953533-37.html crashes - - - - Before r38407, Structure::m_nameInPrevious was ref'd due to it being - stored in a PropertyMap. However, PropertyMaps are created lazily after - r38407, so Structure::m_nameInPrevious is not necessarily ref'd while - it is being used. Making it a RefPtr instead of a raw pointer fixes - the problem. - - Unfortunately, the crash in the bug is rather intermittent, and it is - impossible to add an assertion in UString::Ref::ref() to catch this bug - because some users of UString::Rep deliberately zero out the reference - count. Therefore, there is no layout test accompanying this bug fix. - - * runtime/Structure.cpp: - (JSC::Structure::~Structure): Use get(). - (JSC::Structure::materializePropertyMap): Use get(). - (JSC::Structure::addPropertyTransitionToExistingStructure): Use get(). - (JSC::Structure::addPropertyTransition): Use get(). - * runtime/Structure.h: Make Structure::m_nameInPrevious a RefPtr instead - of a raw pointer. - -2008-12-16 Nikolas Zimmermann - - Not reviewed. Attempt to fix win build. No 'using namespace WTF' in this file, needs manual WTF:: prefix. - Not sure why the build works as is here. - - * runtime/MathObject.cpp: - (JSC::mathProtoFuncRandom): - -2008-12-16 Nikolas Zimmermann - - Reviewed by Darin Adler. - - Fixes: https://bugs.webkit.org/show_bug.cgi?id=22876 - - Unify random number generation in JavaScriptCore & WebCore, by introducing - wtf/RandomNumber.h and moving wtf_random/wtf_random_init out of MathExtras.h. - - wtf_random_init() has been renamed to initializeRandomNumberGenerator() and - lives in it's own private header: wtf/RandomNumberSeed.h, only intended to - be used from within JavaScriptCore. - - wtf_random() has been renamed to randomNumber() and lives in a public header - wtf/RandomNumber.h, usable from within JavaScriptCore & WebCore. It encapsulates - the code taking care of initializing the random number generator (only when - building without ENABLE(JSC_MULTIPLE_THREADS), otherwhise initializeThreading() - already took care of that). - - Functional change on darwin: Use random() instead of rand(), as it got a larger - period (more randomness). HTMLFormElement already contains this implementation - and I just moved it in randomNumber(), as special case for PLATFORM(DARWIN). - - * GNUmakefile.am: Add RandomNumber.(cpp/h) / RandomNumberSeed.h. - * JavaScriptCore.exp: Ditto. - * JavaScriptCore.pri: Ditto. - * JavaScriptCore.scons: Ditto. - * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto. - * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. - * JavaScriptCoreSources.bkl: Ditto. - * runtime/MathObject.cpp: Use new WTF::randomNumber() functionality. - (JSC::mathProtoFuncRandom): - * wtf/MathExtras.h: Move wtf_random / wtf_random_init to new files. - * wtf/RandomNumber.cpp: Added. - (WTF::randomNumber): - * wtf/RandomNumber.h: Added. - * wtf/RandomNumberSeed.h: Added. Internal usage within JSC only. - (WTF::initializeRandomNumberGenerator): - * wtf/ThreadingGtk.cpp: Rename wtf_random_init() to initializeRandomNumberGenerator(). - (WTF::initializeThreading): - * wtf/ThreadingPthreads.cpp: Ditto. - (WTF::initializeThreading): - * wtf/ThreadingQt.cpp: Ditto. - (WTF::initializeThreading): - * wtf/ThreadingWin.cpp: Ditto. - (WTF::initializeThreading): - -2008-12-16 Yael Aharon - - Reviewed by Tor Arne Vestbø. - - Qt/Win build fix - - * JavaScriptCore.pri: - -2008-12-15 Mark Rowe - - Reviewed by Cameron Zwarich. - - Fix the build with GCC 4.0. - - * Configurations/JavaScriptCore.xcconfig: GCC 4.0 appears to have a bug when compiling with -funwind-tables on, - so don't use it with that compiler version. - -2008-12-15 Mark Rowe - - Rubber-stamped by Cameron Zwarich. - - Change WebKit-related projects to build with GCC 4.2 on Leopard. - - * Configurations/Base.xcconfig: - * Configurations/DebugRelease.xcconfig: - -2008-12-15 Alexey Proskuryakov - - Reviewed by Darin Adler. - - Don't use unique context group in JSGlobalContextCreate() on Tiger or Leopard. - - * API/JSContextRef.cpp: (JSGlobalContextCreate): - -2008-12-15 Alexey Proskuryakov - - Reviewed by Darin Adler. - - Mach ports leak from worker threads - - * interpreter/Interpreter.cpp: (JSC::getCPUTime): - Deallocate the thread self port. - -2008-12-15 Gavin Barraclough - - Reviewed by Mark Rowe. - - Construct stack frames in JIT code, so that backtracing can still work. - JIT should play nice with attempts to take stack traces - - * jit/JIT.cpp: - (JSC::): - (JSC::JIT::privateCompileMainPass): - -2008-12-15 Mark Rowe - - Reviewed by Gavin Barraclough. - - JavaScriptCore needs exception handling tables in order to get stack traces without frame pointers - - * Configurations/JavaScriptCore.xcconfig: - -2008-12-15 Gavin Barraclough - - Rubber stamped by Mark Rowe. - - Revert r39226 / Bug 22818: Unify JIT callback argument access OS X / Windows - This causes Acid3 failures – reverting for now & will revisit later. - https://bugs.webkit.org/show_bug.cgi?id=22873 - - * interpreter/Interpreter.h: - * jit/JIT.cpp: - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JIT.h: - * jit/JITInlineMethods.h: - (JSC::JIT::restoreArgumentReference): - (JSC::JIT::restoreArgumentReferenceForTrampoline): - (JSC::JIT::emitCTICall_internal): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompilePutByIdTransition): - * wtf/Platform.h: - -2008-12-15 Darin Adler - - Reviewed by Sam Weinig. - - - fix crash due to infinite recursion after setting window.__proto__ = window - - Replaced toGlobalObject with the more generally useful unwrappedObject and used it to - fix the cycle detection code in put(__proto__). - - * JavaScriptCore.exp: Updated. - - * runtime/JSGlobalObject.cpp: Removed toGlobalObject. We now use unwrappedObject instead. - * runtime/JSGlobalObject.h: - (JSC::JSGlobalObject::isGlobalObject): Ditto. - - * runtime/JSGlobalObjectFunctions.cpp: - (JSC::globalFuncEval): Use unwrappedObject and isGlobalObject here rather than toGlobalObject. - - * runtime/JSObject.cpp: - (JSC::JSObject::put): Rewrote prototype cycle checking loop. Use unwrappedObject in the loop now. - (JSC::JSObject::unwrappedObject): Replaced toGlobalObject with this new function. - * runtime/JSObject.h: More of the same. - -2008-12-15 Steve Falkenburg - - Windows build fix. - - Visual Studio requires visibility of forward declarations to match class declaration. - - * assembler/X86Assembler.h: - -2008-12-15 Gustavo Noronha Silva - - Reviewed by Mark Rowe. - - https://bugs.webkit.org/show_bug.cgi?id=22686 - - GTK+ build fix. - - * GNUmakefile.am: - -2008-12-15 Gavin Barraclough - - Reviewed by Geoff Garen. - - Add support to X86Assembler emitting instructions that access all 16 registers on x86-64. - Add a new formating class, that is reponsible for both emitting the opcode bytes and the - ModRm bytes of an instruction in a single call; this can insert the REX byte as necessary - before the opcode, but has access to the register numbers to build the REX. - - * assembler/AssemblerBuffer.h: - (JSC::AssemblerBuffer::isAligned): - (JSC::AssemblerBuffer::data): - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::addPtr): - (JSC::MacroAssembler::add32): - (JSC::MacroAssembler::and32): - (JSC::MacroAssembler::or32): - (JSC::MacroAssembler::sub32): - (JSC::MacroAssembler::xor32): - (JSC::MacroAssembler::loadPtr): - (JSC::MacroAssembler::load32): - (JSC::MacroAssembler::load16): - (JSC::MacroAssembler::storePtr): - (JSC::MacroAssembler::storePtrWithRepatch): - (JSC::MacroAssembler::store32): - (JSC::MacroAssembler::pop): - (JSC::MacroAssembler::push): - (JSC::MacroAssembler::compareImm32ForBranch): - (JSC::MacroAssembler::compareImm32ForBranchEquality): - (JSC::MacroAssembler::testImm32): - (JSC::MacroAssembler::jae32): - (JSC::MacroAssembler::jb32): - (JSC::MacroAssembler::je16): - (JSC::MacroAssembler::jg32): - (JSC::MacroAssembler::jnePtr): - (JSC::MacroAssembler::jne32): - (JSC::MacroAssembler::jump): - * assembler/X86Assembler.h: - (JSC::X86::): - (JSC::X86Assembler::): - (JSC::X86Assembler::size): - (JSC::X86Assembler::push_r): - (JSC::X86Assembler::pop_r): - (JSC::X86Assembler::push_i32): - (JSC::X86Assembler::push_m): - (JSC::X86Assembler::pop_m): - (JSC::X86Assembler::addl_rr): - (JSC::X86Assembler::addl_mr): - (JSC::X86Assembler::addl_ir): - (JSC::X86Assembler::addq_ir): - (JSC::X86Assembler::addl_im): - (JSC::X86Assembler::andl_rr): - (JSC::X86Assembler::andl_ir): - (JSC::X86Assembler::orl_rr): - (JSC::X86Assembler::orl_mr): - (JSC::X86Assembler::orl_ir): - (JSC::X86Assembler::subl_rr): - (JSC::X86Assembler::subl_mr): - (JSC::X86Assembler::subl_ir): - (JSC::X86Assembler::subl_im): - (JSC::X86Assembler::xorl_rr): - (JSC::X86Assembler::xorl_ir): - (JSC::X86Assembler::sarl_i8r): - (JSC::X86Assembler::sarl_CLr): - (JSC::X86Assembler::shll_i8r): - (JSC::X86Assembler::shll_CLr): - (JSC::X86Assembler::imull_rr): - (JSC::X86Assembler::imull_i32r): - (JSC::X86Assembler::idivl_r): - (JSC::X86Assembler::cmpl_rr): - (JSC::X86Assembler::cmpl_rm): - (JSC::X86Assembler::cmpl_mr): - (JSC::X86Assembler::cmpl_ir): - (JSC::X86Assembler::cmpl_ir_force32): - (JSC::X86Assembler::cmpl_im): - (JSC::X86Assembler::cmpl_im_force32): - (JSC::X86Assembler::cmpw_rm): - (JSC::X86Assembler::testl_rr): - (JSC::X86Assembler::testl_i32r): - (JSC::X86Assembler::testl_i32m): - (JSC::X86Assembler::testq_rr): - (JSC::X86Assembler::testq_i32r): - (JSC::X86Assembler::testb_i8r): - (JSC::X86Assembler::sete_r): - (JSC::X86Assembler::setz_r): - (JSC::X86Assembler::setne_r): - (JSC::X86Assembler::setnz_r): - (JSC::X86Assembler::cdq): - (JSC::X86Assembler::xchgl_rr): - (JSC::X86Assembler::movl_rr): - (JSC::X86Assembler::movl_rm): - (JSC::X86Assembler::movl_mr): - (JSC::X86Assembler::movl_i32r): - (JSC::X86Assembler::movl_i32m): - (JSC::X86Assembler::movq_rr): - (JSC::X86Assembler::movq_rm): - (JSC::X86Assembler::movq_mr): - (JSC::X86Assembler::movzwl_mr): - (JSC::X86Assembler::movzbl_rr): - (JSC::X86Assembler::leal_mr): - (JSC::X86Assembler::call): - (JSC::X86Assembler::jmp): - (JSC::X86Assembler::jmp_r): - (JSC::X86Assembler::jmp_m): - (JSC::X86Assembler::jne): - (JSC::X86Assembler::jnz): - (JSC::X86Assembler::je): - (JSC::X86Assembler::jl): - (JSC::X86Assembler::jb): - (JSC::X86Assembler::jle): - (JSC::X86Assembler::jbe): - (JSC::X86Assembler::jge): - (JSC::X86Assembler::jg): - (JSC::X86Assembler::ja): - (JSC::X86Assembler::jae): - (JSC::X86Assembler::jo): - (JSC::X86Assembler::jp): - (JSC::X86Assembler::js): - (JSC::X86Assembler::addsd_rr): - (JSC::X86Assembler::addsd_mr): - (JSC::X86Assembler::cvtsi2sd_rr): - (JSC::X86Assembler::cvttsd2si_rr): - (JSC::X86Assembler::movd_rr): - (JSC::X86Assembler::movsd_rm): - (JSC::X86Assembler::movsd_mr): - (JSC::X86Assembler::mulsd_rr): - (JSC::X86Assembler::mulsd_mr): - (JSC::X86Assembler::pextrw_irr): - (JSC::X86Assembler::subsd_rr): - (JSC::X86Assembler::subsd_mr): - (JSC::X86Assembler::ucomis_rr): - (JSC::X86Assembler::int3): - (JSC::X86Assembler::ret): - (JSC::X86Assembler::predictNotTaken): - (JSC::X86Assembler::label): - (JSC::X86Assembler::align): - (JSC::X86Assembler::link): - (JSC::X86Assembler::executableCopy): - (JSC::X86Assembler::X86InstructionFormater::prefix): - (JSC::X86Assembler::X86InstructionFormater::oneByteOp): - (JSC::X86Assembler::X86InstructionFormater::twoByteOp): - (JSC::X86Assembler::X86InstructionFormater::oneByteOp64): - (JSC::X86Assembler::X86InstructionFormater::oneByteOp8): - (JSC::X86Assembler::X86InstructionFormater::twoByteOp8): - (JSC::X86Assembler::X86InstructionFormater::instructionImmediate8): - (JSC::X86Assembler::X86InstructionFormater::instructionImmediate32): - (JSC::X86Assembler::X86InstructionFormater::instructionRel32): - (JSC::X86Assembler::X86InstructionFormater::size): - (JSC::X86Assembler::X86InstructionFormater::isAligned): - (JSC::X86Assembler::X86InstructionFormater::data): - (JSC::X86Assembler::X86InstructionFormater::executableCopy): - (JSC::X86Assembler::X86InstructionFormater::registerModRM): - (JSC::X86Assembler::X86InstructionFormater::memoryModRM): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompile): - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JITArithmetic.cpp: - (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): - (JSC::JIT::compileBinaryArithOp): - * jit/JITCall.cpp: - (JSC::JIT::compileOpCall): - (JSC::JIT::compileOpCallSlowCase): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::compileGetByIdHotPath): - (JSC::JIT::compilePutByIdHotPath): - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::privateCompilePatchGetArrayLength): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdProtoList): - (JSC::JIT::privateCompileGetByIdChainList): - (JSC::JIT::privateCompileGetByIdChain): - -2008-12-15 Darin Adler - - * interpreter/RegisterFile.h: Tweak include formatting. - -2008-12-15 Holger Hans Peter Freyther - - Build fix for Gtk+. - - * interpreter/RegisterFile.h: Include stdio.h for fprintf - -2008-12-15 Alexey Proskuryakov - - Reviewed by Oliver Hunt. - - Worker Thread crash running multiple workers for a moderate amount of time - - * interpreter/RegisterFile.h: (JSC::RegisterFile::RegisterFile): - Improve error handling: if mmap fails, crash immediately, and print out the reason. - -2008-12-13 Gavin Barraclough - - Reviewed by Cameron Zwarich. - - Re-enable WREC on 64-bit. - Implements one of the MacroAssembler::jnzPtr methods, previously only implemented for 32-bit x86. - - https://bugs.webkit.org/show_bug.cgi?id=22849 - - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::testImm64): - (JSC::MacroAssembler::jnzPtr): - * assembler/X86Assembler.h: - (JSC::X86Assembler::testq_i32r): - (JSC::X86Assembler::testq_rr): - * wtf/Platform.h: - -2008-12-13 Gavin Barraclough - - Fix PPC builds. - - * assembler/MacroAssembler.h: - -2008-12-13 Gavin Barraclough - - Build fix only, no review. - - * bytecode/CodeBlock.h: - -2008-12-13 Gavin Barraclough - - Reviewed by Cameron Zwarich. - - Port the remainder of the JIT, bar calling convention related code, and code - implementing optimizations which can be disabled, to use the MacroAssembler. - - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::DataLabelPtr::DataLabelPtr): - (JSC::MacroAssembler::RepatchBuffer::RepatchBuffer): - (JSC::MacroAssembler::RepatchBuffer::link): - (JSC::MacroAssembler::RepatchBuffer::addressOf): - (JSC::MacroAssembler::RepatchBuffer::setPtr): - (JSC::MacroAssembler::addPtr): - (JSC::MacroAssembler::lshift32): - (JSC::MacroAssembler::mod32): - (JSC::MacroAssembler::rshift32): - (JSC::MacroAssembler::storePtrWithRepatch): - (JSC::MacroAssembler::jnzPtr): - (JSC::MacroAssembler::jzPtr): - (JSC::MacroAssembler::jump): - (JSC::MacroAssembler::label): - * assembler/X86Assembler.h: - (JSC::X86Assembler::): - (JSC::X86Assembler::xchgl_rr): - (JSC::X86Assembler::jmp_m): - (JSC::X86Assembler::repatchAddress): - (JSC::X86Assembler::getRelocatedAddress): - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::CodeBlock): - * bytecode/CodeBlock.h: - (JSC::JITCodeRef::JITCodeRef): - (JSC::CodeBlock::setJITCode): - (JSC::CodeBlock::jitCode): - (JSC::CodeBlock::executablePool): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileLinkPass): - (JSC::JIT::privateCompile): - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JIT.h: - (JSC::CallRecord::CallRecord): - (JSC::JumpTable::JumpTable): - (JSC::JIT::emitCTICall): - (JSC::JIT::JSRInfo::JSRInfo): - * jit/JITArithmetic.cpp: - * jit/JITCall.cpp: - * jit/JITInlineMethods.h: - (JSC::JIT::emitNakedCall): - (JSC::JIT::emitCTICall_internal): - (JSC::JIT::checkStructure): - (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): - (JSC::JIT::addSlowCase): - (JSC::JIT::addJump): - (JSC::JIT::emitJumpSlowToHot): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompileGetByIdChainList): - (JSC::JIT::privateCompileGetByIdChain): - -2008-12-12 Cameron Zwarich - - Reviewed by Sam Weinig. - - Fix the failures of the following layout tests, which regressed in - r39255: - - fast/dom/StyleSheet/ownerNode-lifetime-2.html - fast/xsl/transform-xhr-doc.xhtml - - The binary search in CodeBlock::getByIdExceptionInfoForBytecodeOffset() - doesn't guarantee that it actually finds a match, so add an explicit check - for this. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset): - -2008-12-12 Gavin Barraclough - - Reviewed by Cameron Zwarich. - - Replace emitPutCallArg methods with emitPutJITStubArg methods. Primarily to make the argument numbering - more sensible (1-based incrementing by 1, rather than 0-based incrementing by 4). The CTI name also seems - to be being deprecated from the code generally. - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JIT.h: - * jit/JITArithmetic.cpp: - (JSC::JIT::compileBinaryArithOp): - (JSC::JIT::compileBinaryArithOpSlowCase): - * jit/JITCall.cpp: - (JSC::JIT::compileOpCallSetupArgs): - (JSC::JIT::compileOpCallEvalSetupArgs): - (JSC::JIT::compileOpConstructSetupArgs): - (JSC::JIT::compileOpCall): - * jit/JITInlineMethods.h: - (JSC::JIT::emitPutJITStubArg): - (JSC::JIT::emitPutJITStubArgConstant): - (JSC::JIT::emitGetJITStubArg): - (JSC::JIT::emitPutJITStubArgFromVirtualRegister): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::compileGetByIdHotPath): - (JSC::JIT::compilePutByIdHotPath): - (JSC::JIT::compileGetByIdSlowCase): - (JSC::JIT::compilePutByIdSlowCase): - -2008-12-12 Gavin Barraclough - - Fix windows builds. - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - (JSC::JIT::privateCompile): - -2008-12-12 Gavin Barraclough - - Reviewed by Geoff Garen. - - Remove loop counter 'i' from the JIT generation passes, replace with a member m_bytecodeIndex. - - No impact on performance. - - * jit/JIT.cpp: - (JSC::JIT::compileOpStrictEq): - (JSC::JIT::emitSlowScriptCheck): - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - (JSC::JIT::privateCompile): - * jit/JIT.h: - (JSC::CallRecord::CallRecord): - (JSC::JmpTable::JmpTable): - (JSC::JIT::emitCTICall): - * jit/JITArithmetic.cpp: - (JSC::JIT::compileBinaryArithOp): - (JSC::JIT::compileBinaryArithOpSlowCase): - * jit/JITCall.cpp: - (JSC::JIT::compileOpCall): - (JSC::JIT::compileOpCallSlowCase): - * jit/JITInlineMethods.h: - (JSC::JIT::emitGetVirtualRegister): - (JSC::JIT::emitGetVirtualRegisters): - (JSC::JIT::emitNakedCall): - (JSC::JIT::emitCTICall_internal): - (JSC::JIT::emitJumpSlowCaseIfJSCell): - (JSC::JIT::emitJumpSlowCaseIfNotJSCell): - (JSC::JIT::emitJumpSlowCaseIfNotImmNum): - (JSC::JIT::emitJumpSlowCaseIfNotImmNums): - (JSC::JIT::emitFastArithIntToImmOrSlowCase): - (JSC::JIT::addSlowCase): - (JSC::JIT::addJump): - (JSC::JIT::emitJumpSlowToHot): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::compileGetByIdHotPath): - (JSC::JIT::compileGetByIdSlowCase): - (JSC::JIT::compilePutByIdHotPath): - (JSC::JIT::compilePutByIdSlowCase): - -2008-12-12 Sam Weinig - - Reviewed by Cameron Zwarich. - - Look into feasibility of discarding bytecode after native codegen - - Move more JIT functionality to using offsets into the Instruction buffer - instead of raw pointers. Two to go! - - * interpreter/Interpreter.cpp: - (JSC::bytecodeOffsetForPC): Rename from vPCForPC. - (JSC::Interpreter::resolve): Pass offset to exception helper. - (JSC::Interpreter::resolveSkip): Ditto. - (JSC::Interpreter::resolveGlobal): Ditto. - (JSC::Interpreter::resolveBaseAndProperty): Ditto. - (JSC::Interpreter::resolveBaseAndFunc): Ditto. - (JSC::isNotObject): Ditto. - (JSC::Interpreter::unwindCallFrame): Call bytecodeOffsetForPC. - (JSC::Interpreter::throwException): Use offsets instead of vPCs. - (JSC::Interpreter::privateExecute): Pass offset to exception helper. - (JSC::Interpreter::retrieveLastCaller): Ditto. - (JSC::Interpreter::cti_op_instanceof): Ditto. - (JSC::Interpreter::cti_op_call_NotJSFunction): Ditto. - (JSC::Interpreter::cti_op_resolve): Pass offset to exception helper. - (JSC::Interpreter::cti_op_construct_NotJSConstruct): Ditto. - (JSC::Interpreter::cti_op_resolve_func): Ditto. - (JSC::Interpreter::cti_op_resolve_skip): Ditto. - (JSC::Interpreter::cti_op_resolve_global): Ditto. - (JSC::Interpreter::cti_op_resolve_with_base): Ditto. - (JSC::Interpreter::cti_op_throw): Ditto. - (JSC::Interpreter::cti_op_in): Ditto. - (JSC::Interpreter::cti_vm_throw): Ditto. - * interpreter/Interpreter.h: - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): Don't pass unnecessary vPC to stub. - * jit/JIT.h: Remove ARG_instr1 - ARG_instr3 and ARG_instr5 - ARG_instr6. - * jit/JITCall.cpp: - (JSC::JIT::compileOpCallEvalSetupArgs): Don't pass unnecessary vPC to stub.. - (JSC::JIT::compileOpConstructSetupArgs): Ditto. - - * runtime/ExceptionHelpers.cpp: - (JSC::createUndefinedVariableError): Take an offset instead of vPC. - (JSC::createInvalidParamError): Ditto. - (JSC::createNotAConstructorError): Ditto. - (JSC::createNotAFunctionError): Ditto. - (JSC::createNotAnObjectError): Ditto. - * runtime/ExceptionHelpers.h: - -2008-12-12 Cameron Zwarich - - Reviewed by Oliver Hunt. - - Bug 22835: Crash during bytecode generation when comparing to null - - - - Change the special cases in bytecode generation for comparison to null - to use tempDestination(). - - * parser/Nodes.cpp: - (JSC::BinaryOpNode::emitBytecode): - (JSC::EqualNode::emitBytecode): - -2008-12-12 Gavin Barraclough - - Reviewed by Geoff Garen. - - Move slow-cases of JIT code generation over to the MacroAssembler interface. - - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::Label::Label): - (JSC::MacroAssembler::jae32): - (JSC::MacroAssembler::jg32): - (JSC::MacroAssembler::jzPtr): - * jit/JIT.cpp: - (JSC::JIT::privateCompileSlowCases): - (JSC::JIT::privateCompile): - (JSC::JIT::emitGetVariableObjectRegister): - (JSC::JIT::emitPutVariableObjectRegister): - * jit/JIT.h: - (JSC::SlowCaseEntry::SlowCaseEntry): - (JSC::JIT::getSlowCase): - (JSC::JIT::linkSlowCase): - * jit/JITArithmetic.cpp: - (JSC::JIT::compileBinaryArithOpSlowCase): - * jit/JITCall.cpp: - (JSC::JIT::compileOpCallInitializeCallFrame): - (JSC::JIT::compileOpCall): - (JSC::JIT::compileOpCallSlowCase): - * jit/JITInlineMethods.h: - (JSC::JIT::emitJumpSlowCaseIfNotJSCell): - (JSC::JIT::linkSlowCaseIfNotJSCell): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::compileGetByIdHotPath): - (JSC::JIT::compilePutByIdHotPath): - (JSC::JIT::compileGetByIdSlowCase): - (JSC::JIT::compilePutByIdSlowCase): - -2008-12-12 Cameron Zwarich - - Reviewed by Sam Weinig. - - Bug 22828: Do not inspect bytecode instruction stream for op_get_by_id exception information - - - In order to remove the bytecode instruction stream after generating - native code, all inspection of bytecode instructions at runtime must - be removed. One particular instance of this is the special handling of - exceptions thrown by the op_get_by_id emitted directly before an - op_construct or an op_instanceof. This patch moves that information to - an auxiliary data structure in CodeBlock. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset): - * bytecode/CodeBlock.h: - (JSC::CodeBlock::addGetByIdExceptionInfo): - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitConstruct): - * bytecompiler/BytecodeGenerator.h: - (JSC::BytecodeGenerator::emitGetByIdExceptionInfo): - * parser/Nodes.cpp: - (JSC::InstanceOfNode::emitBytecode): - * runtime/ExceptionHelpers.cpp: - (JSC::createNotAnObjectError): - -2008-12-12 Sam Weinig - - Reviewed by Geoffrey Garen. - - Change exception information accessors to take offsets into the bytecode - instruction buffer instead of pointers so that they can work even even - if the bytecode buffer is purged. - - * bytecode/CodeBlock.cpp: - (JSC::instructionOffsetForNth): - (JSC::CodeBlock::handlerForBytecodeOffset): - (JSC::CodeBlock::lineNumberForBytecodeOffset): - (JSC::CodeBlock::expressionRangeForBytecodeOffset): - * bytecode/CodeBlock.h: - * bytecode/SamplingTool.cpp: - (JSC::SamplingTool::dump): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::throwException): - (JSC::Interpreter::privateExecute): - (JSC::Interpreter::retrieveLastCaller): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - * runtime/ExceptionHelpers.cpp: - (JSC::createUndefinedVariableError): - (JSC::createInvalidParamError): - (JSC::createNotAConstructorError): - (JSC::createNotAFunctionError): - (JSC::createNotAnObjectError): - -2008-12-12 Geoffrey Garen - - Reviewed by Cameron Zwarich. - - Tiny bit of refactoring in quantifier generation. - - * wrec/WRECGenerator.cpp: - (JSC::WREC::Generator::generateNonGreedyQuantifier): - (JSC::WREC::Generator::generateGreedyQuantifier): - -2008-12-11 Sam Weinig - - Reviewed by Geoffrey Garen. - - Remove dependancy on having the Instruction buffer in order to - deref Structures used for property access and global resolves. - Instead, we put references to the necessary Structures in auxiliary - data structures on the CodeBlock. This is not an ideal solution, - as we still pay for having the Structures in two places and we - would like to eventually just hold on to offsets into the machine - code buffer. - - - Also removes CodeBlock bloat in non-JIT by #ifdefing the JIT - only data structures. - - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCore.scons: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - * bytecode/CodeBlock.cpp: - (JSC::isGlobalResolve): - (JSC::isPropertyAccess): - (JSC::instructionOffsetForNth): - (JSC::printGlobalResolveInfo): - (JSC::printStructureStubInfo): - (JSC::CodeBlock::printStructures): - (JSC::CodeBlock::dump): - (JSC::CodeBlock::~CodeBlock): - (JSC::CodeBlock::shrinkToFit): - * bytecode/CodeBlock.h: - (JSC::GlobalResolveInfo::GlobalResolveInfo): - (JSC::getNativePC): - (JSC::CodeBlock::instructions): - (JSC::CodeBlock::getStubInfo): - (JSC::CodeBlock::getBytecodeIndex): - (JSC::CodeBlock::addPropertyAccessInstruction): - (JSC::CodeBlock::addGlobalResolveInstruction): - (JSC::CodeBlock::numberOfStructureStubInfos): - (JSC::CodeBlock::addStructureStubInfo): - (JSC::CodeBlock::structureStubInfo): - (JSC::CodeBlock::addGlobalResolveInfo): - (JSC::CodeBlock::globalResolveInfo): - (JSC::CodeBlock::numberOfCallLinkInfos): - (JSC::CodeBlock::addCallLinkInfo): - (JSC::CodeBlock::callLinkInfo): - * bytecode/Instruction.h: - (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set): - (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList): - * bytecode/Opcode.h: - (JSC::): - * bytecode/StructureStubInfo.cpp: Copied from bytecode/CodeBlock.cpp. - (JSC::StructureStubInfo::deref): - * bytecode/StructureStubInfo.h: Copied from bytecode/CodeBlock.h. - (JSC::StructureStubInfo::StructureStubInfo): - (JSC::StructureStubInfo::initGetByIdSelf): - (JSC::StructureStubInfo::initGetByIdProto): - (JSC::StructureStubInfo::initGetByIdChain): - (JSC::StructureStubInfo::initGetByIdSelfList): - (JSC::StructureStubInfo::initGetByIdProtoList): - (JSC::StructureStubInfo::initPutByIdTransition): - (JSC::StructureStubInfo::initPutByIdReplace): - (JSC::StructureStubInfo::): - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitResolve): - (JSC::BytecodeGenerator::emitGetById): - (JSC::BytecodeGenerator::emitPutById): - (JSC::BytecodeGenerator::emitCall): - (JSC::BytecodeGenerator::emitConstruct): - (JSC::BytecodeGenerator::emitCatch): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::tryCTICachePutByID): - (JSC::Interpreter::tryCTICacheGetByID): - (JSC::Interpreter::cti_op_get_by_id_self_fail): - (JSC::getPolymorphicAccessStructureListSlot): - (JSC::Interpreter::cti_op_get_by_id_proto_list): - (JSC::Interpreter::cti_op_resolve_global): - * jit/JIT.cpp: - (JSC::JIT::JIT): - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - (JSC::JIT::privateCompile): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::compileGetByIdHotPath): - (JSC::JIT::compilePutByIdHotPath): - (JSC::JIT::compileGetByIdSlowCase): - (JSC::JIT::compilePutByIdSlowCase): - (JSC::JIT::privateCompileGetByIdSelfList): - (JSC::JIT::privateCompileGetByIdProtoList): - (JSC::JIT::privateCompileGetByIdChainList): - -2008-12-11 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Remove CTI_ARGUMENTS mode, use va_start implementation on Windows, - unifying JIT callback (cti_*) argument access on OS X & Windows - - No performance impact. - - * interpreter/Interpreter.h: - * jit/JIT.cpp: - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JIT.h: - * jit/JITInlineMethods.h: - (JSC::JIT::emitCTICall): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompilePutByIdTransition): - * wtf/Platform.h: - -2008-12-11 Holger Freyther - - Reviewed by Simon Hausmann. - - https://bugs.webkit.org/show_bug.cgi?id=20953 - - For Qt it is not pratical to have a FontCache and GlyphPageTreeNode - implementation. This is one of the reasons why the Qt port is currently not - using WebCore/platform/graphics/Font.cpp. By allowing to not use - the simple/fast-path the Qt port will be able to use it. - - Introduce USE(FONT_FAST_PATH) and define it for every port but the - Qt one. - - * wtf/Platform.h: Enable USE(FONT_FAST_PATH) - -2008-12-11 Gabor Loki - - Reviewed by Darin Adler and landed by Holger Freyther. - - - Fix threading on Qt-port and Gtk-port for Sampling tool. - - * wtf/ThreadingGtk.cpp: - (WTF::waitForThreadCompletion): - * wtf/ThreadingQt.cpp: - (WTF::waitForThreadCompletion): - -2008-12-10 Cameron Zwarich - - Reviewed by Oliver Hunt. - - Bug 22734: Debugger crashes when stepping into a function call in a return statement - - - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::BytecodeGenerator): The DebuggerCallFrame uses - the 'this' value stored in a callFrame, so op_convert_this should be - emitted at the beginning of a function body when generating bytecode - with debug hooks. - * debugger/DebuggerCallFrame.cpp: - (JSC::DebuggerCallFrame::thisObject): The assertion inherent in the call - to asObject() here is valid, because any 'this' value should have been - converted to a JSObject*. - -2008-12-10 Gavin Barraclough - - Reviewed by Geoff Garen. - - Port more of the JIT to use the MacroAssembler interface. - - Everything in the main pass, bar a few corner cases (operations with required - registers, or calling convention code). Slightly refactors array creation, - moving the offset calculation into the callFrame into C code (reducing code - planted). - - Overall this appears to be a 1% win on v8-tests, due to the smaller immediates - being planted (in jfalse in particular). - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::cti_op_new_array): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - * jit/JIT.h: - * wrec/WRECGenerator.cpp: - (JSC::WREC::Generator::generateEnter): - -2008-12-10 Sam Weinig - - Fix non-JIT builds. - - * bytecode/CodeBlock.h: - -2008-12-10 Sam Weinig - - Reviewed by Geoffrey Garen. - - Remove the CTI return address table from CodeBlock - - Step 2: - - Convert the return address table from a HashMap to a sorted Vector. This - reduces the size of the data structure by ~4.5MB on Membuster head. - - SunSpider reports a 0.5% progression. - - * bytecode/CodeBlock.cpp: - (JSC::sizeInBytes): Generic method to get the cost of a Vector. - (JSC::CodeBlock::dumpStatistics): Add dumping of member sizes. - * bytecode/CodeBlock.h: - (JSC::PC::PC): Struct representing NativePC -> VirtualPC mappings. - (JSC::getNativePC): Helper for binary chop. - (JSC::CodeBlock::getBytecodeIndex): Used to get the VirtualPC from a - NativePC using a binary chop of the pcVector. - (JSC::CodeBlock::pcVector): Accessor. - - * interpreter/Interpreter.cpp: - (JSC::vPCForPC): Use getBytecodeIndex instead of jitReturnAddressVPCMap().get(). - (JSC::Interpreter::cti_op_instanceof): Ditto. - (JSC::Interpreter::cti_op_resolve): Ditto. - (JSC::Interpreter::cti_op_resolve_func): Ditto. - (JSC::Interpreter::cti_op_resolve_skip): Ditto. - (JSC::Interpreter::cti_op_resolve_with_base): Ditto. - (JSC::Interpreter::cti_op_throw): Ditto. - (JSC::Interpreter::cti_op_in): Ditto. - (JSC::Interpreter::cti_vm_throw): Ditto. - - * jit/JIT.cpp: - (JSC::JIT::privateCompile): Reserve exact capacity and fill the pcVector. - -2008-12-09 Geoffrey Garen - - Reviewed by Oliver Hunt. - - Added WREC support for an assertion followed by a quantifier. Fixed - PCRE to match. - - * wrec/WRECParser.cpp: - (JSC::WREC::Parser::parseParentheses): Throw away the quantifier, since - it's meaningless. (Firefox does the same.) - - * pcre/pcre_compile.cpp: - (compileBranch): ditto. - -2008-12-09 Geoffrey Garen - - Reviewed by Cameron Zwarich. - - In preparation for compiling WREC without PCRE: - - Further relaxed WREC's parsing to be more web-compatible. Fixed PCRE to - match in cases where it didn't already. - - Changed JavaScriptCore to report syntax errors detected by WREC, rather - than falling back on PCRE any time WREC sees an error. - - * pcre/pcre_compile.cpp: - (checkEscape): Relaxed parsing of \c and \N escapes to be more - web-compatible. - - * runtime/RegExp.cpp: - (JSC::RegExp::RegExp): Only fall back on PCRE if WREC has not reported - a syntax error. - - * wrec/WREC.cpp: - (JSC::WREC::Generator::compileRegExp): Fixed some error reporting to - match PCRE. - - * wrec/WRECParser.cpp: Added error messages that match PCRE. - - (JSC::WREC::Parser::consumeGreedyQuantifier): - (JSC::WREC::Parser::parseParentheses): - (JSC::WREC::Parser::parseCharacterClass): - (JSC::WREC::Parser::parseNonCharacterEscape): Updated the above functions to - use the new setError API. - - (JSC::WREC::Parser::consumeEscape): Relaxed parsing of \c \N \u \x \B - to be more web-compatible. - - (JSC::WREC::Parser::parseAlternative): Distinguish between a malformed - quantifier and a quantifier with no prefix, like PCRE does. - - (JSC::WREC::Parser::consumeParenthesesType): Updated to use the new setError API. - - * wrec/WRECParser.h: - (JSC::WREC::Parser::error): - (JSC::WREC::Parser::syntaxError): - (JSC::WREC::Parser::parsePattern): - (JSC::WREC::Parser::reset): - (JSC::WREC::Parser::setError): Store error messages instead of error codes, - to provide for exception messages. Use a setter for reporting errors, so - errors detected early are not overwritten by errors detected later. - -2008-12-09 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Use va_args to access cti function arguments. - https://bugs.webkit.org/show_bug.cgi?id=22774 - - This may be a minor regression, but we'll take the hit if so to reduce fragility. - - * interpreter/Interpreter.cpp: - * interpreter/Interpreter.h: - -2008-12-09 Sam Weinig - - Reviewed twice by Cameron Zwarich. - - Fix for https://bugs.webkit.org/show_bug.cgi?id=22752 - Clear SymbolTable after codegen for Function codeblocks that - don't require an activation - - This is a ~1.5MB improvement on Membuster-head. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dumpStatistics): Add logging of non-empty symbol tables - and total size used by symbol tables. - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::generate): Clear the symbol table here. - -2008-12-09 Sam Weinig - - Reviewed by Geoffrey Garen. - - Remove unnecessary extra lookup when throwing an exception. - We used to first lookup the target offset using getHandlerForVPC - and then we would lookup the native code stub using - nativeExceptionCodeForHandlerVPC. Instead, we can just pass around - the HandlerInfo. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::handlerForVPC): Return the HandlerInfo. - * bytecode/CodeBlock.h: Remove nativeExceptionCodeForHandlerVPC. - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::throwException): Return a HandlerInfo instead of - and Instruction offset. - (JSC::Interpreter::privateExecute): Get the offset from HandlerInfo. - (JSC::Interpreter::cti_op_throw): Get the native code from the HandleInfo. - (JSC::Interpreter::cti_vm_throw): Ditto. - * interpreter/Interpreter.h: - -2008-12-09 Eric Seidel - - Build fix only, no review. - - Speculative fix for the Chromium-Windows bot. - Add JavaScriptCore/os-win32 to the include path (for stdint.h) - Strangely it builds fine on my local windows box (or at least doesn't hit this error) - - * JavaScriptCore.scons: - -2008-12-09 Eric Seidel - - No review, build fix only. - - Add ExecutableAllocator files missing from Scons build. - - * JavaScriptCore.scons: - -2008-12-09 Dimitri Glazkov - - Reviewed by Timothy Hatcher. - - https://bugs.webkit.org/show_bug.cgi?id=22631 - Allow ScriptCallFrame query names of functions in the call stack. - - * JavaScriptCore.exp: added InternalFunction::name and - UString operator==() as exported symbol - -2008-12-08 Judit Jasz - - Reviewed and tweaked by Cameron Zwarich. - - Bug 22352: Annotate opcodes with their length - - - * bytecode/Opcode.cpp: - * bytecode/Opcode.h: - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - -2008-12-08 Geoffrey Garen - - Reviewed by Oliver Hunt. - - Implemented more of the relaxed and somewhat weird rules for deciding - how to interpret a non-pattern-character. - - * wrec/Escapes.h: - (JSC::WREC::Escape::): - (JSC::WREC::Escape::Escape): Eliminated Escape::None because it was - unused. If you see an '\\', it's either a valid escape or an error. - - * wrec/Quantifier.h: - (JSC::WREC::Quantifier::Quantifier): - * wrec/WRECGenerator.cpp: - (JSC::WREC::Generator::generateNonGreedyQuantifier): - (JSC::WREC::Generator::generateGreedyQuantifier): Renamed "noMaxSpecified" - to "Infinity", since that's what it means. - - * wrec/WRECParser.cpp: - (JSC::WREC::Parser::consumeGreedyQuantifier): Re-wrote {n,m} parsing rules - because they were too strict before. Added support for backtracking - in the case where the {n,m} fails to parse as a quantifier, and yet is - not a syntax error. - - (JSC::WREC::Parser::parseCharacterClass): - (JSC::WREC::Parser::parseNonCharacterEscape): Eliminated Escape::None, - as above. - - (JSC::WREC::Parser::consumeEscape): Don't treat ASCII and _ escapes - as syntax errors. See fast/regex/non-pattern-characters.html. - - * wrec/WRECParser.h: - (JSC::WREC::Parser::SavedState::SavedState): - (JSC::WREC::Parser::SavedState::restore): Added a state backtracker, - since parsing {n,m} forms requires backtracking if the form turns out - not to be a quantifier. - -2008-12-08 Geoffrey Garen - - Reviewed by Oliver Hunt. - - Refactored WREC parsing so that only one piece of code needs to know - the relaxed and somewhat weird rules for deciding how to interpret a - non-pattern-character, in preparation for implementing those rules. - - Also, implemented the relaxed and somewhat weird rules for '}' and ']'. - - * wrec/WREC.cpp: Reduced the regular expression size limit. Now that - WREC handles ']' properly, it compiles fast/js/regexp-charclass-crash.html, - which makes it hang at the old limit. (The old limit was based on the - misimpression that the same value in PCRE limited the regular expression - pattern size; in reality, it limited the expected compiled regular - expression size. WREC doesn't have a way to calculate an expected - compiled regular expression size, but this should be good enough.) - - * wrec/WRECParser.cpp: - (JSC::WREC::parsePatternCharacterSequence): Nixed this function because - it contained a second copy of the logic for handling non-pattern-characters, - which is about to get a lot more complicated. - - (JSC::WREC::PatternCharacterSequence::PatternCharacterSequence): - (JSC::WREC::PatternCharacterSequence::size): - (JSC::WREC::PatternCharacterSequence::append): - (JSC::WREC::PatternCharacterSequence::flush): Helper object for generating - an optimized sequence of pattern characters. - - (JSC::WREC::Parser::parseNonCharacterEscape): Renamed to reflect the fact - that the main parseAlternative loop handles character escapes. - - (JSC::WREC::Parser::parseAlternative): Moved pattern character sequence - logic from parsePatternCharacterSequence to here, using - PatternCharacterSequence to help with the details. - - * wrec/WRECParser.h: Updated for renames. - -2008-12-08 Alexey Proskuryakov - - Reviewed by Geoff Garen. - - Give JSGlobalContextCreate a behavior that is concurrency aware, - and un-deprecate it - - * API/JSContextRef.cpp: (JSGlobalContextCreate): - * API/JSContextRef.h: - Use a unique context group for the context, unless the application was linked against old - JavaScriptCore. - -2008-12-08 Sam Weinig - - Reviewed by Cameron Zwarich. - - Fix for Remove the CTI return address table from CodeBlock - - Step 1: - - Remove use of jitReturnAddressVPCMap when looking for vPC to store Structures - in for cached lookup. Instead, use the offset in the StructureStubInfo that is - already required. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dumpStatistics): Fix extraneous semicolon. - * interpreter/Interpreter.cpp: - (JSC::Interpreter::tryCTICachePutByID): - (JSC::Interpreter::tryCTICacheGetByID): - (JSC::Interpreter::cti_op_get_by_id_self_fail): - (JSC::Interpreter::cti_op_get_by_id_proto_list): - * jit/JIT.h: - (JSC::JIT::compileGetByIdSelf): - (JSC::JIT::compileGetByIdProto): - (JSC::JIT::compileGetByIdChain): - (JSC::JIT::compilePutByIdReplace): - (JSC::JIT::compilePutByIdTransition): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::patchGetByIdSelf): - (JSC::JIT::patchPutByIdReplace): - (JSC::JIT::privateCompilePatchGetArrayLength): Remove extra call to getStubInfo. - (JSC::JIT::privateCompileGetByIdSelf): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdChain): - (JSC::JIT::privateCompilePutByIdReplace): - -2008-12-08 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Port the op_j?n?eq_null JIT code generation to use the MacroAssembler, - and clean up slightly at the same time. The 'j' forms currently compare, - then set a register, then compare again, then branch. Branch directly on - the result of the first compare. - - Around a 1% progression on deltablue, crypto & early boyer, for about 1/2% - overall on v8-tests. - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::compileGetByIdSlowCase): - -2008-12-08 Gavin Barraclough - - Reviewed by Geoff Garen. - - Expand MacroAssembler to support more operations, required by the JIT. - - Generally adds more operations and permutations of operands to the existing - interface. Rename 'jset' to 'jnz' and 'jnset' to 'jz', which seem clearer, - and require that immediate pointer operands (though not pointer addresses to - load and store instructions) are wrapped in a ImmPtr() type, akin to Imm32(). - - No performance impact. - - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::): - (JSC::MacroAssembler::ImmPtr::ImmPtr): - (JSC::MacroAssembler::add32): - (JSC::MacroAssembler::and32): - (JSC::MacroAssembler::or32): - (JSC::MacroAssembler::sub32): - (JSC::MacroAssembler::xor32): - (JSC::MacroAssembler::loadPtr): - (JSC::MacroAssembler::load32): - (JSC::MacroAssembler::storePtr): - (JSC::MacroAssembler::store32): - (JSC::MacroAssembler::poke): - (JSC::MacroAssembler::move): - (JSC::MacroAssembler::testImm32): - (JSC::MacroAssembler::jae32): - (JSC::MacroAssembler::jb32): - (JSC::MacroAssembler::jePtr): - (JSC::MacroAssembler::je32): - (JSC::MacroAssembler::jnePtr): - (JSC::MacroAssembler::jne32): - (JSC::MacroAssembler::jnzPtr): - (JSC::MacroAssembler::jnz32): - (JSC::MacroAssembler::jzPtr): - (JSC::MacroAssembler::jz32): - (JSC::MacroAssembler::joSub32): - (JSC::MacroAssembler::jump): - (JSC::MacroAssembler::sete32): - (JSC::MacroAssembler::setne32): - (JSC::MacroAssembler::setnz32): - (JSC::MacroAssembler::setz32): - * assembler/X86Assembler.h: - (JSC::X86Assembler::addl_mr): - (JSC::X86Assembler::andl_i8r): - (JSC::X86Assembler::cmpl_rm): - (JSC::X86Assembler::cmpl_mr): - (JSC::X86Assembler::cmpl_i8m): - (JSC::X86Assembler::subl_mr): - (JSC::X86Assembler::testl_i32m): - (JSC::X86Assembler::xorl_i32r): - (JSC::X86Assembler::movl_rm): - (JSC::X86Assembler::modRm_opmsib): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - * jit/JITInlineMethods.h: - (JSC::JIT::emitGetVirtualRegister): - (JSC::JIT::emitPutCTIArgConstant): - (JSC::JIT::emitPutCTIParam): - (JSC::JIT::emitPutImmediateToCallFrameHeader): - (JSC::JIT::emitInitRegister): - (JSC::JIT::checkStructure): - (JSC::JIT::emitJumpIfJSCell): - (JSC::JIT::emitJumpIfNotJSCell): - (JSC::JIT::emitJumpSlowCaseIfNotImmNum): - -2008-12-08 Geoffrey Garen - - Reviewed by Sam Weinig. - - Fixed a bug where WREC would allow a quantifier whose minimum was - greater than its maximum. - - * wrec/Quantifier.h: - (JSC::WREC::Quantifier::Quantifier): ASSERT that the quantifier is not - backwards. - - * wrec/WRECParser.cpp: - (JSC::WREC::Parser::consumeGreedyQuantifier): Verify that the minimum - is not greater than the maximum. - -2008-12-08 Eric Seidel - - Build fix only, no review. - - * JavaScriptCore.scons: add bytecode/JumpTable.cpp - -2008-12-08 Sam Weinig - - Reviewed by Geoffrey Garen. - - Patch for https://bugs.webkit.org/show_bug.cgi?id=22716 - - Add RareData structure to CodeBlock for infrequently used auxiliary data - members. - - Reduces memory on Membuster-head by ~.5MB - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): - (JSC::CodeBlock::dumpStatistics): - (JSC::CodeBlock::mark): - (JSC::CodeBlock::getHandlerForVPC): - (JSC::CodeBlock::nativeExceptionCodeForHandlerVPC): - (JSC::CodeBlock::shrinkToFit): - * bytecode/CodeBlock.h: - (JSC::CodeBlock::numberOfExceptionHandlers): - (JSC::CodeBlock::addExceptionHandler): - (JSC::CodeBlock::exceptionHandler): - (JSC::CodeBlock::addFunction): - (JSC::CodeBlock::function): - (JSC::CodeBlock::addUnexpectedConstant): - (JSC::CodeBlock::unexpectedConstant): - (JSC::CodeBlock::addRegExp): - (JSC::CodeBlock::regexp): - (JSC::CodeBlock::numberOfImmediateSwitchJumpTables): - (JSC::CodeBlock::addImmediateSwitchJumpTable): - (JSC::CodeBlock::immediateSwitchJumpTable): - (JSC::CodeBlock::numberOfCharacterSwitchJumpTables): - (JSC::CodeBlock::addCharacterSwitchJumpTable): - (JSC::CodeBlock::characterSwitchJumpTable): - (JSC::CodeBlock::numberOfStringSwitchJumpTables): - (JSC::CodeBlock::addStringSwitchJumpTable): - (JSC::CodeBlock::stringSwitchJumpTable): - (JSC::CodeBlock::evalCodeCache): - (JSC::CodeBlock::createRareDataIfNecessary): - -2008-11-26 Peter Kasting - - Reviewed by Anders Carlsson. - - https://bugs.webkit.org/show_bug.cgi?id=16814 - Allow ports to disable ActiveX->NPAPI conversion for Media Player. - Improve handling of miscellaneous ActiveX objects. - - * wtf/Platform.h: Add another ENABLE(...). - -2008-12-08 Sam Weinig - - Reviewed by Mark Rowe. - - Add dumping of CodeBlock member structure usage. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dumpStatistics): - * bytecode/EvalCodeCache.h: - (JSC::EvalCodeCache::isEmpty): - -2008-12-08 David Kilzer - - Bug 22555: Sort "children" sections in Xcode project files - - - - Reviewed by Eric Seidel. - - * JavaScriptCore.xcodeproj/project.pbxproj: Sorted. - -2008-12-08 Tony Chang - - Reviewed by Eric Seidel. - - Enable Pan scrolling only when building on PLATFORM(WIN_OS) - Previously platforms like Apple Windows WebKit, Cairo Windows WebKit, - Wx and Chromium were enabling it explicitly, now we just turn it on - for all WIN_OS, later platforms can turn it off as needed on Windows - (or turn it on under Linux, etc.) - https://bugs.webkit.org/show_bug.cgi?id=22698 - - * wtf/Platform.h: - -2008-12-08 Sam Weinig - - Reviewed by Cameron Zwarich. - - Add basic memory statistics dumping for CodeBlock. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dumpStatistics): - (JSC::CodeBlock::CodeBlock): - (JSC::CodeBlock::~CodeBlock): - * bytecode/CodeBlock.h: - -2008-12-08 Simon Hausmann - - Fix the Linux build with newer gcc/glibc. - - * jit/ExecutableAllocatorPosix.cpp: Include unistd.h for - getpagesize(), according to - http://opengroup.org/onlinepubs/007908775/xsh/getpagesize.html - -2008-12-08 Simon Hausmann - - Fix the build with Qt on Windows. - - * JavaScriptCore.pri: Compile ExecutableAllocatorWin.cpp on Windows. - -2008-12-07 Oliver Hunt - - Reviewed by NOBODY (Buildfix). - - Fix non-WREC builds - - * runtime/RegExp.cpp: - (JSC::RegExp::RegExp): - -2008-12-07 Oliver Hunt - - Reviewed by NOBODY (Build fix). - - Put ENABLE(ASSEMBLER) guards around use of ExecutableAllocator in global data - - Correct Qt and Gtk project files - - * GNUmakefile.am: - * JavaScriptCore.pri: - * runtime/JSGlobalData.h: - -2008-12-07 Oliver Hunt - - Reviewed by NOBODY (Build fix). - - Add new files to other projects. - - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCore.pro: - -2008-12-07 Oliver Hunt - - Rubber stamped by Mark Rowe. - - Rename ExecutableAllocatorMMAP to the more sensible ExecutableAllocatorPosix - - * JavaScriptCore.xcodeproj/project.pbxproj: - * jit/ExecutableAllocator.h: - * jit/ExecutableAllocatorPosix.cpp: Renamed from JavaScriptCore/jit/ExecutableAllocatorMMAP.cpp. - (JSC::ExecutableAllocator::intializePageSize): - (JSC::ExecutablePool::systemAlloc): - (JSC::ExecutablePool::systemRelease): - -2008-12-07 Oliver Hunt - - Reviewed by Cameron Zwarich and Sam Weinig - - Need more granular control over allocation of executable memory (21783) - - - Add a new allocator for use by the JIT that provides executable pages, so - we can get rid of the current hack that makes the entire heap executable. - - 1-2% progression on SunSpider-v8, 1% on SunSpider. Reduces memory usage as well! - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.vcproj/jsc/jsc.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * assembler/AssemblerBuffer.h: - (JSC::AssemblerBuffer::size): - (JSC::AssemblerBuffer::executableCopy): - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::size): - (JSC::MacroAssembler::copyCode): - * assembler/X86Assembler.h: - (JSC::X86Assembler::size): - (JSC::X86Assembler::executableCopy): - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::~CodeBlock): - * bytecode/CodeBlock.h: - (JSC::CodeBlock::executablePool): - (JSC::CodeBlock::setExecutablePool): - * bytecode/Instruction.h: - (JSC::PolymorphicAccessStructureList::derefStructures): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::~Interpreter): - * interpreter/Interpreter.h: - * jit/ExecutableAllocator.cpp: Added. - * jit/ExecutableAllocator.h: Added. - (JSC::ExecutablePool::create): - (JSC::ExecutablePool::alloc): - (JSC::ExecutablePool::~ExecutablePool): - (JSC::ExecutablePool::available): - (JSC::ExecutablePool::ExecutablePool): - (JSC::ExecutablePool::poolAllocate): - (JSC::ExecutableAllocator::ExecutableAllocator): - (JSC::ExecutableAllocator::poolForSize): - (JSC::ExecutablePool::sizeForAllocation): - * jit/ExecutableAllocatorMMAP.cpp: Added. - (JSC::ExecutableAllocator::intializePageSize): - (JSC::ExecutablePool::systemAlloc): - (JSC::ExecutablePool::systemRelease): - * jit/ExecutableAllocatorWin.cpp: Added. - (JSC::ExecutableAllocator::intializePageSize): - (JSC::ExecutablePool::systemAlloc): - (JSC::ExecutablePool::systemRelease): - * jit/JIT.cpp: - (JSC::JIT::privateCompile): - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JIT.h: - (JSC::JIT::compileCTIMachineTrampolines): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::privateCompilePatchGetArrayLength): - (JSC::JIT::privateCompileGetByIdSelf): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdSelfList): - (JSC::JIT::privateCompileGetByIdProtoList): - (JSC::JIT::privateCompileGetByIdChainList): - (JSC::JIT::privateCompileGetByIdChain): - (JSC::JIT::privateCompilePutByIdReplace): - * parser/Nodes.cpp: - (JSC::RegExpNode::emitBytecode): - * runtime/JSGlobalData.h: - (JSC::JSGlobalData::poolForSize): - * runtime/RegExp.cpp: - (JSC::RegExp::RegExp): - (JSC::RegExp::create): - (JSC::RegExp::~RegExp): - * runtime/RegExp.h: - * runtime/RegExpConstructor.cpp: - (JSC::constructRegExp): - * runtime/RegExpPrototype.cpp: - (JSC::regExpProtoFuncCompile): - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncMatch): - (JSC::stringProtoFuncSearch): - * wrec/WREC.cpp: - (JSC::WREC::Generator::compileRegExp): - * wrec/WRECGenerator.h: - * wtf/FastMalloc.cpp: - * wtf/FastMalloc.h: - * wtf/TCSystemAlloc.cpp: - (TryMmap): - (TryVirtualAlloc): - (TryDevMem): - (TCMalloc_SystemRelease): - -2008-12-06 Sam Weinig - - Fix the Gtk build. - - * jit/JITPropertyAccess.cpp: - (JSC::JIT::compileGetByIdHotPath): - (JSC::JIT::compilePutByIdHotPath): - -2008-12-06 Sam Weinig - - Reviewed by Cameron Zwarich, - - Move CodeBlock constructor into the .cpp file. - - Sunspider reports a .7% progression, but I can only assume this - is noise. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::CodeBlock): - * bytecode/CodeBlock.h: - -2008-12-06 Sam Weinig - - Reviewed by Cameron Zwarich. - - Split JumpTable code into its own file. - - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - * bytecode/CodeBlock.cpp: - * bytecode/CodeBlock.h: - * bytecode/JumpTable.cpp: Copied from bytecode/CodeBlock.cpp. - * bytecode/JumpTable.h: Copied from bytecode/CodeBlock.h. - -2008-12-05 Sam Weinig - - Reviewed by Cameron Zwarich. - - Fix for https://bugs.webkit.org/show_bug.cgi?id=22715 - Encapsulate more CodeBlock members in preparation - of moving some of them to a rare data structure. - - * bytecode/CodeBlock.cpp: - (JSC::locationForOffset): - (JSC::printConditionalJump): - (JSC::printGetByIdOp): - (JSC::printPutByIdOp): - (JSC::CodeBlock::printStructure): - (JSC::CodeBlock::printStructures): - (JSC::CodeBlock::dump): - (JSC::CodeBlock::~CodeBlock): - (JSC::CodeBlock::unlinkCallers): - (JSC::CodeBlock::derefStructures): - (JSC::CodeBlock::refStructures): - (JSC::CodeBlock::mark): - (JSC::CodeBlock::getHandlerForVPC): - (JSC::CodeBlock::nativeExceptionCodeForHandlerVPC): - (JSC::CodeBlock::lineNumberForVPC): - (JSC::CodeBlock::expressionRangeForVPC): - (JSC::CodeBlock::shrinkToFit): - * bytecode/CodeBlock.h: - (JSC::CodeBlock::CodeBlock): - (JSC::CodeBlock::addCaller): - (JSC::CodeBlock::removeCaller): - (JSC::CodeBlock::isKnownNotImmediate): - (JSC::CodeBlock::isConstantRegisterIndex): - (JSC::CodeBlock::getConstant): - (JSC::CodeBlock::isTemporaryRegisterIndex): - (JSC::CodeBlock::getStubInfo): - (JSC::CodeBlock::getCallLinkInfo): - (JSC::CodeBlock::instructions): - (JSC::CodeBlock::setJITCode): - (JSC::CodeBlock::jitCode): - (JSC::CodeBlock::ownerNode): - (JSC::CodeBlock::setGlobalData): - (JSC::CodeBlock::setThisRegister): - (JSC::CodeBlock::thisRegister): - (JSC::CodeBlock::setNeedsFullScopeChain): - (JSC::CodeBlock::needsFullScopeChain): - (JSC::CodeBlock::setUsesEval): - (JSC::CodeBlock::usesEval): - (JSC::CodeBlock::setUsesArguments): - (JSC::CodeBlock::usesArguments): - (JSC::CodeBlock::codeType): - (JSC::CodeBlock::source): - (JSC::CodeBlock::sourceOffset): - (JSC::CodeBlock::addGlobalResolveInstruction): - (JSC::CodeBlock::numberOfPropertyAccessInstructions): - (JSC::CodeBlock::addPropertyAccessInstruction): - (JSC::CodeBlock::propertyAccessInstruction): - (JSC::CodeBlock::numberOfCallLinkInfos): - (JSC::CodeBlock::addCallLinkInfo): - (JSC::CodeBlock::callLinkInfo): - (JSC::CodeBlock::numberOfJumpTargets): - (JSC::CodeBlock::addJumpTarget): - (JSC::CodeBlock::jumpTarget): - (JSC::CodeBlock::lastJumpTarget): - (JSC::CodeBlock::numberOfExceptionHandlers): - (JSC::CodeBlock::addExceptionHandler): - (JSC::CodeBlock::exceptionHandler): - (JSC::CodeBlock::addExpressionInfo): - (JSC::CodeBlock::numberOfLineInfos): - (JSC::CodeBlock::addLineInfo): - (JSC::CodeBlock::lastLineInfo): - (JSC::CodeBlock::jitReturnAddressVPCMap): - (JSC::CodeBlock::numberOfIdentifiers): - (JSC::CodeBlock::addIdentifier): - (JSC::CodeBlock::identifier): - (JSC::CodeBlock::numberOfConstantRegisters): - (JSC::CodeBlock::addConstantRegister): - (JSC::CodeBlock::constantRegister): - (JSC::CodeBlock::addFunction): - (JSC::CodeBlock::function): - (JSC::CodeBlock::addFunctionExpression): - (JSC::CodeBlock::functionExpression): - (JSC::CodeBlock::addUnexpectedConstant): - (JSC::CodeBlock::unexpectedConstant): - (JSC::CodeBlock::addRegExp): - (JSC::CodeBlock::regexp): - (JSC::CodeBlock::symbolTable): - (JSC::CodeBlock::evalCodeCache): - New inline setters/getters. - - (JSC::ProgramCodeBlock::ProgramCodeBlock): - (JSC::ProgramCodeBlock::~ProgramCodeBlock): - (JSC::ProgramCodeBlock::clearGlobalObject): - * bytecode/SamplingTool.cpp: - (JSC::ScopeSampleRecord::sample): - (JSC::SamplingTool::dump): - * bytecompiler/BytecodeGenerator.cpp: - * bytecompiler/BytecodeGenerator.h: - * bytecompiler/Label.h: - * interpreter/CallFrame.cpp: - * interpreter/Interpreter.cpp: - * jit/JIT.cpp: - * jit/JITCall.cpp: - * jit/JITInlineMethods.h: - * jit/JITPropertyAccess.cpp: - * parser/Nodes.cpp: - * runtime/Arguments.h: - * runtime/ExceptionHelpers.cpp: - * runtime/JSActivation.cpp: - * runtime/JSActivation.h: - * runtime/JSGlobalObject.cpp: - Change direct access to use new getter/setters. - -2008-12-05 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Prevent GCC4.2 from hanging when trying to compile Interpreter.cpp. - Added "-fno-var-tracking" compiler flag. - - https://bugs.webkit.org/show_bug.cgi?id=22704 - - * JavaScriptCore.xcodeproj/project.pbxproj: - -2008-12-05 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Ordering of branch operands in MacroAssembler in unnecessarily inconsistent. - - je, jg etc take an immediate operand as the second argument, but for the - equality branches (je, jne) the immediate operand was the first argument. This - was unnecessarily inconsistent. Change je, jne methods to take the immediate - as the second argument. - - https://bugs.webkit.org/show_bug.cgi?id=22703 - - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::je32): - (JSC::MacroAssembler::jne32): - * jit/JIT.cpp: - (JSC::JIT::compileOpStrictEq): - * wrec/WRECGenerator.cpp: - (JSC::WREC::Generator::generateEnter): - (JSC::WREC::Generator::generateNonGreedyQuantifier): - (JSC::WREC::Generator::generateGreedyQuantifier): - (JSC::WREC::Generator::generatePatternCharacterPair): - (JSC::WREC::Generator::generatePatternCharacter): - (JSC::WREC::Generator::generateCharacterClassInvertedRange): - (JSC::WREC::Generator::generateCharacterClassInverted): - (JSC::WREC::Generator::generateAssertionBOL): - (JSC::WREC::Generator::generateAssertionWordBoundary): - -2008-12-05 Gavin Barraclough - - Reviewed by Geoff Garen. - - Second tranche of porting JIT.cpp to MacroAssembler interface. - - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::mul32): - (JSC::MacroAssembler::jl32): - (JSC::MacroAssembler::jnzSub32): - (JSC::MacroAssembler::joAdd32): - (JSC::MacroAssembler::joMul32): - (JSC::MacroAssembler::jzSub32): - * jit/JIT.cpp: - (JSC::JIT::emitSlowScriptCheck): - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JIT.h: - * jit/JITInlineMethods.h: - (JSC::JIT::emitJumpIfNotJSCell): - (JSC::JIT::emitJumpSlowCaseIfNotJSCell): - -2008-12-05 David Kilzer - - Bug 22609: Provide a build-time choice when generating hash tables for properties of built-in DOM objects - - - - - Reviewed by Darin Adler. - - Initial patch by Yosen Lin. Adapted for ToT WebKit by David Kilzer. - - Added back the code that generates a "compact" hash (instead of a - perfect hash) as a build-time option using the - ENABLE(PERFECT_HASH_SIZE) macro as defined in Lookup.h. - - * create_hash_table: Rename variables to differentiate perfect hash - values from compact hash values. Added back code to compute compact - hash tables. Generate both hash table sizes and emit - conditionalized code based on ENABLE(PERFECT_HASH_SIZE). - * runtime/Lookup.cpp: - (JSC::HashTable::createTable): Added version of createTable() for - use with compact hash tables. - (JSC::HashTable::deleteTable): Updated to work with compact hash - tables. - * runtime/Lookup.h: Defined ENABLE(PERFECT_HASH_SIZE) macro here. - (JSC::HashEntry::initialize): Set m_next to zero when using compact - hash tables. - (JSC::HashEntry::setNext): Added for compact hash tables. - (JSC::HashEntry::next): Added for compact hash tables. - (JSC::HashTable::entry): Added version of entry() for use with - compact hash tables. - * runtime/Structure.cpp: - (JSC::Structure::getEnumerablePropertyNames): Updated to work with - compact hash tables. - -2008-12-05 Gavin Barraclough - - Reviewed by Geoff Garen. - - Remove redundant calls to JIT::emitSlowScriptCheck. - This is checked in the hot path, so is not needed on the slow path - and the code - was being planted before the start of the slow case, so was completely unreachable! - - * jit/JIT.cpp: - (JSC::JIT::privateCompileSlowCases): - -2008-12-05 Gavin Barraclough - - Reviewed by Geoff Garen. - - Move JIT::compileOpStrictEq to MacroAssembler interface. - - The rewrite also looks like a small (<1%) performance progression. - - https://bugs.webkit.org/show_bug.cgi?id=22697 - - * jit/JIT.cpp: - (JSC::JIT::compileOpStrictEq): - (JSC::JIT::privateCompileSlowCases): - * jit/JIT.h: - * jit/JITInlineMethods.h: - (JSC::JIT::emitJumpIfJSCell): - (JSC::JIT::emitJumpSlowCaseIfJSCell): - -2008-12-05 Gavin Barraclough - - Reviewed by Geoff Garen. - - Remove m_assembler from MacroAssembler::Jump. - Keeping a pointer allowed for some syntactic sugar - "link()" looks nicer - than "link(this)". But maintaining this doubles the size of Jump, which - is even more unfortunate for the JIT, since there are many large structures - holding JmpSrcs. Probably best to remove it. - - https://bugs.webkit.org/show_bug.cgi?id=22693 - - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::Jump::Jump): - (JSC::MacroAssembler::Jump::link): - (JSC::MacroAssembler::Jump::linkTo): - (JSC::MacroAssembler::JumpList::link): - (JSC::MacroAssembler::JumpList::linkTo): - (JSC::MacroAssembler::jae32): - (JSC::MacroAssembler::je32): - (JSC::MacroAssembler::je16): - (JSC::MacroAssembler::jg32): - (JSC::MacroAssembler::jge32): - (JSC::MacroAssembler::jl32): - (JSC::MacroAssembler::jle32): - (JSC::MacroAssembler::jnePtr): - (JSC::MacroAssembler::jne32): - (JSC::MacroAssembler::jnset32): - (JSC::MacroAssembler::jset32): - (JSC::MacroAssembler::jump): - (JSC::MacroAssembler::jzSub32): - (JSC::MacroAssembler::joAdd32): - (JSC::MacroAssembler::call): - * wrec/WREC.cpp: - (JSC::WREC::Generator::compileRegExp): - * wrec/WRECGenerator.cpp: - (JSC::WREC::Generator::generateEnter): - (JSC::WREC::Generator::generateBackreferenceQuantifier): - (JSC::WREC::Generator::generateNonGreedyQuantifier): - (JSC::WREC::Generator::generateGreedyQuantifier): - (JSC::WREC::Generator::generatePatternCharacter): - (JSC::WREC::Generator::generateCharacterClassInvertedRange): - (JSC::WREC::Generator::generateCharacterClassInverted): - (JSC::WREC::Generator::generateCharacterClass): - (JSC::WREC::Generator::generateParenthesesAssertion): - (JSC::WREC::Generator::generateParenthesesInvertedAssertion): - (JSC::WREC::Generator::generateParenthesesNonGreedy): - (JSC::WREC::Generator::generateParenthesesResetTrampoline): - (JSC::WREC::Generator::generateAssertionBOL): - (JSC::WREC::Generator::generateAssertionEOL): - (JSC::WREC::Generator::generateAssertionWordBoundary): - (JSC::WREC::Generator::generateBackreference): - (JSC::WREC::Generator::terminateAlternative): - (JSC::WREC::Generator::terminateDisjunction): - * wrec/WRECParser.h: - -2008-12-05 Gavin Barraclough - - Reviewed by Geoffrey Garen. - - Simplify JIT generated checks for timeout code, by moving more work into the C function. - https://bugs.webkit.org/show_bug.cgi?id=22688 - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::cti_timeout_check): - * interpreter/Interpreter.h: - * jit/JIT.cpp: - (JSC::JIT::emitSlowScriptCheck): - -2008-12-05 Sam Weinig - - Reviewed by Geoffrey Garen. - - Encapsulate access to jump tables in the CodeBlock in preparation - of moving them to a rare data structure. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): - (JSC::CodeBlock::shrinkToFit): - * bytecode/CodeBlock.h: - (JSC::CodeBlock::numberOfImmediateSwitchJumpTables): - (JSC::CodeBlock::addImmediateSwitchJumpTable): - (JSC::CodeBlock::immediateSwitchJumpTable): - (JSC::CodeBlock::numberOfCharacterSwitchJumpTables): - (JSC::CodeBlock::addCharacterSwitchJumpTable): - (JSC::CodeBlock::characterSwitchJumpTable): - (JSC::CodeBlock::numberOfStringSwitchJumpTables): - (JSC::CodeBlock::addStringSwitchJumpTable): - (JSC::CodeBlock::stringSwitchJumpTable): - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::generate): - (JSC::BytecodeGenerator::endSwitch): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - (JSC::Interpreter::cti_op_switch_imm): - (JSC::Interpreter::cti_op_switch_char): - (JSC::Interpreter::cti_op_switch_string): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - -2008-12-05 Adam Roben - - Windows build fix after r39020 - - * jit/JITInlineMethods.h: - (JSC::JIT::restoreArgumentReference): - (JSC::JIT::restoreArgumentReferenceForTrampoline): - Add some apparently-missing __. - -2008-12-04 Geoffrey Garen - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=22673 - - Added support for the assertion (?=) and inverted assertion (?!) atoms - in WREC. - - * wrec/WRECGenerator.cpp: - (JSC::WREC::Generator::generateParenthesesAssertion): - (JSC::WREC::Generator::generateParenthesesInvertedAssertion): Split the - old (unused) generateParentheses into these two functions, with more - limited capabilities. - - * wrec/WRECGenerator.h: - (JSC::WREC::Generator::): Moved an enum to the top of the class definition, - to match the WebKit style, and removed a defunct comment. - - * wrec/WRECParser.cpp: - (JSC::WREC::Parser::parseParentheses): - (JSC::WREC::Parser::consumeParenthesesType): - * wrec/WRECParser.h: - (JSC::WREC::Parser::): Added support for parsing (?=) and (?!). - -2008-12-05 Simon Hausmann - - Rubber-stamped by Tor Arne Vestbø. - - Disable the JIT for the Qt build alltogether again, after observing - more miscompilations in a wider range of newer gcc versions. - - * JavaScriptCore.pri: - -2008-12-05 Simon Hausmann - - Reviewed by Tor Arne Vestbø. - - Disable the JIT for the Qt build on Linux unless gcc is >= 4.2, - due to miscompilations. - - * JavaScriptCore.pri: - -2008-12-04 Gavin Barraclough - - Reviewed by Geoff Garen. - - Start porting the JIT to use the MacroAssembler. - - https://bugs.webkit.org/show_bug.cgi?id=22671 - No change in performance. - - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::Jump::operator X86Assembler::JmpSrc): - (JSC::MacroAssembler::add32): - (JSC::MacroAssembler::and32): - (JSC::MacroAssembler::lshift32): - (JSC::MacroAssembler::rshift32): - (JSC::MacroAssembler::storePtr): - (JSC::MacroAssembler::store32): - (JSC::MacroAssembler::poke): - (JSC::MacroAssembler::move): - (JSC::MacroAssembler::compareImm32ForBranchEquality): - (JSC::MacroAssembler::jnePtr): - (JSC::MacroAssembler::jnset32): - (JSC::MacroAssembler::jset32): - (JSC::MacroAssembler::jzeroSub32): - (JSC::MacroAssembler::joverAdd32): - (JSC::MacroAssembler::call): - * assembler/X86Assembler.h: - (JSC::X86Assembler::shll_i8r): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompile): - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JIT.h: - * jit/JITArithmetic.cpp: - (JSC::JIT::compileBinaryArithOp): - * jit/JITInlineMethods.h: - (JSC::JIT::emitGetVirtualRegister): - (JSC::JIT::emitPutCTIArg): - (JSC::JIT::emitPutCTIArgConstant): - (JSC::JIT::emitGetCTIArg): - (JSC::JIT::emitPutCTIArgFromVirtualRegister): - (JSC::JIT::emitPutCTIParam): - (JSC::JIT::emitGetCTIParam): - (JSC::JIT::emitPutToCallFrameHeader): - (JSC::JIT::emitPutImmediateToCallFrameHeader): - (JSC::JIT::emitGetFromCallFrameHeader): - (JSC::JIT::emitPutVirtualRegister): - (JSC::JIT::emitInitRegister): - (JSC::JIT::emitNakedCall): - (JSC::JIT::restoreArgumentReference): - (JSC::JIT::restoreArgumentReferenceForTrampoline): - (JSC::JIT::emitCTICall): - (JSC::JIT::checkStructure): - (JSC::JIT::emitJumpSlowCaseIfNotJSCell): - (JSC::JIT::emitJumpSlowCaseIfNotImmNum): - (JSC::JIT::emitJumpSlowCaseIfNotImmNums): - (JSC::JIT::emitFastArithDeTagImmediate): - (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): - (JSC::JIT::emitFastArithReTagImmediate): - (JSC::JIT::emitFastArithPotentiallyReTagImmediate): - (JSC::JIT::emitFastArithImmToInt): - (JSC::JIT::emitFastArithIntToImmOrSlowCase): - (JSC::JIT::emitFastArithIntToImmNoCheck): - (JSC::JIT::emitTagAsBoolImmediate): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompilePutByIdTransition): - -2008-12-04 Geoffrey Garen - - Reviewed by Oliver Hunt. - - Some refactoring for generateGreedyQuantifier. - - SunSpider reports no change (possibly a 0.3% speedup). - - * wrec/WRECGenerator.cpp: - (JSC::WREC::Generator::generateGreedyQuantifier): Clarified label - meanings and unified some logic to simplify things. - - * wrec/WRECParser.h: - (JSC::WREC::Parser::parseAlternative): Added a version of parseAlternative - that can jump to a Label, instead of a JumpList, upon failure. (Eventually, - when we have a true Label class, this will be redundant.) This makes - things easier for generateGreedyQuantifier, because it can avoid - explicitly linking things. - -2008-12-04 Simon Hausmann - - Reviewed by Holger Freyther. - - Fix crashes in the Qt build on Linux/i386 with non-executable memory - by enabling TCSystemAlloc and the PROT_EXEC flag for mmap. - - * JavaScriptCore.pri: Enable the use of TCSystemAlloc if the JIT is - enabled. - * wtf/TCSystemAlloc.cpp: Extend the PROT_EXEC permissions to - PLATFORM(QT). - -2008-12-04 Simon Hausmann - - Reviewed by Tor Arne Vestbø. - - Enable ENABLE_JIT_OPTIMIZE_CALL, ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS - and ENABLE_JIT_OPTIMIZE_ARITHMETIC, as suggested by Niko. - - * JavaScriptCore.pri: - -2008-12-04 Kent Hansen - - Reviewed by Simon Hausmann. - - Enable the JSC jit for the Qt build by default for release builds on - linux-g++ and win32-msvc. - - * JavaScriptCore.pri: - -2008-12-04 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Allow JIT to function without property access repatching and arithmetic optimizations. - Controlled by ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS and ENABLE_JIT_OPTIMIZE_ARITHMETIC switches. - - https://bugs.webkit.org/show_bug.cgi?id=22643 - - * JavaScriptCore.xcodeproj/project.pbxproj: - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - * jit/JIT.h: - * jit/JITArithmetic.cpp: Copied from jit/JIT.cpp. - (JSC::JIT::compileBinaryArithOp): - (JSC::JIT::compileBinaryArithOpSlowCase): - * jit/JITPropertyAccess.cpp: Copied from jit/JIT.cpp. - (JSC::JIT::compileGetByIdHotPath): - (JSC::JIT::compileGetByIdSlowCase): - (JSC::JIT::compilePutByIdHotPath): - (JSC::JIT::compilePutByIdSlowCase): - (JSC::resizePropertyStorage): - (JSC::transitionWillNeedStorageRealloc): - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::patchGetByIdSelf): - (JSC::JIT::patchPutByIdReplace): - (JSC::JIT::privateCompilePatchGetArrayLength): - * wtf/Platform.h: - -2008-12-03 Geoffrey Garen - - Reviewed by Oliver Hunt. - - Optimized sequences of characters in regular expressions by comparing - two characters at a time. - - 1-2% speedup on SunSpider, 19-25% speedup on regexp-dna. - - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::load32): - (JSC::MacroAssembler::jge32): Filled out a few more macro methods. - - * assembler/X86Assembler.h: - (JSC::X86Assembler::movl_mr): Added a verion of movl_mr that operates - without an offset, to allow the macro assembler to optmize for that case. - - * wrec/WREC.cpp: - (JSC::WREC::Generator::compileRegExp): Test the saved value of index - instead of the index register when checking for "end of input." The - index register doesn't increment by 1 in an orderly fashion, so testing - it for == "end of input" is not valid. - - Also, jump all the way to "return failure" upon reaching "end of input," - instead of executing the next alternative. This is more logical, and - it's a slight optimization in the case of an expression with many alternatives. - - * wrec/WRECGenerator.cpp: - (JSC::WREC::Generator::generateIncrementIndex): Added support for - jumping to a failure label in the case where the index has reached "end - of input." - - (JSC::WREC::Generator::generatePatternCharacterSequence): - (JSC::WREC::Generator::generatePatternCharacterPair): This is the - optmization. It's basically like generatePatternCharacter, but it runs two - characters at a time. - - (JSC::WREC::Generator::generatePatternCharacter): Changed to use isASCII, - since it's clearer than comparing to a magic hex value. - - * wrec/WRECGenerator.h: - -2008-12-03 Gavin Barraclough - - Reviewed by Cameron Zwarich. - - Allow JIT to operate without the call-repatching optimization. - Controlled by ENABLE(JIT_OPTIMIZE_CALL), defaults on, disabling - this leads to significant performance regression. - - https://bugs.webkit.org/show_bug.cgi?id=22639 - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * jit/JIT.cpp: - (JSC::JIT::privateCompileSlowCases): - * jit/JIT.h: - * jit/JITCall.cpp: Copied from jit/JIT.cpp. - (JSC::JIT::compileOpCallInitializeCallFrame): - (JSC::JIT::compileOpCallSetupArgs): - (JSC::JIT::compileOpCallEvalSetupArgs): - (JSC::JIT::compileOpConstructSetupArgs): - (JSC::JIT::compileOpCall): - (JSC::JIT::compileOpCallSlowCase): - (JSC::unreachable): - * jit/JITInlineMethods.h: Copied from jit/JIT.cpp. - (JSC::JIT::checkStructure): - (JSC::JIT::emitFastArithPotentiallyReTagImmediate): - (JSC::JIT::emitTagAsBoolImmediate): - * wtf/Platform.h: - -2008-12-03 Eric Seidel - - Rubber-stamped by David Hyatt. - - Make HAVE_ACCESSIBILITY only define if !defined - - * wtf/Platform.h: - -2008-12-03 Sam Weinig - - Fix build. - - * assembler/X86Assembler.h: - (JSC::X86Assembler::orl_i32r): - -2008-12-03 Sam Weinig - - Reviewed by Geoffrey Garen. - - Remove shared AssemblerBuffer 1MB buffer and instead give AssemblerBuffer - an 256 byte inline capacity. - - 1% progression on Sunspider. - - * assembler/AssemblerBuffer.h: - (JSC::AssemblerBuffer::AssemblerBuffer): - (JSC::AssemblerBuffer::~AssemblerBuffer): - (JSC::AssemblerBuffer::grow): - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::MacroAssembler): - * assembler/X86Assembler.h: - (JSC::X86Assembler::X86Assembler): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::Interpreter): - * interpreter/Interpreter.h: - * jit/JIT.cpp: - (JSC::JIT::JIT): - * parser/Nodes.cpp: - (JSC::RegExpNode::emitBytecode): - * runtime/RegExp.cpp: - (JSC::RegExp::RegExp): - (JSC::RegExp::create): - * runtime/RegExp.h: - * runtime/RegExpConstructor.cpp: - (JSC::constructRegExp): - * runtime/RegExpPrototype.cpp: - (JSC::regExpProtoFuncCompile): - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncMatch): - (JSC::stringProtoFuncSearch): - * wrec/WREC.cpp: - (JSC::WREC::Generator::compileRegExp): - * wrec/WRECGenerator.h: - (JSC::WREC::Generator::Generator): - * wrec/WRECParser.h: - (JSC::WREC::Parser::Parser): - -2008-12-03 Geoffrey Garen - - Reviewed by Oliver Hunt, with help from Gavin Barraclough. - - orl_i32r was actually coded as an 8bit OR. So, I renamed orl_i32r to - orl_i8r, changed all orl_i32r clients to use orl_i8r, and then added - a new orl_i32r that actually does a 32bit OR. - - (32bit OR is currently unused, but a patch I'm working on uses it.) - - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::or32): Updated to choose between 8bit and 32bit OR. - - * assembler/X86Assembler.h: - (JSC::X86Assembler::orl_i8r): The old orl_i32r. - (JSC::X86Assembler::orl_i32r): The new orl_i32r. - - * jit/JIT.cpp: - (JSC::JIT::emitFastArithPotentiallyReTagImmediate): - (JSC::JIT::emitTagAsBoolImmediate): Use orl_i8r, since we're ORing 8bit - values. - -2008-12-03 Dean Jackson - - Reviewed by Dan Bernstein. - - Helper functions for turn -> degrees. - https://bugs.webkit.org/show_bug.cgi?id=22497 - - * wtf/MathExtras.h: - (turn2deg): - (deg2turn): - -2008-12-02 Cameron Zwarich - - Reviewed by Geoff Garen. - - Bug 22504: Crashes during code generation occur due to refing of ignoredResult() - - - Since ignoredResult() was implemented by casting 1 to a RegisterID*, any - attempt to ref ignoredResult() results in a crash. This will occur in - code generation of a function body where a node emits another node with - the dst that was passed to it, and then refs the returned RegisterID*. - - To fix this problem, make ignoredResult() a member function of - BytecodeGenerator that simply returns a pointe to a fixed RegisterID - member of BytecodeGenerator. - - * bytecompiler/BytecodeGenerator.h: - (JSC::BytecodeGenerator::ignoredResult): - * bytecompiler/RegisterID.h: - * parser/Nodes.cpp: - (JSC::NullNode::emitBytecode): - (JSC::BooleanNode::emitBytecode): - (JSC::NumberNode::emitBytecode): - (JSC::StringNode::emitBytecode): - (JSC::RegExpNode::emitBytecode): - (JSC::ThisNode::emitBytecode): - (JSC::ResolveNode::emitBytecode): - (JSC::ObjectLiteralNode::emitBytecode): - (JSC::PostfixResolveNode::emitBytecode): - (JSC::PostfixBracketNode::emitBytecode): - (JSC::PostfixDotNode::emitBytecode): - (JSC::DeleteValueNode::emitBytecode): - (JSC::VoidNode::emitBytecode): - (JSC::TypeOfResolveNode::emitBytecode): - (JSC::TypeOfValueNode::emitBytecode): - (JSC::PrefixResolveNode::emitBytecode): - (JSC::AssignResolveNode::emitBytecode): - (JSC::CommaNode::emitBytecode): - (JSC::ForNode::emitBytecode): - (JSC::ForInNode::emitBytecode): - (JSC::ReturnNode::emitBytecode): - (JSC::ThrowNode::emitBytecode): - (JSC::FunctionBodyNode::emitBytecode): - (JSC::FuncDeclNode::emitBytecode): - -2008-12-02 Geoffrey Garen - - Reviewed by Cameron Zwarich. - - Fixed https://bugs.webkit.org/show_bug.cgi?id=22537 - REGRESSION (r38745): Assertion failure in jsSubstring() at ge.com - - The bug was that index would become greater than length, so our - "end of input" checks, which all check "index == length", would fail. - - The solution is to check for end of input before incrementing index, - to ensure that index is always <= length. - - As a side benefit, generateJumpIfEndOfInput can now use je instead of - jg, which should be slightly faster. - - * wrec/WREC.cpp: - (JSC::WREC::Generator::compileRegExp): - * wrec/WRECGenerator.cpp: - (JSC::WREC::Generator::generateJumpIfEndOfInput): - -2008-12-02 Gavin Barraclough - - Reviewed by Geoffrey Garen. - - Plant shift right immediate instructions, which are awesome. - https://bugs.webkit.org/show_bug.cgi?id=22610 - ~5% on the v8-crypto test. - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - -2008-12-02 Geoffrey Garen - - Reviewed by Sam Weinig. - - Cleaned up SegmentedVector by abstracting segment access into helper - functions. - - SunSpider reports no change. - - * bytecompiler/SegmentedVector.h: - (JSC::SegmentedVector::SegmentedVector): - (JSC::SegmentedVector::~SegmentedVector): - (JSC::SegmentedVector::size): - (JSC::SegmentedVector::at): - (JSC::SegmentedVector::operator[]): - (JSC::SegmentedVector::last): - (JSC::SegmentedVector::append): - (JSC::SegmentedVector::removeLast): - (JSC::SegmentedVector::grow): - (JSC::SegmentedVector::clear): - (JSC::SegmentedVector::deleteAllSegments): - (JSC::SegmentedVector::segmentFor): - (JSC::SegmentedVector::subscriptFor): - (JSC::SegmentedVector::ensureSegmentsFor): - (JSC::SegmentedVector::ensureSegment): - -2008-12-02 Geoffrey Garen - - Reviewed by Geoffrey Garen. (Patch by Cameron Zwarich .) - - Fixed https://bugs.webkit.org/show_bug.cgi?id=22482 - REGRESSION (r37991): Occasionally see "Scene rendered incorrectly" - message when running the V8 Raytrace benchmark - - Rolled out r37991. It didn't properly save xmm0, which is caller-save, - before calling helper functions. - - SunSpider and v8 benchmarks show little change -- possibly a .2% - SunSpider regression, possibly a .2% v8 benchmark speedup. - - * assembler/X86Assembler.h: - (JSC::X86Assembler::): - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * bytecode/Instruction.h: - (JSC::Instruction::): - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitUnaryOp): - * bytecompiler/BytecodeGenerator.h: - (JSC::BytecodeGenerator::emitToJSNumber): - (JSC::BytecodeGenerator::emitTypeOf): - (JSC::BytecodeGenerator::emitGetPropertyNames): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - * interpreter/Interpreter.h: - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - * jit/JIT.h: - * parser/Nodes.cpp: - (JSC::UnaryOpNode::emitBytecode): - (JSC::BinaryOpNode::emitBytecode): - (JSC::EqualNode::emitBytecode): - * parser/ResultType.h: - (JSC::ResultType::isReusable): - (JSC::ResultType::mightBeNumber): - * runtime/JSNumberCell.h: - -2008-12-01 Gavin Barraclough - - Reviewed by Geoffrey Garen. - - Remove unused (sampling only, and derivable) argument to JIT::emitCTICall. - https://bugs.webkit.org/show_bug.cgi?id=22587 - - * jit/JIT.cpp: - (JSC::JIT::emitCTICall): - (JSC::JIT::compileOpCall): - (JSC::JIT::emitSlowScriptCheck): - (JSC::JIT::compileBinaryArithOpSlowCase): - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - (JSC::JIT::privateCompile): - * jit/JIT.h: - -2008-12-02 Dimitri Glazkov - - Reviewed by Eric Seidel. - - Fix the inheritance chain for JSFunction. - - * runtime/JSFunction.cpp: - (JSC::JSFunction::info): Add InternalFunction::info as parent class - -2008-12-02 Simon Hausmann - - Reviewed by Tor Arne Vestbø. - - Fix ability to include JavaScriptCore.pri from other .pro files. - - * JavaScriptCore.pri: Moved -O3 setting into the .pro files. - * JavaScriptCore.pro: - * jsc.pro: - -2008-12-01 Geoffrey Garen - - Reviewed by Cameron Zwarich, with help from Gavin Barraclough. - - Fixed https://bugs.webkit.org/show_bug.cgi?id=22583. - - Refactored regular expression parsing to parse sequences of characters - as a single unit, in preparation for optimizing sequences of characters. - - SunSpider reports no change. - - * JavaScriptCore.xcodeproj/project.pbxproj: - * wrec/Escapes.h: Added. Set of classes for representing an escaped - token in a pattern. - - * wrec/Quantifier.h: - (JSC::WREC::Quantifier::Quantifier): Simplified this constructor slightly, - to match the new Escape constructor. - - * wrec/WRECGenerator.cpp: - (JSC::WREC::Generator::generatePatternCharacterSequence): - * wrec/WRECGenerator.h: Added an interface for generating a sequence - of pattern characters at a time. It doesn't do anything special yet. - - * wrec/WRECParser.cpp: - (JSC::WREC::Parser::consumeGreedyQuantifier): - (JSC::WREC::Parser::consumeQuantifier): Renamed "parse" to "consume" in - these functions, to match "consumeEscape." - - (JSC::WREC::Parser::parsePatternCharacterSequence): New function for - iteratively aggregating a sequence of characters in a pattern. - - (JSC::WREC::Parser::parseCharacterClassQuantifier): - (JSC::WREC::Parser::parseBackreferenceQuantifier): Renamed "parse" to - "consume" in these functions, to match "consumeEscape." - - (JSC::WREC::Parser::parseCharacterClass): Refactored to use the common - escape processing code in consumeEscape. - - (JSC::WREC::Parser::parseEscape): Refactored to use the common - escape processing code in consumeEscape. - - (JSC::WREC::Parser::consumeEscape): Factored escaped token processing - into a common function, since we were doing this in a few places. - - (JSC::WREC::Parser::parseTerm): Refactored to use the common - escape processing code in consumeEscape. - - * wrec/WRECParser.h: - (JSC::WREC::Parser::consumeOctal): Refactored to use a helper function - for reading a digit. - -2008-12-01 Cameron Zwarich - - Reviewed by Oliver Hunt. - - Bug 20340: SegmentedVector segment allocations can lead to unsafe use of temporary registers - - - SegmentedVector currently frees segments and reallocates them when used - as a stack. This can lead to unsafe use of pointers into freed segments. - - In order to fix this problem, SegmentedVector will be changed to only - grow and never shrink. Also, rename the reserveCapacity() member - function to grow() to match the actual usage in BytecodeGenerator, where - this function is used to allocate a group of registers at once, rather - than merely saving space for them. - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::BytecodeGenerator): Use grow() instead of - reserveCapacity(). - * bytecompiler/SegmentedVector.h: - (JSC::SegmentedVector::SegmentedVector): - (JSC::SegmentedVector::last): - (JSC::SegmentedVector::append): - (JSC::SegmentedVector::removeLast): - (JSC::SegmentedVector::grow): Renamed from reserveCapacity(). - (JSC::SegmentedVector::clear): - -2008-12-01 Mark Rowe - - Rubber-stamped by Anders Carlsson. - - Disable WREC for x86_64 since memory allocated by the system allocator is not marked executable, - which causes 64-bit debug builds to crash. Once we have a dedicated allocator for executable - memory we can turn this back on. - - * wtf/Platform.h: - -2008-12-01 Antti Koivisto - - Reviewed by Maciej Stachowiak. - - Restore inline buffer after vector is shrunk back below its inline capacity. - - * wtf/Vector.h: - (WTF::): - (WTF::VectorBuffer::restoreInlineBufferIfNeeded): - (WTF::::shrinkCapacity): - -2008-11-30 Antti Koivisto - - Reviewed by Mark Rowe. - - Try to return free pages in the current thread cache too. - - * wtf/FastMalloc.cpp: - (WTF::TCMallocStats::releaseFastMallocFreeMemory): - -2008-12-01 David Levin - - Reviewed by Alexey Proskuryakov. - - https://bugs.webkit.org/show_bug.cgi?id=22567 - Make HashTable work as expected with respect to threads. Specifically, it has class-level - thread safety and constant methods work on constant objects without synchronization. - - No observable change in behavior, so no test. This only affects debug builds. - - * wtf/HashTable.cpp: - (WTF::hashTableStatsMutex): - (WTF::HashTableStats::~HashTableStats): - (WTF::HashTableStats::recordCollisionAtCount): - Guarded variable access with a mutex. - - * wtf/HashTable.h: - (WTF::::lookup): - (WTF::::lookupForWriting): - (WTF::::fullLookupForWriting): - (WTF::::add): - (WTF::::reinsert): - (WTF::::remove): - (WTF::::rehash): - Changed increments of static variables to use atomicIncrement. - - (WTF::::invalidateIterators): - (WTF::addIterator): - (WTF::removeIterator): - Guarded mutable access with a mutex. - -2008-11-29 Gavin Barraclough - - Reviewed by Cameron Zwarich. - - Enable WREC on PLATFORM(X86_64). This change predominantly requires changes to the - WREC::Generator::generateEnter method to support the x86-64 ABI, and addition of - support for a limited number of quadword operations in the X86Assembler. - - This patch will cause the JS heap to be allocated with RWX permissions on 64-bit Mac - platforms. This is a regression with respect to previous 64-bit behaviour, but is no - more permissive than on 32-bit builds. This issue should be addressed at some point. - (This is tracked by bug #21783.) - - https://bugs.webkit.org/show_bug.cgi?id=22554 - Greater than 4x speedup on regexp-dna, on x86-64. - - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::addPtr): - (JSC::MacroAssembler::loadPtr): - (JSC::MacroAssembler::storePtr): - (JSC::MacroAssembler::pop): - (JSC::MacroAssembler::push): - (JSC::MacroAssembler::move): - * assembler/X86Assembler.h: - (JSC::X86Assembler::): - (JSC::X86Assembler::movq_rr): - (JSC::X86Assembler::addl_i8m): - (JSC::X86Assembler::addl_i32r): - (JSC::X86Assembler::addq_i8r): - (JSC::X86Assembler::addq_i32r): - (JSC::X86Assembler::movq_mr): - (JSC::X86Assembler::movq_rm): - * wrec/WREC.h: - * wrec/WRECGenerator.cpp: - (JSC::WREC::Generator::generateEnter): - (JSC::WREC::Generator::generateReturnSuccess): - (JSC::WREC::Generator::generateReturnFailure): - * wtf/Platform.h: - * wtf/TCSystemAlloc.cpp: - -2008-12-01 Cameron Zwarich - - Reviewed by Sam Weinig. - - Preliminary work for bug 20340: SegmentedVector segment allocations can lead to unsafe use of temporary registers - - - SegmentedVector currently frees segments and reallocates them when used - as a stack. This can lead to unsafe use of pointers into freed segments. - - In order to fix this problem, SegmentedVector will be changed to only - grow and never shrink, with the sole exception of clearing all of its - data, a capability that is required by Lexer. This patch changes the - public interface to only allow for these capabilities. - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::BytecodeGenerator): Use reserveCapacity() - instead of resize() for m_globals and m_parameters. - * bytecompiler/SegmentedVector.h: - (JSC::SegmentedVector::resize): Removed. - (JSC::SegmentedVector::reserveCapacity): Added. - (JSC::SegmentedVector::clear): Added. - (JSC::SegmentedVector::shrink): Removed. - (JSC::SegmentedVector::grow): Removed. - * parser/Lexer.cpp: - (JSC::Lexer::clear): Use clear() instead of resize(0). - -2008-11-30 Sam Weinig - - Reviewed by Mark Rowe. - - Renames jumps to m_jumps in JumpList. - - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::JumpList::link): - (JSC::MacroAssembler::JumpList::linkTo): - (JSC::MacroAssembler::JumpList::append): - -2008-11-30 Antti Koivisto - - Reviewed by Mark Rowe. - - https://bugs.webkit.org/show_bug.cgi?id=22557 - - Report free size in central and thread caches too. - - * wtf/FastMalloc.cpp: - (WTF::TCMallocStats::fastMallocStatistics): - * wtf/FastMalloc.h: - -2008-11-29 Antti Koivisto - - Reviewed by Dan Bernstein. - - https://bugs.webkit.org/show_bug.cgi?id=22557 - Add statistics for JavaScript GC heap. - - * JavaScriptCore.exp: - * runtime/Collector.cpp: - (JSC::Heap::objectCount): - (JSC::addToStatistics): - (JSC::Heap::statistics): - * runtime/Collector.h: - -2008-11-29 Antti Koivisto - - Fix debug build by adding a stub method. - - * wtf/FastMalloc.cpp: - (WTF::fastMallocStatistics): - -2008-11-29 Antti Koivisto - - Reviewed by Alexey Proskuryakov. - - https://bugs.webkit.org/show_bug.cgi?id=22557 - - Add function for getting basic statistics from FastMalloc. - - * JavaScriptCore.exp: - * wtf/FastMalloc.cpp: - (WTF::DLL_Length): - (WTF::TCMalloc_PageHeap::ReturnedBytes): - (WTF::TCMallocStats::fastMallocStatistics): - * wtf/FastMalloc.h: - -2008-11-29 Cameron Zwarich - - Not reviewed. - - The C++ standard does not automatically grant the friendships of an - enclosing class to its nested subclasses, so we should do so explicitly. - This fixes the GCC 4.0 build, although both GCC 4.2 and Visual C++ 2005 - accept the incorrect code as it is. - - * assembler/MacroAssembler.h: - -2008-11-29 Gavin Barraclough - - Reviewed by Cameron Zwarich. - - Add the class MacroAssembler to provide some abstraction of code generation, - and change WREC to make use of this class, rather than directly accessing - the X86Assembler. - - This patch also allows WREC to be compiled without the rest of the JIT enabled. - - * JavaScriptCore.xcodeproj/project.pbxproj: - * assembler/MacroAssembler.h: Added. - (JSC::MacroAssembler::): - (JSC::MacroAssembler::MacroAssembler): - (JSC::MacroAssembler::copyCode): - (JSC::MacroAssembler::Address::Address): - (JSC::MacroAssembler::ImplicitAddress::ImplicitAddress): - (JSC::MacroAssembler::BaseIndex::BaseIndex): - (JSC::MacroAssembler::Label::Label): - (JSC::MacroAssembler::Jump::Jump): - (JSC::MacroAssembler::Jump::link): - (JSC::MacroAssembler::Jump::linkTo): - (JSC::MacroAssembler::JumpList::link): - (JSC::MacroAssembler::JumpList::linkTo): - (JSC::MacroAssembler::JumpList::append): - (JSC::MacroAssembler::Imm32::Imm32): - (JSC::MacroAssembler::add32): - (JSC::MacroAssembler::or32): - (JSC::MacroAssembler::sub32): - (JSC::MacroAssembler::loadPtr): - (JSC::MacroAssembler::load32): - (JSC::MacroAssembler::load16): - (JSC::MacroAssembler::storePtr): - (JSC::MacroAssembler::store32): - (JSC::MacroAssembler::pop): - (JSC::MacroAssembler::push): - (JSC::MacroAssembler::peek): - (JSC::MacroAssembler::poke): - (JSC::MacroAssembler::move): - (JSC::MacroAssembler::compareImm32ForBranch): - (JSC::MacroAssembler::compareImm32ForBranchEquality): - (JSC::MacroAssembler::jae32): - (JSC::MacroAssembler::je32): - (JSC::MacroAssembler::je16): - (JSC::MacroAssembler::jg32): - (JSC::MacroAssembler::jge32): - (JSC::MacroAssembler::jl32): - (JSC::MacroAssembler::jle32): - (JSC::MacroAssembler::jne32): - (JSC::MacroAssembler::jump): - (JSC::MacroAssembler::breakpoint): - (JSC::MacroAssembler::ret): - * assembler/X86Assembler.h: - (JSC::X86Assembler::cmpw_rm): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::Interpreter): - * interpreter/Interpreter.h: - (JSC::Interpreter::assemblerBuffer): - * runtime/RegExp.cpp: - (JSC::RegExp::RegExp): - * wrec/WREC.cpp: - (JSC::WREC::Generator::compileRegExp): - * wrec/WREC.h: - * wrec/WRECFunctors.cpp: - (JSC::WREC::GeneratePatternCharacterFunctor::generateAtom): - (JSC::WREC::GenerateCharacterClassFunctor::generateAtom): - (JSC::WREC::GenerateBackreferenceFunctor::generateAtom): - (JSC::WREC::GenerateParenthesesNonGreedyFunctor::generateAtom): - * wrec/WRECFunctors.h: - (JSC::WREC::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor): - * wrec/WRECGenerator.cpp: - (JSC::WREC::Generator::generateEnter): - (JSC::WREC::Generator::generateReturnSuccess): - (JSC::WREC::Generator::generateSaveIndex): - (JSC::WREC::Generator::generateIncrementIndex): - (JSC::WREC::Generator::generateLoadCharacter): - (JSC::WREC::Generator::generateJumpIfEndOfInput): - (JSC::WREC::Generator::generateJumpIfNotEndOfInput): - (JSC::WREC::Generator::generateReturnFailure): - (JSC::WREC::Generator::generateBacktrack1): - (JSC::WREC::Generator::generateBacktrackBackreference): - (JSC::WREC::Generator::generateBackreferenceQuantifier): - (JSC::WREC::Generator::generateNonGreedyQuantifier): - (JSC::WREC::Generator::generateGreedyQuantifier): - (JSC::WREC::Generator::generatePatternCharacter): - (JSC::WREC::Generator::generateCharacterClassInvertedRange): - (JSC::WREC::Generator::generateCharacterClassInverted): - (JSC::WREC::Generator::generateCharacterClass): - (JSC::WREC::Generator::generateParentheses): - (JSC::WREC::Generator::generateParenthesesNonGreedy): - (JSC::WREC::Generator::generateParenthesesResetTrampoline): - (JSC::WREC::Generator::generateAssertionBOL): - (JSC::WREC::Generator::generateAssertionEOL): - (JSC::WREC::Generator::generateAssertionWordBoundary): - (JSC::WREC::Generator::generateBackreference): - (JSC::WREC::Generator::terminateAlternative): - (JSC::WREC::Generator::terminateDisjunction): - * wrec/WRECGenerator.h: - (JSC::WREC::Generator::Generator): - * wrec/WRECParser.cpp: - (JSC::WREC::Parser::parsePatternCharacterQualifier): - (JSC::WREC::Parser::parseCharacterClassQuantifier): - (JSC::WREC::Parser::parseBackreferenceQuantifier): - (JSC::WREC::Parser::parseParentheses): - (JSC::WREC::Parser::parseCharacterClass): - (JSC::WREC::Parser::parseOctalEscape): - (JSC::WREC::Parser::parseEscape): - (JSC::WREC::Parser::parseTerm): - (JSC::WREC::Parser::parseDisjunction): - * wrec/WRECParser.h: - (JSC::WREC::Parser::Parser): - (JSC::WREC::Parser::parsePattern): - (JSC::WREC::Parser::parseAlternative): - * wtf/Platform.h: - -2008-11-28 Simon Hausmann - - Reviewed by Tor Arne Vestbø. - - Fix compilation on Windows CE - - Port away from the use of errno after calling strtol(), instead - detect conversion errors by checking the result and the stop - position. - - * runtime/DateMath.cpp: - (JSC::parseLong): - (JSC::parseDate): - -2008-11-28 Joerg Bornemann - - Reviewed by Simon Hausmann. - - Implement lowResUTCTime() on Windows CE using GetSystemTime as _ftime() is not available. - - * runtime/DateMath.cpp: - (JSC::lowResUTCTime): - -2008-11-28 Simon Hausmann - - Rubber-stamped by Tor Arne Vestbø. - - Removed unnecessary inclusion of errno.h, which also fixes compilation on Windows CE. - - * runtime/JSGlobalObjectFunctions.cpp: - -2008-11-27 Cameron Zwarich - - Not reviewed. - - r38825 made JSFunction::m_body private, but some inspector code in - WebCore sets the field. Add setters for it. - - * runtime/JSFunction.h: - (JSC::JSFunction::setBody): - -2008-11-27 Sam Weinig - - Reviewed by Cameron Zwarich. - - Fix FIXME by adding accessor for JSFunction's m_body property. - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::cti_op_call_JSFunction): - (JSC::Interpreter::cti_vm_dontLazyLinkCall): - (JSC::Interpreter::cti_vm_lazyLinkCall): - * profiler/Profiler.cpp: - (JSC::createCallIdentifierFromFunctionImp): - * runtime/Arguments.h: - (JSC::Arguments::getArgumentsData): - (JSC::Arguments::Arguments): - * runtime/FunctionPrototype.cpp: - (JSC::functionProtoFuncToString): - * runtime/JSFunction.h: - (JSC::JSFunction::JSFunction): - (JSC::JSFunction::body): - -2008-11-27 Sam Weinig - - Reviewed by Oliver Hunt. - - Remove unused member variables from ProgramNode. - - * parser/Nodes.h: - -2008-11-27 Brent Fulgham - - Reviewed by Alexey Proskuryakov. - - Enable mouse panning feaure on Windows Cairo build. - See http://bugs.webkit.org/show_bug.cgi?id=22525 - - * wtf/Platform.h: Enable mouse panning feaure on Windows Cairo build. - -2008-11-27 Alp Toker - - Change recently introduced C++ comments in Platform.h to C comments to - fix the minidom build with traditional C. - - Build GtkLauncher and minidom with the '-ansi' compiler flag to detect - API header breakage at build time. - - * GNUmakefile.am: - * wtf/Platform.h: - -2008-11-27 Alp Toker - - Remove C++ comment from JavaScriptCore API headers (introduced r35449). - Fixes build for ANSI C applications using the public API. - - * API/WebKitAvailability.h: - -2008-11-26 Eric Seidel - - No review, build fix only. - - Fix the JSC Chromium Mac build by adding JavaScriptCore/icu into the include path - - * JavaScriptCore.scons: - -2008-11-25 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Remove the unused member function JSFunction::getParameterName(). - - * runtime/JSFunction.cpp: - * runtime/JSFunction.h: - -2008-11-24 Gavin Barraclough - - Reviewed by Geoff Garen. - - Polymorpic caching for get by id chain. Similar to the polymorphic caching already implemented - for self and proto accesses (implemented by allowing multiple trampolines to be JIT genertaed, - and linked together) - the get by id chain caching is implemented as a genericization of the - proto list caching, allowing cached access lists to contain a mix of proto and proto chain - accesses (since in JS style inheritance hierarchies you may commonly see a mix of properties - being overridden on the direct prototype, or higher up its prototype chain). - - In order to allow this patch to compile there is a fix to appease gcc 4.2 compiler issues - (removing the jumps between fall-through cases in privateExecute). - - This patch also removes redundant immediate checking from the reptach code, and fixes a related - memory leak (failure to deallocate trampolines). - - ~2% progression on v8 tests (bulk on the win on deltablue) - - * bytecode/Instruction.h: - (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::): - (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set): - (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList): - (JSC::PolymorphicAccessStructureList::derefStructures): - * interpreter/Interpreter.cpp: - (JSC::countPrototypeChainEntriesAndCheckForProxies): - (JSC::Interpreter::tryCacheGetByID): - (JSC::Interpreter::privateExecute): - (JSC::Interpreter::tryCTICacheGetByID): - (JSC::Interpreter::cti_op_get_by_id_self_fail): - (JSC::getPolymorphicAccessStructureListSlot): - (JSC::Interpreter::cti_op_get_by_id_proto_list): - * interpreter/Interpreter.h: - * jit/JIT.cpp: - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdSelfList): - (JSC::JIT::privateCompileGetByIdProtoList): - (JSC::JIT::privateCompileGetByIdChainList): - (JSC::JIT::privateCompileGetByIdChain): - (JSC::JIT::privateCompilePatchGetArrayLength): - * jit/JIT.h: - (JSC::JIT::compileGetByIdChainList): - -2008-11-25 Cameron Zwarich - - Reviewed by Alexey Proskuryakov. - - Move the collect() call in Heap::heapAllocate() that is conditionally - compiled under COLLECT_ON_EVERY_ALLOCATION so that it is before we get - information about the heap. This was causing assertion failures for me - while I was reducing a bug. - - * runtime/Collector.cpp: - (JSC::Heap::heapAllocate): - -2008-11-24 Cameron Zwarich - - Reviewed by Geoff Garen. - - Bug 13790: Function declarations are not treated as statements (used to affect starcraft2.com) - - - Modify the parser to treat function declarations as statements, - simplifying the grammar in the process. Technically, according to the - grammar in the ECMA spec, function declarations are not statements and - can not be used everywhere that statements can, but it is not worth the - possibility compatibility issues just to stick to the spec in this case. - - * parser/Grammar.y: - * parser/Nodes.cpp: - (JSC::FuncDeclNode::emitBytecode): Avoid returning ignoredResult() - as a result, because it causes a crash in DoWhileNode::emitBytecode(). - -2008-11-24 Geoffrey Garen - - Reviewed by Sam Weinig. - - Unroll the regexp matching loop by 1. 10% speedup on simple matching - stress test. No change on SunSpider. - - (I decided not to unroll to arbitrary levels because the returns diminsh - quickly.) - - * wrec/WREC.cpp: - (JSC::WREC::compileRegExp): - * wrec/WRECGenerator.cpp: - (JSC::WREC::Generator::generateJumpIfEndOfInput): - (JSC::WREC::Generator::generateJumpIfNotEndOfInput): - * wrec/WRECGenerator.h: - * wrec/WRECParser.h: - (JSC::WREC::Parser::error): - (JSC::WREC::Parser::parsePattern): - -2008-11-24 Geoffrey Garen - - Reviewed by Sam Weinig. - - Removed some unnecessary "Generator::" prefixes. - - * wrec/WRECGenerator.cpp: - (JSC::WREC::Generator::generateEnter): - (JSC::WREC::Generator::generateReturnSuccess): - (JSC::WREC::Generator::generateSaveIndex): - (JSC::WREC::Generator::generateIncrementIndex): - (JSC::WREC::Generator::generateLoopIfNotEndOfInput): - (JSC::WREC::Generator::generateReturnFailure): - -2008-11-24 Geoffrey Garen - - Reviewed by Sam Weinig. - - Made a bunch of WREC::Parser functions private, and added an explicit - "reset()" function, so a parser can be reused. - - * wrec/WRECParser.h: - (JSC::WREC::Parser::Parser): - (JSC::WREC::Parser::generator): - (JSC::WREC::Parser::ignoreCase): - (JSC::WREC::Parser::multiline): - (JSC::WREC::Parser::recordSubpattern): - (JSC::WREC::Parser::numSubpatterns): - (JSC::WREC::Parser::parsePattern): - (JSC::WREC::Parser::parseAlternative): - (JSC::WREC::Parser::reset): - -2008-11-24 Gavin Barraclough - - Reviewed by Cameron Zwarich. - - Implement repatching for get by id chain. - Previously the access is performed in a function stub, in the repatch form - the trampoline is not called to; instead the hot path is relinked to jump - directly to the trampoline, if it fails it will jump to the slow case. - - https://bugs.webkit.org/show_bug.cgi?id=22449 - 3% progression on deltablue. - - * jit/JIT.cpp: - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdChain): - -2008-11-24 Joerg Bornemann - - Reviewed by Simon Hausmann. - - https://bugs.webkit.org/show_bug.cgi?id=20746 - - Various small compilation fixes to make the Qt port of WebKit - compile on Windows CE. - - * config.h: Don't set _CRT_RAND_S for CE, it's not available. - * jsc.cpp: Disabled use of debugger includes for CE. It - does not have the debugging functions. - * runtime/DateMath.cpp: Use localtime() on Windows CE. - * wtf/Assertions.cpp: Compile on Windows CE without debugger. - * wtf/Assertions.h: Include windows.h before defining ASSERT. - * wtf/MathExtras.h: Include stdlib.h instead of xmath.h. - * wtf/Platform.h: Disable ERRNO_H and detect endianess based - on the Qt endianess. On Qt for Windows CE the endianess is - defined by the vendor specific build spec. - * wtf/Threading.h: Use the volatile-less atomic functions. - * wtf/dtoa.cpp: Compile without errno. - * wtf/win/MainThreadWin.cpp: Don't include windows.h on CE after - Assertions.h due to the redefinition of ASSERT. - -2008-11-22 Gavin Barraclough - - Reviewed by Cameron Zwarich. - - Replace accidentally deleted immediate check from get by id chain trampoline. - https://bugs.webkit.org/show_bug.cgi?id=22413 - - * jit/JIT.cpp: - (JSC::JIT::privateCompileGetByIdChain): - -2008-11-21 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Add (really) polymorphic caching for get by id self. - Very similar to caching of prototype accesses, described below. - - Oh, also, probably shouldn't have been leaking those structure list objects. - - 4% preogression on deltablue. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): - (JSC::CodeBlock::derefStructures): - (JSC::PrototypeStructureList::derefStructures): - * bytecode/Instruction.h: - * bytecode/Opcode.h: - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - (JSC::Interpreter::cti_op_get_by_id_self_fail): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileGetByIdSelfList): - (JSC::JIT::patchGetByIdSelf): - * jit/JIT.h: - (JSC::JIT::compileGetByIdSelfList): - -2008-11-21 Geoffrey Garen - - Reviewed by Sam Weinig. - - Fixed many crashes seen 'round the world (but only in release builds). - - Update outputParameter offset to reflect slight re-ordering of push - instructions in r38669. - - * wrec/WRECGenerator.cpp: - -2008-11-21 Geoffrey Garen - - Reviewed by Sam Weinig. - - A little more RegExp refactoring. - - Deployed a helper function for reading the next character. Used the "link - vector of jumps" helper in a place I missed before. - - * wrec/WRECGenerator.cpp: - (JSC::WREC::Generator::generateLoadCharacter): - (JSC::WREC::Generator::generatePatternCharacter): - (JSC::WREC::Generator::generateCharacterClass): - (JSC::WREC::Generator::generateAssertionEOL): - (JSC::WREC::Generator::generateAssertionWordBoundary): - * wrec/WRECGenerator.h: - -2008-11-21 Alexey Proskuryakov - - Reviewed by Dan Bernstein. - - https://bugs.webkit.org/show_bug.cgi?id=22402 - Replace abort() with CRASH() - - * wtf/Assertions.h: Added a different method to crash, which should work even is 0xbbadbeef - is a valid memory address. - - * runtime/Collector.cpp: - * wtf/FastMalloc.cpp: - * wtf/FastMalloc.h: - * wtf/TCSpinLock.h: - Replace abort() with CRASH(). - -2008-11-21 Alexey Proskuryakov - - Reverted fix for bug 22042 (Replace abort() with CRASH()), because it was breaking - FOR_EACH_OPCODE_ID macro somehow, making Safari crash. - - * runtime/Collector.cpp: - (JSC::Heap::heapAllocate): - (JSC::Heap::collect): - * wtf/Assertions.h: - * wtf/FastMalloc.cpp: - (WTF::fastMalloc): - (WTF::fastCalloc): - (WTF::fastRealloc): - (WTF::InitSizeClasses): - (WTF::PageHeapAllocator::New): - (WTF::TCMallocStats::do_malloc): - * wtf/FastMalloc.h: - * wtf/TCSpinLock.h: - (TCMalloc_SpinLock::Init): - (TCMalloc_SpinLock::Finalize): - (TCMalloc_SpinLock::Lock): - (TCMalloc_SpinLock::Unlock): - -2008-11-21 Geoffrey Garen - - Reviewed by Sam Weinig. - - A little more RegExp refactoring. - - Moved all assembly from WREC.cpp into WRECGenerator helper functions. - This should help with portability and readability. - - Removed ASSERTs after calls to executableCopy(), and changed - executableCopy() to ASSERT instead. - - * assembler/X86Assembler.h: - (JSC::X86Assembler::executableCopy): - * jit/JIT.cpp: - (JSC::JIT::privateCompile): - (JSC::JIT::privateCompileGetByIdSelf): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdChain): - (JSC::JIT::privateCompilePutByIdReplace): - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::privateCompileCTIMachineTrampolines): - (JSC::JIT::privateCompilePatchGetArrayLength): - * wrec/WREC.cpp: - (JSC::WREC::compileRegExp): - * wrec/WRECGenerator.cpp: - (JSC::WREC::Generator::generateEnter): - (JSC::WREC::Generator::generateReturnSuccess): - (JSC::WREC::Generator::generateSaveIndex): - (JSC::WREC::Generator::generateIncrementIndex): - (JSC::WREC::Generator::generateLoopIfNotEndOfInput): - (JSC::WREC::Generator::generateReturnFailure): - * wrec/WRECGenerator.h: - * wrec/WRECParser.h: - (JSC::WREC::Parser::ignoreCase): - (JSC::WREC::Parser::generator): - -2008-11-21 Alexey Proskuryakov - - Build fix. - - * wtf/Assertions.h: Use ::abort for C++ code. - -2008-11-21 Alexey Proskuryakov - - Reviewed by Sam Weinig. - - https://bugs.webkit.org/show_bug.cgi?id=22402 - Replace abort() with CRASH() - - * wtf/Assertions.h: Added abort() after an attempt to crash for extra safety. - - * runtime/Collector.cpp: - * wtf/FastMalloc.cpp: - * wtf/FastMalloc.h: - * wtf/TCSpinLock.h: - Replace abort() with CRASH(). - -2008-11-21 Geoffrey Garen - - Reviewed by Sam Weinig. - - Renamed wrec => generator. - - * wrec/WRECFunctors.cpp: - (JSC::WREC::GeneratePatternCharacterFunctor::generateAtom): - (JSC::WREC::GeneratePatternCharacterFunctor::backtrack): - (JSC::WREC::GenerateCharacterClassFunctor::generateAtom): - (JSC::WREC::GenerateCharacterClassFunctor::backtrack): - (JSC::WREC::GenerateBackreferenceFunctor::generateAtom): - (JSC::WREC::GenerateBackreferenceFunctor::backtrack): - (JSC::WREC::GenerateParenthesesNonGreedyFunctor::generateAtom): - -2008-11-19 Gavin Barraclough - - Reviewed by Darin Adler. - - Add support for (really) polymorphic caching of prototype accesses. - - If a cached prototype access misses, cti_op_get_by_id_proto_list is called. - When this occurs the Structure pointers from the instruction stream are copied - off into a new ProtoStubInfo object. A second prototype access trampoline is - generated, and chained onto the first. Subsequent missed call to - cti_op_get_by_id_proto_list_append, which append futher new trampolines, up to - PROTOTYPE_LIST_CACHE_SIZE (currently 4). If any of the misses result in an - access other than to a direct prototype property, list formation is halted (or - for the initial miss, does not take place at all). - - Separate fail case functions are provided for each access since this contributes - to the performance progression (enables better processor branch prediction). - - Overall this is a near 5% progression on v8, with around 10% wins on richards - and deltablue. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): - (JSC::CodeBlock::derefStructures): - * bytecode/Instruction.h: - (JSC::ProtoStructureList::ProtoStubInfo::set): - (JSC::ProtoStructureList::ProtoStructureList): - (JSC::Instruction::Instruction): - (JSC::Instruction::): - * bytecode/Opcode.h: - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - (JSC::Interpreter::tryCTICacheGetByID): - (JSC::Interpreter::cti_op_put_by_id_fail): - (JSC::Interpreter::cti_op_get_by_id_self_fail): - (JSC::Interpreter::cti_op_get_by_id_proto_list): - (JSC::Interpreter::cti_op_get_by_id_proto_list_append): - (JSC::Interpreter::cti_op_get_by_id_proto_list_full): - (JSC::Interpreter::cti_op_get_by_id_proto_fail): - (JSC::Interpreter::cti_op_get_by_id_chain_fail): - (JSC::Interpreter::cti_op_get_by_id_array_fail): - (JSC::Interpreter::cti_op_get_by_id_string_fail): - * interpreter/Interpreter.h: - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileGetByIdSelf): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdProtoList): - (JSC::JIT::privateCompileGetByIdChain): - (JSC::JIT::privateCompileCTIMachineTrampolines): - (JSC::JIT::privateCompilePatchGetArrayLength): - * jit/JIT.h: - (JSC::JIT::compileGetByIdProtoList): - -2008-11-20 Sam Weinig - - Try and fix the tiger build. - - * parser/Grammar.y: - -2008-11-20 Eric Seidel - - Reviewed by Darin Adler. - - Make JavaScriptCore Chromium build under Windows (cmd only, cygwin almost works) - https://bugs.webkit.org/show_bug.cgi?id=22347 - - * JavaScriptCore.scons: - * parser/Parser.cpp: Add using std::auto_ptr since we use auto_ptr - -2008-11-20 Steve Falkenburg - - Fix build. - - Reviewed by Sam Weinig. - - * parser/Parser.cpp: - (JSC::Parser::reparse): - -2008-11-20 Geoffrey Garen - - Reviewed by Sam Weinig. - - A little more RegExp refactoring. - - Created a helper function in the assembler for linking a vector of - JmpSrc to a location, and deployed it in a bunch of places. - - * JavaScriptCore.xcodeproj/project.pbxproj: - * assembler/X86Assembler.h: - (JSC::X86Assembler::link): - * wrec/WREC.cpp: - (JSC::WREC::compileRegExp): - * wrec/WRECGenerator.cpp: - (JSC::WREC::Generator::generateNonGreedyQuantifier): - (JSC::WREC::Generator::generateGreedyQuantifier): - (JSC::WREC::Generator::generateCharacterClassInverted): - (JSC::WREC::Generator::generateParentheses): - (JSC::WREC::Generator::generateParenthesesResetTrampoline): - (JSC::WREC::Generator::generateAssertionBOL): - (JSC::WREC::Generator::generateAssertionEOL): - (JSC::WREC::Generator::generateAssertionWordBoundary): - (JSC::WREC::Generator::terminateAlternative): - (JSC::WREC::Generator::terminateDisjunction): - * wrec/WRECParser.cpp: - * wrec/WRECParser.h: - (JSC::WREC::Parser::consumeHex): - -2008-11-20 Sam Weinig - - Fix non-mac builds. - - * parser/Lexer.cpp: - * parser/Parser.cpp: - -2008-11-20 Sam Weinig - - Reviewed by Darin Adler. - - Patch for https://bugs.webkit.org/show_bug.cgi?id=22385 - - Lazily reparse FunctionBodyNodes on first execution. - - - Saves 57MB on Membuster head. - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::generate): Remove vector shrinking since this is now - handled by destroying the ScopeNodeData after generation. - - * parser/Grammar.y: Add alternate NoNode version of the grammar - that does not create nodes. This is used to lazily create FunctionBodyNodes - on first execution. - - * parser/Lexer.cpp: - (JSC::Lexer::setCode): Fix bug where on reparse, the Lexer was confused about - what position and length meant. Position is the current position in the original - data buffer (important for getting correct line/column information) and length - the end offset in the original buffer. - * parser/Lexer.h: - (JSC::Lexer::sourceCode): Positions are relative to the beginning of the buffer. - - * parser/Nodes.cpp: - (JSC::ScopeNodeData::ScopeNodeData): Move initialization of ScopeNode data here. - (JSC::ScopeNode::ScopeNode): Add constructor that only sets the JSGlobalData - for FunctionBodyNode stubs. - (JSC::ScopeNode::~ScopeNode): Release m_children now that we don't inherit from - BlockNode. - (JSC::ScopeNode::releaseNodes): Ditto. - (JSC::EvalNode::generateBytecode): Only shrink m_children, as we need to keep around - the rest of the data. - (JSC::FunctionBodyNode::FunctionBodyNode): Add constructor that only sets the - JSGlobalData. - (JSC::FunctionBodyNode::create): Ditto. - (JSC::FunctionBodyNode::generateBytecode): If we don't have the data, do a reparse - to construct it. Then after generation, destroy the data. - (JSC::ProgramNode::generateBytecode): After generation, destroy the AST data. - * parser/Nodes.h: - (JSC::ExpressionNode::): Add isFuncExprNode for FunctionConstructor. - (JSC::StatementNode::): Add isExprStatementNode for FunctionConstructor. - (JSC::ExprStatementNode::): Ditto. - (JSC::ExprStatementNode::expr): Add accessor for FunctionConstructor. - (JSC::FuncExprNode::): Add isFuncExprNode for FunctionConstructor - - (JSC::ScopeNode::adoptData): Adopts a ScopeNodeData. - (JSC::ScopeNode::data): Accessor for ScopeNodeData. - (JSC::ScopeNode::destroyData): Deletes the ScopeNodeData. - (JSC::ScopeNode::setFeatures): Added. - (JSC::ScopeNode::varStack): Added assert. - (JSC::ScopeNode::functionStack): Ditto. - (JSC::ScopeNode::children): Ditto. - (JSC::ScopeNode::neededConstants): Ditto. - Factor m_varStack, m_functionStack, m_children and m_numConstants into ScopeNodeData. - - * parser/Parser.cpp: - (JSC::Parser::reparse): Reparse the SourceCode in the FunctionBodyNode and set - set up the ScopeNodeData for it. - * parser/Parser.h: - - * parser/SourceCode.h: - (JSC::SourceCode::endOffset): Added for use in the lexer. - - * runtime/FunctionConstructor.cpp: - (JSC::getFunctionBody): Assuming a ProgramNode with one FunctionExpression in it, - get the FunctionBodyNode. Any issues signifies a parse failure in constructFunction. - (JSC::constructFunction): Make parsing functions in the form new Function(""), easier - by concatenating the strings together (with some glue) and parsing the function expression - as a ProgramNode from which we can receive the FunctionBodyNode. This has the added benefit - of not having special parsing code for the arguments and lazily constructing the - FunctionBodyNode's AST on first execution. - - * runtime/Identifier.h: - (JSC::operator!=): Added. - -2008-11-20 Sam Weinig - - Reviewed by Geoffrey Garen. - - Speedup the lexer to offset coming re-parsing patch. - - - .6% progression on Sunspider. - - * bytecompiler/SegmentedVector.h: - (JSC::SegmentedVector::shrink): Fixed bug where m_size would not be - set when shrinking to 0. - - * parser/Lexer.cpp: - (JSC::Lexer::Lexer): - (JSC::Lexer::isIdentStart): Use isASCIIAlpha and isASCII to avoid going into ICU in the common cases. - (JSC::Lexer::isIdentPart): Use isASCIIAlphanumeric and isASCII to avoid going into ICU in the common cases - (JSC::isDecimalDigit): Use version in ASCIICType.h. Inlining it was a regression. - (JSC::Lexer::isHexDigit): Ditto. - (JSC::Lexer::isOctalDigit): Ditto. - (JSC::Lexer::clear): Resize the m_identifiers SegmentedVector to initial - capacity - * parser/Lexer.h: Remove unused m_strings vector. Make m_identifiers - a SegmentedVector to avoid allocating a new Identifier* for - each identifier found. The SegmentedVector is need so we can passes - references to the Identifier to the parser, which remain valid even when - the vector is resized. - (JSC::Lexer::makeIdentifier): Inline and return a reference to the added - Identifier. - -2008-11-20 Sam Weinig - - Reviewed by Darin Adler. - - Add isASCII to ASCIICType. Use coming soon! - - * wtf/ASCIICType.h: - (WTF::isASCII): - -2008-11-20 Sam Weinig - - Reviewed by Darin Adler. - - Add OwnPtr constructor and OwnPtr::adopt that take an auto_ptr. - - * wtf/OwnPtr.h: - (WTF::OwnPtr::OwnPtr): - (WTF::OwnPtr::adopt): - -2008-11-20 Alexey Proskuryakov - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=22364 - Crashes seen on Tiger buildbots due to worker threads exhausting pthread keys - - * runtime/Collector.cpp: - (JSC::Heap::Heap): - (JSC::Heap::destroy): - (JSC::Heap::makeUsableFromMultipleThreads): - (JSC::Heap::registerThread): - * runtime/Collector.h: - Pthread key for tracking threads is only created on request now, because this is a limited - resource, and thread tracking is not needed for worker heaps, or for WebCore heap. - - * API/JSContextRef.cpp: (JSGlobalContextCreateInGroup): Call makeUsableFromMultipleThreads(). - - * runtime/JSGlobalData.cpp: (JSC::JSGlobalData::sharedInstance): Ditto. - - * runtime/JSGlobalData.h: (JSC::JSGlobalData::makeUsableFromMultipleThreads): Just forward - the call to Heap, which clients need not know about, ideally. - -2008-11-20 Geoffrey Garen - - Reviewed by Sam Weinig. - - A little more WREC refactoring. - - Removed the "Register" suffix from register names in WREC, and renamed: - currentPosition => index - currentValue => character - quantifierCount => repeatCount - - Added a top-level parsePattern function to the WREC parser, which - allowed me to remove the error() and atEndOfPattern() accessors. - - Factored out an MSVC customization into a constant. - - Renamed nextLabel => beginPattern. - - * wrec/WREC.cpp: - (JSC::WREC::compileRegExp): - * wrec/WRECGenerator.cpp: - (JSC::WREC::Generator::generateBacktrack1): - (JSC::WREC::Generator::generateBacktrackBackreference): - (JSC::WREC::Generator::generateBackreferenceQuantifier): - (JSC::WREC::Generator::generateNonGreedyQuantifier): - (JSC::WREC::Generator::generateGreedyQuantifier): - (JSC::WREC::Generator::generatePatternCharacter): - (JSC::WREC::Generator::generateCharacterClassInvertedRange): - (JSC::WREC::Generator::generateCharacterClassInverted): - (JSC::WREC::Generator::generateCharacterClass): - (JSC::WREC::Generator::generateParentheses): - (JSC::WREC::Generator::generateParenthesesResetTrampoline): - (JSC::WREC::Generator::generateAssertionBOL): - (JSC::WREC::Generator::generateAssertionEOL): - (JSC::WREC::Generator::generateAssertionWordBoundary): - (JSC::WREC::Generator::generateBackreference): - (JSC::WREC::Generator::generateDisjunction): - (JSC::WREC::Generator::terminateDisjunction): - * wrec/WRECGenerator.h: - * wrec/WRECParser.h: - (JSC::WREC::Parser::parsePattern): - -2008-11-19 Geoffrey Garen - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=22361 - A little more RegExp refactoring. - - Consistently named variables holding the starting position at which - regexp matching should begin to "startOffset". - - A few more "regExpObject" => "regExpConstructor" changes. - - Refactored RegExpObject::match for clarity, and replaced a slow "get" - of the "global" property with a fast access to the global bit. - - Made the error message you see when RegExpObject::match has no input a - little more informative, as in Firefox. - - * runtime/RegExp.cpp: - (JSC::RegExp::match): - * runtime/RegExp.h: - * runtime/RegExpObject.cpp: - (JSC::RegExpObject::match): - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncReplace): - (JSC::stringProtoFuncMatch): - (JSC::stringProtoFuncSearch): - -2008-11-19 Geoffrey Garen - - Reviewed by Sam Weinig. - - A little more refactoring. - - Removed the "emit" and "emitUnlinked" prefixes from the assembler. - - Moved the JmpSrc and JmpDst class definitions to the top of the X86 - assembler class, in accordance with WebKit style guidelines. - - * assembler/X86Assembler.h: - (JSC::X86Assembler::JmpSrc::JmpSrc): - (JSC::X86Assembler::JmpDst::JmpDst): - (JSC::X86Assembler::int3): - (JSC::X86Assembler::pushl_m): - (JSC::X86Assembler::popl_m): - (JSC::X86Assembler::movl_rr): - (JSC::X86Assembler::addl_rr): - (JSC::X86Assembler::addl_i8r): - (JSC::X86Assembler::addl_i8m): - (JSC::X86Assembler::addl_i32r): - (JSC::X86Assembler::addl_mr): - (JSC::X86Assembler::andl_rr): - (JSC::X86Assembler::andl_i32r): - (JSC::X86Assembler::cmpl_i8r): - (JSC::X86Assembler::cmpl_rr): - (JSC::X86Assembler::cmpl_rm): - (JSC::X86Assembler::cmpl_mr): - (JSC::X86Assembler::cmpl_i32r): - (JSC::X86Assembler::cmpl_i32m): - (JSC::X86Assembler::cmpl_i8m): - (JSC::X86Assembler::cmpw_rm): - (JSC::X86Assembler::orl_rr): - (JSC::X86Assembler::orl_mr): - (JSC::X86Assembler::orl_i32r): - (JSC::X86Assembler::subl_rr): - (JSC::X86Assembler::subl_i8r): - (JSC::X86Assembler::subl_i8m): - (JSC::X86Assembler::subl_i32r): - (JSC::X86Assembler::subl_mr): - (JSC::X86Assembler::testl_i32r): - (JSC::X86Assembler::testl_i32m): - (JSC::X86Assembler::testl_rr): - (JSC::X86Assembler::xorl_i8r): - (JSC::X86Assembler::xorl_rr): - (JSC::X86Assembler::sarl_i8r): - (JSC::X86Assembler::sarl_CLr): - (JSC::X86Assembler::shl_i8r): - (JSC::X86Assembler::shll_CLr): - (JSC::X86Assembler::imull_rr): - (JSC::X86Assembler::imull_i32r): - (JSC::X86Assembler::idivl_r): - (JSC::X86Assembler::negl_r): - (JSC::X86Assembler::movl_mr): - (JSC::X86Assembler::movzbl_rr): - (JSC::X86Assembler::movzwl_mr): - (JSC::X86Assembler::movl_rm): - (JSC::X86Assembler::movl_i32r): - (JSC::X86Assembler::movl_i32m): - (JSC::X86Assembler::leal_mr): - (JSC::X86Assembler::jmp_r): - (JSC::X86Assembler::jmp_m): - (JSC::X86Assembler::movsd_mr): - (JSC::X86Assembler::xorpd_mr): - (JSC::X86Assembler::movsd_rm): - (JSC::X86Assembler::movd_rr): - (JSC::X86Assembler::cvtsi2sd_rr): - (JSC::X86Assembler::cvttsd2si_rr): - (JSC::X86Assembler::addsd_mr): - (JSC::X86Assembler::subsd_mr): - (JSC::X86Assembler::mulsd_mr): - (JSC::X86Assembler::addsd_rr): - (JSC::X86Assembler::subsd_rr): - (JSC::X86Assembler::mulsd_rr): - (JSC::X86Assembler::ucomis_rr): - (JSC::X86Assembler::pextrw_irr): - (JSC::X86Assembler::call): - (JSC::X86Assembler::jmp): - (JSC::X86Assembler::jne): - (JSC::X86Assembler::jnz): - (JSC::X86Assembler::je): - (JSC::X86Assembler::jl): - (JSC::X86Assembler::jb): - (JSC::X86Assembler::jle): - (JSC::X86Assembler::jbe): - (JSC::X86Assembler::jge): - (JSC::X86Assembler::jg): - (JSC::X86Assembler::ja): - (JSC::X86Assembler::jae): - (JSC::X86Assembler::jo): - (JSC::X86Assembler::jp): - (JSC::X86Assembler::js): - (JSC::X86Assembler::predictNotTaken): - (JSC::X86Assembler::convertToFastCall): - (JSC::X86Assembler::restoreArgumentReference): - (JSC::X86Assembler::restoreArgumentReferenceForTrampoline): - (JSC::X86Assembler::modRm_rr): - (JSC::X86Assembler::modRm_rr_Unchecked): - (JSC::X86Assembler::modRm_rm): - (JSC::X86Assembler::modRm_rm_Unchecked): - (JSC::X86Assembler::modRm_rmsib): - (JSC::X86Assembler::modRm_opr): - (JSC::X86Assembler::modRm_opr_Unchecked): - (JSC::X86Assembler::modRm_opm): - (JSC::X86Assembler::modRm_opm_Unchecked): - (JSC::X86Assembler::modRm_opmsib): - * jit/JIT.cpp: - (JSC::JIT::emitNakedCall): - (JSC::JIT::emitNakedFastCall): - (JSC::JIT::emitCTICall): - (JSC::JIT::emitJumpSlowCaseIfNotJSCell): - (JSC::JIT::emitJumpSlowCaseIfNotImmNum): - (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): - (JSC::JIT::emitFastArithIntToImmOrSlowCase): - (JSC::JIT::emitArithIntToImmWithJump): - (JSC::JIT::compileOpCall): - (JSC::JIT::compileOpStrictEq): - (JSC::JIT::emitSlowScriptCheck): - (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): - (JSC::JIT::compileBinaryArithOp): - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - (JSC::JIT::privateCompile): - (JSC::JIT::privateCompileGetByIdSelf): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdChain): - (JSC::JIT::privateCompilePutByIdReplace): - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::privateCompileCTIMachineTrampolines): - (JSC::JIT::privateCompilePatchGetArrayLength): - * wrec/WREC.cpp: - (JSC::WREC::compileRegExp): - * wrec/WRECGenerator.cpp: - (JSC::WREC::Generator::generateBackreferenceQuantifier): - (JSC::WREC::Generator::generateNonGreedyQuantifier): - (JSC::WREC::Generator::generateGreedyQuantifier): - (JSC::WREC::Generator::generatePatternCharacter): - (JSC::WREC::Generator::generateCharacterClassInvertedRange): - (JSC::WREC::Generator::generateCharacterClassInverted): - (JSC::WREC::Generator::generateCharacterClass): - (JSC::WREC::Generator::generateParentheses): - (JSC::WREC::Generator::generateParenthesesNonGreedy): - (JSC::WREC::Generator::generateParenthesesResetTrampoline): - (JSC::WREC::Generator::generateAssertionBOL): - (JSC::WREC::Generator::generateAssertionEOL): - (JSC::WREC::Generator::generateAssertionWordBoundary): - (JSC::WREC::Generator::generateBackreference): - (JSC::WREC::Generator::generateDisjunction): - -2008-11-19 Simon Hausmann - - Sun CC build fix, removed trailing comman for last enum value. - - * wtf/unicode/qt4/UnicodeQt4.h: - (WTF::Unicode::): - -2008-11-19 Mark Rowe - - Reviewed by Alexey Proskuryakov. - - Expand the workaround for Apple GCC compiler bug to all versions of GCC 4.0.1. - It has been observed with builds 5465 (Xcode 3.0) and 5484 (Xcode 3.1), and there is no evidence - that it has been fixed in newer builds of GCC 4.0.1. - - This addresses (WebKit nightly crashes on launch on 10.4.11). - - * wtf/StdLibExtras.h: - -2008-11-18 Cameron Zwarich - - Reviewed by Maciej Stachowiak and Geoff Garen. - - Bug 22287: ASSERTION FAILED: Not enough jumps linked in slow case codegen in CTI::privateCompileSlowCases()) - - - Fix a typo in the number cell reuse code where the first and second - operands are sometimes confused. - - * jit/JIT.cpp: - (JSC::JIT::compileBinaryArithOpSlowCase): - -2008-11-18 Dan Bernstein - - - try to fix the Windows build - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - -2008-11-18 Geoffrey Garen - - Reviewed by Sam Weinig. - - Minor RegExp cleanup. - - SunSpider says no change. - - * runtime/RegExpObject.cpp: - (JSC::RegExpObject::match): Renamed "regExpObj" to "regExpConstructor". - - * wrec/WREC.cpp: - (JSC::WREC::compileRegExp): Instead of checking for a NULL output vector, - ASSERT that the output vector is not NULL. (The rest of WREC is not - safe to use with a NULL output vector, and we probably don't want to - spend the time and/or performance to make it safe.) - -2008-11-18 Geoffrey Garen - - Reviewed by Darin Adler. - - A little more renaming and refactoring. - - VM_CHECK_EXCEPTION() => CHECK_FOR_EXCEPTION(). - NEXT_INSTRUCTION => NEXT_INSTRUCTION(). - - Removed the "Error_" and "TempError_" prefixes from WREC error types. - - Refactored the WREC parser so it doesn't need a "setError" function, - and changed "isEndOfPattern" and its use -- they read kind of backwards - before. - - Changed our "TODO:" error messages at least to say something, since you - can't say "TODO:" in shipping software. - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - (JSC::Interpreter::cti_op_convert_this): - (JSC::Interpreter::cti_op_add): - (JSC::Interpreter::cti_op_pre_inc): - (JSC::Interpreter::cti_op_loop_if_less): - (JSC::Interpreter::cti_op_loop_if_lesseq): - (JSC::Interpreter::cti_op_put_by_id): - (JSC::Interpreter::cti_op_put_by_id_second): - (JSC::Interpreter::cti_op_put_by_id_generic): - (JSC::Interpreter::cti_op_put_by_id_fail): - (JSC::Interpreter::cti_op_get_by_id): - (JSC::Interpreter::cti_op_get_by_id_second): - (JSC::Interpreter::cti_op_get_by_id_generic): - (JSC::Interpreter::cti_op_get_by_id_fail): - (JSC::Interpreter::cti_op_instanceof): - (JSC::Interpreter::cti_op_del_by_id): - (JSC::Interpreter::cti_op_mul): - (JSC::Interpreter::cti_op_call_NotJSFunction): - (JSC::Interpreter::cti_op_resolve): - (JSC::Interpreter::cti_op_construct_NotJSConstruct): - (JSC::Interpreter::cti_op_get_by_val): - (JSC::Interpreter::cti_op_resolve_func): - (JSC::Interpreter::cti_op_sub): - (JSC::Interpreter::cti_op_put_by_val): - (JSC::Interpreter::cti_op_put_by_val_array): - (JSC::Interpreter::cti_op_lesseq): - (JSC::Interpreter::cti_op_loop_if_true): - (JSC::Interpreter::cti_op_negate): - (JSC::Interpreter::cti_op_resolve_skip): - (JSC::Interpreter::cti_op_resolve_global): - (JSC::Interpreter::cti_op_div): - (JSC::Interpreter::cti_op_pre_dec): - (JSC::Interpreter::cti_op_jless): - (JSC::Interpreter::cti_op_not): - (JSC::Interpreter::cti_op_jtrue): - (JSC::Interpreter::cti_op_post_inc): - (JSC::Interpreter::cti_op_eq): - (JSC::Interpreter::cti_op_lshift): - (JSC::Interpreter::cti_op_bitand): - (JSC::Interpreter::cti_op_rshift): - (JSC::Interpreter::cti_op_bitnot): - (JSC::Interpreter::cti_op_resolve_with_base): - (JSC::Interpreter::cti_op_mod): - (JSC::Interpreter::cti_op_less): - (JSC::Interpreter::cti_op_neq): - (JSC::Interpreter::cti_op_post_dec): - (JSC::Interpreter::cti_op_urshift): - (JSC::Interpreter::cti_op_bitxor): - (JSC::Interpreter::cti_op_bitor): - (JSC::Interpreter::cti_op_push_scope): - (JSC::Interpreter::cti_op_to_jsnumber): - (JSC::Interpreter::cti_op_in): - (JSC::Interpreter::cti_op_del_by_val): - * wrec/WREC.cpp: - (JSC::WREC::compileRegExp): - * wrec/WRECParser.cpp: - (JSC::WREC::Parser::parseGreedyQuantifier): - (JSC::WREC::Parser::parseParentheses): - (JSC::WREC::Parser::parseCharacterClass): - (JSC::WREC::Parser::parseEscape): - * wrec/WRECParser.h: - (JSC::WREC::Parser::): - (JSC::WREC::Parser::atEndOfPattern): - -2008-11-18 Alexey Proskuryakov - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=22337 - Enable workers by default - - * Configurations/JavaScriptCore.xcconfig: Define ENABLE_WORKERS. - -2008-11-18 Alexey Proskuryakov - - - Windows build fix - - * wrec/WRECFunctors.h: - * wrec/WRECGenerator.h: - * wrec/WRECParser.h: - CharacterClass is a struct, not a class, fix forward declarations. - -2008-11-18 Dan Bernstein - - - Windows build fix - - * assembler/X86Assembler.h: - -2008-11-17 Geoffrey Garen - - Not reviewed. - - Try to fix gtk build. - - * wrec/Quantifier.h: - -2008-11-17 Geoffrey Garen - - Not reviewed. - - Try to fix gtk build. - - * assembler/AssemblerBuffer.h: - -2008-11-17 Geoffrey Garen - - Reviewed by Sam Weinig. - - Split WREC classes out into individual files, with a few modifications - to more closely match the WebKit coding style. - - * GNUmakefile.am: - * JavaScriptCore.scons: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * assembler/X86Assembler.h: - * runtime/RegExp.cpp: - * wrec/CharacterClass.cpp: Copied from wrec/CharacterClassConstructor.cpp. - (JSC::WREC::CharacterClass::newline): - (JSC::WREC::CharacterClass::digits): - (JSC::WREC::CharacterClass::spaces): - (JSC::WREC::CharacterClass::wordchar): - (JSC::WREC::CharacterClass::nondigits): - (JSC::WREC::CharacterClass::nonspaces): - (JSC::WREC::CharacterClass::nonwordchar): - * wrec/CharacterClass.h: Copied from wrec/CharacterClassConstructor.h. - * wrec/CharacterClassConstructor.cpp: - (JSC::WREC::CharacterClassConstructor::addSortedRange): - (JSC::WREC::CharacterClassConstructor::append): - * wrec/CharacterClassConstructor.h: - * wrec/Quantifier.h: Copied from wrec/WREC.h. - * wrec/WREC.cpp: - (JSC::WREC::compileRegExp): - * wrec/WREC.h: - * wrec/WRECFunctors.cpp: Copied from wrec/WREC.cpp. - * wrec/WRECFunctors.h: Copied from wrec/WREC.cpp. - (JSC::WREC::GenerateAtomFunctor::~GenerateAtomFunctor): - (JSC::WREC::GeneratePatternCharacterFunctor::GeneratePatternCharacterFunctor): - (JSC::WREC::GenerateCharacterClassFunctor::GenerateCharacterClassFunctor): - (JSC::WREC::GenerateBackreferenceFunctor::GenerateBackreferenceFunctor): - (JSC::WREC::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor): - * wrec/WRECGenerator.cpp: Copied from wrec/WREC.cpp. - (JSC::WREC::Generator::generatePatternCharacter): - (JSC::WREC::Generator::generateCharacterClassInvertedRange): - (JSC::WREC::Generator::generateCharacterClassInverted): - (JSC::WREC::Generator::generateCharacterClass): - (JSC::WREC::Generator::generateParentheses): - (JSC::WREC::Generator::generateAssertionBOL): - (JSC::WREC::Generator::generateAssertionEOL): - (JSC::WREC::Generator::generateAssertionWordBoundary): - * wrec/WRECGenerator.h: Copied from wrec/WREC.h. - * wrec/WRECParser.cpp: Copied from wrec/WREC.cpp. - (JSC::WREC::Parser::parseGreedyQuantifier): - (JSC::WREC::Parser::parseCharacterClassQuantifier): - (JSC::WREC::Parser::parseParentheses): - (JSC::WREC::Parser::parseCharacterClass): - (JSC::WREC::Parser::parseEscape): - (JSC::WREC::Parser::parseTerm): - * wrec/WRECParser.h: Copied from wrec/WREC.h. - (JSC::WREC::Parser::): - (JSC::WREC::Parser::Parser): - (JSC::WREC::Parser::setError): - (JSC::WREC::Parser::error): - (JSC::WREC::Parser::recordSubpattern): - (JSC::WREC::Parser::numSubpatterns): - (JSC::WREC::Parser::ignoreCase): - (JSC::WREC::Parser::multiline): - -2008-11-17 Geoffrey Garen - - Not reviewed. - - Try to fix a few builds. - - * JavaScriptCoreSources.bkl: - -2008-11-17 Geoffrey Garen - - Not reviewed. - - Try to fix a few builds. - - * JavaScriptCore.pri: - * JavaScriptCore.scons: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - -2008-11-17 Geoffrey Garen - - Reviewed by Sam Weinig. - - Moved VM/CTI.* => jit/JIT.*. - - Removed VM. - - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCore.scons: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * VM/CTI.cpp: Removed. - * VM/CTI.h: Removed. - * bytecode/CodeBlock.cpp: - * interpreter/Interpreter.cpp: - * jit: Added. - * jit/JIT.cpp: Copied from VM/CTI.cpp. - * jit/JIT.h: Copied from VM/CTI.h. - * runtime/RegExp.cpp: - -2008-11-17 Geoffrey Garen - - Reviewed by Sam Weinig. - - Moved runtime/ExecState.* => interpreter/CallFrame.*. - - * API/JSBase.cpp: - * API/OpaqueJSString.cpp: - * GNUmakefile.am: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * debugger/DebuggerCallFrame.h: - * interpreter/CallFrame.cpp: Copied from runtime/ExecState.cpp. - * interpreter/CallFrame.h: Copied from runtime/ExecState.h. - * interpreter/Interpreter.cpp: - * parser/Nodes.cpp: - * profiler/ProfileGenerator.cpp: - * profiler/Profiler.cpp: - * runtime/ClassInfo.h: - * runtime/Collector.cpp: - * runtime/Completion.cpp: - * runtime/ExceptionHelpers.cpp: - * runtime/ExecState.cpp: Removed. - * runtime/ExecState.h: Removed. - * runtime/Identifier.cpp: - * runtime/JSFunction.cpp: - * runtime/JSGlobalObjectFunctions.cpp: - * runtime/JSLock.cpp: - * runtime/JSNumberCell.h: - * runtime/JSObject.h: - * runtime/JSString.h: - * runtime/Lookup.h: - * runtime/PropertyNameArray.h: - -2008-11-17 Geoffrey Garen - - Not reviewed. - - Try to fix Windows build. - - * API/APICast.h: - -2008-11-17 Geoffrey Garen - - Not reviewed. - - Try to fix Windows build. - - * API/APICast.h: - * runtime/ExecState.h: - -2008-11-17 Geoffrey Garen - - Reviewed by Sam Weinig. - - Moved VM/SamplingTool.* => bytecode/SamplingTool.*. - - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCore.scons: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - * VM/SamplingTool.cpp: Removed. - * VM/SamplingTool.h: Removed. - * bytecode/SamplingTool.cpp: Copied from VM/SamplingTool.cpp. - * bytecode/SamplingTool.h: Copied from VM/SamplingTool.h. - * jsc.cpp: - (runWithScripts): - -2008-11-17 Geoffrey Garen - - Not reviewed. - - Try to fix Windows build. - - * runtime/ExecState.h: - -2008-11-17 Geoffrey Garen - - Reviewed by Sam Weinig. - - Moved VM/ExceptionHelpers.cpp => runtime/ExceptionHelpers.cpp. - - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCore.scons: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - * VM/ExceptionHelpers.cpp: Removed. - * runtime/ExceptionHelpers.cpp: Copied from VM/ExceptionHelpers.cpp. - -2008-11-17 Geoffrey Garen - - Reviewed by Sam Weinig. - - Moved VM/RegisterFile.cpp => interpreter/RegisterFile.cpp. - - * AllInOneFile.cpp: - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCore.scons: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - * VM/RegisterFile.cpp: Removed. - * interpreter/RegisterFile.cpp: Copied from VM/RegisterFile.cpp. - -2008-11-17 Geoffrey Garen - - Not reviewed. - - Try to fix Windows build. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - -2008-11-17 Geoffrey Garen - - Not reviewed. - - Try to fix Windows build. - - * JavaScriptCore.vcproj/jsc/jsc.vcproj: - -2008-11-17 Geoffrey Garen - - Not reviewed. - - Try to fix Windows build. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - -2008-11-17 Geoffrey Garen - - Reviewed by Sam Weinig. - - Moved: - VM/ExceptionHelpers.h => runtime/ExceptionHelpers.h - VM/Register.h => interpreter/Register.h - VM/RegisterFile.h => interpreter/RegisterFile.h - - - * GNUmakefile.am: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * VM/ExceptionHelpers.h: Removed. - * VM/Register.h: Removed. - * VM/RegisterFile.h: Removed. - * interpreter/Register.h: Copied from VM/Register.h. - * interpreter/RegisterFile.h: Copied from VM/RegisterFile.h. - * runtime/ExceptionHelpers.h: Copied from VM/ExceptionHelpers.h. - -2008-11-17 Geoffrey Garen - - Not reviewed. - - Try to fix Qt build. - - * JavaScriptCore.pri: - -2008-11-17 Geoffrey Garen - - Reviewed by Sam Weinig. - - Moved VM/Machine.cpp => interpreter/Interpreter.cpp. - - * DerivedSources.make: - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCore.scons: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - * VM/Machine.cpp: Removed. - * interpreter/Interpreter.cpp: Copied from VM/Machine.cpp. - -2008-11-17 Geoffrey Garen - - Reviewed by Sam Weinig. - - Moved VM/Machine.h => interpreter/Interpreter.h - - * GNUmakefile.am: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * VM/CTI.cpp: - * VM/CTI.h: - * VM/ExceptionHelpers.cpp: - * VM/Machine.cpp: - * VM/Machine.h: Removed. - * VM/SamplingTool.cpp: - * bytecode/CodeBlock.cpp: - * bytecompiler/BytecodeGenerator.cpp: - * bytecompiler/BytecodeGenerator.h: - * debugger/DebuggerCallFrame.cpp: - * interpreter: Added. - * interpreter/Interpreter.h: Copied from VM/Machine.h. - * profiler/ProfileGenerator.cpp: - * runtime/Arguments.h: - * runtime/ArrayPrototype.cpp: - * runtime/Collector.cpp: - * runtime/Completion.cpp: - * runtime/ExecState.h: - * runtime/FunctionPrototype.cpp: - * runtime/JSActivation.cpp: - * runtime/JSFunction.cpp: - * runtime/JSGlobalData.cpp: - * runtime/JSGlobalObject.cpp: - * runtime/JSGlobalObjectFunctions.cpp: - * wrec/WREC.cpp: - -2008-11-17 Geoffrey Garen - - Reviewed by Sam Weinig. - - Moved runtime/Interpreter.cpp => runtime/Completion.cpp. - - Moved functions from Interpreter.h to Completion.h, and removed - Interpreter.h from the project. - - * API/JSBase.cpp: - * AllInOneFile.cpp: - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - * jsc.cpp: - * runtime/Completion.cpp: Copied from runtime/Interpreter.cpp. - * runtime/Completion.h: - * runtime/Interpreter.cpp: Removed. - * runtime/Interpreter.h: Removed. - -2008-11-17 Gabor Loki - - Reviewed by Darin Adler. - - - Fix PCRE include path problem on Qt-port - - * JavaScriptCore.pri: - * pcre/pcre.pri: - -2008-11-17 Gabor Loki - - Reviewed by Darin Adler. - - - Add missing CTI source to the build system on Qt-port - - * JavaScriptCore.pri: - -2008-11-17 Geoffrey Garen - - Not reviewed. - - Try to fix JSGlue build. - - * JavaScriptCore.xcodeproj/project.pbxproj: - -2008-11-17 Geoffrey Garen - - Not reviewed. - - Try to fix Qt build. - - * jsc.pro: - -2008-11-17 Geoffrey Garen - - Not reviewed. - - Try to fix Qt build. - - * JavaScriptCore.pri: - -2008-11-17 Geoffrey Garen - - Not reviewed. - - Try to fix Qt build. - - * JavaScriptCore.pri: - -2008-11-17 Geoffrey Garen - - Reviewed by Sam Weinig. - - More file moves: - - VM/CodeBlock.* => bytecode/CodeBlock.* - VM/EvalCodeCache.h => bytecode/EvalCodeCache.h - VM/Instruction.h => bytecode/Instruction.h - VM/Opcode.* => bytecode/Opcode.* - - * GNUmakefile.am: - * JavaScriptCore.scons: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.vcproj/jsc/jsc.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - * VM/CodeBlock.cpp: Removed. - * VM/CodeBlock.h: Removed. - * VM/EvalCodeCache.h: Removed. - * VM/Instruction.h: Removed. - * VM/Opcode.cpp: Removed. - * VM/Opcode.h: Removed. - * bytecode: Added. - * bytecode/CodeBlock.cpp: Copied from VM/CodeBlock.cpp. - * bytecode/CodeBlock.h: Copied from VM/CodeBlock.h. - * bytecode/EvalCodeCache.h: Copied from VM/EvalCodeCache.h. - * bytecode/Instruction.h: Copied from VM/Instruction.h. - * bytecode/Opcode.cpp: Copied from VM/Opcode.cpp. - * bytecode/Opcode.h: Copied from VM/Opcode.h. - * jsc.pro: - * jscore.bkl: - -2008-11-17 Geoffrey Garen - - Not reviewed. - - Try to fix a few more builds. - - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCore.scons: - * JavaScriptCoreSources.bkl: - -2008-11-17 Geoffrey Garen - - Not reviewed. - - Try to fix gtk build. - - * GNUmakefile.am: - -2008-11-17 Geoffrey Garen - - Not reviewed. - - Try to fix Windows build. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - -2008-11-17 Geoffrey Garen - - Reviewed by Sam Weinig. - - Some file moves: - - VM/LabelID.h => bytecompiler/Label.h - VM/RegisterID.h => bytecompiler/RegisterID.h - VM/SegmentedVector.h => bytecompiler/SegmentedVector.h - bytecompiler/CodeGenerator.* => bytecompiler/BytecodeGenerator.* - - * AllInOneFile.cpp: - * JavaScriptCore.xcodeproj/project.pbxproj: - * VM/LabelID.h: Removed. - * VM/RegisterID.h: Removed. - * VM/SegmentedVector.h: Removed. - * bytecompiler/BytecodeGenerator.cpp: Copied from bytecompiler/CodeGenerator.cpp. - * bytecompiler/BytecodeGenerator.h: Copied from bytecompiler/CodeGenerator.h. - * bytecompiler/CodeGenerator.cpp: Removed. - * bytecompiler/CodeGenerator.h: Removed. - * bytecompiler/Label.h: Copied from VM/LabelID.h. - * bytecompiler/LabelScope.h: - * bytecompiler/RegisterID.h: Copied from VM/RegisterID.h. - * bytecompiler/SegmentedVector.h: Copied from VM/SegmentedVector.h. - * jsc.cpp: - * parser/Nodes.cpp: - -2008-11-17 Geoffrey Garen - - Not reviewed. - - Try to fix Windows build. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - -2008-11-17 Geoffrey Garen - - Not reviewed. - - Try to fix Windows build. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - -2008-11-17 Geoffrey Garen - - Not reviewed. - - Try to fix Windows build. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - -2008-11-16 Geoffrey Garen - - Not reviewed. - - Try to fix Windows build. - - * JavaScriptCore.vcproj/jsc/jsc.vcproj: - -2008-11-16 Geoffrey Garen - - Not reviewed. - - Try to fix Windows build. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - -2008-11-16 Geoffrey Garen - - Reviewed by Sam Weinig. - - Moved masm => assembler and split "AssemblerBuffer.h" out of "X86Assembler.h". - - Also renamed ENABLE_MASM to ENABLE_ASSEMBLER. - - * GNUmakefile.am: - * JavaScriptCore.xcodeproj/project.pbxproj: - * assembler: Added. - * assembler/AssemblerBuffer.h: Copied from masm/X86Assembler.h. - (JSC::AssemblerBuffer::AssemblerBuffer): - (JSC::AssemblerBuffer::~AssemblerBuffer): - (JSC::AssemblerBuffer::ensureSpace): - (JSC::AssemblerBuffer::isAligned): - (JSC::AssemblerBuffer::putByteUnchecked): - (JSC::AssemblerBuffer::putByte): - (JSC::AssemblerBuffer::putShortUnchecked): - (JSC::AssemblerBuffer::putShort): - (JSC::AssemblerBuffer::putIntUnchecked): - (JSC::AssemblerBuffer::putInt): - (JSC::AssemblerBuffer::data): - (JSC::AssemblerBuffer::size): - (JSC::AssemblerBuffer::reset): - (JSC::AssemblerBuffer::executableCopy): - (JSC::AssemblerBuffer::grow): - * assembler/X86Assembler.h: Copied from masm/X86Assembler.h. - * masm: Removed. - * masm/X86Assembler.h: Removed. - * wtf/Platform.h: - -2008-11-16 Geoffrey Garen - - Not reviewed. - - Try to fix gtk build. - - * GNUmakefile.am: - -2008-11-16 Geoffrey Garen - - Not reviewed. - - Fixed tyop. - - * VM/CTI.cpp: - -2008-11-16 Geoffrey Garen - - Not reviewed. - - Try to fix windows build. - - * VM/CTI.cpp: - -2008-11-16 Geoffrey Garen - - Not reviewed. - - Try to fix gtk build. - - * GNUmakefile.am: - -2008-11-16 Geoffrey Garen - - Reviewed by Sam Weinig. - - Renamed ENABLE_CTI and ENABLE(CTI) to ENABLE_JIT and ENABLE(JIT). - - * VM/CTI.cpp: - * VM/CTI.h: - * VM/CodeBlock.cpp: - (JSC::CodeBlock::~CodeBlock): - * VM/CodeBlock.h: - (JSC::CodeBlock::CodeBlock): - * VM/Machine.cpp: - (JSC::Interpreter::Interpreter): - (JSC::Interpreter::initialize): - (JSC::Interpreter::~Interpreter): - (JSC::Interpreter::execute): - (JSC::Interpreter::privateExecute): - * VM/Machine.h: - * bytecompiler/CodeGenerator.cpp: - (JSC::prepareJumpTableForStringSwitch): - * runtime/JSFunction.cpp: - (JSC::JSFunction::~JSFunction): - * runtime/JSGlobalData.h: - * wrec/WREC.h: - * wtf/Platform.h: - * wtf/TCSystemAlloc.cpp: - -2008-11-16 Geoffrey Garen - - Not reviewed. - - Try to fix gtk build. - - * VM/CTI.cpp: - -2008-11-16 Geoffrey Garen - - Reviewed by a few people on squirrelfish-dev. - - Renamed CTI => JIT. - - * VM/CTI.cpp: - (JSC::JIT::killLastResultRegister): - (JSC::JIT::emitGetVirtualRegister): - (JSC::JIT::emitGetVirtualRegisters): - (JSC::JIT::emitPutCTIArgFromVirtualRegister): - (JSC::JIT::emitPutCTIArg): - (JSC::JIT::emitGetCTIArg): - (JSC::JIT::emitPutCTIArgConstant): - (JSC::JIT::getConstantImmediateNumericArg): - (JSC::JIT::emitPutCTIParam): - (JSC::JIT::emitGetCTIParam): - (JSC::JIT::emitPutToCallFrameHeader): - (JSC::JIT::emitGetFromCallFrameHeader): - (JSC::JIT::emitPutVirtualRegister): - (JSC::JIT::emitInitRegister): - (JSC::JIT::printBytecodeOperandTypes): - (JSC::JIT::emitAllocateNumber): - (JSC::JIT::emitNakedCall): - (JSC::JIT::emitNakedFastCall): - (JSC::JIT::emitCTICall): - (JSC::JIT::emitJumpSlowCaseIfNotJSCell): - (JSC::JIT::linkSlowCaseIfNotJSCell): - (JSC::JIT::emitJumpSlowCaseIfNotImmNum): - (JSC::JIT::emitJumpSlowCaseIfNotImmNums): - (JSC::JIT::getDeTaggedConstantImmediate): - (JSC::JIT::emitFastArithDeTagImmediate): - (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): - (JSC::JIT::emitFastArithReTagImmediate): - (JSC::JIT::emitFastArithPotentiallyReTagImmediate): - (JSC::JIT::emitFastArithImmToInt): - (JSC::JIT::emitFastArithIntToImmOrSlowCase): - (JSC::JIT::emitFastArithIntToImmNoCheck): - (JSC::JIT::emitArithIntToImmWithJump): - (JSC::JIT::emitTagAsBoolImmediate): - (JSC::JIT::JIT): - (JSC::JIT::compileOpCallInitializeCallFrame): - (JSC::JIT::compileOpCallSetupArgs): - (JSC::JIT::compileOpCallEvalSetupArgs): - (JSC::JIT::compileOpConstructSetupArgs): - (JSC::JIT::compileOpCall): - (JSC::JIT::compileOpStrictEq): - (JSC::JIT::emitSlowScriptCheck): - (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): - (JSC::JIT::compileBinaryArithOp): - (JSC::JIT::compileBinaryArithOpSlowCase): - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileLinkPass): - (JSC::JIT::privateCompileSlowCases): - (JSC::JIT::privateCompile): - (JSC::JIT::privateCompileGetByIdSelf): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdChain): - (JSC::JIT::privateCompilePutByIdReplace): - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::unlinkCall): - (JSC::JIT::linkCall): - (JSC::JIT::privateCompileCTIMachineTrampolines): - (JSC::JIT::freeCTIMachineTrampolines): - (JSC::JIT::patchGetByIdSelf): - (JSC::JIT::patchPutByIdReplace): - (JSC::JIT::privateCompilePatchGetArrayLength): - (JSC::JIT::emitGetVariableObjectRegister): - (JSC::JIT::emitPutVariableObjectRegister): - * VM/CTI.h: - (JSC::JIT::compile): - (JSC::JIT::compileGetByIdSelf): - (JSC::JIT::compileGetByIdProto): - (JSC::JIT::compileGetByIdChain): - (JSC::JIT::compilePutByIdReplace): - (JSC::JIT::compilePutByIdTransition): - (JSC::JIT::compileCTIMachineTrampolines): - (JSC::JIT::compilePatchGetArrayLength): - * VM/CodeBlock.cpp: - (JSC::CodeBlock::unlinkCallers): - * VM/Machine.cpp: - (JSC::Interpreter::initialize): - (JSC::Interpreter::~Interpreter): - (JSC::Interpreter::execute): - (JSC::Interpreter::tryCTICachePutByID): - (JSC::Interpreter::tryCTICacheGetByID): - (JSC::Interpreter::cti_op_call_JSFunction): - (JSC::Interpreter::cti_vm_dontLazyLinkCall): - (JSC::Interpreter::cti_vm_lazyLinkCall): - * VM/Machine.h: - * VM/RegisterFile.h: - * parser/Nodes.h: - * runtime/JSArray.h: - * runtime/JSCell.h: - * runtime/JSFunction.h: - * runtime/JSImmediate.h: - * runtime/JSNumberCell.h: - * runtime/JSObject.h: - * runtime/JSString.h: - * runtime/JSVariableObject.h: - * runtime/ScopeChain.h: - * runtime/Structure.h: - * runtime/TypeInfo.h: - * runtime/UString.h: - -2008-11-16 Geoffrey Garen - - Not reviewed. - - Try to fix wx build. - - * jscore.bkl: - -2008-11-16 Geoffrey Garen - - Reviewed by Sam Weinig. - - Nixed X86:: and X86Assembler:: prefixes in a lot of places using typedefs. - - * VM/CTI.cpp: - (JSC::CTI::emitGetVirtualRegister): - (JSC::CTI::emitGetVirtualRegisters): - (JSC::CTI::emitPutCTIArgFromVirtualRegister): - (JSC::CTI::emitPutCTIArg): - (JSC::CTI::emitGetCTIArg): - (JSC::CTI::emitPutCTIParam): - (JSC::CTI::emitGetCTIParam): - (JSC::CTI::emitPutToCallFrameHeader): - (JSC::CTI::emitGetFromCallFrameHeader): - (JSC::CTI::emitPutVirtualRegister): - (JSC::CTI::emitNakedCall): - (JSC::CTI::emitNakedFastCall): - (JSC::CTI::emitCTICall): - (JSC::CTI::emitJumpSlowCaseIfNotJSCell): - (JSC::CTI::emitJumpSlowCaseIfNotImmNum): - (JSC::CTI::emitJumpSlowCaseIfNotImmNums): - (JSC::CTI::emitFastArithDeTagImmediate): - (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero): - (JSC::CTI::emitFastArithReTagImmediate): - (JSC::CTI::emitFastArithPotentiallyReTagImmediate): - (JSC::CTI::emitFastArithImmToInt): - (JSC::CTI::emitFastArithIntToImmOrSlowCase): - (JSC::CTI::emitFastArithIntToImmNoCheck): - (JSC::CTI::emitArithIntToImmWithJump): - (JSC::CTI::emitTagAsBoolImmediate): - (JSC::CTI::compileOpCall): - (JSC::CTI::compileOpStrictEq): - (JSC::CTI::emitSlowScriptCheck): - (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): - (JSC::CTI::compileBinaryArithOp): - (JSC::CTI::compileBinaryArithOpSlowCase): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - (JSC::CTI::privateCompile): - (JSC::CTI::privateCompileGetByIdSelf): - (JSC::CTI::privateCompileGetByIdProto): - (JSC::CTI::privateCompileGetByIdChain): - (JSC::CTI::privateCompilePutByIdReplace): - (JSC::CTI::privateCompilePutByIdTransition): - (JSC::CTI::privateCompileCTIMachineTrampolines): - (JSC::CTI::privateCompilePatchGetArrayLength): - (JSC::CTI::emitGetVariableObjectRegister): - (JSC::CTI::emitPutVariableObjectRegister): - * VM/CTI.h: - (JSC::CallRecord::CallRecord): - (JSC::JmpTable::JmpTable): - (JSC::SlowCaseEntry::SlowCaseEntry): - (JSC::CTI::JSRInfo::JSRInfo): - * wrec/WREC.h: - -2008-11-16 Geoffrey Garen - - Not reviewed. - - Try to fix Qt build. - - * JavaScriptCore.pri: - -2008-11-16 Geoffrey Garen - - Reviewed by Sam Weinig. - - Renamed OBJECT_OFFSET => FIELD_OFFSET - - Nixed use of OBJECT_OFFSET outside of CTI.cpp by making CTI a friend in - more places. - - * VM/CTI.cpp: - (JSC::CTI::compileOpCallInitializeCallFrame): - (JSC::CTI::compileOpCall): - (JSC::CTI::emitSlowScriptCheck): - (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): - (JSC::CTI::compileBinaryArithOp): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - (JSC::CTI::privateCompile): - (JSC::CTI::privateCompileGetByIdSelf): - (JSC::CTI::privateCompileGetByIdProto): - (JSC::CTI::privateCompileGetByIdChain): - (JSC::CTI::privateCompilePutByIdReplace): - (JSC::CTI::privateCompilePutByIdTransition): - (JSC::CTI::privateCompileCTIMachineTrampolines): - (JSC::CTI::privateCompilePatchGetArrayLength): - (JSC::CTI::emitGetVariableObjectRegister): - (JSC::CTI::emitPutVariableObjectRegister): - * runtime/JSValue.h: - * runtime/JSVariableObject.h: - -2008-11-16 Geoffrey Garen - - Reviewed by Sam Weinig. - - Renames: - - X86Assembler::copy => X86Assembler::executableCopy - AssemblerBuffer::copy => AssemblerBuffer::executableCopy - - * VM/CTI.cpp: - (JSC::CTI::privateCompile): - (JSC::CTI::privateCompileGetByIdSelf): - (JSC::CTI::privateCompileGetByIdProto): - (JSC::CTI::privateCompileGetByIdChain): - (JSC::CTI::privateCompilePutByIdReplace): - (JSC::CTI::privateCompilePutByIdTransition): - (JSC::CTI::privateCompileCTIMachineTrampolines): - (JSC::CTI::privateCompilePatchGetArrayLength): - * masm/X86Assembler.h: - (JSC::AssemblerBuffer::executableCopy): - (JSC::X86Assembler::executableCopy): - * wrec/WREC.cpp: - (JSC::WREC::compileRegExp): - -2008-11-16 Geoffrey Garen - - Reviewed by Sam Weinig. - - Renamed WREC => JSC::WREC, removing JSC:: prefix in a lot of places. - Renamed WRECFunction => WREC::CompiledRegExp, and deployed this type - name in place of a few casts. - - * runtime/RegExp.cpp: - (JSC::RegExp::RegExp): - (JSC::RegExp::~RegExp): - (JSC::RegExp::match): - * runtime/RegExp.h: - * wrec/CharacterClassConstructor.cpp: - * wrec/CharacterClassConstructor.h: - * wrec/WREC.cpp: - (JSC::WREC::compileRegExp): - * wrec/WREC.h: - (JSC::WREC::Generator::Generator): - (JSC::WREC::Parser::Parser): - (JSC::WREC::Parser::parseAlternative): - -2008-11-16 Geoffrey Garen - - Reviewed by Sam Weinig. - - Renamed BytecodeInterpreter => Interpreter. - - * JavaScriptCore.exp: - * VM/CTI.cpp: - (JSC::): - (JSC::CTI::compileOpCall): - (JSC::CTI::emitSlowScriptCheck): - (JSC::CTI::compileBinaryArithOpSlowCase): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - (JSC::CTI::privateCompile): - (JSC::CTI::privateCompileGetByIdSelf): - (JSC::CTI::privateCompileGetByIdProto): - (JSC::CTI::privateCompileGetByIdChain): - (JSC::CTI::privateCompilePutByIdReplace): - (JSC::CTI::privateCompilePutByIdTransition): - (JSC::CTI::privateCompileCTIMachineTrampolines): - (JSC::CTI::freeCTIMachineTrampolines): - (JSC::CTI::patchGetByIdSelf): - (JSC::CTI::patchPutByIdReplace): - (JSC::CTI::privateCompilePatchGetArrayLength): - * VM/CTI.h: - * VM/CodeBlock.cpp: - (JSC::CodeBlock::printStructures): - (JSC::CodeBlock::derefStructures): - (JSC::CodeBlock::refStructures): - * VM/Machine.cpp: - (JSC::jsLess): - (JSC::jsLessEq): - (JSC::Interpreter::resolve): - (JSC::Interpreter::resolveSkip): - (JSC::Interpreter::resolveGlobal): - (JSC::Interpreter::resolveBase): - (JSC::Interpreter::resolveBaseAndProperty): - (JSC::Interpreter::resolveBaseAndFunc): - (JSC::Interpreter::slideRegisterWindowForCall): - (JSC::Interpreter::callEval): - (JSC::Interpreter::Interpreter): - (JSC::Interpreter::initialize): - (JSC::Interpreter::~Interpreter): - (JSC::Interpreter::dumpCallFrame): - (JSC::Interpreter::dumpRegisters): - (JSC::Interpreter::isOpcode): - (JSC::Interpreter::unwindCallFrame): - (JSC::Interpreter::throwException): - (JSC::Interpreter::execute): - (JSC::Interpreter::debug): - (JSC::Interpreter::resetTimeoutCheck): - (JSC::Interpreter::checkTimeout): - (JSC::Interpreter::createExceptionScope): - (JSC::Interpreter::tryCachePutByID): - (JSC::Interpreter::uncachePutByID): - (JSC::Interpreter::tryCacheGetByID): - (JSC::Interpreter::uncacheGetByID): - (JSC::Interpreter::privateExecute): - (JSC::Interpreter::retrieveArguments): - (JSC::Interpreter::retrieveCaller): - (JSC::Interpreter::retrieveLastCaller): - (JSC::Interpreter::findFunctionCallFrame): - (JSC::Interpreter::tryCTICachePutByID): - (JSC::Interpreter::tryCTICacheGetByID): - (JSC::Interpreter::cti_op_convert_this): - (JSC::Interpreter::cti_op_end): - (JSC::Interpreter::cti_op_add): - (JSC::Interpreter::cti_op_pre_inc): - (JSC::Interpreter::cti_timeout_check): - (JSC::Interpreter::cti_register_file_check): - (JSC::Interpreter::cti_op_loop_if_less): - (JSC::Interpreter::cti_op_loop_if_lesseq): - (JSC::Interpreter::cti_op_new_object): - (JSC::Interpreter::cti_op_put_by_id): - (JSC::Interpreter::cti_op_put_by_id_second): - (JSC::Interpreter::cti_op_put_by_id_generic): - (JSC::Interpreter::cti_op_put_by_id_fail): - (JSC::Interpreter::cti_op_get_by_id): - (JSC::Interpreter::cti_op_get_by_id_second): - (JSC::Interpreter::cti_op_get_by_id_generic): - (JSC::Interpreter::cti_op_get_by_id_fail): - (JSC::Interpreter::cti_op_instanceof): - (JSC::Interpreter::cti_op_del_by_id): - (JSC::Interpreter::cti_op_mul): - (JSC::Interpreter::cti_op_new_func): - (JSC::Interpreter::cti_op_call_JSFunction): - (JSC::Interpreter::cti_op_call_arityCheck): - (JSC::Interpreter::cti_vm_dontLazyLinkCall): - (JSC::Interpreter::cti_vm_lazyLinkCall): - (JSC::Interpreter::cti_op_push_activation): - (JSC::Interpreter::cti_op_call_NotJSFunction): - (JSC::Interpreter::cti_op_create_arguments): - (JSC::Interpreter::cti_op_create_arguments_no_params): - (JSC::Interpreter::cti_op_tear_off_activation): - (JSC::Interpreter::cti_op_tear_off_arguments): - (JSC::Interpreter::cti_op_profile_will_call): - (JSC::Interpreter::cti_op_profile_did_call): - (JSC::Interpreter::cti_op_ret_scopeChain): - (JSC::Interpreter::cti_op_new_array): - (JSC::Interpreter::cti_op_resolve): - (JSC::Interpreter::cti_op_construct_JSConstruct): - (JSC::Interpreter::cti_op_construct_NotJSConstruct): - (JSC::Interpreter::cti_op_get_by_val): - (JSC::Interpreter::cti_op_resolve_func): - (JSC::Interpreter::cti_op_sub): - (JSC::Interpreter::cti_op_put_by_val): - (JSC::Interpreter::cti_op_put_by_val_array): - (JSC::Interpreter::cti_op_lesseq): - (JSC::Interpreter::cti_op_loop_if_true): - (JSC::Interpreter::cti_op_negate): - (JSC::Interpreter::cti_op_resolve_base): - (JSC::Interpreter::cti_op_resolve_skip): - (JSC::Interpreter::cti_op_resolve_global): - (JSC::Interpreter::cti_op_div): - (JSC::Interpreter::cti_op_pre_dec): - (JSC::Interpreter::cti_op_jless): - (JSC::Interpreter::cti_op_not): - (JSC::Interpreter::cti_op_jtrue): - (JSC::Interpreter::cti_op_post_inc): - (JSC::Interpreter::cti_op_eq): - (JSC::Interpreter::cti_op_lshift): - (JSC::Interpreter::cti_op_bitand): - (JSC::Interpreter::cti_op_rshift): - (JSC::Interpreter::cti_op_bitnot): - (JSC::Interpreter::cti_op_resolve_with_base): - (JSC::Interpreter::cti_op_new_func_exp): - (JSC::Interpreter::cti_op_mod): - (JSC::Interpreter::cti_op_less): - (JSC::Interpreter::cti_op_neq): - (JSC::Interpreter::cti_op_post_dec): - (JSC::Interpreter::cti_op_urshift): - (JSC::Interpreter::cti_op_bitxor): - (JSC::Interpreter::cti_op_new_regexp): - (JSC::Interpreter::cti_op_bitor): - (JSC::Interpreter::cti_op_call_eval): - (JSC::Interpreter::cti_op_throw): - (JSC::Interpreter::cti_op_get_pnames): - (JSC::Interpreter::cti_op_next_pname): - (JSC::Interpreter::cti_op_push_scope): - (JSC::Interpreter::cti_op_pop_scope): - (JSC::Interpreter::cti_op_typeof): - (JSC::Interpreter::cti_op_is_undefined): - (JSC::Interpreter::cti_op_is_boolean): - (JSC::Interpreter::cti_op_is_number): - (JSC::Interpreter::cti_op_is_string): - (JSC::Interpreter::cti_op_is_object): - (JSC::Interpreter::cti_op_is_function): - (JSC::Interpreter::cti_op_stricteq): - (JSC::Interpreter::cti_op_nstricteq): - (JSC::Interpreter::cti_op_to_jsnumber): - (JSC::Interpreter::cti_op_in): - (JSC::Interpreter::cti_op_push_new_scope): - (JSC::Interpreter::cti_op_jmp_scopes): - (JSC::Interpreter::cti_op_put_by_index): - (JSC::Interpreter::cti_op_switch_imm): - (JSC::Interpreter::cti_op_switch_char): - (JSC::Interpreter::cti_op_switch_string): - (JSC::Interpreter::cti_op_del_by_val): - (JSC::Interpreter::cti_op_put_getter): - (JSC::Interpreter::cti_op_put_setter): - (JSC::Interpreter::cti_op_new_error): - (JSC::Interpreter::cti_op_debug): - (JSC::Interpreter::cti_vm_throw): - * VM/Machine.h: - * VM/Register.h: - * VM/SamplingTool.h: - (JSC::SamplingTool::SamplingTool): - * bytecompiler/CodeGenerator.cpp: - (JSC::BytecodeGenerator::generate): - (JSC::BytecodeGenerator::BytecodeGenerator): - * jsc.cpp: - (runWithScripts): - * runtime/ExecState.h: - (JSC::ExecState::interpreter): - * runtime/JSCell.h: - * runtime/JSFunction.h: - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): - * runtime/JSGlobalData.h: - * runtime/JSString.h: - * wrec/WREC.cpp: - (WREC::compileRegExp): - * wrec/WREC.h: - -2008-11-16 Geoffrey Garen - - Roll out r38461 (my last patch) because it broke the world. - -2008-11-16 Geoffrey Garen - - Reviewed by Sam Weinig. - - A few more renames: - - BytecodeInterpreter => Interpreter - WREC => JSC::WREC, removing JSC:: prefix in a lot of places - X86Assembler::copy => X86Assembler::executableCopy - AssemblerBuffer::copy => AssemblerBuffer::executableCopy - WRECFunction => WREC::RegExpFunction - OBJECT_OFFSET => FIELD_OFFSET - - Also: - - Nixed use of OBJECT_OFFSET outside of CTI.cpp by making CTI a friend in more places. - Nixed X86:: and X86Assembler:: prefixes in a lot of places using typedefs - - * JavaScriptCore.exp: - * VM/CTI.cpp: - (JSC::): - (JSC::CTI::emitGetVirtualRegister): - (JSC::CTI::emitGetVirtualRegisters): - (JSC::CTI::emitPutCTIArgFromVirtualRegister): - (JSC::CTI::emitPutCTIArg): - (JSC::CTI::emitGetCTIArg): - (JSC::CTI::emitPutCTIParam): - (JSC::CTI::emitGetCTIParam): - (JSC::CTI::emitPutToCallFrameHeader): - (JSC::CTI::emitGetFromCallFrameHeader): - (JSC::CTI::emitPutVirtualRegister): - (JSC::CTI::emitNakedCall): - (JSC::CTI::emitNakedFastCall): - (JSC::CTI::emitCTICall): - (JSC::CTI::emitJumpSlowCaseIfNotJSCell): - (JSC::CTI::emitJumpSlowCaseIfNotImmNum): - (JSC::CTI::emitJumpSlowCaseIfNotImmNums): - (JSC::CTI::emitFastArithDeTagImmediate): - (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero): - (JSC::CTI::emitFastArithReTagImmediate): - (JSC::CTI::emitFastArithPotentiallyReTagImmediate): - (JSC::CTI::emitFastArithImmToInt): - (JSC::CTI::emitFastArithIntToImmOrSlowCase): - (JSC::CTI::emitFastArithIntToImmNoCheck): - (JSC::CTI::emitArithIntToImmWithJump): - (JSC::CTI::emitTagAsBoolImmediate): - (JSC::CTI::compileOpCallInitializeCallFrame): - (JSC::CTI::compileOpCall): - (JSC::CTI::compileOpStrictEq): - (JSC::CTI::emitSlowScriptCheck): - (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): - (JSC::CTI::compileBinaryArithOp): - (JSC::CTI::compileBinaryArithOpSlowCase): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - (JSC::CTI::privateCompile): - (JSC::CTI::privateCompileGetByIdSelf): - (JSC::CTI::privateCompileGetByIdProto): - (JSC::CTI::privateCompileGetByIdChain): - (JSC::CTI::privateCompilePutByIdReplace): - (JSC::CTI::privateCompilePutByIdTransition): - (JSC::CTI::privateCompileCTIMachineTrampolines): - (JSC::CTI::freeCTIMachineTrampolines): - (JSC::CTI::patchGetByIdSelf): - (JSC::CTI::patchPutByIdReplace): - (JSC::CTI::privateCompilePatchGetArrayLength): - (JSC::CTI::emitGetVariableObjectRegister): - (JSC::CTI::emitPutVariableObjectRegister): - * VM/CTI.h: - (JSC::CallRecord::CallRecord): - (JSC::JmpTable::JmpTable): - (JSC::SlowCaseEntry::SlowCaseEntry): - (JSC::CTI::JSRInfo::JSRInfo): - * VM/CodeBlock.cpp: - (JSC::CodeBlock::printStructures): - (JSC::CodeBlock::derefStructures): - (JSC::CodeBlock::refStructures): - * VM/Machine.cpp: - (JSC::jsLess): - (JSC::jsLessEq): - (JSC::Interpreter::resolve): - (JSC::Interpreter::resolveSkip): - (JSC::Interpreter::resolveGlobal): - (JSC::Interpreter::resolveBase): - (JSC::Interpreter::resolveBaseAndProperty): - (JSC::Interpreter::resolveBaseAndFunc): - (JSC::Interpreter::slideRegisterWindowForCall): - (JSC::Interpreter::callEval): - (JSC::Interpreter::Interpreter): - (JSC::Interpreter::initialize): - (JSC::Interpreter::~Interpreter): - (JSC::Interpreter::dumpCallFrame): - (JSC::Interpreter::dumpRegisters): - (JSC::Interpreter::isOpcode): - (JSC::Interpreter::unwindCallFrame): - (JSC::Interpreter::throwException): - (JSC::Interpreter::execute): - (JSC::Interpreter::debug): - (JSC::Interpreter::resetTimeoutCheck): - (JSC::Interpreter::checkTimeout): - (JSC::Interpreter::createExceptionScope): - (JSC::Interpreter::tryCachePutByID): - (JSC::Interpreter::uncachePutByID): - (JSC::Interpreter::tryCacheGetByID): - (JSC::Interpreter::uncacheGetByID): - (JSC::Interpreter::privateExecute): - (JSC::Interpreter::retrieveArguments): - (JSC::Interpreter::retrieveCaller): - (JSC::Interpreter::retrieveLastCaller): - (JSC::Interpreter::findFunctionCallFrame): - (JSC::Interpreter::tryCTICachePutByID): - (JSC::Interpreter::tryCTICacheGetByID): - (JSC::): - (JSC::Interpreter::cti_op_convert_this): - (JSC::Interpreter::cti_op_end): - (JSC::Interpreter::cti_op_add): - (JSC::Interpreter::cti_op_pre_inc): - (JSC::Interpreter::cti_timeout_check): - (JSC::Interpreter::cti_register_file_check): - (JSC::Interpreter::cti_op_loop_if_less): - (JSC::Interpreter::cti_op_loop_if_lesseq): - (JSC::Interpreter::cti_op_new_object): - (JSC::Interpreter::cti_op_put_by_id): - (JSC::Interpreter::cti_op_put_by_id_second): - (JSC::Interpreter::cti_op_put_by_id_generic): - (JSC::Interpreter::cti_op_put_by_id_fail): - (JSC::Interpreter::cti_op_get_by_id): - (JSC::Interpreter::cti_op_get_by_id_second): - (JSC::Interpreter::cti_op_get_by_id_generic): - (JSC::Interpreter::cti_op_get_by_id_fail): - (JSC::Interpreter::cti_op_instanceof): - (JSC::Interpreter::cti_op_del_by_id): - (JSC::Interpreter::cti_op_mul): - (JSC::Interpreter::cti_op_new_func): - (JSC::Interpreter::cti_op_call_JSFunction): - (JSC::Interpreter::cti_op_call_arityCheck): - (JSC::Interpreter::cti_vm_dontLazyLinkCall): - (JSC::Interpreter::cti_vm_lazyLinkCall): - (JSC::Interpreter::cti_op_push_activation): - (JSC::Interpreter::cti_op_call_NotJSFunction): - (JSC::Interpreter::cti_op_create_arguments): - (JSC::Interpreter::cti_op_create_arguments_no_params): - (JSC::Interpreter::cti_op_tear_off_activation): - (JSC::Interpreter::cti_op_tear_off_arguments): - (JSC::Interpreter::cti_op_profile_will_call): - (JSC::Interpreter::cti_op_profile_did_call): - (JSC::Interpreter::cti_op_ret_scopeChain): - (JSC::Interpreter::cti_op_new_array): - (JSC::Interpreter::cti_op_resolve): - (JSC::Interpreter::cti_op_construct_JSConstruct): - (JSC::Interpreter::cti_op_construct_NotJSConstruct): - (JSC::Interpreter::cti_op_get_by_val): - (JSC::Interpreter::cti_op_resolve_func): - (JSC::Interpreter::cti_op_sub): - (JSC::Interpreter::cti_op_put_by_val): - (JSC::Interpreter::cti_op_put_by_val_array): - (JSC::Interpreter::cti_op_lesseq): - (JSC::Interpreter::cti_op_loop_if_true): - (JSC::Interpreter::cti_op_negate): - (JSC::Interpreter::cti_op_resolve_base): - (JSC::Interpreter::cti_op_resolve_skip): - (JSC::Interpreter::cti_op_resolve_global): - (JSC::Interpreter::cti_op_div): - (JSC::Interpreter::cti_op_pre_dec): - (JSC::Interpreter::cti_op_jless): - (JSC::Interpreter::cti_op_not): - (JSC::Interpreter::cti_op_jtrue): - (JSC::Interpreter::cti_op_post_inc): - (JSC::Interpreter::cti_op_eq): - (JSC::Interpreter::cti_op_lshift): - (JSC::Interpreter::cti_op_bitand): - (JSC::Interpreter::cti_op_rshift): - (JSC::Interpreter::cti_op_bitnot): - (JSC::Interpreter::cti_op_resolve_with_base): - (JSC::Interpreter::cti_op_new_func_exp): - (JSC::Interpreter::cti_op_mod): - (JSC::Interpreter::cti_op_less): - (JSC::Interpreter::cti_op_neq): - (JSC::Interpreter::cti_op_post_dec): - (JSC::Interpreter::cti_op_urshift): - (JSC::Interpreter::cti_op_bitxor): - (JSC::Interpreter::cti_op_new_regexp): - (JSC::Interpreter::cti_op_bitor): - (JSC::Interpreter::cti_op_call_eval): - (JSC::Interpreter::cti_op_throw): - (JSC::Interpreter::cti_op_get_pnames): - (JSC::Interpreter::cti_op_next_pname): - (JSC::Interpreter::cti_op_push_scope): - (JSC::Interpreter::cti_op_pop_scope): - (JSC::Interpreter::cti_op_typeof): - (JSC::Interpreter::cti_op_is_undefined): - (JSC::Interpreter::cti_op_is_boolean): - (JSC::Interpreter::cti_op_is_number): - (JSC::Interpreter::cti_op_is_string): - (JSC::Interpreter::cti_op_is_object): - (JSC::Interpreter::cti_op_is_function): - (JSC::Interpreter::cti_op_stricteq): - (JSC::Interpreter::cti_op_nstricteq): - (JSC::Interpreter::cti_op_to_jsnumber): - (JSC::Interpreter::cti_op_in): - (JSC::Interpreter::cti_op_push_new_scope): - (JSC::Interpreter::cti_op_jmp_scopes): - (JSC::Interpreter::cti_op_put_by_index): - (JSC::Interpreter::cti_op_switch_imm): - (JSC::Interpreter::cti_op_switch_char): - (JSC::Interpreter::cti_op_switch_string): - (JSC::Interpreter::cti_op_del_by_val): - (JSC::Interpreter::cti_op_put_getter): - (JSC::Interpreter::cti_op_put_setter): - (JSC::Interpreter::cti_op_new_error): - (JSC::Interpreter::cti_op_debug): - (JSC::Interpreter::cti_vm_throw): - * VM/Machine.h: - * VM/Register.h: - * VM/SamplingTool.cpp: - (JSC::SamplingTool::dump): - * VM/SamplingTool.h: - (JSC::SamplingTool::SamplingTool): - * bytecompiler/CodeGenerator.cpp: - (JSC::BytecodeGenerator::generate): - (JSC::BytecodeGenerator::BytecodeGenerator): - * jsc.cpp: - (runWithScripts): - * masm/X86Assembler.h: - (JSC::AssemblerBuffer::executableCopy): - (JSC::X86Assembler::executableCopy): - * runtime/ExecState.h: - (JSC::ExecState::interpreter): - * runtime/JSCell.h: - * runtime/JSFunction.h: - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): - * runtime/JSGlobalData.h: - * runtime/JSImmediate.h: - * runtime/JSString.h: - * runtime/JSValue.h: - * runtime/JSVariableObject.h: - * runtime/RegExp.cpp: - (JSC::RegExp::RegExp): - (JSC::RegExp::~RegExp): - (JSC::RegExp::match): - * runtime/RegExp.h: - * wrec/CharacterClassConstructor.cpp: - * wrec/CharacterClassConstructor.h: - * wrec/WREC.cpp: - (JSC::WREC::compileRegExp): - * wrec/WREC.h: - (JSC::WREC::Generator::Generator): - (JSC::WREC::Parser::): - (JSC::WREC::Parser::Parser): - (JSC::WREC::Parser::parseAlternative): - -2008-11-16 Greg Bolsinga - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=21810 - Remove use of static C++ objects that are destroyed at exit time (destructors) - - Conditionally have the DEFINE_STATIC_LOCAL workaround - (Codegen issue with C++ static reference in gcc build 5465) based upon the compiler - build versions. It will use the: - static T& = *new T; - style for all other compilers. - - * wtf/StdLibExtras.h: - -2008-11-16 Alexey Proskuryakov - - Reviewed by Dan Bernstein. - - https://bugs.webkit.org/show_bug.cgi?id=22290 - Remove cross-heap GC and MessagePort multi-threading support - - It is broken (and may not be implementable at all), and no longer needed, as we - don't use MessagePorts for communication with workers any more. - - * JavaScriptCore.exp: - * runtime/Collector.cpp: - (JSC::Heap::collect): - * runtime/JSGlobalObject.cpp: - * runtime/JSGlobalObject.h: - Remove hooks for cross-heap GC. - -2008-11-15 Sam Weinig - - Reviewed by Cameron Zwarich. - - Cleanup jsc command line code a little. - - * jsc.cpp: - (functionQuit): - (main): Use standard exit status macros - (cleanupGlobalData): Factor out cleanup code into this function. - (printUsageStatement): Use standard exit status macros. - -2008-11-15 Sam Weinig - - Reviewed by Cameron Zwarich. - - Cleanup BytecodeGenerator constructors. - - * bytecompiler/CodeGenerator.cpp: - (JSC::BytecodeGenerator::BytecodeGenerator): - * bytecompiler/CodeGenerator.h: - * parser/Nodes.cpp: - (JSC::ProgramNode::generateBytecode): - -2008-11-15 Darin Adler - - Rubber stamped by Geoff Garen. - - - do the long-planned StructureID -> Structure rename - - * API/JSCallbackConstructor.cpp: - (JSC::JSCallbackConstructor::JSCallbackConstructor): - * API/JSCallbackConstructor.h: - (JSC::JSCallbackConstructor::createStructure): - * API/JSCallbackFunction.h: - (JSC::JSCallbackFunction::createStructure): - * API/JSCallbackObject.h: - (JSC::JSCallbackObject::createStructure): - * API/JSCallbackObjectFunctions.h: - (JSC::::JSCallbackObject): - * API/JSValueRef.cpp: - (JSValueIsInstanceOfConstructor): - * GNUmakefile.am: - * JavaScriptCore.exp: - * JavaScriptCore.pri: - * JavaScriptCore.scons: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - * VM/CTI.cpp: - (JSC::CTI::compileBinaryArithOp): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileGetByIdSelf): - (JSC::CTI::privateCompileGetByIdProto): - (JSC::CTI::privateCompileGetByIdChain): - (JSC::CTI::privateCompilePutByIdReplace): - (JSC::transitionWillNeedStorageRealloc): - (JSC::CTI::privateCompilePutByIdTransition): - (JSC::CTI::patchGetByIdSelf): - (JSC::CTI::patchPutByIdReplace): - * VM/CTI.h: - (JSC::CTI::compileGetByIdSelf): - (JSC::CTI::compileGetByIdProto): - (JSC::CTI::compileGetByIdChain): - (JSC::CTI::compilePutByIdReplace): - (JSC::CTI::compilePutByIdTransition): - * VM/CodeBlock.cpp: - (JSC::CodeBlock::printStructure): - (JSC::CodeBlock::printStructures): - (JSC::CodeBlock::dump): - (JSC::CodeBlock::~CodeBlock): - (JSC::CodeBlock::derefStructures): - (JSC::CodeBlock::refStructures): - * VM/CodeBlock.h: - * VM/Instruction.h: - (JSC::Instruction::Instruction): - (JSC::Instruction::): - * VM/Machine.cpp: - (JSC::jsTypeStringForValue): - (JSC::jsIsObjectType): - (JSC::BytecodeInterpreter::resolveGlobal): - (JSC::BytecodeInterpreter::BytecodeInterpreter): - (JSC::cachePrototypeChain): - (JSC::BytecodeInterpreter::tryCachePutByID): - (JSC::BytecodeInterpreter::uncachePutByID): - (JSC::BytecodeInterpreter::tryCacheGetByID): - (JSC::BytecodeInterpreter::uncacheGetByID): - (JSC::BytecodeInterpreter::privateExecute): - (JSC::BytecodeInterpreter::tryCTICachePutByID): - (JSC::BytecodeInterpreter::tryCTICacheGetByID): - (JSC::BytecodeInterpreter::cti_op_instanceof): - (JSC::BytecodeInterpreter::cti_op_construct_JSConstruct): - (JSC::BytecodeInterpreter::cti_op_resolve_global): - (JSC::BytecodeInterpreter::cti_op_is_undefined): - * runtime/Arguments.h: - (JSC::Arguments::createStructure): - * runtime/ArrayConstructor.cpp: - (JSC::ArrayConstructor::ArrayConstructor): - * runtime/ArrayConstructor.h: - * runtime/ArrayPrototype.cpp: - (JSC::ArrayPrototype::ArrayPrototype): - * runtime/ArrayPrototype.h: - * runtime/BatchedTransitionOptimizer.h: - (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer): - (JSC::BatchedTransitionOptimizer::~BatchedTransitionOptimizer): - * runtime/BooleanConstructor.cpp: - (JSC::BooleanConstructor::BooleanConstructor): - * runtime/BooleanConstructor.h: - * runtime/BooleanObject.cpp: - (JSC::BooleanObject::BooleanObject): - * runtime/BooleanObject.h: - * runtime/BooleanPrototype.cpp: - (JSC::BooleanPrototype::BooleanPrototype): - * runtime/BooleanPrototype.h: - * runtime/DateConstructor.cpp: - (JSC::DateConstructor::DateConstructor): - * runtime/DateConstructor.h: - * runtime/DateInstance.cpp: - (JSC::DateInstance::DateInstance): - * runtime/DateInstance.h: - * runtime/DatePrototype.cpp: - (JSC::DatePrototype::DatePrototype): - * runtime/DatePrototype.h: - (JSC::DatePrototype::createStructure): - * runtime/ErrorConstructor.cpp: - (JSC::ErrorConstructor::ErrorConstructor): - * runtime/ErrorConstructor.h: - * runtime/ErrorInstance.cpp: - (JSC::ErrorInstance::ErrorInstance): - * runtime/ErrorInstance.h: - * runtime/ErrorPrototype.cpp: - (JSC::ErrorPrototype::ErrorPrototype): - * runtime/ErrorPrototype.h: - * runtime/FunctionConstructor.cpp: - (JSC::FunctionConstructor::FunctionConstructor): - * runtime/FunctionConstructor.h: - * runtime/FunctionPrototype.cpp: - (JSC::FunctionPrototype::FunctionPrototype): - (JSC::FunctionPrototype::addFunctionProperties): - * runtime/FunctionPrototype.h: - (JSC::FunctionPrototype::createStructure): - * runtime/GlobalEvalFunction.cpp: - (JSC::GlobalEvalFunction::GlobalEvalFunction): - * runtime/GlobalEvalFunction.h: - * runtime/Identifier.h: - * runtime/InternalFunction.cpp: - (JSC::InternalFunction::InternalFunction): - * runtime/InternalFunction.h: - (JSC::InternalFunction::createStructure): - (JSC::InternalFunction::InternalFunction): - * runtime/JSActivation.cpp: - (JSC::JSActivation::JSActivation): - * runtime/JSActivation.h: - (JSC::JSActivation::createStructure): - * runtime/JSArray.cpp: - (JSC::JSArray::JSArray): - * runtime/JSArray.h: - (JSC::JSArray::createStructure): - * runtime/JSCell.h: - (JSC::JSCell::JSCell): - (JSC::JSCell::isObject): - (JSC::JSCell::isString): - (JSC::JSCell::structure): - (JSC::JSValue::needsThisConversion): - * runtime/JSFunction.cpp: - (JSC::JSFunction::construct): - * runtime/JSFunction.h: - (JSC::JSFunction::JSFunction): - (JSC::JSFunction::createStructure): - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): - (JSC::JSGlobalData::createLeaked): - * runtime/JSGlobalData.h: - * runtime/JSGlobalObject.cpp: - (JSC::markIfNeeded): - (JSC::JSGlobalObject::reset): - * runtime/JSGlobalObject.h: - (JSC::JSGlobalObject::JSGlobalObject): - (JSC::JSGlobalObject::argumentsStructure): - (JSC::JSGlobalObject::arrayStructure): - (JSC::JSGlobalObject::booleanObjectStructure): - (JSC::JSGlobalObject::callbackConstructorStructure): - (JSC::JSGlobalObject::callbackFunctionStructure): - (JSC::JSGlobalObject::callbackObjectStructure): - (JSC::JSGlobalObject::dateStructure): - (JSC::JSGlobalObject::emptyObjectStructure): - (JSC::JSGlobalObject::errorStructure): - (JSC::JSGlobalObject::functionStructure): - (JSC::JSGlobalObject::numberObjectStructure): - (JSC::JSGlobalObject::prototypeFunctionStructure): - (JSC::JSGlobalObject::regExpMatchesArrayStructure): - (JSC::JSGlobalObject::regExpStructure): - (JSC::JSGlobalObject::stringObjectStructure): - (JSC::JSGlobalObject::createStructure): - (JSC::Structure::prototypeForLookup): - * runtime/JSNotAnObject.h: - (JSC::JSNotAnObject::createStructure): - * runtime/JSNumberCell.h: - (JSC::JSNumberCell::createStructure): - (JSC::JSNumberCell::JSNumberCell): - * runtime/JSObject.cpp: - (JSC::JSObject::mark): - (JSC::JSObject::put): - (JSC::JSObject::deleteProperty): - (JSC::JSObject::defineGetter): - (JSC::JSObject::defineSetter): - (JSC::JSObject::getPropertyAttributes): - (JSC::JSObject::getPropertyNames): - (JSC::JSObject::removeDirect): - (JSC::JSObject::createInheritorID): - * runtime/JSObject.h: - (JSC::JSObject::getDirect): - (JSC::JSObject::getDirectLocation): - (JSC::JSObject::hasCustomProperties): - (JSC::JSObject::hasGetterSetterProperties): - (JSC::JSObject::createStructure): - (JSC::JSObject::JSObject): - (JSC::JSObject::~JSObject): - (JSC::JSObject::prototype): - (JSC::JSObject::setPrototype): - (JSC::JSObject::setStructure): - (JSC::JSObject::inheritorID): - (JSC::JSObject::inlineGetOwnPropertySlot): - (JSC::JSObject::getOwnPropertySlotForWrite): - (JSC::JSCell::fastGetOwnPropertySlot): - (JSC::JSObject::putDirect): - (JSC::JSObject::putDirectWithoutTransition): - (JSC::JSObject::transitionTo): - * runtime/JSPropertyNameIterator.h: - (JSC::JSPropertyNameIterator::next): - * runtime/JSStaticScopeObject.h: - (JSC::JSStaticScopeObject::JSStaticScopeObject): - (JSC::JSStaticScopeObject::createStructure): - * runtime/JSString.h: - (JSC::JSString::JSString): - (JSC::JSString::createStructure): - * runtime/JSVariableObject.h: - (JSC::JSVariableObject::JSVariableObject): - * runtime/JSWrapperObject.h: - (JSC::JSWrapperObject::JSWrapperObject): - * runtime/MathObject.cpp: - (JSC::MathObject::MathObject): - * runtime/MathObject.h: - (JSC::MathObject::createStructure): - * runtime/NativeErrorConstructor.cpp: - (JSC::NativeErrorConstructor::NativeErrorConstructor): - * runtime/NativeErrorConstructor.h: - * runtime/NativeErrorPrototype.cpp: - (JSC::NativeErrorPrototype::NativeErrorPrototype): - * runtime/NativeErrorPrototype.h: - * runtime/NumberConstructor.cpp: - (JSC::NumberConstructor::NumberConstructor): - * runtime/NumberConstructor.h: - (JSC::NumberConstructor::createStructure): - * runtime/NumberObject.cpp: - (JSC::NumberObject::NumberObject): - * runtime/NumberObject.h: - * runtime/NumberPrototype.cpp: - (JSC::NumberPrototype::NumberPrototype): - * runtime/NumberPrototype.h: - * runtime/ObjectConstructor.cpp: - (JSC::ObjectConstructor::ObjectConstructor): - * runtime/ObjectConstructor.h: - * runtime/ObjectPrototype.cpp: - (JSC::ObjectPrototype::ObjectPrototype): - * runtime/ObjectPrototype.h: - * runtime/Operations.h: - (JSC::equalSlowCaseInline): - * runtime/PropertyNameArray.h: - (JSC::PropertyNameArrayData::setCachedStructure): - (JSC::PropertyNameArrayData::cachedStructure): - (JSC::PropertyNameArrayData::setCachedPrototypeChain): - (JSC::PropertyNameArrayData::cachedPrototypeChain): - (JSC::PropertyNameArrayData::PropertyNameArrayData): - * runtime/PrototypeFunction.cpp: - (JSC::PrototypeFunction::PrototypeFunction): - * runtime/PrototypeFunction.h: - * runtime/RegExpConstructor.cpp: - (JSC::RegExpConstructor::RegExpConstructor): - * runtime/RegExpConstructor.h: - (JSC::RegExpConstructor::createStructure): - * runtime/RegExpObject.cpp: - (JSC::RegExpObject::RegExpObject): - * runtime/RegExpObject.h: - (JSC::RegExpObject::createStructure): - * runtime/RegExpPrototype.cpp: - (JSC::RegExpPrototype::RegExpPrototype): - * runtime/RegExpPrototype.h: - * runtime/StringConstructor.cpp: - (JSC::StringConstructor::StringConstructor): - * runtime/StringConstructor.h: - * runtime/StringObject.cpp: - (JSC::StringObject::StringObject): - * runtime/StringObject.h: - (JSC::StringObject::createStructure): - * runtime/StringObjectThatMasqueradesAsUndefined.h: - (JSC::StringObjectThatMasqueradesAsUndefined::create): - (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined): - (JSC::StringObjectThatMasqueradesAsUndefined::createStructure): - * runtime/StringPrototype.cpp: - (JSC::StringPrototype::StringPrototype): - * runtime/StringPrototype.h: - * runtime/Structure.cpp: Copied from JavaScriptCore/runtime/StructureID.cpp. - (JSC::Structure::dumpStatistics): - (JSC::Structure::Structure): - (JSC::Structure::~Structure): - (JSC::Structure::startIgnoringLeaks): - (JSC::Structure::stopIgnoringLeaks): - (JSC::Structure::materializePropertyMap): - (JSC::Structure::getEnumerablePropertyNames): - (JSC::Structure::clearEnumerationCache): - (JSC::Structure::growPropertyStorageCapacity): - (JSC::Structure::addPropertyTransitionToExistingStructure): - (JSC::Structure::addPropertyTransition): - (JSC::Structure::removePropertyTransition): - (JSC::Structure::changePrototypeTransition): - (JSC::Structure::getterSetterTransition): - (JSC::Structure::toDictionaryTransition): - (JSC::Structure::fromDictionaryTransition): - (JSC::Structure::addPropertyWithoutTransition): - (JSC::Structure::removePropertyWithoutTransition): - (JSC::Structure::createCachedPrototypeChain): - (JSC::Structure::checkConsistency): - (JSC::Structure::copyPropertyTable): - (JSC::Structure::get): - (JSC::Structure::put): - (JSC::Structure::remove): - (JSC::Structure::insertIntoPropertyMapHashTable): - (JSC::Structure::createPropertyMapHashTable): - (JSC::Structure::expandPropertyMapHashTable): - (JSC::Structure::rehashPropertyMapHashTable): - (JSC::Structure::getEnumerablePropertyNamesInternal): - * runtime/Structure.h: Copied from JavaScriptCore/runtime/StructureID.h. - (JSC::Structure::create): - (JSC::Structure::previousID): - (JSC::Structure::setCachedPrototypeChain): - (JSC::Structure::cachedPrototypeChain): - (JSC::Structure::): - (JSC::Structure::get): - * runtime/StructureChain.cpp: Copied from JavaScriptCore/runtime/StructureIDChain.cpp. - (JSC::StructureChain::StructureChain): - (JSC::structureChainsAreEqual): - * runtime/StructureChain.h: Copied from JavaScriptCore/runtime/StructureIDChain.h. - (JSC::StructureChain::create): - (JSC::StructureChain::head): - * runtime/StructureID.cpp: Removed. - * runtime/StructureID.h: Removed. - * runtime/StructureIDChain.cpp: Removed. - * runtime/StructureIDChain.h: Removed. - * runtime/StructureIDTransitionTable.h: Removed. - * runtime/StructureTransitionTable.h: Copied from JavaScriptCore/runtime/StructureIDTransitionTable.h. - -2008-11-15 Darin Adler - - - fix non-WREC build - - * runtime/RegExp.cpp: Put "using namespace WREC" inside #if ENABLE(WREC). - -2008-11-15 Kevin Ollivier - - Reviewed by Timothy Hatcher. - - As ThreadingNone doesn't implement threads, isMainThread should return true, - not false. - - https://bugs.webkit.org/show_bug.cgi?id=22285 - - * wtf/ThreadingNone.cpp: - (WTF::isMainThread): - -2008-11-15 Geoffrey Garen - - Reviewed by Sam Weinig. - - Moved all WREC-related code into WREC.cpp and put it in a WREC namespace. - Removed the WREC prefix from class names. - - * VM/CTI.cpp: - * VM/CTI.h: - * VM/Machine.h: - (JSC::BytecodeInterpreter::assemblerBuffer): - * masm/X86Assembler.h: - * runtime/RegExp.cpp: - (JSC::RegExp::RegExp): - * wrec/CharacterClassConstructor.cpp: - * wrec/CharacterClassConstructor.h: - * wrec/WREC.cpp: - (WREC::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor): - (WREC::GeneratePatternCharacterFunctor::generateAtom): - (WREC::GeneratePatternCharacterFunctor::backtrack): - (WREC::GenerateCharacterClassFunctor::generateAtom): - (WREC::GenerateCharacterClassFunctor::backtrack): - (WREC::GenerateBackreferenceFunctor::generateAtom): - (WREC::GenerateBackreferenceFunctor::backtrack): - (WREC::GenerateParenthesesNonGreedyFunctor::generateAtom): - (WREC::GenerateParenthesesNonGreedyFunctor::backtrack): - (WREC::Generator::generateBacktrack1): - (WREC::Generator::generateBacktrackBackreference): - (WREC::Generator::generateBackreferenceQuantifier): - (WREC::Generator::generateNonGreedyQuantifier): - (WREC::Generator::generateGreedyQuantifier): - (WREC::Generator::generatePatternCharacter): - (WREC::Generator::generateCharacterClassInvertedRange): - (WREC::Generator::generateCharacterClassInverted): - (WREC::Generator::generateCharacterClass): - (WREC::Generator::generateParentheses): - (WREC::Generator::generateParenthesesNonGreedy): - (WREC::Generator::generateParenthesesResetTrampoline): - (WREC::Generator::generateAssertionBOL): - (WREC::Generator::generateAssertionEOL): - (WREC::Generator::generateAssertionWordBoundary): - (WREC::Generator::generateBackreference): - (WREC::Generator::generateDisjunction): - (WREC::Generator::terminateDisjunction): - (WREC::Parser::parseGreedyQuantifier): - (WREC::Parser::parseQuantifier): - (WREC::Parser::parsePatternCharacterQualifier): - (WREC::Parser::parseCharacterClassQuantifier): - (WREC::Parser::parseBackreferenceQuantifier): - (WREC::Parser::parseParentheses): - (WREC::Parser::parseCharacterClass): - (WREC::Parser::parseOctalEscape): - (WREC::Parser::parseEscape): - (WREC::Parser::parseTerm): - (WREC::Parser::parseDisjunction): - (WREC::compileRegExp): - * wrec/WREC.h: - (WREC::Generator::Generator): - (WREC::Parser::Parser): - (WREC::Parser::parseAlternative): - -2008-11-15 Geoffrey Garen - - Reviewed by Sam Weinig. - - Changed another case of "m_jit" to "m_assembler". - - * VM/CTI.cpp: - * wrec/WREC.cpp: - * wrec/WREC.h: - (JSC::WRECGenerator::WRECGenerator): - (JSC::WRECParser::WRECParser): - -2008-11-15 Geoffrey Garen - - Reviewed by Sam Weinig. - - Renamed "jit" to "assembler" and, for brevity, replaced *jit.* with __ - using a macro. - - * VM/CTI.cpp: - (JSC::CTI::emitGetVirtualRegister): - (JSC::CTI::emitPutCTIArgFromVirtualRegister): - (JSC::CTI::emitPutCTIArg): - (JSC::CTI::emitGetCTIArg): - (JSC::CTI::emitPutCTIArgConstant): - (JSC::CTI::emitPutCTIParam): - (JSC::CTI::emitGetCTIParam): - (JSC::CTI::emitPutToCallFrameHeader): - (JSC::CTI::emitGetFromCallFrameHeader): - (JSC::CTI::emitPutVirtualRegister): - (JSC::CTI::emitInitRegister): - (JSC::CTI::emitAllocateNumber): - (JSC::CTI::emitNakedCall): - (JSC::CTI::emitNakedFastCall): - (JSC::CTI::emitCTICall): - (JSC::CTI::emitJumpSlowCaseIfNotJSCell): - (JSC::CTI::linkSlowCaseIfNotJSCell): - (JSC::CTI::emitJumpSlowCaseIfNotImmNum): - (JSC::CTI::emitJumpSlowCaseIfNotImmNums): - (JSC::CTI::emitFastArithDeTagImmediate): - (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero): - (JSC::CTI::emitFastArithReTagImmediate): - (JSC::CTI::emitFastArithPotentiallyReTagImmediate): - (JSC::CTI::emitFastArithImmToInt): - (JSC::CTI::emitFastArithIntToImmOrSlowCase): - (JSC::CTI::emitFastArithIntToImmNoCheck): - (JSC::CTI::emitArithIntToImmWithJump): - (JSC::CTI::emitTagAsBoolImmediate): - (JSC::CTI::CTI): - (JSC::CTI::compileOpCallInitializeCallFrame): - (JSC::CTI::compileOpCall): - (JSC::CTI::compileOpStrictEq): - (JSC::CTI::emitSlowScriptCheck): - (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): - (JSC::CTI::compileBinaryArithOp): - (JSC::CTI::compileBinaryArithOpSlowCase): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileLinkPass): - (JSC::CTI::privateCompileSlowCases): - (JSC::CTI::privateCompile): - (JSC::CTI::privateCompileGetByIdSelf): - (JSC::CTI::privateCompileGetByIdProto): - (JSC::CTI::privateCompileGetByIdChain): - (JSC::CTI::privateCompilePutByIdReplace): - (JSC::CTI::privateCompilePutByIdTransition): - (JSC::CTI::privateCompileCTIMachineTrampolines): - (JSC::CTI::privateCompilePatchGetArrayLength): - (JSC::CTI::emitGetVariableObjectRegister): - (JSC::CTI::emitPutVariableObjectRegister): - (JSC::CTI::compileRegExp): - * VM/CTI.h: - * wrec/WREC.cpp: - (JSC::WRECGenerator::generateBacktrack1): - (JSC::WRECGenerator::generateBacktrackBackreference): - (JSC::WRECGenerator::generateBackreferenceQuantifier): - (JSC::WRECGenerator::generateNonGreedyQuantifier): - (JSC::WRECGenerator::generateGreedyQuantifier): - (JSC::WRECGenerator::generatePatternCharacter): - (JSC::WRECGenerator::generateCharacterClassInvertedRange): - (JSC::WRECGenerator::generateCharacterClassInverted): - (JSC::WRECGenerator::generateCharacterClass): - (JSC::WRECGenerator::generateParentheses): - (JSC::WRECGenerator::generateParenthesesNonGreedy): - (JSC::WRECGenerator::generateParenthesesResetTrampoline): - (JSC::WRECGenerator::generateAssertionBOL): - (JSC::WRECGenerator::generateAssertionEOL): - (JSC::WRECGenerator::generateAssertionWordBoundary): - (JSC::WRECGenerator::generateBackreference): - (JSC::WRECGenerator::generateDisjunction): - (JSC::WRECGenerator::terminateDisjunction): - -2008-11-15 Sam Weinig - - Reviewed by Geoffrey Garen. - - Remove dead method declaration. - - * bytecompiler/CodeGenerator.h: - -2008-11-15 Geoffrey Garen - - Reviewed by Sam Weinig. - - Renamed LabelID to Label, Label::isForwardLabel to Label::isForward. - - * VM/LabelID.h: - (JSC::Label::Label): - (JSC::Label::isForward): - * bytecompiler/CodeGenerator.cpp: - (JSC::BytecodeGenerator::newLabel): - (JSC::BytecodeGenerator::emitLabel): - (JSC::BytecodeGenerator::emitJump): - (JSC::BytecodeGenerator::emitJumpIfTrue): - (JSC::BytecodeGenerator::emitJumpIfFalse): - (JSC::BytecodeGenerator::pushFinallyContext): - (JSC::BytecodeGenerator::emitComplexJumpScopes): - (JSC::BytecodeGenerator::emitJumpScopes): - (JSC::BytecodeGenerator::emitNextPropertyName): - (JSC::BytecodeGenerator::emitCatch): - (JSC::BytecodeGenerator::emitJumpSubroutine): - (JSC::prepareJumpTableForImmediateSwitch): - (JSC::prepareJumpTableForCharacterSwitch): - (JSC::prepareJumpTableForStringSwitch): - (JSC::BytecodeGenerator::endSwitch): - * bytecompiler/CodeGenerator.h: - * bytecompiler/LabelScope.h: - (JSC::LabelScope::LabelScope): - (JSC::LabelScope::breakTarget): - (JSC::LabelScope::continueTarget): - * parser/Nodes.cpp: - (JSC::LogicalOpNode::emitBytecode): - (JSC::ConditionalNode::emitBytecode): - (JSC::IfNode::emitBytecode): - (JSC::IfElseNode::emitBytecode): - (JSC::DoWhileNode::emitBytecode): - (JSC::WhileNode::emitBytecode): - (JSC::ForNode::emitBytecode): - (JSC::ForInNode::emitBytecode): - (JSC::ReturnNode::emitBytecode): - (JSC::CaseBlockNode::emitBytecodeForBlock): - (JSC::TryNode::emitBytecode): - -2008-11-15 Geoffrey Garen - - Reviewed by Sam Weinig. - - Renamed JITCodeBuffer to AssemblerBuffer and renamed its data members - to be more like the rest of our buffer classes, with a size and a - capacity. - - Added an assert in the unchecked put case to match the test in the checked - put case. - - Changed a C-style cast to a C++-style cast. - - Renamed MAX_INSTRUCTION_SIZE to maxInstructionSize. - - * VM/CTI.cpp: - (JSC::CTI::CTI): - (JSC::CTI::compileRegExp): - * VM/Machine.cpp: - (JSC::BytecodeInterpreter::BytecodeInterpreter): - * VM/Machine.h: - (JSC::BytecodeInterpreter::assemblerBuffer): - * masm/X86Assembler.h: - (JSC::AssemblerBuffer::AssemblerBuffer): - (JSC::AssemblerBuffer::~AssemblerBuffer): - (JSC::AssemblerBuffer::ensureSpace): - (JSC::AssemblerBuffer::isAligned): - (JSC::AssemblerBuffer::putByteUnchecked): - (JSC::AssemblerBuffer::putByte): - (JSC::AssemblerBuffer::putShortUnchecked): - (JSC::AssemblerBuffer::putShort): - (JSC::AssemblerBuffer::putIntUnchecked): - (JSC::AssemblerBuffer::putInt): - (JSC::AssemblerBuffer::data): - (JSC::AssemblerBuffer::size): - (JSC::AssemblerBuffer::reset): - (JSC::AssemblerBuffer::copy): - (JSC::AssemblerBuffer::grow): - (JSC::X86Assembler::): - (JSC::X86Assembler::X86Assembler): - (JSC::X86Assembler::testl_i32r): - (JSC::X86Assembler::movl_mr): - (JSC::X86Assembler::movl_rm): - (JSC::X86Assembler::movl_i32m): - (JSC::X86Assembler::emitCall): - (JSC::X86Assembler::label): - (JSC::X86Assembler::emitUnlinkedJmp): - (JSC::X86Assembler::emitUnlinkedJne): - (JSC::X86Assembler::emitUnlinkedJe): - (JSC::X86Assembler::emitUnlinkedJl): - (JSC::X86Assembler::emitUnlinkedJb): - (JSC::X86Assembler::emitUnlinkedJle): - (JSC::X86Assembler::emitUnlinkedJbe): - (JSC::X86Assembler::emitUnlinkedJge): - (JSC::X86Assembler::emitUnlinkedJg): - (JSC::X86Assembler::emitUnlinkedJa): - (JSC::X86Assembler::emitUnlinkedJae): - (JSC::X86Assembler::emitUnlinkedJo): - (JSC::X86Assembler::emitUnlinkedJp): - (JSC::X86Assembler::emitUnlinkedJs): - (JSC::X86Assembler::link): - (JSC::X86Assembler::emitModRm_rr): - (JSC::X86Assembler::emitModRm_rm): - (JSC::X86Assembler::emitModRm_opr): - -2008-11-15 Geoffrey Garen - - Suggested by Maciej Stachowiak. - - Reverted most "opcode" => "bytecode" renames. We use "bytecode" as a - mass noun to refer to a stream of instructions. Each instruction may be - an opcode or an operand. - - * VM/CTI.cpp: - (JSC::CTI::emitCTICall): - (JSC::CTI::compileOpCall): - (JSC::CTI::compileBinaryArithOp): - (JSC::CTI::compileBinaryArithOpSlowCase): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - (JSC::CTI::privateCompile): - * VM/CTI.h: - * VM/CodeBlock.cpp: - (JSC::CodeBlock::printStructureIDs): - (JSC::CodeBlock::dump): - (JSC::CodeBlock::derefStructureIDs): - (JSC::CodeBlock::refStructureIDs): - * VM/CodeBlock.h: - * VM/ExceptionHelpers.cpp: - (JSC::createNotAnObjectError): - * VM/Instruction.h: - (JSC::Instruction::Instruction): - (JSC::Instruction::): - * VM/Machine.cpp: - (JSC::BytecodeInterpreter::isOpcode): - (JSC::BytecodeInterpreter::throwException): - (JSC::BytecodeInterpreter::tryCachePutByID): - (JSC::BytecodeInterpreter::uncachePutByID): - (JSC::BytecodeInterpreter::tryCacheGetByID): - (JSC::BytecodeInterpreter::uncacheGetByID): - (JSC::BytecodeInterpreter::privateExecute): - (JSC::BytecodeInterpreter::tryCTICachePutByID): - (JSC::BytecodeInterpreter::tryCTICacheGetByID): - * VM/Machine.h: - (JSC::BytecodeInterpreter::getOpcode): - (JSC::BytecodeInterpreter::getOpcodeID): - (JSC::BytecodeInterpreter::isCallBytecode): - * VM/Opcode.cpp: - (JSC::): - (JSC::OpcodeStats::OpcodeStats): - (JSC::compareOpcodeIndices): - (JSC::compareOpcodePairIndices): - (JSC::OpcodeStats::~OpcodeStats): - (JSC::OpcodeStats::recordInstruction): - (JSC::OpcodeStats::resetLastInstruction): - * VM/Opcode.h: - (JSC::): - (JSC::padOpcodeName): - * VM/SamplingTool.cpp: - (JSC::ScopeSampleRecord::sample): - (JSC::SamplingTool::run): - (JSC::compareOpcodeIndicesSampling): - (JSC::SamplingTool::dump): - * VM/SamplingTool.h: - (JSC::ScopeSampleRecord::ScopeSampleRecord): - (JSC::SamplingTool::SamplingTool): - * bytecompiler/CodeGenerator.cpp: - (JSC::BytecodeGenerator::BytecodeGenerator): - (JSC::BytecodeGenerator::emitLabel): - (JSC::BytecodeGenerator::emitOpcode): - (JSC::BytecodeGenerator::emitJump): - (JSC::BytecodeGenerator::emitJumpIfTrue): - (JSC::BytecodeGenerator::emitJumpIfFalse): - (JSC::BytecodeGenerator::emitMove): - (JSC::BytecodeGenerator::emitUnaryOp): - (JSC::BytecodeGenerator::emitPreInc): - (JSC::BytecodeGenerator::emitPreDec): - (JSC::BytecodeGenerator::emitPostInc): - (JSC::BytecodeGenerator::emitPostDec): - (JSC::BytecodeGenerator::emitBinaryOp): - (JSC::BytecodeGenerator::emitEqualityOp): - (JSC::BytecodeGenerator::emitUnexpectedLoad): - (JSC::BytecodeGenerator::emitInstanceOf): - (JSC::BytecodeGenerator::emitResolve): - (JSC::BytecodeGenerator::emitGetScopedVar): - (JSC::BytecodeGenerator::emitPutScopedVar): - (JSC::BytecodeGenerator::emitResolveBase): - (JSC::BytecodeGenerator::emitResolveWithBase): - (JSC::BytecodeGenerator::emitResolveFunction): - (JSC::BytecodeGenerator::emitGetById): - (JSC::BytecodeGenerator::emitPutById): - (JSC::BytecodeGenerator::emitPutGetter): - (JSC::BytecodeGenerator::emitPutSetter): - (JSC::BytecodeGenerator::emitDeleteById): - (JSC::BytecodeGenerator::emitGetByVal): - (JSC::BytecodeGenerator::emitPutByVal): - (JSC::BytecodeGenerator::emitDeleteByVal): - (JSC::BytecodeGenerator::emitPutByIndex): - (JSC::BytecodeGenerator::emitNewObject): - (JSC::BytecodeGenerator::emitNewArray): - (JSC::BytecodeGenerator::emitNewFunction): - (JSC::BytecodeGenerator::emitNewRegExp): - (JSC::BytecodeGenerator::emitNewFunctionExpression): - (JSC::BytecodeGenerator::emitCall): - (JSC::BytecodeGenerator::emitReturn): - (JSC::BytecodeGenerator::emitUnaryNoDstOp): - (JSC::BytecodeGenerator::emitConstruct): - (JSC::BytecodeGenerator::emitPopScope): - (JSC::BytecodeGenerator::emitDebugHook): - (JSC::BytecodeGenerator::emitComplexJumpScopes): - (JSC::BytecodeGenerator::emitJumpScopes): - (JSC::BytecodeGenerator::emitNextPropertyName): - (JSC::BytecodeGenerator::emitCatch): - (JSC::BytecodeGenerator::emitNewError): - (JSC::BytecodeGenerator::emitJumpSubroutine): - (JSC::BytecodeGenerator::emitSubroutineReturn): - (JSC::BytecodeGenerator::emitPushNewScope): - (JSC::BytecodeGenerator::beginSwitch): - * bytecompiler/CodeGenerator.h: - * jsc.cpp: - (runWithScripts): - * masm/X86Assembler.h: - (JSC::X86Assembler::): - (JSC::X86Assembler::emitModRm_opr): - (JSC::X86Assembler::emitModRm_opr_Unchecked): - (JSC::X86Assembler::emitModRm_opm): - (JSC::X86Assembler::emitModRm_opm_Unchecked): - (JSC::X86Assembler::emitModRm_opmsib): - * parser/Nodes.cpp: - (JSC::UnaryOpNode::emitBytecode): - (JSC::BinaryOpNode::emitBytecode): - (JSC::ReverseBinaryOpNode::emitBytecode): - (JSC::ThrowableBinaryOpNode::emitBytecode): - (JSC::emitReadModifyAssignment): - (JSC::ScopeNode::ScopeNode): - * parser/Nodes.h: - (JSC::UnaryPlusNode::): - (JSC::NegateNode::): - (JSC::BitwiseNotNode::): - (JSC::LogicalNotNode::): - (JSC::MultNode::): - (JSC::DivNode::): - (JSC::ModNode::): - (JSC::AddNode::): - (JSC::SubNode::): - (JSC::LeftShiftNode::): - (JSC::RightShiftNode::): - (JSC::UnsignedRightShiftNode::): - (JSC::LessNode::): - (JSC::GreaterNode::): - (JSC::LessEqNode::): - (JSC::GreaterEqNode::): - (JSC::InstanceOfNode::): - (JSC::InNode::): - (JSC::EqualNode::): - (JSC::NotEqualNode::): - (JSC::StrictEqualNode::): - (JSC::NotStrictEqualNode::): - (JSC::BitAndNode::): - (JSC::BitOrNode::): - (JSC::BitXOrNode::): - * runtime/StructureID.cpp: - (JSC::StructureID::fromDictionaryTransition): - * wtf/Platform.h: - -2008-11-15 Geoffrey Garen - - Reviewed by Sam Weinig. - - Renames: - - CodeGenerator => BytecodeGenerator - emitCodeForBlock => emitBytecodeForBlock - generatedByteCode => generatedBytecode - generateCode => generateBytecode - - * JavaScriptCore.exp: - * bytecompiler/CodeGenerator.cpp: - (JSC::BytecodeGenerator::setDumpsGeneratedCode): - (JSC::BytecodeGenerator::generate): - (JSC::BytecodeGenerator::addVar): - (JSC::BytecodeGenerator::addGlobalVar): - (JSC::BytecodeGenerator::allocateConstants): - (JSC::BytecodeGenerator::BytecodeGenerator): - (JSC::BytecodeGenerator::addParameter): - (JSC::BytecodeGenerator::registerFor): - (JSC::BytecodeGenerator::constRegisterFor): - (JSC::BytecodeGenerator::isLocal): - (JSC::BytecodeGenerator::isLocalConstant): - (JSC::BytecodeGenerator::newRegister): - (JSC::BytecodeGenerator::newTemporary): - (JSC::BytecodeGenerator::highestUsedRegister): - (JSC::BytecodeGenerator::newLabelScope): - (JSC::BytecodeGenerator::newLabel): - (JSC::BytecodeGenerator::emitLabel): - (JSC::BytecodeGenerator::emitBytecode): - (JSC::BytecodeGenerator::retrieveLastBinaryOp): - (JSC::BytecodeGenerator::retrieveLastUnaryOp): - (JSC::BytecodeGenerator::rewindBinaryOp): - (JSC::BytecodeGenerator::rewindUnaryOp): - (JSC::BytecodeGenerator::emitJump): - (JSC::BytecodeGenerator::emitJumpIfTrue): - (JSC::BytecodeGenerator::emitJumpIfFalse): - (JSC::BytecodeGenerator::addConstant): - (JSC::BytecodeGenerator::addUnexpectedConstant): - (JSC::BytecodeGenerator::addRegExp): - (JSC::BytecodeGenerator::emitMove): - (JSC::BytecodeGenerator::emitUnaryOp): - (JSC::BytecodeGenerator::emitPreInc): - (JSC::BytecodeGenerator::emitPreDec): - (JSC::BytecodeGenerator::emitPostInc): - (JSC::BytecodeGenerator::emitPostDec): - (JSC::BytecodeGenerator::emitBinaryOp): - (JSC::BytecodeGenerator::emitEqualityOp): - (JSC::BytecodeGenerator::emitLoad): - (JSC::BytecodeGenerator::emitUnexpectedLoad): - (JSC::BytecodeGenerator::findScopedProperty): - (JSC::BytecodeGenerator::emitInstanceOf): - (JSC::BytecodeGenerator::emitResolve): - (JSC::BytecodeGenerator::emitGetScopedVar): - (JSC::BytecodeGenerator::emitPutScopedVar): - (JSC::BytecodeGenerator::emitResolveBase): - (JSC::BytecodeGenerator::emitResolveWithBase): - (JSC::BytecodeGenerator::emitResolveFunction): - (JSC::BytecodeGenerator::emitGetById): - (JSC::BytecodeGenerator::emitPutById): - (JSC::BytecodeGenerator::emitPutGetter): - (JSC::BytecodeGenerator::emitPutSetter): - (JSC::BytecodeGenerator::emitDeleteById): - (JSC::BytecodeGenerator::emitGetByVal): - (JSC::BytecodeGenerator::emitPutByVal): - (JSC::BytecodeGenerator::emitDeleteByVal): - (JSC::BytecodeGenerator::emitPutByIndex): - (JSC::BytecodeGenerator::emitNewObject): - (JSC::BytecodeGenerator::emitNewArray): - (JSC::BytecodeGenerator::emitNewFunction): - (JSC::BytecodeGenerator::emitNewRegExp): - (JSC::BytecodeGenerator::emitNewFunctionExpression): - (JSC::BytecodeGenerator::emitCall): - (JSC::BytecodeGenerator::emitCallEval): - (JSC::BytecodeGenerator::emitReturn): - (JSC::BytecodeGenerator::emitUnaryNoDstOp): - (JSC::BytecodeGenerator::emitConstruct): - (JSC::BytecodeGenerator::emitPushScope): - (JSC::BytecodeGenerator::emitPopScope): - (JSC::BytecodeGenerator::emitDebugHook): - (JSC::BytecodeGenerator::pushFinallyContext): - (JSC::BytecodeGenerator::popFinallyContext): - (JSC::BytecodeGenerator::breakTarget): - (JSC::BytecodeGenerator::continueTarget): - (JSC::BytecodeGenerator::emitComplexJumpScopes): - (JSC::BytecodeGenerator::emitJumpScopes): - (JSC::BytecodeGenerator::emitNextPropertyName): - (JSC::BytecodeGenerator::emitCatch): - (JSC::BytecodeGenerator::emitNewError): - (JSC::BytecodeGenerator::emitJumpSubroutine): - (JSC::BytecodeGenerator::emitSubroutineReturn): - (JSC::BytecodeGenerator::emitPushNewScope): - (JSC::BytecodeGenerator::beginSwitch): - (JSC::BytecodeGenerator::endSwitch): - (JSC::BytecodeGenerator::emitThrowExpressionTooDeepException): - * bytecompiler/CodeGenerator.h: - * jsc.cpp: - (runWithScripts): - * parser/Nodes.cpp: - (JSC::ThrowableExpressionData::emitThrowError): - (JSC::NullNode::emitBytecode): - (JSC::BooleanNode::emitBytecode): - (JSC::NumberNode::emitBytecode): - (JSC::StringNode::emitBytecode): - (JSC::RegExpNode::emitBytecode): - (JSC::ThisNode::emitBytecode): - (JSC::ResolveNode::isPure): - (JSC::ResolveNode::emitBytecode): - (JSC::ArrayNode::emitBytecode): - (JSC::ObjectLiteralNode::emitBytecode): - (JSC::PropertyListNode::emitBytecode): - (JSC::BracketAccessorNode::emitBytecode): - (JSC::DotAccessorNode::emitBytecode): - (JSC::ArgumentListNode::emitBytecode): - (JSC::NewExprNode::emitBytecode): - (JSC::EvalFunctionCallNode::emitBytecode): - (JSC::FunctionCallValueNode::emitBytecode): - (JSC::FunctionCallResolveNode::emitBytecode): - (JSC::FunctionCallBracketNode::emitBytecode): - (JSC::FunctionCallDotNode::emitBytecode): - (JSC::emitPreIncOrDec): - (JSC::emitPostIncOrDec): - (JSC::PostfixResolveNode::emitBytecode): - (JSC::PostfixBracketNode::emitBytecode): - (JSC::PostfixDotNode::emitBytecode): - (JSC::PostfixErrorNode::emitBytecode): - (JSC::DeleteResolveNode::emitBytecode): - (JSC::DeleteBracketNode::emitBytecode): - (JSC::DeleteDotNode::emitBytecode): - (JSC::DeleteValueNode::emitBytecode): - (JSC::VoidNode::emitBytecode): - (JSC::TypeOfResolveNode::emitBytecode): - (JSC::TypeOfValueNode::emitBytecode): - (JSC::PrefixResolveNode::emitBytecode): - (JSC::PrefixBracketNode::emitBytecode): - (JSC::PrefixDotNode::emitBytecode): - (JSC::PrefixErrorNode::emitBytecode): - (JSC::UnaryOpNode::emitBytecode): - (JSC::BinaryOpNode::emitBytecode): - (JSC::EqualNode::emitBytecode): - (JSC::StrictEqualNode::emitBytecode): - (JSC::ReverseBinaryOpNode::emitBytecode): - (JSC::ThrowableBinaryOpNode::emitBytecode): - (JSC::InstanceOfNode::emitBytecode): - (JSC::LogicalOpNode::emitBytecode): - (JSC::ConditionalNode::emitBytecode): - (JSC::emitReadModifyAssignment): - (JSC::ReadModifyResolveNode::emitBytecode): - (JSC::AssignResolveNode::emitBytecode): - (JSC::AssignDotNode::emitBytecode): - (JSC::ReadModifyDotNode::emitBytecode): - (JSC::AssignErrorNode::emitBytecode): - (JSC::AssignBracketNode::emitBytecode): - (JSC::ReadModifyBracketNode::emitBytecode): - (JSC::CommaNode::emitBytecode): - (JSC::ConstDeclNode::emitCodeSingle): - (JSC::ConstDeclNode::emitBytecode): - (JSC::ConstStatementNode::emitBytecode): - (JSC::statementListEmitCode): - (JSC::BlockNode::emitBytecode): - (JSC::EmptyStatementNode::emitBytecode): - (JSC::DebuggerStatementNode::emitBytecode): - (JSC::ExprStatementNode::emitBytecode): - (JSC::VarStatementNode::emitBytecode): - (JSC::IfNode::emitBytecode): - (JSC::IfElseNode::emitBytecode): - (JSC::DoWhileNode::emitBytecode): - (JSC::WhileNode::emitBytecode): - (JSC::ForNode::emitBytecode): - (JSC::ForInNode::emitBytecode): - (JSC::ContinueNode::emitBytecode): - (JSC::BreakNode::emitBytecode): - (JSC::ReturnNode::emitBytecode): - (JSC::WithNode::emitBytecode): - (JSC::CaseBlockNode::emitBytecodeForBlock): - (JSC::SwitchNode::emitBytecode): - (JSC::LabelNode::emitBytecode): - (JSC::ThrowNode::emitBytecode): - (JSC::TryNode::emitBytecode): - (JSC::EvalNode::emitBytecode): - (JSC::EvalNode::generateBytecode): - (JSC::FunctionBodyNode::generateBytecode): - (JSC::FunctionBodyNode::emitBytecode): - (JSC::ProgramNode::emitBytecode): - (JSC::ProgramNode::generateBytecode): - (JSC::FuncDeclNode::emitBytecode): - (JSC::FuncExprNode::emitBytecode): - * parser/Nodes.h: - (JSC::ExpressionNode::): - (JSC::BooleanNode::): - (JSC::NumberNode::): - (JSC::StringNode::): - (JSC::ProgramNode::): - (JSC::EvalNode::): - (JSC::FunctionBodyNode::): - * runtime/Arguments.h: - (JSC::Arguments::getArgumentsData): - (JSC::JSActivation::copyRegisters): - * runtime/JSActivation.cpp: - (JSC::JSActivation::mark): - * runtime/JSActivation.h: - (JSC::JSActivation::JSActivationData::JSActivationData): - * runtime/JSFunction.cpp: - (JSC::JSFunction::~JSFunction): - -2008-11-15 Geoffrey Garen - - Reviewed by Sam Weinig. - - Renamed all forms of "byte code" "opcode" "op code" "code" "bitcode" - etc. to "bytecode". - - * VM/CTI.cpp: - (JSC::CTI::printBytecodeOperandTypes): - (JSC::CTI::emitAllocateNumber): - (JSC::CTI::emitNakedCall): - (JSC::CTI::emitNakedFastCall): - (JSC::CTI::emitCTICall): - (JSC::CTI::emitJumpSlowCaseIfNotJSCell): - (JSC::CTI::emitJumpSlowCaseIfNotImmNum): - (JSC::CTI::emitJumpSlowCaseIfNotImmNums): - (JSC::CTI::emitFastArithIntToImmOrSlowCase): - (JSC::CTI::compileOpCall): - (JSC::CTI::emitSlowScriptCheck): - (JSC::CTI::compileBinaryArithOp): - (JSC::CTI::compileBinaryArithOpSlowCase): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - (JSC::CTI::privateCompile): - * VM/CTI.h: - (JSC::CallRecord::CallRecord): - (JSC::SwitchRecord::SwitchRecord): - * VM/CodeBlock.cpp: - (JSC::CodeBlock::printStructureIDs): - (JSC::CodeBlock::dump): - (JSC::CodeBlock::~CodeBlock): - (JSC::CodeBlock::derefStructureIDs): - (JSC::CodeBlock::refStructureIDs): - * VM/CodeBlock.h: - (JSC::StructureStubInfo::StructureStubInfo): - * VM/ExceptionHelpers.cpp: - (JSC::createNotAnObjectError): - * VM/Instruction.h: - (JSC::Instruction::Instruction): - (JSC::Instruction::): - * VM/Machine.cpp: - (JSC::BytecodeInterpreter::isBytecode): - (JSC::BytecodeInterpreter::throwException): - (JSC::BytecodeInterpreter::execute): - (JSC::BytecodeInterpreter::tryCachePutByID): - (JSC::BytecodeInterpreter::uncachePutByID): - (JSC::BytecodeInterpreter::tryCacheGetByID): - (JSC::BytecodeInterpreter::uncacheGetByID): - (JSC::BytecodeInterpreter::privateExecute): - (JSC::BytecodeInterpreter::tryCTICachePutByID): - (JSC::BytecodeInterpreter::tryCTICacheGetByID): - (JSC::BytecodeInterpreter::cti_op_call_JSFunction): - (JSC::BytecodeInterpreter::cti_vm_dontLazyLinkCall): - (JSC::BytecodeInterpreter::cti_vm_lazyLinkCall): - * VM/Machine.h: - (JSC::BytecodeInterpreter::getBytecode): - (JSC::BytecodeInterpreter::getBytecodeID): - (JSC::BytecodeInterpreter::isCallBytecode): - * VM/Opcode.cpp: - (JSC::): - (JSC::BytecodeStats::BytecodeStats): - (JSC::compareBytecodeIndices): - (JSC::compareBytecodePairIndices): - (JSC::BytecodeStats::~BytecodeStats): - (JSC::BytecodeStats::recordInstruction): - (JSC::BytecodeStats::resetLastInstruction): - * VM/Opcode.h: - (JSC::): - (JSC::padBytecodeName): - * VM/SamplingTool.cpp: - (JSC::ScopeSampleRecord::sample): - (JSC::SamplingTool::run): - (JSC::compareBytecodeIndicesSampling): - (JSC::SamplingTool::dump): - * VM/SamplingTool.h: - (JSC::ScopeSampleRecord::ScopeSampleRecord): - (JSC::SamplingTool::SamplingTool): - * bytecompiler/CodeGenerator.cpp: - (JSC::CodeGenerator::generate): - (JSC::CodeGenerator::CodeGenerator): - (JSC::CodeGenerator::emitLabel): - (JSC::CodeGenerator::emitBytecode): - (JSC::CodeGenerator::emitJump): - (JSC::CodeGenerator::emitJumpIfTrue): - (JSC::CodeGenerator::emitJumpIfFalse): - (JSC::CodeGenerator::emitMove): - (JSC::CodeGenerator::emitUnaryOp): - (JSC::CodeGenerator::emitPreInc): - (JSC::CodeGenerator::emitPreDec): - (JSC::CodeGenerator::emitPostInc): - (JSC::CodeGenerator::emitPostDec): - (JSC::CodeGenerator::emitBinaryOp): - (JSC::CodeGenerator::emitEqualityOp): - (JSC::CodeGenerator::emitUnexpectedLoad): - (JSC::CodeGenerator::emitInstanceOf): - (JSC::CodeGenerator::emitResolve): - (JSC::CodeGenerator::emitGetScopedVar): - (JSC::CodeGenerator::emitPutScopedVar): - (JSC::CodeGenerator::emitResolveBase): - (JSC::CodeGenerator::emitResolveWithBase): - (JSC::CodeGenerator::emitResolveFunction): - (JSC::CodeGenerator::emitGetById): - (JSC::CodeGenerator::emitPutById): - (JSC::CodeGenerator::emitPutGetter): - (JSC::CodeGenerator::emitPutSetter): - (JSC::CodeGenerator::emitDeleteById): - (JSC::CodeGenerator::emitGetByVal): - (JSC::CodeGenerator::emitPutByVal): - (JSC::CodeGenerator::emitDeleteByVal): - (JSC::CodeGenerator::emitPutByIndex): - (JSC::CodeGenerator::emitNewObject): - (JSC::CodeGenerator::emitNewArray): - (JSC::CodeGenerator::emitNewFunction): - (JSC::CodeGenerator::emitNewRegExp): - (JSC::CodeGenerator::emitNewFunctionExpression): - (JSC::CodeGenerator::emitCall): - (JSC::CodeGenerator::emitReturn): - (JSC::CodeGenerator::emitUnaryNoDstOp): - (JSC::CodeGenerator::emitConstruct): - (JSC::CodeGenerator::emitPopScope): - (JSC::CodeGenerator::emitDebugHook): - (JSC::CodeGenerator::emitComplexJumpScopes): - (JSC::CodeGenerator::emitJumpScopes): - (JSC::CodeGenerator::emitNextPropertyName): - (JSC::CodeGenerator::emitCatch): - (JSC::CodeGenerator::emitNewError): - (JSC::CodeGenerator::emitJumpSubroutine): - (JSC::CodeGenerator::emitSubroutineReturn): - (JSC::CodeGenerator::emitPushNewScope): - (JSC::CodeGenerator::beginSwitch): - (JSC::CodeGenerator::endSwitch): - * bytecompiler/CodeGenerator.h: - (JSC::CodeGenerator::emitNode): - * jsc.cpp: - (runWithScripts): - * masm/X86Assembler.h: - (JSC::X86Assembler::): - (JSC::X86Assembler::emitModRm_opr): - (JSC::X86Assembler::emitModRm_opr_Unchecked): - (JSC::X86Assembler::emitModRm_opm): - (JSC::X86Assembler::emitModRm_opm_Unchecked): - (JSC::X86Assembler::emitModRm_opmsib): - * parser/Nodes.cpp: - (JSC::NullNode::emitBytecode): - (JSC::BooleanNode::emitBytecode): - (JSC::NumberNode::emitBytecode): - (JSC::StringNode::emitBytecode): - (JSC::RegExpNode::emitBytecode): - (JSC::ThisNode::emitBytecode): - (JSC::ResolveNode::emitBytecode): - (JSC::ArrayNode::emitBytecode): - (JSC::ObjectLiteralNode::emitBytecode): - (JSC::PropertyListNode::emitBytecode): - (JSC::BracketAccessorNode::emitBytecode): - (JSC::DotAccessorNode::emitBytecode): - (JSC::ArgumentListNode::emitBytecode): - (JSC::NewExprNode::emitBytecode): - (JSC::EvalFunctionCallNode::emitBytecode): - (JSC::FunctionCallValueNode::emitBytecode): - (JSC::FunctionCallResolveNode::emitBytecode): - (JSC::FunctionCallBracketNode::emitBytecode): - (JSC::FunctionCallDotNode::emitBytecode): - (JSC::PostfixResolveNode::emitBytecode): - (JSC::PostfixBracketNode::emitBytecode): - (JSC::PostfixDotNode::emitBytecode): - (JSC::PostfixErrorNode::emitBytecode): - (JSC::DeleteResolveNode::emitBytecode): - (JSC::DeleteBracketNode::emitBytecode): - (JSC::DeleteDotNode::emitBytecode): - (JSC::DeleteValueNode::emitBytecode): - (JSC::VoidNode::emitBytecode): - (JSC::TypeOfResolveNode::emitBytecode): - (JSC::TypeOfValueNode::emitBytecode): - (JSC::PrefixResolveNode::emitBytecode): - (JSC::PrefixBracketNode::emitBytecode): - (JSC::PrefixDotNode::emitBytecode): - (JSC::PrefixErrorNode::emitBytecode): - (JSC::UnaryOpNode::emitBytecode): - (JSC::BinaryOpNode::emitBytecode): - (JSC::EqualNode::emitBytecode): - (JSC::StrictEqualNode::emitBytecode): - (JSC::ReverseBinaryOpNode::emitBytecode): - (JSC::ThrowableBinaryOpNode::emitBytecode): - (JSC::InstanceOfNode::emitBytecode): - (JSC::LogicalOpNode::emitBytecode): - (JSC::ConditionalNode::emitBytecode): - (JSC::emitReadModifyAssignment): - (JSC::ReadModifyResolveNode::emitBytecode): - (JSC::AssignResolveNode::emitBytecode): - (JSC::AssignDotNode::emitBytecode): - (JSC::ReadModifyDotNode::emitBytecode): - (JSC::AssignErrorNode::emitBytecode): - (JSC::AssignBracketNode::emitBytecode): - (JSC::ReadModifyBracketNode::emitBytecode): - (JSC::CommaNode::emitBytecode): - (JSC::ConstDeclNode::emitBytecode): - (JSC::ConstStatementNode::emitBytecode): - (JSC::BlockNode::emitBytecode): - (JSC::EmptyStatementNode::emitBytecode): - (JSC::DebuggerStatementNode::emitBytecode): - (JSC::ExprStatementNode::emitBytecode): - (JSC::VarStatementNode::emitBytecode): - (JSC::IfNode::emitBytecode): - (JSC::IfElseNode::emitBytecode): - (JSC::DoWhileNode::emitBytecode): - (JSC::WhileNode::emitBytecode): - (JSC::ForNode::emitBytecode): - (JSC::ForInNode::emitBytecode): - (JSC::ContinueNode::emitBytecode): - (JSC::BreakNode::emitBytecode): - (JSC::ReturnNode::emitBytecode): - (JSC::WithNode::emitBytecode): - (JSC::SwitchNode::emitBytecode): - (JSC::LabelNode::emitBytecode): - (JSC::ThrowNode::emitBytecode): - (JSC::TryNode::emitBytecode): - (JSC::ScopeNode::ScopeNode): - (JSC::EvalNode::emitBytecode): - (JSC::FunctionBodyNode::emitBytecode): - (JSC::ProgramNode::emitBytecode): - (JSC::FuncDeclNode::emitBytecode): - (JSC::FuncExprNode::emitBytecode): - * parser/Nodes.h: - (JSC::UnaryPlusNode::): - (JSC::NegateNode::): - (JSC::BitwiseNotNode::): - (JSC::LogicalNotNode::): - (JSC::MultNode::): - (JSC::DivNode::): - (JSC::ModNode::): - (JSC::AddNode::): - (JSC::SubNode::): - (JSC::LeftShiftNode::): - (JSC::RightShiftNode::): - (JSC::UnsignedRightShiftNode::): - (JSC::LessNode::): - (JSC::GreaterNode::): - (JSC::LessEqNode::): - (JSC::GreaterEqNode::): - (JSC::InstanceOfNode::): - (JSC::InNode::): - (JSC::EqualNode::): - (JSC::NotEqualNode::): - (JSC::StrictEqualNode::): - (JSC::NotStrictEqualNode::): - (JSC::BitAndNode::): - (JSC::BitOrNode::): - (JSC::BitXOrNode::): - (JSC::ProgramNode::): - (JSC::EvalNode::): - (JSC::FunctionBodyNode::): - * runtime/JSNotAnObject.h: - * runtime/StructureID.cpp: - (JSC::StructureID::fromDictionaryTransition): - * wtf/Platform.h: - -2008-11-15 Geoffrey Garen - - Reviewed by Sam Weinig. - - Renamed Machine to BytecodeInterpreter. - - Nixed the Interpreter class, and changed its two functions to stand-alone - functions. - - * JavaScriptCore.exp: - * VM/CTI.cpp: - (JSC::): - (JSC::CTI::emitCTICall): - (JSC::CTI::CTI): - (JSC::CTI::compileOpCall): - (JSC::CTI::emitSlowScriptCheck): - (JSC::CTI::compileBinaryArithOpSlowCase): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - (JSC::CTI::privateCompile): - (JSC::CTI::privateCompileGetByIdSelf): - (JSC::CTI::privateCompileGetByIdProto): - (JSC::CTI::privateCompileGetByIdChain): - (JSC::CTI::privateCompilePutByIdReplace): - (JSC::CTI::privateCompilePutByIdTransition): - (JSC::CTI::privateCompileCTIMachineTrampolines): - (JSC::CTI::freeCTIMachineTrampolines): - (JSC::CTI::patchGetByIdSelf): - (JSC::CTI::patchPutByIdReplace): - (JSC::CTI::privateCompilePatchGetArrayLength): - (JSC::CTI::compileRegExp): - * VM/CTI.h: - * VM/CodeBlock.cpp: - (JSC::CodeBlock::printStructureIDs): - (JSC::CodeBlock::dump): - (JSC::CodeBlock::derefStructureIDs): - (JSC::CodeBlock::refStructureIDs): - * VM/ExceptionHelpers.cpp: - (JSC::createNotAnObjectError): - * VM/Machine.cpp: - (JSC::jsLess): - (JSC::jsLessEq): - (JSC::BytecodeInterpreter::resolve): - (JSC::BytecodeInterpreter::resolveSkip): - (JSC::BytecodeInterpreter::resolveGlobal): - (JSC::BytecodeInterpreter::resolveBase): - (JSC::BytecodeInterpreter::resolveBaseAndProperty): - (JSC::BytecodeInterpreter::resolveBaseAndFunc): - (JSC::BytecodeInterpreter::slideRegisterWindowForCall): - (JSC::BytecodeInterpreter::callEval): - (JSC::BytecodeInterpreter::BytecodeInterpreter): - (JSC::BytecodeInterpreter::initialize): - (JSC::BytecodeInterpreter::~BytecodeInterpreter): - (JSC::BytecodeInterpreter::dumpCallFrame): - (JSC::BytecodeInterpreter::dumpRegisters): - (JSC::BytecodeInterpreter::isOpcode): - (JSC::BytecodeInterpreter::unwindCallFrame): - (JSC::BytecodeInterpreter::throwException): - (JSC::BytecodeInterpreter::execute): - (JSC::BytecodeInterpreter::debug): - (JSC::BytecodeInterpreter::resetTimeoutCheck): - (JSC::BytecodeInterpreter::checkTimeout): - (JSC::BytecodeInterpreter::createExceptionScope): - (JSC::BytecodeInterpreter::tryCachePutByID): - (JSC::BytecodeInterpreter::uncachePutByID): - (JSC::BytecodeInterpreter::tryCacheGetByID): - (JSC::BytecodeInterpreter::uncacheGetByID): - (JSC::BytecodeInterpreter::privateExecute): - (JSC::BytecodeInterpreter::retrieveArguments): - (JSC::BytecodeInterpreter::retrieveCaller): - (JSC::BytecodeInterpreter::retrieveLastCaller): - (JSC::BytecodeInterpreter::findFunctionCallFrame): - (JSC::BytecodeInterpreter::tryCTICachePutByID): - (JSC::BytecodeInterpreter::tryCTICacheGetByID): - (JSC::BytecodeInterpreter::cti_op_convert_this): - (JSC::BytecodeInterpreter::cti_op_end): - (JSC::BytecodeInterpreter::cti_op_add): - (JSC::BytecodeInterpreter::cti_op_pre_inc): - (JSC::BytecodeInterpreter::cti_timeout_check): - (JSC::BytecodeInterpreter::cti_register_file_check): - (JSC::BytecodeInterpreter::cti_op_loop_if_less): - (JSC::BytecodeInterpreter::cti_op_loop_if_lesseq): - (JSC::BytecodeInterpreter::cti_op_new_object): - (JSC::BytecodeInterpreter::cti_op_put_by_id): - (JSC::BytecodeInterpreter::cti_op_put_by_id_second): - (JSC::BytecodeInterpreter::cti_op_put_by_id_generic): - (JSC::BytecodeInterpreter::cti_op_put_by_id_fail): - (JSC::BytecodeInterpreter::cti_op_get_by_id): - (JSC::BytecodeInterpreter::cti_op_get_by_id_second): - (JSC::BytecodeInterpreter::cti_op_get_by_id_generic): - (JSC::BytecodeInterpreter::cti_op_get_by_id_fail): - (JSC::BytecodeInterpreter::cti_op_instanceof): - (JSC::BytecodeInterpreter::cti_op_del_by_id): - (JSC::BytecodeInterpreter::cti_op_mul): - (JSC::BytecodeInterpreter::cti_op_new_func): - (JSC::BytecodeInterpreter::cti_op_call_JSFunction): - (JSC::BytecodeInterpreter::cti_op_call_arityCheck): - (JSC::BytecodeInterpreter::cti_vm_dontLazyLinkCall): - (JSC::BytecodeInterpreter::cti_vm_lazyLinkCall): - (JSC::BytecodeInterpreter::cti_op_push_activation): - (JSC::BytecodeInterpreter::cti_op_call_NotJSFunction): - (JSC::BytecodeInterpreter::cti_op_create_arguments): - (JSC::BytecodeInterpreter::cti_op_create_arguments_no_params): - (JSC::BytecodeInterpreter::cti_op_tear_off_activation): - (JSC::BytecodeInterpreter::cti_op_tear_off_arguments): - (JSC::BytecodeInterpreter::cti_op_profile_will_call): - (JSC::BytecodeInterpreter::cti_op_profile_did_call): - (JSC::BytecodeInterpreter::cti_op_ret_scopeChain): - (JSC::BytecodeInterpreter::cti_op_new_array): - (JSC::BytecodeInterpreter::cti_op_resolve): - (JSC::BytecodeInterpreter::cti_op_construct_JSConstruct): - (JSC::BytecodeInterpreter::cti_op_construct_NotJSConstruct): - (JSC::BytecodeInterpreter::cti_op_get_by_val): - (JSC::BytecodeInterpreter::cti_op_resolve_func): - (JSC::BytecodeInterpreter::cti_op_sub): - (JSC::BytecodeInterpreter::cti_op_put_by_val): - (JSC::BytecodeInterpreter::cti_op_put_by_val_array): - (JSC::BytecodeInterpreter::cti_op_lesseq): - (JSC::BytecodeInterpreter::cti_op_loop_if_true): - (JSC::BytecodeInterpreter::cti_op_negate): - (JSC::BytecodeInterpreter::cti_op_resolve_base): - (JSC::BytecodeInterpreter::cti_op_resolve_skip): - (JSC::BytecodeInterpreter::cti_op_resolve_global): - (JSC::BytecodeInterpreter::cti_op_div): - (JSC::BytecodeInterpreter::cti_op_pre_dec): - (JSC::BytecodeInterpreter::cti_op_jless): - (JSC::BytecodeInterpreter::cti_op_not): - (JSC::BytecodeInterpreter::cti_op_jtrue): - (JSC::BytecodeInterpreter::cti_op_post_inc): - (JSC::BytecodeInterpreter::cti_op_eq): - (JSC::BytecodeInterpreter::cti_op_lshift): - (JSC::BytecodeInterpreter::cti_op_bitand): - (JSC::BytecodeInterpreter::cti_op_rshift): - (JSC::BytecodeInterpreter::cti_op_bitnot): - (JSC::BytecodeInterpreter::cti_op_resolve_with_base): - (JSC::BytecodeInterpreter::cti_op_new_func_exp): - (JSC::BytecodeInterpreter::cti_op_mod): - (JSC::BytecodeInterpreter::cti_op_less): - (JSC::BytecodeInterpreter::cti_op_neq): - (JSC::BytecodeInterpreter::cti_op_post_dec): - (JSC::BytecodeInterpreter::cti_op_urshift): - (JSC::BytecodeInterpreter::cti_op_bitxor): - (JSC::BytecodeInterpreter::cti_op_new_regexp): - (JSC::BytecodeInterpreter::cti_op_bitor): - (JSC::BytecodeInterpreter::cti_op_call_eval): - (JSC::BytecodeInterpreter::cti_op_throw): - (JSC::BytecodeInterpreter::cti_op_get_pnames): - (JSC::BytecodeInterpreter::cti_op_next_pname): - (JSC::BytecodeInterpreter::cti_op_push_scope): - (JSC::BytecodeInterpreter::cti_op_pop_scope): - (JSC::BytecodeInterpreter::cti_op_typeof): - (JSC::BytecodeInterpreter::cti_op_is_undefined): - (JSC::BytecodeInterpreter::cti_op_is_boolean): - (JSC::BytecodeInterpreter::cti_op_is_number): - (JSC::BytecodeInterpreter::cti_op_is_string): - (JSC::BytecodeInterpreter::cti_op_is_object): - (JSC::BytecodeInterpreter::cti_op_is_function): - (JSC::BytecodeInterpreter::cti_op_stricteq): - (JSC::BytecodeInterpreter::cti_op_nstricteq): - (JSC::BytecodeInterpreter::cti_op_to_jsnumber): - (JSC::BytecodeInterpreter::cti_op_in): - (JSC::BytecodeInterpreter::cti_op_push_new_scope): - (JSC::BytecodeInterpreter::cti_op_jmp_scopes): - (JSC::BytecodeInterpreter::cti_op_put_by_index): - (JSC::BytecodeInterpreter::cti_op_switch_imm): - (JSC::BytecodeInterpreter::cti_op_switch_char): - (JSC::BytecodeInterpreter::cti_op_switch_string): - (JSC::BytecodeInterpreter::cti_op_del_by_val): - (JSC::BytecodeInterpreter::cti_op_put_getter): - (JSC::BytecodeInterpreter::cti_op_put_setter): - (JSC::BytecodeInterpreter::cti_op_new_error): - (JSC::BytecodeInterpreter::cti_op_debug): - (JSC::BytecodeInterpreter::cti_vm_throw): - * VM/Machine.h: - * VM/Register.h: - * VM/SamplingTool.cpp: - (JSC::SamplingTool::run): - * VM/SamplingTool.h: - (JSC::SamplingTool::SamplingTool): - * bytecompiler/CodeGenerator.cpp: - (JSC::CodeGenerator::generate): - (JSC::CodeGenerator::CodeGenerator): - (JSC::CodeGenerator::emitOpcode): - * debugger/DebuggerCallFrame.cpp: - (JSC::DebuggerCallFrame::evaluate): - * jsc.cpp: - (runWithScripts): - * parser/Nodes.cpp: - (JSC::ScopeNode::ScopeNode): - * profiler/ProfileGenerator.cpp: - (JSC::ProfileGenerator::addParentForConsoleStart): - * runtime/ArrayPrototype.cpp: - (JSC::arrayProtoFuncPop): - (JSC::arrayProtoFuncPush): - * runtime/Collector.cpp: - (JSC::Heap::collect): - * runtime/ExecState.h: - (JSC::ExecState::interpreter): - * runtime/FunctionPrototype.cpp: - (JSC::functionProtoFuncApply): - * runtime/Interpreter.cpp: - (JSC::Interpreter::evaluate): - * runtime/JSCell.h: - * runtime/JSFunction.cpp: - (JSC::JSFunction::call): - (JSC::JSFunction::argumentsGetter): - (JSC::JSFunction::callerGetter): - (JSC::JSFunction::construct): - * runtime/JSFunction.h: - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): - (JSC::JSGlobalData::~JSGlobalData): - * runtime/JSGlobalData.h: - * runtime/JSGlobalObject.cpp: - (JSC::JSGlobalObject::~JSGlobalObject): - (JSC::JSGlobalObject::setTimeoutTime): - (JSC::JSGlobalObject::startTimeoutCheck): - (JSC::JSGlobalObject::stopTimeoutCheck): - (JSC::JSGlobalObject::mark): - * runtime/JSGlobalObjectFunctions.cpp: - (JSC::globalFuncEval): - * runtime/JSString.h: - * runtime/RegExp.cpp: - (JSC::RegExp::RegExp): - -2008-11-15 Maciej Stachowiak - - Reviewed by Sam Weinig. - - - Remove SymbolTable from FunctionBodyNode and move it to CodeBlock - - It's not needed for functions that have never been executed, so no - need to waste the memory. Saves ~4M on membuster after 30 pages. - - * VM/CodeBlock.h: - * VM/Machine.cpp: - (JSC::Machine::retrieveArguments): - * parser/Nodes.cpp: - (JSC::EvalNode::generateCode): - (JSC::FunctionBodyNode::generateCode): - * parser/Nodes.h: - * runtime/JSActivation.h: - (JSC::JSActivation::JSActivationData::JSActivationData): - -2008-11-14 Cameron Zwarich - - Reviewed by Darin Adler. - - Bug 22259: Make all opcodes use eax as their final result register - - - Change one case of op_add (and the corresponding slow case) to use eax - rather than edx. Also, change the order in which the two results of - resolve_func and resolve_base are emitted so that the retrieved value is - put last into eax. - - This gives no performance change on SunSpider or the V8 benchmark suite - when run in either harness. - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - -2008-11-14 Gavin Barraclough - - Reviewed by Geoff Garen. - - Geoff has this wacky notion that emitGetArg and emitPutArg should be related to - doing the same thing. Crazy. - - Rename the methods for accessing virtual registers to say 'VirtualRegister' in the - name, and those for setting up the arguments for CTI methods to contain 'CTIArg'. - - * VM/CTI.cpp: - (JSC::CTI::emitGetVirtualRegister): - (JSC::CTI::emitGetVirtualRegisters): - (JSC::CTI::emitPutCTIArgFromVirtualRegister): - (JSC::CTI::emitPutCTIArg): - (JSC::CTI::emitGetCTIArg): - (JSC::CTI::emitPutCTIArgConstant): - (JSC::CTI::emitPutVirtualRegister): - (JSC::CTI::compileOpCallSetupArgs): - (JSC::CTI::compileOpCallEvalSetupArgs): - (JSC::CTI::compileOpConstructSetupArgs): - (JSC::CTI::compileOpCall): - (JSC::CTI::compileOpStrictEq): - (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): - (JSC::CTI::compileBinaryArithOp): - (JSC::CTI::compileBinaryArithOpSlowCase): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - (JSC::CTI::privateCompileCTIMachineTrampolines): - * VM/CTI.h: - -2008-11-14 Greg Bolsinga - - Reviewed by Antti Koivisto - - Fix potential build break by adding StdLibExtras.h - - * GNUmakefile.am: - * JavaScriptCore.vcproj/WTF/WTF.vcproj: - -2008-11-14 Gavin Barraclough - - Reviewed by Geoff Garen. - - Generate less code for the slow cases of op_call and op_construct. - https://bugs.webkit.org/show_bug.cgi?id=22272 - - 1% progression on v8 tests. - - * VM/CTI.cpp: - (JSC::CTI::emitRetrieveArg): - (JSC::CTI::emitNakedCall): - (JSC::CTI::compileOpCallInitializeCallFrame): - (JSC::CTI::compileOpCall): - (JSC::CTI::privateCompileSlowCases): - (JSC::CTI::privateCompileCTIMachineTrampolines): - * VM/CTI.h: - * VM/CodeBlock.h: - (JSC::getCallLinkInfoReturnLocation): - (JSC::CodeBlock::getCallLinkInfo): - * VM/Machine.cpp: - (JSC::Machine::Machine): - (JSC::Machine::cti_vm_dontLazyLinkCall): - (JSC::Machine::cti_vm_lazyLinkCall): - * VM/Machine.h: - -2008-11-14 Greg Bolsinga - - Reviewed by Darin Alder. - - https://bugs.webkit.org/show_bug.cgi?id=21810 - Remove use of static C++ objects that are destroyed at exit time (destructors) - - Create DEFINE_STATIC_LOCAL macro. Change static local objects to leak to avoid - exit-time destructor. Update code that was changed to fix this issue that ran - into a gcc bug ( Codegen issue with C++ static reference - in gcc build 5465). Also typdefs for template types needed to be added in some - cases so the type could make it through the macro successfully. - - Basically code of the form: - static T m; - becomes: - DEFINE_STATIC_LOCAL(T, m, ()); - - Also any code of the form: - static T& m = *new T; - also becomes: - DEFINE_STATIC_LOCAL(T, m, ()); - - * JavaScriptCore.xcodeproj/project.pbxproj: - * wtf/MainThread.cpp: - (WTF::mainThreadFunctionQueueMutex): - (WTF::functionQueue): - * wtf/StdLibExtras.h: Added. Add DEFINE_STATIC_LOCAL macro - * wtf/ThreadingPthreads.cpp: - (WTF::threadMapMutex): - (WTF::threadMap): - (WTF::identifierByPthreadHandle): - -2008-11-13 Sam Weinig - - Reviewed by Darin Adler - - Fix for https://bugs.webkit.org/show_bug.cgi?id=22269 - Reduce PropertyMap usage - - From observation of StructureID statistics, it became clear that many - StructureID's were not being used as StructureIDs themselves, but rather - only being necessary as links in the transition chain. Acknowledging this - and that PropertyMaps stored in StructureIDs can be treated as caches, that - is that they can be reconstructed on demand, it became clear that we could - reduce the memory consumption of StructureIDs by only keeping PropertyMaps - for the StructureIDs that need them the most. - - The specific strategy used to reduce the number of StructureIDs with - PropertyMaps is to take the previous StructureIDs PropertyMap when initially - transitioning (addPropertyTransition) from it and clearing out the pointer - in the process. The next time we need to do the same transition, for instance - repeated calls to the same constructor, we use the new addPropertyTransitionToExistingStructure - first, which allows us not to need the PropertyMap to determine if the property - exists already, since a transition to that property would require it not already - be present in the StructureID. Should there be no transition, the PropertyMap - can be constructed on demand (via materializePropertyMap) to determine if the put is a - replace or a transition to a new StructureID. - - Reduces memory use on Membuster head test (30 pages open) by ~15MB. - - * JavaScriptCore.exp: - * runtime/JSObject.h: - (JSC::JSObject::putDirect): First use addPropertyTransitionToExistingStructure - so that we can avoid building the PropertyMap on subsequent similar object - creations. - * runtime/PropertyMapHashTable.h: - (JSC::PropertyMapEntry::PropertyMapEntry): Add version of constructor which takes - all values to be used when lazily building the PropertyMap. - * runtime/StructureID.cpp: - (JSC::StructureID::dumpStatistics): Add statistics on the number of StructureIDs - with PropertyMaps. - (JSC::StructureID::StructureID): Rename m_cachedTransistionOffset to m_offset - (JSC::isPowerOf2): - (JSC::nextPowerOf2): - (JSC::sizeForKeyCount): Returns the expected size of a PropertyMap for a key count. - (JSC::StructureID::materializePropertyMap): Builds the PropertyMap out of its previous pointer chain. - (JSC::StructureID::addPropertyTransitionToExistingStructure): Only transitions if there is a - an existing transition. - (JSC::StructureID::addPropertyTransition): Instead of always copying the ProperyMap, try and take - it from it previous pointer. - (JSC::StructureID::removePropertyTransition): Simplify by calling toDictionaryTransition() to do - transition work. - (JSC::StructureID::changePrototypeTransition): Build the PropertyMap if necessary before transitioning - because once you have transitioned, you will not be able to reconstruct it afterwards as there is no - previous pointer, pinning the ProperyMap as well. - (JSC::StructureID::getterSetterTransition): Ditto. - (JSC::StructureID::toDictionaryTransition): Pin the PropertyMap so that it is not destroyed on further transitions. - (JSC::StructureID::fromDictionaryTransition): We can only transition back from a dictionary transition if there - are no deleted offsets. - (JSC::StructureID::addPropertyWithoutTransition): Build PropertyMap on demands and pin. - (JSC::StructureID::removePropertyWithoutTransition): Ditto. - (JSC::StructureID::get): Build on demand. - (JSC::StructureID::createPropertyMapHashTable): Add version of create that takes a size - for on demand building. - (JSC::StructureID::expandPropertyMapHashTable): - (JSC::StructureID::rehashPropertyMapHashTable): - (JSC::StructureID::getEnumerablePropertyNamesInternal): Build PropertyMap on demand. - * runtime/StructureID.h: - (JSC::StructureID::propertyStorageSize): Account for StructureIDs without PropertyMaps. - (JSC::StructureID::isEmpty): Ditto. - (JSC::StructureID::materializePropertyMapIfNecessary): - (JSC::StructureID::get): Build PropertyMap on demand - -2008-11-14 Csaba Osztrogonac - - Reviewed by Simon Hausmann. - - - - JavaScriptCore build with -O3 flag instead of -O2 (gcc). - 2.02% speedup on SunSpider (Qt-port on Linux) - 1.10% speedup on V8 (Qt-port on Linux) - 3.45% speedup on WindScorpion (Qt-port on Linux) - - * JavaScriptCore.pri: - -2008-11-14 Kristian Amlie - - Reviewed by Darin Adler. - - Compile fix for RVCT. - - In reality, it is two fixes: - - 1. Remove typename. I believe typename can only be used when the named - type depends on the template parameters, which it doesn't in this - case, so I think this is more correct. - 2. Replace ::iterator scope with specialized typedef. This is to work - around a bug in RVCT. - - https://bugs.webkit.org/show_bug.cgi?id=22260 - - * wtf/ListHashSet.h: - (WTF::::find): - -2008-11-14 Kristian Amlie - - Reviewed by Darin Adler. - - Compile fix for WINSCW. - - This fix doesn't protect against implicit conversions from bool to - integers, but most likely that will be caught on another platform. - - https://bugs.webkit.org/show_bug.cgi?id=22260 - - * wtf/PassRefPtr.h: - (WTF::PassRefPtr::operator bool): - * wtf/RefPtr.h: - (WTF::RefPtr::operator bool): - -2008-11-14 Cameron Zwarich - - Reviewed by Darin Adler. - - Bug 22245: Move wtf/dtoa.h into the WTF namespace - - - Move wtf/dtoa.h into the WTF namespace from the JSC namespace. This - introduces some ambiguities in name lookups, so I changed all uses of - the functions in wtf/dtoa.h to explicitly state the namespace. - - * JavaScriptCore.exp: - * parser/Lexer.cpp: - (JSC::Lexer::lex): - * runtime/InitializeThreading.cpp: - * runtime/JSGlobalObjectFunctions.cpp: - (JSC::parseInt): - * runtime/NumberPrototype.cpp: - (JSC::integerPartNoExp): - (JSC::numberProtoFuncToExponential): - * runtime/UString.cpp: - (JSC::concatenate): - (JSC::UString::from): - (JSC::UString::toDouble): - * wtf/dtoa.cpp: - * wtf/dtoa.h: - -2008-11-14 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Bug 22257: Enable redundant read optimizations for results generated by compileBinaryArithOp() - - - This shows no change in performance on either SunSpider or the V8 - benchmark suite, but it removes an ugly special case and allows for - future optimizations to be implemented in a cleaner fashion. - - This patch was essentially given to me by Gavin Barraclough upon my - request, but I did regression and performance testing so that he could - work on something else. - - * VM/CTI.cpp: - (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): Move the final - result to eax if it is not already there. - (JSC::CTI::compileBinaryArithOp): Remove the killing of the final result - register that disables the optimization. - -2008-11-13 Eric Seidel - - Reviewed by Adam Roben. - - Add a Scons-based build system for building - the Chromium-Mac build of JavaScriptCore. - https://bugs.webkit.org/show_bug.cgi?id=21991 - - * JavaScriptCore.scons: Added. - * SConstruct: Added. - -2008-11-13 Eric Seidel - - Reviewed by Adam Roben. - - Add PLATFORM(CHROMIUM) to the "we don't use cairo" blacklist - until https://bugs.webkit.org/show_bug.cgi?id=22250 is fixed. - - * wtf/Platform.h: - -2008-11-13 Cameron Zwarich - - Reviewed by Sam Weinig. - - In r38375 the 'jsc' shell was changed to improve teardown on quit. The - main() function in jsc.cpp uses Structured Exception Handling, so Visual - C++ emits a warning when destructors are used. - - In order to speculatively fix the Windows build, this patch changes that - code to use explicit pointer manipulation and locking rather than smart - pointers and RAII. - - * jsc.cpp: - (main): - -2008-11-13 Cameron Zwarich - - Reviewed by Darin Adler. - - Bug 22246: Get arguments for opcodes together to eliminate more redundant memory reads - - - It is common for opcodes to read their first operand into eax and their - second operand into edx. If the value intended for the second operand is - in eax, we should first move eax to the register for the second operand - and then read the first operand into eax. - - This is a 0.5% speedup on SunSpider and a 2.0% speedup on the V8 - benchmark suite when measured using the V8 harness. - - * VM/CTI.cpp: - (JSC::CTI::emitGetArgs): - (JSC::CTI::compileOpStrictEq): - (JSC::CTI::compileBinaryArithOp): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - * VM/CTI.h: - -2008-11-13 Cameron Zwarich - - Reviewed by Darin Adler. - - Bug 22238: Avoid unnecessary reads of temporaries when the target machine register is not eax - - - Enable the optimization of not reading a value back from memory that we - just wrote when the target machine register is not eax. In order to do - this, the code generation for op_put_global_var must be changed to - read its argument into a register before overwriting eax. - - This is a 0.5% speedup on SunSpider and shows no change on the V8 - benchmark suite when run in either harness. - - * VM/CTI.cpp: - (JSC::CTI::emitGetArg): - (JSC::CTI::privateCompileMainPass): - -2008-11-13 Cameron Zwarich - - Reviewed by Alexey Proskuryakov. - - Perform teardown in the 'jsc' shell in order to suppress annoying and - misleading leak messages. There is still a lone JSC::Node leaking when - quit() is called, but hopefully that can be fixed as well. - - * jsc.cpp: - (functionQuit): - (main): - -2008-11-13 Mike Pinkerton - - Reviewed by Sam Weinig. - - Fix for https://bugs.webkit.org/show_bug.cgi?id=22087 - Need correct platform defines for Mac Chromium - - Set the appropriate platform defines for Mac Chromium, which is - similar to PLATFORM(MAC), but isn't. - - * wtf/Platform.h: - -2008-11-13 Maciej Stachowiak - - Reviewed by Cameron Zwarich. - - - remove immediate checks from native codegen for known non-immediate cases like "this" - - ~.5% speedup on v8 benchmarks - - In the future we can extend this model to remove all sorts of - typechecks based on local type info or type inference. - - I also added an assertion to verify that all slow cases linked as - many slow case jumps as the corresponding fast case generated, and - fixed the pre-existing cases where this was not true. - - * VM/CTI.cpp: - (JSC::CTI::emitJumpSlowCaseIfNotJSCell): - (JSC::CTI::linkSlowCaseIfNotJSCell): - (JSC::CTI::compileBinaryArithOp): - (JSC::CTI::compileBinaryArithOpSlowCase): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - * VM/CTI.h: - * VM/CodeBlock.h: - (JSC::CodeBlock::isKnownNotImmediate): - -2008-11-13 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Bug 21943: Avoid needless reads of temporary values in CTI code - - - If an opcode needs to load a virtual register and a previous opcode left - the contents of that virtual register in a machine register, use the - value in the machine register rather than getting it from memory. - - In order to perform this optimization, it is necessary to know the - jump tagets in the CodeBlock. For temporaries, the only problematic - jump targets are binary logical operators and the ternary conditional - operator. However, if this optimization were to be extended to local - variable registers as well, other jump targets would need to be - included, like switch statement cases and the beginnings of catch - blocks. - - This optimization also requires that the fast case and the slow case - of an opcode use emitPutResult() on the same register, which was chosen - to be eax, as that is the register into which we read the first operand - of opcodes. In order to make this the case, we needed to add some mov - instructions to the slow cases of some instructions. - - This optimizaton is not applied whenever compileBinaryArithOp() is used - to compile an opcode, because different machine registers may be used to - store the final result. It seems possible to rewrite the code generation - in compileBinaryArithOp() to allow for this optimization. - - This optimization is also not applied when generating slow cases, - because some fast cases overwrite the value of eax before jumping to the - slow case. In the future, it may be possible to apply this optimization - to slow cases as well, but it did not seem to be a speedup when testing - an early version of this patch. - - This is a 1.0% speedup on SunSpider and a 6.3% speedup on the V8 - benchmark suite. - - * VM/CTI.cpp: - (JSC::CTI::killLastResultRegister): - (JSC::CTI::emitGetArg): - (JSC::CTI::emitGetPutArg): - (JSC::CTI::emitGetCTIParam): - (JSC::CTI::emitGetFromCallFrameHeader): - (JSC::CTI::emitPutResult): - (JSC::CTI::emitCTICall): - (JSC::CTI::CTI): - (JSC::CTI::compileOpCall): - (JSC::CTI::compileOpStrictEq): - (JSC::CTI::emitSlowScriptCheck): - (JSC::CTI::compileBinaryArithOp): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - (JSC::CTI::privateCompileGetByIdProto): - (JSC::CTI::privateCompilePatchGetArrayLength): - * VM/CTI.h: - * VM/CodeBlock.h: - (JSC::CodeBlock::isTemporaryRegisterIndex): - * bytecompiler/CodeGenerator.cpp: - (JSC::CodeGenerator::emitLabel): - -2008-11-12 Alp Toker - - autotools build system fix-up only. Add FloatQuad.h to the source - lists and sort them. - - * GNUmakefile.am: - -2008-11-12 Geoffrey Garen - - Reviewed by Sam Weinig. - - Fixed https://bugs.webkit.org/show_bug.cgi?id=22192 - +37 failures in fast/profiler - - along with Darin's review comments in - https://bugs.webkit.org/show_bug.cgi?id=22174 - Simplified op_call by nixing its responsibility for moving the value of - "this" into the first argument slot - - * VM/Machine.cpp: - (JSC::returnToThrowTrampoline): - (JSC::throwStackOverflowError): - (JSC::Machine::cti_register_file_check): - (JSC::Machine::cti_op_call_arityCheck): - (JSC::Machine::cti_vm_throw): Moved the throw logic into a function, since - functions are better than macros. - - * bytecompiler/CodeGenerator.cpp: - (JSC::CodeGenerator::emitCall): - (JSC::CodeGenerator::emitConstruct): Ensure that the function register - is preserved if profiling is enabled, since the profiler uses that - register. - - * runtime/JSGlobalData.h: Renamed throwReturnAddress to exceptionLocation, - because I had a hard time understanding what "throwReturnAddress" meant. - -2008-11-12 Geoffrey Garen - - Reviewed by Sam Weinig. - - Roll in r38322, now that test failures have been fixed. - - * VM/CTI.cpp: - (JSC::CTI::compileOpCallSetupArgs): - (JSC::CTI::compileOpCallEvalSetupArgs): - (JSC::CTI::compileOpConstructSetupArgs): - (JSC::CTI::compileOpCall): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - * VM/CTI.h: - * VM/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * VM/Machine.cpp: - (JSC::Machine::callEval): - (JSC::Machine::dumpCallFrame): - (JSC::Machine::dumpRegisters): - (JSC::Machine::execute): - (JSC::Machine::privateExecute): - (JSC::Machine::cti_register_file_check): - (JSC::Machine::cti_op_call_arityCheck): - (JSC::Machine::cti_op_call_NotJSFunction): - (JSC::Machine::cti_op_construct_JSConstruct): - (JSC::Machine::cti_op_construct_NotJSConstruct): - (JSC::Machine::cti_op_call_eval): - (JSC::Machine::cti_vm_throw): - * VM/Machine.h: - * bytecompiler/CodeGenerator.cpp: - (JSC::CodeGenerator::emitCall): - (JSC::CodeGenerator::emitCallEval): - (JSC::CodeGenerator::emitConstruct): - * bytecompiler/CodeGenerator.h: - * parser/Nodes.cpp: - (JSC::EvalFunctionCallNode::emitCode): - (JSC::FunctionCallValueNode::emitCode): - (JSC::FunctionCallResolveNode::emitCode): - (JSC::FunctionCallBracketNode::emitCode): - (JSC::FunctionCallDotNode::emitCode): - * parser/Nodes.h: - (JSC::ScopeNode::neededConstants): - -2008-11-12 Gavin Barraclough - - Reviewed by Cameron Zwarich. - - Fix for https://bugs.webkit.org/show_bug.cgi?id=22201 - Integer conversion in array.length was safe signed values, - but the length is unsigned. - - * VM/CTI.cpp: - (JSC::CTI::privateCompilePatchGetArrayLength): - -2008-11-12 Cameron Zwarich - - Rubber-stamped by Mark Rowe. - - Roll out r38322 due to test failures on the bots. - - * VM/CTI.cpp: - (JSC::CTI::compileOpCallSetupArgs): - (JSC::CTI::compileOpCall): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - * VM/CTI.h: - * VM/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * VM/Machine.cpp: - (JSC::Machine::callEval): - (JSC::Machine::dumpCallFrame): - (JSC::Machine::dumpRegisters): - (JSC::Machine::execute): - (JSC::Machine::privateExecute): - (JSC::Machine::throwStackOverflowPreviousFrame): - (JSC::Machine::cti_register_file_check): - (JSC::Machine::cti_op_call_arityCheck): - (JSC::Machine::cti_op_call_NotJSFunction): - (JSC::Machine::cti_op_construct_JSConstruct): - (JSC::Machine::cti_op_construct_NotJSConstruct): - (JSC::Machine::cti_op_call_eval): - (JSC::Machine::cti_vm_throw): - * VM/Machine.h: - * bytecompiler/CodeGenerator.cpp: - (JSC::CodeGenerator::emitCall): - (JSC::CodeGenerator::emitCallEval): - (JSC::CodeGenerator::emitConstruct): - * bytecompiler/CodeGenerator.h: - * parser/Nodes.cpp: - (JSC::EvalFunctionCallNode::emitCode): - (JSC::FunctionCallValueNode::emitCode): - (JSC::FunctionCallResolveNode::emitCode): - (JSC::FunctionCallBracketNode::emitCode): - (JSC::FunctionCallDotNode::emitCode): - * parser/Nodes.h: - (JSC::ScopeNode::neededConstants): - -2008-11-11 Geoffrey Garen - - Reviewed by Darin Adler. - - Fixed https://bugs.webkit.org/show_bug.cgi?id=22174 - Simplified op_call by nixing its responsibility for moving the value of - "this" into the first argument slot. - - Instead, the caller emits an explicit load or mov instruction, or relies - on implicit knowledge that "this" is already in the first argument slot. - As a result, two operands to op_call are gone: firstArg and thisVal. - - SunSpider and v8 tests show no change in bytecode or CTI. - - * VM/CTI.cpp: - (JSC::CTI::compileOpCallSetupArgs): - (JSC::CTI::compileOpCallEvalSetupArgs): - (JSC::CTI::compileOpConstructSetupArgs): Split apart these three versions - of setting up arguments to op_call, because they're more different than - they are the same -- even more so with this patch. - - (JSC::CTI::compileOpCall): Updated for the fact that op_construct doesn't - match op_call anymore. - - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): Merged a few call cases. Updated - for changes mentioned above. - - * VM/CTI.h: - - * VM/CodeBlock.cpp: - (JSC::CodeBlock::dump): Updated for new bytecode format of call / construct. - - * VM/Machine.cpp: - (JSC::Machine::callEval): Updated for new bytecode format of call / construct. - - (JSC::Machine::dumpCallFrame): - (JSC::Machine::dumpRegisters): Simplified these debugging functions, - taking advantage of the new call frame layout. - - (JSC::Machine::execute): Fixed up the eval version of execute to be - friendlier to calls in the new format. - - (JSC::Machine::privateExecute): Implemented the new call format in - bytecode. - - (JSC::Machine::cti_op_call_NotJSFunction): - (JSC::Machine::cti_op_construct_JSConstruct): - (JSC::Machine::cti_op_construct_NotJSConstruct): - (JSC::Machine::cti_op_call_eval): Updated CTI helpers to match the new - call format. - - Fixed a latent bug in stack overflow checking that is now hit because - the register layout has changed a bit -- namely: when throwing a stack - overflow exception inside an op_call helper, we need to account for the - fact that the current call frame is only half-constructed, and use the - parent call frame instead. - - * VM/Machine.h: - - * bytecompiler/CodeGenerator.cpp: - (JSC::CodeGenerator::emitCall): - (JSC::CodeGenerator::emitCallEval): - (JSC::CodeGenerator::emitConstruct): - * bytecompiler/CodeGenerator.h: Updated codegen to match the new call - format. - - * parser/Nodes.cpp: - (JSC::EvalFunctionCallNode::emitCode): - (JSC::FunctionCallValueNode::emitCode): - (JSC::FunctionCallResolveNode::emitCode): - (JSC::FunctionCallBracketNode::emitCode): - (JSC::FunctionCallDotNode::emitCode): - * parser/Nodes.h: - (JSC::ScopeNode::neededConstants): ditto - -2008-11-11 Cameron Zwarich - - Reviewed by Geoff Garen. - - Remove an unused forwarding header for a file that no longer exists. - - * ForwardingHeaders/JavaScriptCore/JSLock.h: Removed. - -2008-11-11 Mark Rowe - - Fix broken dependencies building JavaScriptCore on a freezing cold cat, caused - by failure to update all instances of "kjs" to their new locations. - - * JavaScriptCore.xcodeproj/project.pbxproj: - -2008-11-11 Alexey Proskuryakov - - Rubber-stamped by Adam Roben. - - * wtf/AVLTree.h: (WTF::AVLTree::Iterator::start_iter): - Fix indentation a little more. - -2008-11-11 Cameron Zwarich - - Rubber-stamped by Sam Weinig. - - Clean up EvalCodeCache to match our coding style a bit more. - - * VM/EvalCodeCache.h: - (JSC::EvalCodeCache::get): - -2008-11-11 Cameron Zwarich - - Rubber-stamped by Sam Weinig. - - Bug 22179: Move EvalCodeCache from CodeBlock.h into its own file - - - * GNUmakefile.am: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * VM/CodeBlock.h: - * VM/EvalCodeCache.h: Copied from VM/CodeBlock.h. - * VM/Machine.cpp: - -2008-11-11 Cameron Zwarich - - Reviewed by Sam Weinig. - - Remove the 'm_' prefix from the fields of the SwitchRecord struct. - - * VM/CTI.cpp: - (JSC::CTI::privateCompile): - * VM/CTI.h: - (JSC::SwitchRecord): - (JSC::SwitchRecord::SwitchRecord): - -2008-11-11 Cameron Zwarich - - Rubber-stamped by Sam Weinig. - - Make asInteger() a static function so that it has internal linkage. - - * VM/CTI.cpp: - (JSC::asInteger): - -2008-11-11 Maciej Stachowiak - - Reviewed by Mark Rowe. - - - shrink CodeBlock and AST related Vectors to exact fit (5-10M savings on membuster test) - - No perf regression combined with the last patch (each seems like a small regression individually) - - * bytecompiler/CodeGenerator.cpp: - (JSC::CodeGenerator::generate): - * parser/Nodes.h: - (JSC::SourceElements::releaseContentsIntoVector): - * wtf/Vector.h: - (WTF::Vector::shrinkToFit): - -2008-11-11 Maciej Stachowiak - - Reviewed by Mark Rowe. - - - remove inline capacity from declaration stacks (15M savings on membuster test) - - No perf regression on SunSpider or V8 test combined with other upcoming memory improvement patch. - - * JavaScriptCore.exp: - * parser/Nodes.h: - -2008-11-11 Cameron Zwarich - - Reviewed by Oliver Hunt. - - While r38286 removed the need for the m_callFrame member variable of - CTI, it should be also be removed. - - * VM/CTI.h: - -2008-11-10 Cameron Zwarich - - Reviewed by Oliver Hunt. - - Make CTI::asInteger() a non-member function, since it needs no access to - any of CTI's member variables. - - * VM/CTI.cpp: - (JSC::asInteger): - * VM/CTI.h: - -2008-11-10 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Use 'value' instead of 'js' in CTI as a name for JSValue* to match our - usual convention elsewhere. - - * VM/CTI.cpp: - (JSC::CTI::emitGetArg): - (JSC::CTI::emitGetPutArg): - (JSC::CTI::getConstantImmediateNumericArg): - (JSC::CTI::printOpcodeOperandTypes): - -2008-11-10 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Make CTI::getConstant() a member function of CodeBlock instead. - - * VM/CTI.cpp: - (JSC::CTI::emitGetArg): - (JSC::CTI::emitGetPutArg): - (JSC::CTI::getConstantImmediateNumericArg): - (JSC::CTI::printOpcodeOperandTypes): - (JSC::CTI::privateCompileMainPass): - * VM/CTI.h: - * VM/CodeBlock.h: - (JSC::CodeBlock::getConstant): - -2008-11-10 Cameron Zwarich - - Reviewed by Sam Weinig. - - Rename CodeBlock::isConstant() to isConstantRegisterIndex(). - - * VM/CTI.cpp: - (JSC::CTI::emitGetArg): - (JSC::CTI::emitGetPutArg): - (JSC::CTI::getConstantImmediateNumericArg): - (JSC::CTI::printOpcodeOperandTypes): - (JSC::CTI::privateCompileMainPass): - * VM/CodeBlock.h: - (JSC::CodeBlock::isConstantRegisterIndex): - * bytecompiler/CodeGenerator.cpp: - (JSC::CodeGenerator::emitEqualityOp): - -2008-11-10 Gavin Barraclough - - Build fix for non-CTI builds. - - * VM/Machine.cpp: - (JSC::Machine::initialize): - -2008-11-10 Cameron Zwarich - - Reviewed by Sam Weinig. - - Remove the unused labels member variable of CodeBlock. - - * VM/CodeBlock.h: - * VM/LabelID.h: - (JSC::LabelID::setLocation): - -2008-11-10 Gavin Barraclough - - Reviewed by Cameron Zwarich. - - Batch compile the set of static trampolines at the point Machine is constructed, using a single allocation. - Refactor out m_callFrame from CTI, since this is only needed to access the global data (instead store a - pointer to the global data directly, since this is available at the point the Machine is constructed). - Add a method to align the code buffer, to allow JIT generation for multiple trampolines in one block. - - * VM/CTI.cpp: - (JSC::CTI::getConstant): - (JSC::CTI::emitGetArg): - (JSC::CTI::emitGetPutArg): - (JSC::CTI::getConstantImmediateNumericArg): - (JSC::CTI::printOpcodeOperandTypes): - (JSC::CTI::CTI): - (JSC::CTI::compileBinaryArithOp): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileGetByIdProto): - (JSC::CTI::privateCompileGetByIdChain): - (JSC::CTI::privateCompileCTIMachineTrampolines): - (JSC::CTI::freeCTIMachineTrampolines): - * VM/CTI.h: - (JSC::CTI::compile): - (JSC::CTI::compileGetByIdSelf): - (JSC::CTI::compileGetByIdProto): - (JSC::CTI::compileGetByIdChain): - (JSC::CTI::compilePutByIdReplace): - (JSC::CTI::compilePutByIdTransition): - (JSC::CTI::compileCTIMachineTrampolines): - (JSC::CTI::compilePatchGetArrayLength): - * VM/Machine.cpp: - (JSC::Machine::initialize): - (JSC::Machine::~Machine): - (JSC::Machine::execute): - (JSC::Machine::tryCTICachePutByID): - (JSC::Machine::tryCTICacheGetByID): - (JSC::Machine::cti_op_call_JSFunction): - (JSC::Machine::cti_vm_lazyLinkCall): - * VM/Machine.h: - * masm/X86Assembler.h: - (JSC::JITCodeBuffer::isAligned): - (JSC::X86Assembler::): - (JSC::X86Assembler::align): - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): - -2008-11-10 Maciej Stachowiak - - Reviewed by Antti Koivisto. - - - Make Vector::clear() release the Vector's memory (1MB savings on membuster) - https://bugs.webkit.org/show_bug.cgi?id=22170 - - * wtf/Vector.h: - (WTF::VectorBufferBase::deallocateBuffer): Set capacity to 0 as - well as size, otherwise shrinking capacity to 0 can fail to reset - the capacity and thus cause a future crash. - (WTF::Vector::~Vector): Shrink size not capacity; we only need - to call destructors, the buffer will be freed anyway. - (WTF::Vector::clear): Change this to shrinkCapacity(0), not just shrink(0). - (WTF::::shrinkCapacity): Use shrink() instead of resize() for case where - the size is greater than the new capacity, to work with types that have no - default constructor. - -2008-11-10 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Split multiple definitions into separate lines. - - * VM/CTI.cpp: - (JSC::CTI::compileBinaryArithOp): - -2008-11-10 Cameron Zwarich - - Reviewed by Geoff Garen. - - Bug 22162: Remove cachedValueGetter from the JavaScriptCore API implementation - - - There is no more need for the cachedValueGetter hack now that we have - PropertySlot::setValue(), so we should remove it. - - * API/JSCallbackObject.h: - * API/JSCallbackObjectFunctions.h: - (JSC::::getOwnPropertySlot): - -2008-11-10 Cameron Zwarich - - Reviewed by Darin Adler. - - Bug 22152: Remove asObject() call from JSCallbackObject::getOwnPropertySlot() - - - With the recent change to adopt asType() style cast functions with - assertions instead of static_casts in many places, the assertion for - the asObject() call in JSCallbackObject::getOwnPropertySlot() has been - failing when using any nontrivial client of the JavaScriptCore API. - The cast isn't even necessary to call slot.setCustom(), so it should - be removed. - - * API/JSCallbackObjectFunctions.h: - (JSC::JSCallbackObject::getOwnPropertySlot): - -2008-11-10 Alexey Proskuryakov - - Reviewed by Adam Roben. - - A few coding style fixes for AVLTree. - - * wtf/AVLTree.h: Moved to WTF namespace, Removed "KJS_" from include guards. - (WTF::AVLTree::Iterator::start_iter): Fixed indentation - - * runtime/JSArray.cpp: Added "using namepace WTF". - -2008-11-09 Cameron Zwarich - - Not reviewed. - - Speculatively fix the non-AllInOne build. - - * runtime/NativeErrorConstructor.cpp: - -2008-11-09 Darin Adler - - Reviewed by Tim Hatcher. - - - https://bugs.webkit.org/show_bug.cgi?id=22149 - remove unused code from the parser - - * AllInOneFile.cpp: Removed nodes2string.cpp. - * GNUmakefile.am: Ditto. - * JavaScriptCore.exp: Ditto. - * JavaScriptCore.pri: Ditto. - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto. - * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. - * JavaScriptCoreSources.bkl: Ditto. - - * VM/CodeBlock.h: Added include. - - * VM/Machine.cpp: (JSC::Machine::execute): Use the types from - DeclarationStacks as DeclarationStacks:: rather than Node:: since - "Node" really has little to do with it. - * bytecompiler/CodeGenerator.cpp: - (JSC::CodeGenerator::CodeGenerator): Ditto. - - * jsc.cpp: - (Options::Options): Removed prettyPrint option. - (runWithScripts): Ditto. - (printUsageStatement): Ditto. - (parseArguments): Ditto. - (jscmain): Ditto. - - * parser/Grammar.y: Removed use of obsolete ImmediateNumberNode. - - * parser/Nodes.cpp: - (JSC::ThrowableExpressionData::emitThrowError): Use inline functions - instead of direct member access for ThrowableExpressionData values. - (JSC::BracketAccessorNode::emitCode): Ditto. - (JSC::DotAccessorNode::emitCode): Ditto. - (JSC::NewExprNode::emitCode): Ditto. - (JSC::EvalFunctionCallNode::emitCode): Ditto. - (JSC::FunctionCallValueNode::emitCode): Ditto. - (JSC::FunctionCallResolveNode::emitCode): Ditto. - (JSC::FunctionCallBracketNode::emitCode): Ditto. - (JSC::FunctionCallDotNode::emitCode): Ditto. - (JSC::PostfixResolveNode::emitCode): Ditto. - (JSC::PostfixBracketNode::emitCode): Ditto. - (JSC::PostfixDotNode::emitCode): Ditto. - (JSC::DeleteResolveNode::emitCode): Ditto. - (JSC::DeleteBracketNode::emitCode): Ditto. - (JSC::DeleteDotNode::emitCode): Ditto. - (JSC::PrefixResolveNode::emitCode): Ditto. - (JSC::PrefixBracketNode::emitCode): Ditto. - (JSC::PrefixDotNode::emitCode): Ditto. - (JSC::ThrowableBinaryOpNode::emitCode): Ditto. - (JSC::InstanceOfNode::emitCode): Ditto. - (JSC::ReadModifyResolveNode::emitCode): Ditto. - (JSC::AssignResolveNode::emitCode): Ditto. - (JSC::AssignDotNode::emitCode): Ditto. - (JSC::ReadModifyDotNode::emitCode): Ditto. - (JSC::AssignBracketNode::emitCode): Ditto. - (JSC::ReadModifyBracketNode::emitCode): Ditto. - (JSC::statementListEmitCode): Take a const StatementVector instead - of a non-const one. Also removed unused statementListPushFIFO. - (JSC::ForInNode::emitCode): Inline functions instead of member access. - (JSC::ThrowNode::emitCode): Ditto. - (JSC::EvalNode::emitCode): Ditto. - (JSC::FunctionBodyNode::emitCode): Ditto. - (JSC::ProgramNode::emitCode): Ditto. - - * parser/Nodes.h: Removed unused includes and forward declarations. - Removed Precedence enum. Made many more members private instead of - protected or public. Removed unused NodeStack typedef. Moved the - VarStack and FunctionStack typedefs from Node to ScopeNode. Made - Node::emitCode pure virtual and changed classes that don't emit - any code to inherit from ParserRefCounted rather than Node. - Moved isReturnNode from Node to StatementNode. Removed the - streamTo, precedence, and needsParensIfLeftmost functions from - all classes. Removed the ImmediateNumberNode class and make - NumberNode::setValue nonvirtual. - - * parser/nodes2string.cpp: Removed. - -2008-11-09 Darin Adler - - Reviewed by Sam Weinig and Maciej Stachowiak. - Includes some work done by Chris Brichford. - - - fix https://bugs.webkit.org/show_bug.cgi?id=14886 - Stack overflow due to deeply nested parse tree doing repeated string concatentation - - Test: fast/js/large-expressions.html - - 1) Code generation is recursive, so takes stack proportional to the complexity - of the source code expression. Fixed by setting an arbitrary recursion limit - of 10,000 nodes. - - 2) Destruction of the syntax tree was recursive. Fixed by introducing a - non-recursive mechanism for destroying the tree. - - * bytecompiler/CodeGenerator.cpp: - (JSC::CodeGenerator::CodeGenerator): Initialize depth to 0. - (JSC::CodeGenerator::emitThrowExpressionTooDeepException): Added. Emits the code - to throw a "too deep" exception. - * bytecompiler/CodeGenerator.h: - (JSC::CodeGenerator::emitNode): Check depth and emit an exception if we exceed - the maximum depth. - - * parser/Nodes.cpp: - (JSC::NodeReleaser::releaseAllNodes): Added. To be called inside node destructors - to avoid recursive calls to destructors for nodes inside this one. - (JSC::NodeReleaser::release): Added. To be called inside releaseNodes functions. - Also added releaseNodes functions and calls to releaseAllNodes inside destructors - for each class derived from Node that has RefPtr to other nodes. - (JSC::NodeReleaser::adopt): Added. Used by the release function. - (JSC::NodeReleaser::adoptFunctionBodyNode): Added. - - * parser/Nodes.h: Added declarations of releaseNodes and destructors in all classes - that needed it. Eliminated use of ListRefPtr and releaseNext, which are the two parts - of an older solution to the non-recursive destruction problem that works only for - lists, whereas the new solution works for other graphs. Changed ReverseBinaryOpNode - to use BinaryOpNode as a base class to avoid some duplicated code. - -2008-11-08 Kevin Ollivier - - wx build fixes after addition of JSCore parser and bycompiler dirs. Also cleanup - the JSCore Bakefile's group names to be consistent. - - * JavaScriptCoreSources.bkl: - * jscore.bkl: - -2008-11-07 Cameron Zwarich - - Reviewed by Geoff Garen. - - Bug 21801: REGRESSION (r37821): YUI date formatting JavaScript puts the letter 'd' in place of the day - - - Fix the constant register check in the 'typeof' optimization in - CodeGenerator, which was completely broken after r37821. - - * bytecompiler/CodeGenerator.cpp: - (JSC::CodeGenerator::emitEqualityOp): - -2008-11-07 Cameron Zwarich - - Reviewed by Geoff Garen. - - Bug 22129: Move CTI::isConstant() to CodeBlock - - - * VM/CTI.cpp: - (JSC::CTI::emitGetArg): - (JSC::CTI::emitGetPutArg): - (JSC::CTI::getConstantImmediateNumericArg): - (JSC::CTI::printOpcodeOperandTypes): - (JSC::CTI::privateCompileMainPass): - * VM/CTI.h: - * VM/CodeBlock.h: - (JSC::CodeBlock::isConstant): - -2008-11-07 Alp Toker - - autotools fix. Always use the configured perl binary (which may be - different to the one in $PATH) when generating sources. - - * GNUmakefile.am: - -2008-11-07 Cameron Zwarich - - Not reviewed. - - Change grammar.cpp to Grammar.cpp and grammar.h to Grammar.h in several - build scripts. - - * DerivedSources.make: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCoreSources.bkl: - -2008-11-07 Alp Toker - - More grammar.cpp -> Grammar.cpp build fixes. - - * AllInOneFile.cpp: - * GNUmakefile.am: - -2008-11-07 Simon Hausmann - - Fix the build on case-sensitive file systems. grammar.y was renamed to - Grammar.y but Lexer.cpp includes grammar.h. The build bots didn't - notice this change because of stale files. - - * parser/Lexer.cpp: - -2008-11-07 Cameron Zwarich - - Reviewed by Alexey Proskuryakov. - - Rename the m_nextGlobal, m_nextParameter, and m_nextConstant member - variables of CodeGenerator to m_nextGlobalIndex, m_nextParameterIndex, - and m_nextConstantIndex respectively. This is to distinguish these from - member variables like m_lastConstant, which are actually RefPtrs to - Registers. - - * bytecompiler/CodeGenerator.cpp: - (JSC::CodeGenerator::addGlobalVar): - (JSC::CodeGenerator::allocateConstants): - (JSC::CodeGenerator::CodeGenerator): - (JSC::CodeGenerator::addParameter): - (JSC::CodeGenerator::addConstant): - * bytecompiler/CodeGenerator.h: - -2008-11-06 Gavin Barraclough barraclough@apple.com - - Reviewed by Oliver Hunt. - - Do not make a cti_* call to perform an op_call unless either: - (1) The codeblock for the function body has not been generated. - (2) The number of arguments passed does not match the callee arity. - - ~1% progression on sunspider --v8 - - * VM/CTI.cpp: - (JSC::CTI::compileOpCallInitializeCallFrame): - (JSC::CTI::compileOpCall): - (JSC::CTI::privateCompileSlowCases): - * VM/CTI.h: - * VM/Machine.cpp: - (JSC::Machine::cti_op_call_JSFunction): - (JSC::Machine::cti_op_call_arityCheck): - (JSC::Machine::cti_op_construct_JSConstruct): - * VM/Machine.h: - * kjs/nodes.h: - -2008-11-06 Cameron Zwarich - - Reviewed by Geoff Garen. - - Move the remaining files in the kjs subdirectory of JavaScriptCore to - a new parser subdirectory, and remove the kjs subdirectory entirely. - - * AllInOneFile.cpp: - * DerivedSources.make: - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.vcproj/WTF/WTF.vcproj: - * JavaScriptCore.vcproj/jsc/jsc.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - * VM/CodeBlock.h: - * VM/ExceptionHelpers.cpp: - * VM/SamplingTool.h: - * bytecompiler/CodeGenerator.h: - * jsc.pro: - * jscore.bkl: - * kjs: Removed. - * kjs/NodeInfo.h: Removed. - * kjs/Parser.cpp: Removed. - * kjs/Parser.h: Removed. - * kjs/ResultType.h: Removed. - * kjs/SourceCode.h: Removed. - * kjs/SourceProvider.h: Removed. - * kjs/grammar.y: Removed. - * kjs/keywords.table: Removed. - * kjs/lexer.cpp: Removed. - * kjs/lexer.h: Removed. - * kjs/nodes.cpp: Removed. - * kjs/nodes.h: Removed. - * kjs/nodes2string.cpp: Removed. - * parser: Added. - * parser/Grammar.y: Copied from kjs/grammar.y. - * parser/Keywords.table: Copied from kjs/keywords.table. - * parser/Lexer.cpp: Copied from kjs/lexer.cpp. - * parser/Lexer.h: Copied from kjs/lexer.h. - * parser/NodeInfo.h: Copied from kjs/NodeInfo.h. - * parser/Nodes.cpp: Copied from kjs/nodes.cpp. - * parser/Nodes.h: Copied from kjs/nodes.h. - * parser/Parser.cpp: Copied from kjs/Parser.cpp. - * parser/Parser.h: Copied from kjs/Parser.h. - * parser/ResultType.h: Copied from kjs/ResultType.h. - * parser/SourceCode.h: Copied from kjs/SourceCode.h. - * parser/SourceProvider.h: Copied from kjs/SourceProvider.h. - * parser/nodes2string.cpp: Copied from kjs/nodes2string.cpp. - * pcre/pcre.pri: - * pcre/pcre_exec.cpp: - * runtime/FunctionConstructor.cpp: - * runtime/JSActivation.h: - * runtime/JSFunction.h: - * runtime/JSGlobalData.cpp: - * runtime/JSGlobalObjectFunctions.cpp: - * runtime/JSObject.cpp: - (JSC::JSObject::toNumber): - * runtime/RegExp.cpp: - -2008-11-06 Adam Roben - - Windows build fix after r38196 - - * JavaScriptCore.vcproj/jsc/jsc.vcproj: Added bytecompiler/ to the - include path. - -2008-11-06 Cameron Zwarich - - Rubber-stamped by Sam Weinig. - - Create a new bytecompiler subdirectory of JavaScriptCore and move some - relevant files to it. - - * AllInOneFile.cpp: - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - * VM/CodeGenerator.cpp: Removed. - * VM/CodeGenerator.h: Removed. - * bytecompiler: Added. - * bytecompiler/CodeGenerator.cpp: Copied from VM/CodeGenerator.cpp. - * bytecompiler/CodeGenerator.h: Copied from VM/CodeGenerator.h. - * bytecompiler/LabelScope.h: Copied from kjs/LabelScope.h. - * jscore.bkl: - * kjs/LabelScope.h: Removed. - -2008-11-06 Adam Roben - - Windows clean build fix after r38155 - - Rubberstamped by Cameron Zwarich. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Update - the post-build event for the move of create_hash_table out of kjs/. - -2008-11-06 Laszlo Gombos - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=22107 - - Bug uncovered during RVCT port in functions not used. get_lt() and - get_gt() takes only one argument - remove second argument where - applicable. - - * wtf/AVLTree.h: - (JSC::AVLTree::remove): Remove second argument of get_lt/get_gt(). - (JSC::AVLTree::subst): Ditto. - -2008-11-06 Alp Toker - - Reviewed by Cameron Zwarich. - - https://bugs.webkit.org/show_bug.cgi?id=22033 - [GTK] CTI/Linux r38064 crashes; JIT requires executable memory - - Mark pages allocated by the FastMalloc mmap code path executable with - PROT_EXEC. This fixes crashes seen on CPUs and kernels that enforce - non-executable memory (like ExecShield on Fedora Linux) when the JIT - is enabled. - - This patch does not resolve the issue on debug builds so affected - developers may still need to pass --disable-jit to configure. - - * wtf/TCSystemAlloc.cpp: - (TryMmap): - (TryDevMem): - (TCMalloc_SystemRelease): - -2008-11-06 Peter Gal - - Reviewed by Cameron Zwarich. - - Bug 22099: Make the Qt port build the JSC shell in the correct place - - - Adjust include paths and build destination dir for the 'jsc' executable - in the Qt build. - - * jsc.pro: - -2008-11-06 Kristian Amlie - - Reviewed by Simon Hausmann. - - Implemented the block allocation on Symbian through heap allocation. - - Unfortunately there is no way to allocate virtual memory. The Posix - layer provides mmap() but no anonymous mapping. So this is a very slow - solution but it should work as a start. - - * runtime/Collector.cpp: - (JSC::allocateBlock): - (JSC::freeBlock): - -2008-11-06 Laszlo Gombos - - Reviewed by Simon Hausmann. - - Borrow some math functions from the MSVC port to the build with the - RVCT compiler. - - * wtf/MathExtras.h: - (isinf): - (isnan): - (signbit): - -2008-11-06 Laszlo Gombos - - Reviewed by Simon Hausmann. - - Include strings.h for strncasecmp(). - This is needed for compilation inside Symbian and it is also - confirmed by the man-page on Linux. - - * runtime/DateMath.cpp: - -2008-11-06 Norbert Leser - - Reviewed by Simon Hausmann. - - Implemented currentThreadStackBase for Symbian. - - * runtime/Collector.cpp: - (JSC::currentThreadStackBase): - -2008-11-06 Laszlo Gombos - - Reviewed by Simon Hausmann. - - RVCT does not support tm_gmtoff field, so disable that code just like - for MSVC. - - * runtime/DateMath.h: - (JSC::GregorianDateTime::GregorianDateTime): - (JSC::GregorianDateTime::operator tm): - -2008-11-06 Kristian Amlie - - Reviewed by Simon Hausmann. - - Define PLATFORM(UNIX) for S60. Effectively WebKit on S60 is compiled - on top of the Posix layer. - - * wtf/Platform.h: - -2008-11-06 Norbert Leser - - Reviewed by Simon Hausmann. - - Added __SYMBIAN32__ condition for defining PLATFORM(SYMBIAN). - - * wtf/Platform.h: - -2008-11-06 Ariya Hidayat - - Reviewed by Simon Hausmann. - - Added WINSCW compiler define for Symbian S60. - - * wtf/Platform.h: - -2008-11-06 Kristian Amlie - - Reviewed by Simon Hausmann. - - Use the GCC defines of the WTF_ALIGN* macros for the RVCT and the - MINSCW compiler. - - * wtf/Vector.h: - -2008-11-06 Kristian Amlie - - Reviewed by Simon Hausmann. - - Define capabilities of the SYMBIAN platform. Some of the system - headers are actually dependent on RVCT. - - * wtf/Platform.h: - -2008-11-06 Kristian Amlie - - Reviewed by Simon Hausmann. - - Add missing stddef.h header needed for compilation in Symbian. - - * runtime/Collector.h: - -2008-11-06 Kristian Amlie - - Reviewed by Simon Hausmann. - - Added COMPILER(RVCT) to detect the ARM RVCT compiler used in the Symbian environment. - - * wtf/Platform.h: - -2008-11-06 Simon Hausmann - - Fix the Qt build, adjust include paths after move of jsc.pro. - - * jsc.pro: - -2008-11-06 Cameron Zwarich - - Rubber-stamped by Sam Weinig. - - Move kjs/Shell.cpp to the top level of the JavaScriptCore directory and - rename it to jsc.cpp to reflect the name of the binary compiled from it. - - * GNUmakefile.am: - * JavaScriptCore.vcproj/jsc/jsc.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * jsc.cpp: Copied from kjs/Shell.cpp. - * jsc.pro: - * jscore.bkl: - * kjs/Shell.cpp: Removed. - -2008-11-06 Cameron Zwarich - - Rubber-stamped by Sam Weinig. - - Move create_hash_table and jsc.pro out of the kjs directory and into the - root directory of JavaScriptCore. - - * DerivedSources.make: - * JavaScriptCore.pri: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * create_hash_table: Copied from kjs/create_hash_table. - * jsc.pro: Copied from kjs/jsc.pro. - * kjs/create_hash_table: Removed. - * kjs/jsc.pro: Removed. - * make-generated-sources.sh: - -2008-11-05 Gavin Barraclough - - Reviewed by Maciej Stachowiak. - - https://bugs.webkit.org/show_bug.cgi?id=22094 - - Fix for bug where the callee incorrectly recieves the caller's lexical - global object as this, rather than its own. Implementation closely - follows the spec, passing jsNull, checking in the callee and replacing - with the global object where necessary. - - * VM/CTI.cpp: - (JSC::CTI::compileOpCall): - * VM/Machine.cpp: - (JSC::Machine::cti_op_call_NotJSFunction): - (JSC::Machine::cti_op_call_eval): - * runtime/JSCell.h: - (JSC::JSValue::toThisObject): - * runtime/JSImmediate.cpp: - (JSC::JSImmediate::toThisObject): - * runtime/JSImmediate.h: - -2008-11-05 Kevin Ollivier - - wx build fix after Operations.cpp move. - - * JavaScriptCoreSources.bkl: - -2008-11-05 Cameron Zwarich - - Not reviewed. - - Fix the build for case-sensitive build systems and wxWindows. - - * JavaScriptCoreSources.bkl: - * kjs/create_hash_table: - -2008-11-05 Cameron Zwarich - - Not reviewed. - - Fix the build for case-sensitive build systems. - - * JavaScriptCoreSources.bkl: - * kjs/Shell.cpp: - * runtime/Interpreter.cpp: - * runtime/JSArray.cpp: - -2008-11-05 Cameron Zwarich - - Not reviewed. - - Fix the build for case-sensitive build systems. - - * API/JSBase.cpp: - * API/JSObjectRef.cpp: - * runtime/CommonIdentifiers.h: - * runtime/Identifier.cpp: - * runtime/InitializeThreading.cpp: - * runtime/InternalFunction.h: - * runtime/JSString.h: - * runtime/Lookup.h: - * runtime/PropertyNameArray.h: - * runtime/PropertySlot.h: - * runtime/StructureID.cpp: - * runtime/StructureID.h: - * runtime/UString.cpp: - -2008-11-05 Cameron Zwarich - - Rubber-stamped by Sam Weinig. - - Move more files to the runtime subdirectory of JavaScriptCore. - - * API/APICast.h: - * API/JSBase.cpp: - * API/JSCallbackObject.cpp: - * API/JSClassRef.cpp: - * API/JSClassRef.h: - * API/JSStringRefCF.cpp: - * API/JSValueRef.cpp: - * API/OpaqueJSString.cpp: - * API/OpaqueJSString.h: - * AllInOneFile.cpp: - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - * VM/CodeBlock.h: - * VM/CodeGenerator.cpp: - * VM/Machine.cpp: - * VM/RegisterFile.h: - * debugger/Debugger.h: - * kjs/SourceProvider.h: - * kjs/TypeInfo.h: Removed. - * kjs/collector.cpp: Removed. - * kjs/collector.h: Removed. - * kjs/completion.h: Removed. - * kjs/create_hash_table: - * kjs/identifier.cpp: Removed. - * kjs/identifier.h: Removed. - * kjs/interpreter.cpp: Removed. - * kjs/interpreter.h: Removed. - * kjs/lexer.cpp: - * kjs/lexer.h: - * kjs/lookup.cpp: Removed. - * kjs/lookup.h: Removed. - * kjs/nodes.cpp: - * kjs/nodes.h: - * kjs/operations.cpp: Removed. - * kjs/operations.h: Removed. - * kjs/protect.h: Removed. - * kjs/regexp.cpp: Removed. - * kjs/regexp.h: Removed. - * kjs/ustring.cpp: Removed. - * kjs/ustring.h: Removed. - * pcre/pcre_exec.cpp: - * profiler/CallIdentifier.h: - * profiler/Profile.h: - * runtime/ArrayConstructor.cpp: - * runtime/ArrayPrototype.cpp: - * runtime/ArrayPrototype.h: - * runtime/Collector.cpp: Copied from kjs/collector.cpp. - * runtime/Collector.h: Copied from kjs/collector.h. - * runtime/CollectorHeapIterator.h: - * runtime/Completion.h: Copied from kjs/completion.h. - * runtime/ErrorPrototype.cpp: - * runtime/Identifier.cpp: Copied from kjs/identifier.cpp. - * runtime/Identifier.h: Copied from kjs/identifier.h. - * runtime/InitializeThreading.cpp: - * runtime/Interpreter.cpp: Copied from kjs/interpreter.cpp. - * runtime/Interpreter.h: Copied from kjs/interpreter.h. - * runtime/JSCell.h: - * runtime/JSGlobalData.cpp: - * runtime/JSGlobalData.h: - * runtime/JSLock.cpp: - * runtime/JSNumberCell.cpp: - * runtime/JSNumberCell.h: - * runtime/JSObject.cpp: - * runtime/JSValue.h: - * runtime/Lookup.cpp: Copied from kjs/lookup.cpp. - * runtime/Lookup.h: Copied from kjs/lookup.h. - * runtime/MathObject.cpp: - * runtime/NativeErrorPrototype.cpp: - * runtime/NumberPrototype.cpp: - * runtime/Operations.cpp: Copied from kjs/operations.cpp. - * runtime/Operations.h: Copied from kjs/operations.h. - * runtime/PropertyMapHashTable.h: - * runtime/Protect.h: Copied from kjs/protect.h. - * runtime/RegExp.cpp: Copied from kjs/regexp.cpp. - * runtime/RegExp.h: Copied from kjs/regexp.h. - * runtime/RegExpConstructor.cpp: - * runtime/RegExpObject.h: - * runtime/RegExpPrototype.cpp: - * runtime/SmallStrings.h: - * runtime/StringObjectThatMasqueradesAsUndefined.h: - * runtime/StructureID.cpp: - * runtime/StructureID.h: - * runtime/StructureIDTransitionTable.h: - * runtime/SymbolTable.h: - * runtime/TypeInfo.h: Copied from kjs/TypeInfo.h. - * runtime/UString.cpp: Copied from kjs/ustring.cpp. - * runtime/UString.h: Copied from kjs/ustring.h. - * wrec/CharacterClassConstructor.h: - * wrec/WREC.h: - -2008-11-05 Geoffrey Garen - - Suggested by Darin Adler. - - Removed two copy constructors that the compiler can generate for us - automatically. - - * VM/LabelID.h: - (JSC::LabelID::setLocation): - (JSC::LabelID::offsetFrom): - (JSC::LabelID::ref): - (JSC::LabelID::refCount): - * kjs/LabelScope.h: - -2008-11-05 Anders Carlsson - - Fix Snow Leopard build. - - * JavaScriptCore.xcodeproj/project.pbxproj: - -2008-11-04 Cameron Zwarich - - Rubber-stamped by Steve Falkenburg. - - Move dtoa.cpp and dtoa.h to the WTF Visual Studio project to reflect - their movement in the filesystem. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.vcproj/WTF/WTF.vcproj: - -2008-11-04 Cameron Zwarich - - Rubber-stamped by Sam Weinig. - - Move kjs/dtoa.h to the wtf subdirectory of JavaScriptCore. - - * AllInOneFile.cpp: - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - * kjs/dtoa.cpp: Removed. - * kjs/dtoa.h: Removed. - * wtf/dtoa.cpp: Copied from kjs/dtoa.cpp. - * wtf/dtoa.h: Copied from kjs/dtoa.h. - -2008-11-04 Cameron Zwarich - - Rubber-stamped by Sam Weinig. - - Move kjs/config.h to the top level of JavaScriptCore. - - * GNUmakefile.am: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * config.h: Copied from kjs/config.h. - * kjs/config.h: Removed. - -2008-11-04 Darin Adler - - Reviewed by Tim Hatcher. - - * wtf/ThreadingNone.cpp: Tweak formatting. - -2008-11-03 Darin Adler - - Reviewed by Tim Hatcher. - - - https://bugs.webkit.org/show_bug.cgi?id=22061 - create script to check for exit-time destructors - - * JavaScriptCore.exp: Changed to export functions rather than - a global for the atomically initialized static mutex. - - * JavaScriptCore.xcodeproj/project.pbxproj: Added a script - phase that runs the check-for-exit-time-destructors script. - - * wtf/MainThread.cpp: - (WTF::mainThreadFunctionQueueMutex): Changed to leak an object - rather than using an exit time destructor. - (WTF::functionQueue): Ditto. - * wtf/unicode/icu/CollatorICU.cpp: - (WTF::cachedCollatorMutex): Ditto. - - * wtf/Threading.h: Changed other platforms to share the Windows - approach where the mutex is internal and the functions are exported. - * wtf/ThreadingGtk.cpp: - (WTF::lockAtomicallyInitializedStaticMutex): Ditto. - (WTF::unlockAtomicallyInitializedStaticMutex): Ditto. - * wtf/ThreadingNone.cpp: - (WTF::lockAtomicallyInitializedStaticMutex): Ditto. - (WTF::unlockAtomicallyInitializedStaticMutex): Ditto. - * wtf/ThreadingPthreads.cpp: - (WTF::threadMapMutex): Changed to leak an object rather than using - an exit time destructor. - (WTF::lockAtomicallyInitializedStaticMutex): Mutex change. - (WTF::unlockAtomicallyInitializedStaticMutex): Ditto. - (WTF::threadMap): Changed to leak an object rather than using - an exit time destructor. - * wtf/ThreadingQt.cpp: - (WTF::lockAtomicallyInitializedStaticMutex): Mutex change. - (WTF::unlockAtomicallyInitializedStaticMutex): Ditto. - * wtf/ThreadingWin.cpp: - (WTF::lockAtomicallyInitializedStaticMutex): Added an assertion. - -2008-11-04 Adam Roben - - Windows build fix - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Update - the location of JSStaticScopeObject.{cpp,h}. - -2008-11-04 Cameron Zwarich - - Reviewed by Alexey Proskuryakov. - - Move AllInOneFile.cpp to the top level of JavaScriptCore. - - * AllInOneFile.cpp: Copied from kjs/AllInOneFile.cpp. - * GNUmakefile.am: - * JavaScriptCore.xcodeproj/project.pbxproj: - * kjs/AllInOneFile.cpp: Removed. - -2008-11-04 Cameron Zwarich - - Rubber-stamped by Alexey Proskuryakov. - - Add NodeInfo.h to the JavaScriptCore Xcode project. - - * JavaScriptCore.xcodeproj/project.pbxproj: - -2008-11-03 Cameron Zwarich - - Rubber-stamped by Maciej Stachowiak. - - Move more files into the runtime subdirectory of JavaScriptCore. - - * API/JSBase.cpp: - * API/JSCallbackConstructor.cpp: - * API/JSCallbackFunction.cpp: - * API/JSClassRef.cpp: - * API/OpaqueJSString.cpp: - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - * kjs/AllInOneFile.cpp: - * kjs/ArgList.cpp: Removed. - * kjs/ArgList.h: Removed. - * kjs/Arguments.cpp: Removed. - * kjs/Arguments.h: Removed. - * kjs/BatchedTransitionOptimizer.h: Removed. - * kjs/CollectorHeapIterator.h: Removed. - * kjs/CommonIdentifiers.cpp: Removed. - * kjs/CommonIdentifiers.h: Removed. - * kjs/ExecState.cpp: Removed. - * kjs/ExecState.h: Removed. - * kjs/GetterSetter.cpp: Removed. - * kjs/GetterSetter.h: Removed. - * kjs/InitializeThreading.cpp: Removed. - * kjs/InitializeThreading.h: Removed. - * kjs/JSActivation.cpp: Removed. - * kjs/JSActivation.h: Removed. - * kjs/JSGlobalData.cpp: Removed. - * kjs/JSGlobalData.h: Removed. - * kjs/JSLock.cpp: Removed. - * kjs/JSLock.h: Removed. - * kjs/JSStaticScopeObject.cpp: Removed. - * kjs/JSStaticScopeObject.h: Removed. - * kjs/JSType.h: Removed. - * kjs/PropertyNameArray.cpp: Removed. - * kjs/PropertyNameArray.h: Removed. - * kjs/ScopeChain.cpp: Removed. - * kjs/ScopeChain.h: Removed. - * kjs/ScopeChainMark.h: Removed. - * kjs/SymbolTable.h: Removed. - * kjs/Tracing.d: Removed. - * kjs/Tracing.h: Removed. - * runtime/ArgList.cpp: Copied from kjs/ArgList.cpp. - * runtime/ArgList.h: Copied from kjs/ArgList.h. - * runtime/Arguments.cpp: Copied from kjs/Arguments.cpp. - * runtime/Arguments.h: Copied from kjs/Arguments.h. - * runtime/BatchedTransitionOptimizer.h: Copied from kjs/BatchedTransitionOptimizer.h. - * runtime/CollectorHeapIterator.h: Copied from kjs/CollectorHeapIterator.h. - * runtime/CommonIdentifiers.cpp: Copied from kjs/CommonIdentifiers.cpp. - * runtime/CommonIdentifiers.h: Copied from kjs/CommonIdentifiers.h. - * runtime/ExecState.cpp: Copied from kjs/ExecState.cpp. - * runtime/ExecState.h: Copied from kjs/ExecState.h. - * runtime/GetterSetter.cpp: Copied from kjs/GetterSetter.cpp. - * runtime/GetterSetter.h: Copied from kjs/GetterSetter.h. - * runtime/InitializeThreading.cpp: Copied from kjs/InitializeThreading.cpp. - * runtime/InitializeThreading.h: Copied from kjs/InitializeThreading.h. - * runtime/JSActivation.cpp: Copied from kjs/JSActivation.cpp. - * runtime/JSActivation.h: Copied from kjs/JSActivation.h. - * runtime/JSGlobalData.cpp: Copied from kjs/JSGlobalData.cpp. - * runtime/JSGlobalData.h: Copied from kjs/JSGlobalData.h. - * runtime/JSLock.cpp: Copied from kjs/JSLock.cpp. - * runtime/JSLock.h: Copied from kjs/JSLock.h. - * runtime/JSStaticScopeObject.cpp: Copied from kjs/JSStaticScopeObject.cpp. - * runtime/JSStaticScopeObject.h: Copied from kjs/JSStaticScopeObject.h. - * runtime/JSType.h: Copied from kjs/JSType.h. - * runtime/PropertyNameArray.cpp: Copied from kjs/PropertyNameArray.cpp. - * runtime/PropertyNameArray.h: Copied from kjs/PropertyNameArray.h. - * runtime/ScopeChain.cpp: Copied from kjs/ScopeChain.cpp. - * runtime/ScopeChain.h: Copied from kjs/ScopeChain.h. - * runtime/ScopeChainMark.h: Copied from kjs/ScopeChainMark.h. - * runtime/SymbolTable.h: Copied from kjs/SymbolTable.h. - * runtime/Tracing.d: Copied from kjs/Tracing.d. - * runtime/Tracing.h: Copied from kjs/Tracing.h. - -2008-11-03 Sam Weinig - - Reviewed by Mark Rowe. - - Move #define to turn on dumping StructureID statistics to StructureID.cpp so that - turning it on does not require a full rebuild. - - * runtime/StructureID.cpp: - (JSC::StructureID::dumpStatistics): - * runtime/StructureID.h: - -2008-11-03 Alp Toker - - Reviewed by Geoffrey Garen. - - Fix warning when building on Darwin without JSC_MULTIPLE_THREADS - enabled. - - * kjs/InitializeThreading.cpp: - -2008-11-02 Matt Lilek - - Reviewed by Cameron Zwarich. - - Bug 22042: REGRESSION(r38066): ASSERTION FAILED: source in CodeBlock - - - Rename parameter name to avoid ASSERT. - - * VM/CodeBlock.h: - (JSC::CodeBlock::CodeBlock): - (JSC::ProgramCodeBlock::ProgramCodeBlock): - (JSC::EvalCodeBlock::EvalCodeBlock): - -2008-11-02 Cameron Zwarich - - Reviewed by Oliver Hunt. - - Bug 22035: Remove the '_' suffix on constructor parameter names for structs - - - * API/JSCallbackObject.h: - (JSC::JSCallbackObject::JSCallbackObjectData::JSCallbackObjectData): - * VM/CodeBlock.h: - (JSC::CodeBlock::CodeBlock): - (JSC::ProgramCodeBlock::ProgramCodeBlock): - (JSC::EvalCodeBlock::EvalCodeBlock): - * wrec/WREC.h: - (JSC::Quantifier::Quantifier): - -2008-10-31 Cameron Zwarich - - Rubber-stamped by Geoff Garen. - - Rename SourceRange.h to SourceCode.h. - - * API/JSBase.cpp: - * GNUmakefile.am: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * VM/CodeBlock.h: - * kjs/SourceCode.h: Copied from kjs/SourceRange.h. - * kjs/SourceRange.h: Removed. - * kjs/grammar.y: - * kjs/lexer.h: - * kjs/nodes.cpp: - (JSC::ForInNode::ForInNode): - * kjs/nodes.h: - (JSC::ThrowableExpressionData::setExceptionSourceCode): - -2008-10-31 Cameron Zwarich - - Reviewed by Darin Adler. - - Bug 22019: Move JSC::Interpreter::shouldPrintExceptions() to WebCore::Console - - - The JSC::Interpreter::shouldPrintExceptions() function is not used at - all in JavaScriptCore, so it should be moved to WebCore::Console, its - only user. - - * JavaScriptCore.exp: - * kjs/interpreter.cpp: - * kjs/interpreter.h: - -2008-10-31 Cameron Zwarich - - Not reviewed. - - Windows build fix. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - -2008-10-31 Cameron Zwarich - - Rubber-stamped by Sam Weinig. - - Remove the call to Interpreter::setShouldPrintExceptions() from the - GlobalObject constructor in the shell. The shouldPrintExceptions() - information is not used anywhere in JavaScriptCore, only in WebCore. - - * kjs/Shell.cpp: - (GlobalObject::GlobalObject): - -2008-10-31 Kevin Ollivier - - wxMSW build fix. - - * wtf/Threading.h: - -2008-10-31 Cameron Zwarich - - Rubber-stamped by Sam Weinig. - - Move more files from the kjs subdirectory of JavaScriptCore to the - runtime subdirectory. - - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - * kjs/AllInOneFile.cpp: - * kjs/RegExpConstructor.cpp: Removed. - * kjs/RegExpConstructor.h: Removed. - * kjs/RegExpMatchesArray.h: Removed. - * kjs/RegExpObject.cpp: Removed. - * kjs/RegExpObject.h: Removed. - * kjs/RegExpPrototype.cpp: Removed. - * kjs/RegExpPrototype.h: Removed. - * runtime/RegExpConstructor.cpp: Copied from kjs/RegExpConstructor.cpp. - * runtime/RegExpConstructor.h: Copied from kjs/RegExpConstructor.h. - * runtime/RegExpMatchesArray.h: Copied from kjs/RegExpMatchesArray.h. - * runtime/RegExpObject.cpp: Copied from kjs/RegExpObject.cpp. - * runtime/RegExpObject.h: Copied from kjs/RegExpObject.h. - * runtime/RegExpPrototype.cpp: Copied from kjs/RegExpPrototype.cpp. - * runtime/RegExpPrototype.h: Copied from kjs/RegExpPrototype.h. - -2008-10-31 Mark Rowe - - Revert an incorrect portion of r38034. - - * profiler/ProfilerServer.mm: - -2008-10-31 Mark Rowe - - Fix the 64-bit build. - - Disable strict aliasing in ProfilerServer.mm as it leads to the compiler being unhappy - with the common Obj-C idiom self = [super init]; - - * JavaScriptCore.xcodeproj/project.pbxproj: - -2008-10-31 Cameron Zwarich - - Reviewed by Alexey Proskuryakov. - - Change a header guard to match our coding style. - - * kjs/InitializeThreading.h: - -2008-10-30 Geoffrey Garen - - Reviewed by Oliver Hunt. - - Fixed a small bit of https://bugs.webkit.org/show_bug.cgi?id=21962 - AST uses way too much memory - - Removed a word from StatementNode by nixing LabelStack and turning it - into a compile-time data structure managed by CodeGenerator. - - v8 tests and SunSpider, run by Gavin, report no change. - - * GNUmakefile.am: - * JavaScriptCore.order: - * JavaScriptCore.pri: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * kjs/AllInOneFile.cpp: - * JavaScriptCoreSources.bkl: I sure hope this builds! - - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::CodeGenerator): - (JSC::CodeGenerator::newLabelScope): - (JSC::CodeGenerator::breakTarget): - (JSC::CodeGenerator::continueTarget): - * VM/CodeGenerator.h: Nixed the JumpContext system because it depended - on a LabelStack in the AST, and it was a little cumbersome on the client - side. Replaced with LabelScope, which tracks all break / continue - information in the CodeGenerator, just like we track LabelIDs and other - stacks of compile-time data. - - * kjs/LabelScope.h: Added. - (JSC::LabelScope::): - (JSC::LabelScope::LabelScope): - (JSC::LabelScope::ref): - (JSC::LabelScope::deref): - (JSC::LabelScope::refCount): - (JSC::LabelScope::breakTarget): - (JSC::LabelScope::continueTarget): - (JSC::LabelScope::type): - (JSC::LabelScope::name): - (JSC::LabelScope::scopeDepth): Simple abstraction for holding everything - you might want to know about a break-able / continue-able scope. - - * kjs/LabelStack.cpp: Removed. - * kjs/LabelStack.h: Removed. - - * kjs/grammar.y: No need to push labels at parse time -- we don't store - LabelStacks in the AST anymore. - - * kjs/nodes.cpp: - (JSC::DoWhileNode::emitCode): - (JSC::WhileNode::emitCode): - (JSC::ForNode::emitCode): - (JSC::ForInNode::emitCode): - (JSC::ContinueNode::emitCode): - (JSC::BreakNode::emitCode): - (JSC::SwitchNode::emitCode): - (JSC::LabelNode::emitCode): - * kjs/nodes.h: - (JSC::StatementNode::): - (JSC::LabelNode::): Use LabelScope where we used to use JumpContext. - Simplified a bunch of code. Touched up label-related error messages a - bit. - - * kjs/nodes2string.cpp: - (JSC::LabelNode::streamTo): Updated for rename. - -2008-10-31 Cameron Zwarich - - Reviewed by Darin Adler. - - Bug 22005: Move StructureIDChain into its own file - - - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - * runtime/StructureID.cpp: - * runtime/StructureID.h: - * runtime/StructureIDChain.cpp: Copied from runtime/StructureID.cpp. - * runtime/StructureIDChain.h: Copied from runtime/StructureID.h. - -2008-10-31 Steve Falkenburg - - Build fix. - - * JavaScriptCore.vcproj/jsc/jsc.vcproj: - -2008-10-31 Steve Falkenburg - - Build fix. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - -2008-10-31 Darin Adler - - Reviewed by Dan Bernstein. - - - fix storage leak seen on buildbot - - Some other cleanup too. The storage leak was caused by the fact - that HashTraits::needsDestruction was false, so - the call identifier objects didn't get deleted. - - * profiler/CallIdentifier.h: - - Added a default constructor to create empty call identifiers. - - Changed the normal constructor to use const UString& - to avoid extra copying and reference count thrash. - - Removed the explicit copy constructor definition, since it's what - the compiler will automatically generate. (Rule of thumb: Either - you need both a custom copy constructor and a custom assignment - operator, or neither.) - - Moved the CallIdentifier hash function out of the WTF namespace; - there's no reason to put it there. - - Changed the CallIdentifier hash function to be a struct rather than - a specialization of the IntHash struct template. Having it be - a specialization made no sense, since CallIdentifier is not an integer, - and did no good. - - Removed explicit definition of emptyValueIsZero in the hash traits, - since inheriting from GenericHashTraits already makes that false. - - Removed explicit definition of emptyValue, instead relying on the - default constructor and GenericHashTraits. - - Removed explicit definition of needsDestruction, because we want it - to have its default value: true, not false. This fixes the leak! - - Changed constructDeletedValue and isDeletedValue to use a line number - of numeric_limits::max() to indicate a value is deleted. - Previously this used empty strings for the empty value and null strings - for the deleted value, but it's more efficient to use null for both. - -2008-10-31 Timothy Hatcher - - Emit the WillExecuteStatement debugger hook before the for loop body - when the statement node for the body isn't a block. This allows - breakpoints on those statements in the Web Inspector. - - https://bugs.webkit.org/show_bug.cgi?id=22004 - - Reviewed by Darin Adler. - - * kjs/nodes.cpp: - (JSC::ForNode::emitCode): Emit the WillExecuteStatement - debugger hook before the statement node if isn't a block. - Also emit the WillExecuteStatement debugger hook for the - loop as the first op-code. - (JSC::ForInNode::emitCode): Ditto. - -2008-10-31 Timothy Hatcher - - Fixes console warnings about not having an autorelease pool. - Also fixes the build for Snow Leopard, by including individual - Foundation headers instead of Foundation.h. - - https://bugs.webkit.org/show_bug.cgi?id=21995 - - Reviewed by Oliver Hunt. - - * profiler/ProfilerServer.mm: - (-[ProfilerServer init]): Create a NSAutoreleasePool and drain it. - -2008-10-31 Cameron Zwarich - - Not reviewed. - - Speculative wxWindows build fix. - - * JavaScriptCoreSources.bkl: - * jscore.bkl: - -2008-10-31 Cameron Zwarich - - Rubber-stamped by Maciej Stachowiak. - - Move VM/JSPropertyNameIterator.cpp and VM/JSPropertyNameIterator.h to - the runtime directory. - - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - * VM/JSPropertyNameIterator.cpp: Removed. - * VM/JSPropertyNameIterator.h: Removed. - * runtime/JSPropertyNameIterator.cpp: Copied from VM/JSPropertyNameIterator.cpp. - * runtime/JSPropertyNameIterator.h: Copied from VM/JSPropertyNameIterator.h. - -2008-10-31 Cameron Zwarich - - Not reviewed. - - Speculative wxWindows build fix. - - * jscore.bkl: - -2008-10-30 Mark Rowe - - Reviewed by Jon Homeycutt. - - Explicitly default to building for only the native architecture in debug and release builds. - - * Configurations/DebugRelease.xcconfig: - -2008-10-30 Cameron Zwarich - - Rubber-stamped by Sam Weinig. - - Create a debugger directory in JavaScriptCore and move the relevant - files to it. - - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * VM/CodeBlock.cpp: - * VM/CodeGenerator.h: - * VM/Machine.cpp: - * debugger: Added. - * debugger/Debugger.cpp: Copied from kjs/debugger.cpp. - * debugger/Debugger.h: Copied from kjs/debugger.h. - * debugger/DebuggerCallFrame.cpp: Copied from kjs/DebuggerCallFrame.cpp. - * debugger/DebuggerCallFrame.h: Copied from kjs/DebuggerCallFrame.h. - * kjs/AllInOneFile.cpp: - * kjs/DebuggerCallFrame.cpp: Removed. - * kjs/DebuggerCallFrame.h: Removed. - * kjs/Parser.cpp: - * kjs/Parser.h: - * kjs/debugger.cpp: Removed. - * kjs/debugger.h: Removed. - * kjs/interpreter.cpp: - * kjs/nodes.cpp: - * runtime/FunctionConstructor.cpp: - * runtime/JSGlobalObject.cpp: - -2008-10-30 Benjamin K. Stuhl - - gcc 4.3.3/linux-x86 generates "suggest parentheses around && within ||" - warnings; add some parentheses to disambiguate things. No functional - changes, so no tests. - - https://bugs.webkit.org/show_bug.cgi?id=21973 - Add parentheses to clean up some gcc warnings - - Reviewed by Dan Bernstein. - - * wtf/ASCIICType.h: - (WTF::isASCIIAlphanumeric): - (WTF::isASCIIHexDigit): - -2008-10-30 Kevin Lindeman - - Adds ProfilerServer, which is a distributed notification listener - that allows starting and stopping the profiler remotely for use - in conjunction with the profiler's DTace probes. - - https://bugs.webkit.org/show_bug.cgi?id=21719 - - Reviewed by Timothy Hatcher. - - * JavaScriptCore.xcodeproj/project.pbxproj: - * kjs/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): Calls startProfilerServerIfNeeded. - * profiler/ProfilerServer.h: Added. - * profiler/ProfilerServer.mm: Added. - (+[ProfilerServer sharedProfileServer]): - (-[ProfilerServer init]): - (-[ProfilerServer startProfiling]): - (-[ProfilerServer stopProfiling]): - (JSC::startProfilerServerIfNeeded): - -2008-10-30 Kevin Ollivier - - wx build fix after PropertyMap and StructureID merge. - - * JavaScriptCoreSources.bkl: - -2008-10-30 Cameron Zwarich - - Reviewed by Mark Rowe. - - Change the JavaScriptCore Xcode project to use relative paths for the - PCRE source files. - - * JavaScriptCore.xcodeproj/project.pbxproj: - -2008-10-30 Sam Weinig - - Reviewed by Cameron Zwarich and Geoffrey Garen. - - Fix for https://bugs.webkit.org/show_bug.cgi?id=21989 - Merge PropertyMap and StructureID - - - Move PropertyMap code into StructureID in preparation for lazily - creating the map on gets. - - Make remove with transition explicit by adding removePropertyTransition. - - Make the put/remove without transition explicit. - - Make cache invalidation part of put/remove without transition. - - 1% speedup on SunSpider; 0.5% speedup on v8 suite. - - * GNUmakefile.am: - * JavaScriptCore.exp: - * JavaScriptCore.pri: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - * kjs/AllInOneFile.cpp: - * kjs/identifier.h: - * runtime/JSObject.cpp: - (JSC::JSObject::removeDirect): - * runtime/JSObject.h: - (JSC::JSObject::putDirect): - * runtime/PropertyMap.cpp: Removed. - * runtime/PropertyMap.h: Removed. - * runtime/PropertyMapHashTable.h: Copied from runtime/PropertyMap.h. - * runtime/StructureID.cpp: - (JSC::StructureID::dumpStatistics): - (JSC::StructureID::StructureID): - (JSC::StructureID::~StructureID): - (JSC::StructureID::getEnumerablePropertyNames): - (JSC::StructureID::addPropertyTransition): - (JSC::StructureID::removePropertyTransition): - (JSC::StructureID::toDictionaryTransition): - (JSC::StructureID::changePrototypeTransition): - (JSC::StructureID::getterSetterTransition): - (JSC::StructureID::addPropertyWithoutTransition): - (JSC::StructureID::removePropertyWithoutTransition): - (JSC::PropertyMapStatisticsExitLogger::~PropertyMapStatisticsExitLogger): - (JSC::StructureID::checkConsistency): - (JSC::StructureID::copyPropertyTable): - (JSC::StructureID::get): - (JSC::StructureID::put): - (JSC::StructureID::remove): - (JSC::StructureID::insertIntoPropertyMapHashTable): - (JSC::StructureID::expandPropertyMapHashTable): - (JSC::StructureID::createPropertyMapHashTable): - (JSC::StructureID::rehashPropertyMapHashTable): - (JSC::comparePropertyMapEntryIndices): - (JSC::StructureID::getEnumerablePropertyNamesInternal): - * runtime/StructureID.h: - (JSC::StructureID::propertyStorageSize): - (JSC::StructureID::isEmpty): - (JSC::StructureID::get): - -2008-10-30 Cameron Zwarich - - Reviewed by Oliver Hunt. - - Bug 21987: CTI::putDoubleResultToJSNumberCellOrJSImmediate() hardcodes its result register - - - CTI::putDoubleResultToJSNumberCellOrJSImmediate() hardcodes its result - register as ecx, but it should be tempReg1, which is ecx at all of its - callsites. - - * VM/CTI.cpp: - (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): - -2008-10-30 Cameron Zwarich - - Reviewed by Sam Weinig. - - Bug 21985: Opcodes should use eax as their destination register whenever possible - - - Change more opcodes to use eax as the register for their final result, - and change calls to emitPutResult() that pass eax to rely on the default - value of eax. - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): - -2008-10-30 Alp Toker - - Build fix attempt for older gcc on the trunk-mac-intel build bot - (error: initializer for scalar variable requires one element). - - Modify the initializer syntax slightly with an additional comma. - - * VM/Machine.cpp: - (JSC::Machine::cti_op_call_JSFunction): - (JSC::Machine::cti_op_construct_JSConstruct): - (JSC::Machine::cti_op_resolve_func): - (JSC::Machine::cti_op_post_inc): - (JSC::Machine::cti_op_resolve_with_base): - (JSC::Machine::cti_op_post_dec): - -2008-10-30 Alp Toker - - Reviewed by Alexey Proskuryakov. - - https://bugs.webkit.org/show_bug.cgi?id=21571 - VoidPtrPair breaks CTI on Linux - - The VoidPtrPair return change made in r37457 does not work on Linux - since POD structs aren't passed in registers. - - This patch uses a union to vectorize VoidPtrPair to a uint64_t and - matches Darwin/MSVC fixing CTI/WREC on Linux. - - Alexey reports no measurable change in Mac performance with this fix. - - * VM/Machine.cpp: - (JSC::Machine::cti_op_call_JSFunction): - (JSC::Machine::cti_op_construct_JSConstruct): - (JSC::Machine::cti_op_resolve_func): - (JSC::Machine::cti_op_post_inc): - (JSC::Machine::cti_op_resolve_with_base): - (JSC::Machine::cti_op_post_dec): - * VM/Machine.h: - (JSC::): - -2008-10-29 Oliver Hunt - - Reviewed by Geoff Garen. - - Initial work to reduce cost of JSNumberCell allocation - - This does the initial work needed to bring more of number - allocation into CTI code directly, rather than just falling - back onto the slow paths if we can't guarantee that a number - cell can be reused. - - Initial implementation only used by op_negate to make sure - it all works. In a negate heavy (though not dominated) test - it results in a 10% win in the non-reusable cell case. - - * VM/CTI.cpp: - (JSC::): - (JSC::CTI::emitAllocateNumber): - (JSC::CTI::emitNakedFastCall): - (JSC::CTI::emitArithIntToImmWithJump): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - * VM/CTI.h: - * VM/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::emitUnaryOp): - * VM/CodeGenerator.h: - (JSC::CodeGenerator::emitToJSNumber): - (JSC::CodeGenerator::emitTypeOf): - (JSC::CodeGenerator::emitGetPropertyNames): - * VM/Machine.cpp: - (JSC::Machine::privateExecute): - * VM/Machine.h: - * kjs/ResultType.h: - (JSC::ResultType::isReusableNumber): - (JSC::ResultType::toInt): - * kjs/nodes.cpp: - (JSC::UnaryOpNode::emitCode): - (JSC::BinaryOpNode::emitCode): - (JSC::EqualNode::emitCode): - * masm/X86Assembler.h: - (JSC::X86Assembler::): - (JSC::X86Assembler::negl_r): - (JSC::X86Assembler::xorpd_mr): - * runtime/JSNumberCell.h: - (JSC::JSNumberCell::JSNumberCell): - -2008-10-29 Steve Falkenburg - - Crash on launch - - For Windows, export explicit functions rather than exporting data for atomicallyInitializedStaticMutex. - - Exporting data from a DLL on Windows requires specifying __declspec(dllimport) in the header used by - callers, but __declspec(dllexport) when defined in the DLL implementation. By instead exporting - the explicit lock/unlock functions, we can avoid this. - - Fixes a crash on launch, since we were previously erroneously exporting atomicallyInitializedStaticMutex as a function. - - Reviewed by Darin Adler. - - * wtf/Threading.h: - (WTF::lockAtomicallyInitializedStaticMutex): - (WTF::unlockAtomicallyInitializedStaticMutex): - * wtf/ThreadingWin.cpp: - (WTF::lockAtomicallyInitializedStaticMutex): - (WTF::unlockAtomicallyInitializedStaticMutex): - -2008-10-29 Sam Weinig - - Reviewed by Oliver Hunt. - - Remove direct use of PropertyMap. - - * JavaScriptCore.exp: - * runtime/JSObject.cpp: - (JSC::JSObject::mark): - (JSC::JSObject::put): - (JSC::JSObject::deleteProperty): - (JSC::JSObject::getPropertyAttributes): - (JSC::JSObject::removeDirect): - * runtime/JSObject.h: - (JSC::JSObject::getDirect): - (JSC::JSObject::getDirectLocation): - (JSC::JSObject::hasCustomProperties): - (JSC::JSObject::JSObject): - (JSC::JSObject::putDirect): - * runtime/PropertyMap.cpp: - (JSC::PropertyMap::get): - * runtime/PropertyMap.h: - (JSC::PropertyMap::isEmpty): - (JSC::PropertyMap::get): - * runtime/StructureID.cpp: - (JSC::StructureID::dumpStatistics): - * runtime/StructureID.h: - (JSC::StructureID::propertyStorageSize): - (JSC::StructureID::get): - (JSC::StructureID::put): - (JSC::StructureID::remove): - (JSC::StructureID::isEmpty): - -2008-10-29 Sam Weinig - - Reviewed by Geoffrey Garen. - - Rename and move the StructureID transition table to its own file. - - * GNUmakefile.am: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * runtime/StructureID.cpp: - (JSC::StructureID::addPropertyTransition): - * runtime/StructureID.h: - (JSC::StructureID::): - * runtime/StructureIDTransitionTable.h: Copied from runtime/StructureID.h. - (JSC::StructureIDTransitionTableHash::hash): - (JSC::StructureIDTransitionTableHash::equal): - -2008-10-29 Sam Weinig - - Reviewed by Cameron Zwarich. - - Fix for https://bugs.webkit.org/show_bug.cgi?id=21958 - Pack bits in StructureID to reduce the size of each StructureID by 2 words. - - * runtime/PropertyMap.h: - (JSC::PropertyMap::propertyMapSize): - * runtime/StructureID.cpp: - (JSC::StructureID::dumpStatistics): Add additional size statistics when dumping. - (JSC::StructureID::StructureID): - * runtime/StructureID.h: - -2008-10-29 Kevin Ollivier - - wx build fixes after addition of runtime and ImageBuffer changes. - - * JavaScriptCoreSources.bkl: - * jscore.bkl: - -2008-10-29 Timothy Hatcher - - Emit the WillExecuteStatement debugger hook before the "else" body - when there is no block for the "else" body. This allows breakpoints - on those statements in the Web Inspector. - - https://bugs.webkit.org/show_bug.cgi?id=21944 - - Reviewed by Maciej Stachowiak. - - * kjs/nodes.cpp: - (JSC::IfElseNode::emitCode): Emit the WillExecuteStatement - debugger hook before the else node if isn't a block. - -2008-10-29 Alexey Proskuryakov - - Build fix. - - * JavaScriptCore.exp: Export HashTable::deleteTable(). - -2008-10-28 Alp Toker - - Fix builddir != srcdir builds after kjs -> runtime breakage. Sources - may now be generated in both kjs/ and runtime/. - - Also sort the sources list for readability. - - * GNUmakefile.am: - -2008-10-28 Alp Toker - - Reviewed by Cameron Zwarich. - - Build fix attempt after kjs -> runtime rename. - - * GNUmakefile.am: - -2008-10-28 Cameron Zwarich - - Not reviewed. - - Remove a duplicate includes directory. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - -2008-10-28 Cameron Zwarich - - Not reviewed. - - Attempt to fix the Windows build. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.vcproj/jsc/jsc.vcproj: - -2008-10-28 Dan Bernstein - - Reviewed by Mark Rowe. - - - export WTF::atomicallyInitializedStaticMutex - - * JavaScriptCore.exp: - -2008-10-28 Geoffrey Garen - - Reviewed by Cameron Zwarich. - - Fixed CodeBlock dumping to accurately report constant register indices. - - * VM/CodeBlock.cpp: - (JSC::CodeBlock::dump): - -2008-10-28 Cameron Zwarich - - Not reviewed. - - More Qt build fixes. - - * JavaScriptCore.pri: - -2008-10-28 Cameron Zwarich - - Not reviewed. - - Fix the Qt build, hopefully for real this time. - - * JavaScriptCore.pri: - -2008-10-28 Cameron Zwarich - - Not reviewed. - - Fix the Qt build. - - * JavaScriptCore.pri: - -2008-10-28 Cameron Zwarich - - Not reviewed. - - Fix the Windows build. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - -2008-10-28 Cameron Zwarich - - Rubber-stamped by Sam Weinig. - - Create a runtime directory in JavaScriptCore and begin moving files to - it. This is the first step towards removing the kjs directory and - placing files in more meaningful subdirectories of JavaScriptCore. - - * API/JSBase.cpp: - * API/JSCallbackConstructor.cpp: - * API/JSCallbackConstructor.h: - * API/JSCallbackFunction.cpp: - * API/JSClassRef.cpp: - * API/JSClassRef.h: - * API/JSStringRefCF.cpp: - * API/JSValueRef.cpp: - * API/OpaqueJSString.cpp: - * DerivedSources.make: - * GNUmakefile.am: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * kjs/AllInOneFile.cpp: - * kjs/ArrayConstructor.cpp: Removed. - * kjs/ArrayConstructor.h: Removed. - * kjs/ArrayPrototype.cpp: Removed. - * kjs/ArrayPrototype.h: Removed. - * kjs/BooleanConstructor.cpp: Removed. - * kjs/BooleanConstructor.h: Removed. - * kjs/BooleanObject.cpp: Removed. - * kjs/BooleanObject.h: Removed. - * kjs/BooleanPrototype.cpp: Removed. - * kjs/BooleanPrototype.h: Removed. - * kjs/CallData.cpp: Removed. - * kjs/CallData.h: Removed. - * kjs/ClassInfo.h: Removed. - * kjs/ConstructData.cpp: Removed. - * kjs/ConstructData.h: Removed. - * kjs/DateConstructor.cpp: Removed. - * kjs/DateConstructor.h: Removed. - * kjs/DateInstance.cpp: Removed. - * kjs/DateInstance.h: Removed. - * kjs/DateMath.cpp: Removed. - * kjs/DateMath.h: Removed. - * kjs/DatePrototype.cpp: Removed. - * kjs/DatePrototype.h: Removed. - * kjs/Error.cpp: Removed. - * kjs/Error.h: Removed. - * kjs/ErrorConstructor.cpp: Removed. - * kjs/ErrorConstructor.h: Removed. - * kjs/ErrorInstance.cpp: Removed. - * kjs/ErrorInstance.h: Removed. - * kjs/ErrorPrototype.cpp: Removed. - * kjs/ErrorPrototype.h: Removed. - * kjs/FunctionConstructor.cpp: Removed. - * kjs/FunctionConstructor.h: Removed. - * kjs/FunctionPrototype.cpp: Removed. - * kjs/FunctionPrototype.h: Removed. - * kjs/GlobalEvalFunction.cpp: Removed. - * kjs/GlobalEvalFunction.h: Removed. - * kjs/InternalFunction.cpp: Removed. - * kjs/InternalFunction.h: Removed. - * kjs/JSArray.cpp: Removed. - * kjs/JSArray.h: Removed. - * kjs/JSCell.cpp: Removed. - * kjs/JSCell.h: Removed. - * kjs/JSFunction.cpp: Removed. - * kjs/JSFunction.h: Removed. - * kjs/JSGlobalObject.cpp: Removed. - * kjs/JSGlobalObject.h: Removed. - * kjs/JSGlobalObjectFunctions.cpp: Removed. - * kjs/JSGlobalObjectFunctions.h: Removed. - * kjs/JSImmediate.cpp: Removed. - * kjs/JSImmediate.h: Removed. - * kjs/JSNotAnObject.cpp: Removed. - * kjs/JSNotAnObject.h: Removed. - * kjs/JSNumberCell.cpp: Removed. - * kjs/JSNumberCell.h: Removed. - * kjs/JSObject.cpp: Removed. - * kjs/JSObject.h: Removed. - * kjs/JSString.cpp: Removed. - * kjs/JSString.h: Removed. - * kjs/JSValue.cpp: Removed. - * kjs/JSValue.h: Removed. - * kjs/JSVariableObject.cpp: Removed. - * kjs/JSVariableObject.h: Removed. - * kjs/JSWrapperObject.cpp: Removed. - * kjs/JSWrapperObject.h: Removed. - * kjs/MathObject.cpp: Removed. - * kjs/MathObject.h: Removed. - * kjs/NativeErrorConstructor.cpp: Removed. - * kjs/NativeErrorConstructor.h: Removed. - * kjs/NativeErrorPrototype.cpp: Removed. - * kjs/NativeErrorPrototype.h: Removed. - * kjs/NumberConstructor.cpp: Removed. - * kjs/NumberConstructor.h: Removed. - * kjs/NumberObject.cpp: Removed. - * kjs/NumberObject.h: Removed. - * kjs/NumberPrototype.cpp: Removed. - * kjs/NumberPrototype.h: Removed. - * kjs/ObjectConstructor.cpp: Removed. - * kjs/ObjectConstructor.h: Removed. - * kjs/ObjectPrototype.cpp: Removed. - * kjs/ObjectPrototype.h: Removed. - * kjs/PropertyMap.cpp: Removed. - * kjs/PropertyMap.h: Removed. - * kjs/PropertySlot.cpp: Removed. - * kjs/PropertySlot.h: Removed. - * kjs/PrototypeFunction.cpp: Removed. - * kjs/PrototypeFunction.h: Removed. - * kjs/PutPropertySlot.h: Removed. - * kjs/SmallStrings.cpp: Removed. - * kjs/SmallStrings.h: Removed. - * kjs/StringConstructor.cpp: Removed. - * kjs/StringConstructor.h: Removed. - * kjs/StringObject.cpp: Removed. - * kjs/StringObject.h: Removed. - * kjs/StringObjectThatMasqueradesAsUndefined.h: Removed. - * kjs/StringPrototype.cpp: Removed. - * kjs/StringPrototype.h: Removed. - * kjs/StructureID.cpp: Removed. - * kjs/StructureID.h: Removed. - * kjs/completion.h: - * kjs/interpreter.h: - * runtime: Added. - * runtime/ArrayConstructor.cpp: Copied from kjs/ArrayConstructor.cpp. - * runtime/ArrayConstructor.h: Copied from kjs/ArrayConstructor.h. - * runtime/ArrayPrototype.cpp: Copied from kjs/ArrayPrototype.cpp. - * runtime/ArrayPrototype.h: Copied from kjs/ArrayPrototype.h. - * runtime/BooleanConstructor.cpp: Copied from kjs/BooleanConstructor.cpp. - * runtime/BooleanConstructor.h: Copied from kjs/BooleanConstructor.h. - * runtime/BooleanObject.cpp: Copied from kjs/BooleanObject.cpp. - * runtime/BooleanObject.h: Copied from kjs/BooleanObject.h. - * runtime/BooleanPrototype.cpp: Copied from kjs/BooleanPrototype.cpp. - * runtime/BooleanPrototype.h: Copied from kjs/BooleanPrototype.h. - * runtime/CallData.cpp: Copied from kjs/CallData.cpp. - * runtime/CallData.h: Copied from kjs/CallData.h. - * runtime/ClassInfo.h: Copied from kjs/ClassInfo.h. - * runtime/ConstructData.cpp: Copied from kjs/ConstructData.cpp. - * runtime/ConstructData.h: Copied from kjs/ConstructData.h. - * runtime/DateConstructor.cpp: Copied from kjs/DateConstructor.cpp. - * runtime/DateConstructor.h: Copied from kjs/DateConstructor.h. - * runtime/DateInstance.cpp: Copied from kjs/DateInstance.cpp. - * runtime/DateInstance.h: Copied from kjs/DateInstance.h. - * runtime/DateMath.cpp: Copied from kjs/DateMath.cpp. - * runtime/DateMath.h: Copied from kjs/DateMath.h. - * runtime/DatePrototype.cpp: Copied from kjs/DatePrototype.cpp. - * runtime/DatePrototype.h: Copied from kjs/DatePrototype.h. - * runtime/Error.cpp: Copied from kjs/Error.cpp. - * runtime/Error.h: Copied from kjs/Error.h. - * runtime/ErrorConstructor.cpp: Copied from kjs/ErrorConstructor.cpp. - * runtime/ErrorConstructor.h: Copied from kjs/ErrorConstructor.h. - * runtime/ErrorInstance.cpp: Copied from kjs/ErrorInstance.cpp. - * runtime/ErrorInstance.h: Copied from kjs/ErrorInstance.h. - * runtime/ErrorPrototype.cpp: Copied from kjs/ErrorPrototype.cpp. - * runtime/ErrorPrototype.h: Copied from kjs/ErrorPrototype.h. - * runtime/FunctionConstructor.cpp: Copied from kjs/FunctionConstructor.cpp. - * runtime/FunctionConstructor.h: Copied from kjs/FunctionConstructor.h. - * runtime/FunctionPrototype.cpp: Copied from kjs/FunctionPrototype.cpp. - * runtime/FunctionPrototype.h: Copied from kjs/FunctionPrototype.h. - * runtime/GlobalEvalFunction.cpp: Copied from kjs/GlobalEvalFunction.cpp. - * runtime/GlobalEvalFunction.h: Copied from kjs/GlobalEvalFunction.h. - * runtime/InternalFunction.cpp: Copied from kjs/InternalFunction.cpp. - * runtime/InternalFunction.h: Copied from kjs/InternalFunction.h. - * runtime/JSArray.cpp: Copied from kjs/JSArray.cpp. - * runtime/JSArray.h: Copied from kjs/JSArray.h. - * runtime/JSCell.cpp: Copied from kjs/JSCell.cpp. - * runtime/JSCell.h: Copied from kjs/JSCell.h. - * runtime/JSFunction.cpp: Copied from kjs/JSFunction.cpp. - * runtime/JSFunction.h: Copied from kjs/JSFunction.h. - * runtime/JSGlobalObject.cpp: Copied from kjs/JSGlobalObject.cpp. - * runtime/JSGlobalObject.h: Copied from kjs/JSGlobalObject.h. - * runtime/JSGlobalObjectFunctions.cpp: Copied from kjs/JSGlobalObjectFunctions.cpp. - * runtime/JSGlobalObjectFunctions.h: Copied from kjs/JSGlobalObjectFunctions.h. - * runtime/JSImmediate.cpp: Copied from kjs/JSImmediate.cpp. - * runtime/JSImmediate.h: Copied from kjs/JSImmediate.h. - * runtime/JSNotAnObject.cpp: Copied from kjs/JSNotAnObject.cpp. - * runtime/JSNotAnObject.h: Copied from kjs/JSNotAnObject.h. - * runtime/JSNumberCell.cpp: Copied from kjs/JSNumberCell.cpp. - * runtime/JSNumberCell.h: Copied from kjs/JSNumberCell.h. - * runtime/JSObject.cpp: Copied from kjs/JSObject.cpp. - * runtime/JSObject.h: Copied from kjs/JSObject.h. - * runtime/JSString.cpp: Copied from kjs/JSString.cpp. - * runtime/JSString.h: Copied from kjs/JSString.h. - * runtime/JSValue.cpp: Copied from kjs/JSValue.cpp. - * runtime/JSValue.h: Copied from kjs/JSValue.h. - * runtime/JSVariableObject.cpp: Copied from kjs/JSVariableObject.cpp. - * runtime/JSVariableObject.h: Copied from kjs/JSVariableObject.h. - * runtime/JSWrapperObject.cpp: Copied from kjs/JSWrapperObject.cpp. - * runtime/JSWrapperObject.h: Copied from kjs/JSWrapperObject.h. - * runtime/MathObject.cpp: Copied from kjs/MathObject.cpp. - * runtime/MathObject.h: Copied from kjs/MathObject.h. - * runtime/NativeErrorConstructor.cpp: Copied from kjs/NativeErrorConstructor.cpp. - * runtime/NativeErrorConstructor.h: Copied from kjs/NativeErrorConstructor.h. - * runtime/NativeErrorPrototype.cpp: Copied from kjs/NativeErrorPrototype.cpp. - * runtime/NativeErrorPrototype.h: Copied from kjs/NativeErrorPrototype.h. - * runtime/NumberConstructor.cpp: Copied from kjs/NumberConstructor.cpp. - * runtime/NumberConstructor.h: Copied from kjs/NumberConstructor.h. - * runtime/NumberObject.cpp: Copied from kjs/NumberObject.cpp. - * runtime/NumberObject.h: Copied from kjs/NumberObject.h. - * runtime/NumberPrototype.cpp: Copied from kjs/NumberPrototype.cpp. - * runtime/NumberPrototype.h: Copied from kjs/NumberPrototype.h. - * runtime/ObjectConstructor.cpp: Copied from kjs/ObjectConstructor.cpp. - * runtime/ObjectConstructor.h: Copied from kjs/ObjectConstructor.h. - * runtime/ObjectPrototype.cpp: Copied from kjs/ObjectPrototype.cpp. - * runtime/ObjectPrototype.h: Copied from kjs/ObjectPrototype.h. - * runtime/PropertyMap.cpp: Copied from kjs/PropertyMap.cpp. - * runtime/PropertyMap.h: Copied from kjs/PropertyMap.h. - * runtime/PropertySlot.cpp: Copied from kjs/PropertySlot.cpp. - * runtime/PropertySlot.h: Copied from kjs/PropertySlot.h. - * runtime/PrototypeFunction.cpp: Copied from kjs/PrototypeFunction.cpp. - * runtime/PrototypeFunction.h: Copied from kjs/PrototypeFunction.h. - * runtime/PutPropertySlot.h: Copied from kjs/PutPropertySlot.h. - * runtime/SmallStrings.cpp: Copied from kjs/SmallStrings.cpp. - * runtime/SmallStrings.h: Copied from kjs/SmallStrings.h. - * runtime/StringConstructor.cpp: Copied from kjs/StringConstructor.cpp. - * runtime/StringConstructor.h: Copied from kjs/StringConstructor.h. - * runtime/StringObject.cpp: Copied from kjs/StringObject.cpp. - * runtime/StringObject.h: Copied from kjs/StringObject.h. - * runtime/StringObjectThatMasqueradesAsUndefined.h: Copied from kjs/StringObjectThatMasqueradesAsUndefined.h. - * runtime/StringPrototype.cpp: Copied from kjs/StringPrototype.cpp. - * runtime/StringPrototype.h: Copied from kjs/StringPrototype.h. - * runtime/StructureID.cpp: Copied from kjs/StructureID.cpp. - * runtime/StructureID.h: Copied from kjs/StructureID.h. - -2008-10-28 Geoffrey Garen - - Reviewed by Sam Weinig. - - Fixed https://bugs.webkit.org/show_bug.cgi?id=21919 - Sampler reports bogus time in op_enter during 3d-raytrace.js - - Fixed a bug where we would pass the incorrect Instruction* during some - parts of CTI codegen. - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - * VM/SamplingTool.cpp: - (JSC::SamplingTool::run): - * wtf/Platform.h: - -2008-10-28 Kevin McCullough - - Reviewed by Dan Bernstein. - - -Removed unused includes. - Apparent .4% speedup in Sunspider - - * kjs/JSObject.cpp: - * kjs/interpreter.cpp: - -2008-10-28 Alp Toker - - Include copyright license files in the autotools dist target. - - Change suggested by Mike Hommey. - - * GNUmakefile.am: - -2008-10-27 Geoffrey Garen - - Reviewed by Maciej Stachowiak. - - Stop discarding CodeBlock samples that can't be charged to a specific - opcode. Instead, charge the relevant CodeBlock, and provide a footnote - explaining the situation. - - This will help us tell which CodeBlocks are hot, even if we can't - identify specific lines of code within the CodeBlocks. - - * VM/SamplingTool.cpp: - (JSC::ScopeSampleRecord::sample): - (JSC::compareScopeSampleRecords): - (JSC::SamplingTool::dump): - - * VM/SamplingTool.h: - (JSC::ScopeSampleRecord::ScopeSampleRecord): - (JSC::ScopeSampleRecord::~ScopeSampleRecord): - -2008-10-27 Geoffrey Garen - - Reviewed by Sam Weinig. - - Added a mutex around the SamplingTool's ScopeNode* map, to solve a crash - when sampling the v8 tests. - - * VM/SamplingTool.cpp: - (JSC::SamplingTool::run): - (JSC::SamplingTool::notifyOfScope): - * VM/SamplingTool.h: Since new ScopeNodes can be created after - the SamplingTools has begun sampling, reads and writes to / from the - map need to be synchronized. Shark says this doesn't measurably increase - sampling overhead. - -2008-10-25 Geoffrey Garen - - Not reviewed. - - Try to fix Windows build. - - * VM/Machine.cpp: - (JSC::Machine::privateExecute): Provide a dummy value to the - HostCallRecord in CTI non-sampling builds, to silence compiler warning. - -2008-10-25 Geoffrey Garen - - Not reviewed. - - Try to fix Windows build. - - * VM/SamplingTool.h: - (JSC::SamplingTool::encodeSample): Explicitly cast bool to int, to - silence compiler warning. - -2008-10-25 Geoffrey Garen - - Reviewed by Sam Weinig, with Gavin Barraclough's help. - - Fixed Sampling Tool: - - Made CodeBlock sampling work with CTI - - Improved accuracy by unifying most sampling data into a single - 32bit word, which can be written / read atomically. - - Split out three different #ifdefs for modularity: OPCODE_SAMPLING; - CODEBLOCK_SAMPLING; OPCODE_STATS. - - Improved reporting clarity - - Refactored for code clarity - - * JavaScriptCore.exp: Exported another symbol. - - * VM/CTI.cpp: - (JSC::CTI::emitCTICall): - (JSC::CTI::compileOpCall): - (JSC::CTI::emitSlowScriptCheck): - (JSC::CTI::compileBinaryArithOpSlowCase): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - (JSC::CTI::privateCompile): - * VM/CTI.h: Updated CTI codegen to use the unified SamplingTool interface - for encoding samples. (This required passing the current vPC to a lot - more functions, since the unified interface samples the current vPC.) - Added hooks for writing the current CodeBlock* on function entry and - after a function call, for the sake of the CodeBlock sampler. Removed - obsolete hook for clearing the current sample inside op_end. Also removed - the custom enum used to differentiate flavors of op_call, since the - OpcodeID enum works just as well. (This was important in an earlier - version of the patch, but now it's just cleanup.) - - * VM/CodeBlock.cpp: - (JSC::CodeBlock::lineNumberForVPC): - * VM/CodeBlock.h: Upated for refactored #ifdefs. Changed lineNumberForVPC - to be robust against vPCs not recorded for exception handling, since - the Sampler may ask for an arbitrary vPC. - - * VM/Machine.cpp: - (JSC::Machine::execute): - (JSC::Machine::privateExecute): - (JSC::Machine::cti_op_call_NotJSFunction): - (JSC::Machine::cti_op_construct_NotJSConstruct): - * VM/Machine.h: - (JSC::Machine::setSampler): - (JSC::Machine::sampler): - (JSC::Machine::jitCodeBuffer): Upated for refactored #ifdefs. Changed - Machine to use SamplingTool helper objects to record movement in and - out of host code. This makes samples a bit more precise. - - * VM/Opcode.cpp: - (JSC::OpcodeStats::~OpcodeStats): - * VM/Opcode.h: Upated for refactored #ifdefs. Added a little more padding, - to accomodate our more verbose opcode names. - - * VM/SamplingTool.cpp: - (JSC::ScopeSampleRecord::sample): Only count a sample toward our total - if we actually record it. This solves cases where a CodeBlock will - claim to have been sampled many times, with reported samples that don't - match. - - (JSC::SamplingTool::run): Read the current sample into a Sample helper - object, to ensure that the data doesn't change while we're analyzing it, - and to help decode the data. Only access the CodeBlock sampling hash - table if CodeBlock sampling has been enabled, so non-CodeBlock sampling - runs can operate with even less overhead. - - (JSC::SamplingTool::dump): I reorganized this code a lot to print the - most important info at the top, print as a table, annotate and document - the stuff I didn't understand when I started, etc. - - * VM/SamplingTool.h: New helper classes, described above. - - * kjs/Parser.h: - * kjs/Shell.cpp: - (runWithScripts): - * kjs/nodes.cpp: - (JSC::ScopeNode::ScopeNode): Updated for new sampling APIs. - - * wtf/Platform.h: Moved sampling #defines here, since our custom is to - put ENABLE #defines into Platform.h. Made explicit the fact that - CODEBLOCK_SAMPLING depends on OPCODE_SAMPLING. - -2008-10-25 Jan Michael Alonzo - - JSC Build fix, not reviewed. - - * VM/CTI.cpp: add missing include stdio.h for debug builds - -2008-10-24 Eric Seidel - - Reviewed by Darin Adler. - - Get rid of a bonus ASSERT when using a null string as a regexp. - Specifically calling: RegularExpression::match() with String::empty() - will hit this ASSERT. - Chromium hits this, but I don't know of any way to make a layout test. - - * pcre/pcre_exec.cpp: - (jsRegExpExecute): - -2008-10-24 Alexey Proskuryakov - - Suggested and rubber-stamped by Geoff Garen. - - Fix a crash when opening Font Picker. - - The change also hopefully fixes this bug, which I could never reproduce: - https://bugs.webkit.org/show_bug.cgi?id=20241 - Safari crashes at JSValueUnprotect() when fontpicker view close - - * API/JSContextRef.cpp: (JSContextGetGlobalObject): Use lexical global object instead of - dynamic one. - -2008-10-24 Cameron Zwarich - - Reviewed by Geoff Garen. - - Remove ScopeChainNode::bottom() and inline it into its only caller, - ScopeChainnode::globalObject(). - - * kjs/JSGlobalObject.h: - (JSC::ScopeChainNode::globalObject): - * kjs/ScopeChain.h: - (JSC::ScopeChain::bottom): - -2008-10-24 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Bug 21862: Create JSFunction prototype property lazily - - - This is a 1.5% speedup on SunSpider and a 1.4% speedup on the V8 - benchmark suite, including a 3.8% speedup on Earley-Boyer. - - * kjs/JSFunction.cpp: - (JSC::JSFunction::getOwnPropertySlot): - * kjs/nodes.cpp: - (JSC::FuncDeclNode::makeFunction): - (JSC::FuncExprNode::makeFunction): - -2008-10-24 Greg Bolsinga - - Reviewed by Sam Weinig. - - https://bugs.webkit.org/show_bug.cgi?id=21475 - - Provide support for the Geolocation API - - http://dev.w3.org/geo/api/spec-source.html - - * wtf/Platform.h: ENABLE_GEOLOCATION defaults to 0 - -2008-10-24 Darin Adler - - - finish rolling out https://bugs.webkit.org/show_bug.cgi?id=21732 - - * API/APICast.h: - * API/JSCallbackConstructor.h: - * API/JSCallbackFunction.cpp: - * API/JSCallbackFunction.h: - * API/JSCallbackObject.h: - * API/JSCallbackObjectFunctions.h: - * API/JSContextRef.cpp: - * API/JSObjectRef.cpp: - * API/JSValueRef.cpp: - * VM/CTI.cpp: - * VM/CTI.h: - * VM/CodeBlock.cpp: - * VM/CodeBlock.h: - * VM/CodeGenerator.cpp: - * VM/CodeGenerator.h: - * VM/ExceptionHelpers.cpp: - * VM/ExceptionHelpers.h: - * VM/JSPropertyNameIterator.cpp: - * VM/JSPropertyNameIterator.h: - * VM/Machine.cpp: - * VM/Machine.h: - * VM/Register.h: - * kjs/ArgList.cpp: - * kjs/ArgList.h: - * kjs/Arguments.cpp: - * kjs/Arguments.h: - * kjs/ArrayConstructor.cpp: - * kjs/ArrayPrototype.cpp: - * kjs/BooleanConstructor.cpp: - * kjs/BooleanConstructor.h: - * kjs/BooleanObject.h: - * kjs/BooleanPrototype.cpp: - * kjs/CallData.cpp: - * kjs/CallData.h: - * kjs/ConstructData.cpp: - * kjs/ConstructData.h: - * kjs/DateConstructor.cpp: - * kjs/DateInstance.h: - * kjs/DatePrototype.cpp: - * kjs/DatePrototype.h: - * kjs/DebuggerCallFrame.cpp: - * kjs/DebuggerCallFrame.h: - * kjs/ErrorConstructor.cpp: - * kjs/ErrorPrototype.cpp: - * kjs/ExecState.cpp: - * kjs/ExecState.h: - * kjs/FunctionConstructor.cpp: - * kjs/FunctionPrototype.cpp: - * kjs/FunctionPrototype.h: - * kjs/GetterSetter.cpp: - * kjs/GetterSetter.h: - * kjs/InternalFunction.h: - * kjs/JSActivation.cpp: - * kjs/JSActivation.h: - * kjs/JSArray.cpp: - * kjs/JSArray.h: - * kjs/JSCell.cpp: - * kjs/JSCell.h: - * kjs/JSFunction.cpp: - * kjs/JSFunction.h: - * kjs/JSGlobalData.h: - * kjs/JSGlobalObject.cpp: - * kjs/JSGlobalObject.h: - * kjs/JSGlobalObjectFunctions.cpp: - * kjs/JSGlobalObjectFunctions.h: - * kjs/JSImmediate.cpp: - * kjs/JSImmediate.h: - * kjs/JSNotAnObject.cpp: - * kjs/JSNotAnObject.h: - * kjs/JSNumberCell.cpp: - * kjs/JSNumberCell.h: - * kjs/JSObject.cpp: - * kjs/JSObject.h: - * kjs/JSStaticScopeObject.cpp: - * kjs/JSStaticScopeObject.h: - * kjs/JSString.cpp: - * kjs/JSString.h: - * kjs/JSValue.h: - * kjs/JSVariableObject.h: - * kjs/JSWrapperObject.h: - * kjs/MathObject.cpp: - * kjs/MathObject.h: - * kjs/NativeErrorConstructor.cpp: - * kjs/NumberConstructor.cpp: - * kjs/NumberConstructor.h: - * kjs/NumberObject.cpp: - * kjs/NumberObject.h: - * kjs/NumberPrototype.cpp: - * kjs/ObjectConstructor.cpp: - * kjs/ObjectPrototype.cpp: - * kjs/ObjectPrototype.h: - * kjs/PropertyMap.h: - * kjs/PropertySlot.cpp: - * kjs/PropertySlot.h: - * kjs/RegExpConstructor.cpp: - * kjs/RegExpConstructor.h: - * kjs/RegExpMatchesArray.h: - * kjs/RegExpObject.cpp: - * kjs/RegExpObject.h: - * kjs/RegExpPrototype.cpp: - * kjs/Shell.cpp: - * kjs/StringConstructor.cpp: - * kjs/StringObject.cpp: - * kjs/StringObject.h: - * kjs/StringObjectThatMasqueradesAsUndefined.h: - * kjs/StringPrototype.cpp: - * kjs/StructureID.cpp: - * kjs/StructureID.h: - * kjs/collector.cpp: - * kjs/collector.h: - * kjs/completion.h: - * kjs/grammar.y: - * kjs/interpreter.cpp: - * kjs/interpreter.h: - * kjs/lookup.cpp: - * kjs/lookup.h: - * kjs/nodes.h: - * kjs/operations.cpp: - * kjs/operations.h: - * kjs/protect.h: - * profiler/ProfileGenerator.cpp: - * profiler/Profiler.cpp: - * profiler/Profiler.h: - Use JSValue* instead of JSValuePtr. - -2008-10-24 David Kilzer - - Rolled out r37840. - - * wtf/Platform.h: - -2008-10-23 Greg Bolsinga - - Reviewed by Sam Weinig. - - https://bugs.webkit.org/show_bug.cgi?id=21475 - - Provide support for the Geolocation API - - http://dev.w3.org/geo/api/spec-source.html - - * wtf/Platform.h: ENABLE_GEOLOCATION defaults to 0 - -2008-10-23 David Kilzer - - Bug 21832: Fix scripts using 'new File::Temp' for Perl 5.10 - - - - Reviewed by Sam Weinig. - - * pcre/dftables: Use imported tempfile() from File::Temp instead of - 'new File::Temp' to make the script work with Perl 5.10. - -2008-10-23 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Fix hideous pathological case performance when looking up repatch info, bug #21727. - - When repatching JIT code to optimize we look up records providing information about - the generated code (also used to track recsources used in linking to be later released). - The lookup was being performed using a linear scan of all such records. - - (1) Split up the different types of reptach information. This means we can search them - separately, and in some cases should reduce their size. - (2) In the case of property accesses, search with a binary chop over the data. - (3) In the case of calls, pass a pointer to the repatch info into the relink function. - - * VM/CTI.cpp: - (JSC::CTI::CTI): - (JSC::CTI::compileOpCall): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - (JSC::CTI::privateCompile): - (JSC::CTI::unlinkCall): - (JSC::CTI::linkCall): - * VM/CTI.h: - * VM/CodeBlock.cpp: - (JSC::CodeBlock::dump): - (JSC::CodeBlock::~CodeBlock): - (JSC::CodeBlock::unlinkCallers): - (JSC::CodeBlock::derefStructureIDs): - * VM/CodeBlock.h: - (JSC::StructureStubInfo::StructureStubInfo): - (JSC::CallLinkInfo::CallLinkInfo): - (JSC::CallLinkInfo::setUnlinked): - (JSC::CallLinkInfo::isLinked): - (JSC::getStructureStubInfoReturnLocation): - (JSC::binaryChop): - (JSC::CodeBlock::addCaller): - (JSC::CodeBlock::getStubInfo): - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::emitResolve): - (JSC::CodeGenerator::emitGetById): - (JSC::CodeGenerator::emitPutById): - (JSC::CodeGenerator::emitCall): - (JSC::CodeGenerator::emitConstruct): - * VM/Machine.cpp: - (JSC::Machine::cti_vm_lazyLinkCall): - -2008-10-23 Peter Kasting - - Reviewed by Adam Roben. - - https://bugs.webkit.org/show_bug.cgi?id=21833 - Place JavaScript Debugger hooks under #if ENABLE(JAVASCRIPT_DEBUGGER). - - * wtf/Platform.h: - -2008-10-23 David Kilzer - - Bug 21831: Fix create_hash_table for Perl 5.10 - - - - Reviewed by Sam Weinig. - - * kjs/create_hash_table: Escaped square brackets so that Perl 5.10 - doesn't try to use @nameEntries. - -2008-10-23 Darin Adler - - - roll out https://bugs.webkit.org/show_bug.cgi?id=21732 - to remove the JSValuePtr class, to fix two problems - - 1) slowness under MSVC, since it doesn't handle a - class with a single pointer in it as efficiently - as a pointer - - 2) uninitialized pointers in Vector - - * JavaScriptCore.exp: Updated. - - * API/APICast.h: - (toRef): - * VM/CTI.cpp: - (JSC::CTI::asInteger): - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::addConstant): - * VM/CodeGenerator.h: - (JSC::CodeGenerator::JSValueHashTraits::constructDeletedValue): - (JSC::CodeGenerator::JSValueHashTraits::isDeletedValue): - * VM/Machine.cpp: - (JSC::Machine::cti_op_add): - (JSC::Machine::cti_op_pre_inc): - (JSC::Machine::cti_op_get_by_id): - (JSC::Machine::cti_op_get_by_id_second): - (JSC::Machine::cti_op_get_by_id_generic): - (JSC::Machine::cti_op_get_by_id_fail): - (JSC::Machine::cti_op_instanceof): - (JSC::Machine::cti_op_del_by_id): - (JSC::Machine::cti_op_mul): - (JSC::Machine::cti_op_call_NotJSFunction): - (JSC::Machine::cti_op_resolve): - (JSC::Machine::cti_op_construct_NotJSConstruct): - (JSC::Machine::cti_op_get_by_val): - (JSC::Machine::cti_op_sub): - (JSC::Machine::cti_op_lesseq): - (JSC::Machine::cti_op_negate): - (JSC::Machine::cti_op_resolve_base): - (JSC::Machine::cti_op_resolve_skip): - (JSC::Machine::cti_op_resolve_global): - (JSC::Machine::cti_op_div): - (JSC::Machine::cti_op_pre_dec): - (JSC::Machine::cti_op_not): - (JSC::Machine::cti_op_eq): - (JSC::Machine::cti_op_lshift): - (JSC::Machine::cti_op_bitand): - (JSC::Machine::cti_op_rshift): - (JSC::Machine::cti_op_bitnot): - (JSC::Machine::cti_op_mod): - (JSC::Machine::cti_op_less): - (JSC::Machine::cti_op_neq): - (JSC::Machine::cti_op_urshift): - (JSC::Machine::cti_op_bitxor): - (JSC::Machine::cti_op_bitor): - (JSC::Machine::cti_op_call_eval): - (JSC::Machine::cti_op_throw): - (JSC::Machine::cti_op_next_pname): - (JSC::Machine::cti_op_typeof): - (JSC::Machine::cti_op_is_undefined): - (JSC::Machine::cti_op_is_boolean): - (JSC::Machine::cti_op_is_number): - (JSC::Machine::cti_op_is_string): - (JSC::Machine::cti_op_is_object): - (JSC::Machine::cti_op_is_function): - (JSC::Machine::cti_op_stricteq): - (JSC::Machine::cti_op_nstricteq): - (JSC::Machine::cti_op_to_jsnumber): - (JSC::Machine::cti_op_in): - (JSC::Machine::cti_op_del_by_val): - (JSC::Machine::cti_vm_throw): - Removed calls to payload functions. - - * VM/Register.h: - (JSC::Register::Register): Removed overload for JSCell and call - to payload function. - - * kjs/JSCell.h: Changed JSCell to derive from JSValue again. - Removed JSValuePtr constructor. - (JSC::asCell): Changed cast from reinterpret_cast to static_cast. - - * kjs/JSImmediate.h: Removed JSValuePtr class. Added typedef back. - - * kjs/JSValue.h: - (JSC::JSValue::JSValue): Added empty protected inline constructor back. - (JSC::JSValue::~JSValue): Same for destructor. - Removed == and != operator for JSValuePtr. - - * kjs/PropertySlot.h: - (JSC::PropertySlot::PropertySlot): Chnaged argument to const JSValue* - and added a const_cast. - - * kjs/protect.h: Removed overloads and specialization for JSValuePtr. - -2008-10-22 Oliver Hunt - - Reviewed by Maciej Stachowiak. - - Really "fix" CTI mode on windows 2k3. - - This adds new methods fastMallocExecutable and fastFreeExecutable - to wrap allocation for cti code. This still just makes fastMalloc - return executable memory all the time, which will be fixed in a - later patch. - - However in windows debug builds all executable allocations will be - allocated on separate executable pages, which should resolve any - remaining 2k3 issues. Conveniently the 2k3 bot will now also fail - if there are any fastFree vs. fastFreeExecutable errors. - - * ChangeLog: - * VM/CodeBlock.cpp: - (JSC::CodeBlock::~CodeBlock): - * kjs/regexp.cpp: - (JSC::RegExp::~RegExp): - * masm/X86Assembler.h: - (JSC::JITCodeBuffer::copy): - * wtf/FastMalloc.cpp: - (WTF::fastMallocExecutable): - (WTF::fastFreeExecutable): - (WTF::TCMallocStats::fastMallocExecutable): - (WTF::TCMallocStats::fastFreeExecutable): - * wtf/FastMalloc.h: - -2008-10-22 Darin Adler - - Reviewed by Sam Weinig. - - - fix https://bugs.webkit.org/show_bug.cgi?id=21294 - Bug 21294: Devirtualize getOwnPropertySlot() - - A bit over 3% faster on V8 tests. - - * JavascriptCore.exp: Export leak-related functions.. - - * API/JSCallbackConstructor.h: - (JSC::JSCallbackConstructor::createStructureID): Set HasStandardGetOwnPropertySlot - since this class doesn't override getPropertySlot. - * API/JSCallbackFunction.h: - (JSC::JSCallbackFunction::createStructureID): Ditto. - - * VM/ExceptionHelpers.cpp: - (JSC::InterruptedExecutionError::InterruptedExecutionError): Use a structure - that's created just for this class instead of trying to share a single "null - prototype" structure. - - * VM/Machine.cpp: - (JSC::Machine::cti_op_create_arguments_no_params): Rename - Arguments::ArgumentsNoParameters to Arguments::NoParameters. - - * kjs/Arguments.h: Rename the enum from Arguments::ArgumentsParameters to - Arguments::NoParametersType and the value from Arguments::ArgumentsNoParameters - to Arguments::NoParameters. - (JSC::Arguments::createStructureID): Added. Returns a structure without - HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. - (JSC::Arguments::Arguments): Added an assertion that there are no parameters. - - * kjs/DatePrototype.h: - (JSC::DatePrototype::createStructureID): Added. Returns a structure without - HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. - - * kjs/FunctionPrototype.h: - (JSC::FunctionPrototype::createStructureID): Set HasStandardGetOwnPropertySlot - since this class doesn't override getPropertySlot. - * kjs/InternalFunction.h: - (JSC::InternalFunction::createStructureID): Ditto. - - * kjs/JSArray.h: - (JSC::JSArray::createStructureID): Added. Returns a structure without - HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. - - * kjs/JSCell.h: Added declaration of fastGetOwnPropertySlot; a non-virtual - version that uses the structure bit to decide whether to call the virtual - version. - - * kjs/JSFunction.h: - (JSC::JSFunction::createStructureID): Added. Returns a structure without - HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. - - * kjs/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): Initialize new structures; removed - nullProtoStructureID. - * kjs/JSGlobalData.h: Added new structures. Removed nullProtoStructureID. - - * kjs/JSGlobalObject.h: - (JSC::JSGlobalObject::createStructureID): Added. Returns a structure without - HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. - - * kjs/JSNotAnObject.h: - (JSC::JSNotAnObjectErrorStub::JSNotAnObjectErrorStub): Use a structure - that's created just for this class instead of trying to share a single "null - prototype" structure. - (JSC::JSNotAnObjectErrorStub::isNotAnObjectErrorStub): Marked this function - virtual for clarity and made it private since no one should call it if they - already have a pointer to this specific type. - (JSC::JSNotAnObject::JSNotAnObject): Use a structure that's created just - for this class instead of trying to share a single "null prototype" structure. - (JSC::JSNotAnObject::createStructureID): Added. Returns a structure without - HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. - - * kjs/JSObject.h: - (JSC::JSObject::createStructureID): Added HasStandardGetOwnPropertySlot. - (JSC::JSObject::inlineGetOwnPropertySlot): Added. Used so we can share code - between getOwnPropertySlot and fastGetOwnPropertySlot. - (JSC::JSObject::getOwnPropertySlot): Moved so that functions are above the - functions that call them. Moved the guts of this function into - inlineGetOwnPropertySlot. - (JSC::JSCell::fastGetOwnPropertySlot): Added. Checks the - HasStandardGetOwnPropertySlot bit and if it's set, calls - inlineGetOwnPropertySlot, otherwise calls getOwnPropertySlot. - (JSC::JSObject::getPropertySlot): Changed to call fastGetOwnPropertySlot. - (JSC::JSValue::get): Changed to call fastGetOwnPropertySlot. - - * kjs/JSWrapperObject.h: Made constructor protected to emphasize that - this class is only a base class and never instantiated. - - * kjs/MathObject.h: - (JSC::MathObject::createStructureID): Added. Returns a structure without - HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. - * kjs/NumberConstructor.h: - (JSC::NumberConstructor::createStructureID): Ditto. - * kjs/RegExpConstructor.h: - (JSC::RegExpConstructor::createStructureID): Ditto. - * kjs/RegExpObject.h: - (JSC::RegExpObject::createStructureID): Ditto. - * kjs/StringObject.h: - (JSC::StringObject::createStructureID): Ditto. - - * kjs/TypeInfo.h: Added HasStandardGetOwnPropertySlot flag and - hasStandardGetOwnPropertySlot accessor function. - -2008-10-22 Cameron Zwarich - - Reviewed by Geoff Garen. - - Bug 21803: Fuse op_jfalse with op_eq_null and op_neq_null - - - Fuse op_jfalse with op_eq_null and op_neq_null to make the new opcodes - op_jeq_null and op_jneq_null. - - This is a 2.6% speedup on the V8 Raytrace benchmark, and strangely also - a 4.7% speedup on the V8 Arguments benchmark, even though it uses - neither of the two new opcodes. - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): - * VM/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::emitJumpIfTrue): - (JSC::CodeGenerator::emitJumpIfFalse): - * VM/Machine.cpp: - (JSC::Machine::privateExecute): - * VM/Opcode.h: - -2008-10-22 Darin Fisher - - Reviewed by Eric Seidel. - - Should not define PLATFORM(WIN,MAC,GTK) when PLATFORM(CHROMIUM) is defined - https://bugs.webkit.org/show_bug.cgi?id=21757 - - PLATFORM(CHROMIUM) implies HAVE_ACCESSIBILITY - - * wtf/Platform.h: - -2008-10-22 Cameron Zwarich - - Reviewed by Alexey Proskuryakov. - - Correct opcode names in documentation. - - * VM/Machine.cpp: - (JSC::Machine::privateExecute): - -2008-10-21 Oliver Hunt - - RS=Maciej Stachowiak. - - Force FastMalloc to make all allocated pages executable in - a vague hope this will allow the Win2k3 bot to be able to - run tests. - - Filed Bug 21783: Need more granular control over allocation of executable memory - to cover a more granular version of this patch. - - * wtf/TCSystemAlloc.cpp: - (TryVirtualAlloc): - -2008-10-21 Alexey Proskuryakov - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=21769 - MessagePort should be GC protected if there are messages to be delivered - - * wtf/MessageQueue.h: - (WTF::::isEmpty): Added. Also added a warning for methods that return a snapshot of queue - state, thus likely to cause race conditions. - -2008-10-21 Darin Adler - - Reviewed by Maciej Stachowiak. - - - convert post-increment to pre-increment in a couple more places for speed - - Speeds up V8 benchmarks a little on most computers. (But, strangely, slows - them down a little on my computer.) - - * kjs/nodes.cpp: - (JSC::statementListEmitCode): Removed default argument, since we always want - to specify this explicitly. - (JSC::ForNode::emitCode): Tolerate ignoredResult() as the dst -- means the - same thing as 0. - (JSC::ReturnNode::emitCode): Ditto. - (JSC::ThrowNode::emitCode): Ditto. - (JSC::FunctionBodyNode::emitCode): Pass ignoredResult() so that we know we - don't have to compute the result of function statements. - -2008-10-21 Peter Kasting - - Reviewed by Maciej Stachowiak. - - Fix an include of a non-public header to use "" instead of <>. - - * API/JSProfilerPrivate.cpp: - -2008-10-20 Sam Weinig - - Reviewed by Cameron Zwarich. - - Fix for https://bugs.webkit.org/show_bug.cgi?id=21766 - REGRESSION: 12 JSC tests fail - - The JSGlobalObject was mutating the shared nullProtoStructureID when - used in jsc. Instead of using nullProtoStructureID, use a new StructureID. - - * API/JSCallbackObject.h: - * API/JSCallbackObjectFunctions.h: - (JSC::::JSCallbackObject): - * API/JSContextRef.cpp: - (JSGlobalContextCreateInGroup): - * kjs/JSGlobalObject.h: - (JSC::JSGlobalObject::JSGlobalObject): - * kjs/Shell.cpp: - (GlobalObject::GlobalObject): - (jscmain): - -2008-10-20 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Remove an untaken branch in CodeGenerator::emitJumpIfFalse(). This - function is never called with a backwards target LabelID, and there is - even an assertion to this effect at the top of the function body. - - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::emitJumpIfFalse): - -2008-10-20 Cameron Zwarich - - Rubber-stamped by Sam Weinig. - - Add opcode documentation for undocumented opcodes. - - * VM/Machine.cpp: - (JSC::Machine::privateExecute): - -2008-10-16 Sam Weinig - - Reviewed by Cameron Zwarich. - - Fix for https://bugs.webkit.org/show_bug.cgi?id=21683 - Don't create intermediate StructureIDs for builtin objects - - Second stage in reduce number of StructureIDs created when initializing the - JSGlobalObject. - - - Use putDirectWithoutTransition for the remaining singleton objects to reduce - the number of StructureIDs create for about:blank from 132 to 73. - - * kjs/ArrayConstructor.cpp: - (JSC::ArrayConstructor::ArrayConstructor): - * kjs/BooleanConstructor.cpp: - (JSC::BooleanConstructor::BooleanConstructor): - * kjs/BooleanPrototype.cpp: - (JSC::BooleanPrototype::BooleanPrototype): - * kjs/DateConstructor.cpp: - (JSC::DateConstructor::DateConstructor): - * kjs/ErrorConstructor.cpp: - (JSC::ErrorConstructor::ErrorConstructor): - * kjs/ErrorPrototype.cpp: - (JSC::ErrorPrototype::ErrorPrototype): - * kjs/FunctionConstructor.cpp: - (JSC::FunctionConstructor::FunctionConstructor): - * kjs/FunctionPrototype.cpp: - (JSC::FunctionPrototype::FunctionPrototype): - (JSC::FunctionPrototype::addFunctionProperties): - * kjs/FunctionPrototype.h: - (JSC::FunctionPrototype::createStructureID): - * kjs/InternalFunction.cpp: - * kjs/InternalFunction.h: - (JSC::InternalFunction::InternalFunction): - * kjs/JSGlobalObject.cpp: - (JSC::JSGlobalObject::reset): - * kjs/JSObject.h: - * kjs/MathObject.cpp: - (JSC::MathObject::MathObject): - * kjs/NumberConstructor.cpp: - (JSC::NumberConstructor::NumberConstructor): - * kjs/NumberPrototype.cpp: - (JSC::NumberPrototype::NumberPrototype): - * kjs/ObjectConstructor.cpp: - (JSC::ObjectConstructor::ObjectConstructor): - * kjs/RegExpConstructor.cpp: - (JSC::RegExpConstructor::RegExpConstructor): - * kjs/RegExpPrototype.cpp: - (JSC::RegExpPrototype::RegExpPrototype): - * kjs/StringConstructor.cpp: - (JSC::StringConstructor::StringConstructor): - * kjs/StringPrototype.cpp: - (JSC::StringPrototype::StringPrototype): - * kjs/StructureID.cpp: - (JSC::StructureID::dumpStatistics): - * kjs/StructureID.h: - (JSC::StructureID::setPrototypeWithoutTransition): - -2008-10-20 Alp Toker - - Fix autotools dist build target by listing recently added header - files only. Not reviewed. - - * GNUmakefile.am: - -2008-10-20 Geoffrey Garen - - Reviewed by Anders Carlsson. - - * VM/Machine.cpp: - (JSC::Machine::tryCacheGetByID): Removed a redundant and sometimes - incorrect cast, which started ASSERTing after Darin's last checkin. - -2008-10-20 Geoffrey Garen - - Not reviewed. - - Re-enable CTI, which I accidentally disabled while checking in fixes - to bytecode. - - * wtf/Platform.h: - -2008-10-20 Alp Toker - - Rubber-stamped by Mark Rowe. - - Typo fix in function name: mimimum -> minimum. - - * kjs/DateMath.cpp: - (JSC::minimumYearForDST): - (JSC::equivalentYearForDST): - -2008-10-20 Alp Toker - - Reviewed by Mark Rowe. - - Use pthread instead of GThread where possible in the GTK+ port. This - fixes issues with global initialisation, particularly on GTK+/Win32 - where a late g_thread_init() will cause hangs. - - * GNUmakefile.am: - * wtf/Platform.h: - * wtf/Threading.h: - * wtf/ThreadingGtk.cpp: - * wtf/ThreadingPthreads.cpp: - -2008-10-20 Geoffrey Garen - - Reviewed by Darin Adler. - - Fixed https://bugs.webkit.org/show_bug.cgi?id=21735 - Emit profiling instrumentation only if the Web Inspector's profiling - feature is enabled - - 22.2% speedup on empty function call benchmark. - 2.9% speedup on v8 benchmark. - 0.7% speedup on SunSpider. - - Lesser but similar speedups in bytecode. - - * VM/CTI.cpp: - (JSC::CTI::compileOpCall): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): Nixed JITed profiler hooks. Profiler - hooks now have their own opcodes. Added support for compiling profiler - hook opcodes. - - (JSC::CodeBlock::dump): Dump support for the new profiling opcodes. - - * VM/CodeGenerator.h: - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::CodeGenerator): - (JSC::CodeGenerator::emitCall): - (JSC::CodeGenerator::emitConstruct): Conditionally emit profiling hooks - around call and construct, at the call site. (It's easier to get things - right this way, if you have profiled code calling non-profiled code. - Also, you get a slightly more accurate profile, since you charge the full - cost of the call / construct operation to the callee.) - - Also, fixed a bug where construct would fetch the ".prototype" property - from the constructor before evaluating the arguments to the constructor, - incorrectly allowing an "invalid constructor" exception to short-circuit - argument evaluation. I encountered this bug when trying to make - constructor exceptions work with profiling. - - * VM/Machine.cpp: - (JSC::Machine::callEval): Removed obsolete profiler hooks. - - (JSC::Machine::throwException): Added a check for an exception thrown - within a call instruction. We didn't need this before because the call - instruction would check for a valid call before involing the profiler. - (JSC::Machine::execute): Added a didExecute hook at the end of top-level - function invocation, since op_ret no longer does this for us. - - (JSC::Machine::privateExecute): Removed obsolete profiler hooks. Added - profiler opcodes. Changed some ++vPC to vPC[x] notation, since the - latter is better for performance, and it makes reasoning about the - current opcode in exception handling much simpler. - - (JSC::Machine::cti_op_call_NotJSFunction): Removed obsolete profiler - hooks. - - (JSC::Machine::cti_op_create_arguments_no_params): Added missing - CTI_STACK_HACK that I noticed when adding CTI_STACK_HACK to the new - profiler opcode functions. - - (JSC::Machine::cti_op_profile_will_call): - (JSC::Machine::cti_op_profile_did_call): The new profiler opcode - functions. - - (JSC::Machine::cti_op_construct_NotJSConstruct): Removed obsolete profiler - hooks. - - * VM/Machine.h: - (JSC::Machine::isCallOpcode): Helper for exception handling. - - * VM/Opcode.h: Declare new opcodes. - - * kjs/JSGlobalObject.h: - (JSC::JSGlobalObject::supportsProfiling): Added virtual interface that - allows WebCore to specify whether the target global object has the Web - Inspector's profiling feature enabled. - - * profiler/Profiler.cpp: - (JSC::Profiler::willExecute): - (JSC::Profiler::didExecute): - (JSC::Profiler::createCallIdentifier): - * profiler/Profiler.h: Added support for invoking the profiler with - an arbitrary JSValue*, and not a known object. We didn't need this - before because the call instruction would check for a valid call before - involing the profiler. - -2008-10-20 Darin Adler - - Reviewed by Geoff Garen. - - - get CTI working on Windows again - - * VM/CTI.cpp: - (JSC::CTI::emitCTICall): Add an overload for functions that - return JSObject*. - * VM/CTI.h: Use JSValue* and JSObject* as return types for - cti_op functions. Apparently, MSVC doesn't handle returning - the JSValuePtr struct in a register. We'll have to look into - this more. - - * VM/Machine.cpp: - (JSC::Machine::cti_op_convert_this): - (JSC::Machine::cti_op_add): - (JSC::Machine::cti_op_pre_inc): - (JSC::Machine::cti_op_new_object): - (JSC::Machine::cti_op_get_by_id): - (JSC::Machine::cti_op_get_by_id_second): - (JSC::Machine::cti_op_get_by_id_generic): - (JSC::Machine::cti_op_get_by_id_fail): - (JSC::Machine::cti_op_instanceof): - (JSC::Machine::cti_op_del_by_id): - (JSC::Machine::cti_op_mul): - (JSC::Machine::cti_op_new_func): - (JSC::Machine::cti_op_push_activation): - (JSC::Machine::cti_op_call_NotJSFunction): - (JSC::Machine::cti_op_new_array): - (JSC::Machine::cti_op_resolve): - (JSC::Machine::cti_op_construct_JSConstructFast): - (JSC::Machine::cti_op_construct_NotJSConstruct): - (JSC::Machine::cti_op_get_by_val): - (JSC::Machine::cti_op_sub): - (JSC::Machine::cti_op_lesseq): - (JSC::Machine::cti_op_negate): - (JSC::Machine::cti_op_resolve_base): - (JSC::Machine::cti_op_resolve_skip): - (JSC::Machine::cti_op_resolve_global): - (JSC::Machine::cti_op_div): - (JSC::Machine::cti_op_pre_dec): - (JSC::Machine::cti_op_not): - (JSC::Machine::cti_op_eq): - (JSC::Machine::cti_op_lshift): - (JSC::Machine::cti_op_bitand): - (JSC::Machine::cti_op_rshift): - (JSC::Machine::cti_op_bitnot): - (JSC::Machine::cti_op_new_func_exp): - (JSC::Machine::cti_op_mod): - (JSC::Machine::cti_op_less): - (JSC::Machine::cti_op_neq): - (JSC::Machine::cti_op_urshift): - (JSC::Machine::cti_op_bitxor): - (JSC::Machine::cti_op_new_regexp): - (JSC::Machine::cti_op_bitor): - (JSC::Machine::cti_op_call_eval): - (JSC::Machine::cti_op_throw): - (JSC::Machine::cti_op_next_pname): - (JSC::Machine::cti_op_typeof): - (JSC::Machine::cti_op_is_undefined): - (JSC::Machine::cti_op_is_boolean): - (JSC::Machine::cti_op_is_number): - (JSC::Machine::cti_op_is_string): - (JSC::Machine::cti_op_is_object): - (JSC::Machine::cti_op_is_function): - (JSC::Machine::cti_op_stricteq): - (JSC::Machine::cti_op_nstricteq): - (JSC::Machine::cti_op_to_jsnumber): - (JSC::Machine::cti_op_in): - (JSC::Machine::cti_op_push_new_scope): - (JSC::Machine::cti_op_del_by_val): - (JSC::Machine::cti_op_new_error): - (JSC::Machine::cti_vm_throw): - Change these functions to return pointer types, and never - JSValuePtr. - * VM/Machine.h: Ditto. - -2008-10-20 Geoffrey Garen - - Reviewed by Darin Adler. - - Fixed some recent break-age in bytecode mode. - - * VM/CodeBlock.cpp: - (JSC::CodeBlock::printStructureIDs): Fixed up an ASSERT caused by - Gavin's last checkin. This is a temporary fix so I can keep on moving. - I'll send email about what I think is an underlying problem soon. - - * VM/Machine.cpp: - (JSC::Machine::privateExecute): Removed a redundant and sometimes - incorrect cast, which started ASSERTing after Darin's last checkin. - -2008-10-20 Darin Adler - - - another similar Windows build fix - - * VM/CTI.cpp: Changed return type to JSObject* instead of JSValuePtr. - -2008-10-20 Darin Adler - - - try to fix Windows build - - * VM/CTI.cpp: Use JSValue* instead of JSValuePtr for ctiTrampoline. - * VM/CTI.h: Ditto. - -2008-10-19 Darin Adler - - Reviewed by Cameron Zwarich. - - - finish https://bugs.webkit.org/show_bug.cgi?id=21732 - improve performance by eliminating JSValue as a base class for JSCell - - * VM/Machine.cpp: - (JSC::Machine::cti_op_call_profiler): Use asFunction. - (JSC::Machine::cti_vm_lazyLinkCall): Ditto. - (JSC::Machine::cti_op_construct_JSConstructFast): Use asObject. - - * kjs/JSCell.h: Re-sort friend classes. Eliminate inheritance from - JSValue. Changed cast in asCell from static_cast to reinterpret_cast. - Removed JSValue::getNumber(double&) and one of JSValue::getObject - overloads. - - * kjs/JSValue.h: Made the private constructor and destructor both - non-virtual and also remove the definitions. This class can never - be instantiated or derived. - -2008-10-19 Darin Adler - - Reviewed by Cameron Zwarich. - - - next step of https://bugs.webkit.org/show_bug.cgi?id=21732 - improve performance by eliminating JSValue as a base class for JSCell - - Change JSValuePtr from a typedef into a class. This allows us to support - conversion from JSCell* to JSValuePtr even if JSCell isn't derived from - JSValue. - - * JavaScriptCore.exp: Updated symbols that involve JSValuePtr, since - it's now a distinct type. - - * API/APICast.h: - (toRef): Extract the JSValuePtr payload explicitly since we can't just - cast any more. - * VM/CTI.cpp: - (JSC::CTI::asInteger): Ditto. - - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::addConstant): Get at the payload directly. - (JSC::CodeGenerator::emitLoad): Added an overload of JSCell* because - otherwise classes derived from JSValue end up calling the bool - overload instead of JSValuePtr. - * VM/CodeGenerator.h: Ditto. Also update traits to use JSValue* - and the payload functions. - - * VM/Register.h: Added a JSCell* overload and use of payload functions. - - * kjs/JSCell.h: - (JSC::asCell): Use payload function. - (JSC::JSValue::asCell): Use JSValue* instead of JSValuePtr. - (JSC::JSValuePtr::JSValuePtr): Added. Constructor that takes JSCell* - and creates a JSValuePtr. - - * kjs/JSImmediate.h: Added JSValuePtr class. Also updated makeValue - and makeInt to work with JSValue* and the payload function. - - * kjs/JSValue.h: Added == and != operators for JSValuePtr. Put them - here because eventually all the JSValue functions should go here - except what's needed by JSImmediate. Also fix asValue to use - JSValue* instead of JSValuePtr. - - * kjs/PropertySlot.h: Change constructor to take JSValuePtr. - - * kjs/protect.h: Update gcProtect functions to work with JSCell* - as well as JSValuePtr. Also updated the ProtectedPtr - specialization to work more directly. Also changed all the call - sites to use gcProtectNullTolerant. - -2008-10-19 Darin Adler - - Reviewed by Oliver Hunt. - - - next step of https://bugs.webkit.org/show_bug.cgi?id=21732 - improve performance by eliminating JSValue as a base class for JSCell - - Remove most uses of JSValue, which will be removed in a future patch. - - * VM/Machine.cpp: - (JSC::fastToUInt32): Call toUInt32SlowCase function; no longer a member - of JSValue. - * kjs/JSNumberCell.h: - (JSC::JSNumberCell::toInt32): Ditto. - (JSC::JSNumberCell::toUInt32): Ditto. - - * kjs/JSValue.cpp: - (JSC::toInt32SlowCase): Made a non-member function. - (JSC::JSValue::toInt32SlowCase): Changed to call non-member function. - (JSC::toUInt32SlowCase): More of the same. - (JSC::JSValue::toUInt32SlowCase): Ditto. - - * kjs/JSValue.h: Moved static member function so they are no longer - member functions at all. - - * VM/CTI.h: Removed forward declaration of JSValue. - * VM/ExceptionHelpers.h: Ditto. - * kjs/CallData.h: Ditto. - * kjs/ConstructData.h: Ditto. - * kjs/JSGlobalObjectFunctions.h: Ditto. - * kjs/PropertyMap.h: Ditto. - * kjs/StructureID.h: Ditto. - * kjs/collector.h: Ditto. - * kjs/completion.h: Ditto. - - * kjs/grammar.y: - (JSC::makeBitwiseNotNode): Call new non-member toInt32 function. - (JSC::makeLeftShiftNode): More of the same. - (JSC::makeRightShiftNode): Ditto. - - * kjs/protect.h: Added a specialization for ProtectedPtr - so this can be used with JSValuePtr. - -2008-10-18 Darin Adler - - Reviewed by Oliver Hunt. - - - next step of https://bugs.webkit.org/show_bug.cgi?id=21732 - improve performance by eliminating JSValue as a base class for JSCell - - Tweak a little more to get closer to where we can make JSValuePtr a class. - - * API/APICast.h: - (toJS): Change back to JSValue* here, since we're converting the - pointer type. - * VM/CTI.cpp: - (JSC::CTI::unlinkCall): Call asPointer. - * VM/CTI.h: Cast to JSValue* here, since it's a pointer cast. - * kjs/DebuggerCallFrame.h: - (JSC::DebuggerCallFrame::DebuggerCallFrame): Call noValue. - * kjs/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): Call noValue. - * kjs/JSImmediate.cpp: - (JSC::JSImmediate::toObject): Remove unneeded const_cast. - * kjs/JSWrapperObject.h: - (JSC::JSWrapperObject::JSWrapperObject): Call noValue. - -2008-10-18 Darin Adler - - - fix non-all-in-one build - - * kjs/completion.h: - (JSC::Completion::Completion): Add include of JSValue.h. - -2008-10-18 Darin Adler - - Reviewed by Oliver Hunt. - - - fix assertions I introduced with my casting changes - - These were showing up as failures in the JavaScriptCore tests. - - * VM/Machine.cpp: - (JSC::Machine::cti_op_instanceof): Remove the bogus asCell casting that - was at the top of the function, and instead cast at the point of use. - (JSC::Machine::cti_op_construct_NotJSConstruct): Moved the cast to - object after checking the construct type. - -2008-10-18 Darin Adler - - - fix non-all-in-one build - - * kjs/JSGlobalObjectFunctions.h: Add include of JSImmedate.h (for now). - -2008-10-18 Darin Adler - - - fix build - - * kjs/interpreter.h: Include JSValue.h instead of JSImmediate.h. - -2008-10-18 Darin Adler - - * kjs/interpreter.h: Fix include of JSImmediate.h. - -2008-10-18 Darin Adler - - - fix non-all-in-one build - - * kjs/interpreter.h: Add include of JSImmediate.h. - -2008-10-18 Darin Adler - - - fix non-all-in-one build - - * kjs/ConstructData.h: Add include of JSImmedate.h (for now). - -2008-10-18 Darin Adler - - - try to fix Windows build - - * VM/Machine.cpp: - (JSC::Machine::Machine): Use JSCell* type since MSVC seems to only allow - calling ~JSCell directly if it's a JSCell*. - -2008-10-18 Darin Adler - - Reviewed by Cameron Zwarich. - - - next step on https://bugs.webkit.org/show_bug.cgi?id=21732 - improve performance by eliminating JSValue as a base class for JSCell - - Use JSValuePtr everywhere instead of JSValue*. In the future, we'll be - changing JSValuePtr to be a class, and then eventually renaming it - to JSValue once that's done. - - * JavaScriptCore.exp: Update entry points, since some now take JSValue* - instead of const JSValue*. - - * API/APICast.h: - * API/JSCallbackConstructor.h: - * API/JSCallbackFunction.cpp: - * API/JSCallbackFunction.h: - * API/JSCallbackObject.h: - * API/JSCallbackObjectFunctions.h: - * API/JSContextRef.cpp: - * API/JSObjectRef.cpp: - * API/JSValueRef.cpp: - * VM/CTI.cpp: - * VM/CTI.h: - * VM/CodeBlock.cpp: - * VM/CodeBlock.h: - * VM/CodeGenerator.cpp: - * VM/CodeGenerator.h: - * VM/ExceptionHelpers.cpp: - * VM/ExceptionHelpers.h: - * VM/JSPropertyNameIterator.cpp: - * VM/JSPropertyNameIterator.h: - * VM/Machine.cpp: - * VM/Machine.h: - * VM/Register.h: - * kjs/ArgList.cpp: - * kjs/ArgList.h: - * kjs/Arguments.cpp: - * kjs/Arguments.h: - * kjs/ArrayConstructor.cpp: - * kjs/ArrayPrototype.cpp: - * kjs/BooleanConstructor.cpp: - * kjs/BooleanConstructor.h: - * kjs/BooleanObject.h: - * kjs/BooleanPrototype.cpp: - * kjs/CallData.cpp: - * kjs/CallData.h: - * kjs/ConstructData.cpp: - * kjs/ConstructData.h: - * kjs/DateConstructor.cpp: - * kjs/DateInstance.h: - * kjs/DatePrototype.cpp: - * kjs/DebuggerCallFrame.cpp: - * kjs/DebuggerCallFrame.h: - * kjs/ErrorConstructor.cpp: - * kjs/ErrorPrototype.cpp: - * kjs/ExecState.cpp: - * kjs/ExecState.h: - * kjs/FunctionConstructor.cpp: - * kjs/FunctionPrototype.cpp: - * kjs/GetterSetter.cpp: - * kjs/GetterSetter.h: - * kjs/InternalFunction.h: - * kjs/JSActivation.cpp: - * kjs/JSActivation.h: - * kjs/JSArray.cpp: - * kjs/JSArray.h: - * kjs/JSCell.cpp: - * kjs/JSCell.h: - * kjs/JSFunction.cpp: - * kjs/JSFunction.h: - * kjs/JSGlobalData.h: - * kjs/JSGlobalObject.cpp: - * kjs/JSGlobalObject.h: - * kjs/JSGlobalObjectFunctions.cpp: - * kjs/JSGlobalObjectFunctions.h: - * kjs/JSImmediate.cpp: - * kjs/JSImmediate.h: - * kjs/JSNotAnObject.cpp: - * kjs/JSNotAnObject.h: - * kjs/JSNumberCell.cpp: - * kjs/JSNumberCell.h: - * kjs/JSObject.cpp: - * kjs/JSObject.h: - * kjs/JSStaticScopeObject.cpp: - * kjs/JSStaticScopeObject.h: - * kjs/JSString.cpp: - * kjs/JSString.h: - * kjs/JSValue.h: - * kjs/JSVariableObject.h: - * kjs/JSWrapperObject.h: - * kjs/MathObject.cpp: - * kjs/NativeErrorConstructor.cpp: - * kjs/NumberConstructor.cpp: - * kjs/NumberConstructor.h: - * kjs/NumberObject.cpp: - * kjs/NumberObject.h: - * kjs/NumberPrototype.cpp: - * kjs/ObjectConstructor.cpp: - * kjs/ObjectPrototype.cpp: - * kjs/ObjectPrototype.h: - * kjs/PropertyMap.h: - * kjs/PropertySlot.cpp: - * kjs/PropertySlot.h: - * kjs/RegExpConstructor.cpp: - * kjs/RegExpConstructor.h: - * kjs/RegExpMatchesArray.h: - * kjs/RegExpObject.cpp: - * kjs/RegExpObject.h: - * kjs/RegExpPrototype.cpp: - * kjs/Shell.cpp: - * kjs/StringConstructor.cpp: - * kjs/StringObject.cpp: - * kjs/StringObject.h: - * kjs/StringObjectThatMasqueradesAsUndefined.h: - * kjs/StringPrototype.cpp: - * kjs/StructureID.cpp: - * kjs/StructureID.h: - * kjs/collector.cpp: - * kjs/collector.h: - * kjs/completion.h: - * kjs/grammar.y: - * kjs/interpreter.cpp: - * kjs/interpreter.h: - * kjs/lookup.cpp: - * kjs/lookup.h: - * kjs/nodes.h: - * kjs/operations.cpp: - * kjs/operations.h: - * kjs/protect.h: - * profiler/ProfileGenerator.cpp: - Replace JSValue* with JSValuePtr. - -2008-10-18 Darin Adler - - * VM/Machine.cpp: - (JSC::Machine::cti_op_call_eval): Removed stray parentheses from my - last check-in. - -2008-10-18 Darin Adler - - Reviewed by Oliver Hunt. - - - first step of https://bugs.webkit.org/show_bug.cgi?id=21732 - improve performance by eliminating JSValue as a base class for JSCell - - Remove casts from JSValue* to derived classes, replacing them with - calls to inline casting functions. These functions are also a bit - better than aidrect cast because they also do a runtime assertion. - - Removed use of 0 as for JSValue*, changing call sites to use a - noValue() function instead. - - Move things needed by classes derived from JSValue out of the class, - since the classes won't be deriving from JSValue any more soon. - - I did most of these changes by changing JSValue to not be JSValue* any - more, then fixing a lot of the compilation problems, then rolling out - the JSValue change. - - 1.011x as fast on SunSpider (presumably due to some of the Machine.cpp changes) - - * API/APICast.h: Removed unneeded forward declarations. - - * API/JSCallbackObject.h: Added an asCallbackObject function for casting. - * API/JSCallbackObjectFunctions.h: - (JSC::JSCallbackObject::asCallbackObject): Added. - (JSC::JSCallbackObject::getOwnPropertySlot): Use asObject. - (JSC::JSCallbackObject::call): Use noValue. - (JSC::JSCallbackObject::staticValueGetter): Use asCallbackObject. - (JSC::JSCallbackObject::staticFunctionGetter): Ditto. - (JSC::JSCallbackObject::callbackGetter): Ditto. - - * JavaScriptCore.exp: Updated. - - * JavaScriptCore.xcodeproj/project.pbxproj: Added RegExpMatchesArray.h. - - * VM/CTI.cpp: - (JSC::CTI::asInteger): Added. For use casting a JSValue to an integer. - (JSC::CTI::emitGetArg): Use asInteger. - (JSC::CTI::emitGetPutArg): Ditto. - (JSC::CTI::getConstantImmediateNumericArg): Ditto. Also use noValue. - (JSC::CTI::emitInitRegister): Use asInteger. - (JSC::CTI::getDeTaggedConstantImmediate): Ditto. - (JSC::CTI::compileOpCallInitializeCallFrame): Ditto. - (JSC::CTI::compileOpCall): Ditto. - (JSC::CTI::compileOpStrictEq): Ditto. - (JSC::CTI::privateCompileMainPass): Ditto. - (JSC::CTI::privateCompileGetByIdProto): Ditto. - (JSC::CTI::privateCompileGetByIdChain): Ditto. - (JSC::CTI::privateCompilePutByIdTransition): Ditto. - * VM/CTI.h: Rewrite the ARG-related macros to use C++ casts instead of - C casts and get rid of some extra parentheses. Addd declaration of - asInteger. - - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::emitEqualityOp): Use asString. - (JSC::CodeGenerator::emitLoad): Use noValue. - (JSC::CodeGenerator::findScopedProperty): Change globalObject argument - to JSObject* instead of JSValue*. - (JSC::CodeGenerator::emitResolve): Remove unneeded cast. - (JSC::CodeGenerator::emitGetScopedVar): Use asCell. - (JSC::CodeGenerator::emitPutScopedVar): Ditto. - * VM/CodeGenerator.h: Changed out argument of findScopedProperty. - Also change the JSValueMap to use PtrHash explicitly instead of - getting it from DefaultHash. - - * VM/JSPropertyNameIterator.cpp: - (JSC::JSPropertyNameIterator::toPrimitive): Use noValue. - * VM/JSPropertyNameIterator.h: - (JSC::JSPropertyNameIterator::next): Ditto. - - * VM/Machine.cpp: - (JSC::fastIsNumber): Moved isImmediate check here instead of - checking for 0 inside Heap::isNumber. Use asCell and asNumberCell. - (JSC::fastToInt32): Ditto. - (JSC::fastToUInt32): Ditto. - (JSC::jsLess): Use asString. - (JSC::jsLessEq): Ditto. - (JSC::jsAdd): Ditto. - (JSC::jsTypeStringForValue): Use asObject. - (JSC::jsIsObjectType): Ditto. - (JSC::jsIsFunctionType): Ditto. - (JSC::inlineResolveBase): Use noValue. - (JSC::Machine::callEval): Use asString. Initialize result to - undefined, not 0. - (JSC::Machine::Machine): Remove unneeded casts to JSCell*. - (JSC::Machine::throwException): Use asObject. - (JSC::Machine::debug): Remove explicit calls to the DebuggerCallFrame - constructor. - (JSC::Machine::checkTimeout): Use noValue. - (JSC::cachePrototypeChain): Use asObject. - (JSC::Machine::tryCachePutByID): Use asCell. - (JSC::Machine::tryCacheGetByID): Use aCell and asObject. - (JSC::Machine::privateExecute): Use noValue, asCell, asObject, asString, - asArray, asActivation, asFunction. Changed code that creates call frames - for host functions to pass 0 for the function pointer -- the call frame - needs a JSFunction* and a host function object is not one. This was - caught by the assertions in the casting functions. Also remove some - unneeded casts in cases where two values are compared. - (JSC::Machine::retrieveLastCaller): Use noValue. - (JSC::Machine::tryCTICachePutByID): Use asCell. - (JSC::Machine::tryCTICacheGetByID): Use aCell and asObject. - (JSC::setUpThrowTrampolineReturnAddress): Added this function to restore - the PIC-branch-avoidance that was recently lost. - (JSC::Machine::cti_op_add): Use asString. - (JSC::Machine::cti_op_instanceof): Use asCell and asObject. - (JSC::Machine::cti_op_call_JSFunction): Use asFunction. - (JSC::Machine::cti_op_call_NotJSFunction): Changed code to pass 0 for - the function pointer, since we don't have a JSFunction. Use asObject. - (JSC::Machine::cti_op_tear_off_activation): Use asActivation. - (JSC::Machine::cti_op_construct_JSConstruct): Use asFunction and asObject. - (JSC::Machine::cti_op_construct_NotJSConstruct): use asObject. - (JSC::Machine::cti_op_get_by_val): Use asArray and asString. - (JSC::Machine::cti_op_resolve_func): Use asPointer; this helps prepare - us for a situation where JSValue is not a pointer. - (JSC::Machine::cti_op_put_by_val): Use asArray. - (JSC::Machine::cti_op_put_by_val_array): Ditto. - (JSC::Machine::cti_op_resolve_global): Use asGlobalObject. - (JSC::Machine::cti_op_post_inc): Change VM_CHECK_EXCEPTION_2 to - VM_CHECK_EXCEPTION_AT_END, since there's no observable work done after - that point. Also use asPointer. - (JSC::Machine::cti_op_resolve_with_base): Use asPointer. - (JSC::Machine::cti_op_post_dec): Change VM_CHECK_EXCEPTION_2 to - VM_CHECK_EXCEPTION_AT_END, since there's no observable work done after - that point. Also use asPointer. - (JSC::Machine::cti_op_call_eval): Use asObject, noValue, and change - VM_CHECK_EXCEPTION_ARG to VM_THROW_EXCEPTION_AT_END. - (JSC::Machine::cti_op_throw): Change return value to a JSValue*. - (JSC::Machine::cti_op_in): Use asObject. - (JSC::Machine::cti_op_switch_char): Use asString. - (JSC::Machine::cti_op_switch_string): Ditto. - (JSC::Machine::cti_op_put_getter): Use asObject. - (JSC::Machine::cti_op_put_setter): Ditto. - (JSC::Machine::cti_vm_throw): Change return value to a JSValue*. - Use noValue. - * VM/Machine.h: Change return values of both cti_op_throw and - cti_vm_throw to JSValue*. - - * VM/Register.h: Remove nullJSValue, which is the same thing - as noValue(). Also removed unneeded definition of JSValue. - - * kjs/ArgList.h: Removed unneeded definition of JSValue. - - * kjs/Arguments.h: - (JSC::asArguments): Added. - - * kjs/ArrayPrototype.cpp: - (JSC::getProperty): Use noValue. - (JSC::arrayProtoFuncToString): Use asArray. - (JSC::arrayProtoFuncToLocaleString): Ditto. - (JSC::arrayProtoFuncConcat): Ditto. - (JSC::arrayProtoFuncPop): Ditto. Also removed unneeded initialization - of the result, which is set in both sides of the branch. - (JSC::arrayProtoFuncPush): Ditto. - (JSC::arrayProtoFuncShift): Removed unneeded initialization - of the result, which is set in both sides of the branch. - (JSC::arrayProtoFuncSort): Use asArray. - - * kjs/BooleanObject.h: - (JSC::asBooleanObject): Added. - - * kjs/BooleanPrototype.cpp: - (JSC::booleanProtoFuncToString): Use asBooleanObject. - (JSC::booleanProtoFuncValueOf): Ditto. - - * kjs/CallData.cpp: - (JSC::call): Use asObject and asFunction. - * kjs/ConstructData.cpp: - (JSC::construct): Ditto. - - * kjs/DateConstructor.cpp: - (JSC::constructDate): Use asDateInstance. - - * kjs/DateInstance.h: - (JSC::asDateInstance): Added. - - * kjs/DatePrototype.cpp: - (JSC::dateProtoFuncToString): Use asDateInstance. - (JSC::dateProtoFuncToUTCString): Ditto. - (JSC::dateProtoFuncToDateString): Ditto. - (JSC::dateProtoFuncToTimeString): Ditto. - (JSC::dateProtoFuncToLocaleString): Ditto. - (JSC::dateProtoFuncToLocaleDateString): Ditto. - (JSC::dateProtoFuncToLocaleTimeString): Ditto. - (JSC::dateProtoFuncValueOf): Ditto. - (JSC::dateProtoFuncGetTime): Ditto. - (JSC::dateProtoFuncGetFullYear): Ditto. - (JSC::dateProtoFuncGetUTCFullYear): Ditto. - (JSC::dateProtoFuncToGMTString): Ditto. - (JSC::dateProtoFuncGetMonth): Ditto. - (JSC::dateProtoFuncGetUTCMonth): Ditto. - (JSC::dateProtoFuncGetDate): Ditto. - (JSC::dateProtoFuncGetUTCDate): Ditto. - (JSC::dateProtoFuncGetDay): Ditto. - (JSC::dateProtoFuncGetUTCDay): Ditto. - (JSC::dateProtoFuncGetHours): Ditto. - (JSC::dateProtoFuncGetUTCHours): Ditto. - (JSC::dateProtoFuncGetMinutes): Ditto. - (JSC::dateProtoFuncGetUTCMinutes): Ditto. - (JSC::dateProtoFuncGetSeconds): Ditto. - (JSC::dateProtoFuncGetUTCSeconds): Ditto. - (JSC::dateProtoFuncGetMilliSeconds): Ditto. - (JSC::dateProtoFuncGetUTCMilliseconds): Ditto. - (JSC::dateProtoFuncGetTimezoneOffset): Ditto. - (JSC::dateProtoFuncSetTime): Ditto. - (JSC::setNewValueFromTimeArgs): Ditto. - (JSC::setNewValueFromDateArgs): Ditto. - (JSC::dateProtoFuncSetYear): Ditto. - (JSC::dateProtoFuncGetYear): Ditto. - - * kjs/DebuggerCallFrame.cpp: - (JSC::DebuggerCallFrame::thisObject): Use asObject. - (JSC::DebuggerCallFrame::evaluate): Use noValue. - * kjs/DebuggerCallFrame.h: Added a constructor that - takes only a callFrame. - - * kjs/ExecState.h: - (JSC::ExecState::clearException): Use noValue. - - * kjs/FunctionPrototype.cpp: - (JSC::functionProtoFuncToString): Use asFunction. - (JSC::functionProtoFuncApply): Use asArguments and asArray. - - * kjs/GetterSetter.cpp: - (JSC::GetterSetter::getPrimitiveNumber): Use noValue. - - * kjs/GetterSetter.h: - (JSC::asGetterSetter): Added. - - * kjs/InternalFunction.cpp: - (JSC::InternalFunction::name): Use asString. - - * kjs/InternalFunction.h: - (JSC::asInternalFunction): Added. - - * kjs/JSActivation.cpp: - (JSC::JSActivation::argumentsGetter): Use asActivation. - - * kjs/JSActivation.h: - (JSC::asActivation): Added. - - * kjs/JSArray.cpp: - (JSC::JSArray::putSlowCase): Use noValue. - (JSC::JSArray::deleteProperty): Ditto. - (JSC::JSArray::increaseVectorLength): Ditto. - (JSC::JSArray::setLength): Ditto. - (JSC::JSArray::pop): Ditto. - (JSC::JSArray::sort): Ditto. - (JSC::JSArray::compactForSorting): Ditto. - * kjs/JSArray.h: - (JSC::asArray): Added. - - * kjs/JSCell.cpp: - (JSC::JSCell::getJSNumber): Use noValue. - - * kjs/JSCell.h: - (JSC::asCell): Added. - (JSC::JSValue::asCell): Changed to not preserve const. - Given the wide use of JSValue* and JSCell*, it's not - really useful to use const. - (JSC::JSValue::isNumber): Use asValue. - (JSC::JSValue::isString): Ditto. - (JSC::JSValue::isGetterSetter): Ditto. - (JSC::JSValue::isObject): Ditto. - (JSC::JSValue::getNumber): Ditto. - (JSC::JSValue::getString): Ditto. - (JSC::JSValue::getObject): Ditto. - (JSC::JSValue::getCallData): Ditto. - (JSC::JSValue::getConstructData): Ditto. - (JSC::JSValue::getUInt32): Ditto. - (JSC::JSValue::getTruncatedInt32): Ditto. - (JSC::JSValue::getTruncatedUInt32): Ditto. - (JSC::JSValue::mark): Ditto. - (JSC::JSValue::marked): Ditto. - (JSC::JSValue::toPrimitive): Ditto. - (JSC::JSValue::getPrimitiveNumber): Ditto. - (JSC::JSValue::toBoolean): Ditto. - (JSC::JSValue::toNumber): Ditto. - (JSC::JSValue::toString): Ditto. - (JSC::JSValue::toObject): Ditto. - (JSC::JSValue::toThisObject): Ditto. - (JSC::JSValue::needsThisConversion): Ditto. - (JSC::JSValue::toThisString): Ditto. - (JSC::JSValue::getJSNumber): Ditto. - - * kjs/JSFunction.cpp: - (JSC::JSFunction::argumentsGetter): Use asFunction. - (JSC::JSFunction::callerGetter): Ditto. - (JSC::JSFunction::lengthGetter): Ditto. - (JSC::JSFunction::construct): Use asObject. - - * kjs/JSFunction.h: - (JSC::asFunction): Added. - - * kjs/JSGlobalObject.cpp: - (JSC::lastInPrototypeChain): Use asObject. - - * kjs/JSGlobalObject.h: - (JSC::asGlobalObject): Added. - (JSC::ScopeChainNode::globalObject): Use asGlobalObject. - - * kjs/JSImmediate.h: Added noValue, asPointer, and makeValue - functions. Use rawValue, makeValue, and noValue consistently - instead of doing reinterpret_cast in various functions. - - * kjs/JSNumberCell.h: - (JSC::asNumberCell): Added. - (JSC::JSValue::uncheckedGetNumber): Use asValue and asNumberCell. - (JSC::JSValue::toJSNumber): Use asValue. - - * kjs/JSObject.cpp: - (JSC::JSObject::put): Use asObject and asGetterSetter. - (JSC::callDefaultValueFunction): Use noValue. - (JSC::JSObject::defineGetter): Use asGetterSetter. - (JSC::JSObject::defineSetter): Ditto. - (JSC::JSObject::lookupGetter): Ditto. Also use asObject. - (JSC::JSObject::lookupSetter): Ditto. - (JSC::JSObject::hasInstance): Use asObject. - (JSC::JSObject::fillGetterPropertySlot): Use asGetterSetter. - - * kjs/JSObject.h: - (JSC::JSObject::getDirect): Use noValue. - (JSC::asObject): Added. - (JSC::JSValue::isObject): Use asValue. - (JSC::JSObject::get): Removed unneeded const_cast. - (JSC::JSObject::getPropertySlot): Use asObject. - (JSC::JSValue::get): Removed unneeded const_cast. - Use asValue, asCell, and asObject. - (JSC::JSValue::put): Ditto. - (JSC::JSObject::allocatePropertyStorageInline): Fixed spelling - of "oldPropertStorage". - - * kjs/JSString.cpp: - (JSC::JSString::getOwnPropertySlot): Use asObject. - - * kjs/JSString.h: - (JSC::asString): Added. - (JSC::JSValue::toThisJSString): Use asValue. - - * kjs/JSValue.h: Make PreferredPrimitiveType a top level enum - instead of a member of JSValue. Added an asValue function that - returns this. Removed overload of asCell for const. Use asValue - instead of getting right at this. - - * kjs/ObjectPrototype.cpp: - (JSC::objectProtoFuncIsPrototypeOf): Use asObject. - (JSC::objectProtoFuncDefineGetter): Ditto. - (JSC::objectProtoFuncDefineSetter): Ditto. - - * kjs/PropertySlot.h: - (JSC::PropertySlot::PropertySlot): Take a const JSValue* so the - callers don't have to worry about const. - (JSC::PropertySlot::clearBase): Use noValue. - (JSC::PropertySlot::clearValue): Ditto. - - * kjs/RegExpConstructor.cpp: - (JSC::regExpConstructorDollar1): Use asRegExpConstructor. - (JSC::regExpConstructorDollar2): Ditto. - (JSC::regExpConstructorDollar3): Ditto. - (JSC::regExpConstructorDollar4): Ditto. - (JSC::regExpConstructorDollar5): Ditto. - (JSC::regExpConstructorDollar6): Ditto. - (JSC::regExpConstructorDollar7): Ditto. - (JSC::regExpConstructorDollar8): Ditto. - (JSC::regExpConstructorDollar9): Ditto. - (JSC::regExpConstructorInput): Ditto. - (JSC::regExpConstructorMultiline): Ditto. - (JSC::regExpConstructorLastMatch): Ditto. - (JSC::regExpConstructorLastParen): Ditto. - (JSC::regExpConstructorLeftContext): Ditto. - (JSC::regExpConstructorRightContext): Ditto. - (JSC::setRegExpConstructorInput): Ditto. - (JSC::setRegExpConstructorMultiline): Ditto. - (JSC::constructRegExp): Use asObject. - - * kjs/RegExpConstructor.h: - (JSC::asRegExpConstructor): Added. - - * kjs/RegExpObject.cpp: - (JSC::regExpObjectGlobal): Use asRegExpObject. - (JSC::regExpObjectIgnoreCase): Ditto. - (JSC::regExpObjectMultiline): Ditto. - (JSC::regExpObjectSource): Ditto. - (JSC::regExpObjectLastIndex): Ditto. - (JSC::setRegExpObjectLastIndex): Ditto. - (JSC::callRegExpObject): Ditto. - - * kjs/RegExpObject.h: - (JSC::asRegExpObject): Added. - - * kjs/RegExpPrototype.cpp: - (JSC::regExpProtoFuncTest): Use asRegExpObject. - (JSC::regExpProtoFuncExec): Ditto. - (JSC::regExpProtoFuncCompile): Ditto. - (JSC::regExpProtoFuncToString): Ditto. - - * kjs/StringObject.h: - (JSC::StringObject::internalValue): Use asString. - (JSC::asStringObject): Added. - - * kjs/StringPrototype.cpp: - (JSC::stringProtoFuncReplace): Use asRegExpObject. - (JSC::stringProtoFuncToString): Ue asStringObject. - (JSC::stringProtoFuncMatch): Use asRegExpObject. - (JSC::stringProtoFuncSearch): Ditto. - (JSC::stringProtoFuncSplit): Ditto. - - * kjs/StructureID.cpp: - (JSC::StructureID::getEnumerablePropertyNames): Use asObject. - (JSC::StructureID::createCachedPrototypeChain): Ditto. - (JSC::StructureIDChain::StructureIDChain): Use asCell and asObject. - - * kjs/collector.h: - (JSC::Heap::isNumber): Removed null handling. This can only be called - on valid cells. - (JSC::Heap::cellBlock): Removed overload for const and non-const. - Whether the JSCell* is const or not really should have no effect on - whether you can modify the collector block it's in. - - * kjs/interpreter.cpp: - (JSC::Interpreter::evaluate): Use noValue and noObject. - - * kjs/nodes.cpp: - (JSC::FunctionCallResolveNode::emitCode): Use JSObject for the global - object rather than JSValue. - (JSC::PostfixResolveNode::emitCode): Ditto. - (JSC::PrefixResolveNode::emitCode): Ditto. - (JSC::ReadModifyResolveNode::emitCode): Ditto. - (JSC::AssignResolveNode::emitCode): Ditto. - - * kjs/operations.h: - (JSC::equalSlowCaseInline): Use asString, asCell, asNumberCell, - (JSC::strictEqualSlowCaseInline): Ditto. - -2008-10-18 Cameron Zwarich - - Reviewed by Oliver Hunt. - - Bug 21702: Special op_create_activation for the case where there are no named parameters - - - This is a 2.5% speedup on the V8 Raytrace benchmark and a 1.1% speedup - on the V8 Earley-Boyer benchmark. - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): - * VM/Machine.cpp: - (JSC::Machine::cti_op_create_arguments_no_params): - * VM/Machine.h: - * kjs/Arguments.h: - (JSC::Arguments::): - (JSC::Arguments::Arguments): - -2008-10-17 Maciej Stachowiak - - Reviewed by Cameron Zwarich. - - - in debug builds, alter the stack to avoid blowing out MallocStackLogging - - (In essence, while executing a CTI function we alter the return - address to jscGeneratedNativeCode so that a single consistent - function is on the stack instead of many random functions without - symbols.) - - * VM/CTI.h: - * VM/Machine.cpp: - (JSC::doSetReturnAddress): - (JSC::): - (JSC::StackHack::StackHack): - (JSC::StackHack::~StackHack): - (JSC::Machine::cti_op_convert_this): - (JSC::Machine::cti_op_end): - (JSC::Machine::cti_op_add): - (JSC::Machine::cti_op_pre_inc): - (JSC::Machine::cti_timeout_check): - (JSC::Machine::cti_register_file_check): - (JSC::Machine::cti_op_loop_if_less): - (JSC::Machine::cti_op_loop_if_lesseq): - (JSC::Machine::cti_op_new_object): - (JSC::Machine::cti_op_put_by_id): - (JSC::Machine::cti_op_put_by_id_second): - (JSC::Machine::cti_op_put_by_id_generic): - (JSC::Machine::cti_op_put_by_id_fail): - (JSC::Machine::cti_op_get_by_id): - (JSC::Machine::cti_op_get_by_id_second): - (JSC::Machine::cti_op_get_by_id_generic): - (JSC::Machine::cti_op_get_by_id_fail): - (JSC::Machine::cti_op_instanceof): - (JSC::Machine::cti_op_del_by_id): - (JSC::Machine::cti_op_mul): - (JSC::Machine::cti_op_new_func): - (JSC::Machine::cti_op_call_profiler): - (JSC::Machine::cti_op_call_JSFunction): - (JSC::Machine::cti_vm_lazyLinkCall): - (JSC::Machine::cti_vm_compile): - (JSC::Machine::cti_op_push_activation): - (JSC::Machine::cti_op_call_NotJSFunction): - (JSC::Machine::cti_op_create_arguments): - (JSC::Machine::cti_op_tear_off_activation): - (JSC::Machine::cti_op_tear_off_arguments): - (JSC::Machine::cti_op_ret_profiler): - (JSC::Machine::cti_op_ret_scopeChain): - (JSC::Machine::cti_op_new_array): - (JSC::Machine::cti_op_resolve): - (JSC::Machine::cti_op_construct_JSConstructFast): - (JSC::Machine::cti_op_construct_JSConstruct): - (JSC::Machine::cti_op_construct_NotJSConstruct): - (JSC::Machine::cti_op_get_by_val): - (JSC::Machine::cti_op_resolve_func): - (JSC::Machine::cti_op_sub): - (JSC::Machine::cti_op_put_by_val): - (JSC::Machine::cti_op_put_by_val_array): - (JSC::Machine::cti_op_lesseq): - (JSC::Machine::cti_op_loop_if_true): - (JSC::Machine::cti_op_negate): - (JSC::Machine::cti_op_resolve_base): - (JSC::Machine::cti_op_resolve_skip): - (JSC::Machine::cti_op_resolve_global): - (JSC::Machine::cti_op_div): - (JSC::Machine::cti_op_pre_dec): - (JSC::Machine::cti_op_jless): - (JSC::Machine::cti_op_not): - (JSC::Machine::cti_op_jtrue): - (JSC::Machine::cti_op_post_inc): - (JSC::Machine::cti_op_eq): - (JSC::Machine::cti_op_lshift): - (JSC::Machine::cti_op_bitand): - (JSC::Machine::cti_op_rshift): - (JSC::Machine::cti_op_bitnot): - (JSC::Machine::cti_op_resolve_with_base): - (JSC::Machine::cti_op_new_func_exp): - (JSC::Machine::cti_op_mod): - (JSC::Machine::cti_op_less): - (JSC::Machine::cti_op_neq): - (JSC::Machine::cti_op_post_dec): - (JSC::Machine::cti_op_urshift): - (JSC::Machine::cti_op_bitxor): - (JSC::Machine::cti_op_new_regexp): - (JSC::Machine::cti_op_bitor): - (JSC::Machine::cti_op_call_eval): - (JSC::Machine::cti_op_throw): - (JSC::Machine::cti_op_get_pnames): - (JSC::Machine::cti_op_next_pname): - (JSC::Machine::cti_op_push_scope): - (JSC::Machine::cti_op_pop_scope): - (JSC::Machine::cti_op_typeof): - (JSC::Machine::cti_op_is_undefined): - (JSC::Machine::cti_op_is_boolean): - (JSC::Machine::cti_op_is_number): - (JSC::Machine::cti_op_is_string): - (JSC::Machine::cti_op_is_object): - (JSC::Machine::cti_op_is_function): - (JSC::Machine::cti_op_stricteq): - (JSC::Machine::cti_op_nstricteq): - (JSC::Machine::cti_op_to_jsnumber): - (JSC::Machine::cti_op_in): - (JSC::Machine::cti_op_push_new_scope): - (JSC::Machine::cti_op_jmp_scopes): - (JSC::Machine::cti_op_put_by_index): - (JSC::Machine::cti_op_switch_imm): - (JSC::Machine::cti_op_switch_char): - (JSC::Machine::cti_op_switch_string): - (JSC::Machine::cti_op_del_by_val): - (JSC::Machine::cti_op_put_getter): - (JSC::Machine::cti_op_put_setter): - (JSC::Machine::cti_op_new_error): - (JSC::Machine::cti_op_debug): - (JSC::Machine::cti_vm_throw): - -2008-10-17 Gavin Barraclough - - Optimize op_call by allowing call sites to be directly linked to callees. - - For the hot path of op_call, CTI now generates a check (initially for an impossible - value), and the first time the call is executed we attempt to link the call directly - to the callee. We can currently only do so if the arity of the caller and callee - match. The (optimized) setup for the call on the hot path is linked directly to - the ctiCode for the callee, without indirection. - - Two forms of the slow case of the call are generated, the first will be executed the - first time the call is reached. As well as this path attempting to link the call to - a callee, it also relinks the slow case to a second slow case, which will not continue - to attempt relinking the call. (This policy could be changed in future, but for not - this is intended to prevent thrashing). - - If a callee that the caller has been linked to is garbage collected, then the link - in the caller's JIt code will be reset back to a value that cannot match - to prevent - any false positive matches. - - ~20% progression on deltablue & richards, >12% overall reduction in v8-tests - runtime, one or two percent progression on sunspider. - - Reviewed by Oliver Hunt. - - * VM/CTI.cpp: - (JSC::): - (JSC::CTI::emitNakedCall): - (JSC::unreachable): - (JSC::CTI::compileOpCallInitializeCallFrame): - (JSC::CTI::compileOpCallSetupArgs): - (JSC::CTI::compileOpCall): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - (JSC::CTI::privateCompile): - (JSC::CTI::unlinkCall): - (JSC::CTI::linkCall): - * VM/CTI.h: - * VM/CodeBlock.cpp: - (JSC::CodeBlock::~CodeBlock): - (JSC::CodeBlock::unlinkCallers): - (JSC::CodeBlock::derefStructureIDs): - * VM/CodeBlock.h: - (JSC::StructureStubInfo::StructureStubInfo): - (JSC::CallLinkInfo::CallLinkInfo): - (JSC::CodeBlock::addCaller): - (JSC::CodeBlock::removeCaller): - (JSC::CodeBlock::getStubInfo): - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::emitCall): - (JSC::CodeGenerator::emitConstruct): - * VM/Machine.cpp: - (JSC::Machine::cti_op_call_profiler): - (JSC::Machine::cti_op_call_JSFunction): - (JSC::Machine::cti_vm_lazyLinkCall): - (JSC::Machine::cti_op_construct_JSConstructFast): - (JSC::Machine::cti_op_construct_JSConstruct): - (JSC::Machine::cti_op_construct_NotJSConstruct): - * VM/Machine.h: - * kjs/JSFunction.cpp: - (JSC::JSFunction::~JSFunction): - * kjs/JSFunction.h: - * kjs/nodes.h: - (JSC::FunctionBodyNode::): - * masm/X86Assembler.h: - (JSC::X86Assembler::getDifferenceBetweenLabels): - -2008-10-17 Maciej Stachowiak - - Reviewed by Geoff Garen. - - - remove ASSERT that makes the leaks buildbot cry - - * kjs/JSFunction.cpp: - (JSC::JSFunction::JSFunction): - -2008-10-17 Maciej Stachowiak - - Reviewed by Cameron Zwarich - - - don't bother to do arguments tearoff when it will have no effect - - ~1% on v8 raytrace - - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::emitReturn): - -2008-10-17 Marco Barisione - - Reviewed by Sam Weinig. Landed by Jan Alonzo. - - https://bugs.webkit.org/show_bug.cgi?id=21603 - [GTK] Minor fixes to GOwnPtr - - * wtf/GOwnPtr.cpp: - (WTF::GError): - (WTF::GList): - (WTF::GCond): - (WTF::GMutex): - (WTF::GPatternSpec): - (WTF::GDir): - * wtf/GOwnPtr.h: - (WTF::freeOwnedGPtr): - (WTF::GOwnPtr::~GOwnPtr): - (WTF::GOwnPtr::outPtr): - (WTF::GOwnPtr::set): - (WTF::GOwnPtr::clear): - * wtf/Threading.h: - -2008-10-17 Maciej Stachowiak - - Reviewed by Cameron Zwarich. - - - speed up transitions that resize the property storage a fair bit - - ~3% speedup on v8 RayTrace benchmark, ~1% on DeltaBlue - - * VM/CTI.cpp: - (JSC::resizePropertyStorage): renamed from transitionObject, and reduced to just resize - the object's property storage with one inline call. - (JSC::CTI::privateCompilePutByIdTransition): Use a separate function for property storage - resize, but still do all the rest of the work in assembly in that case, and pass the known - compile-time constants of old and new size rather than structureIDs, saving a bunch of - redundant memory access. - * kjs/JSObject.cpp: - (JSC::JSObject::allocatePropertyStorage): Just call the inline version. - * kjs/JSObject.h: - (JSC::JSObject::allocatePropertyStorageInline): Inline version of allocatePropertyStorage - * masm/X86Assembler.h: - (JSC::X86Assembler::): - (JSC::X86Assembler::pushl_i32): Add code to assmeble push of a constant; code originally by Cameron Zwarich. - -2008-10-17 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Remove some C style casts. - - * masm/X86Assembler.h: - (JSC::JITCodeBuffer::putIntUnchecked): - (JSC::X86Assembler::link): - (JSC::X86Assembler::linkAbsoluteAddress): - (JSC::X86Assembler::getRelocatedAddress): - -2008-10-17 Cameron Zwarich - - Rubber-stamped by Maciej Stachowiak. - - Remove some C style casts. - - * VM/CTI.cpp: - (JSC::CTI::patchGetByIdSelf): - (JSC::CTI::patchPutByIdReplace): - * VM/Machine.cpp: - (JSC::Machine::tryCTICachePutByID): - (JSC::Machine::tryCTICacheGetByID): - (JSC::Machine::cti_op_put_by_id): - (JSC::Machine::cti_op_put_by_id_fail): - (JSC::Machine::cti_op_get_by_id): - (JSC::Machine::cti_op_get_by_id_fail): - -2008-10-17 Maciej Stachowiak - - Reviewed by Cameron Zwarich. - - - Avoid restoring the caller's 'r' value in op_ret - https://bugs.webkit.org/show_bug.cgi?id=21319 - - This patch stops writing the call frame at call and return points; - instead it does so immediately before any CTI call. - - 0.5% speedup or so on the v8 benchmark - - * VM/CTI.cpp: - (JSC::CTI::emitCTICall): - (JSC::CTI::compileOpCall): - (JSC::CTI::emitSlowScriptCheck): - (JSC::CTI::compileBinaryArithOpSlowCase): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - (JSC::CTI::privateCompile): - * VM/CTI.h: - -2008-10-17 Cameron Zwarich - - Reviewed by Sam Weinig. - - Make WREC require CTI because it won't actually compile otherwise. - - * wtf/Platform.h: - -2008-10-16 Maciej Stachowiak - - Reviewed by Geoff Garen. - - - fixed JavaScriptCore should not force building with gcc 4.0 - - use gcc 4.2 when building with Xcode 3.1 or newer on Leopard, even though this is not the default - - This time there is no performance regression; we can avoid having - to use the fastcall calling convention for CTI functions by using - varargs to prevent the compiler from moving things around on the - stack. - - * Configurations/DebugRelease.xcconfig: - * JavaScriptCore.xcodeproj/project.pbxproj: - * VM/CTI.cpp: - * VM/Machine.h: - * wtf/Platform.h: - -2008-10-16 Maciej Stachowiak - - Reviewed by Oliver Hunt. - - - fix for REGRESSION: r37631 causing crashes on buildbot - https://bugs.webkit.org/show_bug.cgi?id=21682 - - * kjs/collector.cpp: - (JSC::Heap::collect): Avoid crashing when a GC occurs while no global objects are live. - -2008-10-16 Sam Weinig - - Reviewed by Maciej Stachowiak. - - Fix for https://bugs.webkit.org/show_bug.cgi?id=21683 - Don't create intermediate StructureIDs for builtin objects - - First step in reduce number of StructureIDs created when initializing the - JSGlobalObject. - - - In order to avoid creating the intermediate StructureIDs use the new putDirectWithoutTransition - and putDirectFunctionWithoutTransition to add properties to JSObjects without transitioning - the StructureID. This patch just implements this strategy for ObjectPrototype but alone - reduces the number of StructureIDs create for about:blank by 10, from 142 to 132. - - * kjs/JSGlobalObject.cpp: - (JSC::JSGlobalObject::reset): - * kjs/JSObject.cpp: - (JSC::JSObject::putDirectFunctionWithoutTransition): - * kjs/JSObject.h: - (JSC::JSObject::putDirectWithoutTransition): - * kjs/ObjectPrototype.cpp: - (JSC::ObjectPrototype::ObjectPrototype): - * kjs/ObjectPrototype.h: - * kjs/StructureID.cpp: - (JSC::StructureID::addPropertyWithoutTransition): - * kjs/StructureID.h: - -2008-10-16 Maciej Stachowiak - - Reviewed by Cameron Zwarich. - - - fix for: REGRESSION: over 100 StructureIDs leak loading about:blank (result of fix for bug 21633) - - Apparent slight progression (< 0.5%) on v8 benchmarks and SunSpider. - - * kjs/StructureID.cpp: - (JSC::StructureID::~StructureID): Don't deref this object's parent's pointer to - itself from the destructor; that doesn't even make sense. - (JSC::StructureID::addPropertyTransition): Don't refer the single transition; - the rule is that parent StructureIDs are ref'd but child ones are not. Refing - the child creates a cycle. - -2008-10-15 Alexey Proskuryakov - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=21609 - Make MessagePorts protect their peers across heaps - - * JavaScriptCore.exp: - * kjs/JSGlobalObject.cpp: - (JSC::JSGlobalObject::markCrossHeapDependentObjects): - * kjs/JSGlobalObject.h: - * kjs/collector.cpp: - (JSC::Heap::collect): - Before GC sweep phase, a function supplied by global object is now called for all global - objects in the heap, making it possible to implement cross-heap dependencies. - -2008-10-15 Alexey Proskuryakov - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=21610 - run-webkit-threads --threaded crashes in StructureID destructor - - * kjs/StructureID.cpp: - (JSC::StructureID::StructureID): - (JSC::StructureID::~StructureID): - Protect access to a static (debug-only) HashSet with a lock. - -2008-10-15 Sam Weinig - - Reviewed by Goeffrey Garen. - - Add function to dump statistics for StructureIDs. - - * kjs/StructureID.cpp: - (JSC::StructureID::dumpStatistics): - (JSC::StructureID::StructureID): - (JSC::StructureID::~StructureID): - * kjs/StructureID.h: - -2008-10-15 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Bug 21633: Avoid using a HashMap when there is only a single transition - - - This is a 0.8% speedup on SunSpider and between a 0.5% and 1.0% speedup - on the V8 benchmark suite, depending on which harness we use. It will - also slightly reduce the memory footprint of a StructureID. - - * kjs/StructureID.cpp: - (JSC::StructureID::StructureID): - (JSC::StructureID::~StructureID): - (JSC::StructureID::addPropertyTransition): - * kjs/StructureID.h: - (JSC::StructureID::): - -2008-10-15 Csaba Osztrogonac - - Reviewed by Geoffrey Garen. - - 1.40% speedup on SunSpider, 1.44% speedup on V8. (Linux) - - No change on Mac. - - * VM/Machine.cpp: - (JSC::fastIsNumber): ALWAYS_INLINE modifier added. - -2008-10-15 Geoffrey Garen - - Reviewed by Cameron Zwarich. - - Fixed https://bugs.webkit.org/show_bug.cgi?id=21345 - Start the debugger without reloading the inspected page - - * JavaScriptCore.exp: New symbols. - * JavaScriptCore.xcodeproj/project.pbxproj: New files. - - * VM/CodeBlock.h: - (JSC::EvalCodeCache::get): Updated for tweak to parsing API. - - * kjs/CollectorHeapIterator.h: Added. An iterator for the object heap, - which we use to find all the live functions and recompile them. - - * kjs/DebuggerCallFrame.cpp: - (JSC::DebuggerCallFrame::evaluate): Updated for tweak to parsing API. - - * kjs/FunctionConstructor.cpp: - (JSC::constructFunction): Updated for tweak to parsing API. - - * kjs/JSFunction.cpp: - (JSC::JSFunction::JSFunction): Try to validate our SourceCode in debug - builds by ASSERTing that it's syntactically valid. This doesn't catch - all SourceCode bugs, but it catches a lot of them. - - * kjs/JSGlobalObjectFunctions.cpp: - (JSC::globalFuncEval): Updated for tweak to parsing API. - - * kjs/Parser.cpp: - (JSC::Parser::parse): - * kjs/Parser.h: - (JSC::Parser::parse): Tweaked the parser to make it possible to parse - without an ExecState, and to allow the client to specify a debugger to - notify (or not) about the source we parse. This allows the inspector - to recompile even though no JavaScript is executing, then notify the - debugger about all source code when it's done. - - * kjs/Shell.cpp: - (prettyPrintScript): Updated for tweak to parsing API. - - * kjs/SourceRange.h: - (JSC::SourceCode::isNull): Added to help with ASSERTs. - - * kjs/collector.cpp: - (JSC::Heap::heapAllocate): - (JSC::Heap::sweep): - (JSC::Heap::primaryHeapBegin): - (JSC::Heap::primaryHeapEnd): - * kjs/collector.h: - (JSC::): Moved a bunch of declarations around to enable compilation of - CollectorHeapIterator. - - * kjs/interpreter.cpp: - (JSC::Interpreter::checkSyntax): - (JSC::Interpreter::evaluate): Updated for tweak to parsing API. - - * kjs/lexer.h: - (JSC::Lexer::sourceCode): BUG FIX: Calculate SourceCode ranges relative - to the SourceCode range in which we're lexing, otherwise nested functions - that are compiled individually get SourceCode ranges that don't reflect - their nesting. - - * kjs/nodes.cpp: - (JSC::FunctionBodyNode::FunctionBodyNode): - (JSC::FunctionBodyNode::finishParsing): - (JSC::FunctionBodyNode::create): - (JSC::FunctionBodyNode::copyParameters): - * kjs/nodes.h: - (JSC::ScopeNode::setSource): - (JSC::FunctionBodyNode::parameterCount): Added some helper functions for - copying one FunctionBodyNode's parameters to another. The recompiler uses - these when calling "finishParsing". - -2008-10-15 Joerg Bornemann - - Reviewed by Darin Adler. - - - part of https://bugs.webkit.org/show_bug.cgi?id=20746 - Fix compilation on Windows CE. - - str(n)icmp, strdup and vsnprintf are not available on Windows CE, - they are called _str(n)icmp, etc. instead - - * wtf/StringExtras.h: Added inline function implementations. - -2008-10-15 Gabor Loki - - Reviewed by Cameron Zwarich. - - - Use simple uint32_t multiplication on op_mul if both operands are - immediate number and they are between zero and 0x7FFF. - - * VM/Machine.cpp: - (JSC::Machine::privateExecute): - -2008-10-09 Darin Fisher - - Reviewed by Sam Weinig. - - Make pan scrolling a platform configurable option. - https://bugs.webkit.org/show_bug.cgi?id=21515 - - * wtf/Platform.h: Add ENABLE_PAN_SCROLLING - -2008-10-14 Maciej Stachowiak - - Rubber stamped by Sam Weinig. - - - revert r37572 and r37581 for now - - Turns out GCC 4.2 is still a (small) regression, we'll have to do - more work to turn it on. - - * Configurations/DebugRelease.xcconfig: - * JavaScriptCore.xcodeproj/project.pbxproj: - * VM/CTI.cpp: - * VM/CTI.h: - * VM/Machine.cpp: - (JSC::Machine::cti_op_convert_this): - (JSC::Machine::cti_op_end): - (JSC::Machine::cti_op_add): - (JSC::Machine::cti_op_pre_inc): - (JSC::Machine::cti_timeout_check): - (JSC::Machine::cti_register_file_check): - (JSC::Machine::cti_op_loop_if_less): - (JSC::Machine::cti_op_loop_if_lesseq): - (JSC::Machine::cti_op_new_object): - (JSC::Machine::cti_op_put_by_id): - (JSC::Machine::cti_op_put_by_id_second): - (JSC::Machine::cti_op_put_by_id_generic): - (JSC::Machine::cti_op_put_by_id_fail): - (JSC::Machine::cti_op_get_by_id): - (JSC::Machine::cti_op_get_by_id_second): - (JSC::Machine::cti_op_get_by_id_generic): - (JSC::Machine::cti_op_get_by_id_fail): - (JSC::Machine::cti_op_instanceof): - (JSC::Machine::cti_op_del_by_id): - (JSC::Machine::cti_op_mul): - (JSC::Machine::cti_op_new_func): - (JSC::Machine::cti_op_call_JSFunction): - (JSC::Machine::cti_vm_compile): - (JSC::Machine::cti_op_push_activation): - (JSC::Machine::cti_op_call_NotJSFunction): - (JSC::Machine::cti_op_create_arguments): - (JSC::Machine::cti_op_tear_off_activation): - (JSC::Machine::cti_op_tear_off_arguments): - (JSC::Machine::cti_op_ret_profiler): - (JSC::Machine::cti_op_ret_scopeChain): - (JSC::Machine::cti_op_new_array): - (JSC::Machine::cti_op_resolve): - (JSC::Machine::cti_op_construct_JSConstruct): - (JSC::Machine::cti_op_construct_NotJSConstruct): - (JSC::Machine::cti_op_get_by_val): - (JSC::Machine::cti_op_resolve_func): - (JSC::Machine::cti_op_sub): - (JSC::Machine::cti_op_put_by_val): - (JSC::Machine::cti_op_put_by_val_array): - (JSC::Machine::cti_op_lesseq): - (JSC::Machine::cti_op_loop_if_true): - (JSC::Machine::cti_op_negate): - (JSC::Machine::cti_op_resolve_base): - (JSC::Machine::cti_op_resolve_skip): - (JSC::Machine::cti_op_resolve_global): - (JSC::Machine::cti_op_div): - (JSC::Machine::cti_op_pre_dec): - (JSC::Machine::cti_op_jless): - (JSC::Machine::cti_op_not): - (JSC::Machine::cti_op_jtrue): - (JSC::Machine::cti_op_post_inc): - (JSC::Machine::cti_op_eq): - (JSC::Machine::cti_op_lshift): - (JSC::Machine::cti_op_bitand): - (JSC::Machine::cti_op_rshift): - (JSC::Machine::cti_op_bitnot): - (JSC::Machine::cti_op_resolve_with_base): - (JSC::Machine::cti_op_new_func_exp): - (JSC::Machine::cti_op_mod): - (JSC::Machine::cti_op_less): - (JSC::Machine::cti_op_neq): - (JSC::Machine::cti_op_post_dec): - (JSC::Machine::cti_op_urshift): - (JSC::Machine::cti_op_bitxor): - (JSC::Machine::cti_op_new_regexp): - (JSC::Machine::cti_op_bitor): - (JSC::Machine::cti_op_call_eval): - (JSC::Machine::cti_op_throw): - (JSC::Machine::cti_op_get_pnames): - (JSC::Machine::cti_op_next_pname): - (JSC::Machine::cti_op_push_scope): - (JSC::Machine::cti_op_pop_scope): - (JSC::Machine::cti_op_typeof): - (JSC::Machine::cti_op_is_undefined): - (JSC::Machine::cti_op_is_boolean): - (JSC::Machine::cti_op_is_number): - (JSC::Machine::cti_op_is_string): - (JSC::Machine::cti_op_is_object): - (JSC::Machine::cti_op_is_function): - (JSC::Machine::cti_op_stricteq): - (JSC::Machine::cti_op_nstricteq): - (JSC::Machine::cti_op_to_jsnumber): - (JSC::Machine::cti_op_in): - (JSC::Machine::cti_op_push_new_scope): - (JSC::Machine::cti_op_jmp_scopes): - (JSC::Machine::cti_op_put_by_index): - (JSC::Machine::cti_op_switch_imm): - (JSC::Machine::cti_op_switch_char): - (JSC::Machine::cti_op_switch_string): - (JSC::Machine::cti_op_del_by_val): - (JSC::Machine::cti_op_put_getter): - (JSC::Machine::cti_op_put_setter): - (JSC::Machine::cti_op_new_error): - (JSC::Machine::cti_op_debug): - (JSC::Machine::cti_vm_throw): - * VM/Machine.h: - * masm/X86Assembler.h: - (JSC::X86Assembler::emitRestoreArgumentReference): - (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline): - * wtf/Platform.h: - -2008-10-14 Alexey Proskuryakov - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=20256 - Array.push and other standard methods disappear - - * kjs/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): - (JSC::JSGlobalData::~JSGlobalData): - Don't use static hash tables even on platforms that don't enable JSC_MULTIPLE_THREADS - - these tables reference IdentifierTable, which is always per-GlobalData. - -2008-10-14 Maciej Stachowiak - - Reviewed by Cameron Zwarich. - - - always use CTI_ARGUMENTS and CTI_ARGUMENTS_FASTCALL - - This is a small regression for GCC 4.0, but simplifies the code - for future improvements and lets us focus on GCC 4.2+ and MSVC. - - * VM/CTI.cpp: - * VM/CTI.h: - * VM/Machine.cpp: - (JSC::Machine::cti_op_convert_this): - (JSC::Machine::cti_op_end): - (JSC::Machine::cti_op_add): - (JSC::Machine::cti_op_pre_inc): - (JSC::Machine::cti_timeout_check): - (JSC::Machine::cti_register_file_check): - (JSC::Machine::cti_op_loop_if_less): - (JSC::Machine::cti_op_loop_if_lesseq): - (JSC::Machine::cti_op_new_object): - (JSC::Machine::cti_op_put_by_id): - (JSC::Machine::cti_op_put_by_id_second): - (JSC::Machine::cti_op_put_by_id_generic): - (JSC::Machine::cti_op_put_by_id_fail): - (JSC::Machine::cti_op_get_by_id): - (JSC::Machine::cti_op_get_by_id_second): - (JSC::Machine::cti_op_get_by_id_generic): - (JSC::Machine::cti_op_get_by_id_fail): - (JSC::Machine::cti_op_instanceof): - (JSC::Machine::cti_op_del_by_id): - (JSC::Machine::cti_op_mul): - (JSC::Machine::cti_op_new_func): - (JSC::Machine::cti_op_call_JSFunction): - (JSC::Machine::cti_vm_compile): - (JSC::Machine::cti_op_push_activation): - (JSC::Machine::cti_op_call_NotJSFunction): - (JSC::Machine::cti_op_create_arguments): - (JSC::Machine::cti_op_tear_off_activation): - (JSC::Machine::cti_op_tear_off_arguments): - (JSC::Machine::cti_op_ret_profiler): - (JSC::Machine::cti_op_ret_scopeChain): - (JSC::Machine::cti_op_new_array): - (JSC::Machine::cti_op_resolve): - (JSC::Machine::cti_op_construct_JSConstruct): - (JSC::Machine::cti_op_construct_NotJSConstruct): - (JSC::Machine::cti_op_get_by_val): - (JSC::Machine::cti_op_resolve_func): - (JSC::Machine::cti_op_sub): - (JSC::Machine::cti_op_put_by_val): - (JSC::Machine::cti_op_put_by_val_array): - (JSC::Machine::cti_op_lesseq): - (JSC::Machine::cti_op_loop_if_true): - (JSC::Machine::cti_op_negate): - (JSC::Machine::cti_op_resolve_base): - (JSC::Machine::cti_op_resolve_skip): - (JSC::Machine::cti_op_resolve_global): - (JSC::Machine::cti_op_div): - (JSC::Machine::cti_op_pre_dec): - (JSC::Machine::cti_op_jless): - (JSC::Machine::cti_op_not): - (JSC::Machine::cti_op_jtrue): - (JSC::Machine::cti_op_post_inc): - (JSC::Machine::cti_op_eq): - (JSC::Machine::cti_op_lshift): - (JSC::Machine::cti_op_bitand): - (JSC::Machine::cti_op_rshift): - (JSC::Machine::cti_op_bitnot): - (JSC::Machine::cti_op_resolve_with_base): - (JSC::Machine::cti_op_new_func_exp): - (JSC::Machine::cti_op_mod): - (JSC::Machine::cti_op_less): - (JSC::Machine::cti_op_neq): - (JSC::Machine::cti_op_post_dec): - (JSC::Machine::cti_op_urshift): - (JSC::Machine::cti_op_bitxor): - (JSC::Machine::cti_op_new_regexp): - (JSC::Machine::cti_op_bitor): - (JSC::Machine::cti_op_call_eval): - (JSC::Machine::cti_op_throw): - (JSC::Machine::cti_op_get_pnames): - (JSC::Machine::cti_op_next_pname): - (JSC::Machine::cti_op_push_scope): - (JSC::Machine::cti_op_pop_scope): - (JSC::Machine::cti_op_typeof): - (JSC::Machine::cti_op_is_undefined): - (JSC::Machine::cti_op_is_boolean): - (JSC::Machine::cti_op_is_number): - (JSC::Machine::cti_op_is_string): - (JSC::Machine::cti_op_is_object): - (JSC::Machine::cti_op_is_function): - (JSC::Machine::cti_op_stricteq): - (JSC::Machine::cti_op_nstricteq): - (JSC::Machine::cti_op_to_jsnumber): - (JSC::Machine::cti_op_in): - (JSC::Machine::cti_op_push_new_scope): - (JSC::Machine::cti_op_jmp_scopes): - (JSC::Machine::cti_op_put_by_index): - (JSC::Machine::cti_op_switch_imm): - (JSC::Machine::cti_op_switch_char): - (JSC::Machine::cti_op_switch_string): - (JSC::Machine::cti_op_del_by_val): - (JSC::Machine::cti_op_put_getter): - (JSC::Machine::cti_op_put_setter): - (JSC::Machine::cti_op_new_error): - (JSC::Machine::cti_op_debug): - (JSC::Machine::cti_vm_throw): - * VM/Machine.h: - * masm/X86Assembler.h: - (JSC::X86Assembler::emitRestoreArgumentReference): - (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline): - * wtf/Platform.h: - -2008-10-13 Maciej Stachowiak - - Reviewed by Cameron Zwarich. - - - make Machine::getArgumentsData an Arguments method and inline it - - ~2% on v8 raytrace - - * VM/Machine.cpp: - * kjs/Arguments.h: - (JSC::Machine::getArgumentsData): - -2008-10-13 Alp Toker - - Fix autotools dist build target by listing recently added header - files only. Not reviewed. - - * GNUmakefile.am: - -2008-10-13 Maciej Stachowiak - - Rubber stamped by Mark Rowe. - - - fixed JavaScriptCore should not force building with gcc 4.0 - - use gcc 4.2 when building with Xcode 3.1 or newer on Leopard, even though this is not the default - - * Configurations/DebugRelease.xcconfig: - * JavaScriptCore.xcodeproj/project.pbxproj: - -2008-10-13 Cameron Zwarich - - Reviewed by Geoff Garen. - - Bug 21541: Move RegisterFile growth check to callee - - - Move the RegisterFile growth check to the callee in the common case, - where some of the information is known statically at JIT time. There is - still a check in the caller in the case where the caller provides too - few arguments. - - This is a 2.1% speedup on the V8 benchmark, including a 5.1% speedup on - the Richards benchmark, a 4.1% speedup on the DeltaBlue benchmark, and a - 1.4% speedup on the Earley-Boyer benchmark. It is also a 0.5% speedup on - SunSpider. - - * VM/CTI.cpp: - (JSC::CTI::privateCompile): - * VM/Machine.cpp: - (JSC::Machine::cti_register_file_check): - (JSC::Machine::cti_op_call_JSFunction): - (JSC::Machine::cti_op_construct_JSConstruct): - * VM/Machine.h: - * VM/RegisterFile.h: - * masm/X86Assembler.h: - (JSC::X86Assembler::): - (JSC::X86Assembler::cmpl_mr): - (JSC::X86Assembler::emitUnlinkedJg): - -2008-10-13 Sam Weinig - - Reviewed by Dan Bernstein. - - Fix for https://bugs.webkit.org/show_bug.cgi?id=21577 - 5 false positive StructureID leaks - - - Add leak ignore set to StructureID to selectively ignore leaking some StructureIDs. - - Add create method to JSGlolalData to be used when the data will be intentionally - leaked and ignore all leaks caused the StructureIDs stored in it. - - * JavaScriptCore.exp: - * kjs/JSGlobalData.cpp: - (JSC::JSGlobalData::createLeaked): - * kjs/JSGlobalData.h: - * kjs/StructureID.cpp: - (JSC::StructureID::StructureID): - (JSC::StructureID::~StructureID): - (JSC::StructureID::startIgnoringLeaks): - (JSC::StructureID::stopIgnoringLeaks): - * kjs/StructureID.h: - -2008-10-13 Marco Barisione - - Reviewed by Darin Adler. Landed by Jan Alonzo. - - WebKit GTK Port needs a smartpointer to handle g_free (GFreePtr?) - http://bugs.webkit.org/show_bug.cgi?id=20483 - - Add a GOwnPtr smart pointer (similar to OwnPtr) to handle memory - allocated by GLib and start the conversion to use it. - - * GNUmakefile.am: - * wtf/GOwnPtr.cpp: Added. - (WTF::GError): - (WTF::GList): - (WTF::GCond): - (WTF::GMutex): - (WTF::GPatternSpec): - (WTF::GDir): - * wtf/GOwnPtr.h: Added. - (WTF::freeOwnedPtr): - (WTF::GOwnPtr::GOwnPtr): - (WTF::GOwnPtr::~GOwnPtr): - (WTF::GOwnPtr::get): - (WTF::GOwnPtr::release): - (WTF::GOwnPtr::rawPtr): - (WTF::GOwnPtr::set): - (WTF::GOwnPtr::clear): - (WTF::GOwnPtr::operator*): - (WTF::GOwnPtr::operator->): - (WTF::GOwnPtr::operator!): - (WTF::GOwnPtr::operator UnspecifiedBoolType): - (WTF::GOwnPtr::swap): - (WTF::swap): - (WTF::operator==): - (WTF::operator!=): - (WTF::getPtr): - * wtf/Threading.h: - * wtf/ThreadingGtk.cpp: - (WTF::Mutex::~Mutex): - (WTF::Mutex::lock): - (WTF::Mutex::tryLock): - (WTF::Mutex::unlock): - (WTF::ThreadCondition::~ThreadCondition): - (WTF::ThreadCondition::wait): - (WTF::ThreadCondition::timedWait): - (WTF::ThreadCondition::signal): - (WTF::ThreadCondition::broadcast): - -2008-10-12 Gabriella Toth - - Reviewed by Darin Adler. - - - part of https://bugs.webkit.org/show_bug.cgi?id=21055 - Bug 21055: not invoked functions - - * kjs/nodes.cpp: Deleted a function that is not invoked: - statementListInitializeVariableAccessStack. - -2008-10-12 Darin Adler - - Reviewed by Sam Weinig. - - * wtf/unicode/icu/UnicodeIcu.h: Fixed indentation to match WebKit coding style. - * wtf/unicode/qt4/UnicodeQt4.h: Ditto. - -2008-10-12 Darin Adler - - Reviewed by Sam Weinig. - - - https://bugs.webkit.org/show_bug.cgi?id=21556 - Bug 21556: non-ASCII digits are allowed in places where only ASCII should be - - * wtf/unicode/icu/UnicodeIcu.h: Removed isDigit, digitValue, and isFormatChar. - * wtf/unicode/qt4/UnicodeQt4.h: Ditto. - -2008-10-12 Anders Carlsson - - Reviewed by Darin Adler. - - Make the append method that takes a Vector more strict - it now requires the elements - of the vector to be appended same type as the elements of the Vector they're being appended to. - - This would cause problems when dealing with Vectors containing other Vectors. - - * wtf/Vector.h: - (WTF::::append): - -2008-10-11 Cameron Zwarich - - Reviewed by Sam Weinig. - - Clean up RegExpMatchesArray.h to match our coding style. - - * kjs/RegExpMatchesArray.h: - (JSC::RegExpMatchesArray::getOwnPropertySlot): - (JSC::RegExpMatchesArray::put): - (JSC::RegExpMatchesArray::deleteProperty): - (JSC::RegExpMatchesArray::getPropertyNames): - -2008-10-11 Cameron Zwarich - - Reviewed by Sam Weinig. - - Bug 21525: 55 StructureID leaks on Wikitravel's main page - - - Bug 21533: Simple JavaScript code leaks StructureIDs - - - StructureID::getEnumerablePropertyNames() ends up calling back to itself - via JSObject::getPropertyNames(), which causes the PropertyNameArray to - be cached twice. This leads to a memory leak in almost every use of - JSObject::getPropertyNames() on an object. The fix here is based on a - suggestion of Sam Weinig. - - This patch also fixes every StructureID leaks that occurs while running - the Mozilla MemBuster test. - - * kjs/PropertyNameArray.h: - (JSC::PropertyNameArray::PropertyNameArray): - (JSC::PropertyNameArray::setCacheable): - (JSC::PropertyNameArray::cacheable): - * kjs/StructureID.cpp: - (JSC::StructureID::getEnumerablePropertyNames): - -2008-10-10 Oliver Hunt - - Reviewed by Cameron Zwarich. - - Use fastcall calling convention on GCC > 4.0 - - Results in a 2-3% improvement in GCC 4.2 performance, so - that it is no longer a regression vs. GCC 4.0 - - * VM/CTI.cpp: - * VM/Machine.h: - * wtf/Platform.h: - -2008-10-10 Sam Weinig - - Reviewed by Darin Adler. - - - Add a workaround for a bug in ceil in Darwin libc. - - Remove old workarounds for JS math functions that are not needed - anymore. - - The math functions are heavily tested by fast/js/math.html. - - * kjs/MathObject.cpp: - (JSC::mathProtoFuncAbs): Remove workaround. - (JSC::mathProtoFuncCeil): Ditto. - (JSC::mathProtoFuncFloor): Ditto. - * wtf/MathExtras.h: - (wtf_ceil): Add ceil workaround for darwin. - -2008-10-10 Sam Weinig - - Reviewed by Darin Adler - - Add Assertions to JSObject constructor. - - * kjs/JSObject.h: - (JSC::JSObject::JSObject): - -2008-10-10 Sam Weinig - - Reviewed by Cameron Zwarich. - - Remove now unused m_getterSetterFlag variable from PropertyMap. - - * kjs/PropertyMap.cpp: - (JSC::PropertyMap::operator=): - * kjs/PropertyMap.h: - (JSC::PropertyMap::PropertyMap): - -2008-10-09 Sam Weinig - - Reviewed by Maciej Stachowiak. - - Add leaks checking to StructureID. - - * kjs/StructureID.cpp: - (JSC::StructureID::StructureID): - (JSC::StructureID::~StructureID): - -2008-10-09 Alp Toker - - Reviewed by Mark Rowe. - - https://bugs.webkit.org/show_bug.cgi?id=20760 - Implement support for x86 Linux in CTI - - Prepare to enable CTI/WREC on supported architectures. - - Make it possible to use the CTI_ARGUMENT workaround with GCC as well - as MSVC by fixing some preprocessor conditionals. - - Note that CTI/WREC no longer requires CTI_ARGUMENT on Linux so we - don't actually enable it except when building with MSVC. GCC on Win32 - remains untested. - - Adapt inline ASM code to use the global symbol underscore prefix only - on Darwin and to call the properly mangled Machine::cti_vm_throw - symbol name depending on CTI_ARGUMENT. - - Also avoid global inclusion of the JIT infrastructure headers - throughout WebCore and WebKit causing recompilation of about ~1500 - source files after modification to X86Assembler.h, CTI.h, WREC.h, - which are only used deep inside JavaScriptCore. - - * GNUmakefile.am: - * VM/CTI.cpp: - * VM/CTI.h: - * VM/Machine.cpp: - * VM/Machine.h: - * kjs/regexp.cpp: - (JSC::RegExp::RegExp): - (JSC::RegExp::~RegExp): - (JSC::RegExp::match): - * kjs/regexp.h: - * masm/X86Assembler.h: - (JSC::X86Assembler::emitConvertToFastCall): - (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline): - (JSC::X86Assembler::emitRestoreArgumentReference): - -2008-10-09 Gavin Barraclough - - Reviewed by Cameron Zwarich. - - Fix for bug #21160, x=0;1/(x*-1) == -Infinity - - * ChangeLog: - * VM/CTI.cpp: - (JSC::CTI::emitFastArithDeTagImmediate): - (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero): - (JSC::CTI::compileBinaryArithOp): - (JSC::CTI::compileBinaryArithOpSlowCase): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - * VM/CTI.h: - * masm/X86Assembler.h: - (JSC::X86Assembler::): - (JSC::X86Assembler::emitUnlinkedJs): - -2008-10-09 Cameron Zwarich - - Reviewed by Oliver Hunt. - - Bug 21459: REGRESSION (r37324): Safari crashes inside JavaScriptCore while browsing hulu.com - - - After r37324, an Arguments object does not mark an associated activation - object. This change was made because Arguments no longer directly used - the activation object in any way. However, if an activation is torn off, - then the backing store of Arguments becomes the register array of the - activation object. Arguments directly marks all of the arguments, but - the activation object is being collected, which causes its register - array to be freed and new memory to be allocated in its place. - - Unfortunately, it does not seem possible to reproduce this issue in a - layout test. - - * kjs/Arguments.cpp: - (JSC::Arguments::mark): - * kjs/Arguments.h: - (JSC::Arguments::setActivation): - (JSC::Arguments::Arguments): - (JSC::JSActivation::copyRegisters): - -2008-10-09 Ariya Hidayat - - Reviewed by Simon. - - Build fix for MinGW. - - * wtf/AlwaysInline.h: - -2008-10-08 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Bug 21497: REGRESSION (r37433): Bytecode JSC tests are severely broken - - - Fix a typo in r37433 that causes the failure of a large number of JSC - tests with the bytecode interpreter enabled. - - * VM/Machine.cpp: - (JSC::Machine::privateExecute): - -2008-10-08 Mark Rowe - - Windows build fix. - - * VM/CTI.cpp: - (JSC::): Update type of argument to ctiTrampoline. - -2008-10-08 Darin Adler - - Reviewed by Cameron Zwarich. - - - https://bugs.webkit.org/show_bug.cgi?id=21403 - Bug 21403: use new CallFrame class rather than Register* for call frame manipulation - - Add CallFrame as a synonym for ExecState. Arguably, some day we should switch every - client over to the new name. - - Use CallFrame* consistently rather than Register* or ExecState* in low-level code such - as Machine.cpp and CTI.cpp. Similarly, use callFrame rather than r as its name and use - accessor functions to get at things in the frame. - - Eliminate other uses of ExecState* that aren't needed, replacing in some cases with - JSGlobalData* and in other cases eliminating them entirely. - - * API/JSObjectRef.cpp: - (JSObjectMakeFunctionWithCallback): - (JSObjectMakeFunction): - (JSObjectHasProperty): - (JSObjectGetProperty): - (JSObjectSetProperty): - (JSObjectDeleteProperty): - * API/OpaqueJSString.cpp: - * API/OpaqueJSString.h: - * VM/CTI.cpp: - (JSC::CTI::getConstant): - (JSC::CTI::emitGetArg): - (JSC::CTI::emitGetPutArg): - (JSC::CTI::getConstantImmediateNumericArg): - (JSC::CTI::printOpcodeOperandTypes): - (JSC::CTI::CTI): - (JSC::CTI::compileOpCall): - (JSC::CTI::compileBinaryArithOp): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompile): - (JSC::CTI::privateCompileGetByIdProto): - (JSC::CTI::privateCompileGetByIdChain): - (JSC::CTI::compileRegExp): - * VM/CTI.h: - * VM/CodeBlock.h: - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::emitEqualityOp): - (JSC::CodeGenerator::emitLoad): - (JSC::CodeGenerator::emitUnexpectedLoad): - (JSC::CodeGenerator::emitConstruct): - * VM/CodeGenerator.h: - * VM/Machine.cpp: - (JSC::jsLess): - (JSC::jsLessEq): - (JSC::jsAddSlowCase): - (JSC::jsAdd): - (JSC::jsTypeStringForValue): - (JSC::Machine::resolve): - (JSC::Machine::resolveSkip): - (JSC::Machine::resolveGlobal): - (JSC::inlineResolveBase): - (JSC::Machine::resolveBase): - (JSC::Machine::resolveBaseAndProperty): - (JSC::Machine::resolveBaseAndFunc): - (JSC::Machine::slideRegisterWindowForCall): - (JSC::isNotObject): - (JSC::Machine::callEval): - (JSC::Machine::dumpCallFrame): - (JSC::Machine::dumpRegisters): - (JSC::Machine::unwindCallFrame): - (JSC::Machine::throwException): - (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): - (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope): - (JSC::Machine::execute): - (JSC::Machine::debug): - (JSC::Machine::createExceptionScope): - (JSC::cachePrototypeChain): - (JSC::Machine::tryCachePutByID): - (JSC::Machine::tryCacheGetByID): - (JSC::Machine::privateExecute): - (JSC::Machine::retrieveArguments): - (JSC::Machine::retrieveCaller): - (JSC::Machine::retrieveLastCaller): - (JSC::Machine::findFunctionCallFrame): - (JSC::Machine::getArgumentsData): - (JSC::Machine::tryCTICachePutByID): - (JSC::Machine::getCTIArrayLengthTrampoline): - (JSC::Machine::getCTIStringLengthTrampoline): - (JSC::Machine::tryCTICacheGetByID): - (JSC::Machine::cti_op_convert_this): - (JSC::Machine::cti_op_end): - (JSC::Machine::cti_op_add): - (JSC::Machine::cti_op_pre_inc): - (JSC::Machine::cti_timeout_check): - (JSC::Machine::cti_op_loop_if_less): - (JSC::Machine::cti_op_loop_if_lesseq): - (JSC::Machine::cti_op_new_object): - (JSC::Machine::cti_op_put_by_id): - (JSC::Machine::cti_op_put_by_id_second): - (JSC::Machine::cti_op_put_by_id_generic): - (JSC::Machine::cti_op_put_by_id_fail): - (JSC::Machine::cti_op_get_by_id): - (JSC::Machine::cti_op_get_by_id_second): - (JSC::Machine::cti_op_get_by_id_generic): - (JSC::Machine::cti_op_get_by_id_fail): - (JSC::Machine::cti_op_instanceof): - (JSC::Machine::cti_op_del_by_id): - (JSC::Machine::cti_op_mul): - (JSC::Machine::cti_op_new_func): - (JSC::Machine::cti_op_call_JSFunction): - (JSC::Machine::cti_vm_compile): - (JSC::Machine::cti_op_push_activation): - (JSC::Machine::cti_op_call_NotJSFunction): - (JSC::Machine::cti_op_create_arguments): - (JSC::Machine::cti_op_tear_off_activation): - (JSC::Machine::cti_op_tear_off_arguments): - (JSC::Machine::cti_op_ret_profiler): - (JSC::Machine::cti_op_ret_scopeChain): - (JSC::Machine::cti_op_new_array): - (JSC::Machine::cti_op_resolve): - (JSC::Machine::cti_op_construct_JSConstruct): - (JSC::Machine::cti_op_construct_NotJSConstruct): - (JSC::Machine::cti_op_get_by_val): - (JSC::Machine::cti_op_resolve_func): - (JSC::Machine::cti_op_sub): - (JSC::Machine::cti_op_put_by_val): - (JSC::Machine::cti_op_put_by_val_array): - (JSC::Machine::cti_op_lesseq): - (JSC::Machine::cti_op_loop_if_true): - (JSC::Machine::cti_op_negate): - (JSC::Machine::cti_op_resolve_base): - (JSC::Machine::cti_op_resolve_skip): - (JSC::Machine::cti_op_resolve_global): - (JSC::Machine::cti_op_div): - (JSC::Machine::cti_op_pre_dec): - (JSC::Machine::cti_op_jless): - (JSC::Machine::cti_op_not): - (JSC::Machine::cti_op_jtrue): - (JSC::Machine::cti_op_post_inc): - (JSC::Machine::cti_op_eq): - (JSC::Machine::cti_op_lshift): - (JSC::Machine::cti_op_bitand): - (JSC::Machine::cti_op_rshift): - (JSC::Machine::cti_op_bitnot): - (JSC::Machine::cti_op_resolve_with_base): - (JSC::Machine::cti_op_new_func_exp): - (JSC::Machine::cti_op_mod): - (JSC::Machine::cti_op_less): - (JSC::Machine::cti_op_neq): - (JSC::Machine::cti_op_post_dec): - (JSC::Machine::cti_op_urshift): - (JSC::Machine::cti_op_bitxor): - (JSC::Machine::cti_op_new_regexp): - (JSC::Machine::cti_op_bitor): - (JSC::Machine::cti_op_call_eval): - (JSC::Machine::cti_op_throw): - (JSC::Machine::cti_op_get_pnames): - (JSC::Machine::cti_op_next_pname): - (JSC::Machine::cti_op_push_scope): - (JSC::Machine::cti_op_pop_scope): - (JSC::Machine::cti_op_typeof): - (JSC::Machine::cti_op_to_jsnumber): - (JSC::Machine::cti_op_in): - (JSC::Machine::cti_op_push_new_scope): - (JSC::Machine::cti_op_jmp_scopes): - (JSC::Machine::cti_op_put_by_index): - (JSC::Machine::cti_op_switch_imm): - (JSC::Machine::cti_op_switch_char): - (JSC::Machine::cti_op_switch_string): - (JSC::Machine::cti_op_del_by_val): - (JSC::Machine::cti_op_put_getter): - (JSC::Machine::cti_op_put_setter): - (JSC::Machine::cti_op_new_error): - (JSC::Machine::cti_op_debug): - (JSC::Machine::cti_vm_throw): - * VM/Machine.h: - * VM/Register.h: - * VM/RegisterFile.h: - * kjs/Arguments.h: - * kjs/DebuggerCallFrame.cpp: - (JSC::DebuggerCallFrame::functionName): - (JSC::DebuggerCallFrame::type): - (JSC::DebuggerCallFrame::thisObject): - (JSC::DebuggerCallFrame::evaluate): - * kjs/DebuggerCallFrame.h: - * kjs/ExecState.cpp: - (JSC::CallFrame::thisValue): - * kjs/ExecState.h: - * kjs/FunctionConstructor.cpp: - (JSC::constructFunction): - * kjs/JSActivation.cpp: - (JSC::JSActivation::JSActivation): - (JSC::JSActivation::argumentsGetter): - * kjs/JSActivation.h: - * kjs/JSGlobalObject.cpp: - (JSC::JSGlobalObject::init): - * kjs/JSGlobalObjectFunctions.cpp: - (JSC::globalFuncEval): - * kjs/JSVariableObject.h: - * kjs/Parser.cpp: - (JSC::Parser::parse): - * kjs/RegExpConstructor.cpp: - (JSC::constructRegExp): - * kjs/RegExpPrototype.cpp: - (JSC::regExpProtoFuncCompile): - * kjs/Shell.cpp: - (prettyPrintScript): - * kjs/StringPrototype.cpp: - (JSC::stringProtoFuncMatch): - (JSC::stringProtoFuncSearch): - * kjs/identifier.cpp: - (JSC::Identifier::checkSameIdentifierTable): - * kjs/interpreter.cpp: - (JSC::Interpreter::checkSyntax): - (JSC::Interpreter::evaluate): - * kjs/nodes.cpp: - (JSC::ThrowableExpressionData::emitThrowError): - (JSC::RegExpNode::emitCode): - (JSC::ArrayNode::emitCode): - (JSC::InstanceOfNode::emitCode): - * kjs/nodes.h: - * kjs/regexp.cpp: - (JSC::RegExp::RegExp): - (JSC::RegExp::create): - * kjs/regexp.h: - * profiler/HeavyProfile.h: - * profiler/Profile.h: - * wrec/WREC.cpp: - * wrec/WREC.h: - -2008-10-08 Mark Rowe - - Typed by Maciej Stachowiak, reviewed by Mark Rowe. - - Fix crash in fast/js/constant-folding.html with CTI disabled. - - * VM/Machine.cpp: - (JSC::Machine::privateExecute): - -2008-10-08 Timothy Hatcher - - Roll out r37427 because it causes an infinite recursion loading about:blank. - - https://bugs.webkit.org/show_bug.cgi?id=21476 - -2008-10-08 Darin Adler - - Reviewed by Cameron Zwarich. - - - https://bugs.webkit.org/show_bug.cgi?id=21403 - Bug 21403: use new CallFrame class rather than Register* for call frame manipulation - - Add CallFrame as a synonym for ExecState. Arguably, some day we should switch every - client over to the new name. - - Use CallFrame* consistently rather than Register* or ExecState* in low-level code such - as Machine.cpp and CTI.cpp. Similarly, use callFrame rather than r as its name and use - accessor functions to get at things in the frame. - - Eliminate other uses of ExecState* that aren't needed, replacing in some cases with - JSGlobalData* and in other cases eliminating them entirely. - - * API/JSObjectRef.cpp: - (JSObjectMakeFunctionWithCallback): - (JSObjectMakeFunction): - (JSObjectHasProperty): - (JSObjectGetProperty): - (JSObjectSetProperty): - (JSObjectDeleteProperty): - * API/OpaqueJSString.cpp: - * API/OpaqueJSString.h: - * VM/CTI.cpp: - (JSC::CTI::getConstant): - (JSC::CTI::emitGetArg): - (JSC::CTI::emitGetPutArg): - (JSC::CTI::getConstantImmediateNumericArg): - (JSC::CTI::printOpcodeOperandTypes): - (JSC::CTI::CTI): - (JSC::CTI::compileOpCall): - (JSC::CTI::compileBinaryArithOp): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompile): - (JSC::CTI::privateCompileGetByIdProto): - (JSC::CTI::privateCompileGetByIdChain): - (JSC::CTI::compileRegExp): - * VM/CTI.h: - * VM/CodeBlock.h: - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::emitEqualityOp): - (JSC::CodeGenerator::emitLoad): - (JSC::CodeGenerator::emitUnexpectedLoad): - (JSC::CodeGenerator::emitConstruct): - * VM/CodeGenerator.h: - * VM/Machine.cpp: - (JSC::jsLess): - (JSC::jsLessEq): - (JSC::jsAddSlowCase): - (JSC::jsAdd): - (JSC::jsTypeStringForValue): - (JSC::Machine::resolve): - (JSC::Machine::resolveSkip): - (JSC::Machine::resolveGlobal): - (JSC::inlineResolveBase): - (JSC::Machine::resolveBase): - (JSC::Machine::resolveBaseAndProperty): - (JSC::Machine::resolveBaseAndFunc): - (JSC::Machine::slideRegisterWindowForCall): - (JSC::isNotObject): - (JSC::Machine::callEval): - (JSC::Machine::dumpCallFrame): - (JSC::Machine::dumpRegisters): - (JSC::Machine::unwindCallFrame): - (JSC::Machine::throwException): - (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): - (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope): - (JSC::Machine::execute): - (JSC::Machine::debug): - (JSC::Machine::createExceptionScope): - (JSC::cachePrototypeChain): - (JSC::Machine::tryCachePutByID): - (JSC::Machine::tryCacheGetByID): - (JSC::Machine::privateExecute): - (JSC::Machine::retrieveArguments): - (JSC::Machine::retrieveCaller): - (JSC::Machine::retrieveLastCaller): - (JSC::Machine::findFunctionCallFrame): - (JSC::Machine::getArgumentsData): - (JSC::Machine::tryCTICachePutByID): - (JSC::Machine::getCTIArrayLengthTrampoline): - (JSC::Machine::getCTIStringLengthTrampoline): - (JSC::Machine::tryCTICacheGetByID): - (JSC::Machine::cti_op_convert_this): - (JSC::Machine::cti_op_end): - (JSC::Machine::cti_op_add): - (JSC::Machine::cti_op_pre_inc): - (JSC::Machine::cti_timeout_check): - (JSC::Machine::cti_op_loop_if_less): - (JSC::Machine::cti_op_loop_if_lesseq): - (JSC::Machine::cti_op_new_object): - (JSC::Machine::cti_op_put_by_id): - (JSC::Machine::cti_op_put_by_id_second): - (JSC::Machine::cti_op_put_by_id_generic): - (JSC::Machine::cti_op_put_by_id_fail): - (JSC::Machine::cti_op_get_by_id): - (JSC::Machine::cti_op_get_by_id_second): - (JSC::Machine::cti_op_get_by_id_generic): - (JSC::Machine::cti_op_get_by_id_fail): - (JSC::Machine::cti_op_instanceof): - (JSC::Machine::cti_op_del_by_id): - (JSC::Machine::cti_op_mul): - (JSC::Machine::cti_op_new_func): - (JSC::Machine::cti_op_call_JSFunction): - (JSC::Machine::cti_vm_compile): - (JSC::Machine::cti_op_push_activation): - (JSC::Machine::cti_op_call_NotJSFunction): - (JSC::Machine::cti_op_create_arguments): - (JSC::Machine::cti_op_tear_off_activation): - (JSC::Machine::cti_op_tear_off_arguments): - (JSC::Machine::cti_op_ret_profiler): - (JSC::Machine::cti_op_ret_scopeChain): - (JSC::Machine::cti_op_new_array): - (JSC::Machine::cti_op_resolve): - (JSC::Machine::cti_op_construct_JSConstruct): - (JSC::Machine::cti_op_construct_NotJSConstruct): - (JSC::Machine::cti_op_get_by_val): - (JSC::Machine::cti_op_resolve_func): - (JSC::Machine::cti_op_sub): - (JSC::Machine::cti_op_put_by_val): - (JSC::Machine::cti_op_put_by_val_array): - (JSC::Machine::cti_op_lesseq): - (JSC::Machine::cti_op_loop_if_true): - (JSC::Machine::cti_op_negate): - (JSC::Machine::cti_op_resolve_base): - (JSC::Machine::cti_op_resolve_skip): - (JSC::Machine::cti_op_resolve_global): - (JSC::Machine::cti_op_div): - (JSC::Machine::cti_op_pre_dec): - (JSC::Machine::cti_op_jless): - (JSC::Machine::cti_op_not): - (JSC::Machine::cti_op_jtrue): - (JSC::Machine::cti_op_post_inc): - (JSC::Machine::cti_op_eq): - (JSC::Machine::cti_op_lshift): - (JSC::Machine::cti_op_bitand): - (JSC::Machine::cti_op_rshift): - (JSC::Machine::cti_op_bitnot): - (JSC::Machine::cti_op_resolve_with_base): - (JSC::Machine::cti_op_new_func_exp): - (JSC::Machine::cti_op_mod): - (JSC::Machine::cti_op_less): - (JSC::Machine::cti_op_neq): - (JSC::Machine::cti_op_post_dec): - (JSC::Machine::cti_op_urshift): - (JSC::Machine::cti_op_bitxor): - (JSC::Machine::cti_op_new_regexp): - (JSC::Machine::cti_op_bitor): - (JSC::Machine::cti_op_call_eval): - (JSC::Machine::cti_op_throw): - (JSC::Machine::cti_op_get_pnames): - (JSC::Machine::cti_op_next_pname): - (JSC::Machine::cti_op_push_scope): - (JSC::Machine::cti_op_pop_scope): - (JSC::Machine::cti_op_typeof): - (JSC::Machine::cti_op_to_jsnumber): - (JSC::Machine::cti_op_in): - (JSC::Machine::cti_op_push_new_scope): - (JSC::Machine::cti_op_jmp_scopes): - (JSC::Machine::cti_op_put_by_index): - (JSC::Machine::cti_op_switch_imm): - (JSC::Machine::cti_op_switch_char): - (JSC::Machine::cti_op_switch_string): - (JSC::Machine::cti_op_del_by_val): - (JSC::Machine::cti_op_put_getter): - (JSC::Machine::cti_op_put_setter): - (JSC::Machine::cti_op_new_error): - (JSC::Machine::cti_op_debug): - (JSC::Machine::cti_vm_throw): - * VM/Machine.h: - * VM/Register.h: - * VM/RegisterFile.h: - * kjs/Arguments.h: - * kjs/DebuggerCallFrame.cpp: - (JSC::DebuggerCallFrame::functionName): - (JSC::DebuggerCallFrame::type): - (JSC::DebuggerCallFrame::thisObject): - (JSC::DebuggerCallFrame::evaluate): - * kjs/DebuggerCallFrame.h: - * kjs/ExecState.cpp: - (JSC::CallFrame::thisValue): - * kjs/ExecState.h: - * kjs/FunctionConstructor.cpp: - (JSC::constructFunction): - * kjs/JSActivation.cpp: - (JSC::JSActivation::JSActivation): - (JSC::JSActivation::argumentsGetter): - * kjs/JSActivation.h: - * kjs/JSGlobalObject.cpp: - (JSC::JSGlobalObject::init): - * kjs/JSGlobalObjectFunctions.cpp: - (JSC::globalFuncEval): - * kjs/JSVariableObject.h: - * kjs/Parser.cpp: - (JSC::Parser::parse): - * kjs/RegExpConstructor.cpp: - (JSC::constructRegExp): - * kjs/RegExpPrototype.cpp: - (JSC::regExpProtoFuncCompile): - * kjs/Shell.cpp: - (prettyPrintScript): - * kjs/StringPrototype.cpp: - (JSC::stringProtoFuncMatch): - (JSC::stringProtoFuncSearch): - * kjs/identifier.cpp: - (JSC::Identifier::checkSameIdentifierTable): - * kjs/interpreter.cpp: - (JSC::Interpreter::checkSyntax): - (JSC::Interpreter::evaluate): - * kjs/nodes.cpp: - (JSC::ThrowableExpressionData::emitThrowError): - (JSC::RegExpNode::emitCode): - (JSC::ArrayNode::emitCode): - (JSC::InstanceOfNode::emitCode): - * kjs/nodes.h: - * kjs/regexp.cpp: - (JSC::RegExp::RegExp): - (JSC::RegExp::create): - * kjs/regexp.h: - * profiler/HeavyProfile.h: - * profiler/Profile.h: - * wrec/WREC.cpp: - * wrec/WREC.h: - -2008-10-08 Prasanth Ullattil - - Reviewed by Oliver Hunt. - - Avoid endless loops when compiling without the computed goto - optimization. - - NEXT_OPCODE expands to "continue", which will not work inside - loops. - - * VM/Machine.cpp: - (JSC::Machine::privateExecute): - -2008-10-08 Maciej Stachowiak - - Reviewed by Oliver Hunt. - - Re-landing the following fix with the crashing bug in it fixed (r37405): - - - optimize away multiplication by constant 1.0 - - 2.3% speedup on v8 RayTrace benchmark - - Apparently it's not uncommon for JavaScript code to multiply by - constant 1.0 in the mistaken belief that this converts integer to - floating point and that there is any operational difference. - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): Optimize to_jsnumber for - case where parameter is already number. - (JSC::CTI::privateCompileSlowCases): ditto - * VM/Machine.cpp: - (JSC::Machine::privateExecute): ditto - * kjs/grammar.y: - (makeMultNode): Transform as follows: - +FOO * BAR ==> FOO * BAR - FOO * +BAR ==> FOO * BAR - FOO * 1 ==> +FOO - 1 * FOO ==> +FOO - (makeDivNode): Transform as follows: - +FOO / BAR ==> FOO / BAR - FOO / +BAR ==> FOO / BAR - (makeSubNode): Transform as follows: - +FOO - BAR ==> FOO - BAR - FOO - +BAR ==> FOO - BAR - * kjs/nodes.h: - (JSC::ExpressionNode::stripUnaryPlus): Helper for above - grammar.y changes - (JSC::UnaryPlusNode::stripUnaryPlus): ditto - -2008-10-08 Maciej Stachowiak - - Reviewed by Oliver Hunt. - - - correctly handle appending -0 to a string, it should stringify as just 0 - - * kjs/ustring.cpp: - (JSC::concatenate): - -2008-10-08 Prasanth Ullattil - - Reviewed by Simon. - - Fix WebKit compilation with VC2008SP1 - - Apply the TR1 workaround for JavaScriptCore, too. - - * JavaScriptCore.pro: - -2008-10-08 Prasanth Ullattil - - Reviewed by Simon. - - Fix compilation errors on VS2008 64Bit - - * kjs/collector.cpp: - (JSC::currentThreadStackBase): - -2008-10-08 André Pönitz - - Reviewed by Simon. - - Fix compilation with Qt namespaces. - - * wtf/Threading.h: - -2008-10-07 Sam Weinig - - Roll out r37405. - -2008-10-07 Oliver Hunt - - Reviewed by Cameron Zwarich. - - Switch CTI runtime calls to the fastcall calling convention - - Basically this means that we get to store the argument for CTI - calls in the ECX register, which saves a register->memory write - and subsequent memory->register read. - - This is a 1.7% progression in SunSpider and 2.4% on commandline - v8 tests on Windows - - * VM/CTI.cpp: - (JSC::): - (JSC::CTI::privateCompilePutByIdTransition): - (JSC::CTI::privateCompilePatchGetArrayLength): - * VM/CTI.h: - * VM/Machine.h: - * masm/X86Assembler.h: - (JSC::X86Assembler::emitRestoreArgumentReference): - (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline): - We need this to correctly reload ecx from inside certain property access - trampolines. - * wtf/Platform.h: - -2008-10-07 Maciej Stachowiak - - Reviewed by Mark Rowe. - - - optimize away multiplication by constant 1.0 - - 2.3% speedup on v8 RayTrace benchmark - - Apparently it's not uncommon for JavaScript code to multiply by - constant 1.0 in the mistaken belief that this converts integer to - floating point and that there is any operational difference. - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): Optimize to_jsnumber for - case where parameter is already number. - (JSC::CTI::privateCompileSlowCases): ditto - * VM/Machine.cpp: - (JSC::Machine::privateExecute): ditto - * kjs/grammar.y: - (makeMultNode): Transform as follows: - +FOO * BAR ==> FOO * BAR - FOO * +BAR ==> FOO * BAR - FOO * 1 ==> +FOO - 1 * FOO ==> +FOO - (makeDivNode): Transform as follows: - +FOO / BAR ==> FOO / BAR - FOO / +BAR ==> FOO / BAR - (makeSubNode): Transform as follows: - +FOO - BAR ==> FOO - BAR - FOO - +BAR ==> FOO - BAR - * kjs/nodes.h: - (JSC::ExpressionNode::stripUnaryPlus): Helper for above - grammar.y changes - (JSC::UnaryPlusNode::stripUnaryPlus): ditto - -2008-10-07 Maciej Stachowiak - - Reviewed by Oliver Hunt. - - - make constant folding code more consistent - - Added a makeSubNode to match add, mult and div; use the makeFooNode functions always, - instead of allocating nodes directly in other places in the grammar. - - * kjs/grammar.y: - -2008-10-07 Sam Weinig - - Reviewed by Cameron Zwarich. - - Move hasGetterSetterProperties flag from PropertyMap to StructureID. - - * kjs/JSObject.cpp: - (JSC::JSObject::put): - (JSC::JSObject::defineGetter): - (JSC::JSObject::defineSetter): - * kjs/JSObject.h: - (JSC::JSObject::hasGetterSetterProperties): - (JSC::JSObject::getOwnPropertySlotForWrite): - (JSC::JSObject::getOwnPropertySlot): - * kjs/PropertyMap.h: - * kjs/StructureID.cpp: - (JSC::StructureID::StructureID): - (JSC::StructureID::addPropertyTransition): - (JSC::StructureID::toDictionaryTransition): - (JSC::StructureID::changePrototypeTransition): - (JSC::StructureID::getterSetterTransition): - * kjs/StructureID.h: - (JSC::StructureID::hasGetterSetterProperties): - (JSC::StructureID::setHasGetterSetterProperties): - -2008-10-07 Sam Weinig - - Reviewed by Cameron Zwarich. - - Roll r37370 back in with bug fixes. - - - PropertyMap::storageSize() should reflect the number of keys + deletedOffsets - and has nothing to do with the internal deletedSentinel count anymore. - -2008-10-07 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Move callframe initialization into JIT code, again. - - As a part of the restructuring the second result from functions is now - returned in edx, allowing the new value of 'r' to be returned via a - register, and stored to the stack from JIT code, too. - - 4.5% progression on v8-tests. (3% in their harness) - - * VM/CTI.cpp: - (JSC::): - (JSC::CTI::emitCall): - (JSC::CTI::compileOpCall): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - (JSC::CTI::privateCompile): - * VM/CTI.h: - (JSC::CallRecord::CallRecord): - * VM/Machine.cpp: - (JSC::Machine::cti_op_call_JSFunction): - (JSC::Machine::cti_op_construct_JSConstruct): - (JSC::Machine::cti_op_resolve_func): - (JSC::Machine::cti_op_post_inc): - (JSC::Machine::cti_op_resolve_with_base): - (JSC::Machine::cti_op_post_dec): - * VM/Machine.h: - * kjs/JSFunction.h: - * kjs/ScopeChain.h: - -2008-10-07 Mark Rowe - - Fix typo in method name. - - * wrec/WREC.cpp: - * wrec/WREC.h: - -2008-10-07 Cameron Zwarich - - Rubber-stamped by Mark Rowe. - - Roll out r37370. - -2008-10-06 Sam Weinig - - Reviewed by Cameron Zwarich. - - Fix for https://bugs.webkit.org/show_bug.cgi?id=21415 - Improve the division between PropertyStorageArray and PropertyMap - - - Rework ProperyMap to store offsets in the value so that they don't - change when rehashing. This allows us not to have to keep the - PropertyStorageArray in sync and thus not have to pass it in. - - Rename PropertyMap::getOffset -> PropertyMap::get since put/remove - now also return offsets. - - A Vector of deleted offsets is now needed since the storage is out of - band. - - 1% win on SunSpider. Wash on V8 suite. - - * JavaScriptCore.exp: - * VM/CTI.cpp: - (JSC::transitionWillNeedStorageRealloc): - * VM/Machine.cpp: - (JSC::Machine::privateExecute): - Transition logic can be greatly simplified by the fact that - the storage capacity is always known, and is correct for the - inline case. - * kjs/JSObject.cpp: - (JSC::JSObject::put): Rename getOffset -> get. - (JSC::JSObject::deleteProperty): Ditto. - (JSC::JSObject::getPropertyAttributes): Ditto. - (JSC::JSObject::removeDirect): Use returned offset to - clear the value in the PropertyNameArray. - (JSC::JSObject::allocatePropertyStorage): Add assert. - * kjs/JSObject.h: - (JSC::JSObject::getDirect): Rename getOffset -> get - (JSC::JSObject::getDirectLocation): Rename getOffset -> get - (JSC::JSObject::putDirect): Use propertyStorageCapacity to determine whether - or not to resize. Also, since put now returns an offset (and thus - addPropertyTransition does also) setting of the PropertyStorageArray is - now done here. - (JSC::JSObject::transitionTo): - * kjs/PropertyMap.cpp: - (JSC::PropertyMap::checkConsistency): PropertyStorageArray is no longer - passed in. - (JSC::PropertyMap::operator=): Copy the delete offsets vector. - (JSC::PropertyMap::put): Instead of setting the PropertyNameArray - explicitly, return the offset where the value should go. - (JSC::PropertyMap::remove): Instead of removing from the PropertyNameArray - explicitly, return the offset where the value should be removed. - (JSC::PropertyMap::get): Switch to using the stored offset, instead - of the implicit one. - (JSC::PropertyMap::insert): - (JSC::PropertyMap::expand): This is never called when m_table is null, - so remove that branch and add it as an assertion. - (JSC::PropertyMap::createTable): Consistency checks no longer take - a PropertyNameArray. - (JSC::PropertyMap::rehash): No need to rehash the PropertyNameArray - now that it is completely out of band. - * kjs/PropertyMap.h: - (JSC::PropertyMapEntry::PropertyMapEntry): Store offset into PropertyNameArray. - (JSC::PropertyMap::get): Switch to using the stored offset, instead - of the implicit one. - * kjs/StructureID.cpp: - (JSC::StructureID::StructureID): Initialize the propertyStorageCapacity to - JSObject::inlineStorageCapacity. - (JSC::StructureID::growPropertyStorageCapacity): Grow the storage capacity as - described below. - (JSC::StructureID::addPropertyTransition): Copy the storage capacity. - (JSC::StructureID::toDictionaryTransition): Ditto. - (JSC::StructureID::changePrototypeTransition): Ditto. - (JSC::StructureID::getterSetterTransition): Ditto. - * kjs/StructureID.h: - (JSC::StructureID::propertyStorageCapacity): Add propertyStorageCapacity - which is the current capacity for the JSObjects PropertyStorageArray. - It starts at the JSObject::inlineStorageCapacity (currently 2), then - when it first needs to be resized moves to the JSObject::nonInlineBaseStorageCapacity - (currently 16), and after that doubles each time. - -2008-10-06 Cameron Zwarich - - Reviewed by Oliver Hunt. - - Bug 21396: Remove the OptionalCalleeActivation call frame slot - - - Remove the OptionalCalleeActivation call frame slot. We have to be - careful to store the activation object in a register, because objects - in the scope chain do not get marked. - - This is a 0.3% speedup on both SunSpider and the V8 benchmark. - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): - * VM/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::CodeGenerator): - (JSC::CodeGenerator::emitReturn): - * VM/CodeGenerator.h: - * VM/Machine.cpp: - (JSC::Machine::dumpRegisters): - (JSC::Machine::unwindCallFrame): - (JSC::Machine::privateExecute): - (JSC::Machine::cti_op_call_JSFunction): - (JSC::Machine::cti_op_push_activation): - (JSC::Machine::cti_op_tear_off_activation): - (JSC::Machine::cti_op_construct_JSConstruct): - * VM/Machine.h: - (JSC::Machine::initializeCallFrame): - * VM/RegisterFile.h: - (JSC::RegisterFile::): - -2008-10-06 Tony Chang - - Reviewed by Alexey Proskuryakov. - - Chromium doesn't use pthreads on windows, so make its use conditional. - - Also convert a WORD to a DWORD to avoid a compiler warning. This - matches the other methods around it. - - * wtf/ThreadingWin.cpp: - (WTF::wtfThreadEntryPoint): - (WTF::ThreadCondition::broadcast): - -2008-10-06 Mark Mentovai - - Reviewed by Tim Hatcher. - - Allow ENABLE_DASHBOARD_SUPPORT and ENABLE_MAC_JAVA_BRIDGE to be - disabled on the Mac. - - https://bugs.webkit.org/show_bug.cgi?id=21333 - - * wtf/Platform.h: - -2008-10-06 Steve Falkenburg - - https://bugs.webkit.org/show_bug.cgi?id=21416 - Pass 0 for size to VirtualAlloc, as documented by MSDN. - Identified by Application Verifier. - - Reviewed by Darin Adler. - - * kjs/collector.cpp: - (KJS::freeBlock): - -2008-10-06 Kevin McCullough - - Reviewed by Tim Hatcheri and Oliver Hunt. - - https://bugs.webkit.org/show_bug.cgi?id=21412 - Bug 21412: Refactor user initiated profile count to be more stable - - Export UString::from for use with creating the profile title. - - * JavaScriptCore.exp: - -2008-10-06 Maciej Stachowiak - - Not reviewed. Build fix. - - - revert toBoolean changes (r37333 and r37335); need to make WebCore work with these - - * API/JSValueRef.cpp: - (JSValueToBoolean): - * ChangeLog: - * JavaScriptCore.exp: - * VM/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * VM/Machine.cpp: - (JSC::Machine::privateExecute): - (JSC::Machine::cti_op_loop_if_true): - (JSC::Machine::cti_op_not): - (JSC::Machine::cti_op_jtrue): - * kjs/ArrayPrototype.cpp: - (JSC::arrayProtoFuncFilter): - (JSC::arrayProtoFuncEvery): - (JSC::arrayProtoFuncSome): - * kjs/BooleanConstructor.cpp: - (JSC::constructBoolean): - (JSC::callBooleanConstructor): - * kjs/GetterSetter.h: - * kjs/JSCell.h: - (JSC::JSValue::toBoolean): - * kjs/JSNumberCell.cpp: - (JSC::JSNumberCell::toBoolean): - * kjs/JSNumberCell.h: - * kjs/JSObject.cpp: - (JSC::JSObject::toBoolean): - * kjs/JSObject.h: - * kjs/JSString.cpp: - (JSC::JSString::toBoolean): - * kjs/JSString.h: - * kjs/JSValue.h: - * kjs/RegExpConstructor.cpp: - (JSC::setRegExpConstructorMultiline): - * kjs/RegExpObject.cpp: - (JSC::RegExpObject::match): - * kjs/RegExpPrototype.cpp: - (JSC::regExpProtoFuncToString): - -2008-10-06 Maciej Stachowiak - - Reviewed by Sam Weinig. - - - optimize op_jtrue, op_loop_if_true and op_not in various ways - https://bugs.webkit.org/show_bug.cgi?id=21404 - - 1) Make JSValue::toBoolean nonvirtual and completely inline by - making use of the StructureID type field. - - 2) Make JSValue::toBoolean not take an ExecState; doesn't need it. - - 3) Make op_not, op_loop_if_true and op_jtrue not read the - ExecState (toBoolean doesn't need it any more) and not check - exceptions (toBoolean can't throw). - - * API/JSValueRef.cpp: - (JSValueToBoolean): - * JavaScriptCore.exp: - * VM/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * VM/Machine.cpp: - (JSC::Machine::privateExecute): - (JSC::Machine::cti_op_loop_if_true): - (JSC::Machine::cti_op_not): - (JSC::Machine::cti_op_jtrue): - * kjs/ArrayPrototype.cpp: - (JSC::arrayProtoFuncFilter): - (JSC::arrayProtoFuncEvery): - (JSC::arrayProtoFuncSome): - * kjs/BooleanConstructor.cpp: - (JSC::constructBoolean): - (JSC::callBooleanConstructor): - * kjs/GetterSetter.h: - * kjs/JSCell.h: - (JSC::JSValue::toBoolean): - * kjs/JSNumberCell.cpp: - * kjs/JSNumberCell.h: - (JSC::JSNumberCell::toBoolean): - * kjs/JSObject.cpp: - * kjs/JSObject.h: - (JSC::JSObject::toBoolean): - (JSC::JSCell::toBoolean): - * kjs/JSString.cpp: - * kjs/JSString.h: - (JSC::JSString::toBoolean): - * kjs/JSValue.h: - * kjs/RegExpConstructor.cpp: - (JSC::setRegExpConstructorMultiline): - * kjs/RegExpObject.cpp: - (JSC::RegExpObject::match): - * kjs/RegExpPrototype.cpp: - (JSC::regExpProtoFuncToString): - -2008-10-06 Ariya Hidayat - - Reviewed by Simon. - - Build fix for MinGW. - - * JavaScriptCore.pri: - * kjs/DateMath.cpp: - (JSC::highResUpTime): - -2008-10-05 Cameron Zwarich - - Reviewed by Oliver Hunt. - - Remove ScopeNode::containsClosures() now that it is unused. - - * kjs/nodes.h: - (JSC::ScopeNode::containsClosures): - -2008-10-05 Maciej Stachowiak - - Reviewed by Cameron Zwarich. - - - fix releas-only test failures caused by the fix to bug 21375 - - * VM/Machine.cpp: - (JSC::Machine::unwindCallFrame): Update ExecState while unwinding call frames; - it now matters more to have a still-valid ExecState, since dynamicGlobalObject - will make use of the ExecState's scope chain. - * VM/Machine.h: - -2008-10-05 Cameron Zwarich - - Reviewed by Oliver Hunt. - - Bug 21364: Remove the branch in op_ret for OptionalCalleeActivation and OptionalCalleeArguments - - - Use information from the parser to detect whether an activation is - needed or 'arguments' is used, and emit explicit instructions to tear - them off before op_ret. This allows a branch to be removed from op_ret - and simplifies some other code. This does cause a small change in the - behaviour of 'f.arguments'; it is no longer live when 'arguments' is not - mentioned in the lexical scope of the function. - - It should now be easy to remove the OptionaCalleeActivation slot in the - call frame, but this will be done in a later patch. - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): - * VM/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::emitReturn): - * VM/CodeGenerator.h: - * VM/Machine.cpp: - (JSC::Machine::unwindCallFrame): - (JSC::Machine::privateExecute): - (JSC::Machine::retrieveArguments): - (JSC::Machine::cti_op_create_arguments): - (JSC::Machine::cti_op_tear_off_activation): - (JSC::Machine::cti_op_tear_off_arguments): - * VM/Machine.h: - * VM/Opcode.h: - * kjs/Arguments.cpp: - (JSC::Arguments::mark): - * kjs/Arguments.h: - (JSC::Arguments::isTornOff): - (JSC::Arguments::Arguments): - (JSC::Arguments::copyRegisters): - (JSC::JSActivation::copyRegisters): - * kjs/JSActivation.cpp: - (JSC::JSActivation::argumentsGetter): - * kjs/JSActivation.h: - -2008-10-05 Maciej Stachowiak - - Reviewed by Oliver Hunt. - - - fixed "REGRESSION (r37297): fast/js/deep-recursion-test takes too long and times out" - https://bugs.webkit.org/show_bug.cgi?id=21375 - - The problem is that dynamicGlobalObject had become O(N) in number - of call frames, but unwinding the stack for an exception called it - for every call frame, resulting in O(N^2) behavior for an - exception thrown from inside deep recursion. - - Instead of doing it that way, stash the dynamic global object in JSGlobalData. - - * JavaScriptCore.exp: - * VM/Machine.cpp: - (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): Helper class to temporarily - store and later restore a dynamicGlobalObject in JSGlobalData. - (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope): - (JSC::Machine::execute): In each version, establish a DynamicGlobalObjectScope. - For ProgramNode, always establish set new dynamicGlobalObject, for FunctionBody and Eval, - only if none is currently set. - * VM/Machine.h: - * kjs/ExecState.h: - * kjs/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): Ininitalize new dynamicGlobalObject field to 0. - * kjs/JSGlobalData.h: - * kjs/JSGlobalObject.h: - (JSC::ExecState::dynamicGlobalObject): Moved here from ExecState for benefit of inlining. - Return lexical global object if this is a globalExec(), otherwise look in JSGlobalData - for the one stashed there. - -2008-10-05 Sam Weinig - - Reviewed by Maciej Stachowiak. - - Avoid an extra lookup when transitioning to an existing StructureID - by caching the offset of property that caused the transition. - - 1% win on V8 suite. Wash on SunSpider. - - * kjs/PropertyMap.cpp: - (JSC::PropertyMap::put): - * kjs/PropertyMap.h: - * kjs/StructureID.cpp: - (JSC::StructureID::StructureID): - (JSC::StructureID::addPropertyTransition): - * kjs/StructureID.h: - (JSC::StructureID::setCachedTransistionOffset): - (JSC::StructureID::cachedTransistionOffset): - -2008-10-05 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Bug 21364: Remove the branch in op_ret for OptionalCalleeActivation and OptionalCalleeArguments - - - This patch does not yet remove the branch, but it does a bit of refactoring - so that a CodeGenerator now knows whether the associated CodeBlock will need - a full scope before doing any code generation. This makes it possible to emit - explicit tear-off instructions before every op_ret. - - * VM/CodeBlock.h: - (JSC::CodeBlock::CodeBlock): - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::generate): - (JSC::CodeGenerator::CodeGenerator): - (JSC::CodeGenerator::emitPushScope): - (JSC::CodeGenerator::emitPushNewScope): - * kjs/nodes.h: - (JSC::ScopeNode::needsActivation): - -2008-10-05 Gavin Barraclough - - Reviewed by Cameron Zwarich. - - Fix for bug #21387 - using SamplingTool with CTI. - - (1) A repatch offset offset changes due to an additional instruction to update SamplingTool state. - (2) Fix an incusion order problem due to ExecState changes. - (3) Change to a MACHINE_SAMPLING macro, use of exec should now be accessing global data. - - * VM/CTI.h: - (JSC::CTI::execute): - * VM/SamplingTool.h: - (JSC::SamplingTool::privateExecuteReturned): - * kjs/Shell.cpp: - -2008-10-04 Mark Rowe - - Reviewed by Tim Hatcher. - - Add a 'Check For Weak VTables' build phase to catch weak vtables as early as possible. - - * JavaScriptCore.xcodeproj/project.pbxproj: - -2008-10-04 Sam Weinig - - Reviewed by Oliver Hunt. - - Fix https://bugs.webkit.org/show_bug.cgi?id=21320 - leaks of PropertyNameArrayData seen on buildbot - - - Fix RefPtr cycle by making PropertyNameArrayData's pointer back - to the StructureID a weak pointer. - - * kjs/PropertyNameArray.h: - (JSC::PropertyNameArrayData::setCachedStructureID): - (JSC::PropertyNameArrayData::cachedStructureID): - * kjs/StructureID.cpp: - (JSC::StructureID::getEnumerablePropertyNames): - (JSC::StructureID::clearEnumerationCache): - (JSC::StructureID::~StructureID): - -2008-10-04 Darin Adler - - Reviewed by Cameron Zwarich. - - - https://bugs.webkit.org/show_bug.cgi?id=21295 - Bug 21295: Replace ExecState with a call frame Register pointer - - 10% faster on Richards; other v8 benchmarks faster too. - A wash on SunSpider. - - This does the minimum necessary to get the speedup. Next step in - cleaning this up is to replace ExecState with a CallFrame class, - and be more judicious about when to pass a call frame and when - to pass a global data pointer, global object pointer, or perhaps - something else entirely. - - * VM/CTI.cpp: Remove the debug-only check of the exception in - ctiVMThrowTrampoline -- already checked in the code the trampoline - jumps to, so not all that useful. Removed the exec argument from - ctiTrampoline. Removed emitDebugExceptionCheck -- no longer needed. - (JSC::CTI::emitCall): Removed code to set ExecState::m_callFrame. - (JSC::CTI::privateCompileMainPass): Removed code in catch to extract - the exception from ExecState::m_exception; instead, the code that - jumps into catch will make sure the exception is already in eax. - * VM/CTI.h: Removed exec from the ctiTrampoline. Also removed the - non-helpful "volatile". Temporarily left ARG_exec in as a synonym - for ARG_r; I'll change that on a future cleanup pass when introducing - more use of the CallFrame type. - (JSC::CTI::execute): Removed the ExecState* argument. - - * VM/ExceptionHelpers.cpp: - (JSC::InterruptedExecutionError::InterruptedExecutionError): Take - JSGlobalData* instead of ExecState*. - (JSC::createInterruptedExecutionException): Ditto. - * VM/ExceptionHelpers.h: Ditto. Also removed an unneeded include. - - * VM/Machine.cpp: - (JSC::slideRegisterWindowForCall): Removed the exec and - exceptionValue arguments. Changed to return 0 when there's a stack - overflow rather than using a separate exception argument to cut - down on memory accesses in the calling convention. - (JSC::Machine::unwindCallFrame): Removed the exec argument when - constructing a DebuggerCallFrame. Also removed code to set - ExecState::m_callFrame. - (JSC::Machine::throwException): Removed the exec argument when - construction a DebuggerCallFrame. - (JSC::Machine::execute): Updated to use the register instead of - ExecState and also removed various uses of ExecState. - (JSC::Machine::debug): - (JSC::Machine::privateExecute): Put globalData into a local - variable so it can be used throughout the interpreter. Changed - the VM_CHECK_EXCEPTION to get the exception in globalData instead - of through ExecState. - (JSC::Machine::retrieveLastCaller): Turn exec into a registers - pointer by calling registers() instead of by getting m_callFrame. - (JSC::Machine::callFrame): Ditto. - Tweaked exception macros. Made new versions for when you know - you have an exception. Get at global exception with ARG_globalData. - Got rid of the need to pass in the return value type. - (JSC::Machine::cti_op_add): Update to use new version of exception - macros. - (JSC::Machine::cti_op_pre_inc): Ditto. - (JSC::Machine::cti_timeout_check): Ditto. - (JSC::Machine::cti_op_instanceof): Ditto. - (JSC::Machine::cti_op_new_func): Ditto. - (JSC::Machine::cti_op_call_JSFunction): Optimized by using the - ARG values directly instead of through local variables -- this gets - rid of code that just shuffles things around in the stack frame. - Also get rid of ExecState and update for the new way exceptions are - handled in slideRegisterWindowForCall. - (JSC::Machine::cti_vm_compile): Update to make exec out of r since - they are both the same thing now. - (JSC::Machine::cti_op_call_NotJSFunction): Ditto. - (JSC::Machine::cti_op_init_arguments): Ditto. - (JSC::Machine::cti_op_resolve): Ditto. - (JSC::Machine::cti_op_construct_JSConstruct): Ditto. - (JSC::Machine::cti_op_construct_NotJSConstruct): Ditto. - (JSC::Machine::cti_op_resolve_func): Ditto. - (JSC::Machine::cti_op_put_by_val): Ditto. - (JSC::Machine::cti_op_put_by_val_array): Ditto. - (JSC::Machine::cti_op_resolve_skip): Ditto. - (JSC::Machine::cti_op_resolve_global): Ditto. - (JSC::Machine::cti_op_post_inc): Ditto. - (JSC::Machine::cti_op_resolve_with_base): Ditto. - (JSC::Machine::cti_op_post_dec): Ditto. - (JSC::Machine::cti_op_call_eval): Ditto. - (JSC::Machine::cti_op_throw): Ditto. Also rearranged to return - the exception value as the return value so it can be used by - op_catch. - (JSC::Machine::cti_op_push_scope): Ditto. - (JSC::Machine::cti_op_in): Ditto. - (JSC::Machine::cti_op_del_by_val): Ditto. - (JSC::Machine::cti_vm_throw): Ditto. Also rearranged to return - the exception value as the return value so it can be used by - op_catch. - - * kjs/DebuggerCallFrame.cpp: - (JSC::DebuggerCallFrame::functionName): Pass globalData. - (JSC::DebuggerCallFrame::evaluate): Eliminated code to make a - new ExecState. - * kjs/DebuggerCallFrame.h: Removed ExecState argument from - constructor. - - * kjs/ExecState.h: Eliminated all data members and made ExecState - inherit privately from Register instead. Also added a typedef to - the future name for this class, which is CallFrame. It's just a - Register* that knows it's a pointer at a call frame. The new class - can't be constructed or copied. Changed all functions to use - the this pointer instead of m_callFrame. Changed exception-related - functions to access an exception in JSGlobalData. Removed functions - used by CTI to pass the return address to the throw machinery -- - this is now done directly with a global in the global data. - - * kjs/FunctionPrototype.cpp: - (JSC::functionProtoFuncToString): Pass globalData instead of exec. - - * kjs/InternalFunction.cpp: - (JSC::InternalFunction::name): Take globalData instead of exec. - * kjs/InternalFunction.h: Ditto. - - * kjs/JSGlobalData.cpp: Initialize the new exception global to 0. - * kjs/JSGlobalData.h: Declare two new globals. One for the current - exception and another for the return address used by CTI to - implement the throw operation. - - * kjs/JSGlobalObject.cpp: - (JSC::JSGlobalObject::init): Removed code to set up globalExec, - which is now the same thing as globalCallFrame. - (JSC::JSGlobalObject::reset): Get globalExec from our globalExec - function so we don't have to repeat the logic twice. - (JSC::JSGlobalObject::mark): Removed code to mark the exception; - the exception is now stored in JSGlobalData and marked there. - (JSC::JSGlobalObject::globalExec): Return a pointer to the end - of the global call frame. - * kjs/JSGlobalObject.h: Removed the globalExec data member. - - * kjs/JSObject.cpp: - (JSC::JSObject::putDirectFunction): Pass globalData instead of exec. - - * kjs/collector.cpp: - (JSC::Heap::collect): Mark the global exception. - - * profiler/ProfileGenerator.cpp: - (JSC::ProfileGenerator::addParentForConsoleStart): Pass globalData - instead of exec to createCallIdentifier. - - * profiler/Profiler.cpp: - (JSC::Profiler::willExecute): Pass globalData instead of exec to - createCallIdentifier. - (JSC::Profiler::didExecute): Ditto. - (JSC::Profiler::createCallIdentifier): Take globalData instead of - exec. - (JSC::createCallIdentifierFromFunctionImp): Ditto. - * profiler/Profiler.h: Change interface to take a JSGlobalData - instead of an ExecState. - -2008-10-04 Cameron Zwarich - - Reviewed by Darin Adler. - - Bug 21369: Add opcode documentation for all undocumented opcodes - - - This patch adds opcode documentation for all undocumented opcodes, and - it also renames op_init_arguments to op_create_arguments. - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): - * VM/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::CodeGenerator): - * VM/Machine.cpp: - (JSC::Machine::privateExecute): - (JSC::Machine::cti_op_create_arguments): - * VM/Machine.h: - * VM/Opcode.h: - -2008-10-03 Maciej Stachowiak - - Reviewed by Cameron Zwarich. - - - "this" object in methods called on primitives should be wrapper object - https://bugs.webkit.org/show_bug.cgi?id=21362 - - I changed things so that functions which use "this" do a fast - version of toThisObject conversion if needed. Currently we miss - the conversion entirely, at least for primitive types. Using - TypeInfo and the primitive check, I made the fast case bail out - pretty fast. - - This is inexplicably an 1.007x SunSpider speedup (and a wash on V8 benchmarks). - - Also renamed some opcodes for clarity: - - init ==> enter - init_activation ==> enter_with_activation - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - * VM/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::generate): - (JSC::CodeGenerator::CodeGenerator): - * VM/Machine.cpp: - (JSC::Machine::privateExecute): - (JSC::Machine::cti_op_convert_this): - * VM/Machine.h: - * VM/Opcode.h: - * kjs/JSActivation.cpp: - (JSC::JSActivation::JSActivation): - * kjs/JSActivation.h: - (JSC::JSActivation::createStructureID): - * kjs/JSCell.h: - (JSC::JSValue::needsThisConversion): - * kjs/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): - * kjs/JSGlobalData.h: - * kjs/JSNumberCell.h: - (JSC::JSNumberCell::createStructureID): - * kjs/JSStaticScopeObject.h: - (JSC::JSStaticScopeObject::JSStaticScopeObject): - (JSC::JSStaticScopeObject::createStructureID): - * kjs/JSString.h: - (JSC::JSString::createStructureID): - * kjs/JSValue.h: - * kjs/TypeInfo.h: - (JSC::TypeInfo::needsThisConversion): - * kjs/nodes.h: - (JSC::ScopeNode::usesThis): - -2008-10-03 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Bug 21356: The size of the RegisterFile differs depending on 32-bit / 64-bit and Debug / Release - - - The RegisterFile decreases in size (measured in terms of numbers of - Registers) as the size of a Register increases. This causes - - js1_5/Regress/regress-159334.js - - to fail in 64-bit debug builds. This fix makes the RegisterFile on all - platforms the same size that it is in 32-bit Release builds. - - * VM/RegisterFile.h: - (JSC::RegisterFile::RegisterFile): - -2008-10-03 Maciej Stachowiak - - Reviewed by Cameron Zwarich. - - - Some code cleanup to how we handle code features. - - 1) Rename FeatureInfo typedef to CodeFeatures. - 2) Rename NodeFeatureInfo template to NodeInfo. - 3) Keep CodeFeature bitmask in ScopeNode instead of trying to break it out into individual bools. - 4) Rename misleadingly named "needsClosure" method to "containsClosures", which better describes the meaning - of ClosureFeature. - 5) Make setUsersArguments() not take an argument since it only goes one way. - - * JavaScriptCore.exp: - * VM/CodeBlock.h: - (JSC::CodeBlock::CodeBlock): - * kjs/NodeInfo.h: - * kjs/Parser.cpp: - (JSC::Parser::didFinishParsing): - * kjs/Parser.h: - (JSC::Parser::parse): - * kjs/grammar.y: - * kjs/nodes.cpp: - (JSC::ScopeNode::ScopeNode): - (JSC::ProgramNode::ProgramNode): - (JSC::ProgramNode::create): - (JSC::EvalNode::EvalNode): - (JSC::EvalNode::create): - (JSC::FunctionBodyNode::FunctionBodyNode): - (JSC::FunctionBodyNode::create): - * kjs/nodes.h: - (JSC::ScopeNode::usesEval): - (JSC::ScopeNode::containsClosures): - (JSC::ScopeNode::usesArguments): - (JSC::ScopeNode::setUsesArguments): - -2008-10-03 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Bug 21343: REGRESSSION (r37160): ecma_3/ExecutionContexts/10.1.3-1.js and js1_4/Functions/function-001.js fail on 64-bit - - - A fix was landed for this issue in r37253, and the ChangeLog assumes - that it is a compiler bug, but it turns out that it is a subtle issue - with mixing signed and unsigned 32-bit values in a 64-bit environment. - In order to properly fix this bug, we should convert our signed offsets - into the register file to use ptrdiff_t. - - This may not be the only instance of this issue, but I will land this - fix first and look for more later. - - * VM/Machine.cpp: - (JSC::Machine::getArgumentsData): - * VM/Machine.h: - * kjs/Arguments.cpp: - (JSC::Arguments::getOwnPropertySlot): - * kjs/Arguments.h: - (JSC::Arguments::init): - -2008-10-03 Darin Adler - - * VM/CTI.cpp: Another Windows build fix. Change the args of ctiTrampoline. - - * kjs/JSNumberCell.h: A build fix for newer versions of gcc. Added - declarations of JSGlobalData overloads of jsNumberCell. - -2008-10-03 Darin Adler - - - try to fix Windows build - - * kjs/ScopeChain.h: Add forward declaration of JSGlobalData. - -2008-10-03 Darin Adler - - Reviewed by Geoff Garen. - - - next step of https://bugs.webkit.org/show_bug.cgi?id=21295 - Turn ExecState into a call frame pointer. - - Remove m_globalObject and m_globalData from ExecState. - - SunSpider says this is a wash (slightly faster but not statistically - significant); which is good enough since it's a preparation step and - not supposed to be a spedup. - - * API/JSCallbackFunction.cpp: - (JSC::JSCallbackFunction::JSCallbackFunction): - * kjs/ArrayConstructor.cpp: - (JSC::ArrayConstructor::ArrayConstructor): - * kjs/BooleanConstructor.cpp: - (JSC::BooleanConstructor::BooleanConstructor): - * kjs/DateConstructor.cpp: - (JSC::DateConstructor::DateConstructor): - * kjs/ErrorConstructor.cpp: - (JSC::ErrorConstructor::ErrorConstructor): - * kjs/FunctionPrototype.cpp: - (JSC::FunctionPrototype::FunctionPrototype): - * kjs/JSFunction.cpp: - (JSC::JSFunction::JSFunction): - * kjs/NativeErrorConstructor.cpp: - (JSC::NativeErrorConstructor::NativeErrorConstructor): - * kjs/NumberConstructor.cpp: - (JSC::NumberConstructor::NumberConstructor): - * kjs/ObjectConstructor.cpp: - (JSC::ObjectConstructor::ObjectConstructor): - * kjs/PrototypeFunction.cpp: - (JSC::PrototypeFunction::PrototypeFunction): - * kjs/RegExpConstructor.cpp: - (JSC::RegExpConstructor::RegExpConstructor): - * kjs/StringConstructor.cpp: - (JSC::StringConstructor::StringConstructor): - Pass JSGlobalData* instead of ExecState* to the InternalFunction - constructor. - - * API/OpaqueJSString.cpp: Added now-needed include. - - * JavaScriptCore.exp: Updated. - - * VM/CTI.cpp: - (JSC::CTI::emitSlowScriptCheck): Changed to use ARGS_globalData - instead of ARGS_exec. - - * VM/CTI.h: Added a new argument to the CTI, the global data pointer. - While it's possible to get to the global data pointer using the - ExecState pointer, it's slow enough that it's better to just keep - it around in the CTI arguments. - - * VM/CodeBlock.h: Moved the CodeType enum here from ExecState.h. - - * VM/Machine.cpp: - (JSC::Machine::execute): Pass fewer arguments when constructing - ExecState, and pass the global data pointer when invoking CTI. - (JSC::Machine::firstCallFrame): Added. Used to get the dynamic global - object, which is in the scope chain of the first call frame. - (JSC::Machine::cti_op_add): Use globalData instead of exec when - possible, to keep fast cases fast, since it's now more expensive to - get to it through the exec pointer. - (JSC::Machine::cti_timeout_check): Ditto. - (JSC::Machine::cti_op_put_by_id_second): Ditto. - (JSC::Machine::cti_op_get_by_id_second): Ditto. - (JSC::Machine::cti_op_mul): Ditto. - (JSC::Machine::cti_vm_compile): Ditto. - (JSC::Machine::cti_op_get_by_val): Ditto. - (JSC::Machine::cti_op_sub): Ditto. - (JSC::Machine::cti_op_put_by_val): Ditto. - (JSC::Machine::cti_op_put_by_val_array): Ditto. - (JSC::Machine::cti_op_negate): Ditto. - (JSC::Machine::cti_op_div): Ditto. - (JSC::Machine::cti_op_pre_dec): Ditto. - (JSC::Machine::cti_op_post_inc): Ditto. - (JSC::Machine::cti_op_lshift): Ditto. - (JSC::Machine::cti_op_bitand): Ditto. - (JSC::Machine::cti_op_rshift): Ditto. - (JSC::Machine::cti_op_bitnot): Ditto. - (JSC::Machine::cti_op_mod): Ditto. - (JSC::Machine::cti_op_post_dec): Ditto. - (JSC::Machine::cti_op_urshift): Ditto. - (JSC::Machine::cti_op_bitxor): Ditto. - (JSC::Machine::cti_op_bitor): Ditto. - (JSC::Machine::cti_op_call_eval): Ditto. - (JSC::Machine::cti_op_throw): Ditto. - (JSC::Machine::cti_op_is_string): Ditto. - (JSC::Machine::cti_op_debug): Ditto. - (JSC::Machine::cti_vm_throw): Ditto. - - * VM/Machine.h: Added firstCallFrame. - - * kjs/DebuggerCallFrame.cpp: - (JSC::DebuggerCallFrame::evaluate): Pass fewer arguments when - constructing ExecState. - - * kjs/ExecState.cpp: Deleted contents. Later we'll remove the - file altogether. - - * kjs/ExecState.h: Removed m_globalObject and m_globalData. - Moved CodeType into another header. - (JSC::ExecState::ExecState): Take only a single argument, a - call frame pointer. - (JSC::ExecState::dynamicGlobalObject): Get the object from - the first call frame since it's no longer stored. - (JSC::ExecState::globalData): Get the global data from the - scope chain, since we no longer store a pointer to it here. - (JSC::ExecState::identifierTable): Ditto. - (JSC::ExecState::propertyNames): Ditto. - (JSC::ExecState::emptyList): Ditto. - (JSC::ExecState::lexer): Ditto. - (JSC::ExecState::parser): Ditto. - (JSC::ExecState::machine): Ditto. - (JSC::ExecState::arrayTable): Ditto. - (JSC::ExecState::dateTable): Ditto. - (JSC::ExecState::mathTable): Ditto. - (JSC::ExecState::numberTable): Ditto. - (JSC::ExecState::regExpTable): Ditto. - (JSC::ExecState::regExpConstructorTable): Ditto. - (JSC::ExecState::stringTable): Ditto. - (JSC::ExecState::heap): Ditto. - - * kjs/FunctionConstructor.cpp: - (JSC::FunctionConstructor::FunctionConstructor): Pass - JSGlobalData* instead of ExecState* to the InternalFunction - constructor. - (JSC::constructFunction): Pass the global data pointer when - constructing a new scope chain. - - * kjs/InternalFunction.cpp: - (JSC::InternalFunction::InternalFunction): Take a JSGlobalData* - instead of an ExecState*. Later we can change more places to - work this way -- it's more efficient to take the type you need - since the caller might already have it. - * kjs/InternalFunction.h: Ditto. - - * kjs/JSCell.h: - (JSC::JSCell::operator new): Added an overload that takes a - JSGlobalData* so you can construct without an ExecState*. - - * kjs/JSGlobalObject.cpp: - (JSC::JSGlobalObject::init): Moved creation of the global scope - chain in here, since it now requires a pointer to the global data. - Moved the initialization of the call frame in here since it requires - the global scope chain node. Removed the extra argument to ExecState - when creating the global ExecState*. - * kjs/JSGlobalObject.h: Removed initialization of globalScopeChain - and the call frame from the JSGlobalObjectData constructor. Added - a thisValue argument to the init function. - - * kjs/JSNumberCell.cpp: Added versions of jsNumberCell that take - JSGlobalData* rather than ExecState*. - * kjs/JSNumberCell.h: - (JSC::JSNumberCell::operator new): Added a version that takes - JSGlobalData*. - (JSC::JSNumberCell::JSNumberCell): Ditto. - (JSC::jsNumber): Ditto. - * kjs/JSString.cpp: - (JSC::jsString): Ditto. - (JSC::jsSubstring): Ditto. - (JSC::jsOwnedString): Ditto. - * kjs/JSString.h: - (JSC::JSString::JSString): Changed to take JSGlobalData*. - (JSC::jsEmptyString): Added a version that takes JSGlobalData*. - (JSC::jsSingleCharacterString): Ditto. - (JSC::jsSingleCharacterSubstring): Ditto. - (JSC::jsNontrivialString): Ditto. - (JSC::JSString::getIndex): Ditto. - (JSC::jsString): Ditto. - (JSC::jsSubstring): Ditto. - (JSC::jsOwnedString): Ditto. - - * kjs/ScopeChain.h: Added a globalData pointer to each node. - (JSC::ScopeChainNode::ScopeChainNode): Initialize the globalData - pointer. - (JSC::ScopeChainNode::push): Set the global data pointer in the - new node. - (JSC::ScopeChain::ScopeChain): Take a globalData argument. - - * kjs/SmallStrings.cpp: - (JSC::SmallStrings::createEmptyString): Take JSGlobalData* instead of - ExecState*. - (JSC::SmallStrings::createSingleCharacterString): Ditto. - * kjs/SmallStrings.h: - (JSC::SmallStrings::emptyString): Ditto. - (JSC::SmallStrings::singleCharacterString): Ditto. - -2008-10-03 Cameron Zwarich - - Reviewed by Geoff Garen. - - Bug 21343: REGRESSSION (r37160): ecma_3/ExecutionContexts/10.1.3-1.js and js1_4/Functions/function-001.js fail on 64-bit - - - Add a workaround for a bug in GCC, which affects GCC 4.0, GCC 4.2, and - llvm-gcc 4.2. I put it in an #ifdef because it was a slight regression - on SunSpider in 32-bit, although that might be entirely random. - - * kjs/Arguments.cpp: - (JSC::Arguments::getOwnPropertySlot): - -2008-10-03 Darin Adler - - Rubber stamped by Alexey Proskuryakov. - - * kjs/Shell.cpp: (main): Don't delete JSGlobalData. Later, we need to change - this tool to use public JavaScriptCore API instead. - -2008-10-03 Darin Adler - - Suggested by Alexey Proskuryakov. - - * kjs/JSGlobalData.cpp: - (JSC::JSGlobalData::~JSGlobalData): Remove call to heap.destroy() because - it's too late to ref the JSGlobalData object once it's already being - destroyed. In practice this is not a problem because WebCore's JSGlobalData - is never destroyed and JSGlobalContextRelease takes care of calling - heap.destroy() in advance. - -2008-10-02 Oliver Hunt - - Reviewed by Maciej Stachowiak. - - Replace SSE3 check with an SSE2 check, and implement SSE2 check on windows. - - 5.6% win on SunSpider on windows. - - * VM/CTI.cpp: - (JSC::isSSE2Present): - (JSC::CTI::compileBinaryArithOp): - (JSC::CTI::compileBinaryArithOpSlowCase): - -2008-10-03 Maciej Stachowiak - - Rubber stamped by Cameron Zwarich. - - - fix mistaken change of | to || which caused a big perf regression on EarleyBoyer - - * kjs/grammar.y: - -2008-10-02 Darin Adler - - Reviewed by Geoff Garen. - - - https://bugs.webkit.org/show_bug.cgi?id=21321 - Bug 21321: speed up JavaScriptCore by inlining Heap in JSGlobalData - - 1.019x as fast on SunSpider. - - * API/JSBase.cpp: - (JSEvaluateScript): Use heap. instead of heap-> to work with the heap. - (JSCheckScriptSyntax): Ditto. - (JSGarbageCollect): Ditto. - (JSReportExtraMemoryCost): Ditto. - * API/JSContextRef.cpp: - (JSGlobalContextRetain): Ditto. - (JSGlobalContextRelease): Destroy the heap with the destroy function instead - of the delete operator. - (JSContextGetGlobalObject): Use heap. instead of heap-> to work with the heap. - * API/JSObjectRef.cpp: - (JSObjectMake): Use heap. instead of heap-> to work with the heap. - (JSObjectMakeFunctionWithCallback): Ditto. - (JSObjectMakeConstructor): Ditto. - (JSObjectMakeFunction): Ditto. - (JSObjectMakeArray): Ditto. - (JSObjectMakeDate): Ditto. - (JSObjectMakeError): Ditto. - (JSObjectMakeRegExp): Ditto. - (JSObjectHasProperty): Ditto. - (JSObjectGetProperty): Ditto. - (JSObjectSetProperty): Ditto. - (JSObjectGetPropertyAtIndex): Ditto. - (JSObjectSetPropertyAtIndex): Ditto. - (JSObjectDeleteProperty): Ditto. - (JSObjectCallAsFunction): Ditto. - (JSObjectCallAsConstructor): Ditto. - (JSObjectCopyPropertyNames): Ditto. - (JSPropertyNameAccumulatorAddName): Ditto. - * API/JSValueRef.cpp: - (JSValueIsEqual): Ditto. - (JSValueIsInstanceOfConstructor): Ditto. - (JSValueMakeNumber): Ditto. - (JSValueMakeString): Ditto. - (JSValueToNumber): Ditto. - (JSValueToStringCopy): Ditto. - (JSValueToObject): Ditto. - (JSValueProtect): Ditto. - (JSValueUnprotect): Ditto. - - * kjs/ExecState.h: - (JSC::ExecState::heap): Update to use the & operator. - - * kjs/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): Update to initialize a heap member - instead of calling new to make a heap. - (JSC::JSGlobalData::~JSGlobalData): Destroy the heap with the destroy - function instead of the delete operator. - * kjs/JSGlobalData.h: Change from Heap* to a Heap. - * kjs/JSGlobalObject.cpp: - (JSC::JSGlobalObject::mark): Use the & operator here. - (JSC::JSGlobalObject::operator new): Use heap. instead of heap-> to work - with the heap. - -2008-10-02 Cameron Zwarich - - Reviewed by Geoff Garen. - - Bug 21317: Replace RegisterFile size and capacity information with Register pointers - - - This is a 2.3% speedup on the V8 DeltaBlue benchmark, a 3.3% speedup on - the V8 Raytrace benchmark, and a 1.0% speedup on SunSpider. - - * VM/Machine.cpp: - (JSC::slideRegisterWindowForCall): - (JSC::Machine::callEval): - (JSC::Machine::execute): - (JSC::Machine::privateExecute): - (JSC::Machine::cti_op_call_JSFunction): - (JSC::Machine::cti_op_construct_JSConstruct): - * VM/RegisterFile.cpp: - (JSC::RegisterFile::~RegisterFile): - * VM/RegisterFile.h: - (JSC::RegisterFile::RegisterFile): - (JSC::RegisterFile::start): - (JSC::RegisterFile::end): - (JSC::RegisterFile::size): - (JSC::RegisterFile::shrink): - (JSC::RegisterFile::grow): - (JSC::RegisterFile::lastGlobal): - (JSC::RegisterFile::markGlobals): - (JSC::RegisterFile::markCallFrames): - * kjs/JSGlobalObject.cpp: - (JSC::JSGlobalObject::copyGlobalsTo): - -2008-10-02 Cameron Zwarich - - Rubber-stamped by Darin Adler. - - Change bitwise operations introduced in r37166 to boolean operations. We - only use bitwise operations over boolean operations for increasing - performance in extremely hot code, but that does not apply to anything - in the parser. - - * kjs/grammar.y: - -2008-10-02 Gavin Barraclough - - Reviewed by Darin Adler. - - Fix for bug #21232 - should reset m_isPendingDash on flush, - and should allow '\-' as beginning or end of a range (though - not to specifiy a range itself). - - * ChangeLog: - * wrec/CharacterClassConstructor.cpp: - (JSC::CharacterClassConstructor::put): - (JSC::CharacterClassConstructor::flush): - * wrec/CharacterClassConstructor.h: - (JSC::CharacterClassConstructor::flushBeforeEscapedHyphen): - * wrec/WREC.cpp: - (JSC::WRECGenerator::generateDisjunction): - (JSC::WRECParser::parseCharacterClass): - (JSC::WRECParser::parseDisjunction): - * wrec/WREC.h: - -2008-10-02 Darin Adler - - Reviewed by Sam Weinig. - - - remove the "static" from declarations in a header file, since we - don't want them to have internal linkage - - * VM/Machine.h: Remove the static keyword from the constant and the - three inline functions that Geoff just moved here. - -2008-10-02 Geoffrey Garen - - Reviewed by Sam Weinig. - - Fixed https://bugs.webkit.org/show_bug.cgi?id=21283. - Profiler Crashes When Started - - * VM/Machine.cpp: - * VM/Machine.h: - (JSC::makeHostCallFramePointer): - (JSC::isHostCallFrame): - (JSC::stripHostCallFrameBit): Moved some things to the header so - JSGlobalObject could use them. - - * kjs/JSGlobalObject.h: - (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Call the - new makeHostCallFramePointer API, since 0 no longer indicates a host - call frame. - -2008-10-02 Alexey Proskuryakov - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=21304 - Stop using a static wrapper map for WebCore JS bindings - - * kjs/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): - (JSC::JSGlobalData::~JSGlobalData): - (JSC::JSGlobalData::ClientData::~ClientData): - * kjs/JSGlobalData.h: - Added a client data member to JSGlobalData. WebCore will use it to store bindings-related - global data. - - * JavaScriptCore.exp: Export virtual ClientData destructor. - -2008-10-02 Geoffrey Garen - - Not reviewed. - - Try to fix Qt build. - - * kjs/Error.h: - -2008-10-01 Geoffrey Garen - - Reviewed by Darin Adler and Cameron Zwarich. - - Preliminary step toward dynamic recompilation: Standardized and - simplified the parsing interface. - - The main goal in this patch is to make it easy to ask for a duplicate - compilation, and get back a duplicate result -- same source URL, same - debugger / profiler ID, same toString behavior, etc. - - The basic unit of compilation and evaluation is now SourceCode, which - encompasses a SourceProvider, a range in that provider, and a starting - line number. - - A SourceProvider now encompasses a source URL, and *is* a source ID, - since a pointer is a unique identifier. - - * API/JSBase.cpp: - (JSEvaluateScript): - (JSCheckScriptSyntax): Provide a SourceCode to the Interpreter, since - other APIs are no longer supported. - - * VM/CodeBlock.h: - (JSC::EvalCodeCache::get): Provide a SourceCode to the Interpreter, since - other APIs are no longer supported. - (JSC::CodeBlock::CodeBlock): ASSERT something that used to be ASSERTed - by our caller -- this is a better bottleneck. - - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::CodeGenerator): Updated for the fact that - FunctionBodyNode's parameters are no longer a WTF::Vector. - - * kjs/Arguments.cpp: - (JSC::Arguments::Arguments): ditto - - * kjs/DebuggerCallFrame.cpp: - (JSC::DebuggerCallFrame::evaluate): Provide a SourceCode to the Parser, - since other APIs are no longer supported. - - * kjs/FunctionConstructor.cpp: - (JSC::constructFunction): Provide a SourceCode to the Parser, since - other APIs are no longer supported. Adopt FunctionBodyNode's new - "finishParsing" API. - - * kjs/JSFunction.cpp: - (JSC::JSFunction::lengthGetter): - (JSC::JSFunction::getParameterName): Updated for the fact that - FunctionBodyNode's parameters are no longer a wtf::Vector. - - * kjs/JSFunction.h: Nixed some cruft. - - * kjs/JSGlobalObjectFunctions.cpp: - (JSC::globalFuncEval): Provide a SourceCode to the Parser, since - other APIs are no longer supported. - - * kjs/Parser.cpp: - (JSC::Parser::parse): Require a SourceCode argument, instead of a bunch - of broken out parameters. Stop tracking sourceId as an integer, since we - use the SourceProvider pointer for this now. Don't clamp the - startingLineNumber, since SourceCode does that now. - - * kjs/Parser.h: - (JSC::Parser::parse): Standardized the parsing interface to require a - SourceCode. - - * kjs/Shell.cpp: - (functionRun): - (functionLoad): - (prettyPrintScript): - (runWithScripts): - (runInteractive): Provide a SourceCode to the Interpreter, since - other APIs are no longer supported. - - * kjs/SourceProvider.h: - (JSC::SourceProvider::SourceProvider): - (JSC::SourceProvider::url): - (JSC::SourceProvider::asId): - (JSC::UStringSourceProvider::create): - (JSC::UStringSourceProvider::UStringSourceProvider): Added new - responsibilities described above. - - * kjs/SourceRange.h: - (JSC::SourceCode::SourceCode): - (JSC::SourceCode::toString): - (JSC::SourceCode::provider): - (JSC::SourceCode::firstLine): - (JSC::SourceCode::data): - (JSC::SourceCode::length): Added new responsibilities described above. - Renamed SourceRange to SourceCode, based on review feedback. Added - a makeSource function for convenience. - - * kjs/debugger.h: Provide a SourceCode to the client, since other APIs - are no longer supported. - - * kjs/grammar.y: Provide startingLineNumber when creating a SourceCode. - - * kjs/debugger.h: Treat sourceId as intptr_t to avoid loss of precision - on 64bit platforms. - - * kjs/interpreter.cpp: - (JSC::Interpreter::checkSyntax): - (JSC::Interpreter::evaluate): - * kjs/interpreter.h: Require a SourceCode instead of broken out arguments. - - * kjs/lexer.cpp: - (JSC::Lexer::setCode): - * kjs/lexer.h: - (JSC::Lexer::sourceRange): Fold together the SourceProvider and line number - into a SourceCode. Fixed a bug where the Lexer would accidentally keep - alive the last SourceProvider forever. - - * kjs/nodes.cpp: - (JSC::ScopeNode::ScopeNode): - (JSC::ProgramNode::ProgramNode): - (JSC::ProgramNode::create): - (JSC::EvalNode::EvalNode): - (JSC::EvalNode::generateCode): - (JSC::EvalNode::create): - (JSC::FunctionBodyNode::FunctionBodyNode): - (JSC::FunctionBodyNode::finishParsing): - (JSC::FunctionBodyNode::create): - (JSC::FunctionBodyNode::generateCode): - (JSC::ProgramNode::generateCode): - (JSC::FunctionBodyNode::paramString): - * kjs/nodes.h: - (JSC::ScopeNode::): - (JSC::ScopeNode::sourceId): - (JSC::FunctionBodyNode::): - (JSC::FunctionBodyNode::parameterCount): - (JSC::FuncExprNode::): - (JSC::FuncDeclNode::): Store a SourceCode in all ScopeNodes, since - SourceCode is now responsible for tracking URL, ID, etc. Streamlined - some ad hoc FunctionBodyNode fixups into a "finishParsing" function, to - help make clear what you need to do in order to finish parsing a - FunctionBodyNode. - - * wtf/Vector.h: - (WTF::::releaseBuffer): Don't ASSERT that releaseBuffer() is only called - when buffer is not 0, since FunctionBodyNode is more than happy - to get back a 0 buffer, and other functions like RefPtr::release() allow - for 0, too. - -2008-10-01 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Bug 21289: REGRESSION (r37160): Inspector crashes on load - - - The code in Arguments::mark() in r37160 was wrong. It marks indices in - d->registers, but that makes no sense (they are local variables, not - arguments). It should mark those indices in d->registerArray instead. - - This patch also changes Arguments::copyRegisters() to use d->numParameters - instead of recomputing it. - - * kjs/Arguments.cpp: - (JSC::Arguments::mark): - * kjs/Arguments.h: - (JSC::Arguments::copyRegisters): - -2008-09-30 Darin Adler - - Reviewed by Eric Seidel. - - - https://bugs.webkit.org/show_bug.cgi?id=21214 - work on getting rid of ExecState - - Eliminate some unneeded uses of dynamicGlobalObject. - - * API/JSClassRef.cpp: - (OpaqueJSClass::contextData): Changed to use a map in the global data instead - of on the global object. Also fixed to use only a single hash table lookup. - - * API/JSObjectRef.cpp: - (JSObjectMakeConstructor): Use lexicalGlobalObject rather than dynamicGlobalObject - to get the object prototype. - - * kjs/ArrayPrototype.cpp: - (JSC::arrayProtoFuncToString): Use arrayVisitedElements set in global data rather - than in the global object. - (JSC::arrayProtoFuncToLocaleString): Ditto. - (JSC::arrayProtoFuncJoin): Ditto. - - * kjs/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): Don't initialize opaqueJSClassData, since - it's no longer a pointer. - (JSC::JSGlobalData::~JSGlobalData): We still need to delete all the values, but - we don't need to delete the map since it's no longer a pointer. - - * kjs/JSGlobalData.h: Made opaqueJSClassData a map instead of a pointer to a map. - Also added arrayVisitedElements. - - * kjs/JSGlobalObject.h: Removed arrayVisitedElements. - - * kjs/Shell.cpp: - (functionRun): Use lexicalGlobalObject instead of dynamicGlobalObject. - (functionLoad): Ditto. - -2008-10-01 Cameron Zwarich - - Not reviewed. - - Speculative Windows build fix. - - * kjs/grammar.y: - -2008-10-01 Cameron Zwarich - - Reviewed by Darin Adler. - - Bug 21123: using "arguments" in a function should not force creation of an activation object - - - Make the 'arguments' object not require a JSActivation. We store the - 'arguments' object in the OptionalCalleeArguments call frame slot. We - need to be able to get the original 'arguments' object to tear it off - when returning from a function, but 'arguments' may be assigned to in a - number of ways. - - Therefore, we use the OptionalCalleeArguments slot when we want to get - the original activation or we know that 'arguments' was not assigned a - different value. When 'arguments' may have been assigned a new value, - we use a new local variable that is initialized with 'arguments'. Since - a function parameter named 'arguments' may overwrite the value of - 'arguments', we also need to be careful to look up 'arguments' in the - symbol table, so we get the parameter named 'arguments' instead of the - local variable that we have added for holding the 'arguments' object. - - This is a 19.1% win on the V8 Raytrace benchmark using the SunSpider - harness, and a 20.7% win using the V8 harness. This amounts to a 6.5% - total speedup on the V8 benchmark suite using the V8 harness. - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): - * VM/CodeBlock.h: - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::CodeGenerator): - * VM/Machine.cpp: - (JSC::Machine::unwindCallFrame): - (JSC::Machine::privateExecute): - (JSC::Machine::retrieveArguments): - (JSC::Machine::cti_op_init_arguments): - (JSC::Machine::cti_op_ret_activation_arguments): - * VM/Machine.h: - * VM/RegisterFile.h: - (JSC::RegisterFile::): - * kjs/Arguments.cpp: - (JSC::Arguments::mark): - (JSC::Arguments::fillArgList): - (JSC::Arguments::getOwnPropertySlot): - (JSC::Arguments::put): - * kjs/Arguments.h: - (JSC::Arguments::setRegisters): - (JSC::Arguments::init): - (JSC::Arguments::Arguments): - (JSC::Arguments::copyRegisters): - (JSC::JSActivation::copyRegisters): - * kjs/JSActivation.cpp: - (JSC::JSActivation::argumentsGetter): - * kjs/JSActivation.h: - (JSC::JSActivation::JSActivationData::JSActivationData): - * kjs/grammar.y: - * kjs/nodes.h: - (JSC::ScopeNode::setUsesArguments): - * masm/X86Assembler.h: - (JSC::X86Assembler::): - (JSC::X86Assembler::orl_mr): - -2008-10-01 Kevin McCullough - - Rubberstamped by Geoff Garen. - - Remove BreakpointCheckStatement because it's not used anymore. - No effect on sunspider or the jsc tests. - - * kjs/nodes.cpp: - * kjs/nodes.h: - -2008-09-30 Oliver Hunt - - Reviewed by Geoff Garen. - - Improve performance of CTI on windows. - - Currently on platforms where the compiler doesn't allow us to safely - index relative to the address of a parameter we need to actually - provide a pointer to CTI runtime call arguments. This patch improves - performance in this case by making the CTI logic for restoring this - parameter much less conservative by only resetting it before we actually - make a call, rather than between each and every SF bytecode we generate - code for. - - This results in a 3.6% progression on the v8 benchmark when compiled with MSVC. - - * VM/CTI.cpp: - (JSC::CTI::emitCall): - (JSC::CTI::compileOpCall): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - (JSC::CTI::privateCompilePutByIdTransition): - * VM/CTI.h: - * masm/X86Assembler.h: - * wtf/Platform.h: - -2008-09-30 Maciej Stachowiak - - Reviewed by Oliver Hunt. - - - track uses of "this", "with" and "catch" in the parser - - Knowing this up front will be useful for future optimizations. - - Perf and correctness remain the same. - - * kjs/NodeInfo.h: - * kjs/grammar.y: - -2008-09-30 Sam Weinig - - Reviewed by Mark Rowe. - - Add WebKitAvailability macros for JSObjectMakeArray, JSObjectMakeDate, JSObjectMakeError, - and JSObjectMakeRegExp - - * API/JSObjectRef.h: - -2008-09-30 Darin Adler - - Reviewed by Geoff Garen. - - - https://bugs.webkit.org/show_bug.cgi?id=21214 - work on getting rid of ExecState - - Replaced the m_prev field of ExecState with a bit in the - call frame pointer to indicate "host" call frames. - - * VM/Machine.cpp: - (JSC::makeHostCallFramePointer): Added. Sets low bit. - (JSC::isHostCallFrame): Added. Checks low bit. - (JSC::stripHostCallFrameBit): Added. Clears low bit. - (JSC::Machine::unwindCallFrame): Replaced null check that was - formerly used to detect host call frames with an isHostCallFrame check. - (JSC::Machine::execute): Pass in a host call frame pointer rather than - always passing 0 when starting execution from the host. This allows us - to follow the entire call frame pointer chain when desired, or to stop - at the host calls when that's desired. - (JSC::Machine::privateExecute): Replaced null check that was - formerly used to detect host call frames with an isHostCallFrame check. - (JSC::Machine::retrieveCaller): Ditto. - (JSC::Machine::retrieveLastCaller): Ditto. - (JSC::Machine::callFrame): Removed the code to walk up m_prev pointers - and replaced it with code that uses the caller pointer and uses the - stripHostCallFrameBit function. - - * kjs/ExecState.cpp: Removed m_prev. - * kjs/ExecState.h: Ditto. - -2008-09-30 Cameron Zwarich - - Reviewed by Geoff Garen. - - Move all detection of 'arguments' in a lexical scope to the parser, in - preparation for fixing - - Bug 21123: using "arguments" in a function should not force creation of an activation object - - - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::CodeGenerator): - * kjs/NodeInfo.h: - * kjs/grammar.y: - -2008-09-30 Geoffrey Garen - - Not reviewed. - - * kjs/Shell.cpp: - (runWithScripts): Fixed indentation. - -2008-09-30 Mark Rowe - - Rubber-stamped by Sam Weinig. - - Build fix. Move InternalFunction::classInfo implementation into the .cpp - file to prevent the vtable for InternalFunction being generated as a weak symbol. - Has no effect on SunSpider. - - * kjs/InternalFunction.cpp: - (JSC::InternalFunction::classInfo): - * kjs/InternalFunction.h: - -2008-09-29 Maciej Stachowiak - - Reviewed by Darin Adler. - - - optimize appending a number to a string - https://bugs.webkit.org/show_bug.cgi?id=21203 - - It's pretty common in real-world code (and on some of the v8 - benchmarks) to append a number to a string, so I made this one of - the fast cases, and also added support to UString to do it - directly without allocating a temporary UString. - - ~1% speedup on v8 benchmark. - - * VM/Machine.cpp: - (JSC::jsAddSlowCase): Make this NEVER_INLINE because somehow otherwise - the change is a regression. - (JSC::jsAdd): Handle number + string special case. - (JSC::Machine::cti_op_add): Integrate much of the logic of jsAdd to - avoid exception check in the str + str, num + num and str + num cases. - * kjs/ustring.cpp: - (JSC::expandedSize): Make this a non-member function, since it needs to be - called in non-member functions but not outside this file. - (JSC::expandCapacity): Ditto. - (JSC::UString::expandCapacity): Call the non-member version. - (JSC::createRep): Helper to make a rep from a char*. - (JSC::UString::UString): Use above helper. - (JSC::concatenate): Guts of concatenating constructor for cases where first - item is a UString::Rep, and second is a UChar* and length, or a char*. - (JSC::UString::append): Implement for cases where first item is a UString::Rep, - and second is an int or double. Sadly duplicates logic of UString::from(int) - and UString::from(double). - * kjs/ustring.h: - -2008-09-29 Darin Adler - - Reviewed by Sam Weinig. - - - https://bugs.webkit.org/show_bug.cgi?id=21214 - work on getting rid of ExecState - - * JavaScriptCore.exp: Updated since JSGlobalObject::init - no longer takes a parameter. - - * VM/Machine.cpp: - (JSC::Machine::execute): Removed m_registerFile argument - for ExecState constructors. - - * kjs/DebuggerCallFrame.cpp: - (JSC::DebuggerCallFrame::evaluate): Removed globalThisValue - argument for ExecState constructor. - - * kjs/ExecState.cpp: - (JSC::ExecState::ExecState): Removed globalThisValue and - registerFile arguments to constructors. - - * kjs/ExecState.h: Removed m_globalThisValue and - m_registerFile data members. - - * kjs/JSGlobalObject.cpp: - (JSC::JSGlobalObject::init): Removed globalThisValue - argument for ExecState constructor. - - * kjs/JSGlobalObject.h: - (JSC::JSGlobalObject::JSGlobalObject): Got rid of parameter - for the init function. - -2008-09-29 Geoffrey Garen - - Rubber-stamped by Cameron Zwarich. - - Fixed https://bugs.webkit.org/show_bug.cgi?id=21225 - Machine::retrieveLastCaller should check for a NULL codeBlock - - In order to crash, you would need to call retrieveCaller in a situation - where you had two host call frames in a row in the register file. I - don't know how to make that happen, or if it's even possible, so I don't - have a test case -- but better safe than sorry! - - * VM/Machine.cpp: - (JSC::Machine::retrieveLastCaller): - -2008-09-29 Geoffrey Garen - - Reviewed by Cameron Zwarich. - - Store the callee ScopeChain, not the caller ScopeChain, in the call frame - header. Nix the "scopeChain" local variable and ExecState::m_scopeChain, and - access the callee ScopeChain through the call frame header instead. - - Profit: call + return are simpler, because they don't have to update the - "scopeChain" local variable, or ExecState::m_scopeChain. - - Because CTI keeps "r" in a register, reading the callee ScopeChain relative - to "r" can be very fast, in any cases we care to optimize. - - 0% speedup on empty function call benchmark. (5.5% speedup in bytecode.) - 0% speedup on SunSpider. (7.5% speedup on controlflow-recursive.) - 2% speedup on SunSpider --v8. - 2% speedup on v8 benchmark. - - * VM/CTI.cpp: Changed scope chain access to read the scope chain from - the call frame header. Sped up op_ret by changing it not to fuss with - the "scopeChain" local variable or ExecState::m_scopeChain. - - * VM/CTI.h: Updated CTI trampolines not to take a ScopeChainNode* - argument, since that's stored in the call frame header now. - - * VM/Machine.cpp: Access "scopeChain" and "codeBlock" through new helper - functions that read from the call frame header. Updated functions operating - on ExecState::m_callFrame to account for / take advantage of the fact that - Exec:m_callFrame is now never NULL. - - Fixed a bug in op_construct, where it would use the caller's default - object prototype, rather than the callee's, when constructing a new object. - - * VM/Machine.h: Made some helper functions available. Removed - ScopeChainNode* arguments to a lot of functions, since the ScopeChainNode* - is now stored in the call frame header. - - * VM/RegisterFile.h: Renamed "CallerScopeChain" to "ScopeChain", since - that's what it is now. - - * kjs/DebuggerCallFrame.cpp: Updated for change to ExecState signature. - - * kjs/ExecState.cpp: - * kjs/ExecState.h: Nixed ExecState::m_callFrame, along with the unused - isGlobalObject function. - - * kjs/JSGlobalObject.cpp: - * kjs/JSGlobalObject.h: Gave the global object a fake call frame in - which to store the global scope chain, since our code now assumes that - it can always read the scope chain out of the ExecState's call frame. - -2008-09-29 Cameron Zwarich - - Reviewed by Sam Weinig. - - Remove the isActivationObject() virtual method on JSObject and use - StructureID information instead. This should be slightly faster, but - isActivationObject() is only used in assertions and unwinding the stack - for exceptions. - - * VM/Machine.cpp: - (JSC::depth): - (JSC::Machine::unwindCallFrame): - (JSC::Machine::privateExecute): - (JSC::Machine::cti_op_ret_activation): - * kjs/JSActivation.cpp: - * kjs/JSActivation.h: - * kjs/JSObject.h: - -2008-09-29 Peter Gal - - Reviewed and tweaked by Darin Adler. - - Fix build for non-all-in-one platforms. - - * kjs/StringPrototype.cpp: Added missing ASCIICType.h include. - -2008-09-29 Bradley T. Hughes - - Reviewed by Simon Hausmann. - - Fix compilation with icpc - - * wtf/HashSet.h: - (WTF::::find): - (WTF::::contains): - -2008-09-29 Thiago Macieira - - Reviewed by Simon Hausmann. - - Changed copyright from Trolltech ASA to Nokia. - - Nokia acquired Trolltech ASA, assets were transferred on September 26th 2008. - - - * wtf/qt/MainThreadQt.cpp: - -2008-09-29 Simon Hausmann - - Reviewed by Lars Knoll. - - Don't accidentially install libJavaScriptCore.a for the build inside - Qt. - - * JavaScriptCore.pro: - -2008-09-28 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Bug 21200: Allow direct access to 'arguments' without using op_resolve - - - Allow fast access to the 'arguments' object by adding an extra slot to - the callframe to store it. - - This is a 3.0% speedup on the V8 Raytrace benchmark. - - * JavaScriptCore.exp: - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): - * VM/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::CodeGenerator): - (JSC::CodeGenerator::registerFor): - * VM/CodeGenerator.h: - (JSC::CodeGenerator::registerFor): - * VM/Machine.cpp: - (JSC::Machine::initializeCallFrame): - (JSC::Machine::dumpRegisters): - (JSC::Machine::privateExecute): - (JSC::Machine::retrieveArguments): - (JSC::Machine::cti_op_call_JSFunction): - (JSC::Machine::cti_op_create_arguments): - (JSC::Machine::cti_op_construct_JSConstruct): - * VM/Machine.h: - * VM/Opcode.h: - * VM/RegisterFile.h: - (JSC::RegisterFile::): - * kjs/JSActivation.cpp: - (JSC::JSActivation::mark): - (JSC::JSActivation::argumentsGetter): - * kjs/JSActivation.h: - (JSC::JSActivation::JSActivationData::JSActivationData): - * kjs/NodeInfo.h: - * kjs/Parser.cpp: - (JSC::Parser::didFinishParsing): - * kjs/Parser.h: - (JSC::Parser::parse): - * kjs/grammar.y: - * kjs/nodes.cpp: - (JSC::ScopeNode::ScopeNode): - (JSC::ProgramNode::ProgramNode): - (JSC::ProgramNode::create): - (JSC::EvalNode::EvalNode): - (JSC::EvalNode::create): - (JSC::FunctionBodyNode::FunctionBodyNode): - (JSC::FunctionBodyNode::create): - * kjs/nodes.h: - (JSC::ScopeNode::usesArguments): - -2008-09-28 Mark Rowe - - Reviewed by Sam Weinig. - - Add an ASCII fast-path to toLowerCase and toUpperCase. - - The fast path speeds up the common case of an ASCII-only string by up to 60% while adding a less than 5% penalty - to the less common non-ASCII case. - - This also removes stringProtoFuncToLocaleLowerCase and stringProtoFuncToLocaleUpperCase, which were identical - to the non-locale variants of the functions. toLocaleLowerCase and toLocaleUpperCase now use the non-locale - variants of the functions directly. - - * kjs/StringPrototype.cpp: - (JSC::stringProtoFuncToLowerCase): - (JSC::stringProtoFuncToUpperCase): - -2008-09-28 Mark Rowe - - Reviewed by Cameron Zwarich. - - Speed up parseInt and parseFloat. - - Repeatedly indexing into a UString is slow, so retrieve a pointer into the underlying buffer once up front - and use that instead. This is a 7% win on a parseInt/parseFloat micro-benchmark. - - * kjs/JSGlobalObjectFunctions.cpp: - (JSC::parseInt): - (JSC::parseFloat): - -2008-09-28 Simon Hausmann - - Reviewed by David Hyatt. - - In Qt's initializeThreading re-use an existing thread identifier for the main - thread if it exists. - - currentThread() implicitly creates new identifiers and it could be that - it is called before initializeThreading(). - - * wtf/ThreadingQt.cpp: - (WTF::initializeThreading): - -2008-09-27 Keishi Hattori - - Added Machine::retrieveCaller to the export list. - - Reviewed by Kevin McCullough and Tim Hatcher. - - * JavaScriptCore.exp: Added Machine::retrieveCaller. - -2008-09-27 Anders Carlsson - - Fix build. - - * VM/CTI.cpp: - (JSC::): - -2008-09-27 Geoffrey Garen - - Reviewed by Cameron Zwarich. - - https://bugs.webkit.org/show_bug.cgi?id=21175 - - Store the callee CodeBlock, not the caller CodeBlock, in the call frame - header. Nix the "codeBlock" local variable, and access the callee - CodeBlock through the call frame header instead. - - Profit: call + return are simpler, because they don't have to update the - "codeBlock" local variable. - - Because CTI keeps "r" in a register, reading the callee CodeBlock relative - to "r" can be very fast, in any cases we care to optimize. Presently, - no such cases seem important. - - Also, stop writing "dst" to the call frame header. CTI doesn't use it. - - 21.6% speedup on empty function call benchmark. - 3.8% speedup on SunSpider --v8. - 2.1% speedup on v8 benchmark. - 0.7% speedup on SunSpider (6% speedup on controlflow-recursive). - - Small regression in bytecode, because currently every op_ret reads the - callee CodeBlock to check needsFullScopeChain, and bytecode does not - keep "r" in a register. On-balance, this is probably OK, since CTI is - our high-performance execution model. Also, this should go away once - we make needsFullScopeChain statically determinable at parse time. - - * VM/CTI.cpp: - (JSC::CTI::compileOpCall): The speedup! - (JSC::CTI::privateCompileSlowCases): ditto - - * VM/CTI.h: - (JSC::): Fixed up magic trampoline constants to account for the nixed - "codeBlock" argument. - (JSC::CTI::execute): Changed trampoline function not to take a "codeBlock" - argument, since codeBlock is now stored in the call frame header. - - * VM/Machine.cpp: Read the callee CodeBlock from the register file. Use - a NULL CallerRegisters in the call frame header to signal a built-in - caller, since CodeBlock is now never NULL. - - * VM/Machine.h: Made some stand-alone functions Machine member functions - so they could call the private codeBlock() accessor in the Register - class, of which Machine is a friend. Renamed "CallerCodeBlock" to - "CodeBlock", since it's no longer the caller's CodeBlock. - - * VM/RegisterFile.h: Marked some methods const to accommodate a - const RegisterFile* being passed around in Machine.cpp. - -2008-09-26 Jan Michael Alonzo - - Gtk build fix. Not reviewed. - - Narrow-down the target of the JavaScriptCore .lut.h generator so - it won't try to create the WebCore .lut.hs. - - * GNUmakefile.am: - -2008-09-26 Matt Lilek - - Reviewed by Tim Hatcher. - - Update FEATURE_DEFINES after ENABLE_CROSS_DOCUMENT_MESSAGING was removed. - - * Configurations/JavaScriptCore.xcconfig: - -2008-09-26 Cameron Zwarich - - Rubber-stamped by Anders Carlson. - - Change the name 'sc' to 'scopeChainNode' in a few places. - - * kjs/nodes.cpp: - (JSC::EvalNode::generateCode): - (JSC::FunctionBodyNode::generateCode): - (JSC::ProgramNode::generateCode): - -2008-09-26 Sam Weinig - - Reviewed by Darin Adler. - - Patch for https://bugs.webkit.org/show_bug.cgi?id=21152 - Speedup static property get/put - - Convert getting/setting static property values to use static functions - instead of storing an integer and switching in getValueProperty/putValueProperty. - - * kjs/JSObject.cpp: - (JSC::JSObject::deleteProperty): - (JSC::JSObject::getPropertyAttributes): - * kjs/MathObject.cpp: - (JSC::MathObject::getOwnPropertySlot): - * kjs/NumberConstructor.cpp: - (JSC::numberConstructorNaNValue): - (JSC::numberConstructorNegInfinity): - (JSC::numberConstructorPosInfinity): - (JSC::numberConstructorMaxValue): - (JSC::numberConstructorMinValue): - * kjs/PropertySlot.h: - (JSC::PropertySlot::): - * kjs/RegExpConstructor.cpp: - (JSC::regExpConstructorDollar1): - (JSC::regExpConstructorDollar2): - (JSC::regExpConstructorDollar3): - (JSC::regExpConstructorDollar4): - (JSC::regExpConstructorDollar5): - (JSC::regExpConstructorDollar6): - (JSC::regExpConstructorDollar7): - (JSC::regExpConstructorDollar8): - (JSC::regExpConstructorDollar9): - (JSC::regExpConstructorInput): - (JSC::regExpConstructorMultiline): - (JSC::regExpConstructorLastMatch): - (JSC::regExpConstructorLastParen): - (JSC::regExpConstructorLeftContext): - (JSC::regExpConstructorRightContext): - (JSC::setRegExpConstructorInput): - (JSC::setRegExpConstructorMultiline): - (JSC::RegExpConstructor::setInput): - (JSC::RegExpConstructor::setMultiline): - (JSC::RegExpConstructor::multiline): - * kjs/RegExpConstructor.h: - * kjs/RegExpObject.cpp: - (JSC::regExpObjectGlobal): - (JSC::regExpObjectIgnoreCase): - (JSC::regExpObjectMultiline): - (JSC::regExpObjectSource): - (JSC::regExpObjectLastIndex): - (JSC::setRegExpObjectLastIndex): - * kjs/RegExpObject.h: - (JSC::RegExpObject::setLastIndex): - (JSC::RegExpObject::lastIndex): - (JSC::RegExpObject::RegExpObjectData::RegExpObjectData): - * kjs/StructureID.cpp: - (JSC::StructureID::getEnumerablePropertyNames): - * kjs/create_hash_table: - * kjs/lexer.cpp: - (JSC::Lexer::lex): - * kjs/lookup.cpp: - (JSC::HashTable::createTable): - (JSC::HashTable::deleteTable): - (JSC::setUpStaticFunctionSlot): - * kjs/lookup.h: - (JSC::HashEntry::initialize): - (JSC::HashEntry::setKey): - (JSC::HashEntry::key): - (JSC::HashEntry::attributes): - (JSC::HashEntry::function): - (JSC::HashEntry::functionLength): - (JSC::HashEntry::propertyGetter): - (JSC::HashEntry::propertyPutter): - (JSC::HashEntry::lexerValue): - (JSC::HashEntry::): - (JSC::HashTable::entry): - (JSC::getStaticPropertySlot): - (JSC::getStaticValueSlot): - (JSC::lookupPut): - -2008-09-26 Gavin Barraclough - - Reviewed by Maciej Stachowiak & Oliver Hunt. - - Add support for reusing temporary JSNumberCells. This change is based on the observation - that if the result of certain operations is a JSNumberCell and is consumed by a subsequent - operation that would produce a JSNumberCell, we can reuse the object rather than allocating - a fresh one. E.g. given the expression ((a * b) * c), we can statically determine that - (a * b) will have a numeric result (or else it will have thrown an exception), so the result - will either be a JSNumberCell or a JSImmediate. - - This patch changes three areas of JSC: - * The AST now tracks type information about the result of each node. - * This information is consumed in bytecode compilation, and certain bytecode operations - now carry the statically determined type information about their operands. - * CTI uses the information in a number of fashions: - * Where an operand to certain arithmetic operations is reusable, it will plant code - to try to perform the operation in JIT code & reuse the cell, where appropriate. - * Where it can be statically determined that an operand can only be numeric (typically - the result of another arithmetic operation) the code will not redundantly check that - the JSCell is a JSNumberCell. - * Where either of the operands to an add are non-numeric do not plant an optimized - arithmetic code path, just call straight out to the C function. - - +6% Sunspider (10% progression on 3D, 16% progression on math, 60% progression on access-nbody), - +1% v8-tests (improvements in raytrace & crypto) - - * VM/CTI.cpp: Add optimized code generation with reuse of temporary JSNumberCells. - * VM/CTI.h: - * kjs/JSNumberCell.h: - * masm/X86Assembler.h: - - * VM/CodeBlock.cpp: Add type information to specific bytecodes. - * VM/CodeGenerator.cpp: - * VM/CodeGenerator.h: - * VM/Machine.cpp: - - * kjs/nodes.cpp: Track static type information for nodes. - * kjs/nodes.h: - * kjs/ResultDescriptor.h: (Added) - * JavaScriptCore.xcodeproj/project.pbxproj: - -2008-09-26 Yichao Yin - - Reviewed by George Staikos, Maciej Stachowiak. - - Add utility functions needed for upcoming WML code. - - * wtf/ASCIICType.h: - (WTF::isASCIIPrintable): - -2008-09-26 Geoffrey Garen - - Reviewed by Darin Adler. - - Reverted the part of r36614 that used static data because static data - is not thread-safe. - -2008-09-26 Geoffrey Garen - - Reviewed by Maciej Stachowiak. - - Removed dynamic check for whether the callee needs an activation object. - Replaced with callee code to create the activation object. - - 0.5% speedup on SunSpider. - No change on v8 benchmark. (Might be a speedup, but it's in range of the - variance.) - - 0.7% speedup on v8 benchmark in bytecode. - 1.3% speedup on empty call benchmark in bytecode. - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): Added support for op_init_activation, - the new opcode that specifies that the callee's initialization should - create an activation object. - (JSC::CTI::privateCompile): Removed previous code that did a similar - thing in an ad-hoc way. - - * VM/CodeBlock.cpp: - (JSC::CodeBlock::dump): Added a case for dumping op_init_activation. - - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::generate): Added fixup code to change op_init to - op_init_activation if necessary. (With a better parser, we would know - which to use from the beginning.) - - * VM/Instruction.h: - (JSC::Instruction::Instruction): - (WTF::): Faster traits for the instruction vector. An earlier version - of this patch relied on inserting at the beginning of the vector, and - depended on this change for speed. - - * VM/Machine.cpp: - (JSC::Machine::execute): Removed clients of setScopeChain, the old - abstraction for dynamically checking for whether an activation object - needed to be created. - (JSC::Machine::privateExecute): ditto - - (JSC::Machine::cti_op_push_activation): Renamed this function from - cti_vm_updateScopeChain, and made it faster by removing the call to - setScopeChain. - * VM/Machine.h: - - * VM/Opcode.h: Declared op_init_activation. - -2008-09-24 Geoffrey Garen - - Reviewed by Maciej Stachowiak. - - Move most of the return code back into the callee, now that the callee - doesn't have to calculate anything dynamically. - - 11.5% speedup on empty function call benchmark. - - SunSpider says 0.3% faster. SunSpider --v8 says no change. - - * VM/CTI.cpp: - (JSC::CTI::compileOpCall): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - -2008-09-24 Sam Weinig - - Reviewed by Maciej Stachowiak. - - Remove staticFunctionGetter. There is only one remaining user of - staticFunctionGetter and it can be converted to use setUpStaticFunctionSlot. - - * JavaScriptCore.exp: - * kjs/lookup.cpp: - * kjs/lookup.h: - -2008-09-24 Maciej Stachowiak - - Reviewed by Oliver Hunt. - - - inline JIT fast case of op_neq - - remove extra level of function call indirection from slow cases of eq and neq - - 1% speedup on Richards - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - * VM/Machine.cpp: - (JSC::Machine::privateExecute): - (JSC::Machine::cti_op_eq): - (JSC::Machine::cti_op_neq): - * kjs/operations.cpp: - (JSC::equal): - (JSC::equalSlowCase): - * kjs/operations.h: - (JSC::equalSlowCaseInline): - -2008-09-24 Sam Weinig - - Reviewed by Darin Adler. - - Fix for https://bugs.webkit.org/show_bug.cgi?id=21080 - - Crash below Function.apply when using a runtime array as the argument list - - Test: plugins/bindings-array-apply-crash.html - - * kjs/FunctionPrototype.cpp: - (JSC::functionProtoFuncApply): Revert to the slow case if the object inherits from - JSArray (via ClassInfo) but is not a JSArray. - -2008-09-24 Kevin McCullough - - Style change. - - * kjs/nodes.cpp: - (JSC::statementListEmitCode): - -2008-09-24 Kevin McCullough - - Reviewed by Geoff. - - Bug 21031: Breakpoints in the condition of loops only breaks the first - time - - Now when setting breakpoints in the condition of a loop (for, while, - for in, and do while) will successfully break each time throught the - loop. - - For 'for' loops we need a little more complicated behavior that cannot - be accomplished without some more significant changes: - https://bugs.webkit.org/show_bug.cgi?id=21073 - - * kjs/nodes.cpp: - (JSC::statementListEmitCode): We don't want to blindly emit a debug hook - at the first line of loops, instead let the loop emit the debug hooks. - (JSC::DoWhileNode::emitCode): - (JSC::WhileNode::emitCode): - (JSC::ForNode::emitCode): - (JSC::ForInNode::emitCode): - * kjs/nodes.h: - (JSC::StatementNode::): - (JSC::DoWhileNode::): - (JSC::WhileNode::): - (JSC::ForInNode::): - -2008-09-24 Geoffrey Garen - - Reviewed by Darin Adler. - - Fixed Need a SPI for telling JS the size of - the objects it retains - - * API/tests/testapi.c: Test the new SPI a little. - - * API/JSSPI.cpp: Add the new SPI. - * API/JSSPI.h: Add the new SPI. - * JavaScriptCore.exp: Add the new SPI. - * JavaScriptCore.xcodeproj/project.pbxproj: Add the new SPI. - -2008-09-24 Geoffrey Garen - - Reviewed by Darin Adler. - - * API/JSBase.h: Filled in some missing function names. - -2008-09-24 Geoffrey Garen - - Reviewed by Cameron Zwarich. - - Fixed https://bugs.webkit.org/show_bug.cgi?id=21057 - Crash in RegisterID::deref() running fast/canvas/canvas-putImageData.html - - * VM/CodeGenerator.h: Changed declaration order to ensure the - m_lastConstant, which is a RefPtr that points into m_calleeRegisters, - has its destructor called before the destructor for m_calleeRegisters. - -2008-09-24 Darin Adler - - Reviewed by Sam Weinig. - - - https://bugs.webkit.org/show_bug.cgi?id=21047 - speed up ret_activation with inlining - - About 1% on v8-raytrace. - - * JavaScriptCore.exp: Removed JSVariableObject::setRegisters. - - * kjs/JSActivation.cpp: Moved copyRegisters to the header to make it inline. - * kjs/JSActivation.h: - (JSC::JSActivation::copyRegisters): Moved here. Also removed the registerArraySize - argument to setRegisters, since the object doesn't need to store the number of - registers. - - * kjs/JSGlobalObject.cpp: - (JSC::JSGlobalObject::reset): Removed unnecessary clearing left over from when we - used this on objects that weren't brand new. These days, this function is really - just part of the constructor. - - * kjs/JSGlobalObject.h: Added registerArraySize to JSGlobalObjectData, since - JSVariableObjectData no longer needs it. Added a setRegisters override here - that handles storing the size. - - * kjs/JSStaticScopeObject.h: Removed code to set registerArraySize, since it - no longer exists. - - * kjs/JSVariableObject.cpp: Moved copyRegisterArray and setRegisters to the - header to make them inline. - * kjs/JSVariableObject.h: Removed registerArraySize from JSVariableObjectData, - since it was only used for the global object. - (JSC::JSVariableObject::copyRegisterArray): Moved here ot make it inline. - (JSC::JSVariableObject::setRegisters): Moved here to make it inline. Also - removed the code to set registerArraySize and changed an if statement into - an assert to save an unnnecessary branch. - -2008-09-24 Maciej Stachowiak - - Reviewed by Oliver Hunt. - - - inline PropertyMap::getOffset to speed up polymorphic lookups - - ~1.5% speedup on v8 benchmark - no effect on SunSpider - - * JavaScriptCore.exp: - * kjs/PropertyMap.cpp: - * kjs/PropertyMap.h: - (JSC::PropertyMap::getOffset): - -2008-09-24 Jan Michael Alonzo - - Reviewed by Alp Toker. - - https://bugs.webkit.org/show_bug.cgi?id=20992 - Build fails on GTK+ Mac OS - - * wtf/ThreadingGtk.cpp: Remove platform ifdef as suggested by - Richard Hult. - (WTF::initializeThreading): - -2008-09-23 Oliver Hunt - - Reviewed by Maciej Stachowiak. - - Bug 19968: Slow Script at www.huffingtonpost.com - - - Finally found the cause of this accursed issue. It is triggered - by synchronous creation of a new global object from JS. The new - global object resets the timer state in this execution group's - Machine, taking timerCheckCount to 0. Then when JS returns the - timerCheckCount is decremented making it non-zero. The next time - we execute JS we will start the timeout counter, however the non-zero - timeoutCheckCount means we don't reset the timer information. This - means that the timeout check is now checking the cumulative time - since the creation of the global object rather than the time since - JS was last entered. At this point the slow script dialog is guaranteed - to eventually be displayed incorrectly unless a page is loaded - asynchronously (which will reset everything into a sane state). - - The fix for this is rather trivial -- the JSGlobalObject constructor - should not be resetting the machine timer state. - - * VM/Machine.cpp: - (JSC::Machine::Machine): - Now that we can't rely on the GlobalObject initialising the timeout - state, we do it in the Machine constructor. - - * VM/Machine.h: - (JSC::Machine::stopTimeoutCheck): - Add assertions to guard against this happening. - - * kjs/JSGlobalObject.cpp: - (JSC::JSGlobalObject::init): - Don't reset the timeout state. - -2008-09-23 Geoffrey Garen - - Reviewed by Oliver Hunt. - - Fixed https://bugs.webkit.org/show_bug.cgi?id=21038 | - Uncaught exceptions in regex replace callbacks crash webkit - - This was a combination of two problems: - - (1) the replace function would continue execution after an exception - had been thrown. - - (2) In some cases, the Machine would return 0 in the case of an exception, - despite the fact that a few clients dereference the Machine's return - value without first checking for an exception. - - * VM/Machine.cpp: - (JSC::Machine::execute): - - ^ Return jsNull() instead of 0 in the case of an exception, since some - clients depend on using our return value. - - ^ ASSERT that execution does not continue after an exception has been - thrown, to help catch problems like this in the future. - - * kjs/StringPrototype.cpp: - (JSC::stringProtoFuncReplace): - - ^ Stop execution if an exception has been thrown. - -2008-09-23 Geoffrey Garen - - Try to fix the windows build. - - * VM/CTI.cpp: - (JSC::CTI::compileOpCall): - (JSC::CTI::privateCompileMainPass): - -2008-09-23 Alp Toker - - Build fix. - - * VM/CTI.h: - -2008-09-23 Geoffrey Garen - - Reviewed by Darin Adler. - - * wtf/Platform.h: Removed duplicate #if. - -2008-09-23 Geoffrey Garen - - Reviewed by Darin Adler. - - Changed the layout of the call frame from - - { header, parameters, locals | constants, temporaries } - - to - - { parameters, header | locals, constants, temporaries } - - This simplifies function entry+exit, and enables a number of future - optimizations. - - 13.5% speedup on empty call benchmark for bytecode; 23.6% speedup on - empty call benchmark for CTI. - - SunSpider says no change. SunSpider --v8 says 1% faster. - - * VM/CTI.cpp: - - Added a bit of abstraction for calculating whether a register is a - constant, since this patch changes that calculation: - (JSC::CTI::isConstant): - (JSC::CTI::getConstant): - (JSC::CTI::emitGetArg): - (JSC::CTI::emitGetPutArg): - (JSC::CTI::getConstantImmediateNumericArg): - - Updated for changes to callframe header location: - (JSC::CTI::emitPutToCallFrameHeader): - (JSC::CTI::emitGetFromCallFrameHeader): - (JSC::CTI::printOpcodeOperandTypes): - - Renamed to spite Oliver: - (JSC::CTI::emitInitRegister): - - Added an abstraction for emitting a call through a register, so that - calls through registers generate exception info, too: - (JSC::CTI::emitCall): - - Updated to match the new callframe header layout, and to support calls - through registers, which have no destination address: - (JSC::CTI::compileOpCall): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - (JSC::CTI::privateCompile): - - * VM/CTI.h: - - More of the above: - (JSC::CallRecord::CallRecord): - - * VM/CodeBlock.cpp: - - Updated for new register layout: - (JSC::registerName): - (JSC::CodeBlock::dump): - - * VM/CodeBlock.h: - - Updated CodeBlock to track slightly different information about the - register frame, and tweaked the style of an ASSERT_NOT_REACHED. - (JSC::CodeBlock::CodeBlock): - (JSC::CodeBlock::getStubInfo): - - * VM/CodeGenerator.cpp: - - Added some abstraction around constant register allocation, since this - patch changes it, changed codegen to account for the new callframe - layout, and added abstraction around register fetching code - that used to assume that all local registers lived at negative indices, - since vars now live at positive indices: - (JSC::CodeGenerator::generate): - (JSC::CodeGenerator::addVar): - (JSC::CodeGenerator::addGlobalVar): - (JSC::CodeGenerator::allocateConstants): - (JSC::CodeGenerator::CodeGenerator): - (JSC::CodeGenerator::addParameter): - (JSC::CodeGenerator::registerFor): - (JSC::CodeGenerator::constRegisterFor): - (JSC::CodeGenerator::newRegister): - (JSC::CodeGenerator::newTemporary): - (JSC::CodeGenerator::highestUsedRegister): - (JSC::CodeGenerator::addConstant): - - ASSERT that our caller referenced the registers it passed to us. - Otherwise, we might overwrite them with parameters: - (JSC::CodeGenerator::emitCall): - (JSC::CodeGenerator::emitConstruct): - - * VM/CodeGenerator.h: - - Added some abstraction for getting a RegisterID for a given index, - since the rules are a little weird: - (JSC::CodeGenerator::registerFor): - - * VM/Machine.cpp: - - Utility function to transform a machine return PC to a virtual machine - return VPC, for the sake of stack unwinding, since both PCs are stored - in the same location now: - (JSC::vPCForPC): - - Tweaked to account for new call frame: - (JSC::Machine::initializeCallFrame): - - Tweaked to account for registerOffset supplied by caller: - (JSC::slideRegisterWindowForCall): - - Tweaked to account for new register layout: - (JSC::scopeChainForCall): - (JSC::Machine::callEval): - (JSC::Machine::dumpRegisters): - (JSC::Machine::unwindCallFrame): - (JSC::Machine::execute): - - Changed op_call and op_construct to implement the new calling convention: - (JSC::Machine::privateExecute): - - Tweaked to account for the new register layout: - (JSC::Machine::retrieveArguments): - (JSC::Machine::retrieveCaller): - (JSC::Machine::retrieveLastCaller): - (JSC::Machine::callFrame): - (JSC::Machine::getArgumentsData): - - Changed CTI call helpers to implement the new calling convention: - (JSC::Machine::cti_op_call_JSFunction): - (JSC::Machine::cti_op_call_NotJSFunction): - (JSC::Machine::cti_op_ret_activation): - (JSC::Machine::cti_op_ret_profiler): - (JSC::Machine::cti_op_construct_JSConstruct): - (JSC::Machine::cti_op_construct_NotJSConstruct): - (JSC::Machine::cti_op_call_eval): - - * VM/Machine.h: - - * VM/Opcode.h: - - Renamed op_initialise_locals to op_init, because this opcode - doesn't initialize all locals, and it doesn't initialize only locals. - Also, to spite Oliver. - - * VM/RegisterFile.h: - - New call frame enumeration values: - (JSC::RegisterFile::): - - Simplified the calculation of whether a RegisterID is a temporary, - since we can no longer assume that all positive non-constant registers - are temporaries: - * VM/RegisterID.h: - (JSC::RegisterID::RegisterID): - (JSC::RegisterID::setTemporary): - (JSC::RegisterID::isTemporary): - - Renamed firstArgumentIndex to firstParameterIndex because the assumption - that this variable pertained to the actual arguments supplied by the - caller caused me to write some buggy code: - * kjs/Arguments.cpp: - (JSC::ArgumentsData::ArgumentsData): - (JSC::Arguments::Arguments): - (JSC::Arguments::fillArgList): - (JSC::Arguments::getOwnPropertySlot): - (JSC::Arguments::put): - - Updated for new call frame layout: - * kjs/DebuggerCallFrame.cpp: - (JSC::DebuggerCallFrame::functionName): - (JSC::DebuggerCallFrame::type): - * kjs/DebuggerCallFrame.h: - - Changed the activation object to account for the fact that a call frame - header now sits between parameters and local variables. This change - requires all variable objects to do their own marking, since they - now use their register storage differently: - * kjs/JSActivation.cpp: - (JSC::JSActivation::mark): - (JSC::JSActivation::copyRegisters): - (JSC::JSActivation::createArgumentsObject): - * kjs/JSActivation.h: - - Updated global object to use the new interfaces required by the change - to JSActivation above: - * kjs/JSGlobalObject.cpp: - (JSC::JSGlobalObject::reset): - (JSC::JSGlobalObject::mark): - (JSC::JSGlobalObject::copyGlobalsFrom): - (JSC::JSGlobalObject::copyGlobalsTo): - * kjs/JSGlobalObject.h: - (JSC::JSGlobalObject::addStaticGlobals): - - Updated static scope object to use the new interfaces required by the - change to JSActivation above: - * kjs/JSStaticScopeObject.cpp: - (JSC::JSStaticScopeObject::mark): - (JSC::JSStaticScopeObject::~JSStaticScopeObject): - * kjs/JSStaticScopeObject.h: - (JSC::JSStaticScopeObject::JSStaticScopeObject): - (JSC::JSStaticScopeObject::d): - - Updated variable object to use the new interfaces required by the - change to JSActivation above: - * kjs/JSVariableObject.cpp: - (JSC::JSVariableObject::copyRegisterArray): - (JSC::JSVariableObject::setRegisters): - * kjs/JSVariableObject.h: - - Changed the bit twiddling in symbol table not to assume that all indices - are negative, since they can be positive now: - * kjs/SymbolTable.h: - (JSC::SymbolTableEntry::SymbolTableEntry): - (JSC::SymbolTableEntry::isNull): - (JSC::SymbolTableEntry::getIndex): - (JSC::SymbolTableEntry::getAttributes): - (JSC::SymbolTableEntry::setAttributes): - (JSC::SymbolTableEntry::isReadOnly): - (JSC::SymbolTableEntry::pack): - (JSC::SymbolTableEntry::isValidIndex): - - Changed call and construct nodes to ref their functions and/or bases, - so that emitCall/emitConstruct doesn't overwrite them with parameters. - Also, updated for rename to registerFor: - * kjs/nodes.cpp: - (JSC::ResolveNode::emitCode): - (JSC::NewExprNode::emitCode): - (JSC::EvalFunctionCallNode::emitCode): - (JSC::FunctionCallValueNode::emitCode): - (JSC::FunctionCallResolveNode::emitCode): - (JSC::FunctionCallBracketNode::emitCode): - (JSC::FunctionCallDotNode::emitCode): - (JSC::PostfixResolveNode::emitCode): - (JSC::DeleteResolveNode::emitCode): - (JSC::TypeOfResolveNode::emitCode): - (JSC::PrefixResolveNode::emitCode): - (JSC::ReadModifyResolveNode::emitCode): - (JSC::AssignResolveNode::emitCode): - (JSC::ConstDeclNode::emitCodeSingle): - (JSC::ForInNode::emitCode): - - Added abstraction for getting exception info out of a call through a - register: - * masm/X86Assembler.h: - (JSC::X86Assembler::emitCall): - - Removed duplicate #if: - * wtf/Platform.h: - -2008-09-23 Kevin McCullough - - Reviewed by Darin. - - Bug 21030: The JS debugger breaks on the do of a do-while not the while - (where the conditional statement is) - https://bugs.webkit.org/show_bug.cgi?id=21030 - Now the statementListEmitCode detects if a do-while node is being - emited and emits the debug hook on the last line instead of the first. - - This change had no effect on sunspider. - - * kjs/nodes.cpp: - (JSC::statementListEmitCode): - * kjs/nodes.h: - (JSC::StatementNode::isDoWhile): - (JSC::DoWhileNode::isDoWhile): - -2008-09-23 Maciej Stachowiak - - Reviewed by Cameron Zwarich. - - - inline the fast case of instanceof - https://bugs.webkit.org/show_bug.cgi?id=20818 - - ~2% speedup on EarleyBoyer test. - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - * VM/Machine.cpp: - (JSC::Machine::cti_op_instanceof): - -2008-09-23 Maciej Stachowiak - - Reviewed by Cameron Zwarich. - - - add forgotten slow case logic for !== - - * VM/CTI.cpp: - (JSC::CTI::privateCompileSlowCases): - -2008-09-23 Maciej Stachowiak - - Reviewed by Cameron Zwarich. - - - inline the fast cases of !==, same as for === - - 2.9% speedup on EarleyBoyer benchmark - - * VM/CTI.cpp: - (JSC::CTI::compileOpStrictEq): Factored stricteq codegen into this function, - and parameterized so it can do the reverse version as well. - (JSC::CTI::privateCompileMainPass): Use the above for stricteq and nstricteq. - * VM/CTI.h: - (JSC::CTI::): Declare above stuff. - * VM/Machine.cpp: - (JSC::Machine::cti_op_nstricteq): Removed fast cases, now handled inline. - -2008-09-23 Cameron Zwarich - - Reviewed by Oliver Hunt. - - Bug 20989: Aguments constructor should put 'callee' and 'length' properties in a more efficient way - - - Make special cases for the 'callee' and 'length' properties in the - Arguments object. - - This is somewhere between a 7.8% speedup and a 10% speedup on the V8 - Raytrace benchmark, depending on whether it is run alone or with the - other V8 benchmarks. - - * kjs/Arguments.cpp: - (JSC::ArgumentsData::ArgumentsData): - (JSC::Arguments::Arguments): - (JSC::Arguments::mark): - (JSC::Arguments::getOwnPropertySlot): - (JSC::Arguments::put): - (JSC::Arguments::deleteProperty): - -2008-09-23 Maciej Stachowiak - - Reviewed by Darin. - - - speed up instanceof some more - https://bugs.webkit.org/show_bug.cgi?id=20818 - - ~2% speedup on EarleyBoyer - - The idea here is to record in the StructureID whether the class - needs a special hasInstance or if it can use the normal logic from - JSObject. - - Based on this I inlined the real work directly into - cti_op_instanceof and put the fastest checks up front and the - error handling at the end (so it should be fairly straightforward - to split off the beginning to be inlined if desired). - - I only did this for CTI, not the bytecode interpreter. - - * API/JSCallbackObject.h: - (JSC::JSCallbackObject::createStructureID): - * ChangeLog: - * VM/Machine.cpp: - (JSC::Machine::cti_op_instanceof): - * kjs/JSImmediate.h: - (JSC::JSImmediate::isAnyImmediate): - * kjs/TypeInfo.h: - (JSC::TypeInfo::overridesHasInstance): - (JSC::TypeInfo::flags): - -2008-09-22 Darin Adler - - Reviewed by Sam Weinig. - - - https://bugs.webkit.org/show_bug.cgi?id=21019 - make FunctionBodyNode::ref/deref fast - - Speeds up v8-raytrace by 7.2%. - - * kjs/nodes.cpp: - (JSC::FunctionBodyNode::FunctionBodyNode): Initialize m_refCount to 0. - * kjs/nodes.h: - (JSC::FunctionBodyNode::ref): Call base class ref once, and thereafter use - m_refCount. - (JSC::FunctionBodyNode::deref): Ditto, but the deref side. - -2008-09-22 Darin Adler - - Pointed out by Sam Weinig. - - * kjs/Arguments.cpp: - (JSC::Arguments::fillArgList): Fix bad copy and paste. Oops! - -2008-09-22 Darin Adler - - Reviewed by Cameron Zwarich. - - - https://bugs.webkit.org/show_bug.cgi?id=20983 - ArgumentsData should have some room to allocate some extra arguments inline - - Speeds up v8-raytrace by 5%. - - * kjs/Arguments.cpp: - (JSC::ArgumentsData::ArgumentsData): Use a fixed buffer if there are 4 or fewer - extra arguments. - (JSC::Arguments::Arguments): Use a fixed buffer if there are 4 or fewer - extra arguments. - (JSC::Arguments::~Arguments): Delete the buffer if necessary. - (JSC::Arguments::mark): Update since extraArguments are now Register. - (JSC::Arguments::fillArgList): Added special case for the only case that's - actually used in the practice, when there are no parameters. There are some - other special cases in there too, but that's the only one that matters. - (JSC::Arguments::getOwnPropertySlot): Updated to use setValueSlot since there's - no operation to get you at the JSValue* inside a Register as a "slot". - -2008-09-22 Sam Weinig - - Reviewed by Maciej Stachowiak. - - Patch for https://bugs.webkit.org/show_bug.cgi?id=21014 - Speed up for..in by using StructureID to avoid calls to hasProperty - - Speeds up fasta by 8%. - - * VM/JSPropertyNameIterator.cpp: - (JSC::JSPropertyNameIterator::invalidate): - * VM/JSPropertyNameIterator.h: - (JSC::JSPropertyNameIterator::next): - * kjs/PropertyNameArray.h: - (JSC::PropertyNameArrayData::begin): - (JSC::PropertyNameArrayData::end): - (JSC::PropertyNameArrayData::setCachedStructureID): - (JSC::PropertyNameArrayData::cachedStructureID): - * kjs/StructureID.cpp: - (JSC::StructureID::getEnumerablePropertyNames): - (JSC::structureIDChainsAreEqual): - * kjs/StructureID.h: - -2008-09-22 Kelvin Sherlock - - Updated and tweaked by Sam Weinig. - - Reviewed by Geoffrey Garen. - - Bug 20020: Proposed enhancement to JavaScriptCore API - - - Add JSObjectMakeArray, JSObjectMakeDate, JSObjectMakeError, and JSObjectMakeRegExp - functions to create JavaScript Array, Date, Error, and RegExp objects, respectively. - - * API/JSObjectRef.cpp: The functions - * API/JSObjectRef.h: Function prototype and documentation - * JavaScriptCore.exp: Added functions to exported function list - * API/tests/testapi.c: Added basic functionality tests. - - * kjs/DateConstructor.cpp: - Replaced static JSObject* constructDate(ExecState* exec, JSObject*, const ArgList& args) - with JSObject* constructDate(ExecState* exec, const ArgList& args). - Added static JSObject* constructWithDateConstructor(ExecState* exec, JSObject*, const ArgList& args) function - - * kjs/DateConstructor.h: - added prototype for JSObject* constructDate(ExecState* exec, const ArgList& args) - - * kjs/ErrorConstructor.cpp: - removed static qualifier from ErrorInstance* constructError(ExecState* exec, const ArgList& args) - - * kjs/ErrorConstructor.h: - added prototype for ErrorInstance* constructError(ExecState* exec, const ArgList& args) - - * kjs/RegExpConstructor.cpp: - removed static qualifier from JSObject* constructRegExp(ExecState* exec, const ArgList& args) - - * kjs/RegExpConstructor.h: - added prototype for JSObject* constructRegExp(ExecState* exec, const ArgList& args) - -2008-09-22 Matt Lilek - - Not reviewed, Windows build fix. - - * kjs/Arguments.cpp: - * kjs/FunctionPrototype.cpp: - -2008-09-22 Sam Weinig - - Reviewed by Darin Adler. - - Patch for https://bugs.webkit.org/show_bug.cgi?id=20982 - Speed up the apply method of functions by special-casing array and 'arguments' objects - - 1% speedup on v8-raytrace. - - Test: fast/js/function-apply.html - - * kjs/Arguments.cpp: - (JSC::Arguments::fillArgList): - * kjs/Arguments.h: - * kjs/FunctionPrototype.cpp: - (JSC::functionProtoFuncApply): - * kjs/JSArray.cpp: - (JSC::JSArray::fillArgList): - * kjs/JSArray.h: - -2008-09-22 Darin Adler - - Reviewed by Sam Weinig. - - - https://bugs.webkit.org/show_bug.cgi?id=20993 - Array.push/pop need optimized cases for JSArray - - 3% or so speedup on DeltaBlue benchmark. - - * kjs/ArrayPrototype.cpp: - (JSC::arrayProtoFuncPop): Call JSArray::pop when appropriate. - (JSC::arrayProtoFuncPush): Call JSArray::push when appropriate. - - * kjs/JSArray.cpp: - (JSC::JSArray::putSlowCase): Set m_fastAccessCutoff when appropriate, getting - us into the fast code path. - (JSC::JSArray::pop): Added. - (JSC::JSArray::push): Added. - * kjs/JSArray.h: Added push and pop. - - * kjs/operations.cpp: - (JSC::throwOutOfMemoryError): Don't inline this. Helps us avoid PIC branches. - -2008-09-22 Maciej Stachowiak - - Reviewed by Cameron Zwarich. - - - speed up instanceof operator by replacing implementsHasInstance method with a TypeInfo flag - - Partial work towards - - 2.2% speedup on EarleyBoyer benchmark. - - * API/JSCallbackConstructor.cpp: - * API/JSCallbackConstructor.h: - (JSC::JSCallbackConstructor::createStructureID): - * API/JSCallbackFunction.cpp: - * API/JSCallbackFunction.h: - (JSC::JSCallbackFunction::createStructureID): - * API/JSCallbackObject.h: - (JSC::JSCallbackObject::createStructureID): - * API/JSCallbackObjectFunctions.h: - (JSC::::hasInstance): - * API/JSValueRef.cpp: - (JSValueIsInstanceOfConstructor): - * JavaScriptCore.exp: - * VM/Machine.cpp: - (JSC::Machine::privateExecute): - (JSC::Machine::cti_op_instanceof): - * kjs/InternalFunction.cpp: - * kjs/InternalFunction.h: - (JSC::InternalFunction::createStructureID): - * kjs/JSObject.cpp: - * kjs/JSObject.h: - * kjs/TypeInfo.h: - (JSC::TypeInfo::implementsHasInstance): - -2008-09-22 Maciej Stachowiak - - Reviewed by Dave Hyatt. - - Based on initial work by Darin Adler. - - - replace masqueradesAsUndefined virtual method with a flag in TypeInfo - - use this to JIT inline code for eq_null and neq_null - https://bugs.webkit.org/show_bug.cgi?id=20823 - - 0.5% speedup on SunSpider - ~4% speedup on Richards benchmark - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): - * VM/Machine.cpp: - (JSC::jsTypeStringForValue): - (JSC::jsIsObjectType): - (JSC::Machine::privateExecute): - (JSC::Machine::cti_op_is_undefined): - * VM/Machine.h: - * kjs/JSCell.h: - * kjs/JSValue.h: - * kjs/StringObjectThatMasqueradesAsUndefined.h: - (JSC::StringObjectThatMasqueradesAsUndefined::create): - (JSC::StringObjectThatMasqueradesAsUndefined::createStructureID): - * kjs/StructureID.h: - (JSC::StructureID::mutableTypeInfo): - * kjs/TypeInfo.h: - (JSC::TypeInfo::TypeInfo): - (JSC::TypeInfo::masqueradesAsUndefined): - * kjs/operations.cpp: - (JSC::equal): - * masm/X86Assembler.h: - (JSC::X86Assembler::): - (JSC::X86Assembler::setne_r): - (JSC::X86Assembler::setnz_r): - (JSC::X86Assembler::testl_i32m): - -2008-09-22 Tor Arne Vestbø - - Reviewed by Simon. - - Initialize QCoreApplication in kjs binary/Shell.cpp - - This allows us to use QCoreApplication::instance() to - get the main thread in ThreadingQt.cpp - - * kjs/Shell.cpp: - (main): - * wtf/ThreadingQt.cpp: - (WTF::initializeThreading): - -2008-09-21 Darin Adler - - - blind attempt to fix non-all-in-one builds - - * kjs/JSGlobalObject.cpp: Added includes of Arguments.h and RegExpObject.h. - -2008-09-21 Darin Adler - - - fix debug build - - * kjs/StructureID.cpp: - (JSC::StructureID::addPropertyTransition): Use typeInfo().type() instead of m_type. - (JSC::StructureID::createCachedPrototypeChain): Ditto. - -2008-09-21 Maciej Stachowiak - - Reviewed by Darin Adler. - - - introduce a TypeInfo class, for holding per-type (in the C++ class sense) date in StructureID - https://bugs.webkit.org/show_bug.cgi?id=20981 - - * JavaScriptCore.exp: - * JavaScriptCore.xcodeproj/project.pbxproj: - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompilePutByIdTransition): - * VM/Machine.cpp: - (JSC::jsIsObjectType): - (JSC::Machine::Machine): - * kjs/AllInOneFile.cpp: - * kjs/JSCell.h: - (JSC::JSCell::isObject): - (JSC::JSCell::isString): - * kjs/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): - * kjs/JSGlobalObject.cpp: - (JSC::JSGlobalObject::reset): - * kjs/JSGlobalObject.h: - (JSC::StructureID::prototypeForLookup): - * kjs/JSNumberCell.h: - (JSC::JSNumberCell::createStructureID): - * kjs/JSObject.cpp: - (JSC::JSObject::createInheritorID): - * kjs/JSObject.h: - (JSC::JSObject::createStructureID): - * kjs/JSString.h: - (JSC::JSString::createStructureID): - * kjs/NativeErrorConstructor.cpp: - (JSC::NativeErrorConstructor::NativeErrorConstructor): - * kjs/RegExpConstructor.cpp: - * kjs/RegExpMatchesArray.h: Added. - (JSC::RegExpMatchesArray::getOwnPropertySlot): - (JSC::RegExpMatchesArray::put): - (JSC::RegExpMatchesArray::deleteProperty): - (JSC::RegExpMatchesArray::getPropertyNames): - * kjs/StructureID.cpp: - (JSC::StructureID::StructureID): - (JSC::StructureID::addPropertyTransition): - (JSC::StructureID::toDictionaryTransition): - (JSC::StructureID::changePrototypeTransition): - (JSC::StructureID::getterSetterTransition): - * kjs/StructureID.h: - (JSC::StructureID::create): - (JSC::StructureID::typeInfo): - * kjs/TypeInfo.h: Added. - (JSC::TypeInfo::TypeInfo): - (JSC::TypeInfo::type): - -2008-09-21 Darin Adler - - Reviewed by Cameron Zwarich. - - - fix crash logging into Gmail due to recent Arguments change - - * kjs/Arguments.cpp: - (JSC::Arguments::Arguments): Fix window where mark() function could - see d->extraArguments with uninitialized contents. - (JSC::Arguments::mark): Check d->extraArguments for 0 to handle two - cases: 1) Inside the constructor before it's initialized. - 2) numArguments <= numParameters. - -2008-09-21 Darin Adler - - - fix loose end from the "duplicate constant values" patch - - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::emitLoad): Add a special case for values the - hash table can't handle. - -2008-09-21 Mark Rowe - - Fix the non-AllInOneFile build. - - * kjs/Arguments.cpp: Add missing #include. - -2008-09-21 Darin Adler - - Reviewed by Cameron Zwarich and Mark Rowe. - - - fix test failure caused by my recent IndexToNameMap patch - - * kjs/Arguments.cpp: - (JSC::Arguments::deleteProperty): Added the accidentally-omitted - check of the boolean result from toArrayIndex. - -2008-09-21 Darin Adler - - Reviewed by Maciej Stachowiak. - - - https://bugs.webkit.org/show_bug.cgi?id=20975 - inline immediate-number case of == - - * VM/CTI.h: Renamed emitJumpSlowCaseIfNotImm to - emitJumpSlowCaseIfNotImmNum, since the old name was incorrect. - - * VM/CTI.cpp: Updated for new name. - (JSC::CTI::privateCompileMainPass): Added op_eq. - (JSC::CTI::privateCompileSlowCases): Added op_eq. - - * VM/Machine.cpp: - (JSC::Machine::cti_op_eq): Removed fast case, since it's now - compiled. - -2008-09-21 Peter Gal - - Reviewed by Tim Hatcher and Eric Seidel. - - Fix the QT/Linux JavaScriptCore segmentation fault. - https://bugs.webkit.org/show_bug.cgi?id=20914 - - * wtf/ThreadingQt.cpp: - (WTF::initializeThreading): Use currentThread() if - platform is not a MAC (like in pre 36541 revisions) - -2008-09-21 Darin Adler - - Reviewed by Sam Weinig. - - * kjs/debugger.h: Removed some unneeded includes and declarations. - -2008-09-21 Darin Adler - - Reviewed by Sam Weinig. - - - https://bugs.webkit.org/show_bug.cgi?id=20972 - speed up Arguments further by eliminating the IndexToNameMap - - No change on SunSpider. 1.29x as fast on V8 Raytrace. - - * kjs/Arguments.cpp: Moved ArgumentsData in here. Eliminated the - indexToNameMap and hadDeletes data members. Changed extraArguments into - an OwnArrayPtr and added deletedArguments, another OwnArrayPtr. - Replaced numExtraArguments with numParameters, since that's what's - used more directly in hot code paths. - (JSC::Arguments::Arguments): Pass in argument count instead of ArgList. - Initialize ArgumentsData the new way. - (JSC::Arguments::mark): Updated. - (JSC::Arguments::getOwnPropertySlot): Overload for the integer form so - we don't have to convert integers to identifiers just to get an argument. - Integrated the deleted case with the fast case. - (JSC::Arguments::put): Ditto. - (JSC::Arguments::deleteProperty): Ditto. - - * kjs/Arguments.h: Minimized includes. Made everything private. Added - overloads for the integral property name case. Eliminated mappedIndexSetter. - Moved ArgumentsData into the .cpp file. - - * kjs/IndexToNameMap.cpp: Emptied out and prepared for deletion. - * kjs/IndexToNameMap.h: Ditto. - - * kjs/JSActivation.cpp: - (JSC::JSActivation::createArgumentsObject): Elminated ArgList. - - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - * kjs/AllInOneFile.cpp: - Removed IndexToNameMap. - -2008-09-21 Darin Adler - - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::emitLoad): One more tweak: Wrote this in a slightly - clearer style. - -2008-09-21 Judit Jasz - - Reviewed and tweaked by Darin Adler. - - - https://bugs.webkit.org/show_bug.cgi?id=20645 - Elminate duplicate constant values in CodeBlocks. - - Seems to be a wash on SunSpider. - - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::emitLoad): Use m_numberMap and m_stringMap to guarantee - we emit the same JSValue* for identical numbers and strings. - * VM/CodeGenerator.h: Added overload of emitLoad for const Identifier&. - Add NumberMap and IdentifierStringMap types and m_numberMap and m_stringMap. - * kjs/nodes.cpp: - (JSC::StringNode::emitCode): Call the new emitLoad and let it do the - JSString creation. - -2008-09-21 Paul Pedriana - - Reviewed and tweaked by Darin Adler. - - - https://bugs.webkit.org/show_bug.cgi?id=16925 - Fixed lack of Vector buffer alignment for both GCC and MSVC. - Since there's no portable way to do this, for now we don't support - other compilers. - - * wtf/Vector.h: Added WTF_ALIGH_ON, WTF_ALIGNED, AlignedBufferChar, and AlignedBuffer. - Use AlignedBuffer insteadof an array of char in VectorBuffer. - -2008-09-21 Gabor Loki - - Reviewed by Darin Adler. - - - https://bugs.webkit.org/show_bug.cgi?id=19408 - Add lightweight constant folding to the parser for *, /, + (only for numbers), <<, >>, ~ operators. - - 1.008x as fast on SunSpider. - - * kjs/grammar.y: - (makeNegateNode): Fold if expression is a number > 0. - (makeBitwiseNotNode): Fold if expression is a number. - (makeMultNode): Fold if expressions are both numbers. - (makeDivNode): Fold if expressions are both numbers. - (makeAddNode): Fold if expressions are both numbers. - (makeLeftShiftNode): Fold if expressions are both numbers. - (makeRightShiftNode): Fold if expressions are both numbers. - -2008-09-21 Maciej Stachowiak - - Reviewed by Oliver. - - - speed up === operator by generating inline machine code for the fast paths - https://bugs.webkit.org/show_bug.cgi?id=20820 - - * VM/CTI.cpp: - (JSC::CTI::emitJumpSlowCaseIfNotImmediateNumber): - (JSC::CTI::emitJumpSlowCaseIfNotImmediateNumbers): - (JSC::CTI::emitJumpSlowCaseIfNotImmediates): - (JSC::CTI::emitTagAsBoolImmediate): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - * VM/CTI.h: - * VM/Machine.cpp: - (JSC::Machine::cti_op_stricteq): - * masm/X86Assembler.h: - (JSC::X86Assembler::): - (JSC::X86Assembler::sete_r): - (JSC::X86Assembler::setz_r): - (JSC::X86Assembler::movzbl_rr): - (JSC::X86Assembler::emitUnlinkedJnz): - -2008-09-21 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Free memory allocated for extra arguments in the destructor of the - Arguments object. - - * kjs/Arguments.cpp: - (JSC::Arguments::~Arguments): - * kjs/Arguments.h: - -2008-09-21 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Bug 20815: 'arguments' object creation is non-optimal - - - Fix our inefficient way of creating the arguments object by only - creating named properties for each of the arguments after a use of the - 'delete' statement. This patch also speeds up access to the 'arguments' - object slightly, but it still does not use the array fast path for - indexed access that exists for many opcodes. - - This is about a 20% improvement on the V8 Raytrace benchmark, and a 1.5% - improvement on the Earley-Boyer benchmark, which gives a 4% improvement - overall. - - * kjs/Arguments.cpp: - (JSC::Arguments::Arguments): - (JSC::Arguments::mark): - (JSC::Arguments::getOwnPropertySlot): - (JSC::Arguments::put): - (JSC::Arguments::deleteProperty): - * kjs/Arguments.h: - (JSC::Arguments::ArgumentsData::ArgumentsData): - * kjs/IndexToNameMap.h: - (JSC::IndexToNameMap::size): - * kjs/JSActivation.cpp: - (JSC::JSActivation::createArgumentsObject): - * kjs/JSActivation.h: - (JSC::JSActivation::uncheckedSymbolTableGet): - (JSC::JSActivation::uncheckedSymbolTableGetValue): - (JSC::JSActivation::uncheckedSymbolTablePut): - * kjs/JSFunction.h: - (JSC::JSFunction::numParameters): - -2008-09-20 Darin Adler - - Reviewed by Mark Rowe. - - - fix crash seen on buildbot - - * kjs/JSGlobalObject.cpp: - (JSC::JSGlobalObject::mark): Add back mark of arrayPrototype, - deleted by accident in my recent check-in. - -2008-09-20 Maciej Stachowiak - - Not reviewed, build fix. - - - speculative fix for non-AllInOne builds - - * kjs/operations.h: - -2008-09-20 Maciej Stachowiak - - Reviewed by Darin Adler. - - - assorted optimizations to === and !== operators - (work towards ) - - 2.5% speedup on earley-boyer test - - * VM/Machine.cpp: - (JSC::Machine::cti_op_stricteq): Use inline version of - strictEqualSlowCase; remove unneeded exception check. - (JSC::Machine::cti_op_nstricteq): ditto - * kjs/operations.cpp: - (JSC::strictEqual): Use strictEqualSlowCaseInline - (JSC::strictEqualSlowCase): ditto - * kjs/operations.h: - (JSC::strictEqualSlowCaseInline): Version of strictEqualSlowCase that can be inlined, - since the extra function call indirection is a lose for CTI. - -2008-09-20 Darin Adler - - Reviewed by Maciej Stachowiak. - - - finish https://bugs.webkit.org/show_bug.cgi?id=20858 - make each distinct C++ class get a distinct JSC::Structure - - This also includes some optimizations that make the change an overall - small speedup. Without those it was a bit of a slowdown. - - * API/JSCallbackConstructor.cpp: - (JSC::JSCallbackConstructor::JSCallbackConstructor): Take a structure. - * API/JSCallbackConstructor.h: Ditto. - * API/JSCallbackFunction.cpp: - (JSC::JSCallbackFunction::JSCallbackFunction): Pass a structure. - * API/JSCallbackObject.h: Take a structure. - * API/JSCallbackObjectFunctions.h: - (JSC::JSCallbackObject::JSCallbackObject): Ditto. - - * API/JSClassRef.cpp: - (OpaqueJSClass::prototype): Pass in a structure. Call setPrototype - if there's a custom prototype involved. - * API/JSObjectRef.cpp: - (JSObjectMake): Ditto. - (JSObjectMakeConstructor): Pass in a structure. - - * JavaScriptCore.exp: Updated. - - * VM/Machine.cpp: - (JSC::jsLess): Added a special case for when both arguments are strings. - This avoids converting both strings to with UString::toDouble. - (JSC::jsLessEq): Ditto. - (JSC::Machine::privateExecute): Pass in a structure. - (JSC::Machine::cti_op_construct_JSConstruct): Ditto. - (JSC::Machine::cti_op_new_regexp): Ditto. - (JSC::Machine::cti_op_is_string): Ditto. - * VM/Machine.h: Made isJSString public so it can be used in the CTI. - - * kjs/Arguments.cpp: - (JSC::Arguments::Arguments): Pass in a structure. - - * kjs/JSCell.h: Mark constructor explicit. - - * kjs/JSGlobalObject.cpp: - (JSC::markIfNeeded): Added an overload for marking structures. - (JSC::JSGlobalObject::reset): Eliminate code to set data members to - zero. We now do that in the constructor, and we no longer use this - anywhere except in the constructor. Added code to create structures. - Pass structures rather than prototypes when creating objects. - (JSC::JSGlobalObject::mark): Mark the structures. - - * kjs/JSGlobalObject.h: Removed unneeded class declarations. - Added initializers for raw pointers in JSGlobalObjectData so - everything starts with a 0. Added structure data and accessor - functions. - - * kjs/JSImmediate.cpp: - (JSC::JSImmediate::nonInlineNaN): Added. - * kjs/JSImmediate.h: - (JSC::JSImmediate::toDouble): Rewrote to avoid PIC branches. - - * kjs/JSNumberCell.cpp: - (JSC::jsNumberCell): Made non-inline to avoid PIC branches - in functions that call this one. - (JSC::jsNaN): Ditto. - * kjs/JSNumberCell.h: Ditto. - - * kjs/JSObject.h: Removed constructor that takes a prototype. - All callers now pass structures. - - * kjs/ArrayConstructor.cpp: - (JSC::ArrayConstructor::ArrayConstructor): - (JSC::constructArrayWithSizeQuirk): - * kjs/ArrayConstructor.h: - * kjs/ArrayPrototype.cpp: - (JSC::ArrayPrototype::ArrayPrototype): - * kjs/ArrayPrototype.h: - * kjs/BooleanConstructor.cpp: - (JSC::BooleanConstructor::BooleanConstructor): - (JSC::constructBoolean): - (JSC::constructBooleanFromImmediateBoolean): - * kjs/BooleanConstructor.h: - * kjs/BooleanObject.cpp: - (JSC::BooleanObject::BooleanObject): - * kjs/BooleanObject.h: - * kjs/BooleanPrototype.cpp: - (JSC::BooleanPrototype::BooleanPrototype): - * kjs/BooleanPrototype.h: - * kjs/DateConstructor.cpp: - (JSC::DateConstructor::DateConstructor): - (JSC::constructDate): - * kjs/DateConstructor.h: - * kjs/DateInstance.cpp: - (JSC::DateInstance::DateInstance): - * kjs/DateInstance.h: - * kjs/DatePrototype.cpp: - (JSC::DatePrototype::DatePrototype): - * kjs/DatePrototype.h: - * kjs/ErrorConstructor.cpp: - (JSC::ErrorConstructor::ErrorConstructor): - (JSC::constructError): - * kjs/ErrorConstructor.h: - * kjs/ErrorInstance.cpp: - (JSC::ErrorInstance::ErrorInstance): - * kjs/ErrorInstance.h: - * kjs/ErrorPrototype.cpp: - (JSC::ErrorPrototype::ErrorPrototype): - * kjs/ErrorPrototype.h: - * kjs/FunctionConstructor.cpp: - (JSC::FunctionConstructor::FunctionConstructor): - * kjs/FunctionConstructor.h: - * kjs/FunctionPrototype.cpp: - (JSC::FunctionPrototype::FunctionPrototype): - (JSC::FunctionPrototype::addFunctionProperties): - * kjs/FunctionPrototype.h: - * kjs/GlobalEvalFunction.cpp: - (JSC::GlobalEvalFunction::GlobalEvalFunction): - * kjs/GlobalEvalFunction.h: - * kjs/InternalFunction.cpp: - (JSC::InternalFunction::InternalFunction): - * kjs/InternalFunction.h: - (JSC::InternalFunction::InternalFunction): - * kjs/JSArray.cpp: - (JSC::JSArray::JSArray): - (JSC::constructEmptyArray): - (JSC::constructArray): - * kjs/JSArray.h: - * kjs/JSFunction.cpp: - (JSC::JSFunction::JSFunction): - (JSC::JSFunction::construct): - * kjs/JSObject.cpp: - (JSC::constructEmptyObject): - * kjs/JSString.cpp: - (JSC::StringObject::create): - * kjs/JSWrapperObject.h: - * kjs/MathObject.cpp: - (JSC::MathObject::MathObject): - * kjs/MathObject.h: - * kjs/NativeErrorConstructor.cpp: - (JSC::NativeErrorConstructor::NativeErrorConstructor): - (JSC::NativeErrorConstructor::construct): - * kjs/NativeErrorConstructor.h: - * kjs/NativeErrorPrototype.cpp: - (JSC::NativeErrorPrototype::NativeErrorPrototype): - * kjs/NativeErrorPrototype.h: - * kjs/NumberConstructor.cpp: - (JSC::NumberConstructor::NumberConstructor): - (JSC::constructWithNumberConstructor): - * kjs/NumberConstructor.h: - * kjs/NumberObject.cpp: - (JSC::NumberObject::NumberObject): - (JSC::constructNumber): - (JSC::constructNumberFromImmediateNumber): - * kjs/NumberObject.h: - * kjs/NumberPrototype.cpp: - (JSC::NumberPrototype::NumberPrototype): - * kjs/NumberPrototype.h: - * kjs/ObjectConstructor.cpp: - (JSC::ObjectConstructor::ObjectConstructor): - (JSC::constructObject): - * kjs/ObjectConstructor.h: - * kjs/ObjectPrototype.cpp: - (JSC::ObjectPrototype::ObjectPrototype): - * kjs/ObjectPrototype.h: - * kjs/PrototypeFunction.cpp: - (JSC::PrototypeFunction::PrototypeFunction): - * kjs/PrototypeFunction.h: - * kjs/RegExpConstructor.cpp: - (JSC::RegExpConstructor::RegExpConstructor): - (JSC::RegExpMatchesArray::RegExpMatchesArray): - (JSC::constructRegExp): - * kjs/RegExpConstructor.h: - * kjs/RegExpObject.cpp: - (JSC::RegExpObject::RegExpObject): - * kjs/RegExpObject.h: - * kjs/RegExpPrototype.cpp: - (JSC::RegExpPrototype::RegExpPrototype): - * kjs/RegExpPrototype.h: - * kjs/Shell.cpp: - (GlobalObject::GlobalObject): - * kjs/StringConstructor.cpp: - (JSC::StringConstructor::StringConstructor): - (JSC::constructWithStringConstructor): - * kjs/StringConstructor.h: - * kjs/StringObject.cpp: - (JSC::StringObject::StringObject): - * kjs/StringObject.h: - * kjs/StringObjectThatMasqueradesAsUndefined.h: - (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined): - * kjs/StringPrototype.cpp: - (JSC::StringPrototype::StringPrototype): - * kjs/StringPrototype.h: - Take and pass structures. - -2008-09-19 Alp Toker - - Build fix for the 'gold' linker and recent binutils. New behaviour - requires that we link to used libraries explicitly. - - * GNUmakefile.am: - -2008-09-19 Sam Weinig - - Roll r36694 back in. It did not cause the crash. - - * JavaScriptCore.exp: - * VM/JSPropertyNameIterator.cpp: - (JSC::JSPropertyNameIterator::~JSPropertyNameIterator): - (JSC::JSPropertyNameIterator::invalidate): - * VM/JSPropertyNameIterator.h: - (JSC::JSPropertyNameIterator::JSPropertyNameIterator): - (JSC::JSPropertyNameIterator::create): - * kjs/JSObject.cpp: - (JSC::JSObject::getPropertyNames): - * kjs/PropertyMap.cpp: - (JSC::PropertyMap::getEnumerablePropertyNames): - * kjs/PropertyMap.h: - * kjs/PropertyNameArray.cpp: - (JSC::PropertyNameArray::add): - * kjs/PropertyNameArray.h: - (JSC::PropertyNameArrayData::create): - (JSC::PropertyNameArrayData::propertyNameVector): - (JSC::PropertyNameArrayData::setCachedPrototypeChain): - (JSC::PropertyNameArrayData::cachedPrototypeChain): - (JSC::PropertyNameArrayData::begin): - (JSC::PropertyNameArrayData::end): - (JSC::PropertyNameArrayData::PropertyNameArrayData): - (JSC::PropertyNameArray::PropertyNameArray): - (JSC::PropertyNameArray::addKnownUnique): - (JSC::PropertyNameArray::size): - (JSC::PropertyNameArray::operator[]): - (JSC::PropertyNameArray::begin): - (JSC::PropertyNameArray::end): - (JSC::PropertyNameArray::setData): - (JSC::PropertyNameArray::data): - (JSC::PropertyNameArray::releaseData): - * kjs/StructureID.cpp: - (JSC::structureIDChainsAreEqual): - (JSC::StructureID::getEnumerablePropertyNames): - (JSC::StructureID::clearEnumerationCache): - (JSC::StructureID::createCachedPrototypeChain): - * kjs/StructureID.h: - -2008-09-19 Sam Weinig - - Roll out r36694. - - * JavaScriptCore.exp: - * VM/JSPropertyNameIterator.cpp: - (JSC::JSPropertyNameIterator::~JSPropertyNameIterator): - (JSC::JSPropertyNameIterator::invalidate): - * VM/JSPropertyNameIterator.h: - (JSC::JSPropertyNameIterator::JSPropertyNameIterator): - (JSC::JSPropertyNameIterator::create): - * kjs/JSObject.cpp: - (JSC::JSObject::getPropertyNames): - * kjs/PropertyMap.cpp: - (JSC::PropertyMap::getEnumerablePropertyNames): - * kjs/PropertyMap.h: - * kjs/PropertyNameArray.cpp: - (JSC::PropertyNameArray::add): - * kjs/PropertyNameArray.h: - (JSC::PropertyNameArray::PropertyNameArray): - (JSC::PropertyNameArray::addKnownUnique): - (JSC::PropertyNameArray::begin): - (JSC::PropertyNameArray::end): - (JSC::PropertyNameArray::size): - (JSC::PropertyNameArray::operator[]): - (JSC::PropertyNameArray::releaseIdentifiers): - * kjs/StructureID.cpp: - (JSC::StructureID::getEnumerablePropertyNames): - * kjs/StructureID.h: - (JSC::StructureID::clearEnumerationCache): - -2008-09-19 Oliver Hunt - - Reviewed by Maciej Stachowiak. - - Improve peformance of local variable initialisation. - - Pull local and constant initialisation out of slideRegisterWindowForCall - and into its own opcode. This allows the JIT to generate the initialisation - code for a function directly into the instruction stream and so avoids a few - branches on function entry. - - Results a 1% progression in SunSpider, particularly in a number of the bitop - tests where the called functions are very fast. - - * VM/CTI.cpp: - (JSC::CTI::emitInitialiseRegister): - (JSC::CTI::privateCompileMainPass): - * VM/CTI.h: - * VM/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::CodeGenerator): - * VM/Machine.cpp: - (JSC::slideRegisterWindowForCall): - (JSC::Machine::privateExecute): - * VM/Opcode.h: - -2008-09-19 Sam Weinig - - Reviewed by Darin Adler. - - Patch for https://bugs.webkit.org/show_bug.cgi?id=20928 - Speed up JS property enumeration by caching entire PropertyNameArray - - 1.3% speedup on Sunspider, 30% on string-fasta. - - * JavaScriptCore.exp: - * VM/JSPropertyNameIterator.cpp: - (JSC::JSPropertyNameIterator::~JSPropertyNameIterator): - (JSC::JSPropertyNameIterator::invalidate): - * VM/JSPropertyNameIterator.h: - (JSC::JSPropertyNameIterator::JSPropertyNameIterator): - (JSC::JSPropertyNameIterator::create): - * kjs/JSObject.cpp: - (JSC::JSObject::getPropertyNames): - * kjs/PropertyMap.cpp: - (JSC::PropertyMap::getEnumerablePropertyNames): - * kjs/PropertyMap.h: - * kjs/PropertyNameArray.cpp: - (JSC::PropertyNameArray::add): - * kjs/PropertyNameArray.h: - (JSC::PropertyNameArrayData::create): - (JSC::PropertyNameArrayData::propertyNameVector): - (JSC::PropertyNameArrayData::setCachedPrototypeChain): - (JSC::PropertyNameArrayData::cachedPrototypeChain): - (JSC::PropertyNameArrayData::begin): - (JSC::PropertyNameArrayData::end): - (JSC::PropertyNameArrayData::PropertyNameArrayData): - (JSC::PropertyNameArray::PropertyNameArray): - (JSC::PropertyNameArray::addKnownUnique): - (JSC::PropertyNameArray::size): - (JSC::PropertyNameArray::operator[]): - (JSC::PropertyNameArray::begin): - (JSC::PropertyNameArray::end): - (JSC::PropertyNameArray::setData): - (JSC::PropertyNameArray::data): - (JSC::PropertyNameArray::releaseData): - * kjs/ScopeChain.cpp: - (JSC::ScopeChainNode::print): - * kjs/StructureID.cpp: - (JSC::structureIDChainsAreEqual): - (JSC::StructureID::getEnumerablePropertyNames): - (JSC::StructureID::clearEnumerationCache): - (JSC::StructureID::createCachedPrototypeChain): - * kjs/StructureID.h: - -2008-09-19 Holger Hans Peter Freyther - - Reviewed by Maciej Stachowiak. - - Fix a mismatched new[]/delete in JSObject::allocatePropertyStorage - - * kjs/JSObject.cpp: - (JSC::JSObject::allocatePropertyStorage): Spotted by valgrind. - -2008-09-19 Darin Adler - - Reviewed by Sam Weinig. - - - part 2 of https://bugs.webkit.org/show_bug.cgi?id=20858 - make each distinct C++ class get a distinct JSC::Structure - - * JavaScriptCore.exp: Exported constructEmptyObject for use in WebCore. - - * kjs/JSGlobalObject.h: Changed the protected constructor to take a - structure instead of a prototype. - - * kjs/JSVariableObject.h: Removed constructor that takes a prototype. - -2008-09-19 Julien Chaffraix - - Reviewed by Alexey Proskuryakov. - - Use the template hoisting technique on the RefCounted class. This reduces the code bloat due to - non-template methods' code been copied for each instance of the template. - The patch splits RefCounted between a base class that holds non-template methods and attributes - and the template RefCounted class that keeps the same functionnality. - - On my Linux with gcc 4.3 for the Gtk port, this is: - - a ~600KB save on libwebkit.so in release. - - a ~1.6MB save on libwebkit.so in debug. - - It is a wash on Sunspider and a small win on Dromaeo (not sure it is relevant). - On the whole, it should be a small win as we reduce the compiled code size and the only - new function call should be inlined by the compiler. - - * wtf/RefCounted.h: - (WTF::RefCountedBase::ref): Copied from RefCounted. - (WTF::RefCountedBase::hasOneRef): Ditto. - (WTF::RefCountedBase::refCount): Ditto. - (WTF::RefCountedBase::RefCountedBase): Ditto. - (WTF::RefCountedBase::~RefCountedBase): Ditto. - (WTF::RefCountedBase::derefBase): Tweaked from the RefCounted version to remove - template section. - (WTF::RefCounted::RefCounted): - (WTF::RefCounted::deref): Small wrapper around RefCountedBase::derefBase(). - (WTF::RefCounted::~RefCounted): Keep private destructor. - -2008-09-18 Darin Adler - - Reviewed by Maciej Stachowiak. - - - part 1 of https://bugs.webkit.org/show_bug.cgi?id=20858 - make each distinct C++ class get a distinct JSC::Structure - - * kjs/lookup.h: Removed things here that were used only in WebCore: - cacheGlobalObject, JSC_DEFINE_PROTOTYPE, JSC_DEFINE_PROTOTYPE_WITH_PROTOTYPE, - and JSC_IMPLEMENT_PROTOTYPE. - -2008-09-18 Darin Adler - - Reviewed by Maciej Stachowiak. - - - https://bugs.webkit.org/show_bug.cgi?id=20927 - simplify/streamline the code to turn strings into identifiers while parsing - - * kjs/grammar.y: Get rid of string from the union, and use ident for STRING as - well as for IDENT. - - * kjs/lexer.cpp: - (JSC::Lexer::lex): Use makeIdentifier instead of makeUString for String. - * kjs/lexer.h: Remove makeUString. - - * kjs/nodes.h: Changed StringNode to hold an Identifier instead of UString. - - * VM/CodeGenerator.cpp: - (JSC::keyForCharacterSwitch): Updated since StringNode now holds an Identifier. - (JSC::prepareJumpTableForStringSwitch): Ditto. - * kjs/nodes.cpp: - (JSC::StringNode::emitCode): Ditto. The comment from here is now in the lexer. - (JSC::processClauseList): Ditto. - * kjs/nodes2string.cpp: - (JSC::StringNode::streamTo): Ditto. - -2008-09-18 Sam Weinig - - Fix style. - - * VM/Instruction.h: - (JSC::Instruction::Instruction): - -2008-09-18 Oliver Hunt - - Reviewed by Maciej Stachowiak. - - Bug 20911: REGRESSION(r36480?): Reproducible assertion failure below derefStructureIDs 64-bit JavaScriptCore - - - The problem was simply caused by the int constructor for Instruction - failing to initialise the full struct in 64bit builds. - - * VM/Instruction.h: - (JSC::Instruction::Instruction): - -2008-09-18 Darin Adler - - - fix release build - - * wtf/RefCountedLeakCounter.cpp: Removed stray "static". - -2008-09-18 Darin Adler - - Reviewed by Sam Weinig. - - * kjs/JSGlobalObject.h: Tiny style guideline tweak. - -2008-09-18 Darin Adler - - Reviewed by Sam Weinig. - - - fix https://bugs.webkit.org/show_bug.cgi?id=20925 - LEAK messages appear every time I quit - - * JavaScriptCore.exp: Updated, and also added an export - needed for future WebCore use of JSC::StructureID. - - * wtf/RefCountedLeakCounter.cpp: - (WTF::RefCountedLeakCounter::suppressMessages): Added. - (WTF::RefCountedLeakCounter::cancelMessageSuppression): Added. - (WTF::RefCountedLeakCounter::RefCountedLeakCounter): Tweaked a bit. - (WTF::RefCountedLeakCounter::~RefCountedLeakCounter): Added code to - log the reason there was no leak checking done. - (WTF::RefCountedLeakCounter::increment): Tweaked a bit. - (WTF::RefCountedLeakCounter::decrement): Ditto. - - * wtf/RefCountedLeakCounter.h: Replaced setLogLeakMessages with two - new functions, suppressMessages and cancelMessageSuppression. Also - added m_ prefixes to the data member names. - -2008-09-18 Holger Hans Peter Freyther - - Reviewed by Mark Rowe. - - https://bugs.webkit.org/show_bug.cgi?id=20437 - - Add a proper #define to define which XML Parser implementation to use. Client - code can use #if USE(QXMLSTREAM) to decide if the Qt XML StreamReader - implementation is going to be used. - - * wtf/Platform.h: - -2008-09-18 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Make a Unicode non-breaking space count as a whitespace character in - PCRE. This change was already made in WREC, and it fixes one of the - Mozilla JS tests. Since it is now fixed in PCRE as well, we can check - in a new set of expected test results. - - * pcre/pcre_internal.h: - (isSpaceChar): - * tests/mozilla/expected.html: - -2008-09-18 Stephanie Lewis - - Reviewed by Mark Rowe and Maciej Stachowiak. - - add an option use arch to specify which architecture to run. - - * tests/mozilla/jsDriver.pl: - -2008-09-17 Oliver Hunt - - Correctly restore argument reference prior to SFX runtime calls. - - Reviewed by Steve Falkenburg. - - * VM/CTI.cpp: - (JSC::CTI::privateCompileSlowCases): - (JSC::CTI::privateCompile): - -2008-09-17 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Bug 20876: REGRESSION (r36417, r36427): fast/js/exception-expression-offset.html fails - - - r36417 and r36427 caused an get_by_id opcode to be emitted before the - instanceof and construct opcodes, in order to enable inline caching of - the prototype property. Unfortunately, this regressed some tests dealing - with exceptions thrown by 'instanceof' and the 'new' operator. We fix - these problems by detecting whether an "is not an object" exception is - thrown before op_instanceof or op_construct, and emit the proper - exception in those cases. - - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::emitConstruct): - * VM/CodeGenerator.h: - * VM/ExceptionHelpers.cpp: - (JSC::createInvalidParamError): - (JSC::createNotAConstructorError): - (JSC::createNotAnObjectError): - * VM/ExceptionHelpers.h: - * VM/Machine.cpp: - (JSC::Machine::getOpcode): - (JSC::Machine::privateExecute): - * VM/Machine.h: - * kjs/nodes.cpp: - (JSC::NewExprNode::emitCode): - (JSC::InstanceOfNode::emitCode): - -2008-09-17 Gavin Barraclough - - Reviewed by Oliver Hunt. - - JIT generation cti_op_construct_verify. - - Quarter to half percent progression on v8-tests. - Roughly not change on SunSpider (possible minor progression). - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): - * VM/Machine.cpp: - * VM/Machine.h: - -2008-09-15 Steve Falkenburg - - Improve timer accuracy for JavaScript Date object on Windows. - - Use a combination of ftime and QueryPerformanceCounter. - ftime returns the information we want, but doesn't have sufficient resolution. - QueryPerformanceCounter has high resolution, but is only usable to measure time intervals. - To combine them, we call ftime and QueryPerformanceCounter initially. Later calls will use - QueryPerformanceCounter by itself, adding the delta to the saved ftime. We re-sync to - correct for drift if the low-res and high-res elapsed time between calls differs by more - than twice the low-resolution timer resolution. - - QueryPerformanceCounter may be inaccurate due to a problems with: - - some PCI bridge chipsets (http://support.microsoft.com/kb/274323) - - BIOS bugs (http://support.microsoft.com/kb/895980/) - - BIOS/HAL bugs on multiprocessor/multicore systems (http://msdn.microsoft.com/en-us/library/ms644904.aspx) - - Reviewed by Darin Adler. - - * kjs/DateMath.cpp: - (JSC::highResUpTime): - (JSC::lowResUTCTime): - (JSC::qpcAvailable): - (JSC::getCurrentUTCTimeWithMicroseconds): - -2008-09-17 Gavin Barraclough - - Reviewed by Geoff Garen. - - Implement JIT generation of CallFrame initialization, for op_call. - - 1% sunspider 2.5% v8-tests. - - * VM/CTI.cpp: - (JSC::CTI::compileOpCall): - * VM/Machine.cpp: - (JSC::Machine::cti_op_call_JSFunction): - (JSC::Machine::cti_op_call_NotJSFunction): - -2008-09-17 Gavin Barraclough - - Reviewed by Geoff Garen. - - Optimizations for op_call in CTI. Move check for (ctiCode == 0) into JIT code, - move copying of scopeChain for CodeBlocks that needFullScopeChain into head of - functions, instead of checking prior to making the call. - - 3% on v8-tests (4% on richards, 6% in delta-blue) - - * VM/CTI.cpp: - (JSC::CTI::compileOpCall): - (JSC::CTI::privateCompileSlowCases): - (JSC::CTI::privateCompile): - * VM/Machine.cpp: - (JSC::Machine::execute): - (JSC::Machine::cti_op_call_JSFunction): - (JSC::Machine::cti_vm_compile): - (JSC::Machine::cti_vm_updateScopeChain): - (JSC::Machine::cti_op_construct_JSConstruct): - * VM/Machine.h: - -2008-09-17 Tor Arne Vestbø - - Fix the QtWebKit/Mac build - - * wtf/ThreadingQt.cpp: - (WTF::initializeThreading): use QCoreApplication to get the main thread - -2008-09-16 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Bug 20857: REGRESSION (r36427): ASSERTION FAILED: m_refCount >= 0 in RegisterID::deref() - - - Fix a problem stemming from the slightly unsafe behaviour of the - CodeGenerator::finalDestination() method by putting the "func" argument - of the emitConstruct() method in a RefPtr in its caller. Also, add an - assertion guaranteeing that this is always the case. - - CodeGenerator::finalDestination() is still incorrect and can cause - problems with a different allocator; see bug 20340 for more details. - - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::emitConstruct): - * kjs/nodes.cpp: - (JSC::NewExprNode::emitCode): - -2008-09-16 Alice Liu - - build fix. - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): - -2008-09-16 Gavin Barraclough - - Reviewed by Geoff Garen. - - CTI code generation for op_ret. The majority of the work - (updating variables on the stack & on exec) can be performed - directly in generated code. - - We still need to check, & to call out to C-code to handle - activation records, profiling, and full scope chains. - - +1.5% Sunspider, +5/6% v8 tests. - - * VM/CTI.cpp: - (JSC::CTI::emitPutCTIParam): - (JSC::CTI::compileOpCall): - (JSC::CTI::privateCompileMainPass): - * VM/CTI.h: - * VM/Machine.cpp: - (JSC::Machine::cti_op_ret_activation): - (JSC::Machine::cti_op_ret_profiler): - (JSC::Machine::cti_op_ret_scopeChain): - * VM/Machine.h: - -2008-09-16 Dimitri Glazkov - - Fix the Windows build. - - Add some extra parentheses to stop MSVC from complaining so much. - - * VM/Machine.cpp: - (JSC::Machine::privateExecute): - (JSC::Machine::cti_op_stricteq): - (JSC::Machine::cti_op_nstricteq): - * kjs/operations.cpp: - (JSC::strictEqual): - -2008-09-15 Maciej Stachowiak - - Reviewed by Cameron Zwarich. - - - speed up the === and !== operators by choosing the fast cases better - - No effect on SunSpider but speeds up the V8 EarlyBoyer benchmark about 4%. - - * VM/Machine.cpp: - (JSC::Machine::privateExecute): - (JSC::Machine::cti_op_stricteq): - (JSC::Machine::cti_op_nstricteq): - * kjs/JSImmediate.h: - (JSC::JSImmediate::areBothImmediate): - * kjs/operations.cpp: - (JSC::strictEqual): - (JSC::strictEqualSlowCase): - * kjs/operations.h: - -2008-09-15 Oliver Hunt - - RS=Sam Weinig. - - Coding style cleanup. - - * VM/Machine.cpp: - (JSC::Machine::privateExecute): - -2008-09-15 Oliver Hunt - - Reviewed by Cameron Zwarich. - - Bug 20874: op_resolve does not do any form of caching - - - This patch adds an op_resolve_global opcode to handle (and cache) - property lookup we can statically determine must occur on the global - object (if at all). - - 3% progression on sunspider, 3.2x improvement to bitops-bitwise-and, and - 10% in math-partial-sums - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): - * VM/CTI.h: - * VM/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::findScopedProperty): - (JSC::CodeGenerator::emitResolve): - * VM/Machine.cpp: - (JSC::resolveGlobal): - (JSC::Machine::privateExecute): - (JSC::Machine::cti_op_resolve_global): - * VM/Machine.h: - * VM/Opcode.h: - -2008-09-15 Sam Weinig - - Roll out r36462. It broke document.all. - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - * VM/CTI.h: - * VM/Machine.cpp: - (JSC::Machine::Machine): - (JSC::Machine::cti_op_eq_null): - (JSC::Machine::cti_op_neq_null): - * VM/Machine.h: - (JSC::Machine::isJSString): - * kjs/JSCell.h: - * kjs/JSWrapperObject.h: - * kjs/StringObject.h: - * kjs/StringObjectThatMasqueradesAsUndefined.h: - -2008-09-15 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Bug 20863: ASSERTION FAILED: addressOffset < instructions.size() in CodeBlock::getHandlerForVPC - - - r36427 changed the number of arguments to op_construct without changing - the argument index for the vPC in the call to initializeCallFrame() in - the CTI case. This caused a JSC test failure. Correcting the argument - index fixes the test failure. - - * VM/Machine.cpp: - (JSC::Machine::cti_op_construct_JSConstruct): - -2008-09-15 Mark Rowe - - Fix GCC 4.2 build. - - * VM/CTI.h: - -2008-09-15 Geoffrey Garen - - Reviewed by Maciej Stachowiak. - - Fixed a typo in op_get_by_id_chain that caused it to miss every time - in the interpreter. - - Also, a little cleanup. - - * VM/Machine.cpp: - (JSC::Machine::privateExecute): Set up baseObject before entering the - loop, so we compare against the right values. - -2008-09-15 Geoffrey Garen - - Reviewed by Sam Weinig. - - Removed the CalledAsConstructor flag from the call frame header. Now, - we use an explicit opcode at the call site to fix up constructor results. - - SunSpider says 0.4% faster. - - cti_op_construct_verify is an out-of-line function call for now, but we - can fix that once StructureID holds type information like isObject. - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): Codegen for the new opcode. - - * VM/CodeBlock.cpp: - (JSC::CodeBlock::dump): - - * VM/CodeGenerator.cpp: Codegen for the new opcode. Also... - (JSC::CodeGenerator::emitCall): ... don't test for known non-zero value. - (JSC::CodeGenerator::emitConstruct): ... ditto. - - * VM/Machine.cpp: No more CalledAsConstructor - (JSC::Machine::privateExecute): Implementation for the new opcode. - (JSC::Machine::cti_op_ret): The speedup: no need to check whether we were - called as a constructor. - (JSC::Machine::cti_op_construct_verify): Implementation for the new opcode. - * VM/Machine.h: - - * VM/Opcode.h: Declare new opcode. - - * VM/RegisterFile.h: - (JSC::RegisterFile::): No more CalledAsConstructor - -2008-09-15 Gavin Barraclough - - Reviewed by Geoff Garen. - - Inline code generation of eq_null/neq_null for CTI. Uses vptr checking for - StringObjectsThatAreMasqueradingAsBeingUndefined. In the long run, the - masquerading may be handled differently (through the StructureIDs - see bug - #20823). - - >1% on v8-tests. - - * VM/CTI.cpp: - (JSC::CTI::emitJumpSlowCaseIfIsJSCell): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - * VM/CTI.h: - * VM/Machine.cpp: - (JSC::Machine::Machine): - (JSC::Machine::cti_op_eq_null): - (JSC::Machine::cti_op_neq_null): - * VM/Machine.h: - (JSC::Machine::doesMasqueradesAsUndefined): - * kjs/JSWrapperObject.h: - (JSC::JSWrapperObject::): - (JSC::JSWrapperObject::JSWrapperObject): - * kjs/StringObject.h: - (JSC::StringObject::StringObject): - * kjs/StringObjectThatMasqueradesAsUndefined.h: - (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined): - -2008-09-15 Cameron Zwarich - - Rubber-stamped by Oliver Hunt. - - r36427 broke CodeBlock::dump() by changing the number of arguments to - op_construct without changing the code that prints it. This patch fixes - it by printing the additional argument. - - * JavaScriptCore.xcodeproj/project.pbxproj: - * VM/CodeBlock.cpp: - (JSC::CodeBlock::dump): - -2008-09-15 Adam Roben - - Build fix - - * kjs/StructureID.cpp: Removed a stray semicolon. - -2008-09-15 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Fix a crash in fast/js/exception-expression-offset.html caused by not - updating all mentions of the length of op_construct in r36427. - - * VM/Machine.cpp: - (JSC::Machine::cti_op_construct_NotJSConstruct): - -2008-09-15 Maciej Stachowiak - - Reviewed by Cameron Zwarich. - - - fix layout test failure introduced by fix for 20849 - - (The failing test was fast/js/delete-then-put.html) - - * kjs/JSObject.cpp: - (JSC::JSObject::removeDirect): Clear enumeration cache - in the dictionary case. - * kjs/JSObject.h: - (JSC::JSObject::putDirect): Ditto. - * kjs/StructureID.h: - (JSC::StructureID::clearEnumerationCache): Inline to handle the - clear. - -2008-09-15 Maciej Stachowiak - - Reviewed by Cameron Zwarich. - - - fix JSC test failures introduced by fix for 20849 - - * kjs/PropertyMap.cpp: - (JSC::PropertyMap::getEnumerablePropertyNames): Use the correct count. - -2008-09-15 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Bug 20851: REGRESSION (r36410): fast/js/kde/GlobalObject.html fails - - - r36410 introduced an optimization for parseInt() that is incorrect when - its argument is larger than the range of a 32-bit integer. If the - argument is a number that is not an immediate integer, then the correct - behaviour is to return the floor of its value, unless it is an infinite - value, in which case the correct behaviour is to return 0. - - * kjs/JSGlobalObjectFunctions.cpp: - (JSC::globalFuncParseInt): - -2008-09-15 Sam Weinig - - Reviewed by Maciej Stachowiak. - - Patch for https://bugs.webkit.org/show_bug.cgi?id=20849 - Cache property names for getEnumerablePropertyNames in the StructureID. - - ~0.5% speedup on Sunspider overall (9.7% speedup on string-fasta). ~1% speedup - on the v8 test suite. - - * kjs/JSObject.cpp: - (JSC::JSObject::getPropertyNames): - * kjs/PropertyMap.cpp: - (JSC::PropertyMap::getEnumerablePropertyNames): - * kjs/PropertyMap.h: - * kjs/StructureID.cpp: - (JSC::StructureID::StructureID): - (JSC::StructureID::getEnumerablePropertyNames): - * kjs/StructureID.h: - -2008-09-14 Maciej Stachowiak - - Reviewed by Cameron Zwarich. - - - speed up JS construction by extracting "prototype" lookup so PIC applies. - - ~0.5% speedup on SunSpider - Speeds up some of the V8 tests as well, most notably earley-boyer. - - * VM/CTI.cpp: - (JSC::CTI::compileOpCall): Account for extra arg for prototype. - (JSC::CTI::privateCompileMainPass): Account for increased size of op_construct. - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::emitConstruct): Emit separate lookup to get prototype property. - * VM/Machine.cpp: - (JSC::Machine::privateExecute): Expect prototype arg in op_construct. - (JSC::Machine::cti_op_construct_JSConstruct): ditto - (JSC::Machine::cti_op_construct_NotJSConstruct): ditto - -2008-09-10 Alexey Proskuryakov - - Reviewed by Eric Seidel. - - Add a protected destructor for RefCounted. - - It is wrong to call its destructor directly, because (1) this should be taken care of by - deref(), and (2) many classes that use RefCounted have non-virtual destructors. - - No change in behavior. - - * wtf/RefCounted.h: (WTF::RefCounted::~RefCounted): - -2008-09-14 Gavin Barraclough - - Reviewed by Sam Weinig. - - Accelerated property accesses. - - Inline more of the array access code into the JIT code for get/put_by_val. - Accelerate get/put_by_id by speculatively inlining a disable direct access - into the hot path of the code, and repatch this with the correct StructureID - and property map offset once these are known. In the case of accesses to the - prototype and reading the array-length a trampoline is genertaed, and the - branch to the slow-case is relinked to jump to this. - - By repatching, we mean rewriting the x86 instruction stream. Instructions are - only modified in a simple fasion - altering immediate operands, memory access - deisplacements, and branch offsets. - - For regular get_by_id/put_by_id accesses to an object, a StructureID in an - instruction's immediate operant is updateded, and a memory access operation's - displacement is updated to access the correct field on the object. In the case - of more complex accesses (array length and get_by_id_prototype) the offset on - the branch to slow-case is updated, to now jump to a trampoline. - - +2.8% sunspider, +13% v8-tests - - * VM/CTI.cpp: - (JSC::CTI::emitCall): - (JSC::CTI::emitJumpSlowCaseIfNotJSCell): - (JSC::CTI::CTI): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - (JSC::CTI::privateCompile): - (JSC::CTI::privateCompileGetByIdSelf): - (JSC::CTI::privateCompileGetByIdProto): - (JSC::CTI::privateCompileGetByIdChain): - (JSC::CTI::privateCompilePutByIdReplace): - (JSC::CTI::privateCompilePutByIdTransition): - (JSC::CTI::privateCompileArrayLengthTrampoline): - (JSC::CTI::privateCompileStringLengthTrampoline): - (JSC::CTI::patchGetByIdSelf): - (JSC::CTI::patchPutByIdReplace): - (JSC::CTI::privateCompilePatchGetArrayLength): - (JSC::CTI::privateCompilePatchGetStringLength): - * VM/CTI.h: - (JSC::CTI::compileGetByIdSelf): - (JSC::CTI::compileGetByIdProto): - (JSC::CTI::compileGetByIdChain): - (JSC::CTI::compilePutByIdReplace): - (JSC::CTI::compilePutByIdTransition): - (JSC::CTI::compileArrayLengthTrampoline): - (JSC::CTI::compileStringLengthTrampoline): - (JSC::CTI::compilePatchGetArrayLength): - (JSC::CTI::compilePatchGetStringLength): - * VM/CodeBlock.cpp: - (JSC::CodeBlock::dump): - (JSC::CodeBlock::~CodeBlock): - * VM/CodeBlock.h: - (JSC::StructureStubInfo::StructureStubInfo): - (JSC::CodeBlock::getStubInfo): - * VM/Machine.cpp: - (JSC::Machine::tryCTICachePutByID): - (JSC::Machine::tryCTICacheGetByID): - (JSC::Machine::cti_op_put_by_val_array): - * VM/Machine.h: - * masm/X86Assembler.h: - (JSC::X86Assembler::): - (JSC::X86Assembler::cmpl_i8m): - (JSC::X86Assembler::emitUnlinkedJa): - (JSC::X86Assembler::getRelocatedAddress): - (JSC::X86Assembler::getDifferenceBetweenLabels): - (JSC::X86Assembler::emitModRm_opmsib): - -2008-09-14 Maciej Stachowiak - - Reviewed by Cameron Zwarich. - - - split the "prototype" lookup for hasInstance into opcode stream so it can be cached - - ~5% speedup on v8 earley-boyer test - - * API/JSCallbackObject.h: Add a parameter for the pre-looked-up prototype. - * API/JSCallbackObjectFunctions.h: - (JSC::::hasInstance): Ditto. - * API/JSValueRef.cpp: - (JSValueIsInstanceOfConstructor): Look up and pass in prototype. - * JavaScriptCore.exp: - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): Pass along prototype. - * VM/CodeBlock.cpp: - (JSC::CodeBlock::dump): Print third arg. - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::emitInstanceOf): Implement this, now that there - is a third argument. - * VM/CodeGenerator.h: - * VM/Machine.cpp: - (JSC::Machine::privateExecute): Pass along the prototype. - (JSC::Machine::cti_op_instanceof): ditto - * kjs/JSObject.cpp: - (JSC::JSObject::hasInstance): Expect to get a pre-looked-up prototype. - * kjs/JSObject.h: - * kjs/nodes.cpp: - (JSC::InstanceOfNode::emitCode): Emit a get_by_id of the prototype - property and pass that register to instanceof. - * kjs/nodes.h: - -2008-09-14 Gavin Barraclough - - Reviewed by Sam Weinig. - - Remove unnecessary virtual function call from cti_op_call_JSFunction - - ~5% on richards, ~2.5% on v8-tests, ~0.5% on sunspider. - - * VM/Machine.cpp: - (JSC::Machine::cti_op_call_JSFunction): - -2008-09-14 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Bug 20827: the 'typeof' operator is slow - - - Optimize the 'typeof' operator when its result is compared to a constant - string. - - This is a 5.5% speedup on the V8 Earley-Boyer test. - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): - * VM/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::emitEqualityOp): - * VM/CodeGenerator.h: - * VM/Machine.cpp: - (JSC::jsIsObjectType): - (JSC::jsIsFunctionType): - (JSC::Machine::privateExecute): - (JSC::Machine::cti_op_is_undefined): - (JSC::Machine::cti_op_is_boolean): - (JSC::Machine::cti_op_is_number): - (JSC::Machine::cti_op_is_string): - (JSC::Machine::cti_op_is_object): - (JSC::Machine::cti_op_is_function): - * VM/Machine.h: - * VM/Opcode.h: - * kjs/nodes.cpp: - (JSC::BinaryOpNode::emitCode): - (JSC::EqualNode::emitCode): - (JSC::StrictEqualNode::emitCode): - * kjs/nodes.h: - -2008-09-14 Sam Weinig - - Reviewed by Cameron Zwarich. - - Patch for https://bugs.webkit.org/show_bug.cgi?id=20844 - Speed up parseInt for numbers - - Sunspider reports this as 1.029x as fast overall and 1.37x as fast on string-unpack-code. - No change on the v8 suite. - - * kjs/JSGlobalObjectFunctions.cpp: - (JSC::globalFuncParseInt): Don't convert numbers to strings just to - convert them back to numbers. - -2008-09-14 Cameron Zwarich - - Reviewed by Oliver Hunt. - - Bug 20816: op_lesseq should be optimized - - - Add a loop_if_lesseq opcode that is similar to the loop_if_less opcode. - - This is a 9.4% speedup on the V8 Crypto benchmark. - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - * VM/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::emitJumpIfTrue): - * VM/Machine.cpp: - (JSC::Machine::privateExecute): - (JSC::Machine::cti_op_loop_if_lesseq): - * VM/Machine.h: - * VM/Opcode.h: - -2008-09-14 Sam Weinig - - Reviewed by Cameron Zwarich. - - Cleanup Sampling code. - - * VM/CTI.cpp: - (JSC::CTI::emitCall): - (JSC::CTI::privateCompileMainPass): - * VM/CTI.h: - (JSC::CTI::execute): - * VM/SamplingTool.cpp: - (JSC::): - (JSC::SamplingTool::run): - (JSC::SamplingTool::dump): - * VM/SamplingTool.h: - (JSC::SamplingTool::callingHostFunction): - -2008-09-13 Oliver Hunt - - Reviewed by Cameron Zwarich. - - Bug 20821: Cache property transitions to speed up object initialization - https://bugs.webkit.org/show_bug.cgi?id=20821 - - Implement a transition cache to improve the performance of new properties - being added to objects. This is extremely beneficial in constructors and - shows up as a 34% improvement on access-binary-trees in SunSpider (0.8% - overall) - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): - (JSC::): - (JSC::transitionWillNeedStorageRealloc): - (JSC::CTI::privateCompilePutByIdTransition): - * VM/CTI.h: - (JSC::CTI::compilePutByIdTransition): - * VM/CodeBlock.cpp: - (JSC::printPutByIdOp): - (JSC::CodeBlock::printStructureIDs): - (JSC::CodeBlock::dump): - (JSC::CodeBlock::derefStructureIDs): - (JSC::CodeBlock::refStructureIDs): - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::emitPutById): - * VM/Machine.cpp: - (JSC::cachePrototypeChain): - (JSC::Machine::tryCachePutByID): - (JSC::Machine::tryCacheGetByID): - (JSC::Machine::privateExecute): - (JSC::Machine::tryCTICachePutByID): - (JSC::Machine::tryCTICacheGetByID): - * VM/Machine.h: - * VM/Opcode.h: - * kjs/JSObject.h: - (JSC::JSObject::putDirect): - (JSC::JSObject::transitionTo): - * kjs/PutPropertySlot.h: - (JSC::PutPropertySlot::PutPropertySlot): - (JSC::PutPropertySlot::wasTransition): - (JSC::PutPropertySlot::setWasTransition): - * kjs/StructureID.cpp: - (JSC::StructureID::transitionTo): - (JSC::StructureIDChain::StructureIDChain): - * kjs/StructureID.h: - (JSC::StructureID::previousID): - (JSC::StructureID::setCachedPrototypeChain): - (JSC::StructureID::cachedPrototypeChain): - (JSC::StructureID::propertyMap): - * masm/X86Assembler.h: - (JSC::X86Assembler::addl_i8m): - (JSC::X86Assembler::subl_i8m): - -2008-09-12 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Bug 20819: JSValue::isObject() is slow - - - Optimize JSCell::isObject() and JSCell::isString() by making them - non-virtual calls that rely on the StructureID type information. - - This is a 0.7% speedup on SunSpider and a 1.0% speedup on the V8 - benchmark suite. - - * JavaScriptCore.exp: - * kjs/JSCell.cpp: - * kjs/JSCell.h: - (JSC::JSCell::isObject): - (JSC::JSCell::isString): - * kjs/JSObject.cpp: - * kjs/JSObject.h: - * kjs/JSString.cpp: - * kjs/JSString.h: - (JSC::JSString::JSString): - * kjs/StructureID.h: - (JSC::StructureID::type): - -2008-09-11 Stephanie Lewis - - Reviewed by Oliver Hunt. - - Turn off PGO Optimization on CTI.cpp -> . Fixes - crash on CNN and on Dromaeo. - Fix Missing close tag in vcproj. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - -2008-09-11 Cameron Zwarich - - Not reviewed. - - Correct an SVN problem with the last commit and actually add the new - files. - - * wrec/CharacterClassConstructor.cpp: Added. - (JSC::): - (JSC::getCharacterClassNewline): - (JSC::getCharacterClassDigits): - (JSC::getCharacterClassSpaces): - (JSC::getCharacterClassWordchar): - (JSC::getCharacterClassNondigits): - (JSC::getCharacterClassNonspaces): - (JSC::getCharacterClassNonwordchar): - (JSC::CharacterClassConstructor::addSorted): - (JSC::CharacterClassConstructor::addSortedRange): - (JSC::CharacterClassConstructor::put): - (JSC::CharacterClassConstructor::flush): - (JSC::CharacterClassConstructor::append): - * wrec/CharacterClassConstructor.h: Added. - (JSC::CharacterClassConstructor::CharacterClassConstructor): - (JSC::CharacterClassConstructor::isUpsideDown): - (JSC::CharacterClassConstructor::charClass): - -2008-09-11 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Bug 20788: Split CharacterClassConstructor into its own file - - - Split CharacterClassConstructor into its own file and clean up some - style issues. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * wrec/CharacterClassConstructor.cpp: Added. - (JSC::): - (JSC::getCharacterClassNewline): - (JSC::getCharacterClassDigits): - (JSC::getCharacterClassSpaces): - (JSC::getCharacterClassWordchar): - (JSC::getCharacterClassNondigits): - (JSC::getCharacterClassNonspaces): - (JSC::getCharacterClassNonwordchar): - (JSC::CharacterClassConstructor::addSorted): - (JSC::CharacterClassConstructor::addSortedRange): - (JSC::CharacterClassConstructor::put): - (JSC::CharacterClassConstructor::flush): - (JSC::CharacterClassConstructor::append): - * wrec/CharacterClassConstructor.h: Added. - (JSC::CharacterClassConstructor::CharacterClassConstructor): - (JSC::CharacterClassConstructor::isUpsideDown): - (JSC::CharacterClassConstructor::charClass): - * wrec/WREC.cpp: - (JSC::WRECParser::parseCharacterClass): - -2008-09-10 Simon Hausmann - - Not reviewed but trivial one-liner for yet unused macro. - - Changed PLATFORM(WINCE) to PLATFORM(WIN_CE) as requested by Mark. - - (part of https://bugs.webkit.org/show_bug.cgi?id=20746) - - * wtf/Platform.h: - -2008-09-10 Cameron Zwarich - - Rubber-stamped by Oliver Hunt. - - Fix a typo by renaming the overloaded orl_rr that takes an immediate to - orl_i32r. - - * VM/CTI.cpp: - (JSC::CTI::emitFastArithPotentiallyReTagImmediate): - * masm/X86Assembler.h: - (JSC::X86Assembler::orl_i32r): - * wrec/WREC.cpp: - (JSC::WRECGenerator::generatePatternCharacter): - (JSC::WRECGenerator::generateCharacterClassInverted): - -2008-09-10 Sam Weinig - - Reviewed by Geoff Garen. - - Add inline property storage for JSObject. - - 1.2% progression on Sunspider. .5% progression on the v8 test suite. - - * JavaScriptCore.exp: - * VM/CTI.cpp: - (JSC::CTI::privateCompileGetByIdProto): - (JSC::CTI::privateCompileGetByIdChain): - * kjs/JSObject.cpp: - (JSC::JSObject::mark): There is no reason to check storageSize now that - we start from 0. - (JSC::JSObject::allocatePropertyStorage): Allocates/reallocates heap storage. - * kjs/JSObject.h: - (JSC::JSObject::offsetForLocation): m_propertyStorage is not an OwnArrayPtr - now so there is no reason to .get() - (JSC::JSObject::usingInlineStorage): - (JSC::JSObject::JSObject): Start with m_propertyStorage pointing to the - inline storage. - (JSC::JSObject::~JSObject): Free the heap storage if not using the inline - storage. - (JSC::JSObject::putDirect): Switch to the heap storage only when we know - we know that we are about to add a property that will overflow the inline - storage. - * kjs/PropertyMap.cpp: - (JSC::PropertyMap::createTable): Don't allocate the propertyStorage, that is - now handled by JSObject. - (JSC::PropertyMap::rehash): PropertyStorage is not a OwnArrayPtr anymore. - * kjs/PropertyMap.h: - (JSC::PropertyMap::storageSize): Rename from markingCount. - * kjs/StructureID.cpp: - (JSC::StructureID::addPropertyTransition): Don't resize the property storage - if we are using inline storage. - * kjs/StructureID.h: - -2008-09-10 Oliver Hunt - - Reviewed by Geoff Garen. - - Inline immediate number version of op_mul. - - Renamed mull_rr to imull_rr as that's what it's - actually doing, and added imull_i32r for the constant - case immediate multiply. - - 1.1% improvement to SunSpider. - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - * masm/X86Assembler.h: - (JSC::X86Assembler::): - (JSC::X86Assembler::imull_rr): - (JSC::X86Assembler::imull_i32r): - -2008-09-10 Cameron Zwarich - - Not reviewed. - - Mac build fix. - - * JavaScriptCore.xcodeproj/project.pbxproj: - -2008-09-09 Oliver Hunt - - Reviewed by Maciej Stachowiak. - - Add optimised access to known properties on the global object. - - Improve cross scope access to the global object by emitting - code to access it directly rather than by walking the scope chain. - - This is a 0.8% win in SunSpider and a 1.7% win in the v8 benchmarks. - - * VM/CTI.cpp: - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::emitGetVariableObjectRegister): - (JSC::CTI::emitPutVariableObjectRegister): - * VM/CTI.h: - * VM/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * VM/CodeGenerator.cpp: - (JSC::CodeGenerator::findScopedProperty): - (JSC::CodeGenerator::emitResolve): - (JSC::CodeGenerator::emitGetScopedVar): - (JSC::CodeGenerator::emitPutScopedVar): - * VM/CodeGenerator.h: - * VM/Machine.cpp: - (JSC::Machine::privateExecute): - * VM/Opcode.h: - * kjs/nodes.cpp: - (JSC::FunctionCallResolveNode::emitCode): - (JSC::PostfixResolveNode::emitCode): - (JSC::PrefixResolveNode::emitCode): - (JSC::ReadModifyResolveNode::emitCode): - (JSC::AssignResolveNode::emitCode): - -2008-09-10 Maciej Stachowiak - - Reviewed by Oliver. - - - enable polymorphic inline caching of properties of primitives - - 1.012x speedup on SunSpider. - - We create special structure IDs for JSString and - JSNumberCell. Unlike normal structure IDs, these cannot hold the - true prototype. Due to JS autoboxing semantics, the prototype used - when looking up string or number properties depends on the lexical - global object of the call site, not the creation site. Thus we - enable StructureIDs to handle this quirk for primitives. - - Everything else should be straightforward. - - * VM/CTI.cpp: - (JSC::CTI::privateCompileGetByIdProto): - (JSC::CTI::privateCompileGetByIdChain): - * VM/CTI.h: - (JSC::CTI::compileGetByIdProto): - (JSC::CTI::compileGetByIdChain): - * VM/JSPropertyNameIterator.h: - (JSC::JSPropertyNameIterator::JSPropertyNameIterator): - * VM/Machine.cpp: - (JSC::Machine::Machine): - (JSC::cachePrototypeChain): - (JSC::Machine::tryCachePutByID): - (JSC::Machine::tryCacheGetByID): - (JSC::Machine::privateExecute): - (JSC::Machine::tryCTICachePutByID): - (JSC::Machine::tryCTICacheGetByID): - * kjs/GetterSetter.h: - (JSC::GetterSetter::GetterSetter): - * kjs/JSCell.h: - * kjs/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): - * kjs/JSGlobalData.h: - * kjs/JSGlobalObject.h: - (JSC::StructureID::prototypeForLookup): - * kjs/JSNumberCell.h: - (JSC::JSNumberCell::JSNumberCell): - (JSC::jsNumberCell): - * kjs/JSObject.h: - (JSC::JSObject::prototype): - * kjs/JSString.cpp: - (JSC::jsString): - (JSC::jsSubstring): - (JSC::jsOwnedString): - * kjs/JSString.h: - (JSC::JSString::JSString): - (JSC::JSString::): - (JSC::jsSingleCharacterString): - (JSC::jsSingleCharacterSubstring): - (JSC::jsNontrivialString): - * kjs/SmallStrings.cpp: - (JSC::SmallStrings::createEmptyString): - (JSC::SmallStrings::createSingleCharacterString): - * kjs/StructureID.cpp: - (JSC::StructureID::StructureID): - (JSC::StructureID::addPropertyTransition): - (JSC::StructureID::getterSetterTransition): - (JSC::StructureIDChain::StructureIDChain): - * kjs/StructureID.h: - (JSC::StructureID::create): - (JSC::StructureID::storedPrototype): - -2008-09-09 Joerg Bornemann - - Reviewed by Sam Weinig. - - https://bugs.webkit.org/show_bug.cgi?id=20746 - - Added WINCE platform macro. - - * wtf/Platform.h: - -2008-09-09 Sam Weinig - - Reviewed by Mark Rowe. - - Remove unnecessary override of getOffset. - - Sunspider reports this as a .6% progression. - - * JavaScriptCore.exp: - * kjs/JSObject.h: - (JSC::JSObject::getDirectLocation): - (JSC::JSObject::getOwnPropertySlotForWrite): - (JSC::JSObject::putDirect): - * kjs/PropertyMap.cpp: - * kjs/PropertyMap.h: - -2008-09-09 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Bug 20759: Remove MacroAssembler - - - Remove MacroAssembler and move its functionality to X86Assembler. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * VM/CTI.cpp: - (JSC::CTI::emitGetArg): - (JSC::CTI::emitGetPutArg): - (JSC::CTI::emitPutArg): - (JSC::CTI::emitPutCTIParam): - (JSC::CTI::emitGetCTIParam): - (JSC::CTI::emitPutToCallFrameHeader): - (JSC::CTI::emitGetFromCallFrameHeader): - (JSC::CTI::emitPutResult): - (JSC::CTI::emitDebugExceptionCheck): - (JSC::CTI::emitJumpSlowCaseIfNotImm): - (JSC::CTI::emitJumpSlowCaseIfNotImms): - (JSC::CTI::emitFastArithDeTagImmediate): - (JSC::CTI::emitFastArithReTagImmediate): - (JSC::CTI::emitFastArithPotentiallyReTagImmediate): - (JSC::CTI::emitFastArithImmToInt): - (JSC::CTI::emitFastArithIntToImmOrSlowCase): - (JSC::CTI::emitFastArithIntToImmNoCheck): - (JSC::CTI::compileOpCall): - (JSC::CTI::emitSlowScriptCheck): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - (JSC::CTI::privateCompile): - (JSC::CTI::privateCompileGetByIdSelf): - (JSC::CTI::privateCompileGetByIdProto): - (JSC::CTI::privateCompileGetByIdChain): - (JSC::CTI::privateCompilePutByIdReplace): - (JSC::CTI::privateArrayLengthTrampoline): - (JSC::CTI::privateStringLengthTrampoline): - (JSC::CTI::compileRegExp): - * VM/CTI.h: - (JSC::CallRecord::CallRecord): - (JSC::JmpTable::JmpTable): - (JSC::SlowCaseEntry::SlowCaseEntry): - (JSC::CTI::JSRInfo::JSRInfo): - * masm/MacroAssembler.h: Removed. - * masm/MacroAssemblerWin.cpp: Removed. - * masm/X86Assembler.h: - (JSC::X86Assembler::emitConvertToFastCall): - (JSC::X86Assembler::emitRestoreArgumentReference): - * wrec/WREC.h: - (JSC::WRECGenerator::WRECGenerator): - (JSC::WRECParser::WRECParser): - -2008-09-09 Sam Weinig - - Reviewed by Cameron Zwarich. - - Don't waste the first item in the PropertyStorage. - - - Fix typo (makingCount -> markingCount) - - Remove undefined method declaration. - - No change on Sunspider. - - * kjs/JSObject.cpp: - (JSC::JSObject::mark): - * kjs/PropertyMap.cpp: - (JSC::PropertyMap::put): - (JSC::PropertyMap::remove): - (JSC::PropertyMap::getOffset): - (JSC::PropertyMap::insert): - (JSC::PropertyMap::rehash): - (JSC::PropertyMap::resizePropertyStorage): - (JSC::PropertyMap::checkConsistency): - * kjs/PropertyMap.h: - (JSC::PropertyMap::markingCount): Fix typo. - -2008-09-09 Cameron Zwarich - - Not reviewed. - - Speculative Windows build fix. - - * masm/MacroAssemblerWin.cpp: - (JSC::MacroAssembler::emitConvertToFastCall): - (JSC::MacroAssembler::emitRestoreArgumentReference): - -2008-09-09 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Bug 20755: Create an X86 namespace for register names and other things - - - Create an X86 namespace to put X86 register names. Perhaps I will move - opcode names here later as well. - - * VM/CTI.cpp: - (JSC::CTI::emitGetArg): - (JSC::CTI::emitGetPutArg): - (JSC::CTI::emitPutArg): - (JSC::CTI::emitPutArgConstant): - (JSC::CTI::emitPutCTIParam): - (JSC::CTI::emitGetCTIParam): - (JSC::CTI::emitPutToCallFrameHeader): - (JSC::CTI::emitGetFromCallFrameHeader): - (JSC::CTI::emitPutResult): - (JSC::CTI::emitDebugExceptionCheck): - (JSC::CTI::emitJumpSlowCaseIfNotImms): - (JSC::CTI::compileOpCall): - (JSC::CTI::emitSlowScriptCheck): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - (JSC::CTI::privateCompile): - (JSC::CTI::privateCompileGetByIdSelf): - (JSC::CTI::privateCompileGetByIdProto): - (JSC::CTI::privateCompileGetByIdChain): - (JSC::CTI::privateCompilePutByIdReplace): - (JSC::CTI::privateArrayLengthTrampoline): - (JSC::CTI::privateStringLengthTrampoline): - (JSC::CTI::compileRegExp): - * VM/CTI.h: - * masm/X86Assembler.h: - (JSC::X86::): - (JSC::X86Assembler::emitModRm_rm): - (JSC::X86Assembler::emitModRm_rm_Unchecked): - (JSC::X86Assembler::emitModRm_rmsib): - * wrec/WREC.cpp: - (JSC::WRECGenerator::generateNonGreedyQuantifier): - (JSC::WRECGenerator::generateGreedyQuantifier): - (JSC::WRECGenerator::generateParentheses): - (JSC::WRECGenerator::generateBackreference): - (JSC::WRECGenerator::gernerateDisjunction): - * wrec/WREC.h: - -2008-09-09 Sam Weinig - - Reviewed by Geoffrey Garen. - - Remove unnecessary friend declaration. - - * kjs/PropertyMap.h: - -2008-09-09 Sam Weinig - - Reviewed by Geoffrey Garen. - - Replace uses of PropertyMap::get and PropertyMap::getLocation with - PropertyMap::getOffset. - - Sunspider reports this as a .6% improvement. - - * JavaScriptCore.exp: - * kjs/JSObject.cpp: - (JSC::JSObject::put): - (JSC::JSObject::deleteProperty): - (JSC::JSObject::getPropertyAttributes): - * kjs/JSObject.h: - (JSC::JSObject::getDirect): - (JSC::JSObject::getDirectLocation): - (JSC::JSObject::locationForOffset): - * kjs/PropertyMap.cpp: - (JSC::PropertyMap::remove): - (JSC::PropertyMap::getOffset): - * kjs/PropertyMap.h: - -2008-09-09 Cameron Zwarich - - Reviewed by Sam Weinig. - - Bug 20754: Remove emit prefix from assembler opcode methods - - - * VM/CTI.cpp: - (JSC::CTI::emitGetArg): - (JSC::CTI::emitGetPutArg): - (JSC::CTI::emitPutArg): - (JSC::CTI::emitPutArgConstant): - (JSC::CTI::emitPutCTIParam): - (JSC::CTI::emitGetCTIParam): - (JSC::CTI::emitPutToCallFrameHeader): - (JSC::CTI::emitGetFromCallFrameHeader): - (JSC::CTI::emitPutResult): - (JSC::CTI::emitDebugExceptionCheck): - (JSC::CTI::emitCall): - (JSC::CTI::emitJumpSlowCaseIfNotImm): - (JSC::CTI::emitJumpSlowCaseIfNotImms): - (JSC::CTI::emitFastArithDeTagImmediate): - (JSC::CTI::emitFastArithReTagImmediate): - (JSC::CTI::emitFastArithPotentiallyReTagImmediate): - (JSC::CTI::emitFastArithImmToInt): - (JSC::CTI::emitFastArithIntToImmOrSlowCase): - (JSC::CTI::emitFastArithIntToImmNoCheck): - (JSC::CTI::compileOpCall): - (JSC::CTI::emitSlowScriptCheck): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - (JSC::CTI::privateCompile): - (JSC::CTI::privateCompileGetByIdSelf): - (JSC::CTI::privateCompileGetByIdProto): - (JSC::CTI::privateCompileGetByIdChain): - (JSC::CTI::privateCompilePutByIdReplace): - (JSC::CTI::privateArrayLengthTrampoline): - (JSC::CTI::privateStringLengthTrampoline): - (JSC::CTI::compileRegExp): - * masm/MacroAssemblerWin.cpp: - (JSC::MacroAssembler::emitConvertToFastCall): - (JSC::MacroAssembler::emitRestoreArgumentReference): - * masm/X86Assembler.h: - (JSC::X86Assembler::pushl_r): - (JSC::X86Assembler::pushl_m): - (JSC::X86Assembler::popl_r): - (JSC::X86Assembler::popl_m): - (JSC::X86Assembler::movl_rr): - (JSC::X86Assembler::addl_rr): - (JSC::X86Assembler::addl_i8r): - (JSC::X86Assembler::addl_i32r): - (JSC::X86Assembler::addl_mr): - (JSC::X86Assembler::andl_rr): - (JSC::X86Assembler::andl_i32r): - (JSC::X86Assembler::cmpl_i8r): - (JSC::X86Assembler::cmpl_rr): - (JSC::X86Assembler::cmpl_rm): - (JSC::X86Assembler::cmpl_i32r): - (JSC::X86Assembler::cmpl_i32m): - (JSC::X86Assembler::cmpw_rm): - (JSC::X86Assembler::orl_rr): - (JSC::X86Assembler::subl_rr): - (JSC::X86Assembler::subl_i8r): - (JSC::X86Assembler::subl_i32r): - (JSC::X86Assembler::subl_mr): - (JSC::X86Assembler::testl_i32r): - (JSC::X86Assembler::testl_rr): - (JSC::X86Assembler::xorl_i8r): - (JSC::X86Assembler::xorl_rr): - (JSC::X86Assembler::sarl_i8r): - (JSC::X86Assembler::sarl_CLr): - (JSC::X86Assembler::shl_i8r): - (JSC::X86Assembler::shll_CLr): - (JSC::X86Assembler::mull_rr): - (JSC::X86Assembler::idivl_r): - (JSC::X86Assembler::cdq): - (JSC::X86Assembler::movl_mr): - (JSC::X86Assembler::movzwl_mr): - (JSC::X86Assembler::movl_rm): - (JSC::X86Assembler::movl_i32r): - (JSC::X86Assembler::movl_i32m): - (JSC::X86Assembler::leal_mr): - (JSC::X86Assembler::ret): - (JSC::X86Assembler::jmp_r): - (JSC::X86Assembler::jmp_m): - (JSC::X86Assembler::call_r): - * wrec/WREC.cpp: - (JSC::WRECGenerator::generateBacktrack1): - (JSC::WRECGenerator::generateBacktrackBackreference): - (JSC::WRECGenerator::generateBackreferenceQuantifier): - (JSC::WRECGenerator::generateNonGreedyQuantifier): - (JSC::WRECGenerator::generateGreedyQuantifier): - (JSC::WRECGenerator::generatePatternCharacter): - (JSC::WRECGenerator::generateCharacterClassInvertedRange): - (JSC::WRECGenerator::generateCharacterClassInverted): - (JSC::WRECGenerator::generateCharacterClass): - (JSC::WRECGenerator::generateParentheses): - (JSC::WRECGenerator::gererateParenthesesResetTrampoline): - (JSC::WRECGenerator::generateAssertionBOL): - (JSC::WRECGenerator::generateAssertionEOL): - (JSC::WRECGenerator::generateAssertionWordBoundary): - (JSC::WRECGenerator::generateBackreference): - (JSC::WRECGenerator::gernerateDisjunction): - -2008-09-09 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Clean up the WREC code some more. - - * VM/CTI.cpp: - (JSC::CTI::compileRegExp): - * wrec/WREC.cpp: - (JSC::getCharacterClassNewline): - (JSC::getCharacterClassDigits): - (JSC::getCharacterClassSpaces): - (JSC::getCharacterClassWordchar): - (JSC::getCharacterClassNondigits): - (JSC::getCharacterClassNonspaces): - (JSC::getCharacterClassNonwordchar): - (JSC::WRECGenerator::generateBacktrack1): - (JSC::WRECGenerator::generateBacktrackBackreference): - (JSC::WRECGenerator::generateBackreferenceQuantifier): - (JSC::WRECGenerator::generateNonGreedyQuantifier): - (JSC::WRECGenerator::generateGreedyQuantifier): - (JSC::WRECGenerator::generatePatternCharacter): - (JSC::WRECGenerator::generateCharacterClassInvertedRange): - (JSC::WRECGenerator::generateCharacterClassInverted): - (JSC::WRECGenerator::generateCharacterClass): - (JSC::WRECGenerator::generateParentheses): - (JSC::WRECGenerator::gererateParenthesesResetTrampoline): - (JSC::WRECGenerator::generateAssertionBOL): - (JSC::WRECGenerator::generateAssertionEOL): - (JSC::WRECGenerator::generateAssertionWordBoundary): - (JSC::WRECGenerator::generateBackreference): - (JSC::WRECGenerator::gernerateDisjunction): - (JSC::WRECParser::parseCharacterClass): - (JSC::WRECParser::parseEscape): - (JSC::WRECParser::parseTerm): - * wrec/WREC.h: - -2008-09-09 Mark Rowe - - Build fix, rubber-stamped by Anders Carlsson. - - Silence spurious build warnings about missing format attributes on functions in Assertions.cpp. - - * JavaScriptCore.xcodeproj/project.pbxproj: - -2008-09-09 Mark Rowe - - Rubber-stamped by Oliver Hunt. - - Fix builds using the "debug" variant. - - This reverts r36130 and tweaks Identifier to export the same symbols for Debug - and Release configurations. - - * Configurations/JavaScriptCore.xcconfig: - * DerivedSources.make: - * JavaScriptCore.Debug.exp: Removed. - * JavaScriptCore.base.exp: Removed. - * JavaScriptCore.exp: Added. - * JavaScriptCore.xcodeproj/project.pbxproj: - * kjs/identifier.cpp: - (JSC::Identifier::addSlowCase): #ifdef the call to checkSameIdentifierTable so that - there is no overhead in Release builds. - (JSC::Identifier::checkSameIdentifierTable): Add empty functions for Release builds. - * kjs/identifier.h: - (JSC::Identifier::add): #ifdef the calls to checkSameIdentifierTable so that there is - no overhead in Release builds, and remove the inline definitions of checkSameIdentifierTable. - -2008-09-09 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Clean up WREC a bit to bring it closer to our coding style guidelines. - - * wrec/WREC.cpp: - (JSC::): - (JSC::getCharacterClass_newline): - (JSC::getCharacterClass_d): - (JSC::getCharacterClass_s): - (JSC::getCharacterClass_w): - (JSC::getCharacterClass_D): - (JSC::getCharacterClass_S): - (JSC::getCharacterClass_W): - (JSC::CharacterClassConstructor::append): - (JSC::WRECGenerator::generateNonGreedyQuantifier): - (JSC::WRECGenerator::generateGreedyQuantifier): - (JSC::WRECGenerator::generateCharacterClassInverted): - (JSC::WRECParser::parseQuantifier): - (JSC::WRECParser::parsePatternCharacterQualifier): - (JSC::WRECParser::parseCharacterClassQuantifier): - (JSC::WRECParser::parseBackreferenceQuantifier): - * wrec/WREC.h: - (JSC::Quantifier::): - (JSC::Quantifier::Quantifier): - -2008-09-09 Jungshik Shin - - Reviewed by Alexey Proskuryakov. - - Try MIME charset names before trying IANA names - ( https://bugs.webkit.org/show_bug.cgi?id=17537 ) - - * wtf/StringExtras.h: (strcasecmp): Added. - -2008-09-09 Cameron Zwarich - - Reviewed by Mark Rowe. - - Bug 20719: REGRESSION (r36135-36244): Hangs, then crashes after several seconds - - - - Fix a typo in the case-insensitive matching of character patterns. - - * wrec/WREC.cpp: - (JSC::WRECGenerator::generatePatternCharacter): - -2008-09-09 Maciej Stachowiak - - Reviewed by Sam Weinig. - - - allow polymorphic inline cache to handle Math object functions and possibly other similar things - - 1.012x speedup on SunSpider. - - * kjs/MathObject.cpp: - (JSC::MathObject::getOwnPropertySlot): - * kjs/lookup.cpp: - (JSC::setUpStaticFunctionSlot): - * kjs/lookup.h: - (JSC::getStaticPropertySlot): - -2008-09-08 Sam Weinig - - Reviewed by Maciej Stachowiak and Oliver Hunt. - - Split storage of properties out of the PropertyMap and into the JSObject - to allow sharing PropertyMap on the StructureID. In order to get this - function correctly, the StructureID's transition mappings were changed to - transition based on property name and attribute pairs, instead of just - property name. - - - Removes the single property optimization now that the PropertyMap is shared. - This will be replaced by in-lining some values on the JSObject. - - This is a wash on Sunspider and a 6.7% win on the v8 test suite. - - * JavaScriptCore.base.exp: - * VM/CTI.cpp: - (JSC::CTI::privateCompileGetByIdSelf): Get the storage directly off the JSObject. - (JSC::CTI::privateCompileGetByIdProto): Ditto. - (JSC::CTI::privateCompileGetByIdChain): Ditto. - (JSC::CTI::privateCompilePutByIdReplace): Ditto. - * kjs/JSObject.cpp: - (JSC::JSObject::mark): Mark the PropertyStorage. - (JSC::JSObject::put): Update to get the propertyMap of the StructureID. - (JSC::JSObject::deleteProperty): Ditto. - (JSC::JSObject::defineGetter): Return early if the property is already a getter/setter. - (JSC::JSObject::defineSetter): Ditto. - (JSC::JSObject::getPropertyAttributes): Update to get the propertyMap of the StructureID - (JSC::JSObject::getPropertyNames): Ditto. - (JSC::JSObject::removeDirect): Ditto. - * kjs/JSObject.h: Remove PropertyMap and add PropertyStorage. - (JSC::JSObject::propertyStorage): return the PropertyStorage. - (JSC::JSObject::getDirect): Update to get the propertyMap of the StructureID. - (JSC::JSObject::getDirectLocation): Ditto. - (JSC::JSObject::offsetForLocation): Compute location directly. - (JSC::JSObject::hasCustomProperties): Update to get the propertyMap of the StructureID. - (JSC::JSObject::hasGetterSetterProperties): Ditto. - (JSC::JSObject::getDirectOffset): Get by indexing into PropertyStorage. - (JSC::JSObject::putDirectOffset): Put by indexing into PropertyStorage. - (JSC::JSObject::getOwnPropertySlotForWrite): Update to get the propertyMap of the StructureID. - (JSC::JSObject::getOwnPropertySlot): Ditto. - (JSC::JSObject::putDirect): Move putting into the StructureID unless the property already exists. - * kjs/PropertyMap.cpp: Use the propertyStorage as the storage for the JSValues. - (JSC::PropertyMap::checkConsistency): - (JSC::PropertyMap::operator=): - (JSC::PropertyMap::~PropertyMap): - (JSC::PropertyMap::get): - (JSC::PropertyMap::getLocation): - (JSC::PropertyMap::put): - (JSC::PropertyMap::getOffset): - (JSC::PropertyMap::insert): - (JSC::PropertyMap::expand): - (JSC::PropertyMap::rehash): - (JSC::PropertyMap::createTable): - (JSC::PropertyMap::resizePropertyStorage): Resize the storage to match the size of the map - (JSC::PropertyMap::remove): - (JSC::PropertyMap::getEnumerablePropertyNames): - * kjs/PropertyMap.h: - (JSC::PropertyMapEntry::PropertyMapEntry): - (JSC::PropertyMap::isEmpty): - (JSC::PropertyMap::size): - (JSC::PropertyMap::makingCount): - (JSC::PropertyMap::PropertyMap): - - * kjs/StructureID.cpp: - (JSC::StructureID::addPropertyTransition): Transitions now are based off the property name - and attributes. - (JSC::StructureID::toDictionaryTransition): Copy the map. - (JSC::StructureID::changePrototypeTransition): Copy the map. - (JSC::StructureID::getterSetterTransition): Copy the map. - (JSC::StructureID::~StructureID): - * kjs/StructureID.h: - (JSC::TransitionTableHash::hash): Custom hash for transition map. - (JSC::TransitionTableHash::equal): Ditto. - (JSC::TransitionTableHashTraits::emptyValue): Custom traits for transition map - (JSC::TransitionTableHashTraits::constructDeletedValue): Ditto. - (JSC::TransitionTableHashTraits::isDeletedValue): Ditto. - (JSC::StructureID::propertyMap): Added. - -2008-09-08 Oliver Hunt - - Reviewed by Mark Rowe. - - Bug 20694: Slow Script error pops up when running Dromaeo tests - - Correct error in timeout logic where execution tick count would - be reset to incorrect value due to incorrect offset and indirection. - Codegen for the slow script dialog was factored out into a separate - method (emitSlowScriptCheck) rather than having multiple copies of - the same code. Also added calls to generate slow script checks - for loop_if_less and loop_if_true opcodes. - - * VM/CTI.cpp: - (JSC::CTI::emitSlowScriptCheck): - (JSC::CTI::privateCompileMainPass): - (JSC::CTI::privateCompileSlowCases): - * VM/CTI.h: - -2008-09-08 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Remove references to the removed WRECompiler class. - - * VM/Machine.h: - * wrec/WREC.h: - -2008-09-08 Cameron Zwarich - - Rubber-stamped by Mark Rowe. - - Fix the build with CTI enabled but WREC disabled. - - * VM/CTI.cpp: - * VM/CTI.h: - -2008-09-08 Dan Bernstein - - - build fix - - * kjs/nodes.h: - (JSC::StatementNode::): - (JSC::BlockNode::): - -2008-09-08 Kevin McCullough - - Reviewed by Geoff. - - Breakpoints in for loops, while loops or - conditions without curly braces don't break. (19306) - -Statement Lists already emit debug hooks but conditionals without - brackets are not lists. - - * kjs/nodes.cpp: - (KJS::IfNode::emitCode): - (KJS::IfElseNode::emitCode): - (KJS::DoWhileNode::emitCode): - (KJS::WhileNode::emitCode): - (KJS::ForNode::emitCode): - (KJS::ForInNode::emitCode): - * kjs/nodes.h: - (KJS::StatementNode::): - (KJS::BlockNode::): - -2008-09-08 Maciej Stachowiak - - Reviewed by Anders Carlsson. - - - Cache the code generated for eval to speed up SunSpider and web sites - https://bugs.webkit.org/show_bug.cgi?id=20718 - - 1.052x on SunSpider - 2.29x on date-format-tofte - - Lots of real sites seem to get many hits on this cache as well, - including GMail, Google Spreadsheets, Slate and Digg (the last of - these gets over 100 hits on initial page load). - - * VM/CodeBlock.h: - (JSC::EvalCodeCache::get): - * VM/Machine.cpp: - (JSC::Machine::callEval): - (JSC::Machine::privateExecute): - (JSC::Machine::cti_op_call_eval): - * VM/Machine.h: - -2008-09-07 Cameron Zwarich - - Reviewed by Oliver Hunt. - - Bug 20711: Change KJS prefix on preprocessor macros to JSC - - - * kjs/CommonIdentifiers.cpp: - (JSC::CommonIdentifiers::CommonIdentifiers): - * kjs/CommonIdentifiers.h: - * kjs/PropertySlot.h: - (JSC::PropertySlot::getValue): - (JSC::PropertySlot::putValue): - (JSC::PropertySlot::setValueSlot): - (JSC::PropertySlot::setValue): - (JSC::PropertySlot::setRegisterSlot): - * kjs/lookup.h: - * kjs/nodes.cpp: - * kjs/nodes.h: - (JSC::Node::): - (JSC::ExpressionNode::): - (JSC::StatementNode::): - (JSC::NullNode::): - (JSC::BooleanNode::): - (JSC::NumberNode::): - (JSC::ImmediateNumberNode::): - (JSC::StringNode::): - (JSC::RegExpNode::): - (JSC::ThisNode::): - (JSC::ResolveNode::): - (JSC::ElementNode::): - (JSC::ArrayNode::): - (JSC::PropertyNode::): - (JSC::PropertyListNode::): - (JSC::ObjectLiteralNode::): - (JSC::BracketAccessorNode::): - (JSC::DotAccessorNode::): - (JSC::ArgumentListNode::): - (JSC::ArgumentsNode::): - (JSC::NewExprNode::): - (JSC::EvalFunctionCallNode::): - (JSC::FunctionCallValueNode::): - (JSC::FunctionCallResolveNode::): - (JSC::FunctionCallBracketNode::): - (JSC::FunctionCallDotNode::): - (JSC::PrePostResolveNode::): - (JSC::PostfixResolveNode::): - (JSC::PostfixBracketNode::): - (JSC::PostfixDotNode::): - (JSC::PostfixErrorNode::): - (JSC::DeleteResolveNode::): - (JSC::DeleteBracketNode::): - (JSC::DeleteDotNode::): - (JSC::DeleteValueNode::): - (JSC::VoidNode::): - (JSC::TypeOfResolveNode::): - (JSC::TypeOfValueNode::): - (JSC::PrefixResolveNode::): - (JSC::PrefixBracketNode::): - (JSC::PrefixDotNode::): - (JSC::PrefixErrorNode::): - (JSC::UnaryPlusNode::): - (JSC::NegateNode::): - (JSC::BitwiseNotNode::): - (JSC::LogicalNotNode::): - (JSC::MultNode::): - (JSC::DivNode::): - (JSC::ModNode::): - (JSC::AddNode::): - (JSC::SubNode::): - (JSC::LeftShiftNode::): - (JSC::RightShiftNode::): - (JSC::UnsignedRightShiftNode::): - (JSC::LessNode::): - (JSC::GreaterNode::): - (JSC::LessEqNode::): - (JSC::GreaterEqNode::): - (JSC::ThrowableBinaryOpNode::): - (JSC::InstanceOfNode::): - (JSC::InNode::): - (JSC::EqualNode::): - (JSC::NotEqualNode::): - (JSC::StrictEqualNode::): - (JSC::NotStrictEqualNode::): - (JSC::BitAndNode::): - (JSC::BitOrNode::): - (JSC::BitXOrNode::): - (JSC::LogicalOpNode::): - (JSC::ConditionalNode::): - (JSC::ReadModifyResolveNode::): - (JSC::AssignResolveNode::): - (JSC::ReadModifyBracketNode::): - (JSC::AssignBracketNode::): - (JSC::AssignDotNode::): - (JSC::ReadModifyDotNode::): - (JSC::AssignErrorNode::): - (JSC::CommaNode::): - (JSC::VarDeclCommaNode::): - (JSC::ConstDeclNode::): - (JSC::ConstStatementNode::): - (JSC::EmptyStatementNode::): - (JSC::DebuggerStatementNode::): - (JSC::ExprStatementNode::): - (JSC::VarStatementNode::): - (JSC::IfNode::): - (JSC::IfElseNode::): - (JSC::DoWhileNode::): - (JSC::WhileNode::): - (JSC::ForNode::): - (JSC::ContinueNode::): - (JSC::BreakNode::): - (JSC::ReturnNode::): - (JSC::WithNode::): - (JSC::LabelNode::): - (JSC::ThrowNode::): - (JSC::TryNode::): - (JSC::ParameterNode::): - (JSC::ScopeNode::): - (JSC::ProgramNode::): - (JSC::EvalNode::): - (JSC::FunctionBodyNode::): - (JSC::FuncExprNode::): - (JSC::FuncDeclNode::): - (JSC::CaseClauseNode::): - (JSC::ClauseListNode::): - (JSC::CaseBlockNode::): - (JSC::SwitchNode::): - -2008-09-07 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Bug 20704: Replace the KJS namespace - - - Rename the KJS namespace to JSC. There are still some uses of KJS in - preprocessor macros and comments, but these will also be changed some - time in the near future. - - * API/APICast.h: - (toJS): - (toRef): - (toGlobalRef): - * API/JSBase.cpp: - * API/JSCallbackConstructor.cpp: - * API/JSCallbackConstructor.h: - * API/JSCallbackFunction.cpp: - * API/JSCallbackFunction.h: - * API/JSCallbackObject.cpp: - * API/JSCallbackObject.h: - * API/JSCallbackObjectFunctions.h: - * API/JSClassRef.cpp: - (OpaqueJSClass::staticValues): - (OpaqueJSClass::staticFunctions): - * API/JSClassRef.h: - * API/JSContextRef.cpp: - * API/JSObjectRef.cpp: - * API/JSProfilerPrivate.cpp: - * API/JSStringRef.cpp: - * API/JSValueRef.cpp: - (JSValueGetType): - * API/OpaqueJSString.cpp: - * API/OpaqueJSString.h: - * JavaScriptCore.Debug.exp: - * JavaScriptCore.base.exp: - * VM/CTI.cpp: - (JSC::): - * VM/CTI.h: - * VM/CodeBlock.cpp: - * VM/CodeBlock.h: - * VM/CodeGenerator.cpp: - * VM/CodeGenerator.h: - * VM/ExceptionHelpers.cpp: - * VM/ExceptionHelpers.h: - * VM/Instruction.h: - * VM/JSPropertyNameIterator.cpp: - * VM/JSPropertyNameIterator.h: - * VM/LabelID.h: - * VM/Machine.cpp: - * VM/Machine.h: - * VM/Opcode.cpp: - * VM/Opcode.h: - * VM/Register.h: - (WTF::): - * VM/RegisterFile.cpp: - * VM/RegisterFile.h: - * VM/RegisterID.h: - (WTF::): - * VM/SamplingTool.cpp: - * VM/SamplingTool.h: - * VM/SegmentedVector.h: - * kjs/ArgList.cpp: - * kjs/ArgList.h: - * kjs/Arguments.cpp: - * kjs/Arguments.h: - * kjs/ArrayConstructor.cpp: - * kjs/ArrayConstructor.h: - * kjs/ArrayPrototype.cpp: - * kjs/ArrayPrototype.h: - * kjs/BatchedTransitionOptimizer.h: - * kjs/BooleanConstructor.cpp: - * kjs/BooleanConstructor.h: - * kjs/BooleanObject.cpp: - * kjs/BooleanObject.h: - * kjs/BooleanPrototype.cpp: - * kjs/BooleanPrototype.h: - * kjs/CallData.cpp: - * kjs/CallData.h: - * kjs/ClassInfo.h: - * kjs/CommonIdentifiers.cpp: - * kjs/CommonIdentifiers.h: - * kjs/ConstructData.cpp: - * kjs/ConstructData.h: - * kjs/DateConstructor.cpp: - * kjs/DateConstructor.h: - * kjs/DateInstance.cpp: - (JSC::DateInstance::msToGregorianDateTime): - * kjs/DateInstance.h: - * kjs/DateMath.cpp: - * kjs/DateMath.h: - * kjs/DatePrototype.cpp: - * kjs/DatePrototype.h: - * kjs/DebuggerCallFrame.cpp: - * kjs/DebuggerCallFrame.h: - * kjs/Error.cpp: - * kjs/Error.h: - * kjs/ErrorConstructor.cpp: - * kjs/ErrorConstructor.h: - * kjs/ErrorInstance.cpp: - * kjs/ErrorInstance.h: - * kjs/ErrorPrototype.cpp: - * kjs/ErrorPrototype.h: - * kjs/ExecState.cpp: - * kjs/ExecState.h: - * kjs/FunctionConstructor.cpp: - * kjs/FunctionConstructor.h: - * kjs/FunctionPrototype.cpp: - * kjs/FunctionPrototype.h: - * kjs/GetterSetter.cpp: - * kjs/GetterSetter.h: - * kjs/GlobalEvalFunction.cpp: - * kjs/GlobalEvalFunction.h: - * kjs/IndexToNameMap.cpp: - * kjs/IndexToNameMap.h: - * kjs/InitializeThreading.cpp: - * kjs/InitializeThreading.h: - * kjs/InternalFunction.cpp: - * kjs/InternalFunction.h: - (JSC::InternalFunction::InternalFunction): - * kjs/JSActivation.cpp: - * kjs/JSActivation.h: - * kjs/JSArray.cpp: - * kjs/JSArray.h: - * kjs/JSCell.cpp: - * kjs/JSCell.h: - * kjs/JSFunction.cpp: - * kjs/JSFunction.h: - (JSC::JSFunction::JSFunction): - * kjs/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): - * kjs/JSGlobalData.h: - * kjs/JSGlobalObject.cpp: - * kjs/JSGlobalObject.h: - * kjs/JSGlobalObjectFunctions.cpp: - * kjs/JSGlobalObjectFunctions.h: - * kjs/JSImmediate.cpp: - * kjs/JSImmediate.h: - * kjs/JSLock.cpp: - * kjs/JSLock.h: - * kjs/JSNotAnObject.cpp: - * kjs/JSNotAnObject.h: - * kjs/JSNumberCell.cpp: - * kjs/JSNumberCell.h: - * kjs/JSObject.cpp: - * kjs/JSObject.h: - * kjs/JSStaticScopeObject.cpp: - * kjs/JSStaticScopeObject.h: - * kjs/JSString.cpp: - * kjs/JSString.h: - * kjs/JSType.h: - * kjs/JSValue.cpp: - * kjs/JSValue.h: - * kjs/JSVariableObject.cpp: - * kjs/JSVariableObject.h: - * kjs/JSWrapperObject.cpp: - * kjs/JSWrapperObject.h: - * kjs/LabelStack.cpp: - * kjs/LabelStack.h: - * kjs/MathObject.cpp: - * kjs/MathObject.h: - * kjs/NativeErrorConstructor.cpp: - * kjs/NativeErrorConstructor.h: - * kjs/NativeErrorPrototype.cpp: - * kjs/NativeErrorPrototype.h: - * kjs/NodeInfo.h: - * kjs/NumberConstructor.cpp: - * kjs/NumberConstructor.h: - * kjs/NumberObject.cpp: - * kjs/NumberObject.h: - * kjs/NumberPrototype.cpp: - * kjs/NumberPrototype.h: - * kjs/ObjectConstructor.cpp: - * kjs/ObjectConstructor.h: - * kjs/ObjectPrototype.cpp: - * kjs/ObjectPrototype.h: - * kjs/Parser.cpp: - * kjs/Parser.h: - * kjs/PropertyMap.cpp: - (JSC::PropertyMapStatisticsExitLogger::~PropertyMapStatisticsExitLogger): - * kjs/PropertyMap.h: - * kjs/PropertyNameArray.cpp: - * kjs/PropertyNameArray.h: - * kjs/PropertySlot.cpp: - * kjs/PropertySlot.h: - * kjs/PrototypeFunction.cpp: - * kjs/PrototypeFunction.h: - * kjs/PutPropertySlot.h: - * kjs/RegExpConstructor.cpp: - * kjs/RegExpConstructor.h: - * kjs/RegExpObject.cpp: - * kjs/RegExpObject.h: - * kjs/RegExpPrototype.cpp: - * kjs/RegExpPrototype.h: - * kjs/ScopeChain.cpp: - * kjs/ScopeChain.h: - * kjs/ScopeChainMark.h: - * kjs/Shell.cpp: - (jscmain): - * kjs/SmallStrings.cpp: - * kjs/SmallStrings.h: - * kjs/SourceProvider.h: - * kjs/SourceRange.h: - * kjs/StringConstructor.cpp: - * kjs/StringConstructor.h: - * kjs/StringObject.cpp: - * kjs/StringObject.h: - * kjs/StringObjectThatMasqueradesAsUndefined.h: - * kjs/StringPrototype.cpp: - * kjs/StringPrototype.h: - * kjs/StructureID.cpp: - * kjs/StructureID.h: - * kjs/SymbolTable.h: - * kjs/collector.cpp: - * kjs/collector.h: - * kjs/completion.h: - * kjs/create_hash_table: - * kjs/debugger.cpp: - * kjs/debugger.h: - * kjs/dtoa.cpp: - * kjs/dtoa.h: - * kjs/grammar.y: - * kjs/identifier.cpp: - * kjs/identifier.h: - (JSC::Identifier::equal): - * kjs/interpreter.cpp: - * kjs/interpreter.h: - * kjs/lexer.cpp: - (JSC::Lexer::Lexer): - (JSC::Lexer::clear): - (JSC::Lexer::makeIdentifier): - * kjs/lexer.h: - * kjs/lookup.cpp: - * kjs/lookup.h: - * kjs/nodes.cpp: - * kjs/nodes.h: - * kjs/nodes2string.cpp: - * kjs/operations.cpp: - * kjs/operations.h: - * kjs/protect.h: - * kjs/regexp.cpp: - * kjs/regexp.h: - * kjs/ustring.cpp: - * kjs/ustring.h: - (JSC::operator!=): - (JSC::IdentifierRepHash::hash): - (WTF::): - * masm/MacroAssembler.h: - * masm/MacroAssemblerWin.cpp: - * masm/X86Assembler.h: - * pcre/pcre_exec.cpp: - * profiler/CallIdentifier.h: - (WTF::): - * profiler/HeavyProfile.cpp: - * profiler/HeavyProfile.h: - * profiler/Profile.cpp: - * profiler/Profile.h: - * profiler/ProfileGenerator.cpp: - * profiler/ProfileGenerator.h: - * profiler/ProfileNode.cpp: - * profiler/ProfileNode.h: - * profiler/Profiler.cpp: - * profiler/Profiler.h: - * profiler/TreeProfile.cpp: - * profiler/TreeProfile.h: - * wrec/WREC.cpp: - * wrec/WREC.h: - * wtf/AVLTree.h: - -2008-09-07 Maciej Stachowiak - - Reviewed by Dan Bernstein. - - - rename IA32MacroAssembler class to X86Assembler - - We otherwise call the platform X86, and also, I don't see any macros. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * masm/IA32MacroAsm.h: Removed. - * masm/MacroAssembler.h: - (KJS::MacroAssembler::MacroAssembler): - * masm/MacroAssemblerWin.cpp: - (KJS::MacroAssembler::emitRestoreArgumentReference): - * masm/X86Assembler.h: Copied from masm/IA32MacroAsm.h. - (KJS::X86Assembler::X86Assembler): - * wrec/WREC.cpp: - (KJS::WRECGenerator::generateNonGreedyQuantifier): - (KJS::WRECGenerator::generateGreedyQuantifier): - (KJS::WRECGenerator::generateParentheses): - (KJS::WRECGenerator::generateBackreference): - (KJS::WRECGenerator::gernerateDisjunction): - * wrec/WREC.h: - -2008-09-07 Cameron Zwarich - - Not reviewed. - - Visual C++ seems to have some odd casting rules, so just convert the - offending cast back to a C-style cast for now. - - * kjs/collector.cpp: - (KJS::otherThreadStackPointer): - -2008-09-07 Cameron Zwarich - - Reviewed by Mark Rowe. - - Attempt to fix the Windows build by using a const_cast to cast regs.Esp - to a uintptr_t instead of a reinterpret_cast. - - * kjs/collector.cpp: - (KJS::otherThreadStackPointer): - -2008-09-07 Cameron Zwarich - - Reviewed by Sam Weinig. - - Remove C-style casts from kjs/collector.cpp. - - * kjs/collector.cpp: - (KJS::Heap::heapAllocate): - (KJS::currentThreadStackBase): - (KJS::Heap::markConservatively): - (KJS::otherThreadStackPointer): - (KJS::Heap::markOtherThreadConservatively): - (KJS::Heap::sweep): - -2008-09-07 Mark Rowe - - Build fix for the debug variant. - - * DerivedSources.make: Also use the .Debug.exp exports file when building the debug variant. - -2008-09-07 Cameron Zwarich - - Reviewed by Timothy Hatcher. - - Remove C-style casts from the CTI code. - - * VM/CTI.cpp: - (KJS::CTI::emitGetArg): - (KJS::CTI::emitGetPutArg): - (KJS::ctiRepatchCallByReturnAddress): - (KJS::CTI::compileOpCall): - (KJS::CTI::privateCompileMainPass): - (KJS::CTI::privateCompileGetByIdSelf): - (KJS::CTI::privateCompileGetByIdProto): - (KJS::CTI::privateCompileGetByIdChain): - (KJS::CTI::privateCompilePutByIdReplace): - (KJS::CTI::privateArrayLengthTrampoline): - (KJS::CTI::privateStringLengthTrampoline): - -=== End merge of squirrelfish-extreme === - -2008-09-06 Gavin Barraclough - - Reviewed by Sam Weinig. Adapted somewhat by Maciej Stachowiak. - - - refactor WREC to share more of the JIT infrastructure with CTI - - * VM/CTI.cpp: - (KJS::CTI::emitGetArg): - (KJS::CTI::emitGetPutArg): - (KJS::CTI::emitPutArg): - (KJS::CTI::emitPutArgConstant): - (KJS::CTI::emitPutCTIParam): - (KJS::CTI::emitGetCTIParam): - (KJS::CTI::emitPutToCallFrameHeader): - (KJS::CTI::emitGetFromCallFrameHeader): - (KJS::CTI::emitPutResult): - (KJS::CTI::emitDebugExceptionCheck): - (KJS::CTI::emitJumpSlowCaseIfNotImm): - (KJS::CTI::emitJumpSlowCaseIfNotImms): - (KJS::CTI::emitFastArithDeTagImmediate): - (KJS::CTI::emitFastArithReTagImmediate): - (KJS::CTI::emitFastArithPotentiallyReTagImmediate): - (KJS::CTI::emitFastArithImmToInt): - (KJS::CTI::emitFastArithIntToImmOrSlowCase): - (KJS::CTI::emitFastArithIntToImmNoCheck): - (KJS::CTI::CTI): - (KJS::CTI::compileOpCall): - (KJS::CTI::privateCompileMainPass): - (KJS::CTI::privateCompileSlowCases): - (KJS::CTI::privateCompile): - (KJS::CTI::privateCompileGetByIdSelf): - (KJS::CTI::privateCompileGetByIdProto): - (KJS::CTI::privateCompileGetByIdChain): - (KJS::CTI::privateCompilePutByIdReplace): - (KJS::CTI::privateArrayLengthTrampoline): - (KJS::CTI::privateStringLengthTrampoline): - (KJS::CTI::compileRegExp): - * VM/CTI.h: - (KJS::CallRecord::CallRecord): - (KJS::JmpTable::JmpTable): - (KJS::SlowCaseEntry::SlowCaseEntry): - (KJS::CTI::JSRInfo::JSRInfo): - * kjs/regexp.cpp: - (KJS::RegExp::RegExp): - * wrec/WREC.cpp: - (KJS::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor): - (KJS::GeneratePatternCharacterFunctor::generateAtom): - (KJS::GeneratePatternCharacterFunctor::backtrack): - (KJS::GenerateCharacterClassFunctor::generateAtom): - (KJS::GenerateCharacterClassFunctor::backtrack): - (KJS::GenerateBackreferenceFunctor::generateAtom): - (KJS::GenerateBackreferenceFunctor::backtrack): - (KJS::GenerateParenthesesNonGreedyFunctor::generateAtom): - (KJS::GenerateParenthesesNonGreedyFunctor::backtrack): - (KJS::WRECGenerate::generateBacktrack1): - (KJS::WRECGenerate::generateBacktrackBackreference): - (KJS::WRECGenerate::generateBackreferenceQuantifier): - (KJS::WRECGenerate::generateNonGreedyQuantifier): - (KJS::WRECGenerate::generateGreedyQuantifier): - (KJS::WRECGenerate::generatePatternCharacter): - (KJS::WRECGenerate::generateCharacterClassInvertedRange): - (KJS::WRECGenerate::generateCharacterClassInverted): - (KJS::WRECGenerate::generateCharacterClass): - (KJS::WRECGenerate::generateParentheses): - (KJS::WRECGenerate::generateParenthesesNonGreedy): - (KJS::WRECGenerate::gererateParenthesesResetTrampoline): - (KJS::WRECGenerate::generateAssertionBOL): - (KJS::WRECGenerate::generateAssertionEOL): - (KJS::WRECGenerate::generateAssertionWordBoundary): - (KJS::WRECGenerate::generateBackreference): - (KJS::WRECGenerate::gernerateDisjunction): - (KJS::WRECGenerate::terminateDisjunction): - (KJS::WRECParser::parseGreedyQuantifier): - (KJS::WRECParser::parseQuantifier): - (KJS::WRECParser::parsePatternCharacterQualifier): - (KJS::WRECParser::parseCharacterClassQuantifier): - (KJS::WRECParser::parseBackreferenceQuantifier): - (KJS::WRECParser::parseParentheses): - (KJS::WRECParser::parseCharacterClass): - (KJS::WRECParser::parseOctalEscape): - (KJS::WRECParser::parseEscape): - (KJS::WRECParser::parseTerm): - (KJS::WRECParser::parseDisjunction): - * wrec/WREC.h: - (KJS::WRECGenerate::WRECGenerate): - (KJS::WRECParser::): - (KJS::WRECParser::WRECParser): - (KJS::WRECParser::parseAlternative): - (KJS::WRECParser::isEndOfPattern): - -2008-09-06 Oliver Hunt - - Reviewed by NOBODY (Build fix). - - Fix the sampler build. - - * VM/SamplingTool.h: - -2008-09-06 Oliver Hunt - - Reviewed by Maciej Stachowiak. - - Jump through the necessary hoops required to make MSVC cooperate with SFX - - We now explicitly declare the calling convention on all cti_op_* cfunctions, - and return int instead of bool where appropriate (despite the cdecl calling - convention seems to state MSVC generates code that returns the result value - through ecx). SFX behaves slightly differently under MSVC, specifically it - stores the base argument address for the cti_op_* functions in the first - argument, and then does the required stack manipulation through that pointer. - This is necessary as MSVC's optimisations assume they have complete control - of the stack, and periodically elide our stack manipulations, or move - values in unexpected ways. MSVC also frequently produces tail calls which may - clobber the first argument, so the MSVC path is slightly less efficient due - to the need to restore it. - - * JavaScriptCore.xcodeproj/project.pbxproj: - * VM/CTI.cpp: - (KJS::): - (KJS::CTI::compileOpCall): - (KJS::CTI::privateCompileMainPass): - (KJS::CTI::privateCompileSlowCases): - * VM/CTI.h: - * VM/Machine.cpp: - * VM/Machine.h: - * masm/MacroAssembler.h: - (KJS::MacroAssembler::emitConvertToFastCall): - * masm/MacroAssemblerIA32GCC.cpp: Removed. - For performance reasons we need these no-op functions to be inlined. - - * masm/MacroAssemblerWin.cpp: - (KJS::MacroAssembler::emitRestoreArgumentReference): - * wtf/Platform.h: - -2008-09-05 Geoffrey Garen - - Reviewed by Maciej Stachowiak, or maybe the other way around. - - Added the ability to coalesce JITCode buffer grow operations by first - growing the buffer and then executing unchecked puts to it. - - About a 2% speedup on date-format-tofte. - - * VM/CTI.cpp: - (KJS::CTI::compileOpCall): - * masm/IA32MacroAsm.h: - (KJS::JITCodeBuffer::ensureSpace): - (KJS::JITCodeBuffer::putByteUnchecked): - (KJS::JITCodeBuffer::putByte): - (KJS::JITCodeBuffer::putShortUnchecked): - (KJS::JITCodeBuffer::putShort): - (KJS::JITCodeBuffer::putIntUnchecked): - (KJS::JITCodeBuffer::putInt): - (KJS::IA32MacroAssembler::emitTestl_i32r): - (KJS::IA32MacroAssembler::emitMovl_mr): - (KJS::IA32MacroAssembler::emitMovl_rm): - (KJS::IA32MacroAssembler::emitMovl_i32m): - (KJS::IA32MacroAssembler::emitUnlinkedJe): - (KJS::IA32MacroAssembler::emitModRm_rr): - (KJS::IA32MacroAssembler::emitModRm_rr_Unchecked): - (KJS::IA32MacroAssembler::emitModRm_rm_Unchecked): - (KJS::IA32MacroAssembler::emitModRm_rm): - (KJS::IA32MacroAssembler::emitModRm_opr): - (KJS::IA32MacroAssembler::emitModRm_opr_Unchecked): - (KJS::IA32MacroAssembler::emitModRm_opm_Unchecked): - -2008-09-05 Mark Rowe - - Reviewed by Sam Weinig. - - Disable WREC and CTI on platforms that we have not yet had a chance to test with. - - * wtf/Platform.h: - -2008-09-05 Geoffrey Garen - - Reviewed by Sam Weinig. - - Use jo instead of a mask compare when fetching array.length and - string.length. 4% speedup on array.length / string.length torture - test. - - * VM/CTI.cpp: - (KJS::CTI::privateArrayLengthTrampoline): - (KJS::CTI::privateStringLengthTrampoline): - -2008-09-05 Geoffrey Garen - - Reviewed by Sam Weinig. - - Removed a CTI compilation pass by recording labels during bytecode - generation. This is more to reduce complexity than it is to improve - performance. - - SunSpider reports no change. - - CodeBlock now keeps a "labels" set, which holds the offsets of all the - instructions that can be jumped to. - - * VM/CTI.cpp: Nixed a pass. - - * VM/CodeBlock.h: Added a "labels" set. - - * VM/LabelID.h: No need for a special LableID for holding jump - destinations, since the CodeBlock now knows all jump destinations. - - * wtf/HashTraits.h: New hash traits to accomodate putting offset 0 in - the set. - - * kjs/nodes.cpp: - (KJS::TryNode::emitCode): Emit a dummy label to record sret targets. - -2008-09-05 Mark Rowe - - Reviewed by Oliver Hunt and Gavin Barraclough. - - Move the JITCodeBuffer onto Machine and remove the static variables. - - * VM/CTI.cpp: Initialize m_jit with the Machine's code buffer. - * VM/Machine.cpp: - (KJS::Machine::Machine): Allocate a JITCodeBuffer. - * VM/Machine.h: - * kjs/RegExpConstructor.cpp: - (KJS::constructRegExp): Pass the ExecState through. - * kjs/RegExpPrototype.cpp: - (KJS::regExpProtoFuncCompile): Ditto. - * kjs/StringPrototype.cpp: - (KJS::stringProtoFuncMatch): Ditto. - (KJS::stringProtoFuncSearch): Ditto. - * kjs/nodes.cpp: - (KJS::RegExpNode::emitCode): Compile the pattern at code generation time - so that we have access to an ExecState. - * kjs/nodes.h: - (KJS::RegExpNode::): - * kjs/nodes2string.cpp: - * kjs/regexp.cpp: - (KJS::RegExp::RegExp): Pass the ExecState through. - (KJS::RegExp::create): Ditto. - * kjs/regexp.h: - * masm/IA32MacroAsm.h: - (KJS::IA32MacroAssembler::IA32MacroAssembler): Reset the JITCodeBuffer when we are - constructed. - * wrec/WREC.cpp: - (KJS::WRECompiler::compile): Retrieve the JITCodeBuffer from the Machine. - * wrec/WREC.h: - -2008-09-05 Mark Rowe - - Reviewed by Oliver Hunt and Gavin Barraclough. - - Fix the build when CTI is disabled. - - * VM/CodeBlock.cpp: - (KJS::CodeBlock::~CodeBlock): - * VM/CodeGenerator.cpp: - (KJS::prepareJumpTableForStringSwitch): - * VM/Machine.cpp: - (KJS::Machine::Machine): - (KJS::Machine::~Machine): - -2008-09-05 Gavin Barraclough - - Reviewed by Mark Rowe. - - Fix some windows abi issues. - - * VM/CTI.cpp: - (KJS::CTI::privateCompileMainPass): - (KJS::CTI::privateCompileSlowCases): - * VM/CTI.h: - (KJS::CallRecord::CallRecord): - (KJS::): - * VM/Machine.cpp: - (KJS::Machine::cti_op_resolve_func): - (KJS::Machine::cti_op_post_inc): - (KJS::Machine::cti_op_resolve_with_base): - (KJS::Machine::cti_op_post_dec): - * VM/Machine.h: - -2008-09-05 Mark Rowe - - Reviewed by Sam Weinig. - - Fix ecma/FunctionObjects/15.3.5.3.js after I broke it in r93. - - * VM/Machine.cpp: - (KJS::Machine::cti_op_call_NotJSFunction): Restore m_callFrame to the correct value after making the native call. - (KJS::Machine::cti_op_construct_NotJSConstruct): Ditto. - -2008-09-04 Mark Rowe - - Reviewed by Sam Weinig. - - Fix fast/dom/Window/console-functions.html. - - The call frame on the ExecState was not being updated on calls into native functions. This meant that functions - such as console.log would use the line number of the last JS function on the call stack. - - * VM/Machine.cpp: - (KJS::Machine::cti_op_call_NotJSFunction): Update the ExecState's call frame before making a native function call, - and restore it when the function is done. - (KJS::Machine::cti_op_construct_NotJSConstruct): Ditto. - -2008-09-05 Oliver Hunt - - Start bringing up SFX on windows. - - Reviewed by Mark Rowe and Sam Weinig - - Start doing the work to bring up SFX on windows. Initially - just working on WREC, as it does not make any calls so reduces - the amount of code that needs to be corrected. - - Start abstracting the CTI JIT codegen engine. - - * ChangeLog: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * VM/CTI.cpp: - * masm/IA32MacroAsm.h: - * masm/MacroAssembler.h: Added. - (KJS::MacroAssembler::MacroAssembler): - * masm/MacroAssemblerIA32GCC.cpp: Added. - (KJS::MacroAssembler::emitConvertToFastCall): - * masm/MacroAssemblerWin.cpp: Added. - (KJS::MacroAssembler::emitConvertToFastCall): - * wrec/WREC.cpp: - (KJS::WRECompiler::parseGreedyQuantifier): - (KJS::WRECompiler::parseCharacterClass): - (KJS::WRECompiler::parseEscape): - (KJS::WRECompiler::compilePattern): - * wrec/WREC.h: - -2008-09-04 Gavin Barraclough - - Reviewed by Sam Weinig. - - Support for slow scripts (timeout checking). - - * VM/CTI.cpp: - (KJS::CTI::privateCompileMainPass): - (KJS::CTI::privateCompile): - * VM/Machine.cpp: - (KJS::slideRegisterWindowForCall): - (KJS::Machine::cti_timeout_check): - (KJS::Machine::cti_vm_throw): - -2008-09-04 Sam Weinig - - Reviewed by Mark Rowe. - - Third round of style cleanup. - - * VM/CTI.cpp: - * VM/CTI.h: - * VM/CodeBlock.h: - * VM/Machine.cpp: - * VM/Machine.h: - * kjs/ExecState.h: - -2008-09-04 Sam Weinig - - Reviewed by Jon Honeycutt. - - Second round of style cleanup. - - * VM/CTI.cpp: - * VM/CTI.h: - * wrec/WREC.h: - -2008-09-04 Sam Weinig - - Reviewed by Mark Rowe. - - First round of style cleanup. - - * VM/CTI.cpp: - * VM/CTI.h: - * masm/IA32MacroAsm.h: - * wrec/WREC.cpp: - * wrec/WREC.h: - -2008-09-04 Geoffrey Garen - - Reviewed by Mark Rowe. - - Merged http://trac.webkit.org/changeset/36081 to work with CTI. - - * VM/Machine.cpp: - (KJS::Machine::tryCtiCacheGetByID): - -2008-09-04 Gavin Barraclough - - Reviewed by Sam Weinig. - - Enable profiling in CTI. - - * VM/CTI.h: - (KJS::): - (KJS::CTI::execute): - * VM/Machine.cpp: - (KJS::Machine::cti_op_call_JSFunction): - (KJS::Machine::cti_op_call_NotJSFunction): - (KJS::Machine::cti_op_ret): - (KJS::Machine::cti_op_construct_JSConstruct): - (KJS::Machine::cti_op_construct_NotJSConstruct): - -2008-09-04 Victor Hernandez - - Reviewed by Geoffrey Garen. - - Fixed an #if to support using WREC without CTI. - - * kjs/regexp.cpp: - (KJS::RegExp::match): - -2008-09-04 Gavin Barraclough - - Reviewed by Oliver Hunt. - - The array/string length trampolines are owned by the Machine, not the codeblock that compiled them. - - * VM/CTI.cpp: - (KJS::CTI::privateArrayLengthTrampoline): - (KJS::CTI::privateStringLengthTrampoline): - * VM/Machine.cpp: - (KJS::Machine::~Machine): - * VM/Machine.h: - -2008-09-04 Mark Rowe - - Reviewed by Gavin Barraclough and Sam Weinig. - - Fix a crash on launch of jsc when GuardMalloc is enabled. - - * kjs/ScopeChain.h: - (KJS::ScopeChain::ScopeChain): Initialize m_node to 0 when we have no valid scope chain. - (KJS::ScopeChain::~ScopeChain): Null-check m_node before calling deref. - -2008-09-03 Oliver Hunt - - Reviewed by Gavin Barraclough and Geoff Garen. - - Fix inspector and fast array access so that it bounds - checks correctly. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass2_Main): - * masm/IA32MacroAsm.h: - (KJS::IA32MacroAssembler::): - (KJS::IA32MacroAssembler::emitUnlinkedJb): - (KJS::IA32MacroAssembler::emitUnlinkedJbe): - -2008-09-03 Mark Rowe - - Move the assertion after the InitializeAndReturn block, as - that is used even when CTI is enabled. - - * VM/Machine.cpp: - (KJS::Machine::privateExecute): - -2008-09-03 Mark Rowe - - Reviewed by Sam Weinig. - - Replace calls to exit with ASSERT_WITH_MESSAGE or ASSERT_NOT_REACHED. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass1_Scan): - (KJS::CTI::privateCompile_pass2_Main): - (KJS::CTI::privateCompile_pass4_SlowCases): - * VM/Machine.cpp: - (KJS::Machine::privateExecute): - (KJS::Machine::cti_vm_throw): - -2008-09-03 Mark Rowe - - Reviewed by Sam Weinig. - - Tweak JavaScriptCore to compile on non-x86 platforms. This is achieved - by wrapping more code with ENABLE(CTI), ENABLE(WREC), and PLATFORM(X86) - #if's. - - * VM/CTI.cpp: - * VM/CTI.h: - * VM/CodeBlock.cpp: - (KJS::CodeBlock::printStructureIDs): Use %td as the format specifier for - printing a ptrdiff_t. - * VM/Machine.cpp: - * VM/Machine.h: - * kjs/regexp.cpp: - (KJS::RegExp::RegExp): - (KJS::RegExp::~RegExp): - (KJS::RegExp::match): - * kjs/regexp.h: - * masm/IA32MacroAsm.h: - * wrec/WREC.cpp: - * wrec/WREC.h: - * wtf/Platform.h: Only enable CTI and WREC on x86. Add an extra define to - track whether any MASM-using features are enabled. - -2008-09-03 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Copy Geoff's array/string length optimization for CTI. - - * VM/CTI.cpp: - (KJS::CTI::privateArrayLengthTrampoline): - (KJS::CTI::privateStringLengthTrampoline): - * VM/CTI.h: - (KJS::CTI::compileArrayLengthTrampoline): - (KJS::CTI::compileStringLengthTrampoline): - * VM/Machine.cpp: - (KJS::Machine::Machine): - (KJS::Machine::getCtiArrayLengthTrampoline): - (KJS::Machine::getCtiStringLengthTrampoline): - (KJS::Machine::tryCtiCacheGetByID): - (KJS::Machine::cti_op_get_by_id_second): - * VM/Machine.h: - * kjs/JSString.h: - * kjs/ustring.h: - -2008-09-03 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Implement fast array accesses in CTI - 2-3% progression on sunspider. - - * VM/CTI.cpp: - (KJS::CTI::emitFastArithIntToImmNoCheck): - (KJS::CTI::compileOpCall): - (KJS::CTI::privateCompile_pass2_Main): - (KJS::CTI::privateCompile_pass4_SlowCases): - * VM/CTI.h: - * kjs/JSArray.h: - -2008-09-02 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Enable fast property access support in CTI. - - * VM/CTI.cpp: - (KJS::ctiSetReturnAddress): - (KJS::ctiRepatchCallByReturnAddress): - (KJS::CTI::privateCompile_pass2_Main): - (KJS::CTI::privateCompile): - (KJS::CTI::privateCompileGetByIdSelf): - (KJS::CTI::privateCompileGetByIdProto): - (KJS::CTI::privateCompileGetByIdChain): - (KJS::CTI::privateCompilePutByIdReplace): - * VM/CTI.h: - (KJS::CTI::compileGetByIdSelf): - (KJS::CTI::compileGetByIdProto): - (KJS::CTI::compileGetByIdChain): - (KJS::CTI::compilePutByIdReplace): - * VM/CodeBlock.cpp: - (KJS::CodeBlock::~CodeBlock): - * VM/CodeBlock.h: - * VM/Machine.cpp: - (KJS::doSetReturnAddressVmThrowTrampoline): - (KJS::Machine::tryCtiCachePutByID): - (KJS::Machine::tryCtiCacheGetByID): - (KJS::Machine::cti_op_put_by_id): - (KJS::Machine::cti_op_put_by_id_second): - (KJS::Machine::cti_op_put_by_id_generic): - (KJS::Machine::cti_op_put_by_id_fail): - (KJS::Machine::cti_op_get_by_id): - (KJS::Machine::cti_op_get_by_id_second): - (KJS::Machine::cti_op_get_by_id_generic): - (KJS::Machine::cti_op_get_by_id_fail): - (KJS::Machine::cti_op_throw): - (KJS::Machine::cti_vm_throw): - * VM/Machine.h: - * kjs/JSCell.h: - * kjs/JSObject.h: - * kjs/PropertyMap.h: - * kjs/StructureID.cpp: - (KJS::StructureIDChain::StructureIDChain): - * masm/IA32MacroAsm.h: - (KJS::IA32MacroAssembler::emitCmpl_i32m): - (KJS::IA32MacroAssembler::emitMovl_mr): - (KJS::IA32MacroAssembler::emitMovl_rm): - -2008-09-02 Sam Weinig - - Reviewed by Gavin Barraclough and Mark Rowe. - - A backslash (\) at the of a RegEx should produce an error. - Fixes fast/regex/test1.html. - - * wrec/WREC.cpp: - (KJS::WRECompiler::parseEscape): - -2008-09-02 Sam Weinig - - Reviewed by Geoff Garen. - - Link jumps for the slow case of op_loop_if_less. Fixes acid3. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass4_SlowCases): - -2008-09-01 Sam Weinig - - Rubber-stamped by Maciej Stachowiak. - - Switch WREC on by default. - - * wtf/Platform.h: - -2008-09-01 Sam Weinig - - Reviewed by Mark Rowe. - - Fix two failures in fast/regex/test1.html - - \- in a character class should be treated as a literal - - - A missing max quantifier needs to be treated differently than - a null max quantifier. - - * wrec/WREC.cpp: - (KJS::WRECompiler::generateNonGreedyQuantifier): - (KJS::WRECompiler::generateGreedyQuantifier): - (KJS::WRECompiler::parseCharacterClass): - * wrec/WREC.h: - (KJS::Quantifier::Quantifier): - -2008-09-01 Sam Weinig - - Reviewed by Mark Rowe. - - Fix crash in fast/js/kde/evil-n.html - - * kjs/regexp.cpp: Always pass a non-null offset vector to the wrec function. - -2008-09-01 Sam Weinig - - Reviewed by Gavin Barraclough and Mark Rowe. - - Add pattern length limit fixing one test in fast/js. - - * wrec/WREC.cpp: - (KJS::WRECompiler::compile): - * wrec/WREC.h: - (KJS::WRECompiler::): - -2008-09-01 Sam Weinig - - Reviewed by Gavin Barraclough and Mark Rowe. - - Make octal escape parsing/back-reference parsing more closely match - prior behavior fixing one test in fast/js. - - * wrec/WREC.cpp: - (KJS::WRECompiler::parseCharacterClass): 8 and 9 should be IdentityEscaped - (KJS::WRECompiler::parseEscape): - * wrec/WREC.h: - (KJS::WRECompiler::peekDigit): - -2008-09-01 Sam Weinig - - Reviewed by Gavin Barraclough and Mark Rowe. - - Fix one mozilla test. - - * wrec/WREC.cpp: - (KJS::WRECompiler::generateCharacterClassInverted): Fix incorrect not - ascii upper check. - -2008-09-01 Sam Weinig - - Reviewed by Gavin Barraclough and Mark Rowe. - - Parse octal escapes in character classes fixing one mozilla test. - - * wrec/WREC.cpp: - (KJS::WRECompiler::parseCharacterClass): - (KJS::WRECompiler::parseOctalEscape): - * wrec/WREC.h: - (KJS::WRECompiler::consumeOctal): - -2008-09-01 Sam Weinig - - Reviewed by Oliver Hunt. - - Fixes two mozilla tests with WREC enabled. - - * wrec/WREC.cpp: - (KJS::CharacterClassConstructor::append): Keep the character class sorted - when appending another character class. - -2008-09-01 Sam Weinig - - Reviewed by Gavin Barraclough and Mark Rowe. - - Fixes two mozilla tests with WREC enabled. - - * wrec/WREC.cpp: - (KJS::CharacterClassConstructor::addSortedRange): Insert the range at the correct position - instead of appending it to the end. - -2008-09-01 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Move cross-compilation unit call into NEVER_INLINE function. - - * VM/Machine.cpp: - (KJS::doSetReturnAddressVmThrowTrampoline): - -2008-09-01 Sam Weinig - - Reviewed by Gavin Barraclough and Geoff Garen. - - Fix one test in fast/js. - - * VM/Machine.cpp: - (KJS::Machine::cti_op_construct_NotJSConstruct): Throw a createNotAConstructorError, - instead of a createNotAFunctionError. - -2008-08-31 Gavin Barraclough - - Reviewed by Maciej Stachowiak. - - Zero-cost exception handling. This patch takes the exception checking - back of the hot path. When an exception occurs in a Machine::cti* - method, the return address to JIT code is recorded, and is then - overwritten with a pointer to a trampoline routine. When the method - returns the trampoline will cause the cti_vm_throw method to be invoked. - - cti_vm_throw uses the return address preserved above, to discover the - vPC of the bytecode that raised the exception (using a map build during - translation). From the VPC of the faulting bytecode the vPC of a catch - routine may be discovered (unwinding the stack where necesary), and then - a bytecode address for the catch routine is looked up. Final cti_vm_throw - overwrites its return address to JIT code again, to trampoline directly - to the catch routine. - - cti_op_throw is handled in a similar fashion. - - * VM/CTI.cpp: - (KJS::CTI::emitPutCTIParam): - (KJS::CTI::emitPutToCallFrameHeader): - (KJS::CTI::emitGetFromCallFrameHeader): - (KJS::ctiSetReturnAddressForArgs): - (KJS::CTI::emitDebugExceptionCheck): - (KJS::CTI::printOpcodeOperandTypes): - (KJS::CTI::emitCall): - (KJS::CTI::compileOpCall): - (KJS::CTI::privateCompile_pass2_Main): - (KJS::CTI::privateCompile): - * VM/CTI.h: - (KJS::CallRecord::CallRecord): - (KJS::): - (KJS::CTI::execute): - * VM/CodeBlock.h: - * VM/Machine.cpp: - (KJS::Machine::privateExecute): - (KJS::Machine::cti_op_instanceof): - (KJS::Machine::cti_op_call_NotJSFunction): - (KJS::Machine::cti_op_resolve): - (KJS::Machine::cti_op_resolve_func): - (KJS::Machine::cti_op_resolve_skip): - (KJS::Machine::cti_op_resolve_with_base): - (KJS::Machine::cti_op_throw): - (KJS::Machine::cti_op_in): - (KJS::Machine::cti_vm_throw): - * VM/RegisterFile.h: - (KJS::RegisterFile::): - * kjs/ExecState.h: - (KJS::ExecState::setCtiReturnAddress): - (KJS::ExecState::ctiReturnAddress): - * masm/IA32MacroAsm.h: - (KJS::IA32MacroAssembler::): - (KJS::IA32MacroAssembler::emitPushl_m): - (KJS::IA32MacroAssembler::emitPopl_m): - (KJS::IA32MacroAssembler::getRelocatedAddress): - -2008-08-31 Mark Rowe - - Reviewed by Oliver Hunt. - - Fall back to PCRE for any regexp containing parentheses until we correctly backtrack within them. - - * wrec/WREC.cpp: - (KJS::WRECompiler::parseParentheses): - * wrec/WREC.h: - (KJS::WRECompiler::): - -2008-08-31 Mark Rowe - - Reviewed by Oliver Hunt. - - Fix several issues within ecma_3/RegExp/perlstress-001.js with WREC enabled. - - * wrec/WREC.cpp: - (KJS::WRECompiler::generateNonGreedyQuantifier): Compare with the maximum quantifier count rather than the minimum. - (KJS::WRECompiler::generateAssertionEOL): Do a register-to-register comparison rather than immediate-to-register. - (KJS::WRECompiler::parseCharacterClass): Pass through the correct inversion flag. - -2008-08-30 Mark Rowe - - Reviewed by Oliver Hunt. - - Re-fix the six remaining failures in the Mozilla JavaScript tests in a manner that does not kill performance. - This shows up as a 0.6% progression on SunSpider on my machine. - - Grow the JITCodeBuffer's underlying buffer when we run out of space rather than just bailing out. - - * VM/CodeBlock.h: - (KJS::CodeBlock::~CodeBlock): Switch to using fastFree now that JITCodeBuffer::copy uses fastMalloc. - * kjs/regexp.cpp: Ditto. - * masm/IA32MacroAsm.h: - (KJS::JITCodeBuffer::growBuffer): - (KJS::JITCodeBuffer::JITCodeBuffer): - (KJS::JITCodeBuffer::~JITCodeBuffer): - (KJS::JITCodeBuffer::putByte): - (KJS::JITCodeBuffer::putShort): - (KJS::JITCodeBuffer::putInt): - (KJS::JITCodeBuffer::reset): - (KJS::JITCodeBuffer::copy): - -2008-08-29 Oliver Hunt - - RS=Maciej - - Roll out previous patch as it causes a 5% performance regression - - * JavaScriptCore.xcodeproj/project.pbxproj: - * VM/CTI.cpp: - (KJS::getJCB): - (KJS::CTI::privateCompile): - * VM/CodeBlock.h: - (KJS::CodeBlock::~CodeBlock): - * masm/IA32MacroAsm.h: - (KJS::JITCodeBuffer::JITCodeBuffer): - (KJS::JITCodeBuffer::putByte): - (KJS::JITCodeBuffer::putShort): - (KJS::JITCodeBuffer::putInt): - (KJS::JITCodeBuffer::getEIP): - (KJS::JITCodeBuffer::start): - (KJS::JITCodeBuffer::getOffset): - (KJS::JITCodeBuffer::reset): - (KJS::JITCodeBuffer::copy): - (KJS::IA32MacroAssembler::emitModRm_rr): - (KJS::IA32MacroAssembler::emitModRm_rm): - (KJS::IA32MacroAssembler::emitModRm_rmsib): - (KJS::IA32MacroAssembler::IA32MacroAssembler): - (KJS::IA32MacroAssembler::emitInt3): - (KJS::IA32MacroAssembler::emitPushl_r): - (KJS::IA32MacroAssembler::emitPopl_r): - (KJS::IA32MacroAssembler::emitMovl_rr): - (KJS::IA32MacroAssembler::emitAddl_rr): - (KJS::IA32MacroAssembler::emitAddl_i8r): - (KJS::IA32MacroAssembler::emitAddl_i32r): - (KJS::IA32MacroAssembler::emitAddl_mr): - (KJS::IA32MacroAssembler::emitAndl_rr): - (KJS::IA32MacroAssembler::emitAndl_i32r): - (KJS::IA32MacroAssembler::emitCmpl_i8r): - (KJS::IA32MacroAssembler::emitCmpl_rr): - (KJS::IA32MacroAssembler::emitCmpl_rm): - (KJS::IA32MacroAssembler::emitCmpl_i32r): - (KJS::IA32MacroAssembler::emitCmpl_i32m): - (KJS::IA32MacroAssembler::emitCmpw_rm): - (KJS::IA32MacroAssembler::emitOrl_rr): - (KJS::IA32MacroAssembler::emitOrl_i8r): - (KJS::IA32MacroAssembler::emitSubl_rr): - (KJS::IA32MacroAssembler::emitSubl_i8r): - (KJS::IA32MacroAssembler::emitSubl_i32r): - (KJS::IA32MacroAssembler::emitSubl_mr): - (KJS::IA32MacroAssembler::emitTestl_i32r): - (KJS::IA32MacroAssembler::emitTestl_rr): - (KJS::IA32MacroAssembler::emitXorl_i8r): - (KJS::IA32MacroAssembler::emitXorl_rr): - (KJS::IA32MacroAssembler::emitSarl_i8r): - (KJS::IA32MacroAssembler::emitSarl_CLr): - (KJS::IA32MacroAssembler::emitShl_i8r): - (KJS::IA32MacroAssembler::emitShll_CLr): - (KJS::IA32MacroAssembler::emitMull_rr): - (KJS::IA32MacroAssembler::emitIdivl_r): - (KJS::IA32MacroAssembler::emitCdq): - (KJS::IA32MacroAssembler::emitMovl_mr): - (KJS::IA32MacroAssembler::emitMovzwl_mr): - (KJS::IA32MacroAssembler::emitMovl_rm): - (KJS::IA32MacroAssembler::emitMovl_i32r): - (KJS::IA32MacroAssembler::emitMovl_i32m): - (KJS::IA32MacroAssembler::emitLeal_mr): - (KJS::IA32MacroAssembler::emitRet): - (KJS::IA32MacroAssembler::emitJmpN_r): - (KJS::IA32MacroAssembler::emitJmpN_m): - (KJS::IA32MacroAssembler::emitCall): - (KJS::IA32MacroAssembler::label): - (KJS::IA32MacroAssembler::emitUnlinkedJmp): - (KJS::IA32MacroAssembler::emitUnlinkedJne): - (KJS::IA32MacroAssembler::emitUnlinkedJe): - (KJS::IA32MacroAssembler::emitUnlinkedJl): - (KJS::IA32MacroAssembler::emitUnlinkedJle): - (KJS::IA32MacroAssembler::emitUnlinkedJge): - (KJS::IA32MacroAssembler::emitUnlinkedJae): - (KJS::IA32MacroAssembler::emitUnlinkedJo): - (KJS::IA32MacroAssembler::link): - * wrec/WREC.cpp: - (KJS::WRECompiler::compilePattern): - (KJS::WRECompiler::compile): - * wrec/WREC.h: - -2008-08-29 Mark Rowe - - Reviewed by Oliver Hunt. - - Have JITCodeBuffer manage a Vector containing the generated code so that it can grow - as needed when generating code for a large function. This fixes all six remaining failures - in Mozilla tests in both debug and release builds. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile): - * VM/CodeBlock.h: - (KJS::CodeBlock::~CodeBlock): - * masm/IA32MacroAsm.h: - (KJS::JITCodeBuffer::putByte): - (KJS::JITCodeBuffer::putShort): - (KJS::JITCodeBuffer::putInt): - (KJS::JITCodeBuffer::getEIP): - (KJS::JITCodeBuffer::start): - (KJS::JITCodeBuffer::getOffset): - (KJS::JITCodeBuffer::getCode): - (KJS::IA32MacroAssembler::emitModRm_rr): - * wrec/WREC.cpp: - (KJS::WRECompiler::compilePattern): - * wrec/WREC.h: - -2008-08-29 Mark Rowe - - Reviewed by Oliver Hunt. - - Implement parsing of octal escapes in regular expressions. This fixes three Mozilla tests. - - * wrec/WREC.cpp: - (KJS::WRECompiler::parseOctalEscape): - (KJS::WRECompiler::parseEscape): Parse the escape sequence as an octal escape if it has a leading zero. - Add a FIXME about treating invalid backreferences as octal escapes in the future. - * wrec/WREC.h: - (KJS::WRECompiler::consumeNumber): Multiply by 10 rather than 0 so that we handle numbers with more than - one digit. - * wtf/ASCIICType.h: - (WTF::isASCIIOctalDigit): - -2008-08-29 Sam Weinig - - Reviewed by Mark Rowe. - - Pass vPC to instanceof method. Fixes 2 mozilla tests in debug. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass2_Main): - * VM/Machine.cpp: - (KJS::Machine::cti_op_instanceof): - -2008-08-29 Sam Weinig - - Reviewed by Mark Rowe. - - Pass vPCs to resolve methods for correct exception creation. Fixes - 17 mozilla tests in debug. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass2_Main): - * VM/CTI.h: - * VM/Machine.cpp: - (KJS::Machine::cti_op_resolve): - (KJS::Machine::cti_op_resolve_func): - (KJS::Machine::cti_op_resolve_skip): - (KJS::Machine::cti_op_resolve_with_base): - -2008-08-29 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Remembering to actually throw the exception passed to op throw helps. - Regressions 19 -> 6. - - * VM/Machine.cpp: - (KJS::Machine::cti_op_throw): - (KJS::Machine::cti_vm_throw): - -2008-08-29 Gavin Barraclough - - Reviewed by Sam Weinig. - - Support for exception unwinding the stack. - - Once upon a time, Sam asked me for a bettr ChangeLog entry. The return address - is now preserved on entry to a JIT code function (if we preserve lazily we need - restore the native return address during exception stack unwind). This takes - the number of regressions down from ~150 to 19. - - * VM/CTI.cpp: - (KJS::getJCB): - (KJS::CTI::emitExceptionCheck): - (KJS::CTI::compileOpCall): - (KJS::CTI::privateCompile_pass2_Main): - (KJS::CTI::privateCompile): - * VM/CTI.h: - (KJS::): - * VM/Machine.cpp: - (KJS::Machine::throwException): - (KJS::Machine::cti_op_call_JSFunction): - (KJS::Machine::cti_op_call_NotJSFunction): - (KJS::Machine::cti_op_construct_JSConstruct): - (KJS::Machine::cti_op_construct_NotJSConstruct): - (KJS::Machine::cti_op_throw): - (KJS::Machine::cti_vm_throw): - -2008-08-29 Mark Rowe - - Reviewed by Oliver Hunt. - - Fix js1_2/regexp/word_boundary.js and four other Mozilla tests with WREC enabled. - - * wrec/WREC.cpp: - (KJS::WRECompiler::generateCharacterClassInvertedRange): If none of the exact matches - succeeded, jump to failure. - (KJS::WRECompiler::compilePattern): Restore and increment the current position stored - on the stack to ensure that it will be reset to the correct position after a failed - match has consumed input. - -2008-08-29 Mark Rowe - - Reviewed by Oliver Hunt. - - Fix a hang in ecma_3/RegExp/15.10.2-1.js with WREC enabled. - A backreference with a quantifier would get stuck in an infinite - loop if the captured range was empty. - - * wrec/WREC.cpp: - (KJS::WRECompiler::generateBackreferenceQuantifier): If the captured range - was empty, do not attempt to match the backreference. - (KJS::WRECompiler::parseBackreferenceQuantifier): - * wrec/WREC.h: - (KJS::Quantifier::): - -2008-08-28 Sam Weinig - - Reviewed by Oliver Hunt. - - Implement op_debug. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass1_Scan): - (KJS::CTI::privateCompile_pass2_Main): - * VM/Machine.cpp: - (KJS::Machine::debug): - (KJS::Machine::privateExecute): - (KJS::Machine::cti_op_debug): - * VM/Machine.h: - -2008-08-28 Sam Weinig - - Reviewed by Gavin Barraclough and Geoff Garen. - - Implement op_switch_string fixing 1 mozilla test and one test in fast/js. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass1_Scan): - (KJS::CTI::privateCompile_pass2_Main): - (KJS::CTI::privateCompile): - * VM/CTI.h: - (KJS::SwitchRecord::): - (KJS::SwitchRecord::SwitchRecord): - * VM/CodeBlock.cpp: - (KJS::CodeBlock::dump): - * VM/CodeBlock.h: - (KJS::ExpressionRangeInfo::): - (KJS::StringJumpTable::offsetForValue): - (KJS::StringJumpTable::ctiForValue): - (KJS::SimpleJumpTable::add): - (KJS::SimpleJumpTable::ctiForValue): - * VM/CodeGenerator.cpp: - (KJS::prepareJumpTableForStringSwitch): - * VM/Machine.cpp: - (KJS::Machine::privateExecute): - (KJS::Machine::cti_op_switch_string): - * VM/Machine.h: - -2008-08-28 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Do not recurse on the machine stack when executing op_call. - - * VM/CTI.cpp: - (KJS::CTI::emitGetPutArg): - (KJS::CTI::emitPutArg): - (KJS::CTI::emitPutArgConstant): - (KJS::CTI::compileOpCall): - (KJS::CTI::privateCompile_pass2_Main): - (KJS::CTI::privateCompile): - * VM/CTI.h: - (KJS::): - (KJS::CTI::compile): - (KJS::CTI::execute): - (KJS::CTI::): - * VM/Machine.cpp: - (KJS::Machine::Machine): - (KJS::Machine::execute): - (KJS::Machine::cti_op_call_JSFunction): - (KJS::Machine::cti_op_call_NotJSFunction): - (KJS::Machine::cti_op_ret): - (KJS::Machine::cti_op_construct_JSConstruct): - (KJS::Machine::cti_op_construct_NotJSConstruct): - (KJS::Machine::cti_op_call_eval): - * VM/Machine.h: - * VM/Register.h: - (KJS::Register::Register): - * VM/RegisterFile.h: - (KJS::RegisterFile::): - * kjs/InternalFunction.h: - (KJS::InternalFunction::InternalFunction): - * kjs/JSFunction.h: - (KJS::JSFunction::JSFunction): - * kjs/ScopeChain.h: - (KJS::ScopeChain::ScopeChain): - * masm/IA32MacroAsm.h: - (KJS::IA32MacroAssembler::): - (KJS::IA32MacroAssembler::emitModRm_opm): - (KJS::IA32MacroAssembler::emitCmpl_i32m): - (KJS::IA32MacroAssembler::emitCallN_r): - -2008-08-28 Sam Weinig - - Reviewed by Mark Rowe. - - Exit instead of crashing in ctiUnsupported and ctiTimedOut. - - * VM/Machine.cpp: - (KJS::ctiUnsupported): - (KJS::ctiTimedOut): - -2008-08-28 Oliver Hunt - - Reviewed by Maciej Stachowiak. - - Implement codegen for op_jsr and op_sret. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass1_Scan): - (KJS::CTI::privateCompile_pass2_Main): - (KJS::CTI::privateCompile): - * VM/CTI.h: - (KJS::CTI::JSRInfo::JSRInfo): - * masm/IA32MacroAsm.h: - (KJS::IA32MacroAssembler::emitJmpN_m): - (KJS::IA32MacroAssembler::linkAbsoluteAddress): - -2008-08-28 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Initial support for exceptions (throw / catch must occur in same CodeBlock). - - * VM/CTI.cpp: - (KJS::CTI::emitExceptionCheck): - (KJS::CTI::emitCall): - (KJS::CTI::privateCompile_pass2_Main): - (KJS::CTI::privateCompile_pass4_SlowCases): - (KJS::CTI::privateCompile): - * VM/CTI.h: - * VM/CodeBlock.cpp: - (KJS::CodeBlock::nativeExceptionCodeForHandlerVPC): - * VM/CodeBlock.h: - * VM/CodeGenerator.cpp: - (KJS::CodeGenerator::emitCatch): - * VM/Machine.cpp: - (KJS::Machine::throwException): - (KJS::Machine::privateExecute): - (KJS::ctiUnsupported): - (KJS::ctiTimedOut): - (KJS::Machine::cti_op_add): - (KJS::Machine::cti_op_pre_inc): - (KJS::Machine::cti_timeout_check): - (KJS::Machine::cti_op_loop_if_less): - (KJS::Machine::cti_op_put_by_id): - (KJS::Machine::cti_op_get_by_id): - (KJS::Machine::cti_op_instanceof): - (KJS::Machine::cti_op_del_by_id): - (KJS::Machine::cti_op_mul): - (KJS::Machine::cti_op_call): - (KJS::Machine::cti_op_resolve): - (KJS::Machine::cti_op_construct): - (KJS::Machine::cti_op_get_by_val): - (KJS::Machine::cti_op_resolve_func): - (KJS::Machine::cti_op_sub): - (KJS::Machine::cti_op_put_by_val): - (KJS::Machine::cti_op_lesseq): - (KJS::Machine::cti_op_loop_if_true): - (KJS::Machine::cti_op_negate): - (KJS::Machine::cti_op_resolve_skip): - (KJS::Machine::cti_op_div): - (KJS::Machine::cti_op_pre_dec): - (KJS::Machine::cti_op_jless): - (KJS::Machine::cti_op_not): - (KJS::Machine::cti_op_jtrue): - (KJS::Machine::cti_op_post_inc): - (KJS::Machine::cti_op_eq): - (KJS::Machine::cti_op_lshift): - (KJS::Machine::cti_op_bitand): - (KJS::Machine::cti_op_rshift): - (KJS::Machine::cti_op_bitnot): - (KJS::Machine::cti_op_resolve_with_base): - (KJS::Machine::cti_op_mod): - (KJS::Machine::cti_op_less): - (KJS::Machine::cti_op_neq): - (KJS::Machine::cti_op_post_dec): - (KJS::Machine::cti_op_urshift): - (KJS::Machine::cti_op_bitxor): - (KJS::Machine::cti_op_bitor): - (KJS::Machine::cti_op_call_eval): - (KJS::Machine::cti_op_throw): - (KJS::Machine::cti_op_push_scope): - (KJS::Machine::cti_op_stricteq): - (KJS::Machine::cti_op_nstricteq): - (KJS::Machine::cti_op_to_jsnumber): - (KJS::Machine::cti_op_in): - (KJS::Machine::cti_op_del_by_val): - (KJS::Machine::cti_vm_throw): - * VM/Machine.h: - * kjs/ExecState.h: - * masm/IA32MacroAsm.h: - (KJS::IA32MacroAssembler::emitCmpl_i32m): - -2008-08-28 Mark Rowe - - Rubber-stamped by Oliver Hunt. - - Print debugging info to stderr so that run-webkit-tests can capture it. - This makes it easy to check whether test failures are due to unimplemented - op codes, missing support for exceptions, etc. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass1_Scan): - (KJS::CTI::printOpcodeOperandTypes): - (KJS::CTI::privateCompile_pass2_Main): - (KJS::CTI::privateCompile_pass4_SlowCases): - (KJS::CTI::privateCompile): - * VM/Machine.cpp: - (KJS::Machine::privateExecute): - (KJS::ctiException): - (KJS::ctiUnsupported): - (KJS::Machine::cti_op_call): - (KJS::Machine::cti_op_resolve): - (KJS::Machine::cti_op_construct): - (KJS::Machine::cti_op_get_by_val): - (KJS::Machine::cti_op_resolve_func): - (KJS::Machine::cti_op_resolve_skip): - (KJS::Machine::cti_op_resolve_with_base): - (KJS::Machine::cti_op_call_eval): - -2008-08-27 Mark Rowe - - Reviewed by Gavin Barraclough and Maciej Stachowiak. - - Fix fast/js/bitwise-and-on-undefined.html. - - A temporary value in the slow path of op_bitand was being stored in edx, but was - being clobbered by emitGetPutArg before we used it. To fix this, emitGetPutArg - now takes a third argument that specifies the scratch register to use when loading - from memory. This allows us to avoid clobbering the temporary in op_bitand. - - * VM/CTI.cpp: - (KJS::CTI::emitGetPutArg): - (KJS::CTI::privateCompile_pass2_Main): - (KJS::CTI::privateCompile_pass4_SlowCases): - * VM/CTI.h: - -2008-08-27 Mark Rowe - - Rubber-stamped by Oliver Hunt. - - Switch CTI on by default. - - * wtf/Platform.h: - -2008-08-27 Mark Rowe - - Reviewed by Oliver Hunt. - - Fix the build of the full WebKit stack. - - * JavaScriptCore.xcodeproj/project.pbxproj: Mark two new headers as private so they can be pulled in from WebCore. - * VM/CTI.h: Fix build issues that show up when compiled with GCC 4.2 as part of WebCore. - * wrec/WREC.h: Ditto. - -2008-08-27 Mark Rowe - - Reviewed by Sam Weinig. - - Implement op_new_error. Does not fix any tests as it is always followed by the unimplemented op_throw. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass1_Scan): - (KJS::CTI::privateCompile_pass2_Main): - * VM/Machine.cpp: - (KJS::Machine::cti_op_new_error): - * VM/Machine.h: - -2008-08-27 Sam Weinig - - Reviewed by Gavin Barraclough and Geoff Garen. - - Implement op_put_getter and op_put_setter. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass1_Scan): - (KJS::CTI::privateCompile_pass2_Main): - * VM/Machine.cpp: - (KJS::Machine::cti_op_put_getter): - (KJS::Machine::cti_op_put_setter): - * VM/Machine.h: - -2008-08-27 Sam Weinig - - Reviewed by Gavin Barraclough and Geoff Garen. - - Implement op_del_by_val fixing 3 mozilla tests. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass1_Scan): - (KJS::CTI::privateCompile_pass2_Main): - * VM/Machine.cpp: - (KJS::Machine::cti_op_del_by_val): - * VM/Machine.h: - -2008-08-27 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Quick & dirty fix to get SamplingTool sampling op_call. - - * VM/SamplingTool.h: - (KJS::SamplingTool::callingHostFunction): - -2008-08-27 Sam Weinig - - Reviewed by Gavin Barraclough and Geoff Garen. - - Fix op_put_by_index. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass2_Main): Use emitPutArgConstant instead of emitGetPutArg - for the property value. - * VM/Machine.cpp: - (KJS::Machine::cti_op_put_by_index): Get the property value from the correct argument. - -2008-08-27 Sam Weinig - - Reviewed by Gavin Barraclough and Geoff Garen. - - Implement op_switch_imm in the CTI fixing 13 mozilla tests. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass1_Scan): - (KJS::CTI::privateCompile_pass2_Main): - * VM/Machine.cpp: - (KJS::Machine::cti_op_switch_imm): - * VM/Machine.h: - -2008-08-27 Gavin Barraclough - - Reviewed by Oliver Hunt. - - Implement op_switch_char in CTI. - - * VM/CTI.cpp: - (KJS::CTI::emitCall): - (KJS::CTI::privateCompile_pass1_Scan): - (KJS::CTI::privateCompile_pass2_Main): - (KJS::CTI::privateCompile): - * VM/CTI.h: - (KJS::CallRecord::CallRecord): - (KJS::SwitchRecord::SwitchRecord): - * VM/CodeBlock.h: - (KJS::SimpleJumpTable::SimpleJumpTable::ctiForValue): - * VM/Machine.cpp: - (KJS::Machine::cti_op_switch_char): - * VM/Machine.h: - * masm/IA32MacroAsm.h: - (KJS::IA32MacroAssembler::): - (KJS::IA32MacroAssembler::emitJmpN_r): - (KJS::IA32MacroAssembler::getRelocatedAddress): - * wtf/Platform.h: - -2008-08-26 Sam Weinig - - Reviewed by Mark Rowe. - - Implement op_put_by_index to fix 1 mozilla test. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass1_Scan): - (KJS::CTI::privateCompile_pass2_Main): - * VM/Machine.cpp: - (KJS::Machine::cti_op_put_by_index): - * VM/Machine.h: - -2008-08-26 Gavin Barraclough - - Reviewed by Geoff Garen. - - More fixes from Geoff's review. - - * VM/CTI.cpp: - (KJS::CTI::emitGetArg): - (KJS::CTI::emitGetPutArg): - (KJS::CTI::emitPutArg): - (KJS::CTI::emitPutArgConstant): - (KJS::CTI::getConstantImmediateNumericArg): - (KJS::CTI::emitGetCTIParam): - (KJS::CTI::emitPutResult): - (KJS::CTI::emitCall): - (KJS::CTI::emitJumpSlowCaseIfNotImm): - (KJS::CTI::emitJumpSlowCaseIfNotImms): - (KJS::CTI::getDeTaggedConstantImmediate): - (KJS::CTI::emitFastArithDeTagImmediate): - (KJS::CTI::emitFastArithReTagImmediate): - (KJS::CTI::emitFastArithPotentiallyReTagImmediate): - (KJS::CTI::emitFastArithImmToInt): - (KJS::CTI::emitFastArithIntToImmOrSlowCase): - (KJS::CTI::privateCompile_pass2_Main): - (KJS::CTI::privateCompile_pass4_SlowCases): - (KJS::CTI::privateCompile): - * VM/CTI.h: - -2008-08-26 Mark Rowe - - Reviewed by Gavin Barraclough and Geoff Garen. - - Implement op_jmp_scopes to fix 2 Mozilla tests. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass1_Scan): - (KJS::CTI::privateCompile_pass2_Main): - * VM/Machine.cpp: - (KJS::Machine::cti_op_push_new_scope): Update ExecState::m_scopeChain after calling ARG_setScopeChain. - (KJS::Machine::cti_op_jmp_scopes): - * VM/Machine.h: - -2008-08-26 Gavin Barraclough - - Reviewed by Oliver Hunt. - - WebKit Regular Expression Compiler. (set ENABLE_WREC = 1 in Platform.h). - - * JavaScriptCore.xcodeproj/project.pbxproj: - * kjs/regexp.cpp: - * kjs/regexp.h: - * wrec: Added. - * wrec/WREC.cpp: Added. - * wrec/WREC.h: Added. - * wtf/Platform.h: - -2008-08-26 Sam Weinig - - Rubber-stamped by Oliver Hunt. - - Remove bogus assertion. - - * VM/Machine.cpp: - (KJS::Machine::cti_op_del_by_id): - -2008-08-26 Mark Rowe - - Reviewed by Sam Weinig. - - Implement op_push_new_scope and stub out op_catch. This fixes 11 Mozilla tests. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass1_Scan): - (KJS::CTI::privateCompile_pass2_Main): - * VM/Machine.cpp: - (KJS::Machine::cti_op_push_new_scope): - (KJS::Machine::cti_op_catch): - * VM/Machine.h: - -2008-08-26 Mark Rowe - - Reviewed by Sam Weinig. - - Clean up op_resolve_base so that it shares its implementation with the bytecode interpreter. - - * VM/Machine.cpp: - (KJS::inlineResolveBase): - (KJS::resolveBase): - -2008-08-26 Oliver Hunt - - Reviewed by Sam Weinig. - - Add codegen support for op_instanceof, fixing 15 mozilla tests. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass1_Scan): - (KJS::CTI::privateCompile_pass2_Main): - * VM/Machine.cpp: - (KJS::Machine::cti_op_instanceof): - (KJS::Machine::cti_op_del_by_id): - * VM/Machine.h: - * wtf/Platform.h: - -2008-08-26 Gavin Barraclough - - Reviewed by Geoff Garen. - - Fixes for initial review comments. - - * VM/CTI.cpp: - (KJS::CTI::ctiCompileGetArg): - (KJS::CTI::ctiCompileGetPutArg): - (KJS::CTI::ctiCompilePutResult): - (KJS::CTI::ctiCompileCall): - (KJS::CTI::CTI): - (KJS::CTI::privateCompile_pass1_Scan): - (KJS::CTI::printOpcodeOperandTypes): - (KJS::CTI::privateCompile_pass2_Main): - (KJS::CTI::privateCompile_pass4_SlowCases): - (KJS::CTI::privateCompile): - * VM/CTI.h: - * VM/Register.h: - * kjs/JSValue.h: - -2008-08-26 Sam Weinig - - Reviewed by Gavin Barraclough and Geoff Garen. - - Fix up exception checking code. - - * VM/Machine.cpp: - (KJS::Machine::cti_op_call): - (KJS::Machine::cti_op_resolve): - (KJS::Machine::cti_op_construct): - (KJS::Machine::cti_op_resolve_func): - (KJS::Machine::cti_op_resolve_skip): - (KJS::Machine::cti_op_resolve_with_base): - (KJS::Machine::cti_op_call_eval): - -2008-08-26 Sam Weinig - - Reviewed by Oliver Hunt. - - Fix slowcase for op_post_inc and op_post_dec fixing 2 mozilla tests. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass4_SlowCases): - -2008-08-26 Mark Rowe - - Reviewed by Sam Weinig. - - Implement op_in, fixing 8 mozilla tests. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass1_Scan): - (KJS::CTI::privateCompile_pass2_Main): - * VM/Machine.cpp: - (KJS::Machine::cti_op_in): - * VM/Machine.h: - -2008-08-26 Mark Rowe - - Rubber-stamped by Oliver Hunt. - - Don't hardcode the size of a Register for op_new_array. Fixes a crash - seen during the Mozilla tests. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass2_Main): - -2008-08-26 Sam Weinig - - Reviewed by Gavin Barraclough and Geoff Garen. - - Add support for op_push_scope and op_pop_scope, fixing 20 mozilla tests. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass1_Scan): - (KJS::CTI::privateCompile_pass2_Main): - * VM/CTI.h: - * VM/Machine.cpp: - (KJS::Machine::cti_op_push_scope): - (KJS::Machine::cti_op_pop_scope): - * VM/Machine.h: - -2008-08-26 Oliver Hunt - - Reviewed by Maciej Stachowiak. - - Add codegen support for op_del_by_id, fixing 49 mozilla tests. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass1_Scan): - (KJS::CTI::privateCompile_pass2_Main): - * VM/Machine.cpp: - (KJS::Machine::cti_op_del_by_id): - * VM/Machine.h: - -2008-08-26 Sam Weinig - - Reviewed by Gavin Barraclough and Geoff Garen. - - Don't hardcode the size of a Register for op_get_scoped_var and op_put_scoped_var - fixing 513 mozilla tests in debug build. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass2_Main): - -2008-08-26 Oliver Hunt - - Reviewed by Maciej Stachowiak. - - Added code generator support for op_loop, fixing around 60 mozilla tests. - - * VM/CTI.cpp: - (KJS::CTI::privateCompile_pass1_Scan): - (KJS::CTI::privateCompile_pass2_Main): - -2008-08-26 Mark Rowe - - Reviewed by Sam Weinig. - - Set -fomit-frame-pointer in the correct location. - - * Configurations/JavaScriptCore.xcconfig: - * JavaScriptCore.xcodeproj/project.pbxproj: - -2008-08-26 Gavin Barraclough - - Reviewed by Geoff Garen. - - Inital cut of CTI, Geoff's review fixes to follow. - - * JavaScriptCore.xcodeproj/project.pbxproj: - * VM/CTI.cpp: Added. - (KJS::getJCB): - (KJS::CTI::ctiCompileGetArg): - (KJS::CTI::ctiCompileGetPutArg): - (KJS::CTI::ctiCompilePutArg): - (KJS::CTI::ctiCompilePutArgImm): - (KJS::CTI::ctiImmediateNumericArg): - (KJS::CTI::ctiCompileGetCTIParam): - (KJS::CTI::ctiCompilePutResult): - (KJS::CTI::ctiCompileCall): - (KJS::CTI::slowCaseIfNotImm): - (KJS::CTI::slowCaseIfNotImms): - (KJS::CTI::ctiFastArithDeTagConstImmediate): - (KJS::CTI::ctiFastArithDeTagImmediate): - (KJS::CTI::ctiFastArithReTagImmediate): - (KJS::CTI::ctiFastArithPotentiallyReTagImmediate): - (KJS::CTI::ctiFastArithImmToInt): - (KJS::CTI::ctiFastArithIntToImmOrSlowCase): - (KJS::CTI::CTI): - (KJS::CTI::privateCompile_pass1_Scan): - (KJS::CTI::ctiCompileAdd): - (KJS::CTI::ctiCompileAddImm): - (KJS::CTI::ctiCompileAddImmNotInt): - (KJS::CTI::TEMP_HACK_PRINT_TYPES): - (KJS::CTI::privateCompile_pass2_Main): - (KJS::CTI::privateCompile_pass3_Link): - (KJS::CTI::privateCompile_pass4_SlowCases): - (KJS::CTI::privateCompile): - * VM/CTI.h: Added. - (KJS::CTI2Result::CTI2Result): - (KJS::CallRecord::CallRecord): - (KJS::JmpTable::JmpTable): - (KJS::SlowCaseEntry::SlowCaseEntry): - (KJS::CTI::compile): - (KJS::CTI::LabelInfo::LabelInfo): - * VM/CodeBlock.h: - (KJS::CodeBlock::CodeBlock): - (KJS::CodeBlock::~CodeBlock): - * VM/Machine.cpp: - (KJS::Machine::execute): - (KJS::Machine::privateExecute): - (KJS::ctiException): - (KJS::ctiUnsupported): - (KJS::ctiTimedOut): - (KJS::Machine::cti_op_end): - (KJS::Machine::cti_op_add): - (KJS::Machine::cti_op_pre_inc): - (KJS::Machine::cti_timeout_check): - (KJS::Machine::cti_op_loop_if_less): - (KJS::Machine::cti_op_new_object): - (KJS::Machine::cti_op_put_by_id): - (KJS::Machine::cti_op_get_by_id): - (KJS::Machine::cti_op_mul): - (KJS::Machine::cti_op_new_func): - (KJS::Machine::cti_op_call): - (KJS::Machine::cti_op_ret): - (KJS::Machine::cti_op_new_array): - (KJS::Machine::cti_op_resolve): - (KJS::Machine::cti_op_construct): - (KJS::Machine::cti_op_get_by_val): - (KJS::Machine::cti_op_resolve_func): - (KJS::Machine::cti_op_sub): - (KJS::Machine::cti_op_put_by_val): - (KJS::Machine::cti_op_lesseq): - (KJS::Machine::cti_op_loop_if_true): - (KJS::Machine::cti_op_negate): - (KJS::Machine::cti_op_resolve_base): - (KJS::Machine::cti_op_resolve_skip): - (KJS::Machine::cti_op_div): - (KJS::Machine::cti_op_pre_dec): - (KJS::Machine::cti_op_jless): - (KJS::Machine::cti_op_not): - (KJS::Machine::cti_op_jtrue): - (KJS::Machine::cti_op_post_inc): - (KJS::Machine::cti_op_eq): - (KJS::Machine::cti_op_lshift): - (KJS::Machine::cti_op_bitand): - (KJS::Machine::cti_op_rshift): - (KJS::Machine::cti_op_bitnot): - (KJS::Machine::cti_op_resolve_with_base): - (KJS::Machine::cti_op_new_func_exp): - (KJS::Machine::cti_op_mod): - (KJS::Machine::cti_op_less): - (KJS::Machine::cti_op_neq): - (KJS::Machine::cti_op_post_dec): - (KJS::Machine::cti_op_urshift): - (KJS::Machine::cti_op_bitxor): - (KJS::Machine::cti_op_new_regexp): - (KJS::Machine::cti_op_bitor): - (KJS::Machine::cti_op_call_eval): - (KJS::Machine::cti_op_throw): - (KJS::Machine::cti_op_get_pnames): - (KJS::Machine::cti_op_next_pname): - (KJS::Machine::cti_op_typeof): - (KJS::Machine::cti_op_stricteq): - (KJS::Machine::cti_op_nstricteq): - (KJS::Machine::cti_op_to_jsnumber): - * VM/Machine.h: - * VM/Register.h: - (KJS::Register::jsValue): - (KJS::Register::getJSValue): - (KJS::Register::codeBlock): - (KJS::Register::scopeChain): - (KJS::Register::i): - (KJS::Register::r): - (KJS::Register::vPC): - (KJS::Register::jsPropertyNameIterator): - * VM/SamplingTool.cpp: - (KJS::): - (KJS::SamplingTool::run): - (KJS::SamplingTool::dump): - * VM/SamplingTool.h: - * kjs/JSImmediate.h: - (KJS::JSImmediate::zeroImmediate): - (KJS::JSImmediate::oneImmediate): - * kjs/JSValue.h: - * kjs/JSVariableObject.h: - (KJS::JSVariableObject::JSVariableObjectData::offsetOf_registers): - (KJS::JSVariableObject::offsetOf_d): - (KJS::JSVariableObject::offsetOf_Data_registers): - * masm: Added. - * masm/IA32MacroAsm.h: Added. - (KJS::JITCodeBuffer::JITCodeBuffer): - (KJS::JITCodeBuffer::putByte): - (KJS::JITCodeBuffer::putShort): - (KJS::JITCodeBuffer::putInt): - (KJS::JITCodeBuffer::getEIP): - (KJS::JITCodeBuffer::start): - (KJS::JITCodeBuffer::getOffset): - (KJS::JITCodeBuffer::reset): - (KJS::JITCodeBuffer::copy): - (KJS::IA32MacroAssembler::): - (KJS::IA32MacroAssembler::emitModRm_rr): - (KJS::IA32MacroAssembler::emitModRm_rm): - (KJS::IA32MacroAssembler::emitModRm_rmsib): - (KJS::IA32MacroAssembler::emitModRm_opr): - (KJS::IA32MacroAssembler::emitModRm_opm): - (KJS::IA32MacroAssembler::IA32MacroAssembler): - (KJS::IA32MacroAssembler::emitInt3): - (KJS::IA32MacroAssembler::emitPushl_r): - (KJS::IA32MacroAssembler::emitPopl_r): - (KJS::IA32MacroAssembler::emitMovl_rr): - (KJS::IA32MacroAssembler::emitAddl_rr): - (KJS::IA32MacroAssembler::emitAddl_i8r): - (KJS::IA32MacroAssembler::emitAddl_i32r): - (KJS::IA32MacroAssembler::emitAddl_mr): - (KJS::IA32MacroAssembler::emitAndl_rr): - (KJS::IA32MacroAssembler::emitAndl_i32r): - (KJS::IA32MacroAssembler::emitCmpl_i8r): - (KJS::IA32MacroAssembler::emitCmpl_rr): - (KJS::IA32MacroAssembler::emitCmpl_rm): - (KJS::IA32MacroAssembler::emitCmpl_i32r): - (KJS::IA32MacroAssembler::emitCmpw_rm): - (KJS::IA32MacroAssembler::emitOrl_rr): - (KJS::IA32MacroAssembler::emitOrl_i8r): - (KJS::IA32MacroAssembler::emitSubl_rr): - (KJS::IA32MacroAssembler::emitSubl_i8r): - (KJS::IA32MacroAssembler::emitSubl_i32r): - (KJS::IA32MacroAssembler::emitSubl_mr): - (KJS::IA32MacroAssembler::emitTestl_i32r): - (KJS::IA32MacroAssembler::emitTestl_rr): - (KJS::IA32MacroAssembler::emitXorl_i8r): - (KJS::IA32MacroAssembler::emitXorl_rr): - (KJS::IA32MacroAssembler::emitSarl_i8r): - (KJS::IA32MacroAssembler::emitSarl_CLr): - (KJS::IA32MacroAssembler::emitShl_i8r): - (KJS::IA32MacroAssembler::emitShll_CLr): - (KJS::IA32MacroAssembler::emitMull_rr): - (KJS::IA32MacroAssembler::emitIdivl_r): - (KJS::IA32MacroAssembler::emitCdq): - (KJS::IA32MacroAssembler::emitMovl_mr): - (KJS::IA32MacroAssembler::emitMovzwl_mr): - (KJS::IA32MacroAssembler::emitMovl_rm): - (KJS::IA32MacroAssembler::emitMovl_i32r): - (KJS::IA32MacroAssembler::emitMovl_i32m): - (KJS::IA32MacroAssembler::emitLeal_mr): - (KJS::IA32MacroAssembler::emitRet): - (KJS::IA32MacroAssembler::JmpSrc::JmpSrc): - (KJS::IA32MacroAssembler::JmpDst::JmpDst): - (KJS::IA32MacroAssembler::emitCall): - (KJS::IA32MacroAssembler::label): - (KJS::IA32MacroAssembler::emitUnlinkedJmp): - (KJS::IA32MacroAssembler::emitUnlinkedJne): - (KJS::IA32MacroAssembler::emitUnlinkedJe): - (KJS::IA32MacroAssembler::emitUnlinkedJl): - (KJS::IA32MacroAssembler::emitUnlinkedJle): - (KJS::IA32MacroAssembler::emitUnlinkedJge): - (KJS::IA32MacroAssembler::emitUnlinkedJae): - (KJS::IA32MacroAssembler::emitUnlinkedJo): - (KJS::IA32MacroAssembler::emitPredictionNotTaken): - (KJS::IA32MacroAssembler::link): - (KJS::IA32MacroAssembler::copy): - * wtf/Platform.h: - -2008-08-26 Oliver Hunt - - RS=Maciej. - - Enabled -fomit-frame-pointer on Release and Production builds, add additional Profiling build config for shark, etc. - - * JavaScriptCore.xcodeproj/project.pbxproj: - -=== Start merge of squirrelfish-extreme === - -2008-09-06 Cameron Zwarich +2009-06-24 Zoltan Horvath Reviewed by Maciej Stachowiak. - Fix the Mac Debug build by adding symbols that are exported only in a - Debug configuration. - - * Configurations/JavaScriptCore.xcconfig: - * DerivedSources.make: - * JavaScriptCore.Debug.exp: Added. - * JavaScriptCore.base.exp: Copied from JavaScriptCore.exp. - * JavaScriptCore.exp: Removed. - * JavaScriptCore.xcodeproj/project.pbxproj: - -2008-09-05 Darin Adler - - Reviewed by Cameron Zwarich. - - - https://bugs.webkit.org/show_bug.cgi?id=20681 - JSPropertyNameIterator functions need to be inlined - - 1.007x as fast on SunSpider overall - 1.081x as fast on SunSpider math-cordic - - * VM/JSPropertyNameIterator.cpp: Moved functions out of here. - * VM/JSPropertyNameIterator.h: - (KJS::JSPropertyNameIterator::JSPropertyNameIterator): Moved - this into the header and marked it inline. - (KJS::JSPropertyNameIterator::create): Ditto. - (KJS::JSPropertyNameIterator::next): Ditto. - -2008-09-05 Darin Adler - - Reviewed by Geoffrey Garen. - - - fix https://bugs.webkit.org/show_bug.cgi?id=20673 - single-character strings are churning in the Identifier table - - 1.007x as fast on SunSpider overall - 1.167x as fast on SunSpider string-fasta - - * JavaScriptCore.exp: Updated. - * kjs/SmallStrings.cpp: - (KJS::SmallStrings::singleCharacterStringRep): Added. - * kjs/SmallStrings.h: Added singleCharacterStringRep for clients that - need just a UString, not a JSString. - * kjs/identifier.cpp: - (KJS::Identifier::add): Added special cases for single character strings - so that the UString::Rep that ends up in the identifier table is the one - from the single-character string optimization; otherwise we end up having - to look it up in the identifier table over and over again. - (KJS::Identifier::addSlowCase): Ditto. - (KJS::Identifier::checkSameIdentifierTable): Made this function an empty - inline in release builds so that callers don't have to put #ifndef NDEBUG - at each call site. - * kjs/identifier.h: - (KJS::Identifier::add): Removed #ifndef NDEBUG around the calls to - checkSameIdentifierTable. - (KJS::Identifier::checkSameIdentifierTable): Added. Empty inline version - for NDEBUG builds. - -2008-09-05 Mark Rowe - - Build fix. - - * kjs/JSObject.h: Move the inline virtual destructor after a non-inline - virtual function so that the symbol for the vtable is not marked as a - weakly exported symbol. - -2008-09-05 Darin Adler - - Reviewed by Sam Weinig. - - - fix https://bugs.webkit.org/show_bug.cgi?id=20671 - JavaScriptCore string manipulation spends too much time in memcpy - - 1.011x as fast on SunSpider overall - 1.028x as fast on SunSpider string tests - - For small strings, use a loop rather than calling memcpy. The loop can - be faster because there's no function call overhead, and because it can - assume the pointers are aligned instead of checking that. Currently the - threshold is set at 20 characters, based on some testing on one particular - computer. Later we can tune this for various platforms by setting - USTRING_COPY_CHARS_INLINE_CUTOFF appropriately, but it does no great harm - if not perfectly tuned. - - * kjs/ustring.cpp: - (KJS::overflowIndicator): Removed bogus const. - (KJS::maxUChars): Ditto. - (KJS::copyChars): Added. - (KJS::UString::Rep::createCopying): Call copyChars instead of memcpy. - Also eliminated need for const_cast. - (KJS::UString::expandPreCapacity): Ditto. - (KJS::concatenate): Ditto. - (KJS::UString::spliceSubstringsWithSeparators): Ditto. - (KJS::UString::append): Ditto. - -2008-09-05 Kevin McCullough - - Reviewed by Sam and Alexey. - - Make the profiler work with a null exec state. This will allow other - applications start the profiler to get DTrace probes going without - needing a WebView. - - * ChangeLog: - * profiler/ProfileGenerator.cpp: - (KJS::ProfileGenerator::ProfileGenerator): - (KJS::ProfileGenerator::willExecute): - (KJS::ProfileGenerator::didExecute): - * profiler/Profiler.cpp: - (KJS::Profiler::startProfiling): - (KJS::Profiler::stopProfiling): - (KJS::dispatchFunctionToProfiles): - -2008-09-04 Gavin Barraclough - - Reviewed by Geoffrey Garen. - - Fixed an off-by-one error that would cause the StructureIDChain to - be one object too short. - - Can't construct a test case because other factors make this not crash - (yet!). - - * kjs/StructureID.cpp: - (KJS::StructureIDChain::StructureIDChain): - -2008-09-04 Kevin Ollivier - - wx build fixes. - - * JavaScriptCoreSources.bkl: - -2008-09-04 Mark Rowe - - Reviewed by Eric Seidel. - - Fix https://bugs.webkit.org/show_bug.cgi?id=20639. - Bug 20639: ENABLE_DASHBOARD_SUPPORT does not need to be a FEATURE_DEFINE - - * Configurations/JavaScriptCore.xcconfig: Remove ENABLE_DASHBOARD_SUPPORT from FEATURE_DEFINES. - * wtf/Platform.h: Set ENABLE_DASHBOARD_SUPPORT for PLATFORM(MAC). - -2008-09-04 Adele Peterson - - Build fix. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.vcproj/WTF/WTF.vcproj: - * JavaScriptCore.vcproj/jsc/jsc.vcproj: - -2008-09-04 Mark Rowe - - Mac build fix. - - * kjs/config.h: Only check the value of HAVE_CONFIG_H if it is defined. - -2008-09-04 Marco Barisione - - Reviewed by Eric Seidel. - - http://bugs.webkit.org/show_bug.cgi?id=20380 - [GTK][AUTOTOOLS] Include autotoolsconfig.h from config.h - - * kjs/config.h: Include the configuration header generated by - autotools if available. - -2008-09-04 Tor Arne Vestbø - - Reviewed by Simon. - - Fix the QtWebKit build to match changes in r36016 - - * JavaScriptCore.pri: - -2008-09-04 Mark Rowe - - Fix the 64-bit build. - - * VM/CodeBlock.cpp: - (KJS::CodeBlock::printStructureID): Store the instruction offset into an unsigned local - to avoid a warning related to format specifiers. - (KJS::CodeBlock::printStructureIDs): Ditto. - -2008-09-04 Cameron Zwarich - - Rubber-stamped by Oliver Hunt. + https://bugs.webkit.org/show_bug.cgi?id=26645 - Correct the spelling of 'entryIndices'. + Inherits ScopeChainNode class from FastAllocBase because it has been + instantiated by 'new' in JavaScriptCore/runtime/ScopeChain.h:95. - * kjs/PropertyMap.cpp: - (KJS::PropertyMap::get): - (KJS::PropertyMap::getLocation): - (KJS::PropertyMap::put): - (KJS::PropertyMap::insert): - (KJS::PropertyMap::remove): - (KJS::PropertyMap::checkConsistency): - * kjs/PropertyMap.h: - (KJS::PropertyMapHashTable::entries): - (KJS::PropertyMap::getOffset): - (KJS::PropertyMap::putOffset): - (KJS::PropertyMap::offsetForTableLocation): - -2008-09-03 Geoffrey Garen - - Reviewed by Cameron Zwarich. - - Fixed REGRESSION: Crash occurs at - KJS::Machine::privateExecute() when attempting to load my Mobile Gallery - (http://www.me.com/gallery/#home) - - also - - https://bugs.webkit.org/show_bug.cgi?id=20633 Crash in privateExecute - @ cs.byu.edu - - The underlying problem was that we would cache prototype properties - even if the prototype was a dictionary. - - The fix is to transition a prototype back from dictionary to normal - status when an opcode caches access to it. (This is better than just - refusing to cache, since a heavily accessed prototype is almost - certainly not a true dictionary.) - - * VM/Machine.cpp: - (KJS::Machine::tryCacheGetByID): - * kjs/JSObject.h: - -2008-09-03 Eric Seidel - - Reviewed by Sam. - - Clean up Platform.h and add PLATFORM(CHROMIUM), PLATFORM(SKIA) and USE(V8_BINDINGS) - - * Configurations/JavaScriptCore.xcconfig: add missing ENABLE_* - * wtf/ASCIICType.h: include since it depends on it. - * wtf/Platform.h: - -2008-09-03 Kevin McCullough - - Reviewed by Tim. - - Remove the rest of the "zombie" code from the profiler. - - There is no longer a need for the ProfilerClient callback mechanism. - - * API/JSProfilerPrivate.cpp: - (JSStartProfiling): - * JavaScriptCore.exp: - * profiler/HeavyProfile.h: - * profiler/ProfileGenerator.cpp: - (KJS::ProfileGenerator::create): - (KJS::ProfileGenerator::ProfileGenerator): - * profiler/ProfileGenerator.h: - (KJS::ProfileGenerator::profileGroup): - * profiler/Profiler.cpp: - (KJS::Profiler::startProfiling): - (KJS::Profiler::stopProfiling): Immediately return the profile when - stopped instead of using a callback. - * profiler/Profiler.h: - * profiler/TreeProfile.h: - -2008-09-03 Adele Peterson - - Build fix. - - * wtf/win/MainThreadWin.cpp: - -2008-09-02 Kevin McCullough - - Reviewed by Darin and Tim. - - Remove most of the "zombie" mode from the profiler. Next we will need - to remove the client callback mechanism in profiles. - - - This simplifies the code, leverages the recent changes I've made in - getting line numbers from SquirrelFish, and is a slight speed - improvement on SunSpider. - - Also the "zombie" mode was a constant source of odd edge cases and - obscure bugs so it's good to remove since all of its issues may not have - been found. - - * API/JSProfilerPrivate.cpp: No need to call didFinishAllExecution() any - more. - (JSEndProfiling): - * JavaScriptCore.exp: Export the new signature of retrieveLastCaller() - * VM/Machine.cpp: - (KJS::Machine::execute): No need to call didFinishAllExecution() any - more. - (KJS::Machine::retrieveCaller): Now operates on InternalFunctions now - since the RegisterFile is no longer guaranteeded to store only - JSFunctions - (KJS::Machine::retrieveLastCaller): Now also retrieve the function's - name - (KJS::Machine::callFrame): A result of changing retrieveCaller() - * VM/Machine.h: - * VM/Register.h: - * kjs/JSGlobalObject.cpp: - (KJS::JSGlobalObject::~JSGlobalObject): - * kjs/nodes.h: - * profiler/ProfileGenerator.cpp: - (KJS::ProfileGenerator::create): Now pass the original exec and get the - global exec and client when necessary. We need the original exec so we - can have the stack frame where profiling started. - (KJS::ProfileGenerator::ProfileGenerator): ditto. - (KJS::ProfileGenerator::addParentForConsoleStart): This is where the - parent to star of the profile is added, if there is one. - (KJS::ProfileGenerator::willExecute): Remove uglyness! - (KJS::ProfileGenerator::didExecute): Ditto! - (KJS::ProfileGenerator::stopProfiling): - (KJS::ProfileGenerator::removeProfileStart): Use a better way to find - and remove the function we are looking for. - (KJS::ProfileGenerator::removeProfileEnd): Ditto. - * profiler/ProfileGenerator.h: - (KJS::ProfileGenerator::client): - * profiler/ProfileNode.cpp: - (KJS::ProfileNode::removeChild): Add a better way to remove a child from - a ProfileNode. - (KJS::ProfileNode::stopProfiling): - (KJS::ProfileNode::debugPrintData): Modified a debug-only diagnostic - function to be sane. - * profiler/ProfileNode.h: - * profiler/Profiler.cpp: Change to pass the original exec state. - (KJS::Profiler::startProfiling): - (KJS::Profiler::stopProfiling): - (KJS::Profiler::willExecute): - (KJS::Profiler::didExecute): - (KJS::Profiler::createCallIdentifier): - * profiler/Profiler.h: + * wtf/RefPtr.h: -2008-09-01 Alexey Proskuryakov +2009-06-24 Zoltan Horvath Reviewed by Darin Adler. - Implement callOnMainThreadAndWait(). - - This will be useful when a background thread needs to perform UI calls synchronously - (e.g. an openDatabase() call cannot return until the user answers to a confirmation dialog). - - * wtf/MainThread.cpp: - (WTF::FunctionWithContext::FunctionWithContext): Added a ThreadCondition member. When - non-zero, the condition is signalled after the function is called. - (WTF::mainThreadFunctionQueueMutex): Renamed from functionQueueMutex, sinc this is no longer - static. Changed to be initialized from initializeThreading() to avoid lock contention. - (WTF::initializeMainThread): On non-Windows platforms, just call mainThreadFunctionQueueMutex. - (WTF::dispatchFunctionsFromMainThread): Signal synchronous calls when done. - (WTF::callOnMainThread): Updated for functionQueueMutex rename. - (WTF::callOnMainThreadAndWait): Added. - - * wtf/MainThread.h: Added callOnMainThreadAndWait(); initializeMainThread() now exists on - all platforms. - - * wtf/win/MainThreadWin.cpp: (WTF::initializeMainThread): Added a callOnMainThreadAndWait() - call to initialize function queue mutex. + https://bugs.webkit.org/show_bug.cgi?id=26648 - * wtf/ThreadingGtk.cpp: (WTF::initializeThreading): - * wtf/ThreadingPthreads.cpp: (WTF::initializeThreading): - * wtf/ThreadingQt.cpp: (WTF::initializeThreading): - Only initialize mainThreadIdentifier on non-Darwin platforms. It was not guaranteed to be - accurate on Darwin. + Inherits Deque class from FastAllocBase because it has been + instantiated by 'new' with DEFINE_STATIC_LOCAL macro in + JavaScriptCore/wtf/MainThread.cpp:62. -2008-09-03 Geoffrey Garen - - Reviewed by Darin Adler. - - Use isUndefinedOrNull() instead of separate checks for each in op_eq_null - and op_neq_null. - - * VM/Machine.cpp: - (KJS::Machine::privateExecute): + * wtf/Deque.h: -2008-09-02 Csaba Osztrogonac +2009-06-24 Zoltan Horvath Reviewed by Darin Adler. - Bug 20296: OpcodeStats doesn't build on platforms which don't have mergesort(). - - - * VM/Opcode.cpp: - (KJS::OpcodeStats::~OpcodeStats): mergesort() replaced with qsort() - -2008-09-02 Geoffrey Garen - - Reviewed by Oliver Hunt. - - Fast path for array.length and string.length. - - SunSpider says 0.5% faster. - -2008-09-02 Geoffrey Garen - - Reviewed by Anders Carlsson. - - Added optimized paths for comparing to null. - - SunSpider says 0.5% faster. - -2008-09-02 Geoffrey Garen - - Reviewed by Sam Weinig. - - Changed jsDriver.pl to dump the exact text you would need in order to - reproduce a test result. This enables a fast workflow where you copy - and paste a test failure in the terminal. - - * tests/mozilla/jsDriver.pl: - -2008-09-02 Geoffrey Garen - - Reviewed by Sam Weinig. - - Implemented the rest of Darin's review comments for the 09-01 inline - caching patch. - - SunSpider says 0.5% faster, but that seems like noise. - - * JavaScriptCore.xcodeproj/project.pbxproj: Put PutPropertySlot into - its own file, and added BatchedTransitionOptimizer. - - * VM/CodeBlock.cpp: - (KJS::CodeBlock::~CodeBlock): Use array indexing instead of a pointer - iterator. - - * VM/CodeGenerator.cpp: - (KJS::CodeGenerator::CodeGenerator): Used BatchedTransitionOptimizer to - make batched put and remove for declared variables fast, without forever - pessimizing the global object. Removed the old getDirect/removeDirect hack - that tried to do the same in a more limited way. - - * VM/CodeGenerator.h: Moved IdentifierRepHash to the KJS namespace since - it doesn't specialize anything in WTF. - - * VM/Machine.cpp: - (KJS::Machine::Machine): Nixed the DummyConstruct tag because it was - confusingly named. - - (KJS::Machine::execute): Used BatchedTransitionOptimizer, as above. Fixed - up some comments. - - (KJS::cachePrototypeChain): Cast to JSObject*, since it's more specific. + https://bugs.webkit.org/show_bug.cgi?id=26644 - (KJS::Machine::tryCachePutByID): Use isNull() instead of comparing to - jsNull(), since isNull() leaves more options open for the future. - (KJS::Machine::tryCacheGetByID): ditto - (KJS::Machine::privateExecute): ditto + Inherits RefPtr class from FastAllocBase because it has been + instantiated by 'new' in JavaScriptCore/runtime/StructureChain.cpp:41. - * VM/SamplingTool.cpp: - (KJS::SamplingTool::dump): Use C++-style cast, to match our style - guidelines. - - * kjs/BatchedTransitionOptimizer.h: Added. New class that allows host - code to add a batch of properties to an object in an efficient way. - - * kjs/JSActivation.cpp: Use isNull(), as above. - - * kjs/JSArray.cpp: Get rid of DummyConstruct tag, as above. - * kjs/JSArray.h: - - * kjs/JSGlobalData.cpp: Nixed two unused StructureIDs. - * kjs/JSGlobalData.h: - - * kjs/JSImmediate.cpp: Use isNull(), as above. - - * kjs/JSObject.cpp: - (KJS::JSObject::mark): Moved mark tracing code elsewhere, to make this - function more readable. - - (KJS::JSObject::put): Use isNull(), as above. - - (KJS::JSObject::createInheritorID): Return a raw pointer, since the - object is owned by a data member, not necessarily the caller. - * kjs/JSObject.h: - - * kjs/JSString.cpp: Use isNull(), as above. - - * kjs/PropertyMap.h: Updated to use PropertySlot::invalidOffset. - - * kjs/PropertySlot.h: Changed KJS_INVALID_OFFSET to WTF::notFound - because C macros are so 80's. - - * kjs/PutPropertySlot.h: Added. Split out of PropertySlot.h. Also renamed - PutPropertySlot::SlotType to PutPropertySlot::Type, and slotBase to base, - since "slot" was redundant. - - * kjs/StructureID.cpp: Added a new transition *away* from dictionary - status, to support BatchedTransitionOptimizer. - - (KJS::StructureIDChain::StructureIDChain): No need to store m_size as - a data member, so keep it in a local, which might be faster. - * kjs/StructureID.h: - - * kjs/SymbolTable.h: Moved IdentifierRepHash to KJS namespace, as above. - * kjs/ustring.h: - -2008-09-02 Adam Roben - - Windows build fixes - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add - StructureID.{cpp,h} to the project. Also let VS reorder this file. - * VM/CodeBlock.cpp: Include StringExtras so that snprintf will be - defined on Windows. - -2008-09-01 Sam Weinig - - Fix release build. - - * JavaScriptCore.exp: - -2008-09-01 Jan Michael Alonzo - - Reviewed by Oliver Hunt. - - Gtk buildfix - - * GNUmakefile.am: - * kjs/PropertyMap.cpp: rename Identifier.h to identifier.h - * kjs/StructureID.cpp: include JSObject.h + * wtf/RefPtr.h: -2008-09-01 Geoffrey Garen +2009-06-24 Zoltan Horvath Reviewed by Darin Adler. - First cut at inline caching for access to vanilla JavaScript properties. - - SunSpider says 4% faster. Tests heavy on dictionary-like access have - regressed a bit -- we have a lot of room to improve in this area, - but this patch is over-ripe as-is. - - JSCells now have a StructureID that uniquely identifies their layout, - and holds their prototype. - - JSValue::put takes a PropertySlot& argument, so it can fill in details - about where it put a value, for the sake of caching. - - * VM/CodeGenerator.cpp: - (KJS::CodeGenerator::CodeGenerator): Avoid calling removeDirect if we - can, since it disables inline caching in the global object. This can - probably improve in the future. - - * kjs/JSGlobalObject.cpp: Nixed reset(), since it complicates caching, and - wasn't really necessary. - - * kjs/JSObject.cpp: Tweaked getter / setter behavior not to rely on the - IsGetterSetter flag, since the flag was buggy. This is necessary in order - to avoid accidentally accessing a getter / setter as a normal property. - - Also changed getter / setter creation to honor ReadOnly, matching Mozilla. - - * kjs/PropertyMap.cpp: Nixed clear(), since it complicates caching and - isn't necessary. - - * kjs/Shell.cpp: Moved SamplingTool dumping outside the loop. This allows - you to aggregate sampling of multiple files (or the same file repeatedly), - which helped me track down regressions. - - * kjs/ustring.h: Moved IdentifierRepHash here to share it. - -2008-09-01 Geoffrey Garen - - Reviewed by Sam Weinig. - - Eagerly allocate the Math object's numeric constants. This avoids - constantly reallocating them in loops, and also ensures that the Math - object will not use the single property optimization, which makes - properties ineligible for caching. - - SunSpider reports a small speedup, in combination with inline caching. - - * kjs/MathObject.cpp: - (KJS::MathObject::MathObject): - (KJS::MathObject::getOwnPropertySlot): - * kjs/MathObject.h: - -2008-09-01 Jan Michael Alonzo - - Gtk build fix, not reviewed. - - * GNUmakefile.am: Add SmallStrings.cpp in both release and debug builds - -2008-08-31 Cameron Zwarich - - Reviewed by Maciej Stachowiak. - - Bug 20577: REGRESSION (r36006): Gmail is broken - - - r36006 changed stringProtoFuncSubstr() so that it is uses the more - efficient jsSubstring(), rather than using UString::substr() and then - calling jsString(). However, the change did not account for the case - where the start and the length of the substring extend beyond the length - of the original string. This patch corrects that. - - * kjs/StringPrototype.cpp: - (KJS::stringProtoFuncSubstr): - -2008-08-31 Simon Hausmann - - Unreviewed build fix (with gcc 4.3) - - * kjs/ustring.h: Properly forward declare operator== for UString and - the the concatenate functions inside the KJS namespace. - -2008-08-30 Darin Adler - - Reviewed by Maciej. - - - https://bugs.webkit.org/show_bug.cgi?id=20333 - improve JavaScript speed when handling single-character strings - - 1.035x as fast on SunSpider overall. - 1.127x as fast on SunSpider string tests. - 1.910x as fast on SunSpider string-base64 test. - - * API/JSObjectRef.cpp: - (JSObjectMakeFunction): Removed unneeded explicit construction of UString. - - * GNUmakefile.am: Added SmallStrings.h and SmallStrings.cpp. - * JavaScriptCore.pri: Ditto. - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - Ditto. - * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. - * JavaScriptCoreSources.bkl: Ditto. - - * JavaScriptCore.exp: Updated. + Inherits HashSet class from FastAllocBase, because it has been + instantiated by 'new' in JavaScriptCore/runtime/Collector.h:116. - * VM/Machine.cpp: - (KJS::jsAddSlowCase): Changed to use a code path that doesn't involve - a UString constructor. This avoids an extra jump caused by the "in charge" - vs. "not in charge" constructors. - (KJS::jsAdd): Ditto. - (KJS::jsTypeStringForValue): Adopted jsNontrivialString. - - * kjs/ArrayPrototype.cpp: - (KJS::arrayProtoFuncToString): Adopted jsEmptyString. - (KJS::arrayProtoFuncToLocaleString): Ditto. - (KJS::arrayProtoFuncJoin): Ditto. - * kjs/BooleanPrototype.cpp: - (KJS::booleanProtoFuncToString): Adopted jsNontrivialString. - * kjs/DateConstructor.cpp: - (KJS::callDate): Ditto. - * kjs/DatePrototype.cpp: - (KJS::formatLocaleDate): Adopted jsEmptyString and jsNontrivialString. - (KJS::dateProtoFuncToString): Ditto. - (KJS::dateProtoFuncToUTCString): Ditto. - (KJS::dateProtoFuncToDateString): Ditto. - (KJS::dateProtoFuncToTimeString): Ditto. - (KJS::dateProtoFuncToLocaleString): Ditto. - (KJS::dateProtoFuncToLocaleDateString): Ditto. - (KJS::dateProtoFuncToLocaleTimeString): Ditto. - (KJS::dateProtoFuncToGMTString): Ditto. - - * kjs/ErrorPrototype.cpp: - (KJS::ErrorPrototype::ErrorPrototype): Ditto. - (KJS::errorProtoFuncToString): Ditto. - - * kjs/JSGlobalData.h: Added SmallStrings. - - * kjs/JSString.cpp: - (KJS::jsString): Eliminated the overload that takes a const char*. - Added code to use SmallStrings to get strings of small sizes rather - than creating a new JSString every time. - (KJS::jsSubstring): Added. Used when creating a string from a substring - to avoid creating a JSString in cases where the substring will end up - empty or as one character. - (KJS::jsOwnedString): Added the same code as in jsString. - - * kjs/JSString.h: Added new functions jsEmptyString, jsSingleCharacterString, - jsSingleCharacterSubstring, jsSubstring, and jsNontrivialString for various - cases where we want to create JSString, and want special handling for small - strings. - (KJS::JSString::JSString): Added an overload that takes a PassRefPtr of - a UString::Rep so you don't have to construct a UString; PassRefPtr can be - more efficient. - (KJS::jsEmptyString): Added. - (KJS::jsSingleCharacterString): Added. - (KJS::jsSingleCharacterSubstring): Added. - (KJS::jsNontrivialString): Added. - (KJS::JSString::getIndex): Adopted jsSingleCharacterSubstring. - (KJS::JSString::getStringPropertySlot): Ditto. - - * kjs/NumberPrototype.cpp: - (KJS::numberProtoFuncToFixed): Adopted jsNontrivialString. - (KJS::numberProtoFuncToExponential): Ditto. - (KJS::numberProtoFuncToPrecision): Ditto. - - * kjs/ObjectPrototype.cpp: - (KJS::objectProtoFuncToLocaleString): Adopted toThisJSString. - (KJS::objectProtoFuncToString): Adopted jsNontrivialString. - - * kjs/RegExpConstructor.cpp: Separated the lastInput value that's used - with the lastOvector to return matches from the input value that can be - changed via JavaScript. They will be equal in many cases, but not all. - (KJS::RegExpConstructor::performMatch): Set input. - (KJS::RegExpMatchesArray::RegExpMatchesArray): Ditto. - (KJS::RegExpMatchesArray::fillArrayInstance): Adopted jsSubstring. Also, - use input rather than lastInput in the appropriate place. - (KJS::RegExpConstructor::getBackref): Adopted jsSubstring and jsEmptyString. - Added code to handle the case where there is no backref -- before this - depended on range checking in UString::substr which is not present in - jsSubstring. - (KJS::RegExpConstructor::getLastParen): Ditto. - (KJS::RegExpConstructor::getLeftContext): Ditto. - (KJS::RegExpConstructor::getRightContext): Ditto. - (KJS::RegExpConstructor::getValueProperty): Use input rather than lastInput. - Also adopt jsEmptyString. - (KJS::RegExpConstructor::putValueProperty): Ditto. - (KJS::RegExpConstructor::input): Ditto. - - * kjs/RegExpPrototype.cpp: - (KJS::regExpProtoFuncToString): Adopt jsNonTrivialString. Also changed to - use UString::append to append single characters rather than using += and - a C-style string. - - * kjs/SmallStrings.cpp: Added. - (KJS::SmallStringsStorage::SmallStringsStorage): Construct the - buffer and UString::Rep for all 256 single-character strings for - the U+0000 through U+00FF. This covers all the values used in - the base64 test as well as most values seen elsewhere on the web - as well. It's possible that later we might fix this to only work - for U+0000 through U+007F but the others are used quite a bit in - the current version of the base64 test. - (KJS::SmallStringsStorage::~SmallStringsStorage): Free memory. - (KJS::SmallStrings::SmallStrings): Create a set of small strings, - initially not created; created later when they are used. - (KJS::SmallStrings::~SmallStrings): Deallocate. Not left compiler - generated because the SmallStringsStorage class's destructor needs - to be visible. - (KJS::SmallStrings::mark): Mark all the strings. - (KJS::SmallStrings::createEmptyString): Create a cell for the - empty string. Called only the first time. - (KJS::SmallStrings::createSingleCharacterString): Create a cell - for one of the single-character strings. Called only the first time. - * kjs/SmallStrings.h: Added. - - * kjs/StringConstructor.cpp: - (KJS::stringFromCharCodeSlowCase): Factored out of strinFromCharCode. - Only used for cases where the caller does not pass exactly one argument. - (KJS::stringFromCharCode): Adopted jsSingleCharacterString. - (KJS::callStringConstructor): Adopted jsEmptyString. - - * kjs/StringObject.cpp: - (KJS::StringObject::StringObject): Adopted jsEmptyString. - - * kjs/StringPrototype.cpp: - (KJS::stringProtoFuncReplace): Adopted jsSubstring. - (KJS::stringProtoFuncCharAt): Adopted jsEmptyString and - jsSingleCharacterSubstring and also added a special case when the - index is an immediate number to avoid conversion to and from floating - point, since that's the common case. - (KJS::stringProtoFuncCharCodeAt): Ditto. - (KJS::stringProtoFuncMatch): Adopted jsSubstring and jsEmptyString. - (KJS::stringProtoFuncSlice): Adopted jsSubstring and - jsSingleCharacterSubstring. Also got rid of some unneeded locals and - removed unneeded code to set the length property of the array, since it - is automatically updated as values are added to the array. - (KJS::stringProtoFuncSplit): Adopted jsEmptyString. - (KJS::stringProtoFuncSubstr): Adopted jsSubstring. - (KJS::stringProtoFuncSubstring): Ditto. - - * kjs/collector.cpp: - (KJS::Heap::collect): Added a call to mark SmallStrings. - - * kjs/ustring.cpp: - (KJS::UString::expandedSize): Made this a static member function since - it doesn't need to look at any data members. - (KJS::UString::expandCapacity): Use a non-inline function, makeNull, to - set the rep to null in failure cases. This avoids adding a PIC branch for - the normal case when there is no failure. - (KJS::UString::expandPreCapacity): Ditto. - (KJS::UString::UString): Ditto. - (KJS::concatenate): Refactored the concatenation constructor into this - separate function. Calling the concatenation constructor was leading to - an extra branch because of the in-charge vs. not-in-charge versions not - both being inlined, and this was showing up as nearly 1% on Shark. Also - added a special case for when the second string is a single character, - since it's a common idiom to build up a string that way and we can do - things much more quickly, without involving memcpy for example. Also - adopted the non-inline function, nullRep, for the same reason given for - makeNull above. - (KJS::UString::append): Adopted makeNull for failure cases. - (KJS::UString::operator=): Ditto. - (KJS::UString::toDouble): Added a special case for converting single - character strings to numbers. We're doing this a ton of times while - running the base64 test. - (KJS::operator==): Added special cases so we can compare single-character - strings without calling memcmp. Later we might want to special case other - short lengths similarly. - (KJS::UString::makeNull): Added. - (KJS::UString::nullRep): Added. - * kjs/ustring.h: Added declarations for the nullRep and makeNull. Changed - expandedSize to be a static member function. Added a declaration of the - concatenate function. Removed the concatenation constructor. Rewrote - operator+ to use the concatenate function. - -2008-08-29 Anders Carlsson - - Build fix. - - * VM/Machine.cpp: - (KJS::getCPUTime): + * wtf/HashSet.h: -2008-08-29 Anders Carlsson +2009-06-24 Zoltan Horvath Reviewed by Darin Adler. - - When a machine is under heavy load, the Slow Script dialog often comes up many times and just gets in the way - - Instead of using clock time, use the CPU time spent executing the current thread when - determining if the script has been running for too long. - - * VM/Machine.cpp: - (KJS::getCPUTime): - (KJS::Machine::checkTimeout): - -2008-08-28 Cameron Zwarich - - Rubber-stamped by Sam Weinig. - - Change 'term' to 'expr' in variable names to standardize terminology. - - * kjs/nodes.cpp: - (KJS::BinaryOpNode::emitCode): - (KJS::ReverseBinaryOpNode::emitCode): - (KJS::ThrowableBinaryOpNode::emitCode): - * kjs/nodes.h: - (KJS::BinaryOpNode::BinaryOpNode): - (KJS::ReverseBinaryOpNode::ReverseBinaryOpNode): - (KJS::MultNode::): - (KJS::DivNode::): - (KJS::ModNode::): - (KJS::AddNode::): - (KJS::SubNode::): - (KJS::LeftShiftNode::): - (KJS::RightShiftNode::): - (KJS::UnsignedRightShiftNode::): - (KJS::LessNode::): - (KJS::GreaterNode::): - (KJS::LessEqNode::): - (KJS::GreaterEqNode::): - (KJS::ThrowableBinaryOpNode::): - (KJS::InstanceOfNode::): - (KJS::InNode::): - (KJS::EqualNode::): - (KJS::NotEqualNode::): - (KJS::StrictEqualNode::): - (KJS::NotStrictEqualNode::): - (KJS::BitAndNode::): - (KJS::BitOrNode::): - (KJS::BitXOrNode::): - * kjs/nodes2string.cpp: - (KJS::MultNode::streamTo): - (KJS::DivNode::streamTo): - (KJS::ModNode::streamTo): - (KJS::AddNode::streamTo): - (KJS::SubNode::streamTo): - (KJS::LeftShiftNode::streamTo): - (KJS::RightShiftNode::streamTo): - (KJS::UnsignedRightShiftNode::streamTo): - (KJS::LessNode::streamTo): - (KJS::GreaterNode::streamTo): - (KJS::LessEqNode::streamTo): - (KJS::GreaterEqNode::streamTo): - (KJS::InstanceOfNode::streamTo): - (KJS::InNode::streamTo): - (KJS::EqualNode::streamTo): - (KJS::NotEqualNode::streamTo): - (KJS::StrictEqualNode::streamTo): - (KJS::NotStrictEqualNode::streamTo): - (KJS::BitAndNode::streamTo): - (KJS::BitXOrNode::streamTo): - (KJS::BitOrNode::streamTo): - -2008-08-28 Alp Toker - - GTK+ dist/build fix. List newly added header files. - - * GNUmakefile.am: - -2008-08-28 Sam Weinig - - Reviewed by Oliver Hunt. - - Change to throw a ReferenceError at runtime instead of a ParseError - at parse time, when the left hand side expression of a for-in statement - is not an lvalue. + Inherits Vector class from FastAllocBase because it has been + instantiated by 'new' in JavaScriptCore/runtime/Structure.cpp:633. - * kjs/grammar.y: - * kjs/nodes.cpp: - (KJS::ForInNode::emitCode): - -2008-08-28 Alexey Proskuryakov - - Not reviewed, build fix (at least for OpenBSD, posssibly more). - - https://bugs.webkit.org/show_bug.cgi?id=20545 - missing #include in JavaScriptCore/VM/SamplingTool.cpp - - * VM/SamplingTool.cpp: add the missing include. - -2008-08-26 Kevin McCullough - - Reviewed by Geoff and Cameron. - - Hitting assertion in Register::codeBlock when - loading facebook (20516). - - - This was a result of my line numbers change. After a host function is - called the stack does not get reset correctly. - - Oddly this also appears to be a slight speedup on SunSpider. - - * VM/Machine.cpp: - (KJS::Machine::privateExecute): - -2008-08-26 Alexey Proskuryakov - - Reviewed by Geoff and Tim. - - Export new API methods. - - * JavaScriptCore.exp: - -2008-08-25 Kevin McCullough + * wtf/Vector.h: - Reviewed by Geoff, Tim and Mark. +2009-06-24 Norbert Leser - JSProfiler: It would be nice if the profiles - in the console said what file and line number they came from - - Lay the foundation for getting line numbers and other data from the - JavaScript engine. With the cleanup in kjs/ExecState this is actually - a slight performance improvement. + Reviewed by Maciej Stachoviak. - * JavaScriptCore.exp: Export retrieveLastCaller() for WebCore. - * JavaScriptCore.xcodeproj/project.pbxproj: - * VM/Machine.cpp: Now Host and JS functions set a call frame on the - exec state, so this and the profiler code were pulled out of the - branches. - (KJS::Machine::privateExecute): - (KJS::Machine::retrieveLastCaller): This get's the lineNumber, sourceID - and sourceURL for the previously called function. - * VM/Machine.h: - * kjs/ExecState.cpp: Remove references to JSFunction since it's not used - anywhere. - * kjs/ExecState.h: + The BytecodeGenerator objects were instantiated on stack, which takes up ~38kB per instance + (each instance includes copy of JSC::CodeBlock with large SymbolTable, etc.). + Specifically, since there is nested invocation (e.g., GlobalCode --> FunctionCode), + the stack overflows immediately on Symbian hardware (max. 80 kB). + Proposed change allocates generator objects on heap. + Performance impact (if any) should be negligible and change is proposed as general fix, + rather than ifdef'd for SYMBIAN. -2008-08-25 Alexey Proskuryakov + * parser/Nodes.cpp: + (JSC::ProgramNode::generateBytecode): + (JSC::EvalNode::generateBytecode): + (JSC::EvalNode::bytecodeForExceptionInfoReparse): + (JSC::FunctionBodyNode::generateBytecode): + (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse): - Reviewed by Darin Adler. +2009-06-23 Oliver Hunt - Ensure that JSGlobalContextRelease() performs garbage collection, even if there are other - contexts in the current context's group. + Reviewed by Gavin Barraclough. - This is only really necessary when the last reference is released, but there is no way to - determine that, and no harm in collecting slightly more often. + REGRESSION: Enumeration can skip new properties in cases of prototypes that have more than 64 (26593) + - * API/JSContextRef.cpp: (JSGlobalContextRelease): Explicitly collect the heap if it is not - being destroyed. + Do not attempt to cache structure chains if they contain a dictionary at any level. -2008-08-24 Cameron Zwarich + * interpreter/Interpreter.cpp: + (JSC::Interpreter::tryCachePutByID): + (JSC::Interpreter::tryCacheGetByID): + * jit/JITStubs.cpp: + (JSC::JITThunks::tryCachePutByID): + * runtime/Structure.cpp: + (JSC::Structure::getEnumerablePropertyNames): + (JSC::Structure::addPropertyTransition): + * runtime/StructureChain.cpp: + (JSC::StructureChain::isCacheable): + * runtime/StructureChain.h: - Reviewed by Oliver Hunt. +2009-06-23 Yong Li - Bug 20093: JSC shell does not clear exceptions after it executes toString on an expression - + Reviewed by George Staikos. - Clear exceptions after evaluating any code in the JSC shell. We do not - report exceptions that are caused by calling toString on the final - valued, but at least we avoid incorrect behaviour. + https://bugs.webkit.org/show_bug.cgi?id=26654 + Add the proper export define for the JavaScriptCore API when building for WINCE. - Also, print any exceptions that occurred while evaluating code at the - interactive prompt, not just while evaluating code from a file. + * API/JSBase.h: - * kjs/Shell.cpp: - (runWithScripts): - (runInteractive): +2009-06-23 Joe Mason -2008-08-24 Cameron Zwarich + Reviewed by Adam Treat. - Reviewed by Oliver. + Authors: Yong Li , Joe Mason - Remove an unnecessary RefPtr to a RegisterID. + https://bugs.webkit.org/show_bug.cgi?id=26611 + Implement currentThreadStackBase on WINCE by adding a global, + g_stackBase, which must be set to the address of a local variable + by the caller before calling any WebKit function that invokes JSC. - * kjs/nodes.cpp: - (KJS::DeleteBracketNode::emitCode): + * runtime/Collector.cpp: + (JSC::isPageWritable): + (JSC::getStackBase): + Starts at the top of the stack and returns the entire range of + consecutive writable pages as an estimate of the actual stack. + This will be much bigger than the actual stack range, so some + dead objects can't be collected, but it guarantees live objects + aren't collected prematurely. -2008-08-24 Mark Rowe + (JSC::currentThreadStackBase): + On WinCE, returns g_stackBase if set or call getStackBase as a + fallback if not. - Reviewed by Oliver Hunt. +2009-06-23 Oliver Hunt - Use the correct version number for when JSGlobalContextCreate was introduced. + Reviewed by Alexey Proskuryakov. - * API/JSContextRef.h: + Fix stupid performance problem in the LiteralParser -2008-08-23 Cameron Zwarich + The LiteralParser was making a new UString in order to use + toDouble, however UString's toDouble allows a much wider range + of numberic strings than the LiteralParser accepts, and requires + an additional heap allocation or two for the construciton of the + UString. To rectify this we just call WTF::dtoa directly using + a stack allocated buffer to hold the validated numeric literal. - Rubber-stamped by Mark Rowe. + * runtime/LiteralParser.cpp: + (JSC::LiteralParser::Lexer::lexNumber): + (JSC::LiteralParser::parse): + * runtime/LiteralParser.h: - Remove modelines. +2009-06-22 Oliver Hunt - * API/APICast.h: - * API/JSBase.cpp: - * API/JSCallbackConstructor.cpp: - * API/JSCallbackConstructor.h: - * API/JSCallbackFunction.cpp: - * API/JSCallbackFunction.h: - * API/JSCallbackObject.cpp: - * API/JSCallbackObject.h: - * API/JSCallbackObjectFunctions.h: - * API/JSClassRef.cpp: - * API/JSContextRef.cpp: - * API/JSObjectRef.cpp: - * API/JSProfilerPrivate.cpp: - * API/JSStringRef.cpp: - * API/JSStringRefBSTR.cpp: - * API/JSStringRefCF.cpp: - * API/JSValueRef.cpp: - * API/tests/JSNode.c: - * API/tests/JSNode.h: - * API/tests/JSNodeList.c: - * API/tests/JSNodeList.h: - * API/tests/Node.c: - * API/tests/Node.h: - * API/tests/NodeList.c: - * API/tests/NodeList.h: - * API/tests/minidom.c: - * API/tests/minidom.js: - * API/tests/testapi.c: - * API/tests/testapi.js: - * JavaScriptCore.pro: - * kjs/FunctionConstructor.h: - * kjs/FunctionPrototype.h: - * kjs/JSArray.h: - * kjs/JSString.h: - * kjs/JSWrapperObject.cpp: - * kjs/NumberConstructor.h: - * kjs/NumberObject.h: - * kjs/NumberPrototype.h: - * kjs/lexer.h: - * kjs/lookup.h: - * wtf/Assertions.cpp: - * wtf/Assertions.h: - * wtf/HashCountedSet.h: - * wtf/HashFunctions.h: - * wtf/HashIterators.h: - * wtf/HashMap.h: - * wtf/HashSet.h: - * wtf/HashTable.h: - * wtf/HashTraits.h: - * wtf/ListHashSet.h: - * wtf/ListRefPtr.h: - * wtf/Noncopyable.h: - * wtf/OwnArrayPtr.h: - * wtf/OwnPtr.h: - * wtf/PassRefPtr.h: - * wtf/Platform.h: - * wtf/RefPtr.h: - * wtf/RefPtrHashMap.h: - * wtf/RetainPtr.h: - * wtf/UnusedParam.h: - * wtf/Vector.h: - * wtf/VectorTraits.h: - * wtf/unicode/Unicode.h: - * wtf/unicode/icu/UnicodeIcu.h: + Reviewed by Alexey Proskuryakov. -2008-08-22 Cameron Zwarich + Bug 26640: JSON.stringify needs to special case Boolean objects + - Reviewed by Oliver. + Add special case handling of the Boolean object so we match current + ES5 errata. - Some cleanup to match our coding style. + * runtime/JSONObject.cpp: + (JSC::unwrapBoxedPrimitive): renamed from unwrapNumberOrString + (JSC::gap): + (JSC::Stringifier::appendStringifiedValue): - * VM/CodeGenerator.h: - * VM/Machine.cpp: - (KJS::Machine::privateExecute): - * kjs/ExecState.cpp: - * kjs/ExecState.h: - * kjs/completion.h: - * kjs/identifier.cpp: - (KJS::Identifier::equal): - (KJS::CStringTranslator::hash): - (KJS::CStringTranslator::equal): - (KJS::CStringTranslator::translate): - (KJS::UCharBufferTranslator::equal): - (KJS::UCharBufferTranslator::translate): - (KJS::Identifier::remove): - * kjs/operations.h: +2009-06-22 Oliver Hunt -2008-08-20 Alexey Proskuryakov + Reviewed by Darin Adler. - Windows build fix. + Bug 26591: Support revivers in JSON.parse + - * API/WebKitAvailability.h: Define DEPRECATED_ATTRIBUTE. + Add reviver support to JSON.parse. This completes the JSON object. -2008-08-19 Alexey Proskuryakov + * runtime/JSONObject.cpp: + (JSC::Walker::Walker): + (JSC::Walker::callReviver): + (JSC::Walker::walk): + (JSC::JSONProtoFuncParse): - Reviewed by Geoff Garen. +2009-06-21 Oliver Hunt - Bring back shared JSGlobalData and implicit locking, because too many clients rely on it. + Reviewed by Darin Adler. - * kjs/JSGlobalData.cpp: - (KJS::JSGlobalData::~JSGlobalData): - (KJS::JSGlobalData::JSGlobalData): Re-add shared instance. - (KJS::JSGlobalData::sharedInstanceExists): Ditto. - (KJS::JSGlobalData::sharedInstance): Ditto. - (KJS::JSGlobalData::sharedInstanceInternal): Ditto. + Bug 26592: Support standard toJSON functions + - * API/JSContextRef.h: Deprecated JSGlobalContextCreate(). Added a very conservative - description of its threading model (nothing is allowed). + Add support for the standard Date.toJSON function. - * API/JSContextRef.cpp: - (JSGlobalContextCreate): Use shared JSGlobalData. - (JSGlobalContextCreateInGroup): Support passing NULL group to request a unique one. - (JSGlobalContextRetain): Added back locking. - (JSGlobalContextRelease): Ditto. - (JSContextGetGlobalObject): Ditto. + * runtime/DatePrototype.cpp: + (JSC::dateProtoFuncToJSON): - * API/tests/minidom.c: (main): - * API/tests/testapi.c: (main): - Switched to JSGlobalContextCreateInGroup() to avoid deprecation warnings. +2009-06-21 Oliver Hunt - * JavaScriptCore.exp: Re-added JSLock methods. Added JSGlobalContextCreateInGroup (d'oh!). + Reviewed by Sam Weinig. - * API/JSBase.cpp: - (JSEvaluateScript): - (JSCheckScriptSyntax): - (JSGarbageCollect): - * API/JSCallbackConstructor.cpp: - (KJS::constructJSCallback): - * API/JSCallbackFunction.cpp: - (KJS::JSCallbackFunction::call): - * API/JSCallbackObjectFunctions.h: - (KJS::::init): - (KJS::::getOwnPropertySlot): - (KJS::::put): - (KJS::::deleteProperty): - (KJS::::construct): - (KJS::::hasInstance): - (KJS::::call): - (KJS::::getPropertyNames): - (KJS::::toNumber): - (KJS::::toString): - (KJS::::staticValueGetter): - (KJS::::callbackGetter): - * API/JSObjectRef.cpp: - (JSObjectMake): - (JSObjectMakeFunctionWithCallback): - (JSObjectMakeConstructor): - (JSObjectMakeFunction): - (JSObjectHasProperty): - (JSObjectGetProperty): - (JSObjectSetProperty): - (JSObjectGetPropertyAtIndex): - (JSObjectSetPropertyAtIndex): - (JSObjectDeleteProperty): - (JSObjectCallAsFunction): - (JSObjectCallAsConstructor): - (JSObjectCopyPropertyNames): - (JSPropertyNameArrayRelease): - (JSPropertyNameAccumulatorAddName): - * API/JSValueRef.cpp: - (JSValueIsEqual): - (JSValueIsInstanceOfConstructor): - (JSValueMakeNumber): - (JSValueMakeString): - (JSValueToNumber): - (JSValueToStringCopy): - (JSValueToObject): - (JSValueProtect): - (JSValueUnprotect): - * ForwardingHeaders/JavaScriptCore/JSLock.h: Added. - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - * kjs/AllInOneFile.cpp: - * kjs/JSGlobalData.h: - * kjs/JSGlobalObject.cpp: - (KJS::JSGlobalObject::~JSGlobalObject): - (KJS::JSGlobalObject::init): - * kjs/JSLock.cpp: Added. - (KJS::createJSLockCount): - (KJS::JSLock::lockCount): - (KJS::setLockCount): - (KJS::JSLock::JSLock): - (KJS::JSLock::lock): - (KJS::JSLock::unlock): - (KJS::JSLock::currentThreadIsHoldingLock): - (KJS::JSLock::DropAllLocks::DropAllLocks): - (KJS::JSLock::DropAllLocks::~DropAllLocks): - * kjs/JSLock.h: Added. - (KJS::JSLock::JSLock): - (KJS::JSLock::~JSLock): - * kjs/Shell.cpp: - (functionGC): - (jscmain): - * kjs/collector.cpp: - (KJS::Heap::~Heap): - (KJS::Heap::heapAllocate): - (KJS::Heap::setGCProtectNeedsLocking): - (KJS::Heap::protect): - (KJS::Heap::unprotect): - (KJS::Heap::collect): - * kjs/identifier.cpp: - * kjs/interpreter.cpp: - (KJS::Interpreter::checkSyntax): - (KJS::Interpreter::evaluate): - Re-added implicit locking. + Bug 26594: JSC needs to support Date.toISOString + -2008-08-19 Kevin McCullough + Add support for Date.toISOString. - Reviewed by Tim and Mark. + * runtime/DatePrototype.cpp: + (JSC::dateProtoFuncToISOString): - Implement DTrace hooks for dashcode and instruments. +2009-06-21 Oliver Hunt - * API/JSProfilerPrivate.cpp: Added. Expose SPI so that profiling can be - turned on from a client. The DTrace probes were added within the - profiler mechanism for performance reasons so the profiler must be - started to enable tracing. - (JSStartProfiling): - (JSEndProfiling): - * API/JSProfilerPrivate.h: Added. Ditto. - * JavaScriptCore.exp: Exposing the start/stop methods to clients. - * JavaScriptCore.xcodeproj/project.pbxproj: - * kjs/Tracing.d: Define the DTrace probes. - * kjs/Tracing.h: Ditto. - * profiler/ProfileGenerator.cpp: Implement the DTrace probes in the - profiler. - (KJS::ProfileGenerator::willExecute): - (KJS::ProfileGenerator::didExecute): + Reviewed by NOBODY (Build fix). -2008-08-19 Steve Falkenburg + Remove dead code. - Build fix. - - * kjs/operations.cpp: - (KJS::equal): + * runtime/LiteralParser.cpp: + (JSC::LiteralParser::parse): -2008-08-18 Timothy Hatcher +2009-06-21 Oliver Hunt - Fix an assertion when generating a heavy profile because the - empty value and deleted value of CallIdentifier where equal. + Reviewed by Darin Adler and Cameron Zwarich. - https://bugs.webkit.org/show_bug.cgi?id=20439 + Bug 26587: Support JSON.parse + - Reviewed by Dan Bernstein. + Extend the LiteralParser to support the full strict JSON + grammar, fix a few places where the grammar was incorrectly + lenient. Doesn't yet support the JSON.parse reviver function + but that does not block the JSON.parse functionality itself. - * profiler/CallIdentifier.h: Make the emptyValue for CallIdentifier - use empty strings for URL and function name. + * interpreter/Interpreter.cpp: + (JSC::Interpreter::callEval): + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncEval): + * runtime/JSONObject.cpp: + (JSC::JSONProtoFuncParse): + * runtime/LiteralParser.cpp: + (JSC::LiteralParser::Lexer::lex): + (JSC::isSafeStringCharacter): + (JSC::LiteralParser::Lexer::lexString): + (JSC::LiteralParser::parse): + * runtime/LiteralParser.h: + (JSC::LiteralParser::LiteralParser): + (JSC::LiteralParser::tryJSONParse): + (JSC::LiteralParser::): + (JSC::LiteralParser::Lexer::Lexer): -2008-08-12 Darin Adler +2009-06-21 David Levin - Reviewed by Geoff. + Reviewed by NOBODY (speculative build fix for windows). - - eliminate JSValue::type() + Simply removed some whitespace form this file to make windows build wtf and + hopefully copy the new MessageQueque.h so that WebCore picks it up. - This will make it slightly easier to change the JSImmediate design without - having to touch so many call sites. + * wtf/Assertions.cpp: - SunSpider says this change is a wash (looked like a slight speedup, but not - statistically significant). +2009-06-21 Drew Wilson - * API/JSStringRef.cpp: Removed include of JSType.h. - * API/JSValueRef.cpp: Removed include of JSType.h. - (JSValueGetType): Replaced use of JSValue::type() with - JSValue::is functions. + Reviewed by David Levin. - * JavaScriptCore.exp: Updated. + + Added support for multi-threaded MessagePorts. - * VM/JSPropertyNameIterator.cpp: Removed type() implementation. - (KJS::JSPropertyNameIterator::toPrimitive): Changed to take - PreferredPrimitiveType argument instead of JSType. - * VM/JSPropertyNameIterator.h: Ditto. + * wtf/MessageQueue.h: + (WTF::::appendAndCheckEmpty): + Added API to test whether the queue was empty before adding an element. + +2009-06-20 David D. Kilzer - * VM/Machine.cpp: - (KJS::fastIsNumber): Updated for name change. - (KJS::fastToInt32): Ditto. - (KJS::fastToUInt32): Ditto. - (KJS::jsAddSlowCase): Updated toPrimitive caller for change from - JSType to PreferredPrimitiveType. - (KJS::jsAdd): Replaced calls to JSValue::type() with calls to - JSValue::isString(). - (KJS::jsTypeStringForValue): Replaced calls to JSValue::type() - with multiple calls to JSValue::is -- we could make this a - virtual function instead if we want to have faster performance. - (KJS::Machine::privateExecute): Renamed JSImmediate::toTruncatedUInt32 - to JSImmediate::getTruncatedUInt32 for consistency with other functions. - Changed two calls of JSValue::type() to JSValue::isString(). + Fix namespace comment in SegmentedVector.h - * kjs/GetterSetter.cpp: - (KJS::GetterSetter::toPrimitive): Changed to take - PreferredPrimitiveType argument instead of JSType. - (KJS::GetterSetter::isGetterSetter): Added. - * kjs/GetterSetter.h: + * wtf/SegmentedVector.h: Updated namespace comment to reflect + new namespace after r44897. - * kjs/JSCell.cpp: - (KJS::JSCell::isString): Added. - (KJS::JSCell::isGetterSetter): Added. - (KJS::JSCell::isObject): Added. +2009-06-20 Zoltan Herczeg - * kjs/JSCell.h: Eliminated type function. Added isGetterSetter. - Made isString and isObject virtual. Changed toPrimitive to take - PreferredPrimitiveType argument instead of JSType. - (KJS::JSCell::isNumber): Use Heap::isNumber for faster performance. - (KJS::JSValue::isGetterSetter): Added. - (KJS::JSValue::toPrimitive): Changed to take - PreferredPrimitiveType argument instead of JSType. + Bug 24986: ARM JIT port + - * kjs/JSImmediate.h: Removed JSValue::type() and replaced - JSValue::toTruncatedUInt32 with JSValue::getTruncatedUInt32. - (KJS::JSImmediate::isEitherImmediate): Added. + Reviewed by Oliver Hunt. - * kjs/JSNotAnObject.cpp: - (KJS::JSNotAnObject::toPrimitive): Changed to take - PreferredPrimitiveType argument instead of JSType. - * kjs/JSNotAnObject.h: Ditto. - * kjs/JSNumberCell.cpp: - (KJS::JSNumberCell::toPrimitive): Ditto. - * kjs/JSNumberCell.h: - (KJS::JSNumberCell::toInt32): Renamed from fastToInt32. There's no - other "slow" version of this once you have a JSNumberCell, so there's - no need for "fast" in the name. It's a feature that this hides the - base class toInt32, which does the same job less efficiently (and has - an additional ExecState argument). - (KJS::JSNumberCell::toUInt32): Ditto. + An Iterator added for SegmentedVector. Currently + only the pre ++ operator is supported. - * kjs/JSObject.cpp: - (KJS::callDefaultValueFunction): Use isGetterSetter instead of type. - (KJS::JSObject::getPrimitiveNumber): Use PreferredPrimitiveType. - (KJS::JSObject::defaultValue): Ditto. - (KJS::JSObject::defineGetter): Use isGetterSetter. - (KJS::JSObject::defineSetter): Ditto. - (KJS::JSObject::lookupGetter): Ditto. - (KJS::JSObject::lookupSetter): Ditto. - (KJS::JSObject::toNumber): Use PreferredPrimitiveType. - (KJS::JSObject::toString): Ditto. - (KJS::JSObject::isObject): Added. + * wtf/SegmentedVector.h: + (WTF::SegmentedVectorIterator::~SegmentedVectorIterator): + (WTF::SegmentedVectorIterator::operator*): + (WTF::SegmentedVectorIterator::operator->): + (WTF::SegmentedVectorIterator::operator++): + (WTF::SegmentedVectorIterator::operator==): + (WTF::SegmentedVectorIterator::operator!=): + (WTF::SegmentedVectorIterator::operator=): + (WTF::SegmentedVectorIterator::SegmentedVectorIterator): + (WTF::SegmentedVector::alloc): + (WTF::SegmentedVector::begin): + (WTF::SegmentedVector::end): - * kjs/JSObject.h: - (KJS::JSObject::inherits): Call the isObject from JSCell; it's now - hidden by our override of isObject. - (KJS::JSObject::getOwnPropertySlotForWrite): Use isGetterSetter - instead of type. - (KJS::JSObject::getOwnPropertySlot): Ditto. - (KJS::JSObject::toPrimitive): Use PreferredPrimitiveType. +2009-06-20 Zoltan Herczeg - * kjs/JSString.cpp: - (KJS::JSString::toPrimitive): Use PreferredPrimitiveType. - (KJS::JSString::isString): Added. - * kjs/JSString.h: Ditto. + Bug 24986: ARM JIT port + - * kjs/JSValue.h: Removed type(), added isGetterSetter(). Added - PreferredPrimitiveType enum and used it as the argument for the - toPrimitive function. - (KJS::JSValue::getBoolean): Simplified a bit an removed a branch. + Reviewed by Oliver Hunt. - * kjs/collector.cpp: - (KJS::typeName): Changed to use JSCell::is functions instead of - calling JSCell::type. + Move SegmentedVector to /wtf subdirectory + and change "namespace JSC" to "namespace WTF" - * kjs/collector.h: - (KJS::Heap::isNumber): Renamed from fastIsNumber. + Additional build file updates by David Kilzer. - * kjs/nodes.h: Added now-needed include of JSType, since the type - is used here to record types of values in the tree. + * GNUmakefile.am: Updated path to SegmentedVector.h. + * JavaScriptCore.order: Updated SegmentedVector namespace from + JSC to WTF in mangled C++ method name. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + Removed reference to bytecompiler\SegmentedVector.h. + * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added reference to + wtf\SegmentedVector.h. + * JavaScriptCore.xcodeproj/project.pbxproj: Moved + SegmentedVector.h definition from bytecompiler subdirectory to + wtf subdirectory. + * bytecompiler/BytecodeGenerator.h: Updated #include path to + SegmentedVector.h and prepended WTF:: namespace to its use. + * parser/Lexer.h: Ditto. + * wtf/SegmentedVector.h: Renamed from JavaScriptCore/bytecompiler/SegmentedVector.h. + (WTF::SegmentedVector::SegmentedVector): + (WTF::SegmentedVector::~SegmentedVector): + (WTF::SegmentedVector::size): + (WTF::SegmentedVector::at): + (WTF::SegmentedVector::operator[]): + (WTF::SegmentedVector::last): + (WTF::SegmentedVector::append): + (WTF::SegmentedVector::removeLast): + (WTF::SegmentedVector::grow): + (WTF::SegmentedVector::clear): + (WTF::SegmentedVector::deleteAllSegments): + (WTF::SegmentedVector::segmentExistsFor): + (WTF::SegmentedVector::segmentFor): + (WTF::SegmentedVector::subscriptFor): + (WTF::SegmentedVector::ensureSegmentsFor): + (WTF::SegmentedVector::ensureSegment): - * kjs/operations.cpp: - (KJS::equal): Rewrote to no longer depend on type(). - (KJS::strictEqual): Ditto. +2009-06-19 Gavin Barraclough -2008-08-18 Kevin McCullough + Reviewed by NOBODY (build fix take 2 - rename FIELD_OFFSET to something that doesn't conflict with winnt.h). - Reviewed by Tim. + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + (JSC::JIT::emitGetVariableObjectRegister): + (JSC::JIT::emitPutVariableObjectRegister): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::emit_op_rshift): + (JSC::JIT::emitSlow_op_jnless): + (JSC::JIT::emitSlow_op_jnlesseq): + (JSC::JIT::compileBinaryArithOp): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCallInitializeCallFrame): + (JSC::JIT::compileOpCall): + * jit/JITInlineMethods.h: + (JSC::JIT::restoreArgumentReference): + (JSC::JIT::checkStructure): + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_instanceof): + (JSC::JIT::emit_op_get_scoped_var): + (JSC::JIT::emit_op_put_scoped_var): + (JSC::JIT::emit_op_construct_verify): + (JSC::JIT::emit_op_resolve_global): + (JSC::JIT::emit_op_jeq_null): + (JSC::JIT::emit_op_jneq_null): + (JSC::JIT::emit_op_to_jsnumber): + (JSC::JIT::emit_op_catch): + (JSC::JIT::emit_op_eq_null): + (JSC::JIT::emit_op_neq_null): + (JSC::JIT::emit_op_convert_this): + (JSC::JIT::emit_op_profile_will_call): + (JSC::JIT::emit_op_profile_did_call): + (JSC::JIT::emitSlow_op_get_by_val): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::emit_op_get_by_val): + (JSC::JIT::emit_op_put_by_val): + (JSC::JIT::emit_op_method_check): + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::emit_op_put_by_id): + (JSC::JIT::compilePutDirectOffset): + (JSC::JIT::compileGetDirectOffset): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompilePatchGetArrayLength): + * jit/JITStubs.cpp: + (JSC::JITThunks::JITThunks): - If there are no nodes in a profile all the time should be attributed to - (idle) +2009-06-19 Gavin Barraclough - * profiler/Profile.cpp: If ther are no nodes make sure we still process - the head. - (KJS::Profile::forEach): - * profiler/ProfileGenerator.cpp: Remove some useless code. - (KJS::ProfileGenerator::stopProfiling): + Reviewed by NOBODY (Windows build fix). -2008-08-18 Alexey Proskuryakov + * jit/JIT.h: + * jit/JITInlineMethods.h: - Reviewed by Maciej. +2009-06-19 Gabor Loki - Make JSGlobalContextRetain/Release actually work. + Reviewed by Gavin Barraclough. - * API/JSContextRef.cpp: - (JSGlobalContextRetain): - (JSGlobalContextRelease): - Ref/deref global data to give checking for globalData.refCount() some sense. + Reorganize ARM architecture specific macros. + Use PLATFORM_ARM_ARCH(7) instead of PLATFORM(ARM_V7). - * API/tests/testapi.c: (main): Added a test for this bug. + Bug 24986: ARM JIT port + - * kjs/JSGlobalData.cpp: - (KJS::JSGlobalData::~JSGlobalData): - While checking for memory leaks, found that JSGlobalData::emptyList has changed to - a pointer, but it was not destructed, causing a huge leak in run-webkit-tests --threaded. + * assembler/ARMv7Assembler.h: + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::Imm32::Imm32): + * assembler/MacroAssembler.h: + * assembler/MacroAssemblerCodeRef.h: + (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr): + * jit/ExecutableAllocator.h: + (JSC::ExecutableAllocator::cacheFlush): + * jit/JIT.h: + * jit/JITInlineMethods.h: + (JSC::JIT::restoreArgumentReferenceForTrampoline): + * jit/JITStubs.cpp: + * jit/JITStubs.h: + * wtf/Platform.h: + * yarr/RegexJIT.cpp: + (JSC::Yarr::RegexGenerator::generateEnter): + (JSC::Yarr::RegexGenerator::generateReturn): -2008-08-17 Cameron Zwarich +2009-06-19 Gavin Barraclough - Reviewed by Maciej. + Reviewed by Oliver Hunt. - Change the counting of constants so that preincrement and predecrement of - const local variables are considered unexpected loads. + Fix armv7 JIT build issues. - * kjs/nodes.cpp: - (KJS::PrefixResolveNode::emitCode): - * kjs/nodes.h: - (KJS::ScopeNode::neededConstants): + Unfortunate the arm compiler does not like the use of offsetof on JITStackFrame (since it now contains non POD types), + and the FIELD_OFFSET macro does not appear constantish enough for it to be happy with its use in COMPILE_ASSERT macros. -2008-08-17 Oliver Hunt + * Replace offsetofs with FIELD_OFFSETs (safe on C++ objects). + * Move COMPILE_ASSERTs defending layout of JITStackFrame structure on armv7 into JITThunks constructor. - Reviewed by Cameron Zwarich. + * jit/JIT.cpp: + * jit/JIT.h: + * jit/JITInlineMethods.h: + (JSC::JIT::restoreArgumentReference): + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_catch): + * jit/JITStubs.cpp: + (JSC::JITThunks::JITThunks): - In Gmail, a crash occurs at KJS::Machine::privateExecute() when applying list styling to text after a quote had been removed - +2009-06-19 Adam Treat - This crash was caused by "depth()" incorrectly determining the scope depth - of a 0 depth function without a full scope chain. Because such a function - would not have an activation the depth function would return the scope depth - of the parent frame, thus triggering an incorrect unwind. Any subsequent - look up that walked the scope chain would result in incorrect behaviour, - leading to a crash or incorrect variable resolution. This can only actually - happen in try...finally statements as that's the only path that can result in - the need to unwind the scope chain, but not force the function to need a - full scope chain. + Blind attempt at build fix. - The fix is simply to check for this case before attempting to walk the scope chain. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - * VM/Machine.cpp: - (KJS::depth): - (KJS::Machine::throwException): +2009-06-19 Zoltan Horvath -2008-08-17 Cameron Zwarich + Reviewed by Oliver Hunt. - Reviewed by Maciej. + Inherits CallIdentifier struct from FastAllocBase because it has been + instantiated by 'new' in JavaScriptCore/profiler/CallIdentifier.h:86. - Bug 20419: Remove op_jless - + * wtf/HashCountedSet.h: - Remove op_jless, which is rarely used now that we have op_loop_if_less. +2009-06-19 Adam Treat - * VM/CodeBlock.cpp: - (KJS::CodeBlock::dump): - * VM/CodeGenerator.cpp: - (KJS::CodeGenerator::emitJumpIfTrue): - * VM/Machine.cpp: - (KJS::Machine::privateExecute): - * VM/Opcode.h: + Reviewed by Oliver Hunt. -2008-08-17 Cameron Zwarich + https://bugs.webkit.org/show_bug.cgi?id=26540 + Modify the test shell to add a new function 'checkSyntax' that will + only parse the source instead of executing it. In this way we can test + pure parsing performance against some of the larger scripts in the wild. - Reviewed by Dan Bernstein. + * jsc.cpp: + (GlobalObject::GlobalObject): + (functionCheckSyntax): - Fix a typo in r35807 that is also causing build failures for - non-AllInOne builds. +2009-06-19 Zoltan Horvath - * kjs/NumberConstructor.cpp: + Reviewed by Darin Adler. + + Inherits HashCountedSet class from FastAllocBase because it has been + instantiated by 'new' in JavaScriptCore/runtime/Collector.cpp:1095. -2008-08-17 Geoffrey Garen + * wtf/HashCountedSet.h: - Reviewed by Cameron Zwarich. +2009-06-19 Yong Li - Made room for a free word in JSCell. - - SunSpider says no change. - - I changed JSCallbackObjectData, Arguments, JSArray, and RegExpObject to - store auxiliary data in a secondary structure. + Reviewed by George Staikos. - I changed InternalFunction to store the function's name in the property - map. - - I changed JSGlobalObjectData to use a virtual destructor, so WebCore's - JSDOMWindowBaseData could inherit from it safely. (It's a strange design - for JSDOMWindowBase to allocate an object that JSGlobalObject deletes, - but that's really our only option, given the size constraint.) - - I also added a bunch of compile-time ASSERTs, and removed lots of comments - in JSObject.h because they were often out of date, and they got in the - way of reading what was actually going on. - - Also renamed JSArray::getLength to JSArray::length, to match our style - guidelines. + https://bugs.webkit.org/show_bug.cgi?id=26558 + Declare these symbols extern for WINCE as they are provided by libce. -2008-08-16 Geoffrey Garen + * runtime/DateConstructor.cpp: + * runtime/DatePrototype.cpp: + (JSC::formatLocaleDate): - Reviewed by Oliver Hunt. - - Sped up property access for array.length and string.length by adding a - mechanism for returning a temporary value directly instead of returning - a pointer to a function that retrieves the value. - - Also removed some unused cruft from PropertySlot. - - SunSpider says 0.5% - 1.2% faster. +2009-06-19 Oliver Hunt - NOTE: This optimization is not a good idea in general, because it's - actually a pessimization in the case of resolve for assignment, - and it may get in the way of other optimizations in the future. - -2008-08-16 Dan Bernstein + Reviewed by Maciej Stachowiak. - Reviewed by Geoffrey Garen. + ScopeChain leak in interpreter builds - Disable dead code stripping in debug builds. + Move the Scopechain destruction code in JSFunction outside of the ENABLE(JIT) + path. - * Configurations/Base.xcconfig: - * JavaScriptCore.xcodeproj/project.pbxproj: + * runtime/JSFunction.cpp: + (JSC::JSFunction::~JSFunction): + * wtf/Platform.h: -2008-08-15 Mark Rowe +2009-06-19 Yong Li - Reviewed by Oliver Hunt. + Reviewed by George Staikos. - FastMallocZone's enumeration code makes assumptions about handling of remote memory regions that overlap + https://bugs.webkit.org/show_bug.cgi?id=26543 + Windows CE uses 'GetLastError' instead of 'errno.' - * wtf/FastMalloc.cpp: - (WTF::TCMalloc_Central_FreeList::enumerateFreeObjects): Don't directly compare pointers mapped into the local process with - a pointer that has not been mapped. Instead, calculate a local address for the pointer and compare with that. - (WTF::TCMallocStats::FreeObjectFinder::findFreeObjects): Pass in the remote address of the central free list so that it can - be used when calculating local addresses. - (WTF::TCMallocStats::FastMallocZone::enumerate): Ditto. + * interpreter/RegisterFile.h: + (JSC::RegisterFile::RegisterFile): + (JSC::RegisterFile::grow): -2008-08-15 Mark Rowe +2009-06-19 David Levin - Rubber-stamped by Geoff Garen. + Reviewed by NOBODY (Windows build fix). - Please include a _debug version of JavaScriptCore framework + Add export for Windows corresponding to OSX export done in r44844. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - * Configurations/Base.xcconfig: Factor out the debug-only settings so that they can shared - between the Debug configuration and debug Production variant. - * JavaScriptCore.xcodeproj/project.pbxproj: Enable the debug variant. +2009-06-18 Oliver Hunt -2008-08-15 Mark Rowe + Reviewed by Gavin "Viceroy of Venezuela" Barraclough. - Fix the 64-bit build. + Bug 26532: Native functions do not correctly unlink from optimised callsites when they're collected + - Add extra cast to avoid warnings about loss of precision when casting from - JSValue* to an integer type. + We need to make sure that each native function instance correctly unlinks any references to it + when it is collected. Allowing this to happen required a few changes: + * Every native function needs a codeblock to track the link information + * To have this codeblock, every function now also needs its own functionbodynode + so we no longer get to have a single shared instance. + * Identifying a host function is now done by looking for CodeBlock::codeType() == NativeCode - * kjs/JSImmediate.h: - (KJS::JSImmediate::intValue): - (KJS::JSImmediate::uintValue): + * JavaScriptCore.exp: + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::CodeBlock): + Constructor for NativeCode CodeBlock + (JSC::CodeBlock::derefStructures): + (JSC::CodeBlock::refStructures): + (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): + (JSC::CodeBlock::handlerForBytecodeOffset): + (JSC::CodeBlock::lineNumberForBytecodeOffset): + (JSC::CodeBlock::expressionRangeForBytecodeOffset): + (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset): + (JSC::CodeBlock::functionRegisterForBytecodeOffset): + (JSC::CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset): + (JSC::CodeBlock::hasGlobalResolveInfoAtBytecodeOffset): + (JSC::CodeBlock::setJITCode): + Add assertions to ensure we don't try and use NativeCode CodeBlocks as + a normal codeblock. -2008-08-15 Alexey Proskuryakov + * bytecode/CodeBlock.h: + (JSC::): + (JSC::CodeBlock::source): + (JSC::CodeBlock::sourceOffset): + (JSC::CodeBlock::evalCodeCache): + (JSC::CodeBlock::createRareDataIfNecessary): + More assertions. - Still fixing Windows build. + * jit/JIT.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + (JSC::JIT::linkCall): + Update logic to allow native function caching - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: Added OpaqueJSString - to yet another place. + * jit/JITStubs.cpp: + * parser/Nodes.cpp: + (JSC::FunctionBodyNode::createNativeThunk): + (JSC::FunctionBodyNode::isHostFunction): + * parser/Nodes.h: + * runtime/JSFunction.cpp: + (JSC::JSFunction::JSFunction): + (JSC::JSFunction::~JSFunction): + (JSC::JSFunction::mark): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::~JSGlobalData): + * runtime/JSGlobalData.h: -2008-08-15 Alexey Proskuryakov +2009-06-18 Gavin Barraclough - Trying to fix non-Apple builds. + Reviewed by NOBODY (Windows build fix). - * ForwardingHeaders/JavaScriptCore/OpaqueJSString.h: Added. + * wtf/DateMath.cpp: + (WTF::calculateUTCOffset): -2008-08-15 Gavin Barraclough +2009-06-18 Gavin Barraclough Reviewed by Geoff Garen. - Allow JSImmediate to hold 31 bit signed integer immediate values. The low two bits of a - JSValue* are a tag, with the tag value 00 indicating the JSValue* is a pointer to a - JSCell. Non-zero tag values used to indicate that the JSValue* is not a real pointer, - but instead holds an immediate value encoded within the pointer. This patch changes the - encoding so both the tag values 01 and 11 indicate the value is a signed integer, allowing - a 31 bit value to be stored. All other immediates are tagged with the value 10, and - distinguished by a secondary tag. + Timezone calculation incorrect in Venezuela. - Roughly +2% on SunSpider. + https://bugs.webkit.org/show_bug.cgi?id=26531 + Time is incorrectly reported to JavaScript in both Safari 3 and Firefox 3 - * kjs/JSImmediate.h: Encoding of JSImmediates has changed - see comment at head of file for - descption of new layout. + The problem is that we're calculating the timezone relative to 01/01/2000, + but the VET timezone changed from -4 hours to -4:30 hours on 12/09/2007. + According to the spec, section 15.9.1.9 states "the time since the beginning + of the year", presumably meaning the *current* year. Change the calculation + to be based on whatever the current year is, rather than a canned date. -2008-08-15 Alexey Proskuryakov + No performance impact. - More build fixes. + * wtf/DateMath.cpp: + (WTF::calculateUTCOffset): - * API/OpaqueJSString.h: Add a namespace to friend declaration to appease MSVC. - * API/JSStringRefCF.h: (JSStringCreateWithCFString) Cast UniChar* to UChar* explicitly. - * JavaScriptCore.exp: Added OpaqueJSString::create(const KJS::UString&) to fix WebCore build. +2009-06-18 Gavin Barraclough -2008-08-15 Alexey Proskuryakov + Rubber Stamped by Mark Rowe (originally reviewed by Sam Weinig). - Build fix. + (Reintroducing patch added in r44492, and reverted in r44796.) - * JavaScriptCore.xcodeproj/project.pbxproj: Marked OpaqueJSString as private + Change the implementation of op_throw so the stub function always modifies its + return address - if it doesn't find a 'catch' it will switch to a trampoline + to force a return from JIT execution. This saves memory, by avoiding the need + for a unique return for every op_throw. - * kjs/identifier.cpp: - (KJS::Identifier::checkSameIdentifierTable): - * kjs/identifier.h: - (KJS::Identifier::add): - Since checkSameIdentifierTable is exported for debug build's sake, gcc wants it to be - non-inline in release builds, too. + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_throw): + JITStubs::cti_op_throw now always changes its return address, + remove return code generated after the stub call (this is now + handled by ctiOpThrowNotCaught). + * jit/JITStubs.cpp: + (JSC::): + Add ctiOpThrowNotCaught definitions. + (JSC::JITStubs::DEFINE_STUB_FUNCTION): + Change cti_op_throw to always change its return address. + * jit/JITStubs.h: + Add ctiOpThrowNotCaught declaration. - * JavaScriptCore.exp: Don't export inline OpaqueJSString destructor. +2009-06-18 Kevin McCullough -2008-08-15 Alexey Proskuryakov + Reviewed by Oliver Hunt. - Reviewed by Geoff Garen. + REGRESSION: Breakpoints don't break in 64-bit - JSStringRef is created context-free, but can get linked to one via an identifier table, - breaking an implicit API contract. + - Exposed functions now needed by WebCore. - Made JSStringRef point to OpaqueJSString, which is a new string object separate from UString. + * JavaScriptCore.exp: - * API/APICast.h: Removed toRef/toJS conversions for JSStringRef, as this is no longer a - simple typecast. +2009-06-17 Darin Adler - * kjs/identifier.cpp: - (KJS::Identifier::checkSameIdentifierTable): - * kjs/identifier.h: - (KJS::Identifier::add): - (KJS::UString::checkSameIdentifierTable): - Added assertions to verify that an identifier is not being added to a different JSGlobalData. + Reviewed by Oliver Hunt. - * API/JSObjectRef.cpp: - (OpaqueJSPropertyNameArray::OpaqueJSPropertyNameArray): Changed OpaqueJSPropertyNameArray to - hold JSStringRefs. This is necessary to avoid having to construct (and leak) a new instance - in JSPropertyNameArrayGetNameAtIndex(), now that making a JSStringRef is not just a typecast. + Bug 26429: Make JSON.stringify non-recursive so it can handle objects + of arbitrary complexity + https://bugs.webkit.org/show_bug.cgi?id=26429 - * API/OpaqueJSString.cpp: Added. - (OpaqueJSString::create): - (OpaqueJSString::ustring): - (OpaqueJSString::identifier): - * API/OpaqueJSString.h: Added. - (OpaqueJSString::create): - (OpaqueJSString::characters): - (OpaqueJSString::length): - (OpaqueJSString::OpaqueJSString): - (OpaqueJSString::~OpaqueJSString): + For marking I decided not to use gcProtect, because this is inside the engine + so it's easy enough to just do marking. And that darned gcProtect does locking! + Oliver tried to convince me to used MarkedArgumentBuffer, but the constructor + for that class says "FIXME: Remove all clients of this API, then remove this API." - * API/JSBase.cpp: - (JSEvaluateScript): - (JSCheckScriptSyntax): - * API/JSCallbackObjectFunctions.h: - (KJS::::getOwnPropertySlot): - (KJS::::put): - (KJS::::deleteProperty): - (KJS::::staticValueGetter): - (KJS::::callbackGetter): - * API/JSStringRef.cpp: - (JSStringCreateWithCharacters): - (JSStringCreateWithUTF8CString): - (JSStringRetain): - (JSStringRelease): - (JSStringGetLength): - (JSStringGetCharactersPtr): - (JSStringGetMaximumUTF8CStringSize): - (JSStringGetUTF8CString): - (JSStringIsEqual): - * API/JSStringRefCF.cpp: - (JSStringCreateWithCFString): - (JSStringCopyCFString): - * API/JSValueRef.cpp: - (JSValueMakeString): - (JSValueToStringCopy): - Updated to use OpaqueJSString. + * runtime/Collector.cpp: + (JSC::Heap::collect): Add a call to JSONObject::markStringifiers. - * GNUmakefile.am: - * JavaScriptCore.exp: - * JavaScriptCore.pri: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * JavaScriptCoreSources.bkl: - Added OpaqueJSString. + * runtime/CommonIdentifiers.cpp: + (JSC::CommonIdentifiers::CommonIdentifiers): Added emptyIdentifier. + * runtime/CommonIdentifiers.h: Ditto. -2008-08-14 Kevin McCullough + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): Initialize firstStringifierToMark to 0. + * runtime/JSGlobalData.h: Added firstStringifierToMark. + + * runtime/JSONObject.cpp: Cut down the includes to the needed ones only. + (JSC::unwrapNumberOrString): Added. Helper for unwrapping number and string + objects to get their number and string values. + (JSC::ReplacerPropertyName::ReplacerPropertyName): Added. The class is used + to wrap an identifier or integer so we don't have to do any work unless we + actually call a replacer. + (JSC::ReplacerPropertyName::value): Added. + (JSC::gap): Added. Helper function for the Stringifier constructor. + (JSC::PropertyNameForFunctionCall::PropertyNameForFunctionCall): Added. + The class is used to wrap an identifier or integer so we don't have to + allocate a number or string until we actually call toJSON or a replacer. + (JSC::PropertyNameForFunctionCall::asJSValue): Added. + (JSC::Stringifier::Stringifier): Updated and moved out of the class + definition. Added code to hook this into a singly linked list for marking. + (JSC::Stringifier::~Stringifier): Remove from the singly linked list. + (JSC::Stringifier::mark): Mark all the objects in the holder stacks. + (JSC::Stringifier::stringify): Updated. + (JSC::Stringifier::appendQuotedString): Tweaked and streamlined a bit. + (JSC::Stringifier::toJSON): Renamed from toJSONValue. + (JSC::Stringifier::appendStringifiedValue): Renamed from stringify. + Added code to use the m_holderStack to do non-recursive stringify of + objects and arrays. This code also uses the timeout checker since in + pathological cases it could be slow even without calling into the + JavaScript virtual machine. + (JSC::Stringifier::willIndent): Added. + (JSC::Stringifier::indent): Added. + (JSC::Stringifier::unindent): Added. + (JSC::Stringifier::startNewLine): Added. + (JSC::Stringifier::Holder::Holder): Added. + (JSC::Stringifier::Holder::appendNextProperty): Added. This is the + function that handles the format of arrays and objects. + (JSC::JSONObject::getOwnPropertySlot): Moved this down to the bottom + of the file so the JSONObject class is not interleaved with the + Stringifier class. + (JSC::JSONObject::markStringifiers): Added. Calls mark. + (JSC::JSONProtoFuncStringify): Streamlined the code here. The code + to compute the gap string is now a separate function. + + * runtime/JSONObject.h: Made everything private. Added markStringifiers. + +2009-06-17 Oliver Hunt + + Reviewed by Gavin Barraclough. + + REGRESSION(r43849): Crash in cti_op_call_NotJSFunction when getting directions on maps.google.com + + Roll out r43849 as it appears that we cannot rely on the address of + an objects property storage being constant even if the structure is + unchanged. - Reviewed by Tim. + * jit/JIT.h: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetDirectOffset): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): - Notify of profile in console - - Profiles now have a unique ID so that they can be linked to the - console message that announces that a profile completed. +2009-06-17 Gavin Barraclough - * profiler/HeavyProfile.cpp: - (KJS::HeavyProfile::HeavyProfile): - * profiler/Profile.cpp: - (KJS::Profile::create): - (KJS::Profile::Profile): - * profiler/Profile.h: - (KJS::Profile::uid): - * profiler/ProfileGenerator.cpp: - (KJS::ProfileGenerator::create): - (KJS::ProfileGenerator::ProfileGenerator): - * profiler/ProfileGenerator.h: - * profiler/Profiler.cpp: - (KJS::Profiler::startProfiling): - * profiler/TreeProfile.cpp: - (KJS::TreeProfile::create): - (KJS::TreeProfile::TreeProfile): - * profiler/TreeProfile.h: + Rubber Stamped by Mark Rowe. -2008-08-13 Geoffrey Garen + Fully revert r44492 & r44748 while we fix a bug they cause on internal builds . - Reviewed by Oliver Hunt. - - Nixed a PIC branch from JSObject::getOwnPropertySlot, by forcing - fillGetterProperty, which references a global function pointer, - out-of-line. - - .2% SunSpider speedup, 4.3% access-nbody speedup, 8.7% speedup on a - custom property access benchmark for objects with one property. + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_throw): + * jit/JITStubs.cpp: + (JSC::): + (JSC::JITStubs::DEFINE_STUB_FUNCTION): + * jit/JITStubs.h: - * kjs/JSObject.cpp: - (KJS::JSObject::fillGetterPropertySlot): +2009-06-17 Gavin Barraclough -2008-08-13 Alp Toker + Reviewed by Mark Rowe. - Reviewed by Eric Seidel. + sunspider math-cordic.js exhibits different intermediate results running 32-bit vs. 64-bit - https://bugs.webkit.org/show_bug.cgi?id=20349 - WTF::initializeThreading() fails if threading is already initialized + On 64-bit, NaN-encoded values must be detagged before they can be used in rshift. - Fix threading initialization logic to support cases where - g_thread_init() has already been called elsewhere. + No performance impact. - Resolves database-related crashers reported in several applications. + * jit/JITArithmetic.cpp: + (JSC::JIT::emit_op_rshift): - * wtf/ThreadingGtk.cpp: - (WTF::initializeThreading): +2009-06-17 Adam Treat -2008-08-13 Brad Hughes + Reviewed by George Staikos. - Reviewed by Simon. + https://bugs.webkit.org/show_bug.cgi?id=23155 + Move WIN_CE -> WINCE as previously discussed with Qt WINCE folks. - Fix compiling of QtWebKit in release mode with the Intel C++ Compiler for Linux + * jsc.cpp: + (main): - The latest upgrade of the intel compiler allows us to compile all of - Qt with optimizations enabled (yay!). +2009-06-17 George Staikos - * JavaScriptCore.pro: + Reviewed by Adam Treat. -2008-08-12 Oliver Hunt + https://bugs.webkit.org/show_bug.cgi?id=23155 + Move WIN_CE -> WINCE as previously discussed with Qt WINCE folks. - Reviewed by Geoff Garen. + * config.h: + * jsc.cpp: + * wtf/Assertions.cpp: + * wtf/Assertions.h: + * wtf/CurrentTime.cpp: + (WTF::lowResUTCTime): + * wtf/DateMath.cpp: + (WTF::getLocalTime): + * wtf/MathExtras.h: + * wtf/Platform.h: + * wtf/StringExtras.h: + * wtf/Threading.h: + * wtf/win/MainThreadWin.cpp: - Add peephole optimisation to 'op_not... jfalse...' (eg. if(!...) ) +2009-06-17 Gavin Barraclough - This is a very slight win in sunspider, and a fairly substantial win - in hot code that does if(!...), etc. + Reviewed by Oliver Hunt. - * VM/CodeGenerator.cpp: - (KJS::CodeGenerator::retrieveLastUnaryOp): - (KJS::CodeGenerator::rewindBinaryOp): - (KJS::CodeGenerator::rewindUnaryOp): - (KJS::CodeGenerator::emitJumpIfFalse): - * VM/CodeGenerator.h: + ASSERT in JITStubs.cpp at appsaccess.apple.com -2008-08-12 Dan Bernstein + Remove PropertySlot::putValue - PropertySlots should only be used for getting, + not putting. Rename JSGlobalObject::getOwnPropertySlot to hasOwnPropertyForWrite, + which is what it really was being used to ask, and remove some other getOwnPropertySlot + & getOwnPropertySlotForWrite methods, which were unused and likely to lead to confusion. - - JavaScriptCore part of - Make fast*alloc() abort() on failure and add "try" variants that - return NULL on failure. + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::hasOwnPropertyForWrite): + * runtime/JSObject.h: + * runtime/JSStaticScopeObject.cpp: + * runtime/JSStaticScopeObject.h: + * runtime/PropertySlot.h: - Reviewed by Darin Adler. +2009-06-16 Gavin Barraclough - * JavaScriptCore.exp: Exported tryFastCalloc(). - * VM/RegisterFile.h: - (KJS::RegisterFile::RegisterFile): Removed an ASSERT(). - * kjs/JSArray.cpp: - (KJS::JSArray::putSlowCase): Changed to use tryFastRealloc(). - (KJS::JSArray::increaseVectorLength): Ditto. - * kjs/ustring.cpp: - (KJS::allocChars): Changed to use tryFastMalloc(). - (KJS::reallocChars): Changed to use tryFastRealloc(). - * wtf/FastMalloc.cpp: - (WTF::fastZeroedMalloc): Removed null checking of fastMalloc()'s result - and removed extra call to InvokeNewHook(). - (WTF::tryFastZeroedMalloc): Added. Uses tryFastMalloc(). - (WTF::tryFastMalloc): Renamed fastMalloc() to this. - (WTF::fastMalloc): Added. This version abort()s if allocation fails. - (WTF::tryFastCalloc): Renamed fastCalloc() to this. - (WTF::fastCalloc): Added. This version abort()s if allocation fails. - (WTF::tryFastRealloc): Renamed fastRealloc() to this. - (WTF::fastRealloc): Added. This version abort()s if allocation fails. - (WTF::do_malloc): Made this a function template. When the abortOnFailure - template parameter is set, the function abort()s on failure to allocate. - Otherwise, it sets errno to ENOMEM and returns zero. - (WTF::TCMallocStats::fastMalloc): Defined to abort() on failure. - (WTF::TCMallocStats::tryFastMalloc): Added. Does not abort() on - failure. - (WTF::TCMallocStats::fastCalloc): Defined to abort() on failure. - (WTF::TCMallocStats::tryFastCalloc): Added. Does not abort() on - failure. - (WTF::TCMallocStats::fastRealloc): Defined to abort() on failure. - (WTF::TCMallocStats::tryFastRealloc): Added. Does not abort() on - failure. - * wtf/FastMalloc.h: Declared the "try" variants. + Reviewed by Oliver hunt. -2008-08-11 Adam Roben + Temporarily partially disable r44492, since this is causing some problems on internal builds. - Move WTF::notFound into its own header so that it can be used - independently of Vector + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_throw): + * jit/JITStubs.cpp: + (JSC::JITStubs::DEFINE_STUB_FUNCTION): - Rubberstamped by Darin Adler. +2009-06-16 Sam Weinig - * JavaScriptCore.vcproj/WTF/WTF.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - Added NotFound.h to the project. - * wtf/NotFound.h: Added. Moved the notFound constant here... - * wtf/Vector.h: ...from here. + Fix windows build. -2008-08-11 Alexey Proskuryakov + * jit/JIT.cpp: + (JSC::JIT::JIT): - Reviewed by Mark Rowe. +2009-06-16 Sam Weinig - REGRESSION: PhotoBooth hangs after launching under TOT Webkit + Reviewed by Oliver Hunt. - * API/JSContextRef.cpp: (JSGlobalContextRelease): Corrected a comment. + Initialize m_bytecodeIndex to -1 in JIT, and correctly initialize + it for each type of stub using the return address to find the correct + offset. - * kjs/collector.cpp: (KJS::Heap::~Heap): Ensure that JSGlobalData is not deleted while - sweeping the heap. + * jit/JIT.cpp: + (JSC::JIT::JIT): + * jit/JIT.h: + (JSC::JIT::compileGetByIdProto): + (JSC::JIT::compileGetByIdSelfList): + (JSC::JIT::compileGetByIdProtoList): + (JSC::JIT::compileGetByIdChainList): + (JSC::JIT::compileGetByIdChain): + (JSC::JIT::compilePutByIdTransition): + (JSC::JIT::compileCTIMachineTrampolines): + (JSC::JIT::compilePatchGetArrayLength): + * jit/JITStubCall.h: + (JSC::JITStubCall::call): -== Rolled over to ChangeLog-2008-08-10 == +== Rolled over to ChangeLog-2009-06-16 == diff --git a/src/3rdparty/webkit/JavaScriptCore/ChangeLog-2007-10-14 b/src/3rdparty/webkit/JavaScriptCore/ChangeLog-2007-10-14 index a91f1ff..693f966 100644 --- a/src/3rdparty/webkit/JavaScriptCore/ChangeLog-2007-10-14 +++ b/src/3rdparty/webkit/JavaScriptCore/ChangeLog-2007-10-14 @@ -756,7 +756,7 @@ * wtf/Platform.h: Also test if __arm__ is defined. -2007-08-25 Peter Kasting +2007-08-25 Peter Kasting Reviewed by Maciej Stachowiak. @@ -766,7 +766,7 @@ * wtf/Vector.h: (WTF::Vector::operator[]): Only provide versions of operator[] that takes a size_t argument. -2007-08-25 Peter Kasting +2007-08-25 Peter Kasting Reviewed by Sam Weinig. @@ -786,7 +786,7 @@ * kjs/object.cpp: -2007-08-15 Peter Kasting +2007-08-15 Peter Kasting Reviewed by Darin. @@ -4435,7 +4435,7 @@ Interestingly, even the single-threaded testkjs shows a speed gain from removing the pthread_is_threaded_np() short-circuit. Not sure why. -2007-03-04 Don Gibson +2007-03-04 Peter Kasting Reviewed by Nikolas Zimmermann. diff --git a/src/3rdparty/webkit/JavaScriptCore/ChangeLog-2009-06-16 b/src/3rdparty/webkit/JavaScriptCore/ChangeLog-2009-06-16 new file mode 100644 index 0000000..52d3c36 --- /dev/null +++ b/src/3rdparty/webkit/JavaScriptCore/ChangeLog-2009-06-16 @@ -0,0 +1,39978 @@ +2009-06-15 Gavin Barraclough + + Rubber Stamped by Sam Weinig. + + Rename PatchBuffer to LinkBuffer. Previously our terminology has been a little + mixed up, but we have decided to fix on refering to the process that takes place + at the end of code generation as 'linking', and on any modifications that take + place later (and once the code has potentially already been executed) as 'patching'. + + However, the term 'PatchBuffer' is already in use, and needs to be repurposed. + + To try to minimize confusion, we're going to switch the terminology over in stages, + so for now we'll refer to later modifications as 'repatching'. This means that the + new 'PatchBuffer' has been introduced with the name 'RepatchBuffer' instead. + + This patch renames the old 'PatchBuffer' to 'LinkBuffer'. We'll leave ToT in this + state for a week or so to try to avoid to much overlap of the meaning of the term + 'PatchBuffer', then will come back and rename 'RepatchBuffer'. + + * assembler/ARMv7Assembler.h: + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::LinkBuffer::LinkBuffer): + (JSC::AbstractMacroAssembler::LinkBuffer::~LinkBuffer): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + * yarr/RegexJIT.cpp: + (JSC::Yarr::RegexGenerator::compile): + +2009-06-15 Gavin Barraclough + + Reviewed by Sam Weinig. + + Having moved most of their functionality into the RepatchBuffer class, + we can simplify the CodeLocation* classes. + + The CodeLocation* classes are currently a tangle of templatey and friendly + badness, burried in the middle of AbstractMacroAssembler. Having moved + the ability to repatch out into RepatchBufer they are now do-nothing wrappers + on CodePtr (MacroAssemblerCodePtr), that only exist to provide type-safety. + + Simplify the code, and move them off into their own header. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::PatchBuffer::patch): + * assembler/CodeLocation.h: Copied from assembler/AbstractMacroAssembler.h. + (JSC::CodeLocationCommon::CodeLocationCommon): + (JSC::CodeLocationInstruction::CodeLocationInstruction): + (JSC::CodeLocationLabel::CodeLocationLabel): + (JSC::CodeLocationJump::CodeLocationJump): + (JSC::CodeLocationCall::CodeLocationCall): + (JSC::CodeLocationNearCall::CodeLocationNearCall): + (JSC::CodeLocationDataLabel32::CodeLocationDataLabel32): + (JSC::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr): + (JSC::CodeLocationCommon::instructionAtOffset): + (JSC::CodeLocationCommon::labelAtOffset): + (JSC::CodeLocationCommon::jumpAtOffset): + (JSC::CodeLocationCommon::callAtOffset): + (JSC::CodeLocationCommon::nearCallAtOffset): + (JSC::CodeLocationCommon::dataLabelPtrAtOffset): + (JSC::CodeLocationCommon::dataLabel32AtOffset): + * assembler/MacroAssemblerCodeRef.h: + (JSC::MacroAssemblerCodePtr::operator!): + * bytecode/CodeBlock.h: + (JSC::getStructureStubInfoReturnLocation): + (JSC::getCallLinkInfoReturnLocation): + (JSC::getMethodCallLinkInfoReturnLocation): + * bytecode/Instruction.h: + * bytecode/JumpTable.h: + (JSC::StringJumpTable::ctiForValue): + (JSC::SimpleJumpTable::ctiForValue): + * bytecode/StructureStubInfo.h: + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitCatch): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + * jit/JITStubs.cpp: + (JSC::JITStubs::DEFINE_STUB_FUNCTION): + (JSC::JITStubs::getPolymorphicAccessStructureListSlot): + +2009-06-15 Gavin Barraclough + + Reviewed by Sam Weinig. + + Having introduced the RepatchBuffer, ProcessorReturnAddress is now a do-nothing + wrapper around ReturnAddressPtr. Remove it. In tugging on this piece of string + it made sense to roll out the use of ReturnAddressPtr a little further into + JITStubs (which had always been the intention). + + No performance impact. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::RepatchBuffer::relinkCallerToTrampoline): + (JSC::AbstractMacroAssembler::RepatchBuffer::relinkCallerToFunction): + (JSC::AbstractMacroAssembler::RepatchBuffer::relinkNearCallerToTrampoline): + * assembler/MacroAssemblerCodeRef.h: + (JSC::ReturnAddressPtr::ReturnAddressPtr): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::getStubInfo): + (JSC::CodeBlock::getCallLinkInfo): + (JSC::CodeBlock::getMethodCallLinkInfo): + (JSC::CodeBlock::getBytecodeIndex): + * interpreter/Interpreter.cpp: + (JSC::bytecodeOffsetForPC): + * jit/JIT.cpp: + (JSC::ctiPatchNearCallByReturnAddress): + (JSC::ctiPatchCallByReturnAddress): + * jit/JIT.h: + (JSC::JIT::compileGetByIdProto): + (JSC::JIT::compileGetByIdChain): + (JSC::JIT::compilePutByIdTransition): + (JSC::JIT::compilePatchGetArrayLength): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::patchGetByIdSelf): + (JSC::JIT::patchPutByIdReplace): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdChain): + * jit/JITStubs.cpp: + (JSC::JITThunks::tryCachePutByID): + (JSC::JITThunks::tryCacheGetByID): + (JSC::StackHack::StackHack): + (JSC::returnToThrowTrampoline): + (JSC::throwStackOverflowError): + (JSC::JITStubs::DEFINE_STUB_FUNCTION): + * jit/JITStubs.h: + (JSC::): + (JSC::JITStackFrame::returnAddressSlot): + * runtime/JSGlobalData.h: + +2009-06-15 Simon Fraser + + Reviewed by Mark Rowe. + + + + Define ENABLE_3D_RENDERING when building on 10.6, and move ENABLE_3D_RENDERING + switch from config.h to wtf/Platform.h. + + * Configurations/FeatureDefines.xcconfig: + * wtf/Platform.h: + +2009-06-15 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Move repatching methods into a set of methods on a class. This will allow us to + coallesce memory reprotection calls. Really, we want this class to be called + PatchBuffer, we want the class PatchBuffer to be called LinkBuffer, we want both + to be memblers of MacroAssembler rather then AbstractMacroAssembler, we don't + want the CodeLocationFoo types anymore (they are now only really there to provide + type safety, and that is completely undermined by the way we use offsets). Then + the link & patch buffers should delegate the actual patching calls to the + architecture-specific layer of the MacroAssembler. Landing all these changes as a + sequence of patches. + + No performance impact. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::CodeLocationCall::CodeLocationCall): + (JSC::AbstractMacroAssembler::CodeLocationNearCall::CodeLocationNearCall): + (JSC::AbstractMacroAssembler::CodeLocationNearCall::calleeReturnAddressValue): + (JSC::AbstractMacroAssembler::RepatchBuffer::RepatchBuffer): + (JSC::AbstractMacroAssembler::RepatchBuffer::relink): + (JSC::AbstractMacroAssembler::RepatchBuffer::repatch): + (JSC::AbstractMacroAssembler::RepatchBuffer::relinkCallerToTrampoline): + (JSC::AbstractMacroAssembler::RepatchBuffer::relinkCallerToFunction): + (JSC::AbstractMacroAssembler::RepatchBuffer::relinkNearCallerToTrampoline): + (JSC::AbstractMacroAssembler::RepatchBuffer::repatchLoadPtrToLEA): + * jit/JIT.cpp: + (JSC::ctiPatchNearCallByReturnAddress): + (JSC::ctiPatchCallByReturnAddress): + (JSC::JIT::unlinkCall): + (JSC::JIT::linkCall): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::patchGetByIdSelf): + (JSC::JIT::patchMethodCallProto): + (JSC::JIT::patchPutByIdReplace): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + +2009-06-15 Gavin Barraclough + + Reviewed by Geoff Hunt & Oliver Garen. + + We are currently generating two copies of the slow path for op_call for no reason. Stop that. + + Originally op_call used two slow paths since the first set up the pointer to the CallLinkInfo + for use when linking. However this is now looked up using the return address (as we do for + property accesses) so the two paths are now identical. + + No performance impact, reduces memory footprint. + + * bytecode/CodeBlock.h: + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + (JSC::JIT::linkCall): + * jit/JIT.h: + * jit/JITCall.cpp: + (JSC::JIT::compileOpCallSlowCase): + * jit/JITStubs.cpp: + (JSC::JITStubs::DEFINE_STUB_FUNCTION): + +2009-06-12 Dave Hyatt + + Reviewed by Anders Carlsson. + + https://bugs.webkit.org/show_bug.cgi?id=26373 + + Add a new class to Threading in wtf called ReadWriteLock that handles single writer/multiple reader locking. + Provide a pthreads-only implementation of the lock for now, as this class is only going to be used + on Snow Leopard at first. + + * wtf/Threading.h: + (WTF::ReadWriteLock::impl): + * wtf/ThreadingPthreads.cpp: + (WTF::ReadWriteLock::ReadWriteLock): + (WTF::ReadWriteLock::~ReadWriteLock): + (WTF::ReadWriteLock::readLock): + (WTF::ReadWriteLock::tryReadLock): + (WTF::ReadWriteLock::writeLock): + (WTF::ReadWriteLock::tryWriteLock): + (WTF::ReadWriteLock::unlock): + +2009-06-12 Oliver Hunt + + Reviewed by Geoff Garen. + + Make LiteralParser non-recursive + + Convert LiteralParser from using a simple recursive descent parser + to a hand rolled PDA. Relatively simple conversion, but required + modifications to MarkedArgumentBuffer to make it more suitable as + a generic marked vector. I'll refactor and rename MarkedArgumentBuffer + in future as there are many other cases where it will be useful to + have such a class. + + * runtime/ArgList.h: + (JSC::MarkedArgumentBuffer::MarkedArgumentBuffer): + (JSC::MarkedArgumentBuffer::append): + (JSC::MarkedArgumentBuffer::removeLast): + (JSC::MarkedArgumentBuffer::last): + * runtime/LiteralParser.cpp: + (JSC::LiteralParser::parse): + * runtime/LiteralParser.h: + (JSC::LiteralParser::LiteralParser): + (JSC::LiteralParser::tryLiteralParse): + (JSC::LiteralParser::): + +2009-06-12 David Levin + + Reviewed by NOBODY (build fix for windows). + + Adjust the exports for JSC on Windows like what was done for OSX in + the previous commit. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-06-12 David Levin + + Reviewed by Darin Adler. + + UString shouldn't create sharedBuffer for SmallStrings. + https://bugs.webkit.org/show_bug.cgi?id=26360 + + The methods changed are not used by JSC, so there is no JS perf impact. However, + there is a potential DOM perf impact, so I re-ran several of the tests that + I ran previously and ensured that the perf stay the same which caused me to + adjust the minLengthToShare. + + * JavaScriptCore.exp: + * runtime/UString.cpp: + (JSC::UString::Rep::sharedBuffer): + Determines if the buffer being shared is big enough before doing so. + Previously, BaseString::sharedBuffer was called but it would only know + the length of the base string (BaseString::len) which may not be the same + as the string being shared (Rep::len). + (JSC::UString::BaseString::sharedBuffer): + This is now only be used by Rep::sharedBuffer. which does the length check. + * runtime/UString.h: + +2009-06-12 Dimitri Glazkov + + Reviewed by Eric Seidel. + + https://bugs.webkit.org/show_bug.cgi?id=26191 + Remove xmath include in MathExtras.h, because it is not needed and also + breaks VS2008 builds with TR1 turned on. + + * wtf/MathExtras.h: Removed xmath include. + +2009-06-12 Peter Kasting + + Reviewed by Eric Seidel. + + * ChangeLog-2007-10-14: Change pseudonym "Don Gibson" to me (was used while Google Chrome was not public); update my email address. + +2009-06-12 Kevin Ollivier + + wx build fix. Adding JSONObject.cpp to the build. + + * JavaScriptCoreSources.bkl: + +2009-06-12 Laszlo Gombos + + Reviewed by Jan Michael Alonzo. + + [Qt] Fix build break + https://bugs.webkit.org/show_bug.cgi?id=26340 + + * JavaScriptCore.pri: Add JSONObject.cpp to LUT files. + +2009-06-11 Oliver Hunt + + Reviewed by NOBODY (build fix). + + Lower stringify recursion limit to deal with small windows stack. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * runtime/JSONObject.cpp: + (JSC::Stringifier::): + +2009-06-11 Laszlo Gombos + + Reviewed by Holger Freyther. + + Fix compilation warnings + + + * wtf/ThreadingNone.cpp: + (WTF::ThreadCondition::wait): Fix compilation warning. + (WTF::ThreadCondition::timedWait): Ditto. + +2009-06-10 Brent Fulgham + + Build fix for Windows target. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + Correct missing tag after @r44550 that prevents the + project from being loaded in the Visual Studio IDE. + +2009-06-09 Gavin Barraclough + + Rubber Stamped by Mark Rowe. + + Tidy up a couple of comments. + + * assembler/ARMv7Assembler.h: + Fix date in copyright, neaten up a couple of comments. + * assembler/MacroAssemblerARMv7.h: + Fix date in copyright. + +2009-06-07 Oliver Hunt + + Reviewed by Sam Weinig. + + Bug 26249: Support JSON.stringify + + + Implement JSON.stringify. This patch handles all the semantics of the ES5 + JSON.stringify function, including replacer functions and arrays and both + string and numeric gap arguments. + + Currently uses a clamped recursive algorithm basically identical to the spec + description but with a few minor tweaks for performance and corrected semantics + discussed in the es-discuss mailing list. + + * DerivedSources.make: + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * interpreter/CallFrame.h: + (JSC::ExecState::jsonTable): + * runtime/CommonIdentifiers.h: + add toJSON to the list of common identifiers + + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::~JSGlobalData): + * runtime/JSGlobalData.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + Add support for the JSON object lookup table + + * runtime/JSONObject.cpp: Added. + (JSC::): + (JSC::JSONObject::getOwnPropertySlot): + (JSC::Stringifier::): + (JSC::Stringifier::Stringifier): + (JSC::Stringifier::stringify): + (JSC::Stringifier::appendString): + + (JSC::Stringifier::StringKeyGenerator::StringKeyGenerator): + (JSC::Stringifier::StringKeyGenerator::getKey): + (JSC::Stringifier::IntKeyGenerator::IntKeyGenerator): + (JSC::Stringifier::IntKeyGenerator::getKey): + These KeyGenerator classes are used to abstract away the lazy evaluation of keys for + toJSON and replacer functions. + + (JSC::Stringifier::toJSONValue): + (JSC::Stringifier::stringifyArray): + (JSC::Stringifier::stringifyObject): + (JSC::JSONProtoFuncStringify): + * runtime/JSONObject.h: Added. + (JSC::JSONObject:::JSObject): + (JSC::JSONObject::classInfo): + (JSC::JSONObject::createStructure): + +2009-06-09 Gavin Barraclough + + Reviewed by Geoff Garen. + + Enable JIT_OPTIMIZE_CALL & JIT_OPTIMIZE_METHOD_CALLS on ARMv7 platforms. + + These optimizations function correctly with no further changes. + + * wtf/Platform.h: + Change to enable JIT_OPTIMIZE_CALL & JIT_OPTIMIZE_METHOD_CALLS. + +2009-06-09 Gavin Barraclough + + Not Reviewed, build fix. + + * assembler/MacroAssemblerARMv7.h: + +2009-06-09 Gavin Barraclough + + Reviewed by Geoff Garen. + + Enable JIT_OPTIMIZE_ARITHMETIC on ARMv7 platforms. + + Temporarily split support for 'branchTruncateDoubleToInt32' onto its own switch + ('supportsFloatingPointTruncate'). See comment in MacroAssemblerARMv7, we need + to work out wherther we are going to be able to support the current interface on + all platforms, or whether this should be refactored. + + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::supportsFloatingPoint): + Add implementation of supportsFloatingPointTruncate (returns true). + (JSC::MacroAssemblerARMv7::supportsFloatingPointTruncate): + Add implementation of supportsFloatingPointTruncate (returns false). + (JSC::MacroAssemblerARMv7::loadDouble): + (JSC::MacroAssemblerARMv7::storeDouble): + (JSC::MacroAssemblerARMv7::addDouble): + (JSC::MacroAssemblerARMv7::subDouble): + (JSC::MacroAssemblerARMv7::mulDouble): + (JSC::MacroAssemblerARMv7::convertInt32ToDouble): + (JSC::MacroAssemblerARMv7::branchDouble): + Implement FP code genertion operations. + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::supportsFloatingPointTruncate): + Add implementation of supportsFloatingPointTruncate (returns true). + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::supportsFloatingPointTruncate): + Add implementation of supportsFloatingPointTruncate (returns true). + * jit/JITArithmetic.cpp: + (JSC::JIT::emit_op_rshift): + Changed to call supportsFloatingPointTruncate(). + (JSC::JIT::emitSlow_op_rshift): + Changed to call supportsFloatingPointTruncate(). + * wtf/Platform.h: + Change to enable JIT_OPTIMIZE_ARITHMETIC. + +2009-06-09 Gavin Barraclough + + Reviewed by Mark Rowe & Geoff Garen. + + Enable JIT_OPTIMIZE_PROPERTY_ACCESS on ARMv7 platforms. + + Firm up interface for planting load intructions that will be repatched by + repatchLoadPtrToLEA(). This method should now no longer be applied to just + any loadPtr instruction. + + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::loadPtrWithPatchToLEA): + Implement loadPtrWithPatchToLEA interface (plants a load with a fixed width address). + (JSC::MacroAssemblerARMv7::move): + (JSC::MacroAssemblerARMv7::nearCall): + (JSC::MacroAssemblerARMv7::call): + (JSC::MacroAssemblerARMv7::moveWithPatch): + (JSC::MacroAssemblerARMv7::tailRecursiveCall): + Switch to use common method 'moveFixedWidthEncoding()' to perform fixed width (often patchable) loads. + (JSC::MacroAssemblerARMv7::moveFixedWidthEncoding): + Move an immediate to a register, always plants movT3/movt instruction pair. + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::loadPtrWithPatchToLEA): + Implement loadPtrWithPatchToLEA interface (just a regular 32-bit load on x86). + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::loadPtrWithPatchToLEA): + Implement loadPtrWithPatchToLEA interface (just a regular 64-bit load on x86_64). + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::emit_op_put_by_id): + * wtf/Platform.h: + Change to enable JIT_OPTIMIZE_PROPERTY_ACCESS. + +2009-06-08 Gavin Barraclough + + Reviewed by Geoff Garen. + + Enable JS language JIT for ARM thumb2 platforms. Add ARMv7 specific + asm & constants, add appropriate configuration switches to Platform.h. + + Landing this disabled until jump linking is completed (see YARR jit patch). + + * assembler/MacroAssemblerARMv7.h: + (JSC::MacroAssemblerARMv7::load32): + Fix: should load pointer with ImmPtr not Imm32. + (JSC::MacroAssemblerARMv7::store32): + Fix: should load pointer with ImmPtr not Imm32. + (JSC::MacroAssemblerARMv7::move): + Fix: When moving an Imm32 that is actually a pointer, should call movT3() + not mov(), to ensure code generation is repeatable (for exception handling). + * jit/JIT.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + Disable JIT_OPTIMIZE_NATIVE_CALL specific code generation if the optimization is not enabled. + * jit/JIT.h: + Add ARMv7 specific values of constants & register names. + * jit/JITInlineMethods.h: + (JSC::JIT::preverveReturnAddressAfterCall): + (JSC::JIT::restoreReturnAddressBeforeReturn): + (JSC::JIT::restoreArgumentReferenceForTrampoline): + Implement for ARMv7 (move value to/from lr). + * jit/JITStubs.cpp: + Add JIT entry/thow trampolines, add macro to add thunk wrapper around stub routines. + * jit/JITStubs.h: + (JSC::JITStackFrame::returnAddressSlot): + Add ARMv7 stack frame object. + * wtf/Platform.h: + Add changes necessary to allow JIT to build on this platform, disabled. + +2009-06-08 Mark Rowe + + Speculative GTK build fix. + + * wtf/DateMath.cpp: + +2009-06-08 Gavin Barraclough + + Reviewed by Mark Rowe. + + Previous patch caused a regression. + + Restructure so no new (empty, inline) function calls are added on x86. + + * jit/ExecutableAllocator.h: + (JSC::ExecutableAllocator::makeWritable): + (JSC::ExecutableAllocator::makeExecutable): + (JSC::ExecutableAllocator::reprotectRegion): + (JSC::ExecutableAllocator::cacheFlush): + +2009-06-08 Dimitri Glazkov + + Unreviewed, GTK build fix (thanks, bdash). + + * GNUmakefile.am: Moved DateMath with all other wtf kin. + +2009-06-08 Gavin Barraclough + + Reviewed by Geoff Garen. + + Add (incomplete) support to YARR for running with the jit enabled + on Arm thumb2 platforms. Adds new Assembler/MacroAssembler classes, + along with cache flushing support, tweaks to MacroAssemblerCodePtr + to support decorated thumb code pointers, and new enter/exit code + to YARR jit for the platform. + + Support for this platform is still under development - the assembler + currrently only supports planting and linking jumps with a 16Mb range. + As such, initially commiting in a disabled state. + + * JavaScriptCore.xcodeproj/project.pbxproj: + Add new assembler files. + * assembler/ARMv7Assembler.h: Added. + Add new Assembler. + * assembler/AbstractMacroAssembler.h: + Tweaks to ensure sizes of pointer values planted in JIT code do not change. + * assembler/MacroAssembler.h: + On ARMv7 platforms use MacroAssemblerARMv7. + * assembler/MacroAssemblerARMv7.h: Added. + Add new MacroAssembler. + * assembler/MacroAssemblerCodeRef.h: + (JSC::FunctionPtr::FunctionPtr): + Add better ASSERT. + (JSC::ReturnAddressPtr::ReturnAddressPtr): + Add better ASSERT. + (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr): + On ARMv7, MacroAssemblerCodePtr's mush be 'decorated' with a low bit set, + to indicate to the processor that the code is thumb code, not traditional + 32-bit ARM. + (JSC::MacroAssemblerCodePtr::dataLocation): + On ARMv7, decoration must be removed. + * jit/ExecutableAllocator.h: + (JSC::ExecutableAllocator::makeWritable): + Reformatted, no change. + (JSC::ExecutableAllocator::makeExecutable): + When marking code executable also cache flush it, where necessary. + (JSC::ExecutableAllocator::MakeWritable::MakeWritable): + Only use the null implementation of this class if both !ASSEMBLER_WX_EXCLUSIVE + and running on x86(_64) - on other platforms we may also need ensure that + makeExecutable is called at the end to flush caches. + (JSC::ExecutableAllocator::reprotectRegion): + Reformatted, no change. + (JSC::ExecutableAllocator::cacheFlush): + Cache flush a region of memory, or platforms where this is necessary. + * wtf/Platform.h: + Add changes necessary to allow YARR jit to build on this platform, disabled. + * yarr/RegexJIT.cpp: + (JSC::Yarr::RegexGenerator::generateEnter): + (JSC::Yarr::RegexGenerator::generateReturn): + Add support to these methods for ARMv7. + +2009-06-08 Dimitri Glazkov + + Unreviewed, fix my previous fix. + + * runtime/DateInstance.cpp: + (JSC::DateInstance::msToGregorianDateTime): Use WTF namespace qualifier to + disambiguate func signatures. + +2009-06-08 Mark Rowe + + Attempt to fix the Tiger build. + + * wtf/Platform.h: Only test the value of the macro once we know it is defined. + +2009-06-08 Dimitri Glazkov + + Unreviewed, another Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-06-08 Dimitri Glazkov + + Unreviewed, projectile-fixing Windows build. + + * runtime/DateConversion.cpp: Added StringExtras include. + * wtf/DateMath.cpp: Replaced math with algorithm include (looking for std::min def for Windows). + +2009-06-08 Dimitri Glazkov + + Unreviewed, Windows build fix. + + * runtime/DateConstructor.cpp: Changed to use WTF namespace. + * runtime/DateConversion.cpp: Added UString include. + * runtime/DateInstance.cpp: Changed to use WTF namespace. + * wtf/DateMath.cpp: Added math include. + +2009-06-08 Dimitri Glazkov + + Reviewed by Eric Seidel. + + https://bugs.webkit.org/show_bug.cgi?id=26238 + Move most of runtime/DateMath functions to wtf/DateMath, and split off conversion-related + helpers to DateConversion. + + * AllInOneFile.cpp: Changed DateMath->DateConversion. + * GNUmakefile.am: Ditto and added DateMath. + * JavaScriptCore.exp: Ditto. + * JavaScriptCore.pri: Ditto. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto. + * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added DateMath. + * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. + * JavaScriptCoreSources.bkl: Ditto. + * pcre/pcre_exec.cpp: Changed to use DateMath. + * profiler/ProfileNode.cpp: + (JSC::getCount): Changed to use DateConversion. + * runtime/DateConstructor.cpp: Ditto. + * runtime/DateConversion.cpp: Copied from JavaScriptCore/runtime/DateMath.cpp. + (JSC::parseDate): Refactored to use null-terminated characters as input. + * runtime/DateConversion.h: Copied from JavaScriptCore/runtime/DateMath.h. + * runtime/DateInstance.cpp: Changed to use wtf/DateMath. + * runtime/DateInstance.h: Ditto. + * runtime/DateMath.cpp: Removed. + * runtime/DateMath.h: Removed. + * runtime/DatePrototype.cpp: Ditto. + * runtime/InitializeThreading.cpp: Ditto. + * wtf/DateMath.cpp: Copied from JavaScriptCore/runtime/DateMath.cpp. + * wtf/DateMath.h: Copied from JavaScriptCore/runtime/DateMath.h. + +2009-06-08 Steve Falkenburg + + Windows build fix. + + * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: + +2009-06-07 David Kilzer + + Make JavaScriptCore compile for iPhone and iPhone Simulator + + Reviewed by Gavin Barraclough. + + * Configurations/Base.xcconfig: Split GCC_ENABLE_OBJC_GC on + $(REAL_PLATFORM_NAME). Added $(ARCHS_UNIVERSAL_IPHONE_OS) to + VALID_ARCHS. Added REAL_PLATFORM_NAME_iphoneos, + REAL_PLATFORM_NAME_iphonesimulator, HAVE_DTRACE_iphoneos and + HAVE_DTRACE_iphonesimulator variables. + * Configurations/DebugRelase.xcconfig: Split ARCHS definition on + $(REAL_PLATFORM_NAME). + * Configurations/JavaScriptCore.xcconfig: Added + EXPORTED_SYMBOLS_FILE_armv6 and EXPORTED_SYMBOLS_FILE_armv7 + variables. Split OTHER_LDFLAGS into OTHER_LDFLAGS_BASE and + OTHER_LDFLAGS_$(REAL_PLATFORM_NAME) since CoreServices.framework + is only linked to on Mac OS X. + * JavaScriptCore.xcodeproj/project.pbxproj: Removed references + to CoreServices.framework since it's linked using OTHER_LDFLAGS + in JavaScriptCore.xcconfig. + * profiler/ProfilerServer.mm: Added #import for iPhone + Simulator. + (-[ProfilerServer init]): Conditionalize use of + NSDistributedNotificationCenter to non-iPhone or iPhone + Simulator. + * wtf/FastMalloc.cpp: + (WTF::TCMallocStats::): Build fix for iPhone and iPhone + Simulator. + * wtf/Platform.h: Defined PLATFORM(IPHONE) and + PLATFORM(IPHONE_SIMULATOR). + * wtf/ThreadingPthreads.cpp: + (WTF::setThreadNameInternal): Build fix for iPhone and iPhone + Simulator. + +2009-06-08 Tor Arne Vestbø + + Reviewed by Simon Hausmann. + + [Qt] Use $QMAKE_PATH_SEP instead of hardcoded / to fix Windows build + + * JavaScriptCore.pri: + * JavaScriptCore.pro: + * jsc.pro: + +2009-06-07 Gavin Barraclough + + RS by Sam Weinig. + + Remove bonus bogus \n from last commit. + + * jit/JITStubs.cpp: + (JSC::): + +2009-06-07 Gavin Barraclough + + Reviewed by Sam Weinig. + + Change the implementation of op_throw so the stub function always modifies its + return address - if it doesn't find a 'catch' it will switch to a trampoline + to force a return from JIT execution. This saves memory, by avoiding the need + for a unique return for every op_throw. + + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_throw): + JITStubs::cti_op_throw now always changes its return address, + remove return code generated after the stub call (this is now + handled by ctiOpThrowNotCaught). + * jit/JITStubs.cpp: + (JSC::): + Add ctiOpThrowNotCaught definitions. + (JSC::JITStubs::DEFINE_STUB_FUNCTION): + Change cti_op_throw to always change its return address. + * jit/JITStubs.h: + Add ctiOpThrowNotCaught declaration. + +2009-06-05 Gavin Barraclough + + Rudder stamped by Sam Weinig. + + Add missing ASSERT. + + * assembler/X86Assembler.h: + (JSC::X86Assembler::getRelocatedAddress): + +2009-06-05 Gavin Barraclough + + Reviewed by Sam Weinig. + + Switch storePtrWithPatch to take the initial immediate value as an argument. + + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::storePtrWithPatch): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::storePtrWithPatch): + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_jsr): + +2009-06-05 Gavin Barraclough + + Reviewed by Sam Weinig. + + Remove patchLength..tByIdExternalLoadPrefix magic numbers from JIT.h. + + These aren't really suitable values to be tracking within common code + of the JIT, since they are not (and realistically cannot) be checked + by ASSERTs, as the other repatch offsets are. Move this functionality + (skipping the REX prefix when patching load instructions to LEAs on + x86-64) into the X86Assembler. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::CodeLocationInstruction::repatchLoadPtrToLEA): + * assembler/X86Assembler.h: + (JSC::X86Assembler::repatchLoadPtrToLEA): + * jit/JIT.h: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::patchGetByIdSelf): + (JSC::JIT::patchPutByIdReplace): + +2009-06-05 Shinichiro Hamaji + + Bug 26160: Compile fails in MacOSX when GNU fileutils are installed + + + + Reviewed by Alexey Proskuryakov. + + Use /bin/ln instead of ln for cases where this command is used with -h option. + As this option is not supported by GNU fileutils, this change helps users + who have GNU fileutils in their PATH. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2009-06-05 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Remove DoubleNotEqual floating point comparison condition for now - + it is not used, and it is unclear the semantics are correct (I think + this comparison would actually give you not-equal-or-unordered, which + might be what is wanted... we can revisit this interface & get it + right when required). + + Also, fix asserts in branchArith32 ops. All adds & subs can check + for Signed, multiply only sets OF so can only check for overflow. + + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::): + (JSC::MacroAssemblerX86Common::branchAdd32): + (JSC::MacroAssemblerX86Common::branchMul32): + (JSC::MacroAssemblerX86Common::branchSub32): + +2009-06-05 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Minor tidy up in JITStubs. + + * jit/JITStubs.cpp: + (JSC::StackHack::StackHack): + * jit/JITStubs.h: + +2009-06-05 Koen Kooi + + Reviewed by Xan Lopez. + + Build fix for glib unicode backend. + + * wtf/unicode/glib/UnicodeMacrosFromICU.h: + +2009-06-05 Gavin Barraclough + + Reviewed by Oliver Hunt. + + 3 tiny cleanups: + + * assembler/MacroAssemblerX86.h: + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::storePtrWithPatch): + store*() methods should take an ImplicitAddress, rather than an Address. + * assembler/X86Assembler.h: + Make patchPointer private. + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_ret): + Remove empty line at end of function. + +2009-06-05 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Encapsulate many uses of void* in the assembler & jit with types that provide + more semantic information. The new types are: + + * MacroAssemblerCodePtr - this wraps a pointer into JIT generated code. + * FunctionPtr - this wraps a pointer to a C/C++ function in JSC. + * ReturnAddressPtr - this wraps a return address resulting from a 'call' instruction. + + Wrapping these types allows for stronger type-checking than is possible with everything + represented a void*. For example, it is now enforced by the type system that near + calls can only be linked to JIT code and not to C functions in JSC (this was previously + required, but could not be enforced on the interface). + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::CodeLocationCommon::CodeLocationCommon): + (JSC::AbstractMacroAssembler::CodeLocationCommon::dataLocation): + (JSC::AbstractMacroAssembler::CodeLocationCommon::executableAddress): + (JSC::AbstractMacroAssembler::CodeLocationCommon::reset): + (JSC::AbstractMacroAssembler::CodeLocationInstruction::repatchLoadToLEA): + (JSC::AbstractMacroAssembler::CodeLocationInstruction::CodeLocationInstruction): + (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForSwitch): + (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForExceptionHandler): + (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForJSR): + (JSC::AbstractMacroAssembler::CodeLocationLabel::operator!): + (JSC::AbstractMacroAssembler::CodeLocationLabel::reset): + (JSC::AbstractMacroAssembler::CodeLocationLabel::CodeLocationLabel): + (JSC::AbstractMacroAssembler::CodeLocationLabel::getJumpDestination): + (JSC::AbstractMacroAssembler::CodeLocationJump::relink): + (JSC::AbstractMacroAssembler::CodeLocationJump::CodeLocationJump): + (JSC::AbstractMacroAssembler::CodeLocationCall::relink): + (JSC::AbstractMacroAssembler::CodeLocationCall::calleeReturnAddressValue): + (JSC::AbstractMacroAssembler::CodeLocationCall::CodeLocationCall): + (JSC::AbstractMacroAssembler::CodeLocationNearCall::relink): + (JSC::AbstractMacroAssembler::CodeLocationNearCall::calleeReturnAddressValue): + (JSC::AbstractMacroAssembler::CodeLocationNearCall::CodeLocationNearCall): + (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch): + (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::CodeLocationDataLabel32): + (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch): + (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToTrampoline): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkNearCallerToTrampoline): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::addressForLookup): + (JSC::AbstractMacroAssembler::trampolineAt): + (JSC::AbstractMacroAssembler::PatchBuffer::link): + (JSC::AbstractMacroAssembler::PatchBuffer::performFinalization): + (JSC::::CodeLocationCommon::instructionAtOffset): + (JSC::::CodeLocationCommon::labelAtOffset): + (JSC::::CodeLocationCommon::jumpAtOffset): + (JSC::::CodeLocationCommon::callAtOffset): + (JSC::::CodeLocationCommon::nearCallAtOffset): + (JSC::::CodeLocationCommon::dataLabelPtrAtOffset): + (JSC::::CodeLocationCommon::dataLabel32AtOffset): + * assembler/MacroAssemblerCodeRef.h: + (JSC::FunctionPtr::FunctionPtr): + (JSC::FunctionPtr::value): + (JSC::FunctionPtr::executableAddress): + (JSC::ReturnAddressPtr::ReturnAddressPtr): + (JSC::ReturnAddressPtr::value): + (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr): + (JSC::MacroAssemblerCodePtr::executableAddress): + (JSC::MacroAssemblerCodePtr::dataLocation): + (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef): + * assembler/X86Assembler.h: + (JSC::X86Assembler::patchPointerForCall): + * jit/JIT.cpp: + (JSC::ctiPatchNearCallByReturnAddress): + (JSC::ctiPatchCallByReturnAddress): + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + (JSC::JIT::compileCTIMachineTrampolines): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCall): + * jit/JITCode.h: + (JSC::JITCode::operator !): + (JSC::JITCode::addressForCall): + (JSC::JITCode::offsetOf): + (JSC::JITCode::execute): + (JSC::JITCode::size): + (JSC::JITCode::HostFunction): + * jit/JITInlineMethods.h: + (JSC::JIT::emitNakedCall): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::patchGetByIdSelf): + (JSC::JIT::patchPutByIdReplace): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdChain): + * jit/JITStubs.cpp: + (JSC::JITThunks::JITThunks): + (JSC::JITThunks::tryCachePutByID): + (JSC::JITThunks::tryCacheGetByID): + (JSC::JITStubs::DEFINE_STUB_FUNCTION): + * jit/JITStubs.h: + (JSC::JITThunks::ctiArrayLengthTrampoline): + (JSC::JITThunks::ctiStringLengthTrampoline): + (JSC::JITThunks::ctiVirtualCallPreLink): + (JSC::JITThunks::ctiVirtualCallLink): + (JSC::JITThunks::ctiVirtualCall): + (JSC::JITThunks::ctiNativeCallThunk): + * yarr/RegexJIT.h: + (JSC::Yarr::RegexCodeBlock::operator!): + (JSC::Yarr::RegexCodeBlock::execute): + +2009-06-05 Antti Koivisto + + Try to unbreak Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-06-03 Antti Koivisto + + Reviewed by Dave Kilzer. + + https://bugs.webkit.org/show_bug.cgi?id=13128 + Safari not obeying cache header + + Export JSC::parseDate() + + * JavaScriptCore.exp: + * JavaScriptCore.xcodeproj/project.pbxproj: + +2009-06-04 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Bug in property caching of getters and setters. + + Make sure that the transition logic accounts for getters and setters. + If we don't we end up screwing up the transition tables so that some + transitions will start incorrectly believing that they need to check + for getters and setters. + + * runtime/JSObject.cpp: + (JSC::JSObject::defineGetter): + (JSC::JSObject::defineSetter): + * runtime/JSObject.h: + (JSC::): + * runtime/Structure.h: + +2009-06-04 Gavin Barraclough + + Reviewed by Sam Weinig. + + Minor tweak to PatchBuffer, change it so it no longer holds a CodeRef, and instead + holds a separate code pointer and executable pool. Since it now always holds its + own copy of the code size, and to simplify the construction sequence, it's neater + this way. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::PatchBuffer::PatchBuffer): + (JSC::AbstractMacroAssembler::PatchBuffer::finalizeCode): + (JSC::AbstractMacroAssembler::PatchBuffer::code): + (JSC::AbstractMacroAssembler::PatchBuffer::performFinalization): + +2009-06-04 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Remove 'JIT_STUB_ARGUMENT_STACK' this is unused and untested. + + This just leaves JIT_STUB_ARGUMENT_REGISTER and JIT_STUB_ARGUMENT_VA_LIST. + Since JIT_STUB_ARGUMENT_REGISTER is the sensible configuration on most platforms, + remove this define and make this the default behaviour. + Platforms must now define JIT_STUB_ARGUMENT_VA_LIST to get crazy va_list voodoo, + if they so desire. + + (Refactoring of #ifdefs only, no functional change, no performance impact.) + + * jit/JIT.h: + * jit/JITInlineMethods.h: + (JSC::JIT::restoreArgumentReference): + (JSC::JIT::restoreArgumentReferenceForTrampoline): + * jit/JITStubs.cpp: + (JSC::): + * jit/JITStubs.h: + * wtf/Platform.h: + +2009-06-04 Gavin Barraclough + + Rubber stamped by Sam Weinig. + + * jit/JITArithmetic.cpp: + Remove some redundant typedefs, unused since arithmetic was added to the MacroAssembler interface. + +2009-06-04 Brent Fulgham + + Build fix due to header include problem. + + * interpreter/Interpreter.h: Remove wtf from includes so that + compile can find the headers in expected places. + +2009-06-04 Zoltan Horvath + + Reviewed by Darin Adler. + + HashTable class (JavaScriptCore/wtf/HashTable.h) doesn't instantiated by 'new', so + inheritance was removed. HashTable struct has been instantiated by operator new in + JSGlobalData.cpp:106. + HashTable couldn't inherited from FastAllocBase since struct with inheritance is + no longer POD, so HashTable struct has been instantiated by fastNew, destroyed by + fastDelete. + + * interpreter/Interpreter.h: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::~JSGlobalData): + * wtf/HashTable.h: + +2009-06-04 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Wrap the code that plants pushes/pops planted by JIT in explanatorily named + methods; move property storage reallocation into a standard stub function. + + ~No performance impact (possible <1% progression on x86-64, likely just noise). + + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + Wrap calls to push/pop. + * jit/JIT.h: + Declare the new wrapper methods. + * jit/JITInlineMethods.h: + (JSC::JIT::preverveReturnAddressAfterCall): + (JSC::JIT::restoreReturnAddressBeforeReturn): + Define the new wrapper methods. + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_end): + (JSC::JIT::emit_op_ret): + Wrap calls to push/pop. + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + Move property storage reallocation into a standard stub function. + * jit/JITStubs.cpp: + (JSC::JITStubs::DEFINE_STUB_FUNCTION): + * jit/JITStubs.h: + (JSC::JITStubs::): + +2009-06-04 Laszlo Gombos + + Reviewed by Ariya Hidayat. + + [Qt] Single-threaded QtWebKit configuration + + + * JavaScriptCore.pri: Use ThreadingNone.cpp instead of + ThreadingQt.cpp and make sure ENABLE_JSC_MULTIPLE_THREADS is turned off + when ENABLE_SINGLE_THREADED is tuned on + * wtf/ThreadingNone.cpp: + (WTF::ThreadCondition::wait): Fix compilation warning. + (WTF::ThreadCondition::timedWait): Ditto. + +2009-06-02 Mark Rowe + + Reviewed by Anders Carlsson. + + Remove workaround that was added to address as it no longer affects our Tiger builds. + + * Configurations/Base.xcconfig: + +2009-06-02 Xan Lopez + + Reviewed by Sam Weinig. + + Use C-style comments in Platform.h so it can be included from C + files. + + * wtf/Platform.h: + +2009-06-02 Tor Arne Vestbø + + Rubber-stamped by Simon Hausmann. + + Use File::Spec->tmpdir instead of hardcoded paths for tempfile() dir + + This fixes the Windows-build if the user does not have a /tmp directory. + + * pcre/dftables: + +2009-06-02 Gavin Barraclough + + Reviewed by Oliver ">>" Hunt. + + emitSlow_op_rshift is linking the wrong number of slow cases, if !supportsFloatingPoint(). + Fixerate, and refactor/comment the code a little to make it clearer what is going on. + + * jit/JITArithmetic.cpp: + (JSC::JIT::emit_op_rshift): + (JSC::JIT::emitSlow_op_rshift): + +2009-06-01 Gavin Barraclough + + Reviewed by NOBODY - speculative windows build fix (errm, for the other patch!). + + * jit/JITStubs.cpp: + (JSC::): + +2009-06-01 Gavin Barraclough + + Reviewed by NOBODY - speculative windows build fix. + + * assembler/AbstractMacroAssembler.h: + (JSC::::CodeLocationCall::CodeLocationCall): + (JSC::::CodeLocationNearCall::CodeLocationNearCall): + +2009-06-01 Gavin Barraclough + + Reviewed by Olliej Hunt. + + Change JITStub functions from being static members on the JITStub class to be + global extern "C" functions, and switch their the function signature declaration + in the definition of the functions to be C-macro generated. This makes it easier + to work with the stub functions from assembler code (since the names no longer + require mangling), and by delaring the functions with a macro we can look at + also auto-generating asm thunks to wrap the JITStub functions to perform the + work currently in 'restoreArgumentReference' (as a memory saving). + + Making this change also forces us to be a bit more realistic about what is private + on the Register and CallFrame objects. Presently most everything on these classes + is private, and the classes have plenty of friends. We could befriend all the + global functions to perpetuate the delusion of encapsulation, but using friends is + a bit of a sledgehammer solution here - since friends can poke around with all of + the class's privates, and since all the major classes taht operate on Regsiters are + currently friends, right there is currently in practice very little protection at + all. Better to start removing friend delclarations, and exposing just the parts + that need to be exposed. + + * interpreter/CallFrame.h: + (JSC::ExecState::returnPC): + (JSC::ExecState::setCallerFrame): + (JSC::ExecState::returnValueRegister): + (JSC::ExecState::setArgumentCount): + (JSC::ExecState::setCallee): + (JSC::ExecState::setCodeBlock): + * interpreter/Interpreter.h: + * interpreter/Register.h: + (JSC::Register::Register): + (JSC::Register::i): + * jit/JITStubs.cpp: + (JSC::): + (JSC::JITThunks::JITThunks): + (JSC::JITThunks::tryCachePutByID): + (JSC::JITThunks::tryCacheGetByID): + (JSC::JITStubs::DEFINE_STUB_FUNCTION): + * jit/JITStubs.h: + (JSC::JITStubs::): + * runtime/JSFunction.h: + (JSC::JSFunction::nativeFunction): + (JSC::JSFunction::classInfo): + * runtime/JSGlobalData.h: + +2009-06-01 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Tidy up the literal parser. + + Make the number lexing in the LiteralParser exactly match the JSON spec, which + makes us cover more cases, but also more strict. Also made string lexing only + allow double-quoted strings. + + * runtime/LiteralParser.cpp: + (JSC::LiteralParser::Lexer::lex): + (JSC::LiteralParser::Lexer::lexString): + (JSC::LiteralParser::Lexer::lexNumber): + +2009-06-01 Gavin Barraclough + + Reviewed by Sam "WX" Weinig. + + Allow the JIT to operate without relying on use of RWX memory, on platforms where this is supported. + + This patch adds a switch to Platform.h (ENABLE_ASSEMBLER_WX_EXCLUSIVE) which enables this mode of operation. + When this flag is set, all executable memory will be allocated RX, and switched to RW only whilst being + modified. Upon completion of code generation the protection is switched back to RX to allow execution. + + Further optimization will be required before it is desirable to enable this mode of operation by default; + enabling this presently incurs a 5%-10% regression. + + (Submitting disabled - no performance impact). + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::CodeLocationInstruction::repatchLoadToLEA): + (JSC::AbstractMacroAssembler::CodeLocationLabel::fromFunctionPointer): + (JSC::AbstractMacroAssembler::CodeLocationJump::relink): + (JSC::AbstractMacroAssembler::CodeLocationCall::relink): + (JSC::AbstractMacroAssembler::CodeLocationNearCall::relink): + (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch): + (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToTrampoline): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkNearCallerToTrampoline): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkNearCallerToFunction): + (JSC::AbstractMacroAssembler::PatchBuffer::PatchBuffer): + (JSC::AbstractMacroAssembler::PatchBuffer::~PatchBuffer): + (JSC::AbstractMacroAssembler::PatchBuffer::link): + (JSC::AbstractMacroAssembler::PatchBuffer::patch): + (JSC::AbstractMacroAssembler::PatchBuffer::performFinalization): + (JSC::::CodeLocationCommon::nearCallAtOffset): + (JSC::::CodeLocationCall::CodeLocationCall): + (JSC::::CodeLocationNearCall::CodeLocationNearCall): + * assembler/AssemblerBuffer.h: + (JSC::AssemblerBuffer::executableCopy): + * assembler/X86Assembler.h: + (JSC::CAN_SIGN_EXTEND_U32_64): + (JSC::X86Assembler::linkJump): + (JSC::X86Assembler::linkCall): + (JSC::X86Assembler::patchPointer): + (JSC::X86Assembler::relinkJump): + (JSC::X86Assembler::relinkCall): + (JSC::X86Assembler::repatchInt32): + (JSC::X86Assembler::repatchPointer): + (JSC::X86Assembler::repatchLoadToLEA): + (JSC::X86Assembler::patchInt32): + (JSC::X86Assembler::patchRel32): + * jit/ExecutableAllocator.h: + (JSC::ExecutableAllocator::): + (JSC::ExecutableAllocator::makeWritable): + (JSC::ExecutableAllocator::makeExecutable): + * jit/ExecutableAllocatorFixedVMPool.cpp: + (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): + * jit/ExecutableAllocatorPosix.cpp: + (JSC::ExecutablePool::systemAlloc): + (JSC::ExecutablePool::systemRelease): + (JSC::ExecutableAllocator::reprotectRegion): + * jit/ExecutableAllocatorWin.cpp: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::patchGetByIdSelf): + (JSC::JIT::patchPutByIdReplace): + * wtf/Platform.h: + +2009-05-29 Zoltan Horvath + + Reviewed by Darin Adler. + + Inherits Interpreter class from FastAllocBase because it has been + instantiated by 'new' in JavaScriptCore/runtime/JSGlobalData.cpp. + + * interpreter/Interpreter.h: + +2009-06-01 David Levin + + Reviewed by NOBODY (windows build fix). + + Add exports for windows (corresponding to the JavaScriptCore.exp modification + in the previous change). + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-06-01 David Levin + + Reviewed by Darin Alder and Maciej Stachowiak. + + Bug 26057: StringImpl should share buffers with UString. + https://bugs.webkit.org/show_bug.cgi?id=26057 + + * JavaScriptCore.exp: + * runtime/UString.cpp: + (JSC::UString::Rep::create): + (JSC::UString::BaseString::sharedBuffer): Only do the sharing when + the buffer exceeds a certain size. The size was tuned by running + various dom benchmarks with numbers ranging from 20 to 800 and finding + a place that seemed to do the best overall. + * runtime/UString.h: + +2009-05-31 Gavin Barraclough + + Reviewed by Olliej "you just need to change NativeFunctionWrapper.h" Hunt. + + Add ENABLE_JIT_OPTIMIZE_NATIVE_CALL switch to allow JIT to operate without native call optimizations. + + * runtime/NativeFunctionWrapper.h: + * wtf/Platform.h: + +2009-05-30 Darin Adler + + Reviewed by Sam Weinig. + + REGRESSION (r42734): Celtic Kane JavaScript benchmark does not run: + "Maximum call stack size exceeded" + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncToString): Use the same recursion limit as the other recursion checks. + We need a limit of at least 100 to run the benchmark above. + (JSC::arrayProtoFuncToLocaleString): Ditto. + (JSC::arrayProtoFuncJoin): Ditto. + +2009-05-28 Dirk Schulze + + Reviewed by Nikolas Zimmermann. + + Added new build flag --filters for Mac. More details in WebCore/ChangeLog. + + * Configurations/FeatureDefines.xcconfig: + +2009-05-27 Oliver Hunt + + Reviewed by Mark Rowe. + + Stack overflow in JSC::stringProtoFuncReplace() running jsFunFuzz + + We should always check for exceptions after creating a CachedCall, this wasn't being done in + the string replace logic. + + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): + +2009-05-27 Gustavo Noronha Silva + + Unreviewed (make distcheck) build fix; adding missing headers. + + * GNUmakefile.am: + +2009-05-27 Jessie Berlin + + Reviewed by Adam Roben + + Fix the Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-27 Fridrich Strba + + Reviewed by Gustavo Noronha. + + When building on Windows, consider Windows specific files. + + * GNUmakefile.am: + +2009-05-27 Fridrich Strba + + Reviewed by Maciej Stachowiak. + + When building with MinGW, don't use the __declspec(dl{import,export}) + decorations and rely on the linker to use its nifty auto-import feature. + It is extremely hard to get the decorations right with MinGW in general + and impossible in WebKit, where the resulting shared library is linking + together some static libraries. + + * config.h: + +2009-05-26 Holger Hans Peter Freyther + + Reviewed by Xan Lopez. + + https://bugs.webkit.org/show_bug.cgi?id=25613 + + Be able to use GOwnPtr for GHashTable as well. The assumption + is that the hash table has been created with g_hash_table_new_full + and has proper destruction functions. + + * wtf/GOwnPtr.cpp: + (WTF::GHashTable): + * wtf/GOwnPtr.h: + +2009-05-26 Oliver Hunt + + Reviewed by Gavin Barraclough. + + REGRESSION: Assertion failure due to forward references + + Add a pattern type for forward references to ensure that we don't confuse the + quantifier alternatives assertion. + + * yarr/RegexCompiler.cpp: + (JSC::Yarr::RegexPatternConstructor::atomBackReference): + (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets): + * yarr/RegexInterpreter.cpp: + (JSC::Yarr::ByteCompiler::emitDisjunction): + * yarr/RegexJIT.cpp: + (JSC::Yarr::RegexGenerator::generateTerm): + * yarr/RegexPattern.h: + (JSC::Yarr::PatternTerm::): + (JSC::Yarr::PatternTerm::PatternTerm): + (JSC::Yarr::PatternTerm::ForwardReference): + +2009-05-26 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Fix for: REGRESSION: jQuery load() issue (25981), + and also an ASSERT failure on http://ihasahotdog.com/. + + When overwriting a property on a dictionary with a cached specific value, + clear the cache if new value being written is different. + + * JavaScriptCore.exp: + Export the new symbols. + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_get_by_id_method_check_second): + Close dictionary prototypes upon caching a method access, as would happen when caching + a regular get_by_id. + * runtime/JSObject.h: + (JSC::JSObject::propertyStorage): + (JSC::JSObject::locationForOffset): + Make these methods private. + (JSC::JSObject::putDirectInternal): + When overwriting a property on a dictionary with a cached specific value, + clear the cache if new value being written is different. + * runtime/Structure.cpp: + (JSC::Structure::despecifyDictionaryFunction): + Reset the specific value field for a given property in a dictionary. + (JSC::Structure::despecifyFunctionTransition): + Rename of 'changeFunctionTransition' (this was already internally refered to as a despecification). + * runtime/Structure.h: + Declare new method. + +2009-05-26 Gavin Barraclough + + Reviewed by Oliver "pieces of eight" Hunt. + + When reseting RegexPattern class, should fully reset the class, not just bits of it. + In particular, we delete the cached character classes (for wordchars, etc), but do + not reset the set of pointers to the cached classes. In the case of a repeated parse + due to an illegal back-reference we will continue to use the deleted character class. + + * yarr/RegexPattern.h: + (JSC::Yarr::RegexPattern::reset): + +2009-05-26 Brent Fulgham + + Build fix to correct r44161. + + * wtf/FastAllocBase.h: + +2009-05-26 Zoltan Horvath + + Reviewed by Maciej Stachowiak. + + Inherite HashTable from FastAllocBase, because it has been instantiated by + 'new' in JavaScriptCore/runtime/JSGlobalData.cpp. + + * wtf/HashTable.h: + * wtf/FastAllocBase.h: Remove 'wtf' path from TypeTraits.h to allow use outside of wtf. + +2009-05-25 David Levin + + Reviewed by Maciej Stachowiak and Oliver Hunt. + + https://bugs.webkit.org/show_bug.cgi?id=25126 + Allow the buffer underlying UString to be shared. + + In order to not grow the underlying size of any structure, + there is a union in the Rep string which holds + + m_sharedBuffer -- a pointer to the shared ref counted buffer + if the class is BaseString and the buffer is being shared OR + + m_baseString -- the BaseString if the class is only UString::Rep + but not a UString::BaseString + + Ideally, m_sharedBuffer would be a RefPtr, but it cannot be because + it is in a union. + + No change in sunspider perf. + + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * runtime/UString.cpp: + (JSC::UString::Rep::share): + (JSC::UString::Rep::destroy): + (JSC::UString::BaseString::sharedBuffer): + (JSC::UString::BaseString::setSharedBuffer): + (JSC::UString::BaseString::slowIsBufferReadOnly): + (JSC::expandCapacity): + (JSC::UString::Rep::reserveCapacity): + (JSC::UString::expandPreCapacity): + (JSC::concatenate): + (JSC::UString::append): + * runtime/UString.h: + (JSC::UString::Rep::Rep): + (JSC::UString::Rep::): + (JSC::UString::BaseString::isShared): + (JSC::UString::BaseString::isBufferReadOnly): + (JSC::UString::Rep::baseString): + * wtf/CrossThreadRefCounted.h: + (WTF::CrossThreadRefCounted::isShared): + * wtf/OwnFastMallocPtr.h: Added. + (WTF::OwnFastMallocPtr::OwnFastMallocPtr): + (WTF::OwnFastMallocPtr::~OwnFastMallocPtr): + (WTF::OwnFastMallocPtr::get): + (WTF::OwnFastMallocPtr::release): + +2009-05-25 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + Re-add interpreter logic to jit-enabled builds as GCC mysteriously regresses without it + + * wtf/Platform.h: + +2009-05-25 Fridrich Strba + + Reviewed by Maciej Stachowiak. + + The functions written in assembly need to have a leading + underscore on Windows too. + + * jit/JITStubs.cpp: + +2009-05-24 Steve Falkenburg + + Build fix for experimental PGO Windows target. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2009-05-23 David Kilzer + + Part 1 of 2: Bug 25495: Implement PassOwnPtr and replace uses of std::auto_ptr + + + + Reviewed by Oliver Hunt. + + * GNUmakefile.am: Added OwnPtrCommon.h and PassOwnPtr.h. + * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto. + * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. + + * wtf/OwnPtr.h: + (WTF::OwnPtr::OwnPtr): Added constructors that take a + PassOwnPtr. Also added a copy constructor declaration that's + required when assigning a PassOwnPtr to a stack-based OwnPtr. + (WTF::operator=): Added assignment operator methods that take a + PassOwnPtr. + (WTF::swap): Reformatted. + (WTF::operator==): Whitespace changes. + (WTF::operator!=): Ditto. + + * wtf/OwnPtrCommon.h: Added. + (WTF::deleteOwnedPtr): + + * wtf/PassOwnPtr.h: Added. + (WTF::PassOwnPtr::PassOwnPtr): + (WTF::PassOwnPtr::~PassOwnPtr): + (WTF::PassOwnPtr::get): + (WTF::PassOwnPtr::clear): + (WTF::PassOwnPtr::release): + (WTF::PassOwnPtr::operator*): + (WTF::PassOwnPtr::operator->): + (WTF::PassOwnPtr::operator!): + (WTF::PassOwnPtr::operator UnspecifiedBoolType): + (WTF::::operator): + (WTF::operator==): + (WTF::operator!=): + (WTF::static_pointer_cast): + (WTF::const_pointer_cast): + (WTF::getPtr): + +2009-05-23 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + Remove interpreter specific logic from the JIT builds. + + This saves ~100k in JSC release builds. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * interpreter/Interpreter.h: + * wtf/Platform.h: + +2009-05-22 Mark Rowe + + Part two of an attempted Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-22 Mark Rowe + + Part one of an attempted Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-21 Gavin Barraclough + + Reviewed by Geoff Garen. + + op_method_check + + Optimize method calls, by caching specific function values within the Structure. + The new opcode is used almost like an x86 opcode prefix byte to optimize op_get_by_id, + where the property access is being used to read a function to be passed to op-call (i.e. + 'foo.bar();'). This patch modifies the Structure class such that when a property is + put to an object for the first time we will check if the value is a function. If it is, + we will cache the function value on the Structure. A Structure in such a state guarantees + that not only does a property with the given identifier exist on the object, but also that + its value is unchanged. Upon any further attempt to put a property with the same identifier + (but a different value) to the object, it will transition back to a normal Structure (where + it will guarantee the presence but not the value of the property). + + op_method_check makes use of the new information made available by the Structure, by + augmenting the functionality of op_get_by_id. Upon generating a FunctionCallDotNode a + check will be emitted prior to the property access reading the function value, and the JIT + will generate an extra (initially unlinked but patchable) set of checks prior to the regular + JIT code for get_by_id. The new code will do inline structure and prototype structure check + (unlike a regular get_by_id, which can only handle 'self' accesses inline), and then performs + an immediate load of the function value, rather than using memory accesses to load the value + from the obejct's property storage array. If the method check fails it will revert, or if + the access is polymorphic, the op_get_by_id will continue to operate - and optimize itself - + just as any other regular op_get_by_id would. + + ~2.5% on v8-tests, due to a ~9% progression on richards. + + * API/JSCallbackObjectFunctions.h: + (JSC::::put): + (JSC::::staticFunctionGetter): + * API/JSObjectRef.cpp: + (JSObjectMakeConstructor): + * JavaScriptCore.exp: + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::differenceBetween): + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::moveWithPatch): + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * bytecode/CodeBlock.h: + (JSC::getMethodCallLinkInfoReturnLocation): + (JSC::CodeBlock::getMethodCallLinkInfo): + (JSC::CodeBlock::addMethodCallLinkInfos): + (JSC::CodeBlock::methodCallLinkInfo): + * bytecode/Opcode.h: + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitMethodCheck): + * bytecompiler/BytecodeGenerator.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompile): + * jit/JIT.h: + (JSC::MethodCallCompilationInfo::MethodCallCompilationInfo): + * jit/JITOpcodes.cpp: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::emit_op_method_check): + (JSC::JIT::emitSlow_op_method_check): + (JSC::JIT::emit_op_get_by_id): + (JSC::JIT::emitSlow_op_get_by_id): + (JSC::JIT::emit_op_put_by_id): + (JSC::JIT::emitSlow_op_put_by_id): + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compileGetByIdSlowCase): + (JSC::JIT::patchMethodCallProto): + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_get_by_id_method_check): + (JSC::JITStubs::cti_op_get_by_id_method_check_second): + * jit/JITStubs.h: + * jsc.cpp: + (GlobalObject::GlobalObject): + * parser/Nodes.cpp: + (JSC::FunctionCallDotNode::emitBytecode): + * runtime/Arguments.cpp: + (JSC::Arguments::put): + * runtime/ArrayConstructor.cpp: + (JSC::ArrayConstructor::ArrayConstructor): + * runtime/BooleanConstructor.cpp: + (JSC::BooleanConstructor::BooleanConstructor): + * runtime/DateConstructor.cpp: + (JSC::DateConstructor::DateConstructor): + * runtime/ErrorConstructor.cpp: + (JSC::ErrorConstructor::ErrorConstructor): + (JSC::constructError): + * runtime/ErrorPrototype.cpp: + (JSC::ErrorPrototype::ErrorPrototype): + * runtime/FunctionConstructor.cpp: + (JSC::FunctionConstructor::FunctionConstructor): + * runtime/FunctionPrototype.cpp: + (JSC::FunctionPrototype::FunctionPrototype): + * runtime/InternalFunction.cpp: + (JSC::InternalFunction::InternalFunction): + * runtime/JSActivation.cpp: + (JSC::JSActivation::put): + (JSC::JSActivation::putWithAttributes): + * runtime/JSByteArray.cpp: + (JSC::JSByteArray::JSByteArray): + * runtime/JSFunction.cpp: + (JSC::JSFunction::JSFunction): + (JSC::JSFunction::getOwnPropertySlot): + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::putWithAttributes): + (JSC::JSGlobalObject::reset): + (JSC::JSGlobalObject::mark): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): + (JSC::JSGlobalObject::methodCallDummy): + * runtime/JSObject.cpp: + (JSC::JSObject::put): + (JSC::JSObject::putWithAttributes): + (JSC::JSObject::deleteProperty): + (JSC::JSObject::defineGetter): + (JSC::JSObject::defineSetter): + (JSC::JSObject::getPropertyAttributes): + (JSC::JSObject::getPropertySpecificFunction): + (JSC::JSObject::putDirectFunction): + (JSC::JSObject::putDirectFunctionWithoutTransition): + * runtime/JSObject.h: + (JSC::getJSFunction): + (JSC::JSObject::getDirectLocation): + (JSC::JSObject::putDirect): + (JSC::JSObject::putDirectWithoutTransition): + * runtime/LiteralParser.cpp: + (JSC::LiteralParser::parseObject): + * runtime/Lookup.cpp: + (JSC::setUpStaticFunctionSlot): + * runtime/Lookup.h: + (JSC::lookupPut): + * runtime/MathObject.cpp: + (JSC::MathObject::MathObject): + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::NativeErrorConstructor): + (JSC::NativeErrorConstructor::construct): + * runtime/NativeErrorPrototype.cpp: + (JSC::NativeErrorPrototype::NativeErrorPrototype): + * runtime/NumberConstructor.cpp: + (JSC::NumberConstructor::NumberConstructor): + * runtime/ObjectConstructor.cpp: + (JSC::ObjectConstructor::ObjectConstructor): + * runtime/PropertyMapHashTable.h: + (JSC::PropertyMapEntry::PropertyMapEntry): + * runtime/PrototypeFunction.cpp: + (JSC::PrototypeFunction::PrototypeFunction): + * runtime/PutPropertySlot.h: + (JSC::PutPropertySlot::): + (JSC::PutPropertySlot::PutPropertySlot): + (JSC::PutPropertySlot::setNewProperty): + (JSC::PutPropertySlot::setDespecifyFunctionProperty): + (JSC::PutPropertySlot::isCacheable): + (JSC::PutPropertySlot::cachedOffset): + * runtime/RegExpConstructor.cpp: + (JSC::RegExpConstructor::RegExpConstructor): + * runtime/StringConstructor.cpp: + (JSC::StringConstructor::StringConstructor): + * runtime/StringPrototype.cpp: + (JSC::StringPrototype::StringPrototype): + * runtime/Structure.cpp: + (JSC::Structure::Structure): + (JSC::Structure::~Structure): + (JSC::Structure::materializePropertyMap): + (JSC::Structure::addPropertyTransitionToExistingStructure): + (JSC::Structure::addPropertyTransition): + (JSC::Structure::changeFunctionTransition): + (JSC::Structure::addPropertyWithoutTransition): + (JSC::Structure::get): + (JSC::Structure::despecifyFunction): + (JSC::Structure::put): + (JSC::Structure::remove): + * runtime/Structure.h: + (JSC::Structure::get): + (JSC::Structure::specificFunction): + * runtime/StructureTransitionTable.h: + (JSC::StructureTransitionTableHashTraits::emptyValue): + * wtf/Platform.h: + +2009-05-22 Brent Fulgham + + Reviewed by Steve Falkenburg. + + https://bugs.webkit.org/show_bug.cgi?id=25950 + JavaScriptCore Fails to build on Windows (Cairo) due to CoreFoundation + link requirement. + + Modify project to add new Debug_CFLite and Release_CFLite targets. These + use the new JavaScriptCoreCFLite.vsprops to link against CFLite.dll. + Existing projects are changed to use the new JavaScriptCoreCF.vsprops + to link against CoreFoundation.dll. + + The JavaScriptCoreCommon.vsprops is modified to remove the link + against CoreFoundation.dll. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCF.vsprops: Added. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCFLite.vsprops: Added. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: + +2009-05-22 Dominik Röttsches + + Reviewed by Gustavo Noronha. + + https://bugs.webkit.org/show_bug.cgi?id=15914 + [GTK] Implement Unicode functionality using GLib + + Original patch by Jürg Billeter and Naiem Shaik. + Implementing WTF Unicode functionality based on GLib. + + * GNUmakefile.am: + * wtf/unicode/Unicode.h: + * wtf/unicode/glib: Added. + * wtf/unicode/glib/UnicodeGLib.cpp: Added. + (WTF::Unicode::foldCase): + (WTF::Unicode::toLower): + (WTF::Unicode::toUpper): + (WTF::Unicode::direction): + (WTF::Unicode::umemcasecmp): + * wtf/unicode/glib/UnicodeGLib.h: Added. + (WTF::Unicode::): + (WTF::Unicode::toLower): + (WTF::Unicode::toUpper): + (WTF::Unicode::toTitleCase): + (WTF::Unicode::isArabicChar): + (WTF::Unicode::isFormatChar): + (WTF::Unicode::isSeparatorSpace): + (WTF::Unicode::isPrintableChar): + (WTF::Unicode::isDigit): + (WTF::Unicode::isPunct): + (WTF::Unicode::mirroredChar): + (WTF::Unicode::category): + (WTF::Unicode::isLower): + (WTF::Unicode::digitValue): + (WTF::Unicode::combiningClass): + (WTF::Unicode::decompositionType): + * wtf/unicode/glib/UnicodeMacrosFromICU.h: Added. + +2009-05-21 Xan Lopez + + Unreviewed build fix. + + Add MacroAssemblerCodeRef.h to file list. + + * GNUmakefile.am: + +2009-05-21 Gavin Barraclough + + Reviewed by Darin Adler. + Addition of MacroAssemblerCodeRef.h rubber stamped by Geoff Garen. + + Refactor JIT code-handle objects. The representation of generated code is currently + a bit of a mess. We have a class JITCode which wraps the pointer to a block of + generated code, but this object does not reference the executable pool meaning that + external events (the pool being derefed) could make the pointer become invalid. + To overcome this both the JIT and Yarr implement further (and similar) objects to + wrap the code pointer with a RefPtr to the pool. To add to the mire, as well as the + CodeBlock containing a handle onto the code the FunctionBodyNode also contains a + copy of the code pointer which is used almost (but not entirely) uniquely to access + the JIT code for a function. + + Rationalization of all this: + + * Add a new type 'MacroAssembler::CodeRef' as a handle for a block of JIT generated code. + * Change the JIT & Yarr to internally handle code using CodeRefs. + * Move the CodeRef (formerly anow defunct JITCodeRef) from CodeBlock to its owner node. + * Remove the (now) redundant code pointer from FunctionBodyNode. + + While tidying this up I've made the PatchBuffer return code in new allocations using a CodeRef, + and have enforced an interface that the PatchBuffer will always be used, and 'finalizeCode()' or + 'finalizeCodeAddendum()' will always be called exactly once on the PatchBuffer to complete code generation. + + This gives us a potentially useful hook ('PatchBuffer::performFinalization()') at the end of generation, + which may have a number of uses. It may be helpful should we wish to switch our generation + model to allow RW/RX exclusive memory, and it may be useful on non-cache-coherent platforms to + give us an oportunity to cache flush as necessary. + + No performance impact. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToTrampoline): + (JSC::AbstractMacroAssembler::CodeRef::CodeRef): + (JSC::AbstractMacroAssembler::CodeRef::trampolineAt): + (JSC::AbstractMacroAssembler::PatchBuffer::PatchBuffer): + (JSC::AbstractMacroAssembler::PatchBuffer::~PatchBuffer): + (JSC::AbstractMacroAssembler::PatchBuffer::link): + (JSC::AbstractMacroAssembler::PatchBuffer::linkTailRecursive): + (JSC::AbstractMacroAssembler::PatchBuffer::patch): + (JSC::AbstractMacroAssembler::PatchBuffer::complete): + (JSC::AbstractMacroAssembler::PatchBuffer::finalize): + (JSC::AbstractMacroAssembler::PatchBuffer::entry): + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::CodeBlock): + (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): + (JSC::CodeBlock::setJITCode): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::getBytecodeIndex): + (JSC::CodeBlock::executablePool): + * interpreter/CallFrameClosure.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::execute): + (JSC::Interpreter::prepareForRepeatCall): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + (JSC::JIT::linkCall): + * jit/JIT.h: + * jit/JITCode.h: + (JSC::JITCode::JITCode): + (JSC::JITCode::operator bool): + (JSC::JITCode::addressForCall): + (JSC::JITCode::offsetOf): + (JSC::JITCode::execute): + (JSC::JITCode::size): + (JSC::JITCode::executablePool): + (JSC::JITCode::HostFunction): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_vm_dontLazyLinkCall): + (JSC::JITStubs::cti_vm_lazyLinkCall): + * parser/Nodes.cpp: + (JSC::ProgramNode::generateJITCode): + (JSC::EvalNode::generateJITCode): + (JSC::FunctionBodyNode::FunctionBodyNode): + (JSC::FunctionBodyNode::createNativeThunk): + (JSC::FunctionBodyNode::generateJITCode): + * parser/Nodes.h: + (JSC::ScopeNode::generatedJITCode): + (JSC::ScopeNode::getExecutablePool): + (JSC::ScopeNode::setJITCode): + (JSC::ProgramNode::jitCode): + (JSC::EvalNode::jitCode): + (JSC::FunctionBodyNode::jitCode): + * runtime/RegExp.cpp: + (JSC::RegExp::match): + * yarr/RegexJIT.cpp: + (JSC::Yarr::RegexGenerator::compile): + (JSC::Yarr::jitCompileRegex): + (JSC::Yarr::executeRegex): + * yarr/RegexJIT.h: + (JSC::Yarr::RegexCodeBlock::RegexCodeBlock): + (JSC::Yarr::RegexCodeBlock::pcreFallback): + (JSC::Yarr::RegexCodeBlock::setFallback): + (JSC::Yarr::RegexCodeBlock::operator bool): + (JSC::Yarr::RegexCodeBlock::set): + (JSC::Yarr::RegexCodeBlock::execute): + +2009-05-21 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + REGRESSION: Cached DOM global object property access fails in browser (25921) + + + When caching properties on the global object we need to ensure that we're + not attempting to cache through a shell object. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::resolveGlobal): + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_resolve_global): + +2009-05-21 Steve Falkenburg + + Windows build fix. + + * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: + +2009-05-21 Cameron Zwarich + + Reviewed by Mark Rowe. + + Bug 25945: Add support for MADV_FREE to TCMalloc + + + + Add support for MADV_FREE to TCMalloc_SystemRelease for platforms that + don't also support MADV_FREE_REUSE. The code is identical to the MADV_DONTNEED + case except for the advice passed to madvise(), so combining the two cases + makes the most sense. + + * wtf/Platform.h: Only define HAVE_MADV_FREE when not building on Tiger or + Leopard, because while it is defined on these platforms it actually does + nothing. + * wtf/TCSystemAlloc.cpp: + (TCMalloc_SystemRelease): use MADV_FREE if it is available; otherwise use + MADV_DONTNEED. + +2009-05-21 Mark Rowe + + Reviewed by Oliver Hunt. + + Fix / . + Bug 25917: REGRESSION (r43559?): Javascript debugger crashes when pausing page + + The debugger currently retrieves the arguments object from an activation rather than pulling + it from a call frame. This is unreliable to due to the recent optimization to lazily create + the arguments object. In the long-term it should stop doing that (), + but for now we force eager creation of the arguments object when debugging. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): + +2009-05-21 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Bug 25912: Harden NumberPrototype.cpp by removing use of strcpy() + + + This causes no change on SunSpider. + + * runtime/NumberPrototype.cpp: + (JSC::integerPartNoExp): replace strcpy() with memcpy(), ASSERT that the + temporary buffer has sufficient space to store the result, and move the + explicit null-termination closer to the memcpy() for easier visual inspection + of the code. + (JSC::fractionalPartToString): replace strcpy() with memcpy(), and ASSERT + that the temporary buffer has sufficient space to store the result. There + is no explicit null-termination because this is done by the caller. The + same is already true for exponentialPartToString(). + (JSC::numberProtoFuncToExponential): replace strcpy() with memcpy(), explicitly + null-terminate the result, and ASSERT that the temporary buffer has sufficient + space to store the result. + +2009-05-20 Sam Weinig + + Reviewed by Cameron Zwarich. + + Cleanup the JSGlobalData when exiting early with the usage statement in jsc. + + * jsc.cpp: + (printUsageStatement): + (parseArguments): + (jscmain): + +2009-05-20 Stephanie Lewis + + Update the order files. Generate new order files. + + * JavaScriptCore.order: + +2009-05-19 Kenneth Rohde Christiansen + + Reviewed by Simon Hausmann. + + Replace WREC with YARR + YARR_JIT for the Qt port. This is only + used when compiled with JIT support for now, so it is a drop-in + replacement for the WREC usage. Still including the wrec headers + as they are being referred from RegExp.h, though the contents of + that header it protected by "#if ENABLE(WREC)". + + * JavaScriptCore.pri: + +2009-05-20 Xan Lopez + + Reviewed by Eric Seidel. + + Fix GTK debug build. + + The function dumpDisjunction, compiled with debug enabled, uses + printf, which needs stdio.h to be included. + + * yarr/RegexInterpreter.cpp: + +2009-05-20 Laszlo Gombos + + Reviewed by George Staikos. + + BUG 25843: [Qt] Remove qt-port build flag + + + * JavaScriptCore.pro: + + +2009-05-19 Geoffrey Garen + + Windows build fix. + + * interpreter/RegisterFile.cpp: + (JSC::RegisterFile::releaseExcessCapacity): Copy-paste typo. + +2009-05-19 Geoffrey Garen + + Reviewed by Sam Weinig. + + Fixed CrashTracer: [USER] 1 crash in Install + Mac OS X at • 0x9274241c + + (Original patch by Joe Sokol and Ronnie Misra.) + + SunSpider says 1.004x faster. + + * interpreter/RegisterFile.cpp: + (JSC::RegisterFile::releaseExcessCapacity): Instead of doing complicated + math that sometimes used to overflow, just release the full range of the + register file. + + * interpreter/RegisterFile.h: + (JSC::isPageAligned): + (JSC::RegisterFile::RegisterFile): Added ASSERTs to verify that it's + safe to release the full range of the register file. + + (JSC::RegisterFile::shrink): No need to releaseExcessCapacity() if the + new end is not smaller than the old end. (Also, doing so used to cause + numeric overflow, unmapping basically the whole process from memory.) + +2009-05-19 Oliver Hunt + + RS=Mark Rowe. + + REGRESSION: Start Debugging JavaScript crashes browser (nightly builds only?) + + + Remove JSC_FAST_CALL as it wasn't gaining us anything, and was + resulting in weird bugs in the nightly builds. + + * parser/Nodes.cpp: + * parser/Nodes.h: + (JSC::ExpressionNode::isNumber): + (JSC::ExpressionNode::isString): + (JSC::ExpressionNode::isNull): + (JSC::ExpressionNode::isPure): + (JSC::ExpressionNode::isLocation): + (JSC::ExpressionNode::isResolveNode): + (JSC::ExpressionNode::isBracketAccessorNode): + (JSC::ExpressionNode::isDotAccessorNode): + (JSC::ExpressionNode::isFuncExprNode): + (JSC::ExpressionNode::isSimpleArray): + (JSC::ExpressionNode::isAdd): + (JSC::ExpressionNode::resultDescriptor): + (JSC::StatementNode::firstLine): + (JSC::StatementNode::lastLine): + (JSC::StatementNode::isEmptyStatement): + (JSC::StatementNode::isReturnNode): + (JSC::StatementNode::isExprStatement): + (JSC::StatementNode::isBlock): + (JSC::NullNode::isNull): + (JSC::BooleanNode::isPure): + (JSC::NumberNode::value): + (JSC::NumberNode::setValue): + (JSC::NumberNode::isNumber): + (JSC::NumberNode::isPure): + (JSC::StringNode::isPure): + (JSC::StringNode::isString): + (JSC::ResolveNode::identifier): + (JSC::ResolveNode::isLocation): + (JSC::ResolveNode::isResolveNode): + (JSC::BracketAccessorNode::isLocation): + (JSC::BracketAccessorNode::isBracketAccessorNode): + (JSC::DotAccessorNode::base): + (JSC::DotAccessorNode::identifier): + (JSC::DotAccessorNode::isLocation): + (JSC::DotAccessorNode::isDotAccessorNode): + (JSC::TypeOfResolveNode::identifier): + (JSC::AddNode::isAdd): + (JSC::BlockNode::isBlock): + (JSC::EmptyStatementNode::isEmptyStatement): + (JSC::ExprStatementNode::isExprStatement): + (JSC::ReturnNode::isReturnNode): + (JSC::ScopeNode::sourceURL): + (JSC::ProgramNode::bytecode): + (JSC::EvalNode::bytecode): + (JSC::FunctionBodyNode::parameters): + (JSC::FunctionBodyNode::toSourceString): + (JSC::FunctionBodyNode::bytecode): + (JSC::FuncExprNode::isFuncExprNode): + +2009-05-19 Maciej Stachowiak + + Reviewed by Gavin Barraclough. + + - speed up string comparison, especially for short strings + + ~1% on SunSpider + + * JavaScriptCore.exp: + * runtime/UString.cpp: + * runtime/UString.h: + (JSC::operator==): Inline UString's operator==, since it is called from + hot places in the runtime. Also, specialize 2-char strings in a similar way to + 1-char, since we're taking the hit of a switch anyway. + +2009-05-18 Maciej Stachowiak + + Reviewed by Gavin Barraclough. + + - for polymorphic prototype lookups, increase the number of slots from 4 to 8 + + ~4% faster on v8 raytrace benchmark + + * bytecode/Instruction.h: + +2009-05-18 Maciej Stachowiak + + Reviewed by Oliver Hunt. + + - tighten up the code for the load_varargs stub + + ~1-2% on v8-raytrace + + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_load_varargs): Hoist some loop invariants that + the compiler didn't feel like hoisting for us. Remove unneeded exception check. + +2009-05-18 Maciej Stachowiak + + Reviewed by Geoff Garen. + + - Improve code generation for access to prototype properties + + ~0.4% speedup on SunSpider. + + Based on a suggestion from Geoff Garen. + + * jit/JIT.h: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetDirectOffset): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + +2009-05-18 Gustavo Noronha Silva + + Reviewed by Gavin Barraclough. + + Enable YARR, and disable WREC for GTK+. + + * GNUmakefile.am: + * yarr/RegexParser.h: + +2009-05-18 Jan Michael Alonzo + + Reviewed by Xan Lopez. + + [Gtk] Various autotools build refactoring and fixes + https://bugs.webkit.org/show_bug.cgi?id=25286 + + Add -no-install and -no-fast-install to programs and tests that we + don't install. Also remove -O2 since this is already handled at + configure time. + + * GNUmakefile.am: + +2009-05-17 Jan Michael Alonzo + + Reviewed by Xan Lopez. + + [Gtk] Various autotools build refactoring and fixes + https://bugs.webkit.org/show_bug.cgi?id=25286 + + Add JavaScriptCore/ to JSC include path only since it's not + required when building WebCore. + + * GNUmakefile.am: + +2009-05-17 Steve Falkenburg + + Windows build fix + + * JavaScriptCore.vcproj/JavaScriptCore.make: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2009-05-15 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Looking like MSVC doesn't like static variables in inline methods? + Make the state of the SSE2 check a static variable on the class + MacroAssemblerX86Common as a speculative build fix for Windows. + + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::convertInt32ToDouble): + (JSC::MacroAssemblerX86Common::branchDouble): + (JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32): + (JSC::MacroAssemblerX86Common::isSSE2Present): + (JSC::MacroAssemblerX86Common::): + * jit/JIT.cpp: + +2009-05-15 Adam Roben + + Add some assembler headers to JavaScriptCore.vcproj + + This is just a convenience for Windows developers. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2009-05-15 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Add FP support to the MacroAssembler, port JITArithmetic over to make use of this. Also add + API to determine whether FP support is available 'MacroAssembler::supportsFloatingPoint()', + FP is presently only supported on SSE2 platforms, not x87. On platforms where a suitable + hardware FPU is not available 'supportsFloatingPoint()' may simply return false, and all + other methods ASSERT_NOT_REACHED(). + + * assembler/AbstractMacroAssembler.h: + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::MacroAssemblerX86): + (JSC::MacroAssemblerX86::branch32): + (JSC::MacroAssemblerX86::branchPtrWithPatch): + (JSC::MacroAssemblerX86::supportsFloatingPoint): + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::): + (JSC::MacroAssemblerX86Common::loadDouble): + (JSC::MacroAssemblerX86Common::storeDouble): + (JSC::MacroAssemblerX86Common::addDouble): + (JSC::MacroAssemblerX86Common::subDouble): + (JSC::MacroAssemblerX86Common::mulDouble): + (JSC::MacroAssemblerX86Common::convertInt32ToDouble): + (JSC::MacroAssemblerX86Common::branchDouble): + (JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32): + (JSC::MacroAssemblerX86Common::branch32): + (JSC::MacroAssemblerX86Common::branch16): + (JSC::MacroAssemblerX86Common::branchTest32): + (JSC::MacroAssemblerX86Common::branchAdd32): + (JSC::MacroAssemblerX86Common::branchMul32): + (JSC::MacroAssemblerX86Common::branchSub32): + (JSC::MacroAssemblerX86Common::set32): + (JSC::MacroAssemblerX86Common::setTest32): + (JSC::MacroAssemblerX86Common::x86Condition): + (JSC::MacroAssemblerX86Common::isSSE2Present): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::movePtrToDouble): + (JSC::MacroAssemblerX86_64::moveDoubleToPtr): + (JSC::MacroAssemblerX86_64::setPtr): + (JSC::MacroAssemblerX86_64::branchPtr): + (JSC::MacroAssemblerX86_64::branchTestPtr): + (JSC::MacroAssemblerX86_64::branchAddPtr): + (JSC::MacroAssemblerX86_64::branchSubPtr): + (JSC::MacroAssemblerX86_64::supportsFloatingPoint): + * assembler/X86Assembler.h: + * jit/JIT.cpp: + (JSC::JIT::JIT): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::emit_op_rshift): + (JSC::JIT::emitSlow_op_rshift): + (JSC::JIT::emitSlow_op_jnless): + (JSC::JIT::emitSlow_op_jnlesseq): + (JSC::JIT::compileBinaryArithOp): + (JSC::JIT::compileBinaryArithOpSlowCase): + (JSC::JIT::emit_op_add): + (JSC::JIT::emitSlow_op_add): + (JSC::JIT::emit_op_mul): + (JSC::JIT::emitSlow_op_mul): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + +2009-05-15 Francisco Tolmasky + + BUG 25467: JavaScript debugger should use function.displayName as the function's name in the call stack + + + Reviewed by Adam Roben. + + * JavaScriptCore.exp: Added calculatedFunctionName + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Added calculatedFunctionName + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Added calculatedFunctionName + * debugger/DebuggerCallFrame.cpp: Added calculatedFunctionName to match existing one in ProfileNode. + (JSC::DebuggerCallFrame::calculatedFunctionName): + * debugger/DebuggerCallFrame.h: Added calculatedFunctionName to match existing one in ProfileNode. + +2009-05-14 Gavin Barraclough + + Build fix, not reviewed. + + Quick fixes for JIT builds with OPTIMIZE flags disabled. + + * jit/JITCall.cpp: + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpCallSlowCase): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compilePutByIdHotPath): + +2009-05-14 Steve Falkenburg + + Back out incorrect Windows build fix + + * JavaScriptCore.vcproj/JavaScriptCore.make: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2009-05-14 Steve Falkenburg + + Windows build fix + + * JavaScriptCore.vcproj/JavaScriptCore.make: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2009-05-14 Adam Roben + + Windows jsc build fix + + r43648 modified jsc.vcproj's post-build event not to try to copy files + that aren't present. Then r43661 mistakenly un-did that modification. + This patch restores the modification from r43648, but puts the code in + jscCommon.vsprops (where it should have been added in r43648). + + * JavaScriptCore.vcproj/jsc/jsc.vcproj: Restored empty + VCPostBuildEventTool tags. + * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Modified the post-build + event command line to match the one in jsc.vcproj from r43648. + +2009-05-14 Laszlo Gombos + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=25325 + + Make sure pthread_self() is declared before it gets called in Collector.cpp + + * runtime/Collector.cpp: Include pthread.h in most Unix-like platforms + (not just for OPENBSD) + +2009-05-14 Mark Rowe + + Reviewed by Oliver Hunt. + + Fix . + Bug 25785: Segfault in mark when using JSObjectMakeConstructor + + * API/JSObjectRef.cpp: + (JSObjectMakeConstructor): OpaqueJSClass::prototype can return 0. We need to use the default object prototype when it does. + * API/tests/testapi.c: + (main): Add a test case. + * runtime/JSObject.h: + (JSC::JSObject::putDirect): Add a clearer assertion for a null value. The assertion on the next line does catch this, + but the cause of the failure is not clear from the assertion itself. + +2009-05-14 Mark Rowe + + Rubber-stamped by Darin Adler. + + When building with Xcode 3.1.3 should be using gcc 4.2 + + The meaning of XCODE_VERSION_ACTUAL is more sensible in newer versions of Xcode. + Update our logic to select the compiler version to use the more appropriate XCODE_VERSION_MINOR + if the version of Xcode supports it, and fall back to XCODE_VERSION_ACTUAL if not. + + * Configurations/Base.xcconfig: + +2009-05-14 Gavin Barraclough + + Reviewed by Geoff Garen. + + Checking register file bounds should be a ptr comparison (m_end is a Register*). + Also, the compare should be unsigned, pointers don'ts go negative. + + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + +2009-05-13 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Fix REGRESSION: page at Metroauto site crashes in cti_op_loop_if_less (25730) + + op_loop_if_less (imm < op) was loading op into regT1, but in the slow path spills regT0. + This leads to bad happen. + + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_loop_if_less): + (JSC::JIT::emitSlow_op_loop_if_less): + +2009-05-13 Dmitry Titov + + Rubber-stamped by Mark Rowe. + + https://bugs.webkit.org/show_bug.cgi?id=25746 + Revert http://trac.webkit.org/changeset/43507 which caused crash in PPC nightlies with Safari 4. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + * bytecode/SamplingTool.cpp: + (JSC::SamplingThread::start): + (JSC::SamplingThread::stop): + * bytecode/SamplingTool.h: + * wtf/CrossThreadRefCounted.h: + (WTF::CrossThreadRefCounted::CrossThreadRefCounted): + (WTF::::ref): + (WTF::::deref): + * wtf/Threading.h: + * wtf/ThreadingNone.cpp: + * wtf/ThreadingPthreads.cpp: + (WTF::threadMapMutex): + (WTF::initializeThreading): + (WTF::threadMap): + (WTF::identifierByPthreadHandle): + (WTF::establishIdentifierForPthreadHandle): + (WTF::pthreadHandleForIdentifier): + (WTF::clearPthreadHandleForIdentifier): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::detachThread): + (WTF::currentThread): + * wtf/ThreadingWin.cpp: + (WTF::threadMapMutex): + (WTF::initializeThreading): + (WTF::threadMap): + (WTF::storeThreadHandleByIdentifier): + (WTF::threadHandleForIdentifier): + (WTF::clearThreadHandleForIdentifier): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::detachThread): + (WTF::currentThread): + * wtf/gtk/ThreadingGtk.cpp: + (WTF::threadMapMutex): + (WTF::initializeThreading): + (WTF::threadMap): + (WTF::identifierByGthreadHandle): + (WTF::establishIdentifierForThread): + (WTF::threadForIdentifier): + (WTF::clearThreadForIdentifier): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::currentThread): + * wtf/qt/ThreadingQt.cpp: + (WTF::threadMapMutex): + (WTF::threadMap): + (WTF::identifierByQthreadHandle): + (WTF::establishIdentifierForThread): + (WTF::clearThreadForIdentifier): + (WTF::threadForIdentifier): + (WTF::initializeThreading): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::currentThread): + +2009-05-13 Darin Adler + + Revert the parser arena change. It was a slowdown, not a speedup. + Better luck next time (I'll break it up into pieces). + +2009-05-13 Darin Adler + + Tiger build fix. + + * parser/Grammar.y: Add back empty code blocks, needed by older + versions of bison on certain rules. + +2009-05-13 Steve Falkenburg + + Windows build fix. + + * JavaScriptCore.vcproj/jsc/jsc.vcproj: + +2009-05-13 Adam Roben + + Windows build fixes after r43642 + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + Updated. + + * debugger/Debugger.cpp: + * runtime/ArrayConstructor.cpp: + * runtime/JSArray.cpp: + * runtime/RegExp.cpp: + * runtime/RegExpConstructor.cpp: + * runtime/RegExpPrototype.cpp: + * runtime/StringPrototype.cpp: + Added missing #includes. + +2009-05-13 Darin Adler + + Reviewed by Cameron Zwarich. + + Bug 25674: syntax tree nodes should use arena allocation + https://bugs.webkit.org/show_bug.cgi?id=25674 + + Step 3: Add some actual arena allocation. About 1% SunSpider speedup. + + * JavaScriptCore.exp: Updated. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): Updated since VarStack + contains const Identifier* now. + (JSC::BytecodeGenerator::emitPushNewScope): Updated to take a const + Identifier&. + * bytecompiler/BytecodeGenerator.h: Ditto + + * bytecompiler/SegmentedVector.h: Added isEmpty. + + * debugger/Debugger.cpp: + (JSC::Debugger::recompileAllJSFunctions): Moved this function here from + WebCore so WebCore doesn't need the details of FunctionBodyNode. + * debugger/Debugger.h: Ditto. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::execute): Updated since VarStack contains const + Identifier* now. + + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_vm_lazyLinkCall): Call isHostFunction on the body + rather than on the function object, since we can't easily have inlined + access to the FunctionBodyNode in JSFunction.h since WebCore needs + access to that header. + (JSC::JITStubs::cti_op_construct_JSConstruct): Ditto. + * profiler/Profiler.cpp: + (JSC::Profiler::createCallIdentifier): Ditto. + + * parser/Grammar.y: Use JSGlobalData* to pass the global data pointer + around whenever possible instead of using void*. Changed + SET_EXCEPTION_LOCATION from a macro to an inline function. Marked + the structure-creating functions inline. Changed the VarStack to use + identifier pointers instead of actual identifiers. This takes + advantage of the fact that all identifier pointers come from the + arena and avoids reference count churn. Changed Identifier* to + const Identifier* to make sure we don't modify any by accident. + Used identifiers for regular expression strings too, using the new + scanRegExp that has out parameters instead of the old one that relied + on side effects in the Lexer. Move the creation of numeric identifiers + out of this file and into the PropertyNode constructor. + + * parser/Lexer.cpp: + (JSC::Lexer::setCode): Pass in ParserArena, used for identifiers. + (JSC::Lexer::makeIdentifier): Changed return type to const Identifier* + and changed to call ParserArena. + (JSC::Lexer::scanRegExp): Added out arguments that are const Identifier* + as well as a prefix character argument so we can handle the /= case + without a string append. + (JSC::Lexer::skipRegExp): Added. Skips a regular expression without + allocating Identifier objects. + (JSC::Lexer::clear): Removed the code to manage m_identifiers, m_pattern, + and m_flags, and added code to set m_arena to 0. + * parser/Lexer.h: Updated for changes above. + + * parser/NodeConstructors.h: + (JSC::ParserArenaFreeable::operator new): Added. Calls allocateFreeable + on the arena. + (JSC::ParserArenaDeletable::operator new): Changed to call the + allocateDeletable function on the arena instead of deleteWithArena. + (JSC::RegExpNode::RegExpNode): Changed arguments to Identifier instead + of UString since these come from the parser which makes identifiers. + (JSC::PropertyNode::PropertyNode): Added new constructor that makes + numeric identifiers. Some day we might want to optimize this for + integers so it doesn't create a string for each one. + (JSC::ContinueNode::ContinueNode): Initialize m_ident to nullIdentifier + since it's now a const Identifier& so it can't be left uninitialized. + (JSC::BreakNode::BreakNode): Ditto. + (JSC::CaseClauseNode::CaseClauseNode): Updated to use SourceElements* + to keep track of the statements rather than a separate statement vector. + (JSC::BlockNode::BlockNode): Ditto. + (JSC::ForInNode::ForInNode): Initialize m_ident to nullIdentifier. + + * parser/Nodes.cpp: Moved the comment explaining emitBytecode in here. + It seemed strangely out of place in the header. + (JSC::ThrowableExpressionData::emitThrowError): Added an overload for + UString as well as Identifier. + (JSC::SourceElements::singleStatement): Added. + (JSC::SourceElements::lastStatement): Added. + (JSC::RegExpNode::emitBytecode): Updated since the pattern and flags + are now Identifier instead of UString. Also changed the throwError code + to use the substitution mechanism instead of doing a string append. + (JSC::SourceElements::emitBytecode): Added. Replaces the old + statementListEmitCode function, since we now keep the SourceElements + objects around. + (JSC::BlockNode::lastStatement): Added. + (JSC::BlockNode::emitBytecode): Changed to use emitBytecode instead of + statementListEmitCode. + (JSC::CaseClauseNode::emitBytecode): Added. + (JSC::CaseBlockNode::emitBytecodeForBlock): Changed to use emitBytecode + instead of statementListEmitCode. + (JSC::ScopeNodeData::ScopeNodeData): Changed to store the + SourceElements* instead of using releaseContentsIntoVector. + (JSC::ScopeNode::emitStatementsBytecode): Added. + (JSC::ScopeNode::singleStatement): Added. + (JSC::ProgramNode::emitBytecode): Call emitStatementsBytecode instead + of statementListEmitCode. + (JSC::EvalNode::emitBytecode): Ditto. + (JSC::EvalNode::generateBytecode): Removed code to clear the children + vector. This optimization is no longer possible since everything is in + a single arena. + (JSC::FunctionBodyNode::emitBytecode): Call emitStatementsBytecode + insetad of statementListEmitCode and check for the return node using + the new functions. + + * parser/Nodes.h: Changed VarStack to store const Identifier* instead + of Identifier and rely on the arena to control lifetime. Added a new + ParserArenaFreeable class. Made ParserArenaDeletable inherit from + FastAllocBase instead of having its own operator new. Base the Node + class on ParserArenaFreeable. Changed the various Node classes + to use const Identifier& instead of Identifier to avoid the need to + call their destructors and allow them to function as "freeable" in the + arena. Removed extraneous JSC_FAST_CALL on definitions of inline functions. + Changed ElementNode, PropertyNode, ArgumentsNode, ParameterNode, + CaseClauseNode, ClauseListNode, and CaseBlockNode to use ParserArenaFreeable + as a base class since they do not descend from Node. Eliminated the + StatementVector type and instead have various classes use SourceElements* + instead of StatementVector. This prevents those classes from having th + use ParserArenaDeletable to make sure the vector destructor is called. + + * parser/Parser.cpp: + (JSC::Parser::parse): Pass the arena to the lexer. + + * parser/Parser.h: Added an include of ParserArena.h, which is no longer + included by Nodes.h. + + * parser/ParserArena.cpp: + (JSC::ParserArena::ParserArena): Added. Initializes the new members, + m_freeableMemory, m_freeablePoolEnd, and m_identifiers. + (JSC::ParserArena::freeablePool): Added. Computes the pool pointer, + since we store only the current pointer and the end of pool pointer. + (JSC::ParserArena::deallocateObjects): Added. Contains the common + memory-deallocation logic used by both the destructor and the + reset function. + (JSC::ParserArena::~ParserArena): Changed to call deallocateObjects. + (JSC::ParserArena::reset): Ditto. Also added code to zero out the + new structures, and switched to use clear() instead of shrink(0) since + we don't really reuse arenas. + (JSC::ParserArena::makeNumericIdentifier): Added. + (JSC::ParserArena::allocateFreeablePool): Added. Used when the pool + is empty. + (JSC::ParserArena::isEmpty): Added. No longer inline, which is fine + since this is used only for assertions at the moment. + + * parser/ParserArena.h: Added an actual arena of "freeable" objects, + ones that don't need destructors to be called. Also added the segmented + vector of identifiers that used to be in the Lexer. + + * runtime/FunctionConstructor.cpp: + (JSC::extractFunctionBody): Use singleStatement function rather than + getting at a StatementVector. + + * runtime/FunctionPrototype.cpp: + (JSC::functionProtoFuncToString): Call isHostFunction on the body + rather than the function object. + + * runtime/JSFunction.cpp: + (JSC::JSFunction::JSFunction): Moved the structure version of this in + here from the header. It's not hot enough that it needs to be inlined. + (JSC::JSFunction::isHostFunction): Moved this in here from the header. + It's now a helper to be used only within the class. + (JSC::JSFunction::setBody): Moved this in here. It's not hot enough that + it needs to be inlined, and we want to be able to compile the header + without the definition of FunctionBodyNode. + + * runtime/JSFunction.h: Eliminated the include of "Nodes.h". This was + exposing too much JavaScriptCore dependency to WebCore. Because of this + change and some changes made to WebCore, we could now export a lot fewer + headers from JavaScriptCore, but I have not done that yet in this check-in. + Made a couple functions non-inline. Removes some isHostFunction() assertions. + + * wtf/FastAllocBase.h: Added the conventional using statements we use in + WTF so we can use identifiers from the WTF namespace without explicit + namespace qualification or namespace directive. This is the usual WTF style, + although it's unconventional in the C++ world. We use the namespace primarily + for link-time disambiguation, not compile-time. + + * wtf/FastMalloc.cpp: Fixed an incorrect comment. + +2009-05-13 Xan Lopez + + Unreviewed build fix: add JITStubCall.h to files list. + + * GNUmakefile.am: + +2009-05-13 Ariya Hidayat + + Unreviewed build fix, as suggested by Yael Aharon . + + * wtf/qt/ThreadingQt.cpp: + (WTF::waitForThreadCompletion): renamed IsValid to isValid. + +2009-05-13 Jan Michael Alonzo + + Revert r43562 - [Gtk] WTF_USE_JSC is already defined in + WebCore/config.h. + + * wtf/Platform.h: + +2009-05-12 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Add SamplingCounter tool to provide a simple mechanism for counting events in JSC + (enabled using ENABLE(SAMPLING_COUNTERS)). To count events within a single function + use the class 'SamplingCounter', where the counter may be incremented from multiple + functions 'GlobalSamplingCounter' may be convenient; all other counters (stack or + heap allocated, rather than statically declared) should use the DeletableSamplingCounter. + Further description of these classes is provided alongside their definition in + SamplingTool.h. + + Counters may be incremented from c++ by calling the 'count()' method on the counter, + or may be incremented by JIT code by using the 'emitCount()' method within the JIT. + + This patch also fixes CODEBLOCK_SAMPLING, which was missing a null pointer check. + + * JavaScriptCore.exp: + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::addWithCarry32): + (JSC::MacroAssemblerX86::and32): + (JSC::MacroAssemblerX86::or32): + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::and32): + (JSC::MacroAssemblerX86Common::or32): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::and32): + (JSC::MacroAssemblerX86_64::or32): + (JSC::MacroAssemblerX86_64::addPtr): + * assembler/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::adcl_im): + (JSC::X86Assembler::addq_im): + (JSC::X86Assembler::andl_im): + (JSC::X86Assembler::orl_im): + * bytecode/SamplingTool.cpp: + (JSC::AbstractSamplingCounter::dump): + * bytecode/SamplingTool.h: + (JSC::AbstractSamplingCounter::count): + (JSC::GlobalSamplingCounter::name): + (JSC::SamplingCounter::SamplingCounter): + * jit/JIT.h: + * jit/JITCall.cpp: + (JSC::): + * jit/JITInlineMethods.h: + (JSC::JIT::setSamplingFlag): + (JSC::JIT::clearSamplingFlag): + (JSC::JIT::emitCount): + * jsc.cpp: + (runWithScripts): + * parser/Nodes.cpp: + (JSC::ScopeNode::ScopeNode): + * wtf/Platform.h: + +2009-05-13 Steve Falkenburg + + Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore.make: + +2009-05-12 Steve Falkenburg + + Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore.make: + +2009-05-12 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Crash occurs at JSC::Interpreter::execute() when loading http://www.sears.com + + We created the arguments objects before an op_push_scope but not + before op_push_new_scope, this meant a null arguments object could + be resolved inside catch blocks. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitPushNewScope): + +2009-05-12 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Crash occurs at JSC::JSActivation::mark() when loading http://www.monster.com; http://www.cnet.com + Crash loading www.google.dk/ig (and other igoogle's as well) + + Following on from the lazy arguments creation patch, it's now + possible for an activation to to have a null register in the callframe + so we can't just blindly mark the local registers in an activation, + and must null check first instead. + + * API/tests/testapi.c: + (functionGC): + * API/tests/testapi.js: + (bludgeonArguments.return.g): + (bludgeonArguments): + * runtime/JSActivation.cpp: + (JSC::JSActivation::mark): + +2009-05-12 Gavin Barraclough + + Rubber stamped by Geoff Garen. + + WTF_USE_CTI_REPATCH_PIC is no longer used, remove. + + * jit/JIT.h: + * jit/JITStubCall.h: + +2009-05-12 Gavin Barraclough + + Reviewed by Maciej Stachowiak. + + We've run into some problems where changing the size of the class JIT leads to + performance fluctuations. Try forcing alignment in an attempt to stabalize this. + + * jit/JIT.h: + +2009-05-12 Kevin Ollivier + + wx build fix. Add ParserArena.cpp to the build. + + * JavaScriptCoreSources.bkl: + +2009-05-12 Oliver Hunt + + Reviewed by Geoff Garen. + + Unsigned underflow on 64bit cannot be treated as a negative number + + This code included some placeswhere we deliberately create negative offsets + from unsigned values, on 32bit this is "safe", but in 64bit builds much + badness occurs. Solution is to use signed types as nature intended. + + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_load_varargs): + +2009-05-12 Jan Michael Alonzo + + Reviewed by Holger Freyther. + + [Gtk] Various autotools build refactoring and fixes + https://bugs.webkit.org/show_bug.cgi?id=25286 + + Define WTF_USE_JSC for the Gtk port. + + * wtf/Platform.h: + +2009-05-12 Maciej Stachowiak + + Reviewed by Oliver Hunt. + + - allow all of strictEqual to be inlined into cti_op_stricteq once again + + We had this optimization once but accidentally lost it at some point. + + * runtime/Operations.h: + (JSC::JSValue::strictEqualSlowCaseInline): + (JSC::JSValue::strictEqual): + +2009-05-12 Gavin Barraclough + + Reviewed by Oliver Hunt. + + instanceof should throw if the constructor being tested does not implement + 'HasInstance" (i.e. is a function). Instead we were returning false. + + * interpreter/Interpreter.cpp: + (JSC::isInvalidParamForIn): + (JSC::isInvalidParamForInstanceOf): + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_instanceof): + * tests/mozilla/ecma_2/instanceof/instanceof-003.js: + Fix broken test case. + * tests/mozilla/ecma_2/instanceof/regress-7635.js: + Remove broken test case (was an exact duplicate of a test in instanceof-003.js). + +2009-05-12 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Improve function call forwarding performance + + Make creation of the Arguments object occur lazily, so it + is not necessarily created for every function that references + it. Then add logic to Function.apply to allow it to avoid + allocating the Arguments object at all. Helps a lot with + the function forwarding/binding logic in jQuery, Prototype, + and numerous other JS libraries. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * bytecode/Opcode.h: + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): + (JSC::BytecodeGenerator::registerFor): + (JSC::BytecodeGenerator::willResolveToArguments): + (JSC::BytecodeGenerator::uncheckedRegisterForArguments): + (JSC::BytecodeGenerator::createArgumentsIfNecessary): + (JSC::BytecodeGenerator::emitCallEval): + (JSC::BytecodeGenerator::emitPushScope): + * bytecompiler/BytecodeGenerator.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::retrieveArguments): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + * jit/JIT.h: + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_create_arguments): + (JSC::JIT::emit_op_init_arguments): + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_tear_off_arguments): + (JSC::JITStubs::cti_op_load_varargs): + * parser/Nodes.cpp: + (JSC::ApplyFunctionCallDotNode::emitBytecode): + +2009-05-11 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Enable use of SamplingFlags directly from JIT code. + + * bytecode/SamplingTool.h: + * jit/JIT.h: + (JSC::JIT::sampleCodeBlock): + (JSC::JIT::sampleInstruction): + * jit/JITInlineMethods.h: + (JSC::JIT::setSamplingFlag): + (JSC::JIT::clearSamplingFlag): + +2009-05-11 Gavin Barraclough + + Reviewed by Cameron Zwarich. + + Implement JIT generation for instanceof for non-objects (always returns false). + Also fixes the sequencing of the prototype and value isObject checks, to no match the spec. + + 0.5% progression on v8 tests overall, due to 3.5% on early-boyer. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + * runtime/JSObject.cpp: + (JSC::JSObject::hasInstance): + * runtime/TypeInfo.h: + (JSC::TypeInfo::TypeInfo): + +2009-05-11 Geoffrey Garen + + Reviewed by Sam Weinig. + + A little more JIT refactoring. + + Rearranged code to more clearly indicate what's conditionally compiled + and why. Now, all shared code is at the top of our JIT files, and all + #if'd code is at the bottom. #if'd code is delineated by large comments. + + Moved functions that relate to the JIT but don't explicitly do codegen + into JIT.cpp. Refactored SSE2 check to store its result as a data member + in the JIT. + + * jit/JIT.cpp: + (JSC::isSSE2Present): + (JSC::JIT::JIT): + (JSC::JIT::unlinkCall): + (JSC::JIT::linkCall): + * jit/JIT.h: + (JSC::JIT::isSSE2Present): + * jit/JITArithmetic.cpp: + (JSC::JIT::emit_op_mod): + (JSC::JIT::emitSlow_op_mod): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCallVarargs): + (JSC::JIT::compileOpCallVarargsSlowCase): + +2009-05-11 Holger Hans Peter Freyther + + Build fix. + + * JavaScriptCore.pri: Build the new JITOpcodes.cpp + +2009-05-11 Sam Weinig + + Reviewed by Geoffrey Garen. + + More re-factoring of JIT code generation. Use a macro to + forward the main switch-statement cases to the helper functions. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + +2009-05-11 Sam Weinig + + Reviewed by Geoffrey Garen. + + More re-factoring of JIT code generation to move opcode generation + to helper functions outside the main switch-statement and gave those + helper functions standardized names. This patch covers the remaining + slow cases. + + * jit/JIT.cpp: + * jit/JIT.h: + * jit/JITOpcodes.cpp: + +2009-05-11 Geoffrey Garen + + Build fix. + + * GNUmakefile.am: Added JITOpcodes.cpp and JITStubCall.h to the project. + +2009-05-11 Geoffrey Garen + + Build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added + JITOpcodes.cpp and JITStubCall.h to the project. + +2009-05-11 Geoffrey Garen + + Reviewed by Sam Weinig. + + Some JIT refactoring. + + Moved JITStubCall* into its own header. + + Modified JITStubCall to ASSERT that its return value is handled correctly. + Also, replaced function template with explicit instantiations to resolve + some confusion. + + Replaced all uses of emit{Get,Put}CTIArgument with explicit peeks, pokes, + and calls to killLastResultRegister(). + + * JavaScriptCore.xcodeproj/project.pbxproj: + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompile): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + * jit/JITCall.cpp: + * jit/JITInlineMethods.h: + (JSC::JIT::restoreArgumentReference): + * jit/JITPropertyAccess.cpp: + * jit/JITStubCall.h: Copied from jit/JIT.h. + (JSC::JITStubCall::JITStubCall): + (JSC::JITStubCall::addArgument): + (JSC::JITStubCall::call): + (JSC::JITStubCall::): + +2009-05-11 Sam Weinig + + Reviewed by Geoffrey Garen. + + Start re-factoring JIT code generation to move opcode generation + to helper functions outside the main switch-statement and gave those + helper functions standardized names. This patch only covers the main + pass and all the arithmetic opcodes in the slow path. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + * jit/JITOpcodes.cpp: Copied from jit/JIT.cpp. + * jit/JITPropertyAccess.cpp: + +2009-05-11 Steve Falkenburg + + Re-add experimental PGO configs. + + Reviewed by Adam Roben. + + * JavaScriptCore.vcproj/JavaScriptCore.make: + * JavaScriptCore.vcproj/JavaScriptCore.sln: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: + * JavaScriptCore.vcproj/jsc/jsc.vcproj: + +2009-05-11 Sam Weinig + + Reviewed by Geoffrey "1" Garen. + + Rip out the !USE(CTI_REPATCH_PIC) code. It was untested and unused. + + * jit/JIT.h: + (JSC::JIT::compileGetByIdChainList): + (JSC::JIT::compileGetByIdChain): + (JSC::JIT::compileCTIMachineTrampolines): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + * jit/JITStubs.cpp: + (JSC::JITStubs::tryCachePutByID): + (JSC::JITStubs::tryCacheGetByID): + +2009-05-11 Dmitry Titov + + GTK build fix - the deprecated waitForThreadCompletion is not needed on GTK. + + * wtf/ThreadingPthreads.cpp: used #ifdef PLATFORM(DARWIN) around waitForThreadCompletion(). + +2009-05-11 Adam Roben + + Build fix for newer versions of GCC + + * wtf/ThreadingPthreads.cpp: Added a declaration of + waitForThreadCompletion before its definition to silence a warning. + +2009-05-11 Dmitry Titov + + Reviewed by Alexey Proskuryakov and Adam Roben. + + https://bugs.webkit.org/show_bug.cgi?id=25348 + Change WTF::ThreadIdentifier to be an actual (but wrapped) thread id, remove ThreadMap. + + * wtf/Threading.h: + (WTF::ThreadIdentifier::ThreadIdentifier): + (WTF::ThreadIdentifier::isValid): + (WTF::ThreadIdentifier::invalidate): + (WTF::ThreadIdentifier::platformId): + ThreadIdentifier is now a class, containing a PlatformThreadIdentifier and + methods that are used across the code on thread ids: construction, comparisons, + check for 'valid' state etc. '0' is used as invalid id, which happens to just work + with all platform-specific thread id implementations. + + All the following files repeatedly reflect the new ThreadIdentifier for each platform. + We remove ThreadMap and threadMapMutex from all of them, remove the functions that + populated/searched/cleared the map and add platform-specific comparison operators + for ThreadIdentifier. + + There are specific temporary workarounds for Safari 4 beta on OSX and Win32 since the + public build uses WTF threading functions with old type of ThreadingIdentifier. + The next time Safari 4 is rebuilt, it will 'automatically' pick up the new type and new + functions so the deprecated ones can be removed. + + * wtf/gtk/ThreadingGtk.cpp: + (WTF::ThreadIdentifier::operator==): + (WTF::ThreadIdentifier::operator!=): + (WTF::initializeThreading): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::currentThread): + + * wtf/ThreadingNone.cpp: + (WTF::ThreadIdentifier::operator==): + (WTF::ThreadIdentifier::operator!=): + + * wtf/ThreadingPthreads.cpp: + (WTF::ThreadIdentifier::operator==): + (WTF::ThreadIdentifier::operator!=): + (WTF::initializeThreading): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::detachThread): + (WTF::currentThread): + (WTF::waitForThreadCompletion): This is a workaround for Safari 4 beta on Mac. + Safari 4 is linked against old definition of ThreadIdentifier so it treats it as uint32_t. + This 'old' variant of waitForThreadCompletion takes uint32_t and has the old decorated name, so Safari can + load it from JavaScriptCore library. The other functions (CurrentThread() etc) happen to match their previous + decorated names and, while they return pthread_t now, it is a pointer which round-trips through a uint32_t. + This function will be removed as soon as Safari 4 will release next public build. + + * wtf/qt/ThreadingQt.cpp: + (WTF::ThreadIdentifier::operator==): + (WTF::ThreadIdentifier::operator!=): + (WTF::initializeThreading): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::currentThread): + + * wtf/ThreadingWin.cpp: + (WTF::ThreadIdentifier::operator==): + (WTF::ThreadIdentifier::operator!=): + (WTF::initializeThreading): + (WTF::createThreadInternal): All the platforms (except Windows) used a sequential + counter as a thread ID and mapped it into platform ID. Windows was using native thread + id and mapped it into thread handle. Since we can always obtain a thread handle + by thread id, createThread now closes the handle. + (WTF::waitForThreadCompletion): obtains another one using OpenThread(id) API. If can not obtain a handle, + it means the thread already exited. + (WTF::detachThread): + (WTF::currentThread): + (WTF::detachThreadDeprecated): old function, renamed (for Win Safari 4 beta which uses it for now). + (WTF::waitForThreadCompletionDeprecated): same. + (WTF::currentThreadDeprecated): same. + (WTF::createThreadDeprecated): same. + + * bytecode/SamplingTool.h: + * bytecode/SamplingTool.cpp: Use DEFINE_STATIC_LOCAL for a static ThreadIdentifier variable, to avoid static constructor. + + * JavaScriptCore.exp: export lists - updated decorated names of the WTF threading functions + since they now take a different type as a parameter. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: ditto for Windows, plus added "deprecated" functions + that take old parameter type - turns out public beta of Safari 4 uses those, so they need to be kept along for a while. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: ditto. + +2009-05-11 Darin Adler + + Reviewed by Oliver Hunt. + + Bug 25560: REGRESSION (r34821): "string value".__proto__ gets the wrong object. + https://bugs.webkit.org/show_bug.cgi?id=25560 + rdar://problem/6861069 + + I missed this case back a year ago when I sped up handling + of JavaScript wrappers. Easy to fix. + + * runtime/JSObject.h: + (JSC::JSValue::get): Return the prototype itself if the property name + is __proto__. + * runtime/JSString.cpp: + (JSC::JSString::getOwnPropertySlot): Ditto. + +2009-05-09 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + Rename emitGetFromCallFrameHeader to emitGetFromCallFrameHeaderPtr + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + * jit/JITInlineMethods.h: + (JSC::JIT::emitGetFromCallFrameHeaderPtr): + (JSC::JIT::emitGetFromCallFrameHeader32): + +2009-05-11 Holger Hans Peter Freyther + + Unreviewed build fix. Build ParserAreana.cpp for Qt + + * JavaScriptCore.pri: + +2009-05-11 Norbert Leser + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=24536 + + Symbian compilers cannot resolve WTF::PassRefPtr + unless Profile.h is included. + + * profiler/ProfileGenerator.h: + +2009-05-11 Csaba Osztrogonac + + Reviewed by Holger Freyther. + + https://bugs.webkit.org/show_bug.cgi?id=24284 + + * JavaScriptCore.pri: coding style modified + * jsc.pro: duplicated values removed from INCLUDEPATH, DEFINES + +2009-05-11 Gustavo Noronha Silva + + Reviewed by NOBODY (build fix). + + Also add ParserArena, in addition to AllInOne, for release builds, + since adding it to AllInOne breaks Mac. + + * GNUmakefile.am: + +2009-05-11 Gustavo Noronha Silva + + Unreviewed build fix. Adding ParserArena to the autotools build. + + * GNUmakefile.am: + +2009-05-11 Adam Roben + + More Windows build fixes after r43479 + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + Export ParserArena::reset. + +2009-05-11 Adam Roben + + Windows build fixes after r43479 + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added + ParserArena to the project. + + * parser/NodeConstructors.h: Added a missing include. + (JSC::ParserArenaDeletable::operator new): Marked these as inline. + +2009-05-10 Maciej Stachowiak + + Reviewed by Geoff Garen. + + - fixed REGRESSION(r43432): Many JavaScriptCore tests crash in 64-bit + https://bugs.webkit.org/show_bug.cgi?id=25680 + + Accound for the 64-bit instruction prefix when rewriting mov to lea on 64-bit. + + * jit/JIT.h: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::patchGetByIdSelf): + (JSC::JIT::patchPutByIdReplace): + +2009-05-10 Darin Adler + + Reviewed by Cameron Zwarich. + + Bug 25674: syntax tree nodes should use arena allocation + https://bugs.webkit.org/show_bug.cgi?id=25674 + + Part two: Remove reference counting from most nodes. + + * JavaScriptCore.exp: Updated. + + * JavaScriptCore.xcodeproj/project.pbxproj: Added ParserArena.h and .cpp. + + * parser/Grammar.y: Replaced uses of ParserRefCountedData with uses of + ParserArenaData. Took out now-nonfunctional code that tries to manually + release declaration list. Changed the new calls that create FuncDeclNode + and FuncExprNode so that they use the proper version of operator new for + the reference-counted idiom, not the deletion idiom. + + * parser/NodeConstructors.h: + (JSC::ParserArenaDeletable::operator new): Added. + (JSC::ParserArenaRefCounted::ParserArenaRefCounted): Added. + (JSC::Node::Node): Removed ParserRefCounted initializer. + (JSC::ElementNode::ElementNode): Ditto. + (JSC::PropertyNode::PropertyNode): Ditto. + (JSC::ArgumentsNode::ArgumentsNode): Ditto. + (JSC::SourceElements::SourceElements): Ditto. + (JSC::ParameterNode::ParameterNode): Ditto. + (JSC::FuncExprNode::FuncExprNode): Added ParserArenaRefCounted initializer. + (JSC::FuncDeclNode::FuncDeclNode): Ditto. + (JSC::CaseClauseNode::CaseClauseNode): Removed ParserRefCounted initializer. + (JSC::ClauseListNode::ClauseListNode): Ditto. + (JSC::CaseBlockNode::CaseBlockNode): Ditto. + + * parser/NodeInfo.h: Replaced uses of ParserRefCountedData with uses of + ParserArenaData. + + * parser/Nodes.cpp: + (JSC::ScopeNode::ScopeNode): Added ParserArenaRefCounted initializer. + (JSC::ProgramNode::create): Use the proper version of operator new for + the reference-counted idiom, not the deletion idiom. Use the arena + contains function instead of the vecctor find function. + (JSC::EvalNode::create): Use the proper version of operator new for + the reference-counted idiom, not the deletion idiom. Use the arena + reset function instead of the vector shrink function. + (JSC::FunctionBodyNode::createNativeThunk): Use the proper version + of operator new for the reference-counted idiom, not the deletion idiom. + (JSC::FunctionBodyNode::create): More of the same. + + * parser/Nodes.h: Added ParserArenaDeletable and ParserArenaRefCounted + to replace ParserRefCounted. Fixed inheritance so only the classes that + need reference counting inherit from ParserArenaRefCounted. + + * parser/Parser.cpp: + (JSC::Parser::parse): Set m_sourceElements to 0 since it now starts + uninitialized. Just set it to 0 again in the failure case, since it's + now just a raw pointer, not an owning one. + (JSC::Parser::reparseInPlace): Removed now-unneeded get() function. + (JSC::Parser::didFinishParsing): Replaced uses of ParserRefCountedData + with uses of ParserArenaData. + + * parser/Parser.h: Less RefPtr, more arena. + + * parser/ParserArena.cpp: Added. + * parser/ParserArena.h: Added. + + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::~JSGlobalData): Removed arena-related code, since it's + now in the Parser. + (JSC::JSGlobalData::createLeaked): Removed unneeded #ifndef. + (JSC::JSGlobalData::createNativeThunk): Tweaked #if a bit. + + * runtime/JSGlobalData.h: Removed parserArena, which is now in Parser. + + * wtf/RefCounted.h: Added deletionHasBegun function, for use in + assertions to catch deletion not done by the deref function. + +2009-05-10 David Kilzer + + Part 2: Try to fix the Windows build by adding a symbol which is really just a re-mangling of a changed method signature + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-10 David Kilzer + + Try to fix the Windows build by removing an unknown symbol + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-10 David Kilzer + + Touch Nodes.cpp to try to fix Windows build + + * parser/Nodes.cpp: Removed whitespace. + +2009-05-10 Darin Adler + + Reviewed by Maciej Stachowiak. + + Quick fix for failures seen on buildbot. Maciej plans a better fix later. + + * wtf/dtoa.cpp: Change the hardcoded number of 32-bit words in a BigInt + from 32 to 64. Parsing "1e500", for example, requires more than 32 words. + +2009-05-10 Darin Adler + + Reviewed by Sam Weinig. + + Bug 25674: syntax tree nodes should use arena allocation + Part one: Change lifetimes so we won't have to use reference + counting so much, but don't eliminate the reference counts + entirely yet. + + * JavaScriptCore.exp: Updated. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): Update for use of raw pointers + instead of RefPtr. + (JSC::BytecodeGenerator::emitCall): Ditto. + (JSC::BytecodeGenerator::emitConstruct): Ditto. + + * parser/Grammar.y: Update node creating code to use new (JSGlobalData*) + instead of the plain new. At the moment this is just a hook for future + arena allocation; it's inline and JSGlobalData* is not used. + + * parser/NodeConstructors.h: Updated for name change of parserObjects to + parserArena. Also added explicit initialization for raw pointers that used + to be RefPtr. Also removed some uses of get() that aren't needed now that + the pointers are raw pointers. Also eliminated m_parameter from FuncExprNode + and FuncDeclNode. Also changed node-creating code to use new (JSGlobalData*) + as above. + + * parser/Nodes.cpp: Eliminated NodeReleaser and all use of it. + (JSC::ParserRefCounted::ParserRefCounted): Updated for name change of + parserObjects to parserArena. + (JSC::SourceElements::append): Use raw pointers. + (JSC::ArrayNode::emitBytecode): Ditto. + (JSC::ArrayNode::isSimpleArray): Ditto. + (JSC::ArrayNode::toArgumentList): Ditto. + (JSC::ObjectLiteralNode::emitBytecode): Ditto. + (JSC::PropertyListNode::emitBytecode): Ditto. + (JSC::BracketAccessorNode::emitBytecode): Ditto. + (JSC::DotAccessorNode::emitBytecode): Ditto. + (JSC::ArgumentListNode::emitBytecode): Ditto. + (JSC::NewExprNode::emitBytecode): Ditto. + (JSC::EvalFunctionCallNode::emitBytecode): Ditto. + (JSC::FunctionCallValueNode::emitBytecode): Ditto. + (JSC::FunctionCallResolveNode::emitBytecode): Ditto. + (JSC::FunctionCallBracketNode::emitBytecode): Ditto. + (JSC::FunctionCallDotNode::emitBytecode): Ditto. + (JSC::CallFunctionCallDotNode::emitBytecode): Ditto. + (JSC::ApplyFunctionCallDotNode::emitBytecode): Ditto. + (JSC::PostfixBracketNode::emitBytecode): Ditto. + (JSC::PostfixDotNode::emitBytecode): Ditto. + (JSC::DeleteBracketNode::emitBytecode): Ditto. + (JSC::DeleteDotNode::emitBytecode): Ditto. + (JSC::DeleteValueNode::emitBytecode): Ditto. + (JSC::VoidNode::emitBytecode): Ditto. + (JSC::TypeOfValueNode::emitBytecode): Ditto. + (JSC::PrefixBracketNode::emitBytecode): Ditto. + (JSC::PrefixDotNode::emitBytecode): Ditto. + (JSC::UnaryOpNode::emitBytecode): Ditto. + (JSC::BinaryOpNode::emitStrcat): Ditto. + (JSC::BinaryOpNode::emitBytecode): Ditto. + (JSC::EqualNode::emitBytecode): Ditto. + (JSC::StrictEqualNode::emitBytecode): Ditto. + (JSC::ReverseBinaryOpNode::emitBytecode): Ditto. + (JSC::ThrowableBinaryOpNode::emitBytecode): Ditto. + (JSC::InstanceOfNode::emitBytecode): Ditto. + (JSC::LogicalOpNode::emitBytecode): Ditto. + (JSC::ConditionalNode::emitBytecode): Ditto. + (JSC::ReadModifyResolveNode::emitBytecode): Ditto. + (JSC::AssignResolveNode::emitBytecode): Ditto. + (JSC::AssignDotNode::emitBytecode): Ditto. + (JSC::ReadModifyDotNode::emitBytecode): Ditto. + (JSC::AssignBracketNode::emitBytecode): Ditto. + (JSC::ReadModifyBracketNode::emitBytecode): Ditto. + (JSC::CommaNode::emitBytecode): Ditto. + (JSC::ConstDeclNode::emitCodeSingle): Ditto. + (JSC::ConstDeclNode::emitBytecode): Ditto. + (JSC::ConstStatementNode::emitBytecode): Ditto. + (JSC::statementListEmitCode): Ditto. + (JSC::BlockNode::emitBytecode): Ditto. + (JSC::ExprStatementNode::emitBytecode): Ditto. + (JSC::VarStatementNode::emitBytecode): Ditto. + (JSC::IfNode::emitBytecode): Ditto. + (JSC::IfElseNode::emitBytecode): Ditto. + (JSC::DoWhileNode::emitBytecode): Ditto. + (JSC::WhileNode::emitBytecode): Ditto. + (JSC::ForNode::emitBytecode): Ditto. + (JSC::ForInNode::emitBytecode): Ditto. + (JSC::ReturnNode::emitBytecode): Ditto. + (JSC::WithNode::emitBytecode): Ditto. + (JSC::CaseBlockNode::tryOptimizedSwitch): Ditto. + (JSC::CaseBlockNode::emitBytecodeForBlock): Ditto. + (JSC::SwitchNode::emitBytecode): Ditto. + (JSC::LabelNode::emitBytecode): Ditto. + (JSC::ThrowNode::emitBytecode): Ditto. + (JSC::TryNode::emitBytecode): Ditto. + (JSC::ScopeNodeData::ScopeNodeData): Use swap to transfer ownership + of the arena, varStack and functionStack. + (JSC::ScopeNode::ScopeNode): Pass in the arena when creating the + ScopeNodeData. + (JSC::ProgramNode::ProgramNode): Made this inline since it's used + in only one place. + (JSC::ProgramNode::create): Changed this to return a PassRefPtr since + we plan to have the scope nodes be outside the arena, so they will need + some kind of ownership transfer (maybe auto_ptr instead of PassRefPtr + in the future, though). Remove the node from the newly-created arena to + avoid a circular reference. Later we'll keep the node out of the arena + by using a different operator new, but for now it's the ParserRefCounted + constructor that puts the node into the arena, and there's no way to + bypass that. + (JSC::EvalNode::EvalNode): Ditto. + (JSC::EvalNode::create): Ditto. + (JSC::FunctionBodyNode::FunctionBodyNode): Ditto. + (JSC::FunctionBodyNode::createNativeThunk): Moved the code that + reseets the arena here instead of the caller. + (JSC::FunctionBodyNode::create): Same change as the other create + functions above. + (JSC::FunctionBodyNode::emitBytecode): Use raw pointers. + + * parser/Nodes.h: Removed NodeReleaser. Changed FunctionStack to + use raw pointers. Removed the releaseNodes function. Added an override + of operator new that takes a JSGlobalData* to prepare for future arena use. + Use raw pointers instead of RefPtr everywhere possible. + + * parser/Parser.cpp: + (JSC::Parser::reparseInPlace): Pass the arena in. + + * parser/Parser.h: + (JSC::Parser::parse): Updated for name change of parserObjects to parserArena. + (JSC::Parser::reparse): Ditto. + * runtime/FunctionConstructor.cpp: + (JSC::extractFunctionBody): Ditto. + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::~JSGlobalData): Ditto. + (JSC::JSGlobalData::createNativeThunk): Moved arena manipulation into the + FunctionBodyNode::createNativeThunk function. + + * runtime/JSGlobalData.h: Tweaked formatting and renamed parserObjects to + parserArena. + + * wtf/NotFound.h: Added the usual "using WTF" to this header to match the + rest of WTF. + +2009-05-10 Dimitri Glazkov + + Reviewed by Geoffrey Garen. + + https://bugs.webkit.org/show_bug.cgi?id=25670 + Remove no longer valid chunk of code from dtoa. + + * wtf/dtoa.cpp: + (WTF::dtoa): Removed invalid code. + +2009-05-10 Alexey Proskuryakov + + Reviewed by Geoff Garen. + + "Class const *" is the same as "const Class*", use the latter syntax consistently. + + See . + + * pcre/pcre_compile.cpp: + (calculateCompiledPatternLength): + * runtime/JSObject.h: + (JSC::JSObject::offsetForLocation): + (JSC::JSObject::locationForOffset): + +2009-05-10 Maciej Stachowiak + + Reviewed by Alexey Proskuryakov. + + - speedup dtoa/strtod + + Added a bunch of inlining, and replaced malloc with stack allocation. + + 0.5% SunSpider speedup (7% on string-tagcloud). + + * runtime/NumberPrototype.cpp: + (JSC::integerPartNoExp): + (JSC::numberProtoFuncToExponential): + * runtime/UString.cpp: + (JSC::concatenate): + (JSC::UString::from): + * wtf/dtoa.cpp: + (WTF::BigInt::BigInt): + (WTF::BigInt::operator=): + (WTF::Balloc): + (WTF::Bfree): + (WTF::multadd): + (WTF::s2b): + (WTF::i2b): + (WTF::mult): + (WTF::pow5mult): + (WTF::lshift): + (WTF::cmp): + (WTF::diff): + (WTF::b2d): + (WTF::d2b): + (WTF::ratio): + (WTF::strtod): + (WTF::quorem): + (WTF::freedtoa): + (WTF::dtoa): + * wtf/dtoa.h: + +2009-05-09 Mike Hommey + + Reviewed by Geoffrey Garen. Landed by Jan Alonzo. + + Enable JIT on x86-64 gtk+ + https://bugs.webkit.org/show_bug.cgi?id=24724 + + * GNUmakefile.am: + +2009-05-09 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Removed the last non-call-related manually managed JIT stub call. + + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArithSlow_op_rshift): Fully use the JITStubCall + abstraction, instead of emitPutJITStubArg. + +2009-05-09 Sebastian Andrzej Siewior + + Reviewed by Gustavo Noronha. + + https://bugs.webkit.org/show_bug.cgi?id=25653 + PLATFORM(X86_64) inherits ia64 + + __ia64__ is defined by gcc in an IA64 arch and has completely + nothing in common with X86-64 exept both are from Intel and have + an 64bit address space. That's it. Since code seems to expect x86 + here, ia64 has to go. + + * wtf/Platform.h: + +2009-05-09 Gustavo Noronha Silva + + Suggested by Geoffrey Garen. + + Assume SSE2 is present on X86-64 and on MAC X86-32. This fixes a + build breakage on non-Mac X86-64 when JIT is enabled. + + * jit/JITArithmetic.cpp: + +2009-05-09 Gustavo Noronha Silva + + Build fix, adding missing files to make dist. + + * GNUmakefile.am: + +2009-05-09 Geoffrey Garen + + Windows build fix. + + * assembler/X86Assembler.h: + (JSC::X86Assembler::patchLoadToLEA): + +2009-05-09 Geoffrey Garen + + Windows build fix. + + * assembler/X86Assembler.h: + (JSC::X86Assembler::patchLoadToLEA): + +2009-05-09 Maciej Stachowiak + + Reviewed by Gavin Barraclough. + + Original patch by John McCall. Updated by Cameron Zwarich. Further refined by me. + + - Assorted speedups to property access + + ~.3%-1% speedup on SunSpider + + 1) When we know from the structure ID that an object is using inline storage, plant direct + loads and stores against it; no need to indirect through storage pointer. + + 2) Also because of the above, union the property storage pointer with the first inline property + slot and add an extra inline property slot. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::CodeLocationInstruction::CodeLocationInstruction): + (JSC::AbstractMacroAssembler::CodeLocationInstruction::patchLoadToLEA): + (JSC::::CodeLocationCommon::instructionAtOffset): + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::storePtr): + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::store32): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::storePtr): + * assembler/X86Assembler.h: + (JSC::X86Assembler::movq_EAXm): + (JSC::X86Assembler::movl_rm): + (JSC::X86Assembler::patchLoadToLEA): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + * jit/JIT.h: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compilePutByIdHotPath): + (JSC::JIT::compilePutDirectOffset): + (JSC::JIT::compileGetDirectOffset): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::patchGetByIdSelf): + (JSC::JIT::patchPutByIdReplace): + (JSC::JIT::privateCompileGetByIdSelf): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + (JSC::JIT::privateCompilePutByIdReplace): + * runtime/JSObject.cpp: + (JSC::JSObject::mark): + (JSC::JSObject::removeDirect): + * runtime/JSObject.h: + (JSC::JSObject::propertyStorage): + (JSC::JSObject::getDirect): + (JSC::JSObject::getOffset): + (JSC::JSObject::offsetForLocation): + (JSC::JSObject::locationForOffset): + (JSC::JSObject::getDirectOffset): + (JSC::JSObject::putDirectOffset): + (JSC::JSObject::isUsingInlineStorage): + (JSC::JSObject::): + (JSC::JSObject::JSObject): + (JSC::JSObject::~JSObject): + (JSC::Structure::isUsingInlineStorage): + (JSC::JSObject::putDirect): + (JSC::JSObject::putDirectWithoutTransition): + (JSC::JSObject::allocatePropertyStorageInline): + * runtime/Structure.h: + +2009-05-09 Geoffrey Garen + + Reviewed by Gavin Barraclough. + + Changed all our JIT stubs so that they return a maximum of 1 JS value or + two non-JS pointers, and do all other value returning through out + parameters, in preparation for 64bit JS values on a 32bit system. + + Stubs that used to return two JSValues now return one JSValue and take + and out parameter specifying where in the register array the second + value should go. + + SunSpider reports no change. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArithSlow_op_post_inc): + (JSC::JIT::compileFastArithSlow_op_post_dec): + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_call_arityCheck): + (JSC::JITStubs::cti_op_resolve_func): + (JSC::JITStubs::cti_op_post_inc): + (JSC::JITStubs::cti_op_resolve_with_base): + (JSC::JITStubs::cti_op_post_dec): + * jit/JITStubs.h: + (JSC::): + +2009-05-08 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Fixed CrashTracer: [REGRESSION] >400 crashes + in Safari at com.apple.JavaScriptCore • JSC::BytecodeGenerator::emitComplexJumpScopes + 468 + https://bugs.webkit.org/show_bug.cgi?id=25658 + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitComplexJumpScopes): Guard the whole loop + with a bounds check. The old loop logic would decrement and read topScope + without a bounds check, which could cause crashes on page boundaries. + +2009-05-08 Jan Michael Alonzo + + Reviewed by NOBODY (BuildFix). + + Gtk fix: add LiteralParser to the build script per r43424. + + Add LiteralParser to the Qt and Wx build scripts too. + + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCoreSources.bkl: + +2009-05-08 Oliver Hunt + + Reviewed by Gavin Barraclough and Darin Adler. + + Add a limited literal parser for eval to handle object and array literals fired at eval + + This is a simplified parser and lexer that we can throw at strings passed to eval + in case a site is using eval to parse JSON (eg. json2.js). The lexer is intentionally + limited (in effect it's whitelisting a limited "common" subset of the JSON grammar) + as this decreases the likelihood of us wating time attempting to parse any significant + amount of non-JSON content. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::callEval): + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncEval): + * runtime/LiteralParser.cpp: Added. + (JSC::isStringCharacter): + (JSC::LiteralParser::Lexer::lex): + (JSC::LiteralParser::Lexer::lexString): + (JSC::LiteralParser::Lexer::lexNumber): + (JSC::LiteralParser::parseStatement): + (JSC::LiteralParser::parseExpression): + (JSC::LiteralParser::parseArray): + (JSC::LiteralParser::parseObject): + (JSC::LiteralParser::StackGuard::StackGuard): + (JSC::LiteralParser::StackGuard::~StackGuard): + (JSC::LiteralParser::StackGuard::isSafe): + * runtime/LiteralParser.h: Added. + (JSC::LiteralParser::LiteralParser): + (JSC::LiteralParser::attemptJSONParse): + (JSC::LiteralParser::): + (JSC::LiteralParser::Lexer::Lexer): + (JSC::LiteralParser::Lexer::next): + (JSC::LiteralParser::Lexer::currentToken): + (JSC::LiteralParser::abortParse): + +2009-05-08 Geoffrey Garen + + Not reviewed. + + Restored a Mozilla JS test I accidentally gutted. + + * tests/mozilla/ecma/Array/15.4.4.2.js: + (getTestCases): + (test): + +2009-05-08 Geoffrey Garen + + Reviewed by Gavin Barraclough. + + More abstraction for JITStub calls from JITed code. + + Added a JITStubCall class that automatically handles things like assigning + arguments to different stack slots and storing return values. Deployed + the class in about a billion places. A bunch more places remain to be + fixed up, but this is a good stopping point for now. + + * jit/JIT.cpp: + (JSC::JIT::emitTimeoutCheck): + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompile): + * jit/JIT.h: + (JSC::JIT::JSRInfo::JSRInfo): + (JSC::JITStubCall::JITStubCall): + (JSC::JITStubCall::addArgument): + (JSC::JITStubCall::call): + (JSC::JITStubCall::): + (JSC::CallEvalJITStub::CallEvalJITStub): + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArithSlow_op_lshift): + (JSC::JIT::compileFastArithSlow_op_rshift): + (JSC::JIT::compileFastArithSlow_op_jnless): + (JSC::JIT::compileFastArithSlow_op_bitand): + (JSC::JIT::compileFastArithSlow_op_mod): + (JSC::JIT::compileFastArith_op_mod): + (JSC::JIT::compileFastArithSlow_op_post_inc): + (JSC::JIT::compileFastArithSlow_op_post_dec): + (JSC::JIT::compileFastArithSlow_op_pre_inc): + (JSC::JIT::compileFastArithSlow_op_pre_dec): + (JSC::JIT::compileFastArith_op_add): + (JSC::JIT::compileFastArith_op_mul): + (JSC::JIT::compileFastArith_op_sub): + (JSC::JIT::compileBinaryArithOpSlowCase): + (JSC::JIT::compileFastArithSlow_op_add): + (JSC::JIT::compileFastArithSlow_op_mul): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCall): + (JSC::): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compilePutByIdHotPath): + (JSC::JIT::compileGetByIdSlowCase): + (JSC::JIT::compilePutByIdSlowCase): + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_resolve_func): + (JSC::JITStubs::cti_op_resolve_with_base): + +2009-05-08 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Add a new opcode jnlesseq, and optimize its compilation in the JIT using + techniques similar to what were used to optimize jnless in r43363. + + This gives a 0.7% speedup on SunSpider, particularly on the tests 3d-cube, + control-flow-recursive, date-format-xparb, and string-base64. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): Add support for dumping op_jnlesseq. + * bytecode/Opcode.h: Add op_jnlesseq to the list of opcodes. + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitJumpIfFalse): Add a peephole optimization + for op_jnlesseq when emitting lesseq followed by a jump. + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): Add case for op_jnlesseq. + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): Add case for op_jnlesseq. + (JSC::JIT::privateCompileSlowCases): Add case for op_jnlesseq. + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_jnlesseq): Added. + (JSC::JIT::compileFastArithSlow_op_jnlesseq): Added. + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_jlesseq): Added. + * jit/JITStubs.h: + +2009-05-08 Maciej Stachowiak + + Reviewed by Cameron Zwarich. + + - fix test failures on 64-bit + + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArithSlow_op_jnless): Avoid accidentaly treating an + immediate int as an immediate float in the 64-bit value representation. + +2009-05-08 Gavin Barraclough + + Rubber stamped by Oliver Hunt. + + Removing an empty constructor and an uncalled, empty function seems to be a + pretty solid 1% regeression on my machine, so I'm going to put them back. + Um. Yeah, this this pretty pointles and makes no sense at all. I officially + lose the will to live in 3... 2... + + * bytecode/SamplingTool.cpp: + (JSC::SamplingTool::notifyOfScope): + * bytecode/SamplingTool.h: + (JSC::SamplingTool::~SamplingTool): + +2009-05-08 Gavin Barraclough + + Reviewed by Oliver "I see lots of ifdefs" Hunt. + + Fix (kinda) for sampling tool breakage. The codeblock sampling tool has become + b0rked due to recent changes in native function calling. The initialization of + a ScopeNode appears to now occur before the sampling tool (or possibly the + interpreter has been brought into existence, wihich leads to crashyness). + + This patch doesn't fix the problem. The crash occurs when tracking a Scope, but + we shouldn't need to track scopes when we're just sampling opcodes, not + codeblocks. Not retaining Scopes when just opcode sampling will reduce sampling + overhead reducing any instrumentation skew, which is a good thing. As a side + benefit this patch also gets the opcode sampling going again, albeit in a bit of + a lame way. Will come back later with a proper fix from codeblock sampling. + + * JavaScriptCore.exp: + * bytecode/SamplingTool.cpp: + (JSC::compareLineCountInfoSampling): + (JSC::SamplingTool::dump): + * bytecode/SamplingTool.h: + (JSC::SamplingTool::SamplingTool): + * parser/Nodes.cpp: + (JSC::ScopeNode::ScopeNode): + +2009-05-07 Mark Rowe + + Rubber-stamped by Oliver Hunt. + + Fix . + Bug 25640: Crash on quit in r43384 nightly build on Leopard w/ Safari 4 beta installed + + Roll out r43366 as it removed symbols that Safari 4 Beta uses. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + * bytecode/SamplingTool.cpp: + (JSC::SamplingThread::start): + (JSC::SamplingThread::stop): + * bytecode/SamplingTool.h: + * wtf/CrossThreadRefCounted.h: + (WTF::CrossThreadRefCounted::CrossThreadRefCounted): + (WTF::::ref): + (WTF::::deref): + * wtf/Threading.h: + * wtf/ThreadingNone.cpp: + * wtf/ThreadingPthreads.cpp: + (WTF::threadMapMutex): + (WTF::initializeThreading): + (WTF::threadMap): + (WTF::identifierByPthreadHandle): + (WTF::establishIdentifierForPthreadHandle): + (WTF::pthreadHandleForIdentifier): + (WTF::clearPthreadHandleForIdentifier): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::detachThread): + (WTF::currentThread): + * wtf/ThreadingWin.cpp: + (WTF::threadMapMutex): + (WTF::initializeThreading): + (WTF::threadMap): + (WTF::storeThreadHandleByIdentifier): + (WTF::threadHandleForIdentifier): + (WTF::clearThreadHandleForIdentifier): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::detachThread): + (WTF::currentThread): + * wtf/gtk/ThreadingGtk.cpp: + (WTF::threadMapMutex): + (WTF::initializeThreading): + (WTF::threadMap): + (WTF::identifierByGthreadHandle): + (WTF::establishIdentifierForThread): + (WTF::threadForIdentifier): + (WTF::clearThreadForIdentifier): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::currentThread): + * wtf/qt/ThreadingQt.cpp: + (WTF::threadMapMutex): + (WTF::threadMap): + (WTF::identifierByQthreadHandle): + (WTF::establishIdentifierForThread): + (WTF::clearThreadForIdentifier): + (WTF::threadForIdentifier): + (WTF::initializeThreading): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::currentThread): + +2009-05-07 Gustavo Noronha Silva + + Suggested by Oliver Hunt. + + Also check for Linux for the special-cased calling convention. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + * wtf/Platform.h: + +2009-05-07 Gavin Barraclough + + Reviewed by Maciej Stachowiak. + + Previously, when appending to an existing string and growing the underlying buffer, + we would actually allocate 110% of the required size in order to give us some space + to expand into. Now we treat strings differently based on their size: + + Small Strings (up to 4 pages): + Expand the allocation size to 112.5% of the amount requested. This is largely sicking + to our previous policy, however 112.5% is cheaper to calculate. + + Medium Strings (up to 128 pages): + For pages covering multiple pages over-allocation is less of a concern - any unused + space will not be paged in if it is not used, so this is purely a VM overhead. For + these strings allocate 2x the requested size. + + Large Strings (to infinity and beyond!): + Revert to our 112.5% policy - probably best to limit the amount of unused VM we allow + any individual string be responsible for. + + Additionally, round small allocations up to a multiple of 16 bytes, and medium and + large allocations up to a multiple of page size. + + ~1.5% progression on Sunspider, due to 5% improvement on tagcloud & 15% on validate. + + * runtime/UString.cpp: + (JSC::expandedSize): + +2009-05-07 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Fixed a minor sequencing error introduced by recent Parser speedups. + + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::createNativeThunk): Missed a spot in my last patch. + +2009-05-07 Geoffrey Garen + + Not reviewed. + + * wtf/Platform.h: Reverted an accidental (and performance-catastrophic) + change. + +2009-05-07 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Fixed a minor sequencing error introduced by recent Parser speedups. + + * parser/Parser.cpp: + (JSC::Parser::reparseInPlace): Missed a spot in my last patch. + +2009-05-07 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Fixed a minor sequencing error introduced by recent Parser speedups. + + * parser/Parser.cpp: + (JSC::Parser::parse): + * parser/Parser.h: + (JSC::Parser::parse): + (JSC::Parser::reparse): Shrink the parsedObjects vector after allocating + the root node, to avoid leaving a stray node in the vector, since that's + a slight memory leak, and it causes problems during JSGlobalData teardown. + + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::~JSGlobalData): ASSERT that we're not being torn + down while we think we're still parsing, since that would cause lots of + bad memory references during our destruction. + +2009-05-07 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Replaced two more macros with references to the JITStackFrame structure. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + * jit/JITInlineMethods.h: + (JSC::JIT::restoreArgumentReference): + * jit/JITStubs.cpp: + (JSC::): + * jit/JITStubs.h: + +2009-05-07 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Improve native call performance + + Fix the windows build by adding calling convention declarations everywhere, + chose fastcall as that seemed most sensible given we were having to declare + the convention explicitly. In addition switched to fastcall on mac in the + deluded belief that documented fastcall behavior on windows would match + actual its actual behavior. + + * API/JSCallbackFunction.h: + * API/JSCallbackObject.h: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + * interpreter/CallFrame.h: + (JSC::ExecState::argumentCount): + * jit/JIT.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jsc.cpp: + (functionPrint): + (functionDebug): + (functionGC): + (functionVersion): + (functionRun): + (functionLoad): + (functionSetSamplingFlags): + (functionClearSamplingFlags): + (functionReadline): + (functionQuit): + * runtime/ArrayConstructor.cpp: + (JSC::callArrayConstructor): + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncToString): + (JSC::arrayProtoFuncToLocaleString): + (JSC::arrayProtoFuncJoin): + (JSC::arrayProtoFuncConcat): + (JSC::arrayProtoFuncPop): + (JSC::arrayProtoFuncPush): + (JSC::arrayProtoFuncReverse): + (JSC::arrayProtoFuncShift): + (JSC::arrayProtoFuncSlice): + (JSC::arrayProtoFuncSort): + (JSC::arrayProtoFuncSplice): + (JSC::arrayProtoFuncUnShift): + (JSC::arrayProtoFuncFilter): + (JSC::arrayProtoFuncMap): + (JSC::arrayProtoFuncEvery): + (JSC::arrayProtoFuncForEach): + (JSC::arrayProtoFuncSome): + (JSC::arrayProtoFuncReduce): + (JSC::arrayProtoFuncReduceRight): + (JSC::arrayProtoFuncIndexOf): + (JSC::arrayProtoFuncLastIndexOf): + * runtime/BooleanConstructor.cpp: + (JSC::callBooleanConstructor): + * runtime/BooleanPrototype.cpp: + (JSC::booleanProtoFuncToString): + (JSC::booleanProtoFuncValueOf): + * runtime/CallData.h: + * runtime/DateConstructor.cpp: + (JSC::callDate): + (JSC::dateParse): + (JSC::dateNow): + (JSC::dateUTC): + * runtime/DatePrototype.cpp: + (JSC::dateProtoFuncToString): + (JSC::dateProtoFuncToUTCString): + (JSC::dateProtoFuncToDateString): + (JSC::dateProtoFuncToTimeString): + (JSC::dateProtoFuncToLocaleString): + (JSC::dateProtoFuncToLocaleDateString): + (JSC::dateProtoFuncToLocaleTimeString): + (JSC::dateProtoFuncGetTime): + (JSC::dateProtoFuncGetFullYear): + (JSC::dateProtoFuncGetUTCFullYear): + (JSC::dateProtoFuncToGMTString): + (JSC::dateProtoFuncGetMonth): + (JSC::dateProtoFuncGetUTCMonth): + (JSC::dateProtoFuncGetDate): + (JSC::dateProtoFuncGetUTCDate): + (JSC::dateProtoFuncGetDay): + (JSC::dateProtoFuncGetUTCDay): + (JSC::dateProtoFuncGetHours): + (JSC::dateProtoFuncGetUTCHours): + (JSC::dateProtoFuncGetMinutes): + (JSC::dateProtoFuncGetUTCMinutes): + (JSC::dateProtoFuncGetSeconds): + (JSC::dateProtoFuncGetUTCSeconds): + (JSC::dateProtoFuncGetMilliSeconds): + (JSC::dateProtoFuncGetUTCMilliseconds): + (JSC::dateProtoFuncGetTimezoneOffset): + (JSC::dateProtoFuncSetTime): + (JSC::dateProtoFuncSetMilliSeconds): + (JSC::dateProtoFuncSetUTCMilliseconds): + (JSC::dateProtoFuncSetSeconds): + (JSC::dateProtoFuncSetUTCSeconds): + (JSC::dateProtoFuncSetMinutes): + (JSC::dateProtoFuncSetUTCMinutes): + (JSC::dateProtoFuncSetHours): + (JSC::dateProtoFuncSetUTCHours): + (JSC::dateProtoFuncSetDate): + (JSC::dateProtoFuncSetUTCDate): + (JSC::dateProtoFuncSetMonth): + (JSC::dateProtoFuncSetUTCMonth): + (JSC::dateProtoFuncSetFullYear): + (JSC::dateProtoFuncSetUTCFullYear): + (JSC::dateProtoFuncSetYear): + (JSC::dateProtoFuncGetYear): + * runtime/ErrorConstructor.cpp: + (JSC::callErrorConstructor): + * runtime/ErrorPrototype.cpp: + (JSC::errorProtoFuncToString): + * runtime/FunctionConstructor.cpp: + (JSC::callFunctionConstructor): + * runtime/FunctionPrototype.cpp: + (JSC::callFunctionPrototype): + (JSC::functionProtoFuncToString): + (JSC::functionProtoFuncApply): + (JSC::functionProtoFuncCall): + * runtime/JSFunction.h: + (JSC::JSFunction::nativeFunction): + (JSC::JSFunction::setScopeChain): + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncEval): + (JSC::globalFuncParseInt): + (JSC::globalFuncParseFloat): + (JSC::globalFuncIsNaN): + (JSC::globalFuncIsFinite): + (JSC::globalFuncDecodeURI): + (JSC::globalFuncDecodeURIComponent): + (JSC::globalFuncEncodeURI): + (JSC::globalFuncEncodeURIComponent): + (JSC::globalFuncEscape): + (JSC::globalFuncUnescape): + (JSC::globalFuncJSCPrint): + * runtime/JSGlobalObjectFunctions.h: + * runtime/MathObject.cpp: + (JSC::mathProtoFuncAbs): + (JSC::mathProtoFuncACos): + (JSC::mathProtoFuncASin): + (JSC::mathProtoFuncATan): + (JSC::mathProtoFuncATan2): + (JSC::mathProtoFuncCeil): + (JSC::mathProtoFuncCos): + (JSC::mathProtoFuncExp): + (JSC::mathProtoFuncFloor): + (JSC::mathProtoFuncLog): + (JSC::mathProtoFuncMax): + (JSC::mathProtoFuncMin): + (JSC::mathProtoFuncPow): + (JSC::mathProtoFuncRandom): + (JSC::mathProtoFuncRound): + (JSC::mathProtoFuncSin): + (JSC::mathProtoFuncSqrt): + (JSC::mathProtoFuncTan): + * runtime/NativeErrorConstructor.cpp: + (JSC::callNativeErrorConstructor): + * runtime/NativeFunctionWrapper.h: + * runtime/NumberConstructor.cpp: + (JSC::callNumberConstructor): + * runtime/NumberPrototype.cpp: + (JSC::numberProtoFuncToString): + (JSC::numberProtoFuncToLocaleString): + (JSC::numberProtoFuncValueOf): + (JSC::numberProtoFuncToFixed): + (JSC::numberProtoFuncToExponential): + (JSC::numberProtoFuncToPrecision): + * runtime/ObjectConstructor.cpp: + (JSC::callObjectConstructor): + * runtime/ObjectPrototype.cpp: + (JSC::objectProtoFuncValueOf): + (JSC::objectProtoFuncHasOwnProperty): + (JSC::objectProtoFuncIsPrototypeOf): + (JSC::objectProtoFuncDefineGetter): + (JSC::objectProtoFuncDefineSetter): + (JSC::objectProtoFuncLookupGetter): + (JSC::objectProtoFuncLookupSetter): + (JSC::objectProtoFuncPropertyIsEnumerable): + (JSC::objectProtoFuncToLocaleString): + (JSC::objectProtoFuncToString): + * runtime/ObjectPrototype.h: + * runtime/RegExpConstructor.cpp: + (JSC::callRegExpConstructor): + * runtime/RegExpObject.cpp: + (JSC::callRegExpObject): + * runtime/RegExpPrototype.cpp: + (JSC::regExpProtoFuncTest): + (JSC::regExpProtoFuncExec): + (JSC::regExpProtoFuncCompile): + (JSC::regExpProtoFuncToString): + * runtime/StringConstructor.cpp: + (JSC::stringFromCharCode): + (JSC::callStringConstructor): + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): + (JSC::stringProtoFuncToString): + (JSC::stringProtoFuncCharAt): + (JSC::stringProtoFuncCharCodeAt): + (JSC::stringProtoFuncConcat): + (JSC::stringProtoFuncIndexOf): + (JSC::stringProtoFuncLastIndexOf): + (JSC::stringProtoFuncMatch): + (JSC::stringProtoFuncSearch): + (JSC::stringProtoFuncSlice): + (JSC::stringProtoFuncSplit): + (JSC::stringProtoFuncSubstr): + (JSC::stringProtoFuncSubstring): + (JSC::stringProtoFuncToLowerCase): + (JSC::stringProtoFuncToUpperCase): + (JSC::stringProtoFuncLocaleCompare): + (JSC::stringProtoFuncBig): + (JSC::stringProtoFuncSmall): + (JSC::stringProtoFuncBlink): + (JSC::stringProtoFuncBold): + (JSC::stringProtoFuncFixed): + (JSC::stringProtoFuncItalics): + (JSC::stringProtoFuncStrike): + (JSC::stringProtoFuncSub): + (JSC::stringProtoFuncSup): + (JSC::stringProtoFuncFontcolor): + (JSC::stringProtoFuncFontsize): + (JSC::stringProtoFuncAnchor): + (JSC::stringProtoFuncLink): + * wtf/Platform.h: + +2009-05-07 Geoffrey Garen + + Not reviewed. + + Rolled out a portion of r43352 because it broke 64bit. + + * jit/JITStubs.h: + +2009-05-07 Kevin Ollivier + + Build fix for functions reaturning ThreadIdentifier. + + * wtf/ThreadingNone.cpp: + (WTF::createThreadInternal): + (WTF::currentThread): + +2009-05-07 Maciej Stachowiak + + Reviewed by John Honeycutt. + + - enable optimization case im the last patch that I accidentally had disabled. + + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArithSlow_op_jnless): + +2009-05-07 Dmitry Titov + + Attempt to fix Win build. + + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArithSlow_op_jnless): + +2009-05-07 Dmitry Titov + + Reviewed by Alexey Proskuryakov and Adam Roben. + + https://bugs.webkit.org/show_bug.cgi?id=25348 + Change WTF::ThreadIdentifier to be an actual (but wrapped) thread id, remove ThreadMap. + + * wtf/Threading.h: + (WTF::ThreadIdentifier::ThreadIdentifier): + (WTF::ThreadIdentifier::isValid): + (WTF::ThreadIdentifier::invalidate): + (WTF::ThreadIdentifier::platformId): + ThreadIdentifier is now a class, containing a PlatformThreadIdentifier and + methods that are used across the code on thread ids: construction, comparisons, + check for 'valid' state etc. '0' is used as invalid id, which happens to just work + with all platform-specific thread id implementations. + + All the following files repeatedly reflect the new ThreadIdentifier for each platform. + We remove ThreadMap and threadMapMutex from all of them, remove the functions that + populated/searched/cleared the map and add platform-specific comparison operators + for ThreadIdentifier. + + * wtf/gtk/ThreadingGtk.cpp: + (WTF::ThreadIdentifier::operator==): + (WTF::ThreadIdentifier::operator!=): + (WTF::initializeThreading): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::currentThread): + + * wtf/ThreadingNone.cpp: + (WTF::ThreadIdentifier::operator==): + (WTF::ThreadIdentifier::operator!=): + + * wtf/ThreadingPthreads.cpp: + (WTF::ThreadIdentifier::operator==): + (WTF::ThreadIdentifier::operator!=): + (WTF::initializeThreading): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::detachThread): + (WTF::currentThread): + + * wtf/qt/ThreadingQt.cpp: + (WTF::ThreadIdentifier::operator==): + (WTF::ThreadIdentifier::operator!=): + (WTF::initializeThreading): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::currentThread): + + * wtf/ThreadingWin.cpp: + (WTF::ThreadIdentifier::operator==): + (WTF::ThreadIdentifier::operator!=): + (WTF::initializeThreading): + (WTF::createThreadInternal): All the platforms (except Windows) used a sequential + counter as a thread ID and mapped it into platform ID. Windows was using native thread + id and mapped it into thread handle. Since we can always obtain a thread handle + by thread id, createThread now closes the handle. + (WTF::waitForThreadCompletion): obtains another one using OpenThread(id) API. If can not obtain a handle, + it means the thread already exited. + (WTF::detachThread): + (WTF::currentThread): + (WTF::detachThreadDeprecated): old function, renamed (for Win Safari 4 beta which uses it for now). + (WTF::waitForThreadCompletionDeprecated): same. + (WTF::currentThreadDeprecated): same. + (WTF::createThreadDeprecated): same. + + * bytecode/SamplingTool.h: + * bytecode/SamplingTool.cpp: Use DEFINE_STATIC_LOCAL for a static ThreadIdentifier variable, to avoid static constructor. + + * JavaScriptCore.exp: export lists - updated the WTF threading functions decorated names + since they now take a different type as a parameter. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: ditto for Windows, plus added "deprecated" functions + that take old parameter type - turns out public beta of Safari 4 uses those, so they need to be kept along for a while. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: ditto. + +2009-05-07 Maciej Stachowiak + + Reviewed by Sam Weinig. + + - optimize various cases of branch-fused less + + 1% speedup on SunSpider overall + 13% speedup on math-cordic + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + op_loop_if_less: Optimize case of constant as first operand, just as case of constant as + second operand. + op_jnless: Factored out into compileFastArith_op_jnless. + (JSC::JIT::privateCompileSlowCases): + op_jnless: Factored out into compileFastArithSlow_op_jnless. + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_jnless): Factored out from main compile loop. + - Generate inline code for comparison of constant immediate int as first operand to another + immediate int, as for loop_if_less + + (JSC::JIT::compileFastArithSlow_op_jnless): + - Generate inline code for comparing two floating point numbers. + - Generate code for both cases of comparing a floating point number to a constant immediate + int. + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): Fix dumping of op_jnless (tangentially related bugfix). + +2009-05-07 Geoffrey Garen + + Reviewed by Sam Weinig. + + Added the return address of a stub function to the JITStackFrame abstraction. + + * jit/JIT.cpp: + * jit/JIT.h: + * jit/JITStubs.cpp: + (JSC::): + (JSC::StackHack::StackHack): + (JSC::StackHack::~StackHack): + (JSC::returnToThrowTrampoline): + (JSC::JITStubs::cti_op_convert_this): + (JSC::JITStubs::cti_op_end): + (JSC::JITStubs::cti_op_add): + (JSC::JITStubs::cti_op_pre_inc): + (JSC::JITStubs::cti_timeout_check): + (JSC::JITStubs::cti_register_file_check): + (JSC::JITStubs::cti_op_loop_if_less): + (JSC::JITStubs::cti_op_loop_if_lesseq): + (JSC::JITStubs::cti_op_new_object): + (JSC::JITStubs::cti_op_put_by_id_generic): + (JSC::JITStubs::cti_op_get_by_id_generic): + (JSC::JITStubs::cti_op_put_by_id): + (JSC::JITStubs::cti_op_put_by_id_second): + (JSC::JITStubs::cti_op_put_by_id_fail): + (JSC::JITStubs::cti_op_get_by_id): + (JSC::JITStubs::cti_op_get_by_id_second): + (JSC::JITStubs::cti_op_get_by_id_self_fail): + (JSC::JITStubs::cti_op_get_by_id_proto_list): + (JSC::JITStubs::cti_op_get_by_id_proto_list_full): + (JSC::JITStubs::cti_op_get_by_id_proto_fail): + (JSC::JITStubs::cti_op_get_by_id_array_fail): + (JSC::JITStubs::cti_op_get_by_id_string_fail): + (JSC::JITStubs::cti_op_instanceof): + (JSC::JITStubs::cti_op_del_by_id): + (JSC::JITStubs::cti_op_mul): + (JSC::JITStubs::cti_op_new_func): + (JSC::JITStubs::cti_op_call_JSFunction): + (JSC::JITStubs::cti_op_call_arityCheck): + (JSC::JITStubs::cti_vm_dontLazyLinkCall): + (JSC::JITStubs::cti_vm_lazyLinkCall): + (JSC::JITStubs::cti_op_push_activation): + (JSC::JITStubs::cti_op_call_NotJSFunction): + (JSC::JITStubs::cti_op_create_arguments): + (JSC::JITStubs::cti_op_create_arguments_no_params): + (JSC::JITStubs::cti_op_tear_off_activation): + (JSC::JITStubs::cti_op_tear_off_arguments): + (JSC::JITStubs::cti_op_profile_will_call): + (JSC::JITStubs::cti_op_profile_did_call): + (JSC::JITStubs::cti_op_ret_scopeChain): + (JSC::JITStubs::cti_op_new_array): + (JSC::JITStubs::cti_op_resolve): + (JSC::JITStubs::cti_op_construct_JSConstruct): + (JSC::JITStubs::cti_op_construct_NotJSConstruct): + (JSC::JITStubs::cti_op_get_by_val): + (JSC::JITStubs::cti_op_get_by_val_string): + (JSC::JITStubs::cti_op_get_by_val_byte_array): + (JSC::JITStubs::cti_op_resolve_func): + (JSC::JITStubs::cti_op_sub): + (JSC::JITStubs::cti_op_put_by_val): + (JSC::JITStubs::cti_op_put_by_val_array): + (JSC::JITStubs::cti_op_put_by_val_byte_array): + (JSC::JITStubs::cti_op_lesseq): + (JSC::JITStubs::cti_op_loop_if_true): + (JSC::JITStubs::cti_op_load_varargs): + (JSC::JITStubs::cti_op_negate): + (JSC::JITStubs::cti_op_resolve_base): + (JSC::JITStubs::cti_op_resolve_skip): + (JSC::JITStubs::cti_op_resolve_global): + (JSC::JITStubs::cti_op_div): + (JSC::JITStubs::cti_op_pre_dec): + (JSC::JITStubs::cti_op_jless): + (JSC::JITStubs::cti_op_not): + (JSC::JITStubs::cti_op_jtrue): + (JSC::JITStubs::cti_op_post_inc): + (JSC::JITStubs::cti_op_eq): + (JSC::JITStubs::cti_op_lshift): + (JSC::JITStubs::cti_op_bitand): + (JSC::JITStubs::cti_op_rshift): + (JSC::JITStubs::cti_op_bitnot): + (JSC::JITStubs::cti_op_resolve_with_base): + (JSC::JITStubs::cti_op_new_func_exp): + (JSC::JITStubs::cti_op_mod): + (JSC::JITStubs::cti_op_less): + (JSC::JITStubs::cti_op_neq): + (JSC::JITStubs::cti_op_post_dec): + (JSC::JITStubs::cti_op_urshift): + (JSC::JITStubs::cti_op_bitxor): + (JSC::JITStubs::cti_op_new_regexp): + (JSC::JITStubs::cti_op_bitor): + (JSC::JITStubs::cti_op_call_eval): + (JSC::JITStubs::cti_op_throw): + (JSC::JITStubs::cti_op_get_pnames): + (JSC::JITStubs::cti_op_next_pname): + (JSC::JITStubs::cti_op_push_scope): + (JSC::JITStubs::cti_op_pop_scope): + (JSC::JITStubs::cti_op_typeof): + (JSC::JITStubs::cti_op_is_undefined): + (JSC::JITStubs::cti_op_is_boolean): + (JSC::JITStubs::cti_op_is_number): + (JSC::JITStubs::cti_op_is_string): + (JSC::JITStubs::cti_op_is_object): + (JSC::JITStubs::cti_op_is_function): + (JSC::JITStubs::cti_op_stricteq): + (JSC::JITStubs::cti_op_to_primitive): + (JSC::JITStubs::cti_op_strcat): + (JSC::JITStubs::cti_op_nstricteq): + (JSC::JITStubs::cti_op_to_jsnumber): + (JSC::JITStubs::cti_op_in): + (JSC::JITStubs::cti_op_push_new_scope): + (JSC::JITStubs::cti_op_jmp_scopes): + (JSC::JITStubs::cti_op_put_by_index): + (JSC::JITStubs::cti_op_switch_imm): + (JSC::JITStubs::cti_op_switch_char): + (JSC::JITStubs::cti_op_switch_string): + (JSC::JITStubs::cti_op_del_by_val): + (JSC::JITStubs::cti_op_put_getter): + (JSC::JITStubs::cti_op_put_setter): + (JSC::JITStubs::cti_op_new_error): + (JSC::JITStubs::cti_op_debug): + (JSC::JITStubs::cti_vm_throw): + * jit/JITStubs.h: + (JSC::JITStackFrame::returnAddressSlot): + +2009-05-07 Darin Adler + + Reviewed by Geoff Garen. + + * parser/Lexer.cpp: + (JSC::Lexer::lex): Fix missing braces. This would make us always + take the slower case for string parsing and Visual Studio correctly + noticed unreachable code. + +2009-05-07 Darin Adler + + Reviewed by Sam Weinig. + + Bug 25589: goto instead of state machine in lexer + https://bugs.webkit.org/show_bug.cgi?id=25589 + + SunSpider is 0.8% faster. + + * parser/Lexer.cpp: + (JSC::Lexer::currentCharacter): Added. + (JSC::Lexer::currentOffset): Changed to call currentCharacter for clarity. + (JSC::Lexer::setCode): Removed code to set now-obsolete m_skipLineEnd. + (JSC::Lexer::shiftLineTerminator): Added. Handles line numbers and the + two-character line terminators. + (JSC::Lexer::makeIdentifier): Changed to take characters and length rather + than a vector, since we now make these directly out of the source buffer + when possible. + (JSC::Lexer::lastTokenWasRestrKeyword): Added. + (JSC::isNonASCIIIdentStart): Broke out the non-inline part. + (JSC::isIdentStart): Moved here. + (JSC::isNonASCIIIdentPart): Broke out the non-inline part. + (JSC::isIdentPart): Moved here. + (JSC::singleEscape): Moved here, and removed some unneeded cases. + (JSC::Lexer::record8): Moved here. + (JSC::Lexer::record16): Moved here. + (JSC::Lexer::lex): Rewrote this whole function to use goto and not use + a state machine. Got rid of most of the local variables. Also rolled the + matchPunctuator function in here. + (JSC::Lexer::scanRegExp): Changed to use the new version of isLineTerminator. + Clear m_buffer16 after using it instead of before. + + * parser/Lexer.h: Removed State enum, setDone function, nextLine function, + lookupKeywordFunction, one of the isLineTerminator functions, m_done data member, + m_skipLineEnd data member, and m_state data member. Added shiftLineTerminator + function, currentCharacter function, and changed the arguments to the makeIdentifier + function. Removed one branch from the isLineTerminator function. + + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): Streamlined the case where we don't replace anything. + +2009-05-07 Geoffrey Garen + + Reviewed by Gavin Barraclough. + + Removed a few more special constants, and replaced them with uses of + the JITStackFrame struct. + + Removed one of the two possible definitions of VoidPtrPair. The Mac + definition was more elegant, but SunSpider doesn't think it's any + faster, and it's net less elegant to have two ways of doing things. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompile): + * jit/JITStubs.h: + (JSC::): + +2009-05-07 Darin Adler + + * runtime/ScopeChain.h: + (JSC::ScopeChainNode::~ScopeChainNode): Tweak formatting. + +2009-05-07 Simon Hausmann + + Reviewed by Tor Arne Vestbø. + + Fix the build thread stack base determination build on Symbian, + by moving the code block before PLATFORM(UNIX), which is also + enabled on Symbian builds. + + * runtime/Collector.cpp: + (JSC::currentThreadStackBase): + +2009-05-07 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Fix crash due to incorrectly using an invalid scopechain + + stringProtoFuncReplace was checking for an exception on a CachedCall + by asking for the cached callframes exception. Unfortunately this + could crash in certain circumstances as CachedCall does not guarantee + a valid callframe following a call. Even more unfortunately the check + was entirely unnecessary as there is only a single exception slot per + global data, so it was already checked via the initial exec->hadException() + check. + + To make bugs like this more obvious, i've added a debug only destructor + to ScopeChainNode that 0's all of its fields. This exposed a crash in + the standard javascriptcore tests. + + * runtime/ScopeChain.h: + (JSC::ScopeChainNode::~ScopeChainNode): + (JSC::ScopeChain::~ScopeChain): + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): + +2009-05-07 Gavin Barraclough + + Reviewed by Geoff Garen. + + Enable op_strcat across += assignments. This patch allows the lhs of a read/modify node + to be included within the concatenation operation, and also modifies the implementation + of the concatenation to attempt to reuse and cat onto the leftmost string, rather than + always allocating a new empty output string to copy into (as was previously the behaviour). + + ~0.5% progression, due to a 3%-3.5% progression on the string tests (particularly validate). + + * parser/Nodes.cpp: + (JSC::BinaryOpNode::emitStrcat): + (JSC::emitReadModifyAssignment): + (JSC::ReadModifyResolveNode::emitBytecode): + (JSC::ReadModifyDotNode::emitBytecode): + (JSC::ReadModifyBracketNode::emitBytecode): + * parser/Nodes.h: + * runtime/Operations.h: + (JSC::concatenateStrings): + * runtime/UString.cpp: + (JSC::UString::reserveCapacity): + * runtime/UString.h: + +2009-05-07 Simon Hausmann + + Reviewed by Oliver Hunt. + + Fix the build on Windows without JIT: interpreter/RegisterFile.h needs + roundUpAllocationSize, which is protected by #if ENABLED(ASSEMBLER). + Moved the #ifdef down and always offer the function. + + * jit/ExecutableAllocator.h: + +2009-05-06 Geoffrey Garen + + Reviewed by Gavin "++" Barraclough. + + Added some abstraction around the JIT stub calling convention by creating + a struct to represent the persistent stack frame JIT code shares with + JIT stubs. + + SunSpider reports no change. + + * jit/JIT.h: + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_convert_this): + (JSC::JITStubs::cti_op_end): + (JSC::JITStubs::cti_op_add): + (JSC::JITStubs::cti_op_pre_inc): + (JSC::JITStubs::cti_timeout_check): + (JSC::JITStubs::cti_register_file_check): + (JSC::JITStubs::cti_op_loop_if_less): + (JSC::JITStubs::cti_op_loop_if_lesseq): + (JSC::JITStubs::cti_op_new_object): + (JSC::JITStubs::cti_op_put_by_id_generic): + (JSC::JITStubs::cti_op_get_by_id_generic): + (JSC::JITStubs::cti_op_put_by_id): + (JSC::JITStubs::cti_op_put_by_id_second): + (JSC::JITStubs::cti_op_put_by_id_fail): + (JSC::JITStubs::cti_op_get_by_id): + (JSC::JITStubs::cti_op_get_by_id_second): + (JSC::JITStubs::cti_op_get_by_id_self_fail): + (JSC::JITStubs::cti_op_get_by_id_proto_list): + (JSC::JITStubs::cti_op_get_by_id_proto_list_full): + (JSC::JITStubs::cti_op_get_by_id_proto_fail): + (JSC::JITStubs::cti_op_get_by_id_array_fail): + (JSC::JITStubs::cti_op_get_by_id_string_fail): + (JSC::JITStubs::cti_op_instanceof): + (JSC::JITStubs::cti_op_del_by_id): + (JSC::JITStubs::cti_op_mul): + (JSC::JITStubs::cti_op_new_func): + (JSC::JITStubs::cti_op_call_JSFunction): + (JSC::JITStubs::cti_op_call_arityCheck): + (JSC::JITStubs::cti_vm_dontLazyLinkCall): + (JSC::JITStubs::cti_vm_lazyLinkCall): + (JSC::JITStubs::cti_op_push_activation): + (JSC::JITStubs::cti_op_call_NotJSFunction): + (JSC::JITStubs::cti_op_create_arguments): + (JSC::JITStubs::cti_op_create_arguments_no_params): + (JSC::JITStubs::cti_op_tear_off_activation): + (JSC::JITStubs::cti_op_tear_off_arguments): + (JSC::JITStubs::cti_op_profile_will_call): + (JSC::JITStubs::cti_op_profile_did_call): + (JSC::JITStubs::cti_op_ret_scopeChain): + (JSC::JITStubs::cti_op_new_array): + (JSC::JITStubs::cti_op_resolve): + (JSC::JITStubs::cti_op_construct_JSConstruct): + (JSC::JITStubs::cti_op_construct_NotJSConstruct): + (JSC::JITStubs::cti_op_get_by_val): + (JSC::JITStubs::cti_op_get_by_val_string): + (JSC::JITStubs::cti_op_get_by_val_byte_array): + (JSC::JITStubs::cti_op_resolve_func): + (JSC::JITStubs::cti_op_sub): + (JSC::JITStubs::cti_op_put_by_val): + (JSC::JITStubs::cti_op_put_by_val_array): + (JSC::JITStubs::cti_op_put_by_val_byte_array): + (JSC::JITStubs::cti_op_lesseq): + (JSC::JITStubs::cti_op_loop_if_true): + (JSC::JITStubs::cti_op_load_varargs): + (JSC::JITStubs::cti_op_negate): + (JSC::JITStubs::cti_op_resolve_base): + (JSC::JITStubs::cti_op_resolve_skip): + (JSC::JITStubs::cti_op_resolve_global): + (JSC::JITStubs::cti_op_div): + (JSC::JITStubs::cti_op_pre_dec): + (JSC::JITStubs::cti_op_jless): + (JSC::JITStubs::cti_op_not): + (JSC::JITStubs::cti_op_jtrue): + (JSC::JITStubs::cti_op_post_inc): + (JSC::JITStubs::cti_op_eq): + (JSC::JITStubs::cti_op_lshift): + (JSC::JITStubs::cti_op_bitand): + (JSC::JITStubs::cti_op_rshift): + (JSC::JITStubs::cti_op_bitnot): + (JSC::JITStubs::cti_op_resolve_with_base): + (JSC::JITStubs::cti_op_new_func_exp): + (JSC::JITStubs::cti_op_mod): + (JSC::JITStubs::cti_op_less): + (JSC::JITStubs::cti_op_neq): + (JSC::JITStubs::cti_op_post_dec): + (JSC::JITStubs::cti_op_urshift): + (JSC::JITStubs::cti_op_bitxor): + (JSC::JITStubs::cti_op_new_regexp): + (JSC::JITStubs::cti_op_bitor): + (JSC::JITStubs::cti_op_call_eval): + (JSC::JITStubs::cti_op_throw): + (JSC::JITStubs::cti_op_get_pnames): + (JSC::JITStubs::cti_op_next_pname): + (JSC::JITStubs::cti_op_push_scope): + (JSC::JITStubs::cti_op_pop_scope): + (JSC::JITStubs::cti_op_typeof): + (JSC::JITStubs::cti_op_is_undefined): + (JSC::JITStubs::cti_op_is_boolean): + (JSC::JITStubs::cti_op_is_number): + (JSC::JITStubs::cti_op_is_string): + (JSC::JITStubs::cti_op_is_object): + (JSC::JITStubs::cti_op_is_function): + (JSC::JITStubs::cti_op_stricteq): + (JSC::JITStubs::cti_op_to_primitive): + (JSC::JITStubs::cti_op_strcat): + (JSC::JITStubs::cti_op_nstricteq): + (JSC::JITStubs::cti_op_to_jsnumber): + (JSC::JITStubs::cti_op_in): + (JSC::JITStubs::cti_op_push_new_scope): + (JSC::JITStubs::cti_op_jmp_scopes): + (JSC::JITStubs::cti_op_put_by_index): + (JSC::JITStubs::cti_op_switch_imm): + (JSC::JITStubs::cti_op_switch_char): + (JSC::JITStubs::cti_op_switch_string): + (JSC::JITStubs::cti_op_del_by_val): + (JSC::JITStubs::cti_op_put_getter): + (JSC::JITStubs::cti_op_put_setter): + (JSC::JITStubs::cti_op_new_error): + (JSC::JITStubs::cti_op_debug): + (JSC::JITStubs::cti_vm_throw): + * jit/JITStubs.h: + (JSC::): + +2009-05-06 Gavin Barraclough + + Reviewed by Maciej Stachowiak & Darin Adler. + + Improve string concatenation (as coded in JS as a sequence of adds). + + Detect patterns corresponding to string concatenation, and change the bytecode + generation to emit a new op_strcat instruction. By handling the full set of + additions within a single function we do not need allocate JSString wrappers + for intermediate results, and we can calculate the size of the output string + prior to allocating storage, in order to prevent reallocation of the buffer. + + 1.5%-2% progression on Sunspider, largely due to a 30% progression on date-format-xparb. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + Add new opcodes. + * bytecode/Opcode.h: + Add new opcodes. + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitStrcat): + (JSC::BytecodeGenerator::emitToPrimitive): + Add generation of new opcodes. + * bytecompiler/BytecodeGenerator.h: + Add generation of new opcodes. + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + Add implmentation of new opcodes. + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + Add implmentation of new opcodes. + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_to_primitive): + (JSC::JITStubs::cti_op_strcat): + Add implmentation of new opcodes. + * jit/JITStubs.h: + Add implmentation of new opcodes. + * parser/Nodes.cpp: + (JSC::BinaryOpNode::emitStrcat): + (JSC::BinaryOpNode::emitBytecode): + (JSC::ReadModifyResolveNode::emitBytecode): + Add generation of new opcodes. + * parser/Nodes.h: + (JSC::ExpressionNode::): + (JSC::AddNode::): + Add methods to allow identification of add nodes. + * parser/ResultType.h: + (JSC::ResultType::definitelyIsString): + (JSC::ResultType::forAdd): + Fix error in detection of adds that will produce string results. + * runtime/Operations.h: + (JSC::concatenateStrings): + Add implmentation of new opcodes. + * runtime/UString.cpp: + (JSC::UString::appendNumeric): + Add methods to append numbers to an existing string. + * runtime/UString.h: + (JSC::UString::Rep::createEmptyBuffer): + (JSC::UString::BaseString::BaseString): + Add support for creating an empty string with a non-zero capacity available in the BaseString. + +2009-05-06 Darin Adler + + Reviewed by Sam Weinig. + + Made RefCounted::m_refCount private. + + * runtime/Structure.h: Removed addressOfCount. + * wtf/RefCounted.h: Made m_refCount private. + Added addressOfCount. + +2009-05-06 Darin Adler + + Fixed assertion seen a lot! + + * parser/Nodes.cpp: + (JSC::FunctionBodyNode::~FunctionBodyNode): Removed now-bogus assertion. + +2009-05-06 Darin Adler + + Working with Sam Weinig. + + Redo parse tree constructor optimization without breaking the Windows + build the way I did yesterday. The previous try broke the build by adding + an include of Lexer.h and all its dependencies that had to work outside + the JavaScriptCore project. + + * GNUmakefile.am: Added NodeConstructors.h. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: + Removed byteocde directory -- we no longer are trying to include Lexer.h + outside JavaScriptCore. + + * JavaScriptCore.xcodeproj/project.pbxproj: Change SegmentedVector.h + and Lexer.h back to internal files. Added NodeConstructors.h. + + * parser/Grammar.y: Added include of NodeConstructors.h. + Changed use of ConstDeclNode to use public functions. + + * parser/NodeConstructors.h: Copied from parser/Nodes.h. + Just contains the inlined constructors now. + + * parser/Nodes.cpp: Added include of NodeConstructors.h. + Moved node constructors into the header. + (JSC::FunctionBodyNode::FunctionBodyNode): Removed m_refCount + initialization. + + * parser/Nodes.h: Removed all the constructor definitions, and also + removed the JSC_FAST_CALL from them since these are all inlined, so the + calling convention is irrelevant. Made more things private. Used a data + member for operator opcodes instead of a virtual function. Removed the + special FunctionBodyNode::ref/deref functions since the default functions + are now just as fast. + + * runtime/FunctionConstructor.cpp: + (JSC::extractFunctionBody): Fixed types here so we don't typecast until + after we do type checking. + +2009-05-06 Simon Hausmann + + Reviewed by Ariya Hidayat. + + Fix the Qt build on Windows. + + * JavaScriptCore.pri: Define BUILDING_JavaScriptCore/WTF to get the meaning + of the JS_EXPORTDATA macros correct + +2009-05-06 Simon Hausmann + + Reviewed by Ariya Hidayat. + + Enable the JIT for the Qt build on Windows. + + * JavaScriptCore.pri: + +2009-05-06 Simon Hausmann + + Reviewed by Tor Arne Vestbø. + + Tweak JavaScriptCore.pri for being able to override the generated sources dir for the + generated_files target. + + * JavaScriptCore.pri: + +2009-05-06 Tor Arne Vestbø + + Reviewed by Simon Hausmann. + + Build QtWebKit as a framework on Mac + + This implies both debug and release build by default, unless + one of the --debug or --release config options are passed to + the build-webkit script. + + Frameworks can be disabled by passing CONFIG+=webkit_no_framework + to the build-webkit script. + + To be able to build both debug and release targets in parallel + we have to use separate output directories for the generated + sources, which is not optimal, but required to avoid race conditions. + + An optimization would be to only require this spit-up on Mac. + + * JavaScriptCore.pri: + * JavaScriptCore.pro: + * jsc.pro: + +2009-05-06 Tor Arne Vestbø + + Reviewed by Simon Hausmann. + + [Qt] Use $$GENERATED_SOURCES_DIR as output when running bison + + A couple of the generators left the bison output file in the source + tree, and then moved it into $$GENERATED_SOURCES_DIR, which did not + work well when building release and debug configurations in parallel. + + * JavaScriptCore.pri: + +2009-05-05 Geoffrey Garen + + Reviewed by Maciej Stachowiak. + + Simplified a bit of codegen. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + +2009-05-05 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Moved all the JIT stub related code into one place. + + * jit/JIT.cpp: + * jit/JIT.h: + * jit/JITCode.h: + * jit/JITStubs.cpp: + (JSC::): + * jit/JITStubs.h: + +2009-05-05 Sam Weinig + + Try to fix Windows build. + + Move Node constructor to the .cpp file. + + * parser/Nodes.cpp: + * parser/Nodes.h: + +2009-05-05 Darin Adler + + Try to fix Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + + Try to fix Mac build. + + * JavaScriptCore.xcodeproj/project.pbxproj: Made SegmentedVector.h private. + +2009-05-05 Darin Adler + + Try to fix Mac build. + + * JavaScriptCore.xcodeproj/project.pbxproj: Made Lexer.h private. + +2009-05-05 Darin Adler + + Reviewed by Sam Weinig. + + Bug 25569: make ParserRefCounted use conventional reference counting + https://bugs.webkit.org/show_bug.cgi?id=25569 + + SunSpider speedup of about 1.6%. + + * JavaScriptCore.exp: Updated. + + * parser/Nodes.cpp: + (JSC::NodeReleaser::releaseAllNodes): ALWAYS_INLINE. + (JSC::NodeReleaser::adopt): Ditto. + (JSC::ParserRefCounted::ParserRefCounted): Removed most of the code. + Add the object to a Vector that gets cleared after parsing. + (JSC::ParserRefCounted::~ParserRefCounted): Removed most of the code. + + * parser/Nodes.h: Made ParserRefCounted inherit from RefCounted and + made inline versions of the constructor and destructor. Made the + Node constructor inline. + + * parser/Parser.cpp: + (JSC::Parser::parse): Call globalData->parserObjects.shrink(0) after + parsing, where it used to call ParserRefCounted::deleteNewObjects. + + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): Eliminated code to manage the + newParserObjects and parserObjectExtraRefCounts. + (JSC::JSGlobalData::~JSGlobalData): Ditto. + + * runtime/JSGlobalData.h: Replaced the HashSet and HashCountedSet + with a Vector. + + * wtf/PassRefPtr.h: + (WTF::PassRefPtr::~PassRefPtr): The most common thing to do with a + PassRefPtr in hot code is to pass it and then destroy it once it's + set to zero. Help the optimizer by telling it that's true. + +2009-05-05 Xan Lopez and Gustavo Noronha Silva + + Reviewed by Oliver Hunt. + + Disable the NativeFunctionWrapper for all non-Mac ports for now, + as it is also crashing on Linux/x86. + + * runtime/NativeFunctionWrapper.h: + +2009-05-05 Steve Falkenburg + + Fix build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-05 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + Expose toThisObject for the DOM Window + + * JavaScriptCore.exp: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (Make windows go again until i work out the + accursed calling convention). + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * jit/JIT.cpp: + * runtime/NativeFunctionWrapper.h: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (Fix windows debug builds). + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (Hopefully the last fix). + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (Fix the build fix caused by a different build fix). + + * parser/Nodes.cpp: + * parser/Nodes.h: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (No idea how my changes could have broken these). + + * runtime/DatePrototype.cpp: + * runtime/RegExpObject.cpp: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (Why should i expect msvc to list all the errors in a file?). + + * parser/Nodes.cpp: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (Fix warning, and another missing include). + + * jit/JIT.cpp: + * parser/Nodes.h: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (More build fixes). + + * runtime/ErrorPrototype.cpp: + * runtime/JSGlobalObject.cpp: + * runtime/NumberPrototype.cpp: + * runtime/ObjectPrototype.cpp: + * runtime/StringConstructor.cpp: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (Will the fixes never end?). + + * runtime/FunctionPrototype.h: + * runtime/Lookup.cpp: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (More build fixes). + + * jit/JIT.cpp: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (More build fixing). + + * runtime/CallData.h: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + * runtime/ArrayConstructor.cpp: + * runtime/BooleanPrototype.cpp: + * runtime/DateConstructor.cpp: + * runtime/Error.cpp: + * runtime/ObjectConstructor.cpp: + * runtime/RegExpPrototype.cpp: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (Buildfix). + + Add missing file + + * runtime/NativeFunctionWrapper.h: Copied from JavaScriptCore/jit/ExecutableAllocator.cpp. + +2009-05-05 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Bug 25559: Improve native function call performance + + + In order to cache calls to native functions we now make the standard + prototype functions use a small assembly thunk that converts the JS + calling convention into the native calling convention. As this is + only beneficial in the JIT we use the NativeFunctionWrapper typedef + to alternate between PrototypeFunction and JSFunction to keep the + code sane. This change from PrototypeFunction to NativeFunctionWrapper + is the bulk of this patch. + + * JavaScriptCore.exp: + * JavaScriptCore.xcodeproj/project.pbxproj: + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::call): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::addPtr): + * assembler/X86Assembler.h: + (JSC::X86Assembler::leaq_mr): + (JSC::X86Assembler::call_m): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::execute): + (JSC::Interpreter::prepareForRepeatCall): + * jit/JIT.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + (JSC::JIT::compileCTIMachineTrampolines): + * jit/JITCall.cpp: + (JSC::JIT::linkCall): + (JSC::JIT::compileOpCallInitializeCallFrame): + (JSC::JIT::compileOpCall): + * jit/JITCode.h: + (JSC::JITCode::operator bool): + * jit/JITInlineMethods.h: + (JSC::JIT::emitGetFromCallFrameHeader): + (JSC::JIT::emitGetFromCallFrameHeader32): + * jit/JITStubs.cpp: + (JSC::JITStubs::JITStubs): + (JSC::JITStubs::cti_op_call_JSFunction): + (JSC::JITStubs::cti_vm_dontLazyLinkCall): + (JSC::JITStubs::cti_vm_lazyLinkCall): + (JSC::JITStubs::cti_op_construct_JSConstruct): + * jit/JITStubs.h: + (JSC::JITStubs::ctiNativeCallThunk): + * jsc.cpp: + (GlobalObject::GlobalObject): + * parser/Nodes.cpp: + (JSC::FunctionBodyNode::FunctionBodyNode): + (JSC::FunctionBodyNode::createNativeThunk): + (JSC::FunctionBodyNode::generateJITCode): + * parser/Nodes.h: + (JSC::FunctionBodyNode::): + (JSC::FunctionBodyNode::generatedJITCode): + (JSC::FunctionBodyNode::jitCode): + * profiler/Profiler.cpp: + (JSC::Profiler::createCallIdentifier): + * runtime/ArgList.h: + * runtime/ArrayPrototype.cpp: + (JSC::isNumericCompareFunction): + * runtime/BooleanPrototype.cpp: + (JSC::BooleanPrototype::BooleanPrototype): + * runtime/DateConstructor.cpp: + (JSC::DateConstructor::DateConstructor): + * runtime/ErrorPrototype.cpp: + (JSC::ErrorPrototype::ErrorPrototype): + * runtime/FunctionPrototype.cpp: + (JSC::FunctionPrototype::addFunctionProperties): + (JSC::functionProtoFuncToString): + * runtime/FunctionPrototype.h: + * runtime/JSFunction.cpp: + (JSC::JSFunction::JSFunction): + (JSC::JSFunction::~JSFunction): + (JSC::JSFunction::mark): + (JSC::JSFunction::getCallData): + (JSC::JSFunction::call): + (JSC::JSFunction::argumentsGetter): + (JSC::JSFunction::callerGetter): + (JSC::JSFunction::lengthGetter): + (JSC::JSFunction::getOwnPropertySlot): + (JSC::JSFunction::put): + (JSC::JSFunction::deleteProperty): + (JSC::JSFunction::getConstructData): + (JSC::JSFunction::construct): + * runtime/JSFunction.h: + (JSC::JSFunction::JSFunction): + (JSC::JSFunction::setScope): + (JSC::JSFunction::scope): + (JSC::JSFunction::isHostFunction): + (JSC::JSFunction::scopeChain): + (JSC::JSFunction::clearScopeChain): + (JSC::JSFunction::setScopeChain): + (JSC::JSFunction::nativeFunction): + (JSC::JSFunction::setNativeFunction): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::~JSGlobalData): + (JSC::JSGlobalData::createNativeThunk): + * runtime/JSGlobalData.h: + (JSC::JSGlobalData::nativeFunctionThunk): + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + * runtime/JSGlobalObject.h: + * runtime/Lookup.cpp: + (JSC::setUpStaticFunctionSlot): + * runtime/Lookup.h: + * runtime/NumberPrototype.cpp: + (JSC::NumberPrototype::NumberPrototype): + * runtime/ObjectPrototype.cpp: + (JSC::ObjectPrototype::ObjectPrototype): + * runtime/RegExpPrototype.cpp: + (JSC::RegExpPrototype::RegExpPrototype): + * runtime/StringConstructor.cpp: + (JSC::StringConstructor::StringConstructor): + +2009-05-05 Gavin Barraclough + + Reviewed by Oliver Hunt. + + For convenience, let the sampling flags tool clear multiple flags at once. + + * jsc.cpp: + (GlobalObject::GlobalObject): + (functionSetSamplingFlags): + (functionClearSamplingFlags): + +2009-05-04 Maciej Stachowiak + + Rubber stamped by Gavin. + + - inline Vector::resize for a ~1.5% speedup on string-tagcloud + + * wtf/Vector.h: + (WTF::Vector::resize): Inline + +2009-05-03 Steve Falkenburg + + Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: + +2009-05-03 Mark Rowe + + Fix the 64-bit build. + + * API/APICast.h: + (toJS): + (toRef): + * runtime/JSNumberCell.cpp: + (JSC::jsAPIMangledNumber): + * runtime/JSNumberCell.h: + +2009-05-02 Sam Weinig + + Roll JSC API number marshaling back in one last time (I hope). + +2009-05-03 Sam Weinig + + Roll JSC API number marshaling back out. It still breaks windows. + +2009-05-03 Sam Weinig + + Roll JSC API number marshaling back in. + +2009-05-02 Darin Adler + + Reviewed by Maciej Stachowiak. + + Bug 25519: streamline lexer by handling BOMs differently + https://bugs.webkit.org/show_bug.cgi?id=25519 + + Roughly 1% faster SunSpider. + + * parser/Grammar.y: Tweak formatting a bit. + + * parser/Lexer.cpp: + (JSC::Lexer::Lexer): Remove unnnecessary initialization of data members + that are set up by setCode. + (JSC::Lexer::currentOffset): Added. Used where the old code would look at + m_currentOffset. + (JSC::Lexer::shift1): Replaces the old shift function. No longer does anything + to handle BOM characters. + (JSC::Lexer::shift2): Ditto. + (JSC::Lexer::shift3): Ditto. + (JSC::Lexer::shift4): Ditto. + (JSC::Lexer::setCode): Updated for name change from yylineno to m_line. + Removed now-unused m_eatNextIdentifier, m_stackToken, and m_restrKeyword. + Replaced m_skipLF and m_skipCR with m_skipLineEnd. Replaced the old + m_length with m_codeEnd and m_currentOffset with m_codeStart. Added code + to scan for a BOM character and call copyCodeWithoutBOMs() if we find any. + (JSC::Lexer::copyCodeWithoutBOMs): Added. + (JSC::Lexer::nextLine): Updated for name change from yylineno to m_line. + (JSC::Lexer::makeIdentifier): Moved up higher in the file. + (JSC::Lexer::matchPunctuator): Moved up higher in the file and changed to + use a switch statement instead of just if statements. + (JSC::Lexer::isLineTerminator): Moved up higher in the file and changed to + have fewer branches. + (JSC::Lexer::lastTokenWasRestrKeyword): Added. This replaces the old + m_restrKeyword boolean. + (JSC::Lexer::isIdentStart): Moved up higher in the file. Changed to use + fewer branches in the ASCII but not identifier case. + (JSC::Lexer::isIdentPart): Ditto. + (JSC::Lexer::singleEscape): Moved up higher in the file. + (JSC::Lexer::convertOctal): Moved up higher in the file. + (JSC::Lexer::convertHex): Moved up higher in the file. Changed to use + toASCIIHexValue instead of rolling our own here. + (JSC::Lexer::convertUnicode): Ditto. + (JSC::Lexer::record8): Moved up higher in the file. + (JSC::Lexer::record16): Moved up higher in the file. + (JSC::Lexer::lex): Changed type of stringType to int. Replaced m_skipLF + and m_skipCR with m_skipLineEnd, which requires fewer branches in the + main lexer loop. Use currentOffset instead of m_currentOffset. Removed + unneeded m_stackToken. Use isASCIIDigit instead of isDecimalDigit. + Split out the two cases for InIdentifierOrKeyword and InIdentifier. + Added special case tight loops for identifiers and other simple states. + Removed a branch from the code that sets m_atLineStart to false using goto. + Streamlined the number-handling code so we don't check for the same types + twice for non-numeric cases and don't add a null to m_buffer8 when it's + not being used. Removed m_eatNextIdentifier, which wasn't working anyway, + and m_restrKeyword, which is redundant with m_lastToken. Set the + m_delimited flag without using a branch. + (JSC::Lexer::scanRegExp): Tweaked style a bit. + (JSC::Lexer::clear): Clear m_codeWithoutBOMs so we don't use memory after + parsing. Clear out UString objects in the more conventional way. + (JSC::Lexer::sourceCode): Made this no-longer inline since it has more + work to do in the case where we stripped BOMs. + + * parser/Lexer.h: Renamed yylineno to m_lineNumber. Removed convertHex + function, which is the same as toASCIIHexValue. Removed isHexDigit + function, which is the same as isASCIIHedDigit. Replaced shift with four + separate shift functions. Removed isWhiteSpace function that passes + m_current, instead just passing m_current explicitly. Removed isOctalDigit, + which is the same as isASCIIOctalDigit. Eliminated unused arguments from + matchPunctuator. Added copyCoodeWithoutBOMs and currentOffset. Moved the + makeIdentifier function out of the header. Added lastTokenWasRestrKeyword + function. Added new constants for m_skipLineEnd. Removed unused yycolumn, + m_restrKeyword, m_skipLF, m_skipCR, m_eatNextIdentifier, m_stackToken, + m_position, m_length, m_currentOffset, m_nextOffset1, m_nextOffset2, + m_nextOffset3. Added m_skipLineEnd, m_codeStart, m_codeEnd, and + m_codeWithoutBOMs. + + * parser/SourceProvider.h: Added hasBOMs function. In the future this can + be used to tell the lexer about strings known not to have BOMs. + + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncUnescape): Changed to use isASCIIHexDigit. + + * wtf/ASCIICType.h: Added using statements to match the design of the + other WTF headers. + +2009-05-02 Ada Chan + + Fix windows build (when doing a clean build) + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-02 Geoffrey Garen + + Reviewed by Sam Weinig. + + Simplified null-ish JSValues. + + Replaced calls to noValue() with calls to JSValue() (which is what + noValue() returned). Removed noValue(). + + Replaced almost all uses of jsImpossibleValue() with uses of JSValue(). + Its one remaining use is for construction of hash table deleted values. + For that specific task, I made a new, private constructor with a special + tag. Removed jsImpossibleValue(). + + Removed "JSValue()" initialiazers, since default construction happens... + by default. + + * API/JSCallbackObjectFunctions.h: + (JSC::::call): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitLoad): + * bytecompiler/BytecodeGenerator.h: + * debugger/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::evaluate): + * debugger/DebuggerCallFrame.h: + (JSC::DebuggerCallFrame::DebuggerCallFrame): + * interpreter/CallFrame.h: + (JSC::ExecState::clearException): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::retrieveLastCaller): + * interpreter/Register.h: + (JSC::Register::Register): + * jit/JITCall.cpp: + (JSC::JIT::unlinkCall): + (JSC::JIT::compileOpCallInitializeCallFrame): + (JSC::JIT::compileOpCall): + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_call_eval): + (JSC::JITStubs::cti_vm_throw): + * profiler/Profiler.cpp: + (JSC::Profiler::willExecute): + (JSC::Profiler::didExecute): + * runtime/ArrayPrototype.cpp: + (JSC::getProperty): + * runtime/Completion.cpp: + (JSC::evaluate): + * runtime/Completion.h: + (JSC::Completion::Completion): + * runtime/GetterSetter.cpp: + (JSC::GetterSetter::getPrimitiveNumber): + * runtime/JSArray.cpp: + (JSC::JSArray::putSlowCase): + (JSC::JSArray::deleteProperty): + (JSC::JSArray::increaseVectorLength): + (JSC::JSArray::setLength): + (JSC::JSArray::pop): + (JSC::JSArray::sort): + (JSC::JSArray::compactForSorting): + * runtime/JSCell.cpp: + (JSC::JSCell::getJSNumber): + * runtime/JSCell.h: + (JSC::JSValue::getJSNumber): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSImmediate.h: + (JSC::JSImmediate::fromNumberOutsideIntegerRange): + (JSC::JSImmediate::from): + * runtime/JSNumberCell.cpp: + (JSC::jsNumberCell): + * runtime/JSObject.cpp: + (JSC::callDefaultValueFunction): + * runtime/JSObject.h: + (JSC::JSObject::getDirect): + * runtime/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::toPrimitive): + * runtime/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::next): + * runtime/JSValue.h: + (JSC::JSValue::): + (JSC::JSValueHashTraits::constructDeletedValue): + (JSC::JSValueHashTraits::isDeletedValue): + (JSC::JSValue::JSValue): + * runtime/JSWrapperObject.h: + (JSC::JSWrapperObject::JSWrapperObject): + * runtime/Operations.h: + (JSC::resolveBase): + * runtime/PropertySlot.h: + (JSC::PropertySlot::clearBase): + (JSC::PropertySlot::clearValue): + +2009-05-02 Maciej Stachowiak + + Reviewed by Cameron Zwarich. + + - speed up the lexer in various ways + + ~2% command-line SunSpider speedup + + * parser/Lexer.cpp: + (JSC::Lexer::setCode): Moved below shift() so it can inline. + (JSC::Lexer::scanRegExp): Use resize(0) instead of clear() on Vectors, since the intent + here is not to free the underlying buffer. + (JSC::Lexer::lex): ditto; also, change the loop logic a bit for the main lexing loop + to avoid branching on !m_done twice per iteration. Now we only check it once. + (JSC::Lexer::shift): Make this ALWAYS_INLINE and tag an unusual branch as UNLIKELY + * parser/Lexer.h: + (JSC::Lexer::makeIdentifier): force to be ALWAYS_INLINE + * wtf/Vector.h: + (WTF::::append): force to be ALWAYS_INLINE (may have helped in ways other than parsing but it wasn't + getting inlined in a hot code path in the lexer) + +2009-05-01 Steve Falkenburg + + Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore.make: + +2009-05-01 Sam Weinig + + Fix 64bit build. + + * runtime/JSNumberCell.h: + (JSC::JSValue::JSValue): + * runtime/JSValue.h: + (JSC::jsNumber): + +2009-05-01 Sam Weinig + + Roll out JavaScriptCore API number marshaling. + + * API/APICast.h: + (toJS): + (toRef): + * API/JSBase.cpp: + (JSEvaluateScript): + (JSCheckScriptSyntax): + * API/JSCallbackConstructor.cpp: + (JSC::constructJSCallback): + * API/JSCallbackFunction.cpp: + (JSC::JSCallbackFunction::call): + * API/JSCallbackObjectFunctions.h: + (JSC::::getOwnPropertySlot): + (JSC::::put): + (JSC::::deleteProperty): + (JSC::::construct): + (JSC::::hasInstance): + (JSC::::call): + (JSC::::toNumber): + (JSC::::toString): + (JSC::::staticValueGetter): + (JSC::::callbackGetter): + * API/JSObjectRef.cpp: + (JSObjectMakeFunction): + (JSObjectMakeArray): + (JSObjectMakeDate): + (JSObjectMakeError): + (JSObjectMakeRegExp): + (JSObjectGetPrototype): + (JSObjectSetPrototype): + (JSObjectGetProperty): + (JSObjectSetProperty): + (JSObjectGetPropertyAtIndex): + (JSObjectSetPropertyAtIndex): + (JSObjectDeleteProperty): + (JSObjectCallAsFunction): + (JSObjectCallAsConstructor): + * API/JSValueRef.cpp: + (JSValueGetType): + (JSValueIsUndefined): + (JSValueIsNull): + (JSValueIsBoolean): + (JSValueIsNumber): + (JSValueIsString): + (JSValueIsObject): + (JSValueIsObjectOfClass): + (JSValueIsEqual): + (JSValueIsStrictEqual): + (JSValueIsInstanceOfConstructor): + (JSValueMakeUndefined): + (JSValueMakeNull): + (JSValueMakeBoolean): + (JSValueMakeNumber): + (JSValueMakeString): + (JSValueToBoolean): + (JSValueToNumber): + (JSValueToStringCopy): + (JSValueToObject): + (JSValueProtect): + (JSValueUnprotect): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + * runtime/JSNumberCell.cpp: + * runtime/JSNumberCell.h: + * runtime/JSValue.h: + +2009-05-01 Sam Weinig + + Fix windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-01 Sam Weinig + + Fix the build. + + * JavaScriptCore.exp: + +2009-05-01 Sam Weinig + + Reviewed by Geoffrey "Too Far!" Garen. + + Move JS number construction into JSValue. + + * runtime/JSImmediate.h: + * runtime/JSNumberCell.h: + (JSC::JSValue::JSValue): + * runtime/JSValue.h: + (JSC::jsNumber): + +2009-05-01 Sam Weinig + + Reviewed by Geoff "The Minneapolis" Garen. + + Add mechanism to vend heap allocated JS numbers to JavaScriptCore API clients with a + representation that is independent of the number representation in the VM. + - Numbers leaving the interpreter are converted to a tagged JSNumberCell. + - The numbers coming into the interpreter (asserted to be the tagged JSNumberCell) are + converted back to the VM's internal number representation. + + * API/APICast.h: + (toJS): + (toRef): + * API/JSBase.cpp: + (JSEvaluateScript): + (JSCheckScriptSyntax): + * API/JSCallbackConstructor.cpp: + (JSC::constructJSCallback): + * API/JSCallbackFunction.cpp: + (JSC::JSCallbackFunction::call): + * API/JSCallbackObjectFunctions.h: + (JSC::::getOwnPropertySlot): + (JSC::::put): + (JSC::::deleteProperty): + (JSC::::construct): + (JSC::::hasInstance): + (JSC::::call): + (JSC::::toNumber): + (JSC::::toString): + (JSC::::staticValueGetter): + (JSC::::callbackGetter): + * API/JSObjectRef.cpp: + (JSObjectMakeFunction): + (JSObjectMakeArray): + (JSObjectMakeDate): + (JSObjectMakeError): + (JSObjectMakeRegExp): + (JSObjectGetPrototype): + (JSObjectSetPrototype): + (JSObjectGetProperty): + (JSObjectSetProperty): + (JSObjectGetPropertyAtIndex): + (JSObjectSetPropertyAtIndex): + (JSObjectDeleteProperty): + (JSObjectCallAsFunction): + (JSObjectCallAsConstructor): + * API/JSValueRef.cpp: + (JSValueGetType): + (JSValueIsUndefined): + (JSValueIsNull): + (JSValueIsBoolean): + (JSValueIsNumber): + (JSValueIsString): + (JSValueIsObject): + (JSValueIsObjectOfClass): + (JSValueIsEqual): + (JSValueIsStrictEqual): + (JSValueIsInstanceOfConstructor): + (JSValueMakeUndefined): + (JSValueMakeNull): + (JSValueMakeBoolean): + (JSValueMakeNumber): + (JSValueMakeString): + (JSValueToBoolean): + (JSValueToNumber): + (JSValueToStringCopy): + (JSValueToObject): + (JSValueProtect): + (JSValueUnprotect): + * runtime/JSNumberCell.cpp: + (JSC::jsAPIMangledNumber): + * runtime/JSNumberCell.h: + (JSC::JSNumberCell::isAPIMangledNumber): + (JSC::JSNumberCell::): + (JSC::JSNumberCell::JSNumberCell): + (JSC::JSValue::isAPIMangledNumber): + * runtime/JSValue.h: + +2009-05-01 Geoffrey Garen + + Windows build fix take 6. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2009-05-01 Geoffrey Garen + + Windows build fix take 5. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-01 Geoffrey Garen + + Windows build fix take 4. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-01 Geoffrey Garen + + Windows build fix take 3. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-01 Geoffrey Garen + + Windows build fix take 2. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2009-05-01 Geoffrey Garen + + Windows build fix take 1. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-01 Geoffrey Garen + + Rubber Stamped by Sam Weinig. + + Renamed JSValuePtr => JSValue. + + * API/APICast.h: + (toJS): + (toRef): + * API/JSCallbackConstructor.h: + (JSC::JSCallbackConstructor::createStructure): + * API/JSCallbackFunction.cpp: + (JSC::JSCallbackFunction::call): + * API/JSCallbackFunction.h: + (JSC::JSCallbackFunction::createStructure): + * API/JSCallbackObject.h: + (JSC::JSCallbackObject::createStructure): + * API/JSCallbackObjectFunctions.h: + (JSC::::asCallbackObject): + (JSC::::put): + (JSC::::hasInstance): + (JSC::::call): + (JSC::::staticValueGetter): + (JSC::::staticFunctionGetter): + (JSC::::callbackGetter): + * API/JSContextRef.cpp: + * API/JSObjectRef.cpp: + (JSObjectMakeConstructor): + (JSObjectSetPrototype): + (JSObjectGetProperty): + (JSObjectSetProperty): + (JSObjectGetPropertyAtIndex): + (JSObjectSetPropertyAtIndex): + * API/JSValueRef.cpp: + (JSValueGetType): + (JSValueIsUndefined): + (JSValueIsNull): + (JSValueIsBoolean): + (JSValueIsNumber): + (JSValueIsString): + (JSValueIsObject): + (JSValueIsObjectOfClass): + (JSValueIsEqual): + (JSValueIsStrictEqual): + (JSValueIsInstanceOfConstructor): + (JSValueToBoolean): + (JSValueToNumber): + (JSValueToStringCopy): + (JSValueToObject): + (JSValueProtect): + (JSValueUnprotect): + * JavaScriptCore.exp: + * bytecode/CodeBlock.cpp: + (JSC::valueToSourceString): + (JSC::constantName): + (JSC::CodeBlock::dump): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::getConstant): + (JSC::CodeBlock::addUnexpectedConstant): + (JSC::CodeBlock::unexpectedConstant): + * bytecode/EvalCodeCache.h: + (JSC::EvalCodeCache::get): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::addConstant): + (JSC::BytecodeGenerator::addUnexpectedConstant): + (JSC::BytecodeGenerator::emitLoad): + (JSC::BytecodeGenerator::emitGetScopedVar): + (JSC::BytecodeGenerator::emitPutScopedVar): + (JSC::BytecodeGenerator::emitNewError): + (JSC::keyForImmediateSwitch): + * bytecompiler/BytecodeGenerator.h: + (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue): + (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue): + * debugger/Debugger.cpp: + (JSC::evaluateInGlobalCallFrame): + * debugger/Debugger.h: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::put): + (JSC::DebuggerActivation::putWithAttributes): + (JSC::DebuggerActivation::lookupGetter): + (JSC::DebuggerActivation::lookupSetter): + * debugger/DebuggerActivation.h: + (JSC::DebuggerActivation::createStructure): + * debugger/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::evaluate): + * debugger/DebuggerCallFrame.h: + (JSC::DebuggerCallFrame::DebuggerCallFrame): + (JSC::DebuggerCallFrame::exception): + * interpreter/CachedCall.h: + (JSC::CachedCall::CachedCall): + (JSC::CachedCall::call): + (JSC::CachedCall::setThis): + (JSC::CachedCall::setArgument): + * interpreter/CallFrame.cpp: + (JSC::CallFrame::thisValue): + (JSC::CallFrame::dumpCaller): + * interpreter/CallFrame.h: + (JSC::ExecState::setException): + (JSC::ExecState::exception): + (JSC::ExecState::exceptionSlot): + * interpreter/CallFrameClosure.h: + (JSC::CallFrameClosure::setArgument): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::resolve): + (JSC::Interpreter::resolveSkip): + (JSC::Interpreter::resolveGlobal): + (JSC::Interpreter::resolveBase): + (JSC::Interpreter::resolveBaseAndProperty): + (JSC::Interpreter::resolveBaseAndFunc): + (JSC::isNotObject): + (JSC::Interpreter::callEval): + (JSC::Interpreter::unwindCallFrame): + (JSC::Interpreter::throwException): + (JSC::Interpreter::execute): + (JSC::Interpreter::prepareForRepeatCall): + (JSC::Interpreter::createExceptionScope): + (JSC::Interpreter::tryCachePutByID): + (JSC::Interpreter::tryCacheGetByID): + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::retrieveArguments): + (JSC::Interpreter::retrieveCaller): + (JSC::Interpreter::retrieveLastCaller): + * interpreter/Interpreter.h: + * interpreter/Register.h: + (JSC::Register::): + (JSC::Register::Register): + (JSC::Register::jsValue): + * jit/JIT.cpp: + (JSC::): + (JSC::JIT::privateCompileMainPass): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_mod): + * jit/JITCall.cpp: + (JSC::JIT::unlinkCall): + (JSC::JIT::compileOpCallInitializeCallFrame): + (JSC::JIT::compileOpCall): + * jit/JITCode.h: + (JSC::): + (JSC::JITCode::execute): + * jit/JITInlineMethods.h: + (JSC::JIT::emitGetVirtualRegister): + (JSC::JIT::getConstantOperand): + (JSC::JIT::emitPutJITStubArgFromVirtualRegister): + (JSC::JIT::emitInitRegister): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::patchGetByIdSelf): + (JSC::JIT::patchPutByIdReplace): + (JSC::JIT::privateCompileGetByIdSelf): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + (JSC::JIT::privateCompilePutByIdReplace): + * jit/JITStubs.cpp: + (JSC::JITStubs::tryCachePutByID): + (JSC::JITStubs::tryCacheGetByID): + (JSC::JITStubs::cti_op_convert_this): + (JSC::JITStubs::cti_op_add): + (JSC::JITStubs::cti_op_pre_inc): + (JSC::JITStubs::cti_op_loop_if_less): + (JSC::JITStubs::cti_op_loop_if_lesseq): + (JSC::JITStubs::cti_op_get_by_id_generic): + (JSC::JITStubs::cti_op_get_by_id): + (JSC::JITStubs::cti_op_get_by_id_second): + (JSC::JITStubs::cti_op_get_by_id_self_fail): + (JSC::JITStubs::cti_op_get_by_id_proto_list): + (JSC::JITStubs::cti_op_get_by_id_proto_list_full): + (JSC::JITStubs::cti_op_get_by_id_proto_fail): + (JSC::JITStubs::cti_op_get_by_id_array_fail): + (JSC::JITStubs::cti_op_get_by_id_string_fail): + (JSC::JITStubs::cti_op_instanceof): + (JSC::JITStubs::cti_op_del_by_id): + (JSC::JITStubs::cti_op_mul): + (JSC::JITStubs::cti_op_call_NotJSFunction): + (JSC::JITStubs::cti_op_resolve): + (JSC::JITStubs::cti_op_construct_NotJSConstruct): + (JSC::JITStubs::cti_op_get_by_val): + (JSC::JITStubs::cti_op_get_by_val_string): + (JSC::JITStubs::cti_op_get_by_val_byte_array): + (JSC::JITStubs::cti_op_resolve_func): + (JSC::JITStubs::cti_op_sub): + (JSC::JITStubs::cti_op_put_by_val): + (JSC::JITStubs::cti_op_put_by_val_array): + (JSC::JITStubs::cti_op_put_by_val_byte_array): + (JSC::JITStubs::cti_op_lesseq): + (JSC::JITStubs::cti_op_loop_if_true): + (JSC::JITStubs::cti_op_load_varargs): + (JSC::JITStubs::cti_op_negate): + (JSC::JITStubs::cti_op_resolve_base): + (JSC::JITStubs::cti_op_resolve_skip): + (JSC::JITStubs::cti_op_resolve_global): + (JSC::JITStubs::cti_op_div): + (JSC::JITStubs::cti_op_pre_dec): + (JSC::JITStubs::cti_op_jless): + (JSC::JITStubs::cti_op_not): + (JSC::JITStubs::cti_op_jtrue): + (JSC::JITStubs::cti_op_post_inc): + (JSC::JITStubs::cti_op_eq): + (JSC::JITStubs::cti_op_lshift): + (JSC::JITStubs::cti_op_bitand): + (JSC::JITStubs::cti_op_rshift): + (JSC::JITStubs::cti_op_bitnot): + (JSC::JITStubs::cti_op_resolve_with_base): + (JSC::JITStubs::cti_op_mod): + (JSC::JITStubs::cti_op_less): + (JSC::JITStubs::cti_op_neq): + (JSC::JITStubs::cti_op_post_dec): + (JSC::JITStubs::cti_op_urshift): + (JSC::JITStubs::cti_op_bitxor): + (JSC::JITStubs::cti_op_bitor): + (JSC::JITStubs::cti_op_call_eval): + (JSC::JITStubs::cti_op_throw): + (JSC::JITStubs::cti_op_next_pname): + (JSC::JITStubs::cti_op_typeof): + (JSC::JITStubs::cti_op_is_undefined): + (JSC::JITStubs::cti_op_is_boolean): + (JSC::JITStubs::cti_op_is_number): + (JSC::JITStubs::cti_op_is_string): + (JSC::JITStubs::cti_op_is_object): + (JSC::JITStubs::cti_op_is_function): + (JSC::JITStubs::cti_op_stricteq): + (JSC::JITStubs::cti_op_nstricteq): + (JSC::JITStubs::cti_op_to_jsnumber): + (JSC::JITStubs::cti_op_in): + (JSC::JITStubs::cti_op_switch_imm): + (JSC::JITStubs::cti_op_switch_char): + (JSC::JITStubs::cti_op_switch_string): + (JSC::JITStubs::cti_op_del_by_val): + (JSC::JITStubs::cti_op_new_error): + (JSC::JITStubs::cti_vm_throw): + * jit/JITStubs.h: + * jsc.cpp: + (functionPrint): + (functionDebug): + (functionGC): + (functionVersion): + (functionRun): + (functionLoad): + (functionSetSamplingFlag): + (functionClearSamplingFlag): + (functionReadline): + (functionQuit): + * parser/Nodes.cpp: + (JSC::processClauseList): + * profiler/ProfileGenerator.cpp: + (JSC::ProfileGenerator::addParentForConsoleStart): + * profiler/Profiler.cpp: + (JSC::Profiler::willExecute): + (JSC::Profiler::didExecute): + (JSC::Profiler::createCallIdentifier): + * profiler/Profiler.h: + * runtime/ArgList.cpp: + (JSC::MarkedArgumentBuffer::slowAppend): + * runtime/ArgList.h: + (JSC::MarkedArgumentBuffer::at): + (JSC::MarkedArgumentBuffer::append): + (JSC::ArgList::ArgList): + (JSC::ArgList::at): + * runtime/Arguments.cpp: + (JSC::Arguments::put): + * runtime/Arguments.h: + (JSC::Arguments::createStructure): + (JSC::asArguments): + * runtime/ArrayConstructor.cpp: + (JSC::callArrayConstructor): + * runtime/ArrayPrototype.cpp: + (JSC::getProperty): + (JSC::putProperty): + (JSC::arrayProtoFuncToString): + (JSC::arrayProtoFuncToLocaleString): + (JSC::arrayProtoFuncJoin): + (JSC::arrayProtoFuncConcat): + (JSC::arrayProtoFuncPop): + (JSC::arrayProtoFuncPush): + (JSC::arrayProtoFuncReverse): + (JSC::arrayProtoFuncShift): + (JSC::arrayProtoFuncSlice): + (JSC::arrayProtoFuncSort): + (JSC::arrayProtoFuncSplice): + (JSC::arrayProtoFuncUnShift): + (JSC::arrayProtoFuncFilter): + (JSC::arrayProtoFuncMap): + (JSC::arrayProtoFuncEvery): + (JSC::arrayProtoFuncForEach): + (JSC::arrayProtoFuncSome): + (JSC::arrayProtoFuncReduce): + (JSC::arrayProtoFuncReduceRight): + (JSC::arrayProtoFuncIndexOf): + (JSC::arrayProtoFuncLastIndexOf): + * runtime/BooleanConstructor.cpp: + (JSC::callBooleanConstructor): + (JSC::constructBooleanFromImmediateBoolean): + * runtime/BooleanConstructor.h: + * runtime/BooleanObject.h: + (JSC::asBooleanObject): + * runtime/BooleanPrototype.cpp: + (JSC::booleanProtoFuncToString): + (JSC::booleanProtoFuncValueOf): + * runtime/CallData.cpp: + (JSC::call): + * runtime/CallData.h: + * runtime/Collector.cpp: + (JSC::Heap::protect): + (JSC::Heap::unprotect): + (JSC::Heap::heap): + * runtime/Collector.h: + * runtime/Completion.cpp: + (JSC::evaluate): + * runtime/Completion.h: + (JSC::Completion::Completion): + (JSC::Completion::value): + (JSC::Completion::setValue): + * runtime/ConstructData.cpp: + (JSC::construct): + * runtime/ConstructData.h: + * runtime/DateConstructor.cpp: + (JSC::constructDate): + (JSC::callDate): + (JSC::dateParse): + (JSC::dateNow): + (JSC::dateUTC): + * runtime/DateInstance.h: + (JSC::asDateInstance): + * runtime/DatePrototype.cpp: + (JSC::dateProtoFuncToString): + (JSC::dateProtoFuncToUTCString): + (JSC::dateProtoFuncToDateString): + (JSC::dateProtoFuncToTimeString): + (JSC::dateProtoFuncToLocaleString): + (JSC::dateProtoFuncToLocaleDateString): + (JSC::dateProtoFuncToLocaleTimeString): + (JSC::dateProtoFuncGetTime): + (JSC::dateProtoFuncGetFullYear): + (JSC::dateProtoFuncGetUTCFullYear): + (JSC::dateProtoFuncToGMTString): + (JSC::dateProtoFuncGetMonth): + (JSC::dateProtoFuncGetUTCMonth): + (JSC::dateProtoFuncGetDate): + (JSC::dateProtoFuncGetUTCDate): + (JSC::dateProtoFuncGetDay): + (JSC::dateProtoFuncGetUTCDay): + (JSC::dateProtoFuncGetHours): + (JSC::dateProtoFuncGetUTCHours): + (JSC::dateProtoFuncGetMinutes): + (JSC::dateProtoFuncGetUTCMinutes): + (JSC::dateProtoFuncGetSeconds): + (JSC::dateProtoFuncGetUTCSeconds): + (JSC::dateProtoFuncGetMilliSeconds): + (JSC::dateProtoFuncGetUTCMilliseconds): + (JSC::dateProtoFuncGetTimezoneOffset): + (JSC::dateProtoFuncSetTime): + (JSC::setNewValueFromTimeArgs): + (JSC::setNewValueFromDateArgs): + (JSC::dateProtoFuncSetMilliSeconds): + (JSC::dateProtoFuncSetUTCMilliseconds): + (JSC::dateProtoFuncSetSeconds): + (JSC::dateProtoFuncSetUTCSeconds): + (JSC::dateProtoFuncSetMinutes): + (JSC::dateProtoFuncSetUTCMinutes): + (JSC::dateProtoFuncSetHours): + (JSC::dateProtoFuncSetUTCHours): + (JSC::dateProtoFuncSetDate): + (JSC::dateProtoFuncSetUTCDate): + (JSC::dateProtoFuncSetMonth): + (JSC::dateProtoFuncSetUTCMonth): + (JSC::dateProtoFuncSetFullYear): + (JSC::dateProtoFuncSetUTCFullYear): + (JSC::dateProtoFuncSetYear): + (JSC::dateProtoFuncGetYear): + * runtime/DatePrototype.h: + (JSC::DatePrototype::createStructure): + * runtime/ErrorConstructor.cpp: + (JSC::callErrorConstructor): + * runtime/ErrorPrototype.cpp: + (JSC::errorProtoFuncToString): + * runtime/ExceptionHelpers.cpp: + (JSC::createInterruptedExecutionException): + (JSC::createError): + (JSC::createStackOverflowError): + (JSC::createUndefinedVariableError): + (JSC::createErrorMessage): + (JSC::createInvalidParamError): + (JSC::createNotAConstructorError): + (JSC::createNotAFunctionError): + * runtime/ExceptionHelpers.h: + * runtime/FunctionConstructor.cpp: + (JSC::callFunctionConstructor): + * runtime/FunctionPrototype.cpp: + (JSC::callFunctionPrototype): + (JSC::functionProtoFuncToString): + (JSC::functionProtoFuncApply): + (JSC::functionProtoFuncCall): + * runtime/FunctionPrototype.h: + (JSC::FunctionPrototype::createStructure): + * runtime/GetterSetter.cpp: + (JSC::GetterSetter::toPrimitive): + (JSC::GetterSetter::getPrimitiveNumber): + * runtime/GetterSetter.h: + (JSC::asGetterSetter): + * runtime/InternalFunction.cpp: + (JSC::InternalFunction::displayName): + * runtime/InternalFunction.h: + (JSC::InternalFunction::createStructure): + (JSC::asInternalFunction): + * runtime/JSActivation.cpp: + (JSC::JSActivation::getOwnPropertySlot): + (JSC::JSActivation::put): + (JSC::JSActivation::putWithAttributes): + (JSC::JSActivation::argumentsGetter): + * runtime/JSActivation.h: + (JSC::JSActivation::createStructure): + (JSC::asActivation): + * runtime/JSArray.cpp: + (JSC::storageSize): + (JSC::JSArray::JSArray): + (JSC::JSArray::getOwnPropertySlot): + (JSC::JSArray::put): + (JSC::JSArray::putSlowCase): + (JSC::JSArray::deleteProperty): + (JSC::JSArray::setLength): + (JSC::JSArray::pop): + (JSC::JSArray::push): + (JSC::JSArray::mark): + (JSC::compareNumbersForQSort): + (JSC::JSArray::sortNumeric): + (JSC::JSArray::sort): + (JSC::JSArray::compactForSorting): + (JSC::JSArray::checkConsistency): + (JSC::constructArray): + * runtime/JSArray.h: + (JSC::JSArray::getIndex): + (JSC::JSArray::setIndex): + (JSC::JSArray::createStructure): + (JSC::asArray): + (JSC::isJSArray): + * runtime/JSByteArray.cpp: + (JSC::JSByteArray::createStructure): + (JSC::JSByteArray::put): + * runtime/JSByteArray.h: + (JSC::JSByteArray::getIndex): + (JSC::JSByteArray::setIndex): + (JSC::asByteArray): + (JSC::isJSByteArray): + * runtime/JSCell.cpp: + (JSC::JSCell::put): + (JSC::JSCell::getJSNumber): + * runtime/JSCell.h: + (JSC::asCell): + (JSC::JSValue::asCell): + (JSC::JSValue::isString): + (JSC::JSValue::isGetterSetter): + (JSC::JSValue::isObject): + (JSC::JSValue::getString): + (JSC::JSValue::getObject): + (JSC::JSValue::getCallData): + (JSC::JSValue::getConstructData): + (JSC::JSValue::getUInt32): + (JSC::JSValue::getTruncatedInt32): + (JSC::JSValue::getTruncatedUInt32): + (JSC::JSValue::mark): + (JSC::JSValue::marked): + (JSC::JSValue::toPrimitive): + (JSC::JSValue::getPrimitiveNumber): + (JSC::JSValue::toBoolean): + (JSC::JSValue::toNumber): + (JSC::JSValue::toString): + (JSC::JSValue::toObject): + (JSC::JSValue::toThisObject): + (JSC::JSValue::needsThisConversion): + (JSC::JSValue::toThisString): + (JSC::JSValue::getJSNumber): + * runtime/JSFunction.cpp: + (JSC::JSFunction::call): + (JSC::JSFunction::argumentsGetter): + (JSC::JSFunction::callerGetter): + (JSC::JSFunction::lengthGetter): + (JSC::JSFunction::getOwnPropertySlot): + (JSC::JSFunction::put): + (JSC::JSFunction::construct): + * runtime/JSFunction.h: + (JSC::JSFunction::createStructure): + (JSC::asFunction): + * runtime/JSGlobalData.h: + * runtime/JSGlobalObject.cpp: + (JSC::markIfNeeded): + (JSC::JSGlobalObject::put): + (JSC::JSGlobalObject::putWithAttributes): + (JSC::JSGlobalObject::reset): + (JSC::JSGlobalObject::resetPrototype): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::createStructure): + (JSC::JSGlobalObject::GlobalPropertyInfo::GlobalPropertyInfo): + (JSC::asGlobalObject): + (JSC::Structure::prototypeForLookup): + (JSC::Structure::prototypeChain): + (JSC::Structure::isValid): + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::encode): + (JSC::decode): + (JSC::globalFuncEval): + (JSC::globalFuncParseInt): + (JSC::globalFuncParseFloat): + (JSC::globalFuncIsNaN): + (JSC::globalFuncIsFinite): + (JSC::globalFuncDecodeURI): + (JSC::globalFuncDecodeURIComponent): + (JSC::globalFuncEncodeURI): + (JSC::globalFuncEncodeURIComponent): + (JSC::globalFuncEscape): + (JSC::globalFuncUnescape): + (JSC::globalFuncJSCPrint): + * runtime/JSGlobalObjectFunctions.h: + * runtime/JSImmediate.cpp: + (JSC::JSImmediate::toThisObject): + (JSC::JSImmediate::toObject): + (JSC::JSImmediate::prototype): + (JSC::JSImmediate::toString): + * runtime/JSImmediate.h: + (JSC::JSImmediate::isImmediate): + (JSC::JSImmediate::isNumber): + (JSC::JSImmediate::isIntegerNumber): + (JSC::JSImmediate::isDoubleNumber): + (JSC::JSImmediate::isPositiveIntegerNumber): + (JSC::JSImmediate::isBoolean): + (JSC::JSImmediate::isUndefinedOrNull): + (JSC::JSImmediate::isEitherImmediate): + (JSC::JSImmediate::areBothImmediate): + (JSC::JSImmediate::areBothImmediateIntegerNumbers): + (JSC::JSImmediate::makeValue): + (JSC::JSImmediate::makeInt): + (JSC::JSImmediate::makeDouble): + (JSC::JSImmediate::makeBool): + (JSC::JSImmediate::makeUndefined): + (JSC::JSImmediate::makeNull): + (JSC::JSImmediate::doubleValue): + (JSC::JSImmediate::intValue): + (JSC::JSImmediate::uintValue): + (JSC::JSImmediate::boolValue): + (JSC::JSImmediate::rawValue): + (JSC::JSImmediate::trueImmediate): + (JSC::JSImmediate::falseImmediate): + (JSC::JSImmediate::undefinedImmediate): + (JSC::JSImmediate::nullImmediate): + (JSC::JSImmediate::zeroImmediate): + (JSC::JSImmediate::oneImmediate): + (JSC::JSImmediate::impossibleValue): + (JSC::JSImmediate::toBoolean): + (JSC::JSImmediate::getTruncatedUInt32): + (JSC::JSImmediate::fromNumberOutsideIntegerRange): + (JSC::JSImmediate::from): + (JSC::JSImmediate::getTruncatedInt32): + (JSC::JSImmediate::toDouble): + (JSC::JSImmediate::getUInt32): + (JSC::JSValue::JSValue): + (JSC::JSValue::isUndefinedOrNull): + (JSC::JSValue::isBoolean): + (JSC::JSValue::getBoolean): + (JSC::JSValue::toInt32): + (JSC::JSValue::toUInt32): + (JSC::JSValue::isCell): + (JSC::JSValue::isInt32Fast): + (JSC::JSValue::getInt32Fast): + (JSC::JSValue::isUInt32Fast): + (JSC::JSValue::getUInt32Fast): + (JSC::JSValue::makeInt32Fast): + (JSC::JSValue::areBothInt32Fast): + (JSC::JSFastMath::canDoFastBitwiseOperations): + (JSC::JSFastMath::equal): + (JSC::JSFastMath::notEqual): + (JSC::JSFastMath::andImmediateNumbers): + (JSC::JSFastMath::xorImmediateNumbers): + (JSC::JSFastMath::orImmediateNumbers): + (JSC::JSFastMath::canDoFastRshift): + (JSC::JSFastMath::canDoFastUrshift): + (JSC::JSFastMath::rightShiftImmediateNumbers): + (JSC::JSFastMath::canDoFastAdditiveOperations): + (JSC::JSFastMath::addImmediateNumbers): + (JSC::JSFastMath::subImmediateNumbers): + (JSC::JSFastMath::incImmediateNumber): + (JSC::JSFastMath::decImmediateNumber): + * runtime/JSNotAnObject.cpp: + (JSC::JSNotAnObject::toPrimitive): + (JSC::JSNotAnObject::getPrimitiveNumber): + (JSC::JSNotAnObject::put): + * runtime/JSNotAnObject.h: + (JSC::JSNotAnObject::createStructure): + * runtime/JSNumberCell.cpp: + (JSC::JSNumberCell::toPrimitive): + (JSC::JSNumberCell::getPrimitiveNumber): + (JSC::JSNumberCell::getJSNumber): + (JSC::jsNumberCell): + * runtime/JSNumberCell.h: + (JSC::JSNumberCell::createStructure): + (JSC::isNumberCell): + (JSC::asNumberCell): + (JSC::jsNumber): + (JSC::JSValue::isDoubleNumber): + (JSC::JSValue::getDoubleNumber): + (JSC::JSValue::isNumber): + (JSC::JSValue::uncheckedGetNumber): + (JSC::jsNaN): + (JSC::JSValue::toJSNumber): + (JSC::JSValue::getNumber): + (JSC::JSValue::numberToInt32): + (JSC::JSValue::numberToUInt32): + * runtime/JSObject.cpp: + (JSC::JSObject::mark): + (JSC::JSObject::put): + (JSC::JSObject::putWithAttributes): + (JSC::callDefaultValueFunction): + (JSC::JSObject::getPrimitiveNumber): + (JSC::JSObject::defaultValue): + (JSC::JSObject::defineGetter): + (JSC::JSObject::defineSetter): + (JSC::JSObject::lookupGetter): + (JSC::JSObject::lookupSetter): + (JSC::JSObject::hasInstance): + (JSC::JSObject::toNumber): + (JSC::JSObject::toString): + (JSC::JSObject::fillGetterPropertySlot): + * runtime/JSObject.h: + (JSC::JSObject::getDirect): + (JSC::JSObject::getDirectLocation): + (JSC::JSObject::offsetForLocation): + (JSC::JSObject::locationForOffset): + (JSC::JSObject::getDirectOffset): + (JSC::JSObject::putDirectOffset): + (JSC::JSObject::createStructure): + (JSC::asObject): + (JSC::JSObject::prototype): + (JSC::JSObject::setPrototype): + (JSC::JSValue::isObject): + (JSC::JSObject::inlineGetOwnPropertySlot): + (JSC::JSObject::getOwnPropertySlotForWrite): + (JSC::JSObject::getPropertySlot): + (JSC::JSObject::get): + (JSC::JSObject::putDirect): + (JSC::JSObject::putDirectWithoutTransition): + (JSC::JSObject::toPrimitive): + (JSC::JSValue::get): + (JSC::JSValue::put): + (JSC::JSObject::allocatePropertyStorageInline): + * runtime/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::toPrimitive): + (JSC::JSPropertyNameIterator::getPrimitiveNumber): + * runtime/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::create): + (JSC::JSPropertyNameIterator::next): + * runtime/JSStaticScopeObject.cpp: + (JSC::JSStaticScopeObject::put): + (JSC::JSStaticScopeObject::putWithAttributes): + * runtime/JSStaticScopeObject.h: + (JSC::JSStaticScopeObject::JSStaticScopeObject): + (JSC::JSStaticScopeObject::createStructure): + * runtime/JSString.cpp: + (JSC::JSString::toPrimitive): + (JSC::JSString::getPrimitiveNumber): + (JSC::JSString::getOwnPropertySlot): + * runtime/JSString.h: + (JSC::JSString::createStructure): + (JSC::asString): + (JSC::isJSString): + (JSC::JSValue::toThisJSString): + * runtime/JSValue.cpp: + (JSC::JSValue::toInteger): + (JSC::JSValue::toIntegerPreserveNaN): + * runtime/JSValue.h: + (JSC::JSValue::makeImmediate): + (JSC::JSValue::asValue): + (JSC::noValue): + (JSC::jsImpossibleValue): + (JSC::jsNull): + (JSC::jsUndefined): + (JSC::jsBoolean): + (JSC::operator==): + (JSC::operator!=): + (JSC::JSValue::encode): + (JSC::JSValue::decode): + (JSC::JSValue::JSValue): + (JSC::JSValue::operator bool): + (JSC::JSValue::operator==): + (JSC::JSValue::operator!=): + (JSC::JSValue::isUndefined): + (JSC::JSValue::isNull): + * runtime/JSVariableObject.h: + (JSC::JSVariableObject::symbolTablePut): + (JSC::JSVariableObject::symbolTablePutWithAttributes): + * runtime/JSWrapperObject.h: + (JSC::JSWrapperObject::internalValue): + (JSC::JSWrapperObject::setInternalValue): + * runtime/Lookup.cpp: + (JSC::setUpStaticFunctionSlot): + * runtime/Lookup.h: + (JSC::lookupPut): + * runtime/MathObject.cpp: + (JSC::mathProtoFuncAbs): + (JSC::mathProtoFuncACos): + (JSC::mathProtoFuncASin): + (JSC::mathProtoFuncATan): + (JSC::mathProtoFuncATan2): + (JSC::mathProtoFuncCeil): + (JSC::mathProtoFuncCos): + (JSC::mathProtoFuncExp): + (JSC::mathProtoFuncFloor): + (JSC::mathProtoFuncLog): + (JSC::mathProtoFuncMax): + (JSC::mathProtoFuncMin): + (JSC::mathProtoFuncPow): + (JSC::mathProtoFuncRandom): + (JSC::mathProtoFuncRound): + (JSC::mathProtoFuncSin): + (JSC::mathProtoFuncSqrt): + (JSC::mathProtoFuncTan): + * runtime/MathObject.h: + (JSC::MathObject::createStructure): + * runtime/NativeErrorConstructor.cpp: + (JSC::callNativeErrorConstructor): + * runtime/NumberConstructor.cpp: + (JSC::numberConstructorNaNValue): + (JSC::numberConstructorNegInfinity): + (JSC::numberConstructorPosInfinity): + (JSC::numberConstructorMaxValue): + (JSC::numberConstructorMinValue): + (JSC::callNumberConstructor): + * runtime/NumberConstructor.h: + (JSC::NumberConstructor::createStructure): + * runtime/NumberObject.cpp: + (JSC::NumberObject::getJSNumber): + (JSC::constructNumber): + * runtime/NumberObject.h: + * runtime/NumberPrototype.cpp: + (JSC::numberProtoFuncToString): + (JSC::numberProtoFuncToLocaleString): + (JSC::numberProtoFuncValueOf): + (JSC::numberProtoFuncToFixed): + (JSC::numberProtoFuncToExponential): + (JSC::numberProtoFuncToPrecision): + * runtime/ObjectConstructor.cpp: + (JSC::constructObject): + (JSC::callObjectConstructor): + * runtime/ObjectPrototype.cpp: + (JSC::objectProtoFuncValueOf): + (JSC::objectProtoFuncHasOwnProperty): + (JSC::objectProtoFuncIsPrototypeOf): + (JSC::objectProtoFuncDefineGetter): + (JSC::objectProtoFuncDefineSetter): + (JSC::objectProtoFuncLookupGetter): + (JSC::objectProtoFuncLookupSetter): + (JSC::objectProtoFuncPropertyIsEnumerable): + (JSC::objectProtoFuncToLocaleString): + (JSC::objectProtoFuncToString): + * runtime/ObjectPrototype.h: + * runtime/Operations.cpp: + (JSC::JSValue::equalSlowCase): + (JSC::JSValue::strictEqualSlowCase): + (JSC::throwOutOfMemoryError): + (JSC::jsAddSlowCase): + (JSC::jsTypeStringForValue): + (JSC::jsIsObjectType): + (JSC::jsIsFunctionType): + * runtime/Operations.h: + (JSC::JSValue::equal): + (JSC::JSValue::equalSlowCaseInline): + (JSC::JSValue::strictEqual): + (JSC::JSValue::strictEqualSlowCaseInline): + (JSC::jsLess): + (JSC::jsLessEq): + (JSC::jsAdd): + (JSC::countPrototypeChainEntriesAndCheckForProxies): + (JSC::resolveBase): + * runtime/PropertySlot.cpp: + (JSC::PropertySlot::functionGetter): + * runtime/PropertySlot.h: + (JSC::PropertySlot::PropertySlot): + (JSC::PropertySlot::getValue): + (JSC::PropertySlot::putValue): + (JSC::PropertySlot::setValueSlot): + (JSC::PropertySlot::setValue): + (JSC::PropertySlot::setCustom): + (JSC::PropertySlot::setCustomIndex): + (JSC::PropertySlot::slotBase): + (JSC::PropertySlot::setBase): + (JSC::PropertySlot::): + * runtime/Protect.h: + (JSC::gcProtect): + (JSC::gcUnprotect): + (JSC::ProtectedPtr::operator JSValue): + (JSC::ProtectedJSValue::ProtectedJSValue): + (JSC::ProtectedJSValue::get): + (JSC::ProtectedJSValue::operator JSValue): + (JSC::ProtectedJSValue::operator->): + (JSC::ProtectedJSValue::~ProtectedJSValue): + (JSC::ProtectedJSValue::operator=): + (JSC::operator==): + (JSC::operator!=): + * runtime/RegExpConstructor.cpp: + (JSC::RegExpConstructor::getBackref): + (JSC::RegExpConstructor::getLastParen): + (JSC::RegExpConstructor::getLeftContext): + (JSC::RegExpConstructor::getRightContext): + (JSC::regExpConstructorDollar1): + (JSC::regExpConstructorDollar2): + (JSC::regExpConstructorDollar3): + (JSC::regExpConstructorDollar4): + (JSC::regExpConstructorDollar5): + (JSC::regExpConstructorDollar6): + (JSC::regExpConstructorDollar7): + (JSC::regExpConstructorDollar8): + (JSC::regExpConstructorDollar9): + (JSC::regExpConstructorInput): + (JSC::regExpConstructorMultiline): + (JSC::regExpConstructorLastMatch): + (JSC::regExpConstructorLastParen): + (JSC::regExpConstructorLeftContext): + (JSC::regExpConstructorRightContext): + (JSC::RegExpConstructor::put): + (JSC::setRegExpConstructorInput): + (JSC::setRegExpConstructorMultiline): + (JSC::constructRegExp): + (JSC::callRegExpConstructor): + * runtime/RegExpConstructor.h: + (JSC::RegExpConstructor::createStructure): + (JSC::asRegExpConstructor): + * runtime/RegExpMatchesArray.h: + (JSC::RegExpMatchesArray::put): + * runtime/RegExpObject.cpp: + (JSC::regExpObjectGlobal): + (JSC::regExpObjectIgnoreCase): + (JSC::regExpObjectMultiline): + (JSC::regExpObjectSource): + (JSC::regExpObjectLastIndex): + (JSC::RegExpObject::put): + (JSC::setRegExpObjectLastIndex): + (JSC::RegExpObject::test): + (JSC::RegExpObject::exec): + (JSC::callRegExpObject): + * runtime/RegExpObject.h: + (JSC::RegExpObject::createStructure): + (JSC::asRegExpObject): + * runtime/RegExpPrototype.cpp: + (JSC::regExpProtoFuncTest): + (JSC::regExpProtoFuncExec): + (JSC::regExpProtoFuncCompile): + (JSC::regExpProtoFuncToString): + * runtime/StringConstructor.cpp: + (JSC::stringFromCharCodeSlowCase): + (JSC::stringFromCharCode): + (JSC::callStringConstructor): + * runtime/StringObject.cpp: + (JSC::StringObject::put): + * runtime/StringObject.h: + (JSC::StringObject::createStructure): + (JSC::asStringObject): + * runtime/StringObjectThatMasqueradesAsUndefined.h: + (JSC::StringObjectThatMasqueradesAsUndefined::createStructure): + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): + (JSC::stringProtoFuncToString): + (JSC::stringProtoFuncCharAt): + (JSC::stringProtoFuncCharCodeAt): + (JSC::stringProtoFuncConcat): + (JSC::stringProtoFuncIndexOf): + (JSC::stringProtoFuncLastIndexOf): + (JSC::stringProtoFuncMatch): + (JSC::stringProtoFuncSearch): + (JSC::stringProtoFuncSlice): + (JSC::stringProtoFuncSplit): + (JSC::stringProtoFuncSubstr): + (JSC::stringProtoFuncSubstring): + (JSC::stringProtoFuncToLowerCase): + (JSC::stringProtoFuncToUpperCase): + (JSC::stringProtoFuncLocaleCompare): + (JSC::stringProtoFuncBig): + (JSC::stringProtoFuncSmall): + (JSC::stringProtoFuncBlink): + (JSC::stringProtoFuncBold): + (JSC::stringProtoFuncFixed): + (JSC::stringProtoFuncItalics): + (JSC::stringProtoFuncStrike): + (JSC::stringProtoFuncSub): + (JSC::stringProtoFuncSup): + (JSC::stringProtoFuncFontcolor): + (JSC::stringProtoFuncFontsize): + (JSC::stringProtoFuncAnchor): + (JSC::stringProtoFuncLink): + * runtime/Structure.cpp: + (JSC::Structure::Structure): + (JSC::Structure::changePrototypeTransition): + * runtime/Structure.h: + (JSC::Structure::create): + (JSC::Structure::setPrototypeWithoutTransition): + (JSC::Structure::storedPrototype): + +2009-05-01 Geoffrey Garen + + Reviewed by Sam "That doesn't look like what I thought it looks like" Weinig. + + Beefed up the JSValuePtr class and removed some non-JSValuePtr dependencies + on JSImmediate, in prepapration for making JSImmediate an implementation + detail of JSValuePtr. + + SunSpider reports no change. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_mod): + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncParseInt): Updated for interface changes. + + * runtime/JSImmediate.h: + (JSC::JSValuePtr::JSValuePtr): + * runtime/JSValue.h: + (JSC::JSValuePtr::): + (JSC::jsImpossibleValue): + (JSC::jsNull): + (JSC::jsUndefined): + (JSC::jsBoolean): + (JSC::JSValuePtr::encode): + (JSC::JSValuePtr::decode): + (JSC::JSValuePtr::JSValuePtr): + (JSC::JSValuePtr::operator bool): + (JSC::JSValuePtr::operator==): + (JSC::JSValuePtr::operator!=): + (JSC::JSValuePtr::isUndefined): + (JSC::JSValuePtr::isNull): Changed jsImpossibleValue(), jsNull(), + jsUndefined(), and jsBoolean() to operate in terms of JSValuePtr instead + of JSImmediate. + + * wtf/StdLibExtras.h: + (WTF::bitwise_cast): Fixed up for clarity. + +2009-04-30 Gavin Barraclough + + Reviewed by Geoff Garen. + + Bug fix for rdar:/6845379. If a case-insensitive regex contains + a character class containing a range with an upper bound of \uFFFF + the parser will infinite-loop whist adding other-case characters + for characters in the range that do have another case. + + * yarr/RegexCompiler.cpp: + (JSC::Yarr::CharacterClassConstructor::putRange): + +2009-04-30 Gavin Barraclough + + Reviewed by Oliver Hunt. + + OPCODE_SAMPLING without CODEBLOCK_SAMPLING is currently broken, + since SamplingTool::Sample::isNull() checks the m_codeBlock + member (which is always null without CODEBLOCK_SAMPLING). + + Restructure the checks so make this work again. + + * bytecode/SamplingTool.cpp: + (JSC::SamplingTool::doRun): + * bytecode/SamplingTool.h: + (JSC::SamplingTool::Sample::isNull): + +2009-04-30 Maciej Stachowiak + + Reviewed by Gavin Barraclough. + + - Concatenate final three strings in simple replace case at one go + + ~0.2% SunSpider speedup + + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): Use new replaceRange helper instead of + taking substrings and concatenating three strings. + * runtime/UString.cpp: + (JSC::UString::replaceRange): New helper function. + * runtime/UString.h: + +2009-04-30 Geoffrey Garen + + Rubber Stamped by Gavin Barraclough. + + Changed JSValueEncodedAsPtr* => EncodedJSValuePtr to support a non-pointer + encoding for JSValuePtrs. + + * API/APICast.h: + (toJS): + * bytecompiler/BytecodeGenerator.h: + (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue): + (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue): + * interpreter/Register.h: + (JSC::Register::): + * jit/JIT.cpp: + (JSC::): + * jit/JIT.h: + * jit/JITCode.h: + (JSC::): + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_add): + (JSC::JITStubs::cti_op_pre_inc): + (JSC::JITStubs::cti_op_get_by_id_generic): + (JSC::JITStubs::cti_op_get_by_id): + (JSC::JITStubs::cti_op_get_by_id_second): + (JSC::JITStubs::cti_op_get_by_id_self_fail): + (JSC::JITStubs::cti_op_get_by_id_proto_list): + (JSC::JITStubs::cti_op_get_by_id_proto_list_full): + (JSC::JITStubs::cti_op_get_by_id_proto_fail): + (JSC::JITStubs::cti_op_get_by_id_array_fail): + (JSC::JITStubs::cti_op_get_by_id_string_fail): + (JSC::JITStubs::cti_op_instanceof): + (JSC::JITStubs::cti_op_del_by_id): + (JSC::JITStubs::cti_op_mul): + (JSC::JITStubs::cti_op_call_NotJSFunction): + (JSC::JITStubs::cti_op_resolve): + (JSC::JITStubs::cti_op_construct_NotJSConstruct): + (JSC::JITStubs::cti_op_get_by_val): + (JSC::JITStubs::cti_op_get_by_val_string): + (JSC::JITStubs::cti_op_get_by_val_byte_array): + (JSC::JITStubs::cti_op_sub): + (JSC::JITStubs::cti_op_lesseq): + (JSC::JITStubs::cti_op_negate): + (JSC::JITStubs::cti_op_resolve_base): + (JSC::JITStubs::cti_op_resolve_skip): + (JSC::JITStubs::cti_op_resolve_global): + (JSC::JITStubs::cti_op_div): + (JSC::JITStubs::cti_op_pre_dec): + (JSC::JITStubs::cti_op_not): + (JSC::JITStubs::cti_op_eq): + (JSC::JITStubs::cti_op_lshift): + (JSC::JITStubs::cti_op_bitand): + (JSC::JITStubs::cti_op_rshift): + (JSC::JITStubs::cti_op_bitnot): + (JSC::JITStubs::cti_op_mod): + (JSC::JITStubs::cti_op_less): + (JSC::JITStubs::cti_op_neq): + (JSC::JITStubs::cti_op_urshift): + (JSC::JITStubs::cti_op_bitxor): + (JSC::JITStubs::cti_op_bitor): + (JSC::JITStubs::cti_op_call_eval): + (JSC::JITStubs::cti_op_throw): + (JSC::JITStubs::cti_op_next_pname): + (JSC::JITStubs::cti_op_typeof): + (JSC::JITStubs::cti_op_is_undefined): + (JSC::JITStubs::cti_op_is_boolean): + (JSC::JITStubs::cti_op_is_number): + (JSC::JITStubs::cti_op_is_string): + (JSC::JITStubs::cti_op_is_object): + (JSC::JITStubs::cti_op_is_function): + (JSC::JITStubs::cti_op_stricteq): + (JSC::JITStubs::cti_op_nstricteq): + (JSC::JITStubs::cti_op_to_jsnumber): + (JSC::JITStubs::cti_op_in): + (JSC::JITStubs::cti_op_del_by_val): + (JSC::JITStubs::cti_vm_throw): + * jit/JITStubs.h: + * runtime/JSValue.h: + (JSC::JSValuePtr::encode): + (JSC::JSValuePtr::decode): + +2009-04-30 Gavin Barraclough + + Reviewed by Oliver "Abandon Ship!" Hunt. + + Fix a leak in Yarr. + + All Disjunctions should be recorded in RegexPattern::m_disjunctions, + so that they can be freed at the end of compilation - copyDisjunction + is failing to do so. + + * yarr/RegexCompiler.cpp: + (JSC::Yarr::RegexPatternConstructor::copyDisjunction): + +2009-04-30 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Add function to CallFrame for dumping the current JS caller + + Added debug only method CallFrame::dumpCaller() that provide the call location + of the deepest currently executing JS function. + + * interpreter/CallFrame.cpp: + (JSC::CallFrame::dumpCaller): + * interpreter/CallFrame.h: + +2009-04-30 Maciej Stachowiak + + Reviewed by Geoff Garen. + + - make BaseStrings have themselves as a base, instead of nothing, to remove common branches + + ~0.7% SunSpider speedup + + * runtime/UString.h: + (JSC::UString::Rep::Rep): For the constructor without a base, set self as base instead of null. + (JSC::UString::Rep::baseString): Just read m_baseString - no more branching. + +2009-04-30 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Two quick improvements to SamplingFlags mechanism. + + SamplingFlags::ScopedFlag class to provide support for automagically + clearing a flag as it goes out of scope, and add a little more detail + to the output generated by the tool. + + * bytecode/SamplingTool.cpp: + (JSC::SamplingFlags::stop): + * bytecode/SamplingTool.h: + (JSC::SamplingFlags::ScopedFlag::ScopedFlag): + (JSC::SamplingFlags::ScopedFlag::~ScopedFlag): + +2009-04-30 Adam Roben + + Restore build event steps that were truncated in r43082 + + Rubber-stamped by Steve Falkenburg. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: + * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: + * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: + Re-copied the command lines for the build events from the pre-r43082 + .vcproj files. + + * JavaScriptCore.vcproj/jsc/jsc.vcproj: Removed an unnecessary + attribute. + +2009-04-30 Adam Roben + + Move settings from .vcproj files to .vsprops files within the + JavaScriptCore directory + + Moving the settings to a .vsprops file means that we will only have to + change a single setting to affect all configurations, instead of one + setting per configuration. + + Reviewed by Steve Falkenburg. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.vcproj/jsc/jsc.vcproj: + * JavaScriptCore.vcproj/testapi/testapi.vcproj: + Moved settings from these files to the new .vsprops files. Note that + testapi.vcproj had a lot of overrides of default settings that were + the same as the defaults, which I've removed. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: Added. + * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops: Added. + * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Added. + * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: Added. + +2009-04-30 Dimitri Glazkov + + Reviewed by Timothy Hatcher. + + https://bugs.webkit.org/show_bug.cgi?id=25470 + Extend the cover of ENABLE_JAVASCRIPT_DEBUGGER to profiler. + + * Configurations/FeatureDefines.xcconfig: Added ENABLE_JAVASCRIPT_DEBUGGER define. + +2009-04-30 Maciej Stachowiak + + Reviewed by Alexey Proskuryakov. + + - speed up string concatenation by reorganizing some simple cases + + 0.7% SunSpider speedup + + * runtime/UString.cpp: + (JSC::concatenate): Put fast case for appending a single character + before the empty string special cases; streamline code a bit to + delay computing values that are not needed in the fast path. + +2009-04-30 Gavin Barraclough + + Reviewed by Maciej Stachowiak. + + Add SamplingFlags mechanism. + + This mechanism allows fine-grained JSC and JavaScript program aware + performance measurement. The mechanism provides a set of 32 flags, + numbered #1..#32. Flag #16 is initially set, and all other flags + are cleared. Flags may be set and cleared from within + + Enable by setting ENABLE_SAMPLING_FLAGS to 1 in wtf/Platform.h. + Disabled by default, no performance impact. Flags may be modified + by calling SamplingFlags::setFlag() and SamplingFlags::clearFlag() + from within JSC implementation, or by calling setSamplingFlag() and + clearSamplingFlag() from JavaScript. + + The flags are sampled with a frequency of 10000Hz, and the highest + set flag in recorded, allowing multiple events to be measured (with + the highest flag number representing the highest priority). + + Disabled by default; no performance impact. + + * JavaScriptCore.exp: + * bytecode/SamplingTool.cpp: + (JSC::SamplingFlags::sample): + (JSC::SamplingFlags::start): + (JSC::SamplingFlags::stop): + (JSC::SamplingThread::threadStartFunc): + (JSC::SamplingThread::start): + (JSC::SamplingThread::stop): + (JSC::ScopeSampleRecord::sample): + (JSC::SamplingTool::doRun): + (JSC::SamplingTool::sample): + (JSC::SamplingTool::start): + (JSC::SamplingTool::stop): + * bytecode/SamplingTool.h: + (JSC::SamplingFlags::setFlag): + (JSC::SamplingFlags::clearFlag): + (JSC::SamplingTool::SamplingTool): + * jsc.cpp: + (GlobalObject::GlobalObject): + (functionSetSamplingFlag): + (functionClearSamplingFlag): + (runWithScripts): + * wtf/Platform.h: + +2009-04-29 Sam Weinig + + Another attempt to fix the windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-04-29 Sam Weinig + + Try and fix the windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-04-29 Gavin Barraclough + + Reviewed by Oliver "Peg-Leg" Hunt. + + Coallesce input checking and reduce futzing with the index position + between alternatives and iterations of the main loop of a regex, + when run in YARR. + + Consider the following regex: /foo|bar/ + + Prior to this patch, this will be implemented something like this pseudo-code description: + + loop: + check_for_available_input(3) // this increments the index by 3, for the first alterantive. + if (available) { test "foo" } + decrement_index(3) + check_for_available_input(3) // this increments the index by 3, for the second alterantive. + if (available) { test "bar" } + decrement_index(3) + check_for_available_input(1) // can we loop again? + if (available) { goto loop } + + With these changes it will look more like this: + + check_for_available_input(3) // this increments the index by 3, for the first alterantive. + if (!available) { goto fail } + loop: + test "foo" + test "bar" + check_for_available_input(1) // can we loop again? + if (available) { goto loop } + fail: + + + This gives about a 5% gain on v8-regex, no change on Sunspider. + + * yarr/RegexJIT.cpp: + (JSC::Yarr::RegexGenerator::TermGenerationState::linkAlternativeBacktracksTo): + (JSC::Yarr::RegexGenerator::generateDisjunction): + +2009-04-29 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Clean up ArgList to be a trivial type + + Separate out old ArgList logic to handle buffering and marking arguments + into a distinct MarkedArgumentBuffer type. ArgList becomes a trivial + struct of a pointer and length. + + * API/JSObjectRef.cpp: + (JSObjectMakeFunction): + (JSObjectMakeArray): + (JSObjectMakeDate): + (JSObjectMakeError): + (JSObjectMakeRegExp): + (JSObjectCallAsFunction): + (JSObjectCallAsConstructor): + * JavaScriptCore.exp: + * interpreter/CallFrame.h: + (JSC::ExecState::emptyList): + * runtime/ArgList.cpp: + (JSC::ArgList::getSlice): + (JSC::MarkedArgumentBuffer::markLists): + (JSC::MarkedArgumentBuffer::slowAppend): + * runtime/ArgList.h: + (JSC::MarkedArgumentBuffer::MarkedArgumentBuffer): + (JSC::MarkedArgumentBuffer::~MarkedArgumentBuffer): + (JSC::ArgList::ArgList): + (JSC::ArgList::at): + (JSC::ArgList::isEmpty): + (JSC::ArgList::size): + (JSC::ArgList::begin): + (JSC::ArgList::end): + * runtime/Arguments.cpp: + (JSC::Arguments::fillArgList): + * runtime/Arguments.h: + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncConcat): + (JSC::arrayProtoFuncPush): + (JSC::arrayProtoFuncSort): + (JSC::arrayProtoFuncFilter): + (JSC::arrayProtoFuncMap): + (JSC::arrayProtoFuncEvery): + (JSC::arrayProtoFuncForEach): + (JSC::arrayProtoFuncSome): + (JSC::arrayProtoFuncReduce): + (JSC::arrayProtoFuncReduceRight): + * runtime/Collector.cpp: + (JSC::Heap::collect): + * runtime/Collector.h: + (JSC::Heap::markListSet): + * runtime/CommonIdentifiers.h: + * runtime/Error.cpp: + (JSC::Error::create): + * runtime/FunctionPrototype.cpp: + (JSC::functionProtoFuncApply): + * runtime/JSArray.cpp: + (JSC::JSArray::JSArray): + (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key): + (JSC::JSArray::fillArgList): + (JSC::constructArray): + * runtime/JSArray.h: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSGlobalData.h: + * runtime/JSObject.cpp: + (JSC::JSObject::put): + * runtime/StringConstructor.cpp: + (JSC::stringFromCharCodeSlowCase): + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): + (JSC::stringProtoFuncConcat): + (JSC::stringProtoFuncMatch): + +2009-04-29 Laszlo Gombos + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=25334 + + Fix Qt build when ENABLE_JIT is explicitly set to 1 + to overrule defaults. + + * JavaScriptCore.pri: + +2009-04-29 Oliver Hunt + + Reviewed by Steve Falkenburg. + + Crash in profiler due to incorrect assuming displayName would be a string. + + Fixed by adding a type guard. + + * runtime/InternalFunction.cpp: + (JSC::InternalFunction::displayName): + +2009-04-28 Geoffrey Garen + + Rubber stamped by Beth Dakin. + + Removed scaffolding supporting dynamically converting between 32bit and + 64bit value representations. + + * API/JSCallbackConstructor.cpp: + (JSC::constructJSCallback): + * API/JSCallbackFunction.cpp: + (JSC::JSCallbackFunction::call): + * API/JSCallbackObjectFunctions.h: + (JSC::::construct): + (JSC::::call): + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::getConstant): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitEqualityOp): + * interpreter/CallFrame.cpp: + (JSC::CallFrame::thisValue): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::callEval): + (JSC::Interpreter::throwException): + (JSC::Interpreter::createExceptionScope): + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::retrieveArguments): + * interpreter/Register.h: + (JSC::Register::): + (JSC::Register::Register): + (JSC::Register::jsValue): + (JSC::Register::marked): + (JSC::Register::mark): + (JSC::Register::i): + (JSC::Register::activation): + (JSC::Register::arguments): + (JSC::Register::callFrame): + (JSC::Register::codeBlock): + (JSC::Register::function): + (JSC::Register::propertyNameIterator): + (JSC::Register::scopeChain): + (JSC::Register::vPC): + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_call_NotJSFunction): + (JSC::JITStubs::cti_op_load_varargs): + (JSC::JITStubs::cti_op_call_eval): + * jsc.cpp: + (functionPrint): + (functionDebug): + (functionRun): + (functionLoad): + * runtime/ArgList.h: + (JSC::ArgList::at): + * runtime/Arguments.cpp: + (JSC::Arguments::copyToRegisters): + (JSC::Arguments::fillArgList): + (JSC::Arguments::getOwnPropertySlot): + * runtime/ArrayConstructor.cpp: + (JSC::constructArrayWithSizeQuirk): + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncJoin): + (JSC::arrayProtoFuncConcat): + (JSC::arrayProtoFuncPush): + (JSC::arrayProtoFuncSlice): + (JSC::arrayProtoFuncSort): + (JSC::arrayProtoFuncSplice): + (JSC::arrayProtoFuncUnShift): + (JSC::arrayProtoFuncFilter): + (JSC::arrayProtoFuncMap): + (JSC::arrayProtoFuncEvery): + (JSC::arrayProtoFuncForEach): + (JSC::arrayProtoFuncSome): + (JSC::arrayProtoFuncReduce): + (JSC::arrayProtoFuncReduceRight): + (JSC::arrayProtoFuncIndexOf): + (JSC::arrayProtoFuncLastIndexOf): + * runtime/BooleanConstructor.cpp: + (JSC::constructBoolean): + (JSC::callBooleanConstructor): + * runtime/DateConstructor.cpp: + (JSC::constructDate): + (JSC::dateParse): + (JSC::dateUTC): + * runtime/DatePrototype.cpp: + (JSC::formatLocaleDate): + (JSC::fillStructuresUsingTimeArgs): + (JSC::fillStructuresUsingDateArgs): + (JSC::dateProtoFuncSetTime): + (JSC::dateProtoFuncSetYear): + * runtime/ErrorConstructor.cpp: + (JSC::constructError): + * runtime/FunctionConstructor.cpp: + (JSC::constructFunction): + * runtime/FunctionPrototype.cpp: + (JSC::functionProtoFuncApply): + (JSC::functionProtoFuncCall): + * runtime/JSArray.cpp: + (JSC::JSArray::JSArray): + (JSC::constructArray): + * runtime/JSArray.h: + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::encode): + (JSC::decode): + (JSC::globalFuncEval): + (JSC::globalFuncParseInt): + (JSC::globalFuncParseFloat): + (JSC::globalFuncIsNaN): + (JSC::globalFuncIsFinite): + (JSC::globalFuncEscape): + (JSC::globalFuncUnescape): + (JSC::globalFuncJSCPrint): + * runtime/MathObject.cpp: + (JSC::mathProtoFuncAbs): + (JSC::mathProtoFuncACos): + (JSC::mathProtoFuncASin): + (JSC::mathProtoFuncATan): + (JSC::mathProtoFuncATan2): + (JSC::mathProtoFuncCeil): + (JSC::mathProtoFuncCos): + (JSC::mathProtoFuncExp): + (JSC::mathProtoFuncFloor): + (JSC::mathProtoFuncLog): + (JSC::mathProtoFuncMax): + (JSC::mathProtoFuncMin): + (JSC::mathProtoFuncPow): + (JSC::mathProtoFuncRound): + (JSC::mathProtoFuncSin): + (JSC::mathProtoFuncSqrt): + (JSC::mathProtoFuncTan): + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::construct): + * runtime/NumberConstructor.cpp: + (JSC::constructWithNumberConstructor): + (JSC::callNumberConstructor): + * runtime/NumberPrototype.cpp: + (JSC::numberProtoFuncToString): + (JSC::numberProtoFuncToFixed): + (JSC::numberProtoFuncToExponential): + (JSC::numberProtoFuncToPrecision): + * runtime/ObjectConstructor.cpp: + (JSC::constructObject): + * runtime/ObjectPrototype.cpp: + (JSC::objectProtoFuncHasOwnProperty): + (JSC::objectProtoFuncIsPrototypeOf): + (JSC::objectProtoFuncDefineGetter): + (JSC::objectProtoFuncDefineSetter): + (JSC::objectProtoFuncLookupGetter): + (JSC::objectProtoFuncLookupSetter): + (JSC::objectProtoFuncPropertyIsEnumerable): + * runtime/PropertySlot.h: + (JSC::PropertySlot::getValue): + * runtime/RegExpConstructor.cpp: + (JSC::constructRegExp): + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::match): + * runtime/RegExpPrototype.cpp: + (JSC::regExpProtoFuncCompile): + * runtime/StringConstructor.cpp: + (JSC::stringFromCharCodeSlowCase): + (JSC::stringFromCharCode): + (JSC::constructWithStringConstructor): + (JSC::callStringConstructor): + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): + (JSC::stringProtoFuncCharAt): + (JSC::stringProtoFuncCharCodeAt): + (JSC::stringProtoFuncConcat): + (JSC::stringProtoFuncIndexOf): + (JSC::stringProtoFuncLastIndexOf): + (JSC::stringProtoFuncMatch): + (JSC::stringProtoFuncSearch): + (JSC::stringProtoFuncSlice): + (JSC::stringProtoFuncSplit): + (JSC::stringProtoFuncSubstr): + (JSC::stringProtoFuncSubstring): + (JSC::stringProtoFuncLocaleCompare): + (JSC::stringProtoFuncFontcolor): + (JSC::stringProtoFuncFontsize): + (JSC::stringProtoFuncAnchor): + (JSC::stringProtoFuncLink): + +2009-04-28 David Kilzer + + A little more hardening for UString + + Reviewed by Maciej Stachowiak. + + Revised fix for in r42644. + + * runtime/UString.cpp: + (JSC::newCapacityWithOverflowCheck): Added. + (JSC::concatenate): Used newCapacityWithOverflowCheck(). + (JSC::UString::append): Ditto. + +2009-04-28 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Bring back r42969, this time with correct codegen + + Add logic to the codegen for right shift to avoid jumping to a helper function + when shifting a small floating point value. + + * jit/JITArithmetic.cpp: + (isSSE2Present): + (JSC::JIT::compileFastArith_op_rshift): + (JSC::JIT::compileFastArithSlow_op_rshift): + +2009-04-28 Kevin Ollivier + + wxMSW build fix. Switch JSCore build back to static. + + * API/JSBase.h: + * config.h: + * jscore.bkl: + +2009-04-28 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + Roll out r42969, due to hangs in build bot. + + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_rshift): + (JSC::JIT::compileFastArithSlow_op_rshift): + (JSC::isSSE2Present): + +2009-04-28 Xan Lopez + + Unreviewed: fix distcheck build, add (even more) missing files to list. + + * GNUmakefile.am: + +2009-04-28 Oliver Hunt + + Reviewed by Geoff Garen. + + Improve performance of string indexing + + Add a cti_get_by_val_string function to specialise indexing into a string object. + This gives us a slight performance win on a number of string tests. + + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_get_by_val): + (JSC::JITStubs::cti_op_get_by_val_string): + * jit/JITStubs.h: + +2009-04-28 Oliver Hunt + + Reviewed by Geoff Garen. + + Improve performance of right shifts of large or otherwise floating point values. + + Add logic to the codegen for right shift to avoid jumping to a helper function + when shifting a small floating point value. + + * jit/JITArithmetic.cpp: + (isSSE2Present): Moved to the head of file. + (JSC::JIT::compileFastArith_op_rshift): + (JSC::JIT::compileFastArithSlow_op_rshift): + +2009-04-28 Xan Lopez + + Unreviewed: fix distcheck build, add (more) missing files to list. + + * GNUmakefile.am: + +2009-04-28 Xan Lopez + + Unreviewed: fix distcheck build, add missing header to file list. + + * GNUmakefile.am: + +2009-04-28 Gavin Barraclough + + Rubber stamped by Maciej "Henry Morgan" Stachowiak. + + Enable YARR. + (Again.) + + * wtf/Platform.h: + +2009-04-27 Gavin Barraclough + + Reviewed by Maciej Stachowiak. + + Tweak a loop condition to keep GCC happy, + some GCCs seem to be having issues with this. :-/ + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::breakTarget): + * wtf/Platform.h: + +2009-04-27 Adam Roben + + Windows Debug build fix + + Not sure why the buildbots weren't affected by this problem. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Let VS + re-order the file list, and added JavaScriptCore[_debug].def to the + project. This was not necessary for the fix, but made making the fix + easier. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + Removed a function that no longer exists. + +2009-04-26 Gavin Barraclough + + Reviewed by Weinig Sam. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=25416 + "Cached prototype accesses unsafely hoist property storage load above structure checks." + + Do not hoist the load of the pointer to the property storage array. + + No performance impact. + + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdProtoList): + +2009-04-26 Gavin Barraclough + + Reviewed by Geoffrey "Gaffe or energy?" Garen. + + Randomize address requested by ExecutableAllocatorFixedVMPool. + + * jit/ExecutableAllocatorFixedVMPool.cpp: + (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): + +2009-04-26 Sam Weinig + + Reviewed by Eric Seidel. + + Remove scons-based build system. + + * JavaScriptCore.scons: Removed. + +2009-04-25 Oliver Hunt + + Reviewed by NOBODY (Buildfix). + + Make HAVE_MADV_FREE darwin only for now + + * wtf/Platform.h: + +2009-04-25 Jan Michael Alonzo + + Reviewed by Oliver Hunt. + + Gtk build fix - check if we have MADV_FREE before using it. + + * interpreter/RegisterFile.cpp: + (JSC::RegisterFile::releaseExcessCapacity): + * wtf/Platform.h: + +2009-04-24 Kevin Ollivier + + wx build fix. Switching JSCore from a static lib to a dynamic lib + to match the Apple build and fix symbol exports. + + * jscore.bkl: + +2009-04-24 Laszlo Gombos + + Rubber-stamped by Mark Rowe. + + https://bugs.webkit.org/show_bug.cgi?id=25337 + Move ThreadingQt.cpp under the qt directory. + + * JavaScriptCore.pri: + * wtf/ThreadingQt.cpp: Removed. + * wtf/qt/ThreadingQt.cpp: Copied from JavaScriptCore/wtf/ThreadingQt.cpp. + +2009-04-24 Laszlo Gombos + + Rubber-stamped by Mark Rowe. + + https://bugs.webkit.org/show_bug.cgi?id=25338 + Move ThreadingGtk.cpp under the gtk directory. + + * GNUmakefile.am: + * wtf/ThreadingGtk.cpp: Removed. + * wtf/gtk/ThreadingGtk.cpp: Copied from JavaScriptCore/wtf/ThreadingGtk.cpp. + +2009-04-24 Gavin Barraclough + + Reviewed by Sam "Wesley" Weinig. + + Improve performance to YARR interpreter. + (From about 3x slower than PCRE on regex-dna to about 30% slower). + + * yarr/RegexCompiler.cpp: + (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets): + * yarr/RegexInterpreter.cpp: + (JSC::Yarr::Interpreter::checkCharacter): + (JSC::Yarr::Interpreter::checkCasedCharacter): + (JSC::Yarr::Interpreter::backtrackPatternCharacter): + (JSC::Yarr::Interpreter::backtrackPatternCasedCharacter): + (JSC::Yarr::Interpreter::matchParentheticalAssertionBegin): + (JSC::Yarr::Interpreter::matchParentheticalAssertionEnd): + (JSC::Yarr::Interpreter::backtrackParentheticalAssertionBegin): + (JSC::Yarr::Interpreter::backtrackParentheticalAssertionEnd): + (JSC::Yarr::Interpreter::matchDisjunction): + (JSC::Yarr::Interpreter::interpret): + (JSC::Yarr::ByteCompiler::atomPatternCharacter): + (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternBegin): + (JSC::Yarr::ByteCompiler::atomParentheticalAssertionBegin): + (JSC::Yarr::ByteCompiler::closeAlternative): + (JSC::Yarr::ByteCompiler::closeBodyAlternative): + (JSC::Yarr::ByteCompiler::atomParenthesesEnd): + (JSC::Yarr::ByteCompiler::regexBegin): + (JSC::Yarr::ByteCompiler::regexEnd): + (JSC::Yarr::ByteCompiler::alterantiveBodyDisjunction): + (JSC::Yarr::ByteCompiler::alterantiveDisjunction): + (JSC::Yarr::ByteCompiler::emitDisjunction): + * yarr/RegexInterpreter.h: + (JSC::Yarr::ByteTerm::): + (JSC::Yarr::ByteTerm::ByteTerm): + (JSC::Yarr::ByteTerm::BodyAlternativeBegin): + (JSC::Yarr::ByteTerm::BodyAlternativeDisjunction): + (JSC::Yarr::ByteTerm::BodyAlternativeEnd): + (JSC::Yarr::ByteTerm::AlternativeBegin): + (JSC::Yarr::ByteTerm::AlternativeDisjunction): + (JSC::Yarr::ByteTerm::AlternativeEnd): + (JSC::Yarr::ByteTerm::SubpatternBegin): + (JSC::Yarr::ByteTerm::SubpatternEnd): + * yarr/RegexJIT.cpp: + (JSC::Yarr::RegexGenerator::generateParentheticalAssertion): + * yarr/RegexPattern.h: + +2009-04-24 Rob Raguet-Schofield + + Rubber-stamped by Mark Rowe. + + * wtf/CurrentTime.h: Fix a typo in a comment. + +2009-04-24 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + Add reinterpret_cast + + * interpreter/RegisterFile.cpp: + (JSC::RegisterFile::releaseExcessCapacity): + +2009-04-23 Oliver Hunt + + Reviewed by Geoff Garen. + + JavaScript register file should remap to release physical pages accumulated during deep recursion + + We now track the maximum extent of the RegisterFile, and when we reach the final + return from JS (so the stack portion of the registerfile becomes empty) we see + if that extent is greater than maxExcessCapacity. If it is we use madvise or + VirtualFree to release the physical pages that were backing the excess. + + * interpreter/RegisterFile.cpp: + (JSC::RegisterFile::releaseExcessCapacity): + * interpreter/RegisterFile.h: + (JSC::RegisterFile::RegisterFile): + (JSC::RegisterFile::shrink): + (JSC::RegisterFile::grow): + +2009-04-23 Mark Rowe + + With great sadness and a heavy heart I switch us back from YARR to WREC in + order to restore greenness to the world once more. + + * wtf/Platform.h: + +2009-04-23 Mark Rowe + + More Windows build fixage. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-04-23 Mark Rowe + + Attempt to fix the Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Remove a symbol that no longer exists. + +2009-04-23 Francisco Tolmasky + + BUG 24604: WebKit profiler reports incorrect total times + + + Reviewed by Timothy Hatcher and Kevin McCullough. + + * JavaScriptCore.exp: + * JavaScriptCore.xcodeproj/project.pbxproj: + * profiler/CallIdentifier.h: + (JSC::CallIdentifier::Hash::hash): + (JSC::CallIdentifier::Hash::equal): + (JSC::CallIdentifier::hash): + (WTF::): + * profiler/HeavyProfile.cpp: Removed. + * profiler/HeavyProfile.h: Removed. + * profiler/Profile.cpp: No more need for TreeProfile/HeavyProfile + (JSC::Profile::create): + * profiler/Profile.h: + * profiler/ProfileNode.cpp: + * profiler/ProfileNode.h: + * profiler/TreeProfile.cpp: Removed. + * profiler/TreeProfile.h: Removed. + +2009-04-23 Gavin Barraclough + + Not Reviewed. + + Speculative Windows build fix II. + + * yarr/RegexInterpreter.cpp: + +2009-04-23 Gavin Barraclough + + Not Reviewed. + + Speculative Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * runtime/RegExp.cpp: + +2009-04-23 Gavin Barraclough + + Rubber stamped by salty sea dogs Sam & Geoff. + + Enable YARR_JIT by default (where supported), replacing WREC. + + * wtf/Platform.h: + +2009-04-23 Gavin Barraclough + + Reviewed by Geoff "Dread Pirate Roberts" Garen. + + Various small fixes to YARR JIT, in preparation for enabling it by default. + + * Correctly index into the callframe when storing restart addresses for + nested alternatives. + * Allow backtracking back into matched alternatives of parentheses. + * Fix callframe offset calculation for parenthetical assertions. + * When a set of parenthese are quantified with a fixed and variable portion, + and the variable portion is quantified once, this should not reset the + pattern match on failure to match (the last match from the firxed portion + should be preserved). + * Up the pattern size limit to match PCRE's new limit. + * Unlclosed parentheses should be reported with the message "missing )". + + * wtf/Platform.h: + * yarr/RegexCompiler.cpp: + (JSC::Yarr::RegexPatternConstructor::quantifyAtom): + (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets): + * yarr/RegexInterpreter.cpp: + (JSC::Yarr::Interpreter::matchParentheses): + (JSC::Yarr::Interpreter::backtrackParentheses): + (JSC::Yarr::ByteCompiler::emitDisjunction): + * yarr/RegexJIT.cpp: + (JSC::Yarr::RegexGenerator::loadFromFrameAndJump): + (JSC::Yarr::RegexGenerator::generateParenthesesDisjunction): + (JSC::Yarr::RegexGenerator::generateParentheticalAssertion): + (JSC::Yarr::RegexGenerator::generateTerm): + (JSC::Yarr::executeRegex): + * yarr/RegexParser.h: + (JSC::Yarr::Parser::): + (JSC::Yarr::Parser::parseTokens): + (JSC::Yarr::Parser::parse): + * yarr/RegexPattern.h: + (JSC::Yarr::PatternTerm::): + (JSC::Yarr::PatternTerm::PatternTerm): + +2009-04-22 Mark Rowe + + Rubber-stamped by Gavin Barraclough. + + Add the m_ prefix on FixedVMPoolAllocator's member variables, and fix typos in a few comments. + + * jit/ExecutableAllocatorFixedVMPool.cpp: + (JSC::FixedVMPoolAllocator::addToFreeList): + (JSC::FixedVMPoolAllocator::coalesceFreeSpace): + (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): + (JSC::FixedVMPoolAllocator::alloc): + (JSC::FixedVMPoolAllocator::free): + (JSC::FixedVMPoolAllocator::isWithinVMPool): + +2009-04-22 Mark Rowe + + Rubber-stamped by Gavin Barraclough. + + Add some assertions to FixedVMPoolAllocator to guard against cases where we + attempt to free memory that didn't originate from the pool, or we attempt to + hand out a bogus address from alloc. + + * jit/ExecutableAllocatorFixedVMPool.cpp: + (JSC::FixedVMPoolAllocator::release): + (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): + (JSC::FixedVMPoolAllocator::alloc): + (JSC::FixedVMPoolAllocator::free): + (JSC::FixedVMPoolAllocator::isWithinVMPool): + +2009-04-22 Gavin Barraclough + + Rubber stamped by Sam "Blackbeard" Weinig. + + Although pirates do spell the word 'generate' as 'genertate', + webkit developers do not. Fixertate. + + * yarr/RegexJIT.cpp: + (JSC::Yarr::RegexGenerator::generateAssertionBOL): + (JSC::Yarr::RegexGenerator::generateAssertionEOL): + (JSC::Yarr::RegexGenerator::generateAssertionWordBoundary): + (JSC::Yarr::RegexGenerator::generatePatternCharacterSingle): + (JSC::Yarr::RegexGenerator::generatePatternCharacterPair): + (JSC::Yarr::RegexGenerator::generatePatternCharacterFixed): + (JSC::Yarr::RegexGenerator::generatePatternCharacterGreedy): + (JSC::Yarr::RegexGenerator::generatePatternCharacterNonGreedy): + (JSC::Yarr::RegexGenerator::generateCharacterClassSingle): + (JSC::Yarr::RegexGenerator::generateCharacterClassFixed): + (JSC::Yarr::RegexGenerator::generateCharacterClassGreedy): + (JSC::Yarr::RegexGenerator::generateCharacterClassNonGreedy): + (JSC::Yarr::RegexGenerator::generateTerm): + +2009-04-22 Gavin Barraclough + + Reviewed by Sam "Blackbeard" Weinig. + + Improvements to YARR JIT. This patch expands support in three key areas: + * Add (temporary) support for falling back to PCRE for expressions not supported. + * Add support for x86_64 and Windows. + * Add support for singly quantified parentheses (? and ??), alternatives within + parentheses, and parenthetical assertions. + + * runtime/RegExp.cpp: + (JSC::RegExp::match): + * yarr/RegexJIT.cpp: + (JSC::Yarr::RegexGenerator::storeToFrame): + (JSC::Yarr::RegexGenerator::storeToFrameWithPatch): + (JSC::Yarr::RegexGenerator::loadFromFrameAndJump): + (JSC::Yarr::RegexGenerator::AlternativeBacktrackRecord::AlternativeBacktrackRecord): + (JSC::Yarr::RegexGenerator::TermGenerationState::resetAlternative): + (JSC::Yarr::RegexGenerator::TermGenerationState::resetTerm): + (JSC::Yarr::RegexGenerator::TermGenerationState::jumpToBacktrack): + (JSC::Yarr::RegexGenerator::TermGenerationState::plantJumpToBacktrackIfExists): + (JSC::Yarr::RegexGenerator::TermGenerationState::addBacktrackJump): + (JSC::Yarr::RegexGenerator::TermGenerationState::linkAlternativeBacktracks): + (JSC::Yarr::RegexGenerator::TermGenerationState::propagateBacktrackingFrom): + (JSC::Yarr::RegexGenerator::genertateAssertionBOL): + (JSC::Yarr::RegexGenerator::genertateAssertionEOL): + (JSC::Yarr::RegexGenerator::matchAssertionWordchar): + (JSC::Yarr::RegexGenerator::genertateAssertionWordBoundary): + (JSC::Yarr::RegexGenerator::genertatePatternCharacterSingle): + (JSC::Yarr::RegexGenerator::genertatePatternCharacterPair): + (JSC::Yarr::RegexGenerator::genertatePatternCharacterFixed): + (JSC::Yarr::RegexGenerator::genertatePatternCharacterGreedy): + (JSC::Yarr::RegexGenerator::genertatePatternCharacterNonGreedy): + (JSC::Yarr::RegexGenerator::genertateCharacterClassSingle): + (JSC::Yarr::RegexGenerator::genertateCharacterClassFixed): + (JSC::Yarr::RegexGenerator::genertateCharacterClassGreedy): + (JSC::Yarr::RegexGenerator::genertateCharacterClassNonGreedy): + (JSC::Yarr::RegexGenerator::generateParenthesesDisjunction): + (JSC::Yarr::RegexGenerator::generateParenthesesSingle): + (JSC::Yarr::RegexGenerator::generateParentheticalAssertion): + (JSC::Yarr::RegexGenerator::generateTerm): + (JSC::Yarr::RegexGenerator::generateDisjunction): + (JSC::Yarr::RegexGenerator::generateEnter): + (JSC::Yarr::RegexGenerator::generateReturn): + (JSC::Yarr::RegexGenerator::RegexGenerator): + (JSC::Yarr::RegexGenerator::generate): + (JSC::Yarr::RegexGenerator::compile): + (JSC::Yarr::RegexGenerator::generationFailed): + (JSC::Yarr::jitCompileRegex): + (JSC::Yarr::executeRegex): + * yarr/RegexJIT.h: + (JSC::Yarr::RegexCodeBlock::RegexCodeBlock): + (JSC::Yarr::RegexCodeBlock::~RegexCodeBlock): + +2009-04-22 Sam Weinig + + Rubber-stamped by Darin Adler. + + Fix for + Turn off Geolocation by default + + * Configurations/FeatureDefines.xcconfig: + +2009-04-22 Oliver Hunt + + Reviewed by NOBODY (Buildfix). + + * interpreter/CachedCall.h: + +2009-04-21 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + * runtime/StringPrototype.cpp: + +2009-04-21 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + Improve String.replace performance slightly + + Apply our vm reentry caching logic to String.replace with global + regexes. + + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): + +2009-04-21 Geoffrey Garen + + Reviewed by Cameron Zwarich and Oliver Hunt. + + Re-Fixed REGRESSION: Stack overflow on PowerPC on + fast/workers/use-machine-stack.html (22531) + + SunSpider reports no change. + + Use a larger recursion limit on the main thread (because we can, and + there's some evidence that it may improve compatibility), and a smaller + recursion limit on secondary threads (because they tend to have smaller + stacks). + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::execute): + (JSC::Interpreter::prepareForRepeatCall): + * interpreter/Interpreter.h: + (JSC::): Ditto. I wrote the recursion test slightly funny, so that the + common case remains a simple compare to constant. + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncToString): + (JSC::arrayProtoFuncToLocaleString): + (JSC::arrayProtoFuncJoin): Conservatively, set the array recursion limits + to the lower, secondary thread limit. We can do something fancier if + compatibility moves us, but this seems sufficient for now. + +2009-04-21 Geoffrey Garen + + Rubber-stamped by Adam Roben. + + Disabled one more Mozilla JS test because it fails intermittently on Windows. + (See https://bugs.webkit.org/show_bug.cgi?id=25160.) + + * tests/mozilla/expected.html: + +2009-04-21 Adam Roben + + Rename JavaScriptCore_debug.dll to JavaScriptCore.dll in the Debug + configuration + + This matches the naming scheme for WebKit.dll, and will be necessary + once Safari links against JavaScriptCore.dll. This change also causes + run-safari not to fail (because the launcher printed by FindSafari was + always looking for JavaScriptCore.dll, never + JavaScriptCore_debug.dll). + + Part of Bug 25305: can't run safari or drt on windows + + + Reviewed by Steve Falkenburg and Sam Weinig. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/jsc/jsc.vcproj: + * JavaScriptCore.vcproj/testapi/testapi.vcproj: + Use $(WebKitDLLConfigSuffix) for naming JavaScriptCore.{dll,lib}. + +2009-04-21 Adam Roben + + Fix JavaScriptCore build on VC++ Express + + Reviewed by Steve Falkenburg and Sam Weinig. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Link + explicitly against gdi32.lib and oleaut32.lib. + +2009-04-21 Geoffrey Garen + + Reviewed by Mark Rowe. + + Tiger crash fix: Put VM tags in their own header file, and fixed up the + #ifdefs so they're not used on Tiger. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * interpreter/RegisterFile.h: + (JSC::RegisterFile::RegisterFile): + * jit/ExecutableAllocatorFixedVMPool.cpp: + (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): + * jit/ExecutableAllocatorPosix.cpp: + (JSC::ExecutablePool::systemAlloc): + * runtime/Collector.cpp: + (JSC::allocateBlock): + * wtf/VMTags.h: Added. + +2009-04-20 Steve Falkenburg + + More Windows build fixes. + + * JavaScriptCore.vcproj/JavaScriptCore.make: Copy DLLs, PDBs. + * JavaScriptCore.vcproj/JavaScriptCore.resources: Added. + * JavaScriptCore.vcproj/JavaScriptCore.resources/Info.plist: Added. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.rc: Added. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add version stamping, resource copying. + +2009-04-20 Steve Falkenburg + + Separate JavaScriptCore.dll from WebKit.dll. + Slight performance improvement or no change on benchmarks. + + Allows us to break a circular dependency between CFNetwork and WebKit on Windows, + and simplifies standalone JavaScriptCore builds. + + Reviewed by Oliver Hunt. + + * API/JSBase.h: Export symbols with JS_EXPORT when using MSVC. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: Build JavaScriptCore as a DLL instead of a static library. + * config.h: Specify __declspec(dllexport/dllimport) appropriately when exporting data. + * runtime/InternalFunction.h: Specify JS_EXPORTDATA on exported data. + * runtime/JSArray.h: Specify JS_EXPORTDATA on exported data. + * runtime/JSFunction.h: Specify JS_EXPORTDATA on exported data. + * runtime/StringObject.h: Specify JS_EXPORTDATA on exported data. + * runtime/UString.h: Specify JS_EXPORTDATA on exported data. + +2009-04-20 Sam Weinig + + Reviewed by Kevin McCullough. + + Always tag mmaped memory on darwin and clean up #defines + now that they are a little bigger. + + * interpreter/RegisterFile.h: + (JSC::RegisterFile::RegisterFile): + * jit/ExecutableAllocatorFixedVMPool.cpp: + (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): + * jit/ExecutableAllocatorPosix.cpp: + (JSC::ExecutablePool::systemAlloc): + * runtime/Collector.cpp: + (JSC::allocateBlock): + +2009-04-20 Sam Weinig + + Rubber-stamped by Tim Hatcher. + + Add licenses for xcconfig files. + + * Configurations/Base.xcconfig: + * Configurations/DebugRelease.xcconfig: + * Configurations/FeatureDefines.xcconfig: + * Configurations/JavaScriptCore.xcconfig: + * Configurations/Version.xcconfig: + +2009-04-20 Ariya Hidayat + + Build fix for Qt port (after r42646). Not reviewed. + + * wtf/unicode/qt4/UnicodeQt4.h: Added U16_PREV. + +2009-04-19 Sam Weinig + + Reviewed by Darin Adler. + + Better fix for JSStringCreateWithCFString hardening. + + * API/JSStringRefCF.cpp: + (JSStringCreateWithCFString): + +2009-04-19 Sam Weinig + + Reviewed by Dan Bernstein. + + Fix for + Harden JSStringCreateWithCFString against malformed CFStringRefs. + + * API/JSStringRefCF.cpp: + (JSStringCreateWithCFString): + +2009-04-19 David Kilzer + + Make FEATURE_DEFINES completely dynamic + + Reviewed by Darin Adler. + + Make FEATURE_DEFINES depend on individual ENABLE_FEATURE_NAME + variables for each feature, making it possible to remove all + knowledge of FEATURE_DEFINES from build-webkit. + + * Configurations/FeatureDefines.xcconfig: Extract a variable + from FEATURE_DEFINES for each feature setting. + +2009-04-18 Sam Weinig + + Reviewed by Dan Bernstein. + + Fix typo. s/VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE/VM_MEMORY_JAVASCRIPT_CORE/ + + * runtime/Collector.cpp: + (JSC::allocateBlock): Fix bozo typo. + +2009-04-18 Sam Weinig + + Reviewed by Anders Carlsson. + + Fix for Tag JavaScript memory on SnowLeopard + + * interpreter/RegisterFile.h: + (JSC::RegisterFile::RegisterFile): + * jit/ExecutableAllocatorFixedVMPool.cpp: + (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): + * jit/ExecutableAllocatorPosix.cpp: + (JSC::ExecutablePool::systemAlloc): + * runtime/Collector.cpp: + (JSC::allocateBlock): + +2009-04-18 Drew Wilson + + VisiblePosition.characterAfter should return UChar32 + + Reviewed by Dan Bernstein. + + * wtf/unicode/icu/UnicodeIcu.h: + (WTF::Unicode::hasLineBreakingPropertyComplexContextOrIdeographic): Added. + +2009-04-18 Sam Weinig + + Reviewed by Mark Rowe. + + Fix for + A little bit of hardening for UString. + + * runtime/UString.cpp: + (JSC::concatenate): + (JSC::UString::append): + +2009-04-18 Sam Weinig + + Reviewed by Mark Rowe and Dan Bernstein. + + Fix for + A little bit of hardening for Vector. + + * wtf/Vector.h: + (WTF::Vector::append): + (WTF::Vector::insert): + +2009-04-17 Gavin Barraclough + + Reviewed by Geoff Garen. + + On x86_64, make all JIT-code allocations from a new heap, managed + by FixedVMPoolAllocator. This class allocates a single large (2Gb) + pool of virtual memory from which all further allocations take place. + Since all JIT code is allocated from this pool, we can continue to + safely assume (as is already asserted) that it will always be possible + to link any JIT-code to JIT-code jumps and calls. + + * JavaScriptCore.xcodeproj/project.pbxproj: + Add new file. + * jit/ExecutableAllocatorFixedVMPool.cpp: Added. + (JSC::FreeListEntry::FreeListEntry): + (JSC::AVLTreeAbstractorForFreeList::get_less): + (JSC::AVLTreeAbstractorForFreeList::set_less): + (JSC::AVLTreeAbstractorForFreeList::get_greater): + (JSC::AVLTreeAbstractorForFreeList::set_greater): + (JSC::AVLTreeAbstractorForFreeList::get_balance_factor): + (JSC::AVLTreeAbstractorForFreeList::set_balance_factor): + (JSC::AVLTreeAbstractorForFreeList::null): + (JSC::AVLTreeAbstractorForFreeList::compare_key_key): + (JSC::AVLTreeAbstractorForFreeList::compare_key_node): + (JSC::AVLTreeAbstractorForFreeList::compare_node_node): + (JSC::sortFreeListEntriesByPointer): + (JSC::sortCommonSizedAllocations): + (JSC::FixedVMPoolAllocator::release): + (JSC::FixedVMPoolAllocator::reuse): + (JSC::FixedVMPoolAllocator::addToFreeList): + (JSC::FixedVMPoolAllocator::coalesceFreeSpace): + (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): + (JSC::FixedVMPoolAllocator::alloc): + (JSC::FixedVMPoolAllocator::free): + (JSC::ExecutableAllocator::intializePageSize): + (JSC::ExecutablePool::systemAlloc): + (JSC::ExecutablePool::systemRelease): + The new 2Gb heap class! + * jit/ExecutableAllocatorPosix.cpp: + Disable use of this implementation on x86_64. + * wtf/AVLTree.h: + Add missing variable initialization. + (WTF::::remove): + +2009-04-17 Oliver Hunt + + Reviewed by Darin Adler. + + Fix bug where the VM reentry cache would not correctly unroll the cached callframe + + Fix a check that was intended to mark a cached call as invalid when the callframe could + not be constructed. Instead it was just checking that there was a place to put the + exception. This eventually results in a non-recoverable RegisterFile starvation. + + * interpreter/CachedCall.h: + (JSC::CachedCall::CachedCall): + (JSC::CachedCall::call): add assertion to ensure we don't use a bad callframe + +2009-04-17 David Kilzer + + Simplify FEATURE_DEFINES definition + + Reviewed by Darin Adler. + + This moves FEATURE_DEFINES and its related ENABLE_FEATURE_NAME + variables to their own FeatureDefines.xcconfig file. It also + extracts a new ENABLE_GEOLOCATION variable so that + FEATURE_DEFINES only needs to be defined once. + + * Configurations/FeatureDefines.xcconfig: Added. + * Configurations/JavaScriptCore.xcconfig: Removed definition of + ENABLE_SVG_DOM_OBJC_BINDINGS and FEATURE_DEFINES. Added include + of FeatureDefines.xcconfig. + * JavaScriptCore.xcodeproj/project.pbxproj: Added + FeatureDefines.xcconfig file. + +2009-04-08 Mihnea Ovidenie + + Reviewed by Oliver Hunt. + + Bug 25027: JavaScript parseInt wrong on negative numbers + + + When dealing with negative numbers, parseInt should use ceil instead of floor. + + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncParseInt): + +2009-04-16 Stephanie Lewis + + Reviewed by Oliver Hunt. + + 32-bit to 64-bit: Javascript hash tables double in size + + Remove perfect hash optimization which removes 1 MB of overhead on 32-bit and almost 2 MB on 64-bit. Removing the optimization was not a regression on SunSpider and the acid 3 test still passes. + + * create_hash_table: + * runtime/Lookup.cpp: + (JSC::HashTable::createTable): + (JSC::HashTable::deleteTable): + * runtime/Lookup.h: + (JSC::HashEntry::initialize): + (JSC::HashEntry::next): + (JSC::HashTable::entry): + * runtime/Structure.cpp: + (JSC::Structure::getEnumerableNamesFromClassInfoTable): + +2009-04-16 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Fix subtle error in optimised VM reentry in Array.sort + + Basically to ensure we don't accidentally invalidate the cached callframe + we should be using the cached callframe rather than our own exec state. + While the old behaviour was wrong i have been unable to actually create a + test case where anything actually ends up going wrong. + + * interpreter/CachedCall.h: + (JSC::CachedCall::newCallFrame): + * runtime/JSArray.cpp: + (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key): + +2009-04-16 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Optimise op_resolve_base + + If we can statically find a property we are trying to resolve + the base of, the base is guaranteed to be the global object. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitResolveBase): + +2009-04-16 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Improve performance of read-write-modify operators + + Implement cross scope optimisation for read-write-modify + operators, to avoid unnecessary calls to property resolve + helper functions. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): + (JSC::BytecodeGenerator::emitLoadGlobalObject): + (JSC::BytecodeGenerator::emitResolveWithBase): + * bytecompiler/BytecodeGenerator.h: + +2009-04-16 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Improve performance of remaining array enumeration functions + + Make use of function entry cache for remaining Array enumeration functions. + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncMap): + (JSC::arrayProtoFuncEvery): + (JSC::arrayProtoFuncForEach): + (JSC::arrayProtoFuncSome): + +2009-04-15 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Improve performance of Array.sort + + Cache the VM entry for Array.sort when using a JS comparison function. + + * runtime/JSArray.cpp: + (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key): + (JSC::JSArray::sort): + +2009-04-15 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Bug 25229: Need support for Array.prototype.reduceRight + + + Implement Array.reduceRight + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncReduceRight): + +2009-04-15 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Bug 25227: Array.filter triggers an assertion when the target array shrinks while being filtered + + + We correct this simply by making the fast array path fall back on the slow path if + we ever discover the fast access is unsafe. + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncFilter): + +2009-04-13 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Bug 25159: Support Array.prototype.reduce + + + Implement Array.prototype.reduce + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncReduce): + +2009-04-15 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + Move CallFrameClosure from inside the Interpreter class to its own file. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * interpreter/CachedCall.h: + * interpreter/CallFrameClosure.h: Copied from JavaScriptCore/yarr/RegexJIT.h. + (JSC::CallFrameClosure::setArgument): + (JSC::CallFrameClosure::resetCallFrame): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::prepareForRepeatCall): + * interpreter/Interpreter.h: + +2009-04-14 Oliver Hunt + + Reviewed by Cameron Zwarich. + + Bug 25202: Improve performance of repeated callbacks into the VM + + Add the concept of a CachedCall to native code for use in Array + prototype and similar functions where a single callback function + is called repeatedly with the same number of arguments. + + Used Array.prototype.filter as the test function and got a 50% win + over a naive non-caching specialised version. This makes the native + implementation of Array.prototype.filter faster than the JS one once + more. + + * JavaScriptCore.vcproj/JavaScriptCore.sln: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * interpreter/CachedCall.h: Added. + (JSC::CachedCall::CachedCall): + (JSC::CachedCall::call): + (JSC::CachedCall::setThis): + (JSC::CachedCall::setArgument): + (JSC::CachedCall::~CachedCall): + CachedCall is a wrapper that automates the calling and teardown + for a CallFrameClosure + * interpreter/CallFrame.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::prepareForRepeatCall): + Create the basic entry closure for a function + (JSC::Interpreter::execute): + A new ::execute method to enter the interpreter from a closure + (JSC::Interpreter::endRepeatCall): + Clear the entry closure + * interpreter/Interpreter.h: + (JSC::Interpreter::CallFrameClosure::setArgument): + (JSC::Interpreter::CallFrameClosure::resetCallFrame): + Helper functions to simplify setting up the closure's callframe + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncFilter): + +2009-04-14 Xan Lopez + + Fix the build. + + Add the yarr headers (and only the headers) to the build, so that + RegExp.cpp can compile. The headers are ifdefed out with yarr + disabled, so we don't need anything else for now. + + * GNUmakefile.am: + +2009-04-14 Adam Roben + + Remove support for profile-guided optimization on Windows + + Rubber-stamped by Steve Falkenburg. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Removed + the Release_PGO configuration. Also let VS re-order the source files + list. + +2009-04-14 Xan Lopez + + Unreviewed build fix. + + * GNUmakefile.am: + +2009-04-14 Jan Michael Alonzo + + Gtk build fix when building minidom. Not reviewed. + + Use C-style comment instead of C++ style since autotools builds + minidom using gcc and not g++. + + * wtf/Platform.h: + +2009-04-14 Gavin Barraclough + + Reviewed by NOBODY - speculative build fix. + + * runtime/RegExp.h: + +2009-04-13 Gavin Barraclough + + Reviewed by Cap'n Geoff Garen. + + Yarr! + (Yet another regex runtime). + + Currently disabled by default since the interpreter, whilst awesomely + functional, has not been optimized and is likely slower than PCRE, and + the JIT, whilst faster than WREC, is presently incomplete and does not + fallback to using an interpreter for the cases it cannot handle. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::move): + (JSC::MacroAssemblerX86Common::swap): + (JSC::MacroAssemblerX86Common::signExtend32ToPtr): + (JSC::MacroAssemblerX86Common::zeroExtend32ToPtr): + (JSC::MacroAssemblerX86Common::branch32): + (JSC::MacroAssemblerX86Common::branch16): + * assembler/X86Assembler.h: + (JSC::X86Assembler::cmpw_im): + (JSC::X86Assembler::testw_rr): + (JSC::X86Assembler::X86InstructionFormatter::immediate16): + * runtime/RegExp.cpp: + (JSC::RegExp::RegExp): + (JSC::RegExp::~RegExp): + (JSC::RegExp::create): + (JSC::RegExp::compile): + (JSC::RegExp::match): + * runtime/RegExp.h: + * wtf/Platform.h: + * yarr: Added. + * yarr/RegexCompiler.cpp: Added. + (JSC::Yarr::CharacterClassConstructor::CharacterClassConstructor): + (JSC::Yarr::CharacterClassConstructor::reset): + (JSC::Yarr::CharacterClassConstructor::append): + (JSC::Yarr::CharacterClassConstructor::putChar): + (JSC::Yarr::CharacterClassConstructor::isUnicodeUpper): + (JSC::Yarr::CharacterClassConstructor::isUnicodeLower): + (JSC::Yarr::CharacterClassConstructor::putRange): + (JSC::Yarr::CharacterClassConstructor::charClass): + (JSC::Yarr::CharacterClassConstructor::addSorted): + (JSC::Yarr::CharacterClassConstructor::addSortedRange): + (JSC::Yarr::newlineCreate): + (JSC::Yarr::digitsCreate): + (JSC::Yarr::spacesCreate): + (JSC::Yarr::wordcharCreate): + (JSC::Yarr::nondigitsCreate): + (JSC::Yarr::nonspacesCreate): + (JSC::Yarr::nonwordcharCreate): + (JSC::Yarr::RegexPatternConstructor::RegexPatternConstructor): + (JSC::Yarr::RegexPatternConstructor::~RegexPatternConstructor): + (JSC::Yarr::RegexPatternConstructor::reset): + (JSC::Yarr::RegexPatternConstructor::assertionBOL): + (JSC::Yarr::RegexPatternConstructor::assertionEOL): + (JSC::Yarr::RegexPatternConstructor::assertionWordBoundary): + (JSC::Yarr::RegexPatternConstructor::atomPatternCharacter): + (JSC::Yarr::RegexPatternConstructor::atomBuiltInCharacterClass): + (JSC::Yarr::RegexPatternConstructor::atomCharacterClassBegin): + (JSC::Yarr::RegexPatternConstructor::atomCharacterClassAtom): + (JSC::Yarr::RegexPatternConstructor::atomCharacterClassRange): + (JSC::Yarr::RegexPatternConstructor::atomCharacterClassBuiltIn): + (JSC::Yarr::RegexPatternConstructor::atomCharacterClassEnd): + (JSC::Yarr::RegexPatternConstructor::atomParenthesesSubpatternBegin): + (JSC::Yarr::RegexPatternConstructor::atomParentheticalAssertionBegin): + (JSC::Yarr::RegexPatternConstructor::atomParenthesesEnd): + (JSC::Yarr::RegexPatternConstructor::atomBackReference): + (JSC::Yarr::RegexPatternConstructor::copyDisjunction): + (JSC::Yarr::RegexPatternConstructor::copyTerm): + (JSC::Yarr::RegexPatternConstructor::quantifyAtom): + (JSC::Yarr::RegexPatternConstructor::disjunction): + (JSC::Yarr::RegexPatternConstructor::regexBegin): + (JSC::Yarr::RegexPatternConstructor::regexEnd): + (JSC::Yarr::RegexPatternConstructor::regexError): + (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets): + (JSC::Yarr::RegexPatternConstructor::setupDisjunctionOffsets): + (JSC::Yarr::RegexPatternConstructor::setupOffsets): + (JSC::Yarr::compileRegex): + * yarr/RegexCompiler.h: Added. + * yarr/RegexInterpreter.cpp: Added. + (JSC::Yarr::Interpreter::appendParenthesesDisjunctionContext): + (JSC::Yarr::Interpreter::popParenthesesDisjunctionContext): + (JSC::Yarr::Interpreter::DisjunctionContext::DisjunctionContext): + (JSC::Yarr::Interpreter::DisjunctionContext::operator new): + (JSC::Yarr::Interpreter::allocDisjunctionContext): + (JSC::Yarr::Interpreter::freeDisjunctionContext): + (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::ParenthesesDisjunctionContext): + (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::operator new): + (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::restoreOutput): + (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::getDisjunctionContext): + (JSC::Yarr::Interpreter::allocParenthesesDisjunctionContext): + (JSC::Yarr::Interpreter::freeParenthesesDisjunctionContext): + (JSC::Yarr::Interpreter::InputStream::InputStream): + (JSC::Yarr::Interpreter::InputStream::next): + (JSC::Yarr::Interpreter::InputStream::rewind): + (JSC::Yarr::Interpreter::InputStream::read): + (JSC::Yarr::Interpreter::InputStream::readChecked): + (JSC::Yarr::Interpreter::InputStream::reread): + (JSC::Yarr::Interpreter::InputStream::prev): + (JSC::Yarr::Interpreter::InputStream::getPos): + (JSC::Yarr::Interpreter::InputStream::setPos): + (JSC::Yarr::Interpreter::InputStream::atStart): + (JSC::Yarr::Interpreter::InputStream::atEnd): + (JSC::Yarr::Interpreter::InputStream::checkInput): + (JSC::Yarr::Interpreter::InputStream::uncheckInput): + (JSC::Yarr::Interpreter::testCharacterClass): + (JSC::Yarr::Interpreter::tryConsumeCharacter): + (JSC::Yarr::Interpreter::checkCharacter): + (JSC::Yarr::Interpreter::tryConsumeCharacterClass): + (JSC::Yarr::Interpreter::checkCharacterClass): + (JSC::Yarr::Interpreter::tryConsumeBackReference): + (JSC::Yarr::Interpreter::matchAssertionBOL): + (JSC::Yarr::Interpreter::matchAssertionEOL): + (JSC::Yarr::Interpreter::matchAssertionWordBoundary): + (JSC::Yarr::Interpreter::matchPatternCharacter): + (JSC::Yarr::Interpreter::backtrackPatternCharacter): + (JSC::Yarr::Interpreter::matchCharacterClass): + (JSC::Yarr::Interpreter::backtrackCharacterClass): + (JSC::Yarr::Interpreter::matchBackReference): + (JSC::Yarr::Interpreter::backtrackBackReference): + (JSC::Yarr::Interpreter::recordParenthesesMatch): + (JSC::Yarr::Interpreter::resetMatches): + (JSC::Yarr::Interpreter::resetAssertionMatches): + (JSC::Yarr::Interpreter::parenthesesDoBacktrack): + (JSC::Yarr::Interpreter::matchParenthesesOnceBegin): + (JSC::Yarr::Interpreter::matchParenthesesOnceEnd): + (JSC::Yarr::Interpreter::backtrackParenthesesOnceBegin): + (JSC::Yarr::Interpreter::backtrackParenthesesOnceEnd): + (JSC::Yarr::Interpreter::matchParentheticalAssertionOnceBegin): + (JSC::Yarr::Interpreter::matchParentheticalAssertionOnceEnd): + (JSC::Yarr::Interpreter::backtrackParentheticalAssertionOnceBegin): + (JSC::Yarr::Interpreter::backtrackParentheticalAssertionOnceEnd): + (JSC::Yarr::Interpreter::matchParentheses): + (JSC::Yarr::Interpreter::backtrackParentheses): + (JSC::Yarr::Interpreter::matchTerm): + (JSC::Yarr::Interpreter::backtrackTerm): + (JSC::Yarr::Interpreter::matchAlternative): + (JSC::Yarr::Interpreter::matchDisjunction): + (JSC::Yarr::Interpreter::matchNonZeroDisjunction): + (JSC::Yarr::Interpreter::interpret): + (JSC::Yarr::Interpreter::Interpreter): + (JSC::Yarr::ByteCompiler::ParenthesesStackEntry::ParenthesesStackEntry): + (JSC::Yarr::ByteCompiler::ByteCompiler): + (JSC::Yarr::ByteCompiler::compile): + (JSC::Yarr::ByteCompiler::checkInput): + (JSC::Yarr::ByteCompiler::assertionBOL): + (JSC::Yarr::ByteCompiler::assertionEOL): + (JSC::Yarr::ByteCompiler::assertionWordBoundary): + (JSC::Yarr::ByteCompiler::atomPatternCharacter): + (JSC::Yarr::ByteCompiler::atomCharacterClass): + (JSC::Yarr::ByteCompiler::atomBackReference): + (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternBegin): + (JSC::Yarr::ByteCompiler::atomParentheticalAssertionBegin): + (JSC::Yarr::ByteCompiler::popParenthesesStack): + (JSC::Yarr::ByteCompiler::dumpDisjunction): + (JSC::Yarr::ByteCompiler::closeAlternative): + (JSC::Yarr::ByteCompiler::atomParenthesesEnd): + (JSC::Yarr::ByteCompiler::regexBegin): + (JSC::Yarr::ByteCompiler::regexEnd): + (JSC::Yarr::ByteCompiler::alterantiveDisjunction): + (JSC::Yarr::ByteCompiler::emitDisjunction): + (JSC::Yarr::byteCompileRegex): + (JSC::Yarr::interpretRegex): + * yarr/RegexInterpreter.h: Added. + (JSC::Yarr::ByteTerm::): + (JSC::Yarr::ByteTerm::ByteTerm): + (JSC::Yarr::ByteTerm::BOL): + (JSC::Yarr::ByteTerm::CheckInput): + (JSC::Yarr::ByteTerm::EOL): + (JSC::Yarr::ByteTerm::WordBoundary): + (JSC::Yarr::ByteTerm::BackReference): + (JSC::Yarr::ByteTerm::AlternativeBegin): + (JSC::Yarr::ByteTerm::AlternativeDisjunction): + (JSC::Yarr::ByteTerm::AlternativeEnd): + (JSC::Yarr::ByteTerm::PatternEnd): + (JSC::Yarr::ByteTerm::invert): + (JSC::Yarr::ByteTerm::capture): + (JSC::Yarr::ByteDisjunction::ByteDisjunction): + (JSC::Yarr::BytecodePattern::BytecodePattern): + (JSC::Yarr::BytecodePattern::~BytecodePattern): + * yarr/RegexJIT.cpp: Added. + (JSC::Yarr::RegexGenerator::optimizeAlternative): + (JSC::Yarr::RegexGenerator::matchCharacterClassRange): + (JSC::Yarr::RegexGenerator::matchCharacterClass): + (JSC::Yarr::RegexGenerator::jumpIfNoAvailableInput): + (JSC::Yarr::RegexGenerator::jumpIfAvailableInput): + (JSC::Yarr::RegexGenerator::checkInput): + (JSC::Yarr::RegexGenerator::atEndOfInput): + (JSC::Yarr::RegexGenerator::notAtEndOfInput): + (JSC::Yarr::RegexGenerator::jumpIfCharEquals): + (JSC::Yarr::RegexGenerator::jumpIfCharNotEquals): + (JSC::Yarr::RegexGenerator::readCharacter): + (JSC::Yarr::RegexGenerator::storeToFrame): + (JSC::Yarr::RegexGenerator::loadFromFrame): + (JSC::Yarr::RegexGenerator::TermGenerationState::TermGenerationState): + (JSC::Yarr::RegexGenerator::TermGenerationState::resetAlternative): + (JSC::Yarr::RegexGenerator::TermGenerationState::alternativeValid): + (JSC::Yarr::RegexGenerator::TermGenerationState::nextAlternative): + (JSC::Yarr::RegexGenerator::TermGenerationState::alternative): + (JSC::Yarr::RegexGenerator::TermGenerationState::resetTerm): + (JSC::Yarr::RegexGenerator::TermGenerationState::termValid): + (JSC::Yarr::RegexGenerator::TermGenerationState::nextTerm): + (JSC::Yarr::RegexGenerator::TermGenerationState::term): + (JSC::Yarr::RegexGenerator::TermGenerationState::lookaheadTerm): + (JSC::Yarr::RegexGenerator::TermGenerationState::isSinglePatternCharacterLookaheadTerm): + (JSC::Yarr::RegexGenerator::TermGenerationState::inputOffset): + (JSC::Yarr::RegexGenerator::TermGenerationState::jumpToBacktrack): + (JSC::Yarr::RegexGenerator::TermGenerationState::setBacktrackGenerated): + (JSC::Yarr::RegexGenerator::jumpToBacktrackCheckEmitPending): + (JSC::Yarr::RegexGenerator::genertateAssertionBOL): + (JSC::Yarr::RegexGenerator::genertateAssertionEOL): + (JSC::Yarr::RegexGenerator::matchAssertionWordchar): + (JSC::Yarr::RegexGenerator::genertateAssertionWordBoundary): + (JSC::Yarr::RegexGenerator::genertatePatternCharacterSingle): + (JSC::Yarr::RegexGenerator::genertatePatternCharacterPair): + (JSC::Yarr::RegexGenerator::genertatePatternCharacterFixed): + (JSC::Yarr::RegexGenerator::genertatePatternCharacterGreedy): + (JSC::Yarr::RegexGenerator::genertatePatternCharacterNonGreedy): + (JSC::Yarr::RegexGenerator::genertateCharacterClassSingle): + (JSC::Yarr::RegexGenerator::genertateCharacterClassFixed): + (JSC::Yarr::RegexGenerator::genertateCharacterClassGreedy): + (JSC::Yarr::RegexGenerator::genertateCharacterClassNonGreedy): + (JSC::Yarr::RegexGenerator::generateParenthesesSingleDisjunctionOneAlternative): + (JSC::Yarr::RegexGenerator::generateParenthesesSingle): + (JSC::Yarr::RegexGenerator::generateTerm): + (JSC::Yarr::RegexGenerator::generateDisjunction): + (JSC::Yarr::RegexGenerator::RegexGenerator): + (JSC::Yarr::RegexGenerator::generate): + (JSC::Yarr::jitCompileRegex): + (JSC::Yarr::executeRegex): + * yarr/RegexJIT.h: Added. + (JSC::Yarr::RegexCodeBlock::RegexCodeBlock): + * yarr/RegexParser.h: Added. + (JSC::Yarr::): + (JSC::Yarr::Parser::): + (JSC::Yarr::Parser::CharacterClassParserDelegate::CharacterClassParserDelegate): + (JSC::Yarr::Parser::CharacterClassParserDelegate::begin): + (JSC::Yarr::Parser::CharacterClassParserDelegate::atomPatternCharacterUnescaped): + (JSC::Yarr::Parser::CharacterClassParserDelegate::atomPatternCharacter): + (JSC::Yarr::Parser::CharacterClassParserDelegate::atomBuiltInCharacterClass): + (JSC::Yarr::Parser::CharacterClassParserDelegate::end): + (JSC::Yarr::Parser::CharacterClassParserDelegate::assertionWordBoundary): + (JSC::Yarr::Parser::CharacterClassParserDelegate::atomBackReference): + (JSC::Yarr::Parser::CharacterClassParserDelegate::flush): + (JSC::Yarr::Parser::CharacterClassParserDelegate::): + (JSC::Yarr::Parser::Parser): + (JSC::Yarr::Parser::parseEscape): + (JSC::Yarr::Parser::parseAtomEscape): + (JSC::Yarr::Parser::parseCharacterClassEscape): + (JSC::Yarr::Parser::parseCharacterClass): + (JSC::Yarr::Parser::parseParenthesesBegin): + (JSC::Yarr::Parser::parseParenthesesEnd): + (JSC::Yarr::Parser::parseQuantifier): + (JSC::Yarr::Parser::parseTokens): + (JSC::Yarr::Parser::parse): + (JSC::Yarr::Parser::saveState): + (JSC::Yarr::Parser::restoreState): + (JSC::Yarr::Parser::atEndOfPattern): + (JSC::Yarr::Parser::peek): + (JSC::Yarr::Parser::peekIsDigit): + (JSC::Yarr::Parser::peekDigit): + (JSC::Yarr::Parser::consume): + (JSC::Yarr::Parser::consumeDigit): + (JSC::Yarr::Parser::consumeNumber): + (JSC::Yarr::Parser::consumeOctal): + (JSC::Yarr::Parser::tryConsume): + (JSC::Yarr::Parser::tryConsumeHex): + (JSC::Yarr::parse): + * yarr/RegexPattern.h: Added. + (JSC::Yarr::CharacterRange::CharacterRange): + (JSC::Yarr::): + (JSC::Yarr::PatternTerm::): + (JSC::Yarr::PatternTerm::PatternTerm): + (JSC::Yarr::PatternTerm::BOL): + (JSC::Yarr::PatternTerm::EOL): + (JSC::Yarr::PatternTerm::WordBoundary): + (JSC::Yarr::PatternTerm::invert): + (JSC::Yarr::PatternTerm::capture): + (JSC::Yarr::PatternTerm::quantify): + (JSC::Yarr::PatternAlternative::PatternAlternative): + (JSC::Yarr::PatternAlternative::lastTerm): + (JSC::Yarr::PatternAlternative::removeLastTerm): + (JSC::Yarr::PatternDisjunction::PatternDisjunction): + (JSC::Yarr::PatternDisjunction::~PatternDisjunction): + (JSC::Yarr::PatternDisjunction::addNewAlternative): + (JSC::Yarr::RegexPattern::RegexPattern): + (JSC::Yarr::RegexPattern::~RegexPattern): + (JSC::Yarr::RegexPattern::reset): + (JSC::Yarr::RegexPattern::containsIllegalBackReference): + (JSC::Yarr::RegexPattern::newlineCharacterClass): + (JSC::Yarr::RegexPattern::digitsCharacterClass): + (JSC::Yarr::RegexPattern::spacesCharacterClass): + (JSC::Yarr::RegexPattern::wordcharCharacterClass): + (JSC::Yarr::RegexPattern::nondigitsCharacterClass): + (JSC::Yarr::RegexPattern::nonspacesCharacterClass): + (JSC::Yarr::RegexPattern::nonwordcharCharacterClass): + +2009-04-13 Oliver Hunt + + Reviewed by NOBODY (Missed code from last patch). + + * runtime/InternalFunction.cpp: + (JSC::InternalFunction::displayName): + (JSC::InternalFunction::calculatedDisplayName): + * runtime/InternalFunction.h: + +2009-04-13 Francisco Tolmasky + + Reviewed by Oliver Hunt. + + BUG 25171: It should be possible to manually set the name of an anonymous function + + + This change adds the displayName property to functions, which when set overrides the + normal name when appearing in the console. + + * profiler/Profiler.cpp: + (JSC::createCallIdentifierFromFunctionImp): Changed call to InternalFunction::name to InternalFunction::calculatedDisplayName + * runtime/CommonIdentifiers.h: Added displayName common identifier. + * runtime/InternalFunction.cpp: + (JSC::InternalFunction::displayName): Access to user settable displayName property + (JSC::InternalFunction::calculatedDisplayName): Returns displayName if it exists, if not then the natural name + +2009-04-13 Geoffrey Garen + + Reviewed by Sam Weinig. + + Disabled another JavaScriptCore test because it fails on Windows but + not Mac, so it makes the bots red. + + * tests/mozilla/expected.html: + +2009-04-13 Geoffrey Garen + + Reviewed by Sam Weinig. + + Disabled two JavaScriptCore tests because they fail on Window or Mac but + not both, so they make the bots red. + + * tests/mozilla/expected.html: Updated expected results. + +2009-04-09 Ben Murdoch + + Reviewed by Alexey Proskuryakov. + + https://bugs.webkit.org/show_bug.cgi?id=25091 + The Android platform requires threads to be registered with the VM. + This patch implements this behaviour inside ThreadingPthreads.cpp. + + * wtf/ThreadingPthreads.cpp: Add a level above threadEntryPoint that takes care of (un)registering threads with the VM. + (WTF::runThreadWithRegistration): register the thread and run entryPoint. Unregister the thread afterwards. + (WTF::createThreadInternal): call runThreadWithRegistration instead of entryPoint directly. + +2009-04-09 David Kilzer + + Reinstating Option to turn off SVG DOM Objective-C bindings + + Rolled r42345 back in. The build failure was caused by an + internal script which had not been updated the same way that + build-webkit was updated. + + * Configurations/JavaScriptCore.xcconfig: + +2009-04-09 Alexey Proskuryakov + + Reverting Option to turn off SVG DOM Objective-C bindings. + It broke Mac build, and I don't know how to fix it. + + * Configurations/JavaScriptCore.xcconfig: + +2009-04-09 Xan Lopez + + Unreviewed build fix. + + Checking for __GLIBCXX__ being bigger than some date is not enough + to get std::tr1, C++0x has to be in use too. Add another check for + __GXX_EXPERIMENTAL_CXX0X__. + + * wtf/TypeTraits.h: + +2009-04-08 Oliver Hunt + + Reviewed by Adam Roben. + + Fix assertion failure in function.apply + + The result of excess arguments to function.apply is irrelevant + so we don't need to provide a result register. We were providing + temporary result register but not ref'ing it resulting in an + assertion failure. + + * parser/Nodes.cpp: + (JSC::ApplyFunctionCallDotNode::emitBytecode): + +2009-04-08 David Kilzer + + Option to turn off SVG DOM Objective-C bindings + + Reviewed by Darin Adler and Maciej Stachowiak. + + Introduce the ENABLE_SVG_DOM_OBJC_BINDINGS feature define so + that SVG DOM Objective-C bindings may be optionally disabled. + + * Configurations/JavaScriptCore.xcconfig: Added + ENABLE_SVG_DOM_OBJC_BINDINGS variable and use it in + FEATURE_DEFINES. + +2009-04-08 Paul Pedriana + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=20422 + Allow custom memory allocation control. + + * wtf/FastAllocBase.h: + New added file. Implements allocation base class. + * wtf/TypeTraits.h: + Augments existing type traits support as needed by FastAllocBase. + * wtf/FastMalloc.h: + Changed to support FastMalloc match validation. + * wtf/FastMalloc.cpp: + Changed to support FastMalloc match validation. + * wtf/Platform.h: + Added ENABLE_FAST_MALLOC_MATCH_VALIDATION; defaults to 0. + * GNUmakefile.am: + Updated to include added FastAllocBase.h. + * JavaScriptCore.xcodeproj/project.pbxproj: + Updated to include added FastAllocBase.h. + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + Updated to include added FastAllocBase.h. + +2009-04-07 Oliver Hunt + + Reviewed by Geoff Garen. + + Improve function.apply performance + + Jump through a few hoops to improve performance of function.apply in the general case. + + In the case of zero or one arguments, or if there are only two arguments and the + second is an array literal we treat function.apply as function.call. + + Otherwise we use the new opcodes op_load_varargs and op_call_varargs to do the .apply call + without re-entering the virtual machine. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * bytecode/Opcode.h: + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply): + (JSC::BytecodeGenerator::emitLoadVarargs): + (JSC::BytecodeGenerator::emitCallVarargs): + * bytecompiler/BytecodeGenerator.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + * jit/JIT.h: + * jit/JITCall.cpp: + (JSC::JIT::compileOpCallSetupArgs): + (JSC::JIT::compileOpCallVarargsSetupArgs): + (JSC::JIT::compileOpCallVarargs): + (JSC::JIT::compileOpCallVarargsSlowCase): + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_load_varargs): + * jit/JITStubs.h: + * parser/Grammar.y: + * parser/Nodes.cpp: + (JSC::ArrayNode::isSimpleArray): + (JSC::ArrayNode::toArgumentList): + (JSC::CallFunctionCallDotNode::emitBytecode): + (JSC::ApplyFunctionCallDotNode::emitBytecode): + * parser/Nodes.h: + (JSC::ExpressionNode::): + (JSC::ApplyFunctionCallDotNode::): + * runtime/Arguments.cpp: + (JSC::Arguments::copyToRegisters): + (JSC::Arguments::fillArgList): + * runtime/Arguments.h: + (JSC::Arguments::numProvidedArguments): + * runtime/FunctionPrototype.cpp: + (JSC::FunctionPrototype::addFunctionProperties): + * runtime/FunctionPrototype.h: + * runtime/JSArray.cpp: + (JSC::JSArray::copyToRegisters): + * runtime/JSArray.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + (JSC::JSGlobalObject::mark): + * runtime/JSGlobalObject.h: + +2009-04-08 Alexey Proskuryakov + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=25073 + JavaScriptCore tests don't run if time zone is not PST + + * API/tests/testapi.c: + (timeZoneIsPST): Added a function that checks whether the time zone is PST, using the same + method as functions in DateMath.cpp do for formatting the result. + (main): Skip date string format test if the time zone is not PST. + +2009-04-07 David Levin + + Reviewed by Sam Weinig and Geoff Garen. + + https://bugs.webkit.org/show_bug.cgi?id=25039 + UString refactoring to support UChar* sharing. + + No change in sunspider perf. + + * runtime/SmallStrings.cpp: + (JSC::SmallStringsStorage::SmallStringsStorage): + * runtime/UString.cpp: + (JSC::initializeStaticBaseString): + (JSC::initializeUString): + (JSC::UString::BaseString::isShared): + Encapsulate the meaning behind the refcount == 1 checks because + this needs to do slightly more when sharing is added. + (JSC::concatenate): + (JSC::UString::append): + (JSC::UString::operator=): + * runtime/UString.h: + Make m_baseString part of a union to get rid of casts, but make it protected because + it is tricky to use it correctly since it is only valid when the Rep is not a BaseString. + The void* will be filled in when sharing is added. + + Add constructors due to the making members protected and it make ensuring proper + initialization work better (like in SmallStringsStorage). + (JSC::UString::Rep::create): + (JSC::UString::Rep::Rep): + (JSC::UString::Rep::): + (JSC::UString::BaseString::BaseString): + (JSC::UString::Rep::setBaseString): + (JSC::UString::Rep::baseString): + +2009-04-04 Xan Lopez + + Reviewed by Alexey Proskuryakov. + + https://bugs.webkit.org/show_bug.cgi?id=25033 + dtoa.cpp segfaults with g++ 4.4.0 + + g++ 4.4.0 seems to be more strict about aliasing rules, so it + produces incorrect code if dtoa.cpp is compiled with + -fstrict-aliasing (it also emits a ton of warnings, so fair enough + I guess). The problem was that we were only casting variables to + union types in order to do type punning, but GCC and the C + standard require that we actually use a union to store the value. + + This patch does just that, the code is mostly copied from the dtoa + version in GCC: + http://gcc.gnu.org/viewcvs/trunk/libjava/classpath/native/fdlibm/dtoa.c?view=markup. + + * wtf/dtoa.cpp: + (WTF::ulp): + (WTF::b2d): + (WTF::ratio): + (WTF::hexnan): + (WTF::strtod): + (WTF::dtoa): + +2009-04-04 Kevin Ollivier + + wx build fix for Win port. Build the assembler sources to get missing functions. + + * JavaScriptCoreSources.bkl: + * jscore.bkl: + * wtf/Platform.h: + +2009-04-02 Darin Adler + + Reviewed by Kevin Decker. + + crash in GC due to uninitialized callFunction pointer + + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Initialize + callFunction as we do the other data members that are used in the mark function. + +2009-04-02 Yael Aharon + + Reviewed by Simon Hausmann + + https://bugs.webkit.org/show_bug.cgi?id=24490 + + Implement WTF::ThreadSpecific in the Qt build using + QThreadStorage. + + * wtf/ThreadSpecific.h: + +2009-04-01 Greg Bolsinga + + Reviewed by Mark Rowe. + + https://bugs.webkit.org/show_bug.cgi?id=24990 + Put SECTORDER_FLAGS into xcconfig files. + + * Configurations/Base.xcconfig: + * Configurations/DebugRelease.xcconfig: + * JavaScriptCore.xcodeproj/project.pbxproj: + +2009-03-27 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + Fix non-AllInOneFile builds. + + * bytecompiler/BytecodeGenerator.cpp: + +2009-03-27 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Improve performance of Function.prototype.call + + + Optimistically assume that expression.call(..) is going to be a call to + Function.prototype.call, and handle it specially to attempt to reduce the + degree of VM reentrancy. + + When everything goes right this removes the vm reentry improving .call() + by around a factor of 10. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * bytecode/Opcode.h: + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall): + * bytecompiler/BytecodeGenerator.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + * parser/Grammar.y: + * parser/Nodes.cpp: + (JSC::CallFunctionCallDotNode::emitBytecode): + * parser/Nodes.h: + (JSC::CallFunctionCallDotNode::): + * runtime/FunctionPrototype.cpp: + (JSC::FunctionPrototype::addFunctionProperties): + * runtime/FunctionPrototype.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + (JSC::JSGlobalObject::mark): + * runtime/JSGlobalObject.h: + +2009-03-27 Laszlo Gombos + + Reviewed by Darin Adler. + + Bug 24884: Include strings.h for strcasecmp() + https://bugs.webkit.org/show_bug.cgi?id=24884 + + * runtime/DateMath.cpp: Reversed previous change including strings.h + * wtf/StringExtras.h: Include strings.h here is available + +2009-03-26 Adam Roben + + Copy testapi.js to $WebKitOutputDir on Windows + + Part of Bug 24856: run-javascriptcore-tests should run testapi on + Windows + + + This matches what Mac does, which will help once we enable running + testapi from run-javascriptcore-tests on Windows. + + Reviewed by Steve Falkenburg. + + * JavaScriptCore.vcproj/testapi/testapi.vcproj: Copy testapi.js next + to testapi.exe. + +2009-03-25 Oliver Hunt + + Reviewed by Geoff Garen. + + Fix exception handling for instanceof in the interpreter. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + +2009-03-25 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Fixed Write to freed memory in JSC::Label::deref + when reloading http://helpme.att.net/speedtest/ + + * bytecompiler/BytecodeGenerator.h: Reversed the declaration order for + m_labelScopes and m_labels to reverse their destruction order. + m_labelScopes has references to memory within m_labels, so its destructor + needs to run first. + +2009-03-24 Eli Fidler + + Reviewed by George Staikos. + + Correct warnings which in some environments are treated as errors. + + * wtf/dtoa.cpp: + (WTF::b2d): + (WTF::d2b): + (WTF::strtod): + (WTF::dtoa): + +2009-03-24 Kevin Ollivier + + Reviewed by Darin Adler. + + Explicitly define HAVE_LANGINFO_H on Darwin. Fixes the wx build bot jscore + test failure. + + https://bugs.webkit.org/show_bug.cgi?id=24780 + + * wtf/Platform.h: + +2009-03-23 Oliver Hunt + + Reviewed by Cameron Zwarich. + + Fix className() for API defined class + + * API/JSCallbackObjectFunctions.h: + (JSC::::className): + * API/tests/testapi.c: + (EmptyObject_class): + (main): + * API/tests/testapi.js: + +2009-03-23 Oliver Hunt + + Reviewed by Geoff Garen. + + Make testapi assertions run in release builds, so that testapi actually + works in a release build. + + Many of the testapi assertions have side effects that are necessary, and + given testapi is a testing program, perf impact of an assertion is not + important, so it makes sense to apply the assertions in release builds + anyway. + + * API/tests/testapi.c: + (EvilExceptionObject_hasInstance): + +2009-03-23 David Kilzer + + Provide JavaScript exception information after slow script timeout + + Reviewed by Oliver Hunt. + + * runtime/Completion.cpp: + (JSC::evaluate): Set the exception object as the Completion + object's value for slow script timeouts. This is used in + WebCore when reporting the exception. + * runtime/ExceptionHelpers.cpp: + (JSC::InterruptedExecutionError::toString): Added. Provides a + description message for the exception when it is reported. + +2009-03-23 Gustavo Noronha Silva and Thadeu Lima de Souza Cascardo + + Reviewed by Adam Roben. + + https://bugs.webkit.org/show_bug.cgi?id=24674 + Crashes in !PLATFORM(MAC)'s formatLocaleDate, in very specific situations + + Make sure strftime never returns 2-digits years to avoid ambiguity + and a crash. We wrap this new code option in HAVE_LANGINFO_H, + since it is apparently not available in all platforms. + + * runtime/DatePrototype.cpp: + (JSC::formatLocaleDate): + * wtf/Platform.h: + +2009-03-22 Oliver Hunt + + Reviewed by Cameron Zwarich. + + Fix exception handling in API + + We can't just use the ExecState exception slot for returning exceptions + from class introspection functions provided through the API as many JSC + functions will explicitly clear the ExecState exception when returning. + + * API/JSCallbackObjectFunctions.h: + (JSC::JSCallbackObject::getOwnPropertySlot): + (JSC::JSCallbackObject::put): + (JSC::JSCallbackObject::deleteProperty): + (JSC::JSCallbackObject::construct): + (JSC::JSCallbackObject::hasInstance): + (JSC::JSCallbackObject::call): + (JSC::JSCallbackObject::toNumber): + (JSC::JSCallbackObject::toString): + (JSC::JSCallbackObject::staticValueGetter): + (JSC::JSCallbackObject::callbackGetter): + * API/tests/testapi.c: + (MyObject_hasProperty): + (MyObject_getProperty): + (MyObject_setProperty): + (MyObject_deleteProperty): + (MyObject_callAsFunction): + (MyObject_callAsConstructor): + (MyObject_hasInstance): + (EvilExceptionObject_hasInstance): + (EvilExceptionObject_convertToType): + (EvilExceptionObject_class): + (main): + * API/tests/testapi.js: + (EvilExceptionObject.hasInstance): + (EvilExceptionObject.toNumber): + (EvilExceptionObject.toStringExplicit): + +2009-03-21 Cameron Zwarich + + Reviewed by Oliver Hunt. + + Bug 20049: testapi failure: MyObject - 0 should be NaN but instead is 1. + + + + In this case, the test is wrong. According to the ECMA spec, subtraction + uses ToNumber, not ToPrimitive. Change the test to match the spec. + + * API/tests/testapi.js: + +2009-03-21 Oliver Hunt + + Reviewed by Cameron Zwarich. + + Ensure that JSObjectMakeFunction doesn't produce incorrect line numbers. + + Also make test api correctly propagate failures. + + * API/tests/testapi.c: + (main): + * runtime/FunctionConstructor.cpp: + (JSC::constructFunction): + +2009-03-21 Oliver Hunt + + Reviewed by Mark Rowe. + + Improve testapi by making it report failures in a way we can pick up + from our test scripts. + + * API/tests/testapi.c: + (assertEqualsAsBoolean): + (assertEqualsAsNumber): + (assertEqualsAsUTF8String): + (assertEqualsAsCharactersPtr): + (main): + * API/tests/testapi.js: + (pass): + (fail): + (shouldBe): + (shouldThrow): + +2009-03-20 Norbert Leser + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=24535 + + Fixes missing line terminator character (;) after macro call. + It is common practice to add the trailing ";" where macros are substituted + and not where they are defined with #define. + This change is consistent with other macro declarations across webkit, + and it also solves compilation failure with symbian compilers. + + * runtime/UString.cpp: + * wtf/Assertions.h: + +2009-03-20 Geoffrey Garen + + Reviewed by Darin Adler. + + Fixed a JavaScriptCore crash on the Windows buildbot. + + * bytecompiler/BytecodeGenerator.h: Reduced the AST recursion limit. + Apparently, Windows has small stacks. + +2009-03-20 Geoffrey Garen + + Reviewed by Oliver Hunt. + + A little cleanup in the RegisterFile code. + + Moved large inline functions out of the class declaration, to make it + more readable. + + Switched over to using the roundUpAllocationSize function to avoid + duplicate code and subtle bugs. + + Renamed m_maxCommitted to m_commitEnd, to match m_end. + + Renamed allocationSize to commitSize because it's the chunk size for + committing memory, not allocating memory. + + SunSpider reports no change. + + * interpreter/RegisterFile.h: + (JSC::RegisterFile::RegisterFile): + (JSC::RegisterFile::shrink): + (JSC::RegisterFile::grow): + * jit/ExecutableAllocator.h: + (JSC::roundUpAllocationSize): + +2009-03-19 Geoffrey Garen + + Reviewed by Oliver Hunt. + + Fixed -- a little bit of hardening in the Collector. + + SunSpider reports no change. I also verified in the disassembly that + we end up with a single compare to constant. + + * runtime/Collector.cpp: + (JSC::Heap::heapAllocate): + +2009-03-19 Geoffrey Garen + + Reviewed by Cameron Zwarich and Oliver Hunt. + + Fixed REGRESSION: Stack overflow on PowerPC on + fast/workers/use-machine-stack.html (22531) + + Dialed down the re-entry allowance to 64 (from 128). + + On a 512K stack, this leaves about 64K for other code on the stack while + JavaScript is running. Not perfect, but it solves our crash on PPC. + + Different platforms may want to dial this down even more. + + Also, substantially shrunk BytecodeGenerator. Since we allocate one on + the stack in order to throw a stack overflow exception -- well, let's + just say the old code had an appreciation for irony. + + SunSpider reports no change. + + * bytecompiler/BytecodeGenerator.h: + * interpreter/Interpreter.h: + (JSC::): + +2009-03-19 Cameron Zwarich + + Reviewed by Oliver Hunt. + + Bug 24350: REGRESSION: Safari 4 breaks SPAW wysiwyg editor multiple instances + + + + The SPAW editor's JavaScript assumes that toString() on a function + constructed with the Function constructor produces a function with + a newline after the opening brace. + + * runtime/FunctionConstructor.cpp: + (JSC::constructFunction): Add a newline after the opening brace of the + function's source code. + +2009-03-19 Cameron Zwarich + + Reviewed by Geoff Garen. + + Bug 23771: REGRESSION (r36016): JSObjectHasProperty freezes on global class without kJSClassAttributeNoAutomaticPrototype + + + + * API/tests/testapi.c: + (main): Add a test for this bug. + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::resetPrototype): Don't set the prototype of the + last object in the prototype chain to the object prototype when the + object prototype is already the last object in the prototype chain. + +2009-03-19 Timothy Hatcher + + -[WebView scheduleInRunLoop:forMode:] has no affect on timers + + Reviewed by Darin Adler. + + * wtf/Platform.h: Added HAVE_RUNLOOP_TIMER for PLATFORM(MAC). + +2009-03-19 Geoffrey Garen + + Reviewed by Oliver Hunt. + + Fixed Regular expression run-time complexity + limit too low for long inputs (21485) + + I raised PCRE's "matchLimit" (limit on backtracking) by an order of + magnitude. This fixes all the reported examples of timing out on legitimate + regular expression matches. + + In my testing on a Core Duo MacBook Pro, the longest you can get stuck + trying to match a string is still under 1s, so this seems like a safe change. + + I can think of a number of better solutions that are more complicated, + but this is a good improvement for now. + + * pcre/pcre_exec.cpp: + +2009-03-19 Geoffrey Garen + + Reviewed by Sam Weinig. + + Fixed REGRESSION (Safari 4): regular expression + pattern size limit lower than Safari 3.2, other browsers, breaks SAP (14873) + + Bumped the pattern size limit to 1MB, and standardized it between PCRE + and WREC. (Empirical testing says that we can easily compile a 1MB regular + expression without risking a hang. Other browsers support bigger regular + expressions, but also hang.) + + SunSpider reports no change. + + I started with a patch posted to Bugzilla by Erik Corry (erikcorry@google.com). + + * pcre/pcre_internal.h: + (put3ByteValue): + (get3ByteValue): + (put3ByteValueAndAdvance): + (putLinkValueAllowZero): + (getLinkValueAllowZero): Made PCRE's "LINK_SIZE" (the number of bytes + used to record jumps between bytecodes) 3, to accomodate larger potential + jumps. Bumped PCRE's "MAX_PATTERN_SIZE" to 1MB. (Technically, at this + LINK_SIZE, we can support even larger patterns, but we risk a hang during + compilation, and it's not clear that such large patterns are important + on the web.) + + * wrec/WREC.cpp: + (JSC::WREC::Generator::compileRegExp): Match PCRE's maximum pattern size, + to avoid quirks between platforms. + +2009-03-18 Ada Chan + + Rolling out r41818 since it broke the windows build. + Error: ..\..\runtime\DatePrototype.cpp(30) : fatal error C1083: Cannot open include file: 'langinfo.h': No such file or directory + + * runtime/DatePrototype.cpp: + (JSC::formatLocaleDate): + +2009-03-17 Oliver Hunt + + Reviewed by Cameron Zwarich. + + REGRESSION (Safari 4): Incorrect function return value when using IE "try ... finally" memory leak work-around (24654) + + + If the return value for a function is in a local register we need + to copy it before executing any finalisers, otherwise it is possible + for the finaliser to clobber the result. + + * bytecompiler/BytecodeGenerator.h: + (JSC::BytecodeGenerator::hasFinaliser): + * parser/Nodes.cpp: + (JSC::ReturnNode::emitBytecode): + +2009-03-17 Kevin Ollivier + + Reviewed by Mark Rowe. + + Move BUILDING_ON_* defines into Platform.h to make them available to other ports. + Also tweak the defines so that they work with the default values set by + AvailabilityMacros.h. + + https://bugs.webkit.org/show_bug.cgi?id=24630 + + * JavaScriptCorePrefix.h: + * wtf/Platform.h: + +2009-03-15 Simon Fraser + + Revert r41718 because it broke DumpRenderTree on Tiger. + + * JavaScriptCorePrefix.h: + * wtf/Platform.h: + +2009-03-15 Kevin Ollivier + + Non-Apple Mac ports build fix. Move defines for the BUILDING_ON_ macros into + Platform.h so that they're defined for all ports building on Mac, and tweak + the definitions of those macros based on Mark Rowe's suggestions to accomodate + cases where the values may not be <= to the .0 release for that version. + + * JavaScriptCorePrefix.h: + * wtf/Platform.h: + +2009-03-13 Mark Rowe + + Rubber-stamped by Dan Bernstein. + + Take advantage of the ability of recent versions of Xcode to easily switch the active + architecture. + + * Configurations/DebugRelease.xcconfig: + +2009-03-13 Mark Rowe + + Reviewed by David Kilzer. + + Prevent AllInOneFile.cpp and ProfileGenerator.cpp from rebuilding unnecessarily when + switching between building in Xcode and via build-webkit. + + build-webkit passes FEATURE_DEFINES to xcodebuild, resulting in it being present in the + Derived Sources build settings. When building in Xcode, this setting isn't present so + Xcode reruns the script build phases. This results in a new version of TracingDtrace.h + being generated, and the files that include it being rebuilt. + + * JavaScriptCore.xcodeproj/project.pbxproj: Don't regenerate TracingDtrace.h if it is + already newer than the input file. + +2009-03-13 Norbert Leser + + Reviewed by Darin Adler. + + Resolved name conflict with globally defined tzname in Symbian. + Replaced with different name instead of using namespace qualifier + (appeared to be less clumsy). + + * runtime/DateMath.cpp: + +2009-03-12 Mark Rowe + + Reviewed by Darin Adler. + + TCMalloc_SystemRelease should use madvise rather than re-mmaping span of pages + + * wtf/FastMalloc.cpp: + (WTF::mergeDecommittedStates): If either of the spans has been released to the system, release the other + span as well so that the flag in the merged span is accurate. + * wtf/Platform.h: + * wtf/TCSystemAlloc.cpp: Track decommitted spans when using MADV_FREE_REUSABLE / MADV_FREE_REUSE. + (TCMalloc_SystemRelease): Use madvise with MADV_FREE_REUSABLE when it is available. + (TCMalloc_SystemCommit): Use madvise with MADV_FREE_REUSE when it is available. + * wtf/TCSystemAlloc.h: + +2009-03-12 Adam Treat + + Reviewed by NOBODY (Build fix). + + Include string.h for strlen usage. + + * wtf/Threading.cpp: + +2009-03-12 David Kilzer + + Add NO_RETURN attribute to runInteractive() when not using readline + + Reviewed by Darin Adler. + + * jsc.cpp: + (runInteractive): If the readline library is not used, this method + will never return, thus the NO_RETURN attribute is needed to prevent + a gcc warning. + +2009-03-12 Adam Roben + + Adopt setThreadNameInternal on Windows + + Also changed a Windows-only assertion about thread name length to an + all-platform log message. + + Reviewed by Adam Treat. + + * wtf/Threading.cpp: + (WTF::createThread): Warn if the thread name is longer than 31 + characters, as Visual Studio will truncate names longer than that + length. + + * wtf/ThreadingWin.cpp: + (WTF::setThreadNameInternal): Renamed from setThreadName and changed + to always operate on the current thread. + (WTF::initializeThreading): Changed to use setThreadNameInternal. + (WTF::createThreadInternal): Removed call to setThreadName. This is + now handled by threadEntryPoint and setThreadNameInternal. + +2009-03-11 David Kilzer + + Clarify comments regarding order of FEATURE_DEFINES + + Rubber-stamped by Mark Rowe. + + * Configurations/JavaScriptCore.xcconfig: Added warning about + the consequences when FEATURE_DEFINES are not kept in sync. + +2009-03-11 Dan Bernstein + + Reviewed by Darin Adler. + + - WTF support for fixing Thai text selection + in Safari is incorrect + + * wtf/unicode/icu/UnicodeIcu.h: + (WTF::Unicode::hasLineBreakingPropertyComplexContext): Added. Returns + whether the character has Unicode line breaking property value SA + ("Complex Context"). + * wtf/unicode/qt4/UnicodeQt4.h: + (WTF::Unicode::hasLineBreakingPropertyComplexContext): Added an + implementation that always returns false. + +2009-03-11 Darin Adler + + Reviewed by Mark Rowe. + + Give threads names on platforms with pthread_setname_np. + + * wtf/Threading.cpp: + (WTF::NewThreadContext::NewThreadContext): Initialize thread name. + (WTF::threadEntryPoint): Call setThreadNameInternal. + (WTF::createThread): Pass thread name. + + * wtf/Threading.h: Added new comments, setThreadNameInternal. + + * wtf/ThreadingGtk.cpp: + (WTF::setThreadNameInternal): Added. Empty. + * wtf/ThreadingNone.cpp: + (WTF::setThreadNameInternal): Added. Empty. + * wtf/ThreadingPthreads.cpp: + (WTF::setThreadNameInternal): Call pthread_setname_np when available. + * wtf/ThreadingQt.cpp: + (WTF::setThreadNameInternal): Added. Empty. + * wtf/ThreadingWin.cpp: + (WTF::setThreadNameInternal): Added. Empty. + +2009-03-11 Adam Roben + + Change the Windows implementation of ThreadSpecific to use functions + instead of extern globals + + This will make it easier to export ThreadSpecific from WebKit. + + Reviewed by John Sullivan. + + * API/JSBase.cpp: + (JSEvaluateScript): + Touched this file to force ThreadSpecific.h to be copied into + $WebKitOutputDir. + + * wtf/ThreadSpecific.h: Replaced g_tls_key_count with tlsKeyCount() + and g_tls_keys with tlsKeys(). + + (WTF::::ThreadSpecific): + (WTF::::~ThreadSpecific): + (WTF::::get): + (WTF::::set): + (WTF::::destroy): + Updated to use the new functions. + + * wtf/ThreadSpecificWin.cpp: + (WTF::tlsKeyCount): + (WTF::tlsKeys): + Added. + + (WTF::ThreadSpecificThreadExit): Changed to use the new functions. + +2009-03-10 Cameron Zwarich + + Reviewed by Geoff Garen. + + Bug 24291: REGRESSION (r38635): Single line JavaScript comment prevents HTML button click handler execution + + + + Add an extra newline to the end of the body of the program text constructed + by the Function constructor for parsing. This allows single line comments to + be handled correctly by the parser. + + * runtime/FunctionConstructor.cpp: + (JSC::constructFunction): + +2009-03-09 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Bug 24447: REGRESSION (r41508): Google Maps does not complete initialization + + + r41508 actually exposed a pre-existing bug where we were not invalidating the result + register cache at jump targets. This causes problems when condition loads occur in an + expression -- namely through the ?: and || operators. This patch corrects these issues + by marking the target of all forward jumps as being a jump target, and then clears the + result register cache when ever it starts generating code for a targeted instruction. + + I do not believe it is possible to cause this class of failure outside of a single + expression, and expressions only provide forward branches, so this should resolve this + entire class of bug. That said i've included a test case that gets as close as possible + to hitting this bug with a back branch, to hopefully prevent anyone from introducing the + problem in future. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::Label::isUsed): + (JSC::AbstractMacroAssembler::Label::used): + * assembler/X86Assembler.h: + (JSC::X86Assembler::JmpDst::JmpDst): + (JSC::X86Assembler::JmpDst::isUsed): + (JSC::X86Assembler::JmpDst::used): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + +2009-03-09 David Levin + + Reviewed by Darin Adler. + + Bug 23175: String and UString should be able to share a UChar* buffer. + + + Add CrossThreadRefCounted. + + * wtf/CrossThreadRefCounted.h: Added. + (WTF::CrossThreadRefCounted::create): + (WTF::CrossThreadRefCounted::isShared): + (WTF::CrossThreadRefCounted::dataAccessMustBeThreadSafe): + (WTF::CrossThreadRefCounted::mayBePassedToAnotherThread): + (WTF::CrossThreadRefCounted::CrossThreadRefCounted): + (WTF::CrossThreadRefCounted::~CrossThreadRefCounted): + (WTF::CrossThreadRefCounted::ref): + (WTF::CrossThreadRefCounted::deref): + (WTF::CrossThreadRefCounted::release): + (WTF::CrossThreadRefCounted::copy): + (WTF::CrossThreadRefCounted::threadSafeDeref): + * wtf/RefCounted.h: + * wtf/Threading.h: + (WTF::ThreadSafeSharedBase::ThreadSafeSharedBase): + (WTF::ThreadSafeSharedBase::derefBase): + (WTF::ThreadSafeShared::ThreadSafeShared): + (WTF::ThreadSafeShared::deref): + +2009-03-09 Laszlo Gombos + + Reviewed by George Staikos. + + https://bugs.webkit.org/show_bug.cgi?id=24353 + Allow to overrule default build options for Qt build. + + * JavaScriptCore.pri: Allow to overrule ENABLE_JIT + +2009-03-08 Oliver Hunt + + Reviewed by NOBODY (build fix). + + Build fix. + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncConcat): + +2009-03-01 Oliver Hunt + + Reviewed by Cameron Zwarich. + + Bug 24268: RuntimeArray is not a fully implemented JSArray + + + Don't cast a type to JSArray, just because it reportsArray as a supertype + in the JS type system. Doesn't appear feasible to create a testcase + unfortunately as setting up the failure conditions requires internal access + to JSC not present in DRT. + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncConcat): + +2009-03-06 Gavin Barraclough + + Reviewed by Oliver Hunt. + + When preforming an op_mov, preserve any existing register mapping. + + ~0.5% progression on v8 tests x86-64. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + +2009-03-05 Simone Fiorentino + + Bug 24382: request to add SH4 platform + + + + Reviewed by David Kilzer. + + * wtf/Platform.h: Added support for SH4 platform. + +2009-03-05 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Writes of constant values to SF registers should be made with direct memory + writes where possible, rather than moving the value via a hardware register. + + ~3% win on SunSpider tests on x86, ~1.5% win on v8 tests on x86-64. + + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::storePtr): + * assembler/X86Assembler.h: + (JSC::X86Assembler::movq_i32m): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + +2009-03-05 Mark Rowe + + Fix the build. + + Sprinkle "static" around NumberConstructor.cpp in order to please the compiler. + + * runtime/NumberConstructor.cpp: + (JSC::numberConstructorNaNValue): + (JSC::numberConstructorNegInfinity): + (JSC::numberConstructorPosInfinity): + (JSC::numberConstructorMaxValue): + (JSC::numberConstructorMinValue): + +2009-03-04 Mark Rowe + + Reviewed by Oliver Hunt. + + FastMallocZone's enumeration code reports fragmented administration space + + The handling of MALLOC_ADMIN_REGION_RANGE_TYPE in FastMalloc's zone was incorrect. It was attempting + to record the memory containing and individual span as an administrative region, when all memory + allocated via MetaDataAlloc should in fact be recorded. This was causing memory regions allocated + via MetaDataAlloc to appear as "VM_ALLOCATE ?" in vmmap output. They are now correctly reported as + "MALLOC_OTHER" regions associated with the JavaScriptCore FastMalloc zone. + + Memory is allocated via MetaDataAlloc from two locations: PageHeapAllocator, and TCMalloc_PageMap{2,3}. + These two cases are handled differently. + + PageHeapAllocator is extended to keep a linked list of memory regions that it has allocated. The + first object in an allocated region contains the link to the previously allocated region. To record + the administrative regions of a PageHeapAllocator we can simply walk the linked list and record + each allocated region we encounter. + + TCMalloc_PageMaps allocate memory via MetaDataAlloc to store each level of the radix tree. To record + the administrative regions of a TCMalloc_PageMap we walk the tree and record the storage used for nodes + at each position rather than the nodes themselves. + + A small performance improvement is achieved by coalescing adjacent memory regions inside the PageMapMemoryUsageRecorder + so that fewer calls in to the range recorder are necessary. We further reduce the number of calls to the + range recorder by aggregating the in-use ranges of a given memory region into a local buffer before recording + them with a single call. A similar approach is also used by AdminRegionRecorder. + + * wtf/FastMalloc.cpp: + (WTF::PageHeapAllocator::Init): + (WTF::PageHeapAllocator::New): + (WTF::PageHeapAllocator::recordAdministrativeRegions): + (WTF::TCMallocStats::FreeObjectFinder::isFreeObject): + (WTF::TCMallocStats::PageMapMemoryUsageRecorder::~PageMapMemoryUsageRecorder): + (WTF::TCMallocStats::PageMapMemoryUsageRecorder::recordPendingRegions): + (WTF::TCMallocStats::PageMapMemoryUsageRecorder::visit): + (WTF::TCMallocStats::AdminRegionRecorder::AdminRegionRecorder): + (WTF::TCMallocStats::AdminRegionRecorder::recordRegion): + (WTF::TCMallocStats::AdminRegionRecorder::visit): + (WTF::TCMallocStats::AdminRegionRecorder::recordPendingRegions): + (WTF::TCMallocStats::AdminRegionRecorder::~AdminRegionRecorder): + (WTF::TCMallocStats::FastMallocZone::enumerate): + (WTF::TCMallocStats::FastMallocZone::FastMallocZone): + (WTF::TCMallocStats::FastMallocZone::init): + * wtf/TCPageMap.h: + (TCMalloc_PageMap2::visitValues): + (TCMalloc_PageMap2::visitAllocations): + (TCMalloc_PageMap3::visitValues): + (TCMalloc_PageMap3::visitAllocations): + +2009-03-04 Antti Koivisto + + Reviewed by Dave Hyatt. + + https://bugs.webkit.org/show_bug.cgi?id=24359 + Repaint throttling mechanism + + Set ENABLE_REPAINT_THROTTLING to 0 by default. + + * wtf/Platform.h: + +2009-03-03 David Kilzer + + WebCore and WebKit should install the same set of headers during installhdrs phase as build phase + + Reviewed by Mark Rowe. + + * Configurations/Base.xcconfig: Defined REAL_PLATFORM_NAME based + on PLATFORM_NAME to work around the missing definition on Tiger. + Updated HAVE_DTRACE to use REAL_PLATFORM_NAME. + +2009-03-03 Kevin McCullough + + Reviewed by Oliver Hunt. + + console.profile() doesn't work without a title + + * profiler/Profiler.cpp: + (JSC::Profiler::startProfiling): assert if there is not title to ensure + we don't start profiling without one. + +2009-03-02 Sam Weinig + + Reviewed by Mark Rowe. + + Enable Geolocation (except on Tiger and Leopard). + + * Configurations/JavaScriptCore.xcconfig: + +2009-03-01 David Kilzer + + Move HAVE_DTRACE check to Base.xcconfig + + Reviewed by Mark Rowe. + + * Configurations/Base.xcconfig: Set HAVE_DTRACE Xcode variable + based on PLATFORM_NAME and MAC_OS_X_VERSION_MAJOR. Also define + it as a preprocessor macro by modifying + GCC_PREPROCESSOR_DEFINITIONS. + * JavaScriptCore.xcodeproj/project.pbxproj: Changed "Generate + DTrace header" script phase to check for HAVE_DTRACE instead of + MACOSX_DEPLOYMENT_TARGET. + * wtf/Platform.h: Removed definition of HAVE_DTRACE macro since + it's defined in Base.xcconfig now. + +2009-03-01 Horia Olaru + + By looking in grammar.y there are only a few types of statement nodes + on which the debugger should stop. + + Removed isBlock and isLoop virtual calls. No need to emit debug hooks in + the "statementListEmitCode" method as long as the necessary hooks can be + added in each "emitCode". + + https://bugs.webkit.org/show_bug.cgi?id=21073 + + Reviewed by Kevin McCullough. + + * parser/Nodes.cpp: + (JSC::ConstStatementNode::emitBytecode): + (JSC::statementListEmitCode): + (JSC::EmptyStatementNode::emitBytecode): + (JSC::ExprStatementNode::emitBytecode): + (JSC::VarStatementNode::emitBytecode): + (JSC::IfNode::emitBytecode): + (JSC::IfElseNode::emitBytecode): + (JSC::DoWhileNode::emitBytecode): + (JSC::WhileNode::emitBytecode): + (JSC::ForNode::emitBytecode): + (JSC::ForInNode::emitBytecode): + (JSC::ContinueNode::emitBytecode): + (JSC::BreakNode::emitBytecode): + (JSC::ReturnNode::emitBytecode): + (JSC::WithNode::emitBytecode): + (JSC::SwitchNode::emitBytecode): + (JSC::LabelNode::emitBytecode): + (JSC::ThrowNode::emitBytecode): + (JSC::TryNode::emitBytecode): + * parser/Nodes.h: + +2009-02-26 Gavin Barraclough + + Reviewed by Geoff Garen. + + Fix bug #23614. Switches on double precision values were incorrectly + truncating the scrutinee value. E.g.: + + switch (1.1) { case 1: print("FAIL"); } + + Was resulting in FAIL. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_switch_imm): + +2009-02-26 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Integer Immediate representation need not be canonical in x86 JIT code. + On x86-64 we already have loosened the requirement that the int immediate + representation in canonical, we should bring x86 into line. + + This patch is a minor (~0.5%) improvement on sunspider & v8-tests, and + should reduce memory footoprint (reduces JIT code size). + + * jit/JIT.cpp: + (JSC::JIT::compileOpStrictEq): + (JSC::JIT::privateCompileSlowCases): + * jit/JIT.h: + (JSC::JIT::emitJumpIfImmediateNumber): + (JSC::JIT::emitJumpIfNotImmediateNumber): + * jit/JITArithmetic.cpp: + (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): + (JSC::JIT::compileBinaryArithOp): + +2009-02-26 Carol Szabo + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=24099 + ARM Compiler Warnings in pcre_exec.cpp + + * pcre/pcre_exec.cpp: + (match): + +2009-02-25 Cameron Zwarich + + Reviewed by Gavin Barraclough. + + Bug 24086: Regression (r40993): WebKit crashes after logging in to lists.zenbe + + + + The numeric sort optimization in r40993 generated bytecode for a function + without generating JIT code. This breaks an assumption in some parts of + the JIT's function calling logic that the presence of a CodeBlock implies + the existence of JIT code. + + In order to fix this, we simply generate JIT code whenever we check whether + a function is a numeric sort function. This only incurs an additional cost + in the case when the function is a numeric sort function, in which case it + is not expensive to generate JIT code for it. + + * runtime/ArrayPrototype.cpp: + (JSC::isNumericCompareFunction): + +2009-02-25 Geoffrey Garen + + Reviewed by Maciej Stachowiak. + + Fixed REGRESSION (r36701): Unable to select + messages on hotmail (24052) + + The bug was that for-in enumeration used a cached prototype chain without + validating that it was up-to-date. + + This led me to refactor prototype chain caching so it was easier to work + with and harder to get wrong. + + After a bit of inlining, this patch is performance-neutral on SunSpider + and the v8 benchmarks. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::tryCachePutByID): + (JSC::Interpreter::tryCacheGetByID): + * jit/JITStubs.cpp: + (JSC::JITStubs::tryCachePutByID): + (JSC::JITStubs::tryCacheGetByID): + (JSC::JITStubs::cti_op_get_by_id_proto_list): Use the new refactored goodness. See + lines beginning with "-" and smile. + + * runtime/JSGlobalObject.h: + (JSC::Structure::prototypeForLookup): A shout out to const. + + * runtime/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::next): We can use a pointer comparison to + see if our cached structure chain is equal to the object's structure chain, + since in the case of a cache hit, we share references to the same structure + chain. + + * runtime/Operations.h: + (JSC::countPrototypeChainEntriesAndCheckForProxies): Use the new refactored + goodness. + + * runtime/PropertyNameArray.h: + (JSC::PropertyNameArray::PropertyNameArray): + (JSC::PropertyNameArray::setShouldCache): + (JSC::PropertyNameArray::shouldCache): Renamed "cacheable" to "shouldCache" + to communicate that the client is specifying a recommendation, not a + capability. + + * runtime/Structure.cpp: + (JSC::Structure::Structure): No need to initialize a RefPtr. + (JSC::Structure::getEnumerablePropertyNames): Moved some code into helper + functions. + + (JSC::Structure::prototypeChain): New centralized accessor for a prototype + chain. Revalidates on every access, since the objects in the prototype + chain may have mutated. + + (JSC::Structure::isValid): Helper function for revalidating a cached + prototype chain. + + (JSC::Structure::getEnumerableNamesFromPropertyTable): + (JSC::Structure::getEnumerableNamesFromClassInfoTable): Factored out of + getEnumerablePropertyNames. + + * runtime/Structure.h: + + * runtime/StructureChain.cpp: + (JSC::StructureChain::StructureChain): + * runtime/StructureChain.h: + (JSC::StructureChain::create): No need for structureChainsAreEqual, since + we use pointer equality now. Refactored StructureChain to make a little + more sense and eliminate special cases for null prototypes. + +2009-02-25 Steve Falkenburg + + Use timeBeginPeriod to enable timing resolution greater than 16ms in command line jsc for Windows. + Allows more accurate reporting of benchmark times via command line jsc.exe. Doesn't affect WebKit's use of JavaScriptCore. + + Reviewed by Adam Roben. + + * jsc.cpp: + (main): + +2009-02-24 Geoffrey Garen + + Build fix? + + * GNUmakefile.am: + +2009-02-24 Mark Rowe + + Reviewed by Oliver Hunt. + + Rename AVAILABLE_AFTER_WEBKIT_VERSION_3_1 (etc.) to match the other macros + + * API/JSBasePrivate.h: + * API/JSContextRef.h: + * API/JSObjectRef.h: + * API/WebKitAvailability.h: + +2009-02-23 Geoffrey Garen + + Reviewed by Sam Weinig. + + Next step in splitting JIT functionality out of the Interpreter class: + Moved vptr storage from Interpreter to JSGlobalData, so it could be shared + between Interpreter and JITStubs, and moved the *Trampoline JIT stubs + into the JITStubs class. Also added a VPtrSet class to encapsulate vptr + hacks during JSGlobalData initialization. + + SunSpider says 0.4% faster. Meh. + + * JavaScriptCore.exp: + * JavaScriptCore.xcodeproj/project.pbxproj: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::Interpreter): + (JSC::Interpreter::tryCacheGetByID): + (JSC::Interpreter::privateExecute): + * interpreter/Interpreter.h: + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + (JSC::JIT::compileCTIMachineTrampolines): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpCallSlowCase): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePatchGetArrayLength): + * jit/JITStubs.cpp: + (JSC::JITStubs::JITStubs): + (JSC::JITStubs::tryCacheGetByID): + (JSC::JITStubs::cti_vm_dontLazyLinkCall): + (JSC::JITStubs::cti_op_get_by_val): + (JSC::JITStubs::cti_op_get_by_val_byte_array): + (JSC::JITStubs::cti_op_put_by_val): + (JSC::JITStubs::cti_op_put_by_val_array): + (JSC::JITStubs::cti_op_put_by_val_byte_array): + (JSC::JITStubs::cti_op_is_string): + * jit/JITStubs.h: + (JSC::JITStubs::ctiArrayLengthTrampoline): + (JSC::JITStubs::ctiStringLengthTrampoline): + (JSC::JITStubs::ctiVirtualCallPreLink): + (JSC::JITStubs::ctiVirtualCallLink): + (JSC::JITStubs::ctiVirtualCall): + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncPop): + (JSC::arrayProtoFuncPush): + * runtime/FunctionPrototype.cpp: + (JSC::functionProtoFuncApply): + * runtime/JSArray.h: + (JSC::isJSArray): + * runtime/JSByteArray.h: + (JSC::asByteArray): + (JSC::isJSByteArray): + * runtime/JSCell.h: + * runtime/JSFunction.h: + * runtime/JSGlobalData.cpp: + (JSC::VPtrSet::VPtrSet): + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::create): + (JSC::JSGlobalData::sharedInstance): + * runtime/JSGlobalData.h: + * runtime/JSString.h: + (JSC::isJSString): + * runtime/Operations.h: + (JSC::jsLess): + (JSC::jsLessEq): + * wrec/WREC.cpp: + (JSC::WREC::Generator::compileRegExp): + +2009-02-23 Csaba Osztrogonac + + Reviewed by Oliver Hunt. + + Bug 23787: Allow JIT to generate SSE2 code if using GCC + + + GCC version of the cpuid check. + + * jit/JITArithmetic.cpp: + (JSC::isSSE2Present): previous assembly code fixed. + +2009-02-23 David Levin + + Reviewed by Alexey Proskuryakov. + + Bug 24047: Need to simplify nested if's in WorkerRunLoop::runInMode + + + * wtf/MessageQueue.h: + (WTF::MessageQueue::infiniteTime): + Allows for one to call waitForMessageFilteredWithTimeout and wait forever. + + (WTF::MessageQueue::alwaysTruePredicate): + (WTF::MessageQueue::waitForMessage): + Made waitForMessage call waitForMessageFilteredWithTimeout, so that there is less + duplicate code. + + (WTF::MessageQueue::waitForMessageFilteredWithTimeout): + + * wtf/ThreadingQt.cpp: + (WTF::ThreadCondition::timedWait): + * wtf/ThreadingWin.cpp: + (WTF::ThreadCondition::timedWait): + Made these two implementations consistent with the pthread and gtk implementations. + Currently, the time calculations would overflow when passed large values. + +2009-02-23 Jeremy Moskovich + + Reviewed by Adam Roben. + + https://bugs.webkit.org/show_bug.cgi?id=24096 + PLATFORM(MAC)->PLATFORM(CF) since we want to use the CF functions in Chrome on OS X. + + * wtf/CurrentTime.cpp: + +2009-02-22 Geoffrey Garen + + Build fix? + + * GNUmakefile.am: + +2009-02-22 Geoffrey Garen + + Build fix. + + * GNUmakefile.am: + +2009-02-22 Geoffrey Garen + + Reviewed by Sam Weinig. + + Next step in splitting JIT functionality out of the Interpreter class: + Created a JITStubs class and renamed Interpreter::cti_* to JITStubs::cti_*. + + Also, moved timeout checking into its own class, located in JSGlobalData, + so both the Interpreter and the JIT could have access to it. + + * JavaScriptCore.exp: + * JavaScriptCore.pri: + * JavaScriptCore.scons: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * interpreter/CallFrame.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::Interpreter): + (JSC::Interpreter::privateExecute): + * interpreter/Interpreter.h: + * interpreter/Register.h: + * jit/JIT.cpp: + (JSC::): + (JSC::JIT::emitTimeoutCheck): + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArithSlow_op_lshift): + (JSC::JIT::compileFastArithSlow_op_rshift): + (JSC::JIT::compileFastArithSlow_op_bitand): + (JSC::JIT::compileFastArithSlow_op_mod): + (JSC::JIT::compileFastArith_op_mod): + (JSC::JIT::compileFastArithSlow_op_post_inc): + (JSC::JIT::compileFastArithSlow_op_post_dec): + (JSC::JIT::compileFastArithSlow_op_pre_inc): + (JSC::JIT::compileFastArithSlow_op_pre_dec): + (JSC::JIT::compileFastArith_op_add): + (JSC::JIT::compileFastArith_op_mul): + (JSC::JIT::compileFastArith_op_sub): + (JSC::JIT::compileBinaryArithOpSlowCase): + (JSC::JIT::compileFastArithSlow_op_add): + (JSC::JIT::compileFastArithSlow_op_mul): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpCallSlowCase): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compilePutByIdHotPath): + (JSC::JIT::compileGetByIdSlowCase): + (JSC::JIT::compilePutByIdSlowCase): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::patchGetByIdSelf): + (JSC::JIT::patchPutByIdReplace): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdSelf): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdChain): + (JSC::JIT::privateCompilePutByIdReplace): + * jit/JITStubs.cpp: + (JSC::JITStubs::tryCachePutByID): + (JSC::JITStubs::tryCacheGetByID): + (JSC::JITStubs::cti_op_convert_this): + (JSC::JITStubs::cti_op_end): + (JSC::JITStubs::cti_op_add): + (JSC::JITStubs::cti_op_pre_inc): + (JSC::JITStubs::cti_timeout_check): + (JSC::JITStubs::cti_register_file_check): + (JSC::JITStubs::cti_op_loop_if_less): + (JSC::JITStubs::cti_op_loop_if_lesseq): + (JSC::JITStubs::cti_op_new_object): + (JSC::JITStubs::cti_op_put_by_id_generic): + (JSC::JITStubs::cti_op_get_by_id_generic): + (JSC::JITStubs::cti_op_put_by_id): + (JSC::JITStubs::cti_op_put_by_id_second): + (JSC::JITStubs::cti_op_put_by_id_fail): + (JSC::JITStubs::cti_op_get_by_id): + (JSC::JITStubs::cti_op_get_by_id_second): + (JSC::JITStubs::cti_op_get_by_id_self_fail): + (JSC::JITStubs::cti_op_get_by_id_proto_list): + (JSC::JITStubs::cti_op_get_by_id_proto_list_full): + (JSC::JITStubs::cti_op_get_by_id_proto_fail): + (JSC::JITStubs::cti_op_get_by_id_array_fail): + (JSC::JITStubs::cti_op_get_by_id_string_fail): + (JSC::JITStubs::cti_op_instanceof): + (JSC::JITStubs::cti_op_del_by_id): + (JSC::JITStubs::cti_op_mul): + (JSC::JITStubs::cti_op_new_func): + (JSC::JITStubs::cti_op_call_JSFunction): + (JSC::JITStubs::cti_op_call_arityCheck): + (JSC::JITStubs::cti_vm_dontLazyLinkCall): + (JSC::JITStubs::cti_vm_lazyLinkCall): + (JSC::JITStubs::cti_op_push_activation): + (JSC::JITStubs::cti_op_call_NotJSFunction): + (JSC::JITStubs::cti_op_create_arguments): + (JSC::JITStubs::cti_op_create_arguments_no_params): + (JSC::JITStubs::cti_op_tear_off_activation): + (JSC::JITStubs::cti_op_tear_off_arguments): + (JSC::JITStubs::cti_op_profile_will_call): + (JSC::JITStubs::cti_op_profile_did_call): + (JSC::JITStubs::cti_op_ret_scopeChain): + (JSC::JITStubs::cti_op_new_array): + (JSC::JITStubs::cti_op_resolve): + (JSC::JITStubs::cti_op_construct_JSConstruct): + (JSC::JITStubs::cti_op_construct_NotJSConstruct): + (JSC::JITStubs::cti_op_get_by_val): + (JSC::JITStubs::cti_op_get_by_val_byte_array): + (JSC::JITStubs::cti_op_resolve_func): + (JSC::JITStubs::cti_op_sub): + (JSC::JITStubs::cti_op_put_by_val): + (JSC::JITStubs::cti_op_put_by_val_array): + (JSC::JITStubs::cti_op_put_by_val_byte_array): + (JSC::JITStubs::cti_op_lesseq): + (JSC::JITStubs::cti_op_loop_if_true): + (JSC::JITStubs::cti_op_negate): + (JSC::JITStubs::cti_op_resolve_base): + (JSC::JITStubs::cti_op_resolve_skip): + (JSC::JITStubs::cti_op_resolve_global): + (JSC::JITStubs::cti_op_div): + (JSC::JITStubs::cti_op_pre_dec): + (JSC::JITStubs::cti_op_jless): + (JSC::JITStubs::cti_op_not): + (JSC::JITStubs::cti_op_jtrue): + (JSC::JITStubs::cti_op_post_inc): + (JSC::JITStubs::cti_op_eq): + (JSC::JITStubs::cti_op_lshift): + (JSC::JITStubs::cti_op_bitand): + (JSC::JITStubs::cti_op_rshift): + (JSC::JITStubs::cti_op_bitnot): + (JSC::JITStubs::cti_op_resolve_with_base): + (JSC::JITStubs::cti_op_new_func_exp): + (JSC::JITStubs::cti_op_mod): + (JSC::JITStubs::cti_op_less): + (JSC::JITStubs::cti_op_neq): + (JSC::JITStubs::cti_op_post_dec): + (JSC::JITStubs::cti_op_urshift): + (JSC::JITStubs::cti_op_bitxor): + (JSC::JITStubs::cti_op_new_regexp): + (JSC::JITStubs::cti_op_bitor): + (JSC::JITStubs::cti_op_call_eval): + (JSC::JITStubs::cti_op_throw): + (JSC::JITStubs::cti_op_get_pnames): + (JSC::JITStubs::cti_op_next_pname): + (JSC::JITStubs::cti_op_push_scope): + (JSC::JITStubs::cti_op_pop_scope): + (JSC::JITStubs::cti_op_typeof): + (JSC::JITStubs::cti_op_is_undefined): + (JSC::JITStubs::cti_op_is_boolean): + (JSC::JITStubs::cti_op_is_number): + (JSC::JITStubs::cti_op_is_string): + (JSC::JITStubs::cti_op_is_object): + (JSC::JITStubs::cti_op_is_function): + (JSC::JITStubs::cti_op_stricteq): + (JSC::JITStubs::cti_op_nstricteq): + (JSC::JITStubs::cti_op_to_jsnumber): + (JSC::JITStubs::cti_op_in): + (JSC::JITStubs::cti_op_push_new_scope): + (JSC::JITStubs::cti_op_jmp_scopes): + (JSC::JITStubs::cti_op_put_by_index): + (JSC::JITStubs::cti_op_switch_imm): + (JSC::JITStubs::cti_op_switch_char): + (JSC::JITStubs::cti_op_switch_string): + (JSC::JITStubs::cti_op_del_by_val): + (JSC::JITStubs::cti_op_put_getter): + (JSC::JITStubs::cti_op_put_setter): + (JSC::JITStubs::cti_op_new_error): + (JSC::JITStubs::cti_op_debug): + (JSC::JITStubs::cti_vm_throw): + * jit/JITStubs.h: + (JSC::): + * runtime/JSFunction.h: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSGlobalData.h: + * runtime/JSGlobalObject.cpp: + * runtime/JSGlobalObject.h: + * runtime/TimeoutChecker.cpp: Copied from interpreter/Interpreter.cpp. + (JSC::TimeoutChecker::TimeoutChecker): + (JSC::TimeoutChecker::reset): + (JSC::TimeoutChecker::didTimeOut): + * runtime/TimeoutChecker.h: Copied from interpreter/Interpreter.h. + (JSC::TimeoutChecker::setTimeoutInterval): + (JSC::TimeoutChecker::ticksUntilNextCheck): + (JSC::TimeoutChecker::start): + (JSC::TimeoutChecker::stop): + +2009-02-20 Gustavo Noronha Silva + + Unreviewed build fix after r41100. + + * GNUmakefile.am: + +2009-02-20 Oliver Hunt + + Reviewed by Mark Rowe. + + 2==null returns true in 64bit jit + + Code for op_eq_null and op_neq_null was incorrectly performing + a 32bit compare, which truncated the type tag from an integer + immediate, leading to incorrect behaviour. + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::setPtr): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::setPtr): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + +2009-02-19 Geoffrey Garen + + Reviewed by Gavin Barraclough. + + First step in splitting JIT functionality out of the Interpreter class: + Created JITStubs.h/.cpp, and moved Interpreter::cti_* into JITStubs.cpp. + + Functions that the Interpreter and JITStubs share moved to Operations.h/.cpp. + + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::resolveBase): + (JSC::Interpreter::checkTimeout): + (JSC::Interpreter::privateExecute): + * interpreter/Interpreter.h: + * jit/JITStubs.cpp: Copied from interpreter/Interpreter.cpp. + (JSC::Interpreter::cti_op_resolve_base): + * jit/JITStubs.h: Copied from interpreter/Interpreter.h. + * runtime/Operations.cpp: + (JSC::jsAddSlowCase): + (JSC::jsTypeStringForValue): + (JSC::jsIsObjectType): + (JSC::jsIsFunctionType): + * runtime/Operations.h: + (JSC::jsLess): + (JSC::jsLessEq): + (JSC::jsAdd): + (JSC::cachePrototypeChain): + (JSC::countPrototypeChainEntriesAndCheckForProxies): + (JSC::resolveBase): + +2009-02-19 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Fix for x86-64. Where the JavaScriptCore text segment lies outside + a 2gb range of the heap containing JIT generated code, callbacks + from JIT code to the stub functions in Interpreter will be incorrectly + linked. + + No performance impact on Sunspider, 1% regression on v8-tests, + due to a 3% regression on richards. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::Call::Call): + (JSC::AbstractMacroAssembler::Jump::link): + (JSC::AbstractMacroAssembler::Jump::linkTo): + (JSC::AbstractMacroAssembler::CodeLocationJump::relink): + (JSC::AbstractMacroAssembler::CodeLocationCall::relink): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): + (JSC::AbstractMacroAssembler::PatchBuffer::link): + (JSC::AbstractMacroAssembler::PatchBuffer::linkTailRecursive): + (JSC::AbstractMacroAssembler::differenceBetween): + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::tailRecursiveCall): + (JSC::MacroAssembler::makeTailRecursiveCall): + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::call): + * assembler/MacroAssemblerX86Common.h: + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::call): + (JSC::MacroAssemblerX86_64::moveWithPatch): + (JSC::MacroAssemblerX86_64::branchPtrWithPatch): + (JSC::MacroAssemblerX86_64::storePtrWithPatch): + * assembler/X86Assembler.h: + (JSC::X86Assembler::jmp_r): + (JSC::X86Assembler::linkJump): + (JSC::X86Assembler::patchJump): + (JSC::X86Assembler::patchCall): + (JSC::X86Assembler::linkCall): + (JSC::X86Assembler::patchAddress): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::tryCTICachePutByID): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): + (JSC::JIT::compileBinaryArithOp): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompileGetByIdSelf): + (JSC::JIT::privateCompilePutByIdReplace): + +2009-02-18 Geoffrey Garen + + Reviewed by Oliver Hunt. + + Simplified .call and .apply in preparation for optimizing them. Also, + a little cleanup. + + * runtime/FunctionPrototype.cpp: + (JSC::functionProtoFuncApply): + (JSC::functionProtoFuncCall): No need to do any specific conversion on + 'this' -- op_convert_this will do it if necessary. + + * runtime/JSImmediate.cpp: + (JSC::JSImmediate::toThisObject): Slightly relaxed the rules on + toThisObject to allow for 'undefined', which can be passed through + .call and .apply. + +2009-02-19 David Levin + + Reviewed by Alexey Proskuryakov. + + Bug 23976: MessageQueue needs a way to wait for a message that satisfies an arbitrary criteria. + + + * wtf/Deque.h: + (WTF::Deque::findIf): + * wtf/MessageQueue.h: + (WTF::MessageQueue::waitForMessageFiltered): + +2009-02-18 David Levin + + Reviewed by Alexey Proskuryakov. + + Bug 23974: Deque::Remove would be a useful method. + + + Add Deque::remove and DequeIteratorBase::operator=. + + Why was operator= added? Every concrete iterator (DequeIterator..DequeConstReverseIterator) + was calling DequeIteratorBase::assign(), which called Base::operator=(). Base::operator=() + was not implemented. This went unnoticed because the iterator copy code has been unused. + + * wtf/Deque.h: + (WTF::Deque::remove): + (WTF::DequeIteratorBase::removeFromIteratorsList): + (WTF::DequeIteratorBase::operator=): + (WTF::DequeIteratorBase::~DequeIteratorBase): + +2009-02-18 Gustavo Noronha Silva + + Reviewed by Holger Freyther. + + Fix symbols.filter location, and add other missing files to the + autotools build, so that make dist works. + + * GNUmakefile.am: + +2009-02-17 Geoffrey Garen + + Reviewed by Sam Weinig. + + Fixed failure in js1_5/Regress/regress-168347.js, as seen on the Oliver + bot. + + Technically, both behaviors are OK, but we might as well keep this test + passing. + + * runtime/FunctionPrototype.cpp: + (JSC::insertSemicolonIfNeeded): No need to add a trailing semicolon + after a trailing '}', since '}' ends a block, indicating the end of a + statement. + +2009-02-17 Geoffrey Garen + + Build fix. + + * runtime/FunctionPrototype.cpp: + +2009-02-17 Oliver Hunt + + Reviewed by Geoff Garen. + + Add assertion to guard against oversized pc relative calls. + + * assembler/X86Assembler.h: + (JSC::X86Assembler::link): + +2009-02-17 Geoffrey Garen + + Reviewed by Sam Weinig. + + Fixed REGRESSION: http://www.amnestyusa.org/ + fails to load. + + amnestyusa.org uses the Optimist JavaScript library, which adds event + listeners by concatenating string-ified functions. This is only sure to + be syntactically valid if the string-ified functions end in semicolons. + + * parser/Lexer.cpp: + (JSC::Lexer::isWhiteSpace): + * parser/Lexer.h: + (JSC::Lexer::isWhiteSpace): + (JSC::Lexer::isLineTerminator): Added some helper functions for examining + whitespace. + + * runtime/FunctionPrototype.cpp: + (JSC::appendSemicolonIfNeeded): + (JSC::functionProtoFuncToString): When string-ifying a function, insert + a semicolon in the last non-whitespace position, if one doesn't already exist. + +2009-02-16 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + Roll out r41022 as it breaks qt and gtk builds + + * jit/JITArithmetic.cpp: + (JSC::isSSE2Present): + +2009-02-16 Sam Weinig + + Reviewed by Geoffrey Garen. + + Fix for + REGRESSION (r36779): Adding link, images, flash in TinyMCE blocks entire page (21382) + + No performance regression. + + * runtime/Arguments.cpp: + (JSC::Arguments::fillArgList): Add codepath for when the "length" property has been + overridden. + +2009-02-16 Mark Rowe + + Build fix. + + * wtf/FastMalloc.cpp: + (WTF::TCMallocStats::): + (WTF::TCMallocStats::FastMallocZone::FastMallocZone): + +2009-02-16 Csaba Osztrogonac + + Reviewed by Oliver Hunt. + + Bug 23787: Allow JIT to generate SSE2 code if using GCC + + + GCC version of the cpuid check. + + * jit/JITArithmetic.cpp: + (JSC::isSSE2Present): GCC assembly code added. + 6.6% progression on x86 Linux with JIT and WREC on SunSpider if using SSE2 capable machine. + +2009-02-13 Adam Treat + + Reviewed by George Staikos. + + https://bugs.webkit.org/show_bug.cgi?id=23960 + Crash Fix. + + Don't depend on 'initializeThreading()' to come before a call to 'isMainThread()' + as QtWebKit only calls 'initializeThreading()' during QWebPage construction. + + A client app may well make a call to QWebSettings::iconForUrl() for instance + before creating a QWebPage and that call to QWebSettings triggers an + ASSERT(isMainThread()) deep within WebCore. + + * wtf/ThreadingQt.cpp: + (WTF::isMainThread): + +2009-02-13 Gavin Barraclough + + Reviewed by Darin Adler. + + Some data in the instruction stream is potentially uninitialized - fix this. + + Change the OperandTypes constructor so that uninitialized memory in the int + is zeroed, and modify the Instruction constructor taking an Opcode so that + if !HAVE(COMPUTED_GOTO) (i.e. when Opcode is an enum, and is potentially only + a byte) it zeros the Instruction first before writing the opcode. + + * bytecode/Instruction.h: + (JSC::Instruction::Instruction): + * parser/ResultType.h: + (JSC::OperandTypes::OperandTypes): + +2009-02-13 Geoffrey Garen + + Build fix for non_JIT platforms. + + * bytecode/CodeBlock.h: + (JSC::CodeBlock::setIsNumericCompareFunction): + (JSC::CodeBlock::isNumericCompareFunction): + +2009-02-13 Geoffrey Garen + + Reviewed by Darin Adler. + + Fixed Optimize sort by JS numeric comparison + function not to run the comparison function + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::CodeBlock): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::setIsNumericCompareFunction): + (JSC::CodeBlock::isNumericCompareFunction): Added the ability to track + whether a CodeBlock performs a sort-like numeric comparison. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::generate): Set the isNumericCompareFunction bit + after compiling. + + * parser/Nodes.cpp: + (JSC::FunctionBodyNode::emitBytecode): Fixed a bug that caused us to + codegen an extra return at the end of all functions (eek!), since this + made it harder / weirder to detect the numeric comparison pattern in + bytecode. + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncSort): Use the isNumericCompareFunction bit to do + a faster sort if we can. + + * runtime/FunctionConstructor.cpp: + (JSC::extractFunctionBody): + (JSC::constructFunction): + * runtime/FunctionConstructor.h: Renamed and exported extractFunctionBody for + use in initializing lazyNumericCompareFunction. + + * runtime/JSArray.cpp: + (JSC::compareNumbersForQSort): + (JSC::compareByStringPairForQSort): + (JSC::JSArray::sortNumeric): + (JSC::JSArray::sort): + * runtime/JSArray.h: Added a fast numeric sort. Renamed ArrayQSortPair + to be more specific since we do different kinds of qsort now. + + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::numericCompareFunction): + (JSC::JSGlobalData::ClientData::~ClientData): + * runtime/JSGlobalData.h: Added helper data for computing the + isNumericCompareFunction bit. + +2009-02-13 Darin Adler + + * Configurations/JavaScriptCore.xcconfig: Undo accidental commit of this file. + +2009-02-12 Darin Adler + + Reviewed by Oliver Hunt and Alexey Proskuryakov. + + Speed up a couple string functions. + + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncIndexOf): Added a fast path for cases where the second + argument is either missing or an integer. + (JSC::stringProtoFuncBig): Use jsNontrivialString since the string is guaranteed + to be 2 or more characters long. + (JSC::stringProtoFuncSmall): Ditto. + (JSC::stringProtoFuncBlink): Ditto. + (JSC::stringProtoFuncBold): Ditto. + (JSC::stringProtoFuncItalics): Ditto. + (JSC::stringProtoFuncStrike): Ditto. + (JSC::stringProtoFuncSub): Ditto. + (JSC::stringProtoFuncSup): Ditto. + (JSC::stringProtoFuncFontcolor): Ditto. + (JSC::stringProtoFuncFontsize): Make the fast path Sam recently added even faster + by avoiding all but the minimum memory allocation. + (JSC::stringProtoFuncAnchor): Use jsNontrivialString. + (JSC::stringProtoFuncLink): Added a fast path. + + * runtime/UString.cpp: + (JSC::UString::find): Added a fast path for single-character search strings. + +2009-02-13 David Levin + + Reviewed by Darin Adler. + + Bug 23926: Race condition in callOnMainThreadAndWait + + + * wtf/MainThread.cpp: + Removed callOnMainThreadAndWait since it isn't used. + +2009-02-13 Oliver Hunt + + Reviewed by Jon Honeycutt. + + Math.random is really slow on windows. + + Math.random calls WTF::randomNumber which is implemented as + the secure rand_s on windows. Unfortunately rand_s is an order + of magnitude slower than arc4random. For this reason I've + added "weakRandomNumber" for use by JavaScript's Math Object. + In the long term we should look at using our own secure PRNG + in place of the system, but this will do for now. + + 30% win on SunSpider on Windows, resolving most of the remaining + disparity vs. Mac. + + * runtime/MathObject.cpp: + (JSC::MathObject::MathObject): + (JSC::mathProtoFuncRandom): + * wtf/RandomNumber.cpp: + (WTF::weakRandomNumber): + (WTF::randomNumber): + * wtf/RandomNumber.h: + * wtf/RandomNumberSeed.h: + (WTF::initializeWeakRandomNumberGenerator): + +2009-02-12 Mark Rowe + + Fix the build for other platforms. + + * wtf/RandomNumber.cpp: + (WTF::randomNumber): + +2009-02-12 Gavin Barraclough + + Reviewed by Sam Weinig. + + Remove (/reduce) use of hard-wired register names from the JIT. + Currently there is no abstraction of registers used in the JIT, + which has a number of negative consequences. Hard-wiring x86 + register names makes the JIT less portable to other platforms, + and prevents us from performing dynamic register allocation to + attempt to maintain more temporary values in machine registers. + (The latter will be more important on x86-64, where we have more + registers to make use of). + + Also, remove MacroAssembler::mod32. This was not providing a + useful abstraction, and was not in keeping with the rest of the + MacroAssembler interface, in having specific register requirements. + + * assembler/MacroAssemblerX86Common.h: + * jit/JIT.cpp: + (JSC::JIT::compileOpStrictEq): + (JSC::JIT::emitSlowScriptCheck): + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_lshift): + (JSC::JIT::compileFastArithSlow_op_lshift): + (JSC::JIT::compileFastArith_op_rshift): + (JSC::JIT::compileFastArithSlow_op_rshift): + (JSC::JIT::compileFastArith_op_bitand): + (JSC::JIT::compileFastArithSlow_op_bitand): + (JSC::JIT::compileFastArith_op_mod): + (JSC::JIT::compileFastArithSlow_op_mod): + (JSC::JIT::compileFastArith_op_post_inc): + (JSC::JIT::compileFastArithSlow_op_post_inc): + (JSC::JIT::compileFastArith_op_post_dec): + (JSC::JIT::compileFastArithSlow_op_post_dec): + (JSC::JIT::compileFastArith_op_pre_inc): + (JSC::JIT::compileFastArithSlow_op_pre_inc): + (JSC::JIT::compileFastArith_op_pre_dec): + (JSC::JIT::compileFastArithSlow_op_pre_dec): + (JSC::JIT::compileFastArith_op_add): + (JSC::JIT::compileFastArith_op_mul): + (JSC::JIT::compileFastArith_op_sub): + (JSC::JIT::compileBinaryArithOp): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCallInitializeCallFrame): + (JSC::JIT::compileOpCallSetupArgs): + (JSC::JIT::compileOpCallEvalSetupArgs): + (JSC::JIT::compileOpConstructSetupArgs): + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpCallSlowCase): + * jit/JITInlineMethods.h: + (JSC::JIT::emitGetVirtualRegister): + (JSC::JIT::emitPutVirtualRegister): + (JSC::JIT::emitNakedCall): + (JSC::JIT::restoreArgumentReference): + (JSC::JIT::restoreArgumentReferenceForTrampoline): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compilePutByIdHotPath): + (JSC::JIT::compileGetByIdSlowCase): + (JSC::JIT::compilePutByIdSlowCase): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdSelf): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + (JSC::JIT::privateCompilePutByIdReplace): + +2009-02-12 Horia Olaru + + Reviewed by Oliver Hunt. + + https://bugs.webkit.org/show_bug.cgi?id=23400 + + When throwing an exception within an eval argument string, the dst parameter was + modified in the functions below and the return value for eval was altered. Changed + the emitNode call in JSC::ThrowNode::emitBytecode to use a temporary register + to store its results instead of dst. The JSC::FunctionCallResolveNode::emitBytecode + would load the function within the dst registry, also altering the result returned + by eval. Replaced it with another temporary. + + * parser/Nodes.cpp: + (JSC::FunctionCallResolveNode::emitBytecode): + (JSC::ThrowNode::emitBytecode): + +2009-02-12 Sam Weinig + + Reviewed by Geoffrey Garen. + + Speed up String.prototype.fontsize. + + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncFontsize): Specialize for defined/commonly used values. + +2009-02-12 Geoffrey Garen + + Reviewed by Sam Weinig. + + Correctness fix. + + * wtf/RandomNumber.cpp: + (WTF::randomNumber): Divide by the maximum representable value, which + is different on each platform now, to get values between 0 and 1. + +2009-02-12 Geoffrey Garen + + Build fix. + + * wtf/RandomNumber.cpp: + (WTF::randomNumber): + +2009-02-12 Geoffrey Garen + + Reviewed by Sam Weinig. + + Fixed . + + * wtf/RandomNumber.cpp: + (WTF::randomNumber): Make only one call to the random number generator + on platforms where the generator is cryptographically secure. The value + of randomness over and above cryptographically secure randomness is not + clear, and it caused some performance problems. + +2009-02-12 Adam Roben + + Fix lots of Perl warnings when building JavaScriptCoreGenerated on + Windows + + Reviewed by John Sullivan. + + * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: + Create the docs/ directory so that we can write bytecode.html into it. + This matches what JavaScriptCore.xcodeproj does. + +2009-02-12 Simon Hausmann + + Rubber-stamped by Lars. + + Re-enable the JIT in the Qt build with -fno-stack-protector on Linux. + + * JavaScriptCore.pri: + +2009-02-11 Dmitry Titov + + Reviewed by Alexey Proskuryakov. + + https://bugs.webkit.org/show_bug.cgi?id=23705 + Fix the UI freeze caused by Worker generating a flood of messages. + Measure time we spend in executing posted work items. If too much time is spent + without returning to the run loop, exit and reschedule. + + * wtf/MainThread.h: + Added initializeMainThreadPlatform() to initialize low-level mechanism for posting + work items from thread to thread. This removes #ifdefs for WIN and CHROMIUM from platform-independent code. + + * wtf/MainThread.cpp: + (WTF::initializeMainThread): + (WTF::dispatchFunctionsFromMainThread): + Instead of dispatching all work items in the queue, dispatch them one by one + and measure elapsed time. After a threshold, reschedule and quit. + + (WTF::callOnMainThread): + (WTF::callOnMainThreadAndWait): + Only schedule dispatch if the queue was empty - to avoid many posted messages in the run loop queue. + + * wtf/mac/MainThreadMac.mm: + (WTF::scheduleDispatchFunctionsOnMainThread): + Use static instance of the mainThreadCaller instead of allocating and releasing it each time. + (WTF::initializeMainThreadPlatform): + * wtf/gtk/MainThreadChromium.cpp: + (WTF::initializeMainThreadPlatform): + * wtf/gtk/MainThreadGtk.cpp: + (WTF::initializeMainThreadPlatform): + * wtf/qt/MainThreadQt.cpp: + (WTF::initializeMainThreadPlatform): + * wtf/win/MainThreadWin.cpp: + (WTF::initializeMainThreadPlatform): + * wtf/wx/MainThreadWx.cpp: + (WTF::initializeMainThreadPlatform): + +2009-02-11 Sam Weinig + + Reviewed by Gavin Barraclough. + + Style cleanup. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::CodeLocationCommon::CodeLocationCommon): + (JSC::AbstractMacroAssembler::CodeLocationCommon::operator bool): + (JSC::AbstractMacroAssembler::CodeLocationCommon::reset): + (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForSwitch): + (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForExceptionHandler): + (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForJSR): + (JSC::AbstractMacroAssembler::CodeLocationLabel::getJumpDestination): + (JSC::AbstractMacroAssembler::CodeLocationJump::relink): + (JSC::AbstractMacroAssembler::CodeLocationJump::CodeLocationJump): + (JSC::AbstractMacroAssembler::CodeLocationCall::relink): + (JSC::AbstractMacroAssembler::CodeLocationCall::calleeReturnAddressValue): + (JSC::AbstractMacroAssembler::CodeLocationCall::CodeLocationCall): + (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch): + (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::CodeLocationDataLabel32): + (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch): + (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::ProcessorReturnAddress): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::operator void*): + (JSC::AbstractMacroAssembler::PatchBuffer::link): + (JSC::::CodeLocationCommon::labelAtOffset): + (JSC::::CodeLocationCommon::jumpAtOffset): + (JSC::::CodeLocationCommon::callAtOffset): + (JSC::::CodeLocationCommon::dataLabelPtrAtOffset): + (JSC::::CodeLocationCommon::dataLabel32AtOffset): + +2009-02-11 Sam Weinig + + Reviewed by Gavin Barraclough. + + * assembler/AbstractMacroAssembler.h: Fix comments. + +2009-02-11 Alexey Proskuryakov + + Trying to fix wx build. + + * bytecode/JumpTable.h: Include "MacroAssembler.h", not . + * jscore.bkl: Added assembler directory to search paths. + +2009-02-10 Gavin Barraclough + + Build + fix. + (Narrow + changelog + for + dhyatt). + + * bytecode/Instruction.h: + (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set): + (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList): + +2009-02-10 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Reduce use of void* / reinterpret_cast in JIT repatching code, + add strong types for Calls and for the various types of pointers + we retain into the JIT generated instruction stream. + + No performance impact. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::ImmPtr::ImmPtr): + (JSC::AbstractMacroAssembler::ImmPtr::asIntptr): + (JSC::AbstractMacroAssembler::Imm32::Imm32): + (JSC::AbstractMacroAssembler::Label::Label): + (JSC::AbstractMacroAssembler::DataLabelPtr::DataLabelPtr): + (JSC::AbstractMacroAssembler::Call::Call): + (JSC::AbstractMacroAssembler::Call::link): + (JSC::AbstractMacroAssembler::Call::linkTo): + (JSC::AbstractMacroAssembler::Jump::Jump): + (JSC::AbstractMacroAssembler::Jump::linkTo): + (JSC::AbstractMacroAssembler::CodeLocationCommon::CodeLocationCommon): + (JSC::AbstractMacroAssembler::CodeLocationCommon::operator bool): + (JSC::AbstractMacroAssembler::CodeLocationCommon::reset): + (JSC::AbstractMacroAssembler::CodeLocationLabel::CodeLocationLabel): + (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForSwitch): + (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForExceptionHandler): + (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForJSR): + (JSC::AbstractMacroAssembler::CodeLocationLabel::getJumpDestination): + (JSC::AbstractMacroAssembler::CodeLocationJump::CodeLocationJump): + (JSC::AbstractMacroAssembler::CodeLocationJump::relink): + (JSC::AbstractMacroAssembler::CodeLocationCall::CodeLocationCall): + (JSC::AbstractMacroAssembler::CodeLocationCall::relink): + (JSC::AbstractMacroAssembler::CodeLocationCall::calleeReturnAddressValue): + (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::CodeLocationDataLabel32): + (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch): + (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr): + (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::ProcessorReturnAddress): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::operator void*): + (JSC::AbstractMacroAssembler::PatchBuffer::entry): + (JSC::AbstractMacroAssembler::PatchBuffer::trampolineAt): + (JSC::AbstractMacroAssembler::PatchBuffer::link): + (JSC::AbstractMacroAssembler::PatchBuffer::linkTailRecursive): + (JSC::AbstractMacroAssembler::PatchBuffer::patch): + (JSC::AbstractMacroAssembler::PatchBuffer::locationOf): + (JSC::AbstractMacroAssembler::PatchBuffer::returnAddressOffset): + (JSC::AbstractMacroAssembler::differenceBetween): + (JSC::::CodeLocationCommon::labelAtOffset): + (JSC::::CodeLocationCommon::jumpAtOffset): + (JSC::::CodeLocationCommon::callAtOffset): + (JSC::::CodeLocationCommon::dataLabelPtrAtOffset): + (JSC::::CodeLocationCommon::dataLabel32AtOffset): + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::call): + * assembler/X86Assembler.h: + (JSC::X86Assembler::getCallReturnOffset): + * bytecode/CodeBlock.h: + (JSC::CallLinkInfo::CallLinkInfo): + (JSC::getStructureStubInfoReturnLocation): + (JSC::getCallLinkInfoReturnLocation): + * bytecode/Instruction.h: + (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set): + (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList): + * bytecode/JumpTable.h: + (JSC::StringJumpTable::ctiForValue): + (JSC::SimpleJumpTable::ctiForValue): + * bytecode/StructureStubInfo.h: + (JSC::StructureStubInfo::StructureStubInfo): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitCatch): + (JSC::prepareJumpTableForStringSwitch): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::cti_op_get_by_id_self_fail): + (JSC::getPolymorphicAccessStructureListSlot): + (JSC::Interpreter::cti_op_throw): + (JSC::Interpreter::cti_op_switch_imm): + (JSC::Interpreter::cti_op_switch_char): + (JSC::Interpreter::cti_op_switch_string): + (JSC::Interpreter::cti_vm_throw): + * jit/JIT.cpp: + (JSC::ctiSetReturnAddress): + (JSC::ctiPatchCallByReturnAddress): + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + (JSC::CallRecord::CallRecord): + (JSC::JIT::compileGetByIdSelf): + (JSC::JIT::compileGetByIdProto): + (JSC::JIT::compileGetByIdChain): + (JSC::JIT::compilePutByIdReplace): + (JSC::JIT::compilePutByIdTransition): + (JSC::JIT::compilePatchGetArrayLength): + (JSC::JIT::emitCTICall): + * jit/JITCall.cpp: + (JSC::JIT::unlinkCall): + (JSC::JIT::linkCall): + * jit/JITInlineMethods.h: + (JSC::JIT::emitNakedCall): + (JSC::JIT::emitCTICall_internal): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdSlowCase): + (JSC::JIT::compilePutByIdSlowCase): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::patchGetByIdSelf): + (JSC::JIT::patchPutByIdReplace): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdSelf): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + (JSC::JIT::privateCompilePutByIdReplace): + +2009-02-10 Adam Roben + + Windows build fix after r40813 + + * JavaScriptCore.vcproj/jsc/jsc.vcproj: Added profiler/ to the include + path so that Profiler.h can be found. + +2009-02-09 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Provide a class type for a generated block of JIT code. + Also changes the return address -> bytecode index map to + track the return addess as an unsigned offset into the code + instead of a ptrdiff_t in terms of void**s - the latter is + equal to the actual offset / sizeof(void*), making it a + potentially lossy representation. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::PatchBuffer::returnAddressOffset): + * assembler/X86Assembler.h: + (JSC::X86Assembler::getCallReturnOffset): + * bytecode/CodeBlock.h: + (JSC::CallReturnOffsetToBytecodeIndex::CallReturnOffsetToBytecodeIndex): + (JSC::getCallReturnOffset): + (JSC::CodeBlock::getBytecodeIndex): + (JSC::CodeBlock::jitCode): + (JSC::CodeBlock::callReturnIndexVector): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::execute): + (JSC::Interpreter::cti_vm_dontLazyLinkCall): + (JSC::Interpreter::cti_vm_lazyLinkCall): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + * jit/JIT.h: + (JSC::): + * jit/JITCall.cpp: + (JSC::JIT::linkCall): + * jit/JITCode.h: Added. + (JSC::): + (JSC::JITCode::JITCode): + (JSC::JITCode::operator bool): + (JSC::JITCode::addressForCall): + (JSC::JITCode::offsetOf): + (JSC::JITCode::execute): + +2009-02-09 John Grabowski + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=23856 + Change the definition of "main thread" for Chromium on OSX. + It does not match the DARWIN definition. + + * wtf/ThreadingPthreads.cpp: + (WTF::initializeThreading): + (WTF::isMainThread): + +2009-02-09 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Minor bugfix, incorrect check meant that subtraction causing integer overflow + would be missed on x86-64 JIT. + + * jit/JITArithmetic.cpp: + (JSC::JIT::compileBinaryArithOp): + +2009-02-09 Gavin Barraclough + + Reviewed by Oliver Hunt. + + A more sensible register allocation for x86-64. + + When WREC was ported to x86-64 it stuck with the same register allocation as x86. + This requires registers to be reordered on entry into WREC generated code, since + argument passing is different on x86-64 and x86 (regparm(3)). This patch switches + x86-64 to use a native register allocation, that does not require argument registers + to be reordered. + + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generateEnter): + (JSC::WREC::Generator::generateReturnSuccess): + (JSC::WREC::Generator::generateReturnFailure): + * wrec/WRECGenerator.h: + +2009-02-05 Adam Roben + + Build fix + + Rubberstamped by Sam Weinig. + + * wtf/TypeTraits.h: Include Platform.h, since this header uses macros + defined there. + +2009-02-05 Dimitri Glazkov + + Reviewed by Eric Seidel. + + https://bugs.webkit.org/show_bug.cgi?id=23747 + Add Chromium threading-related files. + + * wtf/MainThread.cpp: Added platform guard to initializeMainThread. + * wtf/chromium/ChromiumThreading.h: Added. + * wtf/chromium/MainThreadChromium.cpp: Added. + (WTF::initializeMainThread): + (WTF::scheduleDispatchFunctionsOnMainThread): + +2009-02-05 David Levin + + Reviewed by Darin Adler. + + Bug 23713: COMPILE_ASSERTS should be moved out of TypeTraits.h and into .cpp file + + + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.scons: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + + * wtf/HashTraits.h: + Remove unnecessary header file that I missed when moving out the type traits form this file. + + * wtf/TypeTraits.cpp: Added. + (WTF::): + * wtf/TypeTraits.h: + Moved the compile asserts into TypeTraits.cpp file. + +2009-02-04 Gavin Barraclough + + Reviewed by Oliver 'the nun' Hunt. + + Add -e switch to jsc to enable evaluation of scripts passed on the command line. + + * jsc.cpp: + (Script::Script): + (runWithScripts): + (printUsageStatement): + (parseArguments): + (jscmain): + +2009-02-04 Gavin Barraclough + + Rubber stamped by Sam 'Big Mac' Weinig. + + * assembler/AbstractMacroAssembler.h: Copied from assembler/MacroAssembler.h. + * assembler/MacroAssemblerX86.h: Copied from assembler/MacroAssembler.h. + * assembler/MacroAssemblerX86Common.h: Copied from assembler/MacroAssembler.h. + * assembler/MacroAssemblerX86_64.h: Copied from assembler/MacroAssembler.h. + +2009-02-04 Gavin Barraclough + + Reviewed by Sam Weinig. + + This patch tidies up the MacroAssembler, cleaning up the code and refactoring out the + platform-specific parts. The MacroAssembler gets split up like a beef burger, with the + platform-agnostic data types being the lower bun (in the form of the class AbstractMacroAssembler), + the plaform-specific code generation forming a big meaty patty of methods like 'add32', + 'branch32', etc (MacroAssemblerX86), and finally topped off with the bun-lid of the + MacroAssembler class itself, providing covenience methods such as the stack peek & poke, + and backwards branch methods, all of which can be described in a platform independent + way using methods from the base class. The AbstractMacroAssembler is templated on the + type of the assembler class that will be used for code generation, and the three layers + are held together with the cocktail stick of inheritance. + + The above description is a slight simplification since the MacroAssemblerX86 is actually + formed from two layers (in effect giving us a kind on bacon double cheeseburger) - with the + bulk of methods that are common between x86 & x86-64 implemented in MacroAssemblerX86Common, + which forms a base class for MacroAssemblerX86 and MacroAssemblerX86_64 (which add the methods + specific to the given platform). + + I'm landing these changes first without splitting the classes across multiple files, + I will follow up with a second patch to split up the file MacroAssembler.h. + + * assembler/MacroAssembler.h: + (JSC::AbstractMacroAssembler::): + (JSC::AbstractMacroAssembler::DataLabelPtr::DataLabelPtr): + (JSC::AbstractMacroAssembler::DataLabelPtr::patch): + (JSC::AbstractMacroAssembler::DataLabel32::DataLabel32): + (JSC::AbstractMacroAssembler::DataLabel32::patch): + (JSC::AbstractMacroAssembler::Label::Label): + (JSC::AbstractMacroAssembler::Jump::Jump): + (JSC::AbstractMacroAssembler::Jump::link): + (JSC::AbstractMacroAssembler::Jump::linkTo): + (JSC::AbstractMacroAssembler::Jump::patch): + (JSC::AbstractMacroAssembler::JumpList::link): + (JSC::AbstractMacroAssembler::JumpList::linkTo): + (JSC::AbstractMacroAssembler::PatchBuffer::link): + (JSC::AbstractMacroAssembler::PatchBuffer::addressOf): + (JSC::AbstractMacroAssembler::PatchBuffer::setPtr): + (JSC::AbstractMacroAssembler::size): + (JSC::AbstractMacroAssembler::copyCode): + (JSC::AbstractMacroAssembler::label): + (JSC::AbstractMacroAssembler::align): + (JSC::AbstractMacroAssembler::differenceBetween): + (JSC::MacroAssemblerX86Common::xor32): + (JSC::MacroAssemblerX86Common::load32WithAddressOffsetPatch): + (JSC::MacroAssemblerX86Common::store32WithAddressOffsetPatch): + (JSC::MacroAssemblerX86Common::move): + (JSC::MacroAssemblerX86Common::swap): + (JSC::MacroAssemblerX86Common::signExtend32ToPtr): + (JSC::MacroAssemblerX86Common::zeroExtend32ToPtr): + (JSC::MacroAssemblerX86Common::branch32): + (JSC::MacroAssemblerX86Common::jump): + (JSC::MacroAssemblerX86_64::add32): + (JSC::MacroAssemblerX86_64::sub32): + (JSC::MacroAssemblerX86_64::load32): + (JSC::MacroAssemblerX86_64::store32): + (JSC::MacroAssemblerX86_64::addPtr): + (JSC::MacroAssemblerX86_64::andPtr): + (JSC::MacroAssemblerX86_64::orPtr): + (JSC::MacroAssemblerX86_64::rshiftPtr): + (JSC::MacroAssemblerX86_64::subPtr): + (JSC::MacroAssemblerX86_64::xorPtr): + (JSC::MacroAssemblerX86_64::loadPtr): + (JSC::MacroAssemblerX86_64::loadPtrWithAddressOffsetPatch): + (JSC::MacroAssemblerX86_64::storePtr): + (JSC::MacroAssemblerX86_64::storePtrWithAddressOffsetPatch): + (JSC::MacroAssemblerX86_64::branchPtr): + (JSC::MacroAssemblerX86_64::branchTestPtr): + (JSC::MacroAssemblerX86_64::branchAddPtr): + (JSC::MacroAssemblerX86_64::branchSubPtr): + (JSC::MacroAssemblerX86_64::branchPtrWithPatch): + (JSC::MacroAssemblerX86_64::storePtrWithPatch): + (JSC::MacroAssemblerX86::add32): + (JSC::MacroAssemblerX86::sub32): + (JSC::MacroAssemblerX86::load32): + (JSC::MacroAssemblerX86::store32): + (JSC::MacroAssemblerX86::branch32): + (JSC::MacroAssemblerX86::branchPtrWithPatch): + (JSC::MacroAssemblerX86::storePtrWithPatch): + (JSC::MacroAssembler::pop): + (JSC::MacroAssembler::peek): + (JSC::MacroAssembler::poke): + (JSC::MacroAssembler::branchPtr): + (JSC::MacroAssembler::branch32): + (JSC::MacroAssembler::branch16): + (JSC::MacroAssembler::branchTestPtr): + (JSC::MacroAssembler::addPtr): + (JSC::MacroAssembler::andPtr): + (JSC::MacroAssembler::orPtr): + (JSC::MacroAssembler::rshiftPtr): + (JSC::MacroAssembler::subPtr): + (JSC::MacroAssembler::xorPtr): + (JSC::MacroAssembler::loadPtr): + (JSC::MacroAssembler::loadPtrWithAddressOffsetPatch): + (JSC::MacroAssembler::storePtr): + (JSC::MacroAssembler::storePtrWithAddressOffsetPatch): + (JSC::MacroAssembler::branchAddPtr): + (JSC::MacroAssembler::branchSubPtr): + * jit/JITArithmetic.cpp: + (JSC::JIT::compileBinaryArithOp): + +2009-02-04 Alexey Proskuryakov + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=23681 + Worker tests crash in debug builds if run --singly + + The crash happened because worker threads continued running while debug-only static objects + were already being destroyed on main thread. + + * runtime/Structure.cpp: Create static debug-only sets in heap, so that they don't get + destroyed. + + * wtf/ThreadingPthreads.cpp: Changed assertions to conventional form. + +2009-02-03 Gavin Barraclough + + Reviewed by Geoff Garen. + + https://bugs.webkit.org/show_bug.cgi?id=23715 + + Simplify MacroAssembler interface, by combining comparison methods. + Seprate operations are combined as follows: + jz32/jnz32/jzPtr/jnzPtr -> branchTest32/branchTestPtr, + j*(Add|Mul|Sub)32/j*(Add|Mul|Sub)Ptr -> branch(Add|Mul|Sub)32/branch(Add|Mul|Sub)Ptr + j*32/j*Ptr (all other two op combparisons) -> branch32/brnachPtr + set*32 -> set32 + + Also, represent the Scale of BaseIndex addresses as a plain enum (0,1,2,3), + instead of as multiplicands (1,2,4,8). + + This patch singificantly reduces replication of code, and increases functionality supported + by the MacroAssembler. No performance impact. + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::): + (JSC::MacroAssembler::branchPtr): + (JSC::MacroAssembler::branchPtrWithPatch): + (JSC::MacroAssembler::branch32): + (JSC::MacroAssembler::branch16): + (JSC::MacroAssembler::branchTestPtr): + (JSC::MacroAssembler::branchTest32): + (JSC::MacroAssembler::branchAddPtr): + (JSC::MacroAssembler::branchAdd32): + (JSC::MacroAssembler::branchMul32): + (JSC::MacroAssembler::branchSubPtr): + (JSC::MacroAssembler::branchSub32): + (JSC::MacroAssembler::set32): + (JSC::MacroAssembler::setTest32): + * assembler/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::jccRel32): + (JSC::X86Assembler::setccOpcode): + (JSC::X86Assembler::cmpq_mr): + (JSC::X86Assembler::setcc_r): + (JSC::X86Assembler::sete_r): + (JSC::X86Assembler::setne_r): + (JSC::X86Assembler::jne): + (JSC::X86Assembler::je): + (JSC::X86Assembler::jl): + (JSC::X86Assembler::jb): + (JSC::X86Assembler::jle): + (JSC::X86Assembler::jbe): + (JSC::X86Assembler::jge): + (JSC::X86Assembler::jg): + (JSC::X86Assembler::ja): + (JSC::X86Assembler::jae): + (JSC::X86Assembler::jo): + (JSC::X86Assembler::jp): + (JSC::X86Assembler::js): + (JSC::X86Assembler::jcc): + (JSC::X86Assembler::X86InstructionFormatter::putModRmSib): + * jit/JIT.cpp: + (JSC::JIT::compileOpStrictEq): + (JSC::JIT::emitSlowScriptCheck): + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_lshift): + (JSC::JIT::compileFastArith_op_mod): + (JSC::JIT::compileFastArith_op_post_inc): + (JSC::JIT::compileFastArith_op_post_dec): + (JSC::JIT::compileFastArith_op_pre_inc): + (JSC::JIT::compileFastArith_op_pre_dec): + (JSC::JIT::compileBinaryArithOp): + (JSC::JIT::compileFastArith_op_add): + (JSC::JIT::compileFastArith_op_mul): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpCallSlowCase): + * jit/JITInlineMethods.h: + (JSC::JIT::checkStructure): + (JSC::JIT::emitJumpIfJSCell): + (JSC::JIT::emitJumpIfNotJSCell): + (JSC::JIT::emitJumpIfImmediateNumber): + (JSC::JIT::emitJumpIfNotImmediateNumber): + (JSC::JIT::emitJumpIfImmediateInteger): + (JSC::JIT::emitJumpIfNotImmediateInteger): + (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compilePutByIdHotPath): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + * runtime/RegExp.cpp: + (JSC::RegExp::match): + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generateEnter): + (JSC::WREC::Generator::generateIncrementIndex): + (JSC::WREC::Generator::generateLoadCharacter): + (JSC::WREC::Generator::generateJumpIfNotEndOfInput): + (JSC::WREC::Generator::generateBackreferenceQuantifier): + (JSC::WREC::Generator::generateNonGreedyQuantifier): + (JSC::WREC::Generator::generateGreedyQuantifier): + (JSC::WREC::Generator::generatePatternCharacterPair): + (JSC::WREC::Generator::generatePatternCharacter): + (JSC::WREC::Generator::generateCharacterClassInvertedRange): + (JSC::WREC::Generator::generateCharacterClassInverted): + (JSC::WREC::Generator::generateAssertionBOL): + (JSC::WREC::Generator::generateAssertionEOL): + (JSC::WREC::Generator::generateAssertionWordBoundary): + (JSC::WREC::Generator::generateBackreference): + +2009-02-03 David Hyatt + + Fix a bug in Vector's shrinkCapacity method. It did not properly copy elements into the inline buffer + when shrinking down from a size that was greater than the inline capacity. + + Reviewed by Maciej + + * wtf/Vector.h: + (WTF::VectorBuffer::VectorBuffer): + (WTF::VectorBuffer::allocateBuffer): + +2009-02-03 Simon Hausmann + + Reviewed by Tor Arne Vestbø. + + Added accessor for JSByteArray storage. + + * runtime/JSByteArray.h: + (JSC::JSByteArray::storage): + +2009-02-03 Dmitry Titov + + Reviewed by Alexey Proskuryakov. + + https://bugs.webkit.org/show_bug.cgi?id=23560 + Implement SharedTimer on WorkerRunLoop + + * JavaScriptCore.exp: + Forgot to expose ThreadCondition::timedWait() in one of previous patches. + +2009-02-02 Oliver Hunt + + Reviewed by Gavin Barraclough. + + REGRESSION: Regular Expressions and character classes, shorthands and ranges + + + In certain circumstances when WREC::Generator::generateCharacterClassInvertedRange invokes + itself recursively, it will incorrectly emit (and thus consume) the next single character + match in the current character class. As WREC uses a binary search this out of sequence + codegen could result in a character match being missed and so cause the regex to produce + incorrect results. + + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generateCharacterClassInvertedRange): + +2009-02-02 Darin Adler + + Reviewed by Dave Hyatt. + + Bug 23676: Speed up uses of reserveCapacity on new vectors by adding a new reserveInitialCapacity + https://bugs.webkit.org/show_bug.cgi?id=23676 + + * API/JSObjectRef.cpp: + (JSObjectCopyPropertyNames): Use reserveInitialCapacity. + * parser/Lexer.cpp: + (JSC::Lexer::Lexer): Ditto. + (JSC::Lexer::clear): Ditto. + + * wtf/Vector.h: Added reserveInitialCapacity, a more efficient version of + reserveCapacity for use when the vector is brand new (still size 0 with no + capacity other than the inline capacity). + +2009-01-30 Mark Rowe + + Rubber-stamped by Oliver Hunt. + + Enable the JIT on Mac OS X x86_64 as it passes all tests. + + * wtf/Platform.h: + +2009-01-30 Oliver Hunt + + Reviewed by Mark Rowe and Sam Weinig. + + Finally fix load() to propagate exceptions correctly. + + * jsc.cpp: + (functionLoad): + +2009-01-30 David Levin + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=23618 + Templated worker tasks should be more error proof to use. + Fix Chromium build. + + * wtf/TypeTraits.h: + (WTF::IsConvertibleToInteger::IsConvertibleToDouble): + Avoid "possible loss of data" warning when using Microsoft's C++ compiler + by avoiding an implicit conversion of int types to doubles. + +2009-01-30 Laszlo Gombos + + Reviewed by Simon Hausmann. + + Bug 23580: GNU mode RVCT compilation support + + + * pcre/pcre_exec.cpp: Use COMPILER(GCC) instead of __GNUC__. + * wtf/FastMalloc.cpp: Ditto. + (WTF::TCMallocStats::): + * wtf/Platform.h: Don't define COMPILER(GCC) with RVCT --gnu. + +2009-01-30 David Levin + + Reviewed by Alexey Proskuryakov. + + Bug 23618: Templated worker tasks should be more error proof to use + + + Add the type traits needed for the generic worker tasks + and compile asserts for them. + + Add a summary header to the TypeTraits.h file to explain what is in there. + + Add a note to explain IsPod's deficiencies. + + * wtf/TypeTraits.h: + +2009-01-30 David Levin + + Reviewed by Alexey Proskuryakov. + + Bug 23616: Various "template helpers" should be consolidated from isolated files in JavaScriptCore. + + + * wtf/TypeTraits.h: Moved RemovePointer, IsPod, IsInteger to this file. + + * wtf/OwnPtr.h: Use RemovePointer from TypeTraits.h. + * wtf/RetainPtr.h: Ditto. + + * wtf/HashTraits.h: Use IsInteger from TypeTraits.h. + + * wtf/VectorTraits.h: Use IsPod from TypeTraits.h. + + * GNUmakefile.am: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + Added TypeTraits.h. + +2009-01-29 Stephanie Lewis + + RS by Oliver Hunt. + + Update the order files. + + * JavaScriptCore.order: + +2009-01-29 Cameron Zwarich + + Reviewed by Oliver Hunt. + + Bug 23551: Crash on page load with profiler enabled and running + + + + Interpreter::execute(FunctionBodyNode*, ...) calls Profiler::didExecute() + with a stale CallFrame. If some part of the scope chain has already been + freed, Profiler::didExecute() will crash when attempting to get the lexical + global object. The fix is to make the didExecute() call use the caller's + CallFrame, not the one made for the function call. In this case, the + willExecute() call should also be changed to match. + + Since this occurs in the actual inspector JS, it is difficult to reduce. + I couldn't make a layout test. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::execute): + +2009-01-28 Sam Weinig + + Reviewed by Gavin Barraclough. + + Fix for + Hang occurs when closing Installer window (iTunes, Aperture) + + * JavaScriptCore.exp: Export JSGlobalData::sharedInstance. + +2009-01-28 Sam Weinig + + Reviewed by Geoff Garen. + + Initial patch by Mark Rowe. + + + REGRESSION (r36006): "out of memory" alert running dromaeo on Windows + + Report the cost of the ArrayStorage vector more accurately/often. + + * runtime/JSArray.cpp: + (JSC::JSArray::JSArray): Report the extra cost even for a filled array + because JSString using the single character optimization and immediates + wont increase the cost themselves. + (JSC::JSArray::putSlowCase): Update the cost when increasing the size of + the array. + (JSC::JSArray::increaseVectorLength): Ditto. + +2009-01-28 Sam Weinig + + Reviewed by Geoff Garen. + + Fix for + REGRESSION (Safari 3-4): Local variable not accessible from Dashcode console or variables view + + Iterating the properties of activation objects accessed through the WebKit debugging + APIs was broken by forced conversion of JSActivation to the global object. To fix this, + we use a proxy activation object that acts more like a normal JSObject. + + * debugger/DebuggerActivation.cpp: Added. + (JSC::DebuggerActivation::DebuggerActivation): + (JSC::DebuggerActivation::mark): + (JSC::DebuggerActivation::className): + (JSC::DebuggerActivation::getOwnPropertySlot): + (JSC::DebuggerActivation::put): + (JSC::DebuggerActivation::putWithAttributes): + (JSC::DebuggerActivation::deleteProperty): + (JSC::DebuggerActivation::getPropertyNames): + (JSC::DebuggerActivation::getPropertyAttributes): + (JSC::DebuggerActivation::defineGetter): + (JSC::DebuggerActivation::defineSetter): + (JSC::DebuggerActivation::lookupGetter): + (JSC::DebuggerActivation::lookupSetter): + * debugger/DebuggerActivation.h: Added. + Proxy JSActivation object for Debugging. + + * runtime/JSActivation.h: + (JSC::JSActivation::isActivationObject): Added. + * runtime/JSObject.h: + (JSC::JSObject::isActivationObject): Added. + +2009-01-28 David Kilzer + + Bug 23490: Remove initialRefCount argument from RefCounted class + + + + Reviewed by Darin Adler. + + RefCountedBase now always starts with a ref count of 1, so there + is no need to pass the initialRefCount into the class anymore. + + * wtf/ByteArray.h: + (WTF::ByteArray::ByteArray): Removed call to RefCounted(1). + * wtf/RefCounted.h: + (WTF::RefCountedBase::RefCountedBase): Changed to start with a + ref count of 1. + (WTF::RefCounted::RefCounted): Removed initialRefCount argument + and removed call to RefCounted(1). + +2009-01-26 Adele Peterson + + Build fix. + + * debugger/Debugger.cpp: + +2009-01-26 Gavin Barraclough + + Reviewed by Darin Adler. + + Fixes for eq null & neq null, on 64-bit JIT. + https://bugs.webkit.org/show_bug.cgi?id=23559 + + This patch degrades 64-bit JIT performance on some benchmarks, + due to the whole not-being-incorrect thing. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + +2009-01-26 Cameron Zwarich + + Reviewed by Gavin Barraclough. + + Bug 23552: Dashcode evaluator no longer works after making ExecStates actual call frames + + + + * JavaScriptCore.exp: + * debugger/Debugger.cpp: + (JSC::evaluateInGlobalCallFrame): Added so that WebScriptCallFrame can + evaluate JS starting from a global call frame. + * debugger/Debugger.h: + +2009-01-25 Mark Rowe + + Rubber-stamped by Dan Bernstein. + + Improve the consistency of settings in our .xcconfig files. + + * Configurations/Base.xcconfig: Enable GCC_OBJC_CALL_CXX_CDTORS to match other projects. + +2009-01-25 Darin Adler + + Reviewed by Mark Rowe. + + Bug 23352: Turn on more compiler warnings in the Mac build + https://bugs.webkit.org/show_bug.cgi?id=23352 + + Turn on the following warnings: + + -Wcast-qual + -Wextra-tokens + -Wformat=2 + -Winit-self + -Wmissing-noreturn + -Wpacked + -Wrendundant-decls + + * Configurations/Base.xcconfig: Added the new warnings. Switched to -Wextra instead of + -W for clarity since we don't have to support the older versions of gcc that require the + old -W syntax. Since we now use -Wformat=2, removed -Wformat-security. Also removed + -Wno-format-y2k since we can have that one on now. + +2009-01-25 Judit Jasz + + Reviewed by Darin Adler. + + Compilation problem fixing + http://bugs.webkit.org/show_bug.cgi?id=23497 + + * jit/JITCall.cpp: + (JSC::JIT::compileOpCall): Use JSValuePtr::encode. + +2009-01-25 Darin Adler + + Reviewed by Sam Weinig. + + Bug 23352: Turn on more compiler warnings in the Mac build + https://bugs.webkit.org/show_bug.cgi?id=23352 + + Fourth patch: Deal with the last few stray warnings. + + * parser/Parser.cpp: Only declare jscyyparse if it's not already declared. + This makes both separate compilation and all-in-one compilation work with the + -Wredundant-decls warning. + +2009-01-25 Darin Adler + + Reviewed by Sam Weinig. + + Bug 23352: Turn on more compiler warnings in the Mac build + https://bugs.webkit.org/show_bug.cgi?id=23352 + + Third patch: Use the noreturn attribute on functions that don't + return to prepare for the use of the -Wmissing-noreturn warning. + + * jit/JITCall.cpp: + (JSC::unreachable): Added NO_RETURN. + * jsc.cpp: + (functionQuit): Ditto. + (printUsageStatement): Ditto. + * wtf/AlwaysInline.h: Added definition of NO_RETURN. + +2009-01-24 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + Force inlining of Lexer::matchPunctuator + + 2.2% win when parsing jQuery, Mootools, Prototype, etc + + * parser/Lexer.h: + +2009-01-23 Gavin Barraclough + + Reviewed by Geoff Garen. + + Fix for + Ensure that callbacks out from the JSC interface are only allowed + to return in reverse-chronological order to that in which they were + made. If we allow earlier callbacks to return first, then this may + result in setions of the RegisterFile in use by another thread + being trampled. + + See uber-comment in JSLock.h for details. + + * runtime/JSLock.cpp: + (JSC::JSLock::DropAllLocks::DropAllLocks): + (JSC::JSLock::DropAllLocks::~DropAllLocks): + +2009-01-23 Darin Adler + + Try to fix WX build. + + * runtime/JSGlobalObjectFunctions.h: Include + for the definition of UChar. + +2009-01-23 Anders Carlsson + + * Configurations/Base.xcconfig: + GCC 4.0 build fix. + + * runtime/JSNumberCell.h: + 64-bit build fix. + +2009-01-23 Anders Carlsson + + Reviewed by Sam Weinig. + + Turn on -Wmissing-prototypes and fix the warnings. + + * API/JSClassRef.cpp: + (clearReferenceToPrototype): + * Configurations/Base.xcconfig: + * runtime/Collector.cpp: + (JSC::getPlatformThreadRegisters): + * runtime/ExceptionHelpers.cpp: + (JSC::createError): + * runtime/JSGlobalObjectFunctions.h: + * runtime/JSNumberCell.h: + * runtime/UString.cpp: + (JSC::initializeStaticBaseString): + (JSC::createRep): + * wtf/FastMalloc.cpp: + * wtf/Threading.cpp: + +2009-01-22 Mark Rowe + + Rubber-stamped by Anders Carlsson. + + Disable GCC_WARN_ABOUT_MISSING_PROTOTYPES temporarily. + + Current versions of Xcode only respect it for C and Objective-C files, + and our code doesn't currently compile if it is applied to C++ and + Objective-C++ files. + + * Configurations/Base.xcconfig: + +2009-01-22 Steve Falkenburg + + https://bugs.webkit.org/show_bug.cgi?id=23489 + + Return currentTime() in correct units for the two early return cases. + + Reviewed by Mark Rowe. + + * wtf/CurrentTime.cpp: + (WTF::currentTime): + +2009-01-22 Sam Weinig + + Reviewed by Mark Rowe. + + Fix for + FastMalloc allocating an extra 4MB of meta-data on 64-bit + + Rely on the fact that on all known x86-64 platforms only use 48 bits of + address space to shrink the initial size of the PageMap from ~4MB to 120K. + For 64-bit we still use a 3-level radix tree, but now each level is only 12 + bits wide. + + No performance change. + + * wtf/FastMalloc.cpp: + (WTF::MapSelector): Add specialization for 64 bit that takes into account the + 16 bits of unused address space on x86-64. + +2009-01-22 Beth Dakin + + Reviewed by Sam Weinig. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=23461 LayoutTests/ + fast/js/numeric-conversion.html is broken, and corresponding + + + The basic problem here is that parseInt(Infinity) should be NaN, + but we were returning 0. NaN matches Safari 3.2.1 and Firefox. + + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncParseInt): + +2009-01-22 Oliver Hunt + + Reviewed by Geoff Garen. + + (r39682-r39736) JSFunFuzz: crash on "(function(){({ x2: x }), })()" + + + Automatic semicolon insertion was resulting in this being accepted in the initial + nodeless parsing, but subsequent reparsing for code generation would fail, leading + to a crash. The solution is to ensure that reparsing a function performs parsing + in the same state as the initial parse. We do this by modifying the saved source + ranges to include rather than exclude the opening and closing braces. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): add an assertion for successful recompile + * parser/Lexer.h: + (JSC::Lexer::sourceCode): include rather than exclude braces. + * parser/Nodes.h: + (JSC::FunctionBodyNode::toSourceString): No need to append braces anymore. + +2009-01-22 Dmitry Titov + + Reviewed by Alexey Proskuryakov. + + https://bugs.webkit.org/show_bug.cgi?id=23373 + + Implement ThreadCondition::timedWait(). + Since we borrow the code for condition variables from other sources, + I did the same for timedWait(). See comments in ThreadingWin.cpp for + rationale and more info. + + * wtf/CONTRIBUTORS.pthreads-win32: + Added. A list of Pthreads-win32 contributors mentioned in their license. The license itself + is included into wtf/ThreadingWin32.cpp. + + * wtf/Threading.h: + * wtf/ThreadingWin.cpp: + Additional info and Pthreads-win32 license at the beginning. + (WTF::PlatformCondition::timedWait): new method, derived from Pthreads-win32. + (WTF::PlatformCondition::signal): same + (WTF::ThreadCondition::ThreadCondition): + (WTF::ThreadCondition::~ThreadCondition): + (WTF::ThreadCondition::wait): this now calls PlatformCondition::timedWait. + (WTF::ThreadCondition::timedWait): same + (WTF::ThreadCondition::signal): this now calls PlatformCondition::signal. + (WTF::ThreadCondition::broadcast): same + +2009-01-21 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=23469. + + We need to check all numbers in integer switches, not just those + represented as integer JSImmediates. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::cti_op_switch_imm): + +2009-01-21 Gavin Barraclough + + Reviewed by Geoff Garen. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=23468. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + +2009-01-21 Alexey Proskuryakov + + Suggested by Oliver Hunt. Reviewed by Oliver Hunt. + + https://bugs.webkit.org/show_bug.cgi?id=23456 + Function argument names leak + + * parser/Nodes.cpp: (JSC::FunctionBodyNode::~FunctionBodyNode): Destruct parameter names. + +2009-01-20 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + Windows build fix + + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + +2009-01-20 Gavin Barraclough + + Reviewed by Mark Rowe. + + Structure property table deleted offset maps are being leaked. + Probably shouldn't be doing that. + + https://bugs.webkit.org/show_bug.cgi?id=23442 + + * runtime/Structure.cpp: + (JSC::Structure::~Structure): + +2009-01-20 Oliver Hunt + + Reviewed by NOBODY (build fix). + + Attempt to fix gtk build + + * GNUmakefile.am: + +2009-01-20 Darin Adler + + * runtime/StringPrototype.cpp: + (JSC::substituteBackreferences): Add back the initialization to fix the build. + +2009-01-20 Darin Adler + + Reviewed by Mark Rowe. + + Bug 23352: Turn on more compiler warnings in the Mac build + https://bugs.webkit.org/show_bug.cgi?id=23352 + + First patch: Fix some simple cases of various warnings. + + * pcre/pcre_compile.cpp: + (jsRegExpCompile): Use const_cast to change const-ness. + + * runtime/StringPrototype.cpp: + (JSC::substituteBackreferences): Remove unneeded initialization and + use UChar instead of unsigned short for UTF-16 values. + + * wtf/dtoa.cpp: + (WTF::strtod): Use const_cast to change const-ness. + +2009-01-20 Oliver Hunt + + Reviewed by NOBODY (build fix). + + Whoops, remove runtime/ByteArray references from .pri and .scons builds, update .bkl + + * JavaScriptCore.pri: + * JavaScriptCore.scons: + * JavaScriptCoreSources.bkl: + +2009-01-20 Oliver Hunt + + RS=Dan Bernstein. + + Move runtime/ByteArray to wtf/ByteArray + + * GNUmakefile.am: + * JavaScriptCore.exp: + * JavaScriptCore.pri: + * JavaScriptCore.scons: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * runtime/JSByteArray.cpp: + * runtime/JSByteArray.h: + * wtf/ByteArray.cpp: Renamed from JavaScriptCore/runtime/ByteArray.cpp. + (WTF::ByteArray::create): + * wtf/ByteArray.h: Renamed from JavaScriptCore/runtime/ByteArray.h. + (WTF::ByteArray::length): + (WTF::ByteArray::set): + (WTF::ByteArray::get): + (WTF::ByteArray::data): + (WTF::ByteArray::deref): + (WTF::ByteArray::ByteArray): + +2009-01-19 Sam Weinig + + Rubber-stamped by Gavin Barraclough. + + Remove temporary operator-> from JSValuePtr. + + * API/JSCallbackFunction.cpp: + (JSC::JSCallbackFunction::call): + * API/JSCallbackObjectFunctions.h: + (JSC::::call): + (JSC::::toNumber): + (JSC::::toString): + * API/JSObjectRef.cpp: + (JSObjectSetPrototype): + * API/JSValueRef.cpp: + (JSValueGetType): + (JSValueIsUndefined): + (JSValueIsNull): + (JSValueIsBoolean): + (JSValueIsNumber): + (JSValueIsString): + (JSValueIsObject): + (JSValueIsObjectOfClass): + (JSValueToBoolean): + (JSValueToNumber): + (JSValueToStringCopy): + (JSValueToObject): + * bytecode/CodeBlock.cpp: + (JSC::valueToSourceString): + (JSC::CodeBlock::mark): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::isKnownNotImmediate): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitEqualityOp): + (JSC::keyForImmediateSwitch): + * interpreter/Interpreter.cpp: + (JSC::jsLess): + (JSC::jsLessEq): + (JSC::jsAddSlowCase): + (JSC::jsAdd): + (JSC::jsTypeStringForValue): + (JSC::jsIsObjectType): + (JSC::jsIsFunctionType): + (JSC::isNotObject): + (JSC::Interpreter::callEval): + (JSC::Interpreter::throwException): + (JSC::cachePrototypeChain): + (JSC::Interpreter::tryCachePutByID): + (JSC::countPrototypeChainEntriesAndCheckForProxies): + (JSC::Interpreter::tryCacheGetByID): + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::tryCTICachePutByID): + (JSC::Interpreter::tryCTICacheGetByID): + (JSC::Interpreter::cti_op_convert_this): + (JSC::Interpreter::cti_op_add): + (JSC::Interpreter::cti_op_pre_inc): + (JSC::Interpreter::cti_op_put_by_id_generic): + (JSC::Interpreter::cti_op_get_by_id_generic): + (JSC::Interpreter::cti_op_put_by_id): + (JSC::Interpreter::cti_op_put_by_id_second): + (JSC::Interpreter::cti_op_put_by_id_fail): + (JSC::Interpreter::cti_op_get_by_id): + (JSC::Interpreter::cti_op_get_by_id_second): + (JSC::Interpreter::cti_op_get_by_id_self_fail): + (JSC::Interpreter::cti_op_get_by_id_proto_list): + (JSC::Interpreter::cti_op_get_by_id_proto_list_full): + (JSC::Interpreter::cti_op_get_by_id_proto_fail): + (JSC::Interpreter::cti_op_get_by_id_array_fail): + (JSC::Interpreter::cti_op_get_by_id_string_fail): + (JSC::Interpreter::cti_op_instanceof): + (JSC::Interpreter::cti_op_del_by_id): + (JSC::Interpreter::cti_op_mul): + (JSC::Interpreter::cti_op_call_JSFunction): + (JSC::Interpreter::cti_op_call_NotJSFunction): + (JSC::Interpreter::cti_op_construct_JSConstruct): + (JSC::Interpreter::cti_op_construct_NotJSConstruct): + (JSC::Interpreter::cti_op_get_by_val): + (JSC::Interpreter::cti_op_get_by_val_byte_array): + (JSC::Interpreter::cti_op_sub): + (JSC::Interpreter::cti_op_put_by_val): + (JSC::Interpreter::cti_op_put_by_val_array): + (JSC::Interpreter::cti_op_put_by_val_byte_array): + (JSC::Interpreter::cti_op_loop_if_true): + (JSC::Interpreter::cti_op_negate): + (JSC::Interpreter::cti_op_div): + (JSC::Interpreter::cti_op_pre_dec): + (JSC::Interpreter::cti_op_not): + (JSC::Interpreter::cti_op_jtrue): + (JSC::Interpreter::cti_op_post_inc): + (JSC::Interpreter::cti_op_lshift): + (JSC::Interpreter::cti_op_bitand): + (JSC::Interpreter::cti_op_rshift): + (JSC::Interpreter::cti_op_bitnot): + (JSC::Interpreter::cti_op_mod): + (JSC::Interpreter::cti_op_post_dec): + (JSC::Interpreter::cti_op_urshift): + (JSC::Interpreter::cti_op_bitxor): + (JSC::Interpreter::cti_op_bitor): + (JSC::Interpreter::cti_op_push_scope): + (JSC::Interpreter::cti_op_is_undefined): + (JSC::Interpreter::cti_op_is_boolean): + (JSC::Interpreter::cti_op_is_number): + (JSC::Interpreter::cti_op_to_jsnumber): + (JSC::Interpreter::cti_op_in): + (JSC::Interpreter::cti_op_put_by_index): + (JSC::Interpreter::cti_op_switch_imm): + (JSC::Interpreter::cti_op_switch_char): + (JSC::Interpreter::cti_op_switch_string): + (JSC::Interpreter::cti_op_del_by_val): + (JSC::Interpreter::cti_op_put_getter): + (JSC::Interpreter::cti_op_put_setter): + (JSC::Interpreter::cti_op_new_error): + * interpreter/Interpreter.h: + (JSC::Interpreter::isJSArray): + (JSC::Interpreter::isJSString): + (JSC::Interpreter::isJSByteArray): + * interpreter/Register.h: + (JSC::Register::marked): + (JSC::Register::mark): + * jit/JITInlineMethods.h: + (JSC::JIT::getConstantOperandImmediateInt): + (JSC::JIT::isOperandConstantImmediateInt): + * jsc.cpp: + (functionPrint): + (functionDebug): + (functionRun): + (functionLoad): + (runWithScripts): + (runInteractive): + * parser/Nodes.cpp: + (JSC::processClauseList): + * profiler/ProfileGenerator.cpp: + (JSC::ProfileGenerator::addParentForConsoleStart): + * profiler/Profiler.cpp: + (JSC::Profiler::createCallIdentifier): + * runtime/ArrayConstructor.cpp: + (JSC::constructArrayWithSizeQuirk): + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncToString): + (JSC::arrayProtoFuncToLocaleString): + (JSC::arrayProtoFuncJoin): + (JSC::arrayProtoFuncConcat): + (JSC::arrayProtoFuncPop): + (JSC::arrayProtoFuncPush): + (JSC::arrayProtoFuncReverse): + (JSC::arrayProtoFuncShift): + (JSC::arrayProtoFuncSlice): + (JSC::arrayProtoFuncSort): + (JSC::arrayProtoFuncSplice): + (JSC::arrayProtoFuncUnShift): + (JSC::arrayProtoFuncFilter): + (JSC::arrayProtoFuncMap): + (JSC::arrayProtoFuncEvery): + (JSC::arrayProtoFuncForEach): + (JSC::arrayProtoFuncSome): + (JSC::arrayProtoFuncIndexOf): + (JSC::arrayProtoFuncLastIndexOf): + * runtime/BooleanConstructor.cpp: + (JSC::constructBoolean): + (JSC::callBooleanConstructor): + * runtime/BooleanPrototype.cpp: + (JSC::booleanProtoFuncToString): + (JSC::booleanProtoFuncValueOf): + * runtime/Collector.cpp: + (JSC::Heap::protect): + (JSC::Heap::unprotect): + (JSC::Heap::heap): + (JSC::Heap::collect): + (JSC::typeName): + * runtime/Completion.cpp: + (JSC::evaluate): + * runtime/DateConstructor.cpp: + (JSC::constructDate): + (JSC::dateParse): + (JSC::dateUTC): + * runtime/DateInstance.h: + (JSC::DateInstance::internalNumber): + * runtime/DatePrototype.cpp: + (JSC::formatLocaleDate): + (JSC::fillStructuresUsingTimeArgs): + (JSC::fillStructuresUsingDateArgs): + (JSC::dateProtoFuncToString): + (JSC::dateProtoFuncToUTCString): + (JSC::dateProtoFuncToDateString): + (JSC::dateProtoFuncToTimeString): + (JSC::dateProtoFuncToLocaleString): + (JSC::dateProtoFuncToLocaleDateString): + (JSC::dateProtoFuncToLocaleTimeString): + (JSC::dateProtoFuncGetTime): + (JSC::dateProtoFuncGetFullYear): + (JSC::dateProtoFuncGetUTCFullYear): + (JSC::dateProtoFuncToGMTString): + (JSC::dateProtoFuncGetMonth): + (JSC::dateProtoFuncGetUTCMonth): + (JSC::dateProtoFuncGetDate): + (JSC::dateProtoFuncGetUTCDate): + (JSC::dateProtoFuncGetDay): + (JSC::dateProtoFuncGetUTCDay): + (JSC::dateProtoFuncGetHours): + (JSC::dateProtoFuncGetUTCHours): + (JSC::dateProtoFuncGetMinutes): + (JSC::dateProtoFuncGetUTCMinutes): + (JSC::dateProtoFuncGetSeconds): + (JSC::dateProtoFuncGetUTCSeconds): + (JSC::dateProtoFuncGetMilliSeconds): + (JSC::dateProtoFuncGetUTCMilliseconds): + (JSC::dateProtoFuncGetTimezoneOffset): + (JSC::dateProtoFuncSetTime): + (JSC::setNewValueFromTimeArgs): + (JSC::setNewValueFromDateArgs): + (JSC::dateProtoFuncSetYear): + (JSC::dateProtoFuncGetYear): + * runtime/ErrorConstructor.cpp: + (JSC::constructError): + * runtime/ErrorPrototype.cpp: + (JSC::errorProtoFuncToString): + * runtime/ExceptionHelpers.cpp: + (JSC::createError): + (JSC::createErrorMessage): + * runtime/FunctionConstructor.cpp: + (JSC::constructFunction): + * runtime/FunctionPrototype.cpp: + (JSC::functionProtoFuncToString): + (JSC::functionProtoFuncApply): + (JSC::functionProtoFuncCall): + * runtime/GetterSetter.cpp: + (JSC::GetterSetter::toObject): + * runtime/JSActivation.cpp: + (JSC::JSActivation::getOwnPropertySlot): + * runtime/JSArray.cpp: + (JSC::JSArray::put): + (JSC::JSArray::mark): + (JSC::JSArray::sort): + (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key): + (JSC::JSArray::compactForSorting): + * runtime/JSByteArray.h: + (JSC::JSByteArray::setIndex): + * runtime/JSCell.h: + (JSC::asCell): + * runtime/JSFunction.cpp: + (JSC::JSFunction::call): + (JSC::JSFunction::construct): + * runtime/JSGlobalObject.cpp: + (JSC::markIfNeeded): + (JSC::lastInPrototypeChain): + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::encode): + (JSC::decode): + (JSC::globalFuncEval): + (JSC::globalFuncParseInt): + (JSC::globalFuncParseFloat): + (JSC::globalFuncIsNaN): + (JSC::globalFuncIsFinite): + (JSC::globalFuncEscape): + (JSC::globalFuncUnescape): + (JSC::globalFuncJSCPrint): + * runtime/JSImmediate.cpp: + (JSC::JSImmediate::toThisObject): + (JSC::JSImmediate::toObject): + (JSC::JSImmediate::prototype): + (JSC::JSImmediate::toString): + * runtime/JSImmediate.h: + * runtime/JSObject.cpp: + (JSC::JSObject::mark): + (JSC::JSObject::put): + (JSC::callDefaultValueFunction): + (JSC::JSObject::getPrimitiveNumber): + (JSC::JSObject::defineGetter): + (JSC::JSObject::defineSetter): + (JSC::JSObject::lookupGetter): + (JSC::JSObject::lookupSetter): + (JSC::JSObject::hasInstance): + (JSC::JSObject::toNumber): + (JSC::JSObject::toString): + * runtime/JSObject.h: + (JSC::JSObject::JSObject): + (JSC::JSObject::inlineGetOwnPropertySlot): + (JSC::JSObject::getOwnPropertySlotForWrite): + (JSC::JSObject::getPropertySlot): + (JSC::JSValuePtr::get): + * runtime/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::create): + * runtime/JSString.cpp: + (JSC::JSString::getOwnPropertySlot): + * runtime/JSValue.h: + * runtime/JSWrapperObject.cpp: + (JSC::JSWrapperObject::mark): + * runtime/JSWrapperObject.h: + (JSC::JSWrapperObject::setInternalValue): + * runtime/MathObject.cpp: + (JSC::mathProtoFuncAbs): + (JSC::mathProtoFuncACos): + (JSC::mathProtoFuncASin): + (JSC::mathProtoFuncATan): + (JSC::mathProtoFuncATan2): + (JSC::mathProtoFuncCeil): + (JSC::mathProtoFuncCos): + (JSC::mathProtoFuncExp): + (JSC::mathProtoFuncFloor): + (JSC::mathProtoFuncLog): + (JSC::mathProtoFuncMax): + (JSC::mathProtoFuncMin): + (JSC::mathProtoFuncPow): + (JSC::mathProtoFuncRound): + (JSC::mathProtoFuncSin): + (JSC::mathProtoFuncSqrt): + (JSC::mathProtoFuncTan): + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::NativeErrorConstructor): + (JSC::NativeErrorConstructor::construct): + * runtime/NumberConstructor.cpp: + (JSC::constructWithNumberConstructor): + (JSC::callNumberConstructor): + * runtime/NumberPrototype.cpp: + (JSC::numberProtoFuncToString): + (JSC::numberProtoFuncToLocaleString): + (JSC::numberProtoFuncValueOf): + (JSC::numberProtoFuncToFixed): + (JSC::numberProtoFuncToExponential): + (JSC::numberProtoFuncToPrecision): + * runtime/ObjectConstructor.cpp: + (JSC::constructObject): + * runtime/ObjectPrototype.cpp: + (JSC::objectProtoFuncValueOf): + (JSC::objectProtoFuncHasOwnProperty): + (JSC::objectProtoFuncIsPrototypeOf): + (JSC::objectProtoFuncDefineGetter): + (JSC::objectProtoFuncDefineSetter): + (JSC::objectProtoFuncLookupGetter): + (JSC::objectProtoFuncLookupSetter): + (JSC::objectProtoFuncPropertyIsEnumerable): + (JSC::objectProtoFuncToLocaleString): + (JSC::objectProtoFuncToString): + * runtime/Operations.h: + (JSC::JSValuePtr::equalSlowCaseInline): + (JSC::JSValuePtr::strictEqual): + (JSC::JSValuePtr::strictEqualSlowCaseInline): + * runtime/Protect.h: + (JSC::gcProtect): + (JSC::gcUnprotect): + * runtime/RegExpConstructor.cpp: + (JSC::setRegExpConstructorInput): + (JSC::setRegExpConstructorMultiline): + (JSC::constructRegExp): + * runtime/RegExpObject.cpp: + (JSC::setRegExpObjectLastIndex): + (JSC::RegExpObject::match): + * runtime/RegExpPrototype.cpp: + (JSC::regExpProtoFuncTest): + (JSC::regExpProtoFuncExec): + (JSC::regExpProtoFuncCompile): + (JSC::regExpProtoFuncToString): + * runtime/StringConstructor.cpp: + (JSC::stringFromCharCodeSlowCase): + (JSC::stringFromCharCode): + (JSC::constructWithStringConstructor): + (JSC::callStringConstructor): + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): + (JSC::stringProtoFuncToString): + (JSC::stringProtoFuncCharAt): + (JSC::stringProtoFuncCharCodeAt): + (JSC::stringProtoFuncConcat): + (JSC::stringProtoFuncIndexOf): + (JSC::stringProtoFuncLastIndexOf): + (JSC::stringProtoFuncMatch): + (JSC::stringProtoFuncSearch): + (JSC::stringProtoFuncSlice): + (JSC::stringProtoFuncSplit): + (JSC::stringProtoFuncSubstr): + (JSC::stringProtoFuncSubstring): + (JSC::stringProtoFuncToLowerCase): + (JSC::stringProtoFuncToUpperCase): + (JSC::stringProtoFuncLocaleCompare): + (JSC::stringProtoFuncBig): + (JSC::stringProtoFuncSmall): + (JSC::stringProtoFuncBlink): + (JSC::stringProtoFuncBold): + (JSC::stringProtoFuncFixed): + (JSC::stringProtoFuncItalics): + (JSC::stringProtoFuncStrike): + (JSC::stringProtoFuncSub): + (JSC::stringProtoFuncSup): + (JSC::stringProtoFuncFontcolor): + (JSC::stringProtoFuncFontsize): + (JSC::stringProtoFuncAnchor): + (JSC::stringProtoFuncLink): + * runtime/Structure.cpp: + (JSC::Structure::Structure): + (JSC::Structure::getEnumerablePropertyNames): + (JSC::Structure::createCachedPrototypeChain): + * runtime/Structure.h: + (JSC::Structure::mark): + * runtime/StructureChain.cpp: + (JSC::StructureChain::StructureChain): + +2009-01-19 Darin Adler + + Reviewed by Sam Weinig. + + Bug 23409: REGRESSION: RegExp 'replace()' function improperly processes '$$' + + + + Test: fast/js/string-replace-3.html + + * runtime/StringPrototype.cpp: + (JSC::substituteBackreferences): Remove code that adds an extra $ -- not sure + how this ever worked. + +2009-01-16 Gavin Barraclough + + Reviewed by Oliver Hunt. + + On x86-64 jit, cache JSImmedate::TagMask & JSImmedate::TagTypeNumber in + registers, save reloading them every time they're used. + + Draws x86-64 jit performance close to that of i386 jit. + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::subPtr): + (JSC::MacroAssembler::jnzPtr): + (JSC::MacroAssembler::jzPtr): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::compileBinaryArithOpSlowCase): + * jit/JITInlineMethods.h: + (JSC::JIT::emitJumpIfJSCell): + (JSC::JIT::emitJumpIfNotJSCell): + (JSC::JIT::emitJumpIfImmediateNumber): + (JSC::JIT::emitJumpIfNotImmediateNumber): + (JSC::JIT::emitJumpIfImmediateInteger): + (JSC::JIT::emitJumpIfNotImmediateInteger): + (JSC::JIT::emitFastArithIntToImmNoCheck): + +2009-01-16 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Add support to x86-64 JIT for inline double precision arithmetic ops. + +5/6% on x86-64, JIT enabled, sunspider. + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::addPtr): + * assembler/X86Assembler.h: + (JSC::X86Assembler::movq_rr): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_pre_inc): + (JSC::JIT::compileBinaryArithOp): + (JSC::JIT::compileBinaryArithOpSlowCase): + (JSC::JIT::compileFastArith_op_add): + (JSC::JIT::compileFastArithSlow_op_add): + (JSC::JIT::compileFastArith_op_mul): + (JSC::JIT::compileFastArithSlow_op_mul): + (JSC::JIT::compileFastArith_op_sub): + (JSC::JIT::compileFastArithSlow_op_sub): + * parser/ResultType.h: + (JSC::ResultType::isReusable): + (JSC::ResultType::isInt32): + (JSC::ResultType::definitelyIsNumber): + (JSC::ResultType::mightBeNumber): + (JSC::ResultType::isNotNumber): + (JSC::ResultType::unknownType): + +2009-01-16 Gavin Barraclough + + Reviewed by Geoff Garen. + + Fixes for SamplingTool. + + https://bugs.webkit.org/show_bug.cgi?id=23390 + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::storePtr): + * bytecode/SamplingTool.cpp: + (JSC::SamplingTool::run): + (JSC::SamplingTool::dump): + * bytecode/SamplingTool.h: + (JSC::SamplingTool::encodeSample): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompile): + * jit/JIT.h: + (JSC::JIT::samplingToolTrackCodeBlock): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpCallSlowCase): + * jit/JITInlineMethods.h: + (JSC::JIT::emitCTICall_internal): + +2009-01-16 Geoffrey Garen + + Reviewed by Darin Adler. + + Fixed REGRESSION: Latest WebKit nightlies + turn "c" into "" when stripping \\c_ character + + * wrec/WRECParser.cpp: + (JSC::WREC::Parser::consumeEscape): Mimic a Firefox quirk when parsing + control escapes inside character classes. + +2009-01-16 Adam Roben + + Windows build fix + + * wrec/WRECParser.cpp: + (JSC::WREC::Parser::parseParentheses): Removed unreachable code. + +2009-01-15 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Fixed REGRESSION (r39164): Discarding quantifier + on assertion gives incorrect result (23075) + + https://bugs.webkit.org/show_bug.cgi?id=23075 + + * pcre/pcre_compile.cpp: + (compileBranch): Throw away an assertion if it's followed by a quantifier + with a 0 minimum, to match SpiderMonkey, v8, and the ECMA spec. + + * wrec/WRECParser.cpp: + (JSC::WREC::Parser::parseParentheses): Fall back on PCRE for the rare + case of an assertion with a quantifier with a 0 minimum, since we + don't handle quantified subexpressions yet, and in this special case, + we can't just throw away the quantifier. + +2009-01-15 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Add support in ResultType to track that the results of bitops + are always of type int32_t. + + * parser/Nodes.cpp: + (JSC::ReadModifyResolveNode::emitBytecode): + (JSC::ReadModifyDotNode::emitBytecode): + (JSC::ReadModifyBracketNode::emitBytecode): + * parser/Nodes.h: + (JSC::ExpressionNode::): + (JSC::BooleanNode::): + (JSC::NumberNode::): + (JSC::StringNode::): + (JSC::PrePostResolveNode::): + (JSC::TypeOfResolveNode::): + (JSC::TypeOfValueNode::): + (JSC::UnaryPlusNode::): + (JSC::NegateNode::): + (JSC::BitwiseNotNode::): + (JSC::LogicalNotNode::): + (JSC::MultNode::): + (JSC::DivNode::): + (JSC::ModNode::): + (JSC::SubNode::): + (JSC::LeftShiftNode::): + (JSC::RightShiftNode::): + (JSC::UnsignedRightShiftNode::): + (JSC::LessNode::): + (JSC::GreaterNode::): + (JSC::LessEqNode::): + (JSC::GreaterEqNode::): + (JSC::InstanceOfNode::): + (JSC::EqualNode::): + (JSC::NotEqualNode::): + (JSC::StrictEqualNode::): + (JSC::NotStrictEqualNode::): + (JSC::BitAndNode::): + (JSC::BitOrNode::): + (JSC::BitXOrNode::): + (JSC::LogicalOpNode::): + * parser/ResultType.h: + (JSC::ResultType::isInt32): + (JSC::ResultType::isNotNumber): + (JSC::ResultType::booleanType): + (JSC::ResultType::numberType): + (JSC::ResultType::numberTypeCanReuse): + (JSC::ResultType::numberTypeCanReuseIsInt32): + (JSC::ResultType::stringOrNumberTypeCanReuse): + (JSC::ResultType::stringType): + (JSC::ResultType::unknownType): + (JSC::ResultType::forAdd): + (JSC::ResultType::forBitOp): + (JSC::OperandTypes::OperandTypes): + +2009-01-15 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Add support for integer addition, subtraction and multiplication + in JIT code on x86-64. + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::mul32): + (JSC::MacroAssembler::sub32): + (JSC::MacroAssembler::joMul32): + (JSC::MacroAssembler::joSub32): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_add): + (JSC::JIT::compileFastArithSlow_op_add): + (JSC::JIT::compileFastArith_op_mul): + (JSC::JIT::compileFastArithSlow_op_mul): + (JSC::JIT::compileFastArith_op_sub): + (JSC::JIT::compileFastArithSlow_op_sub): + +2009-01-15 Gavin Barraclough + + Reviewed by Geoff Garen. + + On x86-64 allow JSImmediate to encode 64-bit double precision values. + This patch only affects builds that set USE(ALTERNATE_JSIMMEDIATE). + Updates the implementation of JSValuePtr:: and JSImmediate:: methods + that operate on neumeric values to be be aware of the new representation. + When this representation is in use, the class JSNumberCell is redundant + and is compiled out. + + The format of the new immediate representation is documented in JSImmediate.h. + + * JavaScriptCore.exp: + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::subPtr): + * assembler/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::subq_rr): + (JSC::X86Assembler::movq_rr): + (JSC::X86Assembler::ucomisd_rr): + (JSC::X86Assembler::X86InstructionFormatter::twoByteOp64): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::cti_op_stricteq): + (JSC::Interpreter::cti_op_nstricteq): + * jit/JIT.cpp: + (JSC::JIT::compileOpStrictEq): + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_lshift): + (JSC::JIT::compileFastArith_op_rshift): + (JSC::JIT::compileFastArith_op_bitand): + (JSC::JIT::compileFastArith_op_mod): + (JSC::JIT::compileFastArith_op_add): + (JSC::JIT::compileFastArith_op_mul): + (JSC::JIT::compileFastArith_op_post_inc): + (JSC::JIT::compileFastArith_op_post_dec): + (JSC::JIT::compileFastArith_op_pre_inc): + (JSC::JIT::compileFastArith_op_pre_dec): + (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): + (JSC::JIT::compileBinaryArithOp): + * jit/JITInlineMethods.h: + (JSC::JIT::emitJumpIfBothJSCells): + (JSC::JIT::emitJumpIfEitherNumber): + (JSC::JIT::emitJumpIfNotEitherNumber): + (JSC::JIT::emitJumpIfImmediateIntegerNumber): + (JSC::JIT::emitJumpIfNotImmediateIntegerNumber): + (JSC::JIT::emitJumpIfNotImmediateIntegerNumbers): + (JSC::JIT::emitJumpSlowCaseIfNotImmediateIntegerNumber): + (JSC::JIT::emitJumpSlowCaseIfNotImmediateIntegerNumbers): + (JSC::JIT::emitFastArithDeTagImmediate): + (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): + (JSC::JIT::emitFastArithReTagImmediate): + (JSC::JIT::emitFastArithIntToImmNoCheck): + * runtime/JSCell.h: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSImmediate.cpp: + (JSC::JSImmediate::toThisObject): + (JSC::JSImmediate::toObject): + (JSC::JSImmediate::toString): + * runtime/JSImmediate.h: + (JSC::wtf_reinterpret_cast): + (JSC::JSImmediate::isNumber): + (JSC::JSImmediate::isIntegerNumber): + (JSC::JSImmediate::isDoubleNumber): + (JSC::JSImmediate::isPositiveIntegerNumber): + (JSC::JSImmediate::areBothImmediateIntegerNumbers): + (JSC::JSImmediate::makeInt): + (JSC::JSImmediate::makeDouble): + (JSC::JSImmediate::doubleValue): + (JSC::doubleToBoolean): + (JSC::JSImmediate::toBoolean): + (JSC::JSImmediate::getTruncatedUInt32): + (JSC::JSImmediate::makeOutOfIntegerRange): + (JSC::JSImmediate::from): + (JSC::JSImmediate::getTruncatedInt32): + (JSC::JSImmediate::toDouble): + (JSC::JSImmediate::getUInt32): + (JSC::JSValuePtr::isInt32Fast): + (JSC::JSValuePtr::isUInt32Fast): + (JSC::JSValuePtr::areBothInt32Fast): + (JSC::JSFastMath::canDoFastBitwiseOperations): + (JSC::JSFastMath::xorImmediateNumbers): + (JSC::JSFastMath::canDoFastRshift): + (JSC::JSFastMath::canDoFastUrshift): + (JSC::JSFastMath::rightShiftImmediateNumbers): + (JSC::JSFastMath::canDoFastAdditiveOperations): + (JSC::JSFastMath::addImmediateNumbers): + (JSC::JSFastMath::subImmediateNumbers): + * runtime/JSNumberCell.cpp: + (JSC::jsNumberCell): + * runtime/JSNumberCell.h: + (JSC::createNumberStructure): + (JSC::isNumberCell): + (JSC::asNumberCell): + (JSC::jsNumber): + (JSC::JSValuePtr::isDoubleNumber): + (JSC::JSValuePtr::getDoubleNumber): + (JSC::JSValuePtr::isNumber): + (JSC::JSValuePtr::uncheckedGetNumber): + (JSC::jsNaN): + (JSC::JSValuePtr::getNumber): + (JSC::JSValuePtr::numberToInt32): + (JSC::JSValuePtr::numberToUInt32): + * runtime/JSValue.h: + * runtime/NumberConstructor.cpp: + (JSC::numberConstructorNegInfinity): + (JSC::numberConstructorPosInfinity): + (JSC::numberConstructorMaxValue): + (JSC::numberConstructorMinValue): + * runtime/NumberObject.cpp: + (JSC::constructNumber): + * runtime/NumberObject.h: + * runtime/Operations.h: + (JSC::JSValuePtr::equal): + (JSC::JSValuePtr::equalSlowCaseInline): + (JSC::JSValuePtr::strictEqual): + (JSC::JSValuePtr::strictEqualSlowCaseInline): + * wtf/Platform.h: + +2009-01-15 Sam Weinig + + Reviewed by Geoffrey Garen. + + + REGRESSION (r34838): JavaScript objects appear to be leaked after loading google.com + + Subtract the number of JSStrings cached in SmallStrings when calculating the + number of live JSObjects. + + * runtime/Collector.cpp: + (JSC::Heap::objectCount): + * runtime/SmallStrings.cpp: + (JSC::SmallStrings::count): + * runtime/SmallStrings.h: + +2009-01-15 Sam Weinig + + Fix Qt build. + + * runtime/Collector.cpp: + +2009-01-15 Sam Weinig + + Reviewed by Gavin Barraclough. + + Fix crash seen running fast/canvas. + + Make sure to mark the ScopeNode and CodeBlock being created + in the re-parse for exception information. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): + * parser/Nodes.h: + (JSC::ScopeNode::mark): + * runtime/Collector.cpp: + (JSC::Heap::collect): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSGlobalData.h: + +2009-01-15 Craig Schlenter + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=23347 + Compilation of JavaScriptCore/wtf/ThreadingPthreads.cpp fails on Linux + + * wtf/ThreadingPthreads.cpp: included limits.h as INT_MAX is defined there. + +2009-01-15 Oliver Hunt + + Reviewed by Geoff Garen. + + Bug 23225: REGRESSION: Assertion failure in reparseInPlace() (m_sourceElements) at sfgate.com + + + Character position for open and closing brace was incorrectly referencing m_position to + record their position in a source document, however this is unsafe as BOMs may lead to + m_position being an arbitrary position from the real position of the current character. + + * parser/Lexer.cpp: + (JSC::Lexer::matchPunctuator): + +2009-01-14 David Kilzer + + Bug 23153: JSC build always touches JavaScriptCore/docs/bytecode.html + + + + Reviewed by Darin Adler. + + Instead of building bytecode.html into ${SRCROOT}/docs/bytecode.html, build it + into ${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore/docs/bytecode.html. + + Also fixes make-bytecode-docs.pl to actually generate documentation. + + * DerivedSources.make: Changed bytecode.html to be built into local docs + directory in ${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore. + * JavaScriptCore.xcodeproj/project.pbxproj: Added "/docs" to the end of the + "mkdir -p" command so that the docs subdirectory is automatically created. + * docs/make-bytecode-docs.pl: Changed BEGIN_OPCODE to DEFINE_OPCODE so that + documentation is actually generated. + +2009-01-14 Adam Treat + + Build fix for Qt from Dmitry Titov. + + * wtf/ThreadingQt.cpp: + (WTF::ThreadCondition::timedWait): + +2009-01-14 Oliver Hunt + + Reviewed by Cameron Zwarich. + + Bug 22903: REGRESSION (r36267): visiting this site reliably crashes WebKit nightly + + EvalCodeBlock's do not reference the functions that are declared inside the eval + code, this means that simply marking the EvalCodeBlock through the global object + is insufficient to mark the declared functions. This patch corrects this by + explicitly marking the CodeBlocks of all the functions declared in the cached + EvalNode. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::mark): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::hasFunctions): + * bytecode/EvalCodeCache.h: + (JSC::EvalCodeCache::mark): + * parser/Nodes.cpp: + (JSC::ScopeNodeData::mark): + (JSC::EvalNode::mark): + * parser/Nodes.h: + +2009-01-14 Dmitry Titov + + Reviewed by Alexey Proskuryakov. + + https://bugs.webkit.org/show_bug.cgi?id=23312 + Implement MessageQueue::waitForMessageTimed() + Also fixed ThreadCondition::timedWait() to take absolute time, as discussed on webkit-dev. + Win32 version of timedWait still has to be implemented. + + * wtf/MessageQueue.h: + (WTF::MessageQueueWaitResult: new enum for the result of MessageQueue::waitForMessageTimed. + (WTF::MessageQueue::waitForMessage): + (WTF::MessageQueue::waitForMessageTimed): New method. + * wtf/Threading.h: + * wtf/ThreadingGtk.cpp: + (WTF::ThreadCondition::timedWait): changed to use absolute time instead of interval. + * wtf/ThreadingNone.cpp: + (WTF::ThreadCondition::timedWait): ditto. + * wtf/ThreadingPthreads.cpp: + (WTF::ThreadCondition::timedWait): ditto. + * wtf/ThreadingQt.cpp: + (WTF::ThreadCondition::timedWait): ditto. + * wtf/ThreadingWin.cpp: + (WTF::ThreadCondition::timedWait): ditto. The actual Win32 code is still to be implemented. + +2009-01-14 Dean McNamee + + Reviewed by Darin Adler and Oliver hunt. + + Correctly match allocation functions by implementing a custom deref(). + + https://bugs.webkit.org/show_bug.cgi?id=23315 + + * runtime/ByteArray.h: + (JSC::ByteArray::deref): + (JSC::ByteArray::ByteArray): + +2009-01-14 Dan Bernstein + + Reviewed by John Sullivan. + + - update copyright + + * Info.plist: + +2009-01-13 Beth Dakin + + Reviewed by Darin Adler and Oliver Hunt. + + REGRESSION: Business widget's front side + fails to render correctly when flipping widget + + The problem here is that parseInt was parsing NaN as 0. This patch + corrects that by parsing NaN as NaN. This matches our old behavior + and Firefox. + + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncParseInt): + +2009-01-13 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Fix for: https://bugs.webkit.org/show_bug.cgi?id=23292 + + Implementation of two argument canDoFastAdditiveOperations does not correlate well with reality. + + * runtime/JSImmediate.h: + (JSC::JSFastMath::canDoFastAdditiveOperations): + +2009-01-13 Zalan Bujtas + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=23290 + Fix JSImmediate::isImmediate(src) to !src->isCell() + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + +2009-01-13 Dmitry Titov + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=23281 + Fix the Chromium Win build. + Need to use PLATFORM(WIN_OS) instead of PLATFORM(WIN). + Moved GTK and WX up in #if sequence because they could come with WIN_OS too, + while they have their own implementation even on Windows. + + * wtf/CurrentTime.cpp: + (WTF::currentTime): + +2009-01-12 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Make the JSImmediate interface private. + + All manipulation of JS values should be through the JSValuePtr class, not by using JSImmediate + directly. The key missing methods on JSValuePtr are: + + * isCell() - check for values that are JSCell*s, and as such where asCell() may be used. + * isInt32Fast() getInt32Fast() - fast check/access for integer immediates. + * isUInt32Fast() getUInt32Fast() - ditto for unsigned integer immediates. + + The JIT is allowed full access to JSImmediate, since it needs to be able to directly + manipulate JSValuePtrs. The Interpreter is provided access to perform operations directly + on JSValuePtrs through the new JSFastMath interface. + + No performance impact. + + * API/JSCallbackObjectFunctions.h: + (JSC::::toNumber): + * API/JSValueRef.cpp: + (JSValueIsEqual): + (JSValueIsStrictEqual): + * JavaScriptCore.exp: + * bytecode/CodeBlock.h: + (JSC::CodeBlock::isKnownNotImmediate): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::keyForImmediateSwitch): + * bytecompiler/BytecodeGenerator.h: + (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue): + (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue): + * interpreter/Interpreter.cpp: + (JSC::jsLess): + (JSC::jsLessEq): + (JSC::jsAdd): + (JSC::jsIsObjectType): + (JSC::cachePrototypeChain): + (JSC::Interpreter::tryCachePutByID): + (JSC::Interpreter::tryCacheGetByID): + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::tryCTICachePutByID): + (JSC::Interpreter::tryCTICacheGetByID): + (JSC::Interpreter::cti_op_add): + (JSC::Interpreter::cti_op_get_by_id_self_fail): + (JSC::Interpreter::cti_op_get_by_id_proto_list): + (JSC::Interpreter::cti_op_instanceof): + (JSC::Interpreter::cti_op_mul): + (JSC::Interpreter::cti_op_get_by_val): + (JSC::Interpreter::cti_op_get_by_val_byte_array): + (JSC::Interpreter::cti_op_sub): + (JSC::Interpreter::cti_op_put_by_val): + (JSC::Interpreter::cti_op_put_by_val_array): + (JSC::Interpreter::cti_op_put_by_val_byte_array): + (JSC::Interpreter::cti_op_negate): + (JSC::Interpreter::cti_op_div): + (JSC::Interpreter::cti_op_eq): + (JSC::Interpreter::cti_op_lshift): + (JSC::Interpreter::cti_op_bitand): + (JSC::Interpreter::cti_op_rshift): + (JSC::Interpreter::cti_op_bitnot): + (JSC::Interpreter::cti_op_neq): + (JSC::Interpreter::cti_op_urshift): + (JSC::Interpreter::cti_op_call_eval): + (JSC::Interpreter::cti_op_throw): + (JSC::Interpreter::cti_op_is_undefined): + (JSC::Interpreter::cti_op_stricteq): + (JSC::Interpreter::cti_op_nstricteq): + (JSC::Interpreter::cti_op_switch_imm): + (JSC::Interpreter::cti_vm_throw): + * interpreter/Interpreter.h: + (JSC::Interpreter::isJSArray): + (JSC::Interpreter::isJSString): + (JSC::Interpreter::isJSByteArray): + * jit/JIT.cpp: + (JSC::JIT::compileOpStrictEq): + (JSC::JIT::privateCompileMainPass): + * jit/JIT.h: + (JSC::JIT::isStrictEqCaseHandledInJITCode): + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_rshift): + (JSC::JIT::compileFastArith_op_bitand): + (JSC::JIT::compileFastArith_op_mod): + * jit/JITCall.cpp: + (JSC::JIT::unlinkCall): + (JSC::JIT::compileOpCall): + * jit/JITInlineMethods.h: + (JSC::JIT::getConstantOperandImmediateInt): + (JSC::JIT::isOperandConstantImmediateInt): + * parser/Nodes.cpp: + (JSC::processClauseList): + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncIndexOf): + (JSC::arrayProtoFuncLastIndexOf): + * runtime/BooleanPrototype.cpp: + (JSC::booleanProtoFuncValueOf): + * runtime/Collector.cpp: + (JSC::Heap::protect): + (JSC::Heap::unprotect): + (JSC::Heap::heap): + * runtime/JSByteArray.cpp: + (JSC::JSByteArray::getOwnPropertySlot): + * runtime/JSByteArray.h: + (JSC::JSByteArray::getIndex): + * runtime/JSCell.cpp: + * runtime/JSCell.h: + (JSC::JSValuePtr::isNumberCell): + (JSC::JSValuePtr::asCell): + (JSC::JSValuePtr::isNumber): + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncParseInt): + * runtime/JSImmediate.h: + (JSC::js0): + (JSC::jsImpossibleValue): + (JSC::JSValuePtr::toInt32): + (JSC::JSValuePtr::toUInt32): + (JSC::JSValuePtr::isCell): + (JSC::JSValuePtr::isInt32Fast): + (JSC::JSValuePtr::getInt32Fast): + (JSC::JSValuePtr::isUInt32Fast): + (JSC::JSValuePtr::getUInt32Fast): + (JSC::JSValuePtr::makeInt32Fast): + (JSC::JSValuePtr::areBothInt32Fast): + (JSC::JSFastMath::canDoFastBitwiseOperations): + (JSC::JSFastMath::equal): + (JSC::JSFastMath::notEqual): + (JSC::JSFastMath::andImmediateNumbers): + (JSC::JSFastMath::xorImmediateNumbers): + (JSC::JSFastMath::orImmediateNumbers): + (JSC::JSFastMath::canDoFastRshift): + (JSC::JSFastMath::canDoFastUrshift): + (JSC::JSFastMath::rightShiftImmediateNumbers): + (JSC::JSFastMath::canDoFastAdditiveOperations): + (JSC::JSFastMath::addImmediateNumbers): + (JSC::JSFastMath::subImmediateNumbers): + (JSC::JSFastMath::incImmediateNumber): + (JSC::JSFastMath::decImmediateNumber): + * runtime/JSNumberCell.h: + (JSC::JSValuePtr::asNumberCell): + (JSC::jsNumber): + (JSC::JSValuePtr::uncheckedGetNumber): + (JSC::JSNumberCell::toInt32): + (JSC::JSNumberCell::toUInt32): + (JSC::JSValuePtr::toJSNumber): + (JSC::JSValuePtr::getNumber): + (JSC::JSValuePtr::numberToInt32): + (JSC::JSValuePtr::numberToUInt32): + * runtime/JSObject.h: + (JSC::JSValuePtr::isObject): + (JSC::JSValuePtr::get): + (JSC::JSValuePtr::put): + * runtime/JSValue.cpp: + (JSC::JSValuePtr::toInteger): + (JSC::JSValuePtr::toIntegerPreserveNaN): + * runtime/JSValue.h: + * runtime/Operations.cpp: + (JSC::JSValuePtr::equalSlowCase): + (JSC::JSValuePtr::strictEqualSlowCase): + * runtime/Operations.h: + (JSC::JSValuePtr::equal): + (JSC::JSValuePtr::equalSlowCaseInline): + (JSC::JSValuePtr::strictEqual): + (JSC::JSValuePtr::strictEqualSlowCaseInline): + * runtime/Protect.h: + (JSC::gcProtect): + (JSC::gcUnprotect): + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncCharAt): + (JSC::stringProtoFuncCharCodeAt): + * runtime/Structure.cpp: + (JSC::Structure::createCachedPrototypeChain): + +2009-01-12 Kevin Ollivier + + Since date time functions have moved here, now the wx port JSC + needs to depend on wx. + + * jscore.bkl: + +2009-01-11 David Levin + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=23245 + + Add initializeThreading to key places in JS API to ensure that + UString is properly initialized. + + * API/JSContextRef.cpp: + (JSContextGroupCreate): + (JSGlobalContextCreate): + * API/JSObjectRef.cpp: + (JSClassCreate): + * API/JSStringRef.cpp: + (JSStringCreateWithCharacters): + (JSStringCreateWithUTF8CString): + * API/JSStringRefCF.cpp: + (JSStringCreateWithCFString): + +2009-01-11 David Levin + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=23175 + + Separate out BaseString information from UString::Rep and make all baseString access go through + a member function, so that it may be used for something else (in the future) in the BaseString + case. + + * runtime/SmallStrings.cpp: + (JSC::SmallStringsStorage::rep): + (JSC::SmallStringsStorage::SmallStringsStorage): + (JSC::SmallStrings::SmallStrings): + (JSC::SmallStrings::mark): + Adjust to account for the changes in UString and put the UString in place in + SmallStringsStorage to aid in locality of reference among the UChar[] and UString::Rep's. + + * runtime/SmallStrings.h: + * runtime/UString.cpp: + (JSC::initializeStaticBaseString): + (JSC::initializeUString): + (JSC::UString::Rep::create): + (JSC::UString::Rep::destroy): + (JSC::UString::Rep::checkConsistency): + (JSC::expandCapacity): + (JSC::UString::expandPreCapacity): + (JSC::concatenate): + (JSC::UString::append): + (JSC::UString::operator=): + * runtime/UString.h: + (JSC::UString::Rep::baseIsSelf): + (JSC::UString::Rep::setBaseString): + (JSC::UString::Rep::baseString): + (JSC::UString::Rep::): + (JSC::UString::Rep::null): + (JSC::UString::Rep::empty): + (JSC::UString::Rep::data): + (JSC::UString::cost): + Separate out the items out used by base strings from those used in Rep's that only + point to base strings. (This potentially saves 24 bytes per Rep.) + +2009-01-11 Darin Adler + + Reviewed by Dan Bernstein. + + Bug 23239: improve handling of unused arguments in JavaScriptCore + https://bugs.webkit.org/show_bug.cgi?id=23239 + + * runtime/DatePrototype.cpp: Moved LocaleDateTimeFormat enum outside #if + so we can use this on all platforms. Changed valueOf to share the same + function with getTime, since the contents of the two are identical. Removed + a FIXME since the idea isn't really specific enough or helpful enough to + need to sit here in the source code. + (JSC::formatLocaleDate): Changed the Mac version of this function to take + the same arguments as the non-Mac version so the caller doesn't have to + special-case the two platforms. Also made the formatString array be const; + before the characters were, but the array was a modifiable global variable. + (JSC::dateProtoFuncToLocaleString): Changed to call the new unified + version of formatLocaleDate and remove the ifdef. + (JSC::dateProtoFuncToLocaleDateString): Ditto. + (JSC::dateProtoFuncToLocaleTimeString): Ditto. + + * runtime/JSNotAnObject.cpp: + (JSC::JSNotAnObject::toObject): Use the new ASSERT_UNUSED instead of the + old UNUSED_PARAM. + + * runtime/RegExp.cpp: + (JSC::RegExp::RegExp): Changed to only use UNUSED_PARAM when the parameter + is actually unused. + + * wtf/TCSystemAlloc.cpp: + (TCMalloc_SystemRelease): Changed to only use UNUSED_PARAM when the parameter + is actually unused. + (TCMalloc_SystemCommit): Changed to omit the argument names instead of using + UNUSED_PARAM. + +2009-01-11 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + Fix the build (whoops) + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::cti_op_get_by_val): + +2009-01-11 Oliver Hunt + + Reviewed by Darin Adler and Anders Carlsson + + Bug 23128: get/put_by_val need to respecialise in the face of ByteArray + + Restructure the code slightly, and add comments per Darin's suggestions + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::cti_op_get_by_val): + (JSC::Interpreter::cti_op_get_by_val_byte_array): + (JSC::Interpreter::cti_op_put_by_val): + (JSC::Interpreter::cti_op_put_by_val_byte_array): + +2009-01-11 Oliver Hunt + + Reviewed by Anders Carlsson. + + Whoops, I accidentally removed an exception check from fast the + fast path for string indexing when i originally landed the + byte array logic. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::cti_op_get_by_val): + +2009-01-11 Oliver Hunt + + Reviewed by Anders Carlsson. + + Bug 23128: get/put_by_val need to respecialise in the face of ByteArray + + + Fairly simple patch, add specialised versions of cti_op_get/put_by_val + that assume ByteArray, thus avoiding a few branches in the case of bytearray + manipulation. + + No effect on SunSpider. 15% win on the original testcase. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::cti_op_get_by_val): + (JSC::Interpreter::cti_op_get_by_val_byte_array): + (JSC::Interpreter::cti_op_put_by_val): + (JSC::Interpreter::cti_op_put_by_val_byte_array): + * interpreter/Interpreter.h: + +2009-01-11 Alexey Proskuryakov + + Try to fix Windows build. + + * wtf/CurrentTime.cpp: Added a definition of msPerSecond (previously, this code was in + DateMath.cpp, with constant definition in DateTime.h) + +2009-01-11 Alexey Proskuryakov + + Try to fix Windows build. + + * wtf/CurrentTime.cpp: Include and , as MSDN says to. + +2009-01-11 Dmitry Titov + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=23207 + Moved currentTime() to from WebCore to WTF. + + * GNUmakefile.am: + * JavaScriptCore.exp: added export for WTF::currentTime() + * JavaScriptCore.pri: + * JavaScriptCore.scons: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * runtime/DateMath.cpp: + (JSC::getCurrentUTCTimeWithMicroseconds): This function had another implementation of currentTime(), essentially. Now uses WTF version. + * wtf/CurrentTime.cpp: Added. + (WTF::currentTime): + (WTF::highResUpTime): + (WTF::lowResUTCTime): + (WTF::qpcAvailable): + * wtf/CurrentTime.h: Added. + +2009-01-09 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Stage two of converting JSValue from a pointer to a class type. + Remove the class JSValue. The functionallity has been transitioned + into the wrapper class type JSValuePtr. + + The last stage will be to rename JSValuePtr to JSValue, remove the + overloaded -> operator, and switch operations on JSValuePtrs from + using '->' to use '.' instead. + + * API/APICast.h: + * JavaScriptCore.exp: + * runtime/JSCell.h: + (JSC::asCell): + (JSC::JSValuePtr::asCell): + (JSC::JSValuePtr::isNumber): + (JSC::JSValuePtr::isString): + (JSC::JSValuePtr::isGetterSetter): + (JSC::JSValuePtr::isObject): + (JSC::JSValuePtr::getNumber): + (JSC::JSValuePtr::getString): + (JSC::JSValuePtr::getObject): + (JSC::JSValuePtr::getCallData): + (JSC::JSValuePtr::getConstructData): + (JSC::JSValuePtr::getUInt32): + (JSC::JSValuePtr::getTruncatedInt32): + (JSC::JSValuePtr::getTruncatedUInt32): + (JSC::JSValuePtr::mark): + (JSC::JSValuePtr::marked): + (JSC::JSValuePtr::toPrimitive): + (JSC::JSValuePtr::getPrimitiveNumber): + (JSC::JSValuePtr::toBoolean): + (JSC::JSValuePtr::toNumber): + (JSC::JSValuePtr::toString): + (JSC::JSValuePtr::toObject): + (JSC::JSValuePtr::toThisObject): + (JSC::JSValuePtr::needsThisConversion): + (JSC::JSValuePtr::toThisString): + (JSC::JSValuePtr::getJSNumber): + * runtime/JSImmediate.h: + (JSC::JSValuePtr::isUndefined): + (JSC::JSValuePtr::isNull): + (JSC::JSValuePtr::isUndefinedOrNull): + (JSC::JSValuePtr::isBoolean): + (JSC::JSValuePtr::getBoolean): + (JSC::JSValuePtr::toInt32): + (JSC::JSValuePtr::toUInt32): + * runtime/JSNumberCell.h: + (JSC::JSValuePtr::uncheckedGetNumber): + (JSC::JSValuePtr::toJSNumber): + * runtime/JSObject.h: + (JSC::JSValuePtr::isObject): + (JSC::JSValuePtr::get): + (JSC::JSValuePtr::put): + * runtime/JSString.h: + (JSC::JSValuePtr::toThisJSString): + * runtime/JSValue.cpp: + (JSC::JSValuePtr::toInteger): + (JSC::JSValuePtr::toIntegerPreserveNaN): + (JSC::JSValuePtr::toInt32SlowCase): + (JSC::JSValuePtr::toUInt32SlowCase): + * runtime/JSValue.h: + (JSC::JSValuePtr::makeImmediate): + (JSC::JSValuePtr::immediateValue): + (JSC::JSValuePtr::JSValuePtr): + (JSC::JSValuePtr::operator->): + (JSC::JSValuePtr::operator bool): + (JSC::JSValuePtr::operator==): + (JSC::JSValuePtr::operator!=): + (JSC::JSValuePtr::encode): + (JSC::JSValuePtr::decode): + (JSC::JSValuePtr::toFloat): + (JSC::JSValuePtr::asValue): + (JSC::operator==): + (JSC::operator!=): + +2009-01-09 David Levin + + Reviewed by Oliver Hunt. + + https://bugs.webkit.org/show_bug.cgi?id=23175 + + Adjustment to previous patch. Remove call to initilizeThreading from JSGlobalCreate + and fix jsc.cpp instead. + + * jsc.cpp: + (main): + (jscmain): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::create): + +2009-01-09 Sam Weinig + + Roll r39720 back in with a working interpreted mode. + +2009-01-09 David Levin + + Reviewed by Oliver Hunt. + + https://bugs.webkit.org/show_bug.cgi?id=23175 + + Added a template to make the pointer and flags combination + in UString more readable and less error prone. + + * GNUmakefile.am: + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + Added PtrAndFlags.h (and sorted the xcode project file). + + * runtime/Identifier.cpp: + (JSC::Identifier::add): + (JSC::Identifier::addSlowCase): + * runtime/InitializeThreading.cpp: + (JSC::initializeThreadingOnce): + Made the init threading initialize the UString globals. Before + these were initilized using {} but that became harder due to the + addition of this tempalte class. + + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::create): + * runtime/PropertyNameArray.cpp: + (JSC::PropertyNameArray::add): + * runtime/UString.cpp: + (JSC::initializeStaticBaseString): + (JSC::initializeUString): + (JSC::UString::Rep::create): + (JSC::UString::Rep::createFromUTF8): + (JSC::createRep): + (JSC::UString::UString): + (JSC::concatenate): + (JSC::UString::operator=): + (JSC::UString::makeNull): + (JSC::UString::nullRep): + * runtime/UString.h: + (JSC::UString::Rep::identifierTable): + (JSC::UString::Rep::setIdentifierTable): + (JSC::UString::Rep::isStatic): + (JSC::UString::Rep::setStatic): + (JSC::UString::Rep::): + (JSC::UString::Rep::null): + (JSC::UString::Rep::empty): + (JSC::UString::isNull): + (JSC::UString::null): + (JSC::UString::UString): + + * wtf/PtrAndFlags.h: Added. + (WTF::PtrAndFlags::PtrAndFlags): + (WTF::PtrAndFlags::isFlagSet): + (WTF::PtrAndFlags::setFlag): + (WTF::PtrAndFlags::clearFlag): + (WTF::PtrAndFlags::get): + (WTF::PtrAndFlags::set): + A simple way to layer together a pointer and 2 flags. It relies on the pointer being 4 byte aligned, + which should happen for all allocators (due to aligning pointers, int's, etc. on 4 byte boundaries). + +2009-01-08 Gavin Barraclough + + Reviewed by -O-l-i-v-e-r- -H-u-n-t- Sam Weinig (sorry, Sam!). + + Encode immediates in the low word of JSValuePtrs, on x86-64. + + On 32-bit platforms a JSValuePtr may represent a 31-bit signed integer. + On 64-bit platforms, if USE(ALTERNATE_JSIMMEDIATE) is defined, a full + 32-bit integer may be stored in an immediate. + + Presently USE(ALTERNATE_JSIMMEDIATE) uses the same encoding as the default + immediate format - the value is left shifted by one, so a one bit tag can + be added to indicate the value is an immediate. However this means that + values must be commonly be detagged (by right shifting by one) before + arithmetic operations can be performed on immediates. This patch modifies + the formattting so the the high bits of the immediate mark values as being + integer. + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::not32): + (JSC::MacroAssembler::orPtr): + (JSC::MacroAssembler::zeroExtend32ToPtr): + (JSC::MacroAssembler::jaePtr): + (JSC::MacroAssembler::jbPtr): + (JSC::MacroAssembler::jnzPtr): + (JSC::MacroAssembler::jzPtr): + * assembler/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::notl_r): + (JSC::X86Assembler::testq_i32r): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_lshift): + (JSC::JIT::compileFastArith_op_rshift): + (JSC::JIT::compileFastArith_op_bitand): + (JSC::JIT::compileFastArithSlow_op_bitand): + (JSC::JIT::compileFastArith_op_mod): + (JSC::JIT::compileFastArithSlow_op_mod): + (JSC::JIT::compileFastArith_op_add): + (JSC::JIT::compileFastArith_op_mul): + (JSC::JIT::compileFastArith_op_post_inc): + (JSC::JIT::compileFastArith_op_post_dec): + (JSC::JIT::compileFastArith_op_pre_inc): + (JSC::JIT::compileFastArith_op_pre_dec): + (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): + (JSC::JIT::compileBinaryArithOp): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCallSlowCase): + * jit/JITInlineMethods.h: + (JSC::JIT::emitJumpIfJSCell): + (JSC::JIT::emitJumpIfNotJSCell): + (JSC::JIT::emitJumpIfImmNum): + (JSC::JIT::emitJumpSlowCaseIfNotImmNum): + (JSC::JIT::emitJumpSlowCaseIfNotImmNums): + (JSC::JIT::emitFastArithDeTagImmediate): + (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): + (JSC::JIT::emitFastArithReTagImmediate): + (JSC::JIT::emitFastArithImmToInt): + (JSC::JIT::emitFastArithIntToImmNoCheck): + (JSC::JIT::emitTagAsBoolImmediate): + * jit/JITPropertyAccess.cpp: + (JSC::resizePropertyStorage): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdSelf): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdChain): + (JSC::JIT::privateCompilePutByIdReplace): + * runtime/JSImmediate.h: + (JSC::JSImmediate::isNumber): + (JSC::JSImmediate::isPositiveNumber): + (JSC::JSImmediate::areBothImmediateNumbers): + (JSC::JSImmediate::xorImmediateNumbers): + (JSC::JSImmediate::rightShiftImmediateNumbers): + (JSC::JSImmediate::canDoFastAdditiveOperations): + (JSC::JSImmediate::addImmediateNumbers): + (JSC::JSImmediate::subImmediateNumbers): + (JSC::JSImmediate::makeInt): + (JSC::JSImmediate::toBoolean): + * wtf/Platform.h: + +2009-01-08 Sam Weinig + + Revert r39720. It broke Interpreted mode. + +2009-01-08 Sam Weinig + + Reviewed by Oliver Hunt. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=23197 + Delay creating the PCVector until an exception is thrown + Part of + Don't store exception information for a CodeBlock until first exception is thrown + + - Change the process for re-parsing/re-generating bytecode for exception information + to use data from the original CodeBlock (offsets of GlobalResolve instructions) to + aid in creating an identical instruction stream on re-parse, instead of padding + interchangeable opcodes, which would result in different JITed code. + - Fix bug where the wrong ScopeChainNode was used when re-parsing/regenerating from + within some odd modified scope chains. + - Lazily create the pcVector by re-JITing the regenerated CodeBlock and stealing the + the pcVector from it. + + Saves ~2MB on Membuster head. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): + (JSC::CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset): + (JSC::CodeBlock::hasGlobalResolveInfoAtBytecodeOffset): + * bytecode/CodeBlock.h: + (JSC::JITCodeRef::JITCodeRef): + (JSC::GlobalResolveInfo::GlobalResolveInfo): + (JSC::CodeBlock::getBytecodeIndex): + (JSC::CodeBlock::addGlobalResolveInstruction): + (JSC::CodeBlock::addGlobalResolveInfo): + (JSC::CodeBlock::addFunctionRegisterInfo): + (JSC::CodeBlock::hasExceptionInfo): + (JSC::CodeBlock::pcVector): + (JSC::EvalCodeBlock::EvalCodeBlock): + (JSC::EvalCodeBlock::baseScopeDepth): + * bytecode/Opcode.h: + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): + (JSC::BytecodeGenerator::emitResolve): + (JSC::BytecodeGenerator::emitGetScopedVar): + * bytecompiler/BytecodeGenerator.h: + (JSC::BytecodeGenerator::setRegeneratingForExceptionInfo): + * interpreter/Interpreter.cpp: + (JSC::bytecodeOffsetForPC): + (JSC::Interpreter::unwindCallFrame): + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::retrieveLastCaller): + (JSC::Interpreter::cti_op_instanceof): + (JSC::Interpreter::cti_op_call_NotJSFunction): + (JSC::Interpreter::cti_op_resolve): + (JSC::Interpreter::cti_op_construct_NotJSConstruct): + (JSC::Interpreter::cti_op_resolve_func): + (JSC::Interpreter::cti_op_resolve_skip): + (JSC::Interpreter::cti_op_resolve_global): + (JSC::Interpreter::cti_op_resolve_with_base): + (JSC::Interpreter::cti_op_throw): + (JSC::Interpreter::cti_op_in): + (JSC::Interpreter::cti_vm_throw): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + * parser/Nodes.cpp: + (JSC::EvalNode::generateBytecode): + (JSC::EvalNode::bytecodeForExceptionInfoReparse): + (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse): + * parser/Nodes.h: + +2009-01-08 Jian Li + + Reviewed by Alexey Proskuryakov. + + Add Win32 implementation of ThreadSpecific. + https://bugs.webkit.org/show_bug.cgi?id=22614 + + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * wtf/ThreadSpecific.h: + (WTF::ThreadSpecific::ThreadSpecific): + (WTF::ThreadSpecific::~ThreadSpecific): + (WTF::ThreadSpecific::get): + (WTF::ThreadSpecific::set): + (WTF::ThreadSpecific::destroy): + * wtf/ThreadSpecificWin.cpp: Added. + (WTF::ThreadSpecificThreadExit): + * wtf/ThreadingWin.cpp: + (WTF::wtfThreadEntryPoint): + +2009-01-08 Justin McPherson + + Reviewed by Simon Hausmann. + + Fix compilation with Qt on NetBSD. + + * runtime/Collector.cpp: + (JSC::currentThreadStackBase): Use PLATFORM(NETBSD) to enter the + code path to retrieve the stack base using pthread_attr_get_np. + The PTHREAD_NP_H define is not used because the header file does + not exist on NetBSD, but the function is declared nevertheless. + * wtf/Platform.h: Introduce WTF_PLATFORM_NETBSD. + +2009-01-07 Sam Weinig + + Reviewed by Geoffrey Garen. + + Don't store exception information for a CodeBlock until first exception is thrown + + Don't initially store exception information (lineNumber/expressionRange/getByIdExcecptionInfo) + in CodeBlocks blocks. Instead, re-parse for the data on demand and cache it then. + + One important change that was needed to make this work was to pad op_get_global_var with nops to + be the same length as op_resolve_global, since one could be replaced for the other on re-parsing, + and we want to keep the offsets bytecode offsets the same. + + 1.3MB improvement on Membuster head. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): Update op_get_global_var to account for the padding. + (JSC::CodeBlock::dumpStatistics): Add more statistic dumping. + (JSC::CodeBlock::CodeBlock): Initialize m_exceptionInfo. + (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): Re-parses the CodeBlocks + associated SourceCode and steals the ExceptionInfo from it. + (JSC::CodeBlock::lineNumberForBytecodeOffset): Creates the exception info on demand. + (JSC::CodeBlock::expressionRangeForBytecodeOffset): Ditto. + (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset): Ditto. + * bytecode/CodeBlock.h: + (JSC::CodeBlock::numberOfExceptionHandlers): Updated to account for m_exceptionInfo indirection. + (JSC::CodeBlock::addExceptionHandler): Ditto. + (JSC::CodeBlock::exceptionHandler): Ditto. + (JSC::CodeBlock::clearExceptionInfo): Ditto. + (JSC::CodeBlock::addExpressionInfo): Ditto. + (JSC::CodeBlock::addGetByIdExceptionInfo): Ditto. + (JSC::CodeBlock::numberOfLineInfos): Ditto. + (JSC::CodeBlock::addLineInfo): Ditto. + (JSC::CodeBlock::lastLineInfo): Ditto. + + * bytecode/Opcode.h: Change length of op_get_global_var to match op_resolve_global. + + * bytecode/SamplingTool.cpp: + (JSC::SamplingTool::dump): Add comment indicating why it is okay not to pass a CallFrame. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::generate): Clear the exception info after generation for Function and Eval + Code when not in regenerate for exception info mode. + (JSC::BytecodeGenerator::BytecodeGenerator): Initialize m_regeneratingForExceptionInfo to false. + (JSC::BytecodeGenerator::emitGetScopedVar): Pad op_get_global_var with 2 nops. + * bytecompiler/BytecodeGenerator.h: + (JSC::BytecodeGenerator::setRegeneratingForExcpeptionInfo): Added. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::throwException): Pass the CallFrame to exception info accessors. + (JSC::Interpreter::privateExecute): Ditto. + (JSC::Interpreter::retrieveLastCaller): Ditto. + (JSC::Interpreter::cti_op_new_error): Ditto. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): Pass the current bytecode offset instead of hard coding the + line number, the stub will do the accessing if it gets called. + + * parser/Nodes.cpp: + (JSC::ProgramNode::emitBytecode): Moved. + (JSC::ProgramNode::generateBytecode): Moved. + (JSC::EvalNode::create): Moved. + (JSC::EvalNode::bytecodeForExceptionInfoReparse): Added. + (JSC::FunctionBodyNode::generateBytecode): Rename reparse to reparseInPlace. + (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse): Addded. + + * parser/Nodes.h: + (JSC::ScopeNode::features): Added getter. + * parser/Parser.cpp: + (JSC::Parser::reparseInPlace): Renamed from reparse. + * parser/Parser.h: + (JSC::Parser::reparse): Added. Re-parses the passed in Node into + a new Node. + * runtime/ExceptionHelpers.cpp: + (JSC::createUndefinedVariableError): Pass along CallFrame. + (JSC::createInvalidParamError): Ditto. + (JSC::createNotAConstructorError): Ditto. + (JSC::createNotAFunctionError): Ditto. + (JSC::createNotAnObjectError): Ditto. + +2009-01-06 Gavin Barraclough + + Reviewed by Maciej Stachowiak. + + Replace accidentally removed references in BytecodeGenerator, deleting these + will be hindering the sharing of constant numbers and strings. + + The code to add a new constant (either number or string) to their respective + map works by attempting to add a null entry, then checking the result of the + add for null. The first time, this should return the null (or noValue). + The code checks for null (to see if this is the initial add), and then allocates + a new number / string object. This code relies on the result returned from + the add to the map being stored as a reference, such that the allocated object + will be stored in the map, and will be resused if the same constant is encountered + again. By failing to use a reference we will be leaking GC object for each + additional entry added to the map. As GC objects they should be clollected, + be we should no be allocatin them in the first place. + + https://bugs.webkit.org/show_bug.cgi?id=23158 + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitLoad): + +2009-01-06 Oliver Hunt + + Reviewed by Gavin Barraclough. + + JavaScript register file should use VirtualAlloc on Windows + + Fairly simple, just reserve 4Mb of address space for the + register file, and then commit one section at a time. We + don't release committed memory as we drop back, but then + mac doesn't either so this probably not too much of a + problem. + + * interpreter/RegisterFile.cpp: + (JSC::RegisterFile::~RegisterFile): + * interpreter/RegisterFile.h: + (JSC::RegisterFile::RegisterFile): + (JSC::RegisterFile::grow): + +2009-01-06 Alexey Proskuryakov + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=23142 + ThreadGlobalData leaks seen on buildbot + + * wtf/ThreadSpecific.h: (WTF::ThreadSpecific::destroy): Temporarily reset the thread + specific value to make getter work on Mac OS X. + + * wtf/Platform.h: Touch this file again to make sure all Windows builds use the most recent + version of ThreadSpecific.h. + +2009-01-05 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Replace all uses of JSValue* with a new smart pointer type, JSValuePtr. + + A JavaScript value may be a heap object or boxed primitive, represented by a + pointer, or may be an unboxed immediate value, such as an integer. Since a + value may dynamically need to contain either a pointer value or an immediate, + we encode immediates as pointer values (since all valid JSCell pointers are + allocated at alligned addesses, unaligned addresses are available to encode + immediates). As such all JavaScript values are represented using a JSValue*. + + This implementation is encumbered by a number of constraints. It ties the + JSValue representation to the size of pointer on the platform, which, for + example, means that we currently can represent different ranges of integers + as immediates on x86 and x86-64. It also prevents us from overloading the + to-boolean conversion used to test for noValue() - effectively forcing us + to represent noValue() as 0. This would potentially be problematic were we + to wish to encode integer values differently (e.g. were we to use the v8 + encoding, where pointers are tagged with 1 and integers with 0, then the + immediate integer 0 would conflict with noValue()). + + This patch replaces all usage of JSValue* with a new class, JSValuePtr, + which encapsulates the pointer. JSValuePtr maintains the same interface as + JSValue*, overloading operator-> and operator bool such that previous + operations in the code on variables of type JSValue* are still supported. + + In order to provide a ProtectPtr<> type with support for the new value + representation (without using the internal JSValue type directly), a new + ProtectJSValuePtr type has been added, equivalent to the previous type + ProtectPtr. + + This patch is likely the first in a sequence of three changes. With the + value now encapsulated it will likely make sense to migrate the functionality + from JSValue into JSValuePtr, such that the internal pointer representation + need not be exposed. Through migrating the functionality to the wrapper + class the existing JSValue should be rendered redundant, and the class is + likely to be removed (the JSValuePtr now wrapping a pointer to a JSCell). + At this stage it will likely make sense to rename JSValuePtr to JSValue. + + https://bugs.webkit.org/show_bug.cgi?id=23114 + + * API/APICast.h: + (toJS): + (toRef): + * API/JSBase.cpp: + (JSEvaluateScript): + * API/JSCallbackConstructor.h: + (JSC::JSCallbackConstructor::createStructure): + * API/JSCallbackFunction.cpp: + (JSC::JSCallbackFunction::call): + * API/JSCallbackFunction.h: + (JSC::JSCallbackFunction::createStructure): + * API/JSCallbackObject.h: + (JSC::JSCallbackObject::createStructure): + * API/JSCallbackObjectFunctions.h: + (JSC::::asCallbackObject): + (JSC::::put): + (JSC::::hasInstance): + (JSC::::call): + (JSC::::staticValueGetter): + (JSC::::staticFunctionGetter): + (JSC::::callbackGetter): + * API/JSContextRef.cpp: + * API/JSObjectRef.cpp: + (JSObjectMakeConstructor): + (JSObjectSetPrototype): + (JSObjectGetProperty): + (JSObjectSetProperty): + (JSObjectGetPropertyAtIndex): + (JSObjectSetPropertyAtIndex): + * API/JSValueRef.cpp: + (JSValueGetType): + (JSValueIsUndefined): + (JSValueIsNull): + (JSValueIsBoolean): + (JSValueIsNumber): + (JSValueIsString): + (JSValueIsObject): + (JSValueIsObjectOfClass): + (JSValueIsEqual): + (JSValueIsStrictEqual): + (JSValueIsInstanceOfConstructor): + (JSValueToBoolean): + (JSValueToNumber): + (JSValueToStringCopy): + (JSValueToObject): + (JSValueProtect): + (JSValueUnprotect): + * JavaScriptCore.exp: + * bytecode/CodeBlock.cpp: + (JSC::valueToSourceString): + (JSC::constantName): + (JSC::CodeBlock::dump): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::getConstant): + (JSC::CodeBlock::addUnexpectedConstant): + (JSC::CodeBlock::unexpectedConstant): + * bytecode/EvalCodeCache.h: + (JSC::EvalCodeCache::get): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): + (JSC::BytecodeGenerator::addConstant): + (JSC::BytecodeGenerator::addUnexpectedConstant): + (JSC::BytecodeGenerator::emitLoad): + (JSC::BytecodeGenerator::emitLoadJSV): + (JSC::BytecodeGenerator::emitGetScopedVar): + (JSC::BytecodeGenerator::emitPutScopedVar): + (JSC::BytecodeGenerator::emitNewError): + (JSC::keyForImmediateSwitch): + * bytecompiler/BytecodeGenerator.h: + (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue): + (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue): + * debugger/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::evaluate): + * debugger/DebuggerCallFrame.h: + (JSC::DebuggerCallFrame::DebuggerCallFrame): + (JSC::DebuggerCallFrame::exception): + * interpreter/CallFrame.cpp: + (JSC::CallFrame::thisValue): + * interpreter/CallFrame.h: + (JSC::ExecState::setException): + (JSC::ExecState::exception): + (JSC::ExecState::exceptionSlot): + (JSC::ExecState::hadException): + * interpreter/Interpreter.cpp: + (JSC::fastIsNumber): + (JSC::fastToInt32): + (JSC::fastToUInt32): + (JSC::jsLess): + (JSC::jsLessEq): + (JSC::jsAddSlowCase): + (JSC::jsAdd): + (JSC::jsTypeStringForValue): + (JSC::jsIsObjectType): + (JSC::jsIsFunctionType): + (JSC::Interpreter::resolve): + (JSC::Interpreter::resolveSkip): + (JSC::Interpreter::resolveGlobal): + (JSC::inlineResolveBase): + (JSC::Interpreter::resolveBase): + (JSC::Interpreter::resolveBaseAndProperty): + (JSC::Interpreter::resolveBaseAndFunc): + (JSC::isNotObject): + (JSC::Interpreter::callEval): + (JSC::Interpreter::unwindCallFrame): + (JSC::Interpreter::throwException): + (JSC::Interpreter::execute): + (JSC::Interpreter::checkTimeout): + (JSC::Interpreter::createExceptionScope): + (JSC::cachePrototypeChain): + (JSC::Interpreter::tryCachePutByID): + (JSC::countPrototypeChainEntriesAndCheckForProxies): + (JSC::Interpreter::tryCacheGetByID): + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::retrieveArguments): + (JSC::Interpreter::retrieveCaller): + (JSC::Interpreter::retrieveLastCaller): + (JSC::Interpreter::tryCTICachePutByID): + (JSC::Interpreter::tryCTICacheGetByID): + (JSC::returnToThrowTrampoline): + (JSC::Interpreter::cti_op_convert_this): + (JSC::Interpreter::cti_op_add): + (JSC::Interpreter::cti_op_pre_inc): + (JSC::Interpreter::cti_op_loop_if_less): + (JSC::Interpreter::cti_op_loop_if_lesseq): + (JSC::Interpreter::cti_op_get_by_id_generic): + (JSC::Interpreter::cti_op_get_by_id): + (JSC::Interpreter::cti_op_get_by_id_second): + (JSC::Interpreter::cti_op_get_by_id_self_fail): + (JSC::Interpreter::cti_op_get_by_id_proto_list): + (JSC::Interpreter::cti_op_get_by_id_proto_list_full): + (JSC::Interpreter::cti_op_get_by_id_proto_fail): + (JSC::Interpreter::cti_op_get_by_id_array_fail): + (JSC::Interpreter::cti_op_get_by_id_string_fail): + (JSC::Interpreter::cti_op_instanceof): + (JSC::Interpreter::cti_op_del_by_id): + (JSC::Interpreter::cti_op_mul): + (JSC::Interpreter::cti_op_call_NotJSFunction): + (JSC::Interpreter::cti_op_resolve): + (JSC::Interpreter::cti_op_construct_NotJSConstruct): + (JSC::Interpreter::cti_op_get_by_val): + (JSC::Interpreter::cti_op_resolve_func): + (JSC::Interpreter::cti_op_sub): + (JSC::Interpreter::cti_op_put_by_val): + (JSC::Interpreter::cti_op_put_by_val_array): + (JSC::Interpreter::cti_op_lesseq): + (JSC::Interpreter::cti_op_loop_if_true): + (JSC::Interpreter::cti_op_negate): + (JSC::Interpreter::cti_op_resolve_base): + (JSC::Interpreter::cti_op_resolve_skip): + (JSC::Interpreter::cti_op_resolve_global): + (JSC::Interpreter::cti_op_div): + (JSC::Interpreter::cti_op_pre_dec): + (JSC::Interpreter::cti_op_jless): + (JSC::Interpreter::cti_op_not): + (JSC::Interpreter::cti_op_jtrue): + (JSC::Interpreter::cti_op_post_inc): + (JSC::Interpreter::cti_op_eq): + (JSC::Interpreter::cti_op_lshift): + (JSC::Interpreter::cti_op_bitand): + (JSC::Interpreter::cti_op_rshift): + (JSC::Interpreter::cti_op_bitnot): + (JSC::Interpreter::cti_op_resolve_with_base): + (JSC::Interpreter::cti_op_mod): + (JSC::Interpreter::cti_op_less): + (JSC::Interpreter::cti_op_neq): + (JSC::Interpreter::cti_op_post_dec): + (JSC::Interpreter::cti_op_urshift): + (JSC::Interpreter::cti_op_bitxor): + (JSC::Interpreter::cti_op_bitor): + (JSC::Interpreter::cti_op_call_eval): + (JSC::Interpreter::cti_op_throw): + (JSC::Interpreter::cti_op_next_pname): + (JSC::Interpreter::cti_op_typeof): + (JSC::Interpreter::cti_op_is_undefined): + (JSC::Interpreter::cti_op_is_boolean): + (JSC::Interpreter::cti_op_is_number): + (JSC::Interpreter::cti_op_is_string): + (JSC::Interpreter::cti_op_is_object): + (JSC::Interpreter::cti_op_is_function): + (JSC::Interpreter::cti_op_stricteq): + (JSC::Interpreter::cti_op_nstricteq): + (JSC::Interpreter::cti_op_to_jsnumber): + (JSC::Interpreter::cti_op_in): + (JSC::Interpreter::cti_op_switch_imm): + (JSC::Interpreter::cti_op_switch_char): + (JSC::Interpreter::cti_op_switch_string): + (JSC::Interpreter::cti_op_del_by_val): + (JSC::Interpreter::cti_op_new_error): + (JSC::Interpreter::cti_vm_throw): + * interpreter/Interpreter.h: + (JSC::Interpreter::isJSArray): + (JSC::Interpreter::isJSString): + * interpreter/Register.h: + (JSC::Register::): + (JSC::Register::Register): + (JSC::Register::jsValue): + (JSC::Register::getJSValue): + * jit/JIT.cpp: + (JSC::): + (JSC::JIT::compileOpStrictEq): + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + * jit/JIT.h: + (JSC::): + (JSC::JIT::execute): + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_rshift): + (JSC::JIT::compileFastArithSlow_op_rshift): + * jit/JITCall.cpp: + (JSC::JIT::unlinkCall): + (JSC::JIT::compileOpCallInitializeCallFrame): + (JSC::JIT::compileOpCall): + * jit/JITInlineMethods.h: + (JSC::JIT::emitGetVirtualRegister): + (JSC::JIT::getConstantOperand): + (JSC::JIT::isOperandConstant31BitImmediateInt): + (JSC::JIT::emitPutJITStubArgFromVirtualRegister): + (JSC::JIT::emitInitRegister): + * jit/JITPropertyAccess.cpp: + (JSC::resizePropertyStorage): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::patchGetByIdSelf): + (JSC::JIT::patchPutByIdReplace): + (JSC::JIT::privateCompileGetByIdSelf): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + (JSC::JIT::privateCompilePutByIdReplace): + * jsc.cpp: + (functionPrint): + (functionDebug): + (functionGC): + (functionVersion): + (functionRun): + (functionLoad): + (functionReadline): + (functionQuit): + * parser/Nodes.cpp: + (JSC::NullNode::emitBytecode): + (JSC::ArrayNode::emitBytecode): + (JSC::FunctionCallValueNode::emitBytecode): + (JSC::FunctionCallResolveNode::emitBytecode): + (JSC::VoidNode::emitBytecode): + (JSC::ConstDeclNode::emitCodeSingle): + (JSC::ReturnNode::emitBytecode): + (JSC::processClauseList): + (JSC::EvalNode::emitBytecode): + (JSC::FunctionBodyNode::emitBytecode): + (JSC::ProgramNode::emitBytecode): + * profiler/ProfileGenerator.cpp: + (JSC::ProfileGenerator::addParentForConsoleStart): + * profiler/Profiler.cpp: + (JSC::Profiler::willExecute): + (JSC::Profiler::didExecute): + (JSC::Profiler::createCallIdentifier): + * profiler/Profiler.h: + * runtime/ArgList.cpp: + (JSC::ArgList::slowAppend): + * runtime/ArgList.h: + (JSC::ArgList::at): + (JSC::ArgList::append): + * runtime/Arguments.cpp: + (JSC::Arguments::put): + * runtime/Arguments.h: + (JSC::Arguments::createStructure): + (JSC::asArguments): + * runtime/ArrayConstructor.cpp: + (JSC::callArrayConstructor): + * runtime/ArrayPrototype.cpp: + (JSC::getProperty): + (JSC::putProperty): + (JSC::arrayProtoFuncToString): + (JSC::arrayProtoFuncToLocaleString): + (JSC::arrayProtoFuncJoin): + (JSC::arrayProtoFuncConcat): + (JSC::arrayProtoFuncPop): + (JSC::arrayProtoFuncPush): + (JSC::arrayProtoFuncReverse): + (JSC::arrayProtoFuncShift): + (JSC::arrayProtoFuncSlice): + (JSC::arrayProtoFuncSort): + (JSC::arrayProtoFuncSplice): + (JSC::arrayProtoFuncUnShift): + (JSC::arrayProtoFuncFilter): + (JSC::arrayProtoFuncMap): + (JSC::arrayProtoFuncEvery): + (JSC::arrayProtoFuncForEach): + (JSC::arrayProtoFuncSome): + (JSC::arrayProtoFuncIndexOf): + (JSC::arrayProtoFuncLastIndexOf): + * runtime/BooleanConstructor.cpp: + (JSC::callBooleanConstructor): + (JSC::constructBooleanFromImmediateBoolean): + * runtime/BooleanConstructor.h: + * runtime/BooleanObject.h: + (JSC::asBooleanObject): + * runtime/BooleanPrototype.cpp: + (JSC::booleanProtoFuncToString): + (JSC::booleanProtoFuncValueOf): + * runtime/CallData.cpp: + (JSC::call): + * runtime/CallData.h: + * runtime/Collector.cpp: + (JSC::Heap::protect): + (JSC::Heap::unprotect): + (JSC::Heap::heap): + (JSC::Heap::collect): + * runtime/Collector.h: + * runtime/Completion.cpp: + (JSC::evaluate): + * runtime/Completion.h: + (JSC::Completion::Completion): + (JSC::Completion::value): + (JSC::Completion::setValue): + (JSC::Completion::isValueCompletion): + * runtime/ConstructData.cpp: + (JSC::construct): + * runtime/ConstructData.h: + * runtime/DateConstructor.cpp: + (JSC::constructDate): + (JSC::callDate): + (JSC::dateParse): + (JSC::dateNow): + (JSC::dateUTC): + * runtime/DateInstance.h: + (JSC::asDateInstance): + * runtime/DatePrototype.cpp: + (JSC::dateProtoFuncToString): + (JSC::dateProtoFuncToUTCString): + (JSC::dateProtoFuncToDateString): + (JSC::dateProtoFuncToTimeString): + (JSC::dateProtoFuncToLocaleString): + (JSC::dateProtoFuncToLocaleDateString): + (JSC::dateProtoFuncToLocaleTimeString): + (JSC::dateProtoFuncValueOf): + (JSC::dateProtoFuncGetTime): + (JSC::dateProtoFuncGetFullYear): + (JSC::dateProtoFuncGetUTCFullYear): + (JSC::dateProtoFuncToGMTString): + (JSC::dateProtoFuncGetMonth): + (JSC::dateProtoFuncGetUTCMonth): + (JSC::dateProtoFuncGetDate): + (JSC::dateProtoFuncGetUTCDate): + (JSC::dateProtoFuncGetDay): + (JSC::dateProtoFuncGetUTCDay): + (JSC::dateProtoFuncGetHours): + (JSC::dateProtoFuncGetUTCHours): + (JSC::dateProtoFuncGetMinutes): + (JSC::dateProtoFuncGetUTCMinutes): + (JSC::dateProtoFuncGetSeconds): + (JSC::dateProtoFuncGetUTCSeconds): + (JSC::dateProtoFuncGetMilliSeconds): + (JSC::dateProtoFuncGetUTCMilliseconds): + (JSC::dateProtoFuncGetTimezoneOffset): + (JSC::dateProtoFuncSetTime): + (JSC::setNewValueFromTimeArgs): + (JSC::setNewValueFromDateArgs): + (JSC::dateProtoFuncSetMilliSeconds): + (JSC::dateProtoFuncSetUTCMilliseconds): + (JSC::dateProtoFuncSetSeconds): + (JSC::dateProtoFuncSetUTCSeconds): + (JSC::dateProtoFuncSetMinutes): + (JSC::dateProtoFuncSetUTCMinutes): + (JSC::dateProtoFuncSetHours): + (JSC::dateProtoFuncSetUTCHours): + (JSC::dateProtoFuncSetDate): + (JSC::dateProtoFuncSetUTCDate): + (JSC::dateProtoFuncSetMonth): + (JSC::dateProtoFuncSetUTCMonth): + (JSC::dateProtoFuncSetFullYear): + (JSC::dateProtoFuncSetUTCFullYear): + (JSC::dateProtoFuncSetYear): + (JSC::dateProtoFuncGetYear): + * runtime/DatePrototype.h: + (JSC::DatePrototype::createStructure): + * runtime/ErrorConstructor.cpp: + (JSC::callErrorConstructor): + * runtime/ErrorPrototype.cpp: + (JSC::errorProtoFuncToString): + * runtime/ExceptionHelpers.cpp: + (JSC::createInterruptedExecutionException): + (JSC::createError): + (JSC::createStackOverflowError): + (JSC::createUndefinedVariableError): + (JSC::createErrorMessage): + (JSC::createInvalidParamError): + (JSC::createNotAConstructorError): + (JSC::createNotAFunctionError): + * runtime/ExceptionHelpers.h: + * runtime/FunctionConstructor.cpp: + (JSC::callFunctionConstructor): + * runtime/FunctionPrototype.cpp: + (JSC::callFunctionPrototype): + (JSC::functionProtoFuncToString): + (JSC::functionProtoFuncApply): + (JSC::functionProtoFuncCall): + * runtime/FunctionPrototype.h: + (JSC::FunctionPrototype::createStructure): + * runtime/GetterSetter.cpp: + (JSC::GetterSetter::toPrimitive): + (JSC::GetterSetter::getPrimitiveNumber): + * runtime/GetterSetter.h: + (JSC::asGetterSetter): + * runtime/InitializeThreading.cpp: + * runtime/InternalFunction.h: + (JSC::InternalFunction::createStructure): + (JSC::asInternalFunction): + * runtime/JSActivation.cpp: + (JSC::JSActivation::getOwnPropertySlot): + (JSC::JSActivation::put): + (JSC::JSActivation::putWithAttributes): + (JSC::JSActivation::argumentsGetter): + * runtime/JSActivation.h: + (JSC::JSActivation::createStructure): + (JSC::asActivation): + * runtime/JSArray.cpp: + (JSC::storageSize): + (JSC::JSArray::JSArray): + (JSC::JSArray::getOwnPropertySlot): + (JSC::JSArray::put): + (JSC::JSArray::putSlowCase): + (JSC::JSArray::deleteProperty): + (JSC::JSArray::getPropertyNames): + (JSC::JSArray::setLength): + (JSC::JSArray::pop): + (JSC::JSArray::push): + (JSC::JSArray::mark): + (JSC::JSArray::sort): + (JSC::JSArray::compactForSorting): + (JSC::JSArray::checkConsistency): + (JSC::constructArray): + * runtime/JSArray.h: + (JSC::JSArray::getIndex): + (JSC::JSArray::setIndex): + (JSC::JSArray::createStructure): + (JSC::asArray): + * runtime/JSCell.cpp: + (JSC::JSCell::put): + (JSC::JSCell::getJSNumber): + * runtime/JSCell.h: + (JSC::asCell): + (JSC::JSValue::asCell): + (JSC::JSValue::toPrimitive): + (JSC::JSValue::getPrimitiveNumber): + (JSC::JSValue::getJSNumber): + * runtime/JSFunction.cpp: + (JSC::JSFunction::call): + (JSC::JSFunction::argumentsGetter): + (JSC::JSFunction::callerGetter): + (JSC::JSFunction::lengthGetter): + (JSC::JSFunction::getOwnPropertySlot): + (JSC::JSFunction::put): + (JSC::JSFunction::construct): + * runtime/JSFunction.h: + (JSC::JSFunction::createStructure): + (JSC::asFunction): + * runtime/JSGlobalData.h: + * runtime/JSGlobalObject.cpp: + (JSC::markIfNeeded): + (JSC::JSGlobalObject::put): + (JSC::JSGlobalObject::putWithAttributes): + (JSC::JSGlobalObject::reset): + (JSC::JSGlobalObject::resetPrototype): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::createStructure): + (JSC::JSGlobalObject::GlobalPropertyInfo::GlobalPropertyInfo): + (JSC::asGlobalObject): + (JSC::Structure::prototypeForLookup): + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::encode): + (JSC::decode): + (JSC::globalFuncEval): + (JSC::globalFuncParseInt): + (JSC::globalFuncParseFloat): + (JSC::globalFuncIsNaN): + (JSC::globalFuncIsFinite): + (JSC::globalFuncDecodeURI): + (JSC::globalFuncDecodeURIComponent): + (JSC::globalFuncEncodeURI): + (JSC::globalFuncEncodeURIComponent): + (JSC::globalFuncEscape): + (JSC::globalFuncUnescape): + (JSC::globalFuncJSCPrint): + * runtime/JSGlobalObjectFunctions.h: + * runtime/JSImmediate.cpp: + (JSC::JSImmediate::toThisObject): + (JSC::JSImmediate::toObject): + (JSC::JSImmediate::prototype): + (JSC::JSImmediate::toString): + * runtime/JSImmediate.h: + (JSC::JSImmediate::isImmediate): + (JSC::JSImmediate::isNumber): + (JSC::JSImmediate::isPositiveNumber): + (JSC::JSImmediate::isBoolean): + (JSC::JSImmediate::isUndefinedOrNull): + (JSC::JSImmediate::isNegative): + (JSC::JSImmediate::isEitherImmediate): + (JSC::JSImmediate::isAnyImmediate): + (JSC::JSImmediate::areBothImmediate): + (JSC::JSImmediate::areBothImmediateNumbers): + (JSC::JSImmediate::andImmediateNumbers): + (JSC::JSImmediate::xorImmediateNumbers): + (JSC::JSImmediate::orImmediateNumbers): + (JSC::JSImmediate::rightShiftImmediateNumbers): + (JSC::JSImmediate::canDoFastAdditiveOperations): + (JSC::JSImmediate::addImmediateNumbers): + (JSC::JSImmediate::subImmediateNumbers): + (JSC::JSImmediate::incImmediateNumber): + (JSC::JSImmediate::decImmediateNumber): + (JSC::JSImmediate::makeValue): + (JSC::JSImmediate::makeInt): + (JSC::JSImmediate::makeBool): + (JSC::JSImmediate::makeUndefined): + (JSC::JSImmediate::makeNull): + (JSC::JSImmediate::intValue): + (JSC::JSImmediate::uintValue): + (JSC::JSImmediate::boolValue): + (JSC::JSImmediate::rawValue): + (JSC::JSImmediate::trueImmediate): + (JSC::JSImmediate::falseImmediate): + (JSC::JSImmediate::undefinedImmediate): + (JSC::JSImmediate::nullImmediate): + (JSC::JSImmediate::zeroImmediate): + (JSC::JSImmediate::oneImmediate): + (JSC::JSImmediate::impossibleValue): + (JSC::JSImmediate::toBoolean): + (JSC::JSImmediate::getTruncatedUInt32): + (JSC::JSImmediate::from): + (JSC::JSImmediate::getTruncatedInt32): + (JSC::JSImmediate::toDouble): + (JSC::JSImmediate::getUInt32): + (JSC::jsNull): + (JSC::jsBoolean): + (JSC::jsUndefined): + (JSC::JSValue::isUndefined): + (JSC::JSValue::isNull): + (JSC::JSValue::isUndefinedOrNull): + (JSC::JSValue::isBoolean): + (JSC::JSValue::getBoolean): + (JSC::JSValue::toInt32): + (JSC::JSValue::toUInt32): + (JSC::toInt32): + (JSC::toUInt32): + * runtime/JSNotAnObject.cpp: + (JSC::JSNotAnObject::toPrimitive): + (JSC::JSNotAnObject::getPrimitiveNumber): + (JSC::JSNotAnObject::put): + * runtime/JSNotAnObject.h: + (JSC::JSNotAnObject::createStructure): + * runtime/JSNumberCell.cpp: + (JSC::JSNumberCell::toPrimitive): + (JSC::JSNumberCell::getPrimitiveNumber): + (JSC::JSNumberCell::getJSNumber): + (JSC::jsNumberCell): + (JSC::jsNaN): + * runtime/JSNumberCell.h: + (JSC::JSNumberCell::createStructure): + (JSC::asNumberCell): + (JSC::jsNumber): + (JSC::JSValue::toJSNumber): + * runtime/JSObject.cpp: + (JSC::JSObject::mark): + (JSC::JSObject::put): + (JSC::JSObject::putWithAttributes): + (JSC::callDefaultValueFunction): + (JSC::JSObject::getPrimitiveNumber): + (JSC::JSObject::defaultValue): + (JSC::JSObject::defineGetter): + (JSC::JSObject::defineSetter): + (JSC::JSObject::lookupGetter): + (JSC::JSObject::lookupSetter): + (JSC::JSObject::hasInstance): + (JSC::JSObject::toNumber): + (JSC::JSObject::toString): + (JSC::JSObject::fillGetterPropertySlot): + * runtime/JSObject.h: + (JSC::JSObject::getDirect): + (JSC::JSObject::getDirectLocation): + (JSC::JSObject::offsetForLocation): + (JSC::JSObject::locationForOffset): + (JSC::JSObject::getDirectOffset): + (JSC::JSObject::putDirectOffset): + (JSC::JSObject::createStructure): + (JSC::asObject): + (JSC::JSObject::prototype): + (JSC::JSObject::setPrototype): + (JSC::JSObject::inlineGetOwnPropertySlot): + (JSC::JSObject::getOwnPropertySlotForWrite): + (JSC::JSObject::getPropertySlot): + (JSC::JSObject::get): + (JSC::JSObject::putDirect): + (JSC::JSObject::putDirectWithoutTransition): + (JSC::JSObject::toPrimitive): + (JSC::JSValue::get): + (JSC::JSValue::put): + (JSC::JSObject::allocatePropertyStorageInline): + * runtime/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::toPrimitive): + (JSC::JSPropertyNameIterator::getPrimitiveNumber): + * runtime/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::create): + (JSC::JSPropertyNameIterator::next): + * runtime/JSStaticScopeObject.cpp: + (JSC::JSStaticScopeObject::put): + (JSC::JSStaticScopeObject::putWithAttributes): + * runtime/JSStaticScopeObject.h: + (JSC::JSStaticScopeObject::JSStaticScopeObject): + (JSC::JSStaticScopeObject::createStructure): + * runtime/JSString.cpp: + (JSC::JSString::toPrimitive): + (JSC::JSString::getPrimitiveNumber): + (JSC::JSString::getOwnPropertySlot): + * runtime/JSString.h: + (JSC::JSString::createStructure): + (JSC::asString): + * runtime/JSValue.h: + (JSC::JSValuePtr::makeImmediate): + (JSC::JSValuePtr::immediateValue): + (JSC::JSValuePtr::JSValuePtr): + (JSC::JSValuePtr::operator->): + (JSC::JSValuePtr::hasValue): + (JSC::JSValuePtr::operator==): + (JSC::JSValuePtr::operator!=): + (JSC::JSValuePtr::encode): + (JSC::JSValuePtr::decode): + (JSC::JSValue::asValue): + (JSC::noValue): + (JSC::operator==): + (JSC::operator!=): + * runtime/JSVariableObject.h: + (JSC::JSVariableObject::symbolTablePut): + (JSC::JSVariableObject::symbolTablePutWithAttributes): + * runtime/JSWrapperObject.cpp: + (JSC::JSWrapperObject::mark): + * runtime/JSWrapperObject.h: + (JSC::JSWrapperObject::internalValue): + (JSC::JSWrapperObject::setInternalValue): + * runtime/Lookup.cpp: + (JSC::setUpStaticFunctionSlot): + * runtime/Lookup.h: + (JSC::lookupPut): + * runtime/MathObject.cpp: + (JSC::mathProtoFuncAbs): + (JSC::mathProtoFuncACos): + (JSC::mathProtoFuncASin): + (JSC::mathProtoFuncATan): + (JSC::mathProtoFuncATan2): + (JSC::mathProtoFuncCeil): + (JSC::mathProtoFuncCos): + (JSC::mathProtoFuncExp): + (JSC::mathProtoFuncFloor): + (JSC::mathProtoFuncLog): + (JSC::mathProtoFuncMax): + (JSC::mathProtoFuncMin): + (JSC::mathProtoFuncPow): + (JSC::mathProtoFuncRandom): + (JSC::mathProtoFuncRound): + (JSC::mathProtoFuncSin): + (JSC::mathProtoFuncSqrt): + (JSC::mathProtoFuncTan): + * runtime/MathObject.h: + (JSC::MathObject::createStructure): + * runtime/NativeErrorConstructor.cpp: + (JSC::callNativeErrorConstructor): + * runtime/NumberConstructor.cpp: + (JSC::numberConstructorNaNValue): + (JSC::numberConstructorNegInfinity): + (JSC::numberConstructorPosInfinity): + (JSC::numberConstructorMaxValue): + (JSC::numberConstructorMinValue): + (JSC::callNumberConstructor): + * runtime/NumberConstructor.h: + (JSC::NumberConstructor::createStructure): + * runtime/NumberObject.cpp: + (JSC::NumberObject::getJSNumber): + (JSC::constructNumberFromImmediateNumber): + * runtime/NumberObject.h: + * runtime/NumberPrototype.cpp: + (JSC::numberProtoFuncToString): + (JSC::numberProtoFuncToLocaleString): + (JSC::numberProtoFuncValueOf): + (JSC::numberProtoFuncToFixed): + (JSC::numberProtoFuncToExponential): + (JSC::numberProtoFuncToPrecision): + * runtime/ObjectConstructor.cpp: + (JSC::constructObject): + (JSC::callObjectConstructor): + * runtime/ObjectPrototype.cpp: + (JSC::objectProtoFuncValueOf): + (JSC::objectProtoFuncHasOwnProperty): + (JSC::objectProtoFuncIsPrototypeOf): + (JSC::objectProtoFuncDefineGetter): + (JSC::objectProtoFuncDefineSetter): + (JSC::objectProtoFuncLookupGetter): + (JSC::objectProtoFuncLookupSetter): + (JSC::objectProtoFuncPropertyIsEnumerable): + (JSC::objectProtoFuncToLocaleString): + (JSC::objectProtoFuncToString): + * runtime/ObjectPrototype.h: + * runtime/Operations.cpp: + (JSC::equal): + (JSC::equalSlowCase): + (JSC::strictEqual): + (JSC::strictEqualSlowCase): + (JSC::throwOutOfMemoryError): + * runtime/Operations.h: + (JSC::equalSlowCaseInline): + (JSC::strictEqualSlowCaseInline): + * runtime/PropertySlot.cpp: + (JSC::PropertySlot::functionGetter): + * runtime/PropertySlot.h: + (JSC::PropertySlot::PropertySlot): + (JSC::PropertySlot::getValue): + (JSC::PropertySlot::putValue): + (JSC::PropertySlot::setValueSlot): + (JSC::PropertySlot::setValue): + (JSC::PropertySlot::setCustom): + (JSC::PropertySlot::setCustomIndex): + (JSC::PropertySlot::slotBase): + (JSC::PropertySlot::setBase): + (JSC::PropertySlot::): + * runtime/Protect.h: + (JSC::gcProtect): + (JSC::gcUnprotect): + (JSC::ProtectedPtr::ProtectedPtr): + (JSC::ProtectedPtr::operator JSValuePtr): + (JSC::ProtectedJSValuePtr::ProtectedJSValuePtr): + (JSC::ProtectedJSValuePtr::get): + (JSC::ProtectedJSValuePtr::operator JSValuePtr): + (JSC::ProtectedJSValuePtr::operator->): + (JSC::::ProtectedPtr): + (JSC::::~ProtectedPtr): + (JSC::::operator): + (JSC::ProtectedJSValuePtr::~ProtectedJSValuePtr): + (JSC::ProtectedJSValuePtr::operator=): + (JSC::operator==): + (JSC::operator!=): + * runtime/RegExpConstructor.cpp: + (JSC::RegExpConstructor::getBackref): + (JSC::RegExpConstructor::getLastParen): + (JSC::RegExpConstructor::getLeftContext): + (JSC::RegExpConstructor::getRightContext): + (JSC::regExpConstructorDollar1): + (JSC::regExpConstructorDollar2): + (JSC::regExpConstructorDollar3): + (JSC::regExpConstructorDollar4): + (JSC::regExpConstructorDollar5): + (JSC::regExpConstructorDollar6): + (JSC::regExpConstructorDollar7): + (JSC::regExpConstructorDollar8): + (JSC::regExpConstructorDollar9): + (JSC::regExpConstructorInput): + (JSC::regExpConstructorMultiline): + (JSC::regExpConstructorLastMatch): + (JSC::regExpConstructorLastParen): + (JSC::regExpConstructorLeftContext): + (JSC::regExpConstructorRightContext): + (JSC::RegExpConstructor::put): + (JSC::setRegExpConstructorInput): + (JSC::setRegExpConstructorMultiline): + (JSC::constructRegExp): + (JSC::callRegExpConstructor): + * runtime/RegExpConstructor.h: + (JSC::RegExpConstructor::createStructure): + (JSC::asRegExpConstructor): + * runtime/RegExpMatchesArray.h: + (JSC::RegExpMatchesArray::put): + * runtime/RegExpObject.cpp: + (JSC::regExpObjectGlobal): + (JSC::regExpObjectIgnoreCase): + (JSC::regExpObjectMultiline): + (JSC::regExpObjectSource): + (JSC::regExpObjectLastIndex): + (JSC::RegExpObject::put): + (JSC::setRegExpObjectLastIndex): + (JSC::RegExpObject::test): + (JSC::RegExpObject::exec): + (JSC::callRegExpObject): + * runtime/RegExpObject.h: + (JSC::RegExpObject::createStructure): + (JSC::asRegExpObject): + * runtime/RegExpPrototype.cpp: + (JSC::regExpProtoFuncTest): + (JSC::regExpProtoFuncExec): + (JSC::regExpProtoFuncCompile): + (JSC::regExpProtoFuncToString): + * runtime/StringConstructor.cpp: + (JSC::stringFromCharCodeSlowCase): + (JSC::stringFromCharCode): + (JSC::callStringConstructor): + * runtime/StringObject.cpp: + (JSC::StringObject::put): + * runtime/StringObject.h: + (JSC::StringObject::createStructure): + (JSC::asStringObject): + * runtime/StringObjectThatMasqueradesAsUndefined.h: + (JSC::StringObjectThatMasqueradesAsUndefined::createStructure): + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): + (JSC::stringProtoFuncToString): + (JSC::stringProtoFuncCharAt): + (JSC::stringProtoFuncCharCodeAt): + (JSC::stringProtoFuncConcat): + (JSC::stringProtoFuncIndexOf): + (JSC::stringProtoFuncLastIndexOf): + (JSC::stringProtoFuncMatch): + (JSC::stringProtoFuncSearch): + (JSC::stringProtoFuncSlice): + (JSC::stringProtoFuncSplit): + (JSC::stringProtoFuncSubstr): + (JSC::stringProtoFuncSubstring): + (JSC::stringProtoFuncToLowerCase): + (JSC::stringProtoFuncToUpperCase): + (JSC::stringProtoFuncLocaleCompare): + (JSC::stringProtoFuncBig): + (JSC::stringProtoFuncSmall): + (JSC::stringProtoFuncBlink): + (JSC::stringProtoFuncBold): + (JSC::stringProtoFuncFixed): + (JSC::stringProtoFuncItalics): + (JSC::stringProtoFuncStrike): + (JSC::stringProtoFuncSub): + (JSC::stringProtoFuncSup): + (JSC::stringProtoFuncFontcolor): + (JSC::stringProtoFuncFontsize): + (JSC::stringProtoFuncAnchor): + (JSC::stringProtoFuncLink): + * runtime/Structure.cpp: + (JSC::Structure::Structure): + (JSC::Structure::changePrototypeTransition): + (JSC::Structure::createCachedPrototypeChain): + * runtime/Structure.h: + (JSC::Structure::create): + (JSC::Structure::setPrototypeWithoutTransition): + (JSC::Structure::storedPrototype): + +2009-01-06 Oliver Hunt + + Reviewed by Cameron Zwarich. + + [jsfunfuzz] Over released ScopeChainNode + + + So this delightful bug was caused by our unwind code using a ScopeChain to perform + the unwind. The ScopeChain would ref the initial top of the scope chain, then deref + the resultant top of scope chain, which is incorrect. + + This patch removes the dependency on ScopeChain for the unwind, and i've filed + to look into the unintuitive + ScopeChain behaviour. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::throwException): + +2009-01-06 Adam Roben + + Hopeful Windows crash-on-launch fix + + * wtf/Platform.h: Force a world rebuild by touching this file. + +2009-01-06 Holger Hans Peter Freyther + + Reviewed by NOBODY (Build fix). + + * GNUmakefile.am:Add ByteArray.cpp too + +2009-01-06 Holger Hans Peter Freyther + + Reviewed by NOBODY (Speculative build fix). + + AllInOneFile.cpp does not include the JSByteArray.cpp include it... + + * GNUmakefile.am: + +2009-01-05 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + Fix Wx build + + * JavaScriptCoreSources.bkl: + +2009-01-05 Oliver Hunt + + Windows build fixes + + Rubber-stamped by Alice Liu. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::Interpreter): + * runtime/ByteArray.cpp: + (JSC::ByteArray::create): + * runtime/ByteArray.h: + +2009-01-05 Oliver Hunt + + Reviewed by Gavin Barraclough. + + CanvasPixelArray performance is too slow + + + The fix to this is to devirtualise get and put in a manner similar to + JSString and JSArray. To do this I've added a ByteArray implementation + and JSByteArray wrapper to JSC. We can then do vptr comparisons to + devirtualise the calls. + + This devirtualisation improves performance by 1.5-2x in my somewhat ad + hoc tests. + + * GNUmakefile.am: + * JavaScriptCore.exp: + * JavaScriptCore.pri: + * JavaScriptCore.scons: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::Interpreter): + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::cti_op_get_by_val): + (JSC::Interpreter::cti_op_put_by_val): + * interpreter/Interpreter.h: + (JSC::Interpreter::isJSByteArray): + * runtime/ByteArray.cpp: Added. + (JSC::ByteArray::create): + * runtime/ByteArray.h: Added. + (JSC::ByteArray::length): + (JSC::ByteArray::set): + (JSC::ByteArray::get): + (JSC::ByteArray::data): + (JSC::ByteArray::ByteArray): + * runtime/JSByteArray.cpp: Added. + (JSC::): + (JSC::JSByteArray::JSByteArray): + (JSC::JSByteArray::createStructure): + (JSC::JSByteArray::getOwnPropertySlot): + (JSC::JSByteArray::put): + (JSC::JSByteArray::getPropertyNames): + * runtime/JSByteArray.h: Added. + (JSC::JSByteArray::canAccessIndex): + (JSC::JSByteArray::getIndex): + (JSC::JSByteArray::setIndex): + (JSC::JSByteArray::classInfo): + (JSC::JSByteArray::length): + (JSC::JSByteArray::): + (JSC::JSByteArray::JSByteArray): + (JSC::asByteArray): + +2009-01-05 Alexey Proskuryakov + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=23073 + Workers crash on Windows Release builds + + * wtf/ThreadSpecific.h: + (WTF::ThreadSpecific::destroy): Changed to clear the pointer only after data object + destruction is finished - otherwise, WebCore::ThreadGlobalData destructor was re-creating + the object in order to access atomic string table. + (WTF::ThreadSpecific::operator T*): Symmetrically, set up the per-thread pointer before + data constructor is called. + + * wtf/ThreadingWin.cpp: (WTF::wtfThreadEntryPoint): Remove a Windows-only hack to finalize + a thread - pthreadVC2 is a DLL, so it gets thread detached messages, and cleans up thread + specific data automatically. Besides, this code wasn't even compiled in for some time now. + +2009-01-05 Alexey Proskuryakov + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=23115 + Create a version of ASSERT for use with otherwise unused variables + + * wtf/Assertions.h: Added ASSERT_UNUSED. + + * jit/ExecutableAllocatorPosix.cpp: + (JSC::ExecutablePool::systemRelease): + * runtime/Collector.cpp: + (JSC::Heap::destroy): + (JSC::Heap::heapAllocate): + * runtime/JSNotAnObject.cpp: + (JSC::JSNotAnObject::toPrimitive): + (JSC::JSNotAnObject::getPrimitiveNumber): + (JSC::JSNotAnObject::toBoolean): + (JSC::JSNotAnObject::toNumber): + (JSC::JSNotAnObject::toString): + (JSC::JSNotAnObject::getOwnPropertySlot): + (JSC::JSNotAnObject::put): + (JSC::JSNotAnObject::deleteProperty): + (JSC::JSNotAnObject::getPropertyNames): + * wtf/TCSystemAlloc.cpp: + (TCMalloc_SystemRelease): + Use it in some places that used other idioms for this purpose. + +2009-01-04 Alice Liu + + Merge m_transitionCount and m_offset in Structure. + + Reviewed by Darin Adler. + + * runtime/Structure.cpp: + (JSC::Structure::Structure): Remove m_transitionCount + (JSC::Structure::addPropertyTransitionToExistingStructure): No need to wait until after the assignment to offset to assert if it's notFound; move it up. + (JSC::Structure::addPropertyTransition): Use method for transitionCount instead of m_transitionCount. Remove line that maintains the m_transitionCount. + (JSC::Structure::changePrototypeTransition): Remove line that maintains the m_transitionCount. + (JSC::Structure::getterSetterTransition): Remove line that maintains the m_transitionCount. + * runtime/Structure.h: + Changed s_maxTransitionLength and m_offset from size_t to signed char. m_offset will never become greater than 64 + because the structure transitions to a dictionary at that time. + (JSC::Structure::transitionCount): method to replace the data member + +2009-01-04 Darin Adler + + Reviewed by David Kilzer. + + Bug 15114: Provide compile-time assertions for sizeof(UChar), sizeof(DeprecatedChar), etc. + https://bugs.webkit.org/show_bug.cgi?id=15114 + + * wtf/unicode/Unicode.h: Assert size of UChar. There is no DeprecatedChar any more. + +2009-01-03 Sam Weinig + + Reviewed by Oliver Hunt. + + Change the pcVector from storing native code pointers to storing offsets + from the base pointer. This will allow us to generate the pcVector on demand + for exceptions. + + * bytecode/CodeBlock.h: + (JSC::PC::PC): + (JSC::getNativePCOffset): + (JSC::CodeBlock::getBytecodeIndex): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + +2009-01-02 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + * runtime/ScopeChain.cpp: + +2009-01-02 Oliver Hunt + + Reviewed by Gavin Barraclough. + + [jsfunfuzz] unwind logic for exceptions in eval fails to account for dynamic scope external to the eval + https://bugs.webkit.org/show_bug.cgi?id=23078 + + This bug was caused by eval codeblocks being generated without accounting + for the depth of the scope chain they inherited. This meant that exception + handlers would understate their expected scope chain depth, which in turn + led to incorrectly removing nodes from the scope chain. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): + (JSC::BytecodeGenerator::emitCatch): + * bytecompiler/BytecodeGenerator.h: + * interpreter/Interpreter.cpp: + (JSC::depth): + * runtime/ScopeChain.cpp: + (JSC::ScopeChain::localDepth): + * runtime/ScopeChain.h: + (JSC::ScopeChainNode::deref): + (JSC::ScopeChainNode::ref): + +2009-01-02 David Smith + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=22699 + Enable NodeList caching for getElementsByTagName + + * wtf/HashFunctions.h: Moved the definition of PHI here and renamed to stringHashingStartValue + +2009-01-02 David Kilzer + + Attempt to fix Qt Linux build after r39553 + + * wtf/RandomNumberSeed.h: Include for gettimeofday(). + Include and for getpid(). + +2009-01-02 David Kilzer + + Bug 23081: These files are no longer part of the KDE libraries + + + + Reviewed by Darin Adler. + + Removed "This file is part of the KDE libraries" comment from + source files. Added or updated Apple copyrights as well. + + * parser/Lexer.h: + * wtf/HashCountedSet.h: + * wtf/RetainPtr.h: + * wtf/VectorTraits.h: + +2009-01-02 David Kilzer + + Bug 23080: Remove last vestiges of KJS references + + + + Reviewed by Darin Adler. + + Also updated Apple copyright statements. + + * DerivedSources.make: Changed bison "kjsyy" prefix to "jscyy". + * GNUmakefile.am: Ditto. + * JavaScriptCore.pri: Ditto. Also changed KJSBISON to JSCBISON + and kjsbison to jscbison. + + * JavaScriptCoreSources.bkl: Changed JSCORE_KJS_SOURCES to + JSCORE_JSC_SOURCES. + * jscore.bkl: Ditto. + + * create_hash_table: Updated copyright and removed old comment. + + * parser/Grammar.y: Changed "kjsyy" prefix to "jscyy" prefix. + * parser/Lexer.cpp: Ditto. Also changed KJS_DEBUG_LEX to + JSC_DEBUG_LEX. + (jscyylex): + (JSC::Lexer::lex): + * parser/Parser.cpp: Ditto. + (JSC::Parser::parse): + + * pcre/dftables: Changed "kjs_pcre_" prefix to "jsc_pcre_". + * pcre/pcre_compile.cpp: Ditto. + (getOthercaseRange): + (encodeUTF8): + (compileBranch): + (calculateCompiledPatternLength): + * pcre/pcre_exec.cpp: Ditto. + (matchRef): + (getUTF8CharAndIncrementLength): + (match): + * pcre/pcre_internal.h: Ditto. + (toLowerCase): + (flipCase): + (classBitmapForChar): + (charTypeForChar): + * pcre/pcre_tables.cpp: Ditto. + * pcre/pcre_ucp_searchfuncs.cpp: Ditto. + (jsc_pcre_ucp_othercase): + * pcre/pcre_xclass.cpp: Ditto. + (getUTF8CharAndAdvancePointer): + (jsc_pcre_xclass): + + * runtime/Collector.h: Updated header guards using the + clean-header-guards script. + * runtime/CollectorHeapIterator.h: Added missing header guard. + * runtime/Identifier.h: Updated header guards. + * runtime/JSFunction.h: Fixed end-of-namespace comment. + + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): Renamed "kjsprint" debug function + to "jscprint". Changed implementation method from + globalFuncKJSPrint() to globalFuncJSCPrint(). + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncJSCPrint): Renamed from globalFuncKJSPrint(). + * runtime/JSGlobalObjectFunctions.h: Ditto. + + * runtime/JSImmediate.h: Updated header guards. + * runtime/JSLock.h: Ditto. + * runtime/JSType.h: Ditto. + * runtime/JSWrapperObject.h: Ditto. + * runtime/Lookup.h: Ditto. + * runtime/Operations.h: Ditto. + * runtime/Protect.h: Ditto. + * runtime/RegExp.h: Ditto. + * runtime/UString.h: Ditto. + + * tests/mozilla/js1_5/Array/regress-157652.js: Changed "KJS" + reference in comment to "JSC". + + * wrec/CharacterClassConstructor.cpp: Change "kjs_pcre_" function + prefixes to "jsc_pcre_". + (JSC::WREC::CharacterClassConstructor::put): + (JSC::WREC::CharacterClassConstructor::flush): + + * wtf/unicode/Unicode.h: Change "KJS_" header guard to "WTF_". + * wtf/unicode/icu/UnicodeIcu.h: Ditto. + * wtf/unicode/qt4/UnicodeQt4.h: Ditto. + +2009-01-02 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + Make randomNumber generate 2^53 values instead of 2^32 (or 2^31 for rand() platforms) + + * wtf/RandomNumber.cpp: + (WTF::randomNumber): + +2009-01-02 David Kilzer + + Remove declaration for JSC::Identifier::initializeIdentifierThreading() + + Reviewed by Alexey Proskuryakov. + + * runtime/Identifier.h: + (JSC::Identifier::initializeIdentifierThreading): Removed + declaration since the implementation was removed in r34412. + +2009-01-01 Darin Adler + + Reviewed by Oliver Hunt. + + String.replace does not support $& replacement metacharacter when search term is not a RegExp + + + + Test: fast/js/string-replace-3.html + + * runtime/StringPrototype.cpp: + (JSC::substituteBackreferences): Added a null check here so we won't try to handle $$-$9 + backreferences when the search term is a string, not a RegExp. Added a check for 0 so we + won't try to handle $0 or $00 as a backreference. + (JSC::stringProtoFuncReplace): Added a call to substituteBackreferences. + +2009-01-01 Gavin Barraclough + + Reviewed by Darin Adler. + + Allow 32-bit integers to be stored in JSImmediates, on x64-bit. + Presently the top 32-bits of a 64-bit JSImmediate serve as a sign extension of a 31-bit + int stored in the low word (shifted left by one, to make room for a tag). In the new + format, the top 31-bits serve as a sign extension of a 32-bit int, still shifted left by + one. + + The new behavior is enabled using a flag in Platform.h, 'WTF_USE_ALTERNATE_JSIMMEDIATE'. + When this is set the constants defining the range of ints allowed to be stored as + JSImmediate values is extended. The code in JSImmediate.h can safely operate on either + format. This patch updates the JIT so that it can also operate with the new format. + + ~2% progression on x86-64, with & without the JIT, on sunspider & v8 tests. + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::addPtr): + (JSC::MacroAssembler::orPtr): + (JSC::MacroAssembler::or32): + (JSC::MacroAssembler::rshiftPtr): + (JSC::MacroAssembler::rshift32): + (JSC::MacroAssembler::subPtr): + (JSC::MacroAssembler::xorPtr): + (JSC::MacroAssembler::xor32): + (JSC::MacroAssembler::move): + (JSC::MacroAssembler::compareImm64ForBranch): + (JSC::MacroAssembler::compareImm64ForBranchEquality): + (JSC::MacroAssembler::jePtr): + (JSC::MacroAssembler::jgePtr): + (JSC::MacroAssembler::jlPtr): + (JSC::MacroAssembler::jlePtr): + (JSC::MacroAssembler::jnePtr): + (JSC::MacroAssembler::jnzSubPtr): + (JSC::MacroAssembler::joAddPtr): + (JSC::MacroAssembler::jzSubPtr): + * assembler/X86Assembler.h: + (JSC::X86Assembler::addq_rr): + (JSC::X86Assembler::orq_ir): + (JSC::X86Assembler::subq_ir): + (JSC::X86Assembler::xorq_rr): + (JSC::X86Assembler::sarq_CLr): + (JSC::X86Assembler::sarq_i8r): + (JSC::X86Assembler::cmpq_ir): + * jit/JIT.cpp: + (JSC::JIT::compileOpStrictEq): + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_lshift): + (JSC::JIT::compileFastArithSlow_op_lshift): + (JSC::JIT::compileFastArith_op_rshift): + (JSC::JIT::compileFastArithSlow_op_rshift): + (JSC::JIT::compileFastArith_op_bitand): + (JSC::JIT::compileFastArithSlow_op_bitand): + (JSC::JIT::compileFastArith_op_mod): + (JSC::JIT::compileFastArithSlow_op_mod): + (JSC::JIT::compileFastArith_op_add): + (JSC::JIT::compileFastArithSlow_op_add): + (JSC::JIT::compileFastArith_op_mul): + (JSC::JIT::compileFastArithSlow_op_mul): + (JSC::JIT::compileFastArith_op_post_inc): + (JSC::JIT::compileFastArithSlow_op_post_inc): + (JSC::JIT::compileFastArith_op_post_dec): + (JSC::JIT::compileFastArithSlow_op_post_dec): + (JSC::JIT::compileFastArith_op_pre_inc): + (JSC::JIT::compileFastArithSlow_op_pre_inc): + (JSC::JIT::compileFastArith_op_pre_dec): + (JSC::JIT::compileFastArithSlow_op_pre_dec): + (JSC::JIT::compileBinaryArithOp): + * jit/JITInlineMethods.h: + (JSC::JIT::getConstantOperand): + (JSC::JIT::getConstantOperandImmediateInt): + (JSC::JIT::isOperandConstantImmediateInt): + (JSC::JIT::isOperandConstant31BitImmediateInt): + (JSC::JIT::emitFastArithDeTagImmediate): + (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): + (JSC::JIT::emitFastArithReTagImmediate): + (JSC::JIT::emitFastArithImmToInt): + (JSC::JIT::emitFastArithIntToImmNoCheck): + * runtime/JSImmediate.h: + (JSC::JSImmediate::isPositiveNumber): + (JSC::JSImmediate::isNegative): + (JSC::JSImmediate::rightShiftImmediateNumbers): + (JSC::JSImmediate::canDoFastAdditiveOperations): + (JSC::JSImmediate::makeValue): + (JSC::JSImmediate::makeInt): + (JSC::JSImmediate::makeBool): + (JSC::JSImmediate::intValue): + (JSC::JSImmediate::rawValue): + (JSC::JSImmediate::toBoolean): + (JSC::JSImmediate::from): + * wtf/Platform.h: + +2008-12-31 Oliver Hunt + + Reviewed by Cameron Zwarich. + + [jsfunfuzz] Assertion + incorrect behaviour with dynamically created local variable in a catch block + + + Eval inside a catch block attempts to use the catch block's static scope in + an unsafe way by attempting to add new properties to the scope. This patch + fixes this issue simply by preventing the catch block from using a static + scope if it contains an eval. + + * parser/Grammar.y: + * parser/Nodes.cpp: + (JSC::TryNode::emitBytecode): + * parser/Nodes.h: + (JSC::TryNode::): + +2008-12-31 Oliver Hunt + + Reviewed by Gavin Barraclough. + + [jsfunfuzz] Computed exception offset wrong when first instruction is attempt to resolve deleted eval + + + This was caused by the expression information for the initial resolve of + eval not being emitted. If this resolve was the first instruction that + could throw an exception the information search would fail leading to an + assertion failure. If it was not the first throwable opcode the wrong + expression information would used. + + Fix is simply to emit the expression info. + + * parser/Nodes.cpp: + (JSC::EvalFunctionCallNode::emitBytecode): + +2008-12-31 Cameron Zwarich + + Reviewed by Oliver Hunt. + + Bug 23054: Caching of global lookups occurs even when the global object has become a dictionary + + + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::resolveGlobal): Do not cache lookup if the global + object has transitioned to a dictionary. + (JSC::Interpreter::cti_op_resolve_global): Do not cache lookup if the + global object has transitioned to a dictionary. + +2008-12-30 Oliver Hunt + + Reviewed by Darin Adler. + + [jsfunfuzz] With blocks do not correctly protect their scope object + Crash in JSC::TypeInfo::hasStandardGetOwnPropertySlot() running jsfunfuzz + + The problem that caused this was that with nodes were not correctly protecting + the final object that was placed in the scope chain. We correct this by forcing + the use of a temporary register (which stops us relying on a local register + protecting the scope) and changing the behaviour of op_push_scope so that it + will store the final scope object. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitPushScope): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::cti_op_push_scope): + * interpreter/Interpreter.h: + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + * parser/Nodes.cpp: + (JSC::WithNode::emitBytecode): + +2008-12-30 Cameron Zwarich + + Reviewed by Sam Weinig. + + Bug 23037: Parsing and reparsing disagree on automatic semicolon insertion + + + + Parsing and reparsing disagree about automatic semicolon insertion, so that a + function like + + function() { a = 1, } + + is parsed as being syntactically valid but gets a syntax error upon reparsing. + This leads to an assertion failure in Parser::reparse(). It is not that big of + an issue in practice, because in a Release build such a function will return + 'undefined' when called. + + In this case, we are not following the spec and it should be a syntax error. + However, unless there is a newline separating the ',' and the '}', WebKit would + not treat it as a syntax error in the past either. It would be a bit of work to + make the automatic semicolon insertion match the spec exactly, so this patch + changes it to match our past behaviour. + + The problem is that even during reparsing, the Lexer adds a semicolon at the + end of the input, which confuses allowAutomaticSemicolon(), because it is + expecting either a '}', the end of input, or a terminator like a newline. + + * parser/Lexer.cpp: + (JSC::Lexer::Lexer): Initialize m_isReparsing to false. + (JSC::Lexer::lex): Do not perform automatic semicolon insertion in the Lexer if + we are in the middle of reparsing. + (JSC::Lexer::clear): Set m_isReparsing to false. + * parser/Lexer.h: + (JSC::Lexer::setIsReparsing): Added. + * parser/Parser.cpp: + (JSC::Parser::reparse): Call Lexer::setIsReparsing() to notify the Lexer of + reparsing. + +2008-12-29 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + Yet another attempt to fix Tiger. + + * wtf/RandomNumber.cpp: + (WTF::randomNumber): + +2008-12-29 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + Tiger build fix (correct this time) + + * wtf/RandomNumber.cpp: + +2008-12-29 Cameron Zwarich + + Rubber-stamped by Alexey Proskuryakov. + + Revert r39509, because kjsyydebug is used in the generated code if YYDEBUG is 1. + + * parser/Grammar.y: + +2008-12-29 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + Tiger build fix. + + * wtf/RandomNumber.cpp: + +2008-12-29 Oliver Hunt + + Reviewed by Mark Rowe. + + Insecure randomness in Math.random() leads to user tracking + + Switch to arc4random on PLATFORM(DARWIN), this is ~1.5x slower than random(), but the + it is still so fast that there is no fathomable way it could be a bottleneck for anything. + + randomNumber is called in two places + * During form submission where it is called once per form + * Math.random in JSC. For this difference to show up you have to be looping on + a cached local copy of random, for a large (>10000) calls. + + No change in SunSpider. + + * wtf/RandomNumber.cpp: + (WTF::randomNumber): + * wtf/RandomNumberSeed.h: + (WTF::initializeRandomNumberGenerator): + +2008-12-29 Cameron Zwarich + + Rubber-stamped by Sam Weinig. + + Remove unused kjsyydebug #define. + + * parser/Grammar.y: + +2008-12-29 Cameron Zwarich + + Reviewed by Oliver Hunt and Sam Weinig. + + Bug 23029: REGRESSION (r39337): jsfunfuzz generates identical test files + + + + The unification of random number generation in r39337 resulted in random() + being initialized on Darwin, but rand() actually being used. Fix this by + making randomNumber() use random() instead of rand() on Darwin. + + * wtf/RandomNumber.cpp: + (WTF::randomNumber): + +2008-12-29 Sam Weinig + + Fix buildbots. + + * runtime/Structure.cpp: + +2008-12-29 Sam Weinig + + Reviewed by Oliver Hunt. + + Patch for https://bugs.webkit.org/show_bug.cgi?id=23026 + Move the deleted offsets vector into the PropertyMap + + Saves 3 words per Structure. + + * runtime/PropertyMapHashTable.h: + * runtime/Structure.cpp: + (JSC::Structure::addPropertyTransition): + (JSC::Structure::changePrototypeTransition): + (JSC::Structure::getterSetterTransition): + (JSC::Structure::toDictionaryTransition): + (JSC::Structure::fromDictionaryTransition): + (JSC::Structure::copyPropertyTable): + (JSC::Structure::put): + (JSC::Structure::remove): + (JSC::Structure::rehashPropertyMapHashTable): + * runtime/Structure.h: + (JSC::Structure::propertyStorageSize): + +2008-12-29 Cameron Zwarich + + Reviewed by Oliver Hunt. + + Change code using m_body.get() as a boolean to take advantage of the + implicit conversion of RefPtr to boolean. + + * runtime/JSFunction.cpp: + (JSC::JSFunction::~JSFunction): + +2008-12-28 Cameron Zwarich + + Reviewed by Oliver Hunt. + + Bug 22840: REGRESSION (r38349): Gmail doesn't load with profiling enabled + + + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitNewArray): Add an assertion that the range + of registers passed to op_new_array is sequential. + (JSC::BytecodeGenerator::emitCall): Correct the relocation of registers + when emitting profiler hooks so that registers aren't leaked. Also, add + an assertion that the 'this' register is always ref'd (because it is), + remove the needless protection of the 'this' register when relocating, + and add an assertion that the range of registers passed to op_call for + function call arguments is sequential. + (JSC::BytecodeGenerator::emitConstruct): Correct the relocation of + registers when emitting profiler hooks so that registers aren't leaked. + Also, add an assertion that the range of registers passed to op_construct + for function call arguments is sequential. + +2008-12-26 Mark Rowe + + Reviewed by Alexey Proskuryakov. + + Race condition in WTF::currentThread can lead to a thread using two different identifiers during its lifetime + + If a newly-created thread calls WTF::currentThread() before WTF::createThread calls establishIdentifierForPthreadHandle + then more than one identifier will be used for the same thread. We can avoid this by adding some extra synchronization + during thread creation that delays the execution of the thread function until the thread identifier has been set up, and + an assertion to catch this problem should it reappear in the future. + + * wtf/Threading.cpp: Added. + (WTF::NewThreadContext::NewThreadContext): + (WTF::threadEntryPoint): + (WTF::createThread): Add cross-platform createThread function that delays the execution of the thread function until + after the thread identifier has been set up. + * wtf/Threading.h: + * wtf/ThreadingGtk.cpp: + (WTF::establishIdentifierForThread): + (WTF::createThreadInternal): + * wtf/ThreadingNone.cpp: + (WTF::createThreadInternal): + * wtf/ThreadingPthreads.cpp: + (WTF::establishIdentifierForPthreadHandle): + (WTF::createThreadInternal): + * wtf/ThreadingQt.cpp: + (WTF::identifierByQthreadHandle): + (WTF::establishIdentifierForThread): + (WTF::createThreadInternal): + * wtf/ThreadingWin.cpp: + (WTF::storeThreadHandleByIdentifier): + (WTF::createThreadInternal): + + Add Threading.cpp to the build. + + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.scons: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + +2008-12-26 Sam Weinig + + Reviewed by Alexey Proskuryakov. + + Remove unused method. + + * runtime/Structure.h: Remove mutableTypeInfo. + +2008-12-22 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Fix rounding / bounds / signed comparison bug in ExecutableAllocator. + + ExecutableAllocator::alloc assumed that m_freePtr would be aligned. This was + not always true, since the first allocation from an additional pool would not + be rounded up. Subsequent allocations would be unaligned, and too much memory + could be erroneously allocated from the pool, when the size requested was + available, but the size rounded up to word granularity was not available in the + pool. This may result in the value of m_freePtr being greater than m_end. + + Under these circumstances, the unsigned check for space will always pass, + resulting in pointers to memory outside of the arena being returned, and + ultimately segfaulty goodness when attempting to memcpy the hot freshly jitted + code from the AssemblerBuffer. + + https://bugs.webkit.org/show_bug.cgi?id=22974 + ... and probably many, many more. + + * jit/ExecutableAllocator.h: + (JSC::ExecutablePool::alloc): + (JSC::ExecutablePool::roundUpAllocationSize): + (JSC::ExecutablePool::ExecutablePool): + (JSC::ExecutablePool::poolAllocate): + +2008-12-22 Sam Weinig + + Reviewed by Gavin Barraclough. + + Rename all uses of the term "repatch" to "patch". + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::DataLabelPtr::patch): + (JSC::MacroAssembler::DataLabel32::patch): + (JSC::MacroAssembler::Jump::patch): + (JSC::MacroAssembler::PatchBuffer::PatchBuffer): + (JSC::MacroAssembler::PatchBuffer::setPtr): + (JSC::MacroAssembler::loadPtrWithAddressOffsetPatch): + (JSC::MacroAssembler::storePtrWithAddressOffsetPatch): + (JSC::MacroAssembler::storePtrWithPatch): + (JSC::MacroAssembler::jnePtrWithPatch): + * assembler/X86Assembler.h: + (JSC::X86Assembler::patchAddress): + (JSC::X86Assembler::patchImmediate): + (JSC::X86Assembler::patchPointer): + (JSC::X86Assembler::patchBranchOffset): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::tryCTICachePutByID): + (JSC::Interpreter::tryCTICacheGetByID): + (JSC::Interpreter::cti_op_put_by_id): + (JSC::Interpreter::cti_op_get_by_id): + (JSC::Interpreter::cti_op_get_by_id_self_fail): + (JSC::Interpreter::cti_op_get_by_id_proto_list): + (JSC::Interpreter::cti_vm_dontLazyLinkCall): + * jit/JIT.cpp: + (JSC::ctiPatchCallByReturnAddress): + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + * jit/JITCall.cpp: + (JSC::JIT::unlinkCall): + (JSC::JIT::linkCall): + (JSC::JIT::compileOpCall): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compilePutByIdHotPath): + (JSC::JIT::compileGetByIdSlowCase): + (JSC::JIT::compilePutByIdSlowCase): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::patchGetByIdSelf): + (JSC::JIT::patchPutByIdReplace): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdSelf): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + (JSC::JIT::privateCompilePutByIdReplace): + +2008-12-22 Adam Roben + + Build fix after r39428 + + * jit/JITCall.cpp: + (JSC::JIT::compileOpCallSlowCase): Added a missing MacroAssembler:: + +2008-12-22 Nikolas Zimmermann + + Rubber-stamped by George Staikos. + + Unify all TorchMobile copyright lines. Consolidate in a single line, as requested by Mark Rowe, some time ago. + + * wtf/RandomNumber.cpp: + * wtf/RandomNumber.h: + * wtf/RandomNumberSeed.h: + +2008-12-21 Nikolas Zimmermann + + Rubber-stamped by George Staikos. + + Fix copyright of the new RandomNumber* files. + + * wtf/RandomNumber.cpp: + * wtf/RandomNumber.h: + * wtf/RandomNumberSeed.h: + +2008-12-21 Gavin Barraclough + + Reviewed by Oliver Hunt & Cameron Zwarich. + + Add support for call and property access repatching on x86-64. + + No change in performance on current configurations (2x impovement on v8-tests with JIT enabled on x86-64). + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::DataLabelPtr::repatch): + (JSC::MacroAssembler::DataLabelPtr::operator X86Assembler::JmpDst): + (JSC::MacroAssembler::DataLabel32::repatch): + (JSC::MacroAssembler::RepatchBuffer::addressOf): + (JSC::MacroAssembler::add32): + (JSC::MacroAssembler::sub32): + (JSC::MacroAssembler::loadPtrWithAddressOffsetRepatch): + (JSC::MacroAssembler::storePtrWithAddressOffsetRepatch): + (JSC::MacroAssembler::jePtr): + (JSC::MacroAssembler::jnePtr): + (JSC::MacroAssembler::jnePtrWithRepatch): + (JSC::MacroAssembler::differenceBetween): + * assembler/X86Assembler.h: + (JSC::X86Assembler::addl_im): + (JSC::X86Assembler::subl_im): + (JSC::X86Assembler::cmpl_rm): + (JSC::X86Assembler::movq_rm_disp32): + (JSC::X86Assembler::movq_mr_disp32): + (JSC::X86Assembler::repatchPointer): + (JSC::X86Assembler::X86InstructionFormatter::oneByteOp64_disp32): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + * jit/JITCall.cpp: + (JSC::JIT::unlinkCall): + (JSC::JIT::linkCall): + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpCallSlowCase): + * jit/JITInlineMethods.h: + (JSC::JIT::restoreArgumentReferenceForTrampoline): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compileGetByIdSlowCase): + (JSC::JIT::compilePutByIdHotPath): + (JSC::JIT::compilePutByIdSlowCase): + (JSC::resizePropertyStorage): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + * wtf/Platform.h: + +2008-12-20 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Port optimized property access generation to the MacroAssembler. + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::AbsoluteAddress::AbsoluteAddress): + (JSC::MacroAssembler::DataLabelPtr::repatch): + (JSC::MacroAssembler::DataLabel32::DataLabel32): + (JSC::MacroAssembler::DataLabel32::repatch): + (JSC::MacroAssembler::Label::operator X86Assembler::JmpDst): + (JSC::MacroAssembler::Jump::repatch): + (JSC::MacroAssembler::JumpList::empty): + (JSC::MacroAssembler::RepatchBuffer::link): + (JSC::MacroAssembler::add32): + (JSC::MacroAssembler::and32): + (JSC::MacroAssembler::sub32): + (JSC::MacroAssembler::loadPtrWithAddressRepatch): + (JSC::MacroAssembler::storePtrWithAddressRepatch): + (JSC::MacroAssembler::push): + (JSC::MacroAssembler::ja32): + (JSC::MacroAssembler::jePtr): + (JSC::MacroAssembler::jnePtr): + (JSC::MacroAssembler::jnePtrWithRepatch): + (JSC::MacroAssembler::align): + (JSC::MacroAssembler::differenceBetween): + * assembler/X86Assembler.h: + (JSC::X86Assembler::movl_rm_disp32): + (JSC::X86Assembler::movl_mr_disp32): + (JSC::X86Assembler::X86InstructionFormatter::oneByteOp_disp32): + (JSC::X86Assembler::X86InstructionFormatter::memoryModRM): + * jit/JIT.cpp: + (JSC::ctiRepatchCallByReturnAddress): + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compileGetByIdSlowCase): + (JSC::JIT::compilePutByIdHotPath): + (JSC::JIT::compilePutByIdSlowCase): + (JSC::resizePropertyStorage): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::patchGetByIdSelf): + (JSC::JIT::patchPutByIdReplace): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdSelf): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + (JSC::JIT::privateCompilePutByIdReplace): + * wtf/RefCounted.h: + (WTF::RefCountedBase::addressOfCount): + +2008-12-19 Gustavo Noronha Silva + + Reviewed by Holger Freyther. + + https://bugs.webkit.org/show_bug.cgi?id=22686 + + Added file which was missing to the javascriptcore_sources + variable, so that it shows up in the tarball created by `make + dist'. + + * GNUmakefile.am: + +2008-12-19 Holger Hans Peter Freyther + + Reviewed by Antti Koivisto. + + Build fix when building JS API tests with a c89 c compiler + + Do not use C++ style comments and convert them to C comments. + + * wtf/Platform.h: + +2008-12-18 Gavin Barraclough + + Reviewed by Sam Weinig. + + Same as last revision, adding cases for pre & post inc & dec. + + https://bugs.webkit.org/show_bug.cgi?id=22928 + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + +2008-12-18 Gavin Barraclough + + Reviewed by Sam Weinig. + + Fixes for the JIT's handling of JSImmediate values on x86-64. + On 64-bit systems, the code in JSImmediate.h relies on the upper + bits of a JSImmediate being a sign extension of the low 32-bits. + This was not being enforced by the JIT, since a number of inline + operations were being performed on 32-bit values in registers, and + when a 32-bit result is written to a register on x86-64 the value + is zero-extended to 64-bits. + + This fix honors previous behavoir. A better fix in the long run + (when the JIT is enabled by default) may be to change JSImmediate.h + so it no longer relies on the upper bits of the pointer,... though + if we're going to change JSImmediate.h for 64-bit, we probably may + as well change the format so that the full range of 32-bit ints can + be stored, rather than just 31-bits. + + https://bugs.webkit.org/show_bug.cgi?id=22925 + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::addPtr): + (JSC::MacroAssembler::andPtr): + (JSC::MacroAssembler::orPtr): + (JSC::MacroAssembler::or32): + (JSC::MacroAssembler::xor32): + (JSC::MacroAssembler::xorPtr): + (JSC::MacroAssembler::signExtend32ToPtr): + * assembler/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::andq_rr): + (JSC::X86Assembler::andq_ir): + (JSC::X86Assembler::orq_rr): + (JSC::X86Assembler::xorq_ir): + (JSC::X86Assembler::movsxd_rr): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + * jit/JITInlineMethods.h: + (JSC::JIT::emitFastArithReTagImmediate): + (JSC::JIT::emitFastArithPotentiallyReTagImmediate): + (JSC::JIT::emitFastArithImmToInt): + +2008-12-18 Gavin Barraclough + + Reviewed by Sam Weinig. + + Just a tidy up - rename & refactor some the #defines configuring the JIT. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::cti_op_convert_this): + (JSC::Interpreter::cti_op_end): + (JSC::Interpreter::cti_op_add): + (JSC::Interpreter::cti_op_pre_inc): + (JSC::Interpreter::cti_timeout_check): + (JSC::Interpreter::cti_register_file_check): + (JSC::Interpreter::cti_op_loop_if_less): + (JSC::Interpreter::cti_op_loop_if_lesseq): + (JSC::Interpreter::cti_op_new_object): + (JSC::Interpreter::cti_op_put_by_id_generic): + (JSC::Interpreter::cti_op_get_by_id_generic): + (JSC::Interpreter::cti_op_put_by_id): + (JSC::Interpreter::cti_op_put_by_id_second): + (JSC::Interpreter::cti_op_put_by_id_fail): + (JSC::Interpreter::cti_op_get_by_id): + (JSC::Interpreter::cti_op_get_by_id_second): + (JSC::Interpreter::cti_op_get_by_id_self_fail): + (JSC::Interpreter::cti_op_get_by_id_proto_list): + (JSC::Interpreter::cti_op_get_by_id_proto_list_full): + (JSC::Interpreter::cti_op_get_by_id_proto_fail): + (JSC::Interpreter::cti_op_get_by_id_array_fail): + (JSC::Interpreter::cti_op_get_by_id_string_fail): + (JSC::Interpreter::cti_op_instanceof): + (JSC::Interpreter::cti_op_del_by_id): + (JSC::Interpreter::cti_op_mul): + (JSC::Interpreter::cti_op_new_func): + (JSC::Interpreter::cti_op_call_JSFunction): + (JSC::Interpreter::cti_op_call_arityCheck): + (JSC::Interpreter::cti_vm_dontLazyLinkCall): + (JSC::Interpreter::cti_vm_lazyLinkCall): + (JSC::Interpreter::cti_op_push_activation): + (JSC::Interpreter::cti_op_call_NotJSFunction): + (JSC::Interpreter::cti_op_create_arguments): + (JSC::Interpreter::cti_op_create_arguments_no_params): + (JSC::Interpreter::cti_op_tear_off_activation): + (JSC::Interpreter::cti_op_tear_off_arguments): + (JSC::Interpreter::cti_op_profile_will_call): + (JSC::Interpreter::cti_op_profile_did_call): + (JSC::Interpreter::cti_op_ret_scopeChain): + (JSC::Interpreter::cti_op_new_array): + (JSC::Interpreter::cti_op_resolve): + (JSC::Interpreter::cti_op_construct_JSConstruct): + (JSC::Interpreter::cti_op_construct_NotJSConstruct): + (JSC::Interpreter::cti_op_get_by_val): + (JSC::Interpreter::cti_op_resolve_func): + (JSC::Interpreter::cti_op_sub): + (JSC::Interpreter::cti_op_put_by_val): + (JSC::Interpreter::cti_op_put_by_val_array): + (JSC::Interpreter::cti_op_lesseq): + (JSC::Interpreter::cti_op_loop_if_true): + (JSC::Interpreter::cti_op_negate): + (JSC::Interpreter::cti_op_resolve_base): + (JSC::Interpreter::cti_op_resolve_skip): + (JSC::Interpreter::cti_op_resolve_global): + (JSC::Interpreter::cti_op_div): + (JSC::Interpreter::cti_op_pre_dec): + (JSC::Interpreter::cti_op_jless): + (JSC::Interpreter::cti_op_not): + (JSC::Interpreter::cti_op_jtrue): + (JSC::Interpreter::cti_op_post_inc): + (JSC::Interpreter::cti_op_eq): + (JSC::Interpreter::cti_op_lshift): + (JSC::Interpreter::cti_op_bitand): + (JSC::Interpreter::cti_op_rshift): + (JSC::Interpreter::cti_op_bitnot): + (JSC::Interpreter::cti_op_resolve_with_base): + (JSC::Interpreter::cti_op_new_func_exp): + (JSC::Interpreter::cti_op_mod): + (JSC::Interpreter::cti_op_less): + (JSC::Interpreter::cti_op_neq): + (JSC::Interpreter::cti_op_post_dec): + (JSC::Interpreter::cti_op_urshift): + (JSC::Interpreter::cti_op_bitxor): + (JSC::Interpreter::cti_op_new_regexp): + (JSC::Interpreter::cti_op_bitor): + (JSC::Interpreter::cti_op_call_eval): + (JSC::Interpreter::cti_op_throw): + (JSC::Interpreter::cti_op_get_pnames): + (JSC::Interpreter::cti_op_next_pname): + (JSC::Interpreter::cti_op_push_scope): + (JSC::Interpreter::cti_op_pop_scope): + (JSC::Interpreter::cti_op_typeof): + (JSC::Interpreter::cti_op_is_undefined): + (JSC::Interpreter::cti_op_is_boolean): + (JSC::Interpreter::cti_op_is_number): + (JSC::Interpreter::cti_op_is_string): + (JSC::Interpreter::cti_op_is_object): + (JSC::Interpreter::cti_op_is_function): + (JSC::Interpreter::cti_op_stricteq): + (JSC::Interpreter::cti_op_nstricteq): + (JSC::Interpreter::cti_op_to_jsnumber): + (JSC::Interpreter::cti_op_in): + (JSC::Interpreter::cti_op_push_new_scope): + (JSC::Interpreter::cti_op_jmp_scopes): + (JSC::Interpreter::cti_op_put_by_index): + (JSC::Interpreter::cti_op_switch_imm): + (JSC::Interpreter::cti_op_switch_char): + (JSC::Interpreter::cti_op_switch_string): + (JSC::Interpreter::cti_op_del_by_val): + (JSC::Interpreter::cti_op_put_getter): + (JSC::Interpreter::cti_op_put_setter): + (JSC::Interpreter::cti_op_new_error): + (JSC::Interpreter::cti_op_debug): + (JSC::Interpreter::cti_vm_throw): + * interpreter/Interpreter.h: + * jit/JIT.cpp: + (JSC::): + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompile): + * jit/JIT.h: + * jit/JITInlineMethods.h: + (JSC::JIT::restoreArgumentReference): + (JSC::JIT::restoreArgumentReferenceForTrampoline): + * wtf/Platform.h: + +2008-12-18 Cameron Zwarich + + Reviewed by Geoff Garen. + + Bug 21855: REGRESSION (r37323): Gmail complains about popup blocking when opening a link + + + + Move DynamicGlobalObjectScope to JSGlobalObject.h so that it can be used + from WebCore. + + * interpreter/Interpreter.cpp: + * runtime/JSGlobalObject.h: + (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): + (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope): + +2008-12-17 Geoffrey Garen + + Reviewed by Gavin Barraclough. + + Fixed https://bugs.webkit.org/show_bug.cgi?id=22393 + Segfault when caching property accesses to primitive cells. + + Changed some asObject casts to asCell casts in cases where a primitive + value may be a cell and not an object. + + Re-enabled property caching for primitives in cases where it had been + disabled because of this bug. + + Updated a comment to better explain something Darin thought needed + explaining in an old patch review. + + * interpreter/Interpreter.cpp: + (JSC::countPrototypeChainEntriesAndCheckForProxies): + (JSC::Interpreter::tryCacheGetByID): + (JSC::Interpreter::tryCTICacheGetByID): + (JSC::Interpreter::cti_op_get_by_id_self_fail): + (JSC::Interpreter::cti_op_get_by_id_proto_list): + +2008-12-17 Gavin Barraclough + + Reviewed by Cameron Zwarich. + + Fixes for Sunspider failures with the JIT enabled on x86-64. + + * assembler/MacroAssembler.h: + Switch the order of the RegisterID & Address form of je32, to keep it consistent with jne32. + * jit/JIT.cpp: + * jit/JIT.h: + * jit/JITInlineMethods.h: + Port the m_ctiVirtualCall tramopline generation to use the MacroAssembler interface. + * jit/JITCall.cpp: + Fix bug in the non-optimizing code path, vptr check should have been to the memory address pointer + to by the register, not to the register itself. + * wrec/WRECGenerator.cpp: + See assembler/MacroAssembler.h, above. + +2008-12-17 Gavin Barraclough + + Reviewed by Sam Weinig. + + print("Hello, 64-bit jitted world!"); + Get hello-world working through the JIT, on x86-64. + + * assembler/X86Assembler.h: + Fix encoding of opcode + RegisterID format instructions for 64-bit. + * interpreter/Interpreter.cpp: + * interpreter/Interpreter.h: + Make VoidPtrPair actually be a pair of void*s. + (Possibly should make this change for 32-bit Mac platforms, too - but won't change 32-bit behaviour in this patch). + * jit/JIT.cpp: + * jit/JIT.h: + Provide names for the timeoutCheckRegister & callFrameRegister on x86-64, + force x86-64 ctiTrampoline arguments onto the stack, + implement the asm trampolines for x86-64, + implement the restoreArgumentReference methods for x86-64 calling conventions. + * jit/JITCall.cpp: + * jit/JITInlineMethods.h: + * wtf/Platform.h: + Add switch settings to ENABLE(JIT), on PLATFORM(X86_64) (currently still disabled). + +2008-12-17 Sam Weinig + + Reviewed by Gavin Barraclough. + + Add more CodeBlock statistics. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dumpStatistics): + +2008-12-17 Sam Weinig + + Reviewed by Darin Adler. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=22897 + + Look into feasibility of discarding bytecode after native codegen + + Clear the bytecode Instruction vector at the end JIT generation. + + Saves 4.8 MB on Membuster head. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): Add logging for the case that someone tries + to dump the instructions of a CodeBlock that has had its bytecode + vector cleared. + (JSC::CodeBlock::CodeBlock): Initialize the instructionCount + (JSC::CodeBlock::handlerForBytecodeOffset): Use instructionCount instead + of the size of the instruction vector in the assertion. + (JSC::CodeBlock::lineNumberForBytecodeOffset): Ditto. + (JSC::CodeBlock::expressionRangeForBytecodeOffset): Ditto. + (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset): Ditto. + (JSC::CodeBlock::functionRegisterForBytecodeOffset): Ditto. + * bytecode/CodeBlock.h: + (JSC::CodeBlock::setInstructionCount): Store the instruction vector size + in debug builds for assertions. + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::generate): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): Clear the bytecode vector unless we + have compiled with Opcode sampling where we will continue to require it + +2008-12-17 Cary Clark + + Reviewed by Darin Adler. + Landed by Adam Barth. + + Add ENABLE_TEXT_CARET to permit the ANDROID platform + to invalidate and draw the caret in a separate thread. + + * wtf/Platform.h: + Default ENABLE_TEXT_CARET to 1. + +2008-12-17 Alexey Proskuryakov + + Reviewed by Darin Adler. + + Don't use unique context group in JSGlobalContextCreate() on Tiger or Leopard, take two. + + * API/JSContextRef.cpp: The previous patch that claimed to do this was making Tiger and + Leopard always use unique context group instead. + +2008-12-16 Sam Weinig + + Reviewed by Geoffrey Garen. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=22838 + Remove dependency on the bytecode Instruction buffer in Interpreter::throwException + Part of + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::functionRegisterForBytecodeOffset): Added. Function to get + a function Register index in a callFrame for a bytecode offset. + (JSC::CodeBlock::shrinkToFit): Shrink m_getByIdExceptionInfo and m_functionRegisterInfos. + * bytecode/CodeBlock.h: + (JSC::FunctionRegisterInfo::FunctionRegisterInfo): Added. + (JSC::CodeBlock::addFunctionRegisterInfo): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitCall): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::throwException): Use functionRegisterForBytecodeOffset in JIT + mode. + +2008-12-16 Sam Weinig + + Reviewed by Gavin Barraclough. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=22837 + Remove dependency on the bytecode Instruction buffer in Interpreter::cti_op_call_NotJSFunction + Part of + + * interpreter/CallFrame.h: Added comment regarding returnPC storing a void*. + * interpreter/Interpreter.cpp: + (JSC::bytecodeOffsetForPC): We no longer have any cases of the PC + being in the instruction stream for JIT, so we can remove the check. + (JSC::Interpreter::cti_op_call_NotJSFunction): Use the CTI_RETURN_ADDRESS + as the call frame returnPC as it is only necessary for looking up when + throwing an exception. + * interpreter/RegisterFile.h: + (JSC::RegisterFile::): Added comment regarding returnPC storing a void*. + * jit/JIT.h: Remove ARG_instr4. + * jit/JITCall.cpp: + (JSC::JIT::compileOpCallSetupArgs): Don't pass the instruction pointer. + +2008-12-16 Darin Adler + + Reviewed and landed by Cameron Zwarich. + + Preparatory work for fixing + + Bug 22887: Make UString::Rep use RefCounted rather than implementing its own ref counting + + + Change the various string translators used by Identifier:add() so that + they never zero the ref count of a newly created UString::Rep. + + * runtime/Identifier.cpp: + (JSC::CStringTranslator::translate): + (JSC::Identifier::add): + (JSC::UCharBufferTranslator::translate): + +2008-12-16 Gavin Barraclough + + Build fix for 'doze. + + * assembler/AssemblerBuffer.h: + +2008-12-16 Gavin Barraclough + + Reviewed by Cameron Zwarich. + + Make the JIT compile on x86-64. + This largely involves populting the missing calls in MacroAssembler.h. + In addition some reinterpret_casts need removing from the JIT, and the + repatching property access code will need to be fully compiled out for + now. The changes in interpret.cpp are to reorder the functions so that + the _generic forms come before all other property access methods, and + then to place all property access methods other than the generic forms + under control of the ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS macro. + + No performance impact. + + * assembler/AssemblerBuffer.h: + (JSC::AssemblerBuffer::putInt64Unchecked): + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::loadPtr): + (JSC::MacroAssembler::load32): + (JSC::MacroAssembler::storePtr): + (JSC::MacroAssembler::storePtrWithRepatch): + (JSC::MacroAssembler::store32): + (JSC::MacroAssembler::poke): + (JSC::MacroAssembler::move): + (JSC::MacroAssembler::testImm64): + (JSC::MacroAssembler::jePtr): + (JSC::MacroAssembler::jnePtr): + (JSC::MacroAssembler::jnzPtr): + (JSC::MacroAssembler::jzPtr): + * assembler/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::cmpq_rr): + (JSC::X86Assembler::cmpq_rm): + (JSC::X86Assembler::cmpq_im): + (JSC::X86Assembler::testq_i32m): + (JSC::X86Assembler::movl_mEAX): + (JSC::X86Assembler::movl_i32r): + (JSC::X86Assembler::movl_EAXm): + (JSC::X86Assembler::movq_rm): + (JSC::X86Assembler::movq_mEAX): + (JSC::X86Assembler::movq_mr): + (JSC::X86Assembler::movq_i64r): + (JSC::X86Assembler::movl_mr): + (JSC::X86Assembler::X86InstructionFormatter::oneByteOp64): + (JSC::X86Assembler::X86InstructionFormatter::immediate64): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::cti_op_put_by_id_generic): + (JSC::Interpreter::cti_op_get_by_id_generic): + (JSC::Interpreter::cti_op_put_by_id): + (JSC::Interpreter::cti_op_put_by_id_second): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCallSetupArgs): + (JSC::JIT::compileOpCall): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compilePutByIdHotPath): + * runtime/JSImmediate.h: + (JSC::JSImmediate::makeInt): + +2008-12-16 Cameron Zwarich + + Reviewed by Darin Adler. + + Bug 22869: REGRESSION (r38407): http://news.cnet.com/8301-13579_3-9953533-37.html crashes + + + + Before r38407, Structure::m_nameInPrevious was ref'd due to it being + stored in a PropertyMap. However, PropertyMaps are created lazily after + r38407, so Structure::m_nameInPrevious is not necessarily ref'd while + it is being used. Making it a RefPtr instead of a raw pointer fixes + the problem. + + Unfortunately, the crash in the bug is rather intermittent, and it is + impossible to add an assertion in UString::Ref::ref() to catch this bug + because some users of UString::Rep deliberately zero out the reference + count. Therefore, there is no layout test accompanying this bug fix. + + * runtime/Structure.cpp: + (JSC::Structure::~Structure): Use get(). + (JSC::Structure::materializePropertyMap): Use get(). + (JSC::Structure::addPropertyTransitionToExistingStructure): Use get(). + (JSC::Structure::addPropertyTransition): Use get(). + * runtime/Structure.h: Make Structure::m_nameInPrevious a RefPtr instead + of a raw pointer. + +2008-12-16 Nikolas Zimmermann + + Not reviewed. Attempt to fix win build. No 'using namespace WTF' in this file, needs manual WTF:: prefix. + Not sure why the build works as is here. + + * runtime/MathObject.cpp: + (JSC::mathProtoFuncRandom): + +2008-12-16 Nikolas Zimmermann + + Reviewed by Darin Adler. + + Fixes: https://bugs.webkit.org/show_bug.cgi?id=22876 + + Unify random number generation in JavaScriptCore & WebCore, by introducing + wtf/RandomNumber.h and moving wtf_random/wtf_random_init out of MathExtras.h. + + wtf_random_init() has been renamed to initializeRandomNumberGenerator() and + lives in it's own private header: wtf/RandomNumberSeed.h, only intended to + be used from within JavaScriptCore. + + wtf_random() has been renamed to randomNumber() and lives in a public header + wtf/RandomNumber.h, usable from within JavaScriptCore & WebCore. It encapsulates + the code taking care of initializing the random number generator (only when + building without ENABLE(JSC_MULTIPLE_THREADS), otherwhise initializeThreading() + already took care of that). + + Functional change on darwin: Use random() instead of rand(), as it got a larger + period (more randomness). HTMLFormElement already contains this implementation + and I just moved it in randomNumber(), as special case for PLATFORM(DARWIN). + + * GNUmakefile.am: Add RandomNumber.(cpp/h) / RandomNumberSeed.h. + * JavaScriptCore.exp: Ditto. + * JavaScriptCore.pri: Ditto. + * JavaScriptCore.scons: Ditto. + * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto. + * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. + * JavaScriptCoreSources.bkl: Ditto. + * runtime/MathObject.cpp: Use new WTF::randomNumber() functionality. + (JSC::mathProtoFuncRandom): + * wtf/MathExtras.h: Move wtf_random / wtf_random_init to new files. + * wtf/RandomNumber.cpp: Added. + (WTF::randomNumber): + * wtf/RandomNumber.h: Added. + * wtf/RandomNumberSeed.h: Added. Internal usage within JSC only. + (WTF::initializeRandomNumberGenerator): + * wtf/ThreadingGtk.cpp: Rename wtf_random_init() to initializeRandomNumberGenerator(). + (WTF::initializeThreading): + * wtf/ThreadingPthreads.cpp: Ditto. + (WTF::initializeThreading): + * wtf/ThreadingQt.cpp: Ditto. + (WTF::initializeThreading): + * wtf/ThreadingWin.cpp: Ditto. + (WTF::initializeThreading): + +2008-12-16 Yael Aharon + + Reviewed by Tor Arne Vestbø. + + Qt/Win build fix + + * JavaScriptCore.pri: + +2008-12-15 Mark Rowe + + Reviewed by Cameron Zwarich. + + Fix the build with GCC 4.0. + + * Configurations/JavaScriptCore.xcconfig: GCC 4.0 appears to have a bug when compiling with -funwind-tables on, + so don't use it with that compiler version. + +2008-12-15 Mark Rowe + + Rubber-stamped by Cameron Zwarich. + + Change WebKit-related projects to build with GCC 4.2 on Leopard. + + * Configurations/Base.xcconfig: + * Configurations/DebugRelease.xcconfig: + +2008-12-15 Alexey Proskuryakov + + Reviewed by Darin Adler. + + Don't use unique context group in JSGlobalContextCreate() on Tiger or Leopard. + + * API/JSContextRef.cpp: (JSGlobalContextCreate): + +2008-12-15 Alexey Proskuryakov + + Reviewed by Darin Adler. + + Mach ports leak from worker threads + + * interpreter/Interpreter.cpp: (JSC::getCPUTime): + Deallocate the thread self port. + +2008-12-15 Gavin Barraclough + + Reviewed by Mark Rowe. + + Construct stack frames in JIT code, so that backtracing can still work. + JIT should play nice with attempts to take stack traces + + * jit/JIT.cpp: + (JSC::): + (JSC::JIT::privateCompileMainPass): + +2008-12-15 Mark Rowe + + Reviewed by Gavin Barraclough. + + JavaScriptCore needs exception handling tables in order to get stack traces without frame pointers + + * Configurations/JavaScriptCore.xcconfig: + +2008-12-15 Gavin Barraclough + + Rubber stamped by Mark Rowe. + + Revert r39226 / Bug 22818: Unify JIT callback argument access OS X / Windows + This causes Acid3 failures – reverting for now & will revisit later. + https://bugs.webkit.org/show_bug.cgi?id=22873 + + * interpreter/Interpreter.h: + * jit/JIT.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + * jit/JITInlineMethods.h: + (JSC::JIT::restoreArgumentReference): + (JSC::JIT::restoreArgumentReferenceForTrampoline): + (JSC::JIT::emitCTICall_internal): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + * wtf/Platform.h: + +2008-12-15 Darin Adler + + Reviewed by Sam Weinig. + + - fix crash due to infinite recursion after setting window.__proto__ = window + + Replaced toGlobalObject with the more generally useful unwrappedObject and used it to + fix the cycle detection code in put(__proto__). + + * JavaScriptCore.exp: Updated. + + * runtime/JSGlobalObject.cpp: Removed toGlobalObject. We now use unwrappedObject instead. + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::isGlobalObject): Ditto. + + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncEval): Use unwrappedObject and isGlobalObject here rather than toGlobalObject. + + * runtime/JSObject.cpp: + (JSC::JSObject::put): Rewrote prototype cycle checking loop. Use unwrappedObject in the loop now. + (JSC::JSObject::unwrappedObject): Replaced toGlobalObject with this new function. + * runtime/JSObject.h: More of the same. + +2008-12-15 Steve Falkenburg + + Windows build fix. + + Visual Studio requires visibility of forward declarations to match class declaration. + + * assembler/X86Assembler.h: + +2008-12-15 Gustavo Noronha Silva + + Reviewed by Mark Rowe. + + https://bugs.webkit.org/show_bug.cgi?id=22686 + + GTK+ build fix. + + * GNUmakefile.am: + +2008-12-15 Gavin Barraclough + + Reviewed by Geoff Garen. + + Add support to X86Assembler emitting instructions that access all 16 registers on x86-64. + Add a new formating class, that is reponsible for both emitting the opcode bytes and the + ModRm bytes of an instruction in a single call; this can insert the REX byte as necessary + before the opcode, but has access to the register numbers to build the REX. + + * assembler/AssemblerBuffer.h: + (JSC::AssemblerBuffer::isAligned): + (JSC::AssemblerBuffer::data): + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::addPtr): + (JSC::MacroAssembler::add32): + (JSC::MacroAssembler::and32): + (JSC::MacroAssembler::or32): + (JSC::MacroAssembler::sub32): + (JSC::MacroAssembler::xor32): + (JSC::MacroAssembler::loadPtr): + (JSC::MacroAssembler::load32): + (JSC::MacroAssembler::load16): + (JSC::MacroAssembler::storePtr): + (JSC::MacroAssembler::storePtrWithRepatch): + (JSC::MacroAssembler::store32): + (JSC::MacroAssembler::pop): + (JSC::MacroAssembler::push): + (JSC::MacroAssembler::compareImm32ForBranch): + (JSC::MacroAssembler::compareImm32ForBranchEquality): + (JSC::MacroAssembler::testImm32): + (JSC::MacroAssembler::jae32): + (JSC::MacroAssembler::jb32): + (JSC::MacroAssembler::je16): + (JSC::MacroAssembler::jg32): + (JSC::MacroAssembler::jnePtr): + (JSC::MacroAssembler::jne32): + (JSC::MacroAssembler::jump): + * assembler/X86Assembler.h: + (JSC::X86::): + (JSC::X86Assembler::): + (JSC::X86Assembler::size): + (JSC::X86Assembler::push_r): + (JSC::X86Assembler::pop_r): + (JSC::X86Assembler::push_i32): + (JSC::X86Assembler::push_m): + (JSC::X86Assembler::pop_m): + (JSC::X86Assembler::addl_rr): + (JSC::X86Assembler::addl_mr): + (JSC::X86Assembler::addl_ir): + (JSC::X86Assembler::addq_ir): + (JSC::X86Assembler::addl_im): + (JSC::X86Assembler::andl_rr): + (JSC::X86Assembler::andl_ir): + (JSC::X86Assembler::orl_rr): + (JSC::X86Assembler::orl_mr): + (JSC::X86Assembler::orl_ir): + (JSC::X86Assembler::subl_rr): + (JSC::X86Assembler::subl_mr): + (JSC::X86Assembler::subl_ir): + (JSC::X86Assembler::subl_im): + (JSC::X86Assembler::xorl_rr): + (JSC::X86Assembler::xorl_ir): + (JSC::X86Assembler::sarl_i8r): + (JSC::X86Assembler::sarl_CLr): + (JSC::X86Assembler::shll_i8r): + (JSC::X86Assembler::shll_CLr): + (JSC::X86Assembler::imull_rr): + (JSC::X86Assembler::imull_i32r): + (JSC::X86Assembler::idivl_r): + (JSC::X86Assembler::cmpl_rr): + (JSC::X86Assembler::cmpl_rm): + (JSC::X86Assembler::cmpl_mr): + (JSC::X86Assembler::cmpl_ir): + (JSC::X86Assembler::cmpl_ir_force32): + (JSC::X86Assembler::cmpl_im): + (JSC::X86Assembler::cmpl_im_force32): + (JSC::X86Assembler::cmpw_rm): + (JSC::X86Assembler::testl_rr): + (JSC::X86Assembler::testl_i32r): + (JSC::X86Assembler::testl_i32m): + (JSC::X86Assembler::testq_rr): + (JSC::X86Assembler::testq_i32r): + (JSC::X86Assembler::testb_i8r): + (JSC::X86Assembler::sete_r): + (JSC::X86Assembler::setz_r): + (JSC::X86Assembler::setne_r): + (JSC::X86Assembler::setnz_r): + (JSC::X86Assembler::cdq): + (JSC::X86Assembler::xchgl_rr): + (JSC::X86Assembler::movl_rr): + (JSC::X86Assembler::movl_rm): + (JSC::X86Assembler::movl_mr): + (JSC::X86Assembler::movl_i32r): + (JSC::X86Assembler::movl_i32m): + (JSC::X86Assembler::movq_rr): + (JSC::X86Assembler::movq_rm): + (JSC::X86Assembler::movq_mr): + (JSC::X86Assembler::movzwl_mr): + (JSC::X86Assembler::movzbl_rr): + (JSC::X86Assembler::leal_mr): + (JSC::X86Assembler::call): + (JSC::X86Assembler::jmp): + (JSC::X86Assembler::jmp_r): + (JSC::X86Assembler::jmp_m): + (JSC::X86Assembler::jne): + (JSC::X86Assembler::jnz): + (JSC::X86Assembler::je): + (JSC::X86Assembler::jl): + (JSC::X86Assembler::jb): + (JSC::X86Assembler::jle): + (JSC::X86Assembler::jbe): + (JSC::X86Assembler::jge): + (JSC::X86Assembler::jg): + (JSC::X86Assembler::ja): + (JSC::X86Assembler::jae): + (JSC::X86Assembler::jo): + (JSC::X86Assembler::jp): + (JSC::X86Assembler::js): + (JSC::X86Assembler::addsd_rr): + (JSC::X86Assembler::addsd_mr): + (JSC::X86Assembler::cvtsi2sd_rr): + (JSC::X86Assembler::cvttsd2si_rr): + (JSC::X86Assembler::movd_rr): + (JSC::X86Assembler::movsd_rm): + (JSC::X86Assembler::movsd_mr): + (JSC::X86Assembler::mulsd_rr): + (JSC::X86Assembler::mulsd_mr): + (JSC::X86Assembler::pextrw_irr): + (JSC::X86Assembler::subsd_rr): + (JSC::X86Assembler::subsd_mr): + (JSC::X86Assembler::ucomis_rr): + (JSC::X86Assembler::int3): + (JSC::X86Assembler::ret): + (JSC::X86Assembler::predictNotTaken): + (JSC::X86Assembler::label): + (JSC::X86Assembler::align): + (JSC::X86Assembler::link): + (JSC::X86Assembler::executableCopy): + (JSC::X86Assembler::X86InstructionFormater::prefix): + (JSC::X86Assembler::X86InstructionFormater::oneByteOp): + (JSC::X86Assembler::X86InstructionFormater::twoByteOp): + (JSC::X86Assembler::X86InstructionFormater::oneByteOp64): + (JSC::X86Assembler::X86InstructionFormater::oneByteOp8): + (JSC::X86Assembler::X86InstructionFormater::twoByteOp8): + (JSC::X86Assembler::X86InstructionFormater::instructionImmediate8): + (JSC::X86Assembler::X86InstructionFormater::instructionImmediate32): + (JSC::X86Assembler::X86InstructionFormater::instructionRel32): + (JSC::X86Assembler::X86InstructionFormater::size): + (JSC::X86Assembler::X86InstructionFormater::isAligned): + (JSC::X86Assembler::X86InstructionFormater::data): + (JSC::X86Assembler::X86InstructionFormater::executableCopy): + (JSC::X86Assembler::X86InstructionFormater::registerModRM): + (JSC::X86Assembler::X86InstructionFormater::memoryModRM): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JITArithmetic.cpp: + (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): + (JSC::JIT::compileBinaryArithOp): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpCallSlowCase): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compilePutByIdHotPath): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + +2008-12-15 Darin Adler + + * interpreter/RegisterFile.h: Tweak include formatting. + +2008-12-15 Holger Hans Peter Freyther + + Build fix for Gtk+. + + * interpreter/RegisterFile.h: Include stdio.h for fprintf + +2008-12-15 Alexey Proskuryakov + + Reviewed by Oliver Hunt. + + Worker Thread crash running multiple workers for a moderate amount of time + + * interpreter/RegisterFile.h: (JSC::RegisterFile::RegisterFile): + Improve error handling: if mmap fails, crash immediately, and print out the reason. + +2008-12-13 Gavin Barraclough + + Reviewed by Cameron Zwarich. + + Re-enable WREC on 64-bit. + Implements one of the MacroAssembler::jnzPtr methods, previously only implemented for 32-bit x86. + + https://bugs.webkit.org/show_bug.cgi?id=22849 + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::testImm64): + (JSC::MacroAssembler::jnzPtr): + * assembler/X86Assembler.h: + (JSC::X86Assembler::testq_i32r): + (JSC::X86Assembler::testq_rr): + * wtf/Platform.h: + +2008-12-13 Gavin Barraclough + + Fix PPC builds. + + * assembler/MacroAssembler.h: + +2008-12-13 Gavin Barraclough + + Build fix only, no review. + + * bytecode/CodeBlock.h: + +2008-12-13 Gavin Barraclough + + Reviewed by Cameron Zwarich. + + Port the remainder of the JIT, bar calling convention related code, and code + implementing optimizations which can be disabled, to use the MacroAssembler. + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::DataLabelPtr::DataLabelPtr): + (JSC::MacroAssembler::RepatchBuffer::RepatchBuffer): + (JSC::MacroAssembler::RepatchBuffer::link): + (JSC::MacroAssembler::RepatchBuffer::addressOf): + (JSC::MacroAssembler::RepatchBuffer::setPtr): + (JSC::MacroAssembler::addPtr): + (JSC::MacroAssembler::lshift32): + (JSC::MacroAssembler::mod32): + (JSC::MacroAssembler::rshift32): + (JSC::MacroAssembler::storePtrWithRepatch): + (JSC::MacroAssembler::jnzPtr): + (JSC::MacroAssembler::jzPtr): + (JSC::MacroAssembler::jump): + (JSC::MacroAssembler::label): + * assembler/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::xchgl_rr): + (JSC::X86Assembler::jmp_m): + (JSC::X86Assembler::repatchAddress): + (JSC::X86Assembler::getRelocatedAddress): + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::CodeBlock): + * bytecode/CodeBlock.h: + (JSC::JITCodeRef::JITCodeRef): + (JSC::CodeBlock::setJITCode): + (JSC::CodeBlock::jitCode): + (JSC::CodeBlock::executablePool): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileLinkPass): + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + (JSC::CallRecord::CallRecord): + (JSC::JumpTable::JumpTable): + (JSC::JIT::emitCTICall): + (JSC::JIT::JSRInfo::JSRInfo): + * jit/JITArithmetic.cpp: + * jit/JITCall.cpp: + * jit/JITInlineMethods.h: + (JSC::JIT::emitNakedCall): + (JSC::JIT::emitCTICall_internal): + (JSC::JIT::checkStructure): + (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): + (JSC::JIT::addSlowCase): + (JSC::JIT::addJump): + (JSC::JIT::emitJumpSlowToHot): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + +2008-12-12 Cameron Zwarich + + Reviewed by Sam Weinig. + + Fix the failures of the following layout tests, which regressed in + r39255: + + fast/dom/StyleSheet/ownerNode-lifetime-2.html + fast/xsl/transform-xhr-doc.xhtml + + The binary search in CodeBlock::getByIdExceptionInfoForBytecodeOffset() + doesn't guarantee that it actually finds a match, so add an explicit check + for this. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset): + +2008-12-12 Gavin Barraclough + + Reviewed by Cameron Zwarich. + + Replace emitPutCallArg methods with emitPutJITStubArg methods. Primarily to make the argument numbering + more sensible (1-based incrementing by 1, rather than 0-based incrementing by 4). The CTI name also seems + to be being deprecated from the code generally. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::compileBinaryArithOp): + (JSC::JIT::compileBinaryArithOpSlowCase): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCallSetupArgs): + (JSC::JIT::compileOpCallEvalSetupArgs): + (JSC::JIT::compileOpConstructSetupArgs): + (JSC::JIT::compileOpCall): + * jit/JITInlineMethods.h: + (JSC::JIT::emitPutJITStubArg): + (JSC::JIT::emitPutJITStubArgConstant): + (JSC::JIT::emitGetJITStubArg): + (JSC::JIT::emitPutJITStubArgFromVirtualRegister): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compilePutByIdHotPath): + (JSC::JIT::compileGetByIdSlowCase): + (JSC::JIT::compilePutByIdSlowCase): + +2008-12-12 Gavin Barraclough + + Fix windows builds. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompile): + +2008-12-12 Gavin Barraclough + + Reviewed by Geoff Garen. + + Remove loop counter 'i' from the JIT generation passes, replace with a member m_bytecodeIndex. + + No impact on performance. + + * jit/JIT.cpp: + (JSC::JIT::compileOpStrictEq): + (JSC::JIT::emitSlowScriptCheck): + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompile): + * jit/JIT.h: + (JSC::CallRecord::CallRecord): + (JSC::JmpTable::JmpTable): + (JSC::JIT::emitCTICall): + * jit/JITArithmetic.cpp: + (JSC::JIT::compileBinaryArithOp): + (JSC::JIT::compileBinaryArithOpSlowCase): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpCallSlowCase): + * jit/JITInlineMethods.h: + (JSC::JIT::emitGetVirtualRegister): + (JSC::JIT::emitGetVirtualRegisters): + (JSC::JIT::emitNakedCall): + (JSC::JIT::emitCTICall_internal): + (JSC::JIT::emitJumpSlowCaseIfJSCell): + (JSC::JIT::emitJumpSlowCaseIfNotJSCell): + (JSC::JIT::emitJumpSlowCaseIfNotImmNum): + (JSC::JIT::emitJumpSlowCaseIfNotImmNums): + (JSC::JIT::emitFastArithIntToImmOrSlowCase): + (JSC::JIT::addSlowCase): + (JSC::JIT::addJump): + (JSC::JIT::emitJumpSlowToHot): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compileGetByIdSlowCase): + (JSC::JIT::compilePutByIdHotPath): + (JSC::JIT::compilePutByIdSlowCase): + +2008-12-12 Sam Weinig + + Reviewed by Cameron Zwarich. + + Look into feasibility of discarding bytecode after native codegen + + Move more JIT functionality to using offsets into the Instruction buffer + instead of raw pointers. Two to go! + + * interpreter/Interpreter.cpp: + (JSC::bytecodeOffsetForPC): Rename from vPCForPC. + (JSC::Interpreter::resolve): Pass offset to exception helper. + (JSC::Interpreter::resolveSkip): Ditto. + (JSC::Interpreter::resolveGlobal): Ditto. + (JSC::Interpreter::resolveBaseAndProperty): Ditto. + (JSC::Interpreter::resolveBaseAndFunc): Ditto. + (JSC::isNotObject): Ditto. + (JSC::Interpreter::unwindCallFrame): Call bytecodeOffsetForPC. + (JSC::Interpreter::throwException): Use offsets instead of vPCs. + (JSC::Interpreter::privateExecute): Pass offset to exception helper. + (JSC::Interpreter::retrieveLastCaller): Ditto. + (JSC::Interpreter::cti_op_instanceof): Ditto. + (JSC::Interpreter::cti_op_call_NotJSFunction): Ditto. + (JSC::Interpreter::cti_op_resolve): Pass offset to exception helper. + (JSC::Interpreter::cti_op_construct_NotJSConstruct): Ditto. + (JSC::Interpreter::cti_op_resolve_func): Ditto. + (JSC::Interpreter::cti_op_resolve_skip): Ditto. + (JSC::Interpreter::cti_op_resolve_global): Ditto. + (JSC::Interpreter::cti_op_resolve_with_base): Ditto. + (JSC::Interpreter::cti_op_throw): Ditto. + (JSC::Interpreter::cti_op_in): Ditto. + (JSC::Interpreter::cti_vm_throw): Ditto. + * interpreter/Interpreter.h: + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): Don't pass unnecessary vPC to stub. + * jit/JIT.h: Remove ARG_instr1 - ARG_instr3 and ARG_instr5 - ARG_instr6. + * jit/JITCall.cpp: + (JSC::JIT::compileOpCallEvalSetupArgs): Don't pass unnecessary vPC to stub.. + (JSC::JIT::compileOpConstructSetupArgs): Ditto. + + * runtime/ExceptionHelpers.cpp: + (JSC::createUndefinedVariableError): Take an offset instead of vPC. + (JSC::createInvalidParamError): Ditto. + (JSC::createNotAConstructorError): Ditto. + (JSC::createNotAFunctionError): Ditto. + (JSC::createNotAnObjectError): Ditto. + * runtime/ExceptionHelpers.h: + +2008-12-12 Cameron Zwarich + + Reviewed by Oliver Hunt. + + Bug 22835: Crash during bytecode generation when comparing to null + + + + Change the special cases in bytecode generation for comparison to null + to use tempDestination(). + + * parser/Nodes.cpp: + (JSC::BinaryOpNode::emitBytecode): + (JSC::EqualNode::emitBytecode): + +2008-12-12 Gavin Barraclough + + Reviewed by Geoff Garen. + + Move slow-cases of JIT code generation over to the MacroAssembler interface. + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::Label::Label): + (JSC::MacroAssembler::jae32): + (JSC::MacroAssembler::jg32): + (JSC::MacroAssembler::jzPtr): + * jit/JIT.cpp: + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompile): + (JSC::JIT::emitGetVariableObjectRegister): + (JSC::JIT::emitPutVariableObjectRegister): + * jit/JIT.h: + (JSC::SlowCaseEntry::SlowCaseEntry): + (JSC::JIT::getSlowCase): + (JSC::JIT::linkSlowCase): + * jit/JITArithmetic.cpp: + (JSC::JIT::compileBinaryArithOpSlowCase): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCallInitializeCallFrame): + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpCallSlowCase): + * jit/JITInlineMethods.h: + (JSC::JIT::emitJumpSlowCaseIfNotJSCell): + (JSC::JIT::linkSlowCaseIfNotJSCell): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compilePutByIdHotPath): + (JSC::JIT::compileGetByIdSlowCase): + (JSC::JIT::compilePutByIdSlowCase): + +2008-12-12 Cameron Zwarich + + Reviewed by Sam Weinig. + + Bug 22828: Do not inspect bytecode instruction stream for op_get_by_id exception information + + + In order to remove the bytecode instruction stream after generating + native code, all inspection of bytecode instructions at runtime must + be removed. One particular instance of this is the special handling of + exceptions thrown by the op_get_by_id emitted directly before an + op_construct or an op_instanceof. This patch moves that information to + an auxiliary data structure in CodeBlock. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::addGetByIdExceptionInfo): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitConstruct): + * bytecompiler/BytecodeGenerator.h: + (JSC::BytecodeGenerator::emitGetByIdExceptionInfo): + * parser/Nodes.cpp: + (JSC::InstanceOfNode::emitBytecode): + * runtime/ExceptionHelpers.cpp: + (JSC::createNotAnObjectError): + +2008-12-12 Sam Weinig + + Reviewed by Geoffrey Garen. + + Change exception information accessors to take offsets into the bytecode + instruction buffer instead of pointers so that they can work even even + if the bytecode buffer is purged. + + * bytecode/CodeBlock.cpp: + (JSC::instructionOffsetForNth): + (JSC::CodeBlock::handlerForBytecodeOffset): + (JSC::CodeBlock::lineNumberForBytecodeOffset): + (JSC::CodeBlock::expressionRangeForBytecodeOffset): + * bytecode/CodeBlock.h: + * bytecode/SamplingTool.cpp: + (JSC::SamplingTool::dump): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::throwException): + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::retrieveLastCaller): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + * runtime/ExceptionHelpers.cpp: + (JSC::createUndefinedVariableError): + (JSC::createInvalidParamError): + (JSC::createNotAConstructorError): + (JSC::createNotAFunctionError): + (JSC::createNotAnObjectError): + +2008-12-12 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Tiny bit of refactoring in quantifier generation. + + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generateNonGreedyQuantifier): + (JSC::WREC::Generator::generateGreedyQuantifier): + +2008-12-11 Sam Weinig + + Reviewed by Geoffrey Garen. + + Remove dependancy on having the Instruction buffer in order to + deref Structures used for property access and global resolves. + Instead, we put references to the necessary Structures in auxiliary + data structures on the CodeBlock. This is not an ideal solution, + as we still pay for having the Structures in two places and we + would like to eventually just hold on to offsets into the machine + code buffer. + + - Also removes CodeBlock bloat in non-JIT by #ifdefing the JIT + only data structures. + + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.scons: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * bytecode/CodeBlock.cpp: + (JSC::isGlobalResolve): + (JSC::isPropertyAccess): + (JSC::instructionOffsetForNth): + (JSC::printGlobalResolveInfo): + (JSC::printStructureStubInfo): + (JSC::CodeBlock::printStructures): + (JSC::CodeBlock::dump): + (JSC::CodeBlock::~CodeBlock): + (JSC::CodeBlock::shrinkToFit): + * bytecode/CodeBlock.h: + (JSC::GlobalResolveInfo::GlobalResolveInfo): + (JSC::getNativePC): + (JSC::CodeBlock::instructions): + (JSC::CodeBlock::getStubInfo): + (JSC::CodeBlock::getBytecodeIndex): + (JSC::CodeBlock::addPropertyAccessInstruction): + (JSC::CodeBlock::addGlobalResolveInstruction): + (JSC::CodeBlock::numberOfStructureStubInfos): + (JSC::CodeBlock::addStructureStubInfo): + (JSC::CodeBlock::structureStubInfo): + (JSC::CodeBlock::addGlobalResolveInfo): + (JSC::CodeBlock::globalResolveInfo): + (JSC::CodeBlock::numberOfCallLinkInfos): + (JSC::CodeBlock::addCallLinkInfo): + (JSC::CodeBlock::callLinkInfo): + * bytecode/Instruction.h: + (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set): + (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList): + * bytecode/Opcode.h: + (JSC::): + * bytecode/StructureStubInfo.cpp: Copied from bytecode/CodeBlock.cpp. + (JSC::StructureStubInfo::deref): + * bytecode/StructureStubInfo.h: Copied from bytecode/CodeBlock.h. + (JSC::StructureStubInfo::StructureStubInfo): + (JSC::StructureStubInfo::initGetByIdSelf): + (JSC::StructureStubInfo::initGetByIdProto): + (JSC::StructureStubInfo::initGetByIdChain): + (JSC::StructureStubInfo::initGetByIdSelfList): + (JSC::StructureStubInfo::initGetByIdProtoList): + (JSC::StructureStubInfo::initPutByIdTransition): + (JSC::StructureStubInfo::initPutByIdReplace): + (JSC::StructureStubInfo::): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitResolve): + (JSC::BytecodeGenerator::emitGetById): + (JSC::BytecodeGenerator::emitPutById): + (JSC::BytecodeGenerator::emitCall): + (JSC::BytecodeGenerator::emitConstruct): + (JSC::BytecodeGenerator::emitCatch): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::tryCTICachePutByID): + (JSC::Interpreter::tryCTICacheGetByID): + (JSC::Interpreter::cti_op_get_by_id_self_fail): + (JSC::getPolymorphicAccessStructureListSlot): + (JSC::Interpreter::cti_op_get_by_id_proto_list): + (JSC::Interpreter::cti_op_resolve_global): + * jit/JIT.cpp: + (JSC::JIT::JIT): + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompile): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compilePutByIdHotPath): + (JSC::JIT::compileGetByIdSlowCase): + (JSC::JIT::compilePutByIdSlowCase): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + +2008-12-11 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Remove CTI_ARGUMENTS mode, use va_start implementation on Windows, + unifying JIT callback (cti_*) argument access on OS X & Windows + + No performance impact. + + * interpreter/Interpreter.h: + * jit/JIT.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + * jit/JITInlineMethods.h: + (JSC::JIT::emitCTICall): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + * wtf/Platform.h: + +2008-12-11 Holger Freyther + + Reviewed by Simon Hausmann. + + https://bugs.webkit.org/show_bug.cgi?id=20953 + + For Qt it is not pratical to have a FontCache and GlyphPageTreeNode + implementation. This is one of the reasons why the Qt port is currently not + using WebCore/platform/graphics/Font.cpp. By allowing to not use + the simple/fast-path the Qt port will be able to use it. + + Introduce USE(FONT_FAST_PATH) and define it for every port but the + Qt one. + + * wtf/Platform.h: Enable USE(FONT_FAST_PATH) + +2008-12-11 Gabor Loki + + Reviewed by Darin Adler and landed by Holger Freyther. + + + Fix threading on Qt-port and Gtk-port for Sampling tool. + + * wtf/ThreadingGtk.cpp: + (WTF::waitForThreadCompletion): + * wtf/ThreadingQt.cpp: + (WTF::waitForThreadCompletion): + +2008-12-10 Cameron Zwarich + + Reviewed by Oliver Hunt. + + Bug 22734: Debugger crashes when stepping into a function call in a return statement + + + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): The DebuggerCallFrame uses + the 'this' value stored in a callFrame, so op_convert_this should be + emitted at the beginning of a function body when generating bytecode + with debug hooks. + * debugger/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::thisObject): The assertion inherent in the call + to asObject() here is valid, because any 'this' value should have been + converted to a JSObject*. + +2008-12-10 Gavin Barraclough + + Reviewed by Geoff Garen. + + Port more of the JIT to use the MacroAssembler interface. + + Everything in the main pass, bar a few corner cases (operations with required + registers, or calling convention code). Slightly refactors array creation, + moving the offset calculation into the callFrame into C code (reducing code + planted). + + Overall this appears to be a 1% win on v8-tests, due to the smaller immediates + being planted (in jfalse in particular). + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::cti_op_new_array): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + * jit/JIT.h: + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generateEnter): + +2008-12-10 Sam Weinig + + Fix non-JIT builds. + + * bytecode/CodeBlock.h: + +2008-12-10 Sam Weinig + + Reviewed by Geoffrey Garen. + + Remove the CTI return address table from CodeBlock + + Step 2: + + Convert the return address table from a HashMap to a sorted Vector. This + reduces the size of the data structure by ~4.5MB on Membuster head. + + SunSpider reports a 0.5% progression. + + * bytecode/CodeBlock.cpp: + (JSC::sizeInBytes): Generic method to get the cost of a Vector. + (JSC::CodeBlock::dumpStatistics): Add dumping of member sizes. + * bytecode/CodeBlock.h: + (JSC::PC::PC): Struct representing NativePC -> VirtualPC mappings. + (JSC::getNativePC): Helper for binary chop. + (JSC::CodeBlock::getBytecodeIndex): Used to get the VirtualPC from a + NativePC using a binary chop of the pcVector. + (JSC::CodeBlock::pcVector): Accessor. + + * interpreter/Interpreter.cpp: + (JSC::vPCForPC): Use getBytecodeIndex instead of jitReturnAddressVPCMap().get(). + (JSC::Interpreter::cti_op_instanceof): Ditto. + (JSC::Interpreter::cti_op_resolve): Ditto. + (JSC::Interpreter::cti_op_resolve_func): Ditto. + (JSC::Interpreter::cti_op_resolve_skip): Ditto. + (JSC::Interpreter::cti_op_resolve_with_base): Ditto. + (JSC::Interpreter::cti_op_throw): Ditto. + (JSC::Interpreter::cti_op_in): Ditto. + (JSC::Interpreter::cti_vm_throw): Ditto. + + * jit/JIT.cpp: + (JSC::JIT::privateCompile): Reserve exact capacity and fill the pcVector. + +2008-12-09 Geoffrey Garen + + Reviewed by Oliver Hunt. + + Added WREC support for an assertion followed by a quantifier. Fixed + PCRE to match. + + * wrec/WRECParser.cpp: + (JSC::WREC::Parser::parseParentheses): Throw away the quantifier, since + it's meaningless. (Firefox does the same.) + + * pcre/pcre_compile.cpp: + (compileBranch): ditto. + +2008-12-09 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + In preparation for compiling WREC without PCRE: + + Further relaxed WREC's parsing to be more web-compatible. Fixed PCRE to + match in cases where it didn't already. + + Changed JavaScriptCore to report syntax errors detected by WREC, rather + than falling back on PCRE any time WREC sees an error. + + * pcre/pcre_compile.cpp: + (checkEscape): Relaxed parsing of \c and \N escapes to be more + web-compatible. + + * runtime/RegExp.cpp: + (JSC::RegExp::RegExp): Only fall back on PCRE if WREC has not reported + a syntax error. + + * wrec/WREC.cpp: + (JSC::WREC::Generator::compileRegExp): Fixed some error reporting to + match PCRE. + + * wrec/WRECParser.cpp: Added error messages that match PCRE. + + (JSC::WREC::Parser::consumeGreedyQuantifier): + (JSC::WREC::Parser::parseParentheses): + (JSC::WREC::Parser::parseCharacterClass): + (JSC::WREC::Parser::parseNonCharacterEscape): Updated the above functions to + use the new setError API. + + (JSC::WREC::Parser::consumeEscape): Relaxed parsing of \c \N \u \x \B + to be more web-compatible. + + (JSC::WREC::Parser::parseAlternative): Distinguish between a malformed + quantifier and a quantifier with no prefix, like PCRE does. + + (JSC::WREC::Parser::consumeParenthesesType): Updated to use the new setError API. + + * wrec/WRECParser.h: + (JSC::WREC::Parser::error): + (JSC::WREC::Parser::syntaxError): + (JSC::WREC::Parser::parsePattern): + (JSC::WREC::Parser::reset): + (JSC::WREC::Parser::setError): Store error messages instead of error codes, + to provide for exception messages. Use a setter for reporting errors, so + errors detected early are not overwritten by errors detected later. + +2008-12-09 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Use va_args to access cti function arguments. + https://bugs.webkit.org/show_bug.cgi?id=22774 + + This may be a minor regression, but we'll take the hit if so to reduce fragility. + + * interpreter/Interpreter.cpp: + * interpreter/Interpreter.h: + +2008-12-09 Sam Weinig + + Reviewed twice by Cameron Zwarich. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=22752 + Clear SymbolTable after codegen for Function codeblocks that + don't require an activation + + This is a ~1.5MB improvement on Membuster-head. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dumpStatistics): Add logging of non-empty symbol tables + and total size used by symbol tables. + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::generate): Clear the symbol table here. + +2008-12-09 Sam Weinig + + Reviewed by Geoffrey Garen. + + Remove unnecessary extra lookup when throwing an exception. + We used to first lookup the target offset using getHandlerForVPC + and then we would lookup the native code stub using + nativeExceptionCodeForHandlerVPC. Instead, we can just pass around + the HandlerInfo. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::handlerForVPC): Return the HandlerInfo. + * bytecode/CodeBlock.h: Remove nativeExceptionCodeForHandlerVPC. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::throwException): Return a HandlerInfo instead of + and Instruction offset. + (JSC::Interpreter::privateExecute): Get the offset from HandlerInfo. + (JSC::Interpreter::cti_op_throw): Get the native code from the HandleInfo. + (JSC::Interpreter::cti_vm_throw): Ditto. + * interpreter/Interpreter.h: + +2008-12-09 Eric Seidel + + Build fix only, no review. + + Speculative fix for the Chromium-Windows bot. + Add JavaScriptCore/os-win32 to the include path (for stdint.h) + Strangely it builds fine on my local windows box (or at least doesn't hit this error) + + * JavaScriptCore.scons: + +2008-12-09 Eric Seidel + + No review, build fix only. + + Add ExecutableAllocator files missing from Scons build. + + * JavaScriptCore.scons: + +2008-12-09 Dimitri Glazkov + + Reviewed by Timothy Hatcher. + + https://bugs.webkit.org/show_bug.cgi?id=22631 + Allow ScriptCallFrame query names of functions in the call stack. + + * JavaScriptCore.exp: added InternalFunction::name and + UString operator==() as exported symbol + +2008-12-08 Judit Jasz + + Reviewed and tweaked by Cameron Zwarich. + + Bug 22352: Annotate opcodes with their length + + + * bytecode/Opcode.cpp: + * bytecode/Opcode.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + +2008-12-08 Geoffrey Garen + + Reviewed by Oliver Hunt. + + Implemented more of the relaxed and somewhat weird rules for deciding + how to interpret a non-pattern-character. + + * wrec/Escapes.h: + (JSC::WREC::Escape::): + (JSC::WREC::Escape::Escape): Eliminated Escape::None because it was + unused. If you see an '\\', it's either a valid escape or an error. + + * wrec/Quantifier.h: + (JSC::WREC::Quantifier::Quantifier): + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generateNonGreedyQuantifier): + (JSC::WREC::Generator::generateGreedyQuantifier): Renamed "noMaxSpecified" + to "Infinity", since that's what it means. + + * wrec/WRECParser.cpp: + (JSC::WREC::Parser::consumeGreedyQuantifier): Re-wrote {n,m} parsing rules + because they were too strict before. Added support for backtracking + in the case where the {n,m} fails to parse as a quantifier, and yet is + not a syntax error. + + (JSC::WREC::Parser::parseCharacterClass): + (JSC::WREC::Parser::parseNonCharacterEscape): Eliminated Escape::None, + as above. + + (JSC::WREC::Parser::consumeEscape): Don't treat ASCII and _ escapes + as syntax errors. See fast/regex/non-pattern-characters.html. + + * wrec/WRECParser.h: + (JSC::WREC::Parser::SavedState::SavedState): + (JSC::WREC::Parser::SavedState::restore): Added a state backtracker, + since parsing {n,m} forms requires backtracking if the form turns out + not to be a quantifier. + +2008-12-08 Geoffrey Garen + + Reviewed by Oliver Hunt. + + Refactored WREC parsing so that only one piece of code needs to know + the relaxed and somewhat weird rules for deciding how to interpret a + non-pattern-character, in preparation for implementing those rules. + + Also, implemented the relaxed and somewhat weird rules for '}' and ']'. + + * wrec/WREC.cpp: Reduced the regular expression size limit. Now that + WREC handles ']' properly, it compiles fast/js/regexp-charclass-crash.html, + which makes it hang at the old limit. (The old limit was based on the + misimpression that the same value in PCRE limited the regular expression + pattern size; in reality, it limited the expected compiled regular + expression size. WREC doesn't have a way to calculate an expected + compiled regular expression size, but this should be good enough.) + + * wrec/WRECParser.cpp: + (JSC::WREC::parsePatternCharacterSequence): Nixed this function because + it contained a second copy of the logic for handling non-pattern-characters, + which is about to get a lot more complicated. + + (JSC::WREC::PatternCharacterSequence::PatternCharacterSequence): + (JSC::WREC::PatternCharacterSequence::size): + (JSC::WREC::PatternCharacterSequence::append): + (JSC::WREC::PatternCharacterSequence::flush): Helper object for generating + an optimized sequence of pattern characters. + + (JSC::WREC::Parser::parseNonCharacterEscape): Renamed to reflect the fact + that the main parseAlternative loop handles character escapes. + + (JSC::WREC::Parser::parseAlternative): Moved pattern character sequence + logic from parsePatternCharacterSequence to here, using + PatternCharacterSequence to help with the details. + + * wrec/WRECParser.h: Updated for renames. + +2008-12-08 Alexey Proskuryakov + + Reviewed by Geoff Garen. + + Give JSGlobalContextCreate a behavior that is concurrency aware, + and un-deprecate it + + * API/JSContextRef.cpp: (JSGlobalContextCreate): + * API/JSContextRef.h: + Use a unique context group for the context, unless the application was linked against old + JavaScriptCore. + +2008-12-08 Sam Weinig + + Reviewed by Cameron Zwarich. + + Fix for Remove the CTI return address table from CodeBlock + + Step 1: + + Remove use of jitReturnAddressVPCMap when looking for vPC to store Structures + in for cached lookup. Instead, use the offset in the StructureStubInfo that is + already required. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dumpStatistics): Fix extraneous semicolon. + * interpreter/Interpreter.cpp: + (JSC::Interpreter::tryCTICachePutByID): + (JSC::Interpreter::tryCTICacheGetByID): + (JSC::Interpreter::cti_op_get_by_id_self_fail): + (JSC::Interpreter::cti_op_get_by_id_proto_list): + * jit/JIT.h: + (JSC::JIT::compileGetByIdSelf): + (JSC::JIT::compileGetByIdProto): + (JSC::JIT::compileGetByIdChain): + (JSC::JIT::compilePutByIdReplace): + (JSC::JIT::compilePutByIdTransition): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::patchGetByIdSelf): + (JSC::JIT::patchPutByIdReplace): + (JSC::JIT::privateCompilePatchGetArrayLength): Remove extra call to getStubInfo. + (JSC::JIT::privateCompileGetByIdSelf): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdChain): + (JSC::JIT::privateCompilePutByIdReplace): + +2008-12-08 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Port the op_j?n?eq_null JIT code generation to use the MacroAssembler, + and clean up slightly at the same time. The 'j' forms currently compare, + then set a register, then compare again, then branch. Branch directly on + the result of the first compare. + + Around a 1% progression on deltablue, crypto & early boyer, for about 1/2% + overall on v8-tests. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdSlowCase): + +2008-12-08 Gavin Barraclough + + Reviewed by Geoff Garen. + + Expand MacroAssembler to support more operations, required by the JIT. + + Generally adds more operations and permutations of operands to the existing + interface. Rename 'jset' to 'jnz' and 'jnset' to 'jz', which seem clearer, + and require that immediate pointer operands (though not pointer addresses to + load and store instructions) are wrapped in a ImmPtr() type, akin to Imm32(). + + No performance impact. + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::): + (JSC::MacroAssembler::ImmPtr::ImmPtr): + (JSC::MacroAssembler::add32): + (JSC::MacroAssembler::and32): + (JSC::MacroAssembler::or32): + (JSC::MacroAssembler::sub32): + (JSC::MacroAssembler::xor32): + (JSC::MacroAssembler::loadPtr): + (JSC::MacroAssembler::load32): + (JSC::MacroAssembler::storePtr): + (JSC::MacroAssembler::store32): + (JSC::MacroAssembler::poke): + (JSC::MacroAssembler::move): + (JSC::MacroAssembler::testImm32): + (JSC::MacroAssembler::jae32): + (JSC::MacroAssembler::jb32): + (JSC::MacroAssembler::jePtr): + (JSC::MacroAssembler::je32): + (JSC::MacroAssembler::jnePtr): + (JSC::MacroAssembler::jne32): + (JSC::MacroAssembler::jnzPtr): + (JSC::MacroAssembler::jnz32): + (JSC::MacroAssembler::jzPtr): + (JSC::MacroAssembler::jz32): + (JSC::MacroAssembler::joSub32): + (JSC::MacroAssembler::jump): + (JSC::MacroAssembler::sete32): + (JSC::MacroAssembler::setne32): + (JSC::MacroAssembler::setnz32): + (JSC::MacroAssembler::setz32): + * assembler/X86Assembler.h: + (JSC::X86Assembler::addl_mr): + (JSC::X86Assembler::andl_i8r): + (JSC::X86Assembler::cmpl_rm): + (JSC::X86Assembler::cmpl_mr): + (JSC::X86Assembler::cmpl_i8m): + (JSC::X86Assembler::subl_mr): + (JSC::X86Assembler::testl_i32m): + (JSC::X86Assembler::xorl_i32r): + (JSC::X86Assembler::movl_rm): + (JSC::X86Assembler::modRm_opmsib): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + * jit/JITInlineMethods.h: + (JSC::JIT::emitGetVirtualRegister): + (JSC::JIT::emitPutCTIArgConstant): + (JSC::JIT::emitPutCTIParam): + (JSC::JIT::emitPutImmediateToCallFrameHeader): + (JSC::JIT::emitInitRegister): + (JSC::JIT::checkStructure): + (JSC::JIT::emitJumpIfJSCell): + (JSC::JIT::emitJumpIfNotJSCell): + (JSC::JIT::emitJumpSlowCaseIfNotImmNum): + +2008-12-08 Geoffrey Garen + + Reviewed by Sam Weinig. + + Fixed a bug where WREC would allow a quantifier whose minimum was + greater than its maximum. + + * wrec/Quantifier.h: + (JSC::WREC::Quantifier::Quantifier): ASSERT that the quantifier is not + backwards. + + * wrec/WRECParser.cpp: + (JSC::WREC::Parser::consumeGreedyQuantifier): Verify that the minimum + is not greater than the maximum. + +2008-12-08 Eric Seidel + + Build fix only, no review. + + * JavaScriptCore.scons: add bytecode/JumpTable.cpp + +2008-12-08 Sam Weinig + + Reviewed by Geoffrey Garen. + + Patch for https://bugs.webkit.org/show_bug.cgi?id=22716 + + Add RareData structure to CodeBlock for infrequently used auxiliary data + members. + + Reduces memory on Membuster-head by ~.5MB + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + (JSC::CodeBlock::dumpStatistics): + (JSC::CodeBlock::mark): + (JSC::CodeBlock::getHandlerForVPC): + (JSC::CodeBlock::nativeExceptionCodeForHandlerVPC): + (JSC::CodeBlock::shrinkToFit): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::numberOfExceptionHandlers): + (JSC::CodeBlock::addExceptionHandler): + (JSC::CodeBlock::exceptionHandler): + (JSC::CodeBlock::addFunction): + (JSC::CodeBlock::function): + (JSC::CodeBlock::addUnexpectedConstant): + (JSC::CodeBlock::unexpectedConstant): + (JSC::CodeBlock::addRegExp): + (JSC::CodeBlock::regexp): + (JSC::CodeBlock::numberOfImmediateSwitchJumpTables): + (JSC::CodeBlock::addImmediateSwitchJumpTable): + (JSC::CodeBlock::immediateSwitchJumpTable): + (JSC::CodeBlock::numberOfCharacterSwitchJumpTables): + (JSC::CodeBlock::addCharacterSwitchJumpTable): + (JSC::CodeBlock::characterSwitchJumpTable): + (JSC::CodeBlock::numberOfStringSwitchJumpTables): + (JSC::CodeBlock::addStringSwitchJumpTable): + (JSC::CodeBlock::stringSwitchJumpTable): + (JSC::CodeBlock::evalCodeCache): + (JSC::CodeBlock::createRareDataIfNecessary): + +2008-11-26 Peter Kasting + + Reviewed by Anders Carlsson. + + https://bugs.webkit.org/show_bug.cgi?id=16814 + Allow ports to disable ActiveX->NPAPI conversion for Media Player. + Improve handling of miscellaneous ActiveX objects. + + * wtf/Platform.h: Add another ENABLE(...). + +2008-12-08 Sam Weinig + + Reviewed by Mark Rowe. + + Add dumping of CodeBlock member structure usage. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dumpStatistics): + * bytecode/EvalCodeCache.h: + (JSC::EvalCodeCache::isEmpty): + +2008-12-08 David Kilzer + + Bug 22555: Sort "children" sections in Xcode project files + + + + Reviewed by Eric Seidel. + + * JavaScriptCore.xcodeproj/project.pbxproj: Sorted. + +2008-12-08 Tony Chang + + Reviewed by Eric Seidel. + + Enable Pan scrolling only when building on PLATFORM(WIN_OS) + Previously platforms like Apple Windows WebKit, Cairo Windows WebKit, + Wx and Chromium were enabling it explicitly, now we just turn it on + for all WIN_OS, later platforms can turn it off as needed on Windows + (or turn it on under Linux, etc.) + https://bugs.webkit.org/show_bug.cgi?id=22698 + + * wtf/Platform.h: + +2008-12-08 Sam Weinig + + Reviewed by Cameron Zwarich. + + Add basic memory statistics dumping for CodeBlock. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dumpStatistics): + (JSC::CodeBlock::CodeBlock): + (JSC::CodeBlock::~CodeBlock): + * bytecode/CodeBlock.h: + +2008-12-08 Simon Hausmann + + Fix the Linux build with newer gcc/glibc. + + * jit/ExecutableAllocatorPosix.cpp: Include unistd.h for + getpagesize(), according to + http://opengroup.org/onlinepubs/007908775/xsh/getpagesize.html + +2008-12-08 Simon Hausmann + + Fix the build with Qt on Windows. + + * JavaScriptCore.pri: Compile ExecutableAllocatorWin.cpp on Windows. + +2008-12-07 Oliver Hunt + + Reviewed by NOBODY (Buildfix). + + Fix non-WREC builds + + * runtime/RegExp.cpp: + (JSC::RegExp::RegExp): + +2008-12-07 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + Put ENABLE(ASSEMBLER) guards around use of ExecutableAllocator in global data + + Correct Qt and Gtk project files + + * GNUmakefile.am: + * JavaScriptCore.pri: + * runtime/JSGlobalData.h: + +2008-12-07 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + Add new files to other projects. + + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.pro: + +2008-12-07 Oliver Hunt + + Rubber stamped by Mark Rowe. + + Rename ExecutableAllocatorMMAP to the more sensible ExecutableAllocatorPosix + + * JavaScriptCore.xcodeproj/project.pbxproj: + * jit/ExecutableAllocator.h: + * jit/ExecutableAllocatorPosix.cpp: Renamed from JavaScriptCore/jit/ExecutableAllocatorMMAP.cpp. + (JSC::ExecutableAllocator::intializePageSize): + (JSC::ExecutablePool::systemAlloc): + (JSC::ExecutablePool::systemRelease): + +2008-12-07 Oliver Hunt + + Reviewed by Cameron Zwarich and Sam Weinig + + Need more granular control over allocation of executable memory (21783) + + + Add a new allocator for use by the JIT that provides executable pages, so + we can get rid of the current hack that makes the entire heap executable. + + 1-2% progression on SunSpider-v8, 1% on SunSpider. Reduces memory usage as well! + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/jsc/jsc.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * assembler/AssemblerBuffer.h: + (JSC::AssemblerBuffer::size): + (JSC::AssemblerBuffer::executableCopy): + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::size): + (JSC::MacroAssembler::copyCode): + * assembler/X86Assembler.h: + (JSC::X86Assembler::size): + (JSC::X86Assembler::executableCopy): + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::~CodeBlock): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::executablePool): + (JSC::CodeBlock::setExecutablePool): + * bytecode/Instruction.h: + (JSC::PolymorphicAccessStructureList::derefStructures): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::~Interpreter): + * interpreter/Interpreter.h: + * jit/ExecutableAllocator.cpp: Added. + * jit/ExecutableAllocator.h: Added. + (JSC::ExecutablePool::create): + (JSC::ExecutablePool::alloc): + (JSC::ExecutablePool::~ExecutablePool): + (JSC::ExecutablePool::available): + (JSC::ExecutablePool::ExecutablePool): + (JSC::ExecutablePool::poolAllocate): + (JSC::ExecutableAllocator::ExecutableAllocator): + (JSC::ExecutableAllocator::poolForSize): + (JSC::ExecutablePool::sizeForAllocation): + * jit/ExecutableAllocatorMMAP.cpp: Added. + (JSC::ExecutableAllocator::intializePageSize): + (JSC::ExecutablePool::systemAlloc): + (JSC::ExecutablePool::systemRelease): + * jit/ExecutableAllocatorWin.cpp: Added. + (JSC::ExecutableAllocator::intializePageSize): + (JSC::ExecutablePool::systemAlloc): + (JSC::ExecutablePool::systemRelease): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + (JSC::JIT::compileCTIMachineTrampolines): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdSelf): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + (JSC::JIT::privateCompilePutByIdReplace): + * parser/Nodes.cpp: + (JSC::RegExpNode::emitBytecode): + * runtime/JSGlobalData.h: + (JSC::JSGlobalData::poolForSize): + * runtime/RegExp.cpp: + (JSC::RegExp::RegExp): + (JSC::RegExp::create): + (JSC::RegExp::~RegExp): + * runtime/RegExp.h: + * runtime/RegExpConstructor.cpp: + (JSC::constructRegExp): + * runtime/RegExpPrototype.cpp: + (JSC::regExpProtoFuncCompile): + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncMatch): + (JSC::stringProtoFuncSearch): + * wrec/WREC.cpp: + (JSC::WREC::Generator::compileRegExp): + * wrec/WRECGenerator.h: + * wtf/FastMalloc.cpp: + * wtf/FastMalloc.h: + * wtf/TCSystemAlloc.cpp: + (TryMmap): + (TryVirtualAlloc): + (TryDevMem): + (TCMalloc_SystemRelease): + +2008-12-06 Sam Weinig + + Fix the Gtk build. + + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compilePutByIdHotPath): + +2008-12-06 Sam Weinig + + Reviewed by Cameron Zwarich, + + Move CodeBlock constructor into the .cpp file. + + Sunspider reports a .7% progression, but I can only assume this + is noise. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::CodeBlock): + * bytecode/CodeBlock.h: + +2008-12-06 Sam Weinig + + Reviewed by Cameron Zwarich. + + Split JumpTable code into its own file. + + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * bytecode/CodeBlock.cpp: + * bytecode/CodeBlock.h: + * bytecode/JumpTable.cpp: Copied from bytecode/CodeBlock.cpp. + * bytecode/JumpTable.h: Copied from bytecode/CodeBlock.h. + +2008-12-05 Sam Weinig + + Reviewed by Cameron Zwarich. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=22715 + Encapsulate more CodeBlock members in preparation + of moving some of them to a rare data structure. + + * bytecode/CodeBlock.cpp: + (JSC::locationForOffset): + (JSC::printConditionalJump): + (JSC::printGetByIdOp): + (JSC::printPutByIdOp): + (JSC::CodeBlock::printStructure): + (JSC::CodeBlock::printStructures): + (JSC::CodeBlock::dump): + (JSC::CodeBlock::~CodeBlock): + (JSC::CodeBlock::unlinkCallers): + (JSC::CodeBlock::derefStructures): + (JSC::CodeBlock::refStructures): + (JSC::CodeBlock::mark): + (JSC::CodeBlock::getHandlerForVPC): + (JSC::CodeBlock::nativeExceptionCodeForHandlerVPC): + (JSC::CodeBlock::lineNumberForVPC): + (JSC::CodeBlock::expressionRangeForVPC): + (JSC::CodeBlock::shrinkToFit): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::CodeBlock): + (JSC::CodeBlock::addCaller): + (JSC::CodeBlock::removeCaller): + (JSC::CodeBlock::isKnownNotImmediate): + (JSC::CodeBlock::isConstantRegisterIndex): + (JSC::CodeBlock::getConstant): + (JSC::CodeBlock::isTemporaryRegisterIndex): + (JSC::CodeBlock::getStubInfo): + (JSC::CodeBlock::getCallLinkInfo): + (JSC::CodeBlock::instructions): + (JSC::CodeBlock::setJITCode): + (JSC::CodeBlock::jitCode): + (JSC::CodeBlock::ownerNode): + (JSC::CodeBlock::setGlobalData): + (JSC::CodeBlock::setThisRegister): + (JSC::CodeBlock::thisRegister): + (JSC::CodeBlock::setNeedsFullScopeChain): + (JSC::CodeBlock::needsFullScopeChain): + (JSC::CodeBlock::setUsesEval): + (JSC::CodeBlock::usesEval): + (JSC::CodeBlock::setUsesArguments): + (JSC::CodeBlock::usesArguments): + (JSC::CodeBlock::codeType): + (JSC::CodeBlock::source): + (JSC::CodeBlock::sourceOffset): + (JSC::CodeBlock::addGlobalResolveInstruction): + (JSC::CodeBlock::numberOfPropertyAccessInstructions): + (JSC::CodeBlock::addPropertyAccessInstruction): + (JSC::CodeBlock::propertyAccessInstruction): + (JSC::CodeBlock::numberOfCallLinkInfos): + (JSC::CodeBlock::addCallLinkInfo): + (JSC::CodeBlock::callLinkInfo): + (JSC::CodeBlock::numberOfJumpTargets): + (JSC::CodeBlock::addJumpTarget): + (JSC::CodeBlock::jumpTarget): + (JSC::CodeBlock::lastJumpTarget): + (JSC::CodeBlock::numberOfExceptionHandlers): + (JSC::CodeBlock::addExceptionHandler): + (JSC::CodeBlock::exceptionHandler): + (JSC::CodeBlock::addExpressionInfo): + (JSC::CodeBlock::numberOfLineInfos): + (JSC::CodeBlock::addLineInfo): + (JSC::CodeBlock::lastLineInfo): + (JSC::CodeBlock::jitReturnAddressVPCMap): + (JSC::CodeBlock::numberOfIdentifiers): + (JSC::CodeBlock::addIdentifier): + (JSC::CodeBlock::identifier): + (JSC::CodeBlock::numberOfConstantRegisters): + (JSC::CodeBlock::addConstantRegister): + (JSC::CodeBlock::constantRegister): + (JSC::CodeBlock::addFunction): + (JSC::CodeBlock::function): + (JSC::CodeBlock::addFunctionExpression): + (JSC::CodeBlock::functionExpression): + (JSC::CodeBlock::addUnexpectedConstant): + (JSC::CodeBlock::unexpectedConstant): + (JSC::CodeBlock::addRegExp): + (JSC::CodeBlock::regexp): + (JSC::CodeBlock::symbolTable): + (JSC::CodeBlock::evalCodeCache): + New inline setters/getters. + + (JSC::ProgramCodeBlock::ProgramCodeBlock): + (JSC::ProgramCodeBlock::~ProgramCodeBlock): + (JSC::ProgramCodeBlock::clearGlobalObject): + * bytecode/SamplingTool.cpp: + (JSC::ScopeSampleRecord::sample): + (JSC::SamplingTool::dump): + * bytecompiler/BytecodeGenerator.cpp: + * bytecompiler/BytecodeGenerator.h: + * bytecompiler/Label.h: + * interpreter/CallFrame.cpp: + * interpreter/Interpreter.cpp: + * jit/JIT.cpp: + * jit/JITCall.cpp: + * jit/JITInlineMethods.h: + * jit/JITPropertyAccess.cpp: + * parser/Nodes.cpp: + * runtime/Arguments.h: + * runtime/ExceptionHelpers.cpp: + * runtime/JSActivation.cpp: + * runtime/JSActivation.h: + * runtime/JSGlobalObject.cpp: + Change direct access to use new getter/setters. + +2008-12-05 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Prevent GCC4.2 from hanging when trying to compile Interpreter.cpp. + Added "-fno-var-tracking" compiler flag. + + https://bugs.webkit.org/show_bug.cgi?id=22704 + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-12-05 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Ordering of branch operands in MacroAssembler in unnecessarily inconsistent. + + je, jg etc take an immediate operand as the second argument, but for the + equality branches (je, jne) the immediate operand was the first argument. This + was unnecessarily inconsistent. Change je, jne methods to take the immediate + as the second argument. + + https://bugs.webkit.org/show_bug.cgi?id=22703 + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::je32): + (JSC::MacroAssembler::jne32): + * jit/JIT.cpp: + (JSC::JIT::compileOpStrictEq): + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generateEnter): + (JSC::WREC::Generator::generateNonGreedyQuantifier): + (JSC::WREC::Generator::generateGreedyQuantifier): + (JSC::WREC::Generator::generatePatternCharacterPair): + (JSC::WREC::Generator::generatePatternCharacter): + (JSC::WREC::Generator::generateCharacterClassInvertedRange): + (JSC::WREC::Generator::generateCharacterClassInverted): + (JSC::WREC::Generator::generateAssertionBOL): + (JSC::WREC::Generator::generateAssertionWordBoundary): + +2008-12-05 Gavin Barraclough + + Reviewed by Geoff Garen. + + Second tranche of porting JIT.cpp to MacroAssembler interface. + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::mul32): + (JSC::MacroAssembler::jl32): + (JSC::MacroAssembler::jnzSub32): + (JSC::MacroAssembler::joAdd32): + (JSC::MacroAssembler::joMul32): + (JSC::MacroAssembler::jzSub32): + * jit/JIT.cpp: + (JSC::JIT::emitSlowScriptCheck): + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + * jit/JITInlineMethods.h: + (JSC::JIT::emitJumpIfNotJSCell): + (JSC::JIT::emitJumpSlowCaseIfNotJSCell): + +2008-12-05 David Kilzer + + Bug 22609: Provide a build-time choice when generating hash tables for properties of built-in DOM objects + + + + + Reviewed by Darin Adler. + + Initial patch by Yosen Lin. Adapted for ToT WebKit by David Kilzer. + + Added back the code that generates a "compact" hash (instead of a + perfect hash) as a build-time option using the + ENABLE(PERFECT_HASH_SIZE) macro as defined in Lookup.h. + + * create_hash_table: Rename variables to differentiate perfect hash + values from compact hash values. Added back code to compute compact + hash tables. Generate both hash table sizes and emit + conditionalized code based on ENABLE(PERFECT_HASH_SIZE). + * runtime/Lookup.cpp: + (JSC::HashTable::createTable): Added version of createTable() for + use with compact hash tables. + (JSC::HashTable::deleteTable): Updated to work with compact hash + tables. + * runtime/Lookup.h: Defined ENABLE(PERFECT_HASH_SIZE) macro here. + (JSC::HashEntry::initialize): Set m_next to zero when using compact + hash tables. + (JSC::HashEntry::setNext): Added for compact hash tables. + (JSC::HashEntry::next): Added for compact hash tables. + (JSC::HashTable::entry): Added version of entry() for use with + compact hash tables. + * runtime/Structure.cpp: + (JSC::Structure::getEnumerablePropertyNames): Updated to work with + compact hash tables. + +2008-12-05 Gavin Barraclough + + Reviewed by Geoff Garen. + + Remove redundant calls to JIT::emitSlowScriptCheck. + This is checked in the hot path, so is not needed on the slow path - and the code + was being planted before the start of the slow case, so was completely unreachable! + + * jit/JIT.cpp: + (JSC::JIT::privateCompileSlowCases): + +2008-12-05 Gavin Barraclough + + Reviewed by Geoff Garen. + + Move JIT::compileOpStrictEq to MacroAssembler interface. + + The rewrite also looks like a small (<1%) performance progression. + + https://bugs.webkit.org/show_bug.cgi?id=22697 + + * jit/JIT.cpp: + (JSC::JIT::compileOpStrictEq): + (JSC::JIT::privateCompileSlowCases): + * jit/JIT.h: + * jit/JITInlineMethods.h: + (JSC::JIT::emitJumpIfJSCell): + (JSC::JIT::emitJumpSlowCaseIfJSCell): + +2008-12-05 Gavin Barraclough + + Reviewed by Geoff Garen. + + Remove m_assembler from MacroAssembler::Jump. + Keeping a pointer allowed for some syntactic sugar - "link()" looks nicer + than "link(this)". But maintaining this doubles the size of Jump, which + is even more unfortunate for the JIT, since there are many large structures + holding JmpSrcs. Probably best to remove it. + + https://bugs.webkit.org/show_bug.cgi?id=22693 + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::Jump::Jump): + (JSC::MacroAssembler::Jump::link): + (JSC::MacroAssembler::Jump::linkTo): + (JSC::MacroAssembler::JumpList::link): + (JSC::MacroAssembler::JumpList::linkTo): + (JSC::MacroAssembler::jae32): + (JSC::MacroAssembler::je32): + (JSC::MacroAssembler::je16): + (JSC::MacroAssembler::jg32): + (JSC::MacroAssembler::jge32): + (JSC::MacroAssembler::jl32): + (JSC::MacroAssembler::jle32): + (JSC::MacroAssembler::jnePtr): + (JSC::MacroAssembler::jne32): + (JSC::MacroAssembler::jnset32): + (JSC::MacroAssembler::jset32): + (JSC::MacroAssembler::jump): + (JSC::MacroAssembler::jzSub32): + (JSC::MacroAssembler::joAdd32): + (JSC::MacroAssembler::call): + * wrec/WREC.cpp: + (JSC::WREC::Generator::compileRegExp): + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generateEnter): + (JSC::WREC::Generator::generateBackreferenceQuantifier): + (JSC::WREC::Generator::generateNonGreedyQuantifier): + (JSC::WREC::Generator::generateGreedyQuantifier): + (JSC::WREC::Generator::generatePatternCharacter): + (JSC::WREC::Generator::generateCharacterClassInvertedRange): + (JSC::WREC::Generator::generateCharacterClassInverted): + (JSC::WREC::Generator::generateCharacterClass): + (JSC::WREC::Generator::generateParenthesesAssertion): + (JSC::WREC::Generator::generateParenthesesInvertedAssertion): + (JSC::WREC::Generator::generateParenthesesNonGreedy): + (JSC::WREC::Generator::generateParenthesesResetTrampoline): + (JSC::WREC::Generator::generateAssertionBOL): + (JSC::WREC::Generator::generateAssertionEOL): + (JSC::WREC::Generator::generateAssertionWordBoundary): + (JSC::WREC::Generator::generateBackreference): + (JSC::WREC::Generator::terminateAlternative): + (JSC::WREC::Generator::terminateDisjunction): + * wrec/WRECParser.h: + +2008-12-05 Gavin Barraclough + + Reviewed by Geoffrey Garen. + + Simplify JIT generated checks for timeout code, by moving more work into the C function. + https://bugs.webkit.org/show_bug.cgi?id=22688 + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::cti_timeout_check): + * interpreter/Interpreter.h: + * jit/JIT.cpp: + (JSC::JIT::emitSlowScriptCheck): + +2008-12-05 Sam Weinig + + Reviewed by Geoffrey Garen. + + Encapsulate access to jump tables in the CodeBlock in preparation + of moving them to a rare data structure. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + (JSC::CodeBlock::shrinkToFit): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::numberOfImmediateSwitchJumpTables): + (JSC::CodeBlock::addImmediateSwitchJumpTable): + (JSC::CodeBlock::immediateSwitchJumpTable): + (JSC::CodeBlock::numberOfCharacterSwitchJumpTables): + (JSC::CodeBlock::addCharacterSwitchJumpTable): + (JSC::CodeBlock::characterSwitchJumpTable): + (JSC::CodeBlock::numberOfStringSwitchJumpTables): + (JSC::CodeBlock::addStringSwitchJumpTable): + (JSC::CodeBlock::stringSwitchJumpTable): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::generate): + (JSC::BytecodeGenerator::endSwitch): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::cti_op_switch_imm): + (JSC::Interpreter::cti_op_switch_char): + (JSC::Interpreter::cti_op_switch_string): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + +2008-12-05 Adam Roben + + Windows build fix after r39020 + + * jit/JITInlineMethods.h: + (JSC::JIT::restoreArgumentReference): + (JSC::JIT::restoreArgumentReferenceForTrampoline): + Add some apparently-missing __. + +2008-12-04 Geoffrey Garen + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=22673 + + Added support for the assertion (?=) and inverted assertion (?!) atoms + in WREC. + + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generateParenthesesAssertion): + (JSC::WREC::Generator::generateParenthesesInvertedAssertion): Split the + old (unused) generateParentheses into these two functions, with more + limited capabilities. + + * wrec/WRECGenerator.h: + (JSC::WREC::Generator::): Moved an enum to the top of the class definition, + to match the WebKit style, and removed a defunct comment. + + * wrec/WRECParser.cpp: + (JSC::WREC::Parser::parseParentheses): + (JSC::WREC::Parser::consumeParenthesesType): + * wrec/WRECParser.h: + (JSC::WREC::Parser::): Added support for parsing (?=) and (?!). + +2008-12-05 Simon Hausmann + + Rubber-stamped by Tor Arne Vestbø. + + Disable the JIT for the Qt build alltogether again, after observing + more miscompilations in a wider range of newer gcc versions. + + * JavaScriptCore.pri: + +2008-12-05 Simon Hausmann + + Reviewed by Tor Arne Vestbø. + + Disable the JIT for the Qt build on Linux unless gcc is >= 4.2, + due to miscompilations. + + * JavaScriptCore.pri: + +2008-12-04 Gavin Barraclough + + Reviewed by Geoff Garen. + + Start porting the JIT to use the MacroAssembler. + + https://bugs.webkit.org/show_bug.cgi?id=22671 + No change in performance. + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::Jump::operator X86Assembler::JmpSrc): + (JSC::MacroAssembler::add32): + (JSC::MacroAssembler::and32): + (JSC::MacroAssembler::lshift32): + (JSC::MacroAssembler::rshift32): + (JSC::MacroAssembler::storePtr): + (JSC::MacroAssembler::store32): + (JSC::MacroAssembler::poke): + (JSC::MacroAssembler::move): + (JSC::MacroAssembler::compareImm32ForBranchEquality): + (JSC::MacroAssembler::jnePtr): + (JSC::MacroAssembler::jnset32): + (JSC::MacroAssembler::jset32): + (JSC::MacroAssembler::jzeroSub32): + (JSC::MacroAssembler::joverAdd32): + (JSC::MacroAssembler::call): + * assembler/X86Assembler.h: + (JSC::X86Assembler::shll_i8r): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::compileBinaryArithOp): + * jit/JITInlineMethods.h: + (JSC::JIT::emitGetVirtualRegister): + (JSC::JIT::emitPutCTIArg): + (JSC::JIT::emitPutCTIArgConstant): + (JSC::JIT::emitGetCTIArg): + (JSC::JIT::emitPutCTIArgFromVirtualRegister): + (JSC::JIT::emitPutCTIParam): + (JSC::JIT::emitGetCTIParam): + (JSC::JIT::emitPutToCallFrameHeader): + (JSC::JIT::emitPutImmediateToCallFrameHeader): + (JSC::JIT::emitGetFromCallFrameHeader): + (JSC::JIT::emitPutVirtualRegister): + (JSC::JIT::emitInitRegister): + (JSC::JIT::emitNakedCall): + (JSC::JIT::restoreArgumentReference): + (JSC::JIT::restoreArgumentReferenceForTrampoline): + (JSC::JIT::emitCTICall): + (JSC::JIT::checkStructure): + (JSC::JIT::emitJumpSlowCaseIfNotJSCell): + (JSC::JIT::emitJumpSlowCaseIfNotImmNum): + (JSC::JIT::emitJumpSlowCaseIfNotImmNums): + (JSC::JIT::emitFastArithDeTagImmediate): + (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): + (JSC::JIT::emitFastArithReTagImmediate): + (JSC::JIT::emitFastArithPotentiallyReTagImmediate): + (JSC::JIT::emitFastArithImmToInt): + (JSC::JIT::emitFastArithIntToImmOrSlowCase): + (JSC::JIT::emitFastArithIntToImmNoCheck): + (JSC::JIT::emitTagAsBoolImmediate): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + +2008-12-04 Geoffrey Garen + + Reviewed by Oliver Hunt. + + Some refactoring for generateGreedyQuantifier. + + SunSpider reports no change (possibly a 0.3% speedup). + + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generateGreedyQuantifier): Clarified label + meanings and unified some logic to simplify things. + + * wrec/WRECParser.h: + (JSC::WREC::Parser::parseAlternative): Added a version of parseAlternative + that can jump to a Label, instead of a JumpList, upon failure. (Eventually, + when we have a true Label class, this will be redundant.) This makes + things easier for generateGreedyQuantifier, because it can avoid + explicitly linking things. + +2008-12-04 Simon Hausmann + + Reviewed by Holger Freyther. + + Fix crashes in the Qt build on Linux/i386 with non-executable memory + by enabling TCSystemAlloc and the PROT_EXEC flag for mmap. + + * JavaScriptCore.pri: Enable the use of TCSystemAlloc if the JIT is + enabled. + * wtf/TCSystemAlloc.cpp: Extend the PROT_EXEC permissions to + PLATFORM(QT). + +2008-12-04 Simon Hausmann + + Reviewed by Tor Arne Vestbø. + + Enable ENABLE_JIT_OPTIMIZE_CALL, ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS + and ENABLE_JIT_OPTIMIZE_ARITHMETIC, as suggested by Niko. + + * JavaScriptCore.pri: + +2008-12-04 Kent Hansen + + Reviewed by Simon Hausmann. + + Enable the JSC jit for the Qt build by default for release builds on + linux-g++ and win32-msvc. + + * JavaScriptCore.pri: + +2008-12-04 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Allow JIT to function without property access repatching and arithmetic optimizations. + Controlled by ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS and ENABLE_JIT_OPTIMIZE_ARITHMETIC switches. + + https://bugs.webkit.org/show_bug.cgi?id=22643 + + * JavaScriptCore.xcodeproj/project.pbxproj: + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + * jit/JIT.h: + * jit/JITArithmetic.cpp: Copied from jit/JIT.cpp. + (JSC::JIT::compileBinaryArithOp): + (JSC::JIT::compileBinaryArithOpSlowCase): + * jit/JITPropertyAccess.cpp: Copied from jit/JIT.cpp. + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compileGetByIdSlowCase): + (JSC::JIT::compilePutByIdHotPath): + (JSC::JIT::compilePutByIdSlowCase): + (JSC::resizePropertyStorage): + (JSC::transitionWillNeedStorageRealloc): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::patchGetByIdSelf): + (JSC::JIT::patchPutByIdReplace): + (JSC::JIT::privateCompilePatchGetArrayLength): + * wtf/Platform.h: + +2008-12-03 Geoffrey Garen + + Reviewed by Oliver Hunt. + + Optimized sequences of characters in regular expressions by comparing + two characters at a time. + + 1-2% speedup on SunSpider, 19-25% speedup on regexp-dna. + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::load32): + (JSC::MacroAssembler::jge32): Filled out a few more macro methods. + + * assembler/X86Assembler.h: + (JSC::X86Assembler::movl_mr): Added a verion of movl_mr that operates + without an offset, to allow the macro assembler to optmize for that case. + + * wrec/WREC.cpp: + (JSC::WREC::Generator::compileRegExp): Test the saved value of index + instead of the index register when checking for "end of input." The + index register doesn't increment by 1 in an orderly fashion, so testing + it for == "end of input" is not valid. + + Also, jump all the way to "return failure" upon reaching "end of input," + instead of executing the next alternative. This is more logical, and + it's a slight optimization in the case of an expression with many alternatives. + + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generateIncrementIndex): Added support for + jumping to a failure label in the case where the index has reached "end + of input." + + (JSC::WREC::Generator::generatePatternCharacterSequence): + (JSC::WREC::Generator::generatePatternCharacterPair): This is the + optmization. It's basically like generatePatternCharacter, but it runs two + characters at a time. + + (JSC::WREC::Generator::generatePatternCharacter): Changed to use isASCII, + since it's clearer than comparing to a magic hex value. + + * wrec/WRECGenerator.h: + +2008-12-03 Gavin Barraclough + + Reviewed by Cameron Zwarich. + + Allow JIT to operate without the call-repatching optimization. + Controlled by ENABLE(JIT_OPTIMIZE_CALL), defaults on, disabling + this leads to significant performance regression. + + https://bugs.webkit.org/show_bug.cgi?id=22639 + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * jit/JIT.cpp: + (JSC::JIT::privateCompileSlowCases): + * jit/JIT.h: + * jit/JITCall.cpp: Copied from jit/JIT.cpp. + (JSC::JIT::compileOpCallInitializeCallFrame): + (JSC::JIT::compileOpCallSetupArgs): + (JSC::JIT::compileOpCallEvalSetupArgs): + (JSC::JIT::compileOpConstructSetupArgs): + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpCallSlowCase): + (JSC::unreachable): + * jit/JITInlineMethods.h: Copied from jit/JIT.cpp. + (JSC::JIT::checkStructure): + (JSC::JIT::emitFastArithPotentiallyReTagImmediate): + (JSC::JIT::emitTagAsBoolImmediate): + * wtf/Platform.h: + +2008-12-03 Eric Seidel + + Rubber-stamped by David Hyatt. + + Make HAVE_ACCESSIBILITY only define if !defined + + * wtf/Platform.h: + +2008-12-03 Sam Weinig + + Fix build. + + * assembler/X86Assembler.h: + (JSC::X86Assembler::orl_i32r): + +2008-12-03 Sam Weinig + + Reviewed by Geoffrey Garen. + + Remove shared AssemblerBuffer 1MB buffer and instead give AssemblerBuffer + an 256 byte inline capacity. + + 1% progression on Sunspider. + + * assembler/AssemblerBuffer.h: + (JSC::AssemblerBuffer::AssemblerBuffer): + (JSC::AssemblerBuffer::~AssemblerBuffer): + (JSC::AssemblerBuffer::grow): + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::MacroAssembler): + * assembler/X86Assembler.h: + (JSC::X86Assembler::X86Assembler): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::Interpreter): + * interpreter/Interpreter.h: + * jit/JIT.cpp: + (JSC::JIT::JIT): + * parser/Nodes.cpp: + (JSC::RegExpNode::emitBytecode): + * runtime/RegExp.cpp: + (JSC::RegExp::RegExp): + (JSC::RegExp::create): + * runtime/RegExp.h: + * runtime/RegExpConstructor.cpp: + (JSC::constructRegExp): + * runtime/RegExpPrototype.cpp: + (JSC::regExpProtoFuncCompile): + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncMatch): + (JSC::stringProtoFuncSearch): + * wrec/WREC.cpp: + (JSC::WREC::Generator::compileRegExp): + * wrec/WRECGenerator.h: + (JSC::WREC::Generator::Generator): + * wrec/WRECParser.h: + (JSC::WREC::Parser::Parser): + +2008-12-03 Geoffrey Garen + + Reviewed by Oliver Hunt, with help from Gavin Barraclough. + + orl_i32r was actually coded as an 8bit OR. So, I renamed orl_i32r to + orl_i8r, changed all orl_i32r clients to use orl_i8r, and then added + a new orl_i32r that actually does a 32bit OR. + + (32bit OR is currently unused, but a patch I'm working on uses it.) + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::or32): Updated to choose between 8bit and 32bit OR. + + * assembler/X86Assembler.h: + (JSC::X86Assembler::orl_i8r): The old orl_i32r. + (JSC::X86Assembler::orl_i32r): The new orl_i32r. + + * jit/JIT.cpp: + (JSC::JIT::emitFastArithPotentiallyReTagImmediate): + (JSC::JIT::emitTagAsBoolImmediate): Use orl_i8r, since we're ORing 8bit + values. + +2008-12-03 Dean Jackson + + Reviewed by Dan Bernstein. + + Helper functions for turn -> degrees. + https://bugs.webkit.org/show_bug.cgi?id=22497 + + * wtf/MathExtras.h: + (turn2deg): + (deg2turn): + +2008-12-02 Cameron Zwarich + + Reviewed by Geoff Garen. + + Bug 22504: Crashes during code generation occur due to refing of ignoredResult() + + + Since ignoredResult() was implemented by casting 1 to a RegisterID*, any + attempt to ref ignoredResult() results in a crash. This will occur in + code generation of a function body where a node emits another node with + the dst that was passed to it, and then refs the returned RegisterID*. + + To fix this problem, make ignoredResult() a member function of + BytecodeGenerator that simply returns a pointe to a fixed RegisterID + member of BytecodeGenerator. + + * bytecompiler/BytecodeGenerator.h: + (JSC::BytecodeGenerator::ignoredResult): + * bytecompiler/RegisterID.h: + * parser/Nodes.cpp: + (JSC::NullNode::emitBytecode): + (JSC::BooleanNode::emitBytecode): + (JSC::NumberNode::emitBytecode): + (JSC::StringNode::emitBytecode): + (JSC::RegExpNode::emitBytecode): + (JSC::ThisNode::emitBytecode): + (JSC::ResolveNode::emitBytecode): + (JSC::ObjectLiteralNode::emitBytecode): + (JSC::PostfixResolveNode::emitBytecode): + (JSC::PostfixBracketNode::emitBytecode): + (JSC::PostfixDotNode::emitBytecode): + (JSC::DeleteValueNode::emitBytecode): + (JSC::VoidNode::emitBytecode): + (JSC::TypeOfResolveNode::emitBytecode): + (JSC::TypeOfValueNode::emitBytecode): + (JSC::PrefixResolveNode::emitBytecode): + (JSC::AssignResolveNode::emitBytecode): + (JSC::CommaNode::emitBytecode): + (JSC::ForNode::emitBytecode): + (JSC::ForInNode::emitBytecode): + (JSC::ReturnNode::emitBytecode): + (JSC::ThrowNode::emitBytecode): + (JSC::FunctionBodyNode::emitBytecode): + (JSC::FuncDeclNode::emitBytecode): + +2008-12-02 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Fixed https://bugs.webkit.org/show_bug.cgi?id=22537 + REGRESSION (r38745): Assertion failure in jsSubstring() at ge.com + + The bug was that index would become greater than length, so our + "end of input" checks, which all check "index == length", would fail. + + The solution is to check for end of input before incrementing index, + to ensure that index is always <= length. + + As a side benefit, generateJumpIfEndOfInput can now use je instead of + jg, which should be slightly faster. + + * wrec/WREC.cpp: + (JSC::WREC::Generator::compileRegExp): + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generateJumpIfEndOfInput): + +2008-12-02 Gavin Barraclough + + Reviewed by Geoffrey Garen. + + Plant shift right immediate instructions, which are awesome. + https://bugs.webkit.org/show_bug.cgi?id=22610 + ~5% on the v8-crypto test. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + +2008-12-02 Geoffrey Garen + + Reviewed by Sam Weinig. + + Cleaned up SegmentedVector by abstracting segment access into helper + functions. + + SunSpider reports no change. + + * bytecompiler/SegmentedVector.h: + (JSC::SegmentedVector::SegmentedVector): + (JSC::SegmentedVector::~SegmentedVector): + (JSC::SegmentedVector::size): + (JSC::SegmentedVector::at): + (JSC::SegmentedVector::operator[]): + (JSC::SegmentedVector::last): + (JSC::SegmentedVector::append): + (JSC::SegmentedVector::removeLast): + (JSC::SegmentedVector::grow): + (JSC::SegmentedVector::clear): + (JSC::SegmentedVector::deleteAllSegments): + (JSC::SegmentedVector::segmentFor): + (JSC::SegmentedVector::subscriptFor): + (JSC::SegmentedVector::ensureSegmentsFor): + (JSC::SegmentedVector::ensureSegment): + +2008-12-02 Geoffrey Garen + + Reviewed by Geoffrey Garen. (Patch by Cameron Zwarich .) + + Fixed https://bugs.webkit.org/show_bug.cgi?id=22482 + REGRESSION (r37991): Occasionally see "Scene rendered incorrectly" + message when running the V8 Raytrace benchmark + + Rolled out r37991. It didn't properly save xmm0, which is caller-save, + before calling helper functions. + + SunSpider and v8 benchmarks show little change -- possibly a .2% + SunSpider regression, possibly a .2% v8 benchmark speedup. + + * assembler/X86Assembler.h: + (JSC::X86Assembler::): + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * bytecode/Instruction.h: + (JSC::Instruction::): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitUnaryOp): + * bytecompiler/BytecodeGenerator.h: + (JSC::BytecodeGenerator::emitToJSNumber): + (JSC::BytecodeGenerator::emitTypeOf): + (JSC::BytecodeGenerator::emitGetPropertyNames): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * interpreter/Interpreter.h: + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + * jit/JIT.h: + * parser/Nodes.cpp: + (JSC::UnaryOpNode::emitBytecode): + (JSC::BinaryOpNode::emitBytecode): + (JSC::EqualNode::emitBytecode): + * parser/ResultType.h: + (JSC::ResultType::isReusable): + (JSC::ResultType::mightBeNumber): + * runtime/JSNumberCell.h: + +2008-12-01 Gavin Barraclough + + Reviewed by Geoffrey Garen. + + Remove unused (sampling only, and derivable) argument to JIT::emitCTICall. + https://bugs.webkit.org/show_bug.cgi?id=22587 + + * jit/JIT.cpp: + (JSC::JIT::emitCTICall): + (JSC::JIT::compileOpCall): + (JSC::JIT::emitSlowScriptCheck): + (JSC::JIT::compileBinaryArithOpSlowCase): + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompile): + * jit/JIT.h: + +2008-12-02 Dimitri Glazkov + + Reviewed by Eric Seidel. + + Fix the inheritance chain for JSFunction. + + * runtime/JSFunction.cpp: + (JSC::JSFunction::info): Add InternalFunction::info as parent class + +2008-12-02 Simon Hausmann + + Reviewed by Tor Arne Vestbø. + + Fix ability to include JavaScriptCore.pri from other .pro files. + + * JavaScriptCore.pri: Moved -O3 setting into the .pro files. + * JavaScriptCore.pro: + * jsc.pro: + +2008-12-01 Geoffrey Garen + + Reviewed by Cameron Zwarich, with help from Gavin Barraclough. + + Fixed https://bugs.webkit.org/show_bug.cgi?id=22583. + + Refactored regular expression parsing to parse sequences of characters + as a single unit, in preparation for optimizing sequences of characters. + + SunSpider reports no change. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * wrec/Escapes.h: Added. Set of classes for representing an escaped + token in a pattern. + + * wrec/Quantifier.h: + (JSC::WREC::Quantifier::Quantifier): Simplified this constructor slightly, + to match the new Escape constructor. + + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generatePatternCharacterSequence): + * wrec/WRECGenerator.h: Added an interface for generating a sequence + of pattern characters at a time. It doesn't do anything special yet. + + * wrec/WRECParser.cpp: + (JSC::WREC::Parser::consumeGreedyQuantifier): + (JSC::WREC::Parser::consumeQuantifier): Renamed "parse" to "consume" in + these functions, to match "consumeEscape." + + (JSC::WREC::Parser::parsePatternCharacterSequence): New function for + iteratively aggregating a sequence of characters in a pattern. + + (JSC::WREC::Parser::parseCharacterClassQuantifier): + (JSC::WREC::Parser::parseBackreferenceQuantifier): Renamed "parse" to + "consume" in these functions, to match "consumeEscape." + + (JSC::WREC::Parser::parseCharacterClass): Refactored to use the common + escape processing code in consumeEscape. + + (JSC::WREC::Parser::parseEscape): Refactored to use the common + escape processing code in consumeEscape. + + (JSC::WREC::Parser::consumeEscape): Factored escaped token processing + into a common function, since we were doing this in a few places. + + (JSC::WREC::Parser::parseTerm): Refactored to use the common + escape processing code in consumeEscape. + + * wrec/WRECParser.h: + (JSC::WREC::Parser::consumeOctal): Refactored to use a helper function + for reading a digit. + +2008-12-01 Cameron Zwarich + + Reviewed by Oliver Hunt. + + Bug 20340: SegmentedVector segment allocations can lead to unsafe use of temporary registers + + + SegmentedVector currently frees segments and reallocates them when used + as a stack. This can lead to unsafe use of pointers into freed segments. + + In order to fix this problem, SegmentedVector will be changed to only + grow and never shrink. Also, rename the reserveCapacity() member + function to grow() to match the actual usage in BytecodeGenerator, where + this function is used to allocate a group of registers at once, rather + than merely saving space for them. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): Use grow() instead of + reserveCapacity(). + * bytecompiler/SegmentedVector.h: + (JSC::SegmentedVector::SegmentedVector): + (JSC::SegmentedVector::last): + (JSC::SegmentedVector::append): + (JSC::SegmentedVector::removeLast): + (JSC::SegmentedVector::grow): Renamed from reserveCapacity(). + (JSC::SegmentedVector::clear): + +2008-12-01 Mark Rowe + + Rubber-stamped by Anders Carlsson. + + Disable WREC for x86_64 since memory allocated by the system allocator is not marked executable, + which causes 64-bit debug builds to crash. Once we have a dedicated allocator for executable + memory we can turn this back on. + + * wtf/Platform.h: + +2008-12-01 Antti Koivisto + + Reviewed by Maciej Stachowiak. + + Restore inline buffer after vector is shrunk back below its inline capacity. + + * wtf/Vector.h: + (WTF::): + (WTF::VectorBuffer::restoreInlineBufferIfNeeded): + (WTF::::shrinkCapacity): + +2008-11-30 Antti Koivisto + + Reviewed by Mark Rowe. + + Try to return free pages in the current thread cache too. + + * wtf/FastMalloc.cpp: + (WTF::TCMallocStats::releaseFastMallocFreeMemory): + +2008-12-01 David Levin + + Reviewed by Alexey Proskuryakov. + + https://bugs.webkit.org/show_bug.cgi?id=22567 + Make HashTable work as expected with respect to threads. Specifically, it has class-level + thread safety and constant methods work on constant objects without synchronization. + + No observable change in behavior, so no test. This only affects debug builds. + + * wtf/HashTable.cpp: + (WTF::hashTableStatsMutex): + (WTF::HashTableStats::~HashTableStats): + (WTF::HashTableStats::recordCollisionAtCount): + Guarded variable access with a mutex. + + * wtf/HashTable.h: + (WTF::::lookup): + (WTF::::lookupForWriting): + (WTF::::fullLookupForWriting): + (WTF::::add): + (WTF::::reinsert): + (WTF::::remove): + (WTF::::rehash): + Changed increments of static variables to use atomicIncrement. + + (WTF::::invalidateIterators): + (WTF::addIterator): + (WTF::removeIterator): + Guarded mutable access with a mutex. + +2008-11-29 Gavin Barraclough + + Reviewed by Cameron Zwarich. + + Enable WREC on PLATFORM(X86_64). This change predominantly requires changes to the + WREC::Generator::generateEnter method to support the x86-64 ABI, and addition of + support for a limited number of quadword operations in the X86Assembler. + + This patch will cause the JS heap to be allocated with RWX permissions on 64-bit Mac + platforms. This is a regression with respect to previous 64-bit behaviour, but is no + more permissive than on 32-bit builds. This issue should be addressed at some point. + (This is tracked by bug #21783.) + + https://bugs.webkit.org/show_bug.cgi?id=22554 + Greater than 4x speedup on regexp-dna, on x86-64. + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::addPtr): + (JSC::MacroAssembler::loadPtr): + (JSC::MacroAssembler::storePtr): + (JSC::MacroAssembler::pop): + (JSC::MacroAssembler::push): + (JSC::MacroAssembler::move): + * assembler/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::movq_rr): + (JSC::X86Assembler::addl_i8m): + (JSC::X86Assembler::addl_i32r): + (JSC::X86Assembler::addq_i8r): + (JSC::X86Assembler::addq_i32r): + (JSC::X86Assembler::movq_mr): + (JSC::X86Assembler::movq_rm): + * wrec/WREC.h: + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generateEnter): + (JSC::WREC::Generator::generateReturnSuccess): + (JSC::WREC::Generator::generateReturnFailure): + * wtf/Platform.h: + * wtf/TCSystemAlloc.cpp: + +2008-12-01 Cameron Zwarich + + Reviewed by Sam Weinig. + + Preliminary work for bug 20340: SegmentedVector segment allocations can lead to unsafe use of temporary registers + + + SegmentedVector currently frees segments and reallocates them when used + as a stack. This can lead to unsafe use of pointers into freed segments. + + In order to fix this problem, SegmentedVector will be changed to only + grow and never shrink, with the sole exception of clearing all of its + data, a capability that is required by Lexer. This patch changes the + public interface to only allow for these capabilities. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): Use reserveCapacity() + instead of resize() for m_globals and m_parameters. + * bytecompiler/SegmentedVector.h: + (JSC::SegmentedVector::resize): Removed. + (JSC::SegmentedVector::reserveCapacity): Added. + (JSC::SegmentedVector::clear): Added. + (JSC::SegmentedVector::shrink): Removed. + (JSC::SegmentedVector::grow): Removed. + * parser/Lexer.cpp: + (JSC::Lexer::clear): Use clear() instead of resize(0). + +2008-11-30 Sam Weinig + + Reviewed by Mark Rowe. + + Renames jumps to m_jumps in JumpList. + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::JumpList::link): + (JSC::MacroAssembler::JumpList::linkTo): + (JSC::MacroAssembler::JumpList::append): + +2008-11-30 Antti Koivisto + + Reviewed by Mark Rowe. + + https://bugs.webkit.org/show_bug.cgi?id=22557 + + Report free size in central and thread caches too. + + * wtf/FastMalloc.cpp: + (WTF::TCMallocStats::fastMallocStatistics): + * wtf/FastMalloc.h: + +2008-11-29 Antti Koivisto + + Reviewed by Dan Bernstein. + + https://bugs.webkit.org/show_bug.cgi?id=22557 + Add statistics for JavaScript GC heap. + + * JavaScriptCore.exp: + * runtime/Collector.cpp: + (JSC::Heap::objectCount): + (JSC::addToStatistics): + (JSC::Heap::statistics): + * runtime/Collector.h: + +2008-11-29 Antti Koivisto + + Fix debug build by adding a stub method. + + * wtf/FastMalloc.cpp: + (WTF::fastMallocStatistics): + +2008-11-29 Antti Koivisto + + Reviewed by Alexey Proskuryakov. + + https://bugs.webkit.org/show_bug.cgi?id=22557 + + Add function for getting basic statistics from FastMalloc. + + * JavaScriptCore.exp: + * wtf/FastMalloc.cpp: + (WTF::DLL_Length): + (WTF::TCMalloc_PageHeap::ReturnedBytes): + (WTF::TCMallocStats::fastMallocStatistics): + * wtf/FastMalloc.h: + +2008-11-29 Cameron Zwarich + + Not reviewed. + + The C++ standard does not automatically grant the friendships of an + enclosing class to its nested subclasses, so we should do so explicitly. + This fixes the GCC 4.0 build, although both GCC 4.2 and Visual C++ 2005 + accept the incorrect code as it is. + + * assembler/MacroAssembler.h: + +2008-11-29 Gavin Barraclough + + Reviewed by Cameron Zwarich. + + Add the class MacroAssembler to provide some abstraction of code generation, + and change WREC to make use of this class, rather than directly accessing + the X86Assembler. + + This patch also allows WREC to be compiled without the rest of the JIT enabled. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * assembler/MacroAssembler.h: Added. + (JSC::MacroAssembler::): + (JSC::MacroAssembler::MacroAssembler): + (JSC::MacroAssembler::copyCode): + (JSC::MacroAssembler::Address::Address): + (JSC::MacroAssembler::ImplicitAddress::ImplicitAddress): + (JSC::MacroAssembler::BaseIndex::BaseIndex): + (JSC::MacroAssembler::Label::Label): + (JSC::MacroAssembler::Jump::Jump): + (JSC::MacroAssembler::Jump::link): + (JSC::MacroAssembler::Jump::linkTo): + (JSC::MacroAssembler::JumpList::link): + (JSC::MacroAssembler::JumpList::linkTo): + (JSC::MacroAssembler::JumpList::append): + (JSC::MacroAssembler::Imm32::Imm32): + (JSC::MacroAssembler::add32): + (JSC::MacroAssembler::or32): + (JSC::MacroAssembler::sub32): + (JSC::MacroAssembler::loadPtr): + (JSC::MacroAssembler::load32): + (JSC::MacroAssembler::load16): + (JSC::MacroAssembler::storePtr): + (JSC::MacroAssembler::store32): + (JSC::MacroAssembler::pop): + (JSC::MacroAssembler::push): + (JSC::MacroAssembler::peek): + (JSC::MacroAssembler::poke): + (JSC::MacroAssembler::move): + (JSC::MacroAssembler::compareImm32ForBranch): + (JSC::MacroAssembler::compareImm32ForBranchEquality): + (JSC::MacroAssembler::jae32): + (JSC::MacroAssembler::je32): + (JSC::MacroAssembler::je16): + (JSC::MacroAssembler::jg32): + (JSC::MacroAssembler::jge32): + (JSC::MacroAssembler::jl32): + (JSC::MacroAssembler::jle32): + (JSC::MacroAssembler::jne32): + (JSC::MacroAssembler::jump): + (JSC::MacroAssembler::breakpoint): + (JSC::MacroAssembler::ret): + * assembler/X86Assembler.h: + (JSC::X86Assembler::cmpw_rm): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::Interpreter): + * interpreter/Interpreter.h: + (JSC::Interpreter::assemblerBuffer): + * runtime/RegExp.cpp: + (JSC::RegExp::RegExp): + * wrec/WREC.cpp: + (JSC::WREC::Generator::compileRegExp): + * wrec/WREC.h: + * wrec/WRECFunctors.cpp: + (JSC::WREC::GeneratePatternCharacterFunctor::generateAtom): + (JSC::WREC::GenerateCharacterClassFunctor::generateAtom): + (JSC::WREC::GenerateBackreferenceFunctor::generateAtom): + (JSC::WREC::GenerateParenthesesNonGreedyFunctor::generateAtom): + * wrec/WRECFunctors.h: + (JSC::WREC::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor): + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generateEnter): + (JSC::WREC::Generator::generateReturnSuccess): + (JSC::WREC::Generator::generateSaveIndex): + (JSC::WREC::Generator::generateIncrementIndex): + (JSC::WREC::Generator::generateLoadCharacter): + (JSC::WREC::Generator::generateJumpIfEndOfInput): + (JSC::WREC::Generator::generateJumpIfNotEndOfInput): + (JSC::WREC::Generator::generateReturnFailure): + (JSC::WREC::Generator::generateBacktrack1): + (JSC::WREC::Generator::generateBacktrackBackreference): + (JSC::WREC::Generator::generateBackreferenceQuantifier): + (JSC::WREC::Generator::generateNonGreedyQuantifier): + (JSC::WREC::Generator::generateGreedyQuantifier): + (JSC::WREC::Generator::generatePatternCharacter): + (JSC::WREC::Generator::generateCharacterClassInvertedRange): + (JSC::WREC::Generator::generateCharacterClassInverted): + (JSC::WREC::Generator::generateCharacterClass): + (JSC::WREC::Generator::generateParentheses): + (JSC::WREC::Generator::generateParenthesesNonGreedy): + (JSC::WREC::Generator::generateParenthesesResetTrampoline): + (JSC::WREC::Generator::generateAssertionBOL): + (JSC::WREC::Generator::generateAssertionEOL): + (JSC::WREC::Generator::generateAssertionWordBoundary): + (JSC::WREC::Generator::generateBackreference): + (JSC::WREC::Generator::terminateAlternative): + (JSC::WREC::Generator::terminateDisjunction): + * wrec/WRECGenerator.h: + (JSC::WREC::Generator::Generator): + * wrec/WRECParser.cpp: + (JSC::WREC::Parser::parsePatternCharacterQualifier): + (JSC::WREC::Parser::parseCharacterClassQuantifier): + (JSC::WREC::Parser::parseBackreferenceQuantifier): + (JSC::WREC::Parser::parseParentheses): + (JSC::WREC::Parser::parseCharacterClass): + (JSC::WREC::Parser::parseOctalEscape): + (JSC::WREC::Parser::parseEscape): + (JSC::WREC::Parser::parseTerm): + (JSC::WREC::Parser::parseDisjunction): + * wrec/WRECParser.h: + (JSC::WREC::Parser::Parser): + (JSC::WREC::Parser::parsePattern): + (JSC::WREC::Parser::parseAlternative): + * wtf/Platform.h: + +2008-11-28 Simon Hausmann + + Reviewed by Tor Arne Vestbø. + + Fix compilation on Windows CE + + Port away from the use of errno after calling strtol(), instead + detect conversion errors by checking the result and the stop + position. + + * runtime/DateMath.cpp: + (JSC::parseLong): + (JSC::parseDate): + +2008-11-28 Joerg Bornemann + + Reviewed by Simon Hausmann. + + Implement lowResUTCTime() on Windows CE using GetSystemTime as _ftime() is not available. + + * runtime/DateMath.cpp: + (JSC::lowResUTCTime): + +2008-11-28 Simon Hausmann + + Rubber-stamped by Tor Arne Vestbø. + + Removed unnecessary inclusion of errno.h, which also fixes compilation on Windows CE. + + * runtime/JSGlobalObjectFunctions.cpp: + +2008-11-27 Cameron Zwarich + + Not reviewed. + + r38825 made JSFunction::m_body private, but some inspector code in + WebCore sets the field. Add setters for it. + + * runtime/JSFunction.h: + (JSC::JSFunction::setBody): + +2008-11-27 Sam Weinig + + Reviewed by Cameron Zwarich. + + Fix FIXME by adding accessor for JSFunction's m_body property. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::cti_op_call_JSFunction): + (JSC::Interpreter::cti_vm_dontLazyLinkCall): + (JSC::Interpreter::cti_vm_lazyLinkCall): + * profiler/Profiler.cpp: + (JSC::createCallIdentifierFromFunctionImp): + * runtime/Arguments.h: + (JSC::Arguments::getArgumentsData): + (JSC::Arguments::Arguments): + * runtime/FunctionPrototype.cpp: + (JSC::functionProtoFuncToString): + * runtime/JSFunction.h: + (JSC::JSFunction::JSFunction): + (JSC::JSFunction::body): + +2008-11-27 Sam Weinig + + Reviewed by Oliver Hunt. + + Remove unused member variables from ProgramNode. + + * parser/Nodes.h: + +2008-11-27 Brent Fulgham + + Reviewed by Alexey Proskuryakov. + + Enable mouse panning feaure on Windows Cairo build. + See http://bugs.webkit.org/show_bug.cgi?id=22525 + + * wtf/Platform.h: Enable mouse panning feaure on Windows Cairo build. + +2008-11-27 Alp Toker + + Change recently introduced C++ comments in Platform.h to C comments to + fix the minidom build with traditional C. + + Build GtkLauncher and minidom with the '-ansi' compiler flag to detect + API header breakage at build time. + + * GNUmakefile.am: + * wtf/Platform.h: + +2008-11-27 Alp Toker + + Remove C++ comment from JavaScriptCore API headers (introduced r35449). + Fixes build for ANSI C applications using the public API. + + * API/WebKitAvailability.h: + +2008-11-26 Eric Seidel + + No review, build fix only. + + Fix the JSC Chromium Mac build by adding JavaScriptCore/icu into the include path + + * JavaScriptCore.scons: + +2008-11-25 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Remove the unused member function JSFunction::getParameterName(). + + * runtime/JSFunction.cpp: + * runtime/JSFunction.h: + +2008-11-24 Gavin Barraclough + + Reviewed by Geoff Garen. + + Polymorpic caching for get by id chain. Similar to the polymorphic caching already implemented + for self and proto accesses (implemented by allowing multiple trampolines to be JIT genertaed, + and linked together) - the get by id chain caching is implemented as a genericization of the + proto list caching, allowing cached access lists to contain a mix of proto and proto chain + accesses (since in JS style inheritance hierarchies you may commonly see a mix of properties + being overridden on the direct prototype, or higher up its prototype chain). + + In order to allow this patch to compile there is a fix to appease gcc 4.2 compiler issues + (removing the jumps between fall-through cases in privateExecute). + + This patch also removes redundant immediate checking from the reptach code, and fixes a related + memory leak (failure to deallocate trampolines). + + ~2% progression on v8 tests (bulk on the win on deltablue) + + * bytecode/Instruction.h: + (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::): + (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set): + (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList): + (JSC::PolymorphicAccessStructureList::derefStructures): + * interpreter/Interpreter.cpp: + (JSC::countPrototypeChainEntriesAndCheckForProxies): + (JSC::Interpreter::tryCacheGetByID): + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::tryCTICacheGetByID): + (JSC::Interpreter::cti_op_get_by_id_self_fail): + (JSC::getPolymorphicAccessStructureListSlot): + (JSC::Interpreter::cti_op_get_by_id_proto_list): + * interpreter/Interpreter.h: + * jit/JIT.cpp: + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + (JSC::JIT::privateCompilePatchGetArrayLength): + * jit/JIT.h: + (JSC::JIT::compileGetByIdChainList): + +2008-11-25 Cameron Zwarich + + Reviewed by Alexey Proskuryakov. + + Move the collect() call in Heap::heapAllocate() that is conditionally + compiled under COLLECT_ON_EVERY_ALLOCATION so that it is before we get + information about the heap. This was causing assertion failures for me + while I was reducing a bug. + + * runtime/Collector.cpp: + (JSC::Heap::heapAllocate): + +2008-11-24 Cameron Zwarich + + Reviewed by Geoff Garen. + + Bug 13790: Function declarations are not treated as statements (used to affect starcraft2.com) + + + Modify the parser to treat function declarations as statements, + simplifying the grammar in the process. Technically, according to the + grammar in the ECMA spec, function declarations are not statements and + can not be used everywhere that statements can, but it is not worth the + possibility compatibility issues just to stick to the spec in this case. + + * parser/Grammar.y: + * parser/Nodes.cpp: + (JSC::FuncDeclNode::emitBytecode): Avoid returning ignoredResult() + as a result, because it causes a crash in DoWhileNode::emitBytecode(). + +2008-11-24 Geoffrey Garen + + Reviewed by Sam Weinig. + + Unroll the regexp matching loop by 1. 10% speedup on simple matching + stress test. No change on SunSpider. + + (I decided not to unroll to arbitrary levels because the returns diminsh + quickly.) + + * wrec/WREC.cpp: + (JSC::WREC::compileRegExp): + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generateJumpIfEndOfInput): + (JSC::WREC::Generator::generateJumpIfNotEndOfInput): + * wrec/WRECGenerator.h: + * wrec/WRECParser.h: + (JSC::WREC::Parser::error): + (JSC::WREC::Parser::parsePattern): + +2008-11-24 Geoffrey Garen + + Reviewed by Sam Weinig. + + Removed some unnecessary "Generator::" prefixes. + + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generateEnter): + (JSC::WREC::Generator::generateReturnSuccess): + (JSC::WREC::Generator::generateSaveIndex): + (JSC::WREC::Generator::generateIncrementIndex): + (JSC::WREC::Generator::generateLoopIfNotEndOfInput): + (JSC::WREC::Generator::generateReturnFailure): + +2008-11-24 Geoffrey Garen + + Reviewed by Sam Weinig. + + Made a bunch of WREC::Parser functions private, and added an explicit + "reset()" function, so a parser can be reused. + + * wrec/WRECParser.h: + (JSC::WREC::Parser::Parser): + (JSC::WREC::Parser::generator): + (JSC::WREC::Parser::ignoreCase): + (JSC::WREC::Parser::multiline): + (JSC::WREC::Parser::recordSubpattern): + (JSC::WREC::Parser::numSubpatterns): + (JSC::WREC::Parser::parsePattern): + (JSC::WREC::Parser::parseAlternative): + (JSC::WREC::Parser::reset): + +2008-11-24 Gavin Barraclough + + Reviewed by Cameron Zwarich. + + Implement repatching for get by id chain. + Previously the access is performed in a function stub, in the repatch form + the trampoline is not called to; instead the hot path is relinked to jump + directly to the trampoline, if it fails it will jump to the slow case. + + https://bugs.webkit.org/show_bug.cgi?id=22449 + 3% progression on deltablue. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdChain): + +2008-11-24 Joerg Bornemann + + Reviewed by Simon Hausmann. + + https://bugs.webkit.org/show_bug.cgi?id=20746 + + Various small compilation fixes to make the Qt port of WebKit + compile on Windows CE. + + * config.h: Don't set _CRT_RAND_S for CE, it's not available. + * jsc.cpp: Disabled use of debugger includes for CE. It + does not have the debugging functions. + * runtime/DateMath.cpp: Use localtime() on Windows CE. + * wtf/Assertions.cpp: Compile on Windows CE without debugger. + * wtf/Assertions.h: Include windows.h before defining ASSERT. + * wtf/MathExtras.h: Include stdlib.h instead of xmath.h. + * wtf/Platform.h: Disable ERRNO_H and detect endianess based + on the Qt endianess. On Qt for Windows CE the endianess is + defined by the vendor specific build spec. + * wtf/Threading.h: Use the volatile-less atomic functions. + * wtf/dtoa.cpp: Compile without errno. + * wtf/win/MainThreadWin.cpp: Don't include windows.h on CE after + Assertions.h due to the redefinition of ASSERT. + +2008-11-22 Gavin Barraclough + + Reviewed by Cameron Zwarich. + + Replace accidentally deleted immediate check from get by id chain trampoline. + https://bugs.webkit.org/show_bug.cgi?id=22413 + + * jit/JIT.cpp: + (JSC::JIT::privateCompileGetByIdChain): + +2008-11-21 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Add (really) polymorphic caching for get by id self. + Very similar to caching of prototype accesses, described below. + + Oh, also, probably shouldn't have been leaking those structure list objects. + + 4% preogression on deltablue. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + (JSC::CodeBlock::derefStructures): + (JSC::PrototypeStructureList::derefStructures): + * bytecode/Instruction.h: + * bytecode/Opcode.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::cti_op_get_by_id_self_fail): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::patchGetByIdSelf): + * jit/JIT.h: + (JSC::JIT::compileGetByIdSelfList): + +2008-11-21 Geoffrey Garen + + Reviewed by Sam Weinig. + + Fixed many crashes seen 'round the world (but only in release builds). + + Update outputParameter offset to reflect slight re-ordering of push + instructions in r38669. + + * wrec/WRECGenerator.cpp: + +2008-11-21 Geoffrey Garen + + Reviewed by Sam Weinig. + + A little more RegExp refactoring. + + Deployed a helper function for reading the next character. Used the "link + vector of jumps" helper in a place I missed before. + + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generateLoadCharacter): + (JSC::WREC::Generator::generatePatternCharacter): + (JSC::WREC::Generator::generateCharacterClass): + (JSC::WREC::Generator::generateAssertionEOL): + (JSC::WREC::Generator::generateAssertionWordBoundary): + * wrec/WRECGenerator.h: + +2008-11-21 Alexey Proskuryakov + + Reviewed by Dan Bernstein. + + https://bugs.webkit.org/show_bug.cgi?id=22402 + Replace abort() with CRASH() + + * wtf/Assertions.h: Added a different method to crash, which should work even is 0xbbadbeef + is a valid memory address. + + * runtime/Collector.cpp: + * wtf/FastMalloc.cpp: + * wtf/FastMalloc.h: + * wtf/TCSpinLock.h: + Replace abort() with CRASH(). + +2008-11-21 Alexey Proskuryakov + + Reverted fix for bug 22042 (Replace abort() with CRASH()), because it was breaking + FOR_EACH_OPCODE_ID macro somehow, making Safari crash. + + * runtime/Collector.cpp: + (JSC::Heap::heapAllocate): + (JSC::Heap::collect): + * wtf/Assertions.h: + * wtf/FastMalloc.cpp: + (WTF::fastMalloc): + (WTF::fastCalloc): + (WTF::fastRealloc): + (WTF::InitSizeClasses): + (WTF::PageHeapAllocator::New): + (WTF::TCMallocStats::do_malloc): + * wtf/FastMalloc.h: + * wtf/TCSpinLock.h: + (TCMalloc_SpinLock::Init): + (TCMalloc_SpinLock::Finalize): + (TCMalloc_SpinLock::Lock): + (TCMalloc_SpinLock::Unlock): + +2008-11-21 Geoffrey Garen + + Reviewed by Sam Weinig. + + A little more RegExp refactoring. + + Moved all assembly from WREC.cpp into WRECGenerator helper functions. + This should help with portability and readability. + + Removed ASSERTs after calls to executableCopy(), and changed + executableCopy() to ASSERT instead. + + * assembler/X86Assembler.h: + (JSC::X86Assembler::executableCopy): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileGetByIdSelf): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdChain): + (JSC::JIT::privateCompilePutByIdReplace): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompileCTIMachineTrampolines): + (JSC::JIT::privateCompilePatchGetArrayLength): + * wrec/WREC.cpp: + (JSC::WREC::compileRegExp): + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generateEnter): + (JSC::WREC::Generator::generateReturnSuccess): + (JSC::WREC::Generator::generateSaveIndex): + (JSC::WREC::Generator::generateIncrementIndex): + (JSC::WREC::Generator::generateLoopIfNotEndOfInput): + (JSC::WREC::Generator::generateReturnFailure): + * wrec/WRECGenerator.h: + * wrec/WRECParser.h: + (JSC::WREC::Parser::ignoreCase): + (JSC::WREC::Parser::generator): + +2008-11-21 Alexey Proskuryakov + + Build fix. + + * wtf/Assertions.h: Use ::abort for C++ code. + +2008-11-21 Alexey Proskuryakov + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=22402 + Replace abort() with CRASH() + + * wtf/Assertions.h: Added abort() after an attempt to crash for extra safety. + + * runtime/Collector.cpp: + * wtf/FastMalloc.cpp: + * wtf/FastMalloc.h: + * wtf/TCSpinLock.h: + Replace abort() with CRASH(). + +2008-11-21 Geoffrey Garen + + Reviewed by Sam Weinig. + + Renamed wrec => generator. + + * wrec/WRECFunctors.cpp: + (JSC::WREC::GeneratePatternCharacterFunctor::generateAtom): + (JSC::WREC::GeneratePatternCharacterFunctor::backtrack): + (JSC::WREC::GenerateCharacterClassFunctor::generateAtom): + (JSC::WREC::GenerateCharacterClassFunctor::backtrack): + (JSC::WREC::GenerateBackreferenceFunctor::generateAtom): + (JSC::WREC::GenerateBackreferenceFunctor::backtrack): + (JSC::WREC::GenerateParenthesesNonGreedyFunctor::generateAtom): + +2008-11-19 Gavin Barraclough + + Reviewed by Darin Adler. + + Add support for (really) polymorphic caching of prototype accesses. + + If a cached prototype access misses, cti_op_get_by_id_proto_list is called. + When this occurs the Structure pointers from the instruction stream are copied + off into a new ProtoStubInfo object. A second prototype access trampoline is + generated, and chained onto the first. Subsequent missed call to + cti_op_get_by_id_proto_list_append, which append futher new trampolines, up to + PROTOTYPE_LIST_CACHE_SIZE (currently 4). If any of the misses result in an + access other than to a direct prototype property, list formation is halted (or + for the initial miss, does not take place at all). + + Separate fail case functions are provided for each access since this contributes + to the performance progression (enables better processor branch prediction). + + Overall this is a near 5% progression on v8, with around 10% wins on richards + and deltablue. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + (JSC::CodeBlock::derefStructures): + * bytecode/Instruction.h: + (JSC::ProtoStructureList::ProtoStubInfo::set): + (JSC::ProtoStructureList::ProtoStructureList): + (JSC::Instruction::Instruction): + (JSC::Instruction::): + * bytecode/Opcode.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::tryCTICacheGetByID): + (JSC::Interpreter::cti_op_put_by_id_fail): + (JSC::Interpreter::cti_op_get_by_id_self_fail): + (JSC::Interpreter::cti_op_get_by_id_proto_list): + (JSC::Interpreter::cti_op_get_by_id_proto_list_append): + (JSC::Interpreter::cti_op_get_by_id_proto_list_full): + (JSC::Interpreter::cti_op_get_by_id_proto_fail): + (JSC::Interpreter::cti_op_get_by_id_chain_fail): + (JSC::Interpreter::cti_op_get_by_id_array_fail): + (JSC::Interpreter::cti_op_get_by_id_string_fail): + * interpreter/Interpreter.h: + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileGetByIdSelf): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChain): + (JSC::JIT::privateCompileCTIMachineTrampolines): + (JSC::JIT::privateCompilePatchGetArrayLength): + * jit/JIT.h: + (JSC::JIT::compileGetByIdProtoList): + +2008-11-20 Sam Weinig + + Try and fix the tiger build. + + * parser/Grammar.y: + +2008-11-20 Eric Seidel + + Reviewed by Darin Adler. + + Make JavaScriptCore Chromium build under Windows (cmd only, cygwin almost works) + https://bugs.webkit.org/show_bug.cgi?id=22347 + + * JavaScriptCore.scons: + * parser/Parser.cpp: Add using std::auto_ptr since we use auto_ptr + +2008-11-20 Steve Falkenburg + + Fix build. + + Reviewed by Sam Weinig. + + * parser/Parser.cpp: + (JSC::Parser::reparse): + +2008-11-20 Geoffrey Garen + + Reviewed by Sam Weinig. + + A little more RegExp refactoring. + + Created a helper function in the assembler for linking a vector of + JmpSrc to a location, and deployed it in a bunch of places. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * assembler/X86Assembler.h: + (JSC::X86Assembler::link): + * wrec/WREC.cpp: + (JSC::WREC::compileRegExp): + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generateNonGreedyQuantifier): + (JSC::WREC::Generator::generateGreedyQuantifier): + (JSC::WREC::Generator::generateCharacterClassInverted): + (JSC::WREC::Generator::generateParentheses): + (JSC::WREC::Generator::generateParenthesesResetTrampoline): + (JSC::WREC::Generator::generateAssertionBOL): + (JSC::WREC::Generator::generateAssertionEOL): + (JSC::WREC::Generator::generateAssertionWordBoundary): + (JSC::WREC::Generator::terminateAlternative): + (JSC::WREC::Generator::terminateDisjunction): + * wrec/WRECParser.cpp: + * wrec/WRECParser.h: + (JSC::WREC::Parser::consumeHex): + +2008-11-20 Sam Weinig + + Fix non-mac builds. + + * parser/Lexer.cpp: + * parser/Parser.cpp: + +2008-11-20 Sam Weinig + + Reviewed by Darin Adler. + + Patch for https://bugs.webkit.org/show_bug.cgi?id=22385 + + Lazily reparse FunctionBodyNodes on first execution. + + - Saves 57MB on Membuster head. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::generate): Remove vector shrinking since this is now + handled by destroying the ScopeNodeData after generation. + + * parser/Grammar.y: Add alternate NoNode version of the grammar + that does not create nodes. This is used to lazily create FunctionBodyNodes + on first execution. + + * parser/Lexer.cpp: + (JSC::Lexer::setCode): Fix bug where on reparse, the Lexer was confused about + what position and length meant. Position is the current position in the original + data buffer (important for getting correct line/column information) and length + the end offset in the original buffer. + * parser/Lexer.h: + (JSC::Lexer::sourceCode): Positions are relative to the beginning of the buffer. + + * parser/Nodes.cpp: + (JSC::ScopeNodeData::ScopeNodeData): Move initialization of ScopeNode data here. + (JSC::ScopeNode::ScopeNode): Add constructor that only sets the JSGlobalData + for FunctionBodyNode stubs. + (JSC::ScopeNode::~ScopeNode): Release m_children now that we don't inherit from + BlockNode. + (JSC::ScopeNode::releaseNodes): Ditto. + (JSC::EvalNode::generateBytecode): Only shrink m_children, as we need to keep around + the rest of the data. + (JSC::FunctionBodyNode::FunctionBodyNode): Add constructor that only sets the + JSGlobalData. + (JSC::FunctionBodyNode::create): Ditto. + (JSC::FunctionBodyNode::generateBytecode): If we don't have the data, do a reparse + to construct it. Then after generation, destroy the data. + (JSC::ProgramNode::generateBytecode): After generation, destroy the AST data. + * parser/Nodes.h: + (JSC::ExpressionNode::): Add isFuncExprNode for FunctionConstructor. + (JSC::StatementNode::): Add isExprStatementNode for FunctionConstructor. + (JSC::ExprStatementNode::): Ditto. + (JSC::ExprStatementNode::expr): Add accessor for FunctionConstructor. + (JSC::FuncExprNode::): Add isFuncExprNode for FunctionConstructor + + (JSC::ScopeNode::adoptData): Adopts a ScopeNodeData. + (JSC::ScopeNode::data): Accessor for ScopeNodeData. + (JSC::ScopeNode::destroyData): Deletes the ScopeNodeData. + (JSC::ScopeNode::setFeatures): Added. + (JSC::ScopeNode::varStack): Added assert. + (JSC::ScopeNode::functionStack): Ditto. + (JSC::ScopeNode::children): Ditto. + (JSC::ScopeNode::neededConstants): Ditto. + Factor m_varStack, m_functionStack, m_children and m_numConstants into ScopeNodeData. + + * parser/Parser.cpp: + (JSC::Parser::reparse): Reparse the SourceCode in the FunctionBodyNode and set + set up the ScopeNodeData for it. + * parser/Parser.h: + + * parser/SourceCode.h: + (JSC::SourceCode::endOffset): Added for use in the lexer. + + * runtime/FunctionConstructor.cpp: + (JSC::getFunctionBody): Assuming a ProgramNode with one FunctionExpression in it, + get the FunctionBodyNode. Any issues signifies a parse failure in constructFunction. + (JSC::constructFunction): Make parsing functions in the form new Function(""), easier + by concatenating the strings together (with some glue) and parsing the function expression + as a ProgramNode from which we can receive the FunctionBodyNode. This has the added benefit + of not having special parsing code for the arguments and lazily constructing the + FunctionBodyNode's AST on first execution. + + * runtime/Identifier.h: + (JSC::operator!=): Added. + +2008-11-20 Sam Weinig + + Reviewed by Geoffrey Garen. + + Speedup the lexer to offset coming re-parsing patch. + + - .6% progression on Sunspider. + + * bytecompiler/SegmentedVector.h: + (JSC::SegmentedVector::shrink): Fixed bug where m_size would not be + set when shrinking to 0. + + * parser/Lexer.cpp: + (JSC::Lexer::Lexer): + (JSC::Lexer::isIdentStart): Use isASCIIAlpha and isASCII to avoid going into ICU in the common cases. + (JSC::Lexer::isIdentPart): Use isASCIIAlphanumeric and isASCII to avoid going into ICU in the common cases + (JSC::isDecimalDigit): Use version in ASCIICType.h. Inlining it was a regression. + (JSC::Lexer::isHexDigit): Ditto. + (JSC::Lexer::isOctalDigit): Ditto. + (JSC::Lexer::clear): Resize the m_identifiers SegmentedVector to initial + capacity + * parser/Lexer.h: Remove unused m_strings vector. Make m_identifiers + a SegmentedVector to avoid allocating a new Identifier* for + each identifier found. The SegmentedVector is need so we can passes + references to the Identifier to the parser, which remain valid even when + the vector is resized. + (JSC::Lexer::makeIdentifier): Inline and return a reference to the added + Identifier. + +2008-11-20 Sam Weinig + + Reviewed by Darin Adler. + + Add isASCII to ASCIICType. Use coming soon! + + * wtf/ASCIICType.h: + (WTF::isASCII): + +2008-11-20 Sam Weinig + + Reviewed by Darin Adler. + + Add OwnPtr constructor and OwnPtr::adopt that take an auto_ptr. + + * wtf/OwnPtr.h: + (WTF::OwnPtr::OwnPtr): + (WTF::OwnPtr::adopt): + +2008-11-20 Alexey Proskuryakov + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=22364 + Crashes seen on Tiger buildbots due to worker threads exhausting pthread keys + + * runtime/Collector.cpp: + (JSC::Heap::Heap): + (JSC::Heap::destroy): + (JSC::Heap::makeUsableFromMultipleThreads): + (JSC::Heap::registerThread): + * runtime/Collector.h: + Pthread key for tracking threads is only created on request now, because this is a limited + resource, and thread tracking is not needed for worker heaps, or for WebCore heap. + + * API/JSContextRef.cpp: (JSGlobalContextCreateInGroup): Call makeUsableFromMultipleThreads(). + + * runtime/JSGlobalData.cpp: (JSC::JSGlobalData::sharedInstance): Ditto. + + * runtime/JSGlobalData.h: (JSC::JSGlobalData::makeUsableFromMultipleThreads): Just forward + the call to Heap, which clients need not know about, ideally. + +2008-11-20 Geoffrey Garen + + Reviewed by Sam Weinig. + + A little more WREC refactoring. + + Removed the "Register" suffix from register names in WREC, and renamed: + currentPosition => index + currentValue => character + quantifierCount => repeatCount + + Added a top-level parsePattern function to the WREC parser, which + allowed me to remove the error() and atEndOfPattern() accessors. + + Factored out an MSVC customization into a constant. + + Renamed nextLabel => beginPattern. + + * wrec/WREC.cpp: + (JSC::WREC::compileRegExp): + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generateBacktrack1): + (JSC::WREC::Generator::generateBacktrackBackreference): + (JSC::WREC::Generator::generateBackreferenceQuantifier): + (JSC::WREC::Generator::generateNonGreedyQuantifier): + (JSC::WREC::Generator::generateGreedyQuantifier): + (JSC::WREC::Generator::generatePatternCharacter): + (JSC::WREC::Generator::generateCharacterClassInvertedRange): + (JSC::WREC::Generator::generateCharacterClassInverted): + (JSC::WREC::Generator::generateCharacterClass): + (JSC::WREC::Generator::generateParentheses): + (JSC::WREC::Generator::generateParenthesesResetTrampoline): + (JSC::WREC::Generator::generateAssertionBOL): + (JSC::WREC::Generator::generateAssertionEOL): + (JSC::WREC::Generator::generateAssertionWordBoundary): + (JSC::WREC::Generator::generateBackreference): + (JSC::WREC::Generator::generateDisjunction): + (JSC::WREC::Generator::terminateDisjunction): + * wrec/WRECGenerator.h: + * wrec/WRECParser.h: + (JSC::WREC::Parser::parsePattern): + +2008-11-19 Geoffrey Garen + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=22361 + A little more RegExp refactoring. + + Consistently named variables holding the starting position at which + regexp matching should begin to "startOffset". + + A few more "regExpObject" => "regExpConstructor" changes. + + Refactored RegExpObject::match for clarity, and replaced a slow "get" + of the "global" property with a fast access to the global bit. + + Made the error message you see when RegExpObject::match has no input a + little more informative, as in Firefox. + + * runtime/RegExp.cpp: + (JSC::RegExp::match): + * runtime/RegExp.h: + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::match): + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): + (JSC::stringProtoFuncMatch): + (JSC::stringProtoFuncSearch): + +2008-11-19 Geoffrey Garen + + Reviewed by Sam Weinig. + + A little more refactoring. + + Removed the "emit" and "emitUnlinked" prefixes from the assembler. + + Moved the JmpSrc and JmpDst class definitions to the top of the X86 + assembler class, in accordance with WebKit style guidelines. + + * assembler/X86Assembler.h: + (JSC::X86Assembler::JmpSrc::JmpSrc): + (JSC::X86Assembler::JmpDst::JmpDst): + (JSC::X86Assembler::int3): + (JSC::X86Assembler::pushl_m): + (JSC::X86Assembler::popl_m): + (JSC::X86Assembler::movl_rr): + (JSC::X86Assembler::addl_rr): + (JSC::X86Assembler::addl_i8r): + (JSC::X86Assembler::addl_i8m): + (JSC::X86Assembler::addl_i32r): + (JSC::X86Assembler::addl_mr): + (JSC::X86Assembler::andl_rr): + (JSC::X86Assembler::andl_i32r): + (JSC::X86Assembler::cmpl_i8r): + (JSC::X86Assembler::cmpl_rr): + (JSC::X86Assembler::cmpl_rm): + (JSC::X86Assembler::cmpl_mr): + (JSC::X86Assembler::cmpl_i32r): + (JSC::X86Assembler::cmpl_i32m): + (JSC::X86Assembler::cmpl_i8m): + (JSC::X86Assembler::cmpw_rm): + (JSC::X86Assembler::orl_rr): + (JSC::X86Assembler::orl_mr): + (JSC::X86Assembler::orl_i32r): + (JSC::X86Assembler::subl_rr): + (JSC::X86Assembler::subl_i8r): + (JSC::X86Assembler::subl_i8m): + (JSC::X86Assembler::subl_i32r): + (JSC::X86Assembler::subl_mr): + (JSC::X86Assembler::testl_i32r): + (JSC::X86Assembler::testl_i32m): + (JSC::X86Assembler::testl_rr): + (JSC::X86Assembler::xorl_i8r): + (JSC::X86Assembler::xorl_rr): + (JSC::X86Assembler::sarl_i8r): + (JSC::X86Assembler::sarl_CLr): + (JSC::X86Assembler::shl_i8r): + (JSC::X86Assembler::shll_CLr): + (JSC::X86Assembler::imull_rr): + (JSC::X86Assembler::imull_i32r): + (JSC::X86Assembler::idivl_r): + (JSC::X86Assembler::negl_r): + (JSC::X86Assembler::movl_mr): + (JSC::X86Assembler::movzbl_rr): + (JSC::X86Assembler::movzwl_mr): + (JSC::X86Assembler::movl_rm): + (JSC::X86Assembler::movl_i32r): + (JSC::X86Assembler::movl_i32m): + (JSC::X86Assembler::leal_mr): + (JSC::X86Assembler::jmp_r): + (JSC::X86Assembler::jmp_m): + (JSC::X86Assembler::movsd_mr): + (JSC::X86Assembler::xorpd_mr): + (JSC::X86Assembler::movsd_rm): + (JSC::X86Assembler::movd_rr): + (JSC::X86Assembler::cvtsi2sd_rr): + (JSC::X86Assembler::cvttsd2si_rr): + (JSC::X86Assembler::addsd_mr): + (JSC::X86Assembler::subsd_mr): + (JSC::X86Assembler::mulsd_mr): + (JSC::X86Assembler::addsd_rr): + (JSC::X86Assembler::subsd_rr): + (JSC::X86Assembler::mulsd_rr): + (JSC::X86Assembler::ucomis_rr): + (JSC::X86Assembler::pextrw_irr): + (JSC::X86Assembler::call): + (JSC::X86Assembler::jmp): + (JSC::X86Assembler::jne): + (JSC::X86Assembler::jnz): + (JSC::X86Assembler::je): + (JSC::X86Assembler::jl): + (JSC::X86Assembler::jb): + (JSC::X86Assembler::jle): + (JSC::X86Assembler::jbe): + (JSC::X86Assembler::jge): + (JSC::X86Assembler::jg): + (JSC::X86Assembler::ja): + (JSC::X86Assembler::jae): + (JSC::X86Assembler::jo): + (JSC::X86Assembler::jp): + (JSC::X86Assembler::js): + (JSC::X86Assembler::predictNotTaken): + (JSC::X86Assembler::convertToFastCall): + (JSC::X86Assembler::restoreArgumentReference): + (JSC::X86Assembler::restoreArgumentReferenceForTrampoline): + (JSC::X86Assembler::modRm_rr): + (JSC::X86Assembler::modRm_rr_Unchecked): + (JSC::X86Assembler::modRm_rm): + (JSC::X86Assembler::modRm_rm_Unchecked): + (JSC::X86Assembler::modRm_rmsib): + (JSC::X86Assembler::modRm_opr): + (JSC::X86Assembler::modRm_opr_Unchecked): + (JSC::X86Assembler::modRm_opm): + (JSC::X86Assembler::modRm_opm_Unchecked): + (JSC::X86Assembler::modRm_opmsib): + * jit/JIT.cpp: + (JSC::JIT::emitNakedCall): + (JSC::JIT::emitNakedFastCall): + (JSC::JIT::emitCTICall): + (JSC::JIT::emitJumpSlowCaseIfNotJSCell): + (JSC::JIT::emitJumpSlowCaseIfNotImmNum): + (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): + (JSC::JIT::emitFastArithIntToImmOrSlowCase): + (JSC::JIT::emitArithIntToImmWithJump): + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpStrictEq): + (JSC::JIT::emitSlowScriptCheck): + (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): + (JSC::JIT::compileBinaryArithOp): + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileGetByIdSelf): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdChain): + (JSC::JIT::privateCompilePutByIdReplace): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompileCTIMachineTrampolines): + (JSC::JIT::privateCompilePatchGetArrayLength): + * wrec/WREC.cpp: + (JSC::WREC::compileRegExp): + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generateBackreferenceQuantifier): + (JSC::WREC::Generator::generateNonGreedyQuantifier): + (JSC::WREC::Generator::generateGreedyQuantifier): + (JSC::WREC::Generator::generatePatternCharacter): + (JSC::WREC::Generator::generateCharacterClassInvertedRange): + (JSC::WREC::Generator::generateCharacterClassInverted): + (JSC::WREC::Generator::generateCharacterClass): + (JSC::WREC::Generator::generateParentheses): + (JSC::WREC::Generator::generateParenthesesNonGreedy): + (JSC::WREC::Generator::generateParenthesesResetTrampoline): + (JSC::WREC::Generator::generateAssertionBOL): + (JSC::WREC::Generator::generateAssertionEOL): + (JSC::WREC::Generator::generateAssertionWordBoundary): + (JSC::WREC::Generator::generateBackreference): + (JSC::WREC::Generator::generateDisjunction): + +2008-11-19 Simon Hausmann + + Sun CC build fix, removed trailing comman for last enum value. + + * wtf/unicode/qt4/UnicodeQt4.h: + (WTF::Unicode::): + +2008-11-19 Mark Rowe + + Reviewed by Alexey Proskuryakov. + + Expand the workaround for Apple GCC compiler bug to all versions of GCC 4.0.1. + It has been observed with builds 5465 (Xcode 3.0) and 5484 (Xcode 3.1), and there is no evidence + that it has been fixed in newer builds of GCC 4.0.1. + + This addresses (WebKit nightly crashes on launch on 10.4.11). + + * wtf/StdLibExtras.h: + +2008-11-18 Cameron Zwarich + + Reviewed by Maciej Stachowiak and Geoff Garen. + + Bug 22287: ASSERTION FAILED: Not enough jumps linked in slow case codegen in CTI::privateCompileSlowCases()) + + + Fix a typo in the number cell reuse code where the first and second + operands are sometimes confused. + + * jit/JIT.cpp: + (JSC::JIT::compileBinaryArithOpSlowCase): + +2008-11-18 Dan Bernstein + + - try to fix the Windows build + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + +2008-11-18 Geoffrey Garen + + Reviewed by Sam Weinig. + + Minor RegExp cleanup. + + SunSpider says no change. + + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::match): Renamed "regExpObj" to "regExpConstructor". + + * wrec/WREC.cpp: + (JSC::WREC::compileRegExp): Instead of checking for a NULL output vector, + ASSERT that the output vector is not NULL. (The rest of WREC is not + safe to use with a NULL output vector, and we probably don't want to + spend the time and/or performance to make it safe.) + +2008-11-18 Geoffrey Garen + + Reviewed by Darin Adler. + + A little more renaming and refactoring. + + VM_CHECK_EXCEPTION() => CHECK_FOR_EXCEPTION(). + NEXT_INSTRUCTION => NEXT_INSTRUCTION(). + + Removed the "Error_" and "TempError_" prefixes from WREC error types. + + Refactored the WREC parser so it doesn't need a "setError" function, + and changed "isEndOfPattern" and its use -- they read kind of backwards + before. + + Changed our "TODO:" error messages at least to say something, since you + can't say "TODO:" in shipping software. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::cti_op_convert_this): + (JSC::Interpreter::cti_op_add): + (JSC::Interpreter::cti_op_pre_inc): + (JSC::Interpreter::cti_op_loop_if_less): + (JSC::Interpreter::cti_op_loop_if_lesseq): + (JSC::Interpreter::cti_op_put_by_id): + (JSC::Interpreter::cti_op_put_by_id_second): + (JSC::Interpreter::cti_op_put_by_id_generic): + (JSC::Interpreter::cti_op_put_by_id_fail): + (JSC::Interpreter::cti_op_get_by_id): + (JSC::Interpreter::cti_op_get_by_id_second): + (JSC::Interpreter::cti_op_get_by_id_generic): + (JSC::Interpreter::cti_op_get_by_id_fail): + (JSC::Interpreter::cti_op_instanceof): + (JSC::Interpreter::cti_op_del_by_id): + (JSC::Interpreter::cti_op_mul): + (JSC::Interpreter::cti_op_call_NotJSFunction): + (JSC::Interpreter::cti_op_resolve): + (JSC::Interpreter::cti_op_construct_NotJSConstruct): + (JSC::Interpreter::cti_op_get_by_val): + (JSC::Interpreter::cti_op_resolve_func): + (JSC::Interpreter::cti_op_sub): + (JSC::Interpreter::cti_op_put_by_val): + (JSC::Interpreter::cti_op_put_by_val_array): + (JSC::Interpreter::cti_op_lesseq): + (JSC::Interpreter::cti_op_loop_if_true): + (JSC::Interpreter::cti_op_negate): + (JSC::Interpreter::cti_op_resolve_skip): + (JSC::Interpreter::cti_op_resolve_global): + (JSC::Interpreter::cti_op_div): + (JSC::Interpreter::cti_op_pre_dec): + (JSC::Interpreter::cti_op_jless): + (JSC::Interpreter::cti_op_not): + (JSC::Interpreter::cti_op_jtrue): + (JSC::Interpreter::cti_op_post_inc): + (JSC::Interpreter::cti_op_eq): + (JSC::Interpreter::cti_op_lshift): + (JSC::Interpreter::cti_op_bitand): + (JSC::Interpreter::cti_op_rshift): + (JSC::Interpreter::cti_op_bitnot): + (JSC::Interpreter::cti_op_resolve_with_base): + (JSC::Interpreter::cti_op_mod): + (JSC::Interpreter::cti_op_less): + (JSC::Interpreter::cti_op_neq): + (JSC::Interpreter::cti_op_post_dec): + (JSC::Interpreter::cti_op_urshift): + (JSC::Interpreter::cti_op_bitxor): + (JSC::Interpreter::cti_op_bitor): + (JSC::Interpreter::cti_op_push_scope): + (JSC::Interpreter::cti_op_to_jsnumber): + (JSC::Interpreter::cti_op_in): + (JSC::Interpreter::cti_op_del_by_val): + * wrec/WREC.cpp: + (JSC::WREC::compileRegExp): + * wrec/WRECParser.cpp: + (JSC::WREC::Parser::parseGreedyQuantifier): + (JSC::WREC::Parser::parseParentheses): + (JSC::WREC::Parser::parseCharacterClass): + (JSC::WREC::Parser::parseEscape): + * wrec/WRECParser.h: + (JSC::WREC::Parser::): + (JSC::WREC::Parser::atEndOfPattern): + +2008-11-18 Alexey Proskuryakov + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=22337 + Enable workers by default + + * Configurations/JavaScriptCore.xcconfig: Define ENABLE_WORKERS. + +2008-11-18 Alexey Proskuryakov + + - Windows build fix + + * wrec/WRECFunctors.h: + * wrec/WRECGenerator.h: + * wrec/WRECParser.h: + CharacterClass is a struct, not a class, fix forward declarations. + +2008-11-18 Dan Bernstein + + - Windows build fix + + * assembler/X86Assembler.h: + +2008-11-17 Geoffrey Garen + + Not reviewed. + + Try to fix gtk build. + + * wrec/Quantifier.h: + +2008-11-17 Geoffrey Garen + + Not reviewed. + + Try to fix gtk build. + + * assembler/AssemblerBuffer.h: + +2008-11-17 Geoffrey Garen + + Reviewed by Sam Weinig. + + Split WREC classes out into individual files, with a few modifications + to more closely match the WebKit coding style. + + * GNUmakefile.am: + * JavaScriptCore.scons: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * assembler/X86Assembler.h: + * runtime/RegExp.cpp: + * wrec/CharacterClass.cpp: Copied from wrec/CharacterClassConstructor.cpp. + (JSC::WREC::CharacterClass::newline): + (JSC::WREC::CharacterClass::digits): + (JSC::WREC::CharacterClass::spaces): + (JSC::WREC::CharacterClass::wordchar): + (JSC::WREC::CharacterClass::nondigits): + (JSC::WREC::CharacterClass::nonspaces): + (JSC::WREC::CharacterClass::nonwordchar): + * wrec/CharacterClass.h: Copied from wrec/CharacterClassConstructor.h. + * wrec/CharacterClassConstructor.cpp: + (JSC::WREC::CharacterClassConstructor::addSortedRange): + (JSC::WREC::CharacterClassConstructor::append): + * wrec/CharacterClassConstructor.h: + * wrec/Quantifier.h: Copied from wrec/WREC.h. + * wrec/WREC.cpp: + (JSC::WREC::compileRegExp): + * wrec/WREC.h: + * wrec/WRECFunctors.cpp: Copied from wrec/WREC.cpp. + * wrec/WRECFunctors.h: Copied from wrec/WREC.cpp. + (JSC::WREC::GenerateAtomFunctor::~GenerateAtomFunctor): + (JSC::WREC::GeneratePatternCharacterFunctor::GeneratePatternCharacterFunctor): + (JSC::WREC::GenerateCharacterClassFunctor::GenerateCharacterClassFunctor): + (JSC::WREC::GenerateBackreferenceFunctor::GenerateBackreferenceFunctor): + (JSC::WREC::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor): + * wrec/WRECGenerator.cpp: Copied from wrec/WREC.cpp. + (JSC::WREC::Generator::generatePatternCharacter): + (JSC::WREC::Generator::generateCharacterClassInvertedRange): + (JSC::WREC::Generator::generateCharacterClassInverted): + (JSC::WREC::Generator::generateCharacterClass): + (JSC::WREC::Generator::generateParentheses): + (JSC::WREC::Generator::generateAssertionBOL): + (JSC::WREC::Generator::generateAssertionEOL): + (JSC::WREC::Generator::generateAssertionWordBoundary): + * wrec/WRECGenerator.h: Copied from wrec/WREC.h. + * wrec/WRECParser.cpp: Copied from wrec/WREC.cpp. + (JSC::WREC::Parser::parseGreedyQuantifier): + (JSC::WREC::Parser::parseCharacterClassQuantifier): + (JSC::WREC::Parser::parseParentheses): + (JSC::WREC::Parser::parseCharacterClass): + (JSC::WREC::Parser::parseEscape): + (JSC::WREC::Parser::parseTerm): + * wrec/WRECParser.h: Copied from wrec/WREC.h. + (JSC::WREC::Parser::): + (JSC::WREC::Parser::Parser): + (JSC::WREC::Parser::setError): + (JSC::WREC::Parser::error): + (JSC::WREC::Parser::recordSubpattern): + (JSC::WREC::Parser::numSubpatterns): + (JSC::WREC::Parser::ignoreCase): + (JSC::WREC::Parser::multiline): + +2008-11-17 Geoffrey Garen + + Not reviewed. + + Try to fix a few builds. + + * JavaScriptCoreSources.bkl: + +2008-11-17 Geoffrey Garen + + Not reviewed. + + Try to fix a few builds. + + * JavaScriptCore.pri: + * JavaScriptCore.scons: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2008-11-17 Geoffrey Garen + + Reviewed by Sam Weinig. + + Moved VM/CTI.* => jit/JIT.*. + + Removed VM. + + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.scons: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CTI.cpp: Removed. + * VM/CTI.h: Removed. + * bytecode/CodeBlock.cpp: + * interpreter/Interpreter.cpp: + * jit: Added. + * jit/JIT.cpp: Copied from VM/CTI.cpp. + * jit/JIT.h: Copied from VM/CTI.h. + * runtime/RegExp.cpp: + +2008-11-17 Geoffrey Garen + + Reviewed by Sam Weinig. + + Moved runtime/ExecState.* => interpreter/CallFrame.*. + + * API/JSBase.cpp: + * API/OpaqueJSString.cpp: + * GNUmakefile.am: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * debugger/DebuggerCallFrame.h: + * interpreter/CallFrame.cpp: Copied from runtime/ExecState.cpp. + * interpreter/CallFrame.h: Copied from runtime/ExecState.h. + * interpreter/Interpreter.cpp: + * parser/Nodes.cpp: + * profiler/ProfileGenerator.cpp: + * profiler/Profiler.cpp: + * runtime/ClassInfo.h: + * runtime/Collector.cpp: + * runtime/Completion.cpp: + * runtime/ExceptionHelpers.cpp: + * runtime/ExecState.cpp: Removed. + * runtime/ExecState.h: Removed. + * runtime/Identifier.cpp: + * runtime/JSFunction.cpp: + * runtime/JSGlobalObjectFunctions.cpp: + * runtime/JSLock.cpp: + * runtime/JSNumberCell.h: + * runtime/JSObject.h: + * runtime/JSString.h: + * runtime/Lookup.h: + * runtime/PropertyNameArray.h: + +2008-11-17 Geoffrey Garen + + Not reviewed. + + Try to fix Windows build. + + * API/APICast.h: + +2008-11-17 Geoffrey Garen + + Not reviewed. + + Try to fix Windows build. + + * API/APICast.h: + * runtime/ExecState.h: + +2008-11-17 Geoffrey Garen + + Reviewed by Sam Weinig. + + Moved VM/SamplingTool.* => bytecode/SamplingTool.*. + + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.scons: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * VM/SamplingTool.cpp: Removed. + * VM/SamplingTool.h: Removed. + * bytecode/SamplingTool.cpp: Copied from VM/SamplingTool.cpp. + * bytecode/SamplingTool.h: Copied from VM/SamplingTool.h. + * jsc.cpp: + (runWithScripts): + +2008-11-17 Geoffrey Garen + + Not reviewed. + + Try to fix Windows build. + + * runtime/ExecState.h: + +2008-11-17 Geoffrey Garen + + Reviewed by Sam Weinig. + + Moved VM/ExceptionHelpers.cpp => runtime/ExceptionHelpers.cpp. + + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.scons: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * VM/ExceptionHelpers.cpp: Removed. + * runtime/ExceptionHelpers.cpp: Copied from VM/ExceptionHelpers.cpp. + +2008-11-17 Geoffrey Garen + + Reviewed by Sam Weinig. + + Moved VM/RegisterFile.cpp => interpreter/RegisterFile.cpp. + + * AllInOneFile.cpp: + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.scons: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * VM/RegisterFile.cpp: Removed. + * interpreter/RegisterFile.cpp: Copied from VM/RegisterFile.cpp. + +2008-11-17 Geoffrey Garen + + Not reviewed. + + Try to fix Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2008-11-17 Geoffrey Garen + + Not reviewed. + + Try to fix Windows build. + + * JavaScriptCore.vcproj/jsc/jsc.vcproj: + +2008-11-17 Geoffrey Garen + + Not reviewed. + + Try to fix Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2008-11-17 Geoffrey Garen + + Reviewed by Sam Weinig. + + Moved: + VM/ExceptionHelpers.h => runtime/ExceptionHelpers.h + VM/Register.h => interpreter/Register.h + VM/RegisterFile.h => interpreter/RegisterFile.h + + + * GNUmakefile.am: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/ExceptionHelpers.h: Removed. + * VM/Register.h: Removed. + * VM/RegisterFile.h: Removed. + * interpreter/Register.h: Copied from VM/Register.h. + * interpreter/RegisterFile.h: Copied from VM/RegisterFile.h. + * runtime/ExceptionHelpers.h: Copied from VM/ExceptionHelpers.h. + +2008-11-17 Geoffrey Garen + + Not reviewed. + + Try to fix Qt build. + + * JavaScriptCore.pri: + +2008-11-17 Geoffrey Garen + + Reviewed by Sam Weinig. + + Moved VM/Machine.cpp => interpreter/Interpreter.cpp. + + * DerivedSources.make: + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.scons: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * VM/Machine.cpp: Removed. + * interpreter/Interpreter.cpp: Copied from VM/Machine.cpp. + +2008-11-17 Geoffrey Garen + + Reviewed by Sam Weinig. + + Moved VM/Machine.h => interpreter/Interpreter.h + + * GNUmakefile.am: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CTI.cpp: + * VM/CTI.h: + * VM/ExceptionHelpers.cpp: + * VM/Machine.cpp: + * VM/Machine.h: Removed. + * VM/SamplingTool.cpp: + * bytecode/CodeBlock.cpp: + * bytecompiler/BytecodeGenerator.cpp: + * bytecompiler/BytecodeGenerator.h: + * debugger/DebuggerCallFrame.cpp: + * interpreter: Added. + * interpreter/Interpreter.h: Copied from VM/Machine.h. + * profiler/ProfileGenerator.cpp: + * runtime/Arguments.h: + * runtime/ArrayPrototype.cpp: + * runtime/Collector.cpp: + * runtime/Completion.cpp: + * runtime/ExecState.h: + * runtime/FunctionPrototype.cpp: + * runtime/JSActivation.cpp: + * runtime/JSFunction.cpp: + * runtime/JSGlobalData.cpp: + * runtime/JSGlobalObject.cpp: + * runtime/JSGlobalObjectFunctions.cpp: + * wrec/WREC.cpp: + +2008-11-17 Geoffrey Garen + + Reviewed by Sam Weinig. + + Moved runtime/Interpreter.cpp => runtime/Completion.cpp. + + Moved functions from Interpreter.h to Completion.h, and removed + Interpreter.h from the project. + + * API/JSBase.cpp: + * AllInOneFile.cpp: + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * jsc.cpp: + * runtime/Completion.cpp: Copied from runtime/Interpreter.cpp. + * runtime/Completion.h: + * runtime/Interpreter.cpp: Removed. + * runtime/Interpreter.h: Removed. + +2008-11-17 Gabor Loki + + Reviewed by Darin Adler. + + + Fix PCRE include path problem on Qt-port + + * JavaScriptCore.pri: + * pcre/pcre.pri: + +2008-11-17 Gabor Loki + + Reviewed by Darin Adler. + + + Add missing CTI source to the build system on Qt-port + + * JavaScriptCore.pri: + +2008-11-17 Geoffrey Garen + + Not reviewed. + + Try to fix JSGlue build. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-11-17 Geoffrey Garen + + Not reviewed. + + Try to fix Qt build. + + * jsc.pro: + +2008-11-17 Geoffrey Garen + + Not reviewed. + + Try to fix Qt build. + + * JavaScriptCore.pri: + +2008-11-17 Geoffrey Garen + + Not reviewed. + + Try to fix Qt build. + + * JavaScriptCore.pri: + +2008-11-17 Geoffrey Garen + + Reviewed by Sam Weinig. + + More file moves: + + VM/CodeBlock.* => bytecode/CodeBlock.* + VM/EvalCodeCache.h => bytecode/EvalCodeCache.h + VM/Instruction.h => bytecode/Instruction.h + VM/Opcode.* => bytecode/Opcode.* + + * GNUmakefile.am: + * JavaScriptCore.scons: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/jsc/jsc.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * VM/CodeBlock.cpp: Removed. + * VM/CodeBlock.h: Removed. + * VM/EvalCodeCache.h: Removed. + * VM/Instruction.h: Removed. + * VM/Opcode.cpp: Removed. + * VM/Opcode.h: Removed. + * bytecode: Added. + * bytecode/CodeBlock.cpp: Copied from VM/CodeBlock.cpp. + * bytecode/CodeBlock.h: Copied from VM/CodeBlock.h. + * bytecode/EvalCodeCache.h: Copied from VM/EvalCodeCache.h. + * bytecode/Instruction.h: Copied from VM/Instruction.h. + * bytecode/Opcode.cpp: Copied from VM/Opcode.cpp. + * bytecode/Opcode.h: Copied from VM/Opcode.h. + * jsc.pro: + * jscore.bkl: + +2008-11-17 Geoffrey Garen + + Not reviewed. + + Try to fix a few more builds. + + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.scons: + * JavaScriptCoreSources.bkl: + +2008-11-17 Geoffrey Garen + + Not reviewed. + + Try to fix gtk build. + + * GNUmakefile.am: + +2008-11-17 Geoffrey Garen + + Not reviewed. + + Try to fix Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2008-11-17 Geoffrey Garen + + Reviewed by Sam Weinig. + + Some file moves: + + VM/LabelID.h => bytecompiler/Label.h + VM/RegisterID.h => bytecompiler/RegisterID.h + VM/SegmentedVector.h => bytecompiler/SegmentedVector.h + bytecompiler/CodeGenerator.* => bytecompiler/BytecodeGenerator.* + + * AllInOneFile.cpp: + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/LabelID.h: Removed. + * VM/RegisterID.h: Removed. + * VM/SegmentedVector.h: Removed. + * bytecompiler/BytecodeGenerator.cpp: Copied from bytecompiler/CodeGenerator.cpp. + * bytecompiler/BytecodeGenerator.h: Copied from bytecompiler/CodeGenerator.h. + * bytecompiler/CodeGenerator.cpp: Removed. + * bytecompiler/CodeGenerator.h: Removed. + * bytecompiler/Label.h: Copied from VM/LabelID.h. + * bytecompiler/LabelScope.h: + * bytecompiler/RegisterID.h: Copied from VM/RegisterID.h. + * bytecompiler/SegmentedVector.h: Copied from VM/SegmentedVector.h. + * jsc.cpp: + * parser/Nodes.cpp: + +2008-11-17 Geoffrey Garen + + Not reviewed. + + Try to fix Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2008-11-17 Geoffrey Garen + + Not reviewed. + + Try to fix Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2008-11-17 Geoffrey Garen + + Not reviewed. + + Try to fix Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2008-11-16 Geoffrey Garen + + Not reviewed. + + Try to fix Windows build. + + * JavaScriptCore.vcproj/jsc/jsc.vcproj: + +2008-11-16 Geoffrey Garen + + Not reviewed. + + Try to fix Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2008-11-16 Geoffrey Garen + + Reviewed by Sam Weinig. + + Moved masm => assembler and split "AssemblerBuffer.h" out of "X86Assembler.h". + + Also renamed ENABLE_MASM to ENABLE_ASSEMBLER. + + * GNUmakefile.am: + * JavaScriptCore.xcodeproj/project.pbxproj: + * assembler: Added. + * assembler/AssemblerBuffer.h: Copied from masm/X86Assembler.h. + (JSC::AssemblerBuffer::AssemblerBuffer): + (JSC::AssemblerBuffer::~AssemblerBuffer): + (JSC::AssemblerBuffer::ensureSpace): + (JSC::AssemblerBuffer::isAligned): + (JSC::AssemblerBuffer::putByteUnchecked): + (JSC::AssemblerBuffer::putByte): + (JSC::AssemblerBuffer::putShortUnchecked): + (JSC::AssemblerBuffer::putShort): + (JSC::AssemblerBuffer::putIntUnchecked): + (JSC::AssemblerBuffer::putInt): + (JSC::AssemblerBuffer::data): + (JSC::AssemblerBuffer::size): + (JSC::AssemblerBuffer::reset): + (JSC::AssemblerBuffer::executableCopy): + (JSC::AssemblerBuffer::grow): + * assembler/X86Assembler.h: Copied from masm/X86Assembler.h. + * masm: Removed. + * masm/X86Assembler.h: Removed. + * wtf/Platform.h: + +2008-11-16 Geoffrey Garen + + Not reviewed. + + Try to fix gtk build. + + * GNUmakefile.am: + +2008-11-16 Geoffrey Garen + + Not reviewed. + + Fixed tyop. + + * VM/CTI.cpp: + +2008-11-16 Geoffrey Garen + + Not reviewed. + + Try to fix windows build. + + * VM/CTI.cpp: + +2008-11-16 Geoffrey Garen + + Not reviewed. + + Try to fix gtk build. + + * GNUmakefile.am: + +2008-11-16 Geoffrey Garen + + Reviewed by Sam Weinig. + + Renamed ENABLE_CTI and ENABLE(CTI) to ENABLE_JIT and ENABLE(JIT). + + * VM/CTI.cpp: + * VM/CTI.h: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::~CodeBlock): + * VM/CodeBlock.h: + (JSC::CodeBlock::CodeBlock): + * VM/Machine.cpp: + (JSC::Interpreter::Interpreter): + (JSC::Interpreter::initialize): + (JSC::Interpreter::~Interpreter): + (JSC::Interpreter::execute): + (JSC::Interpreter::privateExecute): + * VM/Machine.h: + * bytecompiler/CodeGenerator.cpp: + (JSC::prepareJumpTableForStringSwitch): + * runtime/JSFunction.cpp: + (JSC::JSFunction::~JSFunction): + * runtime/JSGlobalData.h: + * wrec/WREC.h: + * wtf/Platform.h: + * wtf/TCSystemAlloc.cpp: + +2008-11-16 Geoffrey Garen + + Not reviewed. + + Try to fix gtk build. + + * VM/CTI.cpp: + +2008-11-16 Geoffrey Garen + + Reviewed by a few people on squirrelfish-dev. + + Renamed CTI => JIT. + + * VM/CTI.cpp: + (JSC::JIT::killLastResultRegister): + (JSC::JIT::emitGetVirtualRegister): + (JSC::JIT::emitGetVirtualRegisters): + (JSC::JIT::emitPutCTIArgFromVirtualRegister): + (JSC::JIT::emitPutCTIArg): + (JSC::JIT::emitGetCTIArg): + (JSC::JIT::emitPutCTIArgConstant): + (JSC::JIT::getConstantImmediateNumericArg): + (JSC::JIT::emitPutCTIParam): + (JSC::JIT::emitGetCTIParam): + (JSC::JIT::emitPutToCallFrameHeader): + (JSC::JIT::emitGetFromCallFrameHeader): + (JSC::JIT::emitPutVirtualRegister): + (JSC::JIT::emitInitRegister): + (JSC::JIT::printBytecodeOperandTypes): + (JSC::JIT::emitAllocateNumber): + (JSC::JIT::emitNakedCall): + (JSC::JIT::emitNakedFastCall): + (JSC::JIT::emitCTICall): + (JSC::JIT::emitJumpSlowCaseIfNotJSCell): + (JSC::JIT::linkSlowCaseIfNotJSCell): + (JSC::JIT::emitJumpSlowCaseIfNotImmNum): + (JSC::JIT::emitJumpSlowCaseIfNotImmNums): + (JSC::JIT::getDeTaggedConstantImmediate): + (JSC::JIT::emitFastArithDeTagImmediate): + (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): + (JSC::JIT::emitFastArithReTagImmediate): + (JSC::JIT::emitFastArithPotentiallyReTagImmediate): + (JSC::JIT::emitFastArithImmToInt): + (JSC::JIT::emitFastArithIntToImmOrSlowCase): + (JSC::JIT::emitFastArithIntToImmNoCheck): + (JSC::JIT::emitArithIntToImmWithJump): + (JSC::JIT::emitTagAsBoolImmediate): + (JSC::JIT::JIT): + (JSC::JIT::compileOpCallInitializeCallFrame): + (JSC::JIT::compileOpCallSetupArgs): + (JSC::JIT::compileOpCallEvalSetupArgs): + (JSC::JIT::compileOpConstructSetupArgs): + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpStrictEq): + (JSC::JIT::emitSlowScriptCheck): + (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): + (JSC::JIT::compileBinaryArithOp): + (JSC::JIT::compileBinaryArithOpSlowCase): + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileLinkPass): + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileGetByIdSelf): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdChain): + (JSC::JIT::privateCompilePutByIdReplace): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::unlinkCall): + (JSC::JIT::linkCall): + (JSC::JIT::privateCompileCTIMachineTrampolines): + (JSC::JIT::freeCTIMachineTrampolines): + (JSC::JIT::patchGetByIdSelf): + (JSC::JIT::patchPutByIdReplace): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::emitGetVariableObjectRegister): + (JSC::JIT::emitPutVariableObjectRegister): + * VM/CTI.h: + (JSC::JIT::compile): + (JSC::JIT::compileGetByIdSelf): + (JSC::JIT::compileGetByIdProto): + (JSC::JIT::compileGetByIdChain): + (JSC::JIT::compilePutByIdReplace): + (JSC::JIT::compilePutByIdTransition): + (JSC::JIT::compileCTIMachineTrampolines): + (JSC::JIT::compilePatchGetArrayLength): + * VM/CodeBlock.cpp: + (JSC::CodeBlock::unlinkCallers): + * VM/Machine.cpp: + (JSC::Interpreter::initialize): + (JSC::Interpreter::~Interpreter): + (JSC::Interpreter::execute): + (JSC::Interpreter::tryCTICachePutByID): + (JSC::Interpreter::tryCTICacheGetByID): + (JSC::Interpreter::cti_op_call_JSFunction): + (JSC::Interpreter::cti_vm_dontLazyLinkCall): + (JSC::Interpreter::cti_vm_lazyLinkCall): + * VM/Machine.h: + * VM/RegisterFile.h: + * parser/Nodes.h: + * runtime/JSArray.h: + * runtime/JSCell.h: + * runtime/JSFunction.h: + * runtime/JSImmediate.h: + * runtime/JSNumberCell.h: + * runtime/JSObject.h: + * runtime/JSString.h: + * runtime/JSVariableObject.h: + * runtime/ScopeChain.h: + * runtime/Structure.h: + * runtime/TypeInfo.h: + * runtime/UString.h: + +2008-11-16 Geoffrey Garen + + Not reviewed. + + Try to fix wx build. + + * jscore.bkl: + +2008-11-16 Geoffrey Garen + + Reviewed by Sam Weinig. + + Nixed X86:: and X86Assembler:: prefixes in a lot of places using typedefs. + + * VM/CTI.cpp: + (JSC::CTI::emitGetVirtualRegister): + (JSC::CTI::emitGetVirtualRegisters): + (JSC::CTI::emitPutCTIArgFromVirtualRegister): + (JSC::CTI::emitPutCTIArg): + (JSC::CTI::emitGetCTIArg): + (JSC::CTI::emitPutCTIParam): + (JSC::CTI::emitGetCTIParam): + (JSC::CTI::emitPutToCallFrameHeader): + (JSC::CTI::emitGetFromCallFrameHeader): + (JSC::CTI::emitPutVirtualRegister): + (JSC::CTI::emitNakedCall): + (JSC::CTI::emitNakedFastCall): + (JSC::CTI::emitCTICall): + (JSC::CTI::emitJumpSlowCaseIfNotJSCell): + (JSC::CTI::emitJumpSlowCaseIfNotImmNum): + (JSC::CTI::emitJumpSlowCaseIfNotImmNums): + (JSC::CTI::emitFastArithDeTagImmediate): + (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero): + (JSC::CTI::emitFastArithReTagImmediate): + (JSC::CTI::emitFastArithPotentiallyReTagImmediate): + (JSC::CTI::emitFastArithImmToInt): + (JSC::CTI::emitFastArithIntToImmOrSlowCase): + (JSC::CTI::emitFastArithIntToImmNoCheck): + (JSC::CTI::emitArithIntToImmWithJump): + (JSC::CTI::emitTagAsBoolImmediate): + (JSC::CTI::compileOpCall): + (JSC::CTI::compileOpStrictEq): + (JSC::CTI::emitSlowScriptCheck): + (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): + (JSC::CTI::compileBinaryArithOp): + (JSC::CTI::compileBinaryArithOpSlowCase): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + (JSC::CTI::privateCompileGetByIdSelf): + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + (JSC::CTI::privateCompilePutByIdReplace): + (JSC::CTI::privateCompilePutByIdTransition): + (JSC::CTI::privateCompileCTIMachineTrampolines): + (JSC::CTI::privateCompilePatchGetArrayLength): + (JSC::CTI::emitGetVariableObjectRegister): + (JSC::CTI::emitPutVariableObjectRegister): + * VM/CTI.h: + (JSC::CallRecord::CallRecord): + (JSC::JmpTable::JmpTable): + (JSC::SlowCaseEntry::SlowCaseEntry): + (JSC::CTI::JSRInfo::JSRInfo): + * wrec/WREC.h: + +2008-11-16 Geoffrey Garen + + Not reviewed. + + Try to fix Qt build. + + * JavaScriptCore.pri: + +2008-11-16 Geoffrey Garen + + Reviewed by Sam Weinig. + + Renamed OBJECT_OFFSET => FIELD_OFFSET + + Nixed use of OBJECT_OFFSET outside of CTI.cpp by making CTI a friend in + more places. + + * VM/CTI.cpp: + (JSC::CTI::compileOpCallInitializeCallFrame): + (JSC::CTI::compileOpCall): + (JSC::CTI::emitSlowScriptCheck): + (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): + (JSC::CTI::compileBinaryArithOp): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + (JSC::CTI::privateCompileGetByIdSelf): + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + (JSC::CTI::privateCompilePutByIdReplace): + (JSC::CTI::privateCompilePutByIdTransition): + (JSC::CTI::privateCompileCTIMachineTrampolines): + (JSC::CTI::privateCompilePatchGetArrayLength): + (JSC::CTI::emitGetVariableObjectRegister): + (JSC::CTI::emitPutVariableObjectRegister): + * runtime/JSValue.h: + * runtime/JSVariableObject.h: + +2008-11-16 Geoffrey Garen + + Reviewed by Sam Weinig. + + Renames: + + X86Assembler::copy => X86Assembler::executableCopy + AssemblerBuffer::copy => AssemblerBuffer::executableCopy + + * VM/CTI.cpp: + (JSC::CTI::privateCompile): + (JSC::CTI::privateCompileGetByIdSelf): + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + (JSC::CTI::privateCompilePutByIdReplace): + (JSC::CTI::privateCompilePutByIdTransition): + (JSC::CTI::privateCompileCTIMachineTrampolines): + (JSC::CTI::privateCompilePatchGetArrayLength): + * masm/X86Assembler.h: + (JSC::AssemblerBuffer::executableCopy): + (JSC::X86Assembler::executableCopy): + * wrec/WREC.cpp: + (JSC::WREC::compileRegExp): + +2008-11-16 Geoffrey Garen + + Reviewed by Sam Weinig. + + Renamed WREC => JSC::WREC, removing JSC:: prefix in a lot of places. + Renamed WRECFunction => WREC::CompiledRegExp, and deployed this type + name in place of a few casts. + + * runtime/RegExp.cpp: + (JSC::RegExp::RegExp): + (JSC::RegExp::~RegExp): + (JSC::RegExp::match): + * runtime/RegExp.h: + * wrec/CharacterClassConstructor.cpp: + * wrec/CharacterClassConstructor.h: + * wrec/WREC.cpp: + (JSC::WREC::compileRegExp): + * wrec/WREC.h: + (JSC::WREC::Generator::Generator): + (JSC::WREC::Parser::Parser): + (JSC::WREC::Parser::parseAlternative): + +2008-11-16 Geoffrey Garen + + Reviewed by Sam Weinig. + + Renamed BytecodeInterpreter => Interpreter. + + * JavaScriptCore.exp: + * VM/CTI.cpp: + (JSC::): + (JSC::CTI::compileOpCall): + (JSC::CTI::emitSlowScriptCheck): + (JSC::CTI::compileBinaryArithOpSlowCase): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + (JSC::CTI::privateCompileGetByIdSelf): + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + (JSC::CTI::privateCompilePutByIdReplace): + (JSC::CTI::privateCompilePutByIdTransition): + (JSC::CTI::privateCompileCTIMachineTrampolines): + (JSC::CTI::freeCTIMachineTrampolines): + (JSC::CTI::patchGetByIdSelf): + (JSC::CTI::patchPutByIdReplace): + (JSC::CTI::privateCompilePatchGetArrayLength): + * VM/CTI.h: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::printStructures): + (JSC::CodeBlock::derefStructures): + (JSC::CodeBlock::refStructures): + * VM/Machine.cpp: + (JSC::jsLess): + (JSC::jsLessEq): + (JSC::Interpreter::resolve): + (JSC::Interpreter::resolveSkip): + (JSC::Interpreter::resolveGlobal): + (JSC::Interpreter::resolveBase): + (JSC::Interpreter::resolveBaseAndProperty): + (JSC::Interpreter::resolveBaseAndFunc): + (JSC::Interpreter::slideRegisterWindowForCall): + (JSC::Interpreter::callEval): + (JSC::Interpreter::Interpreter): + (JSC::Interpreter::initialize): + (JSC::Interpreter::~Interpreter): + (JSC::Interpreter::dumpCallFrame): + (JSC::Interpreter::dumpRegisters): + (JSC::Interpreter::isOpcode): + (JSC::Interpreter::unwindCallFrame): + (JSC::Interpreter::throwException): + (JSC::Interpreter::execute): + (JSC::Interpreter::debug): + (JSC::Interpreter::resetTimeoutCheck): + (JSC::Interpreter::checkTimeout): + (JSC::Interpreter::createExceptionScope): + (JSC::Interpreter::tryCachePutByID): + (JSC::Interpreter::uncachePutByID): + (JSC::Interpreter::tryCacheGetByID): + (JSC::Interpreter::uncacheGetByID): + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::retrieveArguments): + (JSC::Interpreter::retrieveCaller): + (JSC::Interpreter::retrieveLastCaller): + (JSC::Interpreter::findFunctionCallFrame): + (JSC::Interpreter::tryCTICachePutByID): + (JSC::Interpreter::tryCTICacheGetByID): + (JSC::Interpreter::cti_op_convert_this): + (JSC::Interpreter::cti_op_end): + (JSC::Interpreter::cti_op_add): + (JSC::Interpreter::cti_op_pre_inc): + (JSC::Interpreter::cti_timeout_check): + (JSC::Interpreter::cti_register_file_check): + (JSC::Interpreter::cti_op_loop_if_less): + (JSC::Interpreter::cti_op_loop_if_lesseq): + (JSC::Interpreter::cti_op_new_object): + (JSC::Interpreter::cti_op_put_by_id): + (JSC::Interpreter::cti_op_put_by_id_second): + (JSC::Interpreter::cti_op_put_by_id_generic): + (JSC::Interpreter::cti_op_put_by_id_fail): + (JSC::Interpreter::cti_op_get_by_id): + (JSC::Interpreter::cti_op_get_by_id_second): + (JSC::Interpreter::cti_op_get_by_id_generic): + (JSC::Interpreter::cti_op_get_by_id_fail): + (JSC::Interpreter::cti_op_instanceof): + (JSC::Interpreter::cti_op_del_by_id): + (JSC::Interpreter::cti_op_mul): + (JSC::Interpreter::cti_op_new_func): + (JSC::Interpreter::cti_op_call_JSFunction): + (JSC::Interpreter::cti_op_call_arityCheck): + (JSC::Interpreter::cti_vm_dontLazyLinkCall): + (JSC::Interpreter::cti_vm_lazyLinkCall): + (JSC::Interpreter::cti_op_push_activation): + (JSC::Interpreter::cti_op_call_NotJSFunction): + (JSC::Interpreter::cti_op_create_arguments): + (JSC::Interpreter::cti_op_create_arguments_no_params): + (JSC::Interpreter::cti_op_tear_off_activation): + (JSC::Interpreter::cti_op_tear_off_arguments): + (JSC::Interpreter::cti_op_profile_will_call): + (JSC::Interpreter::cti_op_profile_did_call): + (JSC::Interpreter::cti_op_ret_scopeChain): + (JSC::Interpreter::cti_op_new_array): + (JSC::Interpreter::cti_op_resolve): + (JSC::Interpreter::cti_op_construct_JSConstruct): + (JSC::Interpreter::cti_op_construct_NotJSConstruct): + (JSC::Interpreter::cti_op_get_by_val): + (JSC::Interpreter::cti_op_resolve_func): + (JSC::Interpreter::cti_op_sub): + (JSC::Interpreter::cti_op_put_by_val): + (JSC::Interpreter::cti_op_put_by_val_array): + (JSC::Interpreter::cti_op_lesseq): + (JSC::Interpreter::cti_op_loop_if_true): + (JSC::Interpreter::cti_op_negate): + (JSC::Interpreter::cti_op_resolve_base): + (JSC::Interpreter::cti_op_resolve_skip): + (JSC::Interpreter::cti_op_resolve_global): + (JSC::Interpreter::cti_op_div): + (JSC::Interpreter::cti_op_pre_dec): + (JSC::Interpreter::cti_op_jless): + (JSC::Interpreter::cti_op_not): + (JSC::Interpreter::cti_op_jtrue): + (JSC::Interpreter::cti_op_post_inc): + (JSC::Interpreter::cti_op_eq): + (JSC::Interpreter::cti_op_lshift): + (JSC::Interpreter::cti_op_bitand): + (JSC::Interpreter::cti_op_rshift): + (JSC::Interpreter::cti_op_bitnot): + (JSC::Interpreter::cti_op_resolve_with_base): + (JSC::Interpreter::cti_op_new_func_exp): + (JSC::Interpreter::cti_op_mod): + (JSC::Interpreter::cti_op_less): + (JSC::Interpreter::cti_op_neq): + (JSC::Interpreter::cti_op_post_dec): + (JSC::Interpreter::cti_op_urshift): + (JSC::Interpreter::cti_op_bitxor): + (JSC::Interpreter::cti_op_new_regexp): + (JSC::Interpreter::cti_op_bitor): + (JSC::Interpreter::cti_op_call_eval): + (JSC::Interpreter::cti_op_throw): + (JSC::Interpreter::cti_op_get_pnames): + (JSC::Interpreter::cti_op_next_pname): + (JSC::Interpreter::cti_op_push_scope): + (JSC::Interpreter::cti_op_pop_scope): + (JSC::Interpreter::cti_op_typeof): + (JSC::Interpreter::cti_op_is_undefined): + (JSC::Interpreter::cti_op_is_boolean): + (JSC::Interpreter::cti_op_is_number): + (JSC::Interpreter::cti_op_is_string): + (JSC::Interpreter::cti_op_is_object): + (JSC::Interpreter::cti_op_is_function): + (JSC::Interpreter::cti_op_stricteq): + (JSC::Interpreter::cti_op_nstricteq): + (JSC::Interpreter::cti_op_to_jsnumber): + (JSC::Interpreter::cti_op_in): + (JSC::Interpreter::cti_op_push_new_scope): + (JSC::Interpreter::cti_op_jmp_scopes): + (JSC::Interpreter::cti_op_put_by_index): + (JSC::Interpreter::cti_op_switch_imm): + (JSC::Interpreter::cti_op_switch_char): + (JSC::Interpreter::cti_op_switch_string): + (JSC::Interpreter::cti_op_del_by_val): + (JSC::Interpreter::cti_op_put_getter): + (JSC::Interpreter::cti_op_put_setter): + (JSC::Interpreter::cti_op_new_error): + (JSC::Interpreter::cti_op_debug): + (JSC::Interpreter::cti_vm_throw): + * VM/Machine.h: + * VM/Register.h: + * VM/SamplingTool.h: + (JSC::SamplingTool::SamplingTool): + * bytecompiler/CodeGenerator.cpp: + (JSC::BytecodeGenerator::generate): + (JSC::BytecodeGenerator::BytecodeGenerator): + * jsc.cpp: + (runWithScripts): + * runtime/ExecState.h: + (JSC::ExecState::interpreter): + * runtime/JSCell.h: + * runtime/JSFunction.h: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSGlobalData.h: + * runtime/JSString.h: + * wrec/WREC.cpp: + (WREC::compileRegExp): + * wrec/WREC.h: + +2008-11-16 Geoffrey Garen + + Roll out r38461 (my last patch) because it broke the world. + +2008-11-16 Geoffrey Garen + + Reviewed by Sam Weinig. + + A few more renames: + + BytecodeInterpreter => Interpreter + WREC => JSC::WREC, removing JSC:: prefix in a lot of places + X86Assembler::copy => X86Assembler::executableCopy + AssemblerBuffer::copy => AssemblerBuffer::executableCopy + WRECFunction => WREC::RegExpFunction + OBJECT_OFFSET => FIELD_OFFSET + + Also: + + Nixed use of OBJECT_OFFSET outside of CTI.cpp by making CTI a friend in more places. + Nixed X86:: and X86Assembler:: prefixes in a lot of places using typedefs + + * JavaScriptCore.exp: + * VM/CTI.cpp: + (JSC::): + (JSC::CTI::emitGetVirtualRegister): + (JSC::CTI::emitGetVirtualRegisters): + (JSC::CTI::emitPutCTIArgFromVirtualRegister): + (JSC::CTI::emitPutCTIArg): + (JSC::CTI::emitGetCTIArg): + (JSC::CTI::emitPutCTIParam): + (JSC::CTI::emitGetCTIParam): + (JSC::CTI::emitPutToCallFrameHeader): + (JSC::CTI::emitGetFromCallFrameHeader): + (JSC::CTI::emitPutVirtualRegister): + (JSC::CTI::emitNakedCall): + (JSC::CTI::emitNakedFastCall): + (JSC::CTI::emitCTICall): + (JSC::CTI::emitJumpSlowCaseIfNotJSCell): + (JSC::CTI::emitJumpSlowCaseIfNotImmNum): + (JSC::CTI::emitJumpSlowCaseIfNotImmNums): + (JSC::CTI::emitFastArithDeTagImmediate): + (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero): + (JSC::CTI::emitFastArithReTagImmediate): + (JSC::CTI::emitFastArithPotentiallyReTagImmediate): + (JSC::CTI::emitFastArithImmToInt): + (JSC::CTI::emitFastArithIntToImmOrSlowCase): + (JSC::CTI::emitFastArithIntToImmNoCheck): + (JSC::CTI::emitArithIntToImmWithJump): + (JSC::CTI::emitTagAsBoolImmediate): + (JSC::CTI::compileOpCallInitializeCallFrame): + (JSC::CTI::compileOpCall): + (JSC::CTI::compileOpStrictEq): + (JSC::CTI::emitSlowScriptCheck): + (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): + (JSC::CTI::compileBinaryArithOp): + (JSC::CTI::compileBinaryArithOpSlowCase): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + (JSC::CTI::privateCompileGetByIdSelf): + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + (JSC::CTI::privateCompilePutByIdReplace): + (JSC::CTI::privateCompilePutByIdTransition): + (JSC::CTI::privateCompileCTIMachineTrampolines): + (JSC::CTI::freeCTIMachineTrampolines): + (JSC::CTI::patchGetByIdSelf): + (JSC::CTI::patchPutByIdReplace): + (JSC::CTI::privateCompilePatchGetArrayLength): + (JSC::CTI::emitGetVariableObjectRegister): + (JSC::CTI::emitPutVariableObjectRegister): + * VM/CTI.h: + (JSC::CallRecord::CallRecord): + (JSC::JmpTable::JmpTable): + (JSC::SlowCaseEntry::SlowCaseEntry): + (JSC::CTI::JSRInfo::JSRInfo): + * VM/CodeBlock.cpp: + (JSC::CodeBlock::printStructures): + (JSC::CodeBlock::derefStructures): + (JSC::CodeBlock::refStructures): + * VM/Machine.cpp: + (JSC::jsLess): + (JSC::jsLessEq): + (JSC::Interpreter::resolve): + (JSC::Interpreter::resolveSkip): + (JSC::Interpreter::resolveGlobal): + (JSC::Interpreter::resolveBase): + (JSC::Interpreter::resolveBaseAndProperty): + (JSC::Interpreter::resolveBaseAndFunc): + (JSC::Interpreter::slideRegisterWindowForCall): + (JSC::Interpreter::callEval): + (JSC::Interpreter::Interpreter): + (JSC::Interpreter::initialize): + (JSC::Interpreter::~Interpreter): + (JSC::Interpreter::dumpCallFrame): + (JSC::Interpreter::dumpRegisters): + (JSC::Interpreter::isOpcode): + (JSC::Interpreter::unwindCallFrame): + (JSC::Interpreter::throwException): + (JSC::Interpreter::execute): + (JSC::Interpreter::debug): + (JSC::Interpreter::resetTimeoutCheck): + (JSC::Interpreter::checkTimeout): + (JSC::Interpreter::createExceptionScope): + (JSC::Interpreter::tryCachePutByID): + (JSC::Interpreter::uncachePutByID): + (JSC::Interpreter::tryCacheGetByID): + (JSC::Interpreter::uncacheGetByID): + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::retrieveArguments): + (JSC::Interpreter::retrieveCaller): + (JSC::Interpreter::retrieveLastCaller): + (JSC::Interpreter::findFunctionCallFrame): + (JSC::Interpreter::tryCTICachePutByID): + (JSC::Interpreter::tryCTICacheGetByID): + (JSC::): + (JSC::Interpreter::cti_op_convert_this): + (JSC::Interpreter::cti_op_end): + (JSC::Interpreter::cti_op_add): + (JSC::Interpreter::cti_op_pre_inc): + (JSC::Interpreter::cti_timeout_check): + (JSC::Interpreter::cti_register_file_check): + (JSC::Interpreter::cti_op_loop_if_less): + (JSC::Interpreter::cti_op_loop_if_lesseq): + (JSC::Interpreter::cti_op_new_object): + (JSC::Interpreter::cti_op_put_by_id): + (JSC::Interpreter::cti_op_put_by_id_second): + (JSC::Interpreter::cti_op_put_by_id_generic): + (JSC::Interpreter::cti_op_put_by_id_fail): + (JSC::Interpreter::cti_op_get_by_id): + (JSC::Interpreter::cti_op_get_by_id_second): + (JSC::Interpreter::cti_op_get_by_id_generic): + (JSC::Interpreter::cti_op_get_by_id_fail): + (JSC::Interpreter::cti_op_instanceof): + (JSC::Interpreter::cti_op_del_by_id): + (JSC::Interpreter::cti_op_mul): + (JSC::Interpreter::cti_op_new_func): + (JSC::Interpreter::cti_op_call_JSFunction): + (JSC::Interpreter::cti_op_call_arityCheck): + (JSC::Interpreter::cti_vm_dontLazyLinkCall): + (JSC::Interpreter::cti_vm_lazyLinkCall): + (JSC::Interpreter::cti_op_push_activation): + (JSC::Interpreter::cti_op_call_NotJSFunction): + (JSC::Interpreter::cti_op_create_arguments): + (JSC::Interpreter::cti_op_create_arguments_no_params): + (JSC::Interpreter::cti_op_tear_off_activation): + (JSC::Interpreter::cti_op_tear_off_arguments): + (JSC::Interpreter::cti_op_profile_will_call): + (JSC::Interpreter::cti_op_profile_did_call): + (JSC::Interpreter::cti_op_ret_scopeChain): + (JSC::Interpreter::cti_op_new_array): + (JSC::Interpreter::cti_op_resolve): + (JSC::Interpreter::cti_op_construct_JSConstruct): + (JSC::Interpreter::cti_op_construct_NotJSConstruct): + (JSC::Interpreter::cti_op_get_by_val): + (JSC::Interpreter::cti_op_resolve_func): + (JSC::Interpreter::cti_op_sub): + (JSC::Interpreter::cti_op_put_by_val): + (JSC::Interpreter::cti_op_put_by_val_array): + (JSC::Interpreter::cti_op_lesseq): + (JSC::Interpreter::cti_op_loop_if_true): + (JSC::Interpreter::cti_op_negate): + (JSC::Interpreter::cti_op_resolve_base): + (JSC::Interpreter::cti_op_resolve_skip): + (JSC::Interpreter::cti_op_resolve_global): + (JSC::Interpreter::cti_op_div): + (JSC::Interpreter::cti_op_pre_dec): + (JSC::Interpreter::cti_op_jless): + (JSC::Interpreter::cti_op_not): + (JSC::Interpreter::cti_op_jtrue): + (JSC::Interpreter::cti_op_post_inc): + (JSC::Interpreter::cti_op_eq): + (JSC::Interpreter::cti_op_lshift): + (JSC::Interpreter::cti_op_bitand): + (JSC::Interpreter::cti_op_rshift): + (JSC::Interpreter::cti_op_bitnot): + (JSC::Interpreter::cti_op_resolve_with_base): + (JSC::Interpreter::cti_op_new_func_exp): + (JSC::Interpreter::cti_op_mod): + (JSC::Interpreter::cti_op_less): + (JSC::Interpreter::cti_op_neq): + (JSC::Interpreter::cti_op_post_dec): + (JSC::Interpreter::cti_op_urshift): + (JSC::Interpreter::cti_op_bitxor): + (JSC::Interpreter::cti_op_new_regexp): + (JSC::Interpreter::cti_op_bitor): + (JSC::Interpreter::cti_op_call_eval): + (JSC::Interpreter::cti_op_throw): + (JSC::Interpreter::cti_op_get_pnames): + (JSC::Interpreter::cti_op_next_pname): + (JSC::Interpreter::cti_op_push_scope): + (JSC::Interpreter::cti_op_pop_scope): + (JSC::Interpreter::cti_op_typeof): + (JSC::Interpreter::cti_op_is_undefined): + (JSC::Interpreter::cti_op_is_boolean): + (JSC::Interpreter::cti_op_is_number): + (JSC::Interpreter::cti_op_is_string): + (JSC::Interpreter::cti_op_is_object): + (JSC::Interpreter::cti_op_is_function): + (JSC::Interpreter::cti_op_stricteq): + (JSC::Interpreter::cti_op_nstricteq): + (JSC::Interpreter::cti_op_to_jsnumber): + (JSC::Interpreter::cti_op_in): + (JSC::Interpreter::cti_op_push_new_scope): + (JSC::Interpreter::cti_op_jmp_scopes): + (JSC::Interpreter::cti_op_put_by_index): + (JSC::Interpreter::cti_op_switch_imm): + (JSC::Interpreter::cti_op_switch_char): + (JSC::Interpreter::cti_op_switch_string): + (JSC::Interpreter::cti_op_del_by_val): + (JSC::Interpreter::cti_op_put_getter): + (JSC::Interpreter::cti_op_put_setter): + (JSC::Interpreter::cti_op_new_error): + (JSC::Interpreter::cti_op_debug): + (JSC::Interpreter::cti_vm_throw): + * VM/Machine.h: + * VM/Register.h: + * VM/SamplingTool.cpp: + (JSC::SamplingTool::dump): + * VM/SamplingTool.h: + (JSC::SamplingTool::SamplingTool): + * bytecompiler/CodeGenerator.cpp: + (JSC::BytecodeGenerator::generate): + (JSC::BytecodeGenerator::BytecodeGenerator): + * jsc.cpp: + (runWithScripts): + * masm/X86Assembler.h: + (JSC::AssemblerBuffer::executableCopy): + (JSC::X86Assembler::executableCopy): + * runtime/ExecState.h: + (JSC::ExecState::interpreter): + * runtime/JSCell.h: + * runtime/JSFunction.h: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSGlobalData.h: + * runtime/JSImmediate.h: + * runtime/JSString.h: + * runtime/JSValue.h: + * runtime/JSVariableObject.h: + * runtime/RegExp.cpp: + (JSC::RegExp::RegExp): + (JSC::RegExp::~RegExp): + (JSC::RegExp::match): + * runtime/RegExp.h: + * wrec/CharacterClassConstructor.cpp: + * wrec/CharacterClassConstructor.h: + * wrec/WREC.cpp: + (JSC::WREC::compileRegExp): + * wrec/WREC.h: + (JSC::WREC::Generator::Generator): + (JSC::WREC::Parser::): + (JSC::WREC::Parser::Parser): + (JSC::WREC::Parser::parseAlternative): + +2008-11-16 Greg Bolsinga + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=21810 + Remove use of static C++ objects that are destroyed at exit time (destructors) + + Conditionally have the DEFINE_STATIC_LOCAL workaround + (Codegen issue with C++ static reference in gcc build 5465) based upon the compiler + build versions. It will use the: + static T& = *new T; + style for all other compilers. + + * wtf/StdLibExtras.h: + +2008-11-16 Alexey Proskuryakov + + Reviewed by Dan Bernstein. + + https://bugs.webkit.org/show_bug.cgi?id=22290 + Remove cross-heap GC and MessagePort multi-threading support + + It is broken (and may not be implementable at all), and no longer needed, as we + don't use MessagePorts for communication with workers any more. + + * JavaScriptCore.exp: + * runtime/Collector.cpp: + (JSC::Heap::collect): + * runtime/JSGlobalObject.cpp: + * runtime/JSGlobalObject.h: + Remove hooks for cross-heap GC. + +2008-11-15 Sam Weinig + + Reviewed by Cameron Zwarich. + + Cleanup jsc command line code a little. + + * jsc.cpp: + (functionQuit): + (main): Use standard exit status macros + (cleanupGlobalData): Factor out cleanup code into this function. + (printUsageStatement): Use standard exit status macros. + +2008-11-15 Sam Weinig + + Reviewed by Cameron Zwarich. + + Cleanup BytecodeGenerator constructors. + + * bytecompiler/CodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): + * bytecompiler/CodeGenerator.h: + * parser/Nodes.cpp: + (JSC::ProgramNode::generateBytecode): + +2008-11-15 Darin Adler + + Rubber stamped by Geoff Garen. + + - do the long-planned StructureID -> Structure rename + + * API/JSCallbackConstructor.cpp: + (JSC::JSCallbackConstructor::JSCallbackConstructor): + * API/JSCallbackConstructor.h: + (JSC::JSCallbackConstructor::createStructure): + * API/JSCallbackFunction.h: + (JSC::JSCallbackFunction::createStructure): + * API/JSCallbackObject.h: + (JSC::JSCallbackObject::createStructure): + * API/JSCallbackObjectFunctions.h: + (JSC::::JSCallbackObject): + * API/JSValueRef.cpp: + (JSValueIsInstanceOfConstructor): + * GNUmakefile.am: + * JavaScriptCore.exp: + * JavaScriptCore.pri: + * JavaScriptCore.scons: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * VM/CTI.cpp: + (JSC::CTI::compileBinaryArithOp): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileGetByIdSelf): + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + (JSC::CTI::privateCompilePutByIdReplace): + (JSC::transitionWillNeedStorageRealloc): + (JSC::CTI::privateCompilePutByIdTransition): + (JSC::CTI::patchGetByIdSelf): + (JSC::CTI::patchPutByIdReplace): + * VM/CTI.h: + (JSC::CTI::compileGetByIdSelf): + (JSC::CTI::compileGetByIdProto): + (JSC::CTI::compileGetByIdChain): + (JSC::CTI::compilePutByIdReplace): + (JSC::CTI::compilePutByIdTransition): + * VM/CodeBlock.cpp: + (JSC::CodeBlock::printStructure): + (JSC::CodeBlock::printStructures): + (JSC::CodeBlock::dump): + (JSC::CodeBlock::~CodeBlock): + (JSC::CodeBlock::derefStructures): + (JSC::CodeBlock::refStructures): + * VM/CodeBlock.h: + * VM/Instruction.h: + (JSC::Instruction::Instruction): + (JSC::Instruction::): + * VM/Machine.cpp: + (JSC::jsTypeStringForValue): + (JSC::jsIsObjectType): + (JSC::BytecodeInterpreter::resolveGlobal): + (JSC::BytecodeInterpreter::BytecodeInterpreter): + (JSC::cachePrototypeChain): + (JSC::BytecodeInterpreter::tryCachePutByID): + (JSC::BytecodeInterpreter::uncachePutByID): + (JSC::BytecodeInterpreter::tryCacheGetByID): + (JSC::BytecodeInterpreter::uncacheGetByID): + (JSC::BytecodeInterpreter::privateExecute): + (JSC::BytecodeInterpreter::tryCTICachePutByID): + (JSC::BytecodeInterpreter::tryCTICacheGetByID): + (JSC::BytecodeInterpreter::cti_op_instanceof): + (JSC::BytecodeInterpreter::cti_op_construct_JSConstruct): + (JSC::BytecodeInterpreter::cti_op_resolve_global): + (JSC::BytecodeInterpreter::cti_op_is_undefined): + * runtime/Arguments.h: + (JSC::Arguments::createStructure): + * runtime/ArrayConstructor.cpp: + (JSC::ArrayConstructor::ArrayConstructor): + * runtime/ArrayConstructor.h: + * runtime/ArrayPrototype.cpp: + (JSC::ArrayPrototype::ArrayPrototype): + * runtime/ArrayPrototype.h: + * runtime/BatchedTransitionOptimizer.h: + (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer): + (JSC::BatchedTransitionOptimizer::~BatchedTransitionOptimizer): + * runtime/BooleanConstructor.cpp: + (JSC::BooleanConstructor::BooleanConstructor): + * runtime/BooleanConstructor.h: + * runtime/BooleanObject.cpp: + (JSC::BooleanObject::BooleanObject): + * runtime/BooleanObject.h: + * runtime/BooleanPrototype.cpp: + (JSC::BooleanPrototype::BooleanPrototype): + * runtime/BooleanPrototype.h: + * runtime/DateConstructor.cpp: + (JSC::DateConstructor::DateConstructor): + * runtime/DateConstructor.h: + * runtime/DateInstance.cpp: + (JSC::DateInstance::DateInstance): + * runtime/DateInstance.h: + * runtime/DatePrototype.cpp: + (JSC::DatePrototype::DatePrototype): + * runtime/DatePrototype.h: + (JSC::DatePrototype::createStructure): + * runtime/ErrorConstructor.cpp: + (JSC::ErrorConstructor::ErrorConstructor): + * runtime/ErrorConstructor.h: + * runtime/ErrorInstance.cpp: + (JSC::ErrorInstance::ErrorInstance): + * runtime/ErrorInstance.h: + * runtime/ErrorPrototype.cpp: + (JSC::ErrorPrototype::ErrorPrototype): + * runtime/ErrorPrototype.h: + * runtime/FunctionConstructor.cpp: + (JSC::FunctionConstructor::FunctionConstructor): + * runtime/FunctionConstructor.h: + * runtime/FunctionPrototype.cpp: + (JSC::FunctionPrototype::FunctionPrototype): + (JSC::FunctionPrototype::addFunctionProperties): + * runtime/FunctionPrototype.h: + (JSC::FunctionPrototype::createStructure): + * runtime/GlobalEvalFunction.cpp: + (JSC::GlobalEvalFunction::GlobalEvalFunction): + * runtime/GlobalEvalFunction.h: + * runtime/Identifier.h: + * runtime/InternalFunction.cpp: + (JSC::InternalFunction::InternalFunction): + * runtime/InternalFunction.h: + (JSC::InternalFunction::createStructure): + (JSC::InternalFunction::InternalFunction): + * runtime/JSActivation.cpp: + (JSC::JSActivation::JSActivation): + * runtime/JSActivation.h: + (JSC::JSActivation::createStructure): + * runtime/JSArray.cpp: + (JSC::JSArray::JSArray): + * runtime/JSArray.h: + (JSC::JSArray::createStructure): + * runtime/JSCell.h: + (JSC::JSCell::JSCell): + (JSC::JSCell::isObject): + (JSC::JSCell::isString): + (JSC::JSCell::structure): + (JSC::JSValue::needsThisConversion): + * runtime/JSFunction.cpp: + (JSC::JSFunction::construct): + * runtime/JSFunction.h: + (JSC::JSFunction::JSFunction): + (JSC::JSFunction::createStructure): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::createLeaked): + * runtime/JSGlobalData.h: + * runtime/JSGlobalObject.cpp: + (JSC::markIfNeeded): + (JSC::JSGlobalObject::reset): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::JSGlobalObject): + (JSC::JSGlobalObject::argumentsStructure): + (JSC::JSGlobalObject::arrayStructure): + (JSC::JSGlobalObject::booleanObjectStructure): + (JSC::JSGlobalObject::callbackConstructorStructure): + (JSC::JSGlobalObject::callbackFunctionStructure): + (JSC::JSGlobalObject::callbackObjectStructure): + (JSC::JSGlobalObject::dateStructure): + (JSC::JSGlobalObject::emptyObjectStructure): + (JSC::JSGlobalObject::errorStructure): + (JSC::JSGlobalObject::functionStructure): + (JSC::JSGlobalObject::numberObjectStructure): + (JSC::JSGlobalObject::prototypeFunctionStructure): + (JSC::JSGlobalObject::regExpMatchesArrayStructure): + (JSC::JSGlobalObject::regExpStructure): + (JSC::JSGlobalObject::stringObjectStructure): + (JSC::JSGlobalObject::createStructure): + (JSC::Structure::prototypeForLookup): + * runtime/JSNotAnObject.h: + (JSC::JSNotAnObject::createStructure): + * runtime/JSNumberCell.h: + (JSC::JSNumberCell::createStructure): + (JSC::JSNumberCell::JSNumberCell): + * runtime/JSObject.cpp: + (JSC::JSObject::mark): + (JSC::JSObject::put): + (JSC::JSObject::deleteProperty): + (JSC::JSObject::defineGetter): + (JSC::JSObject::defineSetter): + (JSC::JSObject::getPropertyAttributes): + (JSC::JSObject::getPropertyNames): + (JSC::JSObject::removeDirect): + (JSC::JSObject::createInheritorID): + * runtime/JSObject.h: + (JSC::JSObject::getDirect): + (JSC::JSObject::getDirectLocation): + (JSC::JSObject::hasCustomProperties): + (JSC::JSObject::hasGetterSetterProperties): + (JSC::JSObject::createStructure): + (JSC::JSObject::JSObject): + (JSC::JSObject::~JSObject): + (JSC::JSObject::prototype): + (JSC::JSObject::setPrototype): + (JSC::JSObject::setStructure): + (JSC::JSObject::inheritorID): + (JSC::JSObject::inlineGetOwnPropertySlot): + (JSC::JSObject::getOwnPropertySlotForWrite): + (JSC::JSCell::fastGetOwnPropertySlot): + (JSC::JSObject::putDirect): + (JSC::JSObject::putDirectWithoutTransition): + (JSC::JSObject::transitionTo): + * runtime/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::next): + * runtime/JSStaticScopeObject.h: + (JSC::JSStaticScopeObject::JSStaticScopeObject): + (JSC::JSStaticScopeObject::createStructure): + * runtime/JSString.h: + (JSC::JSString::JSString): + (JSC::JSString::createStructure): + * runtime/JSVariableObject.h: + (JSC::JSVariableObject::JSVariableObject): + * runtime/JSWrapperObject.h: + (JSC::JSWrapperObject::JSWrapperObject): + * runtime/MathObject.cpp: + (JSC::MathObject::MathObject): + * runtime/MathObject.h: + (JSC::MathObject::createStructure): + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::NativeErrorConstructor): + * runtime/NativeErrorConstructor.h: + * runtime/NativeErrorPrototype.cpp: + (JSC::NativeErrorPrototype::NativeErrorPrototype): + * runtime/NativeErrorPrototype.h: + * runtime/NumberConstructor.cpp: + (JSC::NumberConstructor::NumberConstructor): + * runtime/NumberConstructor.h: + (JSC::NumberConstructor::createStructure): + * runtime/NumberObject.cpp: + (JSC::NumberObject::NumberObject): + * runtime/NumberObject.h: + * runtime/NumberPrototype.cpp: + (JSC::NumberPrototype::NumberPrototype): + * runtime/NumberPrototype.h: + * runtime/ObjectConstructor.cpp: + (JSC::ObjectConstructor::ObjectConstructor): + * runtime/ObjectConstructor.h: + * runtime/ObjectPrototype.cpp: + (JSC::ObjectPrototype::ObjectPrototype): + * runtime/ObjectPrototype.h: + * runtime/Operations.h: + (JSC::equalSlowCaseInline): + * runtime/PropertyNameArray.h: + (JSC::PropertyNameArrayData::setCachedStructure): + (JSC::PropertyNameArrayData::cachedStructure): + (JSC::PropertyNameArrayData::setCachedPrototypeChain): + (JSC::PropertyNameArrayData::cachedPrototypeChain): + (JSC::PropertyNameArrayData::PropertyNameArrayData): + * runtime/PrototypeFunction.cpp: + (JSC::PrototypeFunction::PrototypeFunction): + * runtime/PrototypeFunction.h: + * runtime/RegExpConstructor.cpp: + (JSC::RegExpConstructor::RegExpConstructor): + * runtime/RegExpConstructor.h: + (JSC::RegExpConstructor::createStructure): + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::RegExpObject): + * runtime/RegExpObject.h: + (JSC::RegExpObject::createStructure): + * runtime/RegExpPrototype.cpp: + (JSC::RegExpPrototype::RegExpPrototype): + * runtime/RegExpPrototype.h: + * runtime/StringConstructor.cpp: + (JSC::StringConstructor::StringConstructor): + * runtime/StringConstructor.h: + * runtime/StringObject.cpp: + (JSC::StringObject::StringObject): + * runtime/StringObject.h: + (JSC::StringObject::createStructure): + * runtime/StringObjectThatMasqueradesAsUndefined.h: + (JSC::StringObjectThatMasqueradesAsUndefined::create): + (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined): + (JSC::StringObjectThatMasqueradesAsUndefined::createStructure): + * runtime/StringPrototype.cpp: + (JSC::StringPrototype::StringPrototype): + * runtime/StringPrototype.h: + * runtime/Structure.cpp: Copied from JavaScriptCore/runtime/StructureID.cpp. + (JSC::Structure::dumpStatistics): + (JSC::Structure::Structure): + (JSC::Structure::~Structure): + (JSC::Structure::startIgnoringLeaks): + (JSC::Structure::stopIgnoringLeaks): + (JSC::Structure::materializePropertyMap): + (JSC::Structure::getEnumerablePropertyNames): + (JSC::Structure::clearEnumerationCache): + (JSC::Structure::growPropertyStorageCapacity): + (JSC::Structure::addPropertyTransitionToExistingStructure): + (JSC::Structure::addPropertyTransition): + (JSC::Structure::removePropertyTransition): + (JSC::Structure::changePrototypeTransition): + (JSC::Structure::getterSetterTransition): + (JSC::Structure::toDictionaryTransition): + (JSC::Structure::fromDictionaryTransition): + (JSC::Structure::addPropertyWithoutTransition): + (JSC::Structure::removePropertyWithoutTransition): + (JSC::Structure::createCachedPrototypeChain): + (JSC::Structure::checkConsistency): + (JSC::Structure::copyPropertyTable): + (JSC::Structure::get): + (JSC::Structure::put): + (JSC::Structure::remove): + (JSC::Structure::insertIntoPropertyMapHashTable): + (JSC::Structure::createPropertyMapHashTable): + (JSC::Structure::expandPropertyMapHashTable): + (JSC::Structure::rehashPropertyMapHashTable): + (JSC::Structure::getEnumerablePropertyNamesInternal): + * runtime/Structure.h: Copied from JavaScriptCore/runtime/StructureID.h. + (JSC::Structure::create): + (JSC::Structure::previousID): + (JSC::Structure::setCachedPrototypeChain): + (JSC::Structure::cachedPrototypeChain): + (JSC::Structure::): + (JSC::Structure::get): + * runtime/StructureChain.cpp: Copied from JavaScriptCore/runtime/StructureIDChain.cpp. + (JSC::StructureChain::StructureChain): + (JSC::structureChainsAreEqual): + * runtime/StructureChain.h: Copied from JavaScriptCore/runtime/StructureIDChain.h. + (JSC::StructureChain::create): + (JSC::StructureChain::head): + * runtime/StructureID.cpp: Removed. + * runtime/StructureID.h: Removed. + * runtime/StructureIDChain.cpp: Removed. + * runtime/StructureIDChain.h: Removed. + * runtime/StructureIDTransitionTable.h: Removed. + * runtime/StructureTransitionTable.h: Copied from JavaScriptCore/runtime/StructureIDTransitionTable.h. + +2008-11-15 Darin Adler + + - fix non-WREC build + + * runtime/RegExp.cpp: Put "using namespace WREC" inside #if ENABLE(WREC). + +2008-11-15 Kevin Ollivier + + Reviewed by Timothy Hatcher. + + As ThreadingNone doesn't implement threads, isMainThread should return true, + not false. + + https://bugs.webkit.org/show_bug.cgi?id=22285 + + * wtf/ThreadingNone.cpp: + (WTF::isMainThread): + +2008-11-15 Geoffrey Garen + + Reviewed by Sam Weinig. + + Moved all WREC-related code into WREC.cpp and put it in a WREC namespace. + Removed the WREC prefix from class names. + + * VM/CTI.cpp: + * VM/CTI.h: + * VM/Machine.h: + (JSC::BytecodeInterpreter::assemblerBuffer): + * masm/X86Assembler.h: + * runtime/RegExp.cpp: + (JSC::RegExp::RegExp): + * wrec/CharacterClassConstructor.cpp: + * wrec/CharacterClassConstructor.h: + * wrec/WREC.cpp: + (WREC::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor): + (WREC::GeneratePatternCharacterFunctor::generateAtom): + (WREC::GeneratePatternCharacterFunctor::backtrack): + (WREC::GenerateCharacterClassFunctor::generateAtom): + (WREC::GenerateCharacterClassFunctor::backtrack): + (WREC::GenerateBackreferenceFunctor::generateAtom): + (WREC::GenerateBackreferenceFunctor::backtrack): + (WREC::GenerateParenthesesNonGreedyFunctor::generateAtom): + (WREC::GenerateParenthesesNonGreedyFunctor::backtrack): + (WREC::Generator::generateBacktrack1): + (WREC::Generator::generateBacktrackBackreference): + (WREC::Generator::generateBackreferenceQuantifier): + (WREC::Generator::generateNonGreedyQuantifier): + (WREC::Generator::generateGreedyQuantifier): + (WREC::Generator::generatePatternCharacter): + (WREC::Generator::generateCharacterClassInvertedRange): + (WREC::Generator::generateCharacterClassInverted): + (WREC::Generator::generateCharacterClass): + (WREC::Generator::generateParentheses): + (WREC::Generator::generateParenthesesNonGreedy): + (WREC::Generator::generateParenthesesResetTrampoline): + (WREC::Generator::generateAssertionBOL): + (WREC::Generator::generateAssertionEOL): + (WREC::Generator::generateAssertionWordBoundary): + (WREC::Generator::generateBackreference): + (WREC::Generator::generateDisjunction): + (WREC::Generator::terminateDisjunction): + (WREC::Parser::parseGreedyQuantifier): + (WREC::Parser::parseQuantifier): + (WREC::Parser::parsePatternCharacterQualifier): + (WREC::Parser::parseCharacterClassQuantifier): + (WREC::Parser::parseBackreferenceQuantifier): + (WREC::Parser::parseParentheses): + (WREC::Parser::parseCharacterClass): + (WREC::Parser::parseOctalEscape): + (WREC::Parser::parseEscape): + (WREC::Parser::parseTerm): + (WREC::Parser::parseDisjunction): + (WREC::compileRegExp): + * wrec/WREC.h: + (WREC::Generator::Generator): + (WREC::Parser::Parser): + (WREC::Parser::parseAlternative): + +2008-11-15 Geoffrey Garen + + Reviewed by Sam Weinig. + + Changed another case of "m_jit" to "m_assembler". + + * VM/CTI.cpp: + * wrec/WREC.cpp: + * wrec/WREC.h: + (JSC::WRECGenerator::WRECGenerator): + (JSC::WRECParser::WRECParser): + +2008-11-15 Geoffrey Garen + + Reviewed by Sam Weinig. + + Renamed "jit" to "assembler" and, for brevity, replaced *jit.* with __ + using a macro. + + * VM/CTI.cpp: + (JSC::CTI::emitGetVirtualRegister): + (JSC::CTI::emitPutCTIArgFromVirtualRegister): + (JSC::CTI::emitPutCTIArg): + (JSC::CTI::emitGetCTIArg): + (JSC::CTI::emitPutCTIArgConstant): + (JSC::CTI::emitPutCTIParam): + (JSC::CTI::emitGetCTIParam): + (JSC::CTI::emitPutToCallFrameHeader): + (JSC::CTI::emitGetFromCallFrameHeader): + (JSC::CTI::emitPutVirtualRegister): + (JSC::CTI::emitInitRegister): + (JSC::CTI::emitAllocateNumber): + (JSC::CTI::emitNakedCall): + (JSC::CTI::emitNakedFastCall): + (JSC::CTI::emitCTICall): + (JSC::CTI::emitJumpSlowCaseIfNotJSCell): + (JSC::CTI::linkSlowCaseIfNotJSCell): + (JSC::CTI::emitJumpSlowCaseIfNotImmNum): + (JSC::CTI::emitJumpSlowCaseIfNotImmNums): + (JSC::CTI::emitFastArithDeTagImmediate): + (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero): + (JSC::CTI::emitFastArithReTagImmediate): + (JSC::CTI::emitFastArithPotentiallyReTagImmediate): + (JSC::CTI::emitFastArithImmToInt): + (JSC::CTI::emitFastArithIntToImmOrSlowCase): + (JSC::CTI::emitFastArithIntToImmNoCheck): + (JSC::CTI::emitArithIntToImmWithJump): + (JSC::CTI::emitTagAsBoolImmediate): + (JSC::CTI::CTI): + (JSC::CTI::compileOpCallInitializeCallFrame): + (JSC::CTI::compileOpCall): + (JSC::CTI::compileOpStrictEq): + (JSC::CTI::emitSlowScriptCheck): + (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): + (JSC::CTI::compileBinaryArithOp): + (JSC::CTI::compileBinaryArithOpSlowCase): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileLinkPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + (JSC::CTI::privateCompileGetByIdSelf): + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + (JSC::CTI::privateCompilePutByIdReplace): + (JSC::CTI::privateCompilePutByIdTransition): + (JSC::CTI::privateCompileCTIMachineTrampolines): + (JSC::CTI::privateCompilePatchGetArrayLength): + (JSC::CTI::emitGetVariableObjectRegister): + (JSC::CTI::emitPutVariableObjectRegister): + (JSC::CTI::compileRegExp): + * VM/CTI.h: + * wrec/WREC.cpp: + (JSC::WRECGenerator::generateBacktrack1): + (JSC::WRECGenerator::generateBacktrackBackreference): + (JSC::WRECGenerator::generateBackreferenceQuantifier): + (JSC::WRECGenerator::generateNonGreedyQuantifier): + (JSC::WRECGenerator::generateGreedyQuantifier): + (JSC::WRECGenerator::generatePatternCharacter): + (JSC::WRECGenerator::generateCharacterClassInvertedRange): + (JSC::WRECGenerator::generateCharacterClassInverted): + (JSC::WRECGenerator::generateCharacterClass): + (JSC::WRECGenerator::generateParentheses): + (JSC::WRECGenerator::generateParenthesesNonGreedy): + (JSC::WRECGenerator::generateParenthesesResetTrampoline): + (JSC::WRECGenerator::generateAssertionBOL): + (JSC::WRECGenerator::generateAssertionEOL): + (JSC::WRECGenerator::generateAssertionWordBoundary): + (JSC::WRECGenerator::generateBackreference): + (JSC::WRECGenerator::generateDisjunction): + (JSC::WRECGenerator::terminateDisjunction): + +2008-11-15 Sam Weinig + + Reviewed by Geoffrey Garen. + + Remove dead method declaration. + + * bytecompiler/CodeGenerator.h: + +2008-11-15 Geoffrey Garen + + Reviewed by Sam Weinig. + + Renamed LabelID to Label, Label::isForwardLabel to Label::isForward. + + * VM/LabelID.h: + (JSC::Label::Label): + (JSC::Label::isForward): + * bytecompiler/CodeGenerator.cpp: + (JSC::BytecodeGenerator::newLabel): + (JSC::BytecodeGenerator::emitLabel): + (JSC::BytecodeGenerator::emitJump): + (JSC::BytecodeGenerator::emitJumpIfTrue): + (JSC::BytecodeGenerator::emitJumpIfFalse): + (JSC::BytecodeGenerator::pushFinallyContext): + (JSC::BytecodeGenerator::emitComplexJumpScopes): + (JSC::BytecodeGenerator::emitJumpScopes): + (JSC::BytecodeGenerator::emitNextPropertyName): + (JSC::BytecodeGenerator::emitCatch): + (JSC::BytecodeGenerator::emitJumpSubroutine): + (JSC::prepareJumpTableForImmediateSwitch): + (JSC::prepareJumpTableForCharacterSwitch): + (JSC::prepareJumpTableForStringSwitch): + (JSC::BytecodeGenerator::endSwitch): + * bytecompiler/CodeGenerator.h: + * bytecompiler/LabelScope.h: + (JSC::LabelScope::LabelScope): + (JSC::LabelScope::breakTarget): + (JSC::LabelScope::continueTarget): + * parser/Nodes.cpp: + (JSC::LogicalOpNode::emitBytecode): + (JSC::ConditionalNode::emitBytecode): + (JSC::IfNode::emitBytecode): + (JSC::IfElseNode::emitBytecode): + (JSC::DoWhileNode::emitBytecode): + (JSC::WhileNode::emitBytecode): + (JSC::ForNode::emitBytecode): + (JSC::ForInNode::emitBytecode): + (JSC::ReturnNode::emitBytecode): + (JSC::CaseBlockNode::emitBytecodeForBlock): + (JSC::TryNode::emitBytecode): + +2008-11-15 Geoffrey Garen + + Reviewed by Sam Weinig. + + Renamed JITCodeBuffer to AssemblerBuffer and renamed its data members + to be more like the rest of our buffer classes, with a size and a + capacity. + + Added an assert in the unchecked put case to match the test in the checked + put case. + + Changed a C-style cast to a C++-style cast. + + Renamed MAX_INSTRUCTION_SIZE to maxInstructionSize. + + * VM/CTI.cpp: + (JSC::CTI::CTI): + (JSC::CTI::compileRegExp): + * VM/Machine.cpp: + (JSC::BytecodeInterpreter::BytecodeInterpreter): + * VM/Machine.h: + (JSC::BytecodeInterpreter::assemblerBuffer): + * masm/X86Assembler.h: + (JSC::AssemblerBuffer::AssemblerBuffer): + (JSC::AssemblerBuffer::~AssemblerBuffer): + (JSC::AssemblerBuffer::ensureSpace): + (JSC::AssemblerBuffer::isAligned): + (JSC::AssemblerBuffer::putByteUnchecked): + (JSC::AssemblerBuffer::putByte): + (JSC::AssemblerBuffer::putShortUnchecked): + (JSC::AssemblerBuffer::putShort): + (JSC::AssemblerBuffer::putIntUnchecked): + (JSC::AssemblerBuffer::putInt): + (JSC::AssemblerBuffer::data): + (JSC::AssemblerBuffer::size): + (JSC::AssemblerBuffer::reset): + (JSC::AssemblerBuffer::copy): + (JSC::AssemblerBuffer::grow): + (JSC::X86Assembler::): + (JSC::X86Assembler::X86Assembler): + (JSC::X86Assembler::testl_i32r): + (JSC::X86Assembler::movl_mr): + (JSC::X86Assembler::movl_rm): + (JSC::X86Assembler::movl_i32m): + (JSC::X86Assembler::emitCall): + (JSC::X86Assembler::label): + (JSC::X86Assembler::emitUnlinkedJmp): + (JSC::X86Assembler::emitUnlinkedJne): + (JSC::X86Assembler::emitUnlinkedJe): + (JSC::X86Assembler::emitUnlinkedJl): + (JSC::X86Assembler::emitUnlinkedJb): + (JSC::X86Assembler::emitUnlinkedJle): + (JSC::X86Assembler::emitUnlinkedJbe): + (JSC::X86Assembler::emitUnlinkedJge): + (JSC::X86Assembler::emitUnlinkedJg): + (JSC::X86Assembler::emitUnlinkedJa): + (JSC::X86Assembler::emitUnlinkedJae): + (JSC::X86Assembler::emitUnlinkedJo): + (JSC::X86Assembler::emitUnlinkedJp): + (JSC::X86Assembler::emitUnlinkedJs): + (JSC::X86Assembler::link): + (JSC::X86Assembler::emitModRm_rr): + (JSC::X86Assembler::emitModRm_rm): + (JSC::X86Assembler::emitModRm_opr): + +2008-11-15 Geoffrey Garen + + Suggested by Maciej Stachowiak. + + Reverted most "opcode" => "bytecode" renames. We use "bytecode" as a + mass noun to refer to a stream of instructions. Each instruction may be + an opcode or an operand. + + * VM/CTI.cpp: + (JSC::CTI::emitCTICall): + (JSC::CTI::compileOpCall): + (JSC::CTI::compileBinaryArithOp): + (JSC::CTI::compileBinaryArithOpSlowCase): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + * VM/CTI.h: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::printStructureIDs): + (JSC::CodeBlock::dump): + (JSC::CodeBlock::derefStructureIDs): + (JSC::CodeBlock::refStructureIDs): + * VM/CodeBlock.h: + * VM/ExceptionHelpers.cpp: + (JSC::createNotAnObjectError): + * VM/Instruction.h: + (JSC::Instruction::Instruction): + (JSC::Instruction::): + * VM/Machine.cpp: + (JSC::BytecodeInterpreter::isOpcode): + (JSC::BytecodeInterpreter::throwException): + (JSC::BytecodeInterpreter::tryCachePutByID): + (JSC::BytecodeInterpreter::uncachePutByID): + (JSC::BytecodeInterpreter::tryCacheGetByID): + (JSC::BytecodeInterpreter::uncacheGetByID): + (JSC::BytecodeInterpreter::privateExecute): + (JSC::BytecodeInterpreter::tryCTICachePutByID): + (JSC::BytecodeInterpreter::tryCTICacheGetByID): + * VM/Machine.h: + (JSC::BytecodeInterpreter::getOpcode): + (JSC::BytecodeInterpreter::getOpcodeID): + (JSC::BytecodeInterpreter::isCallBytecode): + * VM/Opcode.cpp: + (JSC::): + (JSC::OpcodeStats::OpcodeStats): + (JSC::compareOpcodeIndices): + (JSC::compareOpcodePairIndices): + (JSC::OpcodeStats::~OpcodeStats): + (JSC::OpcodeStats::recordInstruction): + (JSC::OpcodeStats::resetLastInstruction): + * VM/Opcode.h: + (JSC::): + (JSC::padOpcodeName): + * VM/SamplingTool.cpp: + (JSC::ScopeSampleRecord::sample): + (JSC::SamplingTool::run): + (JSC::compareOpcodeIndicesSampling): + (JSC::SamplingTool::dump): + * VM/SamplingTool.h: + (JSC::ScopeSampleRecord::ScopeSampleRecord): + (JSC::SamplingTool::SamplingTool): + * bytecompiler/CodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): + (JSC::BytecodeGenerator::emitLabel): + (JSC::BytecodeGenerator::emitOpcode): + (JSC::BytecodeGenerator::emitJump): + (JSC::BytecodeGenerator::emitJumpIfTrue): + (JSC::BytecodeGenerator::emitJumpIfFalse): + (JSC::BytecodeGenerator::emitMove): + (JSC::BytecodeGenerator::emitUnaryOp): + (JSC::BytecodeGenerator::emitPreInc): + (JSC::BytecodeGenerator::emitPreDec): + (JSC::BytecodeGenerator::emitPostInc): + (JSC::BytecodeGenerator::emitPostDec): + (JSC::BytecodeGenerator::emitBinaryOp): + (JSC::BytecodeGenerator::emitEqualityOp): + (JSC::BytecodeGenerator::emitUnexpectedLoad): + (JSC::BytecodeGenerator::emitInstanceOf): + (JSC::BytecodeGenerator::emitResolve): + (JSC::BytecodeGenerator::emitGetScopedVar): + (JSC::BytecodeGenerator::emitPutScopedVar): + (JSC::BytecodeGenerator::emitResolveBase): + (JSC::BytecodeGenerator::emitResolveWithBase): + (JSC::BytecodeGenerator::emitResolveFunction): + (JSC::BytecodeGenerator::emitGetById): + (JSC::BytecodeGenerator::emitPutById): + (JSC::BytecodeGenerator::emitPutGetter): + (JSC::BytecodeGenerator::emitPutSetter): + (JSC::BytecodeGenerator::emitDeleteById): + (JSC::BytecodeGenerator::emitGetByVal): + (JSC::BytecodeGenerator::emitPutByVal): + (JSC::BytecodeGenerator::emitDeleteByVal): + (JSC::BytecodeGenerator::emitPutByIndex): + (JSC::BytecodeGenerator::emitNewObject): + (JSC::BytecodeGenerator::emitNewArray): + (JSC::BytecodeGenerator::emitNewFunction): + (JSC::BytecodeGenerator::emitNewRegExp): + (JSC::BytecodeGenerator::emitNewFunctionExpression): + (JSC::BytecodeGenerator::emitCall): + (JSC::BytecodeGenerator::emitReturn): + (JSC::BytecodeGenerator::emitUnaryNoDstOp): + (JSC::BytecodeGenerator::emitConstruct): + (JSC::BytecodeGenerator::emitPopScope): + (JSC::BytecodeGenerator::emitDebugHook): + (JSC::BytecodeGenerator::emitComplexJumpScopes): + (JSC::BytecodeGenerator::emitJumpScopes): + (JSC::BytecodeGenerator::emitNextPropertyName): + (JSC::BytecodeGenerator::emitCatch): + (JSC::BytecodeGenerator::emitNewError): + (JSC::BytecodeGenerator::emitJumpSubroutine): + (JSC::BytecodeGenerator::emitSubroutineReturn): + (JSC::BytecodeGenerator::emitPushNewScope): + (JSC::BytecodeGenerator::beginSwitch): + * bytecompiler/CodeGenerator.h: + * jsc.cpp: + (runWithScripts): + * masm/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::emitModRm_opr): + (JSC::X86Assembler::emitModRm_opr_Unchecked): + (JSC::X86Assembler::emitModRm_opm): + (JSC::X86Assembler::emitModRm_opm_Unchecked): + (JSC::X86Assembler::emitModRm_opmsib): + * parser/Nodes.cpp: + (JSC::UnaryOpNode::emitBytecode): + (JSC::BinaryOpNode::emitBytecode): + (JSC::ReverseBinaryOpNode::emitBytecode): + (JSC::ThrowableBinaryOpNode::emitBytecode): + (JSC::emitReadModifyAssignment): + (JSC::ScopeNode::ScopeNode): + * parser/Nodes.h: + (JSC::UnaryPlusNode::): + (JSC::NegateNode::): + (JSC::BitwiseNotNode::): + (JSC::LogicalNotNode::): + (JSC::MultNode::): + (JSC::DivNode::): + (JSC::ModNode::): + (JSC::AddNode::): + (JSC::SubNode::): + (JSC::LeftShiftNode::): + (JSC::RightShiftNode::): + (JSC::UnsignedRightShiftNode::): + (JSC::LessNode::): + (JSC::GreaterNode::): + (JSC::LessEqNode::): + (JSC::GreaterEqNode::): + (JSC::InstanceOfNode::): + (JSC::InNode::): + (JSC::EqualNode::): + (JSC::NotEqualNode::): + (JSC::StrictEqualNode::): + (JSC::NotStrictEqualNode::): + (JSC::BitAndNode::): + (JSC::BitOrNode::): + (JSC::BitXOrNode::): + * runtime/StructureID.cpp: + (JSC::StructureID::fromDictionaryTransition): + * wtf/Platform.h: + +2008-11-15 Geoffrey Garen + + Reviewed by Sam Weinig. + + Renames: + + CodeGenerator => BytecodeGenerator + emitCodeForBlock => emitBytecodeForBlock + generatedByteCode => generatedBytecode + generateCode => generateBytecode + + * JavaScriptCore.exp: + * bytecompiler/CodeGenerator.cpp: + (JSC::BytecodeGenerator::setDumpsGeneratedCode): + (JSC::BytecodeGenerator::generate): + (JSC::BytecodeGenerator::addVar): + (JSC::BytecodeGenerator::addGlobalVar): + (JSC::BytecodeGenerator::allocateConstants): + (JSC::BytecodeGenerator::BytecodeGenerator): + (JSC::BytecodeGenerator::addParameter): + (JSC::BytecodeGenerator::registerFor): + (JSC::BytecodeGenerator::constRegisterFor): + (JSC::BytecodeGenerator::isLocal): + (JSC::BytecodeGenerator::isLocalConstant): + (JSC::BytecodeGenerator::newRegister): + (JSC::BytecodeGenerator::newTemporary): + (JSC::BytecodeGenerator::highestUsedRegister): + (JSC::BytecodeGenerator::newLabelScope): + (JSC::BytecodeGenerator::newLabel): + (JSC::BytecodeGenerator::emitLabel): + (JSC::BytecodeGenerator::emitBytecode): + (JSC::BytecodeGenerator::retrieveLastBinaryOp): + (JSC::BytecodeGenerator::retrieveLastUnaryOp): + (JSC::BytecodeGenerator::rewindBinaryOp): + (JSC::BytecodeGenerator::rewindUnaryOp): + (JSC::BytecodeGenerator::emitJump): + (JSC::BytecodeGenerator::emitJumpIfTrue): + (JSC::BytecodeGenerator::emitJumpIfFalse): + (JSC::BytecodeGenerator::addConstant): + (JSC::BytecodeGenerator::addUnexpectedConstant): + (JSC::BytecodeGenerator::addRegExp): + (JSC::BytecodeGenerator::emitMove): + (JSC::BytecodeGenerator::emitUnaryOp): + (JSC::BytecodeGenerator::emitPreInc): + (JSC::BytecodeGenerator::emitPreDec): + (JSC::BytecodeGenerator::emitPostInc): + (JSC::BytecodeGenerator::emitPostDec): + (JSC::BytecodeGenerator::emitBinaryOp): + (JSC::BytecodeGenerator::emitEqualityOp): + (JSC::BytecodeGenerator::emitLoad): + (JSC::BytecodeGenerator::emitUnexpectedLoad): + (JSC::BytecodeGenerator::findScopedProperty): + (JSC::BytecodeGenerator::emitInstanceOf): + (JSC::BytecodeGenerator::emitResolve): + (JSC::BytecodeGenerator::emitGetScopedVar): + (JSC::BytecodeGenerator::emitPutScopedVar): + (JSC::BytecodeGenerator::emitResolveBase): + (JSC::BytecodeGenerator::emitResolveWithBase): + (JSC::BytecodeGenerator::emitResolveFunction): + (JSC::BytecodeGenerator::emitGetById): + (JSC::BytecodeGenerator::emitPutById): + (JSC::BytecodeGenerator::emitPutGetter): + (JSC::BytecodeGenerator::emitPutSetter): + (JSC::BytecodeGenerator::emitDeleteById): + (JSC::BytecodeGenerator::emitGetByVal): + (JSC::BytecodeGenerator::emitPutByVal): + (JSC::BytecodeGenerator::emitDeleteByVal): + (JSC::BytecodeGenerator::emitPutByIndex): + (JSC::BytecodeGenerator::emitNewObject): + (JSC::BytecodeGenerator::emitNewArray): + (JSC::BytecodeGenerator::emitNewFunction): + (JSC::BytecodeGenerator::emitNewRegExp): + (JSC::BytecodeGenerator::emitNewFunctionExpression): + (JSC::BytecodeGenerator::emitCall): + (JSC::BytecodeGenerator::emitCallEval): + (JSC::BytecodeGenerator::emitReturn): + (JSC::BytecodeGenerator::emitUnaryNoDstOp): + (JSC::BytecodeGenerator::emitConstruct): + (JSC::BytecodeGenerator::emitPushScope): + (JSC::BytecodeGenerator::emitPopScope): + (JSC::BytecodeGenerator::emitDebugHook): + (JSC::BytecodeGenerator::pushFinallyContext): + (JSC::BytecodeGenerator::popFinallyContext): + (JSC::BytecodeGenerator::breakTarget): + (JSC::BytecodeGenerator::continueTarget): + (JSC::BytecodeGenerator::emitComplexJumpScopes): + (JSC::BytecodeGenerator::emitJumpScopes): + (JSC::BytecodeGenerator::emitNextPropertyName): + (JSC::BytecodeGenerator::emitCatch): + (JSC::BytecodeGenerator::emitNewError): + (JSC::BytecodeGenerator::emitJumpSubroutine): + (JSC::BytecodeGenerator::emitSubroutineReturn): + (JSC::BytecodeGenerator::emitPushNewScope): + (JSC::BytecodeGenerator::beginSwitch): + (JSC::BytecodeGenerator::endSwitch): + (JSC::BytecodeGenerator::emitThrowExpressionTooDeepException): + * bytecompiler/CodeGenerator.h: + * jsc.cpp: + (runWithScripts): + * parser/Nodes.cpp: + (JSC::ThrowableExpressionData::emitThrowError): + (JSC::NullNode::emitBytecode): + (JSC::BooleanNode::emitBytecode): + (JSC::NumberNode::emitBytecode): + (JSC::StringNode::emitBytecode): + (JSC::RegExpNode::emitBytecode): + (JSC::ThisNode::emitBytecode): + (JSC::ResolveNode::isPure): + (JSC::ResolveNode::emitBytecode): + (JSC::ArrayNode::emitBytecode): + (JSC::ObjectLiteralNode::emitBytecode): + (JSC::PropertyListNode::emitBytecode): + (JSC::BracketAccessorNode::emitBytecode): + (JSC::DotAccessorNode::emitBytecode): + (JSC::ArgumentListNode::emitBytecode): + (JSC::NewExprNode::emitBytecode): + (JSC::EvalFunctionCallNode::emitBytecode): + (JSC::FunctionCallValueNode::emitBytecode): + (JSC::FunctionCallResolveNode::emitBytecode): + (JSC::FunctionCallBracketNode::emitBytecode): + (JSC::FunctionCallDotNode::emitBytecode): + (JSC::emitPreIncOrDec): + (JSC::emitPostIncOrDec): + (JSC::PostfixResolveNode::emitBytecode): + (JSC::PostfixBracketNode::emitBytecode): + (JSC::PostfixDotNode::emitBytecode): + (JSC::PostfixErrorNode::emitBytecode): + (JSC::DeleteResolveNode::emitBytecode): + (JSC::DeleteBracketNode::emitBytecode): + (JSC::DeleteDotNode::emitBytecode): + (JSC::DeleteValueNode::emitBytecode): + (JSC::VoidNode::emitBytecode): + (JSC::TypeOfResolveNode::emitBytecode): + (JSC::TypeOfValueNode::emitBytecode): + (JSC::PrefixResolveNode::emitBytecode): + (JSC::PrefixBracketNode::emitBytecode): + (JSC::PrefixDotNode::emitBytecode): + (JSC::PrefixErrorNode::emitBytecode): + (JSC::UnaryOpNode::emitBytecode): + (JSC::BinaryOpNode::emitBytecode): + (JSC::EqualNode::emitBytecode): + (JSC::StrictEqualNode::emitBytecode): + (JSC::ReverseBinaryOpNode::emitBytecode): + (JSC::ThrowableBinaryOpNode::emitBytecode): + (JSC::InstanceOfNode::emitBytecode): + (JSC::LogicalOpNode::emitBytecode): + (JSC::ConditionalNode::emitBytecode): + (JSC::emitReadModifyAssignment): + (JSC::ReadModifyResolveNode::emitBytecode): + (JSC::AssignResolveNode::emitBytecode): + (JSC::AssignDotNode::emitBytecode): + (JSC::ReadModifyDotNode::emitBytecode): + (JSC::AssignErrorNode::emitBytecode): + (JSC::AssignBracketNode::emitBytecode): + (JSC::ReadModifyBracketNode::emitBytecode): + (JSC::CommaNode::emitBytecode): + (JSC::ConstDeclNode::emitCodeSingle): + (JSC::ConstDeclNode::emitBytecode): + (JSC::ConstStatementNode::emitBytecode): + (JSC::statementListEmitCode): + (JSC::BlockNode::emitBytecode): + (JSC::EmptyStatementNode::emitBytecode): + (JSC::DebuggerStatementNode::emitBytecode): + (JSC::ExprStatementNode::emitBytecode): + (JSC::VarStatementNode::emitBytecode): + (JSC::IfNode::emitBytecode): + (JSC::IfElseNode::emitBytecode): + (JSC::DoWhileNode::emitBytecode): + (JSC::WhileNode::emitBytecode): + (JSC::ForNode::emitBytecode): + (JSC::ForInNode::emitBytecode): + (JSC::ContinueNode::emitBytecode): + (JSC::BreakNode::emitBytecode): + (JSC::ReturnNode::emitBytecode): + (JSC::WithNode::emitBytecode): + (JSC::CaseBlockNode::emitBytecodeForBlock): + (JSC::SwitchNode::emitBytecode): + (JSC::LabelNode::emitBytecode): + (JSC::ThrowNode::emitBytecode): + (JSC::TryNode::emitBytecode): + (JSC::EvalNode::emitBytecode): + (JSC::EvalNode::generateBytecode): + (JSC::FunctionBodyNode::generateBytecode): + (JSC::FunctionBodyNode::emitBytecode): + (JSC::ProgramNode::emitBytecode): + (JSC::ProgramNode::generateBytecode): + (JSC::FuncDeclNode::emitBytecode): + (JSC::FuncExprNode::emitBytecode): + * parser/Nodes.h: + (JSC::ExpressionNode::): + (JSC::BooleanNode::): + (JSC::NumberNode::): + (JSC::StringNode::): + (JSC::ProgramNode::): + (JSC::EvalNode::): + (JSC::FunctionBodyNode::): + * runtime/Arguments.h: + (JSC::Arguments::getArgumentsData): + (JSC::JSActivation::copyRegisters): + * runtime/JSActivation.cpp: + (JSC::JSActivation::mark): + * runtime/JSActivation.h: + (JSC::JSActivation::JSActivationData::JSActivationData): + * runtime/JSFunction.cpp: + (JSC::JSFunction::~JSFunction): + +2008-11-15 Geoffrey Garen + + Reviewed by Sam Weinig. + + Renamed all forms of "byte code" "opcode" "op code" "code" "bitcode" + etc. to "bytecode". + + * VM/CTI.cpp: + (JSC::CTI::printBytecodeOperandTypes): + (JSC::CTI::emitAllocateNumber): + (JSC::CTI::emitNakedCall): + (JSC::CTI::emitNakedFastCall): + (JSC::CTI::emitCTICall): + (JSC::CTI::emitJumpSlowCaseIfNotJSCell): + (JSC::CTI::emitJumpSlowCaseIfNotImmNum): + (JSC::CTI::emitJumpSlowCaseIfNotImmNums): + (JSC::CTI::emitFastArithIntToImmOrSlowCase): + (JSC::CTI::compileOpCall): + (JSC::CTI::emitSlowScriptCheck): + (JSC::CTI::compileBinaryArithOp): + (JSC::CTI::compileBinaryArithOpSlowCase): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + * VM/CTI.h: + (JSC::CallRecord::CallRecord): + (JSC::SwitchRecord::SwitchRecord): + * VM/CodeBlock.cpp: + (JSC::CodeBlock::printStructureIDs): + (JSC::CodeBlock::dump): + (JSC::CodeBlock::~CodeBlock): + (JSC::CodeBlock::derefStructureIDs): + (JSC::CodeBlock::refStructureIDs): + * VM/CodeBlock.h: + (JSC::StructureStubInfo::StructureStubInfo): + * VM/ExceptionHelpers.cpp: + (JSC::createNotAnObjectError): + * VM/Instruction.h: + (JSC::Instruction::Instruction): + (JSC::Instruction::): + * VM/Machine.cpp: + (JSC::BytecodeInterpreter::isBytecode): + (JSC::BytecodeInterpreter::throwException): + (JSC::BytecodeInterpreter::execute): + (JSC::BytecodeInterpreter::tryCachePutByID): + (JSC::BytecodeInterpreter::uncachePutByID): + (JSC::BytecodeInterpreter::tryCacheGetByID): + (JSC::BytecodeInterpreter::uncacheGetByID): + (JSC::BytecodeInterpreter::privateExecute): + (JSC::BytecodeInterpreter::tryCTICachePutByID): + (JSC::BytecodeInterpreter::tryCTICacheGetByID): + (JSC::BytecodeInterpreter::cti_op_call_JSFunction): + (JSC::BytecodeInterpreter::cti_vm_dontLazyLinkCall): + (JSC::BytecodeInterpreter::cti_vm_lazyLinkCall): + * VM/Machine.h: + (JSC::BytecodeInterpreter::getBytecode): + (JSC::BytecodeInterpreter::getBytecodeID): + (JSC::BytecodeInterpreter::isCallBytecode): + * VM/Opcode.cpp: + (JSC::): + (JSC::BytecodeStats::BytecodeStats): + (JSC::compareBytecodeIndices): + (JSC::compareBytecodePairIndices): + (JSC::BytecodeStats::~BytecodeStats): + (JSC::BytecodeStats::recordInstruction): + (JSC::BytecodeStats::resetLastInstruction): + * VM/Opcode.h: + (JSC::): + (JSC::padBytecodeName): + * VM/SamplingTool.cpp: + (JSC::ScopeSampleRecord::sample): + (JSC::SamplingTool::run): + (JSC::compareBytecodeIndicesSampling): + (JSC::SamplingTool::dump): + * VM/SamplingTool.h: + (JSC::ScopeSampleRecord::ScopeSampleRecord): + (JSC::SamplingTool::SamplingTool): + * bytecompiler/CodeGenerator.cpp: + (JSC::CodeGenerator::generate): + (JSC::CodeGenerator::CodeGenerator): + (JSC::CodeGenerator::emitLabel): + (JSC::CodeGenerator::emitBytecode): + (JSC::CodeGenerator::emitJump): + (JSC::CodeGenerator::emitJumpIfTrue): + (JSC::CodeGenerator::emitJumpIfFalse): + (JSC::CodeGenerator::emitMove): + (JSC::CodeGenerator::emitUnaryOp): + (JSC::CodeGenerator::emitPreInc): + (JSC::CodeGenerator::emitPreDec): + (JSC::CodeGenerator::emitPostInc): + (JSC::CodeGenerator::emitPostDec): + (JSC::CodeGenerator::emitBinaryOp): + (JSC::CodeGenerator::emitEqualityOp): + (JSC::CodeGenerator::emitUnexpectedLoad): + (JSC::CodeGenerator::emitInstanceOf): + (JSC::CodeGenerator::emitResolve): + (JSC::CodeGenerator::emitGetScopedVar): + (JSC::CodeGenerator::emitPutScopedVar): + (JSC::CodeGenerator::emitResolveBase): + (JSC::CodeGenerator::emitResolveWithBase): + (JSC::CodeGenerator::emitResolveFunction): + (JSC::CodeGenerator::emitGetById): + (JSC::CodeGenerator::emitPutById): + (JSC::CodeGenerator::emitPutGetter): + (JSC::CodeGenerator::emitPutSetter): + (JSC::CodeGenerator::emitDeleteById): + (JSC::CodeGenerator::emitGetByVal): + (JSC::CodeGenerator::emitPutByVal): + (JSC::CodeGenerator::emitDeleteByVal): + (JSC::CodeGenerator::emitPutByIndex): + (JSC::CodeGenerator::emitNewObject): + (JSC::CodeGenerator::emitNewArray): + (JSC::CodeGenerator::emitNewFunction): + (JSC::CodeGenerator::emitNewRegExp): + (JSC::CodeGenerator::emitNewFunctionExpression): + (JSC::CodeGenerator::emitCall): + (JSC::CodeGenerator::emitReturn): + (JSC::CodeGenerator::emitUnaryNoDstOp): + (JSC::CodeGenerator::emitConstruct): + (JSC::CodeGenerator::emitPopScope): + (JSC::CodeGenerator::emitDebugHook): + (JSC::CodeGenerator::emitComplexJumpScopes): + (JSC::CodeGenerator::emitJumpScopes): + (JSC::CodeGenerator::emitNextPropertyName): + (JSC::CodeGenerator::emitCatch): + (JSC::CodeGenerator::emitNewError): + (JSC::CodeGenerator::emitJumpSubroutine): + (JSC::CodeGenerator::emitSubroutineReturn): + (JSC::CodeGenerator::emitPushNewScope): + (JSC::CodeGenerator::beginSwitch): + (JSC::CodeGenerator::endSwitch): + * bytecompiler/CodeGenerator.h: + (JSC::CodeGenerator::emitNode): + * jsc.cpp: + (runWithScripts): + * masm/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::emitModRm_opr): + (JSC::X86Assembler::emitModRm_opr_Unchecked): + (JSC::X86Assembler::emitModRm_opm): + (JSC::X86Assembler::emitModRm_opm_Unchecked): + (JSC::X86Assembler::emitModRm_opmsib): + * parser/Nodes.cpp: + (JSC::NullNode::emitBytecode): + (JSC::BooleanNode::emitBytecode): + (JSC::NumberNode::emitBytecode): + (JSC::StringNode::emitBytecode): + (JSC::RegExpNode::emitBytecode): + (JSC::ThisNode::emitBytecode): + (JSC::ResolveNode::emitBytecode): + (JSC::ArrayNode::emitBytecode): + (JSC::ObjectLiteralNode::emitBytecode): + (JSC::PropertyListNode::emitBytecode): + (JSC::BracketAccessorNode::emitBytecode): + (JSC::DotAccessorNode::emitBytecode): + (JSC::ArgumentListNode::emitBytecode): + (JSC::NewExprNode::emitBytecode): + (JSC::EvalFunctionCallNode::emitBytecode): + (JSC::FunctionCallValueNode::emitBytecode): + (JSC::FunctionCallResolveNode::emitBytecode): + (JSC::FunctionCallBracketNode::emitBytecode): + (JSC::FunctionCallDotNode::emitBytecode): + (JSC::PostfixResolveNode::emitBytecode): + (JSC::PostfixBracketNode::emitBytecode): + (JSC::PostfixDotNode::emitBytecode): + (JSC::PostfixErrorNode::emitBytecode): + (JSC::DeleteResolveNode::emitBytecode): + (JSC::DeleteBracketNode::emitBytecode): + (JSC::DeleteDotNode::emitBytecode): + (JSC::DeleteValueNode::emitBytecode): + (JSC::VoidNode::emitBytecode): + (JSC::TypeOfResolveNode::emitBytecode): + (JSC::TypeOfValueNode::emitBytecode): + (JSC::PrefixResolveNode::emitBytecode): + (JSC::PrefixBracketNode::emitBytecode): + (JSC::PrefixDotNode::emitBytecode): + (JSC::PrefixErrorNode::emitBytecode): + (JSC::UnaryOpNode::emitBytecode): + (JSC::BinaryOpNode::emitBytecode): + (JSC::EqualNode::emitBytecode): + (JSC::StrictEqualNode::emitBytecode): + (JSC::ReverseBinaryOpNode::emitBytecode): + (JSC::ThrowableBinaryOpNode::emitBytecode): + (JSC::InstanceOfNode::emitBytecode): + (JSC::LogicalOpNode::emitBytecode): + (JSC::ConditionalNode::emitBytecode): + (JSC::emitReadModifyAssignment): + (JSC::ReadModifyResolveNode::emitBytecode): + (JSC::AssignResolveNode::emitBytecode): + (JSC::AssignDotNode::emitBytecode): + (JSC::ReadModifyDotNode::emitBytecode): + (JSC::AssignErrorNode::emitBytecode): + (JSC::AssignBracketNode::emitBytecode): + (JSC::ReadModifyBracketNode::emitBytecode): + (JSC::CommaNode::emitBytecode): + (JSC::ConstDeclNode::emitBytecode): + (JSC::ConstStatementNode::emitBytecode): + (JSC::BlockNode::emitBytecode): + (JSC::EmptyStatementNode::emitBytecode): + (JSC::DebuggerStatementNode::emitBytecode): + (JSC::ExprStatementNode::emitBytecode): + (JSC::VarStatementNode::emitBytecode): + (JSC::IfNode::emitBytecode): + (JSC::IfElseNode::emitBytecode): + (JSC::DoWhileNode::emitBytecode): + (JSC::WhileNode::emitBytecode): + (JSC::ForNode::emitBytecode): + (JSC::ForInNode::emitBytecode): + (JSC::ContinueNode::emitBytecode): + (JSC::BreakNode::emitBytecode): + (JSC::ReturnNode::emitBytecode): + (JSC::WithNode::emitBytecode): + (JSC::SwitchNode::emitBytecode): + (JSC::LabelNode::emitBytecode): + (JSC::ThrowNode::emitBytecode): + (JSC::TryNode::emitBytecode): + (JSC::ScopeNode::ScopeNode): + (JSC::EvalNode::emitBytecode): + (JSC::FunctionBodyNode::emitBytecode): + (JSC::ProgramNode::emitBytecode): + (JSC::FuncDeclNode::emitBytecode): + (JSC::FuncExprNode::emitBytecode): + * parser/Nodes.h: + (JSC::UnaryPlusNode::): + (JSC::NegateNode::): + (JSC::BitwiseNotNode::): + (JSC::LogicalNotNode::): + (JSC::MultNode::): + (JSC::DivNode::): + (JSC::ModNode::): + (JSC::AddNode::): + (JSC::SubNode::): + (JSC::LeftShiftNode::): + (JSC::RightShiftNode::): + (JSC::UnsignedRightShiftNode::): + (JSC::LessNode::): + (JSC::GreaterNode::): + (JSC::LessEqNode::): + (JSC::GreaterEqNode::): + (JSC::InstanceOfNode::): + (JSC::InNode::): + (JSC::EqualNode::): + (JSC::NotEqualNode::): + (JSC::StrictEqualNode::): + (JSC::NotStrictEqualNode::): + (JSC::BitAndNode::): + (JSC::BitOrNode::): + (JSC::BitXOrNode::): + (JSC::ProgramNode::): + (JSC::EvalNode::): + (JSC::FunctionBodyNode::): + * runtime/JSNotAnObject.h: + * runtime/StructureID.cpp: + (JSC::StructureID::fromDictionaryTransition): + * wtf/Platform.h: + +2008-11-15 Geoffrey Garen + + Reviewed by Sam Weinig. + + Renamed Machine to BytecodeInterpreter. + + Nixed the Interpreter class, and changed its two functions to stand-alone + functions. + + * JavaScriptCore.exp: + * VM/CTI.cpp: + (JSC::): + (JSC::CTI::emitCTICall): + (JSC::CTI::CTI): + (JSC::CTI::compileOpCall): + (JSC::CTI::emitSlowScriptCheck): + (JSC::CTI::compileBinaryArithOpSlowCase): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + (JSC::CTI::privateCompileGetByIdSelf): + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + (JSC::CTI::privateCompilePutByIdReplace): + (JSC::CTI::privateCompilePutByIdTransition): + (JSC::CTI::privateCompileCTIMachineTrampolines): + (JSC::CTI::freeCTIMachineTrampolines): + (JSC::CTI::patchGetByIdSelf): + (JSC::CTI::patchPutByIdReplace): + (JSC::CTI::privateCompilePatchGetArrayLength): + (JSC::CTI::compileRegExp): + * VM/CTI.h: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::printStructureIDs): + (JSC::CodeBlock::dump): + (JSC::CodeBlock::derefStructureIDs): + (JSC::CodeBlock::refStructureIDs): + * VM/ExceptionHelpers.cpp: + (JSC::createNotAnObjectError): + * VM/Machine.cpp: + (JSC::jsLess): + (JSC::jsLessEq): + (JSC::BytecodeInterpreter::resolve): + (JSC::BytecodeInterpreter::resolveSkip): + (JSC::BytecodeInterpreter::resolveGlobal): + (JSC::BytecodeInterpreter::resolveBase): + (JSC::BytecodeInterpreter::resolveBaseAndProperty): + (JSC::BytecodeInterpreter::resolveBaseAndFunc): + (JSC::BytecodeInterpreter::slideRegisterWindowForCall): + (JSC::BytecodeInterpreter::callEval): + (JSC::BytecodeInterpreter::BytecodeInterpreter): + (JSC::BytecodeInterpreter::initialize): + (JSC::BytecodeInterpreter::~BytecodeInterpreter): + (JSC::BytecodeInterpreter::dumpCallFrame): + (JSC::BytecodeInterpreter::dumpRegisters): + (JSC::BytecodeInterpreter::isOpcode): + (JSC::BytecodeInterpreter::unwindCallFrame): + (JSC::BytecodeInterpreter::throwException): + (JSC::BytecodeInterpreter::execute): + (JSC::BytecodeInterpreter::debug): + (JSC::BytecodeInterpreter::resetTimeoutCheck): + (JSC::BytecodeInterpreter::checkTimeout): + (JSC::BytecodeInterpreter::createExceptionScope): + (JSC::BytecodeInterpreter::tryCachePutByID): + (JSC::BytecodeInterpreter::uncachePutByID): + (JSC::BytecodeInterpreter::tryCacheGetByID): + (JSC::BytecodeInterpreter::uncacheGetByID): + (JSC::BytecodeInterpreter::privateExecute): + (JSC::BytecodeInterpreter::retrieveArguments): + (JSC::BytecodeInterpreter::retrieveCaller): + (JSC::BytecodeInterpreter::retrieveLastCaller): + (JSC::BytecodeInterpreter::findFunctionCallFrame): + (JSC::BytecodeInterpreter::tryCTICachePutByID): + (JSC::BytecodeInterpreter::tryCTICacheGetByID): + (JSC::BytecodeInterpreter::cti_op_convert_this): + (JSC::BytecodeInterpreter::cti_op_end): + (JSC::BytecodeInterpreter::cti_op_add): + (JSC::BytecodeInterpreter::cti_op_pre_inc): + (JSC::BytecodeInterpreter::cti_timeout_check): + (JSC::BytecodeInterpreter::cti_register_file_check): + (JSC::BytecodeInterpreter::cti_op_loop_if_less): + (JSC::BytecodeInterpreter::cti_op_loop_if_lesseq): + (JSC::BytecodeInterpreter::cti_op_new_object): + (JSC::BytecodeInterpreter::cti_op_put_by_id): + (JSC::BytecodeInterpreter::cti_op_put_by_id_second): + (JSC::BytecodeInterpreter::cti_op_put_by_id_generic): + (JSC::BytecodeInterpreter::cti_op_put_by_id_fail): + (JSC::BytecodeInterpreter::cti_op_get_by_id): + (JSC::BytecodeInterpreter::cti_op_get_by_id_second): + (JSC::BytecodeInterpreter::cti_op_get_by_id_generic): + (JSC::BytecodeInterpreter::cti_op_get_by_id_fail): + (JSC::BytecodeInterpreter::cti_op_instanceof): + (JSC::BytecodeInterpreter::cti_op_del_by_id): + (JSC::BytecodeInterpreter::cti_op_mul): + (JSC::BytecodeInterpreter::cti_op_new_func): + (JSC::BytecodeInterpreter::cti_op_call_JSFunction): + (JSC::BytecodeInterpreter::cti_op_call_arityCheck): + (JSC::BytecodeInterpreter::cti_vm_dontLazyLinkCall): + (JSC::BytecodeInterpreter::cti_vm_lazyLinkCall): + (JSC::BytecodeInterpreter::cti_op_push_activation): + (JSC::BytecodeInterpreter::cti_op_call_NotJSFunction): + (JSC::BytecodeInterpreter::cti_op_create_arguments): + (JSC::BytecodeInterpreter::cti_op_create_arguments_no_params): + (JSC::BytecodeInterpreter::cti_op_tear_off_activation): + (JSC::BytecodeInterpreter::cti_op_tear_off_arguments): + (JSC::BytecodeInterpreter::cti_op_profile_will_call): + (JSC::BytecodeInterpreter::cti_op_profile_did_call): + (JSC::BytecodeInterpreter::cti_op_ret_scopeChain): + (JSC::BytecodeInterpreter::cti_op_new_array): + (JSC::BytecodeInterpreter::cti_op_resolve): + (JSC::BytecodeInterpreter::cti_op_construct_JSConstruct): + (JSC::BytecodeInterpreter::cti_op_construct_NotJSConstruct): + (JSC::BytecodeInterpreter::cti_op_get_by_val): + (JSC::BytecodeInterpreter::cti_op_resolve_func): + (JSC::BytecodeInterpreter::cti_op_sub): + (JSC::BytecodeInterpreter::cti_op_put_by_val): + (JSC::BytecodeInterpreter::cti_op_put_by_val_array): + (JSC::BytecodeInterpreter::cti_op_lesseq): + (JSC::BytecodeInterpreter::cti_op_loop_if_true): + (JSC::BytecodeInterpreter::cti_op_negate): + (JSC::BytecodeInterpreter::cti_op_resolve_base): + (JSC::BytecodeInterpreter::cti_op_resolve_skip): + (JSC::BytecodeInterpreter::cti_op_resolve_global): + (JSC::BytecodeInterpreter::cti_op_div): + (JSC::BytecodeInterpreter::cti_op_pre_dec): + (JSC::BytecodeInterpreter::cti_op_jless): + (JSC::BytecodeInterpreter::cti_op_not): + (JSC::BytecodeInterpreter::cti_op_jtrue): + (JSC::BytecodeInterpreter::cti_op_post_inc): + (JSC::BytecodeInterpreter::cti_op_eq): + (JSC::BytecodeInterpreter::cti_op_lshift): + (JSC::BytecodeInterpreter::cti_op_bitand): + (JSC::BytecodeInterpreter::cti_op_rshift): + (JSC::BytecodeInterpreter::cti_op_bitnot): + (JSC::BytecodeInterpreter::cti_op_resolve_with_base): + (JSC::BytecodeInterpreter::cti_op_new_func_exp): + (JSC::BytecodeInterpreter::cti_op_mod): + (JSC::BytecodeInterpreter::cti_op_less): + (JSC::BytecodeInterpreter::cti_op_neq): + (JSC::BytecodeInterpreter::cti_op_post_dec): + (JSC::BytecodeInterpreter::cti_op_urshift): + (JSC::BytecodeInterpreter::cti_op_bitxor): + (JSC::BytecodeInterpreter::cti_op_new_regexp): + (JSC::BytecodeInterpreter::cti_op_bitor): + (JSC::BytecodeInterpreter::cti_op_call_eval): + (JSC::BytecodeInterpreter::cti_op_throw): + (JSC::BytecodeInterpreter::cti_op_get_pnames): + (JSC::BytecodeInterpreter::cti_op_next_pname): + (JSC::BytecodeInterpreter::cti_op_push_scope): + (JSC::BytecodeInterpreter::cti_op_pop_scope): + (JSC::BytecodeInterpreter::cti_op_typeof): + (JSC::BytecodeInterpreter::cti_op_is_undefined): + (JSC::BytecodeInterpreter::cti_op_is_boolean): + (JSC::BytecodeInterpreter::cti_op_is_number): + (JSC::BytecodeInterpreter::cti_op_is_string): + (JSC::BytecodeInterpreter::cti_op_is_object): + (JSC::BytecodeInterpreter::cti_op_is_function): + (JSC::BytecodeInterpreter::cti_op_stricteq): + (JSC::BytecodeInterpreter::cti_op_nstricteq): + (JSC::BytecodeInterpreter::cti_op_to_jsnumber): + (JSC::BytecodeInterpreter::cti_op_in): + (JSC::BytecodeInterpreter::cti_op_push_new_scope): + (JSC::BytecodeInterpreter::cti_op_jmp_scopes): + (JSC::BytecodeInterpreter::cti_op_put_by_index): + (JSC::BytecodeInterpreter::cti_op_switch_imm): + (JSC::BytecodeInterpreter::cti_op_switch_char): + (JSC::BytecodeInterpreter::cti_op_switch_string): + (JSC::BytecodeInterpreter::cti_op_del_by_val): + (JSC::BytecodeInterpreter::cti_op_put_getter): + (JSC::BytecodeInterpreter::cti_op_put_setter): + (JSC::BytecodeInterpreter::cti_op_new_error): + (JSC::BytecodeInterpreter::cti_op_debug): + (JSC::BytecodeInterpreter::cti_vm_throw): + * VM/Machine.h: + * VM/Register.h: + * VM/SamplingTool.cpp: + (JSC::SamplingTool::run): + * VM/SamplingTool.h: + (JSC::SamplingTool::SamplingTool): + * bytecompiler/CodeGenerator.cpp: + (JSC::CodeGenerator::generate): + (JSC::CodeGenerator::CodeGenerator): + (JSC::CodeGenerator::emitOpcode): + * debugger/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::evaluate): + * jsc.cpp: + (runWithScripts): + * parser/Nodes.cpp: + (JSC::ScopeNode::ScopeNode): + * profiler/ProfileGenerator.cpp: + (JSC::ProfileGenerator::addParentForConsoleStart): + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncPop): + (JSC::arrayProtoFuncPush): + * runtime/Collector.cpp: + (JSC::Heap::collect): + * runtime/ExecState.h: + (JSC::ExecState::interpreter): + * runtime/FunctionPrototype.cpp: + (JSC::functionProtoFuncApply): + * runtime/Interpreter.cpp: + (JSC::Interpreter::evaluate): + * runtime/JSCell.h: + * runtime/JSFunction.cpp: + (JSC::JSFunction::call): + (JSC::JSFunction::argumentsGetter): + (JSC::JSFunction::callerGetter): + (JSC::JSFunction::construct): + * runtime/JSFunction.h: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::~JSGlobalData): + * runtime/JSGlobalData.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::~JSGlobalObject): + (JSC::JSGlobalObject::setTimeoutTime): + (JSC::JSGlobalObject::startTimeoutCheck): + (JSC::JSGlobalObject::stopTimeoutCheck): + (JSC::JSGlobalObject::mark): + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncEval): + * runtime/JSString.h: + * runtime/RegExp.cpp: + (JSC::RegExp::RegExp): + +2008-11-15 Maciej Stachowiak + + Reviewed by Sam Weinig. + + - Remove SymbolTable from FunctionBodyNode and move it to CodeBlock + + It's not needed for functions that have never been executed, so no + need to waste the memory. Saves ~4M on membuster after 30 pages. + + * VM/CodeBlock.h: + * VM/Machine.cpp: + (JSC::Machine::retrieveArguments): + * parser/Nodes.cpp: + (JSC::EvalNode::generateCode): + (JSC::FunctionBodyNode::generateCode): + * parser/Nodes.h: + * runtime/JSActivation.h: + (JSC::JSActivation::JSActivationData::JSActivationData): + +2008-11-14 Cameron Zwarich + + Reviewed by Darin Adler. + + Bug 22259: Make all opcodes use eax as their final result register + + + Change one case of op_add (and the corresponding slow case) to use eax + rather than edx. Also, change the order in which the two results of + resolve_func and resolve_base are emitted so that the retrieved value is + put last into eax. + + This gives no performance change on SunSpider or the V8 benchmark suite + when run in either harness. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + +2008-11-14 Gavin Barraclough + + Reviewed by Geoff Garen. + + Geoff has this wacky notion that emitGetArg and emitPutArg should be related to + doing the same thing. Crazy. + + Rename the methods for accessing virtual registers to say 'VirtualRegister' in the + name, and those for setting up the arguments for CTI methods to contain 'CTIArg'. + + * VM/CTI.cpp: + (JSC::CTI::emitGetVirtualRegister): + (JSC::CTI::emitGetVirtualRegisters): + (JSC::CTI::emitPutCTIArgFromVirtualRegister): + (JSC::CTI::emitPutCTIArg): + (JSC::CTI::emitGetCTIArg): + (JSC::CTI::emitPutCTIArgConstant): + (JSC::CTI::emitPutVirtualRegister): + (JSC::CTI::compileOpCallSetupArgs): + (JSC::CTI::compileOpCallEvalSetupArgs): + (JSC::CTI::compileOpConstructSetupArgs): + (JSC::CTI::compileOpCall): + (JSC::CTI::compileOpStrictEq): + (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): + (JSC::CTI::compileBinaryArithOp): + (JSC::CTI::compileBinaryArithOpSlowCase): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompileCTIMachineTrampolines): + * VM/CTI.h: + +2008-11-14 Greg Bolsinga + + Reviewed by Antti Koivisto + + Fix potential build break by adding StdLibExtras.h + + * GNUmakefile.am: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + +2008-11-14 Gavin Barraclough + + Reviewed by Geoff Garen. + + Generate less code for the slow cases of op_call and op_construct. + https://bugs.webkit.org/show_bug.cgi?id=22272 + + 1% progression on v8 tests. + + * VM/CTI.cpp: + (JSC::CTI::emitRetrieveArg): + (JSC::CTI::emitNakedCall): + (JSC::CTI::compileOpCallInitializeCallFrame): + (JSC::CTI::compileOpCall): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompileCTIMachineTrampolines): + * VM/CTI.h: + * VM/CodeBlock.h: + (JSC::getCallLinkInfoReturnLocation): + (JSC::CodeBlock::getCallLinkInfo): + * VM/Machine.cpp: + (JSC::Machine::Machine): + (JSC::Machine::cti_vm_dontLazyLinkCall): + (JSC::Machine::cti_vm_lazyLinkCall): + * VM/Machine.h: + +2008-11-14 Greg Bolsinga + + Reviewed by Darin Alder. + + https://bugs.webkit.org/show_bug.cgi?id=21810 + Remove use of static C++ objects that are destroyed at exit time (destructors) + + Create DEFINE_STATIC_LOCAL macro. Change static local objects to leak to avoid + exit-time destructor. Update code that was changed to fix this issue that ran + into a gcc bug ( Codegen issue with C++ static reference + in gcc build 5465). Also typdefs for template types needed to be added in some + cases so the type could make it through the macro successfully. + + Basically code of the form: + static T m; + becomes: + DEFINE_STATIC_LOCAL(T, m, ()); + + Also any code of the form: + static T& m = *new T; + also becomes: + DEFINE_STATIC_LOCAL(T, m, ()); + + * JavaScriptCore.xcodeproj/project.pbxproj: + * wtf/MainThread.cpp: + (WTF::mainThreadFunctionQueueMutex): + (WTF::functionQueue): + * wtf/StdLibExtras.h: Added. Add DEFINE_STATIC_LOCAL macro + * wtf/ThreadingPthreads.cpp: + (WTF::threadMapMutex): + (WTF::threadMap): + (WTF::identifierByPthreadHandle): + +2008-11-13 Sam Weinig + + Reviewed by Darin Adler + + Fix for https://bugs.webkit.org/show_bug.cgi?id=22269 + Reduce PropertyMap usage + + From observation of StructureID statistics, it became clear that many + StructureID's were not being used as StructureIDs themselves, but rather + only being necessary as links in the transition chain. Acknowledging this + and that PropertyMaps stored in StructureIDs can be treated as caches, that + is that they can be reconstructed on demand, it became clear that we could + reduce the memory consumption of StructureIDs by only keeping PropertyMaps + for the StructureIDs that need them the most. + + The specific strategy used to reduce the number of StructureIDs with + PropertyMaps is to take the previous StructureIDs PropertyMap when initially + transitioning (addPropertyTransition) from it and clearing out the pointer + in the process. The next time we need to do the same transition, for instance + repeated calls to the same constructor, we use the new addPropertyTransitionToExistingStructure + first, which allows us not to need the PropertyMap to determine if the property + exists already, since a transition to that property would require it not already + be present in the StructureID. Should there be no transition, the PropertyMap + can be constructed on demand (via materializePropertyMap) to determine if the put is a + replace or a transition to a new StructureID. + + Reduces memory use on Membuster head test (30 pages open) by ~15MB. + + * JavaScriptCore.exp: + * runtime/JSObject.h: + (JSC::JSObject::putDirect): First use addPropertyTransitionToExistingStructure + so that we can avoid building the PropertyMap on subsequent similar object + creations. + * runtime/PropertyMapHashTable.h: + (JSC::PropertyMapEntry::PropertyMapEntry): Add version of constructor which takes + all values to be used when lazily building the PropertyMap. + * runtime/StructureID.cpp: + (JSC::StructureID::dumpStatistics): Add statistics on the number of StructureIDs + with PropertyMaps. + (JSC::StructureID::StructureID): Rename m_cachedTransistionOffset to m_offset + (JSC::isPowerOf2): + (JSC::nextPowerOf2): + (JSC::sizeForKeyCount): Returns the expected size of a PropertyMap for a key count. + (JSC::StructureID::materializePropertyMap): Builds the PropertyMap out of its previous pointer chain. + (JSC::StructureID::addPropertyTransitionToExistingStructure): Only transitions if there is a + an existing transition. + (JSC::StructureID::addPropertyTransition): Instead of always copying the ProperyMap, try and take + it from it previous pointer. + (JSC::StructureID::removePropertyTransition): Simplify by calling toDictionaryTransition() to do + transition work. + (JSC::StructureID::changePrototypeTransition): Build the PropertyMap if necessary before transitioning + because once you have transitioned, you will not be able to reconstruct it afterwards as there is no + previous pointer, pinning the ProperyMap as well. + (JSC::StructureID::getterSetterTransition): Ditto. + (JSC::StructureID::toDictionaryTransition): Pin the PropertyMap so that it is not destroyed on further transitions. + (JSC::StructureID::fromDictionaryTransition): We can only transition back from a dictionary transition if there + are no deleted offsets. + (JSC::StructureID::addPropertyWithoutTransition): Build PropertyMap on demands and pin. + (JSC::StructureID::removePropertyWithoutTransition): Ditto. + (JSC::StructureID::get): Build on demand. + (JSC::StructureID::createPropertyMapHashTable): Add version of create that takes a size + for on demand building. + (JSC::StructureID::expandPropertyMapHashTable): + (JSC::StructureID::rehashPropertyMapHashTable): + (JSC::StructureID::getEnumerablePropertyNamesInternal): Build PropertyMap on demand. + * runtime/StructureID.h: + (JSC::StructureID::propertyStorageSize): Account for StructureIDs without PropertyMaps. + (JSC::StructureID::isEmpty): Ditto. + (JSC::StructureID::materializePropertyMapIfNecessary): + (JSC::StructureID::get): Build PropertyMap on demand + +2008-11-14 Csaba Osztrogonac + + Reviewed by Simon Hausmann. + + + + JavaScriptCore build with -O3 flag instead of -O2 (gcc). + 2.02% speedup on SunSpider (Qt-port on Linux) + 1.10% speedup on V8 (Qt-port on Linux) + 3.45% speedup on WindScorpion (Qt-port on Linux) + + * JavaScriptCore.pri: + +2008-11-14 Kristian Amlie + + Reviewed by Darin Adler. + + Compile fix for RVCT. + + In reality, it is two fixes: + + 1. Remove typename. I believe typename can only be used when the named + type depends on the template parameters, which it doesn't in this + case, so I think this is more correct. + 2. Replace ::iterator scope with specialized typedef. This is to work + around a bug in RVCT. + + https://bugs.webkit.org/show_bug.cgi?id=22260 + + * wtf/ListHashSet.h: + (WTF::::find): + +2008-11-14 Kristian Amlie + + Reviewed by Darin Adler. + + Compile fix for WINSCW. + + This fix doesn't protect against implicit conversions from bool to + integers, but most likely that will be caught on another platform. + + https://bugs.webkit.org/show_bug.cgi?id=22260 + + * wtf/PassRefPtr.h: + (WTF::PassRefPtr::operator bool): + * wtf/RefPtr.h: + (WTF::RefPtr::operator bool): + +2008-11-14 Cameron Zwarich + + Reviewed by Darin Adler. + + Bug 22245: Move wtf/dtoa.h into the WTF namespace + + + Move wtf/dtoa.h into the WTF namespace from the JSC namespace. This + introduces some ambiguities in name lookups, so I changed all uses of + the functions in wtf/dtoa.h to explicitly state the namespace. + + * JavaScriptCore.exp: + * parser/Lexer.cpp: + (JSC::Lexer::lex): + * runtime/InitializeThreading.cpp: + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::parseInt): + * runtime/NumberPrototype.cpp: + (JSC::integerPartNoExp): + (JSC::numberProtoFuncToExponential): + * runtime/UString.cpp: + (JSC::concatenate): + (JSC::UString::from): + (JSC::UString::toDouble): + * wtf/dtoa.cpp: + * wtf/dtoa.h: + +2008-11-14 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Bug 22257: Enable redundant read optimizations for results generated by compileBinaryArithOp() + + + This shows no change in performance on either SunSpider or the V8 + benchmark suite, but it removes an ugly special case and allows for + future optimizations to be implemented in a cleaner fashion. + + This patch was essentially given to me by Gavin Barraclough upon my + request, but I did regression and performance testing so that he could + work on something else. + + * VM/CTI.cpp: + (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): Move the final + result to eax if it is not already there. + (JSC::CTI::compileBinaryArithOp): Remove the killing of the final result + register that disables the optimization. + +2008-11-13 Eric Seidel + + Reviewed by Adam Roben. + + Add a Scons-based build system for building + the Chromium-Mac build of JavaScriptCore. + https://bugs.webkit.org/show_bug.cgi?id=21991 + + * JavaScriptCore.scons: Added. + * SConstruct: Added. + +2008-11-13 Eric Seidel + + Reviewed by Adam Roben. + + Add PLATFORM(CHROMIUM) to the "we don't use cairo" blacklist + until https://bugs.webkit.org/show_bug.cgi?id=22250 is fixed. + + * wtf/Platform.h: + +2008-11-13 Cameron Zwarich + + Reviewed by Sam Weinig. + + In r38375 the 'jsc' shell was changed to improve teardown on quit. The + main() function in jsc.cpp uses Structured Exception Handling, so Visual + C++ emits a warning when destructors are used. + + In order to speculatively fix the Windows build, this patch changes that + code to use explicit pointer manipulation and locking rather than smart + pointers and RAII. + + * jsc.cpp: + (main): + +2008-11-13 Cameron Zwarich + + Reviewed by Darin Adler. + + Bug 22246: Get arguments for opcodes together to eliminate more redundant memory reads + + + It is common for opcodes to read their first operand into eax and their + second operand into edx. If the value intended for the second operand is + in eax, we should first move eax to the register for the second operand + and then read the first operand into eax. + + This is a 0.5% speedup on SunSpider and a 2.0% speedup on the V8 + benchmark suite when measured using the V8 harness. + + * VM/CTI.cpp: + (JSC::CTI::emitGetArgs): + (JSC::CTI::compileOpStrictEq): + (JSC::CTI::compileBinaryArithOp): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/CTI.h: + +2008-11-13 Cameron Zwarich + + Reviewed by Darin Adler. + + Bug 22238: Avoid unnecessary reads of temporaries when the target machine register is not eax + + + Enable the optimization of not reading a value back from memory that we + just wrote when the target machine register is not eax. In order to do + this, the code generation for op_put_global_var must be changed to + read its argument into a register before overwriting eax. + + This is a 0.5% speedup on SunSpider and shows no change on the V8 + benchmark suite when run in either harness. + + * VM/CTI.cpp: + (JSC::CTI::emitGetArg): + (JSC::CTI::privateCompileMainPass): + +2008-11-13 Cameron Zwarich + + Reviewed by Alexey Proskuryakov. + + Perform teardown in the 'jsc' shell in order to suppress annoying and + misleading leak messages. There is still a lone JSC::Node leaking when + quit() is called, but hopefully that can be fixed as well. + + * jsc.cpp: + (functionQuit): + (main): + +2008-11-13 Mike Pinkerton + + Reviewed by Sam Weinig. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=22087 + Need correct platform defines for Mac Chromium + + Set the appropriate platform defines for Mac Chromium, which is + similar to PLATFORM(MAC), but isn't. + + * wtf/Platform.h: + +2008-11-13 Maciej Stachowiak + + Reviewed by Cameron Zwarich. + + - remove immediate checks from native codegen for known non-immediate cases like "this" + + ~.5% speedup on v8 benchmarks + + In the future we can extend this model to remove all sorts of + typechecks based on local type info or type inference. + + I also added an assertion to verify that all slow cases linked as + many slow case jumps as the corresponding fast case generated, and + fixed the pre-existing cases where this was not true. + + * VM/CTI.cpp: + (JSC::CTI::emitJumpSlowCaseIfNotJSCell): + (JSC::CTI::linkSlowCaseIfNotJSCell): + (JSC::CTI::compileBinaryArithOp): + (JSC::CTI::compileBinaryArithOpSlowCase): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/CTI.h: + * VM/CodeBlock.h: + (JSC::CodeBlock::isKnownNotImmediate): + +2008-11-13 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Bug 21943: Avoid needless reads of temporary values in CTI code + + + If an opcode needs to load a virtual register and a previous opcode left + the contents of that virtual register in a machine register, use the + value in the machine register rather than getting it from memory. + + In order to perform this optimization, it is necessary to know the + jump tagets in the CodeBlock. For temporaries, the only problematic + jump targets are binary logical operators and the ternary conditional + operator. However, if this optimization were to be extended to local + variable registers as well, other jump targets would need to be + included, like switch statement cases and the beginnings of catch + blocks. + + This optimization also requires that the fast case and the slow case + of an opcode use emitPutResult() on the same register, which was chosen + to be eax, as that is the register into which we read the first operand + of opcodes. In order to make this the case, we needed to add some mov + instructions to the slow cases of some instructions. + + This optimizaton is not applied whenever compileBinaryArithOp() is used + to compile an opcode, because different machine registers may be used to + store the final result. It seems possible to rewrite the code generation + in compileBinaryArithOp() to allow for this optimization. + + This optimization is also not applied when generating slow cases, + because some fast cases overwrite the value of eax before jumping to the + slow case. In the future, it may be possible to apply this optimization + to slow cases as well, but it did not seem to be a speedup when testing + an early version of this patch. + + This is a 1.0% speedup on SunSpider and a 6.3% speedup on the V8 + benchmark suite. + + * VM/CTI.cpp: + (JSC::CTI::killLastResultRegister): + (JSC::CTI::emitGetArg): + (JSC::CTI::emitGetPutArg): + (JSC::CTI::emitGetCTIParam): + (JSC::CTI::emitGetFromCallFrameHeader): + (JSC::CTI::emitPutResult): + (JSC::CTI::emitCTICall): + (JSC::CTI::CTI): + (JSC::CTI::compileOpCall): + (JSC::CTI::compileOpStrictEq): + (JSC::CTI::emitSlowScriptCheck): + (JSC::CTI::compileBinaryArithOp): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompilePatchGetArrayLength): + * VM/CTI.h: + * VM/CodeBlock.h: + (JSC::CodeBlock::isTemporaryRegisterIndex): + * bytecompiler/CodeGenerator.cpp: + (JSC::CodeGenerator::emitLabel): + +2008-11-12 Alp Toker + + autotools build system fix-up only. Add FloatQuad.h to the source + lists and sort them. + + * GNUmakefile.am: + +2008-11-12 Geoffrey Garen + + Reviewed by Sam Weinig. + + Fixed https://bugs.webkit.org/show_bug.cgi?id=22192 + +37 failures in fast/profiler + + along with Darin's review comments in + https://bugs.webkit.org/show_bug.cgi?id=22174 + Simplified op_call by nixing its responsibility for moving the value of + "this" into the first argument slot + + * VM/Machine.cpp: + (JSC::returnToThrowTrampoline): + (JSC::throwStackOverflowError): + (JSC::Machine::cti_register_file_check): + (JSC::Machine::cti_op_call_arityCheck): + (JSC::Machine::cti_vm_throw): Moved the throw logic into a function, since + functions are better than macros. + + * bytecompiler/CodeGenerator.cpp: + (JSC::CodeGenerator::emitCall): + (JSC::CodeGenerator::emitConstruct): Ensure that the function register + is preserved if profiling is enabled, since the profiler uses that + register. + + * runtime/JSGlobalData.h: Renamed throwReturnAddress to exceptionLocation, + because I had a hard time understanding what "throwReturnAddress" meant. + +2008-11-12 Geoffrey Garen + + Reviewed by Sam Weinig. + + Roll in r38322, now that test failures have been fixed. + + * VM/CTI.cpp: + (JSC::CTI::compileOpCallSetupArgs): + (JSC::CTI::compileOpCallEvalSetupArgs): + (JSC::CTI::compileOpConstructSetupArgs): + (JSC::CTI::compileOpCall): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/CTI.h: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/Machine.cpp: + (JSC::Machine::callEval): + (JSC::Machine::dumpCallFrame): + (JSC::Machine::dumpRegisters): + (JSC::Machine::execute): + (JSC::Machine::privateExecute): + (JSC::Machine::cti_register_file_check): + (JSC::Machine::cti_op_call_arityCheck): + (JSC::Machine::cti_op_call_NotJSFunction): + (JSC::Machine::cti_op_construct_JSConstruct): + (JSC::Machine::cti_op_construct_NotJSConstruct): + (JSC::Machine::cti_op_call_eval): + (JSC::Machine::cti_vm_throw): + * VM/Machine.h: + * bytecompiler/CodeGenerator.cpp: + (JSC::CodeGenerator::emitCall): + (JSC::CodeGenerator::emitCallEval): + (JSC::CodeGenerator::emitConstruct): + * bytecompiler/CodeGenerator.h: + * parser/Nodes.cpp: + (JSC::EvalFunctionCallNode::emitCode): + (JSC::FunctionCallValueNode::emitCode): + (JSC::FunctionCallResolveNode::emitCode): + (JSC::FunctionCallBracketNode::emitCode): + (JSC::FunctionCallDotNode::emitCode): + * parser/Nodes.h: + (JSC::ScopeNode::neededConstants): + +2008-11-12 Gavin Barraclough + + Reviewed by Cameron Zwarich. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=22201 + Integer conversion in array.length was safe signed values, + but the length is unsigned. + + * VM/CTI.cpp: + (JSC::CTI::privateCompilePatchGetArrayLength): + +2008-11-12 Cameron Zwarich + + Rubber-stamped by Mark Rowe. + + Roll out r38322 due to test failures on the bots. + + * VM/CTI.cpp: + (JSC::CTI::compileOpCallSetupArgs): + (JSC::CTI::compileOpCall): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/CTI.h: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/Machine.cpp: + (JSC::Machine::callEval): + (JSC::Machine::dumpCallFrame): + (JSC::Machine::dumpRegisters): + (JSC::Machine::execute): + (JSC::Machine::privateExecute): + (JSC::Machine::throwStackOverflowPreviousFrame): + (JSC::Machine::cti_register_file_check): + (JSC::Machine::cti_op_call_arityCheck): + (JSC::Machine::cti_op_call_NotJSFunction): + (JSC::Machine::cti_op_construct_JSConstruct): + (JSC::Machine::cti_op_construct_NotJSConstruct): + (JSC::Machine::cti_op_call_eval): + (JSC::Machine::cti_vm_throw): + * VM/Machine.h: + * bytecompiler/CodeGenerator.cpp: + (JSC::CodeGenerator::emitCall): + (JSC::CodeGenerator::emitCallEval): + (JSC::CodeGenerator::emitConstruct): + * bytecompiler/CodeGenerator.h: + * parser/Nodes.cpp: + (JSC::EvalFunctionCallNode::emitCode): + (JSC::FunctionCallValueNode::emitCode): + (JSC::FunctionCallResolveNode::emitCode): + (JSC::FunctionCallBracketNode::emitCode): + (JSC::FunctionCallDotNode::emitCode): + * parser/Nodes.h: + (JSC::ScopeNode::neededConstants): + +2008-11-11 Geoffrey Garen + + Reviewed by Darin Adler. + + Fixed https://bugs.webkit.org/show_bug.cgi?id=22174 + Simplified op_call by nixing its responsibility for moving the value of + "this" into the first argument slot. + + Instead, the caller emits an explicit load or mov instruction, or relies + on implicit knowledge that "this" is already in the first argument slot. + As a result, two operands to op_call are gone: firstArg and thisVal. + + SunSpider and v8 tests show no change in bytecode or CTI. + + * VM/CTI.cpp: + (JSC::CTI::compileOpCallSetupArgs): + (JSC::CTI::compileOpCallEvalSetupArgs): + (JSC::CTI::compileOpConstructSetupArgs): Split apart these three versions + of setting up arguments to op_call, because they're more different than + they are the same -- even more so with this patch. + + (JSC::CTI::compileOpCall): Updated for the fact that op_construct doesn't + match op_call anymore. + + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): Merged a few call cases. Updated + for changes mentioned above. + + * VM/CTI.h: + + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): Updated for new bytecode format of call / construct. + + * VM/Machine.cpp: + (JSC::Machine::callEval): Updated for new bytecode format of call / construct. + + (JSC::Machine::dumpCallFrame): + (JSC::Machine::dumpRegisters): Simplified these debugging functions, + taking advantage of the new call frame layout. + + (JSC::Machine::execute): Fixed up the eval version of execute to be + friendlier to calls in the new format. + + (JSC::Machine::privateExecute): Implemented the new call format in + bytecode. + + (JSC::Machine::cti_op_call_NotJSFunction): + (JSC::Machine::cti_op_construct_JSConstruct): + (JSC::Machine::cti_op_construct_NotJSConstruct): + (JSC::Machine::cti_op_call_eval): Updated CTI helpers to match the new + call format. + + Fixed a latent bug in stack overflow checking that is now hit because + the register layout has changed a bit -- namely: when throwing a stack + overflow exception inside an op_call helper, we need to account for the + fact that the current call frame is only half-constructed, and use the + parent call frame instead. + + * VM/Machine.h: + + * bytecompiler/CodeGenerator.cpp: + (JSC::CodeGenerator::emitCall): + (JSC::CodeGenerator::emitCallEval): + (JSC::CodeGenerator::emitConstruct): + * bytecompiler/CodeGenerator.h: Updated codegen to match the new call + format. + + * parser/Nodes.cpp: + (JSC::EvalFunctionCallNode::emitCode): + (JSC::FunctionCallValueNode::emitCode): + (JSC::FunctionCallResolveNode::emitCode): + (JSC::FunctionCallBracketNode::emitCode): + (JSC::FunctionCallDotNode::emitCode): + * parser/Nodes.h: + (JSC::ScopeNode::neededConstants): ditto + +2008-11-11 Cameron Zwarich + + Reviewed by Geoff Garen. + + Remove an unused forwarding header for a file that no longer exists. + + * ForwardingHeaders/JavaScriptCore/JSLock.h: Removed. + +2008-11-11 Mark Rowe + + Fix broken dependencies building JavaScriptCore on a freezing cold cat, caused + by failure to update all instances of "kjs" to their new locations. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-11-11 Alexey Proskuryakov + + Rubber-stamped by Adam Roben. + + * wtf/AVLTree.h: (WTF::AVLTree::Iterator::start_iter): + Fix indentation a little more. + +2008-11-11 Cameron Zwarich + + Rubber-stamped by Sam Weinig. + + Clean up EvalCodeCache to match our coding style a bit more. + + * VM/EvalCodeCache.h: + (JSC::EvalCodeCache::get): + +2008-11-11 Cameron Zwarich + + Rubber-stamped by Sam Weinig. + + Bug 22179: Move EvalCodeCache from CodeBlock.h into its own file + + + * GNUmakefile.am: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CodeBlock.h: + * VM/EvalCodeCache.h: Copied from VM/CodeBlock.h. + * VM/Machine.cpp: + +2008-11-11 Cameron Zwarich + + Reviewed by Sam Weinig. + + Remove the 'm_' prefix from the fields of the SwitchRecord struct. + + * VM/CTI.cpp: + (JSC::CTI::privateCompile): + * VM/CTI.h: + (JSC::SwitchRecord): + (JSC::SwitchRecord::SwitchRecord): + +2008-11-11 Cameron Zwarich + + Rubber-stamped by Sam Weinig. + + Make asInteger() a static function so that it has internal linkage. + + * VM/CTI.cpp: + (JSC::asInteger): + +2008-11-11 Maciej Stachowiak + + Reviewed by Mark Rowe. + + - shrink CodeBlock and AST related Vectors to exact fit (5-10M savings on membuster test) + + No perf regression combined with the last patch (each seems like a small regression individually) + + * bytecompiler/CodeGenerator.cpp: + (JSC::CodeGenerator::generate): + * parser/Nodes.h: + (JSC::SourceElements::releaseContentsIntoVector): + * wtf/Vector.h: + (WTF::Vector::shrinkToFit): + +2008-11-11 Maciej Stachowiak + + Reviewed by Mark Rowe. + + - remove inline capacity from declaration stacks (15M savings on membuster test) + + No perf regression on SunSpider or V8 test combined with other upcoming memory improvement patch. + + * JavaScriptCore.exp: + * parser/Nodes.h: + +2008-11-11 Cameron Zwarich + + Reviewed by Oliver Hunt. + + While r38286 removed the need for the m_callFrame member variable of + CTI, it should be also be removed. + + * VM/CTI.h: + +2008-11-10 Cameron Zwarich + + Reviewed by Oliver Hunt. + + Make CTI::asInteger() a non-member function, since it needs no access to + any of CTI's member variables. + + * VM/CTI.cpp: + (JSC::asInteger): + * VM/CTI.h: + +2008-11-10 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Use 'value' instead of 'js' in CTI as a name for JSValue* to match our + usual convention elsewhere. + + * VM/CTI.cpp: + (JSC::CTI::emitGetArg): + (JSC::CTI::emitGetPutArg): + (JSC::CTI::getConstantImmediateNumericArg): + (JSC::CTI::printOpcodeOperandTypes): + +2008-11-10 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Make CTI::getConstant() a member function of CodeBlock instead. + + * VM/CTI.cpp: + (JSC::CTI::emitGetArg): + (JSC::CTI::emitGetPutArg): + (JSC::CTI::getConstantImmediateNumericArg): + (JSC::CTI::printOpcodeOperandTypes): + (JSC::CTI::privateCompileMainPass): + * VM/CTI.h: + * VM/CodeBlock.h: + (JSC::CodeBlock::getConstant): + +2008-11-10 Cameron Zwarich + + Reviewed by Sam Weinig. + + Rename CodeBlock::isConstant() to isConstantRegisterIndex(). + + * VM/CTI.cpp: + (JSC::CTI::emitGetArg): + (JSC::CTI::emitGetPutArg): + (JSC::CTI::getConstantImmediateNumericArg): + (JSC::CTI::printOpcodeOperandTypes): + (JSC::CTI::privateCompileMainPass): + * VM/CodeBlock.h: + (JSC::CodeBlock::isConstantRegisterIndex): + * bytecompiler/CodeGenerator.cpp: + (JSC::CodeGenerator::emitEqualityOp): + +2008-11-10 Gavin Barraclough + + Build fix for non-CTI builds. + + * VM/Machine.cpp: + (JSC::Machine::initialize): + +2008-11-10 Cameron Zwarich + + Reviewed by Sam Weinig. + + Remove the unused labels member variable of CodeBlock. + + * VM/CodeBlock.h: + * VM/LabelID.h: + (JSC::LabelID::setLocation): + +2008-11-10 Gavin Barraclough + + Reviewed by Cameron Zwarich. + + Batch compile the set of static trampolines at the point Machine is constructed, using a single allocation. + Refactor out m_callFrame from CTI, since this is only needed to access the global data (instead store a + pointer to the global data directly, since this is available at the point the Machine is constructed). + Add a method to align the code buffer, to allow JIT generation for multiple trampolines in one block. + + * VM/CTI.cpp: + (JSC::CTI::getConstant): + (JSC::CTI::emitGetArg): + (JSC::CTI::emitGetPutArg): + (JSC::CTI::getConstantImmediateNumericArg): + (JSC::CTI::printOpcodeOperandTypes): + (JSC::CTI::CTI): + (JSC::CTI::compileBinaryArithOp): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + (JSC::CTI::privateCompileCTIMachineTrampolines): + (JSC::CTI::freeCTIMachineTrampolines): + * VM/CTI.h: + (JSC::CTI::compile): + (JSC::CTI::compileGetByIdSelf): + (JSC::CTI::compileGetByIdProto): + (JSC::CTI::compileGetByIdChain): + (JSC::CTI::compilePutByIdReplace): + (JSC::CTI::compilePutByIdTransition): + (JSC::CTI::compileCTIMachineTrampolines): + (JSC::CTI::compilePatchGetArrayLength): + * VM/Machine.cpp: + (JSC::Machine::initialize): + (JSC::Machine::~Machine): + (JSC::Machine::execute): + (JSC::Machine::tryCTICachePutByID): + (JSC::Machine::tryCTICacheGetByID): + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_vm_lazyLinkCall): + * VM/Machine.h: + * masm/X86Assembler.h: + (JSC::JITCodeBuffer::isAligned): + (JSC::X86Assembler::): + (JSC::X86Assembler::align): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + +2008-11-10 Maciej Stachowiak + + Reviewed by Antti Koivisto. + + - Make Vector::clear() release the Vector's memory (1MB savings on membuster) + https://bugs.webkit.org/show_bug.cgi?id=22170 + + * wtf/Vector.h: + (WTF::VectorBufferBase::deallocateBuffer): Set capacity to 0 as + well as size, otherwise shrinking capacity to 0 can fail to reset + the capacity and thus cause a future crash. + (WTF::Vector::~Vector): Shrink size not capacity; we only need + to call destructors, the buffer will be freed anyway. + (WTF::Vector::clear): Change this to shrinkCapacity(0), not just shrink(0). + (WTF::::shrinkCapacity): Use shrink() instead of resize() for case where + the size is greater than the new capacity, to work with types that have no + default constructor. + +2008-11-10 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Split multiple definitions into separate lines. + + * VM/CTI.cpp: + (JSC::CTI::compileBinaryArithOp): + +2008-11-10 Cameron Zwarich + + Reviewed by Geoff Garen. + + Bug 22162: Remove cachedValueGetter from the JavaScriptCore API implementation + + + There is no more need for the cachedValueGetter hack now that we have + PropertySlot::setValue(), so we should remove it. + + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + (JSC::::getOwnPropertySlot): + +2008-11-10 Cameron Zwarich + + Reviewed by Darin Adler. + + Bug 22152: Remove asObject() call from JSCallbackObject::getOwnPropertySlot() + + + With the recent change to adopt asType() style cast functions with + assertions instead of static_casts in many places, the assertion for + the asObject() call in JSCallbackObject::getOwnPropertySlot() has been + failing when using any nontrivial client of the JavaScriptCore API. + The cast isn't even necessary to call slot.setCustom(), so it should + be removed. + + * API/JSCallbackObjectFunctions.h: + (JSC::JSCallbackObject::getOwnPropertySlot): + +2008-11-10 Alexey Proskuryakov + + Reviewed by Adam Roben. + + A few coding style fixes for AVLTree. + + * wtf/AVLTree.h: Moved to WTF namespace, Removed "KJS_" from include guards. + (WTF::AVLTree::Iterator::start_iter): Fixed indentation + + * runtime/JSArray.cpp: Added "using namepace WTF". + +2008-11-09 Cameron Zwarich + + Not reviewed. + + Speculatively fix the non-AllInOne build. + + * runtime/NativeErrorConstructor.cpp: + +2008-11-09 Darin Adler + + Reviewed by Tim Hatcher. + + - https://bugs.webkit.org/show_bug.cgi?id=22149 + remove unused code from the parser + + * AllInOneFile.cpp: Removed nodes2string.cpp. + * GNUmakefile.am: Ditto. + * JavaScriptCore.exp: Ditto. + * JavaScriptCore.pri: Ditto. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto. + * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. + * JavaScriptCoreSources.bkl: Ditto. + + * VM/CodeBlock.h: Added include. + + * VM/Machine.cpp: (JSC::Machine::execute): Use the types from + DeclarationStacks as DeclarationStacks:: rather than Node:: since + "Node" really has little to do with it. + * bytecompiler/CodeGenerator.cpp: + (JSC::CodeGenerator::CodeGenerator): Ditto. + + * jsc.cpp: + (Options::Options): Removed prettyPrint option. + (runWithScripts): Ditto. + (printUsageStatement): Ditto. + (parseArguments): Ditto. + (jscmain): Ditto. + + * parser/Grammar.y: Removed use of obsolete ImmediateNumberNode. + + * parser/Nodes.cpp: + (JSC::ThrowableExpressionData::emitThrowError): Use inline functions + instead of direct member access for ThrowableExpressionData values. + (JSC::BracketAccessorNode::emitCode): Ditto. + (JSC::DotAccessorNode::emitCode): Ditto. + (JSC::NewExprNode::emitCode): Ditto. + (JSC::EvalFunctionCallNode::emitCode): Ditto. + (JSC::FunctionCallValueNode::emitCode): Ditto. + (JSC::FunctionCallResolveNode::emitCode): Ditto. + (JSC::FunctionCallBracketNode::emitCode): Ditto. + (JSC::FunctionCallDotNode::emitCode): Ditto. + (JSC::PostfixResolveNode::emitCode): Ditto. + (JSC::PostfixBracketNode::emitCode): Ditto. + (JSC::PostfixDotNode::emitCode): Ditto. + (JSC::DeleteResolveNode::emitCode): Ditto. + (JSC::DeleteBracketNode::emitCode): Ditto. + (JSC::DeleteDotNode::emitCode): Ditto. + (JSC::PrefixResolveNode::emitCode): Ditto. + (JSC::PrefixBracketNode::emitCode): Ditto. + (JSC::PrefixDotNode::emitCode): Ditto. + (JSC::ThrowableBinaryOpNode::emitCode): Ditto. + (JSC::InstanceOfNode::emitCode): Ditto. + (JSC::ReadModifyResolveNode::emitCode): Ditto. + (JSC::AssignResolveNode::emitCode): Ditto. + (JSC::AssignDotNode::emitCode): Ditto. + (JSC::ReadModifyDotNode::emitCode): Ditto. + (JSC::AssignBracketNode::emitCode): Ditto. + (JSC::ReadModifyBracketNode::emitCode): Ditto. + (JSC::statementListEmitCode): Take a const StatementVector instead + of a non-const one. Also removed unused statementListPushFIFO. + (JSC::ForInNode::emitCode): Inline functions instead of member access. + (JSC::ThrowNode::emitCode): Ditto. + (JSC::EvalNode::emitCode): Ditto. + (JSC::FunctionBodyNode::emitCode): Ditto. + (JSC::ProgramNode::emitCode): Ditto. + + * parser/Nodes.h: Removed unused includes and forward declarations. + Removed Precedence enum. Made many more members private instead of + protected or public. Removed unused NodeStack typedef. Moved the + VarStack and FunctionStack typedefs from Node to ScopeNode. Made + Node::emitCode pure virtual and changed classes that don't emit + any code to inherit from ParserRefCounted rather than Node. + Moved isReturnNode from Node to StatementNode. Removed the + streamTo, precedence, and needsParensIfLeftmost functions from + all classes. Removed the ImmediateNumberNode class and make + NumberNode::setValue nonvirtual. + + * parser/nodes2string.cpp: Removed. + +2008-11-09 Darin Adler + + Reviewed by Sam Weinig and Maciej Stachowiak. + Includes some work done by Chris Brichford. + + - fix https://bugs.webkit.org/show_bug.cgi?id=14886 + Stack overflow due to deeply nested parse tree doing repeated string concatentation + + Test: fast/js/large-expressions.html + + 1) Code generation is recursive, so takes stack proportional to the complexity + of the source code expression. Fixed by setting an arbitrary recursion limit + of 10,000 nodes. + + 2) Destruction of the syntax tree was recursive. Fixed by introducing a + non-recursive mechanism for destroying the tree. + + * bytecompiler/CodeGenerator.cpp: + (JSC::CodeGenerator::CodeGenerator): Initialize depth to 0. + (JSC::CodeGenerator::emitThrowExpressionTooDeepException): Added. Emits the code + to throw a "too deep" exception. + * bytecompiler/CodeGenerator.h: + (JSC::CodeGenerator::emitNode): Check depth and emit an exception if we exceed + the maximum depth. + + * parser/Nodes.cpp: + (JSC::NodeReleaser::releaseAllNodes): Added. To be called inside node destructors + to avoid recursive calls to destructors for nodes inside this one. + (JSC::NodeReleaser::release): Added. To be called inside releaseNodes functions. + Also added releaseNodes functions and calls to releaseAllNodes inside destructors + for each class derived from Node that has RefPtr to other nodes. + (JSC::NodeReleaser::adopt): Added. Used by the release function. + (JSC::NodeReleaser::adoptFunctionBodyNode): Added. + + * parser/Nodes.h: Added declarations of releaseNodes and destructors in all classes + that needed it. Eliminated use of ListRefPtr and releaseNext, which are the two parts + of an older solution to the non-recursive destruction problem that works only for + lists, whereas the new solution works for other graphs. Changed ReverseBinaryOpNode + to use BinaryOpNode as a base class to avoid some duplicated code. + +2008-11-08 Kevin Ollivier + + wx build fixes after addition of JSCore parser and bycompiler dirs. Also cleanup + the JSCore Bakefile's group names to be consistent. + + * JavaScriptCoreSources.bkl: + * jscore.bkl: + +2008-11-07 Cameron Zwarich + + Reviewed by Geoff Garen. + + Bug 21801: REGRESSION (r37821): YUI date formatting JavaScript puts the letter 'd' in place of the day + + + Fix the constant register check in the 'typeof' optimization in + CodeGenerator, which was completely broken after r37821. + + * bytecompiler/CodeGenerator.cpp: + (JSC::CodeGenerator::emitEqualityOp): + +2008-11-07 Cameron Zwarich + + Reviewed by Geoff Garen. + + Bug 22129: Move CTI::isConstant() to CodeBlock + + + * VM/CTI.cpp: + (JSC::CTI::emitGetArg): + (JSC::CTI::emitGetPutArg): + (JSC::CTI::getConstantImmediateNumericArg): + (JSC::CTI::printOpcodeOperandTypes): + (JSC::CTI::privateCompileMainPass): + * VM/CTI.h: + * VM/CodeBlock.h: + (JSC::CodeBlock::isConstant): + +2008-11-07 Alp Toker + + autotools fix. Always use the configured perl binary (which may be + different to the one in $PATH) when generating sources. + + * GNUmakefile.am: + +2008-11-07 Cameron Zwarich + + Not reviewed. + + Change grammar.cpp to Grammar.cpp and grammar.h to Grammar.h in several + build scripts. + + * DerivedSources.make: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCoreSources.bkl: + +2008-11-07 Alp Toker + + More grammar.cpp -> Grammar.cpp build fixes. + + * AllInOneFile.cpp: + * GNUmakefile.am: + +2008-11-07 Simon Hausmann + + Fix the build on case-sensitive file systems. grammar.y was renamed to + Grammar.y but Lexer.cpp includes grammar.h. The build bots didn't + notice this change because of stale files. + + * parser/Lexer.cpp: + +2008-11-07 Cameron Zwarich + + Reviewed by Alexey Proskuryakov. + + Rename the m_nextGlobal, m_nextParameter, and m_nextConstant member + variables of CodeGenerator to m_nextGlobalIndex, m_nextParameterIndex, + and m_nextConstantIndex respectively. This is to distinguish these from + member variables like m_lastConstant, which are actually RefPtrs to + Registers. + + * bytecompiler/CodeGenerator.cpp: + (JSC::CodeGenerator::addGlobalVar): + (JSC::CodeGenerator::allocateConstants): + (JSC::CodeGenerator::CodeGenerator): + (JSC::CodeGenerator::addParameter): + (JSC::CodeGenerator::addConstant): + * bytecompiler/CodeGenerator.h: + +2008-11-06 Gavin Barraclough barraclough@apple.com + + Reviewed by Oliver Hunt. + + Do not make a cti_* call to perform an op_call unless either: + (1) The codeblock for the function body has not been generated. + (2) The number of arguments passed does not match the callee arity. + + ~1% progression on sunspider --v8 + + * VM/CTI.cpp: + (JSC::CTI::compileOpCallInitializeCallFrame): + (JSC::CTI::compileOpCall): + (JSC::CTI::privateCompileSlowCases): + * VM/CTI.h: + * VM/Machine.cpp: + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_op_call_arityCheck): + (JSC::Machine::cti_op_construct_JSConstruct): + * VM/Machine.h: + * kjs/nodes.h: + +2008-11-06 Cameron Zwarich + + Reviewed by Geoff Garen. + + Move the remaining files in the kjs subdirectory of JavaScriptCore to + a new parser subdirectory, and remove the kjs subdirectory entirely. + + * AllInOneFile.cpp: + * DerivedSources.make: + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.vcproj/jsc/jsc.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * VM/CodeBlock.h: + * VM/ExceptionHelpers.cpp: + * VM/SamplingTool.h: + * bytecompiler/CodeGenerator.h: + * jsc.pro: + * jscore.bkl: + * kjs: Removed. + * kjs/NodeInfo.h: Removed. + * kjs/Parser.cpp: Removed. + * kjs/Parser.h: Removed. + * kjs/ResultType.h: Removed. + * kjs/SourceCode.h: Removed. + * kjs/SourceProvider.h: Removed. + * kjs/grammar.y: Removed. + * kjs/keywords.table: Removed. + * kjs/lexer.cpp: Removed. + * kjs/lexer.h: Removed. + * kjs/nodes.cpp: Removed. + * kjs/nodes.h: Removed. + * kjs/nodes2string.cpp: Removed. + * parser: Added. + * parser/Grammar.y: Copied from kjs/grammar.y. + * parser/Keywords.table: Copied from kjs/keywords.table. + * parser/Lexer.cpp: Copied from kjs/lexer.cpp. + * parser/Lexer.h: Copied from kjs/lexer.h. + * parser/NodeInfo.h: Copied from kjs/NodeInfo.h. + * parser/Nodes.cpp: Copied from kjs/nodes.cpp. + * parser/Nodes.h: Copied from kjs/nodes.h. + * parser/Parser.cpp: Copied from kjs/Parser.cpp. + * parser/Parser.h: Copied from kjs/Parser.h. + * parser/ResultType.h: Copied from kjs/ResultType.h. + * parser/SourceCode.h: Copied from kjs/SourceCode.h. + * parser/SourceProvider.h: Copied from kjs/SourceProvider.h. + * parser/nodes2string.cpp: Copied from kjs/nodes2string.cpp. + * pcre/pcre.pri: + * pcre/pcre_exec.cpp: + * runtime/FunctionConstructor.cpp: + * runtime/JSActivation.h: + * runtime/JSFunction.h: + * runtime/JSGlobalData.cpp: + * runtime/JSGlobalObjectFunctions.cpp: + * runtime/JSObject.cpp: + (JSC::JSObject::toNumber): + * runtime/RegExp.cpp: + +2008-11-06 Adam Roben + + Windows build fix after r38196 + + * JavaScriptCore.vcproj/jsc/jsc.vcproj: Added bytecompiler/ to the + include path. + +2008-11-06 Cameron Zwarich + + Rubber-stamped by Sam Weinig. + + Create a new bytecompiler subdirectory of JavaScriptCore and move some + relevant files to it. + + * AllInOneFile.cpp: + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * VM/CodeGenerator.cpp: Removed. + * VM/CodeGenerator.h: Removed. + * bytecompiler: Added. + * bytecompiler/CodeGenerator.cpp: Copied from VM/CodeGenerator.cpp. + * bytecompiler/CodeGenerator.h: Copied from VM/CodeGenerator.h. + * bytecompiler/LabelScope.h: Copied from kjs/LabelScope.h. + * jscore.bkl: + * kjs/LabelScope.h: Removed. + +2008-11-06 Adam Roben + + Windows clean build fix after r38155 + + Rubberstamped by Cameron Zwarich. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Update + the post-build event for the move of create_hash_table out of kjs/. + +2008-11-06 Laszlo Gombos + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=22107 + + Bug uncovered during RVCT port in functions not used. get_lt() and + get_gt() takes only one argument - remove second argument where + applicable. + + * wtf/AVLTree.h: + (JSC::AVLTree::remove): Remove second argument of get_lt/get_gt(). + (JSC::AVLTree::subst): Ditto. + +2008-11-06 Alp Toker + + Reviewed by Cameron Zwarich. + + https://bugs.webkit.org/show_bug.cgi?id=22033 + [GTK] CTI/Linux r38064 crashes; JIT requires executable memory + + Mark pages allocated by the FastMalloc mmap code path executable with + PROT_EXEC. This fixes crashes seen on CPUs and kernels that enforce + non-executable memory (like ExecShield on Fedora Linux) when the JIT + is enabled. + + This patch does not resolve the issue on debug builds so affected + developers may still need to pass --disable-jit to configure. + + * wtf/TCSystemAlloc.cpp: + (TryMmap): + (TryDevMem): + (TCMalloc_SystemRelease): + +2008-11-06 Peter Gal + + Reviewed by Cameron Zwarich. + + Bug 22099: Make the Qt port build the JSC shell in the correct place + + + Adjust include paths and build destination dir for the 'jsc' executable + in the Qt build. + + * jsc.pro: + +2008-11-06 Kristian Amlie + + Reviewed by Simon Hausmann. + + Implemented the block allocation on Symbian through heap allocation. + + Unfortunately there is no way to allocate virtual memory. The Posix + layer provides mmap() but no anonymous mapping. So this is a very slow + solution but it should work as a start. + + * runtime/Collector.cpp: + (JSC::allocateBlock): + (JSC::freeBlock): + +2008-11-06 Laszlo Gombos + + Reviewed by Simon Hausmann. + + Borrow some math functions from the MSVC port to the build with the + RVCT compiler. + + * wtf/MathExtras.h: + (isinf): + (isnan): + (signbit): + +2008-11-06 Laszlo Gombos + + Reviewed by Simon Hausmann. + + Include strings.h for strncasecmp(). + This is needed for compilation inside Symbian and it is also + confirmed by the man-page on Linux. + + * runtime/DateMath.cpp: + +2008-11-06 Norbert Leser + + Reviewed by Simon Hausmann. + + Implemented currentThreadStackBase for Symbian. + + * runtime/Collector.cpp: + (JSC::currentThreadStackBase): + +2008-11-06 Laszlo Gombos + + Reviewed by Simon Hausmann. + + RVCT does not support tm_gmtoff field, so disable that code just like + for MSVC. + + * runtime/DateMath.h: + (JSC::GregorianDateTime::GregorianDateTime): + (JSC::GregorianDateTime::operator tm): + +2008-11-06 Kristian Amlie + + Reviewed by Simon Hausmann. + + Define PLATFORM(UNIX) for S60. Effectively WebKit on S60 is compiled + on top of the Posix layer. + + * wtf/Platform.h: + +2008-11-06 Norbert Leser + + Reviewed by Simon Hausmann. + + Added __SYMBIAN32__ condition for defining PLATFORM(SYMBIAN). + + * wtf/Platform.h: + +2008-11-06 Ariya Hidayat + + Reviewed by Simon Hausmann. + + Added WINSCW compiler define for Symbian S60. + + * wtf/Platform.h: + +2008-11-06 Kristian Amlie + + Reviewed by Simon Hausmann. + + Use the GCC defines of the WTF_ALIGN* macros for the RVCT and the + MINSCW compiler. + + * wtf/Vector.h: + +2008-11-06 Kristian Amlie + + Reviewed by Simon Hausmann. + + Define capabilities of the SYMBIAN platform. Some of the system + headers are actually dependent on RVCT. + + * wtf/Platform.h: + +2008-11-06 Kristian Amlie + + Reviewed by Simon Hausmann. + + Add missing stddef.h header needed for compilation in Symbian. + + * runtime/Collector.h: + +2008-11-06 Kristian Amlie + + Reviewed by Simon Hausmann. + + Added COMPILER(RVCT) to detect the ARM RVCT compiler used in the Symbian environment. + + * wtf/Platform.h: + +2008-11-06 Simon Hausmann + + Fix the Qt build, adjust include paths after move of jsc.pro. + + * jsc.pro: + +2008-11-06 Cameron Zwarich + + Rubber-stamped by Sam Weinig. + + Move kjs/Shell.cpp to the top level of the JavaScriptCore directory and + rename it to jsc.cpp to reflect the name of the binary compiled from it. + + * GNUmakefile.am: + * JavaScriptCore.vcproj/jsc/jsc.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * jsc.cpp: Copied from kjs/Shell.cpp. + * jsc.pro: + * jscore.bkl: + * kjs/Shell.cpp: Removed. + +2008-11-06 Cameron Zwarich + + Rubber-stamped by Sam Weinig. + + Move create_hash_table and jsc.pro out of the kjs directory and into the + root directory of JavaScriptCore. + + * DerivedSources.make: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * create_hash_table: Copied from kjs/create_hash_table. + * jsc.pro: Copied from kjs/jsc.pro. + * kjs/create_hash_table: Removed. + * kjs/jsc.pro: Removed. + * make-generated-sources.sh: + +2008-11-05 Gavin Barraclough + + Reviewed by Maciej Stachowiak. + + https://bugs.webkit.org/show_bug.cgi?id=22094 + + Fix for bug where the callee incorrectly recieves the caller's lexical + global object as this, rather than its own. Implementation closely + follows the spec, passing jsNull, checking in the callee and replacing + with the global object where necessary. + + * VM/CTI.cpp: + (JSC::CTI::compileOpCall): + * VM/Machine.cpp: + (JSC::Machine::cti_op_call_NotJSFunction): + (JSC::Machine::cti_op_call_eval): + * runtime/JSCell.h: + (JSC::JSValue::toThisObject): + * runtime/JSImmediate.cpp: + (JSC::JSImmediate::toThisObject): + * runtime/JSImmediate.h: + +2008-11-05 Kevin Ollivier + + wx build fix after Operations.cpp move. + + * JavaScriptCoreSources.bkl: + +2008-11-05 Cameron Zwarich + + Not reviewed. + + Fix the build for case-sensitive build systems and wxWindows. + + * JavaScriptCoreSources.bkl: + * kjs/create_hash_table: + +2008-11-05 Cameron Zwarich + + Not reviewed. + + Fix the build for case-sensitive build systems. + + * JavaScriptCoreSources.bkl: + * kjs/Shell.cpp: + * runtime/Interpreter.cpp: + * runtime/JSArray.cpp: + +2008-11-05 Cameron Zwarich + + Not reviewed. + + Fix the build for case-sensitive build systems. + + * API/JSBase.cpp: + * API/JSObjectRef.cpp: + * runtime/CommonIdentifiers.h: + * runtime/Identifier.cpp: + * runtime/InitializeThreading.cpp: + * runtime/InternalFunction.h: + * runtime/JSString.h: + * runtime/Lookup.h: + * runtime/PropertyNameArray.h: + * runtime/PropertySlot.h: + * runtime/StructureID.cpp: + * runtime/StructureID.h: + * runtime/UString.cpp: + +2008-11-05 Cameron Zwarich + + Rubber-stamped by Sam Weinig. + + Move more files to the runtime subdirectory of JavaScriptCore. + + * API/APICast.h: + * API/JSBase.cpp: + * API/JSCallbackObject.cpp: + * API/JSClassRef.cpp: + * API/JSClassRef.h: + * API/JSStringRefCF.cpp: + * API/JSValueRef.cpp: + * API/OpaqueJSString.cpp: + * API/OpaqueJSString.h: + * AllInOneFile.cpp: + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * VM/CodeBlock.h: + * VM/CodeGenerator.cpp: + * VM/Machine.cpp: + * VM/RegisterFile.h: + * debugger/Debugger.h: + * kjs/SourceProvider.h: + * kjs/TypeInfo.h: Removed. + * kjs/collector.cpp: Removed. + * kjs/collector.h: Removed. + * kjs/completion.h: Removed. + * kjs/create_hash_table: + * kjs/identifier.cpp: Removed. + * kjs/identifier.h: Removed. + * kjs/interpreter.cpp: Removed. + * kjs/interpreter.h: Removed. + * kjs/lexer.cpp: + * kjs/lexer.h: + * kjs/lookup.cpp: Removed. + * kjs/lookup.h: Removed. + * kjs/nodes.cpp: + * kjs/nodes.h: + * kjs/operations.cpp: Removed. + * kjs/operations.h: Removed. + * kjs/protect.h: Removed. + * kjs/regexp.cpp: Removed. + * kjs/regexp.h: Removed. + * kjs/ustring.cpp: Removed. + * kjs/ustring.h: Removed. + * pcre/pcre_exec.cpp: + * profiler/CallIdentifier.h: + * profiler/Profile.h: + * runtime/ArrayConstructor.cpp: + * runtime/ArrayPrototype.cpp: + * runtime/ArrayPrototype.h: + * runtime/Collector.cpp: Copied from kjs/collector.cpp. + * runtime/Collector.h: Copied from kjs/collector.h. + * runtime/CollectorHeapIterator.h: + * runtime/Completion.h: Copied from kjs/completion.h. + * runtime/ErrorPrototype.cpp: + * runtime/Identifier.cpp: Copied from kjs/identifier.cpp. + * runtime/Identifier.h: Copied from kjs/identifier.h. + * runtime/InitializeThreading.cpp: + * runtime/Interpreter.cpp: Copied from kjs/interpreter.cpp. + * runtime/Interpreter.h: Copied from kjs/interpreter.h. + * runtime/JSCell.h: + * runtime/JSGlobalData.cpp: + * runtime/JSGlobalData.h: + * runtime/JSLock.cpp: + * runtime/JSNumberCell.cpp: + * runtime/JSNumberCell.h: + * runtime/JSObject.cpp: + * runtime/JSValue.h: + * runtime/Lookup.cpp: Copied from kjs/lookup.cpp. + * runtime/Lookup.h: Copied from kjs/lookup.h. + * runtime/MathObject.cpp: + * runtime/NativeErrorPrototype.cpp: + * runtime/NumberPrototype.cpp: + * runtime/Operations.cpp: Copied from kjs/operations.cpp. + * runtime/Operations.h: Copied from kjs/operations.h. + * runtime/PropertyMapHashTable.h: + * runtime/Protect.h: Copied from kjs/protect.h. + * runtime/RegExp.cpp: Copied from kjs/regexp.cpp. + * runtime/RegExp.h: Copied from kjs/regexp.h. + * runtime/RegExpConstructor.cpp: + * runtime/RegExpObject.h: + * runtime/RegExpPrototype.cpp: + * runtime/SmallStrings.h: + * runtime/StringObjectThatMasqueradesAsUndefined.h: + * runtime/StructureID.cpp: + * runtime/StructureID.h: + * runtime/StructureIDTransitionTable.h: + * runtime/SymbolTable.h: + * runtime/TypeInfo.h: Copied from kjs/TypeInfo.h. + * runtime/UString.cpp: Copied from kjs/ustring.cpp. + * runtime/UString.h: Copied from kjs/ustring.h. + * wrec/CharacterClassConstructor.h: + * wrec/WREC.h: + +2008-11-05 Geoffrey Garen + + Suggested by Darin Adler. + + Removed two copy constructors that the compiler can generate for us + automatically. + + * VM/LabelID.h: + (JSC::LabelID::setLocation): + (JSC::LabelID::offsetFrom): + (JSC::LabelID::ref): + (JSC::LabelID::refCount): + * kjs/LabelScope.h: + +2008-11-05 Anders Carlsson + + Fix Snow Leopard build. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-11-04 Cameron Zwarich + + Rubber-stamped by Steve Falkenburg. + + Move dtoa.cpp and dtoa.h to the WTF Visual Studio project to reflect + their movement in the filesystem. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + +2008-11-04 Cameron Zwarich + + Rubber-stamped by Sam Weinig. + + Move kjs/dtoa.h to the wtf subdirectory of JavaScriptCore. + + * AllInOneFile.cpp: + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * kjs/dtoa.cpp: Removed. + * kjs/dtoa.h: Removed. + * wtf/dtoa.cpp: Copied from kjs/dtoa.cpp. + * wtf/dtoa.h: Copied from kjs/dtoa.h. + +2008-11-04 Cameron Zwarich + + Rubber-stamped by Sam Weinig. + + Move kjs/config.h to the top level of JavaScriptCore. + + * GNUmakefile.am: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * config.h: Copied from kjs/config.h. + * kjs/config.h: Removed. + +2008-11-04 Darin Adler + + Reviewed by Tim Hatcher. + + * wtf/ThreadingNone.cpp: Tweak formatting. + +2008-11-03 Darin Adler + + Reviewed by Tim Hatcher. + + - https://bugs.webkit.org/show_bug.cgi?id=22061 + create script to check for exit-time destructors + + * JavaScriptCore.exp: Changed to export functions rather than + a global for the atomically initialized static mutex. + + * JavaScriptCore.xcodeproj/project.pbxproj: Added a script + phase that runs the check-for-exit-time-destructors script. + + * wtf/MainThread.cpp: + (WTF::mainThreadFunctionQueueMutex): Changed to leak an object + rather than using an exit time destructor. + (WTF::functionQueue): Ditto. + * wtf/unicode/icu/CollatorICU.cpp: + (WTF::cachedCollatorMutex): Ditto. + + * wtf/Threading.h: Changed other platforms to share the Windows + approach where the mutex is internal and the functions are exported. + * wtf/ThreadingGtk.cpp: + (WTF::lockAtomicallyInitializedStaticMutex): Ditto. + (WTF::unlockAtomicallyInitializedStaticMutex): Ditto. + * wtf/ThreadingNone.cpp: + (WTF::lockAtomicallyInitializedStaticMutex): Ditto. + (WTF::unlockAtomicallyInitializedStaticMutex): Ditto. + * wtf/ThreadingPthreads.cpp: + (WTF::threadMapMutex): Changed to leak an object rather than using + an exit time destructor. + (WTF::lockAtomicallyInitializedStaticMutex): Mutex change. + (WTF::unlockAtomicallyInitializedStaticMutex): Ditto. + (WTF::threadMap): Changed to leak an object rather than using + an exit time destructor. + * wtf/ThreadingQt.cpp: + (WTF::lockAtomicallyInitializedStaticMutex): Mutex change. + (WTF::unlockAtomicallyInitializedStaticMutex): Ditto. + * wtf/ThreadingWin.cpp: + (WTF::lockAtomicallyInitializedStaticMutex): Added an assertion. + +2008-11-04 Adam Roben + + Windows build fix + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Update + the location of JSStaticScopeObject.{cpp,h}. + +2008-11-04 Cameron Zwarich + + Reviewed by Alexey Proskuryakov. + + Move AllInOneFile.cpp to the top level of JavaScriptCore. + + * AllInOneFile.cpp: Copied from kjs/AllInOneFile.cpp. + * GNUmakefile.am: + * JavaScriptCore.xcodeproj/project.pbxproj: + * kjs/AllInOneFile.cpp: Removed. + +2008-11-04 Cameron Zwarich + + Rubber-stamped by Alexey Proskuryakov. + + Add NodeInfo.h to the JavaScriptCore Xcode project. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-11-03 Cameron Zwarich + + Rubber-stamped by Maciej Stachowiak. + + Move more files into the runtime subdirectory of JavaScriptCore. + + * API/JSBase.cpp: + * API/JSCallbackConstructor.cpp: + * API/JSCallbackFunction.cpp: + * API/JSClassRef.cpp: + * API/OpaqueJSString.cpp: + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * kjs/AllInOneFile.cpp: + * kjs/ArgList.cpp: Removed. + * kjs/ArgList.h: Removed. + * kjs/Arguments.cpp: Removed. + * kjs/Arguments.h: Removed. + * kjs/BatchedTransitionOptimizer.h: Removed. + * kjs/CollectorHeapIterator.h: Removed. + * kjs/CommonIdentifiers.cpp: Removed. + * kjs/CommonIdentifiers.h: Removed. + * kjs/ExecState.cpp: Removed. + * kjs/ExecState.h: Removed. + * kjs/GetterSetter.cpp: Removed. + * kjs/GetterSetter.h: Removed. + * kjs/InitializeThreading.cpp: Removed. + * kjs/InitializeThreading.h: Removed. + * kjs/JSActivation.cpp: Removed. + * kjs/JSActivation.h: Removed. + * kjs/JSGlobalData.cpp: Removed. + * kjs/JSGlobalData.h: Removed. + * kjs/JSLock.cpp: Removed. + * kjs/JSLock.h: Removed. + * kjs/JSStaticScopeObject.cpp: Removed. + * kjs/JSStaticScopeObject.h: Removed. + * kjs/JSType.h: Removed. + * kjs/PropertyNameArray.cpp: Removed. + * kjs/PropertyNameArray.h: Removed. + * kjs/ScopeChain.cpp: Removed. + * kjs/ScopeChain.h: Removed. + * kjs/ScopeChainMark.h: Removed. + * kjs/SymbolTable.h: Removed. + * kjs/Tracing.d: Removed. + * kjs/Tracing.h: Removed. + * runtime/ArgList.cpp: Copied from kjs/ArgList.cpp. + * runtime/ArgList.h: Copied from kjs/ArgList.h. + * runtime/Arguments.cpp: Copied from kjs/Arguments.cpp. + * runtime/Arguments.h: Copied from kjs/Arguments.h. + * runtime/BatchedTransitionOptimizer.h: Copied from kjs/BatchedTransitionOptimizer.h. + * runtime/CollectorHeapIterator.h: Copied from kjs/CollectorHeapIterator.h. + * runtime/CommonIdentifiers.cpp: Copied from kjs/CommonIdentifiers.cpp. + * runtime/CommonIdentifiers.h: Copied from kjs/CommonIdentifiers.h. + * runtime/ExecState.cpp: Copied from kjs/ExecState.cpp. + * runtime/ExecState.h: Copied from kjs/ExecState.h. + * runtime/GetterSetter.cpp: Copied from kjs/GetterSetter.cpp. + * runtime/GetterSetter.h: Copied from kjs/GetterSetter.h. + * runtime/InitializeThreading.cpp: Copied from kjs/InitializeThreading.cpp. + * runtime/InitializeThreading.h: Copied from kjs/InitializeThreading.h. + * runtime/JSActivation.cpp: Copied from kjs/JSActivation.cpp. + * runtime/JSActivation.h: Copied from kjs/JSActivation.h. + * runtime/JSGlobalData.cpp: Copied from kjs/JSGlobalData.cpp. + * runtime/JSGlobalData.h: Copied from kjs/JSGlobalData.h. + * runtime/JSLock.cpp: Copied from kjs/JSLock.cpp. + * runtime/JSLock.h: Copied from kjs/JSLock.h. + * runtime/JSStaticScopeObject.cpp: Copied from kjs/JSStaticScopeObject.cpp. + * runtime/JSStaticScopeObject.h: Copied from kjs/JSStaticScopeObject.h. + * runtime/JSType.h: Copied from kjs/JSType.h. + * runtime/PropertyNameArray.cpp: Copied from kjs/PropertyNameArray.cpp. + * runtime/PropertyNameArray.h: Copied from kjs/PropertyNameArray.h. + * runtime/ScopeChain.cpp: Copied from kjs/ScopeChain.cpp. + * runtime/ScopeChain.h: Copied from kjs/ScopeChain.h. + * runtime/ScopeChainMark.h: Copied from kjs/ScopeChainMark.h. + * runtime/SymbolTable.h: Copied from kjs/SymbolTable.h. + * runtime/Tracing.d: Copied from kjs/Tracing.d. + * runtime/Tracing.h: Copied from kjs/Tracing.h. + +2008-11-03 Sam Weinig + + Reviewed by Mark Rowe. + + Move #define to turn on dumping StructureID statistics to StructureID.cpp so that + turning it on does not require a full rebuild. + + * runtime/StructureID.cpp: + (JSC::StructureID::dumpStatistics): + * runtime/StructureID.h: + +2008-11-03 Alp Toker + + Reviewed by Geoffrey Garen. + + Fix warning when building on Darwin without JSC_MULTIPLE_THREADS + enabled. + + * kjs/InitializeThreading.cpp: + +2008-11-02 Matt Lilek + + Reviewed by Cameron Zwarich. + + Bug 22042: REGRESSION(r38066): ASSERTION FAILED: source in CodeBlock + + + Rename parameter name to avoid ASSERT. + + * VM/CodeBlock.h: + (JSC::CodeBlock::CodeBlock): + (JSC::ProgramCodeBlock::ProgramCodeBlock): + (JSC::EvalCodeBlock::EvalCodeBlock): + +2008-11-02 Cameron Zwarich + + Reviewed by Oliver Hunt. + + Bug 22035: Remove the '_' suffix on constructor parameter names for structs + + + * API/JSCallbackObject.h: + (JSC::JSCallbackObject::JSCallbackObjectData::JSCallbackObjectData): + * VM/CodeBlock.h: + (JSC::CodeBlock::CodeBlock): + (JSC::ProgramCodeBlock::ProgramCodeBlock): + (JSC::EvalCodeBlock::EvalCodeBlock): + * wrec/WREC.h: + (JSC::Quantifier::Quantifier): + +2008-10-31 Cameron Zwarich + + Rubber-stamped by Geoff Garen. + + Rename SourceRange.h to SourceCode.h. + + * API/JSBase.cpp: + * GNUmakefile.am: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CodeBlock.h: + * kjs/SourceCode.h: Copied from kjs/SourceRange.h. + * kjs/SourceRange.h: Removed. + * kjs/grammar.y: + * kjs/lexer.h: + * kjs/nodes.cpp: + (JSC::ForInNode::ForInNode): + * kjs/nodes.h: + (JSC::ThrowableExpressionData::setExceptionSourceCode): + +2008-10-31 Cameron Zwarich + + Reviewed by Darin Adler. + + Bug 22019: Move JSC::Interpreter::shouldPrintExceptions() to WebCore::Console + + + The JSC::Interpreter::shouldPrintExceptions() function is not used at + all in JavaScriptCore, so it should be moved to WebCore::Console, its + only user. + + * JavaScriptCore.exp: + * kjs/interpreter.cpp: + * kjs/interpreter.h: + +2008-10-31 Cameron Zwarich + + Not reviewed. + + Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2008-10-31 Cameron Zwarich + + Rubber-stamped by Sam Weinig. + + Remove the call to Interpreter::setShouldPrintExceptions() from the + GlobalObject constructor in the shell. The shouldPrintExceptions() + information is not used anywhere in JavaScriptCore, only in WebCore. + + * kjs/Shell.cpp: + (GlobalObject::GlobalObject): + +2008-10-31 Kevin Ollivier + + wxMSW build fix. + + * wtf/Threading.h: + +2008-10-31 Cameron Zwarich + + Rubber-stamped by Sam Weinig. + + Move more files from the kjs subdirectory of JavaScriptCore to the + runtime subdirectory. + + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * kjs/AllInOneFile.cpp: + * kjs/RegExpConstructor.cpp: Removed. + * kjs/RegExpConstructor.h: Removed. + * kjs/RegExpMatchesArray.h: Removed. + * kjs/RegExpObject.cpp: Removed. + * kjs/RegExpObject.h: Removed. + * kjs/RegExpPrototype.cpp: Removed. + * kjs/RegExpPrototype.h: Removed. + * runtime/RegExpConstructor.cpp: Copied from kjs/RegExpConstructor.cpp. + * runtime/RegExpConstructor.h: Copied from kjs/RegExpConstructor.h. + * runtime/RegExpMatchesArray.h: Copied from kjs/RegExpMatchesArray.h. + * runtime/RegExpObject.cpp: Copied from kjs/RegExpObject.cpp. + * runtime/RegExpObject.h: Copied from kjs/RegExpObject.h. + * runtime/RegExpPrototype.cpp: Copied from kjs/RegExpPrototype.cpp. + * runtime/RegExpPrototype.h: Copied from kjs/RegExpPrototype.h. + +2008-10-31 Mark Rowe + + Revert an incorrect portion of r38034. + + * profiler/ProfilerServer.mm: + +2008-10-31 Mark Rowe + + Fix the 64-bit build. + + Disable strict aliasing in ProfilerServer.mm as it leads to the compiler being unhappy + with the common Obj-C idiom self = [super init]; + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-10-31 Cameron Zwarich + + Reviewed by Alexey Proskuryakov. + + Change a header guard to match our coding style. + + * kjs/InitializeThreading.h: + +2008-10-30 Geoffrey Garen + + Reviewed by Oliver Hunt. + + Fixed a small bit of https://bugs.webkit.org/show_bug.cgi?id=21962 + AST uses way too much memory + + Removed a word from StatementNode by nixing LabelStack and turning it + into a compile-time data structure managed by CodeGenerator. + + v8 tests and SunSpider, run by Gavin, report no change. + + * GNUmakefile.am: + * JavaScriptCore.order: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * kjs/AllInOneFile.cpp: + * JavaScriptCoreSources.bkl: I sure hope this builds! + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::CodeGenerator): + (JSC::CodeGenerator::newLabelScope): + (JSC::CodeGenerator::breakTarget): + (JSC::CodeGenerator::continueTarget): + * VM/CodeGenerator.h: Nixed the JumpContext system because it depended + on a LabelStack in the AST, and it was a little cumbersome on the client + side. Replaced with LabelScope, which tracks all break / continue + information in the CodeGenerator, just like we track LabelIDs and other + stacks of compile-time data. + + * kjs/LabelScope.h: Added. + (JSC::LabelScope::): + (JSC::LabelScope::LabelScope): + (JSC::LabelScope::ref): + (JSC::LabelScope::deref): + (JSC::LabelScope::refCount): + (JSC::LabelScope::breakTarget): + (JSC::LabelScope::continueTarget): + (JSC::LabelScope::type): + (JSC::LabelScope::name): + (JSC::LabelScope::scopeDepth): Simple abstraction for holding everything + you might want to know about a break-able / continue-able scope. + + * kjs/LabelStack.cpp: Removed. + * kjs/LabelStack.h: Removed. + + * kjs/grammar.y: No need to push labels at parse time -- we don't store + LabelStacks in the AST anymore. + + * kjs/nodes.cpp: + (JSC::DoWhileNode::emitCode): + (JSC::WhileNode::emitCode): + (JSC::ForNode::emitCode): + (JSC::ForInNode::emitCode): + (JSC::ContinueNode::emitCode): + (JSC::BreakNode::emitCode): + (JSC::SwitchNode::emitCode): + (JSC::LabelNode::emitCode): + * kjs/nodes.h: + (JSC::StatementNode::): + (JSC::LabelNode::): Use LabelScope where we used to use JumpContext. + Simplified a bunch of code. Touched up label-related error messages a + bit. + + * kjs/nodes2string.cpp: + (JSC::LabelNode::streamTo): Updated for rename. + +2008-10-31 Cameron Zwarich + + Reviewed by Darin Adler. + + Bug 22005: Move StructureIDChain into its own file + + + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * runtime/StructureID.cpp: + * runtime/StructureID.h: + * runtime/StructureIDChain.cpp: Copied from runtime/StructureID.cpp. + * runtime/StructureIDChain.h: Copied from runtime/StructureID.h. + +2008-10-31 Steve Falkenburg + + Build fix. + + * JavaScriptCore.vcproj/jsc/jsc.vcproj: + +2008-10-31 Steve Falkenburg + + Build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2008-10-31 Darin Adler + + Reviewed by Dan Bernstein. + + - fix storage leak seen on buildbot + + Some other cleanup too. The storage leak was caused by the fact + that HashTraits::needsDestruction was false, so + the call identifier objects didn't get deleted. + + * profiler/CallIdentifier.h: + + Added a default constructor to create empty call identifiers. + + Changed the normal constructor to use const UString& + to avoid extra copying and reference count thrash. + + Removed the explicit copy constructor definition, since it's what + the compiler will automatically generate. (Rule of thumb: Either + you need both a custom copy constructor and a custom assignment + operator, or neither.) + + Moved the CallIdentifier hash function out of the WTF namespace; + there's no reason to put it there. + + Changed the CallIdentifier hash function to be a struct rather than + a specialization of the IntHash struct template. Having it be + a specialization made no sense, since CallIdentifier is not an integer, + and did no good. + + Removed explicit definition of emptyValueIsZero in the hash traits, + since inheriting from GenericHashTraits already makes that false. + + Removed explicit definition of emptyValue, instead relying on the + default constructor and GenericHashTraits. + + Removed explicit definition of needsDestruction, because we want it + to have its default value: true, not false. This fixes the leak! + + Changed constructDeletedValue and isDeletedValue to use a line number + of numeric_limits::max() to indicate a value is deleted. + Previously this used empty strings for the empty value and null strings + for the deleted value, but it's more efficient to use null for both. + +2008-10-31 Timothy Hatcher + + Emit the WillExecuteStatement debugger hook before the for loop body + when the statement node for the body isn't a block. This allows + breakpoints on those statements in the Web Inspector. + + https://bugs.webkit.org/show_bug.cgi?id=22004 + + Reviewed by Darin Adler. + + * kjs/nodes.cpp: + (JSC::ForNode::emitCode): Emit the WillExecuteStatement + debugger hook before the statement node if isn't a block. + Also emit the WillExecuteStatement debugger hook for the + loop as the first op-code. + (JSC::ForInNode::emitCode): Ditto. + +2008-10-31 Timothy Hatcher + + Fixes console warnings about not having an autorelease pool. + Also fixes the build for Snow Leopard, by including individual + Foundation headers instead of Foundation.h. + + https://bugs.webkit.org/show_bug.cgi?id=21995 + + Reviewed by Oliver Hunt. + + * profiler/ProfilerServer.mm: + (-[ProfilerServer init]): Create a NSAutoreleasePool and drain it. + +2008-10-31 Cameron Zwarich + + Not reviewed. + + Speculative wxWindows build fix. + + * JavaScriptCoreSources.bkl: + * jscore.bkl: + +2008-10-31 Cameron Zwarich + + Rubber-stamped by Maciej Stachowiak. + + Move VM/JSPropertyNameIterator.cpp and VM/JSPropertyNameIterator.h to + the runtime directory. + + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * VM/JSPropertyNameIterator.cpp: Removed. + * VM/JSPropertyNameIterator.h: Removed. + * runtime/JSPropertyNameIterator.cpp: Copied from VM/JSPropertyNameIterator.cpp. + * runtime/JSPropertyNameIterator.h: Copied from VM/JSPropertyNameIterator.h. + +2008-10-31 Cameron Zwarich + + Not reviewed. + + Speculative wxWindows build fix. + + * jscore.bkl: + +2008-10-30 Mark Rowe + + Reviewed by Jon Homeycutt. + + Explicitly default to building for only the native architecture in debug and release builds. + + * Configurations/DebugRelease.xcconfig: + +2008-10-30 Cameron Zwarich + + Rubber-stamped by Sam Weinig. + + Create a debugger directory in JavaScriptCore and move the relevant + files to it. + + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CodeBlock.cpp: + * VM/CodeGenerator.h: + * VM/Machine.cpp: + * debugger: Added. + * debugger/Debugger.cpp: Copied from kjs/debugger.cpp. + * debugger/Debugger.h: Copied from kjs/debugger.h. + * debugger/DebuggerCallFrame.cpp: Copied from kjs/DebuggerCallFrame.cpp. + * debugger/DebuggerCallFrame.h: Copied from kjs/DebuggerCallFrame.h. + * kjs/AllInOneFile.cpp: + * kjs/DebuggerCallFrame.cpp: Removed. + * kjs/DebuggerCallFrame.h: Removed. + * kjs/Parser.cpp: + * kjs/Parser.h: + * kjs/debugger.cpp: Removed. + * kjs/debugger.h: Removed. + * kjs/interpreter.cpp: + * kjs/nodes.cpp: + * runtime/FunctionConstructor.cpp: + * runtime/JSGlobalObject.cpp: + +2008-10-30 Benjamin K. Stuhl + + gcc 4.3.3/linux-x86 generates "suggest parentheses around && within ||" + warnings; add some parentheses to disambiguate things. No functional + changes, so no tests. + + https://bugs.webkit.org/show_bug.cgi?id=21973 + Add parentheses to clean up some gcc warnings + + Reviewed by Dan Bernstein. + + * wtf/ASCIICType.h: + (WTF::isASCIIAlphanumeric): + (WTF::isASCIIHexDigit): + +2008-10-30 Kevin Lindeman + + Adds ProfilerServer, which is a distributed notification listener + that allows starting and stopping the profiler remotely for use + in conjunction with the profiler's DTace probes. + + https://bugs.webkit.org/show_bug.cgi?id=21719 + + Reviewed by Timothy Hatcher. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): Calls startProfilerServerIfNeeded. + * profiler/ProfilerServer.h: Added. + * profiler/ProfilerServer.mm: Added. + (+[ProfilerServer sharedProfileServer]): + (-[ProfilerServer init]): + (-[ProfilerServer startProfiling]): + (-[ProfilerServer stopProfiling]): + (JSC::startProfilerServerIfNeeded): + +2008-10-30 Kevin Ollivier + + wx build fix after PropertyMap and StructureID merge. + + * JavaScriptCoreSources.bkl: + +2008-10-30 Cameron Zwarich + + Reviewed by Mark Rowe. + + Change the JavaScriptCore Xcode project to use relative paths for the + PCRE source files. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-10-30 Sam Weinig + + Reviewed by Cameron Zwarich and Geoffrey Garen. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=21989 + Merge PropertyMap and StructureID + + - Move PropertyMap code into StructureID in preparation for lazily + creating the map on gets. + - Make remove with transition explicit by adding removePropertyTransition. + - Make the put/remove without transition explicit. + - Make cache invalidation part of put/remove without transition. + + 1% speedup on SunSpider; 0.5% speedup on v8 suite. + + * GNUmakefile.am: + * JavaScriptCore.exp: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * kjs/AllInOneFile.cpp: + * kjs/identifier.h: + * runtime/JSObject.cpp: + (JSC::JSObject::removeDirect): + * runtime/JSObject.h: + (JSC::JSObject::putDirect): + * runtime/PropertyMap.cpp: Removed. + * runtime/PropertyMap.h: Removed. + * runtime/PropertyMapHashTable.h: Copied from runtime/PropertyMap.h. + * runtime/StructureID.cpp: + (JSC::StructureID::dumpStatistics): + (JSC::StructureID::StructureID): + (JSC::StructureID::~StructureID): + (JSC::StructureID::getEnumerablePropertyNames): + (JSC::StructureID::addPropertyTransition): + (JSC::StructureID::removePropertyTransition): + (JSC::StructureID::toDictionaryTransition): + (JSC::StructureID::changePrototypeTransition): + (JSC::StructureID::getterSetterTransition): + (JSC::StructureID::addPropertyWithoutTransition): + (JSC::StructureID::removePropertyWithoutTransition): + (JSC::PropertyMapStatisticsExitLogger::~PropertyMapStatisticsExitLogger): + (JSC::StructureID::checkConsistency): + (JSC::StructureID::copyPropertyTable): + (JSC::StructureID::get): + (JSC::StructureID::put): + (JSC::StructureID::remove): + (JSC::StructureID::insertIntoPropertyMapHashTable): + (JSC::StructureID::expandPropertyMapHashTable): + (JSC::StructureID::createPropertyMapHashTable): + (JSC::StructureID::rehashPropertyMapHashTable): + (JSC::comparePropertyMapEntryIndices): + (JSC::StructureID::getEnumerablePropertyNamesInternal): + * runtime/StructureID.h: + (JSC::StructureID::propertyStorageSize): + (JSC::StructureID::isEmpty): + (JSC::StructureID::get): + +2008-10-30 Cameron Zwarich + + Reviewed by Oliver Hunt. + + Bug 21987: CTI::putDoubleResultToJSNumberCellOrJSImmediate() hardcodes its result register + + + CTI::putDoubleResultToJSNumberCellOrJSImmediate() hardcodes its result + register as ecx, but it should be tempReg1, which is ecx at all of its + callsites. + + * VM/CTI.cpp: + (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): + +2008-10-30 Cameron Zwarich + + Reviewed by Sam Weinig. + + Bug 21985: Opcodes should use eax as their destination register whenever possible + + + Change more opcodes to use eax as the register for their final result, + and change calls to emitPutResult() that pass eax to rely on the default + value of eax. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + +2008-10-30 Alp Toker + + Build fix attempt for older gcc on the trunk-mac-intel build bot + (error: initializer for scalar variable requires one element). + + Modify the initializer syntax slightly with an additional comma. + + * VM/Machine.cpp: + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_op_construct_JSConstruct): + (JSC::Machine::cti_op_resolve_func): + (JSC::Machine::cti_op_post_inc): + (JSC::Machine::cti_op_resolve_with_base): + (JSC::Machine::cti_op_post_dec): + +2008-10-30 Alp Toker + + Reviewed by Alexey Proskuryakov. + + https://bugs.webkit.org/show_bug.cgi?id=21571 + VoidPtrPair breaks CTI on Linux + + The VoidPtrPair return change made in r37457 does not work on Linux + since POD structs aren't passed in registers. + + This patch uses a union to vectorize VoidPtrPair to a uint64_t and + matches Darwin/MSVC fixing CTI/WREC on Linux. + + Alexey reports no measurable change in Mac performance with this fix. + + * VM/Machine.cpp: + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_op_construct_JSConstruct): + (JSC::Machine::cti_op_resolve_func): + (JSC::Machine::cti_op_post_inc): + (JSC::Machine::cti_op_resolve_with_base): + (JSC::Machine::cti_op_post_dec): + * VM/Machine.h: + (JSC::): + +2008-10-29 Oliver Hunt + + Reviewed by Geoff Garen. + + Initial work to reduce cost of JSNumberCell allocation + + This does the initial work needed to bring more of number + allocation into CTI code directly, rather than just falling + back onto the slow paths if we can't guarantee that a number + cell can be reused. + + Initial implementation only used by op_negate to make sure + it all works. In a negate heavy (though not dominated) test + it results in a 10% win in the non-reusable cell case. + + * VM/CTI.cpp: + (JSC::): + (JSC::CTI::emitAllocateNumber): + (JSC::CTI::emitNakedFastCall): + (JSC::CTI::emitArithIntToImmWithJump): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/CTI.h: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitUnaryOp): + * VM/CodeGenerator.h: + (JSC::CodeGenerator::emitToJSNumber): + (JSC::CodeGenerator::emitTypeOf): + (JSC::CodeGenerator::emitGetPropertyNames): + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + * VM/Machine.h: + * kjs/ResultType.h: + (JSC::ResultType::isReusableNumber): + (JSC::ResultType::toInt): + * kjs/nodes.cpp: + (JSC::UnaryOpNode::emitCode): + (JSC::BinaryOpNode::emitCode): + (JSC::EqualNode::emitCode): + * masm/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::negl_r): + (JSC::X86Assembler::xorpd_mr): + * runtime/JSNumberCell.h: + (JSC::JSNumberCell::JSNumberCell): + +2008-10-29 Steve Falkenburg + + Crash on launch + + For Windows, export explicit functions rather than exporting data for atomicallyInitializedStaticMutex. + + Exporting data from a DLL on Windows requires specifying __declspec(dllimport) in the header used by + callers, but __declspec(dllexport) when defined in the DLL implementation. By instead exporting + the explicit lock/unlock functions, we can avoid this. + + Fixes a crash on launch, since we were previously erroneously exporting atomicallyInitializedStaticMutex as a function. + + Reviewed by Darin Adler. + + * wtf/Threading.h: + (WTF::lockAtomicallyInitializedStaticMutex): + (WTF::unlockAtomicallyInitializedStaticMutex): + * wtf/ThreadingWin.cpp: + (WTF::lockAtomicallyInitializedStaticMutex): + (WTF::unlockAtomicallyInitializedStaticMutex): + +2008-10-29 Sam Weinig + + Reviewed by Oliver Hunt. + + Remove direct use of PropertyMap. + + * JavaScriptCore.exp: + * runtime/JSObject.cpp: + (JSC::JSObject::mark): + (JSC::JSObject::put): + (JSC::JSObject::deleteProperty): + (JSC::JSObject::getPropertyAttributes): + (JSC::JSObject::removeDirect): + * runtime/JSObject.h: + (JSC::JSObject::getDirect): + (JSC::JSObject::getDirectLocation): + (JSC::JSObject::hasCustomProperties): + (JSC::JSObject::JSObject): + (JSC::JSObject::putDirect): + * runtime/PropertyMap.cpp: + (JSC::PropertyMap::get): + * runtime/PropertyMap.h: + (JSC::PropertyMap::isEmpty): + (JSC::PropertyMap::get): + * runtime/StructureID.cpp: + (JSC::StructureID::dumpStatistics): + * runtime/StructureID.h: + (JSC::StructureID::propertyStorageSize): + (JSC::StructureID::get): + (JSC::StructureID::put): + (JSC::StructureID::remove): + (JSC::StructureID::isEmpty): + +2008-10-29 Sam Weinig + + Reviewed by Geoffrey Garen. + + Rename and move the StructureID transition table to its own file. + + * GNUmakefile.am: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * runtime/StructureID.cpp: + (JSC::StructureID::addPropertyTransition): + * runtime/StructureID.h: + (JSC::StructureID::): + * runtime/StructureIDTransitionTable.h: Copied from runtime/StructureID.h. + (JSC::StructureIDTransitionTableHash::hash): + (JSC::StructureIDTransitionTableHash::equal): + +2008-10-29 Sam Weinig + + Reviewed by Cameron Zwarich. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=21958 + Pack bits in StructureID to reduce the size of each StructureID by 2 words. + + * runtime/PropertyMap.h: + (JSC::PropertyMap::propertyMapSize): + * runtime/StructureID.cpp: + (JSC::StructureID::dumpStatistics): Add additional size statistics when dumping. + (JSC::StructureID::StructureID): + * runtime/StructureID.h: + +2008-10-29 Kevin Ollivier + + wx build fixes after addition of runtime and ImageBuffer changes. + + * JavaScriptCoreSources.bkl: + * jscore.bkl: + +2008-10-29 Timothy Hatcher + + Emit the WillExecuteStatement debugger hook before the "else" body + when there is no block for the "else" body. This allows breakpoints + on those statements in the Web Inspector. + + https://bugs.webkit.org/show_bug.cgi?id=21944 + + Reviewed by Maciej Stachowiak. + + * kjs/nodes.cpp: + (JSC::IfElseNode::emitCode): Emit the WillExecuteStatement + debugger hook before the else node if isn't a block. + +2008-10-29 Alexey Proskuryakov + + Build fix. + + * JavaScriptCore.exp: Export HashTable::deleteTable(). + +2008-10-28 Alp Toker + + Fix builddir != srcdir builds after kjs -> runtime breakage. Sources + may now be generated in both kjs/ and runtime/. + + Also sort the sources list for readability. + + * GNUmakefile.am: + +2008-10-28 Alp Toker + + Reviewed by Cameron Zwarich. + + Build fix attempt after kjs -> runtime rename. + + * GNUmakefile.am: + +2008-10-28 Cameron Zwarich + + Not reviewed. + + Remove a duplicate includes directory. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2008-10-28 Cameron Zwarich + + Not reviewed. + + Attempt to fix the Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/jsc/jsc.vcproj: + +2008-10-28 Dan Bernstein + + Reviewed by Mark Rowe. + + - export WTF::atomicallyInitializedStaticMutex + + * JavaScriptCore.exp: + +2008-10-28 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Fixed CodeBlock dumping to accurately report constant register indices. + + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + +2008-10-28 Cameron Zwarich + + Not reviewed. + + More Qt build fixes. + + * JavaScriptCore.pri: + +2008-10-28 Cameron Zwarich + + Not reviewed. + + Fix the Qt build, hopefully for real this time. + + * JavaScriptCore.pri: + +2008-10-28 Cameron Zwarich + + Not reviewed. + + Fix the Qt build. + + * JavaScriptCore.pri: + +2008-10-28 Cameron Zwarich + + Not reviewed. + + Fix the Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2008-10-28 Cameron Zwarich + + Rubber-stamped by Sam Weinig. + + Create a runtime directory in JavaScriptCore and begin moving files to + it. This is the first step towards removing the kjs directory and + placing files in more meaningful subdirectories of JavaScriptCore. + + * API/JSBase.cpp: + * API/JSCallbackConstructor.cpp: + * API/JSCallbackConstructor.h: + * API/JSCallbackFunction.cpp: + * API/JSClassRef.cpp: + * API/JSClassRef.h: + * API/JSStringRefCF.cpp: + * API/JSValueRef.cpp: + * API/OpaqueJSString.cpp: + * DerivedSources.make: + * GNUmakefile.am: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * kjs/AllInOneFile.cpp: + * kjs/ArrayConstructor.cpp: Removed. + * kjs/ArrayConstructor.h: Removed. + * kjs/ArrayPrototype.cpp: Removed. + * kjs/ArrayPrototype.h: Removed. + * kjs/BooleanConstructor.cpp: Removed. + * kjs/BooleanConstructor.h: Removed. + * kjs/BooleanObject.cpp: Removed. + * kjs/BooleanObject.h: Removed. + * kjs/BooleanPrototype.cpp: Removed. + * kjs/BooleanPrototype.h: Removed. + * kjs/CallData.cpp: Removed. + * kjs/CallData.h: Removed. + * kjs/ClassInfo.h: Removed. + * kjs/ConstructData.cpp: Removed. + * kjs/ConstructData.h: Removed. + * kjs/DateConstructor.cpp: Removed. + * kjs/DateConstructor.h: Removed. + * kjs/DateInstance.cpp: Removed. + * kjs/DateInstance.h: Removed. + * kjs/DateMath.cpp: Removed. + * kjs/DateMath.h: Removed. + * kjs/DatePrototype.cpp: Removed. + * kjs/DatePrototype.h: Removed. + * kjs/Error.cpp: Removed. + * kjs/Error.h: Removed. + * kjs/ErrorConstructor.cpp: Removed. + * kjs/ErrorConstructor.h: Removed. + * kjs/ErrorInstance.cpp: Removed. + * kjs/ErrorInstance.h: Removed. + * kjs/ErrorPrototype.cpp: Removed. + * kjs/ErrorPrototype.h: Removed. + * kjs/FunctionConstructor.cpp: Removed. + * kjs/FunctionConstructor.h: Removed. + * kjs/FunctionPrototype.cpp: Removed. + * kjs/FunctionPrototype.h: Removed. + * kjs/GlobalEvalFunction.cpp: Removed. + * kjs/GlobalEvalFunction.h: Removed. + * kjs/InternalFunction.cpp: Removed. + * kjs/InternalFunction.h: Removed. + * kjs/JSArray.cpp: Removed. + * kjs/JSArray.h: Removed. + * kjs/JSCell.cpp: Removed. + * kjs/JSCell.h: Removed. + * kjs/JSFunction.cpp: Removed. + * kjs/JSFunction.h: Removed. + * kjs/JSGlobalObject.cpp: Removed. + * kjs/JSGlobalObject.h: Removed. + * kjs/JSGlobalObjectFunctions.cpp: Removed. + * kjs/JSGlobalObjectFunctions.h: Removed. + * kjs/JSImmediate.cpp: Removed. + * kjs/JSImmediate.h: Removed. + * kjs/JSNotAnObject.cpp: Removed. + * kjs/JSNotAnObject.h: Removed. + * kjs/JSNumberCell.cpp: Removed. + * kjs/JSNumberCell.h: Removed. + * kjs/JSObject.cpp: Removed. + * kjs/JSObject.h: Removed. + * kjs/JSString.cpp: Removed. + * kjs/JSString.h: Removed. + * kjs/JSValue.cpp: Removed. + * kjs/JSValue.h: Removed. + * kjs/JSVariableObject.cpp: Removed. + * kjs/JSVariableObject.h: Removed. + * kjs/JSWrapperObject.cpp: Removed. + * kjs/JSWrapperObject.h: Removed. + * kjs/MathObject.cpp: Removed. + * kjs/MathObject.h: Removed. + * kjs/NativeErrorConstructor.cpp: Removed. + * kjs/NativeErrorConstructor.h: Removed. + * kjs/NativeErrorPrototype.cpp: Removed. + * kjs/NativeErrorPrototype.h: Removed. + * kjs/NumberConstructor.cpp: Removed. + * kjs/NumberConstructor.h: Removed. + * kjs/NumberObject.cpp: Removed. + * kjs/NumberObject.h: Removed. + * kjs/NumberPrototype.cpp: Removed. + * kjs/NumberPrototype.h: Removed. + * kjs/ObjectConstructor.cpp: Removed. + * kjs/ObjectConstructor.h: Removed. + * kjs/ObjectPrototype.cpp: Removed. + * kjs/ObjectPrototype.h: Removed. + * kjs/PropertyMap.cpp: Removed. + * kjs/PropertyMap.h: Removed. + * kjs/PropertySlot.cpp: Removed. + * kjs/PropertySlot.h: Removed. + * kjs/PrototypeFunction.cpp: Removed. + * kjs/PrototypeFunction.h: Removed. + * kjs/PutPropertySlot.h: Removed. + * kjs/SmallStrings.cpp: Removed. + * kjs/SmallStrings.h: Removed. + * kjs/StringConstructor.cpp: Removed. + * kjs/StringConstructor.h: Removed. + * kjs/StringObject.cpp: Removed. + * kjs/StringObject.h: Removed. + * kjs/StringObjectThatMasqueradesAsUndefined.h: Removed. + * kjs/StringPrototype.cpp: Removed. + * kjs/StringPrototype.h: Removed. + * kjs/StructureID.cpp: Removed. + * kjs/StructureID.h: Removed. + * kjs/completion.h: + * kjs/interpreter.h: + * runtime: Added. + * runtime/ArrayConstructor.cpp: Copied from kjs/ArrayConstructor.cpp. + * runtime/ArrayConstructor.h: Copied from kjs/ArrayConstructor.h. + * runtime/ArrayPrototype.cpp: Copied from kjs/ArrayPrototype.cpp. + * runtime/ArrayPrototype.h: Copied from kjs/ArrayPrototype.h. + * runtime/BooleanConstructor.cpp: Copied from kjs/BooleanConstructor.cpp. + * runtime/BooleanConstructor.h: Copied from kjs/BooleanConstructor.h. + * runtime/BooleanObject.cpp: Copied from kjs/BooleanObject.cpp. + * runtime/BooleanObject.h: Copied from kjs/BooleanObject.h. + * runtime/BooleanPrototype.cpp: Copied from kjs/BooleanPrototype.cpp. + * runtime/BooleanPrototype.h: Copied from kjs/BooleanPrototype.h. + * runtime/CallData.cpp: Copied from kjs/CallData.cpp. + * runtime/CallData.h: Copied from kjs/CallData.h. + * runtime/ClassInfo.h: Copied from kjs/ClassInfo.h. + * runtime/ConstructData.cpp: Copied from kjs/ConstructData.cpp. + * runtime/ConstructData.h: Copied from kjs/ConstructData.h. + * runtime/DateConstructor.cpp: Copied from kjs/DateConstructor.cpp. + * runtime/DateConstructor.h: Copied from kjs/DateConstructor.h. + * runtime/DateInstance.cpp: Copied from kjs/DateInstance.cpp. + * runtime/DateInstance.h: Copied from kjs/DateInstance.h. + * runtime/DateMath.cpp: Copied from kjs/DateMath.cpp. + * runtime/DateMath.h: Copied from kjs/DateMath.h. + * runtime/DatePrototype.cpp: Copied from kjs/DatePrototype.cpp. + * runtime/DatePrototype.h: Copied from kjs/DatePrototype.h. + * runtime/Error.cpp: Copied from kjs/Error.cpp. + * runtime/Error.h: Copied from kjs/Error.h. + * runtime/ErrorConstructor.cpp: Copied from kjs/ErrorConstructor.cpp. + * runtime/ErrorConstructor.h: Copied from kjs/ErrorConstructor.h. + * runtime/ErrorInstance.cpp: Copied from kjs/ErrorInstance.cpp. + * runtime/ErrorInstance.h: Copied from kjs/ErrorInstance.h. + * runtime/ErrorPrototype.cpp: Copied from kjs/ErrorPrototype.cpp. + * runtime/ErrorPrototype.h: Copied from kjs/ErrorPrototype.h. + * runtime/FunctionConstructor.cpp: Copied from kjs/FunctionConstructor.cpp. + * runtime/FunctionConstructor.h: Copied from kjs/FunctionConstructor.h. + * runtime/FunctionPrototype.cpp: Copied from kjs/FunctionPrototype.cpp. + * runtime/FunctionPrototype.h: Copied from kjs/FunctionPrototype.h. + * runtime/GlobalEvalFunction.cpp: Copied from kjs/GlobalEvalFunction.cpp. + * runtime/GlobalEvalFunction.h: Copied from kjs/GlobalEvalFunction.h. + * runtime/InternalFunction.cpp: Copied from kjs/InternalFunction.cpp. + * runtime/InternalFunction.h: Copied from kjs/InternalFunction.h. + * runtime/JSArray.cpp: Copied from kjs/JSArray.cpp. + * runtime/JSArray.h: Copied from kjs/JSArray.h. + * runtime/JSCell.cpp: Copied from kjs/JSCell.cpp. + * runtime/JSCell.h: Copied from kjs/JSCell.h. + * runtime/JSFunction.cpp: Copied from kjs/JSFunction.cpp. + * runtime/JSFunction.h: Copied from kjs/JSFunction.h. + * runtime/JSGlobalObject.cpp: Copied from kjs/JSGlobalObject.cpp. + * runtime/JSGlobalObject.h: Copied from kjs/JSGlobalObject.h. + * runtime/JSGlobalObjectFunctions.cpp: Copied from kjs/JSGlobalObjectFunctions.cpp. + * runtime/JSGlobalObjectFunctions.h: Copied from kjs/JSGlobalObjectFunctions.h. + * runtime/JSImmediate.cpp: Copied from kjs/JSImmediate.cpp. + * runtime/JSImmediate.h: Copied from kjs/JSImmediate.h. + * runtime/JSNotAnObject.cpp: Copied from kjs/JSNotAnObject.cpp. + * runtime/JSNotAnObject.h: Copied from kjs/JSNotAnObject.h. + * runtime/JSNumberCell.cpp: Copied from kjs/JSNumberCell.cpp. + * runtime/JSNumberCell.h: Copied from kjs/JSNumberCell.h. + * runtime/JSObject.cpp: Copied from kjs/JSObject.cpp. + * runtime/JSObject.h: Copied from kjs/JSObject.h. + * runtime/JSString.cpp: Copied from kjs/JSString.cpp. + * runtime/JSString.h: Copied from kjs/JSString.h. + * runtime/JSValue.cpp: Copied from kjs/JSValue.cpp. + * runtime/JSValue.h: Copied from kjs/JSValue.h. + * runtime/JSVariableObject.cpp: Copied from kjs/JSVariableObject.cpp. + * runtime/JSVariableObject.h: Copied from kjs/JSVariableObject.h. + * runtime/JSWrapperObject.cpp: Copied from kjs/JSWrapperObject.cpp. + * runtime/JSWrapperObject.h: Copied from kjs/JSWrapperObject.h. + * runtime/MathObject.cpp: Copied from kjs/MathObject.cpp. + * runtime/MathObject.h: Copied from kjs/MathObject.h. + * runtime/NativeErrorConstructor.cpp: Copied from kjs/NativeErrorConstructor.cpp. + * runtime/NativeErrorConstructor.h: Copied from kjs/NativeErrorConstructor.h. + * runtime/NativeErrorPrototype.cpp: Copied from kjs/NativeErrorPrototype.cpp. + * runtime/NativeErrorPrototype.h: Copied from kjs/NativeErrorPrototype.h. + * runtime/NumberConstructor.cpp: Copied from kjs/NumberConstructor.cpp. + * runtime/NumberConstructor.h: Copied from kjs/NumberConstructor.h. + * runtime/NumberObject.cpp: Copied from kjs/NumberObject.cpp. + * runtime/NumberObject.h: Copied from kjs/NumberObject.h. + * runtime/NumberPrototype.cpp: Copied from kjs/NumberPrototype.cpp. + * runtime/NumberPrototype.h: Copied from kjs/NumberPrototype.h. + * runtime/ObjectConstructor.cpp: Copied from kjs/ObjectConstructor.cpp. + * runtime/ObjectConstructor.h: Copied from kjs/ObjectConstructor.h. + * runtime/ObjectPrototype.cpp: Copied from kjs/ObjectPrototype.cpp. + * runtime/ObjectPrototype.h: Copied from kjs/ObjectPrototype.h. + * runtime/PropertyMap.cpp: Copied from kjs/PropertyMap.cpp. + * runtime/PropertyMap.h: Copied from kjs/PropertyMap.h. + * runtime/PropertySlot.cpp: Copied from kjs/PropertySlot.cpp. + * runtime/PropertySlot.h: Copied from kjs/PropertySlot.h. + * runtime/PrototypeFunction.cpp: Copied from kjs/PrototypeFunction.cpp. + * runtime/PrototypeFunction.h: Copied from kjs/PrototypeFunction.h. + * runtime/PutPropertySlot.h: Copied from kjs/PutPropertySlot.h. + * runtime/SmallStrings.cpp: Copied from kjs/SmallStrings.cpp. + * runtime/SmallStrings.h: Copied from kjs/SmallStrings.h. + * runtime/StringConstructor.cpp: Copied from kjs/StringConstructor.cpp. + * runtime/StringConstructor.h: Copied from kjs/StringConstructor.h. + * runtime/StringObject.cpp: Copied from kjs/StringObject.cpp. + * runtime/StringObject.h: Copied from kjs/StringObject.h. + * runtime/StringObjectThatMasqueradesAsUndefined.h: Copied from kjs/StringObjectThatMasqueradesAsUndefined.h. + * runtime/StringPrototype.cpp: Copied from kjs/StringPrototype.cpp. + * runtime/StringPrototype.h: Copied from kjs/StringPrototype.h. + * runtime/StructureID.cpp: Copied from kjs/StructureID.cpp. + * runtime/StructureID.h: Copied from kjs/StructureID.h. + +2008-10-28 Geoffrey Garen + + Reviewed by Sam Weinig. + + Fixed https://bugs.webkit.org/show_bug.cgi?id=21919 + Sampler reports bogus time in op_enter during 3d-raytrace.js + + Fixed a bug where we would pass the incorrect Instruction* during some + parts of CTI codegen. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/SamplingTool.cpp: + (JSC::SamplingTool::run): + * wtf/Platform.h: + +2008-10-28 Kevin McCullough + + Reviewed by Dan Bernstein. + + -Removed unused includes. + Apparent .4% speedup in Sunspider + + * kjs/JSObject.cpp: + * kjs/interpreter.cpp: + +2008-10-28 Alp Toker + + Include copyright license files in the autotools dist target. + + Change suggested by Mike Hommey. + + * GNUmakefile.am: + +2008-10-27 Geoffrey Garen + + Reviewed by Maciej Stachowiak. + + Stop discarding CodeBlock samples that can't be charged to a specific + opcode. Instead, charge the relevant CodeBlock, and provide a footnote + explaining the situation. + + This will help us tell which CodeBlocks are hot, even if we can't + identify specific lines of code within the CodeBlocks. + + * VM/SamplingTool.cpp: + (JSC::ScopeSampleRecord::sample): + (JSC::compareScopeSampleRecords): + (JSC::SamplingTool::dump): + + * VM/SamplingTool.h: + (JSC::ScopeSampleRecord::ScopeSampleRecord): + (JSC::ScopeSampleRecord::~ScopeSampleRecord): + +2008-10-27 Geoffrey Garen + + Reviewed by Sam Weinig. + + Added a mutex around the SamplingTool's ScopeNode* map, to solve a crash + when sampling the v8 tests. + + * VM/SamplingTool.cpp: + (JSC::SamplingTool::run): + (JSC::SamplingTool::notifyOfScope): + * VM/SamplingTool.h: Since new ScopeNodes can be created after + the SamplingTools has begun sampling, reads and writes to / from the + map need to be synchronized. Shark says this doesn't measurably increase + sampling overhead. + +2008-10-25 Geoffrey Garen + + Not reviewed. + + Try to fix Windows build. + + * VM/Machine.cpp: + (JSC::Machine::privateExecute): Provide a dummy value to the + HostCallRecord in CTI non-sampling builds, to silence compiler warning. + +2008-10-25 Geoffrey Garen + + Not reviewed. + + Try to fix Windows build. + + * VM/SamplingTool.h: + (JSC::SamplingTool::encodeSample): Explicitly cast bool to int, to + silence compiler warning. + +2008-10-25 Geoffrey Garen + + Reviewed by Sam Weinig, with Gavin Barraclough's help. + + Fixed Sampling Tool: + - Made CodeBlock sampling work with CTI + - Improved accuracy by unifying most sampling data into a single + 32bit word, which can be written / read atomically. + - Split out three different #ifdefs for modularity: OPCODE_SAMPLING; + CODEBLOCK_SAMPLING; OPCODE_STATS. + - Improved reporting clarity + - Refactored for code clarity + + * JavaScriptCore.exp: Exported another symbol. + + * VM/CTI.cpp: + (JSC::CTI::emitCTICall): + (JSC::CTI::compileOpCall): + (JSC::CTI::emitSlowScriptCheck): + (JSC::CTI::compileBinaryArithOpSlowCase): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + * VM/CTI.h: Updated CTI codegen to use the unified SamplingTool interface + for encoding samples. (This required passing the current vPC to a lot + more functions, since the unified interface samples the current vPC.) + Added hooks for writing the current CodeBlock* on function entry and + after a function call, for the sake of the CodeBlock sampler. Removed + obsolete hook for clearing the current sample inside op_end. Also removed + the custom enum used to differentiate flavors of op_call, since the + OpcodeID enum works just as well. (This was important in an earlier + version of the patch, but now it's just cleanup.) + + * VM/CodeBlock.cpp: + (JSC::CodeBlock::lineNumberForVPC): + * VM/CodeBlock.h: Upated for refactored #ifdefs. Changed lineNumberForVPC + to be robust against vPCs not recorded for exception handling, since + the Sampler may ask for an arbitrary vPC. + + * VM/Machine.cpp: + (JSC::Machine::execute): + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_call_NotJSFunction): + (JSC::Machine::cti_op_construct_NotJSConstruct): + * VM/Machine.h: + (JSC::Machine::setSampler): + (JSC::Machine::sampler): + (JSC::Machine::jitCodeBuffer): Upated for refactored #ifdefs. Changed + Machine to use SamplingTool helper objects to record movement in and + out of host code. This makes samples a bit more precise. + + * VM/Opcode.cpp: + (JSC::OpcodeStats::~OpcodeStats): + * VM/Opcode.h: Upated for refactored #ifdefs. Added a little more padding, + to accomodate our more verbose opcode names. + + * VM/SamplingTool.cpp: + (JSC::ScopeSampleRecord::sample): Only count a sample toward our total + if we actually record it. This solves cases where a CodeBlock will + claim to have been sampled many times, with reported samples that don't + match. + + (JSC::SamplingTool::run): Read the current sample into a Sample helper + object, to ensure that the data doesn't change while we're analyzing it, + and to help decode the data. Only access the CodeBlock sampling hash + table if CodeBlock sampling has been enabled, so non-CodeBlock sampling + runs can operate with even less overhead. + + (JSC::SamplingTool::dump): I reorganized this code a lot to print the + most important info at the top, print as a table, annotate and document + the stuff I didn't understand when I started, etc. + + * VM/SamplingTool.h: New helper classes, described above. + + * kjs/Parser.h: + * kjs/Shell.cpp: + (runWithScripts): + * kjs/nodes.cpp: + (JSC::ScopeNode::ScopeNode): Updated for new sampling APIs. + + * wtf/Platform.h: Moved sampling #defines here, since our custom is to + put ENABLE #defines into Platform.h. Made explicit the fact that + CODEBLOCK_SAMPLING depends on OPCODE_SAMPLING. + +2008-10-25 Jan Michael Alonzo + + JSC Build fix, not reviewed. + + * VM/CTI.cpp: add missing include stdio.h for debug builds + +2008-10-24 Eric Seidel + + Reviewed by Darin Adler. + + Get rid of a bonus ASSERT when using a null string as a regexp. + Specifically calling: RegularExpression::match() with String::empty() + will hit this ASSERT. + Chromium hits this, but I don't know of any way to make a layout test. + + * pcre/pcre_exec.cpp: + (jsRegExpExecute): + +2008-10-24 Alexey Proskuryakov + + Suggested and rubber-stamped by Geoff Garen. + + Fix a crash when opening Font Picker. + + The change also hopefully fixes this bug, which I could never reproduce: + https://bugs.webkit.org/show_bug.cgi?id=20241 + Safari crashes at JSValueUnprotect() when fontpicker view close + + * API/JSContextRef.cpp: (JSContextGetGlobalObject): Use lexical global object instead of + dynamic one. + +2008-10-24 Cameron Zwarich + + Reviewed by Geoff Garen. + + Remove ScopeChainNode::bottom() and inline it into its only caller, + ScopeChainnode::globalObject(). + + * kjs/JSGlobalObject.h: + (JSC::ScopeChainNode::globalObject): + * kjs/ScopeChain.h: + (JSC::ScopeChain::bottom): + +2008-10-24 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Bug 21862: Create JSFunction prototype property lazily + + + This is a 1.5% speedup on SunSpider and a 1.4% speedup on the V8 + benchmark suite, including a 3.8% speedup on Earley-Boyer. + + * kjs/JSFunction.cpp: + (JSC::JSFunction::getOwnPropertySlot): + * kjs/nodes.cpp: + (JSC::FuncDeclNode::makeFunction): + (JSC::FuncExprNode::makeFunction): + +2008-10-24 Greg Bolsinga + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=21475 + + Provide support for the Geolocation API + + http://dev.w3.org/geo/api/spec-source.html + + * wtf/Platform.h: ENABLE_GEOLOCATION defaults to 0 + +2008-10-24 Darin Adler + + - finish rolling out https://bugs.webkit.org/show_bug.cgi?id=21732 + + * API/APICast.h: + * API/JSCallbackConstructor.h: + * API/JSCallbackFunction.cpp: + * API/JSCallbackFunction.h: + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + * API/JSContextRef.cpp: + * API/JSObjectRef.cpp: + * API/JSValueRef.cpp: + * VM/CTI.cpp: + * VM/CTI.h: + * VM/CodeBlock.cpp: + * VM/CodeBlock.h: + * VM/CodeGenerator.cpp: + * VM/CodeGenerator.h: + * VM/ExceptionHelpers.cpp: + * VM/ExceptionHelpers.h: + * VM/JSPropertyNameIterator.cpp: + * VM/JSPropertyNameIterator.h: + * VM/Machine.cpp: + * VM/Machine.h: + * VM/Register.h: + * kjs/ArgList.cpp: + * kjs/ArgList.h: + * kjs/Arguments.cpp: + * kjs/Arguments.h: + * kjs/ArrayConstructor.cpp: + * kjs/ArrayPrototype.cpp: + * kjs/BooleanConstructor.cpp: + * kjs/BooleanConstructor.h: + * kjs/BooleanObject.h: + * kjs/BooleanPrototype.cpp: + * kjs/CallData.cpp: + * kjs/CallData.h: + * kjs/ConstructData.cpp: + * kjs/ConstructData.h: + * kjs/DateConstructor.cpp: + * kjs/DateInstance.h: + * kjs/DatePrototype.cpp: + * kjs/DatePrototype.h: + * kjs/DebuggerCallFrame.cpp: + * kjs/DebuggerCallFrame.h: + * kjs/ErrorConstructor.cpp: + * kjs/ErrorPrototype.cpp: + * kjs/ExecState.cpp: + * kjs/ExecState.h: + * kjs/FunctionConstructor.cpp: + * kjs/FunctionPrototype.cpp: + * kjs/FunctionPrototype.h: + * kjs/GetterSetter.cpp: + * kjs/GetterSetter.h: + * kjs/InternalFunction.h: + * kjs/JSActivation.cpp: + * kjs/JSActivation.h: + * kjs/JSArray.cpp: + * kjs/JSArray.h: + * kjs/JSCell.cpp: + * kjs/JSCell.h: + * kjs/JSFunction.cpp: + * kjs/JSFunction.h: + * kjs/JSGlobalData.h: + * kjs/JSGlobalObject.cpp: + * kjs/JSGlobalObject.h: + * kjs/JSGlobalObjectFunctions.cpp: + * kjs/JSGlobalObjectFunctions.h: + * kjs/JSImmediate.cpp: + * kjs/JSImmediate.h: + * kjs/JSNotAnObject.cpp: + * kjs/JSNotAnObject.h: + * kjs/JSNumberCell.cpp: + * kjs/JSNumberCell.h: + * kjs/JSObject.cpp: + * kjs/JSObject.h: + * kjs/JSStaticScopeObject.cpp: + * kjs/JSStaticScopeObject.h: + * kjs/JSString.cpp: + * kjs/JSString.h: + * kjs/JSValue.h: + * kjs/JSVariableObject.h: + * kjs/JSWrapperObject.h: + * kjs/MathObject.cpp: + * kjs/MathObject.h: + * kjs/NativeErrorConstructor.cpp: + * kjs/NumberConstructor.cpp: + * kjs/NumberConstructor.h: + * kjs/NumberObject.cpp: + * kjs/NumberObject.h: + * kjs/NumberPrototype.cpp: + * kjs/ObjectConstructor.cpp: + * kjs/ObjectPrototype.cpp: + * kjs/ObjectPrototype.h: + * kjs/PropertyMap.h: + * kjs/PropertySlot.cpp: + * kjs/PropertySlot.h: + * kjs/RegExpConstructor.cpp: + * kjs/RegExpConstructor.h: + * kjs/RegExpMatchesArray.h: + * kjs/RegExpObject.cpp: + * kjs/RegExpObject.h: + * kjs/RegExpPrototype.cpp: + * kjs/Shell.cpp: + * kjs/StringConstructor.cpp: + * kjs/StringObject.cpp: + * kjs/StringObject.h: + * kjs/StringObjectThatMasqueradesAsUndefined.h: + * kjs/StringPrototype.cpp: + * kjs/StructureID.cpp: + * kjs/StructureID.h: + * kjs/collector.cpp: + * kjs/collector.h: + * kjs/completion.h: + * kjs/grammar.y: + * kjs/interpreter.cpp: + * kjs/interpreter.h: + * kjs/lookup.cpp: + * kjs/lookup.h: + * kjs/nodes.h: + * kjs/operations.cpp: + * kjs/operations.h: + * kjs/protect.h: + * profiler/ProfileGenerator.cpp: + * profiler/Profiler.cpp: + * profiler/Profiler.h: + Use JSValue* instead of JSValuePtr. + +2008-10-24 David Kilzer + + Rolled out r37840. + + * wtf/Platform.h: + +2008-10-23 Greg Bolsinga + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=21475 + + Provide support for the Geolocation API + + http://dev.w3.org/geo/api/spec-source.html + + * wtf/Platform.h: ENABLE_GEOLOCATION defaults to 0 + +2008-10-23 David Kilzer + + Bug 21832: Fix scripts using 'new File::Temp' for Perl 5.10 + + + + Reviewed by Sam Weinig. + + * pcre/dftables: Use imported tempfile() from File::Temp instead of + 'new File::Temp' to make the script work with Perl 5.10. + +2008-10-23 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Fix hideous pathological case performance when looking up repatch info, bug #21727. + + When repatching JIT code to optimize we look up records providing information about + the generated code (also used to track recsources used in linking to be later released). + The lookup was being performed using a linear scan of all such records. + + (1) Split up the different types of reptach information. This means we can search them + separately, and in some cases should reduce their size. + (2) In the case of property accesses, search with a binary chop over the data. + (3) In the case of calls, pass a pointer to the repatch info into the relink function. + + * VM/CTI.cpp: + (JSC::CTI::CTI): + (JSC::CTI::compileOpCall): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + (JSC::CTI::unlinkCall): + (JSC::CTI::linkCall): + * VM/CTI.h: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + (JSC::CodeBlock::~CodeBlock): + (JSC::CodeBlock::unlinkCallers): + (JSC::CodeBlock::derefStructureIDs): + * VM/CodeBlock.h: + (JSC::StructureStubInfo::StructureStubInfo): + (JSC::CallLinkInfo::CallLinkInfo): + (JSC::CallLinkInfo::setUnlinked): + (JSC::CallLinkInfo::isLinked): + (JSC::getStructureStubInfoReturnLocation): + (JSC::binaryChop): + (JSC::CodeBlock::addCaller): + (JSC::CodeBlock::getStubInfo): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitResolve): + (JSC::CodeGenerator::emitGetById): + (JSC::CodeGenerator::emitPutById): + (JSC::CodeGenerator::emitCall): + (JSC::CodeGenerator::emitConstruct): + * VM/Machine.cpp: + (JSC::Machine::cti_vm_lazyLinkCall): + +2008-10-23 Peter Kasting + + Reviewed by Adam Roben. + + https://bugs.webkit.org/show_bug.cgi?id=21833 + Place JavaScript Debugger hooks under #if ENABLE(JAVASCRIPT_DEBUGGER). + + * wtf/Platform.h: + +2008-10-23 David Kilzer + + Bug 21831: Fix create_hash_table for Perl 5.10 + + + + Reviewed by Sam Weinig. + + * kjs/create_hash_table: Escaped square brackets so that Perl 5.10 + doesn't try to use @nameEntries. + +2008-10-23 Darin Adler + + - roll out https://bugs.webkit.org/show_bug.cgi?id=21732 + to remove the JSValuePtr class, to fix two problems + + 1) slowness under MSVC, since it doesn't handle a + class with a single pointer in it as efficiently + as a pointer + + 2) uninitialized pointers in Vector + + * JavaScriptCore.exp: Updated. + + * API/APICast.h: + (toRef): + * VM/CTI.cpp: + (JSC::CTI::asInteger): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::addConstant): + * VM/CodeGenerator.h: + (JSC::CodeGenerator::JSValueHashTraits::constructDeletedValue): + (JSC::CodeGenerator::JSValueHashTraits::isDeletedValue): + * VM/Machine.cpp: + (JSC::Machine::cti_op_add): + (JSC::Machine::cti_op_pre_inc): + (JSC::Machine::cti_op_get_by_id): + (JSC::Machine::cti_op_get_by_id_second): + (JSC::Machine::cti_op_get_by_id_generic): + (JSC::Machine::cti_op_get_by_id_fail): + (JSC::Machine::cti_op_instanceof): + (JSC::Machine::cti_op_del_by_id): + (JSC::Machine::cti_op_mul): + (JSC::Machine::cti_op_call_NotJSFunction): + (JSC::Machine::cti_op_resolve): + (JSC::Machine::cti_op_construct_NotJSConstruct): + (JSC::Machine::cti_op_get_by_val): + (JSC::Machine::cti_op_sub): + (JSC::Machine::cti_op_lesseq): + (JSC::Machine::cti_op_negate): + (JSC::Machine::cti_op_resolve_base): + (JSC::Machine::cti_op_resolve_skip): + (JSC::Machine::cti_op_resolve_global): + (JSC::Machine::cti_op_div): + (JSC::Machine::cti_op_pre_dec): + (JSC::Machine::cti_op_not): + (JSC::Machine::cti_op_eq): + (JSC::Machine::cti_op_lshift): + (JSC::Machine::cti_op_bitand): + (JSC::Machine::cti_op_rshift): + (JSC::Machine::cti_op_bitnot): + (JSC::Machine::cti_op_mod): + (JSC::Machine::cti_op_less): + (JSC::Machine::cti_op_neq): + (JSC::Machine::cti_op_urshift): + (JSC::Machine::cti_op_bitxor): + (JSC::Machine::cti_op_bitor): + (JSC::Machine::cti_op_call_eval): + (JSC::Machine::cti_op_throw): + (JSC::Machine::cti_op_next_pname): + (JSC::Machine::cti_op_typeof): + (JSC::Machine::cti_op_is_undefined): + (JSC::Machine::cti_op_is_boolean): + (JSC::Machine::cti_op_is_number): + (JSC::Machine::cti_op_is_string): + (JSC::Machine::cti_op_is_object): + (JSC::Machine::cti_op_is_function): + (JSC::Machine::cti_op_stricteq): + (JSC::Machine::cti_op_nstricteq): + (JSC::Machine::cti_op_to_jsnumber): + (JSC::Machine::cti_op_in): + (JSC::Machine::cti_op_del_by_val): + (JSC::Machine::cti_vm_throw): + Removed calls to payload functions. + + * VM/Register.h: + (JSC::Register::Register): Removed overload for JSCell and call + to payload function. + + * kjs/JSCell.h: Changed JSCell to derive from JSValue again. + Removed JSValuePtr constructor. + (JSC::asCell): Changed cast from reinterpret_cast to static_cast. + + * kjs/JSImmediate.h: Removed JSValuePtr class. Added typedef back. + + * kjs/JSValue.h: + (JSC::JSValue::JSValue): Added empty protected inline constructor back. + (JSC::JSValue::~JSValue): Same for destructor. + Removed == and != operator for JSValuePtr. + + * kjs/PropertySlot.h: + (JSC::PropertySlot::PropertySlot): Chnaged argument to const JSValue* + and added a const_cast. + + * kjs/protect.h: Removed overloads and specialization for JSValuePtr. + +2008-10-22 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + Really "fix" CTI mode on windows 2k3. + + This adds new methods fastMallocExecutable and fastFreeExecutable + to wrap allocation for cti code. This still just makes fastMalloc + return executable memory all the time, which will be fixed in a + later patch. + + However in windows debug builds all executable allocations will be + allocated on separate executable pages, which should resolve any + remaining 2k3 issues. Conveniently the 2k3 bot will now also fail + if there are any fastFree vs. fastFreeExecutable errors. + + * ChangeLog: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::~CodeBlock): + * kjs/regexp.cpp: + (JSC::RegExp::~RegExp): + * masm/X86Assembler.h: + (JSC::JITCodeBuffer::copy): + * wtf/FastMalloc.cpp: + (WTF::fastMallocExecutable): + (WTF::fastFreeExecutable): + (WTF::TCMallocStats::fastMallocExecutable): + (WTF::TCMallocStats::fastFreeExecutable): + * wtf/FastMalloc.h: + +2008-10-22 Darin Adler + + Reviewed by Sam Weinig. + + - fix https://bugs.webkit.org/show_bug.cgi?id=21294 + Bug 21294: Devirtualize getOwnPropertySlot() + + A bit over 3% faster on V8 tests. + + * JavascriptCore.exp: Export leak-related functions.. + + * API/JSCallbackConstructor.h: + (JSC::JSCallbackConstructor::createStructureID): Set HasStandardGetOwnPropertySlot + since this class doesn't override getPropertySlot. + * API/JSCallbackFunction.h: + (JSC::JSCallbackFunction::createStructureID): Ditto. + + * VM/ExceptionHelpers.cpp: + (JSC::InterruptedExecutionError::InterruptedExecutionError): Use a structure + that's created just for this class instead of trying to share a single "null + prototype" structure. + + * VM/Machine.cpp: + (JSC::Machine::cti_op_create_arguments_no_params): Rename + Arguments::ArgumentsNoParameters to Arguments::NoParameters. + + * kjs/Arguments.h: Rename the enum from Arguments::ArgumentsParameters to + Arguments::NoParametersType and the value from Arguments::ArgumentsNoParameters + to Arguments::NoParameters. + (JSC::Arguments::createStructureID): Added. Returns a structure without + HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. + (JSC::Arguments::Arguments): Added an assertion that there are no parameters. + + * kjs/DatePrototype.h: + (JSC::DatePrototype::createStructureID): Added. Returns a structure without + HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. + + * kjs/FunctionPrototype.h: + (JSC::FunctionPrototype::createStructureID): Set HasStandardGetOwnPropertySlot + since this class doesn't override getPropertySlot. + * kjs/InternalFunction.h: + (JSC::InternalFunction::createStructureID): Ditto. + + * kjs/JSArray.h: + (JSC::JSArray::createStructureID): Added. Returns a structure without + HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. + + * kjs/JSCell.h: Added declaration of fastGetOwnPropertySlot; a non-virtual + version that uses the structure bit to decide whether to call the virtual + version. + + * kjs/JSFunction.h: + (JSC::JSFunction::createStructureID): Added. Returns a structure without + HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. + + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): Initialize new structures; removed + nullProtoStructureID. + * kjs/JSGlobalData.h: Added new structures. Removed nullProtoStructureID. + + * kjs/JSGlobalObject.h: + (JSC::JSGlobalObject::createStructureID): Added. Returns a structure without + HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. + + * kjs/JSNotAnObject.h: + (JSC::JSNotAnObjectErrorStub::JSNotAnObjectErrorStub): Use a structure + that's created just for this class instead of trying to share a single "null + prototype" structure. + (JSC::JSNotAnObjectErrorStub::isNotAnObjectErrorStub): Marked this function + virtual for clarity and made it private since no one should call it if they + already have a pointer to this specific type. + (JSC::JSNotAnObject::JSNotAnObject): Use a structure that's created just + for this class instead of trying to share a single "null prototype" structure. + (JSC::JSNotAnObject::createStructureID): Added. Returns a structure without + HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. + + * kjs/JSObject.h: + (JSC::JSObject::createStructureID): Added HasStandardGetOwnPropertySlot. + (JSC::JSObject::inlineGetOwnPropertySlot): Added. Used so we can share code + between getOwnPropertySlot and fastGetOwnPropertySlot. + (JSC::JSObject::getOwnPropertySlot): Moved so that functions are above the + functions that call them. Moved the guts of this function into + inlineGetOwnPropertySlot. + (JSC::JSCell::fastGetOwnPropertySlot): Added. Checks the + HasStandardGetOwnPropertySlot bit and if it's set, calls + inlineGetOwnPropertySlot, otherwise calls getOwnPropertySlot. + (JSC::JSObject::getPropertySlot): Changed to call fastGetOwnPropertySlot. + (JSC::JSValue::get): Changed to call fastGetOwnPropertySlot. + + * kjs/JSWrapperObject.h: Made constructor protected to emphasize that + this class is only a base class and never instantiated. + + * kjs/MathObject.h: + (JSC::MathObject::createStructureID): Added. Returns a structure without + HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. + * kjs/NumberConstructor.h: + (JSC::NumberConstructor::createStructureID): Ditto. + * kjs/RegExpConstructor.h: + (JSC::RegExpConstructor::createStructureID): Ditto. + * kjs/RegExpObject.h: + (JSC::RegExpObject::createStructureID): Ditto. + * kjs/StringObject.h: + (JSC::StringObject::createStructureID): Ditto. + + * kjs/TypeInfo.h: Added HasStandardGetOwnPropertySlot flag and + hasStandardGetOwnPropertySlot accessor function. + +2008-10-22 Cameron Zwarich + + Reviewed by Geoff Garen. + + Bug 21803: Fuse op_jfalse with op_eq_null and op_neq_null + + + Fuse op_jfalse with op_eq_null and op_neq_null to make the new opcodes + op_jeq_null and op_jneq_null. + + This is a 2.6% speedup on the V8 Raytrace benchmark, and strangely also + a 4.7% speedup on the V8 Arguments benchmark, even though it uses + neither of the two new opcodes. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitJumpIfTrue): + (JSC::CodeGenerator::emitJumpIfFalse): + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + * VM/Opcode.h: + +2008-10-22 Darin Fisher + + Reviewed by Eric Seidel. + + Should not define PLATFORM(WIN,MAC,GTK) when PLATFORM(CHROMIUM) is defined + https://bugs.webkit.org/show_bug.cgi?id=21757 + + PLATFORM(CHROMIUM) implies HAVE_ACCESSIBILITY + + * wtf/Platform.h: + +2008-10-22 Cameron Zwarich + + Reviewed by Alexey Proskuryakov. + + Correct opcode names in documentation. + + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + +2008-10-21 Oliver Hunt + + RS=Maciej Stachowiak. + + Force FastMalloc to make all allocated pages executable in + a vague hope this will allow the Win2k3 bot to be able to + run tests. + + Filed Bug 21783: Need more granular control over allocation of executable memory + to cover a more granular version of this patch. + + * wtf/TCSystemAlloc.cpp: + (TryVirtualAlloc): + +2008-10-21 Alexey Proskuryakov + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=21769 + MessagePort should be GC protected if there are messages to be delivered + + * wtf/MessageQueue.h: + (WTF::::isEmpty): Added. Also added a warning for methods that return a snapshot of queue + state, thus likely to cause race conditions. + +2008-10-21 Darin Adler + + Reviewed by Maciej Stachowiak. + + - convert post-increment to pre-increment in a couple more places for speed + + Speeds up V8 benchmarks a little on most computers. (But, strangely, slows + them down a little on my computer.) + + * kjs/nodes.cpp: + (JSC::statementListEmitCode): Removed default argument, since we always want + to specify this explicitly. + (JSC::ForNode::emitCode): Tolerate ignoredResult() as the dst -- means the + same thing as 0. + (JSC::ReturnNode::emitCode): Ditto. + (JSC::ThrowNode::emitCode): Ditto. + (JSC::FunctionBodyNode::emitCode): Pass ignoredResult() so that we know we + don't have to compute the result of function statements. + +2008-10-21 Peter Kasting + + Reviewed by Maciej Stachowiak. + + Fix an include of a non-public header to use "" instead of <>. + + * API/JSProfilerPrivate.cpp: + +2008-10-20 Sam Weinig + + Reviewed by Cameron Zwarich. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=21766 + REGRESSION: 12 JSC tests fail + + The JSGlobalObject was mutating the shared nullProtoStructureID when + used in jsc. Instead of using nullProtoStructureID, use a new StructureID. + + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + (JSC::::JSCallbackObject): + * API/JSContextRef.cpp: + (JSGlobalContextCreateInGroup): + * kjs/JSGlobalObject.h: + (JSC::JSGlobalObject::JSGlobalObject): + * kjs/Shell.cpp: + (GlobalObject::GlobalObject): + (jscmain): + +2008-10-20 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Remove an untaken branch in CodeGenerator::emitJumpIfFalse(). This + function is never called with a backwards target LabelID, and there is + even an assertion to this effect at the top of the function body. + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitJumpIfFalse): + +2008-10-20 Cameron Zwarich + + Rubber-stamped by Sam Weinig. + + Add opcode documentation for undocumented opcodes. + + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + +2008-10-16 Sam Weinig + + Reviewed by Cameron Zwarich. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=21683 + Don't create intermediate StructureIDs for builtin objects + + Second stage in reduce number of StructureIDs created when initializing the + JSGlobalObject. + + - Use putDirectWithoutTransition for the remaining singleton objects to reduce + the number of StructureIDs create for about:blank from 132 to 73. + + * kjs/ArrayConstructor.cpp: + (JSC::ArrayConstructor::ArrayConstructor): + * kjs/BooleanConstructor.cpp: + (JSC::BooleanConstructor::BooleanConstructor): + * kjs/BooleanPrototype.cpp: + (JSC::BooleanPrototype::BooleanPrototype): + * kjs/DateConstructor.cpp: + (JSC::DateConstructor::DateConstructor): + * kjs/ErrorConstructor.cpp: + (JSC::ErrorConstructor::ErrorConstructor): + * kjs/ErrorPrototype.cpp: + (JSC::ErrorPrototype::ErrorPrototype): + * kjs/FunctionConstructor.cpp: + (JSC::FunctionConstructor::FunctionConstructor): + * kjs/FunctionPrototype.cpp: + (JSC::FunctionPrototype::FunctionPrototype): + (JSC::FunctionPrototype::addFunctionProperties): + * kjs/FunctionPrototype.h: + (JSC::FunctionPrototype::createStructureID): + * kjs/InternalFunction.cpp: + * kjs/InternalFunction.h: + (JSC::InternalFunction::InternalFunction): + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + * kjs/JSObject.h: + * kjs/MathObject.cpp: + (JSC::MathObject::MathObject): + * kjs/NumberConstructor.cpp: + (JSC::NumberConstructor::NumberConstructor): + * kjs/NumberPrototype.cpp: + (JSC::NumberPrototype::NumberPrototype): + * kjs/ObjectConstructor.cpp: + (JSC::ObjectConstructor::ObjectConstructor): + * kjs/RegExpConstructor.cpp: + (JSC::RegExpConstructor::RegExpConstructor): + * kjs/RegExpPrototype.cpp: + (JSC::RegExpPrototype::RegExpPrototype): + * kjs/StringConstructor.cpp: + (JSC::StringConstructor::StringConstructor): + * kjs/StringPrototype.cpp: + (JSC::StringPrototype::StringPrototype): + * kjs/StructureID.cpp: + (JSC::StructureID::dumpStatistics): + * kjs/StructureID.h: + (JSC::StructureID::setPrototypeWithoutTransition): + +2008-10-20 Alp Toker + + Fix autotools dist build target by listing recently added header + files only. Not reviewed. + + * GNUmakefile.am: + +2008-10-20 Geoffrey Garen + + Reviewed by Anders Carlsson. + + * VM/Machine.cpp: + (JSC::Machine::tryCacheGetByID): Removed a redundant and sometimes + incorrect cast, which started ASSERTing after Darin's last checkin. + +2008-10-20 Geoffrey Garen + + Not reviewed. + + Re-enable CTI, which I accidentally disabled while checking in fixes + to bytecode. + + * wtf/Platform.h: + +2008-10-20 Alp Toker + + Rubber-stamped by Mark Rowe. + + Typo fix in function name: mimimum -> minimum. + + * kjs/DateMath.cpp: + (JSC::minimumYearForDST): + (JSC::equivalentYearForDST): + +2008-10-20 Alp Toker + + Reviewed by Mark Rowe. + + Use pthread instead of GThread where possible in the GTK+ port. This + fixes issues with global initialisation, particularly on GTK+/Win32 + where a late g_thread_init() will cause hangs. + + * GNUmakefile.am: + * wtf/Platform.h: + * wtf/Threading.h: + * wtf/ThreadingGtk.cpp: + * wtf/ThreadingPthreads.cpp: + +2008-10-20 Geoffrey Garen + + Reviewed by Darin Adler. + + Fixed https://bugs.webkit.org/show_bug.cgi?id=21735 + Emit profiling instrumentation only if the Web Inspector's profiling + feature is enabled + + 22.2% speedup on empty function call benchmark. + 2.9% speedup on v8 benchmark. + 0.7% speedup on SunSpider. + + Lesser but similar speedups in bytecode. + + * VM/CTI.cpp: + (JSC::CTI::compileOpCall): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): Nixed JITed profiler hooks. Profiler + hooks now have their own opcodes. Added support for compiling profiler + hook opcodes. + + (JSC::CodeBlock::dump): Dump support for the new profiling opcodes. + + * VM/CodeGenerator.h: + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::CodeGenerator): + (JSC::CodeGenerator::emitCall): + (JSC::CodeGenerator::emitConstruct): Conditionally emit profiling hooks + around call and construct, at the call site. (It's easier to get things + right this way, if you have profiled code calling non-profiled code. + Also, you get a slightly more accurate profile, since you charge the full + cost of the call / construct operation to the callee.) + + Also, fixed a bug where construct would fetch the ".prototype" property + from the constructor before evaluating the arguments to the constructor, + incorrectly allowing an "invalid constructor" exception to short-circuit + argument evaluation. I encountered this bug when trying to make + constructor exceptions work with profiling. + + * VM/Machine.cpp: + (JSC::Machine::callEval): Removed obsolete profiler hooks. + + (JSC::Machine::throwException): Added a check for an exception thrown + within a call instruction. We didn't need this before because the call + instruction would check for a valid call before involing the profiler. + (JSC::Machine::execute): Added a didExecute hook at the end of top-level + function invocation, since op_ret no longer does this for us. + + (JSC::Machine::privateExecute): Removed obsolete profiler hooks. Added + profiler opcodes. Changed some ++vPC to vPC[x] notation, since the + latter is better for performance, and it makes reasoning about the + current opcode in exception handling much simpler. + + (JSC::Machine::cti_op_call_NotJSFunction): Removed obsolete profiler + hooks. + + (JSC::Machine::cti_op_create_arguments_no_params): Added missing + CTI_STACK_HACK that I noticed when adding CTI_STACK_HACK to the new + profiler opcode functions. + + (JSC::Machine::cti_op_profile_will_call): + (JSC::Machine::cti_op_profile_did_call): The new profiler opcode + functions. + + (JSC::Machine::cti_op_construct_NotJSConstruct): Removed obsolete profiler + hooks. + + * VM/Machine.h: + (JSC::Machine::isCallOpcode): Helper for exception handling. + + * VM/Opcode.h: Declare new opcodes. + + * kjs/JSGlobalObject.h: + (JSC::JSGlobalObject::supportsProfiling): Added virtual interface that + allows WebCore to specify whether the target global object has the Web + Inspector's profiling feature enabled. + + * profiler/Profiler.cpp: + (JSC::Profiler::willExecute): + (JSC::Profiler::didExecute): + (JSC::Profiler::createCallIdentifier): + * profiler/Profiler.h: Added support for invoking the profiler with + an arbitrary JSValue*, and not a known object. We didn't need this + before because the call instruction would check for a valid call before + involing the profiler. + +2008-10-20 Darin Adler + + Reviewed by Geoff Garen. + + - get CTI working on Windows again + + * VM/CTI.cpp: + (JSC::CTI::emitCTICall): Add an overload for functions that + return JSObject*. + * VM/CTI.h: Use JSValue* and JSObject* as return types for + cti_op functions. Apparently, MSVC doesn't handle returning + the JSValuePtr struct in a register. We'll have to look into + this more. + + * VM/Machine.cpp: + (JSC::Machine::cti_op_convert_this): + (JSC::Machine::cti_op_add): + (JSC::Machine::cti_op_pre_inc): + (JSC::Machine::cti_op_new_object): + (JSC::Machine::cti_op_get_by_id): + (JSC::Machine::cti_op_get_by_id_second): + (JSC::Machine::cti_op_get_by_id_generic): + (JSC::Machine::cti_op_get_by_id_fail): + (JSC::Machine::cti_op_instanceof): + (JSC::Machine::cti_op_del_by_id): + (JSC::Machine::cti_op_mul): + (JSC::Machine::cti_op_new_func): + (JSC::Machine::cti_op_push_activation): + (JSC::Machine::cti_op_call_NotJSFunction): + (JSC::Machine::cti_op_new_array): + (JSC::Machine::cti_op_resolve): + (JSC::Machine::cti_op_construct_JSConstructFast): + (JSC::Machine::cti_op_construct_NotJSConstruct): + (JSC::Machine::cti_op_get_by_val): + (JSC::Machine::cti_op_sub): + (JSC::Machine::cti_op_lesseq): + (JSC::Machine::cti_op_negate): + (JSC::Machine::cti_op_resolve_base): + (JSC::Machine::cti_op_resolve_skip): + (JSC::Machine::cti_op_resolve_global): + (JSC::Machine::cti_op_div): + (JSC::Machine::cti_op_pre_dec): + (JSC::Machine::cti_op_not): + (JSC::Machine::cti_op_eq): + (JSC::Machine::cti_op_lshift): + (JSC::Machine::cti_op_bitand): + (JSC::Machine::cti_op_rshift): + (JSC::Machine::cti_op_bitnot): + (JSC::Machine::cti_op_new_func_exp): + (JSC::Machine::cti_op_mod): + (JSC::Machine::cti_op_less): + (JSC::Machine::cti_op_neq): + (JSC::Machine::cti_op_urshift): + (JSC::Machine::cti_op_bitxor): + (JSC::Machine::cti_op_new_regexp): + (JSC::Machine::cti_op_bitor): + (JSC::Machine::cti_op_call_eval): + (JSC::Machine::cti_op_throw): + (JSC::Machine::cti_op_next_pname): + (JSC::Machine::cti_op_typeof): + (JSC::Machine::cti_op_is_undefined): + (JSC::Machine::cti_op_is_boolean): + (JSC::Machine::cti_op_is_number): + (JSC::Machine::cti_op_is_string): + (JSC::Machine::cti_op_is_object): + (JSC::Machine::cti_op_is_function): + (JSC::Machine::cti_op_stricteq): + (JSC::Machine::cti_op_nstricteq): + (JSC::Machine::cti_op_to_jsnumber): + (JSC::Machine::cti_op_in): + (JSC::Machine::cti_op_push_new_scope): + (JSC::Machine::cti_op_del_by_val): + (JSC::Machine::cti_op_new_error): + (JSC::Machine::cti_vm_throw): + Change these functions to return pointer types, and never + JSValuePtr. + * VM/Machine.h: Ditto. + +2008-10-20 Geoffrey Garen + + Reviewed by Darin Adler. + + Fixed some recent break-age in bytecode mode. + + * VM/CodeBlock.cpp: + (JSC::CodeBlock::printStructureIDs): Fixed up an ASSERT caused by + Gavin's last checkin. This is a temporary fix so I can keep on moving. + I'll send email about what I think is an underlying problem soon. + + * VM/Machine.cpp: + (JSC::Machine::privateExecute): Removed a redundant and sometimes + incorrect cast, which started ASSERTing after Darin's last checkin. + +2008-10-20 Darin Adler + + - another similar Windows build fix + + * VM/CTI.cpp: Changed return type to JSObject* instead of JSValuePtr. + +2008-10-20 Darin Adler + + - try to fix Windows build + + * VM/CTI.cpp: Use JSValue* instead of JSValuePtr for ctiTrampoline. + * VM/CTI.h: Ditto. + +2008-10-19 Darin Adler + + Reviewed by Cameron Zwarich. + + - finish https://bugs.webkit.org/show_bug.cgi?id=21732 + improve performance by eliminating JSValue as a base class for JSCell + + * VM/Machine.cpp: + (JSC::Machine::cti_op_call_profiler): Use asFunction. + (JSC::Machine::cti_vm_lazyLinkCall): Ditto. + (JSC::Machine::cti_op_construct_JSConstructFast): Use asObject. + + * kjs/JSCell.h: Re-sort friend classes. Eliminate inheritance from + JSValue. Changed cast in asCell from static_cast to reinterpret_cast. + Removed JSValue::getNumber(double&) and one of JSValue::getObject + overloads. + + * kjs/JSValue.h: Made the private constructor and destructor both + non-virtual and also remove the definitions. This class can never + be instantiated or derived. + +2008-10-19 Darin Adler + + Reviewed by Cameron Zwarich. + + - next step of https://bugs.webkit.org/show_bug.cgi?id=21732 + improve performance by eliminating JSValue as a base class for JSCell + + Change JSValuePtr from a typedef into a class. This allows us to support + conversion from JSCell* to JSValuePtr even if JSCell isn't derived from + JSValue. + + * JavaScriptCore.exp: Updated symbols that involve JSValuePtr, since + it's now a distinct type. + + * API/APICast.h: + (toRef): Extract the JSValuePtr payload explicitly since we can't just + cast any more. + * VM/CTI.cpp: + (JSC::CTI::asInteger): Ditto. + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::addConstant): Get at the payload directly. + (JSC::CodeGenerator::emitLoad): Added an overload of JSCell* because + otherwise classes derived from JSValue end up calling the bool + overload instead of JSValuePtr. + * VM/CodeGenerator.h: Ditto. Also update traits to use JSValue* + and the payload functions. + + * VM/Register.h: Added a JSCell* overload and use of payload functions. + + * kjs/JSCell.h: + (JSC::asCell): Use payload function. + (JSC::JSValue::asCell): Use JSValue* instead of JSValuePtr. + (JSC::JSValuePtr::JSValuePtr): Added. Constructor that takes JSCell* + and creates a JSValuePtr. + + * kjs/JSImmediate.h: Added JSValuePtr class. Also updated makeValue + and makeInt to work with JSValue* and the payload function. + + * kjs/JSValue.h: Added == and != operators for JSValuePtr. Put them + here because eventually all the JSValue functions should go here + except what's needed by JSImmediate. Also fix asValue to use + JSValue* instead of JSValuePtr. + + * kjs/PropertySlot.h: Change constructor to take JSValuePtr. + + * kjs/protect.h: Update gcProtect functions to work with JSCell* + as well as JSValuePtr. Also updated the ProtectedPtr + specialization to work more directly. Also changed all the call + sites to use gcProtectNullTolerant. + +2008-10-19 Darin Adler + + Reviewed by Oliver Hunt. + + - next step of https://bugs.webkit.org/show_bug.cgi?id=21732 + improve performance by eliminating JSValue as a base class for JSCell + + Remove most uses of JSValue, which will be removed in a future patch. + + * VM/Machine.cpp: + (JSC::fastToUInt32): Call toUInt32SlowCase function; no longer a member + of JSValue. + * kjs/JSNumberCell.h: + (JSC::JSNumberCell::toInt32): Ditto. + (JSC::JSNumberCell::toUInt32): Ditto. + + * kjs/JSValue.cpp: + (JSC::toInt32SlowCase): Made a non-member function. + (JSC::JSValue::toInt32SlowCase): Changed to call non-member function. + (JSC::toUInt32SlowCase): More of the same. + (JSC::JSValue::toUInt32SlowCase): Ditto. + + * kjs/JSValue.h: Moved static member function so they are no longer + member functions at all. + + * VM/CTI.h: Removed forward declaration of JSValue. + * VM/ExceptionHelpers.h: Ditto. + * kjs/CallData.h: Ditto. + * kjs/ConstructData.h: Ditto. + * kjs/JSGlobalObjectFunctions.h: Ditto. + * kjs/PropertyMap.h: Ditto. + * kjs/StructureID.h: Ditto. + * kjs/collector.h: Ditto. + * kjs/completion.h: Ditto. + + * kjs/grammar.y: + (JSC::makeBitwiseNotNode): Call new non-member toInt32 function. + (JSC::makeLeftShiftNode): More of the same. + (JSC::makeRightShiftNode): Ditto. + + * kjs/protect.h: Added a specialization for ProtectedPtr + so this can be used with JSValuePtr. + +2008-10-18 Darin Adler + + Reviewed by Oliver Hunt. + + - next step of https://bugs.webkit.org/show_bug.cgi?id=21732 + improve performance by eliminating JSValue as a base class for JSCell + + Tweak a little more to get closer to where we can make JSValuePtr a class. + + * API/APICast.h: + (toJS): Change back to JSValue* here, since we're converting the + pointer type. + * VM/CTI.cpp: + (JSC::CTI::unlinkCall): Call asPointer. + * VM/CTI.h: Cast to JSValue* here, since it's a pointer cast. + * kjs/DebuggerCallFrame.h: + (JSC::DebuggerCallFrame::DebuggerCallFrame): Call noValue. + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): Call noValue. + * kjs/JSImmediate.cpp: + (JSC::JSImmediate::toObject): Remove unneeded const_cast. + * kjs/JSWrapperObject.h: + (JSC::JSWrapperObject::JSWrapperObject): Call noValue. + +2008-10-18 Darin Adler + + - fix non-all-in-one build + + * kjs/completion.h: + (JSC::Completion::Completion): Add include of JSValue.h. + +2008-10-18 Darin Adler + + Reviewed by Oliver Hunt. + + - fix assertions I introduced with my casting changes + + These were showing up as failures in the JavaScriptCore tests. + + * VM/Machine.cpp: + (JSC::Machine::cti_op_instanceof): Remove the bogus asCell casting that + was at the top of the function, and instead cast at the point of use. + (JSC::Machine::cti_op_construct_NotJSConstruct): Moved the cast to + object after checking the construct type. + +2008-10-18 Darin Adler + + - fix non-all-in-one build + + * kjs/JSGlobalObjectFunctions.h: Add include of JSImmedate.h (for now). + +2008-10-18 Darin Adler + + - fix build + + * kjs/interpreter.h: Include JSValue.h instead of JSImmediate.h. + +2008-10-18 Darin Adler + + * kjs/interpreter.h: Fix include of JSImmediate.h. + +2008-10-18 Darin Adler + + - fix non-all-in-one build + + * kjs/interpreter.h: Add include of JSImmediate.h. + +2008-10-18 Darin Adler + + - fix non-all-in-one build + + * kjs/ConstructData.h: Add include of JSImmedate.h (for now). + +2008-10-18 Darin Adler + + - try to fix Windows build + + * VM/Machine.cpp: + (JSC::Machine::Machine): Use JSCell* type since MSVC seems to only allow + calling ~JSCell directly if it's a JSCell*. + +2008-10-18 Darin Adler + + Reviewed by Cameron Zwarich. + + - next step on https://bugs.webkit.org/show_bug.cgi?id=21732 + improve performance by eliminating JSValue as a base class for JSCell + + Use JSValuePtr everywhere instead of JSValue*. In the future, we'll be + changing JSValuePtr to be a class, and then eventually renaming it + to JSValue once that's done. + + * JavaScriptCore.exp: Update entry points, since some now take JSValue* + instead of const JSValue*. + + * API/APICast.h: + * API/JSCallbackConstructor.h: + * API/JSCallbackFunction.cpp: + * API/JSCallbackFunction.h: + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + * API/JSContextRef.cpp: + * API/JSObjectRef.cpp: + * API/JSValueRef.cpp: + * VM/CTI.cpp: + * VM/CTI.h: + * VM/CodeBlock.cpp: + * VM/CodeBlock.h: + * VM/CodeGenerator.cpp: + * VM/CodeGenerator.h: + * VM/ExceptionHelpers.cpp: + * VM/ExceptionHelpers.h: + * VM/JSPropertyNameIterator.cpp: + * VM/JSPropertyNameIterator.h: + * VM/Machine.cpp: + * VM/Machine.h: + * VM/Register.h: + * kjs/ArgList.cpp: + * kjs/ArgList.h: + * kjs/Arguments.cpp: + * kjs/Arguments.h: + * kjs/ArrayConstructor.cpp: + * kjs/ArrayPrototype.cpp: + * kjs/BooleanConstructor.cpp: + * kjs/BooleanConstructor.h: + * kjs/BooleanObject.h: + * kjs/BooleanPrototype.cpp: + * kjs/CallData.cpp: + * kjs/CallData.h: + * kjs/ConstructData.cpp: + * kjs/ConstructData.h: + * kjs/DateConstructor.cpp: + * kjs/DateInstance.h: + * kjs/DatePrototype.cpp: + * kjs/DebuggerCallFrame.cpp: + * kjs/DebuggerCallFrame.h: + * kjs/ErrorConstructor.cpp: + * kjs/ErrorPrototype.cpp: + * kjs/ExecState.cpp: + * kjs/ExecState.h: + * kjs/FunctionConstructor.cpp: + * kjs/FunctionPrototype.cpp: + * kjs/GetterSetter.cpp: + * kjs/GetterSetter.h: + * kjs/InternalFunction.h: + * kjs/JSActivation.cpp: + * kjs/JSActivation.h: + * kjs/JSArray.cpp: + * kjs/JSArray.h: + * kjs/JSCell.cpp: + * kjs/JSCell.h: + * kjs/JSFunction.cpp: + * kjs/JSFunction.h: + * kjs/JSGlobalData.h: + * kjs/JSGlobalObject.cpp: + * kjs/JSGlobalObject.h: + * kjs/JSGlobalObjectFunctions.cpp: + * kjs/JSGlobalObjectFunctions.h: + * kjs/JSImmediate.cpp: + * kjs/JSImmediate.h: + * kjs/JSNotAnObject.cpp: + * kjs/JSNotAnObject.h: + * kjs/JSNumberCell.cpp: + * kjs/JSNumberCell.h: + * kjs/JSObject.cpp: + * kjs/JSObject.h: + * kjs/JSStaticScopeObject.cpp: + * kjs/JSStaticScopeObject.h: + * kjs/JSString.cpp: + * kjs/JSString.h: + * kjs/JSValue.h: + * kjs/JSVariableObject.h: + * kjs/JSWrapperObject.h: + * kjs/MathObject.cpp: + * kjs/NativeErrorConstructor.cpp: + * kjs/NumberConstructor.cpp: + * kjs/NumberConstructor.h: + * kjs/NumberObject.cpp: + * kjs/NumberObject.h: + * kjs/NumberPrototype.cpp: + * kjs/ObjectConstructor.cpp: + * kjs/ObjectPrototype.cpp: + * kjs/ObjectPrototype.h: + * kjs/PropertyMap.h: + * kjs/PropertySlot.cpp: + * kjs/PropertySlot.h: + * kjs/RegExpConstructor.cpp: + * kjs/RegExpConstructor.h: + * kjs/RegExpMatchesArray.h: + * kjs/RegExpObject.cpp: + * kjs/RegExpObject.h: + * kjs/RegExpPrototype.cpp: + * kjs/Shell.cpp: + * kjs/StringConstructor.cpp: + * kjs/StringObject.cpp: + * kjs/StringObject.h: + * kjs/StringObjectThatMasqueradesAsUndefined.h: + * kjs/StringPrototype.cpp: + * kjs/StructureID.cpp: + * kjs/StructureID.h: + * kjs/collector.cpp: + * kjs/collector.h: + * kjs/completion.h: + * kjs/grammar.y: + * kjs/interpreter.cpp: + * kjs/interpreter.h: + * kjs/lookup.cpp: + * kjs/lookup.h: + * kjs/nodes.h: + * kjs/operations.cpp: + * kjs/operations.h: + * kjs/protect.h: + * profiler/ProfileGenerator.cpp: + Replace JSValue* with JSValuePtr. + +2008-10-18 Darin Adler + + * VM/Machine.cpp: + (JSC::Machine::cti_op_call_eval): Removed stray parentheses from my + last check-in. + +2008-10-18 Darin Adler + + Reviewed by Oliver Hunt. + + - first step of https://bugs.webkit.org/show_bug.cgi?id=21732 + improve performance by eliminating JSValue as a base class for JSCell + + Remove casts from JSValue* to derived classes, replacing them with + calls to inline casting functions. These functions are also a bit + better than aidrect cast because they also do a runtime assertion. + + Removed use of 0 as for JSValue*, changing call sites to use a + noValue() function instead. + + Move things needed by classes derived from JSValue out of the class, + since the classes won't be deriving from JSValue any more soon. + + I did most of these changes by changing JSValue to not be JSValue* any + more, then fixing a lot of the compilation problems, then rolling out + the JSValue change. + + 1.011x as fast on SunSpider (presumably due to some of the Machine.cpp changes) + + * API/APICast.h: Removed unneeded forward declarations. + + * API/JSCallbackObject.h: Added an asCallbackObject function for casting. + * API/JSCallbackObjectFunctions.h: + (JSC::JSCallbackObject::asCallbackObject): Added. + (JSC::JSCallbackObject::getOwnPropertySlot): Use asObject. + (JSC::JSCallbackObject::call): Use noValue. + (JSC::JSCallbackObject::staticValueGetter): Use asCallbackObject. + (JSC::JSCallbackObject::staticFunctionGetter): Ditto. + (JSC::JSCallbackObject::callbackGetter): Ditto. + + * JavaScriptCore.exp: Updated. + + * JavaScriptCore.xcodeproj/project.pbxproj: Added RegExpMatchesArray.h. + + * VM/CTI.cpp: + (JSC::CTI::asInteger): Added. For use casting a JSValue to an integer. + (JSC::CTI::emitGetArg): Use asInteger. + (JSC::CTI::emitGetPutArg): Ditto. + (JSC::CTI::getConstantImmediateNumericArg): Ditto. Also use noValue. + (JSC::CTI::emitInitRegister): Use asInteger. + (JSC::CTI::getDeTaggedConstantImmediate): Ditto. + (JSC::CTI::compileOpCallInitializeCallFrame): Ditto. + (JSC::CTI::compileOpCall): Ditto. + (JSC::CTI::compileOpStrictEq): Ditto. + (JSC::CTI::privateCompileMainPass): Ditto. + (JSC::CTI::privateCompileGetByIdProto): Ditto. + (JSC::CTI::privateCompileGetByIdChain): Ditto. + (JSC::CTI::privateCompilePutByIdTransition): Ditto. + * VM/CTI.h: Rewrite the ARG-related macros to use C++ casts instead of + C casts and get rid of some extra parentheses. Addd declaration of + asInteger. + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitEqualityOp): Use asString. + (JSC::CodeGenerator::emitLoad): Use noValue. + (JSC::CodeGenerator::findScopedProperty): Change globalObject argument + to JSObject* instead of JSValue*. + (JSC::CodeGenerator::emitResolve): Remove unneeded cast. + (JSC::CodeGenerator::emitGetScopedVar): Use asCell. + (JSC::CodeGenerator::emitPutScopedVar): Ditto. + * VM/CodeGenerator.h: Changed out argument of findScopedProperty. + Also change the JSValueMap to use PtrHash explicitly instead of + getting it from DefaultHash. + + * VM/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::toPrimitive): Use noValue. + * VM/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::next): Ditto. + + * VM/Machine.cpp: + (JSC::fastIsNumber): Moved isImmediate check here instead of + checking for 0 inside Heap::isNumber. Use asCell and asNumberCell. + (JSC::fastToInt32): Ditto. + (JSC::fastToUInt32): Ditto. + (JSC::jsLess): Use asString. + (JSC::jsLessEq): Ditto. + (JSC::jsAdd): Ditto. + (JSC::jsTypeStringForValue): Use asObject. + (JSC::jsIsObjectType): Ditto. + (JSC::jsIsFunctionType): Ditto. + (JSC::inlineResolveBase): Use noValue. + (JSC::Machine::callEval): Use asString. Initialize result to + undefined, not 0. + (JSC::Machine::Machine): Remove unneeded casts to JSCell*. + (JSC::Machine::throwException): Use asObject. + (JSC::Machine::debug): Remove explicit calls to the DebuggerCallFrame + constructor. + (JSC::Machine::checkTimeout): Use noValue. + (JSC::cachePrototypeChain): Use asObject. + (JSC::Machine::tryCachePutByID): Use asCell. + (JSC::Machine::tryCacheGetByID): Use aCell and asObject. + (JSC::Machine::privateExecute): Use noValue, asCell, asObject, asString, + asArray, asActivation, asFunction. Changed code that creates call frames + for host functions to pass 0 for the function pointer -- the call frame + needs a JSFunction* and a host function object is not one. This was + caught by the assertions in the casting functions. Also remove some + unneeded casts in cases where two values are compared. + (JSC::Machine::retrieveLastCaller): Use noValue. + (JSC::Machine::tryCTICachePutByID): Use asCell. + (JSC::Machine::tryCTICacheGetByID): Use aCell and asObject. + (JSC::setUpThrowTrampolineReturnAddress): Added this function to restore + the PIC-branch-avoidance that was recently lost. + (JSC::Machine::cti_op_add): Use asString. + (JSC::Machine::cti_op_instanceof): Use asCell and asObject. + (JSC::Machine::cti_op_call_JSFunction): Use asFunction. + (JSC::Machine::cti_op_call_NotJSFunction): Changed code to pass 0 for + the function pointer, since we don't have a JSFunction. Use asObject. + (JSC::Machine::cti_op_tear_off_activation): Use asActivation. + (JSC::Machine::cti_op_construct_JSConstruct): Use asFunction and asObject. + (JSC::Machine::cti_op_construct_NotJSConstruct): use asObject. + (JSC::Machine::cti_op_get_by_val): Use asArray and asString. + (JSC::Machine::cti_op_resolve_func): Use asPointer; this helps prepare + us for a situation where JSValue is not a pointer. + (JSC::Machine::cti_op_put_by_val): Use asArray. + (JSC::Machine::cti_op_put_by_val_array): Ditto. + (JSC::Machine::cti_op_resolve_global): Use asGlobalObject. + (JSC::Machine::cti_op_post_inc): Change VM_CHECK_EXCEPTION_2 to + VM_CHECK_EXCEPTION_AT_END, since there's no observable work done after + that point. Also use asPointer. + (JSC::Machine::cti_op_resolve_with_base): Use asPointer. + (JSC::Machine::cti_op_post_dec): Change VM_CHECK_EXCEPTION_2 to + VM_CHECK_EXCEPTION_AT_END, since there's no observable work done after + that point. Also use asPointer. + (JSC::Machine::cti_op_call_eval): Use asObject, noValue, and change + VM_CHECK_EXCEPTION_ARG to VM_THROW_EXCEPTION_AT_END. + (JSC::Machine::cti_op_throw): Change return value to a JSValue*. + (JSC::Machine::cti_op_in): Use asObject. + (JSC::Machine::cti_op_switch_char): Use asString. + (JSC::Machine::cti_op_switch_string): Ditto. + (JSC::Machine::cti_op_put_getter): Use asObject. + (JSC::Machine::cti_op_put_setter): Ditto. + (JSC::Machine::cti_vm_throw): Change return value to a JSValue*. + Use noValue. + * VM/Machine.h: Change return values of both cti_op_throw and + cti_vm_throw to JSValue*. + + * VM/Register.h: Remove nullJSValue, which is the same thing + as noValue(). Also removed unneeded definition of JSValue. + + * kjs/ArgList.h: Removed unneeded definition of JSValue. + + * kjs/Arguments.h: + (JSC::asArguments): Added. + + * kjs/ArrayPrototype.cpp: + (JSC::getProperty): Use noValue. + (JSC::arrayProtoFuncToString): Use asArray. + (JSC::arrayProtoFuncToLocaleString): Ditto. + (JSC::arrayProtoFuncConcat): Ditto. + (JSC::arrayProtoFuncPop): Ditto. Also removed unneeded initialization + of the result, which is set in both sides of the branch. + (JSC::arrayProtoFuncPush): Ditto. + (JSC::arrayProtoFuncShift): Removed unneeded initialization + of the result, which is set in both sides of the branch. + (JSC::arrayProtoFuncSort): Use asArray. + + * kjs/BooleanObject.h: + (JSC::asBooleanObject): Added. + + * kjs/BooleanPrototype.cpp: + (JSC::booleanProtoFuncToString): Use asBooleanObject. + (JSC::booleanProtoFuncValueOf): Ditto. + + * kjs/CallData.cpp: + (JSC::call): Use asObject and asFunction. + * kjs/ConstructData.cpp: + (JSC::construct): Ditto. + + * kjs/DateConstructor.cpp: + (JSC::constructDate): Use asDateInstance. + + * kjs/DateInstance.h: + (JSC::asDateInstance): Added. + + * kjs/DatePrototype.cpp: + (JSC::dateProtoFuncToString): Use asDateInstance. + (JSC::dateProtoFuncToUTCString): Ditto. + (JSC::dateProtoFuncToDateString): Ditto. + (JSC::dateProtoFuncToTimeString): Ditto. + (JSC::dateProtoFuncToLocaleString): Ditto. + (JSC::dateProtoFuncToLocaleDateString): Ditto. + (JSC::dateProtoFuncToLocaleTimeString): Ditto. + (JSC::dateProtoFuncValueOf): Ditto. + (JSC::dateProtoFuncGetTime): Ditto. + (JSC::dateProtoFuncGetFullYear): Ditto. + (JSC::dateProtoFuncGetUTCFullYear): Ditto. + (JSC::dateProtoFuncToGMTString): Ditto. + (JSC::dateProtoFuncGetMonth): Ditto. + (JSC::dateProtoFuncGetUTCMonth): Ditto. + (JSC::dateProtoFuncGetDate): Ditto. + (JSC::dateProtoFuncGetUTCDate): Ditto. + (JSC::dateProtoFuncGetDay): Ditto. + (JSC::dateProtoFuncGetUTCDay): Ditto. + (JSC::dateProtoFuncGetHours): Ditto. + (JSC::dateProtoFuncGetUTCHours): Ditto. + (JSC::dateProtoFuncGetMinutes): Ditto. + (JSC::dateProtoFuncGetUTCMinutes): Ditto. + (JSC::dateProtoFuncGetSeconds): Ditto. + (JSC::dateProtoFuncGetUTCSeconds): Ditto. + (JSC::dateProtoFuncGetMilliSeconds): Ditto. + (JSC::dateProtoFuncGetUTCMilliseconds): Ditto. + (JSC::dateProtoFuncGetTimezoneOffset): Ditto. + (JSC::dateProtoFuncSetTime): Ditto. + (JSC::setNewValueFromTimeArgs): Ditto. + (JSC::setNewValueFromDateArgs): Ditto. + (JSC::dateProtoFuncSetYear): Ditto. + (JSC::dateProtoFuncGetYear): Ditto. + + * kjs/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::thisObject): Use asObject. + (JSC::DebuggerCallFrame::evaluate): Use noValue. + * kjs/DebuggerCallFrame.h: Added a constructor that + takes only a callFrame. + + * kjs/ExecState.h: + (JSC::ExecState::clearException): Use noValue. + + * kjs/FunctionPrototype.cpp: + (JSC::functionProtoFuncToString): Use asFunction. + (JSC::functionProtoFuncApply): Use asArguments and asArray. + + * kjs/GetterSetter.cpp: + (JSC::GetterSetter::getPrimitiveNumber): Use noValue. + + * kjs/GetterSetter.h: + (JSC::asGetterSetter): Added. + + * kjs/InternalFunction.cpp: + (JSC::InternalFunction::name): Use asString. + + * kjs/InternalFunction.h: + (JSC::asInternalFunction): Added. + + * kjs/JSActivation.cpp: + (JSC::JSActivation::argumentsGetter): Use asActivation. + + * kjs/JSActivation.h: + (JSC::asActivation): Added. + + * kjs/JSArray.cpp: + (JSC::JSArray::putSlowCase): Use noValue. + (JSC::JSArray::deleteProperty): Ditto. + (JSC::JSArray::increaseVectorLength): Ditto. + (JSC::JSArray::setLength): Ditto. + (JSC::JSArray::pop): Ditto. + (JSC::JSArray::sort): Ditto. + (JSC::JSArray::compactForSorting): Ditto. + * kjs/JSArray.h: + (JSC::asArray): Added. + + * kjs/JSCell.cpp: + (JSC::JSCell::getJSNumber): Use noValue. + + * kjs/JSCell.h: + (JSC::asCell): Added. + (JSC::JSValue::asCell): Changed to not preserve const. + Given the wide use of JSValue* and JSCell*, it's not + really useful to use const. + (JSC::JSValue::isNumber): Use asValue. + (JSC::JSValue::isString): Ditto. + (JSC::JSValue::isGetterSetter): Ditto. + (JSC::JSValue::isObject): Ditto. + (JSC::JSValue::getNumber): Ditto. + (JSC::JSValue::getString): Ditto. + (JSC::JSValue::getObject): Ditto. + (JSC::JSValue::getCallData): Ditto. + (JSC::JSValue::getConstructData): Ditto. + (JSC::JSValue::getUInt32): Ditto. + (JSC::JSValue::getTruncatedInt32): Ditto. + (JSC::JSValue::getTruncatedUInt32): Ditto. + (JSC::JSValue::mark): Ditto. + (JSC::JSValue::marked): Ditto. + (JSC::JSValue::toPrimitive): Ditto. + (JSC::JSValue::getPrimitiveNumber): Ditto. + (JSC::JSValue::toBoolean): Ditto. + (JSC::JSValue::toNumber): Ditto. + (JSC::JSValue::toString): Ditto. + (JSC::JSValue::toObject): Ditto. + (JSC::JSValue::toThisObject): Ditto. + (JSC::JSValue::needsThisConversion): Ditto. + (JSC::JSValue::toThisString): Ditto. + (JSC::JSValue::getJSNumber): Ditto. + + * kjs/JSFunction.cpp: + (JSC::JSFunction::argumentsGetter): Use asFunction. + (JSC::JSFunction::callerGetter): Ditto. + (JSC::JSFunction::lengthGetter): Ditto. + (JSC::JSFunction::construct): Use asObject. + + * kjs/JSFunction.h: + (JSC::asFunction): Added. + + * kjs/JSGlobalObject.cpp: + (JSC::lastInPrototypeChain): Use asObject. + + * kjs/JSGlobalObject.h: + (JSC::asGlobalObject): Added. + (JSC::ScopeChainNode::globalObject): Use asGlobalObject. + + * kjs/JSImmediate.h: Added noValue, asPointer, and makeValue + functions. Use rawValue, makeValue, and noValue consistently + instead of doing reinterpret_cast in various functions. + + * kjs/JSNumberCell.h: + (JSC::asNumberCell): Added. + (JSC::JSValue::uncheckedGetNumber): Use asValue and asNumberCell. + (JSC::JSValue::toJSNumber): Use asValue. + + * kjs/JSObject.cpp: + (JSC::JSObject::put): Use asObject and asGetterSetter. + (JSC::callDefaultValueFunction): Use noValue. + (JSC::JSObject::defineGetter): Use asGetterSetter. + (JSC::JSObject::defineSetter): Ditto. + (JSC::JSObject::lookupGetter): Ditto. Also use asObject. + (JSC::JSObject::lookupSetter): Ditto. + (JSC::JSObject::hasInstance): Use asObject. + (JSC::JSObject::fillGetterPropertySlot): Use asGetterSetter. + + * kjs/JSObject.h: + (JSC::JSObject::getDirect): Use noValue. + (JSC::asObject): Added. + (JSC::JSValue::isObject): Use asValue. + (JSC::JSObject::get): Removed unneeded const_cast. + (JSC::JSObject::getPropertySlot): Use asObject. + (JSC::JSValue::get): Removed unneeded const_cast. + Use asValue, asCell, and asObject. + (JSC::JSValue::put): Ditto. + (JSC::JSObject::allocatePropertyStorageInline): Fixed spelling + of "oldPropertStorage". + + * kjs/JSString.cpp: + (JSC::JSString::getOwnPropertySlot): Use asObject. + + * kjs/JSString.h: + (JSC::asString): Added. + (JSC::JSValue::toThisJSString): Use asValue. + + * kjs/JSValue.h: Make PreferredPrimitiveType a top level enum + instead of a member of JSValue. Added an asValue function that + returns this. Removed overload of asCell for const. Use asValue + instead of getting right at this. + + * kjs/ObjectPrototype.cpp: + (JSC::objectProtoFuncIsPrototypeOf): Use asObject. + (JSC::objectProtoFuncDefineGetter): Ditto. + (JSC::objectProtoFuncDefineSetter): Ditto. + + * kjs/PropertySlot.h: + (JSC::PropertySlot::PropertySlot): Take a const JSValue* so the + callers don't have to worry about const. + (JSC::PropertySlot::clearBase): Use noValue. + (JSC::PropertySlot::clearValue): Ditto. + + * kjs/RegExpConstructor.cpp: + (JSC::regExpConstructorDollar1): Use asRegExpConstructor. + (JSC::regExpConstructorDollar2): Ditto. + (JSC::regExpConstructorDollar3): Ditto. + (JSC::regExpConstructorDollar4): Ditto. + (JSC::regExpConstructorDollar5): Ditto. + (JSC::regExpConstructorDollar6): Ditto. + (JSC::regExpConstructorDollar7): Ditto. + (JSC::regExpConstructorDollar8): Ditto. + (JSC::regExpConstructorDollar9): Ditto. + (JSC::regExpConstructorInput): Ditto. + (JSC::regExpConstructorMultiline): Ditto. + (JSC::regExpConstructorLastMatch): Ditto. + (JSC::regExpConstructorLastParen): Ditto. + (JSC::regExpConstructorLeftContext): Ditto. + (JSC::regExpConstructorRightContext): Ditto. + (JSC::setRegExpConstructorInput): Ditto. + (JSC::setRegExpConstructorMultiline): Ditto. + (JSC::constructRegExp): Use asObject. + + * kjs/RegExpConstructor.h: + (JSC::asRegExpConstructor): Added. + + * kjs/RegExpObject.cpp: + (JSC::regExpObjectGlobal): Use asRegExpObject. + (JSC::regExpObjectIgnoreCase): Ditto. + (JSC::regExpObjectMultiline): Ditto. + (JSC::regExpObjectSource): Ditto. + (JSC::regExpObjectLastIndex): Ditto. + (JSC::setRegExpObjectLastIndex): Ditto. + (JSC::callRegExpObject): Ditto. + + * kjs/RegExpObject.h: + (JSC::asRegExpObject): Added. + + * kjs/RegExpPrototype.cpp: + (JSC::regExpProtoFuncTest): Use asRegExpObject. + (JSC::regExpProtoFuncExec): Ditto. + (JSC::regExpProtoFuncCompile): Ditto. + (JSC::regExpProtoFuncToString): Ditto. + + * kjs/StringObject.h: + (JSC::StringObject::internalValue): Use asString. + (JSC::asStringObject): Added. + + * kjs/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): Use asRegExpObject. + (JSC::stringProtoFuncToString): Ue asStringObject. + (JSC::stringProtoFuncMatch): Use asRegExpObject. + (JSC::stringProtoFuncSearch): Ditto. + (JSC::stringProtoFuncSplit): Ditto. + + * kjs/StructureID.cpp: + (JSC::StructureID::getEnumerablePropertyNames): Use asObject. + (JSC::StructureID::createCachedPrototypeChain): Ditto. + (JSC::StructureIDChain::StructureIDChain): Use asCell and asObject. + + * kjs/collector.h: + (JSC::Heap::isNumber): Removed null handling. This can only be called + on valid cells. + (JSC::Heap::cellBlock): Removed overload for const and non-const. + Whether the JSCell* is const or not really should have no effect on + whether you can modify the collector block it's in. + + * kjs/interpreter.cpp: + (JSC::Interpreter::evaluate): Use noValue and noObject. + + * kjs/nodes.cpp: + (JSC::FunctionCallResolveNode::emitCode): Use JSObject for the global + object rather than JSValue. + (JSC::PostfixResolveNode::emitCode): Ditto. + (JSC::PrefixResolveNode::emitCode): Ditto. + (JSC::ReadModifyResolveNode::emitCode): Ditto. + (JSC::AssignResolveNode::emitCode): Ditto. + + * kjs/operations.h: + (JSC::equalSlowCaseInline): Use asString, asCell, asNumberCell, + (JSC::strictEqualSlowCaseInline): Ditto. + +2008-10-18 Cameron Zwarich + + Reviewed by Oliver Hunt. + + Bug 21702: Special op_create_activation for the case where there are no named parameters + + + This is a 2.5% speedup on the V8 Raytrace benchmark and a 1.1% speedup + on the V8 Earley-Boyer benchmark. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + * VM/Machine.cpp: + (JSC::Machine::cti_op_create_arguments_no_params): + * VM/Machine.h: + * kjs/Arguments.h: + (JSC::Arguments::): + (JSC::Arguments::Arguments): + +2008-10-17 Maciej Stachowiak + + Reviewed by Cameron Zwarich. + + - in debug builds, alter the stack to avoid blowing out MallocStackLogging + + (In essence, while executing a CTI function we alter the return + address to jscGeneratedNativeCode so that a single consistent + function is on the stack instead of many random functions without + symbols.) + + * VM/CTI.h: + * VM/Machine.cpp: + (JSC::doSetReturnAddress): + (JSC::): + (JSC::StackHack::StackHack): + (JSC::StackHack::~StackHack): + (JSC::Machine::cti_op_convert_this): + (JSC::Machine::cti_op_end): + (JSC::Machine::cti_op_add): + (JSC::Machine::cti_op_pre_inc): + (JSC::Machine::cti_timeout_check): + (JSC::Machine::cti_register_file_check): + (JSC::Machine::cti_op_loop_if_less): + (JSC::Machine::cti_op_loop_if_lesseq): + (JSC::Machine::cti_op_new_object): + (JSC::Machine::cti_op_put_by_id): + (JSC::Machine::cti_op_put_by_id_second): + (JSC::Machine::cti_op_put_by_id_generic): + (JSC::Machine::cti_op_put_by_id_fail): + (JSC::Machine::cti_op_get_by_id): + (JSC::Machine::cti_op_get_by_id_second): + (JSC::Machine::cti_op_get_by_id_generic): + (JSC::Machine::cti_op_get_by_id_fail): + (JSC::Machine::cti_op_instanceof): + (JSC::Machine::cti_op_del_by_id): + (JSC::Machine::cti_op_mul): + (JSC::Machine::cti_op_new_func): + (JSC::Machine::cti_op_call_profiler): + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_vm_lazyLinkCall): + (JSC::Machine::cti_vm_compile): + (JSC::Machine::cti_op_push_activation): + (JSC::Machine::cti_op_call_NotJSFunction): + (JSC::Machine::cti_op_create_arguments): + (JSC::Machine::cti_op_tear_off_activation): + (JSC::Machine::cti_op_tear_off_arguments): + (JSC::Machine::cti_op_ret_profiler): + (JSC::Machine::cti_op_ret_scopeChain): + (JSC::Machine::cti_op_new_array): + (JSC::Machine::cti_op_resolve): + (JSC::Machine::cti_op_construct_JSConstructFast): + (JSC::Machine::cti_op_construct_JSConstruct): + (JSC::Machine::cti_op_construct_NotJSConstruct): + (JSC::Machine::cti_op_get_by_val): + (JSC::Machine::cti_op_resolve_func): + (JSC::Machine::cti_op_sub): + (JSC::Machine::cti_op_put_by_val): + (JSC::Machine::cti_op_put_by_val_array): + (JSC::Machine::cti_op_lesseq): + (JSC::Machine::cti_op_loop_if_true): + (JSC::Machine::cti_op_negate): + (JSC::Machine::cti_op_resolve_base): + (JSC::Machine::cti_op_resolve_skip): + (JSC::Machine::cti_op_resolve_global): + (JSC::Machine::cti_op_div): + (JSC::Machine::cti_op_pre_dec): + (JSC::Machine::cti_op_jless): + (JSC::Machine::cti_op_not): + (JSC::Machine::cti_op_jtrue): + (JSC::Machine::cti_op_post_inc): + (JSC::Machine::cti_op_eq): + (JSC::Machine::cti_op_lshift): + (JSC::Machine::cti_op_bitand): + (JSC::Machine::cti_op_rshift): + (JSC::Machine::cti_op_bitnot): + (JSC::Machine::cti_op_resolve_with_base): + (JSC::Machine::cti_op_new_func_exp): + (JSC::Machine::cti_op_mod): + (JSC::Machine::cti_op_less): + (JSC::Machine::cti_op_neq): + (JSC::Machine::cti_op_post_dec): + (JSC::Machine::cti_op_urshift): + (JSC::Machine::cti_op_bitxor): + (JSC::Machine::cti_op_new_regexp): + (JSC::Machine::cti_op_bitor): + (JSC::Machine::cti_op_call_eval): + (JSC::Machine::cti_op_throw): + (JSC::Machine::cti_op_get_pnames): + (JSC::Machine::cti_op_next_pname): + (JSC::Machine::cti_op_push_scope): + (JSC::Machine::cti_op_pop_scope): + (JSC::Machine::cti_op_typeof): + (JSC::Machine::cti_op_is_undefined): + (JSC::Machine::cti_op_is_boolean): + (JSC::Machine::cti_op_is_number): + (JSC::Machine::cti_op_is_string): + (JSC::Machine::cti_op_is_object): + (JSC::Machine::cti_op_is_function): + (JSC::Machine::cti_op_stricteq): + (JSC::Machine::cti_op_nstricteq): + (JSC::Machine::cti_op_to_jsnumber): + (JSC::Machine::cti_op_in): + (JSC::Machine::cti_op_push_new_scope): + (JSC::Machine::cti_op_jmp_scopes): + (JSC::Machine::cti_op_put_by_index): + (JSC::Machine::cti_op_switch_imm): + (JSC::Machine::cti_op_switch_char): + (JSC::Machine::cti_op_switch_string): + (JSC::Machine::cti_op_del_by_val): + (JSC::Machine::cti_op_put_getter): + (JSC::Machine::cti_op_put_setter): + (JSC::Machine::cti_op_new_error): + (JSC::Machine::cti_op_debug): + (JSC::Machine::cti_vm_throw): + +2008-10-17 Gavin Barraclough + + Optimize op_call by allowing call sites to be directly linked to callees. + + For the hot path of op_call, CTI now generates a check (initially for an impossible + value), and the first time the call is executed we attempt to link the call directly + to the callee. We can currently only do so if the arity of the caller and callee + match. The (optimized) setup for the call on the hot path is linked directly to + the ctiCode for the callee, without indirection. + + Two forms of the slow case of the call are generated, the first will be executed the + first time the call is reached. As well as this path attempting to link the call to + a callee, it also relinks the slow case to a second slow case, which will not continue + to attempt relinking the call. (This policy could be changed in future, but for not + this is intended to prevent thrashing). + + If a callee that the caller has been linked to is garbage collected, then the link + in the caller's JIt code will be reset back to a value that cannot match - to prevent + any false positive matches. + + ~20% progression on deltablue & richards, >12% overall reduction in v8-tests + runtime, one or two percent progression on sunspider. + + Reviewed by Oliver Hunt. + + * VM/CTI.cpp: + (JSC::): + (JSC::CTI::emitNakedCall): + (JSC::unreachable): + (JSC::CTI::compileOpCallInitializeCallFrame): + (JSC::CTI::compileOpCallSetupArgs): + (JSC::CTI::compileOpCall): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + (JSC::CTI::unlinkCall): + (JSC::CTI::linkCall): + * VM/CTI.h: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::~CodeBlock): + (JSC::CodeBlock::unlinkCallers): + (JSC::CodeBlock::derefStructureIDs): + * VM/CodeBlock.h: + (JSC::StructureStubInfo::StructureStubInfo): + (JSC::CallLinkInfo::CallLinkInfo): + (JSC::CodeBlock::addCaller): + (JSC::CodeBlock::removeCaller): + (JSC::CodeBlock::getStubInfo): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitCall): + (JSC::CodeGenerator::emitConstruct): + * VM/Machine.cpp: + (JSC::Machine::cti_op_call_profiler): + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_vm_lazyLinkCall): + (JSC::Machine::cti_op_construct_JSConstructFast): + (JSC::Machine::cti_op_construct_JSConstruct): + (JSC::Machine::cti_op_construct_NotJSConstruct): + * VM/Machine.h: + * kjs/JSFunction.cpp: + (JSC::JSFunction::~JSFunction): + * kjs/JSFunction.h: + * kjs/nodes.h: + (JSC::FunctionBodyNode::): + * masm/X86Assembler.h: + (JSC::X86Assembler::getDifferenceBetweenLabels): + +2008-10-17 Maciej Stachowiak + + Reviewed by Geoff Garen. + + - remove ASSERT that makes the leaks buildbot cry + + * kjs/JSFunction.cpp: + (JSC::JSFunction::JSFunction): + +2008-10-17 Maciej Stachowiak + + Reviewed by Cameron Zwarich + + - don't bother to do arguments tearoff when it will have no effect + + ~1% on v8 raytrace + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitReturn): + +2008-10-17 Marco Barisione + + Reviewed by Sam Weinig. Landed by Jan Alonzo. + + https://bugs.webkit.org/show_bug.cgi?id=21603 + [GTK] Minor fixes to GOwnPtr + + * wtf/GOwnPtr.cpp: + (WTF::GError): + (WTF::GList): + (WTF::GCond): + (WTF::GMutex): + (WTF::GPatternSpec): + (WTF::GDir): + * wtf/GOwnPtr.h: + (WTF::freeOwnedGPtr): + (WTF::GOwnPtr::~GOwnPtr): + (WTF::GOwnPtr::outPtr): + (WTF::GOwnPtr::set): + (WTF::GOwnPtr::clear): + * wtf/Threading.h: + +2008-10-17 Maciej Stachowiak + + Reviewed by Cameron Zwarich. + + - speed up transitions that resize the property storage a fair bit + + ~3% speedup on v8 RayTrace benchmark, ~1% on DeltaBlue + + * VM/CTI.cpp: + (JSC::resizePropertyStorage): renamed from transitionObject, and reduced to just resize + the object's property storage with one inline call. + (JSC::CTI::privateCompilePutByIdTransition): Use a separate function for property storage + resize, but still do all the rest of the work in assembly in that case, and pass the known + compile-time constants of old and new size rather than structureIDs, saving a bunch of + redundant memory access. + * kjs/JSObject.cpp: + (JSC::JSObject::allocatePropertyStorage): Just call the inline version. + * kjs/JSObject.h: + (JSC::JSObject::allocatePropertyStorageInline): Inline version of allocatePropertyStorage + * masm/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::pushl_i32): Add code to assmeble push of a constant; code originally by Cameron Zwarich. + +2008-10-17 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Remove some C style casts. + + * masm/X86Assembler.h: + (JSC::JITCodeBuffer::putIntUnchecked): + (JSC::X86Assembler::link): + (JSC::X86Assembler::linkAbsoluteAddress): + (JSC::X86Assembler::getRelocatedAddress): + +2008-10-17 Cameron Zwarich + + Rubber-stamped by Maciej Stachowiak. + + Remove some C style casts. + + * VM/CTI.cpp: + (JSC::CTI::patchGetByIdSelf): + (JSC::CTI::patchPutByIdReplace): + * VM/Machine.cpp: + (JSC::Machine::tryCTICachePutByID): + (JSC::Machine::tryCTICacheGetByID): + (JSC::Machine::cti_op_put_by_id): + (JSC::Machine::cti_op_put_by_id_fail): + (JSC::Machine::cti_op_get_by_id): + (JSC::Machine::cti_op_get_by_id_fail): + +2008-10-17 Maciej Stachowiak + + Reviewed by Cameron Zwarich. + + - Avoid restoring the caller's 'r' value in op_ret + https://bugs.webkit.org/show_bug.cgi?id=21319 + + This patch stops writing the call frame at call and return points; + instead it does so immediately before any CTI call. + + 0.5% speedup or so on the v8 benchmark + + * VM/CTI.cpp: + (JSC::CTI::emitCTICall): + (JSC::CTI::compileOpCall): + (JSC::CTI::emitSlowScriptCheck): + (JSC::CTI::compileBinaryArithOpSlowCase): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + * VM/CTI.h: + +2008-10-17 Cameron Zwarich + + Reviewed by Sam Weinig. + + Make WREC require CTI because it won't actually compile otherwise. + + * wtf/Platform.h: + +2008-10-16 Maciej Stachowiak + + Reviewed by Geoff Garen. + + - fixed JavaScriptCore should not force building with gcc 4.0 + - use gcc 4.2 when building with Xcode 3.1 or newer on Leopard, even though this is not the default + + This time there is no performance regression; we can avoid having + to use the fastcall calling convention for CTI functions by using + varargs to prevent the compiler from moving things around on the + stack. + + * Configurations/DebugRelease.xcconfig: + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CTI.cpp: + * VM/Machine.h: + * wtf/Platform.h: + +2008-10-16 Maciej Stachowiak + + Reviewed by Oliver Hunt. + + - fix for REGRESSION: r37631 causing crashes on buildbot + https://bugs.webkit.org/show_bug.cgi?id=21682 + + * kjs/collector.cpp: + (JSC::Heap::collect): Avoid crashing when a GC occurs while no global objects are live. + +2008-10-16 Sam Weinig + + Reviewed by Maciej Stachowiak. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=21683 + Don't create intermediate StructureIDs for builtin objects + + First step in reduce number of StructureIDs created when initializing the + JSGlobalObject. + + - In order to avoid creating the intermediate StructureIDs use the new putDirectWithoutTransition + and putDirectFunctionWithoutTransition to add properties to JSObjects without transitioning + the StructureID. This patch just implements this strategy for ObjectPrototype but alone + reduces the number of StructureIDs create for about:blank by 10, from 142 to 132. + + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + * kjs/JSObject.cpp: + (JSC::JSObject::putDirectFunctionWithoutTransition): + * kjs/JSObject.h: + (JSC::JSObject::putDirectWithoutTransition): + * kjs/ObjectPrototype.cpp: + (JSC::ObjectPrototype::ObjectPrototype): + * kjs/ObjectPrototype.h: + * kjs/StructureID.cpp: + (JSC::StructureID::addPropertyWithoutTransition): + * kjs/StructureID.h: + +2008-10-16 Maciej Stachowiak + + Reviewed by Cameron Zwarich. + + - fix for: REGRESSION: over 100 StructureIDs leak loading about:blank (result of fix for bug 21633) + + Apparent slight progression (< 0.5%) on v8 benchmarks and SunSpider. + + * kjs/StructureID.cpp: + (JSC::StructureID::~StructureID): Don't deref this object's parent's pointer to + itself from the destructor; that doesn't even make sense. + (JSC::StructureID::addPropertyTransition): Don't refer the single transition; + the rule is that parent StructureIDs are ref'd but child ones are not. Refing + the child creates a cycle. + +2008-10-15 Alexey Proskuryakov + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=21609 + Make MessagePorts protect their peers across heaps + + * JavaScriptCore.exp: + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::markCrossHeapDependentObjects): + * kjs/JSGlobalObject.h: + * kjs/collector.cpp: + (JSC::Heap::collect): + Before GC sweep phase, a function supplied by global object is now called for all global + objects in the heap, making it possible to implement cross-heap dependencies. + +2008-10-15 Alexey Proskuryakov + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=21610 + run-webkit-threads --threaded crashes in StructureID destructor + + * kjs/StructureID.cpp: + (JSC::StructureID::StructureID): + (JSC::StructureID::~StructureID): + Protect access to a static (debug-only) HashSet with a lock. + +2008-10-15 Sam Weinig + + Reviewed by Goeffrey Garen. + + Add function to dump statistics for StructureIDs. + + * kjs/StructureID.cpp: + (JSC::StructureID::dumpStatistics): + (JSC::StructureID::StructureID): + (JSC::StructureID::~StructureID): + * kjs/StructureID.h: + +2008-10-15 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Bug 21633: Avoid using a HashMap when there is only a single transition + + + This is a 0.8% speedup on SunSpider and between a 0.5% and 1.0% speedup + on the V8 benchmark suite, depending on which harness we use. It will + also slightly reduce the memory footprint of a StructureID. + + * kjs/StructureID.cpp: + (JSC::StructureID::StructureID): + (JSC::StructureID::~StructureID): + (JSC::StructureID::addPropertyTransition): + * kjs/StructureID.h: + (JSC::StructureID::): + +2008-10-15 Csaba Osztrogonac + + Reviewed by Geoffrey Garen. + + 1.40% speedup on SunSpider, 1.44% speedup on V8. (Linux) + + No change on Mac. + + * VM/Machine.cpp: + (JSC::fastIsNumber): ALWAYS_INLINE modifier added. + +2008-10-15 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Fixed https://bugs.webkit.org/show_bug.cgi?id=21345 + Start the debugger without reloading the inspected page + + * JavaScriptCore.exp: New symbols. + * JavaScriptCore.xcodeproj/project.pbxproj: New files. + + * VM/CodeBlock.h: + (JSC::EvalCodeCache::get): Updated for tweak to parsing API. + + * kjs/CollectorHeapIterator.h: Added. An iterator for the object heap, + which we use to find all the live functions and recompile them. + + * kjs/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::evaluate): Updated for tweak to parsing API. + + * kjs/FunctionConstructor.cpp: + (JSC::constructFunction): Updated for tweak to parsing API. + + * kjs/JSFunction.cpp: + (JSC::JSFunction::JSFunction): Try to validate our SourceCode in debug + builds by ASSERTing that it's syntactically valid. This doesn't catch + all SourceCode bugs, but it catches a lot of them. + + * kjs/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncEval): Updated for tweak to parsing API. + + * kjs/Parser.cpp: + (JSC::Parser::parse): + * kjs/Parser.h: + (JSC::Parser::parse): Tweaked the parser to make it possible to parse + without an ExecState, and to allow the client to specify a debugger to + notify (or not) about the source we parse. This allows the inspector + to recompile even though no JavaScript is executing, then notify the + debugger about all source code when it's done. + + * kjs/Shell.cpp: + (prettyPrintScript): Updated for tweak to parsing API. + + * kjs/SourceRange.h: + (JSC::SourceCode::isNull): Added to help with ASSERTs. + + * kjs/collector.cpp: + (JSC::Heap::heapAllocate): + (JSC::Heap::sweep): + (JSC::Heap::primaryHeapBegin): + (JSC::Heap::primaryHeapEnd): + * kjs/collector.h: + (JSC::): Moved a bunch of declarations around to enable compilation of + CollectorHeapIterator. + + * kjs/interpreter.cpp: + (JSC::Interpreter::checkSyntax): + (JSC::Interpreter::evaluate): Updated for tweak to parsing API. + + * kjs/lexer.h: + (JSC::Lexer::sourceCode): BUG FIX: Calculate SourceCode ranges relative + to the SourceCode range in which we're lexing, otherwise nested functions + that are compiled individually get SourceCode ranges that don't reflect + their nesting. + + * kjs/nodes.cpp: + (JSC::FunctionBodyNode::FunctionBodyNode): + (JSC::FunctionBodyNode::finishParsing): + (JSC::FunctionBodyNode::create): + (JSC::FunctionBodyNode::copyParameters): + * kjs/nodes.h: + (JSC::ScopeNode::setSource): + (JSC::FunctionBodyNode::parameterCount): Added some helper functions for + copying one FunctionBodyNode's parameters to another. The recompiler uses + these when calling "finishParsing". + +2008-10-15 Joerg Bornemann + + Reviewed by Darin Adler. + + - part of https://bugs.webkit.org/show_bug.cgi?id=20746 + Fix compilation on Windows CE. + + str(n)icmp, strdup and vsnprintf are not available on Windows CE, + they are called _str(n)icmp, etc. instead + + * wtf/StringExtras.h: Added inline function implementations. + +2008-10-15 Gabor Loki + + Reviewed by Cameron Zwarich. + + + Use simple uint32_t multiplication on op_mul if both operands are + immediate number and they are between zero and 0x7FFF. + + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + +2008-10-09 Darin Fisher + + Reviewed by Sam Weinig. + + Make pan scrolling a platform configurable option. + https://bugs.webkit.org/show_bug.cgi?id=21515 + + * wtf/Platform.h: Add ENABLE_PAN_SCROLLING + +2008-10-14 Maciej Stachowiak + + Rubber stamped by Sam Weinig. + + - revert r37572 and r37581 for now + + Turns out GCC 4.2 is still a (small) regression, we'll have to do + more work to turn it on. + + * Configurations/DebugRelease.xcconfig: + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CTI.cpp: + * VM/CTI.h: + * VM/Machine.cpp: + (JSC::Machine::cti_op_convert_this): + (JSC::Machine::cti_op_end): + (JSC::Machine::cti_op_add): + (JSC::Machine::cti_op_pre_inc): + (JSC::Machine::cti_timeout_check): + (JSC::Machine::cti_register_file_check): + (JSC::Machine::cti_op_loop_if_less): + (JSC::Machine::cti_op_loop_if_lesseq): + (JSC::Machine::cti_op_new_object): + (JSC::Machine::cti_op_put_by_id): + (JSC::Machine::cti_op_put_by_id_second): + (JSC::Machine::cti_op_put_by_id_generic): + (JSC::Machine::cti_op_put_by_id_fail): + (JSC::Machine::cti_op_get_by_id): + (JSC::Machine::cti_op_get_by_id_second): + (JSC::Machine::cti_op_get_by_id_generic): + (JSC::Machine::cti_op_get_by_id_fail): + (JSC::Machine::cti_op_instanceof): + (JSC::Machine::cti_op_del_by_id): + (JSC::Machine::cti_op_mul): + (JSC::Machine::cti_op_new_func): + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_vm_compile): + (JSC::Machine::cti_op_push_activation): + (JSC::Machine::cti_op_call_NotJSFunction): + (JSC::Machine::cti_op_create_arguments): + (JSC::Machine::cti_op_tear_off_activation): + (JSC::Machine::cti_op_tear_off_arguments): + (JSC::Machine::cti_op_ret_profiler): + (JSC::Machine::cti_op_ret_scopeChain): + (JSC::Machine::cti_op_new_array): + (JSC::Machine::cti_op_resolve): + (JSC::Machine::cti_op_construct_JSConstruct): + (JSC::Machine::cti_op_construct_NotJSConstruct): + (JSC::Machine::cti_op_get_by_val): + (JSC::Machine::cti_op_resolve_func): + (JSC::Machine::cti_op_sub): + (JSC::Machine::cti_op_put_by_val): + (JSC::Machine::cti_op_put_by_val_array): + (JSC::Machine::cti_op_lesseq): + (JSC::Machine::cti_op_loop_if_true): + (JSC::Machine::cti_op_negate): + (JSC::Machine::cti_op_resolve_base): + (JSC::Machine::cti_op_resolve_skip): + (JSC::Machine::cti_op_resolve_global): + (JSC::Machine::cti_op_div): + (JSC::Machine::cti_op_pre_dec): + (JSC::Machine::cti_op_jless): + (JSC::Machine::cti_op_not): + (JSC::Machine::cti_op_jtrue): + (JSC::Machine::cti_op_post_inc): + (JSC::Machine::cti_op_eq): + (JSC::Machine::cti_op_lshift): + (JSC::Machine::cti_op_bitand): + (JSC::Machine::cti_op_rshift): + (JSC::Machine::cti_op_bitnot): + (JSC::Machine::cti_op_resolve_with_base): + (JSC::Machine::cti_op_new_func_exp): + (JSC::Machine::cti_op_mod): + (JSC::Machine::cti_op_less): + (JSC::Machine::cti_op_neq): + (JSC::Machine::cti_op_post_dec): + (JSC::Machine::cti_op_urshift): + (JSC::Machine::cti_op_bitxor): + (JSC::Machine::cti_op_new_regexp): + (JSC::Machine::cti_op_bitor): + (JSC::Machine::cti_op_call_eval): + (JSC::Machine::cti_op_throw): + (JSC::Machine::cti_op_get_pnames): + (JSC::Machine::cti_op_next_pname): + (JSC::Machine::cti_op_push_scope): + (JSC::Machine::cti_op_pop_scope): + (JSC::Machine::cti_op_typeof): + (JSC::Machine::cti_op_is_undefined): + (JSC::Machine::cti_op_is_boolean): + (JSC::Machine::cti_op_is_number): + (JSC::Machine::cti_op_is_string): + (JSC::Machine::cti_op_is_object): + (JSC::Machine::cti_op_is_function): + (JSC::Machine::cti_op_stricteq): + (JSC::Machine::cti_op_nstricteq): + (JSC::Machine::cti_op_to_jsnumber): + (JSC::Machine::cti_op_in): + (JSC::Machine::cti_op_push_new_scope): + (JSC::Machine::cti_op_jmp_scopes): + (JSC::Machine::cti_op_put_by_index): + (JSC::Machine::cti_op_switch_imm): + (JSC::Machine::cti_op_switch_char): + (JSC::Machine::cti_op_switch_string): + (JSC::Machine::cti_op_del_by_val): + (JSC::Machine::cti_op_put_getter): + (JSC::Machine::cti_op_put_setter): + (JSC::Machine::cti_op_new_error): + (JSC::Machine::cti_op_debug): + (JSC::Machine::cti_vm_throw): + * VM/Machine.h: + * masm/X86Assembler.h: + (JSC::X86Assembler::emitRestoreArgumentReference): + (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline): + * wtf/Platform.h: + +2008-10-14 Alexey Proskuryakov + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=20256 + Array.push and other standard methods disappear + + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::~JSGlobalData): + Don't use static hash tables even on platforms that don't enable JSC_MULTIPLE_THREADS - + these tables reference IdentifierTable, which is always per-GlobalData. + +2008-10-14 Maciej Stachowiak + + Reviewed by Cameron Zwarich. + + - always use CTI_ARGUMENTS and CTI_ARGUMENTS_FASTCALL + + This is a small regression for GCC 4.0, but simplifies the code + for future improvements and lets us focus on GCC 4.2+ and MSVC. + + * VM/CTI.cpp: + * VM/CTI.h: + * VM/Machine.cpp: + (JSC::Machine::cti_op_convert_this): + (JSC::Machine::cti_op_end): + (JSC::Machine::cti_op_add): + (JSC::Machine::cti_op_pre_inc): + (JSC::Machine::cti_timeout_check): + (JSC::Machine::cti_register_file_check): + (JSC::Machine::cti_op_loop_if_less): + (JSC::Machine::cti_op_loop_if_lesseq): + (JSC::Machine::cti_op_new_object): + (JSC::Machine::cti_op_put_by_id): + (JSC::Machine::cti_op_put_by_id_second): + (JSC::Machine::cti_op_put_by_id_generic): + (JSC::Machine::cti_op_put_by_id_fail): + (JSC::Machine::cti_op_get_by_id): + (JSC::Machine::cti_op_get_by_id_second): + (JSC::Machine::cti_op_get_by_id_generic): + (JSC::Machine::cti_op_get_by_id_fail): + (JSC::Machine::cti_op_instanceof): + (JSC::Machine::cti_op_del_by_id): + (JSC::Machine::cti_op_mul): + (JSC::Machine::cti_op_new_func): + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_vm_compile): + (JSC::Machine::cti_op_push_activation): + (JSC::Machine::cti_op_call_NotJSFunction): + (JSC::Machine::cti_op_create_arguments): + (JSC::Machine::cti_op_tear_off_activation): + (JSC::Machine::cti_op_tear_off_arguments): + (JSC::Machine::cti_op_ret_profiler): + (JSC::Machine::cti_op_ret_scopeChain): + (JSC::Machine::cti_op_new_array): + (JSC::Machine::cti_op_resolve): + (JSC::Machine::cti_op_construct_JSConstruct): + (JSC::Machine::cti_op_construct_NotJSConstruct): + (JSC::Machine::cti_op_get_by_val): + (JSC::Machine::cti_op_resolve_func): + (JSC::Machine::cti_op_sub): + (JSC::Machine::cti_op_put_by_val): + (JSC::Machine::cti_op_put_by_val_array): + (JSC::Machine::cti_op_lesseq): + (JSC::Machine::cti_op_loop_if_true): + (JSC::Machine::cti_op_negate): + (JSC::Machine::cti_op_resolve_base): + (JSC::Machine::cti_op_resolve_skip): + (JSC::Machine::cti_op_resolve_global): + (JSC::Machine::cti_op_div): + (JSC::Machine::cti_op_pre_dec): + (JSC::Machine::cti_op_jless): + (JSC::Machine::cti_op_not): + (JSC::Machine::cti_op_jtrue): + (JSC::Machine::cti_op_post_inc): + (JSC::Machine::cti_op_eq): + (JSC::Machine::cti_op_lshift): + (JSC::Machine::cti_op_bitand): + (JSC::Machine::cti_op_rshift): + (JSC::Machine::cti_op_bitnot): + (JSC::Machine::cti_op_resolve_with_base): + (JSC::Machine::cti_op_new_func_exp): + (JSC::Machine::cti_op_mod): + (JSC::Machine::cti_op_less): + (JSC::Machine::cti_op_neq): + (JSC::Machine::cti_op_post_dec): + (JSC::Machine::cti_op_urshift): + (JSC::Machine::cti_op_bitxor): + (JSC::Machine::cti_op_new_regexp): + (JSC::Machine::cti_op_bitor): + (JSC::Machine::cti_op_call_eval): + (JSC::Machine::cti_op_throw): + (JSC::Machine::cti_op_get_pnames): + (JSC::Machine::cti_op_next_pname): + (JSC::Machine::cti_op_push_scope): + (JSC::Machine::cti_op_pop_scope): + (JSC::Machine::cti_op_typeof): + (JSC::Machine::cti_op_is_undefined): + (JSC::Machine::cti_op_is_boolean): + (JSC::Machine::cti_op_is_number): + (JSC::Machine::cti_op_is_string): + (JSC::Machine::cti_op_is_object): + (JSC::Machine::cti_op_is_function): + (JSC::Machine::cti_op_stricteq): + (JSC::Machine::cti_op_nstricteq): + (JSC::Machine::cti_op_to_jsnumber): + (JSC::Machine::cti_op_in): + (JSC::Machine::cti_op_push_new_scope): + (JSC::Machine::cti_op_jmp_scopes): + (JSC::Machine::cti_op_put_by_index): + (JSC::Machine::cti_op_switch_imm): + (JSC::Machine::cti_op_switch_char): + (JSC::Machine::cti_op_switch_string): + (JSC::Machine::cti_op_del_by_val): + (JSC::Machine::cti_op_put_getter): + (JSC::Machine::cti_op_put_setter): + (JSC::Machine::cti_op_new_error): + (JSC::Machine::cti_op_debug): + (JSC::Machine::cti_vm_throw): + * VM/Machine.h: + * masm/X86Assembler.h: + (JSC::X86Assembler::emitRestoreArgumentReference): + (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline): + * wtf/Platform.h: + +2008-10-13 Maciej Stachowiak + + Reviewed by Cameron Zwarich. + + - make Machine::getArgumentsData an Arguments method and inline it + + ~2% on v8 raytrace + + * VM/Machine.cpp: + * kjs/Arguments.h: + (JSC::Machine::getArgumentsData): + +2008-10-13 Alp Toker + + Fix autotools dist build target by listing recently added header + files only. Not reviewed. + + * GNUmakefile.am: + +2008-10-13 Maciej Stachowiak + + Rubber stamped by Mark Rowe. + + - fixed JavaScriptCore should not force building with gcc 4.0 + - use gcc 4.2 when building with Xcode 3.1 or newer on Leopard, even though this is not the default + + * Configurations/DebugRelease.xcconfig: + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-10-13 Cameron Zwarich + + Reviewed by Geoff Garen. + + Bug 21541: Move RegisterFile growth check to callee + + + Move the RegisterFile growth check to the callee in the common case, + where some of the information is known statically at JIT time. There is + still a check in the caller in the case where the caller provides too + few arguments. + + This is a 2.1% speedup on the V8 benchmark, including a 5.1% speedup on + the Richards benchmark, a 4.1% speedup on the DeltaBlue benchmark, and a + 1.4% speedup on the Earley-Boyer benchmark. It is also a 0.5% speedup on + SunSpider. + + * VM/CTI.cpp: + (JSC::CTI::privateCompile): + * VM/Machine.cpp: + (JSC::Machine::cti_register_file_check): + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_op_construct_JSConstruct): + * VM/Machine.h: + * VM/RegisterFile.h: + * masm/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::cmpl_mr): + (JSC::X86Assembler::emitUnlinkedJg): + +2008-10-13 Sam Weinig + + Reviewed by Dan Bernstein. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=21577 + 5 false positive StructureID leaks + + - Add leak ignore set to StructureID to selectively ignore leaking some StructureIDs. + - Add create method to JSGlolalData to be used when the data will be intentionally + leaked and ignore all leaks caused the StructureIDs stored in it. + + * JavaScriptCore.exp: + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::createLeaked): + * kjs/JSGlobalData.h: + * kjs/StructureID.cpp: + (JSC::StructureID::StructureID): + (JSC::StructureID::~StructureID): + (JSC::StructureID::startIgnoringLeaks): + (JSC::StructureID::stopIgnoringLeaks): + * kjs/StructureID.h: + +2008-10-13 Marco Barisione + + Reviewed by Darin Adler. Landed by Jan Alonzo. + + WebKit GTK Port needs a smartpointer to handle g_free (GFreePtr?) + http://bugs.webkit.org/show_bug.cgi?id=20483 + + Add a GOwnPtr smart pointer (similar to OwnPtr) to handle memory + allocated by GLib and start the conversion to use it. + + * GNUmakefile.am: + * wtf/GOwnPtr.cpp: Added. + (WTF::GError): + (WTF::GList): + (WTF::GCond): + (WTF::GMutex): + (WTF::GPatternSpec): + (WTF::GDir): + * wtf/GOwnPtr.h: Added. + (WTF::freeOwnedPtr): + (WTF::GOwnPtr::GOwnPtr): + (WTF::GOwnPtr::~GOwnPtr): + (WTF::GOwnPtr::get): + (WTF::GOwnPtr::release): + (WTF::GOwnPtr::rawPtr): + (WTF::GOwnPtr::set): + (WTF::GOwnPtr::clear): + (WTF::GOwnPtr::operator*): + (WTF::GOwnPtr::operator->): + (WTF::GOwnPtr::operator!): + (WTF::GOwnPtr::operator UnspecifiedBoolType): + (WTF::GOwnPtr::swap): + (WTF::swap): + (WTF::operator==): + (WTF::operator!=): + (WTF::getPtr): + * wtf/Threading.h: + * wtf/ThreadingGtk.cpp: + (WTF::Mutex::~Mutex): + (WTF::Mutex::lock): + (WTF::Mutex::tryLock): + (WTF::Mutex::unlock): + (WTF::ThreadCondition::~ThreadCondition): + (WTF::ThreadCondition::wait): + (WTF::ThreadCondition::timedWait): + (WTF::ThreadCondition::signal): + (WTF::ThreadCondition::broadcast): + +2008-10-12 Gabriella Toth + + Reviewed by Darin Adler. + + - part of https://bugs.webkit.org/show_bug.cgi?id=21055 + Bug 21055: not invoked functions + + * kjs/nodes.cpp: Deleted a function that is not invoked: + statementListInitializeVariableAccessStack. + +2008-10-12 Darin Adler + + Reviewed by Sam Weinig. + + * wtf/unicode/icu/UnicodeIcu.h: Fixed indentation to match WebKit coding style. + * wtf/unicode/qt4/UnicodeQt4.h: Ditto. + +2008-10-12 Darin Adler + + Reviewed by Sam Weinig. + + - https://bugs.webkit.org/show_bug.cgi?id=21556 + Bug 21556: non-ASCII digits are allowed in places where only ASCII should be + + * wtf/unicode/icu/UnicodeIcu.h: Removed isDigit, digitValue, and isFormatChar. + * wtf/unicode/qt4/UnicodeQt4.h: Ditto. + +2008-10-12 Anders Carlsson + + Reviewed by Darin Adler. + + Make the append method that takes a Vector more strict - it now requires the elements + of the vector to be appended same type as the elements of the Vector they're being appended to. + + This would cause problems when dealing with Vectors containing other Vectors. + + * wtf/Vector.h: + (WTF::::append): + +2008-10-11 Cameron Zwarich + + Reviewed by Sam Weinig. + + Clean up RegExpMatchesArray.h to match our coding style. + + * kjs/RegExpMatchesArray.h: + (JSC::RegExpMatchesArray::getOwnPropertySlot): + (JSC::RegExpMatchesArray::put): + (JSC::RegExpMatchesArray::deleteProperty): + (JSC::RegExpMatchesArray::getPropertyNames): + +2008-10-11 Cameron Zwarich + + Reviewed by Sam Weinig. + + Bug 21525: 55 StructureID leaks on Wikitravel's main page + + + Bug 21533: Simple JavaScript code leaks StructureIDs + + + StructureID::getEnumerablePropertyNames() ends up calling back to itself + via JSObject::getPropertyNames(), which causes the PropertyNameArray to + be cached twice. This leads to a memory leak in almost every use of + JSObject::getPropertyNames() on an object. The fix here is based on a + suggestion of Sam Weinig. + + This patch also fixes every StructureID leaks that occurs while running + the Mozilla MemBuster test. + + * kjs/PropertyNameArray.h: + (JSC::PropertyNameArray::PropertyNameArray): + (JSC::PropertyNameArray::setCacheable): + (JSC::PropertyNameArray::cacheable): + * kjs/StructureID.cpp: + (JSC::StructureID::getEnumerablePropertyNames): + +2008-10-10 Oliver Hunt + + Reviewed by Cameron Zwarich. + + Use fastcall calling convention on GCC > 4.0 + + Results in a 2-3% improvement in GCC 4.2 performance, so + that it is no longer a regression vs. GCC 4.0 + + * VM/CTI.cpp: + * VM/Machine.h: + * wtf/Platform.h: + +2008-10-10 Sam Weinig + + Reviewed by Darin Adler. + + - Add a workaround for a bug in ceil in Darwin libc. + - Remove old workarounds for JS math functions that are not needed + anymore. + + The math functions are heavily tested by fast/js/math.html. + + * kjs/MathObject.cpp: + (JSC::mathProtoFuncAbs): Remove workaround. + (JSC::mathProtoFuncCeil): Ditto. + (JSC::mathProtoFuncFloor): Ditto. + * wtf/MathExtras.h: + (wtf_ceil): Add ceil workaround for darwin. + +2008-10-10 Sam Weinig + + Reviewed by Darin Adler + + Add Assertions to JSObject constructor. + + * kjs/JSObject.h: + (JSC::JSObject::JSObject): + +2008-10-10 Sam Weinig + + Reviewed by Cameron Zwarich. + + Remove now unused m_getterSetterFlag variable from PropertyMap. + + * kjs/PropertyMap.cpp: + (JSC::PropertyMap::operator=): + * kjs/PropertyMap.h: + (JSC::PropertyMap::PropertyMap): + +2008-10-09 Sam Weinig + + Reviewed by Maciej Stachowiak. + + Add leaks checking to StructureID. + + * kjs/StructureID.cpp: + (JSC::StructureID::StructureID): + (JSC::StructureID::~StructureID): + +2008-10-09 Alp Toker + + Reviewed by Mark Rowe. + + https://bugs.webkit.org/show_bug.cgi?id=20760 + Implement support for x86 Linux in CTI + + Prepare to enable CTI/WREC on supported architectures. + + Make it possible to use the CTI_ARGUMENT workaround with GCC as well + as MSVC by fixing some preprocessor conditionals. + + Note that CTI/WREC no longer requires CTI_ARGUMENT on Linux so we + don't actually enable it except when building with MSVC. GCC on Win32 + remains untested. + + Adapt inline ASM code to use the global symbol underscore prefix only + on Darwin and to call the properly mangled Machine::cti_vm_throw + symbol name depending on CTI_ARGUMENT. + + Also avoid global inclusion of the JIT infrastructure headers + throughout WebCore and WebKit causing recompilation of about ~1500 + source files after modification to X86Assembler.h, CTI.h, WREC.h, + which are only used deep inside JavaScriptCore. + + * GNUmakefile.am: + * VM/CTI.cpp: + * VM/CTI.h: + * VM/Machine.cpp: + * VM/Machine.h: + * kjs/regexp.cpp: + (JSC::RegExp::RegExp): + (JSC::RegExp::~RegExp): + (JSC::RegExp::match): + * kjs/regexp.h: + * masm/X86Assembler.h: + (JSC::X86Assembler::emitConvertToFastCall): + (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline): + (JSC::X86Assembler::emitRestoreArgumentReference): + +2008-10-09 Gavin Barraclough + + Reviewed by Cameron Zwarich. + + Fix for bug #21160, x=0;1/(x*-1) == -Infinity + + * ChangeLog: + * VM/CTI.cpp: + (JSC::CTI::emitFastArithDeTagImmediate): + (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero): + (JSC::CTI::compileBinaryArithOp): + (JSC::CTI::compileBinaryArithOpSlowCase): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/CTI.h: + * masm/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::emitUnlinkedJs): + +2008-10-09 Cameron Zwarich + + Reviewed by Oliver Hunt. + + Bug 21459: REGRESSION (r37324): Safari crashes inside JavaScriptCore while browsing hulu.com + + + After r37324, an Arguments object does not mark an associated activation + object. This change was made because Arguments no longer directly used + the activation object in any way. However, if an activation is torn off, + then the backing store of Arguments becomes the register array of the + activation object. Arguments directly marks all of the arguments, but + the activation object is being collected, which causes its register + array to be freed and new memory to be allocated in its place. + + Unfortunately, it does not seem possible to reproduce this issue in a + layout test. + + * kjs/Arguments.cpp: + (JSC::Arguments::mark): + * kjs/Arguments.h: + (JSC::Arguments::setActivation): + (JSC::Arguments::Arguments): + (JSC::JSActivation::copyRegisters): + +2008-10-09 Ariya Hidayat + + Reviewed by Simon. + + Build fix for MinGW. + + * wtf/AlwaysInline.h: + +2008-10-08 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Bug 21497: REGRESSION (r37433): Bytecode JSC tests are severely broken + + + Fix a typo in r37433 that causes the failure of a large number of JSC + tests with the bytecode interpreter enabled. + + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + +2008-10-08 Mark Rowe + + Windows build fix. + + * VM/CTI.cpp: + (JSC::): Update type of argument to ctiTrampoline. + +2008-10-08 Darin Adler + + Reviewed by Cameron Zwarich. + + - https://bugs.webkit.org/show_bug.cgi?id=21403 + Bug 21403: use new CallFrame class rather than Register* for call frame manipulation + + Add CallFrame as a synonym for ExecState. Arguably, some day we should switch every + client over to the new name. + + Use CallFrame* consistently rather than Register* or ExecState* in low-level code such + as Machine.cpp and CTI.cpp. Similarly, use callFrame rather than r as its name and use + accessor functions to get at things in the frame. + + Eliminate other uses of ExecState* that aren't needed, replacing in some cases with + JSGlobalData* and in other cases eliminating them entirely. + + * API/JSObjectRef.cpp: + (JSObjectMakeFunctionWithCallback): + (JSObjectMakeFunction): + (JSObjectHasProperty): + (JSObjectGetProperty): + (JSObjectSetProperty): + (JSObjectDeleteProperty): + * API/OpaqueJSString.cpp: + * API/OpaqueJSString.h: + * VM/CTI.cpp: + (JSC::CTI::getConstant): + (JSC::CTI::emitGetArg): + (JSC::CTI::emitGetPutArg): + (JSC::CTI::getConstantImmediateNumericArg): + (JSC::CTI::printOpcodeOperandTypes): + (JSC::CTI::CTI): + (JSC::CTI::compileOpCall): + (JSC::CTI::compileBinaryArithOp): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompile): + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + (JSC::CTI::compileRegExp): + * VM/CTI.h: + * VM/CodeBlock.h: + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitEqualityOp): + (JSC::CodeGenerator::emitLoad): + (JSC::CodeGenerator::emitUnexpectedLoad): + (JSC::CodeGenerator::emitConstruct): + * VM/CodeGenerator.h: + * VM/Machine.cpp: + (JSC::jsLess): + (JSC::jsLessEq): + (JSC::jsAddSlowCase): + (JSC::jsAdd): + (JSC::jsTypeStringForValue): + (JSC::Machine::resolve): + (JSC::Machine::resolveSkip): + (JSC::Machine::resolveGlobal): + (JSC::inlineResolveBase): + (JSC::Machine::resolveBase): + (JSC::Machine::resolveBaseAndProperty): + (JSC::Machine::resolveBaseAndFunc): + (JSC::Machine::slideRegisterWindowForCall): + (JSC::isNotObject): + (JSC::Machine::callEval): + (JSC::Machine::dumpCallFrame): + (JSC::Machine::dumpRegisters): + (JSC::Machine::unwindCallFrame): + (JSC::Machine::throwException): + (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): + (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope): + (JSC::Machine::execute): + (JSC::Machine::debug): + (JSC::Machine::createExceptionScope): + (JSC::cachePrototypeChain): + (JSC::Machine::tryCachePutByID): + (JSC::Machine::tryCacheGetByID): + (JSC::Machine::privateExecute): + (JSC::Machine::retrieveArguments): + (JSC::Machine::retrieveCaller): + (JSC::Machine::retrieveLastCaller): + (JSC::Machine::findFunctionCallFrame): + (JSC::Machine::getArgumentsData): + (JSC::Machine::tryCTICachePutByID): + (JSC::Machine::getCTIArrayLengthTrampoline): + (JSC::Machine::getCTIStringLengthTrampoline): + (JSC::Machine::tryCTICacheGetByID): + (JSC::Machine::cti_op_convert_this): + (JSC::Machine::cti_op_end): + (JSC::Machine::cti_op_add): + (JSC::Machine::cti_op_pre_inc): + (JSC::Machine::cti_timeout_check): + (JSC::Machine::cti_op_loop_if_less): + (JSC::Machine::cti_op_loop_if_lesseq): + (JSC::Machine::cti_op_new_object): + (JSC::Machine::cti_op_put_by_id): + (JSC::Machine::cti_op_put_by_id_second): + (JSC::Machine::cti_op_put_by_id_generic): + (JSC::Machine::cti_op_put_by_id_fail): + (JSC::Machine::cti_op_get_by_id): + (JSC::Machine::cti_op_get_by_id_second): + (JSC::Machine::cti_op_get_by_id_generic): + (JSC::Machine::cti_op_get_by_id_fail): + (JSC::Machine::cti_op_instanceof): + (JSC::Machine::cti_op_del_by_id): + (JSC::Machine::cti_op_mul): + (JSC::Machine::cti_op_new_func): + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_vm_compile): + (JSC::Machine::cti_op_push_activation): + (JSC::Machine::cti_op_call_NotJSFunction): + (JSC::Machine::cti_op_create_arguments): + (JSC::Machine::cti_op_tear_off_activation): + (JSC::Machine::cti_op_tear_off_arguments): + (JSC::Machine::cti_op_ret_profiler): + (JSC::Machine::cti_op_ret_scopeChain): + (JSC::Machine::cti_op_new_array): + (JSC::Machine::cti_op_resolve): + (JSC::Machine::cti_op_construct_JSConstruct): + (JSC::Machine::cti_op_construct_NotJSConstruct): + (JSC::Machine::cti_op_get_by_val): + (JSC::Machine::cti_op_resolve_func): + (JSC::Machine::cti_op_sub): + (JSC::Machine::cti_op_put_by_val): + (JSC::Machine::cti_op_put_by_val_array): + (JSC::Machine::cti_op_lesseq): + (JSC::Machine::cti_op_loop_if_true): + (JSC::Machine::cti_op_negate): + (JSC::Machine::cti_op_resolve_base): + (JSC::Machine::cti_op_resolve_skip): + (JSC::Machine::cti_op_resolve_global): + (JSC::Machine::cti_op_div): + (JSC::Machine::cti_op_pre_dec): + (JSC::Machine::cti_op_jless): + (JSC::Machine::cti_op_not): + (JSC::Machine::cti_op_jtrue): + (JSC::Machine::cti_op_post_inc): + (JSC::Machine::cti_op_eq): + (JSC::Machine::cti_op_lshift): + (JSC::Machine::cti_op_bitand): + (JSC::Machine::cti_op_rshift): + (JSC::Machine::cti_op_bitnot): + (JSC::Machine::cti_op_resolve_with_base): + (JSC::Machine::cti_op_new_func_exp): + (JSC::Machine::cti_op_mod): + (JSC::Machine::cti_op_less): + (JSC::Machine::cti_op_neq): + (JSC::Machine::cti_op_post_dec): + (JSC::Machine::cti_op_urshift): + (JSC::Machine::cti_op_bitxor): + (JSC::Machine::cti_op_new_regexp): + (JSC::Machine::cti_op_bitor): + (JSC::Machine::cti_op_call_eval): + (JSC::Machine::cti_op_throw): + (JSC::Machine::cti_op_get_pnames): + (JSC::Machine::cti_op_next_pname): + (JSC::Machine::cti_op_push_scope): + (JSC::Machine::cti_op_pop_scope): + (JSC::Machine::cti_op_typeof): + (JSC::Machine::cti_op_to_jsnumber): + (JSC::Machine::cti_op_in): + (JSC::Machine::cti_op_push_new_scope): + (JSC::Machine::cti_op_jmp_scopes): + (JSC::Machine::cti_op_put_by_index): + (JSC::Machine::cti_op_switch_imm): + (JSC::Machine::cti_op_switch_char): + (JSC::Machine::cti_op_switch_string): + (JSC::Machine::cti_op_del_by_val): + (JSC::Machine::cti_op_put_getter): + (JSC::Machine::cti_op_put_setter): + (JSC::Machine::cti_op_new_error): + (JSC::Machine::cti_op_debug): + (JSC::Machine::cti_vm_throw): + * VM/Machine.h: + * VM/Register.h: + * VM/RegisterFile.h: + * kjs/Arguments.h: + * kjs/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::functionName): + (JSC::DebuggerCallFrame::type): + (JSC::DebuggerCallFrame::thisObject): + (JSC::DebuggerCallFrame::evaluate): + * kjs/DebuggerCallFrame.h: + * kjs/ExecState.cpp: + (JSC::CallFrame::thisValue): + * kjs/ExecState.h: + * kjs/FunctionConstructor.cpp: + (JSC::constructFunction): + * kjs/JSActivation.cpp: + (JSC::JSActivation::JSActivation): + (JSC::JSActivation::argumentsGetter): + * kjs/JSActivation.h: + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::init): + * kjs/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncEval): + * kjs/JSVariableObject.h: + * kjs/Parser.cpp: + (JSC::Parser::parse): + * kjs/RegExpConstructor.cpp: + (JSC::constructRegExp): + * kjs/RegExpPrototype.cpp: + (JSC::regExpProtoFuncCompile): + * kjs/Shell.cpp: + (prettyPrintScript): + * kjs/StringPrototype.cpp: + (JSC::stringProtoFuncMatch): + (JSC::stringProtoFuncSearch): + * kjs/identifier.cpp: + (JSC::Identifier::checkSameIdentifierTable): + * kjs/interpreter.cpp: + (JSC::Interpreter::checkSyntax): + (JSC::Interpreter::evaluate): + * kjs/nodes.cpp: + (JSC::ThrowableExpressionData::emitThrowError): + (JSC::RegExpNode::emitCode): + (JSC::ArrayNode::emitCode): + (JSC::InstanceOfNode::emitCode): + * kjs/nodes.h: + * kjs/regexp.cpp: + (JSC::RegExp::RegExp): + (JSC::RegExp::create): + * kjs/regexp.h: + * profiler/HeavyProfile.h: + * profiler/Profile.h: + * wrec/WREC.cpp: + * wrec/WREC.h: + +2008-10-08 Mark Rowe + + Typed by Maciej Stachowiak, reviewed by Mark Rowe. + + Fix crash in fast/js/constant-folding.html with CTI disabled. + + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + +2008-10-08 Timothy Hatcher + + Roll out r37427 because it causes an infinite recursion loading about:blank. + + https://bugs.webkit.org/show_bug.cgi?id=21476 + +2008-10-08 Darin Adler + + Reviewed by Cameron Zwarich. + + - https://bugs.webkit.org/show_bug.cgi?id=21403 + Bug 21403: use new CallFrame class rather than Register* for call frame manipulation + + Add CallFrame as a synonym for ExecState. Arguably, some day we should switch every + client over to the new name. + + Use CallFrame* consistently rather than Register* or ExecState* in low-level code such + as Machine.cpp and CTI.cpp. Similarly, use callFrame rather than r as its name and use + accessor functions to get at things in the frame. + + Eliminate other uses of ExecState* that aren't needed, replacing in some cases with + JSGlobalData* and in other cases eliminating them entirely. + + * API/JSObjectRef.cpp: + (JSObjectMakeFunctionWithCallback): + (JSObjectMakeFunction): + (JSObjectHasProperty): + (JSObjectGetProperty): + (JSObjectSetProperty): + (JSObjectDeleteProperty): + * API/OpaqueJSString.cpp: + * API/OpaqueJSString.h: + * VM/CTI.cpp: + (JSC::CTI::getConstant): + (JSC::CTI::emitGetArg): + (JSC::CTI::emitGetPutArg): + (JSC::CTI::getConstantImmediateNumericArg): + (JSC::CTI::printOpcodeOperandTypes): + (JSC::CTI::CTI): + (JSC::CTI::compileOpCall): + (JSC::CTI::compileBinaryArithOp): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompile): + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + (JSC::CTI::compileRegExp): + * VM/CTI.h: + * VM/CodeBlock.h: + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitEqualityOp): + (JSC::CodeGenerator::emitLoad): + (JSC::CodeGenerator::emitUnexpectedLoad): + (JSC::CodeGenerator::emitConstruct): + * VM/CodeGenerator.h: + * VM/Machine.cpp: + (JSC::jsLess): + (JSC::jsLessEq): + (JSC::jsAddSlowCase): + (JSC::jsAdd): + (JSC::jsTypeStringForValue): + (JSC::Machine::resolve): + (JSC::Machine::resolveSkip): + (JSC::Machine::resolveGlobal): + (JSC::inlineResolveBase): + (JSC::Machine::resolveBase): + (JSC::Machine::resolveBaseAndProperty): + (JSC::Machine::resolveBaseAndFunc): + (JSC::Machine::slideRegisterWindowForCall): + (JSC::isNotObject): + (JSC::Machine::callEval): + (JSC::Machine::dumpCallFrame): + (JSC::Machine::dumpRegisters): + (JSC::Machine::unwindCallFrame): + (JSC::Machine::throwException): + (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): + (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope): + (JSC::Machine::execute): + (JSC::Machine::debug): + (JSC::Machine::createExceptionScope): + (JSC::cachePrototypeChain): + (JSC::Machine::tryCachePutByID): + (JSC::Machine::tryCacheGetByID): + (JSC::Machine::privateExecute): + (JSC::Machine::retrieveArguments): + (JSC::Machine::retrieveCaller): + (JSC::Machine::retrieveLastCaller): + (JSC::Machine::findFunctionCallFrame): + (JSC::Machine::getArgumentsData): + (JSC::Machine::tryCTICachePutByID): + (JSC::Machine::getCTIArrayLengthTrampoline): + (JSC::Machine::getCTIStringLengthTrampoline): + (JSC::Machine::tryCTICacheGetByID): + (JSC::Machine::cti_op_convert_this): + (JSC::Machine::cti_op_end): + (JSC::Machine::cti_op_add): + (JSC::Machine::cti_op_pre_inc): + (JSC::Machine::cti_timeout_check): + (JSC::Machine::cti_op_loop_if_less): + (JSC::Machine::cti_op_loop_if_lesseq): + (JSC::Machine::cti_op_new_object): + (JSC::Machine::cti_op_put_by_id): + (JSC::Machine::cti_op_put_by_id_second): + (JSC::Machine::cti_op_put_by_id_generic): + (JSC::Machine::cti_op_put_by_id_fail): + (JSC::Machine::cti_op_get_by_id): + (JSC::Machine::cti_op_get_by_id_second): + (JSC::Machine::cti_op_get_by_id_generic): + (JSC::Machine::cti_op_get_by_id_fail): + (JSC::Machine::cti_op_instanceof): + (JSC::Machine::cti_op_del_by_id): + (JSC::Machine::cti_op_mul): + (JSC::Machine::cti_op_new_func): + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_vm_compile): + (JSC::Machine::cti_op_push_activation): + (JSC::Machine::cti_op_call_NotJSFunction): + (JSC::Machine::cti_op_create_arguments): + (JSC::Machine::cti_op_tear_off_activation): + (JSC::Machine::cti_op_tear_off_arguments): + (JSC::Machine::cti_op_ret_profiler): + (JSC::Machine::cti_op_ret_scopeChain): + (JSC::Machine::cti_op_new_array): + (JSC::Machine::cti_op_resolve): + (JSC::Machine::cti_op_construct_JSConstruct): + (JSC::Machine::cti_op_construct_NotJSConstruct): + (JSC::Machine::cti_op_get_by_val): + (JSC::Machine::cti_op_resolve_func): + (JSC::Machine::cti_op_sub): + (JSC::Machine::cti_op_put_by_val): + (JSC::Machine::cti_op_put_by_val_array): + (JSC::Machine::cti_op_lesseq): + (JSC::Machine::cti_op_loop_if_true): + (JSC::Machine::cti_op_negate): + (JSC::Machine::cti_op_resolve_base): + (JSC::Machine::cti_op_resolve_skip): + (JSC::Machine::cti_op_resolve_global): + (JSC::Machine::cti_op_div): + (JSC::Machine::cti_op_pre_dec): + (JSC::Machine::cti_op_jless): + (JSC::Machine::cti_op_not): + (JSC::Machine::cti_op_jtrue): + (JSC::Machine::cti_op_post_inc): + (JSC::Machine::cti_op_eq): + (JSC::Machine::cti_op_lshift): + (JSC::Machine::cti_op_bitand): + (JSC::Machine::cti_op_rshift): + (JSC::Machine::cti_op_bitnot): + (JSC::Machine::cti_op_resolve_with_base): + (JSC::Machine::cti_op_new_func_exp): + (JSC::Machine::cti_op_mod): + (JSC::Machine::cti_op_less): + (JSC::Machine::cti_op_neq): + (JSC::Machine::cti_op_post_dec): + (JSC::Machine::cti_op_urshift): + (JSC::Machine::cti_op_bitxor): + (JSC::Machine::cti_op_new_regexp): + (JSC::Machine::cti_op_bitor): + (JSC::Machine::cti_op_call_eval): + (JSC::Machine::cti_op_throw): + (JSC::Machine::cti_op_get_pnames): + (JSC::Machine::cti_op_next_pname): + (JSC::Machine::cti_op_push_scope): + (JSC::Machine::cti_op_pop_scope): + (JSC::Machine::cti_op_typeof): + (JSC::Machine::cti_op_to_jsnumber): + (JSC::Machine::cti_op_in): + (JSC::Machine::cti_op_push_new_scope): + (JSC::Machine::cti_op_jmp_scopes): + (JSC::Machine::cti_op_put_by_index): + (JSC::Machine::cti_op_switch_imm): + (JSC::Machine::cti_op_switch_char): + (JSC::Machine::cti_op_switch_string): + (JSC::Machine::cti_op_del_by_val): + (JSC::Machine::cti_op_put_getter): + (JSC::Machine::cti_op_put_setter): + (JSC::Machine::cti_op_new_error): + (JSC::Machine::cti_op_debug): + (JSC::Machine::cti_vm_throw): + * VM/Machine.h: + * VM/Register.h: + * VM/RegisterFile.h: + * kjs/Arguments.h: + * kjs/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::functionName): + (JSC::DebuggerCallFrame::type): + (JSC::DebuggerCallFrame::thisObject): + (JSC::DebuggerCallFrame::evaluate): + * kjs/DebuggerCallFrame.h: + * kjs/ExecState.cpp: + (JSC::CallFrame::thisValue): + * kjs/ExecState.h: + * kjs/FunctionConstructor.cpp: + (JSC::constructFunction): + * kjs/JSActivation.cpp: + (JSC::JSActivation::JSActivation): + (JSC::JSActivation::argumentsGetter): + * kjs/JSActivation.h: + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::init): + * kjs/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncEval): + * kjs/JSVariableObject.h: + * kjs/Parser.cpp: + (JSC::Parser::parse): + * kjs/RegExpConstructor.cpp: + (JSC::constructRegExp): + * kjs/RegExpPrototype.cpp: + (JSC::regExpProtoFuncCompile): + * kjs/Shell.cpp: + (prettyPrintScript): + * kjs/StringPrototype.cpp: + (JSC::stringProtoFuncMatch): + (JSC::stringProtoFuncSearch): + * kjs/identifier.cpp: + (JSC::Identifier::checkSameIdentifierTable): + * kjs/interpreter.cpp: + (JSC::Interpreter::checkSyntax): + (JSC::Interpreter::evaluate): + * kjs/nodes.cpp: + (JSC::ThrowableExpressionData::emitThrowError): + (JSC::RegExpNode::emitCode): + (JSC::ArrayNode::emitCode): + (JSC::InstanceOfNode::emitCode): + * kjs/nodes.h: + * kjs/regexp.cpp: + (JSC::RegExp::RegExp): + (JSC::RegExp::create): + * kjs/regexp.h: + * profiler/HeavyProfile.h: + * profiler/Profile.h: + * wrec/WREC.cpp: + * wrec/WREC.h: + +2008-10-08 Prasanth Ullattil + + Reviewed by Oliver Hunt. + + Avoid endless loops when compiling without the computed goto + optimization. + + NEXT_OPCODE expands to "continue", which will not work inside + loops. + + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + +2008-10-08 Maciej Stachowiak + + Reviewed by Oliver Hunt. + + Re-landing the following fix with the crashing bug in it fixed (r37405): + + - optimize away multiplication by constant 1.0 + + 2.3% speedup on v8 RayTrace benchmark + + Apparently it's not uncommon for JavaScript code to multiply by + constant 1.0 in the mistaken belief that this converts integer to + floating point and that there is any operational difference. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): Optimize to_jsnumber for + case where parameter is already number. + (JSC::CTI::privateCompileSlowCases): ditto + * VM/Machine.cpp: + (JSC::Machine::privateExecute): ditto + * kjs/grammar.y: + (makeMultNode): Transform as follows: + +FOO * BAR ==> FOO * BAR + FOO * +BAR ==> FOO * BAR + FOO * 1 ==> +FOO + 1 * FOO ==> +FOO + (makeDivNode): Transform as follows: + +FOO / BAR ==> FOO / BAR + FOO / +BAR ==> FOO / BAR + (makeSubNode): Transform as follows: + +FOO - BAR ==> FOO - BAR + FOO - +BAR ==> FOO - BAR + * kjs/nodes.h: + (JSC::ExpressionNode::stripUnaryPlus): Helper for above + grammar.y changes + (JSC::UnaryPlusNode::stripUnaryPlus): ditto + +2008-10-08 Maciej Stachowiak + + Reviewed by Oliver Hunt. + + - correctly handle appending -0 to a string, it should stringify as just 0 + + * kjs/ustring.cpp: + (JSC::concatenate): + +2008-10-08 Prasanth Ullattil + + Reviewed by Simon. + + Fix WebKit compilation with VC2008SP1 + + Apply the TR1 workaround for JavaScriptCore, too. + + * JavaScriptCore.pro: + +2008-10-08 Prasanth Ullattil + + Reviewed by Simon. + + Fix compilation errors on VS2008 64Bit + + * kjs/collector.cpp: + (JSC::currentThreadStackBase): + +2008-10-08 André Pönitz + + Reviewed by Simon. + + Fix compilation with Qt namespaces. + + * wtf/Threading.h: + +2008-10-07 Sam Weinig + + Roll out r37405. + +2008-10-07 Oliver Hunt + + Reviewed by Cameron Zwarich. + + Switch CTI runtime calls to the fastcall calling convention + + Basically this means that we get to store the argument for CTI + calls in the ECX register, which saves a register->memory write + and subsequent memory->register read. + + This is a 1.7% progression in SunSpider and 2.4% on commandline + v8 tests on Windows + + * VM/CTI.cpp: + (JSC::): + (JSC::CTI::privateCompilePutByIdTransition): + (JSC::CTI::privateCompilePatchGetArrayLength): + * VM/CTI.h: + * VM/Machine.h: + * masm/X86Assembler.h: + (JSC::X86Assembler::emitRestoreArgumentReference): + (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline): + We need this to correctly reload ecx from inside certain property access + trampolines. + * wtf/Platform.h: + +2008-10-07 Maciej Stachowiak + + Reviewed by Mark Rowe. + + - optimize away multiplication by constant 1.0 + + 2.3% speedup on v8 RayTrace benchmark + + Apparently it's not uncommon for JavaScript code to multiply by + constant 1.0 in the mistaken belief that this converts integer to + floating point and that there is any operational difference. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): Optimize to_jsnumber for + case where parameter is already number. + (JSC::CTI::privateCompileSlowCases): ditto + * VM/Machine.cpp: + (JSC::Machine::privateExecute): ditto + * kjs/grammar.y: + (makeMultNode): Transform as follows: + +FOO * BAR ==> FOO * BAR + FOO * +BAR ==> FOO * BAR + FOO * 1 ==> +FOO + 1 * FOO ==> +FOO + (makeDivNode): Transform as follows: + +FOO / BAR ==> FOO / BAR + FOO / +BAR ==> FOO / BAR + (makeSubNode): Transform as follows: + +FOO - BAR ==> FOO - BAR + FOO - +BAR ==> FOO - BAR + * kjs/nodes.h: + (JSC::ExpressionNode::stripUnaryPlus): Helper for above + grammar.y changes + (JSC::UnaryPlusNode::stripUnaryPlus): ditto + +2008-10-07 Maciej Stachowiak + + Reviewed by Oliver Hunt. + + - make constant folding code more consistent + + Added a makeSubNode to match add, mult and div; use the makeFooNode functions always, + instead of allocating nodes directly in other places in the grammar. + + * kjs/grammar.y: + +2008-10-07 Sam Weinig + + Reviewed by Cameron Zwarich. + + Move hasGetterSetterProperties flag from PropertyMap to StructureID. + + * kjs/JSObject.cpp: + (JSC::JSObject::put): + (JSC::JSObject::defineGetter): + (JSC::JSObject::defineSetter): + * kjs/JSObject.h: + (JSC::JSObject::hasGetterSetterProperties): + (JSC::JSObject::getOwnPropertySlotForWrite): + (JSC::JSObject::getOwnPropertySlot): + * kjs/PropertyMap.h: + * kjs/StructureID.cpp: + (JSC::StructureID::StructureID): + (JSC::StructureID::addPropertyTransition): + (JSC::StructureID::toDictionaryTransition): + (JSC::StructureID::changePrototypeTransition): + (JSC::StructureID::getterSetterTransition): + * kjs/StructureID.h: + (JSC::StructureID::hasGetterSetterProperties): + (JSC::StructureID::setHasGetterSetterProperties): + +2008-10-07 Sam Weinig + + Reviewed by Cameron Zwarich. + + Roll r37370 back in with bug fixes. + + - PropertyMap::storageSize() should reflect the number of keys + deletedOffsets + and has nothing to do with the internal deletedSentinel count anymore. + +2008-10-07 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Move callframe initialization into JIT code, again. + + As a part of the restructuring the second result from functions is now + returned in edx, allowing the new value of 'r' to be returned via a + register, and stored to the stack from JIT code, too. + + 4.5% progression on v8-tests. (3% in their harness) + + * VM/CTI.cpp: + (JSC::): + (JSC::CTI::emitCall): + (JSC::CTI::compileOpCall): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + * VM/CTI.h: + (JSC::CallRecord::CallRecord): + * VM/Machine.cpp: + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_op_construct_JSConstruct): + (JSC::Machine::cti_op_resolve_func): + (JSC::Machine::cti_op_post_inc): + (JSC::Machine::cti_op_resolve_with_base): + (JSC::Machine::cti_op_post_dec): + * VM/Machine.h: + * kjs/JSFunction.h: + * kjs/ScopeChain.h: + +2008-10-07 Mark Rowe + + Fix typo in method name. + + * wrec/WREC.cpp: + * wrec/WREC.h: + +2008-10-07 Cameron Zwarich + + Rubber-stamped by Mark Rowe. + + Roll out r37370. + +2008-10-06 Sam Weinig + + Reviewed by Cameron Zwarich. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=21415 + Improve the division between PropertyStorageArray and PropertyMap + + - Rework ProperyMap to store offsets in the value so that they don't + change when rehashing. This allows us not to have to keep the + PropertyStorageArray in sync and thus not have to pass it in. + - Rename PropertyMap::getOffset -> PropertyMap::get since put/remove + now also return offsets. + - A Vector of deleted offsets is now needed since the storage is out of + band. + + 1% win on SunSpider. Wash on V8 suite. + + * JavaScriptCore.exp: + * VM/CTI.cpp: + (JSC::transitionWillNeedStorageRealloc): + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + Transition logic can be greatly simplified by the fact that + the storage capacity is always known, and is correct for the + inline case. + * kjs/JSObject.cpp: + (JSC::JSObject::put): Rename getOffset -> get. + (JSC::JSObject::deleteProperty): Ditto. + (JSC::JSObject::getPropertyAttributes): Ditto. + (JSC::JSObject::removeDirect): Use returned offset to + clear the value in the PropertyNameArray. + (JSC::JSObject::allocatePropertyStorage): Add assert. + * kjs/JSObject.h: + (JSC::JSObject::getDirect): Rename getOffset -> get + (JSC::JSObject::getDirectLocation): Rename getOffset -> get + (JSC::JSObject::putDirect): Use propertyStorageCapacity to determine whether + or not to resize. Also, since put now returns an offset (and thus + addPropertyTransition does also) setting of the PropertyStorageArray is + now done here. + (JSC::JSObject::transitionTo): + * kjs/PropertyMap.cpp: + (JSC::PropertyMap::checkConsistency): PropertyStorageArray is no longer + passed in. + (JSC::PropertyMap::operator=): Copy the delete offsets vector. + (JSC::PropertyMap::put): Instead of setting the PropertyNameArray + explicitly, return the offset where the value should go. + (JSC::PropertyMap::remove): Instead of removing from the PropertyNameArray + explicitly, return the offset where the value should be removed. + (JSC::PropertyMap::get): Switch to using the stored offset, instead + of the implicit one. + (JSC::PropertyMap::insert): + (JSC::PropertyMap::expand): This is never called when m_table is null, + so remove that branch and add it as an assertion. + (JSC::PropertyMap::createTable): Consistency checks no longer take + a PropertyNameArray. + (JSC::PropertyMap::rehash): No need to rehash the PropertyNameArray + now that it is completely out of band. + * kjs/PropertyMap.h: + (JSC::PropertyMapEntry::PropertyMapEntry): Store offset into PropertyNameArray. + (JSC::PropertyMap::get): Switch to using the stored offset, instead + of the implicit one. + * kjs/StructureID.cpp: + (JSC::StructureID::StructureID): Initialize the propertyStorageCapacity to + JSObject::inlineStorageCapacity. + (JSC::StructureID::growPropertyStorageCapacity): Grow the storage capacity as + described below. + (JSC::StructureID::addPropertyTransition): Copy the storage capacity. + (JSC::StructureID::toDictionaryTransition): Ditto. + (JSC::StructureID::changePrototypeTransition): Ditto. + (JSC::StructureID::getterSetterTransition): Ditto. + * kjs/StructureID.h: + (JSC::StructureID::propertyStorageCapacity): Add propertyStorageCapacity + which is the current capacity for the JSObjects PropertyStorageArray. + It starts at the JSObject::inlineStorageCapacity (currently 2), then + when it first needs to be resized moves to the JSObject::nonInlineBaseStorageCapacity + (currently 16), and after that doubles each time. + +2008-10-06 Cameron Zwarich + + Reviewed by Oliver Hunt. + + Bug 21396: Remove the OptionalCalleeActivation call frame slot + + + Remove the OptionalCalleeActivation call frame slot. We have to be + careful to store the activation object in a register, because objects + in the scope chain do not get marked. + + This is a 0.3% speedup on both SunSpider and the V8 benchmark. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::CodeGenerator): + (JSC::CodeGenerator::emitReturn): + * VM/CodeGenerator.h: + * VM/Machine.cpp: + (JSC::Machine::dumpRegisters): + (JSC::Machine::unwindCallFrame): + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_op_push_activation): + (JSC::Machine::cti_op_tear_off_activation): + (JSC::Machine::cti_op_construct_JSConstruct): + * VM/Machine.h: + (JSC::Machine::initializeCallFrame): + * VM/RegisterFile.h: + (JSC::RegisterFile::): + +2008-10-06 Tony Chang + + Reviewed by Alexey Proskuryakov. + + Chromium doesn't use pthreads on windows, so make its use conditional. + + Also convert a WORD to a DWORD to avoid a compiler warning. This + matches the other methods around it. + + * wtf/ThreadingWin.cpp: + (WTF::wtfThreadEntryPoint): + (WTF::ThreadCondition::broadcast): + +2008-10-06 Mark Mentovai + + Reviewed by Tim Hatcher. + + Allow ENABLE_DASHBOARD_SUPPORT and ENABLE_MAC_JAVA_BRIDGE to be + disabled on the Mac. + + https://bugs.webkit.org/show_bug.cgi?id=21333 + + * wtf/Platform.h: + +2008-10-06 Steve Falkenburg + + https://bugs.webkit.org/show_bug.cgi?id=21416 + Pass 0 for size to VirtualAlloc, as documented by MSDN. + Identified by Application Verifier. + + Reviewed by Darin Adler. + + * kjs/collector.cpp: + (KJS::freeBlock): + +2008-10-06 Kevin McCullough + + Reviewed by Tim Hatcheri and Oliver Hunt. + + https://bugs.webkit.org/show_bug.cgi?id=21412 + Bug 21412: Refactor user initiated profile count to be more stable + - Export UString::from for use with creating the profile title. + + * JavaScriptCore.exp: + +2008-10-06 Maciej Stachowiak + + Not reviewed. Build fix. + + - revert toBoolean changes (r37333 and r37335); need to make WebCore work with these + + * API/JSValueRef.cpp: + (JSValueToBoolean): + * ChangeLog: + * JavaScriptCore.exp: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_loop_if_true): + (JSC::Machine::cti_op_not): + (JSC::Machine::cti_op_jtrue): + * kjs/ArrayPrototype.cpp: + (JSC::arrayProtoFuncFilter): + (JSC::arrayProtoFuncEvery): + (JSC::arrayProtoFuncSome): + * kjs/BooleanConstructor.cpp: + (JSC::constructBoolean): + (JSC::callBooleanConstructor): + * kjs/GetterSetter.h: + * kjs/JSCell.h: + (JSC::JSValue::toBoolean): + * kjs/JSNumberCell.cpp: + (JSC::JSNumberCell::toBoolean): + * kjs/JSNumberCell.h: + * kjs/JSObject.cpp: + (JSC::JSObject::toBoolean): + * kjs/JSObject.h: + * kjs/JSString.cpp: + (JSC::JSString::toBoolean): + * kjs/JSString.h: + * kjs/JSValue.h: + * kjs/RegExpConstructor.cpp: + (JSC::setRegExpConstructorMultiline): + * kjs/RegExpObject.cpp: + (JSC::RegExpObject::match): + * kjs/RegExpPrototype.cpp: + (JSC::regExpProtoFuncToString): + +2008-10-06 Maciej Stachowiak + + Reviewed by Sam Weinig. + + - optimize op_jtrue, op_loop_if_true and op_not in various ways + https://bugs.webkit.org/show_bug.cgi?id=21404 + + 1) Make JSValue::toBoolean nonvirtual and completely inline by + making use of the StructureID type field. + + 2) Make JSValue::toBoolean not take an ExecState; doesn't need it. + + 3) Make op_not, op_loop_if_true and op_jtrue not read the + ExecState (toBoolean doesn't need it any more) and not check + exceptions (toBoolean can't throw). + + * API/JSValueRef.cpp: + (JSValueToBoolean): + * JavaScriptCore.exp: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_loop_if_true): + (JSC::Machine::cti_op_not): + (JSC::Machine::cti_op_jtrue): + * kjs/ArrayPrototype.cpp: + (JSC::arrayProtoFuncFilter): + (JSC::arrayProtoFuncEvery): + (JSC::arrayProtoFuncSome): + * kjs/BooleanConstructor.cpp: + (JSC::constructBoolean): + (JSC::callBooleanConstructor): + * kjs/GetterSetter.h: + * kjs/JSCell.h: + (JSC::JSValue::toBoolean): + * kjs/JSNumberCell.cpp: + * kjs/JSNumberCell.h: + (JSC::JSNumberCell::toBoolean): + * kjs/JSObject.cpp: + * kjs/JSObject.h: + (JSC::JSObject::toBoolean): + (JSC::JSCell::toBoolean): + * kjs/JSString.cpp: + * kjs/JSString.h: + (JSC::JSString::toBoolean): + * kjs/JSValue.h: + * kjs/RegExpConstructor.cpp: + (JSC::setRegExpConstructorMultiline): + * kjs/RegExpObject.cpp: + (JSC::RegExpObject::match): + * kjs/RegExpPrototype.cpp: + (JSC::regExpProtoFuncToString): + +2008-10-06 Ariya Hidayat + + Reviewed by Simon. + + Build fix for MinGW. + + * JavaScriptCore.pri: + * kjs/DateMath.cpp: + (JSC::highResUpTime): + +2008-10-05 Cameron Zwarich + + Reviewed by Oliver Hunt. + + Remove ScopeNode::containsClosures() now that it is unused. + + * kjs/nodes.h: + (JSC::ScopeNode::containsClosures): + +2008-10-05 Maciej Stachowiak + + Reviewed by Cameron Zwarich. + + - fix releas-only test failures caused by the fix to bug 21375 + + * VM/Machine.cpp: + (JSC::Machine::unwindCallFrame): Update ExecState while unwinding call frames; + it now matters more to have a still-valid ExecState, since dynamicGlobalObject + will make use of the ExecState's scope chain. + * VM/Machine.h: + +2008-10-05 Cameron Zwarich + + Reviewed by Oliver Hunt. + + Bug 21364: Remove the branch in op_ret for OptionalCalleeActivation and OptionalCalleeArguments + + + Use information from the parser to detect whether an activation is + needed or 'arguments' is used, and emit explicit instructions to tear + them off before op_ret. This allows a branch to be removed from op_ret + and simplifies some other code. This does cause a small change in the + behaviour of 'f.arguments'; it is no longer live when 'arguments' is not + mentioned in the lexical scope of the function. + + It should now be easy to remove the OptionaCalleeActivation slot in the + call frame, but this will be done in a later patch. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitReturn): + * VM/CodeGenerator.h: + * VM/Machine.cpp: + (JSC::Machine::unwindCallFrame): + (JSC::Machine::privateExecute): + (JSC::Machine::retrieveArguments): + (JSC::Machine::cti_op_create_arguments): + (JSC::Machine::cti_op_tear_off_activation): + (JSC::Machine::cti_op_tear_off_arguments): + * VM/Machine.h: + * VM/Opcode.h: + * kjs/Arguments.cpp: + (JSC::Arguments::mark): + * kjs/Arguments.h: + (JSC::Arguments::isTornOff): + (JSC::Arguments::Arguments): + (JSC::Arguments::copyRegisters): + (JSC::JSActivation::copyRegisters): + * kjs/JSActivation.cpp: + (JSC::JSActivation::argumentsGetter): + * kjs/JSActivation.h: + +2008-10-05 Maciej Stachowiak + + Reviewed by Oliver Hunt. + + - fixed "REGRESSION (r37297): fast/js/deep-recursion-test takes too long and times out" + https://bugs.webkit.org/show_bug.cgi?id=21375 + + The problem is that dynamicGlobalObject had become O(N) in number + of call frames, but unwinding the stack for an exception called it + for every call frame, resulting in O(N^2) behavior for an + exception thrown from inside deep recursion. + + Instead of doing it that way, stash the dynamic global object in JSGlobalData. + + * JavaScriptCore.exp: + * VM/Machine.cpp: + (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): Helper class to temporarily + store and later restore a dynamicGlobalObject in JSGlobalData. + (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope): + (JSC::Machine::execute): In each version, establish a DynamicGlobalObjectScope. + For ProgramNode, always establish set new dynamicGlobalObject, for FunctionBody and Eval, + only if none is currently set. + * VM/Machine.h: + * kjs/ExecState.h: + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): Ininitalize new dynamicGlobalObject field to 0. + * kjs/JSGlobalData.h: + * kjs/JSGlobalObject.h: + (JSC::ExecState::dynamicGlobalObject): Moved here from ExecState for benefit of inlining. + Return lexical global object if this is a globalExec(), otherwise look in JSGlobalData + for the one stashed there. + +2008-10-05 Sam Weinig + + Reviewed by Maciej Stachowiak. + + Avoid an extra lookup when transitioning to an existing StructureID + by caching the offset of property that caused the transition. + + 1% win on V8 suite. Wash on SunSpider. + + * kjs/PropertyMap.cpp: + (JSC::PropertyMap::put): + * kjs/PropertyMap.h: + * kjs/StructureID.cpp: + (JSC::StructureID::StructureID): + (JSC::StructureID::addPropertyTransition): + * kjs/StructureID.h: + (JSC::StructureID::setCachedTransistionOffset): + (JSC::StructureID::cachedTransistionOffset): + +2008-10-05 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Bug 21364: Remove the branch in op_ret for OptionalCalleeActivation and OptionalCalleeArguments + + + This patch does not yet remove the branch, but it does a bit of refactoring + so that a CodeGenerator now knows whether the associated CodeBlock will need + a full scope before doing any code generation. This makes it possible to emit + explicit tear-off instructions before every op_ret. + + * VM/CodeBlock.h: + (JSC::CodeBlock::CodeBlock): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::generate): + (JSC::CodeGenerator::CodeGenerator): + (JSC::CodeGenerator::emitPushScope): + (JSC::CodeGenerator::emitPushNewScope): + * kjs/nodes.h: + (JSC::ScopeNode::needsActivation): + +2008-10-05 Gavin Barraclough + + Reviewed by Cameron Zwarich. + + Fix for bug #21387 - using SamplingTool with CTI. + + (1) A repatch offset offset changes due to an additional instruction to update SamplingTool state. + (2) Fix an incusion order problem due to ExecState changes. + (3) Change to a MACHINE_SAMPLING macro, use of exec should now be accessing global data. + + * VM/CTI.h: + (JSC::CTI::execute): + * VM/SamplingTool.h: + (JSC::SamplingTool::privateExecuteReturned): + * kjs/Shell.cpp: + +2008-10-04 Mark Rowe + + Reviewed by Tim Hatcher. + + Add a 'Check For Weak VTables' build phase to catch weak vtables as early as possible. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-10-04 Sam Weinig + + Reviewed by Oliver Hunt. + + Fix https://bugs.webkit.org/show_bug.cgi?id=21320 + leaks of PropertyNameArrayData seen on buildbot + + - Fix RefPtr cycle by making PropertyNameArrayData's pointer back + to the StructureID a weak pointer. + + * kjs/PropertyNameArray.h: + (JSC::PropertyNameArrayData::setCachedStructureID): + (JSC::PropertyNameArrayData::cachedStructureID): + * kjs/StructureID.cpp: + (JSC::StructureID::getEnumerablePropertyNames): + (JSC::StructureID::clearEnumerationCache): + (JSC::StructureID::~StructureID): + +2008-10-04 Darin Adler + + Reviewed by Cameron Zwarich. + + - https://bugs.webkit.org/show_bug.cgi?id=21295 + Bug 21295: Replace ExecState with a call frame Register pointer + + 10% faster on Richards; other v8 benchmarks faster too. + A wash on SunSpider. + + This does the minimum necessary to get the speedup. Next step in + cleaning this up is to replace ExecState with a CallFrame class, + and be more judicious about when to pass a call frame and when + to pass a global data pointer, global object pointer, or perhaps + something else entirely. + + * VM/CTI.cpp: Remove the debug-only check of the exception in + ctiVMThrowTrampoline -- already checked in the code the trampoline + jumps to, so not all that useful. Removed the exec argument from + ctiTrampoline. Removed emitDebugExceptionCheck -- no longer needed. + (JSC::CTI::emitCall): Removed code to set ExecState::m_callFrame. + (JSC::CTI::privateCompileMainPass): Removed code in catch to extract + the exception from ExecState::m_exception; instead, the code that + jumps into catch will make sure the exception is already in eax. + * VM/CTI.h: Removed exec from the ctiTrampoline. Also removed the + non-helpful "volatile". Temporarily left ARG_exec in as a synonym + for ARG_r; I'll change that on a future cleanup pass when introducing + more use of the CallFrame type. + (JSC::CTI::execute): Removed the ExecState* argument. + + * VM/ExceptionHelpers.cpp: + (JSC::InterruptedExecutionError::InterruptedExecutionError): Take + JSGlobalData* instead of ExecState*. + (JSC::createInterruptedExecutionException): Ditto. + * VM/ExceptionHelpers.h: Ditto. Also removed an unneeded include. + + * VM/Machine.cpp: + (JSC::slideRegisterWindowForCall): Removed the exec and + exceptionValue arguments. Changed to return 0 when there's a stack + overflow rather than using a separate exception argument to cut + down on memory accesses in the calling convention. + (JSC::Machine::unwindCallFrame): Removed the exec argument when + constructing a DebuggerCallFrame. Also removed code to set + ExecState::m_callFrame. + (JSC::Machine::throwException): Removed the exec argument when + construction a DebuggerCallFrame. + (JSC::Machine::execute): Updated to use the register instead of + ExecState and also removed various uses of ExecState. + (JSC::Machine::debug): + (JSC::Machine::privateExecute): Put globalData into a local + variable so it can be used throughout the interpreter. Changed + the VM_CHECK_EXCEPTION to get the exception in globalData instead + of through ExecState. + (JSC::Machine::retrieveLastCaller): Turn exec into a registers + pointer by calling registers() instead of by getting m_callFrame. + (JSC::Machine::callFrame): Ditto. + Tweaked exception macros. Made new versions for when you know + you have an exception. Get at global exception with ARG_globalData. + Got rid of the need to pass in the return value type. + (JSC::Machine::cti_op_add): Update to use new version of exception + macros. + (JSC::Machine::cti_op_pre_inc): Ditto. + (JSC::Machine::cti_timeout_check): Ditto. + (JSC::Machine::cti_op_instanceof): Ditto. + (JSC::Machine::cti_op_new_func): Ditto. + (JSC::Machine::cti_op_call_JSFunction): Optimized by using the + ARG values directly instead of through local variables -- this gets + rid of code that just shuffles things around in the stack frame. + Also get rid of ExecState and update for the new way exceptions are + handled in slideRegisterWindowForCall. + (JSC::Machine::cti_vm_compile): Update to make exec out of r since + they are both the same thing now. + (JSC::Machine::cti_op_call_NotJSFunction): Ditto. + (JSC::Machine::cti_op_init_arguments): Ditto. + (JSC::Machine::cti_op_resolve): Ditto. + (JSC::Machine::cti_op_construct_JSConstruct): Ditto. + (JSC::Machine::cti_op_construct_NotJSConstruct): Ditto. + (JSC::Machine::cti_op_resolve_func): Ditto. + (JSC::Machine::cti_op_put_by_val): Ditto. + (JSC::Machine::cti_op_put_by_val_array): Ditto. + (JSC::Machine::cti_op_resolve_skip): Ditto. + (JSC::Machine::cti_op_resolve_global): Ditto. + (JSC::Machine::cti_op_post_inc): Ditto. + (JSC::Machine::cti_op_resolve_with_base): Ditto. + (JSC::Machine::cti_op_post_dec): Ditto. + (JSC::Machine::cti_op_call_eval): Ditto. + (JSC::Machine::cti_op_throw): Ditto. Also rearranged to return + the exception value as the return value so it can be used by + op_catch. + (JSC::Machine::cti_op_push_scope): Ditto. + (JSC::Machine::cti_op_in): Ditto. + (JSC::Machine::cti_op_del_by_val): Ditto. + (JSC::Machine::cti_vm_throw): Ditto. Also rearranged to return + the exception value as the return value so it can be used by + op_catch. + + * kjs/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::functionName): Pass globalData. + (JSC::DebuggerCallFrame::evaluate): Eliminated code to make a + new ExecState. + * kjs/DebuggerCallFrame.h: Removed ExecState argument from + constructor. + + * kjs/ExecState.h: Eliminated all data members and made ExecState + inherit privately from Register instead. Also added a typedef to + the future name for this class, which is CallFrame. It's just a + Register* that knows it's a pointer at a call frame. The new class + can't be constructed or copied. Changed all functions to use + the this pointer instead of m_callFrame. Changed exception-related + functions to access an exception in JSGlobalData. Removed functions + used by CTI to pass the return address to the throw machinery -- + this is now done directly with a global in the global data. + + * kjs/FunctionPrototype.cpp: + (JSC::functionProtoFuncToString): Pass globalData instead of exec. + + * kjs/InternalFunction.cpp: + (JSC::InternalFunction::name): Take globalData instead of exec. + * kjs/InternalFunction.h: Ditto. + + * kjs/JSGlobalData.cpp: Initialize the new exception global to 0. + * kjs/JSGlobalData.h: Declare two new globals. One for the current + exception and another for the return address used by CTI to + implement the throw operation. + + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::init): Removed code to set up globalExec, + which is now the same thing as globalCallFrame. + (JSC::JSGlobalObject::reset): Get globalExec from our globalExec + function so we don't have to repeat the logic twice. + (JSC::JSGlobalObject::mark): Removed code to mark the exception; + the exception is now stored in JSGlobalData and marked there. + (JSC::JSGlobalObject::globalExec): Return a pointer to the end + of the global call frame. + * kjs/JSGlobalObject.h: Removed the globalExec data member. + + * kjs/JSObject.cpp: + (JSC::JSObject::putDirectFunction): Pass globalData instead of exec. + + * kjs/collector.cpp: + (JSC::Heap::collect): Mark the global exception. + + * profiler/ProfileGenerator.cpp: + (JSC::ProfileGenerator::addParentForConsoleStart): Pass globalData + instead of exec to createCallIdentifier. + + * profiler/Profiler.cpp: + (JSC::Profiler::willExecute): Pass globalData instead of exec to + createCallIdentifier. + (JSC::Profiler::didExecute): Ditto. + (JSC::Profiler::createCallIdentifier): Take globalData instead of + exec. + (JSC::createCallIdentifierFromFunctionImp): Ditto. + * profiler/Profiler.h: Change interface to take a JSGlobalData + instead of an ExecState. + +2008-10-04 Cameron Zwarich + + Reviewed by Darin Adler. + + Bug 21369: Add opcode documentation for all undocumented opcodes + + + This patch adds opcode documentation for all undocumented opcodes, and + it also renames op_init_arguments to op_create_arguments. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::CodeGenerator): + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_create_arguments): + * VM/Machine.h: + * VM/Opcode.h: + +2008-10-03 Maciej Stachowiak + + Reviewed by Cameron Zwarich. + + - "this" object in methods called on primitives should be wrapper object + https://bugs.webkit.org/show_bug.cgi?id=21362 + + I changed things so that functions which use "this" do a fast + version of toThisObject conversion if needed. Currently we miss + the conversion entirely, at least for primitive types. Using + TypeInfo and the primitive check, I made the fast case bail out + pretty fast. + + This is inexplicably an 1.007x SunSpider speedup (and a wash on V8 benchmarks). + + Also renamed some opcodes for clarity: + + init ==> enter + init_activation ==> enter_with_activation + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::generate): + (JSC::CodeGenerator::CodeGenerator): + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_convert_this): + * VM/Machine.h: + * VM/Opcode.h: + * kjs/JSActivation.cpp: + (JSC::JSActivation::JSActivation): + * kjs/JSActivation.h: + (JSC::JSActivation::createStructureID): + * kjs/JSCell.h: + (JSC::JSValue::needsThisConversion): + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * kjs/JSGlobalData.h: + * kjs/JSNumberCell.h: + (JSC::JSNumberCell::createStructureID): + * kjs/JSStaticScopeObject.h: + (JSC::JSStaticScopeObject::JSStaticScopeObject): + (JSC::JSStaticScopeObject::createStructureID): + * kjs/JSString.h: + (JSC::JSString::createStructureID): + * kjs/JSValue.h: + * kjs/TypeInfo.h: + (JSC::TypeInfo::needsThisConversion): + * kjs/nodes.h: + (JSC::ScopeNode::usesThis): + +2008-10-03 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Bug 21356: The size of the RegisterFile differs depending on 32-bit / 64-bit and Debug / Release + + + The RegisterFile decreases in size (measured in terms of numbers of + Registers) as the size of a Register increases. This causes + + js1_5/Regress/regress-159334.js + + to fail in 64-bit debug builds. This fix makes the RegisterFile on all + platforms the same size that it is in 32-bit Release builds. + + * VM/RegisterFile.h: + (JSC::RegisterFile::RegisterFile): + +2008-10-03 Maciej Stachowiak + + Reviewed by Cameron Zwarich. + + - Some code cleanup to how we handle code features. + + 1) Rename FeatureInfo typedef to CodeFeatures. + 2) Rename NodeFeatureInfo template to NodeInfo. + 3) Keep CodeFeature bitmask in ScopeNode instead of trying to break it out into individual bools. + 4) Rename misleadingly named "needsClosure" method to "containsClosures", which better describes the meaning + of ClosureFeature. + 5) Make setUsersArguments() not take an argument since it only goes one way. + + * JavaScriptCore.exp: + * VM/CodeBlock.h: + (JSC::CodeBlock::CodeBlock): + * kjs/NodeInfo.h: + * kjs/Parser.cpp: + (JSC::Parser::didFinishParsing): + * kjs/Parser.h: + (JSC::Parser::parse): + * kjs/grammar.y: + * kjs/nodes.cpp: + (JSC::ScopeNode::ScopeNode): + (JSC::ProgramNode::ProgramNode): + (JSC::ProgramNode::create): + (JSC::EvalNode::EvalNode): + (JSC::EvalNode::create): + (JSC::FunctionBodyNode::FunctionBodyNode): + (JSC::FunctionBodyNode::create): + * kjs/nodes.h: + (JSC::ScopeNode::usesEval): + (JSC::ScopeNode::containsClosures): + (JSC::ScopeNode::usesArguments): + (JSC::ScopeNode::setUsesArguments): + +2008-10-03 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Bug 21343: REGRESSSION (r37160): ecma_3/ExecutionContexts/10.1.3-1.js and js1_4/Functions/function-001.js fail on 64-bit + + + A fix was landed for this issue in r37253, and the ChangeLog assumes + that it is a compiler bug, but it turns out that it is a subtle issue + with mixing signed and unsigned 32-bit values in a 64-bit environment. + In order to properly fix this bug, we should convert our signed offsets + into the register file to use ptrdiff_t. + + This may not be the only instance of this issue, but I will land this + fix first and look for more later. + + * VM/Machine.cpp: + (JSC::Machine::getArgumentsData): + * VM/Machine.h: + * kjs/Arguments.cpp: + (JSC::Arguments::getOwnPropertySlot): + * kjs/Arguments.h: + (JSC::Arguments::init): + +2008-10-03 Darin Adler + + * VM/CTI.cpp: Another Windows build fix. Change the args of ctiTrampoline. + + * kjs/JSNumberCell.h: A build fix for newer versions of gcc. Added + declarations of JSGlobalData overloads of jsNumberCell. + +2008-10-03 Darin Adler + + - try to fix Windows build + + * kjs/ScopeChain.h: Add forward declaration of JSGlobalData. + +2008-10-03 Darin Adler + + Reviewed by Geoff Garen. + + - next step of https://bugs.webkit.org/show_bug.cgi?id=21295 + Turn ExecState into a call frame pointer. + + Remove m_globalObject and m_globalData from ExecState. + + SunSpider says this is a wash (slightly faster but not statistically + significant); which is good enough since it's a preparation step and + not supposed to be a spedup. + + * API/JSCallbackFunction.cpp: + (JSC::JSCallbackFunction::JSCallbackFunction): + * kjs/ArrayConstructor.cpp: + (JSC::ArrayConstructor::ArrayConstructor): + * kjs/BooleanConstructor.cpp: + (JSC::BooleanConstructor::BooleanConstructor): + * kjs/DateConstructor.cpp: + (JSC::DateConstructor::DateConstructor): + * kjs/ErrorConstructor.cpp: + (JSC::ErrorConstructor::ErrorConstructor): + * kjs/FunctionPrototype.cpp: + (JSC::FunctionPrototype::FunctionPrototype): + * kjs/JSFunction.cpp: + (JSC::JSFunction::JSFunction): + * kjs/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::NativeErrorConstructor): + * kjs/NumberConstructor.cpp: + (JSC::NumberConstructor::NumberConstructor): + * kjs/ObjectConstructor.cpp: + (JSC::ObjectConstructor::ObjectConstructor): + * kjs/PrototypeFunction.cpp: + (JSC::PrototypeFunction::PrototypeFunction): + * kjs/RegExpConstructor.cpp: + (JSC::RegExpConstructor::RegExpConstructor): + * kjs/StringConstructor.cpp: + (JSC::StringConstructor::StringConstructor): + Pass JSGlobalData* instead of ExecState* to the InternalFunction + constructor. + + * API/OpaqueJSString.cpp: Added now-needed include. + + * JavaScriptCore.exp: Updated. + + * VM/CTI.cpp: + (JSC::CTI::emitSlowScriptCheck): Changed to use ARGS_globalData + instead of ARGS_exec. + + * VM/CTI.h: Added a new argument to the CTI, the global data pointer. + While it's possible to get to the global data pointer using the + ExecState pointer, it's slow enough that it's better to just keep + it around in the CTI arguments. + + * VM/CodeBlock.h: Moved the CodeType enum here from ExecState.h. + + * VM/Machine.cpp: + (JSC::Machine::execute): Pass fewer arguments when constructing + ExecState, and pass the global data pointer when invoking CTI. + (JSC::Machine::firstCallFrame): Added. Used to get the dynamic global + object, which is in the scope chain of the first call frame. + (JSC::Machine::cti_op_add): Use globalData instead of exec when + possible, to keep fast cases fast, since it's now more expensive to + get to it through the exec pointer. + (JSC::Machine::cti_timeout_check): Ditto. + (JSC::Machine::cti_op_put_by_id_second): Ditto. + (JSC::Machine::cti_op_get_by_id_second): Ditto. + (JSC::Machine::cti_op_mul): Ditto. + (JSC::Machine::cti_vm_compile): Ditto. + (JSC::Machine::cti_op_get_by_val): Ditto. + (JSC::Machine::cti_op_sub): Ditto. + (JSC::Machine::cti_op_put_by_val): Ditto. + (JSC::Machine::cti_op_put_by_val_array): Ditto. + (JSC::Machine::cti_op_negate): Ditto. + (JSC::Machine::cti_op_div): Ditto. + (JSC::Machine::cti_op_pre_dec): Ditto. + (JSC::Machine::cti_op_post_inc): Ditto. + (JSC::Machine::cti_op_lshift): Ditto. + (JSC::Machine::cti_op_bitand): Ditto. + (JSC::Machine::cti_op_rshift): Ditto. + (JSC::Machine::cti_op_bitnot): Ditto. + (JSC::Machine::cti_op_mod): Ditto. + (JSC::Machine::cti_op_post_dec): Ditto. + (JSC::Machine::cti_op_urshift): Ditto. + (JSC::Machine::cti_op_bitxor): Ditto. + (JSC::Machine::cti_op_bitor): Ditto. + (JSC::Machine::cti_op_call_eval): Ditto. + (JSC::Machine::cti_op_throw): Ditto. + (JSC::Machine::cti_op_is_string): Ditto. + (JSC::Machine::cti_op_debug): Ditto. + (JSC::Machine::cti_vm_throw): Ditto. + + * VM/Machine.h: Added firstCallFrame. + + * kjs/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::evaluate): Pass fewer arguments when + constructing ExecState. + + * kjs/ExecState.cpp: Deleted contents. Later we'll remove the + file altogether. + + * kjs/ExecState.h: Removed m_globalObject and m_globalData. + Moved CodeType into another header. + (JSC::ExecState::ExecState): Take only a single argument, a + call frame pointer. + (JSC::ExecState::dynamicGlobalObject): Get the object from + the first call frame since it's no longer stored. + (JSC::ExecState::globalData): Get the global data from the + scope chain, since we no longer store a pointer to it here. + (JSC::ExecState::identifierTable): Ditto. + (JSC::ExecState::propertyNames): Ditto. + (JSC::ExecState::emptyList): Ditto. + (JSC::ExecState::lexer): Ditto. + (JSC::ExecState::parser): Ditto. + (JSC::ExecState::machine): Ditto. + (JSC::ExecState::arrayTable): Ditto. + (JSC::ExecState::dateTable): Ditto. + (JSC::ExecState::mathTable): Ditto. + (JSC::ExecState::numberTable): Ditto. + (JSC::ExecState::regExpTable): Ditto. + (JSC::ExecState::regExpConstructorTable): Ditto. + (JSC::ExecState::stringTable): Ditto. + (JSC::ExecState::heap): Ditto. + + * kjs/FunctionConstructor.cpp: + (JSC::FunctionConstructor::FunctionConstructor): Pass + JSGlobalData* instead of ExecState* to the InternalFunction + constructor. + (JSC::constructFunction): Pass the global data pointer when + constructing a new scope chain. + + * kjs/InternalFunction.cpp: + (JSC::InternalFunction::InternalFunction): Take a JSGlobalData* + instead of an ExecState*. Later we can change more places to + work this way -- it's more efficient to take the type you need + since the caller might already have it. + * kjs/InternalFunction.h: Ditto. + + * kjs/JSCell.h: + (JSC::JSCell::operator new): Added an overload that takes a + JSGlobalData* so you can construct without an ExecState*. + + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::init): Moved creation of the global scope + chain in here, since it now requires a pointer to the global data. + Moved the initialization of the call frame in here since it requires + the global scope chain node. Removed the extra argument to ExecState + when creating the global ExecState*. + * kjs/JSGlobalObject.h: Removed initialization of globalScopeChain + and the call frame from the JSGlobalObjectData constructor. Added + a thisValue argument to the init function. + + * kjs/JSNumberCell.cpp: Added versions of jsNumberCell that take + JSGlobalData* rather than ExecState*. + * kjs/JSNumberCell.h: + (JSC::JSNumberCell::operator new): Added a version that takes + JSGlobalData*. + (JSC::JSNumberCell::JSNumberCell): Ditto. + (JSC::jsNumber): Ditto. + * kjs/JSString.cpp: + (JSC::jsString): Ditto. + (JSC::jsSubstring): Ditto. + (JSC::jsOwnedString): Ditto. + * kjs/JSString.h: + (JSC::JSString::JSString): Changed to take JSGlobalData*. + (JSC::jsEmptyString): Added a version that takes JSGlobalData*. + (JSC::jsSingleCharacterString): Ditto. + (JSC::jsSingleCharacterSubstring): Ditto. + (JSC::jsNontrivialString): Ditto. + (JSC::JSString::getIndex): Ditto. + (JSC::jsString): Ditto. + (JSC::jsSubstring): Ditto. + (JSC::jsOwnedString): Ditto. + + * kjs/ScopeChain.h: Added a globalData pointer to each node. + (JSC::ScopeChainNode::ScopeChainNode): Initialize the globalData + pointer. + (JSC::ScopeChainNode::push): Set the global data pointer in the + new node. + (JSC::ScopeChain::ScopeChain): Take a globalData argument. + + * kjs/SmallStrings.cpp: + (JSC::SmallStrings::createEmptyString): Take JSGlobalData* instead of + ExecState*. + (JSC::SmallStrings::createSingleCharacterString): Ditto. + * kjs/SmallStrings.h: + (JSC::SmallStrings::emptyString): Ditto. + (JSC::SmallStrings::singleCharacterString): Ditto. + +2008-10-03 Cameron Zwarich + + Reviewed by Geoff Garen. + + Bug 21343: REGRESSSION (r37160): ecma_3/ExecutionContexts/10.1.3-1.js and js1_4/Functions/function-001.js fail on 64-bit + + + Add a workaround for a bug in GCC, which affects GCC 4.0, GCC 4.2, and + llvm-gcc 4.2. I put it in an #ifdef because it was a slight regression + on SunSpider in 32-bit, although that might be entirely random. + + * kjs/Arguments.cpp: + (JSC::Arguments::getOwnPropertySlot): + +2008-10-03 Darin Adler + + Rubber stamped by Alexey Proskuryakov. + + * kjs/Shell.cpp: (main): Don't delete JSGlobalData. Later, we need to change + this tool to use public JavaScriptCore API instead. + +2008-10-03 Darin Adler + + Suggested by Alexey Proskuryakov. + + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::~JSGlobalData): Remove call to heap.destroy() because + it's too late to ref the JSGlobalData object once it's already being + destroyed. In practice this is not a problem because WebCore's JSGlobalData + is never destroyed and JSGlobalContextRelease takes care of calling + heap.destroy() in advance. + +2008-10-02 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + Replace SSE3 check with an SSE2 check, and implement SSE2 check on windows. + + 5.6% win on SunSpider on windows. + + * VM/CTI.cpp: + (JSC::isSSE2Present): + (JSC::CTI::compileBinaryArithOp): + (JSC::CTI::compileBinaryArithOpSlowCase): + +2008-10-03 Maciej Stachowiak + + Rubber stamped by Cameron Zwarich. + + - fix mistaken change of | to || which caused a big perf regression on EarleyBoyer + + * kjs/grammar.y: + +2008-10-02 Darin Adler + + Reviewed by Geoff Garen. + + - https://bugs.webkit.org/show_bug.cgi?id=21321 + Bug 21321: speed up JavaScriptCore by inlining Heap in JSGlobalData + + 1.019x as fast on SunSpider. + + * API/JSBase.cpp: + (JSEvaluateScript): Use heap. instead of heap-> to work with the heap. + (JSCheckScriptSyntax): Ditto. + (JSGarbageCollect): Ditto. + (JSReportExtraMemoryCost): Ditto. + * API/JSContextRef.cpp: + (JSGlobalContextRetain): Ditto. + (JSGlobalContextRelease): Destroy the heap with the destroy function instead + of the delete operator. + (JSContextGetGlobalObject): Use heap. instead of heap-> to work with the heap. + * API/JSObjectRef.cpp: + (JSObjectMake): Use heap. instead of heap-> to work with the heap. + (JSObjectMakeFunctionWithCallback): Ditto. + (JSObjectMakeConstructor): Ditto. + (JSObjectMakeFunction): Ditto. + (JSObjectMakeArray): Ditto. + (JSObjectMakeDate): Ditto. + (JSObjectMakeError): Ditto. + (JSObjectMakeRegExp): Ditto. + (JSObjectHasProperty): Ditto. + (JSObjectGetProperty): Ditto. + (JSObjectSetProperty): Ditto. + (JSObjectGetPropertyAtIndex): Ditto. + (JSObjectSetPropertyAtIndex): Ditto. + (JSObjectDeleteProperty): Ditto. + (JSObjectCallAsFunction): Ditto. + (JSObjectCallAsConstructor): Ditto. + (JSObjectCopyPropertyNames): Ditto. + (JSPropertyNameAccumulatorAddName): Ditto. + * API/JSValueRef.cpp: + (JSValueIsEqual): Ditto. + (JSValueIsInstanceOfConstructor): Ditto. + (JSValueMakeNumber): Ditto. + (JSValueMakeString): Ditto. + (JSValueToNumber): Ditto. + (JSValueToStringCopy): Ditto. + (JSValueToObject): Ditto. + (JSValueProtect): Ditto. + (JSValueUnprotect): Ditto. + + * kjs/ExecState.h: + (JSC::ExecState::heap): Update to use the & operator. + + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): Update to initialize a heap member + instead of calling new to make a heap. + (JSC::JSGlobalData::~JSGlobalData): Destroy the heap with the destroy + function instead of the delete operator. + * kjs/JSGlobalData.h: Change from Heap* to a Heap. + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::mark): Use the & operator here. + (JSC::JSGlobalObject::operator new): Use heap. instead of heap-> to work + with the heap. + +2008-10-02 Cameron Zwarich + + Reviewed by Geoff Garen. + + Bug 21317: Replace RegisterFile size and capacity information with Register pointers + + + This is a 2.3% speedup on the V8 DeltaBlue benchmark, a 3.3% speedup on + the V8 Raytrace benchmark, and a 1.0% speedup on SunSpider. + + * VM/Machine.cpp: + (JSC::slideRegisterWindowForCall): + (JSC::Machine::callEval): + (JSC::Machine::execute): + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_op_construct_JSConstruct): + * VM/RegisterFile.cpp: + (JSC::RegisterFile::~RegisterFile): + * VM/RegisterFile.h: + (JSC::RegisterFile::RegisterFile): + (JSC::RegisterFile::start): + (JSC::RegisterFile::end): + (JSC::RegisterFile::size): + (JSC::RegisterFile::shrink): + (JSC::RegisterFile::grow): + (JSC::RegisterFile::lastGlobal): + (JSC::RegisterFile::markGlobals): + (JSC::RegisterFile::markCallFrames): + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::copyGlobalsTo): + +2008-10-02 Cameron Zwarich + + Rubber-stamped by Darin Adler. + + Change bitwise operations introduced in r37166 to boolean operations. We + only use bitwise operations over boolean operations for increasing + performance in extremely hot code, but that does not apply to anything + in the parser. + + * kjs/grammar.y: + +2008-10-02 Gavin Barraclough + + Reviewed by Darin Adler. + + Fix for bug #21232 - should reset m_isPendingDash on flush, + and should allow '\-' as beginning or end of a range (though + not to specifiy a range itself). + + * ChangeLog: + * wrec/CharacterClassConstructor.cpp: + (JSC::CharacterClassConstructor::put): + (JSC::CharacterClassConstructor::flush): + * wrec/CharacterClassConstructor.h: + (JSC::CharacterClassConstructor::flushBeforeEscapedHyphen): + * wrec/WREC.cpp: + (JSC::WRECGenerator::generateDisjunction): + (JSC::WRECParser::parseCharacterClass): + (JSC::WRECParser::parseDisjunction): + * wrec/WREC.h: + +2008-10-02 Darin Adler + + Reviewed by Sam Weinig. + + - remove the "static" from declarations in a header file, since we + don't want them to have internal linkage + + * VM/Machine.h: Remove the static keyword from the constant and the + three inline functions that Geoff just moved here. + +2008-10-02 Geoffrey Garen + + Reviewed by Sam Weinig. + + Fixed https://bugs.webkit.org/show_bug.cgi?id=21283. + Profiler Crashes When Started + + * VM/Machine.cpp: + * VM/Machine.h: + (JSC::makeHostCallFramePointer): + (JSC::isHostCallFrame): + (JSC::stripHostCallFrameBit): Moved some things to the header so + JSGlobalObject could use them. + + * kjs/JSGlobalObject.h: + (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Call the + new makeHostCallFramePointer API, since 0 no longer indicates a host + call frame. + +2008-10-02 Alexey Proskuryakov + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=21304 + Stop using a static wrapper map for WebCore JS bindings + + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::~JSGlobalData): + (JSC::JSGlobalData::ClientData::~ClientData): + * kjs/JSGlobalData.h: + Added a client data member to JSGlobalData. WebCore will use it to store bindings-related + global data. + + * JavaScriptCore.exp: Export virtual ClientData destructor. + +2008-10-02 Geoffrey Garen + + Not reviewed. + + Try to fix Qt build. + + * kjs/Error.h: + +2008-10-01 Geoffrey Garen + + Reviewed by Darin Adler and Cameron Zwarich. + + Preliminary step toward dynamic recompilation: Standardized and + simplified the parsing interface. + + The main goal in this patch is to make it easy to ask for a duplicate + compilation, and get back a duplicate result -- same source URL, same + debugger / profiler ID, same toString behavior, etc. + + The basic unit of compilation and evaluation is now SourceCode, which + encompasses a SourceProvider, a range in that provider, and a starting + line number. + + A SourceProvider now encompasses a source URL, and *is* a source ID, + since a pointer is a unique identifier. + + * API/JSBase.cpp: + (JSEvaluateScript): + (JSCheckScriptSyntax): Provide a SourceCode to the Interpreter, since + other APIs are no longer supported. + + * VM/CodeBlock.h: + (JSC::EvalCodeCache::get): Provide a SourceCode to the Interpreter, since + other APIs are no longer supported. + (JSC::CodeBlock::CodeBlock): ASSERT something that used to be ASSERTed + by our caller -- this is a better bottleneck. + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::CodeGenerator): Updated for the fact that + FunctionBodyNode's parameters are no longer a WTF::Vector. + + * kjs/Arguments.cpp: + (JSC::Arguments::Arguments): ditto + + * kjs/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::evaluate): Provide a SourceCode to the Parser, + since other APIs are no longer supported. + + * kjs/FunctionConstructor.cpp: + (JSC::constructFunction): Provide a SourceCode to the Parser, since + other APIs are no longer supported. Adopt FunctionBodyNode's new + "finishParsing" API. + + * kjs/JSFunction.cpp: + (JSC::JSFunction::lengthGetter): + (JSC::JSFunction::getParameterName): Updated for the fact that + FunctionBodyNode's parameters are no longer a wtf::Vector. + + * kjs/JSFunction.h: Nixed some cruft. + + * kjs/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncEval): Provide a SourceCode to the Parser, since + other APIs are no longer supported. + + * kjs/Parser.cpp: + (JSC::Parser::parse): Require a SourceCode argument, instead of a bunch + of broken out parameters. Stop tracking sourceId as an integer, since we + use the SourceProvider pointer for this now. Don't clamp the + startingLineNumber, since SourceCode does that now. + + * kjs/Parser.h: + (JSC::Parser::parse): Standardized the parsing interface to require a + SourceCode. + + * kjs/Shell.cpp: + (functionRun): + (functionLoad): + (prettyPrintScript): + (runWithScripts): + (runInteractive): Provide a SourceCode to the Interpreter, since + other APIs are no longer supported. + + * kjs/SourceProvider.h: + (JSC::SourceProvider::SourceProvider): + (JSC::SourceProvider::url): + (JSC::SourceProvider::asId): + (JSC::UStringSourceProvider::create): + (JSC::UStringSourceProvider::UStringSourceProvider): Added new + responsibilities described above. + + * kjs/SourceRange.h: + (JSC::SourceCode::SourceCode): + (JSC::SourceCode::toString): + (JSC::SourceCode::provider): + (JSC::SourceCode::firstLine): + (JSC::SourceCode::data): + (JSC::SourceCode::length): Added new responsibilities described above. + Renamed SourceRange to SourceCode, based on review feedback. Added + a makeSource function for convenience. + + * kjs/debugger.h: Provide a SourceCode to the client, since other APIs + are no longer supported. + + * kjs/grammar.y: Provide startingLineNumber when creating a SourceCode. + + * kjs/debugger.h: Treat sourceId as intptr_t to avoid loss of precision + on 64bit platforms. + + * kjs/interpreter.cpp: + (JSC::Interpreter::checkSyntax): + (JSC::Interpreter::evaluate): + * kjs/interpreter.h: Require a SourceCode instead of broken out arguments. + + * kjs/lexer.cpp: + (JSC::Lexer::setCode): + * kjs/lexer.h: + (JSC::Lexer::sourceRange): Fold together the SourceProvider and line number + into a SourceCode. Fixed a bug where the Lexer would accidentally keep + alive the last SourceProvider forever. + + * kjs/nodes.cpp: + (JSC::ScopeNode::ScopeNode): + (JSC::ProgramNode::ProgramNode): + (JSC::ProgramNode::create): + (JSC::EvalNode::EvalNode): + (JSC::EvalNode::generateCode): + (JSC::EvalNode::create): + (JSC::FunctionBodyNode::FunctionBodyNode): + (JSC::FunctionBodyNode::finishParsing): + (JSC::FunctionBodyNode::create): + (JSC::FunctionBodyNode::generateCode): + (JSC::ProgramNode::generateCode): + (JSC::FunctionBodyNode::paramString): + * kjs/nodes.h: + (JSC::ScopeNode::): + (JSC::ScopeNode::sourceId): + (JSC::FunctionBodyNode::): + (JSC::FunctionBodyNode::parameterCount): + (JSC::FuncExprNode::): + (JSC::FuncDeclNode::): Store a SourceCode in all ScopeNodes, since + SourceCode is now responsible for tracking URL, ID, etc. Streamlined + some ad hoc FunctionBodyNode fixups into a "finishParsing" function, to + help make clear what you need to do in order to finish parsing a + FunctionBodyNode. + + * wtf/Vector.h: + (WTF::::releaseBuffer): Don't ASSERT that releaseBuffer() is only called + when buffer is not 0, since FunctionBodyNode is more than happy + to get back a 0 buffer, and other functions like RefPtr::release() allow + for 0, too. + +2008-10-01 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Bug 21289: REGRESSION (r37160): Inspector crashes on load + + + The code in Arguments::mark() in r37160 was wrong. It marks indices in + d->registers, but that makes no sense (they are local variables, not + arguments). It should mark those indices in d->registerArray instead. + + This patch also changes Arguments::copyRegisters() to use d->numParameters + instead of recomputing it. + + * kjs/Arguments.cpp: + (JSC::Arguments::mark): + * kjs/Arguments.h: + (JSC::Arguments::copyRegisters): + +2008-09-30 Darin Adler + + Reviewed by Eric Seidel. + + - https://bugs.webkit.org/show_bug.cgi?id=21214 + work on getting rid of ExecState + + Eliminate some unneeded uses of dynamicGlobalObject. + + * API/JSClassRef.cpp: + (OpaqueJSClass::contextData): Changed to use a map in the global data instead + of on the global object. Also fixed to use only a single hash table lookup. + + * API/JSObjectRef.cpp: + (JSObjectMakeConstructor): Use lexicalGlobalObject rather than dynamicGlobalObject + to get the object prototype. + + * kjs/ArrayPrototype.cpp: + (JSC::arrayProtoFuncToString): Use arrayVisitedElements set in global data rather + than in the global object. + (JSC::arrayProtoFuncToLocaleString): Ditto. + (JSC::arrayProtoFuncJoin): Ditto. + + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): Don't initialize opaqueJSClassData, since + it's no longer a pointer. + (JSC::JSGlobalData::~JSGlobalData): We still need to delete all the values, but + we don't need to delete the map since it's no longer a pointer. + + * kjs/JSGlobalData.h: Made opaqueJSClassData a map instead of a pointer to a map. + Also added arrayVisitedElements. + + * kjs/JSGlobalObject.h: Removed arrayVisitedElements. + + * kjs/Shell.cpp: + (functionRun): Use lexicalGlobalObject instead of dynamicGlobalObject. + (functionLoad): Ditto. + +2008-10-01 Cameron Zwarich + + Not reviewed. + + Speculative Windows build fix. + + * kjs/grammar.y: + +2008-10-01 Cameron Zwarich + + Reviewed by Darin Adler. + + Bug 21123: using "arguments" in a function should not force creation of an activation object + + + Make the 'arguments' object not require a JSActivation. We store the + 'arguments' object in the OptionalCalleeArguments call frame slot. We + need to be able to get the original 'arguments' object to tear it off + when returning from a function, but 'arguments' may be assigned to in a + number of ways. + + Therefore, we use the OptionalCalleeArguments slot when we want to get + the original activation or we know that 'arguments' was not assigned a + different value. When 'arguments' may have been assigned a new value, + we use a new local variable that is initialized with 'arguments'. Since + a function parameter named 'arguments' may overwrite the value of + 'arguments', we also need to be careful to look up 'arguments' in the + symbol table, so we get the parameter named 'arguments' instead of the + local variable that we have added for holding the 'arguments' object. + + This is a 19.1% win on the V8 Raytrace benchmark using the SunSpider + harness, and a 20.7% win using the V8 harness. This amounts to a 6.5% + total speedup on the V8 benchmark suite using the V8 harness. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + * VM/CodeBlock.h: + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::CodeGenerator): + * VM/Machine.cpp: + (JSC::Machine::unwindCallFrame): + (JSC::Machine::privateExecute): + (JSC::Machine::retrieveArguments): + (JSC::Machine::cti_op_init_arguments): + (JSC::Machine::cti_op_ret_activation_arguments): + * VM/Machine.h: + * VM/RegisterFile.h: + (JSC::RegisterFile::): + * kjs/Arguments.cpp: + (JSC::Arguments::mark): + (JSC::Arguments::fillArgList): + (JSC::Arguments::getOwnPropertySlot): + (JSC::Arguments::put): + * kjs/Arguments.h: + (JSC::Arguments::setRegisters): + (JSC::Arguments::init): + (JSC::Arguments::Arguments): + (JSC::Arguments::copyRegisters): + (JSC::JSActivation::copyRegisters): + * kjs/JSActivation.cpp: + (JSC::JSActivation::argumentsGetter): + * kjs/JSActivation.h: + (JSC::JSActivation::JSActivationData::JSActivationData): + * kjs/grammar.y: + * kjs/nodes.h: + (JSC::ScopeNode::setUsesArguments): + * masm/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::orl_mr): + +2008-10-01 Kevin McCullough + + Rubberstamped by Geoff Garen. + + Remove BreakpointCheckStatement because it's not used anymore. + No effect on sunspider or the jsc tests. + + * kjs/nodes.cpp: + * kjs/nodes.h: + +2008-09-30 Oliver Hunt + + Reviewed by Geoff Garen. + + Improve performance of CTI on windows. + + Currently on platforms where the compiler doesn't allow us to safely + index relative to the address of a parameter we need to actually + provide a pointer to CTI runtime call arguments. This patch improves + performance in this case by making the CTI logic for restoring this + parameter much less conservative by only resetting it before we actually + make a call, rather than between each and every SF bytecode we generate + code for. + + This results in a 3.6% progression on the v8 benchmark when compiled with MSVC. + + * VM/CTI.cpp: + (JSC::CTI::emitCall): + (JSC::CTI::compileOpCall): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompilePutByIdTransition): + * VM/CTI.h: + * masm/X86Assembler.h: + * wtf/Platform.h: + +2008-09-30 Maciej Stachowiak + + Reviewed by Oliver Hunt. + + - track uses of "this", "with" and "catch" in the parser + + Knowing this up front will be useful for future optimizations. + + Perf and correctness remain the same. + + * kjs/NodeInfo.h: + * kjs/grammar.y: + +2008-09-30 Sam Weinig + + Reviewed by Mark Rowe. + + Add WebKitAvailability macros for JSObjectMakeArray, JSObjectMakeDate, JSObjectMakeError, + and JSObjectMakeRegExp + + * API/JSObjectRef.h: + +2008-09-30 Darin Adler + + Reviewed by Geoff Garen. + + - https://bugs.webkit.org/show_bug.cgi?id=21214 + work on getting rid of ExecState + + Replaced the m_prev field of ExecState with a bit in the + call frame pointer to indicate "host" call frames. + + * VM/Machine.cpp: + (JSC::makeHostCallFramePointer): Added. Sets low bit. + (JSC::isHostCallFrame): Added. Checks low bit. + (JSC::stripHostCallFrameBit): Added. Clears low bit. + (JSC::Machine::unwindCallFrame): Replaced null check that was + formerly used to detect host call frames with an isHostCallFrame check. + (JSC::Machine::execute): Pass in a host call frame pointer rather than + always passing 0 when starting execution from the host. This allows us + to follow the entire call frame pointer chain when desired, or to stop + at the host calls when that's desired. + (JSC::Machine::privateExecute): Replaced null check that was + formerly used to detect host call frames with an isHostCallFrame check. + (JSC::Machine::retrieveCaller): Ditto. + (JSC::Machine::retrieveLastCaller): Ditto. + (JSC::Machine::callFrame): Removed the code to walk up m_prev pointers + and replaced it with code that uses the caller pointer and uses the + stripHostCallFrameBit function. + + * kjs/ExecState.cpp: Removed m_prev. + * kjs/ExecState.h: Ditto. + +2008-09-30 Cameron Zwarich + + Reviewed by Geoff Garen. + + Move all detection of 'arguments' in a lexical scope to the parser, in + preparation for fixing + + Bug 21123: using "arguments" in a function should not force creation of an activation object + + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::CodeGenerator): + * kjs/NodeInfo.h: + * kjs/grammar.y: + +2008-09-30 Geoffrey Garen + + Not reviewed. + + * kjs/Shell.cpp: + (runWithScripts): Fixed indentation. + +2008-09-30 Mark Rowe + + Rubber-stamped by Sam Weinig. + + Build fix. Move InternalFunction::classInfo implementation into the .cpp + file to prevent the vtable for InternalFunction being generated as a weak symbol. + Has no effect on SunSpider. + + * kjs/InternalFunction.cpp: + (JSC::InternalFunction::classInfo): + * kjs/InternalFunction.h: + +2008-09-29 Maciej Stachowiak + + Reviewed by Darin Adler. + + - optimize appending a number to a string + https://bugs.webkit.org/show_bug.cgi?id=21203 + + It's pretty common in real-world code (and on some of the v8 + benchmarks) to append a number to a string, so I made this one of + the fast cases, and also added support to UString to do it + directly without allocating a temporary UString. + + ~1% speedup on v8 benchmark. + + * VM/Machine.cpp: + (JSC::jsAddSlowCase): Make this NEVER_INLINE because somehow otherwise + the change is a regression. + (JSC::jsAdd): Handle number + string special case. + (JSC::Machine::cti_op_add): Integrate much of the logic of jsAdd to + avoid exception check in the str + str, num + num and str + num cases. + * kjs/ustring.cpp: + (JSC::expandedSize): Make this a non-member function, since it needs to be + called in non-member functions but not outside this file. + (JSC::expandCapacity): Ditto. + (JSC::UString::expandCapacity): Call the non-member version. + (JSC::createRep): Helper to make a rep from a char*. + (JSC::UString::UString): Use above helper. + (JSC::concatenate): Guts of concatenating constructor for cases where first + item is a UString::Rep, and second is a UChar* and length, or a char*. + (JSC::UString::append): Implement for cases where first item is a UString::Rep, + and second is an int or double. Sadly duplicates logic of UString::from(int) + and UString::from(double). + * kjs/ustring.h: + +2008-09-29 Darin Adler + + Reviewed by Sam Weinig. + + - https://bugs.webkit.org/show_bug.cgi?id=21214 + work on getting rid of ExecState + + * JavaScriptCore.exp: Updated since JSGlobalObject::init + no longer takes a parameter. + + * VM/Machine.cpp: + (JSC::Machine::execute): Removed m_registerFile argument + for ExecState constructors. + + * kjs/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::evaluate): Removed globalThisValue + argument for ExecState constructor. + + * kjs/ExecState.cpp: + (JSC::ExecState::ExecState): Removed globalThisValue and + registerFile arguments to constructors. + + * kjs/ExecState.h: Removed m_globalThisValue and + m_registerFile data members. + + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::init): Removed globalThisValue + argument for ExecState constructor. + + * kjs/JSGlobalObject.h: + (JSC::JSGlobalObject::JSGlobalObject): Got rid of parameter + for the init function. + +2008-09-29 Geoffrey Garen + + Rubber-stamped by Cameron Zwarich. + + Fixed https://bugs.webkit.org/show_bug.cgi?id=21225 + Machine::retrieveLastCaller should check for a NULL codeBlock + + In order to crash, you would need to call retrieveCaller in a situation + where you had two host call frames in a row in the register file. I + don't know how to make that happen, or if it's even possible, so I don't + have a test case -- but better safe than sorry! + + * VM/Machine.cpp: + (JSC::Machine::retrieveLastCaller): + +2008-09-29 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Store the callee ScopeChain, not the caller ScopeChain, in the call frame + header. Nix the "scopeChain" local variable and ExecState::m_scopeChain, and + access the callee ScopeChain through the call frame header instead. + + Profit: call + return are simpler, because they don't have to update the + "scopeChain" local variable, or ExecState::m_scopeChain. + + Because CTI keeps "r" in a register, reading the callee ScopeChain relative + to "r" can be very fast, in any cases we care to optimize. + + 0% speedup on empty function call benchmark. (5.5% speedup in bytecode.) + 0% speedup on SunSpider. (7.5% speedup on controlflow-recursive.) + 2% speedup on SunSpider --v8. + 2% speedup on v8 benchmark. + + * VM/CTI.cpp: Changed scope chain access to read the scope chain from + the call frame header. Sped up op_ret by changing it not to fuss with + the "scopeChain" local variable or ExecState::m_scopeChain. + + * VM/CTI.h: Updated CTI trampolines not to take a ScopeChainNode* + argument, since that's stored in the call frame header now. + + * VM/Machine.cpp: Access "scopeChain" and "codeBlock" through new helper + functions that read from the call frame header. Updated functions operating + on ExecState::m_callFrame to account for / take advantage of the fact that + Exec:m_callFrame is now never NULL. + + Fixed a bug in op_construct, where it would use the caller's default + object prototype, rather than the callee's, when constructing a new object. + + * VM/Machine.h: Made some helper functions available. Removed + ScopeChainNode* arguments to a lot of functions, since the ScopeChainNode* + is now stored in the call frame header. + + * VM/RegisterFile.h: Renamed "CallerScopeChain" to "ScopeChain", since + that's what it is now. + + * kjs/DebuggerCallFrame.cpp: Updated for change to ExecState signature. + + * kjs/ExecState.cpp: + * kjs/ExecState.h: Nixed ExecState::m_callFrame, along with the unused + isGlobalObject function. + + * kjs/JSGlobalObject.cpp: + * kjs/JSGlobalObject.h: Gave the global object a fake call frame in + which to store the global scope chain, since our code now assumes that + it can always read the scope chain out of the ExecState's call frame. + +2008-09-29 Cameron Zwarich + + Reviewed by Sam Weinig. + + Remove the isActivationObject() virtual method on JSObject and use + StructureID information instead. This should be slightly faster, but + isActivationObject() is only used in assertions and unwinding the stack + for exceptions. + + * VM/Machine.cpp: + (JSC::depth): + (JSC::Machine::unwindCallFrame): + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_ret_activation): + * kjs/JSActivation.cpp: + * kjs/JSActivation.h: + * kjs/JSObject.h: + +2008-09-29 Peter Gal + + Reviewed and tweaked by Darin Adler. + + Fix build for non-all-in-one platforms. + + * kjs/StringPrototype.cpp: Added missing ASCIICType.h include. + +2008-09-29 Bradley T. Hughes + + Reviewed by Simon Hausmann. + + Fix compilation with icpc + + * wtf/HashSet.h: + (WTF::::find): + (WTF::::contains): + +2008-09-29 Thiago Macieira + + Reviewed by Simon Hausmann. + + Changed copyright from Trolltech ASA to Nokia. + + Nokia acquired Trolltech ASA, assets were transferred on September 26th 2008. + + + * wtf/qt/MainThreadQt.cpp: + +2008-09-29 Simon Hausmann + + Reviewed by Lars Knoll. + + Don't accidentially install libJavaScriptCore.a for the build inside + Qt. + + * JavaScriptCore.pro: + +2008-09-28 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Bug 21200: Allow direct access to 'arguments' without using op_resolve + + + Allow fast access to the 'arguments' object by adding an extra slot to + the callframe to store it. + + This is a 3.0% speedup on the V8 Raytrace benchmark. + + * JavaScriptCore.exp: + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::CodeGenerator): + (JSC::CodeGenerator::registerFor): + * VM/CodeGenerator.h: + (JSC::CodeGenerator::registerFor): + * VM/Machine.cpp: + (JSC::Machine::initializeCallFrame): + (JSC::Machine::dumpRegisters): + (JSC::Machine::privateExecute): + (JSC::Machine::retrieveArguments): + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_op_create_arguments): + (JSC::Machine::cti_op_construct_JSConstruct): + * VM/Machine.h: + * VM/Opcode.h: + * VM/RegisterFile.h: + (JSC::RegisterFile::): + * kjs/JSActivation.cpp: + (JSC::JSActivation::mark): + (JSC::JSActivation::argumentsGetter): + * kjs/JSActivation.h: + (JSC::JSActivation::JSActivationData::JSActivationData): + * kjs/NodeInfo.h: + * kjs/Parser.cpp: + (JSC::Parser::didFinishParsing): + * kjs/Parser.h: + (JSC::Parser::parse): + * kjs/grammar.y: + * kjs/nodes.cpp: + (JSC::ScopeNode::ScopeNode): + (JSC::ProgramNode::ProgramNode): + (JSC::ProgramNode::create): + (JSC::EvalNode::EvalNode): + (JSC::EvalNode::create): + (JSC::FunctionBodyNode::FunctionBodyNode): + (JSC::FunctionBodyNode::create): + * kjs/nodes.h: + (JSC::ScopeNode::usesArguments): + +2008-09-28 Mark Rowe + + Reviewed by Sam Weinig. + + Add an ASCII fast-path to toLowerCase and toUpperCase. + + The fast path speeds up the common case of an ASCII-only string by up to 60% while adding a less than 5% penalty + to the less common non-ASCII case. + + This also removes stringProtoFuncToLocaleLowerCase and stringProtoFuncToLocaleUpperCase, which were identical + to the non-locale variants of the functions. toLocaleLowerCase and toLocaleUpperCase now use the non-locale + variants of the functions directly. + + * kjs/StringPrototype.cpp: + (JSC::stringProtoFuncToLowerCase): + (JSC::stringProtoFuncToUpperCase): + +2008-09-28 Mark Rowe + + Reviewed by Cameron Zwarich. + + Speed up parseInt and parseFloat. + + Repeatedly indexing into a UString is slow, so retrieve a pointer into the underlying buffer once up front + and use that instead. This is a 7% win on a parseInt/parseFloat micro-benchmark. + + * kjs/JSGlobalObjectFunctions.cpp: + (JSC::parseInt): + (JSC::parseFloat): + +2008-09-28 Simon Hausmann + + Reviewed by David Hyatt. + + In Qt's initializeThreading re-use an existing thread identifier for the main + thread if it exists. + + currentThread() implicitly creates new identifiers and it could be that + it is called before initializeThreading(). + + * wtf/ThreadingQt.cpp: + (WTF::initializeThreading): + +2008-09-27 Keishi Hattori + + Added Machine::retrieveCaller to the export list. + + Reviewed by Kevin McCullough and Tim Hatcher. + + * JavaScriptCore.exp: Added Machine::retrieveCaller. + +2008-09-27 Anders Carlsson + + Fix build. + + * VM/CTI.cpp: + (JSC::): + +2008-09-27 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + https://bugs.webkit.org/show_bug.cgi?id=21175 + + Store the callee CodeBlock, not the caller CodeBlock, in the call frame + header. Nix the "codeBlock" local variable, and access the callee + CodeBlock through the call frame header instead. + + Profit: call + return are simpler, because they don't have to update the + "codeBlock" local variable. + + Because CTI keeps "r" in a register, reading the callee CodeBlock relative + to "r" can be very fast, in any cases we care to optimize. Presently, + no such cases seem important. + + Also, stop writing "dst" to the call frame header. CTI doesn't use it. + + 21.6% speedup on empty function call benchmark. + 3.8% speedup on SunSpider --v8. + 2.1% speedup on v8 benchmark. + 0.7% speedup on SunSpider (6% speedup on controlflow-recursive). + + Small regression in bytecode, because currently every op_ret reads the + callee CodeBlock to check needsFullScopeChain, and bytecode does not + keep "r" in a register. On-balance, this is probably OK, since CTI is + our high-performance execution model. Also, this should go away once + we make needsFullScopeChain statically determinable at parse time. + + * VM/CTI.cpp: + (JSC::CTI::compileOpCall): The speedup! + (JSC::CTI::privateCompileSlowCases): ditto + + * VM/CTI.h: + (JSC::): Fixed up magic trampoline constants to account for the nixed + "codeBlock" argument. + (JSC::CTI::execute): Changed trampoline function not to take a "codeBlock" + argument, since codeBlock is now stored in the call frame header. + + * VM/Machine.cpp: Read the callee CodeBlock from the register file. Use + a NULL CallerRegisters in the call frame header to signal a built-in + caller, since CodeBlock is now never NULL. + + * VM/Machine.h: Made some stand-alone functions Machine member functions + so they could call the private codeBlock() accessor in the Register + class, of which Machine is a friend. Renamed "CallerCodeBlock" to + "CodeBlock", since it's no longer the caller's CodeBlock. + + * VM/RegisterFile.h: Marked some methods const to accommodate a + const RegisterFile* being passed around in Machine.cpp. + +2008-09-26 Jan Michael Alonzo + + Gtk build fix. Not reviewed. + + Narrow-down the target of the JavaScriptCore .lut.h generator so + it won't try to create the WebCore .lut.hs. + + * GNUmakefile.am: + +2008-09-26 Matt Lilek + + Reviewed by Tim Hatcher. + + Update FEATURE_DEFINES after ENABLE_CROSS_DOCUMENT_MESSAGING was removed. + + * Configurations/JavaScriptCore.xcconfig: + +2008-09-26 Cameron Zwarich + + Rubber-stamped by Anders Carlson. + + Change the name 'sc' to 'scopeChainNode' in a few places. + + * kjs/nodes.cpp: + (JSC::EvalNode::generateCode): + (JSC::FunctionBodyNode::generateCode): + (JSC::ProgramNode::generateCode): + +2008-09-26 Sam Weinig + + Reviewed by Darin Adler. + + Patch for https://bugs.webkit.org/show_bug.cgi?id=21152 + Speedup static property get/put + + Convert getting/setting static property values to use static functions + instead of storing an integer and switching in getValueProperty/putValueProperty. + + * kjs/JSObject.cpp: + (JSC::JSObject::deleteProperty): + (JSC::JSObject::getPropertyAttributes): + * kjs/MathObject.cpp: + (JSC::MathObject::getOwnPropertySlot): + * kjs/NumberConstructor.cpp: + (JSC::numberConstructorNaNValue): + (JSC::numberConstructorNegInfinity): + (JSC::numberConstructorPosInfinity): + (JSC::numberConstructorMaxValue): + (JSC::numberConstructorMinValue): + * kjs/PropertySlot.h: + (JSC::PropertySlot::): + * kjs/RegExpConstructor.cpp: + (JSC::regExpConstructorDollar1): + (JSC::regExpConstructorDollar2): + (JSC::regExpConstructorDollar3): + (JSC::regExpConstructorDollar4): + (JSC::regExpConstructorDollar5): + (JSC::regExpConstructorDollar6): + (JSC::regExpConstructorDollar7): + (JSC::regExpConstructorDollar8): + (JSC::regExpConstructorDollar9): + (JSC::regExpConstructorInput): + (JSC::regExpConstructorMultiline): + (JSC::regExpConstructorLastMatch): + (JSC::regExpConstructorLastParen): + (JSC::regExpConstructorLeftContext): + (JSC::regExpConstructorRightContext): + (JSC::setRegExpConstructorInput): + (JSC::setRegExpConstructorMultiline): + (JSC::RegExpConstructor::setInput): + (JSC::RegExpConstructor::setMultiline): + (JSC::RegExpConstructor::multiline): + * kjs/RegExpConstructor.h: + * kjs/RegExpObject.cpp: + (JSC::regExpObjectGlobal): + (JSC::regExpObjectIgnoreCase): + (JSC::regExpObjectMultiline): + (JSC::regExpObjectSource): + (JSC::regExpObjectLastIndex): + (JSC::setRegExpObjectLastIndex): + * kjs/RegExpObject.h: + (JSC::RegExpObject::setLastIndex): + (JSC::RegExpObject::lastIndex): + (JSC::RegExpObject::RegExpObjectData::RegExpObjectData): + * kjs/StructureID.cpp: + (JSC::StructureID::getEnumerablePropertyNames): + * kjs/create_hash_table: + * kjs/lexer.cpp: + (JSC::Lexer::lex): + * kjs/lookup.cpp: + (JSC::HashTable::createTable): + (JSC::HashTable::deleteTable): + (JSC::setUpStaticFunctionSlot): + * kjs/lookup.h: + (JSC::HashEntry::initialize): + (JSC::HashEntry::setKey): + (JSC::HashEntry::key): + (JSC::HashEntry::attributes): + (JSC::HashEntry::function): + (JSC::HashEntry::functionLength): + (JSC::HashEntry::propertyGetter): + (JSC::HashEntry::propertyPutter): + (JSC::HashEntry::lexerValue): + (JSC::HashEntry::): + (JSC::HashTable::entry): + (JSC::getStaticPropertySlot): + (JSC::getStaticValueSlot): + (JSC::lookupPut): + +2008-09-26 Gavin Barraclough + + Reviewed by Maciej Stachowiak & Oliver Hunt. + + Add support for reusing temporary JSNumberCells. This change is based on the observation + that if the result of certain operations is a JSNumberCell and is consumed by a subsequent + operation that would produce a JSNumberCell, we can reuse the object rather than allocating + a fresh one. E.g. given the expression ((a * b) * c), we can statically determine that + (a * b) will have a numeric result (or else it will have thrown an exception), so the result + will either be a JSNumberCell or a JSImmediate. + + This patch changes three areas of JSC: + * The AST now tracks type information about the result of each node. + * This information is consumed in bytecode compilation, and certain bytecode operations + now carry the statically determined type information about their operands. + * CTI uses the information in a number of fashions: + * Where an operand to certain arithmetic operations is reusable, it will plant code + to try to perform the operation in JIT code & reuse the cell, where appropriate. + * Where it can be statically determined that an operand can only be numeric (typically + the result of another arithmetic operation) the code will not redundantly check that + the JSCell is a JSNumberCell. + * Where either of the operands to an add are non-numeric do not plant an optimized + arithmetic code path, just call straight out to the C function. + + +6% Sunspider (10% progression on 3D, 16% progression on math, 60% progression on access-nbody), + +1% v8-tests (improvements in raytrace & crypto) + + * VM/CTI.cpp: Add optimized code generation with reuse of temporary JSNumberCells. + * VM/CTI.h: + * kjs/JSNumberCell.h: + * masm/X86Assembler.h: + + * VM/CodeBlock.cpp: Add type information to specific bytecodes. + * VM/CodeGenerator.cpp: + * VM/CodeGenerator.h: + * VM/Machine.cpp: + + * kjs/nodes.cpp: Track static type information for nodes. + * kjs/nodes.h: + * kjs/ResultDescriptor.h: (Added) + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-09-26 Yichao Yin + + Reviewed by George Staikos, Maciej Stachowiak. + + Add utility functions needed for upcoming WML code. + + * wtf/ASCIICType.h: + (WTF::isASCIIPrintable): + +2008-09-26 Geoffrey Garen + + Reviewed by Darin Adler. + + Reverted the part of r36614 that used static data because static data + is not thread-safe. + +2008-09-26 Geoffrey Garen + + Reviewed by Maciej Stachowiak. + + Removed dynamic check for whether the callee needs an activation object. + Replaced with callee code to create the activation object. + + 0.5% speedup on SunSpider. + No change on v8 benchmark. (Might be a speedup, but it's in range of the + variance.) + + 0.7% speedup on v8 benchmark in bytecode. + 1.3% speedup on empty call benchmark in bytecode. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): Added support for op_init_activation, + the new opcode that specifies that the callee's initialization should + create an activation object. + (JSC::CTI::privateCompile): Removed previous code that did a similar + thing in an ad-hoc way. + + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): Added a case for dumping op_init_activation. + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::generate): Added fixup code to change op_init to + op_init_activation if necessary. (With a better parser, we would know + which to use from the beginning.) + + * VM/Instruction.h: + (JSC::Instruction::Instruction): + (WTF::): Faster traits for the instruction vector. An earlier version + of this patch relied on inserting at the beginning of the vector, and + depended on this change for speed. + + * VM/Machine.cpp: + (JSC::Machine::execute): Removed clients of setScopeChain, the old + abstraction for dynamically checking for whether an activation object + needed to be created. + (JSC::Machine::privateExecute): ditto + + (JSC::Machine::cti_op_push_activation): Renamed this function from + cti_vm_updateScopeChain, and made it faster by removing the call to + setScopeChain. + * VM/Machine.h: + + * VM/Opcode.h: Declared op_init_activation. + +2008-09-24 Geoffrey Garen + + Reviewed by Maciej Stachowiak. + + Move most of the return code back into the callee, now that the callee + doesn't have to calculate anything dynamically. + + 11.5% speedup on empty function call benchmark. + + SunSpider says 0.3% faster. SunSpider --v8 says no change. + + * VM/CTI.cpp: + (JSC::CTI::compileOpCall): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + +2008-09-24 Sam Weinig + + Reviewed by Maciej Stachowiak. + + Remove staticFunctionGetter. There is only one remaining user of + staticFunctionGetter and it can be converted to use setUpStaticFunctionSlot. + + * JavaScriptCore.exp: + * kjs/lookup.cpp: + * kjs/lookup.h: + +2008-09-24 Maciej Stachowiak + + Reviewed by Oliver Hunt. + + - inline JIT fast case of op_neq + - remove extra level of function call indirection from slow cases of eq and neq + + 1% speedup on Richards + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_eq): + (JSC::Machine::cti_op_neq): + * kjs/operations.cpp: + (JSC::equal): + (JSC::equalSlowCase): + * kjs/operations.h: + (JSC::equalSlowCaseInline): + +2008-09-24 Sam Weinig + + Reviewed by Darin Adler. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=21080 + + Crash below Function.apply when using a runtime array as the argument list + + Test: plugins/bindings-array-apply-crash.html + + * kjs/FunctionPrototype.cpp: + (JSC::functionProtoFuncApply): Revert to the slow case if the object inherits from + JSArray (via ClassInfo) but is not a JSArray. + +2008-09-24 Kevin McCullough + + Style change. + + * kjs/nodes.cpp: + (JSC::statementListEmitCode): + +2008-09-24 Kevin McCullough + + Reviewed by Geoff. + + Bug 21031: Breakpoints in the condition of loops only breaks the first + time + - Now when setting breakpoints in the condition of a loop (for, while, + for in, and do while) will successfully break each time throught the + loop. + - For 'for' loops we need a little more complicated behavior that cannot + be accomplished without some more significant changes: + https://bugs.webkit.org/show_bug.cgi?id=21073 + + * kjs/nodes.cpp: + (JSC::statementListEmitCode): We don't want to blindly emit a debug hook + at the first line of loops, instead let the loop emit the debug hooks. + (JSC::DoWhileNode::emitCode): + (JSC::WhileNode::emitCode): + (JSC::ForNode::emitCode): + (JSC::ForInNode::emitCode): + * kjs/nodes.h: + (JSC::StatementNode::): + (JSC::DoWhileNode::): + (JSC::WhileNode::): + (JSC::ForInNode::): + +2008-09-24 Geoffrey Garen + + Reviewed by Darin Adler. + + Fixed Need a SPI for telling JS the size of + the objects it retains + + * API/tests/testapi.c: Test the new SPI a little. + + * API/JSSPI.cpp: Add the new SPI. + * API/JSSPI.h: Add the new SPI. + * JavaScriptCore.exp: Add the new SPI. + * JavaScriptCore.xcodeproj/project.pbxproj: Add the new SPI. + +2008-09-24 Geoffrey Garen + + Reviewed by Darin Adler. + + * API/JSBase.h: Filled in some missing function names. + +2008-09-24 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Fixed https://bugs.webkit.org/show_bug.cgi?id=21057 + Crash in RegisterID::deref() running fast/canvas/canvas-putImageData.html + + * VM/CodeGenerator.h: Changed declaration order to ensure the + m_lastConstant, which is a RefPtr that points into m_calleeRegisters, + has its destructor called before the destructor for m_calleeRegisters. + +2008-09-24 Darin Adler + + Reviewed by Sam Weinig. + + - https://bugs.webkit.org/show_bug.cgi?id=21047 + speed up ret_activation with inlining + + About 1% on v8-raytrace. + + * JavaScriptCore.exp: Removed JSVariableObject::setRegisters. + + * kjs/JSActivation.cpp: Moved copyRegisters to the header to make it inline. + * kjs/JSActivation.h: + (JSC::JSActivation::copyRegisters): Moved here. Also removed the registerArraySize + argument to setRegisters, since the object doesn't need to store the number of + registers. + + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): Removed unnecessary clearing left over from when we + used this on objects that weren't brand new. These days, this function is really + just part of the constructor. + + * kjs/JSGlobalObject.h: Added registerArraySize to JSGlobalObjectData, since + JSVariableObjectData no longer needs it. Added a setRegisters override here + that handles storing the size. + + * kjs/JSStaticScopeObject.h: Removed code to set registerArraySize, since it + no longer exists. + + * kjs/JSVariableObject.cpp: Moved copyRegisterArray and setRegisters to the + header to make them inline. + * kjs/JSVariableObject.h: Removed registerArraySize from JSVariableObjectData, + since it was only used for the global object. + (JSC::JSVariableObject::copyRegisterArray): Moved here ot make it inline. + (JSC::JSVariableObject::setRegisters): Moved here to make it inline. Also + removed the code to set registerArraySize and changed an if statement into + an assert to save an unnnecessary branch. + +2008-09-24 Maciej Stachowiak + + Reviewed by Oliver Hunt. + + - inline PropertyMap::getOffset to speed up polymorphic lookups + + ~1.5% speedup on v8 benchmark + no effect on SunSpider + + * JavaScriptCore.exp: + * kjs/PropertyMap.cpp: + * kjs/PropertyMap.h: + (JSC::PropertyMap::getOffset): + +2008-09-24 Jan Michael Alonzo + + Reviewed by Alp Toker. + + https://bugs.webkit.org/show_bug.cgi?id=20992 + Build fails on GTK+ Mac OS + + * wtf/ThreadingGtk.cpp: Remove platform ifdef as suggested by + Richard Hult. + (WTF::initializeThreading): + +2008-09-23 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + Bug 19968: Slow Script at www.huffingtonpost.com + + + Finally found the cause of this accursed issue. It is triggered + by synchronous creation of a new global object from JS. The new + global object resets the timer state in this execution group's + Machine, taking timerCheckCount to 0. Then when JS returns the + timerCheckCount is decremented making it non-zero. The next time + we execute JS we will start the timeout counter, however the non-zero + timeoutCheckCount means we don't reset the timer information. This + means that the timeout check is now checking the cumulative time + since the creation of the global object rather than the time since + JS was last entered. At this point the slow script dialog is guaranteed + to eventually be displayed incorrectly unless a page is loaded + asynchronously (which will reset everything into a sane state). + + The fix for this is rather trivial -- the JSGlobalObject constructor + should not be resetting the machine timer state. + + * VM/Machine.cpp: + (JSC::Machine::Machine): + Now that we can't rely on the GlobalObject initialising the timeout + state, we do it in the Machine constructor. + + * VM/Machine.h: + (JSC::Machine::stopTimeoutCheck): + Add assertions to guard against this happening. + + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::init): + Don't reset the timeout state. + +2008-09-23 Geoffrey Garen + + Reviewed by Oliver Hunt. + + Fixed https://bugs.webkit.org/show_bug.cgi?id=21038 | + Uncaught exceptions in regex replace callbacks crash webkit + + This was a combination of two problems: + + (1) the replace function would continue execution after an exception + had been thrown. + + (2) In some cases, the Machine would return 0 in the case of an exception, + despite the fact that a few clients dereference the Machine's return + value without first checking for an exception. + + * VM/Machine.cpp: + (JSC::Machine::execute): + + ^ Return jsNull() instead of 0 in the case of an exception, since some + clients depend on using our return value. + + ^ ASSERT that execution does not continue after an exception has been + thrown, to help catch problems like this in the future. + + * kjs/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): + + ^ Stop execution if an exception has been thrown. + +2008-09-23 Geoffrey Garen + + Try to fix the windows build. + + * VM/CTI.cpp: + (JSC::CTI::compileOpCall): + (JSC::CTI::privateCompileMainPass): + +2008-09-23 Alp Toker + + Build fix. + + * VM/CTI.h: + +2008-09-23 Geoffrey Garen + + Reviewed by Darin Adler. + + * wtf/Platform.h: Removed duplicate #if. + +2008-09-23 Geoffrey Garen + + Reviewed by Darin Adler. + + Changed the layout of the call frame from + + { header, parameters, locals | constants, temporaries } + + to + + { parameters, header | locals, constants, temporaries } + + This simplifies function entry+exit, and enables a number of future + optimizations. + + 13.5% speedup on empty call benchmark for bytecode; 23.6% speedup on + empty call benchmark for CTI. + + SunSpider says no change. SunSpider --v8 says 1% faster. + + * VM/CTI.cpp: + + Added a bit of abstraction for calculating whether a register is a + constant, since this patch changes that calculation: + (JSC::CTI::isConstant): + (JSC::CTI::getConstant): + (JSC::CTI::emitGetArg): + (JSC::CTI::emitGetPutArg): + (JSC::CTI::getConstantImmediateNumericArg): + + Updated for changes to callframe header location: + (JSC::CTI::emitPutToCallFrameHeader): + (JSC::CTI::emitGetFromCallFrameHeader): + (JSC::CTI::printOpcodeOperandTypes): + + Renamed to spite Oliver: + (JSC::CTI::emitInitRegister): + + Added an abstraction for emitting a call through a register, so that + calls through registers generate exception info, too: + (JSC::CTI::emitCall): + + Updated to match the new callframe header layout, and to support calls + through registers, which have no destination address: + (JSC::CTI::compileOpCall): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + + * VM/CTI.h: + + More of the above: + (JSC::CallRecord::CallRecord): + + * VM/CodeBlock.cpp: + + Updated for new register layout: + (JSC::registerName): + (JSC::CodeBlock::dump): + + * VM/CodeBlock.h: + + Updated CodeBlock to track slightly different information about the + register frame, and tweaked the style of an ASSERT_NOT_REACHED. + (JSC::CodeBlock::CodeBlock): + (JSC::CodeBlock::getStubInfo): + + * VM/CodeGenerator.cpp: + + Added some abstraction around constant register allocation, since this + patch changes it, changed codegen to account for the new callframe + layout, and added abstraction around register fetching code + that used to assume that all local registers lived at negative indices, + since vars now live at positive indices: + (JSC::CodeGenerator::generate): + (JSC::CodeGenerator::addVar): + (JSC::CodeGenerator::addGlobalVar): + (JSC::CodeGenerator::allocateConstants): + (JSC::CodeGenerator::CodeGenerator): + (JSC::CodeGenerator::addParameter): + (JSC::CodeGenerator::registerFor): + (JSC::CodeGenerator::constRegisterFor): + (JSC::CodeGenerator::newRegister): + (JSC::CodeGenerator::newTemporary): + (JSC::CodeGenerator::highestUsedRegister): + (JSC::CodeGenerator::addConstant): + + ASSERT that our caller referenced the registers it passed to us. + Otherwise, we might overwrite them with parameters: + (JSC::CodeGenerator::emitCall): + (JSC::CodeGenerator::emitConstruct): + + * VM/CodeGenerator.h: + + Added some abstraction for getting a RegisterID for a given index, + since the rules are a little weird: + (JSC::CodeGenerator::registerFor): + + * VM/Machine.cpp: + + Utility function to transform a machine return PC to a virtual machine + return VPC, for the sake of stack unwinding, since both PCs are stored + in the same location now: + (JSC::vPCForPC): + + Tweaked to account for new call frame: + (JSC::Machine::initializeCallFrame): + + Tweaked to account for registerOffset supplied by caller: + (JSC::slideRegisterWindowForCall): + + Tweaked to account for new register layout: + (JSC::scopeChainForCall): + (JSC::Machine::callEval): + (JSC::Machine::dumpRegisters): + (JSC::Machine::unwindCallFrame): + (JSC::Machine::execute): + + Changed op_call and op_construct to implement the new calling convention: + (JSC::Machine::privateExecute): + + Tweaked to account for the new register layout: + (JSC::Machine::retrieveArguments): + (JSC::Machine::retrieveCaller): + (JSC::Machine::retrieveLastCaller): + (JSC::Machine::callFrame): + (JSC::Machine::getArgumentsData): + + Changed CTI call helpers to implement the new calling convention: + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_op_call_NotJSFunction): + (JSC::Machine::cti_op_ret_activation): + (JSC::Machine::cti_op_ret_profiler): + (JSC::Machine::cti_op_construct_JSConstruct): + (JSC::Machine::cti_op_construct_NotJSConstruct): + (JSC::Machine::cti_op_call_eval): + + * VM/Machine.h: + + * VM/Opcode.h: + + Renamed op_initialise_locals to op_init, because this opcode + doesn't initialize all locals, and it doesn't initialize only locals. + Also, to spite Oliver. + + * VM/RegisterFile.h: + + New call frame enumeration values: + (JSC::RegisterFile::): + + Simplified the calculation of whether a RegisterID is a temporary, + since we can no longer assume that all positive non-constant registers + are temporaries: + * VM/RegisterID.h: + (JSC::RegisterID::RegisterID): + (JSC::RegisterID::setTemporary): + (JSC::RegisterID::isTemporary): + + Renamed firstArgumentIndex to firstParameterIndex because the assumption + that this variable pertained to the actual arguments supplied by the + caller caused me to write some buggy code: + * kjs/Arguments.cpp: + (JSC::ArgumentsData::ArgumentsData): + (JSC::Arguments::Arguments): + (JSC::Arguments::fillArgList): + (JSC::Arguments::getOwnPropertySlot): + (JSC::Arguments::put): + + Updated for new call frame layout: + * kjs/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::functionName): + (JSC::DebuggerCallFrame::type): + * kjs/DebuggerCallFrame.h: + + Changed the activation object to account for the fact that a call frame + header now sits between parameters and local variables. This change + requires all variable objects to do their own marking, since they + now use their register storage differently: + * kjs/JSActivation.cpp: + (JSC::JSActivation::mark): + (JSC::JSActivation::copyRegisters): + (JSC::JSActivation::createArgumentsObject): + * kjs/JSActivation.h: + + Updated global object to use the new interfaces required by the change + to JSActivation above: + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + (JSC::JSGlobalObject::mark): + (JSC::JSGlobalObject::copyGlobalsFrom): + (JSC::JSGlobalObject::copyGlobalsTo): + * kjs/JSGlobalObject.h: + (JSC::JSGlobalObject::addStaticGlobals): + + Updated static scope object to use the new interfaces required by the + change to JSActivation above: + * kjs/JSStaticScopeObject.cpp: + (JSC::JSStaticScopeObject::mark): + (JSC::JSStaticScopeObject::~JSStaticScopeObject): + * kjs/JSStaticScopeObject.h: + (JSC::JSStaticScopeObject::JSStaticScopeObject): + (JSC::JSStaticScopeObject::d): + + Updated variable object to use the new interfaces required by the + change to JSActivation above: + * kjs/JSVariableObject.cpp: + (JSC::JSVariableObject::copyRegisterArray): + (JSC::JSVariableObject::setRegisters): + * kjs/JSVariableObject.h: + + Changed the bit twiddling in symbol table not to assume that all indices + are negative, since they can be positive now: + * kjs/SymbolTable.h: + (JSC::SymbolTableEntry::SymbolTableEntry): + (JSC::SymbolTableEntry::isNull): + (JSC::SymbolTableEntry::getIndex): + (JSC::SymbolTableEntry::getAttributes): + (JSC::SymbolTableEntry::setAttributes): + (JSC::SymbolTableEntry::isReadOnly): + (JSC::SymbolTableEntry::pack): + (JSC::SymbolTableEntry::isValidIndex): + + Changed call and construct nodes to ref their functions and/or bases, + so that emitCall/emitConstruct doesn't overwrite them with parameters. + Also, updated for rename to registerFor: + * kjs/nodes.cpp: + (JSC::ResolveNode::emitCode): + (JSC::NewExprNode::emitCode): + (JSC::EvalFunctionCallNode::emitCode): + (JSC::FunctionCallValueNode::emitCode): + (JSC::FunctionCallResolveNode::emitCode): + (JSC::FunctionCallBracketNode::emitCode): + (JSC::FunctionCallDotNode::emitCode): + (JSC::PostfixResolveNode::emitCode): + (JSC::DeleteResolveNode::emitCode): + (JSC::TypeOfResolveNode::emitCode): + (JSC::PrefixResolveNode::emitCode): + (JSC::ReadModifyResolveNode::emitCode): + (JSC::AssignResolveNode::emitCode): + (JSC::ConstDeclNode::emitCodeSingle): + (JSC::ForInNode::emitCode): + + Added abstraction for getting exception info out of a call through a + register: + * masm/X86Assembler.h: + (JSC::X86Assembler::emitCall): + + Removed duplicate #if: + * wtf/Platform.h: + +2008-09-23 Kevin McCullough + + Reviewed by Darin. + + Bug 21030: The JS debugger breaks on the do of a do-while not the while + (where the conditional statement is) + https://bugs.webkit.org/show_bug.cgi?id=21030 + Now the statementListEmitCode detects if a do-while node is being + emited and emits the debug hook on the last line instead of the first. + + This change had no effect on sunspider. + + * kjs/nodes.cpp: + (JSC::statementListEmitCode): + * kjs/nodes.h: + (JSC::StatementNode::isDoWhile): + (JSC::DoWhileNode::isDoWhile): + +2008-09-23 Maciej Stachowiak + + Reviewed by Cameron Zwarich. + + - inline the fast case of instanceof + https://bugs.webkit.org/show_bug.cgi?id=20818 + + ~2% speedup on EarleyBoyer test. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/Machine.cpp: + (JSC::Machine::cti_op_instanceof): + +2008-09-23 Maciej Stachowiak + + Reviewed by Cameron Zwarich. + + - add forgotten slow case logic for !== + + * VM/CTI.cpp: + (JSC::CTI::privateCompileSlowCases): + +2008-09-23 Maciej Stachowiak + + Reviewed by Cameron Zwarich. + + - inline the fast cases of !==, same as for === + + 2.9% speedup on EarleyBoyer benchmark + + * VM/CTI.cpp: + (JSC::CTI::compileOpStrictEq): Factored stricteq codegen into this function, + and parameterized so it can do the reverse version as well. + (JSC::CTI::privateCompileMainPass): Use the above for stricteq and nstricteq. + * VM/CTI.h: + (JSC::CTI::): Declare above stuff. + * VM/Machine.cpp: + (JSC::Machine::cti_op_nstricteq): Removed fast cases, now handled inline. + +2008-09-23 Cameron Zwarich + + Reviewed by Oliver Hunt. + + Bug 20989: Aguments constructor should put 'callee' and 'length' properties in a more efficient way + + + Make special cases for the 'callee' and 'length' properties in the + Arguments object. + + This is somewhere between a 7.8% speedup and a 10% speedup on the V8 + Raytrace benchmark, depending on whether it is run alone or with the + other V8 benchmarks. + + * kjs/Arguments.cpp: + (JSC::ArgumentsData::ArgumentsData): + (JSC::Arguments::Arguments): + (JSC::Arguments::mark): + (JSC::Arguments::getOwnPropertySlot): + (JSC::Arguments::put): + (JSC::Arguments::deleteProperty): + +2008-09-23 Maciej Stachowiak + + Reviewed by Darin. + + - speed up instanceof some more + https://bugs.webkit.org/show_bug.cgi?id=20818 + + ~2% speedup on EarleyBoyer + + The idea here is to record in the StructureID whether the class + needs a special hasInstance or if it can use the normal logic from + JSObject. + + Based on this I inlined the real work directly into + cti_op_instanceof and put the fastest checks up front and the + error handling at the end (so it should be fairly straightforward + to split off the beginning to be inlined if desired). + + I only did this for CTI, not the bytecode interpreter. + + * API/JSCallbackObject.h: + (JSC::JSCallbackObject::createStructureID): + * ChangeLog: + * VM/Machine.cpp: + (JSC::Machine::cti_op_instanceof): + * kjs/JSImmediate.h: + (JSC::JSImmediate::isAnyImmediate): + * kjs/TypeInfo.h: + (JSC::TypeInfo::overridesHasInstance): + (JSC::TypeInfo::flags): + +2008-09-22 Darin Adler + + Reviewed by Sam Weinig. + + - https://bugs.webkit.org/show_bug.cgi?id=21019 + make FunctionBodyNode::ref/deref fast + + Speeds up v8-raytrace by 7.2%. + + * kjs/nodes.cpp: + (JSC::FunctionBodyNode::FunctionBodyNode): Initialize m_refCount to 0. + * kjs/nodes.h: + (JSC::FunctionBodyNode::ref): Call base class ref once, and thereafter use + m_refCount. + (JSC::FunctionBodyNode::deref): Ditto, but the deref side. + +2008-09-22 Darin Adler + + Pointed out by Sam Weinig. + + * kjs/Arguments.cpp: + (JSC::Arguments::fillArgList): Fix bad copy and paste. Oops! + +2008-09-22 Darin Adler + + Reviewed by Cameron Zwarich. + + - https://bugs.webkit.org/show_bug.cgi?id=20983 + ArgumentsData should have some room to allocate some extra arguments inline + + Speeds up v8-raytrace by 5%. + + * kjs/Arguments.cpp: + (JSC::ArgumentsData::ArgumentsData): Use a fixed buffer if there are 4 or fewer + extra arguments. + (JSC::Arguments::Arguments): Use a fixed buffer if there are 4 or fewer + extra arguments. + (JSC::Arguments::~Arguments): Delete the buffer if necessary. + (JSC::Arguments::mark): Update since extraArguments are now Register. + (JSC::Arguments::fillArgList): Added special case for the only case that's + actually used in the practice, when there are no parameters. There are some + other special cases in there too, but that's the only one that matters. + (JSC::Arguments::getOwnPropertySlot): Updated to use setValueSlot since there's + no operation to get you at the JSValue* inside a Register as a "slot". + +2008-09-22 Sam Weinig + + Reviewed by Maciej Stachowiak. + + Patch for https://bugs.webkit.org/show_bug.cgi?id=21014 + Speed up for..in by using StructureID to avoid calls to hasProperty + + Speeds up fasta by 8%. + + * VM/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::invalidate): + * VM/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::next): + * kjs/PropertyNameArray.h: + (JSC::PropertyNameArrayData::begin): + (JSC::PropertyNameArrayData::end): + (JSC::PropertyNameArrayData::setCachedStructureID): + (JSC::PropertyNameArrayData::cachedStructureID): + * kjs/StructureID.cpp: + (JSC::StructureID::getEnumerablePropertyNames): + (JSC::structureIDChainsAreEqual): + * kjs/StructureID.h: + +2008-09-22 Kelvin Sherlock + + Updated and tweaked by Sam Weinig. + + Reviewed by Geoffrey Garen. + + Bug 20020: Proposed enhancement to JavaScriptCore API + + + Add JSObjectMakeArray, JSObjectMakeDate, JSObjectMakeError, and JSObjectMakeRegExp + functions to create JavaScript Array, Date, Error, and RegExp objects, respectively. + + * API/JSObjectRef.cpp: The functions + * API/JSObjectRef.h: Function prototype and documentation + * JavaScriptCore.exp: Added functions to exported function list + * API/tests/testapi.c: Added basic functionality tests. + + * kjs/DateConstructor.cpp: + Replaced static JSObject* constructDate(ExecState* exec, JSObject*, const ArgList& args) + with JSObject* constructDate(ExecState* exec, const ArgList& args). + Added static JSObject* constructWithDateConstructor(ExecState* exec, JSObject*, const ArgList& args) function + + * kjs/DateConstructor.h: + added prototype for JSObject* constructDate(ExecState* exec, const ArgList& args) + + * kjs/ErrorConstructor.cpp: + removed static qualifier from ErrorInstance* constructError(ExecState* exec, const ArgList& args) + + * kjs/ErrorConstructor.h: + added prototype for ErrorInstance* constructError(ExecState* exec, const ArgList& args) + + * kjs/RegExpConstructor.cpp: + removed static qualifier from JSObject* constructRegExp(ExecState* exec, const ArgList& args) + + * kjs/RegExpConstructor.h: + added prototype for JSObject* constructRegExp(ExecState* exec, const ArgList& args) + +2008-09-22 Matt Lilek + + Not reviewed, Windows build fix. + + * kjs/Arguments.cpp: + * kjs/FunctionPrototype.cpp: + +2008-09-22 Sam Weinig + + Reviewed by Darin Adler. + + Patch for https://bugs.webkit.org/show_bug.cgi?id=20982 + Speed up the apply method of functions by special-casing array and 'arguments' objects + + 1% speedup on v8-raytrace. + + Test: fast/js/function-apply.html + + * kjs/Arguments.cpp: + (JSC::Arguments::fillArgList): + * kjs/Arguments.h: + * kjs/FunctionPrototype.cpp: + (JSC::functionProtoFuncApply): + * kjs/JSArray.cpp: + (JSC::JSArray::fillArgList): + * kjs/JSArray.h: + +2008-09-22 Darin Adler + + Reviewed by Sam Weinig. + + - https://bugs.webkit.org/show_bug.cgi?id=20993 + Array.push/pop need optimized cases for JSArray + + 3% or so speedup on DeltaBlue benchmark. + + * kjs/ArrayPrototype.cpp: + (JSC::arrayProtoFuncPop): Call JSArray::pop when appropriate. + (JSC::arrayProtoFuncPush): Call JSArray::push when appropriate. + + * kjs/JSArray.cpp: + (JSC::JSArray::putSlowCase): Set m_fastAccessCutoff when appropriate, getting + us into the fast code path. + (JSC::JSArray::pop): Added. + (JSC::JSArray::push): Added. + * kjs/JSArray.h: Added push and pop. + + * kjs/operations.cpp: + (JSC::throwOutOfMemoryError): Don't inline this. Helps us avoid PIC branches. + +2008-09-22 Maciej Stachowiak + + Reviewed by Cameron Zwarich. + + - speed up instanceof operator by replacing implementsHasInstance method with a TypeInfo flag + + Partial work towards + + 2.2% speedup on EarleyBoyer benchmark. + + * API/JSCallbackConstructor.cpp: + * API/JSCallbackConstructor.h: + (JSC::JSCallbackConstructor::createStructureID): + * API/JSCallbackFunction.cpp: + * API/JSCallbackFunction.h: + (JSC::JSCallbackFunction::createStructureID): + * API/JSCallbackObject.h: + (JSC::JSCallbackObject::createStructureID): + * API/JSCallbackObjectFunctions.h: + (JSC::::hasInstance): + * API/JSValueRef.cpp: + (JSValueIsInstanceOfConstructor): + * JavaScriptCore.exp: + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_instanceof): + * kjs/InternalFunction.cpp: + * kjs/InternalFunction.h: + (JSC::InternalFunction::createStructureID): + * kjs/JSObject.cpp: + * kjs/JSObject.h: + * kjs/TypeInfo.h: + (JSC::TypeInfo::implementsHasInstance): + +2008-09-22 Maciej Stachowiak + + Reviewed by Dave Hyatt. + + Based on initial work by Darin Adler. + + - replace masqueradesAsUndefined virtual method with a flag in TypeInfo + - use this to JIT inline code for eq_null and neq_null + https://bugs.webkit.org/show_bug.cgi?id=20823 + + 0.5% speedup on SunSpider + ~4% speedup on Richards benchmark + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + * VM/Machine.cpp: + (JSC::jsTypeStringForValue): + (JSC::jsIsObjectType): + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_is_undefined): + * VM/Machine.h: + * kjs/JSCell.h: + * kjs/JSValue.h: + * kjs/StringObjectThatMasqueradesAsUndefined.h: + (JSC::StringObjectThatMasqueradesAsUndefined::create): + (JSC::StringObjectThatMasqueradesAsUndefined::createStructureID): + * kjs/StructureID.h: + (JSC::StructureID::mutableTypeInfo): + * kjs/TypeInfo.h: + (JSC::TypeInfo::TypeInfo): + (JSC::TypeInfo::masqueradesAsUndefined): + * kjs/operations.cpp: + (JSC::equal): + * masm/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::setne_r): + (JSC::X86Assembler::setnz_r): + (JSC::X86Assembler::testl_i32m): + +2008-09-22 Tor Arne Vestbø + + Reviewed by Simon. + + Initialize QCoreApplication in kjs binary/Shell.cpp + + This allows us to use QCoreApplication::instance() to + get the main thread in ThreadingQt.cpp + + * kjs/Shell.cpp: + (main): + * wtf/ThreadingQt.cpp: + (WTF::initializeThreading): + +2008-09-21 Darin Adler + + - blind attempt to fix non-all-in-one builds + + * kjs/JSGlobalObject.cpp: Added includes of Arguments.h and RegExpObject.h. + +2008-09-21 Darin Adler + + - fix debug build + + * kjs/StructureID.cpp: + (JSC::StructureID::addPropertyTransition): Use typeInfo().type() instead of m_type. + (JSC::StructureID::createCachedPrototypeChain): Ditto. + +2008-09-21 Maciej Stachowiak + + Reviewed by Darin Adler. + + - introduce a TypeInfo class, for holding per-type (in the C++ class sense) date in StructureID + https://bugs.webkit.org/show_bug.cgi?id=20981 + + * JavaScriptCore.exp: + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompilePutByIdTransition): + * VM/Machine.cpp: + (JSC::jsIsObjectType): + (JSC::Machine::Machine): + * kjs/AllInOneFile.cpp: + * kjs/JSCell.h: + (JSC::JSCell::isObject): + (JSC::JSCell::isString): + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + * kjs/JSGlobalObject.h: + (JSC::StructureID::prototypeForLookup): + * kjs/JSNumberCell.h: + (JSC::JSNumberCell::createStructureID): + * kjs/JSObject.cpp: + (JSC::JSObject::createInheritorID): + * kjs/JSObject.h: + (JSC::JSObject::createStructureID): + * kjs/JSString.h: + (JSC::JSString::createStructureID): + * kjs/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::NativeErrorConstructor): + * kjs/RegExpConstructor.cpp: + * kjs/RegExpMatchesArray.h: Added. + (JSC::RegExpMatchesArray::getOwnPropertySlot): + (JSC::RegExpMatchesArray::put): + (JSC::RegExpMatchesArray::deleteProperty): + (JSC::RegExpMatchesArray::getPropertyNames): + * kjs/StructureID.cpp: + (JSC::StructureID::StructureID): + (JSC::StructureID::addPropertyTransition): + (JSC::StructureID::toDictionaryTransition): + (JSC::StructureID::changePrototypeTransition): + (JSC::StructureID::getterSetterTransition): + * kjs/StructureID.h: + (JSC::StructureID::create): + (JSC::StructureID::typeInfo): + * kjs/TypeInfo.h: Added. + (JSC::TypeInfo::TypeInfo): + (JSC::TypeInfo::type): + +2008-09-21 Darin Adler + + Reviewed by Cameron Zwarich. + + - fix crash logging into Gmail due to recent Arguments change + + * kjs/Arguments.cpp: + (JSC::Arguments::Arguments): Fix window where mark() function could + see d->extraArguments with uninitialized contents. + (JSC::Arguments::mark): Check d->extraArguments for 0 to handle two + cases: 1) Inside the constructor before it's initialized. + 2) numArguments <= numParameters. + +2008-09-21 Darin Adler + + - fix loose end from the "duplicate constant values" patch + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitLoad): Add a special case for values the + hash table can't handle. + +2008-09-21 Mark Rowe + + Fix the non-AllInOneFile build. + + * kjs/Arguments.cpp: Add missing #include. + +2008-09-21 Darin Adler + + Reviewed by Cameron Zwarich and Mark Rowe. + + - fix test failure caused by my recent IndexToNameMap patch + + * kjs/Arguments.cpp: + (JSC::Arguments::deleteProperty): Added the accidentally-omitted + check of the boolean result from toArrayIndex. + +2008-09-21 Darin Adler + + Reviewed by Maciej Stachowiak. + + - https://bugs.webkit.org/show_bug.cgi?id=20975 + inline immediate-number case of == + + * VM/CTI.h: Renamed emitJumpSlowCaseIfNotImm to + emitJumpSlowCaseIfNotImmNum, since the old name was incorrect. + + * VM/CTI.cpp: Updated for new name. + (JSC::CTI::privateCompileMainPass): Added op_eq. + (JSC::CTI::privateCompileSlowCases): Added op_eq. + + * VM/Machine.cpp: + (JSC::Machine::cti_op_eq): Removed fast case, since it's now + compiled. + +2008-09-21 Peter Gal + + Reviewed by Tim Hatcher and Eric Seidel. + + Fix the QT/Linux JavaScriptCore segmentation fault. + https://bugs.webkit.org/show_bug.cgi?id=20914 + + * wtf/ThreadingQt.cpp: + (WTF::initializeThreading): Use currentThread() if + platform is not a MAC (like in pre 36541 revisions) + +2008-09-21 Darin Adler + + Reviewed by Sam Weinig. + + * kjs/debugger.h: Removed some unneeded includes and declarations. + +2008-09-21 Darin Adler + + Reviewed by Sam Weinig. + + - https://bugs.webkit.org/show_bug.cgi?id=20972 + speed up Arguments further by eliminating the IndexToNameMap + + No change on SunSpider. 1.29x as fast on V8 Raytrace. + + * kjs/Arguments.cpp: Moved ArgumentsData in here. Eliminated the + indexToNameMap and hadDeletes data members. Changed extraArguments into + an OwnArrayPtr and added deletedArguments, another OwnArrayPtr. + Replaced numExtraArguments with numParameters, since that's what's + used more directly in hot code paths. + (JSC::Arguments::Arguments): Pass in argument count instead of ArgList. + Initialize ArgumentsData the new way. + (JSC::Arguments::mark): Updated. + (JSC::Arguments::getOwnPropertySlot): Overload for the integer form so + we don't have to convert integers to identifiers just to get an argument. + Integrated the deleted case with the fast case. + (JSC::Arguments::put): Ditto. + (JSC::Arguments::deleteProperty): Ditto. + + * kjs/Arguments.h: Minimized includes. Made everything private. Added + overloads for the integral property name case. Eliminated mappedIndexSetter. + Moved ArgumentsData into the .cpp file. + + * kjs/IndexToNameMap.cpp: Emptied out and prepared for deletion. + * kjs/IndexToNameMap.h: Ditto. + + * kjs/JSActivation.cpp: + (JSC::JSActivation::createArgumentsObject): Elminated ArgList. + + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * kjs/AllInOneFile.cpp: + Removed IndexToNameMap. + +2008-09-21 Darin Adler + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitLoad): One more tweak: Wrote this in a slightly + clearer style. + +2008-09-21 Judit Jasz + + Reviewed and tweaked by Darin Adler. + + - https://bugs.webkit.org/show_bug.cgi?id=20645 + Elminate duplicate constant values in CodeBlocks. + + Seems to be a wash on SunSpider. + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitLoad): Use m_numberMap and m_stringMap to guarantee + we emit the same JSValue* for identical numbers and strings. + * VM/CodeGenerator.h: Added overload of emitLoad for const Identifier&. + Add NumberMap and IdentifierStringMap types and m_numberMap and m_stringMap. + * kjs/nodes.cpp: + (JSC::StringNode::emitCode): Call the new emitLoad and let it do the + JSString creation. + +2008-09-21 Paul Pedriana + + Reviewed and tweaked by Darin Adler. + + - https://bugs.webkit.org/show_bug.cgi?id=16925 + Fixed lack of Vector buffer alignment for both GCC and MSVC. + Since there's no portable way to do this, for now we don't support + other compilers. + + * wtf/Vector.h: Added WTF_ALIGH_ON, WTF_ALIGNED, AlignedBufferChar, and AlignedBuffer. + Use AlignedBuffer insteadof an array of char in VectorBuffer. + +2008-09-21 Gabor Loki + + Reviewed by Darin Adler. + + - https://bugs.webkit.org/show_bug.cgi?id=19408 + Add lightweight constant folding to the parser for *, /, + (only for numbers), <<, >>, ~ operators. + + 1.008x as fast on SunSpider. + + * kjs/grammar.y: + (makeNegateNode): Fold if expression is a number > 0. + (makeBitwiseNotNode): Fold if expression is a number. + (makeMultNode): Fold if expressions are both numbers. + (makeDivNode): Fold if expressions are both numbers. + (makeAddNode): Fold if expressions are both numbers. + (makeLeftShiftNode): Fold if expressions are both numbers. + (makeRightShiftNode): Fold if expressions are both numbers. + +2008-09-21 Maciej Stachowiak + + Reviewed by Oliver. + + - speed up === operator by generating inline machine code for the fast paths + https://bugs.webkit.org/show_bug.cgi?id=20820 + + * VM/CTI.cpp: + (JSC::CTI::emitJumpSlowCaseIfNotImmediateNumber): + (JSC::CTI::emitJumpSlowCaseIfNotImmediateNumbers): + (JSC::CTI::emitJumpSlowCaseIfNotImmediates): + (JSC::CTI::emitTagAsBoolImmediate): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/CTI.h: + * VM/Machine.cpp: + (JSC::Machine::cti_op_stricteq): + * masm/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::sete_r): + (JSC::X86Assembler::setz_r): + (JSC::X86Assembler::movzbl_rr): + (JSC::X86Assembler::emitUnlinkedJnz): + +2008-09-21 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Free memory allocated for extra arguments in the destructor of the + Arguments object. + + * kjs/Arguments.cpp: + (JSC::Arguments::~Arguments): + * kjs/Arguments.h: + +2008-09-21 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Bug 20815: 'arguments' object creation is non-optimal + + + Fix our inefficient way of creating the arguments object by only + creating named properties for each of the arguments after a use of the + 'delete' statement. This patch also speeds up access to the 'arguments' + object slightly, but it still does not use the array fast path for + indexed access that exists for many opcodes. + + This is about a 20% improvement on the V8 Raytrace benchmark, and a 1.5% + improvement on the Earley-Boyer benchmark, which gives a 4% improvement + overall. + + * kjs/Arguments.cpp: + (JSC::Arguments::Arguments): + (JSC::Arguments::mark): + (JSC::Arguments::getOwnPropertySlot): + (JSC::Arguments::put): + (JSC::Arguments::deleteProperty): + * kjs/Arguments.h: + (JSC::Arguments::ArgumentsData::ArgumentsData): + * kjs/IndexToNameMap.h: + (JSC::IndexToNameMap::size): + * kjs/JSActivation.cpp: + (JSC::JSActivation::createArgumentsObject): + * kjs/JSActivation.h: + (JSC::JSActivation::uncheckedSymbolTableGet): + (JSC::JSActivation::uncheckedSymbolTableGetValue): + (JSC::JSActivation::uncheckedSymbolTablePut): + * kjs/JSFunction.h: + (JSC::JSFunction::numParameters): + +2008-09-20 Darin Adler + + Reviewed by Mark Rowe. + + - fix crash seen on buildbot + + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::mark): Add back mark of arrayPrototype, + deleted by accident in my recent check-in. + +2008-09-20 Maciej Stachowiak + + Not reviewed, build fix. + + - speculative fix for non-AllInOne builds + + * kjs/operations.h: + +2008-09-20 Maciej Stachowiak + + Reviewed by Darin Adler. + + - assorted optimizations to === and !== operators + (work towards ) + + 2.5% speedup on earley-boyer test + + * VM/Machine.cpp: + (JSC::Machine::cti_op_stricteq): Use inline version of + strictEqualSlowCase; remove unneeded exception check. + (JSC::Machine::cti_op_nstricteq): ditto + * kjs/operations.cpp: + (JSC::strictEqual): Use strictEqualSlowCaseInline + (JSC::strictEqualSlowCase): ditto + * kjs/operations.h: + (JSC::strictEqualSlowCaseInline): Version of strictEqualSlowCase that can be inlined, + since the extra function call indirection is a lose for CTI. + +2008-09-20 Darin Adler + + Reviewed by Maciej Stachowiak. + + - finish https://bugs.webkit.org/show_bug.cgi?id=20858 + make each distinct C++ class get a distinct JSC::Structure + + This also includes some optimizations that make the change an overall + small speedup. Without those it was a bit of a slowdown. + + * API/JSCallbackConstructor.cpp: + (JSC::JSCallbackConstructor::JSCallbackConstructor): Take a structure. + * API/JSCallbackConstructor.h: Ditto. + * API/JSCallbackFunction.cpp: + (JSC::JSCallbackFunction::JSCallbackFunction): Pass a structure. + * API/JSCallbackObject.h: Take a structure. + * API/JSCallbackObjectFunctions.h: + (JSC::JSCallbackObject::JSCallbackObject): Ditto. + + * API/JSClassRef.cpp: + (OpaqueJSClass::prototype): Pass in a structure. Call setPrototype + if there's a custom prototype involved. + * API/JSObjectRef.cpp: + (JSObjectMake): Ditto. + (JSObjectMakeConstructor): Pass in a structure. + + * JavaScriptCore.exp: Updated. + + * VM/Machine.cpp: + (JSC::jsLess): Added a special case for when both arguments are strings. + This avoids converting both strings to with UString::toDouble. + (JSC::jsLessEq): Ditto. + (JSC::Machine::privateExecute): Pass in a structure. + (JSC::Machine::cti_op_construct_JSConstruct): Ditto. + (JSC::Machine::cti_op_new_regexp): Ditto. + (JSC::Machine::cti_op_is_string): Ditto. + * VM/Machine.h: Made isJSString public so it can be used in the CTI. + + * kjs/Arguments.cpp: + (JSC::Arguments::Arguments): Pass in a structure. + + * kjs/JSCell.h: Mark constructor explicit. + + * kjs/JSGlobalObject.cpp: + (JSC::markIfNeeded): Added an overload for marking structures. + (JSC::JSGlobalObject::reset): Eliminate code to set data members to + zero. We now do that in the constructor, and we no longer use this + anywhere except in the constructor. Added code to create structures. + Pass structures rather than prototypes when creating objects. + (JSC::JSGlobalObject::mark): Mark the structures. + + * kjs/JSGlobalObject.h: Removed unneeded class declarations. + Added initializers for raw pointers in JSGlobalObjectData so + everything starts with a 0. Added structure data and accessor + functions. + + * kjs/JSImmediate.cpp: + (JSC::JSImmediate::nonInlineNaN): Added. + * kjs/JSImmediate.h: + (JSC::JSImmediate::toDouble): Rewrote to avoid PIC branches. + + * kjs/JSNumberCell.cpp: + (JSC::jsNumberCell): Made non-inline to avoid PIC branches + in functions that call this one. + (JSC::jsNaN): Ditto. + * kjs/JSNumberCell.h: Ditto. + + * kjs/JSObject.h: Removed constructor that takes a prototype. + All callers now pass structures. + + * kjs/ArrayConstructor.cpp: + (JSC::ArrayConstructor::ArrayConstructor): + (JSC::constructArrayWithSizeQuirk): + * kjs/ArrayConstructor.h: + * kjs/ArrayPrototype.cpp: + (JSC::ArrayPrototype::ArrayPrototype): + * kjs/ArrayPrototype.h: + * kjs/BooleanConstructor.cpp: + (JSC::BooleanConstructor::BooleanConstructor): + (JSC::constructBoolean): + (JSC::constructBooleanFromImmediateBoolean): + * kjs/BooleanConstructor.h: + * kjs/BooleanObject.cpp: + (JSC::BooleanObject::BooleanObject): + * kjs/BooleanObject.h: + * kjs/BooleanPrototype.cpp: + (JSC::BooleanPrototype::BooleanPrototype): + * kjs/BooleanPrototype.h: + * kjs/DateConstructor.cpp: + (JSC::DateConstructor::DateConstructor): + (JSC::constructDate): + * kjs/DateConstructor.h: + * kjs/DateInstance.cpp: + (JSC::DateInstance::DateInstance): + * kjs/DateInstance.h: + * kjs/DatePrototype.cpp: + (JSC::DatePrototype::DatePrototype): + * kjs/DatePrototype.h: + * kjs/ErrorConstructor.cpp: + (JSC::ErrorConstructor::ErrorConstructor): + (JSC::constructError): + * kjs/ErrorConstructor.h: + * kjs/ErrorInstance.cpp: + (JSC::ErrorInstance::ErrorInstance): + * kjs/ErrorInstance.h: + * kjs/ErrorPrototype.cpp: + (JSC::ErrorPrototype::ErrorPrototype): + * kjs/ErrorPrototype.h: + * kjs/FunctionConstructor.cpp: + (JSC::FunctionConstructor::FunctionConstructor): + * kjs/FunctionConstructor.h: + * kjs/FunctionPrototype.cpp: + (JSC::FunctionPrototype::FunctionPrototype): + (JSC::FunctionPrototype::addFunctionProperties): + * kjs/FunctionPrototype.h: + * kjs/GlobalEvalFunction.cpp: + (JSC::GlobalEvalFunction::GlobalEvalFunction): + * kjs/GlobalEvalFunction.h: + * kjs/InternalFunction.cpp: + (JSC::InternalFunction::InternalFunction): + * kjs/InternalFunction.h: + (JSC::InternalFunction::InternalFunction): + * kjs/JSArray.cpp: + (JSC::JSArray::JSArray): + (JSC::constructEmptyArray): + (JSC::constructArray): + * kjs/JSArray.h: + * kjs/JSFunction.cpp: + (JSC::JSFunction::JSFunction): + (JSC::JSFunction::construct): + * kjs/JSObject.cpp: + (JSC::constructEmptyObject): + * kjs/JSString.cpp: + (JSC::StringObject::create): + * kjs/JSWrapperObject.h: + * kjs/MathObject.cpp: + (JSC::MathObject::MathObject): + * kjs/MathObject.h: + * kjs/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::NativeErrorConstructor): + (JSC::NativeErrorConstructor::construct): + * kjs/NativeErrorConstructor.h: + * kjs/NativeErrorPrototype.cpp: + (JSC::NativeErrorPrototype::NativeErrorPrototype): + * kjs/NativeErrorPrototype.h: + * kjs/NumberConstructor.cpp: + (JSC::NumberConstructor::NumberConstructor): + (JSC::constructWithNumberConstructor): + * kjs/NumberConstructor.h: + * kjs/NumberObject.cpp: + (JSC::NumberObject::NumberObject): + (JSC::constructNumber): + (JSC::constructNumberFromImmediateNumber): + * kjs/NumberObject.h: + * kjs/NumberPrototype.cpp: + (JSC::NumberPrototype::NumberPrototype): + * kjs/NumberPrototype.h: + * kjs/ObjectConstructor.cpp: + (JSC::ObjectConstructor::ObjectConstructor): + (JSC::constructObject): + * kjs/ObjectConstructor.h: + * kjs/ObjectPrototype.cpp: + (JSC::ObjectPrototype::ObjectPrototype): + * kjs/ObjectPrototype.h: + * kjs/PrototypeFunction.cpp: + (JSC::PrototypeFunction::PrototypeFunction): + * kjs/PrototypeFunction.h: + * kjs/RegExpConstructor.cpp: + (JSC::RegExpConstructor::RegExpConstructor): + (JSC::RegExpMatchesArray::RegExpMatchesArray): + (JSC::constructRegExp): + * kjs/RegExpConstructor.h: + * kjs/RegExpObject.cpp: + (JSC::RegExpObject::RegExpObject): + * kjs/RegExpObject.h: + * kjs/RegExpPrototype.cpp: + (JSC::RegExpPrototype::RegExpPrototype): + * kjs/RegExpPrototype.h: + * kjs/Shell.cpp: + (GlobalObject::GlobalObject): + * kjs/StringConstructor.cpp: + (JSC::StringConstructor::StringConstructor): + (JSC::constructWithStringConstructor): + * kjs/StringConstructor.h: + * kjs/StringObject.cpp: + (JSC::StringObject::StringObject): + * kjs/StringObject.h: + * kjs/StringObjectThatMasqueradesAsUndefined.h: + (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined): + * kjs/StringPrototype.cpp: + (JSC::StringPrototype::StringPrototype): + * kjs/StringPrototype.h: + Take and pass structures. + +2008-09-19 Alp Toker + + Build fix for the 'gold' linker and recent binutils. New behaviour + requires that we link to used libraries explicitly. + + * GNUmakefile.am: + +2008-09-19 Sam Weinig + + Roll r36694 back in. It did not cause the crash. + + * JavaScriptCore.exp: + * VM/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::~JSPropertyNameIterator): + (JSC::JSPropertyNameIterator::invalidate): + * VM/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::JSPropertyNameIterator): + (JSC::JSPropertyNameIterator::create): + * kjs/JSObject.cpp: + (JSC::JSObject::getPropertyNames): + * kjs/PropertyMap.cpp: + (JSC::PropertyMap::getEnumerablePropertyNames): + * kjs/PropertyMap.h: + * kjs/PropertyNameArray.cpp: + (JSC::PropertyNameArray::add): + * kjs/PropertyNameArray.h: + (JSC::PropertyNameArrayData::create): + (JSC::PropertyNameArrayData::propertyNameVector): + (JSC::PropertyNameArrayData::setCachedPrototypeChain): + (JSC::PropertyNameArrayData::cachedPrototypeChain): + (JSC::PropertyNameArrayData::begin): + (JSC::PropertyNameArrayData::end): + (JSC::PropertyNameArrayData::PropertyNameArrayData): + (JSC::PropertyNameArray::PropertyNameArray): + (JSC::PropertyNameArray::addKnownUnique): + (JSC::PropertyNameArray::size): + (JSC::PropertyNameArray::operator[]): + (JSC::PropertyNameArray::begin): + (JSC::PropertyNameArray::end): + (JSC::PropertyNameArray::setData): + (JSC::PropertyNameArray::data): + (JSC::PropertyNameArray::releaseData): + * kjs/StructureID.cpp: + (JSC::structureIDChainsAreEqual): + (JSC::StructureID::getEnumerablePropertyNames): + (JSC::StructureID::clearEnumerationCache): + (JSC::StructureID::createCachedPrototypeChain): + * kjs/StructureID.h: + +2008-09-19 Sam Weinig + + Roll out r36694. + + * JavaScriptCore.exp: + * VM/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::~JSPropertyNameIterator): + (JSC::JSPropertyNameIterator::invalidate): + * VM/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::JSPropertyNameIterator): + (JSC::JSPropertyNameIterator::create): + * kjs/JSObject.cpp: + (JSC::JSObject::getPropertyNames): + * kjs/PropertyMap.cpp: + (JSC::PropertyMap::getEnumerablePropertyNames): + * kjs/PropertyMap.h: + * kjs/PropertyNameArray.cpp: + (JSC::PropertyNameArray::add): + * kjs/PropertyNameArray.h: + (JSC::PropertyNameArray::PropertyNameArray): + (JSC::PropertyNameArray::addKnownUnique): + (JSC::PropertyNameArray::begin): + (JSC::PropertyNameArray::end): + (JSC::PropertyNameArray::size): + (JSC::PropertyNameArray::operator[]): + (JSC::PropertyNameArray::releaseIdentifiers): + * kjs/StructureID.cpp: + (JSC::StructureID::getEnumerablePropertyNames): + * kjs/StructureID.h: + (JSC::StructureID::clearEnumerationCache): + +2008-09-19 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + Improve peformance of local variable initialisation. + + Pull local and constant initialisation out of slideRegisterWindowForCall + and into its own opcode. This allows the JIT to generate the initialisation + code for a function directly into the instruction stream and so avoids a few + branches on function entry. + + Results a 1% progression in SunSpider, particularly in a number of the bitop + tests where the called functions are very fast. + + * VM/CTI.cpp: + (JSC::CTI::emitInitialiseRegister): + (JSC::CTI::privateCompileMainPass): + * VM/CTI.h: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::CodeGenerator): + * VM/Machine.cpp: + (JSC::slideRegisterWindowForCall): + (JSC::Machine::privateExecute): + * VM/Opcode.h: + +2008-09-19 Sam Weinig + + Reviewed by Darin Adler. + + Patch for https://bugs.webkit.org/show_bug.cgi?id=20928 + Speed up JS property enumeration by caching entire PropertyNameArray + + 1.3% speedup on Sunspider, 30% on string-fasta. + + * JavaScriptCore.exp: + * VM/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::~JSPropertyNameIterator): + (JSC::JSPropertyNameIterator::invalidate): + * VM/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::JSPropertyNameIterator): + (JSC::JSPropertyNameIterator::create): + * kjs/JSObject.cpp: + (JSC::JSObject::getPropertyNames): + * kjs/PropertyMap.cpp: + (JSC::PropertyMap::getEnumerablePropertyNames): + * kjs/PropertyMap.h: + * kjs/PropertyNameArray.cpp: + (JSC::PropertyNameArray::add): + * kjs/PropertyNameArray.h: + (JSC::PropertyNameArrayData::create): + (JSC::PropertyNameArrayData::propertyNameVector): + (JSC::PropertyNameArrayData::setCachedPrototypeChain): + (JSC::PropertyNameArrayData::cachedPrototypeChain): + (JSC::PropertyNameArrayData::begin): + (JSC::PropertyNameArrayData::end): + (JSC::PropertyNameArrayData::PropertyNameArrayData): + (JSC::PropertyNameArray::PropertyNameArray): + (JSC::PropertyNameArray::addKnownUnique): + (JSC::PropertyNameArray::size): + (JSC::PropertyNameArray::operator[]): + (JSC::PropertyNameArray::begin): + (JSC::PropertyNameArray::end): + (JSC::PropertyNameArray::setData): + (JSC::PropertyNameArray::data): + (JSC::PropertyNameArray::releaseData): + * kjs/ScopeChain.cpp: + (JSC::ScopeChainNode::print): + * kjs/StructureID.cpp: + (JSC::structureIDChainsAreEqual): + (JSC::StructureID::getEnumerablePropertyNames): + (JSC::StructureID::clearEnumerationCache): + (JSC::StructureID::createCachedPrototypeChain): + * kjs/StructureID.h: + +2008-09-19 Holger Hans Peter Freyther + + Reviewed by Maciej Stachowiak. + + Fix a mismatched new[]/delete in JSObject::allocatePropertyStorage + + * kjs/JSObject.cpp: + (JSC::JSObject::allocatePropertyStorage): Spotted by valgrind. + +2008-09-19 Darin Adler + + Reviewed by Sam Weinig. + + - part 2 of https://bugs.webkit.org/show_bug.cgi?id=20858 + make each distinct C++ class get a distinct JSC::Structure + + * JavaScriptCore.exp: Exported constructEmptyObject for use in WebCore. + + * kjs/JSGlobalObject.h: Changed the protected constructor to take a + structure instead of a prototype. + + * kjs/JSVariableObject.h: Removed constructor that takes a prototype. + +2008-09-19 Julien Chaffraix + + Reviewed by Alexey Proskuryakov. + + Use the template hoisting technique on the RefCounted class. This reduces the code bloat due to + non-template methods' code been copied for each instance of the template. + The patch splits RefCounted between a base class that holds non-template methods and attributes + and the template RefCounted class that keeps the same functionnality. + + On my Linux with gcc 4.3 for the Gtk port, this is: + - a ~600KB save on libwebkit.so in release. + - a ~1.6MB save on libwebkit.so in debug. + + It is a wash on Sunspider and a small win on Dromaeo (not sure it is relevant). + On the whole, it should be a small win as we reduce the compiled code size and the only + new function call should be inlined by the compiler. + + * wtf/RefCounted.h: + (WTF::RefCountedBase::ref): Copied from RefCounted. + (WTF::RefCountedBase::hasOneRef): Ditto. + (WTF::RefCountedBase::refCount): Ditto. + (WTF::RefCountedBase::RefCountedBase): Ditto. + (WTF::RefCountedBase::~RefCountedBase): Ditto. + (WTF::RefCountedBase::derefBase): Tweaked from the RefCounted version to remove + template section. + (WTF::RefCounted::RefCounted): + (WTF::RefCounted::deref): Small wrapper around RefCountedBase::derefBase(). + (WTF::RefCounted::~RefCounted): Keep private destructor. + +2008-09-18 Darin Adler + + Reviewed by Maciej Stachowiak. + + - part 1 of https://bugs.webkit.org/show_bug.cgi?id=20858 + make each distinct C++ class get a distinct JSC::Structure + + * kjs/lookup.h: Removed things here that were used only in WebCore: + cacheGlobalObject, JSC_DEFINE_PROTOTYPE, JSC_DEFINE_PROTOTYPE_WITH_PROTOTYPE, + and JSC_IMPLEMENT_PROTOTYPE. + +2008-09-18 Darin Adler + + Reviewed by Maciej Stachowiak. + + - https://bugs.webkit.org/show_bug.cgi?id=20927 + simplify/streamline the code to turn strings into identifiers while parsing + + * kjs/grammar.y: Get rid of string from the union, and use ident for STRING as + well as for IDENT. + + * kjs/lexer.cpp: + (JSC::Lexer::lex): Use makeIdentifier instead of makeUString for String. + * kjs/lexer.h: Remove makeUString. + + * kjs/nodes.h: Changed StringNode to hold an Identifier instead of UString. + + * VM/CodeGenerator.cpp: + (JSC::keyForCharacterSwitch): Updated since StringNode now holds an Identifier. + (JSC::prepareJumpTableForStringSwitch): Ditto. + * kjs/nodes.cpp: + (JSC::StringNode::emitCode): Ditto. The comment from here is now in the lexer. + (JSC::processClauseList): Ditto. + * kjs/nodes2string.cpp: + (JSC::StringNode::streamTo): Ditto. + +2008-09-18 Sam Weinig + + Fix style. + + * VM/Instruction.h: + (JSC::Instruction::Instruction): + +2008-09-18 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + Bug 20911: REGRESSION(r36480?): Reproducible assertion failure below derefStructureIDs 64-bit JavaScriptCore + + + The problem was simply caused by the int constructor for Instruction + failing to initialise the full struct in 64bit builds. + + * VM/Instruction.h: + (JSC::Instruction::Instruction): + +2008-09-18 Darin Adler + + - fix release build + + * wtf/RefCountedLeakCounter.cpp: Removed stray "static". + +2008-09-18 Darin Adler + + Reviewed by Sam Weinig. + + * kjs/JSGlobalObject.h: Tiny style guideline tweak. + +2008-09-18 Darin Adler + + Reviewed by Sam Weinig. + + - fix https://bugs.webkit.org/show_bug.cgi?id=20925 + LEAK messages appear every time I quit + + * JavaScriptCore.exp: Updated, and also added an export + needed for future WebCore use of JSC::StructureID. + + * wtf/RefCountedLeakCounter.cpp: + (WTF::RefCountedLeakCounter::suppressMessages): Added. + (WTF::RefCountedLeakCounter::cancelMessageSuppression): Added. + (WTF::RefCountedLeakCounter::RefCountedLeakCounter): Tweaked a bit. + (WTF::RefCountedLeakCounter::~RefCountedLeakCounter): Added code to + log the reason there was no leak checking done. + (WTF::RefCountedLeakCounter::increment): Tweaked a bit. + (WTF::RefCountedLeakCounter::decrement): Ditto. + + * wtf/RefCountedLeakCounter.h: Replaced setLogLeakMessages with two + new functions, suppressMessages and cancelMessageSuppression. Also + added m_ prefixes to the data member names. + +2008-09-18 Holger Hans Peter Freyther + + Reviewed by Mark Rowe. + + https://bugs.webkit.org/show_bug.cgi?id=20437 + + Add a proper #define to define which XML Parser implementation to use. Client + code can use #if USE(QXMLSTREAM) to decide if the Qt XML StreamReader + implementation is going to be used. + + * wtf/Platform.h: + +2008-09-18 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Make a Unicode non-breaking space count as a whitespace character in + PCRE. This change was already made in WREC, and it fixes one of the + Mozilla JS tests. Since it is now fixed in PCRE as well, we can check + in a new set of expected test results. + + * pcre/pcre_internal.h: + (isSpaceChar): + * tests/mozilla/expected.html: + +2008-09-18 Stephanie Lewis + + Reviewed by Mark Rowe and Maciej Stachowiak. + + add an option use arch to specify which architecture to run. + + * tests/mozilla/jsDriver.pl: + +2008-09-17 Oliver Hunt + + Correctly restore argument reference prior to SFX runtime calls. + + Reviewed by Steve Falkenburg. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + +2008-09-17 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Bug 20876: REGRESSION (r36417, r36427): fast/js/exception-expression-offset.html fails + + + r36417 and r36427 caused an get_by_id opcode to be emitted before the + instanceof and construct opcodes, in order to enable inline caching of + the prototype property. Unfortunately, this regressed some tests dealing + with exceptions thrown by 'instanceof' and the 'new' operator. We fix + these problems by detecting whether an "is not an object" exception is + thrown before op_instanceof or op_construct, and emit the proper + exception in those cases. + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitConstruct): + * VM/CodeGenerator.h: + * VM/ExceptionHelpers.cpp: + (JSC::createInvalidParamError): + (JSC::createNotAConstructorError): + (JSC::createNotAnObjectError): + * VM/ExceptionHelpers.h: + * VM/Machine.cpp: + (JSC::Machine::getOpcode): + (JSC::Machine::privateExecute): + * VM/Machine.h: + * kjs/nodes.cpp: + (JSC::NewExprNode::emitCode): + (JSC::InstanceOfNode::emitCode): + +2008-09-17 Gavin Barraclough + + Reviewed by Oliver Hunt. + + JIT generation cti_op_construct_verify. + + Quarter to half percent progression on v8-tests. + Roughly not change on SunSpider (possible minor progression). + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + * VM/Machine.cpp: + * VM/Machine.h: + +2008-09-15 Steve Falkenburg + + Improve timer accuracy for JavaScript Date object on Windows. + + Use a combination of ftime and QueryPerformanceCounter. + ftime returns the information we want, but doesn't have sufficient resolution. + QueryPerformanceCounter has high resolution, but is only usable to measure time intervals. + To combine them, we call ftime and QueryPerformanceCounter initially. Later calls will use + QueryPerformanceCounter by itself, adding the delta to the saved ftime. We re-sync to + correct for drift if the low-res and high-res elapsed time between calls differs by more + than twice the low-resolution timer resolution. + + QueryPerformanceCounter may be inaccurate due to a problems with: + - some PCI bridge chipsets (http://support.microsoft.com/kb/274323) + - BIOS bugs (http://support.microsoft.com/kb/895980/) + - BIOS/HAL bugs on multiprocessor/multicore systems (http://msdn.microsoft.com/en-us/library/ms644904.aspx) + + Reviewed by Darin Adler. + + * kjs/DateMath.cpp: + (JSC::highResUpTime): + (JSC::lowResUTCTime): + (JSC::qpcAvailable): + (JSC::getCurrentUTCTimeWithMicroseconds): + +2008-09-17 Gavin Barraclough + + Reviewed by Geoff Garen. + + Implement JIT generation of CallFrame initialization, for op_call. + + 1% sunspider 2.5% v8-tests. + + * VM/CTI.cpp: + (JSC::CTI::compileOpCall): + * VM/Machine.cpp: + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_op_call_NotJSFunction): + +2008-09-17 Gavin Barraclough + + Reviewed by Geoff Garen. + + Optimizations for op_call in CTI. Move check for (ctiCode == 0) into JIT code, + move copying of scopeChain for CodeBlocks that needFullScopeChain into head of + functions, instead of checking prior to making the call. + + 3% on v8-tests (4% on richards, 6% in delta-blue) + + * VM/CTI.cpp: + (JSC::CTI::compileOpCall): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + * VM/Machine.cpp: + (JSC::Machine::execute): + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_vm_compile): + (JSC::Machine::cti_vm_updateScopeChain): + (JSC::Machine::cti_op_construct_JSConstruct): + * VM/Machine.h: + +2008-09-17 Tor Arne Vestbø + + Fix the QtWebKit/Mac build + + * wtf/ThreadingQt.cpp: + (WTF::initializeThreading): use QCoreApplication to get the main thread + +2008-09-16 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Bug 20857: REGRESSION (r36427): ASSERTION FAILED: m_refCount >= 0 in RegisterID::deref() + + + Fix a problem stemming from the slightly unsafe behaviour of the + CodeGenerator::finalDestination() method by putting the "func" argument + of the emitConstruct() method in a RefPtr in its caller. Also, add an + assertion guaranteeing that this is always the case. + + CodeGenerator::finalDestination() is still incorrect and can cause + problems with a different allocator; see bug 20340 for more details. + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitConstruct): + * kjs/nodes.cpp: + (JSC::NewExprNode::emitCode): + +2008-09-16 Alice Liu + + build fix. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + +2008-09-16 Gavin Barraclough + + Reviewed by Geoff Garen. + + CTI code generation for op_ret. The majority of the work + (updating variables on the stack & on exec) can be performed + directly in generated code. + + We still need to check, & to call out to C-code to handle + activation records, profiling, and full scope chains. + + +1.5% Sunspider, +5/6% v8 tests. + + * VM/CTI.cpp: + (JSC::CTI::emitPutCTIParam): + (JSC::CTI::compileOpCall): + (JSC::CTI::privateCompileMainPass): + * VM/CTI.h: + * VM/Machine.cpp: + (JSC::Machine::cti_op_ret_activation): + (JSC::Machine::cti_op_ret_profiler): + (JSC::Machine::cti_op_ret_scopeChain): + * VM/Machine.h: + +2008-09-16 Dimitri Glazkov + + Fix the Windows build. + + Add some extra parentheses to stop MSVC from complaining so much. + + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_stricteq): + (JSC::Machine::cti_op_nstricteq): + * kjs/operations.cpp: + (JSC::strictEqual): + +2008-09-15 Maciej Stachowiak + + Reviewed by Cameron Zwarich. + + - speed up the === and !== operators by choosing the fast cases better + + No effect on SunSpider but speeds up the V8 EarlyBoyer benchmark about 4%. + + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_stricteq): + (JSC::Machine::cti_op_nstricteq): + * kjs/JSImmediate.h: + (JSC::JSImmediate::areBothImmediate): + * kjs/operations.cpp: + (JSC::strictEqual): + (JSC::strictEqualSlowCase): + * kjs/operations.h: + +2008-09-15 Oliver Hunt + + RS=Sam Weinig. + + Coding style cleanup. + + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + +2008-09-15 Oliver Hunt + + Reviewed by Cameron Zwarich. + + Bug 20874: op_resolve does not do any form of caching + + + This patch adds an op_resolve_global opcode to handle (and cache) + property lookup we can statically determine must occur on the global + object (if at all). + + 3% progression on sunspider, 3.2x improvement to bitops-bitwise-and, and + 10% in math-partial-sums + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + * VM/CTI.h: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::findScopedProperty): + (JSC::CodeGenerator::emitResolve): + * VM/Machine.cpp: + (JSC::resolveGlobal): + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_resolve_global): + * VM/Machine.h: + * VM/Opcode.h: + +2008-09-15 Sam Weinig + + Roll out r36462. It broke document.all. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/CTI.h: + * VM/Machine.cpp: + (JSC::Machine::Machine): + (JSC::Machine::cti_op_eq_null): + (JSC::Machine::cti_op_neq_null): + * VM/Machine.h: + (JSC::Machine::isJSString): + * kjs/JSCell.h: + * kjs/JSWrapperObject.h: + * kjs/StringObject.h: + * kjs/StringObjectThatMasqueradesAsUndefined.h: + +2008-09-15 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Bug 20863: ASSERTION FAILED: addressOffset < instructions.size() in CodeBlock::getHandlerForVPC + + + r36427 changed the number of arguments to op_construct without changing + the argument index for the vPC in the call to initializeCallFrame() in + the CTI case. This caused a JSC test failure. Correcting the argument + index fixes the test failure. + + * VM/Machine.cpp: + (JSC::Machine::cti_op_construct_JSConstruct): + +2008-09-15 Mark Rowe + + Fix GCC 4.2 build. + + * VM/CTI.h: + +2008-09-15 Geoffrey Garen + + Reviewed by Maciej Stachowiak. + + Fixed a typo in op_get_by_id_chain that caused it to miss every time + in the interpreter. + + Also, a little cleanup. + + * VM/Machine.cpp: + (JSC::Machine::privateExecute): Set up baseObject before entering the + loop, so we compare against the right values. + +2008-09-15 Geoffrey Garen + + Reviewed by Sam Weinig. + + Removed the CalledAsConstructor flag from the call frame header. Now, + we use an explicit opcode at the call site to fix up constructor results. + + SunSpider says 0.4% faster. + + cti_op_construct_verify is an out-of-line function call for now, but we + can fix that once StructureID holds type information like isObject. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): Codegen for the new opcode. + + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + + * VM/CodeGenerator.cpp: Codegen for the new opcode. Also... + (JSC::CodeGenerator::emitCall): ... don't test for known non-zero value. + (JSC::CodeGenerator::emitConstruct): ... ditto. + + * VM/Machine.cpp: No more CalledAsConstructor + (JSC::Machine::privateExecute): Implementation for the new opcode. + (JSC::Machine::cti_op_ret): The speedup: no need to check whether we were + called as a constructor. + (JSC::Machine::cti_op_construct_verify): Implementation for the new opcode. + * VM/Machine.h: + + * VM/Opcode.h: Declare new opcode. + + * VM/RegisterFile.h: + (JSC::RegisterFile::): No more CalledAsConstructor + +2008-09-15 Gavin Barraclough + + Reviewed by Geoff Garen. + + Inline code generation of eq_null/neq_null for CTI. Uses vptr checking for + StringObjectsThatAreMasqueradingAsBeingUndefined. In the long run, the + masquerading may be handled differently (through the StructureIDs - see bug + #20823). + + >1% on v8-tests. + + * VM/CTI.cpp: + (JSC::CTI::emitJumpSlowCaseIfIsJSCell): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/CTI.h: + * VM/Machine.cpp: + (JSC::Machine::Machine): + (JSC::Machine::cti_op_eq_null): + (JSC::Machine::cti_op_neq_null): + * VM/Machine.h: + (JSC::Machine::doesMasqueradesAsUndefined): + * kjs/JSWrapperObject.h: + (JSC::JSWrapperObject::): + (JSC::JSWrapperObject::JSWrapperObject): + * kjs/StringObject.h: + (JSC::StringObject::StringObject): + * kjs/StringObjectThatMasqueradesAsUndefined.h: + (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined): + +2008-09-15 Cameron Zwarich + + Rubber-stamped by Oliver Hunt. + + r36427 broke CodeBlock::dump() by changing the number of arguments to + op_construct without changing the code that prints it. This patch fixes + it by printing the additional argument. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + +2008-09-15 Adam Roben + + Build fix + + * kjs/StructureID.cpp: Removed a stray semicolon. + +2008-09-15 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Fix a crash in fast/js/exception-expression-offset.html caused by not + updating all mentions of the length of op_construct in r36427. + + * VM/Machine.cpp: + (JSC::Machine::cti_op_construct_NotJSConstruct): + +2008-09-15 Maciej Stachowiak + + Reviewed by Cameron Zwarich. + + - fix layout test failure introduced by fix for 20849 + + (The failing test was fast/js/delete-then-put.html) + + * kjs/JSObject.cpp: + (JSC::JSObject::removeDirect): Clear enumeration cache + in the dictionary case. + * kjs/JSObject.h: + (JSC::JSObject::putDirect): Ditto. + * kjs/StructureID.h: + (JSC::StructureID::clearEnumerationCache): Inline to handle the + clear. + +2008-09-15 Maciej Stachowiak + + Reviewed by Cameron Zwarich. + + - fix JSC test failures introduced by fix for 20849 + + * kjs/PropertyMap.cpp: + (JSC::PropertyMap::getEnumerablePropertyNames): Use the correct count. + +2008-09-15 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Bug 20851: REGRESSION (r36410): fast/js/kde/GlobalObject.html fails + + + r36410 introduced an optimization for parseInt() that is incorrect when + its argument is larger than the range of a 32-bit integer. If the + argument is a number that is not an immediate integer, then the correct + behaviour is to return the floor of its value, unless it is an infinite + value, in which case the correct behaviour is to return 0. + + * kjs/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncParseInt): + +2008-09-15 Sam Weinig + + Reviewed by Maciej Stachowiak. + + Patch for https://bugs.webkit.org/show_bug.cgi?id=20849 + Cache property names for getEnumerablePropertyNames in the StructureID. + + ~0.5% speedup on Sunspider overall (9.7% speedup on string-fasta). ~1% speedup + on the v8 test suite. + + * kjs/JSObject.cpp: + (JSC::JSObject::getPropertyNames): + * kjs/PropertyMap.cpp: + (JSC::PropertyMap::getEnumerablePropertyNames): + * kjs/PropertyMap.h: + * kjs/StructureID.cpp: + (JSC::StructureID::StructureID): + (JSC::StructureID::getEnumerablePropertyNames): + * kjs/StructureID.h: + +2008-09-14 Maciej Stachowiak + + Reviewed by Cameron Zwarich. + + - speed up JS construction by extracting "prototype" lookup so PIC applies. + + ~0.5% speedup on SunSpider + Speeds up some of the V8 tests as well, most notably earley-boyer. + + * VM/CTI.cpp: + (JSC::CTI::compileOpCall): Account for extra arg for prototype. + (JSC::CTI::privateCompileMainPass): Account for increased size of op_construct. + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitConstruct): Emit separate lookup to get prototype property. + * VM/Machine.cpp: + (JSC::Machine::privateExecute): Expect prototype arg in op_construct. + (JSC::Machine::cti_op_construct_JSConstruct): ditto + (JSC::Machine::cti_op_construct_NotJSConstruct): ditto + +2008-09-10 Alexey Proskuryakov + + Reviewed by Eric Seidel. + + Add a protected destructor for RefCounted. + + It is wrong to call its destructor directly, because (1) this should be taken care of by + deref(), and (2) many classes that use RefCounted have non-virtual destructors. + + No change in behavior. + + * wtf/RefCounted.h: (WTF::RefCounted::~RefCounted): + +2008-09-14 Gavin Barraclough + + Reviewed by Sam Weinig. + + Accelerated property accesses. + + Inline more of the array access code into the JIT code for get/put_by_val. + Accelerate get/put_by_id by speculatively inlining a disable direct access + into the hot path of the code, and repatch this with the correct StructureID + and property map offset once these are known. In the case of accesses to the + prototype and reading the array-length a trampoline is genertaed, and the + branch to the slow-case is relinked to jump to this. + + By repatching, we mean rewriting the x86 instruction stream. Instructions are + only modified in a simple fasion - altering immediate operands, memory access + deisplacements, and branch offsets. + + For regular get_by_id/put_by_id accesses to an object, a StructureID in an + instruction's immediate operant is updateded, and a memory access operation's + displacement is updated to access the correct field on the object. In the case + of more complex accesses (array length and get_by_id_prototype) the offset on + the branch to slow-case is updated, to now jump to a trampoline. + + +2.8% sunspider, +13% v8-tests + + * VM/CTI.cpp: + (JSC::CTI::emitCall): + (JSC::CTI::emitJumpSlowCaseIfNotJSCell): + (JSC::CTI::CTI): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + (JSC::CTI::privateCompileGetByIdSelf): + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + (JSC::CTI::privateCompilePutByIdReplace): + (JSC::CTI::privateCompilePutByIdTransition): + (JSC::CTI::privateCompileArrayLengthTrampoline): + (JSC::CTI::privateCompileStringLengthTrampoline): + (JSC::CTI::patchGetByIdSelf): + (JSC::CTI::patchPutByIdReplace): + (JSC::CTI::privateCompilePatchGetArrayLength): + (JSC::CTI::privateCompilePatchGetStringLength): + * VM/CTI.h: + (JSC::CTI::compileGetByIdSelf): + (JSC::CTI::compileGetByIdProto): + (JSC::CTI::compileGetByIdChain): + (JSC::CTI::compilePutByIdReplace): + (JSC::CTI::compilePutByIdTransition): + (JSC::CTI::compileArrayLengthTrampoline): + (JSC::CTI::compileStringLengthTrampoline): + (JSC::CTI::compilePatchGetArrayLength): + (JSC::CTI::compilePatchGetStringLength): + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + (JSC::CodeBlock::~CodeBlock): + * VM/CodeBlock.h: + (JSC::StructureStubInfo::StructureStubInfo): + (JSC::CodeBlock::getStubInfo): + * VM/Machine.cpp: + (JSC::Machine::tryCTICachePutByID): + (JSC::Machine::tryCTICacheGetByID): + (JSC::Machine::cti_op_put_by_val_array): + * VM/Machine.h: + * masm/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::cmpl_i8m): + (JSC::X86Assembler::emitUnlinkedJa): + (JSC::X86Assembler::getRelocatedAddress): + (JSC::X86Assembler::getDifferenceBetweenLabels): + (JSC::X86Assembler::emitModRm_opmsib): + +2008-09-14 Maciej Stachowiak + + Reviewed by Cameron Zwarich. + + - split the "prototype" lookup for hasInstance into opcode stream so it can be cached + + ~5% speedup on v8 earley-boyer test + + * API/JSCallbackObject.h: Add a parameter for the pre-looked-up prototype. + * API/JSCallbackObjectFunctions.h: + (JSC::::hasInstance): Ditto. + * API/JSValueRef.cpp: + (JSValueIsInstanceOfConstructor): Look up and pass in prototype. + * JavaScriptCore.exp: + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): Pass along prototype. + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): Print third arg. + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitInstanceOf): Implement this, now that there + is a third argument. + * VM/CodeGenerator.h: + * VM/Machine.cpp: + (JSC::Machine::privateExecute): Pass along the prototype. + (JSC::Machine::cti_op_instanceof): ditto + * kjs/JSObject.cpp: + (JSC::JSObject::hasInstance): Expect to get a pre-looked-up prototype. + * kjs/JSObject.h: + * kjs/nodes.cpp: + (JSC::InstanceOfNode::emitCode): Emit a get_by_id of the prototype + property and pass that register to instanceof. + * kjs/nodes.h: + +2008-09-14 Gavin Barraclough + + Reviewed by Sam Weinig. + + Remove unnecessary virtual function call from cti_op_call_JSFunction - + ~5% on richards, ~2.5% on v8-tests, ~0.5% on sunspider. + + * VM/Machine.cpp: + (JSC::Machine::cti_op_call_JSFunction): + +2008-09-14 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Bug 20827: the 'typeof' operator is slow + + + Optimize the 'typeof' operator when its result is compared to a constant + string. + + This is a 5.5% speedup on the V8 Earley-Boyer test. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitEqualityOp): + * VM/CodeGenerator.h: + * VM/Machine.cpp: + (JSC::jsIsObjectType): + (JSC::jsIsFunctionType): + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_is_undefined): + (JSC::Machine::cti_op_is_boolean): + (JSC::Machine::cti_op_is_number): + (JSC::Machine::cti_op_is_string): + (JSC::Machine::cti_op_is_object): + (JSC::Machine::cti_op_is_function): + * VM/Machine.h: + * VM/Opcode.h: + * kjs/nodes.cpp: + (JSC::BinaryOpNode::emitCode): + (JSC::EqualNode::emitCode): + (JSC::StrictEqualNode::emitCode): + * kjs/nodes.h: + +2008-09-14 Sam Weinig + + Reviewed by Cameron Zwarich. + + Patch for https://bugs.webkit.org/show_bug.cgi?id=20844 + Speed up parseInt for numbers + + Sunspider reports this as 1.029x as fast overall and 1.37x as fast on string-unpack-code. + No change on the v8 suite. + + * kjs/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncParseInt): Don't convert numbers to strings just to + convert them back to numbers. + +2008-09-14 Cameron Zwarich + + Reviewed by Oliver Hunt. + + Bug 20816: op_lesseq should be optimized + + + Add a loop_if_lesseq opcode that is similar to the loop_if_less opcode. + + This is a 9.4% speedup on the V8 Crypto benchmark. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitJumpIfTrue): + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_loop_if_lesseq): + * VM/Machine.h: + * VM/Opcode.h: + +2008-09-14 Sam Weinig + + Reviewed by Cameron Zwarich. + + Cleanup Sampling code. + + * VM/CTI.cpp: + (JSC::CTI::emitCall): + (JSC::CTI::privateCompileMainPass): + * VM/CTI.h: + (JSC::CTI::execute): + * VM/SamplingTool.cpp: + (JSC::): + (JSC::SamplingTool::run): + (JSC::SamplingTool::dump): + * VM/SamplingTool.h: + (JSC::SamplingTool::callingHostFunction): + +2008-09-13 Oliver Hunt + + Reviewed by Cameron Zwarich. + + Bug 20821: Cache property transitions to speed up object initialization + https://bugs.webkit.org/show_bug.cgi?id=20821 + + Implement a transition cache to improve the performance of new properties + being added to objects. This is extremely beneficial in constructors and + shows up as a 34% improvement on access-binary-trees in SunSpider (0.8% + overall) + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + (JSC::): + (JSC::transitionWillNeedStorageRealloc): + (JSC::CTI::privateCompilePutByIdTransition): + * VM/CTI.h: + (JSC::CTI::compilePutByIdTransition): + * VM/CodeBlock.cpp: + (JSC::printPutByIdOp): + (JSC::CodeBlock::printStructureIDs): + (JSC::CodeBlock::dump): + (JSC::CodeBlock::derefStructureIDs): + (JSC::CodeBlock::refStructureIDs): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitPutById): + * VM/Machine.cpp: + (JSC::cachePrototypeChain): + (JSC::Machine::tryCachePutByID): + (JSC::Machine::tryCacheGetByID): + (JSC::Machine::privateExecute): + (JSC::Machine::tryCTICachePutByID): + (JSC::Machine::tryCTICacheGetByID): + * VM/Machine.h: + * VM/Opcode.h: + * kjs/JSObject.h: + (JSC::JSObject::putDirect): + (JSC::JSObject::transitionTo): + * kjs/PutPropertySlot.h: + (JSC::PutPropertySlot::PutPropertySlot): + (JSC::PutPropertySlot::wasTransition): + (JSC::PutPropertySlot::setWasTransition): + * kjs/StructureID.cpp: + (JSC::StructureID::transitionTo): + (JSC::StructureIDChain::StructureIDChain): + * kjs/StructureID.h: + (JSC::StructureID::previousID): + (JSC::StructureID::setCachedPrototypeChain): + (JSC::StructureID::cachedPrototypeChain): + (JSC::StructureID::propertyMap): + * masm/X86Assembler.h: + (JSC::X86Assembler::addl_i8m): + (JSC::X86Assembler::subl_i8m): + +2008-09-12 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Bug 20819: JSValue::isObject() is slow + + + Optimize JSCell::isObject() and JSCell::isString() by making them + non-virtual calls that rely on the StructureID type information. + + This is a 0.7% speedup on SunSpider and a 1.0% speedup on the V8 + benchmark suite. + + * JavaScriptCore.exp: + * kjs/JSCell.cpp: + * kjs/JSCell.h: + (JSC::JSCell::isObject): + (JSC::JSCell::isString): + * kjs/JSObject.cpp: + * kjs/JSObject.h: + * kjs/JSString.cpp: + * kjs/JSString.h: + (JSC::JSString::JSString): + * kjs/StructureID.h: + (JSC::StructureID::type): + +2008-09-11 Stephanie Lewis + + Reviewed by Oliver Hunt. + + Turn off PGO Optimization on CTI.cpp -> . Fixes + crash on CNN and on Dromaeo. + Fix Missing close tag in vcproj. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2008-09-11 Cameron Zwarich + + Not reviewed. + + Correct an SVN problem with the last commit and actually add the new + files. + + * wrec/CharacterClassConstructor.cpp: Added. + (JSC::): + (JSC::getCharacterClassNewline): + (JSC::getCharacterClassDigits): + (JSC::getCharacterClassSpaces): + (JSC::getCharacterClassWordchar): + (JSC::getCharacterClassNondigits): + (JSC::getCharacterClassNonspaces): + (JSC::getCharacterClassNonwordchar): + (JSC::CharacterClassConstructor::addSorted): + (JSC::CharacterClassConstructor::addSortedRange): + (JSC::CharacterClassConstructor::put): + (JSC::CharacterClassConstructor::flush): + (JSC::CharacterClassConstructor::append): + * wrec/CharacterClassConstructor.h: Added. + (JSC::CharacterClassConstructor::CharacterClassConstructor): + (JSC::CharacterClassConstructor::isUpsideDown): + (JSC::CharacterClassConstructor::charClass): + +2008-09-11 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Bug 20788: Split CharacterClassConstructor into its own file + + + Split CharacterClassConstructor into its own file and clean up some + style issues. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * wrec/CharacterClassConstructor.cpp: Added. + (JSC::): + (JSC::getCharacterClassNewline): + (JSC::getCharacterClassDigits): + (JSC::getCharacterClassSpaces): + (JSC::getCharacterClassWordchar): + (JSC::getCharacterClassNondigits): + (JSC::getCharacterClassNonspaces): + (JSC::getCharacterClassNonwordchar): + (JSC::CharacterClassConstructor::addSorted): + (JSC::CharacterClassConstructor::addSortedRange): + (JSC::CharacterClassConstructor::put): + (JSC::CharacterClassConstructor::flush): + (JSC::CharacterClassConstructor::append): + * wrec/CharacterClassConstructor.h: Added. + (JSC::CharacterClassConstructor::CharacterClassConstructor): + (JSC::CharacterClassConstructor::isUpsideDown): + (JSC::CharacterClassConstructor::charClass): + * wrec/WREC.cpp: + (JSC::WRECParser::parseCharacterClass): + +2008-09-10 Simon Hausmann + + Not reviewed but trivial one-liner for yet unused macro. + + Changed PLATFORM(WINCE) to PLATFORM(WIN_CE) as requested by Mark. + + (part of https://bugs.webkit.org/show_bug.cgi?id=20746) + + * wtf/Platform.h: + +2008-09-10 Cameron Zwarich + + Rubber-stamped by Oliver Hunt. + + Fix a typo by renaming the overloaded orl_rr that takes an immediate to + orl_i32r. + + * VM/CTI.cpp: + (JSC::CTI::emitFastArithPotentiallyReTagImmediate): + * masm/X86Assembler.h: + (JSC::X86Assembler::orl_i32r): + * wrec/WREC.cpp: + (JSC::WRECGenerator::generatePatternCharacter): + (JSC::WRECGenerator::generateCharacterClassInverted): + +2008-09-10 Sam Weinig + + Reviewed by Geoff Garen. + + Add inline property storage for JSObject. + + 1.2% progression on Sunspider. .5% progression on the v8 test suite. + + * JavaScriptCore.exp: + * VM/CTI.cpp: + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + * kjs/JSObject.cpp: + (JSC::JSObject::mark): There is no reason to check storageSize now that + we start from 0. + (JSC::JSObject::allocatePropertyStorage): Allocates/reallocates heap storage. + * kjs/JSObject.h: + (JSC::JSObject::offsetForLocation): m_propertyStorage is not an OwnArrayPtr + now so there is no reason to .get() + (JSC::JSObject::usingInlineStorage): + (JSC::JSObject::JSObject): Start with m_propertyStorage pointing to the + inline storage. + (JSC::JSObject::~JSObject): Free the heap storage if not using the inline + storage. + (JSC::JSObject::putDirect): Switch to the heap storage only when we know + we know that we are about to add a property that will overflow the inline + storage. + * kjs/PropertyMap.cpp: + (JSC::PropertyMap::createTable): Don't allocate the propertyStorage, that is + now handled by JSObject. + (JSC::PropertyMap::rehash): PropertyStorage is not a OwnArrayPtr anymore. + * kjs/PropertyMap.h: + (JSC::PropertyMap::storageSize): Rename from markingCount. + * kjs/StructureID.cpp: + (JSC::StructureID::addPropertyTransition): Don't resize the property storage + if we are using inline storage. + * kjs/StructureID.h: + +2008-09-10 Oliver Hunt + + Reviewed by Geoff Garen. + + Inline immediate number version of op_mul. + + Renamed mull_rr to imull_rr as that's what it's + actually doing, and added imull_i32r for the constant + case immediate multiply. + + 1.1% improvement to SunSpider. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * masm/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::imull_rr): + (JSC::X86Assembler::imull_i32r): + +2008-09-10 Cameron Zwarich + + Not reviewed. + + Mac build fix. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-09-09 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + Add optimised access to known properties on the global object. + + Improve cross scope access to the global object by emitting + code to access it directly rather than by walking the scope chain. + + This is a 0.8% win in SunSpider and a 1.7% win in the v8 benchmarks. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::emitGetVariableObjectRegister): + (JSC::CTI::emitPutVariableObjectRegister): + * VM/CTI.h: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::findScopedProperty): + (JSC::CodeGenerator::emitResolve): + (JSC::CodeGenerator::emitGetScopedVar): + (JSC::CodeGenerator::emitPutScopedVar): + * VM/CodeGenerator.h: + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + * VM/Opcode.h: + * kjs/nodes.cpp: + (JSC::FunctionCallResolveNode::emitCode): + (JSC::PostfixResolveNode::emitCode): + (JSC::PrefixResolveNode::emitCode): + (JSC::ReadModifyResolveNode::emitCode): + (JSC::AssignResolveNode::emitCode): + +2008-09-10 Maciej Stachowiak + + Reviewed by Oliver. + + - enable polymorphic inline caching of properties of primitives + + 1.012x speedup on SunSpider. + + We create special structure IDs for JSString and + JSNumberCell. Unlike normal structure IDs, these cannot hold the + true prototype. Due to JS autoboxing semantics, the prototype used + when looking up string or number properties depends on the lexical + global object of the call site, not the creation site. Thus we + enable StructureIDs to handle this quirk for primitives. + + Everything else should be straightforward. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + * VM/CTI.h: + (JSC::CTI::compileGetByIdProto): + (JSC::CTI::compileGetByIdChain): + * VM/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::JSPropertyNameIterator): + * VM/Machine.cpp: + (JSC::Machine::Machine): + (JSC::cachePrototypeChain): + (JSC::Machine::tryCachePutByID): + (JSC::Machine::tryCacheGetByID): + (JSC::Machine::privateExecute): + (JSC::Machine::tryCTICachePutByID): + (JSC::Machine::tryCTICacheGetByID): + * kjs/GetterSetter.h: + (JSC::GetterSetter::GetterSetter): + * kjs/JSCell.h: + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * kjs/JSGlobalData.h: + * kjs/JSGlobalObject.h: + (JSC::StructureID::prototypeForLookup): + * kjs/JSNumberCell.h: + (JSC::JSNumberCell::JSNumberCell): + (JSC::jsNumberCell): + * kjs/JSObject.h: + (JSC::JSObject::prototype): + * kjs/JSString.cpp: + (JSC::jsString): + (JSC::jsSubstring): + (JSC::jsOwnedString): + * kjs/JSString.h: + (JSC::JSString::JSString): + (JSC::JSString::): + (JSC::jsSingleCharacterString): + (JSC::jsSingleCharacterSubstring): + (JSC::jsNontrivialString): + * kjs/SmallStrings.cpp: + (JSC::SmallStrings::createEmptyString): + (JSC::SmallStrings::createSingleCharacterString): + * kjs/StructureID.cpp: + (JSC::StructureID::StructureID): + (JSC::StructureID::addPropertyTransition): + (JSC::StructureID::getterSetterTransition): + (JSC::StructureIDChain::StructureIDChain): + * kjs/StructureID.h: + (JSC::StructureID::create): + (JSC::StructureID::storedPrototype): + +2008-09-09 Joerg Bornemann + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=20746 + + Added WINCE platform macro. + + * wtf/Platform.h: + +2008-09-09 Sam Weinig + + Reviewed by Mark Rowe. + + Remove unnecessary override of getOffset. + + Sunspider reports this as a .6% progression. + + * JavaScriptCore.exp: + * kjs/JSObject.h: + (JSC::JSObject::getDirectLocation): + (JSC::JSObject::getOwnPropertySlotForWrite): + (JSC::JSObject::putDirect): + * kjs/PropertyMap.cpp: + * kjs/PropertyMap.h: + +2008-09-09 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Bug 20759: Remove MacroAssembler + + + Remove MacroAssembler and move its functionality to X86Assembler. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CTI.cpp: + (JSC::CTI::emitGetArg): + (JSC::CTI::emitGetPutArg): + (JSC::CTI::emitPutArg): + (JSC::CTI::emitPutCTIParam): + (JSC::CTI::emitGetCTIParam): + (JSC::CTI::emitPutToCallFrameHeader): + (JSC::CTI::emitGetFromCallFrameHeader): + (JSC::CTI::emitPutResult): + (JSC::CTI::emitDebugExceptionCheck): + (JSC::CTI::emitJumpSlowCaseIfNotImm): + (JSC::CTI::emitJumpSlowCaseIfNotImms): + (JSC::CTI::emitFastArithDeTagImmediate): + (JSC::CTI::emitFastArithReTagImmediate): + (JSC::CTI::emitFastArithPotentiallyReTagImmediate): + (JSC::CTI::emitFastArithImmToInt): + (JSC::CTI::emitFastArithIntToImmOrSlowCase): + (JSC::CTI::emitFastArithIntToImmNoCheck): + (JSC::CTI::compileOpCall): + (JSC::CTI::emitSlowScriptCheck): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + (JSC::CTI::privateCompileGetByIdSelf): + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + (JSC::CTI::privateCompilePutByIdReplace): + (JSC::CTI::privateArrayLengthTrampoline): + (JSC::CTI::privateStringLengthTrampoline): + (JSC::CTI::compileRegExp): + * VM/CTI.h: + (JSC::CallRecord::CallRecord): + (JSC::JmpTable::JmpTable): + (JSC::SlowCaseEntry::SlowCaseEntry): + (JSC::CTI::JSRInfo::JSRInfo): + * masm/MacroAssembler.h: Removed. + * masm/MacroAssemblerWin.cpp: Removed. + * masm/X86Assembler.h: + (JSC::X86Assembler::emitConvertToFastCall): + (JSC::X86Assembler::emitRestoreArgumentReference): + * wrec/WREC.h: + (JSC::WRECGenerator::WRECGenerator): + (JSC::WRECParser::WRECParser): + +2008-09-09 Sam Weinig + + Reviewed by Cameron Zwarich. + + Don't waste the first item in the PropertyStorage. + + - Fix typo (makingCount -> markingCount) + - Remove undefined method declaration. + + No change on Sunspider. + + * kjs/JSObject.cpp: + (JSC::JSObject::mark): + * kjs/PropertyMap.cpp: + (JSC::PropertyMap::put): + (JSC::PropertyMap::remove): + (JSC::PropertyMap::getOffset): + (JSC::PropertyMap::insert): + (JSC::PropertyMap::rehash): + (JSC::PropertyMap::resizePropertyStorage): + (JSC::PropertyMap::checkConsistency): + * kjs/PropertyMap.h: + (JSC::PropertyMap::markingCount): Fix typo. + +2008-09-09 Cameron Zwarich + + Not reviewed. + + Speculative Windows build fix. + + * masm/MacroAssemblerWin.cpp: + (JSC::MacroAssembler::emitConvertToFastCall): + (JSC::MacroAssembler::emitRestoreArgumentReference): + +2008-09-09 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Bug 20755: Create an X86 namespace for register names and other things + + + Create an X86 namespace to put X86 register names. Perhaps I will move + opcode names here later as well. + + * VM/CTI.cpp: + (JSC::CTI::emitGetArg): + (JSC::CTI::emitGetPutArg): + (JSC::CTI::emitPutArg): + (JSC::CTI::emitPutArgConstant): + (JSC::CTI::emitPutCTIParam): + (JSC::CTI::emitGetCTIParam): + (JSC::CTI::emitPutToCallFrameHeader): + (JSC::CTI::emitGetFromCallFrameHeader): + (JSC::CTI::emitPutResult): + (JSC::CTI::emitDebugExceptionCheck): + (JSC::CTI::emitJumpSlowCaseIfNotImms): + (JSC::CTI::compileOpCall): + (JSC::CTI::emitSlowScriptCheck): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + (JSC::CTI::privateCompileGetByIdSelf): + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + (JSC::CTI::privateCompilePutByIdReplace): + (JSC::CTI::privateArrayLengthTrampoline): + (JSC::CTI::privateStringLengthTrampoline): + (JSC::CTI::compileRegExp): + * VM/CTI.h: + * masm/X86Assembler.h: + (JSC::X86::): + (JSC::X86Assembler::emitModRm_rm): + (JSC::X86Assembler::emitModRm_rm_Unchecked): + (JSC::X86Assembler::emitModRm_rmsib): + * wrec/WREC.cpp: + (JSC::WRECGenerator::generateNonGreedyQuantifier): + (JSC::WRECGenerator::generateGreedyQuantifier): + (JSC::WRECGenerator::generateParentheses): + (JSC::WRECGenerator::generateBackreference): + (JSC::WRECGenerator::gernerateDisjunction): + * wrec/WREC.h: + +2008-09-09 Sam Weinig + + Reviewed by Geoffrey Garen. + + Remove unnecessary friend declaration. + + * kjs/PropertyMap.h: + +2008-09-09 Sam Weinig + + Reviewed by Geoffrey Garen. + + Replace uses of PropertyMap::get and PropertyMap::getLocation with + PropertyMap::getOffset. + + Sunspider reports this as a .6% improvement. + + * JavaScriptCore.exp: + * kjs/JSObject.cpp: + (JSC::JSObject::put): + (JSC::JSObject::deleteProperty): + (JSC::JSObject::getPropertyAttributes): + * kjs/JSObject.h: + (JSC::JSObject::getDirect): + (JSC::JSObject::getDirectLocation): + (JSC::JSObject::locationForOffset): + * kjs/PropertyMap.cpp: + (JSC::PropertyMap::remove): + (JSC::PropertyMap::getOffset): + * kjs/PropertyMap.h: + +2008-09-09 Cameron Zwarich + + Reviewed by Sam Weinig. + + Bug 20754: Remove emit prefix from assembler opcode methods + + + * VM/CTI.cpp: + (JSC::CTI::emitGetArg): + (JSC::CTI::emitGetPutArg): + (JSC::CTI::emitPutArg): + (JSC::CTI::emitPutArgConstant): + (JSC::CTI::emitPutCTIParam): + (JSC::CTI::emitGetCTIParam): + (JSC::CTI::emitPutToCallFrameHeader): + (JSC::CTI::emitGetFromCallFrameHeader): + (JSC::CTI::emitPutResult): + (JSC::CTI::emitDebugExceptionCheck): + (JSC::CTI::emitCall): + (JSC::CTI::emitJumpSlowCaseIfNotImm): + (JSC::CTI::emitJumpSlowCaseIfNotImms): + (JSC::CTI::emitFastArithDeTagImmediate): + (JSC::CTI::emitFastArithReTagImmediate): + (JSC::CTI::emitFastArithPotentiallyReTagImmediate): + (JSC::CTI::emitFastArithImmToInt): + (JSC::CTI::emitFastArithIntToImmOrSlowCase): + (JSC::CTI::emitFastArithIntToImmNoCheck): + (JSC::CTI::compileOpCall): + (JSC::CTI::emitSlowScriptCheck): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + (JSC::CTI::privateCompileGetByIdSelf): + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + (JSC::CTI::privateCompilePutByIdReplace): + (JSC::CTI::privateArrayLengthTrampoline): + (JSC::CTI::privateStringLengthTrampoline): + (JSC::CTI::compileRegExp): + * masm/MacroAssemblerWin.cpp: + (JSC::MacroAssembler::emitConvertToFastCall): + (JSC::MacroAssembler::emitRestoreArgumentReference): + * masm/X86Assembler.h: + (JSC::X86Assembler::pushl_r): + (JSC::X86Assembler::pushl_m): + (JSC::X86Assembler::popl_r): + (JSC::X86Assembler::popl_m): + (JSC::X86Assembler::movl_rr): + (JSC::X86Assembler::addl_rr): + (JSC::X86Assembler::addl_i8r): + (JSC::X86Assembler::addl_i32r): + (JSC::X86Assembler::addl_mr): + (JSC::X86Assembler::andl_rr): + (JSC::X86Assembler::andl_i32r): + (JSC::X86Assembler::cmpl_i8r): + (JSC::X86Assembler::cmpl_rr): + (JSC::X86Assembler::cmpl_rm): + (JSC::X86Assembler::cmpl_i32r): + (JSC::X86Assembler::cmpl_i32m): + (JSC::X86Assembler::cmpw_rm): + (JSC::X86Assembler::orl_rr): + (JSC::X86Assembler::subl_rr): + (JSC::X86Assembler::subl_i8r): + (JSC::X86Assembler::subl_i32r): + (JSC::X86Assembler::subl_mr): + (JSC::X86Assembler::testl_i32r): + (JSC::X86Assembler::testl_rr): + (JSC::X86Assembler::xorl_i8r): + (JSC::X86Assembler::xorl_rr): + (JSC::X86Assembler::sarl_i8r): + (JSC::X86Assembler::sarl_CLr): + (JSC::X86Assembler::shl_i8r): + (JSC::X86Assembler::shll_CLr): + (JSC::X86Assembler::mull_rr): + (JSC::X86Assembler::idivl_r): + (JSC::X86Assembler::cdq): + (JSC::X86Assembler::movl_mr): + (JSC::X86Assembler::movzwl_mr): + (JSC::X86Assembler::movl_rm): + (JSC::X86Assembler::movl_i32r): + (JSC::X86Assembler::movl_i32m): + (JSC::X86Assembler::leal_mr): + (JSC::X86Assembler::ret): + (JSC::X86Assembler::jmp_r): + (JSC::X86Assembler::jmp_m): + (JSC::X86Assembler::call_r): + * wrec/WREC.cpp: + (JSC::WRECGenerator::generateBacktrack1): + (JSC::WRECGenerator::generateBacktrackBackreference): + (JSC::WRECGenerator::generateBackreferenceQuantifier): + (JSC::WRECGenerator::generateNonGreedyQuantifier): + (JSC::WRECGenerator::generateGreedyQuantifier): + (JSC::WRECGenerator::generatePatternCharacter): + (JSC::WRECGenerator::generateCharacterClassInvertedRange): + (JSC::WRECGenerator::generateCharacterClassInverted): + (JSC::WRECGenerator::generateCharacterClass): + (JSC::WRECGenerator::generateParentheses): + (JSC::WRECGenerator::gererateParenthesesResetTrampoline): + (JSC::WRECGenerator::generateAssertionBOL): + (JSC::WRECGenerator::generateAssertionEOL): + (JSC::WRECGenerator::generateAssertionWordBoundary): + (JSC::WRECGenerator::generateBackreference): + (JSC::WRECGenerator::gernerateDisjunction): + +2008-09-09 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Clean up the WREC code some more. + + * VM/CTI.cpp: + (JSC::CTI::compileRegExp): + * wrec/WREC.cpp: + (JSC::getCharacterClassNewline): + (JSC::getCharacterClassDigits): + (JSC::getCharacterClassSpaces): + (JSC::getCharacterClassWordchar): + (JSC::getCharacterClassNondigits): + (JSC::getCharacterClassNonspaces): + (JSC::getCharacterClassNonwordchar): + (JSC::WRECGenerator::generateBacktrack1): + (JSC::WRECGenerator::generateBacktrackBackreference): + (JSC::WRECGenerator::generateBackreferenceQuantifier): + (JSC::WRECGenerator::generateNonGreedyQuantifier): + (JSC::WRECGenerator::generateGreedyQuantifier): + (JSC::WRECGenerator::generatePatternCharacter): + (JSC::WRECGenerator::generateCharacterClassInvertedRange): + (JSC::WRECGenerator::generateCharacterClassInverted): + (JSC::WRECGenerator::generateCharacterClass): + (JSC::WRECGenerator::generateParentheses): + (JSC::WRECGenerator::gererateParenthesesResetTrampoline): + (JSC::WRECGenerator::generateAssertionBOL): + (JSC::WRECGenerator::generateAssertionEOL): + (JSC::WRECGenerator::generateAssertionWordBoundary): + (JSC::WRECGenerator::generateBackreference): + (JSC::WRECGenerator::gernerateDisjunction): + (JSC::WRECParser::parseCharacterClass): + (JSC::WRECParser::parseEscape): + (JSC::WRECParser::parseTerm): + * wrec/WREC.h: + +2008-09-09 Mark Rowe + + Build fix, rubber-stamped by Anders Carlsson. + + Silence spurious build warnings about missing format attributes on functions in Assertions.cpp. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-09-09 Mark Rowe + + Rubber-stamped by Oliver Hunt. + + Fix builds using the "debug" variant. + + This reverts r36130 and tweaks Identifier to export the same symbols for Debug + and Release configurations. + + * Configurations/JavaScriptCore.xcconfig: + * DerivedSources.make: + * JavaScriptCore.Debug.exp: Removed. + * JavaScriptCore.base.exp: Removed. + * JavaScriptCore.exp: Added. + * JavaScriptCore.xcodeproj/project.pbxproj: + * kjs/identifier.cpp: + (JSC::Identifier::addSlowCase): #ifdef the call to checkSameIdentifierTable so that + there is no overhead in Release builds. + (JSC::Identifier::checkSameIdentifierTable): Add empty functions for Release builds. + * kjs/identifier.h: + (JSC::Identifier::add): #ifdef the calls to checkSameIdentifierTable so that there is + no overhead in Release builds, and remove the inline definitions of checkSameIdentifierTable. + +2008-09-09 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Clean up WREC a bit to bring it closer to our coding style guidelines. + + * wrec/WREC.cpp: + (JSC::): + (JSC::getCharacterClass_newline): + (JSC::getCharacterClass_d): + (JSC::getCharacterClass_s): + (JSC::getCharacterClass_w): + (JSC::getCharacterClass_D): + (JSC::getCharacterClass_S): + (JSC::getCharacterClass_W): + (JSC::CharacterClassConstructor::append): + (JSC::WRECGenerator::generateNonGreedyQuantifier): + (JSC::WRECGenerator::generateGreedyQuantifier): + (JSC::WRECGenerator::generateCharacterClassInverted): + (JSC::WRECParser::parseQuantifier): + (JSC::WRECParser::parsePatternCharacterQualifier): + (JSC::WRECParser::parseCharacterClassQuantifier): + (JSC::WRECParser::parseBackreferenceQuantifier): + * wrec/WREC.h: + (JSC::Quantifier::): + (JSC::Quantifier::Quantifier): + +2008-09-09 Jungshik Shin + + Reviewed by Alexey Proskuryakov. + + Try MIME charset names before trying IANA names + ( https://bugs.webkit.org/show_bug.cgi?id=17537 ) + + * wtf/StringExtras.h: (strcasecmp): Added. + +2008-09-09 Cameron Zwarich + + Reviewed by Mark Rowe. + + Bug 20719: REGRESSION (r36135-36244): Hangs, then crashes after several seconds + + + + Fix a typo in the case-insensitive matching of character patterns. + + * wrec/WREC.cpp: + (JSC::WRECGenerator::generatePatternCharacter): + +2008-09-09 Maciej Stachowiak + + Reviewed by Sam Weinig. + + - allow polymorphic inline cache to handle Math object functions and possibly other similar things + + 1.012x speedup on SunSpider. + + * kjs/MathObject.cpp: + (JSC::MathObject::getOwnPropertySlot): + * kjs/lookup.cpp: + (JSC::setUpStaticFunctionSlot): + * kjs/lookup.h: + (JSC::getStaticPropertySlot): + +2008-09-08 Sam Weinig + + Reviewed by Maciej Stachowiak and Oliver Hunt. + + Split storage of properties out of the PropertyMap and into the JSObject + to allow sharing PropertyMap on the StructureID. In order to get this + function correctly, the StructureID's transition mappings were changed to + transition based on property name and attribute pairs, instead of just + property name. + + - Removes the single property optimization now that the PropertyMap is shared. + This will be replaced by in-lining some values on the JSObject. + + This is a wash on Sunspider and a 6.7% win on the v8 test suite. + + * JavaScriptCore.base.exp: + * VM/CTI.cpp: + (JSC::CTI::privateCompileGetByIdSelf): Get the storage directly off the JSObject. + (JSC::CTI::privateCompileGetByIdProto): Ditto. + (JSC::CTI::privateCompileGetByIdChain): Ditto. + (JSC::CTI::privateCompilePutByIdReplace): Ditto. + * kjs/JSObject.cpp: + (JSC::JSObject::mark): Mark the PropertyStorage. + (JSC::JSObject::put): Update to get the propertyMap of the StructureID. + (JSC::JSObject::deleteProperty): Ditto. + (JSC::JSObject::defineGetter): Return early if the property is already a getter/setter. + (JSC::JSObject::defineSetter): Ditto. + (JSC::JSObject::getPropertyAttributes): Update to get the propertyMap of the StructureID + (JSC::JSObject::getPropertyNames): Ditto. + (JSC::JSObject::removeDirect): Ditto. + * kjs/JSObject.h: Remove PropertyMap and add PropertyStorage. + (JSC::JSObject::propertyStorage): return the PropertyStorage. + (JSC::JSObject::getDirect): Update to get the propertyMap of the StructureID. + (JSC::JSObject::getDirectLocation): Ditto. + (JSC::JSObject::offsetForLocation): Compute location directly. + (JSC::JSObject::hasCustomProperties): Update to get the propertyMap of the StructureID. + (JSC::JSObject::hasGetterSetterProperties): Ditto. + (JSC::JSObject::getDirectOffset): Get by indexing into PropertyStorage. + (JSC::JSObject::putDirectOffset): Put by indexing into PropertyStorage. + (JSC::JSObject::getOwnPropertySlotForWrite): Update to get the propertyMap of the StructureID. + (JSC::JSObject::getOwnPropertySlot): Ditto. + (JSC::JSObject::putDirect): Move putting into the StructureID unless the property already exists. + * kjs/PropertyMap.cpp: Use the propertyStorage as the storage for the JSValues. + (JSC::PropertyMap::checkConsistency): + (JSC::PropertyMap::operator=): + (JSC::PropertyMap::~PropertyMap): + (JSC::PropertyMap::get): + (JSC::PropertyMap::getLocation): + (JSC::PropertyMap::put): + (JSC::PropertyMap::getOffset): + (JSC::PropertyMap::insert): + (JSC::PropertyMap::expand): + (JSC::PropertyMap::rehash): + (JSC::PropertyMap::createTable): + (JSC::PropertyMap::resizePropertyStorage): Resize the storage to match the size of the map + (JSC::PropertyMap::remove): + (JSC::PropertyMap::getEnumerablePropertyNames): + * kjs/PropertyMap.h: + (JSC::PropertyMapEntry::PropertyMapEntry): + (JSC::PropertyMap::isEmpty): + (JSC::PropertyMap::size): + (JSC::PropertyMap::makingCount): + (JSC::PropertyMap::PropertyMap): + + * kjs/StructureID.cpp: + (JSC::StructureID::addPropertyTransition): Transitions now are based off the property name + and attributes. + (JSC::StructureID::toDictionaryTransition): Copy the map. + (JSC::StructureID::changePrototypeTransition): Copy the map. + (JSC::StructureID::getterSetterTransition): Copy the map. + (JSC::StructureID::~StructureID): + * kjs/StructureID.h: + (JSC::TransitionTableHash::hash): Custom hash for transition map. + (JSC::TransitionTableHash::equal): Ditto. + (JSC::TransitionTableHashTraits::emptyValue): Custom traits for transition map + (JSC::TransitionTableHashTraits::constructDeletedValue): Ditto. + (JSC::TransitionTableHashTraits::isDeletedValue): Ditto. + (JSC::StructureID::propertyMap): Added. + +2008-09-08 Oliver Hunt + + Reviewed by Mark Rowe. + + Bug 20694: Slow Script error pops up when running Dromaeo tests + + Correct error in timeout logic where execution tick count would + be reset to incorrect value due to incorrect offset and indirection. + Codegen for the slow script dialog was factored out into a separate + method (emitSlowScriptCheck) rather than having multiple copies of + the same code. Also added calls to generate slow script checks + for loop_if_less and loop_if_true opcodes. + + * VM/CTI.cpp: + (JSC::CTI::emitSlowScriptCheck): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/CTI.h: + +2008-09-08 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Remove references to the removed WRECompiler class. + + * VM/Machine.h: + * wrec/WREC.h: + +2008-09-08 Cameron Zwarich + + Rubber-stamped by Mark Rowe. + + Fix the build with CTI enabled but WREC disabled. + + * VM/CTI.cpp: + * VM/CTI.h: + +2008-09-08 Dan Bernstein + + - build fix + + * kjs/nodes.h: + (JSC::StatementNode::): + (JSC::BlockNode::): + +2008-09-08 Kevin McCullough + + Reviewed by Geoff. + + Breakpoints in for loops, while loops or + conditions without curly braces don't break. (19306) + -Statement Lists already emit debug hooks but conditionals without + brackets are not lists. + + * kjs/nodes.cpp: + (KJS::IfNode::emitCode): + (KJS::IfElseNode::emitCode): + (KJS::DoWhileNode::emitCode): + (KJS::WhileNode::emitCode): + (KJS::ForNode::emitCode): + (KJS::ForInNode::emitCode): + * kjs/nodes.h: + (KJS::StatementNode::): + (KJS::BlockNode::): + +2008-09-08 Maciej Stachowiak + + Reviewed by Anders Carlsson. + + - Cache the code generated for eval to speed up SunSpider and web sites + https://bugs.webkit.org/show_bug.cgi?id=20718 + + 1.052x on SunSpider + 2.29x on date-format-tofte + + Lots of real sites seem to get many hits on this cache as well, + including GMail, Google Spreadsheets, Slate and Digg (the last of + these gets over 100 hits on initial page load). + + * VM/CodeBlock.h: + (JSC::EvalCodeCache::get): + * VM/Machine.cpp: + (JSC::Machine::callEval): + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_call_eval): + * VM/Machine.h: + +2008-09-07 Cameron Zwarich + + Reviewed by Oliver Hunt. + + Bug 20711: Change KJS prefix on preprocessor macros to JSC + + + * kjs/CommonIdentifiers.cpp: + (JSC::CommonIdentifiers::CommonIdentifiers): + * kjs/CommonIdentifiers.h: + * kjs/PropertySlot.h: + (JSC::PropertySlot::getValue): + (JSC::PropertySlot::putValue): + (JSC::PropertySlot::setValueSlot): + (JSC::PropertySlot::setValue): + (JSC::PropertySlot::setRegisterSlot): + * kjs/lookup.h: + * kjs/nodes.cpp: + * kjs/nodes.h: + (JSC::Node::): + (JSC::ExpressionNode::): + (JSC::StatementNode::): + (JSC::NullNode::): + (JSC::BooleanNode::): + (JSC::NumberNode::): + (JSC::ImmediateNumberNode::): + (JSC::StringNode::): + (JSC::RegExpNode::): + (JSC::ThisNode::): + (JSC::ResolveNode::): + (JSC::ElementNode::): + (JSC::ArrayNode::): + (JSC::PropertyNode::): + (JSC::PropertyListNode::): + (JSC::ObjectLiteralNode::): + (JSC::BracketAccessorNode::): + (JSC::DotAccessorNode::): + (JSC::ArgumentListNode::): + (JSC::ArgumentsNode::): + (JSC::NewExprNode::): + (JSC::EvalFunctionCallNode::): + (JSC::FunctionCallValueNode::): + (JSC::FunctionCallResolveNode::): + (JSC::FunctionCallBracketNode::): + (JSC::FunctionCallDotNode::): + (JSC::PrePostResolveNode::): + (JSC::PostfixResolveNode::): + (JSC::PostfixBracketNode::): + (JSC::PostfixDotNode::): + (JSC::PostfixErrorNode::): + (JSC::DeleteResolveNode::): + (JSC::DeleteBracketNode::): + (JSC::DeleteDotNode::): + (JSC::DeleteValueNode::): + (JSC::VoidNode::): + (JSC::TypeOfResolveNode::): + (JSC::TypeOfValueNode::): + (JSC::PrefixResolveNode::): + (JSC::PrefixBracketNode::): + (JSC::PrefixDotNode::): + (JSC::PrefixErrorNode::): + (JSC::UnaryPlusNode::): + (JSC::NegateNode::): + (JSC::BitwiseNotNode::): + (JSC::LogicalNotNode::): + (JSC::MultNode::): + (JSC::DivNode::): + (JSC::ModNode::): + (JSC::AddNode::): + (JSC::SubNode::): + (JSC::LeftShiftNode::): + (JSC::RightShiftNode::): + (JSC::UnsignedRightShiftNode::): + (JSC::LessNode::): + (JSC::GreaterNode::): + (JSC::LessEqNode::): + (JSC::GreaterEqNode::): + (JSC::ThrowableBinaryOpNode::): + (JSC::InstanceOfNode::): + (JSC::InNode::): + (JSC::EqualNode::): + (JSC::NotEqualNode::): + (JSC::StrictEqualNode::): + (JSC::NotStrictEqualNode::): + (JSC::BitAndNode::): + (JSC::BitOrNode::): + (JSC::BitXOrNode::): + (JSC::LogicalOpNode::): + (JSC::ConditionalNode::): + (JSC::ReadModifyResolveNode::): + (JSC::AssignResolveNode::): + (JSC::ReadModifyBracketNode::): + (JSC::AssignBracketNode::): + (JSC::AssignDotNode::): + (JSC::ReadModifyDotNode::): + (JSC::AssignErrorNode::): + (JSC::CommaNode::): + (JSC::VarDeclCommaNode::): + (JSC::ConstDeclNode::): + (JSC::ConstStatementNode::): + (JSC::EmptyStatementNode::): + (JSC::DebuggerStatementNode::): + (JSC::ExprStatementNode::): + (JSC::VarStatementNode::): + (JSC::IfNode::): + (JSC::IfElseNode::): + (JSC::DoWhileNode::): + (JSC::WhileNode::): + (JSC::ForNode::): + (JSC::ContinueNode::): + (JSC::BreakNode::): + (JSC::ReturnNode::): + (JSC::WithNode::): + (JSC::LabelNode::): + (JSC::ThrowNode::): + (JSC::TryNode::): + (JSC::ParameterNode::): + (JSC::ScopeNode::): + (JSC::ProgramNode::): + (JSC::EvalNode::): + (JSC::FunctionBodyNode::): + (JSC::FuncExprNode::): + (JSC::FuncDeclNode::): + (JSC::CaseClauseNode::): + (JSC::ClauseListNode::): + (JSC::CaseBlockNode::): + (JSC::SwitchNode::): + +2008-09-07 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Bug 20704: Replace the KJS namespace + + + Rename the KJS namespace to JSC. There are still some uses of KJS in + preprocessor macros and comments, but these will also be changed some + time in the near future. + + * API/APICast.h: + (toJS): + (toRef): + (toGlobalRef): + * API/JSBase.cpp: + * API/JSCallbackConstructor.cpp: + * API/JSCallbackConstructor.h: + * API/JSCallbackFunction.cpp: + * API/JSCallbackFunction.h: + * API/JSCallbackObject.cpp: + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + * API/JSClassRef.cpp: + (OpaqueJSClass::staticValues): + (OpaqueJSClass::staticFunctions): + * API/JSClassRef.h: + * API/JSContextRef.cpp: + * API/JSObjectRef.cpp: + * API/JSProfilerPrivate.cpp: + * API/JSStringRef.cpp: + * API/JSValueRef.cpp: + (JSValueGetType): + * API/OpaqueJSString.cpp: + * API/OpaqueJSString.h: + * JavaScriptCore.Debug.exp: + * JavaScriptCore.base.exp: + * VM/CTI.cpp: + (JSC::): + * VM/CTI.h: + * VM/CodeBlock.cpp: + * VM/CodeBlock.h: + * VM/CodeGenerator.cpp: + * VM/CodeGenerator.h: + * VM/ExceptionHelpers.cpp: + * VM/ExceptionHelpers.h: + * VM/Instruction.h: + * VM/JSPropertyNameIterator.cpp: + * VM/JSPropertyNameIterator.h: + * VM/LabelID.h: + * VM/Machine.cpp: + * VM/Machine.h: + * VM/Opcode.cpp: + * VM/Opcode.h: + * VM/Register.h: + (WTF::): + * VM/RegisterFile.cpp: + * VM/RegisterFile.h: + * VM/RegisterID.h: + (WTF::): + * VM/SamplingTool.cpp: + * VM/SamplingTool.h: + * VM/SegmentedVector.h: + * kjs/ArgList.cpp: + * kjs/ArgList.h: + * kjs/Arguments.cpp: + * kjs/Arguments.h: + * kjs/ArrayConstructor.cpp: + * kjs/ArrayConstructor.h: + * kjs/ArrayPrototype.cpp: + * kjs/ArrayPrototype.h: + * kjs/BatchedTransitionOptimizer.h: + * kjs/BooleanConstructor.cpp: + * kjs/BooleanConstructor.h: + * kjs/BooleanObject.cpp: + * kjs/BooleanObject.h: + * kjs/BooleanPrototype.cpp: + * kjs/BooleanPrototype.h: + * kjs/CallData.cpp: + * kjs/CallData.h: + * kjs/ClassInfo.h: + * kjs/CommonIdentifiers.cpp: + * kjs/CommonIdentifiers.h: + * kjs/ConstructData.cpp: + * kjs/ConstructData.h: + * kjs/DateConstructor.cpp: + * kjs/DateConstructor.h: + * kjs/DateInstance.cpp: + (JSC::DateInstance::msToGregorianDateTime): + * kjs/DateInstance.h: + * kjs/DateMath.cpp: + * kjs/DateMath.h: + * kjs/DatePrototype.cpp: + * kjs/DatePrototype.h: + * kjs/DebuggerCallFrame.cpp: + * kjs/DebuggerCallFrame.h: + * kjs/Error.cpp: + * kjs/Error.h: + * kjs/ErrorConstructor.cpp: + * kjs/ErrorConstructor.h: + * kjs/ErrorInstance.cpp: + * kjs/ErrorInstance.h: + * kjs/ErrorPrototype.cpp: + * kjs/ErrorPrototype.h: + * kjs/ExecState.cpp: + * kjs/ExecState.h: + * kjs/FunctionConstructor.cpp: + * kjs/FunctionConstructor.h: + * kjs/FunctionPrototype.cpp: + * kjs/FunctionPrototype.h: + * kjs/GetterSetter.cpp: + * kjs/GetterSetter.h: + * kjs/GlobalEvalFunction.cpp: + * kjs/GlobalEvalFunction.h: + * kjs/IndexToNameMap.cpp: + * kjs/IndexToNameMap.h: + * kjs/InitializeThreading.cpp: + * kjs/InitializeThreading.h: + * kjs/InternalFunction.cpp: + * kjs/InternalFunction.h: + (JSC::InternalFunction::InternalFunction): + * kjs/JSActivation.cpp: + * kjs/JSActivation.h: + * kjs/JSArray.cpp: + * kjs/JSArray.h: + * kjs/JSCell.cpp: + * kjs/JSCell.h: + * kjs/JSFunction.cpp: + * kjs/JSFunction.h: + (JSC::JSFunction::JSFunction): + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * kjs/JSGlobalData.h: + * kjs/JSGlobalObject.cpp: + * kjs/JSGlobalObject.h: + * kjs/JSGlobalObjectFunctions.cpp: + * kjs/JSGlobalObjectFunctions.h: + * kjs/JSImmediate.cpp: + * kjs/JSImmediate.h: + * kjs/JSLock.cpp: + * kjs/JSLock.h: + * kjs/JSNotAnObject.cpp: + * kjs/JSNotAnObject.h: + * kjs/JSNumberCell.cpp: + * kjs/JSNumberCell.h: + * kjs/JSObject.cpp: + * kjs/JSObject.h: + * kjs/JSStaticScopeObject.cpp: + * kjs/JSStaticScopeObject.h: + * kjs/JSString.cpp: + * kjs/JSString.h: + * kjs/JSType.h: + * kjs/JSValue.cpp: + * kjs/JSValue.h: + * kjs/JSVariableObject.cpp: + * kjs/JSVariableObject.h: + * kjs/JSWrapperObject.cpp: + * kjs/JSWrapperObject.h: + * kjs/LabelStack.cpp: + * kjs/LabelStack.h: + * kjs/MathObject.cpp: + * kjs/MathObject.h: + * kjs/NativeErrorConstructor.cpp: + * kjs/NativeErrorConstructor.h: + * kjs/NativeErrorPrototype.cpp: + * kjs/NativeErrorPrototype.h: + * kjs/NodeInfo.h: + * kjs/NumberConstructor.cpp: + * kjs/NumberConstructor.h: + * kjs/NumberObject.cpp: + * kjs/NumberObject.h: + * kjs/NumberPrototype.cpp: + * kjs/NumberPrototype.h: + * kjs/ObjectConstructor.cpp: + * kjs/ObjectConstructor.h: + * kjs/ObjectPrototype.cpp: + * kjs/ObjectPrototype.h: + * kjs/Parser.cpp: + * kjs/Parser.h: + * kjs/PropertyMap.cpp: + (JSC::PropertyMapStatisticsExitLogger::~PropertyMapStatisticsExitLogger): + * kjs/PropertyMap.h: + * kjs/PropertyNameArray.cpp: + * kjs/PropertyNameArray.h: + * kjs/PropertySlot.cpp: + * kjs/PropertySlot.h: + * kjs/PrototypeFunction.cpp: + * kjs/PrototypeFunction.h: + * kjs/PutPropertySlot.h: + * kjs/RegExpConstructor.cpp: + * kjs/RegExpConstructor.h: + * kjs/RegExpObject.cpp: + * kjs/RegExpObject.h: + * kjs/RegExpPrototype.cpp: + * kjs/RegExpPrototype.h: + * kjs/ScopeChain.cpp: + * kjs/ScopeChain.h: + * kjs/ScopeChainMark.h: + * kjs/Shell.cpp: + (jscmain): + * kjs/SmallStrings.cpp: + * kjs/SmallStrings.h: + * kjs/SourceProvider.h: + * kjs/SourceRange.h: + * kjs/StringConstructor.cpp: + * kjs/StringConstructor.h: + * kjs/StringObject.cpp: + * kjs/StringObject.h: + * kjs/StringObjectThatMasqueradesAsUndefined.h: + * kjs/StringPrototype.cpp: + * kjs/StringPrototype.h: + * kjs/StructureID.cpp: + * kjs/StructureID.h: + * kjs/SymbolTable.h: + * kjs/collector.cpp: + * kjs/collector.h: + * kjs/completion.h: + * kjs/create_hash_table: + * kjs/debugger.cpp: + * kjs/debugger.h: + * kjs/dtoa.cpp: + * kjs/dtoa.h: + * kjs/grammar.y: + * kjs/identifier.cpp: + * kjs/identifier.h: + (JSC::Identifier::equal): + * kjs/interpreter.cpp: + * kjs/interpreter.h: + * kjs/lexer.cpp: + (JSC::Lexer::Lexer): + (JSC::Lexer::clear): + (JSC::Lexer::makeIdentifier): + * kjs/lexer.h: + * kjs/lookup.cpp: + * kjs/lookup.h: + * kjs/nodes.cpp: + * kjs/nodes.h: + * kjs/nodes2string.cpp: + * kjs/operations.cpp: + * kjs/operations.h: + * kjs/protect.h: + * kjs/regexp.cpp: + * kjs/regexp.h: + * kjs/ustring.cpp: + * kjs/ustring.h: + (JSC::operator!=): + (JSC::IdentifierRepHash::hash): + (WTF::): + * masm/MacroAssembler.h: + * masm/MacroAssemblerWin.cpp: + * masm/X86Assembler.h: + * pcre/pcre_exec.cpp: + * profiler/CallIdentifier.h: + (WTF::): + * profiler/HeavyProfile.cpp: + * profiler/HeavyProfile.h: + * profiler/Profile.cpp: + * profiler/Profile.h: + * profiler/ProfileGenerator.cpp: + * profiler/ProfileGenerator.h: + * profiler/ProfileNode.cpp: + * profiler/ProfileNode.h: + * profiler/Profiler.cpp: + * profiler/Profiler.h: + * profiler/TreeProfile.cpp: + * profiler/TreeProfile.h: + * wrec/WREC.cpp: + * wrec/WREC.h: + * wtf/AVLTree.h: + +2008-09-07 Maciej Stachowiak + + Reviewed by Dan Bernstein. + + - rename IA32MacroAssembler class to X86Assembler + + We otherwise call the platform X86, and also, I don't see any macros. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * masm/IA32MacroAsm.h: Removed. + * masm/MacroAssembler.h: + (KJS::MacroAssembler::MacroAssembler): + * masm/MacroAssemblerWin.cpp: + (KJS::MacroAssembler::emitRestoreArgumentReference): + * masm/X86Assembler.h: Copied from masm/IA32MacroAsm.h. + (KJS::X86Assembler::X86Assembler): + * wrec/WREC.cpp: + (KJS::WRECGenerator::generateNonGreedyQuantifier): + (KJS::WRECGenerator::generateGreedyQuantifier): + (KJS::WRECGenerator::generateParentheses): + (KJS::WRECGenerator::generateBackreference): + (KJS::WRECGenerator::gernerateDisjunction): + * wrec/WREC.h: + +2008-09-07 Cameron Zwarich + + Not reviewed. + + Visual C++ seems to have some odd casting rules, so just convert the + offending cast back to a C-style cast for now. + + * kjs/collector.cpp: + (KJS::otherThreadStackPointer): + +2008-09-07 Cameron Zwarich + + Reviewed by Mark Rowe. + + Attempt to fix the Windows build by using a const_cast to cast regs.Esp + to a uintptr_t instead of a reinterpret_cast. + + * kjs/collector.cpp: + (KJS::otherThreadStackPointer): + +2008-09-07 Cameron Zwarich + + Reviewed by Sam Weinig. + + Remove C-style casts from kjs/collector.cpp. + + * kjs/collector.cpp: + (KJS::Heap::heapAllocate): + (KJS::currentThreadStackBase): + (KJS::Heap::markConservatively): + (KJS::otherThreadStackPointer): + (KJS::Heap::markOtherThreadConservatively): + (KJS::Heap::sweep): + +2008-09-07 Mark Rowe + + Build fix for the debug variant. + + * DerivedSources.make: Also use the .Debug.exp exports file when building the debug variant. + +2008-09-07 Cameron Zwarich + + Reviewed by Timothy Hatcher. + + Remove C-style casts from the CTI code. + + * VM/CTI.cpp: + (KJS::CTI::emitGetArg): + (KJS::CTI::emitGetPutArg): + (KJS::ctiRepatchCallByReturnAddress): + (KJS::CTI::compileOpCall): + (KJS::CTI::privateCompileMainPass): + (KJS::CTI::privateCompileGetByIdSelf): + (KJS::CTI::privateCompileGetByIdProto): + (KJS::CTI::privateCompileGetByIdChain): + (KJS::CTI::privateCompilePutByIdReplace): + (KJS::CTI::privateArrayLengthTrampoline): + (KJS::CTI::privateStringLengthTrampoline): + +=== End merge of squirrelfish-extreme === + +2008-09-06 Gavin Barraclough + + Reviewed by Sam Weinig. Adapted somewhat by Maciej Stachowiak. + + - refactor WREC to share more of the JIT infrastructure with CTI + + * VM/CTI.cpp: + (KJS::CTI::emitGetArg): + (KJS::CTI::emitGetPutArg): + (KJS::CTI::emitPutArg): + (KJS::CTI::emitPutArgConstant): + (KJS::CTI::emitPutCTIParam): + (KJS::CTI::emitGetCTIParam): + (KJS::CTI::emitPutToCallFrameHeader): + (KJS::CTI::emitGetFromCallFrameHeader): + (KJS::CTI::emitPutResult): + (KJS::CTI::emitDebugExceptionCheck): + (KJS::CTI::emitJumpSlowCaseIfNotImm): + (KJS::CTI::emitJumpSlowCaseIfNotImms): + (KJS::CTI::emitFastArithDeTagImmediate): + (KJS::CTI::emitFastArithReTagImmediate): + (KJS::CTI::emitFastArithPotentiallyReTagImmediate): + (KJS::CTI::emitFastArithImmToInt): + (KJS::CTI::emitFastArithIntToImmOrSlowCase): + (KJS::CTI::emitFastArithIntToImmNoCheck): + (KJS::CTI::CTI): + (KJS::CTI::compileOpCall): + (KJS::CTI::privateCompileMainPass): + (KJS::CTI::privateCompileSlowCases): + (KJS::CTI::privateCompile): + (KJS::CTI::privateCompileGetByIdSelf): + (KJS::CTI::privateCompileGetByIdProto): + (KJS::CTI::privateCompileGetByIdChain): + (KJS::CTI::privateCompilePutByIdReplace): + (KJS::CTI::privateArrayLengthTrampoline): + (KJS::CTI::privateStringLengthTrampoline): + (KJS::CTI::compileRegExp): + * VM/CTI.h: + (KJS::CallRecord::CallRecord): + (KJS::JmpTable::JmpTable): + (KJS::SlowCaseEntry::SlowCaseEntry): + (KJS::CTI::JSRInfo::JSRInfo): + * kjs/regexp.cpp: + (KJS::RegExp::RegExp): + * wrec/WREC.cpp: + (KJS::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor): + (KJS::GeneratePatternCharacterFunctor::generateAtom): + (KJS::GeneratePatternCharacterFunctor::backtrack): + (KJS::GenerateCharacterClassFunctor::generateAtom): + (KJS::GenerateCharacterClassFunctor::backtrack): + (KJS::GenerateBackreferenceFunctor::generateAtom): + (KJS::GenerateBackreferenceFunctor::backtrack): + (KJS::GenerateParenthesesNonGreedyFunctor::generateAtom): + (KJS::GenerateParenthesesNonGreedyFunctor::backtrack): + (KJS::WRECGenerate::generateBacktrack1): + (KJS::WRECGenerate::generateBacktrackBackreference): + (KJS::WRECGenerate::generateBackreferenceQuantifier): + (KJS::WRECGenerate::generateNonGreedyQuantifier): + (KJS::WRECGenerate::generateGreedyQuantifier): + (KJS::WRECGenerate::generatePatternCharacter): + (KJS::WRECGenerate::generateCharacterClassInvertedRange): + (KJS::WRECGenerate::generateCharacterClassInverted): + (KJS::WRECGenerate::generateCharacterClass): + (KJS::WRECGenerate::generateParentheses): + (KJS::WRECGenerate::generateParenthesesNonGreedy): + (KJS::WRECGenerate::gererateParenthesesResetTrampoline): + (KJS::WRECGenerate::generateAssertionBOL): + (KJS::WRECGenerate::generateAssertionEOL): + (KJS::WRECGenerate::generateAssertionWordBoundary): + (KJS::WRECGenerate::generateBackreference): + (KJS::WRECGenerate::gernerateDisjunction): + (KJS::WRECGenerate::terminateDisjunction): + (KJS::WRECParser::parseGreedyQuantifier): + (KJS::WRECParser::parseQuantifier): + (KJS::WRECParser::parsePatternCharacterQualifier): + (KJS::WRECParser::parseCharacterClassQuantifier): + (KJS::WRECParser::parseBackreferenceQuantifier): + (KJS::WRECParser::parseParentheses): + (KJS::WRECParser::parseCharacterClass): + (KJS::WRECParser::parseOctalEscape): + (KJS::WRECParser::parseEscape): + (KJS::WRECParser::parseTerm): + (KJS::WRECParser::parseDisjunction): + * wrec/WREC.h: + (KJS::WRECGenerate::WRECGenerate): + (KJS::WRECParser::): + (KJS::WRECParser::WRECParser): + (KJS::WRECParser::parseAlternative): + (KJS::WRECParser::isEndOfPattern): + +2008-09-06 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + Fix the sampler build. + + * VM/SamplingTool.h: + +2008-09-06 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + Jump through the necessary hoops required to make MSVC cooperate with SFX + + We now explicitly declare the calling convention on all cti_op_* cfunctions, + and return int instead of bool where appropriate (despite the cdecl calling + convention seems to state MSVC generates code that returns the result value + through ecx). SFX behaves slightly differently under MSVC, specifically it + stores the base argument address for the cti_op_* functions in the first + argument, and then does the required stack manipulation through that pointer. + This is necessary as MSVC's optimisations assume they have complete control + of the stack, and periodically elide our stack manipulations, or move + values in unexpected ways. MSVC also frequently produces tail calls which may + clobber the first argument, so the MSVC path is slightly less efficient due + to the need to restore it. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CTI.cpp: + (KJS::): + (KJS::CTI::compileOpCall): + (KJS::CTI::privateCompileMainPass): + (KJS::CTI::privateCompileSlowCases): + * VM/CTI.h: + * VM/Machine.cpp: + * VM/Machine.h: + * masm/MacroAssembler.h: + (KJS::MacroAssembler::emitConvertToFastCall): + * masm/MacroAssemblerIA32GCC.cpp: Removed. + For performance reasons we need these no-op functions to be inlined. + + * masm/MacroAssemblerWin.cpp: + (KJS::MacroAssembler::emitRestoreArgumentReference): + * wtf/Platform.h: + +2008-09-05 Geoffrey Garen + + Reviewed by Maciej Stachowiak, or maybe the other way around. + + Added the ability to coalesce JITCode buffer grow operations by first + growing the buffer and then executing unchecked puts to it. + + About a 2% speedup on date-format-tofte. + + * VM/CTI.cpp: + (KJS::CTI::compileOpCall): + * masm/IA32MacroAsm.h: + (KJS::JITCodeBuffer::ensureSpace): + (KJS::JITCodeBuffer::putByteUnchecked): + (KJS::JITCodeBuffer::putByte): + (KJS::JITCodeBuffer::putShortUnchecked): + (KJS::JITCodeBuffer::putShort): + (KJS::JITCodeBuffer::putIntUnchecked): + (KJS::JITCodeBuffer::putInt): + (KJS::IA32MacroAssembler::emitTestl_i32r): + (KJS::IA32MacroAssembler::emitMovl_mr): + (KJS::IA32MacroAssembler::emitMovl_rm): + (KJS::IA32MacroAssembler::emitMovl_i32m): + (KJS::IA32MacroAssembler::emitUnlinkedJe): + (KJS::IA32MacroAssembler::emitModRm_rr): + (KJS::IA32MacroAssembler::emitModRm_rr_Unchecked): + (KJS::IA32MacroAssembler::emitModRm_rm_Unchecked): + (KJS::IA32MacroAssembler::emitModRm_rm): + (KJS::IA32MacroAssembler::emitModRm_opr): + (KJS::IA32MacroAssembler::emitModRm_opr_Unchecked): + (KJS::IA32MacroAssembler::emitModRm_opm_Unchecked): + +2008-09-05 Mark Rowe + + Reviewed by Sam Weinig. + + Disable WREC and CTI on platforms that we have not yet had a chance to test with. + + * wtf/Platform.h: + +2008-09-05 Geoffrey Garen + + Reviewed by Sam Weinig. + + Use jo instead of a mask compare when fetching array.length and + string.length. 4% speedup on array.length / string.length torture + test. + + * VM/CTI.cpp: + (KJS::CTI::privateArrayLengthTrampoline): + (KJS::CTI::privateStringLengthTrampoline): + +2008-09-05 Geoffrey Garen + + Reviewed by Sam Weinig. + + Removed a CTI compilation pass by recording labels during bytecode + generation. This is more to reduce complexity than it is to improve + performance. + + SunSpider reports no change. + + CodeBlock now keeps a "labels" set, which holds the offsets of all the + instructions that can be jumped to. + + * VM/CTI.cpp: Nixed a pass. + + * VM/CodeBlock.h: Added a "labels" set. + + * VM/LabelID.h: No need for a special LableID for holding jump + destinations, since the CodeBlock now knows all jump destinations. + + * wtf/HashTraits.h: New hash traits to accomodate putting offset 0 in + the set. + + * kjs/nodes.cpp: + (KJS::TryNode::emitCode): Emit a dummy label to record sret targets. + +2008-09-05 Mark Rowe + + Reviewed by Oliver Hunt and Gavin Barraclough. + + Move the JITCodeBuffer onto Machine and remove the static variables. + + * VM/CTI.cpp: Initialize m_jit with the Machine's code buffer. + * VM/Machine.cpp: + (KJS::Machine::Machine): Allocate a JITCodeBuffer. + * VM/Machine.h: + * kjs/RegExpConstructor.cpp: + (KJS::constructRegExp): Pass the ExecState through. + * kjs/RegExpPrototype.cpp: + (KJS::regExpProtoFuncCompile): Ditto. + * kjs/StringPrototype.cpp: + (KJS::stringProtoFuncMatch): Ditto. + (KJS::stringProtoFuncSearch): Ditto. + * kjs/nodes.cpp: + (KJS::RegExpNode::emitCode): Compile the pattern at code generation time + so that we have access to an ExecState. + * kjs/nodes.h: + (KJS::RegExpNode::): + * kjs/nodes2string.cpp: + * kjs/regexp.cpp: + (KJS::RegExp::RegExp): Pass the ExecState through. + (KJS::RegExp::create): Ditto. + * kjs/regexp.h: + * masm/IA32MacroAsm.h: + (KJS::IA32MacroAssembler::IA32MacroAssembler): Reset the JITCodeBuffer when we are + constructed. + * wrec/WREC.cpp: + (KJS::WRECompiler::compile): Retrieve the JITCodeBuffer from the Machine. + * wrec/WREC.h: + +2008-09-05 Mark Rowe + + Reviewed by Oliver Hunt and Gavin Barraclough. + + Fix the build when CTI is disabled. + + * VM/CodeBlock.cpp: + (KJS::CodeBlock::~CodeBlock): + * VM/CodeGenerator.cpp: + (KJS::prepareJumpTableForStringSwitch): + * VM/Machine.cpp: + (KJS::Machine::Machine): + (KJS::Machine::~Machine): + +2008-09-05 Gavin Barraclough + + Reviewed by Mark Rowe. + + Fix some windows abi issues. + + * VM/CTI.cpp: + (KJS::CTI::privateCompileMainPass): + (KJS::CTI::privateCompileSlowCases): + * VM/CTI.h: + (KJS::CallRecord::CallRecord): + (KJS::): + * VM/Machine.cpp: + (KJS::Machine::cti_op_resolve_func): + (KJS::Machine::cti_op_post_inc): + (KJS::Machine::cti_op_resolve_with_base): + (KJS::Machine::cti_op_post_dec): + * VM/Machine.h: + +2008-09-05 Mark Rowe + + Reviewed by Sam Weinig. + + Fix ecma/FunctionObjects/15.3.5.3.js after I broke it in r93. + + * VM/Machine.cpp: + (KJS::Machine::cti_op_call_NotJSFunction): Restore m_callFrame to the correct value after making the native call. + (KJS::Machine::cti_op_construct_NotJSConstruct): Ditto. + +2008-09-04 Mark Rowe + + Reviewed by Sam Weinig. + + Fix fast/dom/Window/console-functions.html. + + The call frame on the ExecState was not being updated on calls into native functions. This meant that functions + such as console.log would use the line number of the last JS function on the call stack. + + * VM/Machine.cpp: + (KJS::Machine::cti_op_call_NotJSFunction): Update the ExecState's call frame before making a native function call, + and restore it when the function is done. + (KJS::Machine::cti_op_construct_NotJSConstruct): Ditto. + +2008-09-05 Oliver Hunt + + Start bringing up SFX on windows. + + Reviewed by Mark Rowe and Sam Weinig + + Start doing the work to bring up SFX on windows. Initially + just working on WREC, as it does not make any calls so reduces + the amount of code that needs to be corrected. + + Start abstracting the CTI JIT codegen engine. + + * ChangeLog: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CTI.cpp: + * masm/IA32MacroAsm.h: + * masm/MacroAssembler.h: Added. + (KJS::MacroAssembler::MacroAssembler): + * masm/MacroAssemblerIA32GCC.cpp: Added. + (KJS::MacroAssembler::emitConvertToFastCall): + * masm/MacroAssemblerWin.cpp: Added. + (KJS::MacroAssembler::emitConvertToFastCall): + * wrec/WREC.cpp: + (KJS::WRECompiler::parseGreedyQuantifier): + (KJS::WRECompiler::parseCharacterClass): + (KJS::WRECompiler::parseEscape): + (KJS::WRECompiler::compilePattern): + * wrec/WREC.h: + +2008-09-04 Gavin Barraclough + + Reviewed by Sam Weinig. + + Support for slow scripts (timeout checking). + + * VM/CTI.cpp: + (KJS::CTI::privateCompileMainPass): + (KJS::CTI::privateCompile): + * VM/Machine.cpp: + (KJS::slideRegisterWindowForCall): + (KJS::Machine::cti_timeout_check): + (KJS::Machine::cti_vm_throw): + +2008-09-04 Sam Weinig + + Reviewed by Mark Rowe. + + Third round of style cleanup. + + * VM/CTI.cpp: + * VM/CTI.h: + * VM/CodeBlock.h: + * VM/Machine.cpp: + * VM/Machine.h: + * kjs/ExecState.h: + +2008-09-04 Sam Weinig + + Reviewed by Jon Honeycutt. + + Second round of style cleanup. + + * VM/CTI.cpp: + * VM/CTI.h: + * wrec/WREC.h: + +2008-09-04 Sam Weinig + + Reviewed by Mark Rowe. + + First round of style cleanup. + + * VM/CTI.cpp: + * VM/CTI.h: + * masm/IA32MacroAsm.h: + * wrec/WREC.cpp: + * wrec/WREC.h: + +2008-09-04 Geoffrey Garen + + Reviewed by Mark Rowe. + + Merged http://trac.webkit.org/changeset/36081 to work with CTI. + + * VM/Machine.cpp: + (KJS::Machine::tryCtiCacheGetByID): + +2008-09-04 Gavin Barraclough + + Reviewed by Sam Weinig. + + Enable profiling in CTI. + + * VM/CTI.h: + (KJS::): + (KJS::CTI::execute): + * VM/Machine.cpp: + (KJS::Machine::cti_op_call_JSFunction): + (KJS::Machine::cti_op_call_NotJSFunction): + (KJS::Machine::cti_op_ret): + (KJS::Machine::cti_op_construct_JSConstruct): + (KJS::Machine::cti_op_construct_NotJSConstruct): + +2008-09-04 Victor Hernandez + + Reviewed by Geoffrey Garen. + + Fixed an #if to support using WREC without CTI. + + * kjs/regexp.cpp: + (KJS::RegExp::match): + +2008-09-04 Gavin Barraclough + + Reviewed by Oliver Hunt. + + The array/string length trampolines are owned by the Machine, not the codeblock that compiled them. + + * VM/CTI.cpp: + (KJS::CTI::privateArrayLengthTrampoline): + (KJS::CTI::privateStringLengthTrampoline): + * VM/Machine.cpp: + (KJS::Machine::~Machine): + * VM/Machine.h: + +2008-09-04 Mark Rowe + + Reviewed by Gavin Barraclough and Sam Weinig. + + Fix a crash on launch of jsc when GuardMalloc is enabled. + + * kjs/ScopeChain.h: + (KJS::ScopeChain::ScopeChain): Initialize m_node to 0 when we have no valid scope chain. + (KJS::ScopeChain::~ScopeChain): Null-check m_node before calling deref. + +2008-09-03 Oliver Hunt + + Reviewed by Gavin Barraclough and Geoff Garen. + + Fix inspector and fast array access so that it bounds + checks correctly. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass2_Main): + * masm/IA32MacroAsm.h: + (KJS::IA32MacroAssembler::): + (KJS::IA32MacroAssembler::emitUnlinkedJb): + (KJS::IA32MacroAssembler::emitUnlinkedJbe): + +2008-09-03 Mark Rowe + + Move the assertion after the InitializeAndReturn block, as + that is used even when CTI is enabled. + + * VM/Machine.cpp: + (KJS::Machine::privateExecute): + +2008-09-03 Mark Rowe + + Reviewed by Sam Weinig. + + Replace calls to exit with ASSERT_WITH_MESSAGE or ASSERT_NOT_REACHED. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile_pass4_SlowCases): + * VM/Machine.cpp: + (KJS::Machine::privateExecute): + (KJS::Machine::cti_vm_throw): + +2008-09-03 Mark Rowe + + Reviewed by Sam Weinig. + + Tweak JavaScriptCore to compile on non-x86 platforms. This is achieved + by wrapping more code with ENABLE(CTI), ENABLE(WREC), and PLATFORM(X86) + #if's. + + * VM/CTI.cpp: + * VM/CTI.h: + * VM/CodeBlock.cpp: + (KJS::CodeBlock::printStructureIDs): Use %td as the format specifier for + printing a ptrdiff_t. + * VM/Machine.cpp: + * VM/Machine.h: + * kjs/regexp.cpp: + (KJS::RegExp::RegExp): + (KJS::RegExp::~RegExp): + (KJS::RegExp::match): + * kjs/regexp.h: + * masm/IA32MacroAsm.h: + * wrec/WREC.cpp: + * wrec/WREC.h: + * wtf/Platform.h: Only enable CTI and WREC on x86. Add an extra define to + track whether any MASM-using features are enabled. + +2008-09-03 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Copy Geoff's array/string length optimization for CTI. + + * VM/CTI.cpp: + (KJS::CTI::privateArrayLengthTrampoline): + (KJS::CTI::privateStringLengthTrampoline): + * VM/CTI.h: + (KJS::CTI::compileArrayLengthTrampoline): + (KJS::CTI::compileStringLengthTrampoline): + * VM/Machine.cpp: + (KJS::Machine::Machine): + (KJS::Machine::getCtiArrayLengthTrampoline): + (KJS::Machine::getCtiStringLengthTrampoline): + (KJS::Machine::tryCtiCacheGetByID): + (KJS::Machine::cti_op_get_by_id_second): + * VM/Machine.h: + * kjs/JSString.h: + * kjs/ustring.h: + +2008-09-03 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Implement fast array accesses in CTI - 2-3% progression on sunspider. + + * VM/CTI.cpp: + (KJS::CTI::emitFastArithIntToImmNoCheck): + (KJS::CTI::compileOpCall): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile_pass4_SlowCases): + * VM/CTI.h: + * kjs/JSArray.h: + +2008-09-02 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Enable fast property access support in CTI. + + * VM/CTI.cpp: + (KJS::ctiSetReturnAddress): + (KJS::ctiRepatchCallByReturnAddress): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile): + (KJS::CTI::privateCompileGetByIdSelf): + (KJS::CTI::privateCompileGetByIdProto): + (KJS::CTI::privateCompileGetByIdChain): + (KJS::CTI::privateCompilePutByIdReplace): + * VM/CTI.h: + (KJS::CTI::compileGetByIdSelf): + (KJS::CTI::compileGetByIdProto): + (KJS::CTI::compileGetByIdChain): + (KJS::CTI::compilePutByIdReplace): + * VM/CodeBlock.cpp: + (KJS::CodeBlock::~CodeBlock): + * VM/CodeBlock.h: + * VM/Machine.cpp: + (KJS::doSetReturnAddressVmThrowTrampoline): + (KJS::Machine::tryCtiCachePutByID): + (KJS::Machine::tryCtiCacheGetByID): + (KJS::Machine::cti_op_put_by_id): + (KJS::Machine::cti_op_put_by_id_second): + (KJS::Machine::cti_op_put_by_id_generic): + (KJS::Machine::cti_op_put_by_id_fail): + (KJS::Machine::cti_op_get_by_id): + (KJS::Machine::cti_op_get_by_id_second): + (KJS::Machine::cti_op_get_by_id_generic): + (KJS::Machine::cti_op_get_by_id_fail): + (KJS::Machine::cti_op_throw): + (KJS::Machine::cti_vm_throw): + * VM/Machine.h: + * kjs/JSCell.h: + * kjs/JSObject.h: + * kjs/PropertyMap.h: + * kjs/StructureID.cpp: + (KJS::StructureIDChain::StructureIDChain): + * masm/IA32MacroAsm.h: + (KJS::IA32MacroAssembler::emitCmpl_i32m): + (KJS::IA32MacroAssembler::emitMovl_mr): + (KJS::IA32MacroAssembler::emitMovl_rm): + +2008-09-02 Sam Weinig + + Reviewed by Gavin Barraclough and Mark Rowe. + + A backslash (\) at the of a RegEx should produce an error. + Fixes fast/regex/test1.html. + + * wrec/WREC.cpp: + (KJS::WRECompiler::parseEscape): + +2008-09-02 Sam Weinig + + Reviewed by Geoff Garen. + + Link jumps for the slow case of op_loop_if_less. Fixes acid3. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass4_SlowCases): + +2008-09-01 Sam Weinig + + Rubber-stamped by Maciej Stachowiak. + + Switch WREC on by default. + + * wtf/Platform.h: + +2008-09-01 Sam Weinig + + Reviewed by Mark Rowe. + + Fix two failures in fast/regex/test1.html + - \- in a character class should be treated as a literal - + - A missing max quantifier needs to be treated differently than + a null max quantifier. + + * wrec/WREC.cpp: + (KJS::WRECompiler::generateNonGreedyQuantifier): + (KJS::WRECompiler::generateGreedyQuantifier): + (KJS::WRECompiler::parseCharacterClass): + * wrec/WREC.h: + (KJS::Quantifier::Quantifier): + +2008-09-01 Sam Weinig + + Reviewed by Mark Rowe. + + Fix crash in fast/js/kde/evil-n.html + + * kjs/regexp.cpp: Always pass a non-null offset vector to the wrec function. + +2008-09-01 Sam Weinig + + Reviewed by Gavin Barraclough and Mark Rowe. + + Add pattern length limit fixing one test in fast/js. + + * wrec/WREC.cpp: + (KJS::WRECompiler::compile): + * wrec/WREC.h: + (KJS::WRECompiler::): + +2008-09-01 Sam Weinig + + Reviewed by Gavin Barraclough and Mark Rowe. + + Make octal escape parsing/back-reference parsing more closely match + prior behavior fixing one test in fast/js. + + * wrec/WREC.cpp: + (KJS::WRECompiler::parseCharacterClass): 8 and 9 should be IdentityEscaped + (KJS::WRECompiler::parseEscape): + * wrec/WREC.h: + (KJS::WRECompiler::peekDigit): + +2008-09-01 Sam Weinig + + Reviewed by Gavin Barraclough and Mark Rowe. + + Fix one mozilla test. + + * wrec/WREC.cpp: + (KJS::WRECompiler::generateCharacterClassInverted): Fix incorrect not + ascii upper check. + +2008-09-01 Sam Weinig + + Reviewed by Gavin Barraclough and Mark Rowe. + + Parse octal escapes in character classes fixing one mozilla test. + + * wrec/WREC.cpp: + (KJS::WRECompiler::parseCharacterClass): + (KJS::WRECompiler::parseOctalEscape): + * wrec/WREC.h: + (KJS::WRECompiler::consumeOctal): + +2008-09-01 Sam Weinig + + Reviewed by Oliver Hunt. + + Fixes two mozilla tests with WREC enabled. + + * wrec/WREC.cpp: + (KJS::CharacterClassConstructor::append): Keep the character class sorted + when appending another character class. + +2008-09-01 Sam Weinig + + Reviewed by Gavin Barraclough and Mark Rowe. + + Fixes two mozilla tests with WREC enabled. + + * wrec/WREC.cpp: + (KJS::CharacterClassConstructor::addSortedRange): Insert the range at the correct position + instead of appending it to the end. + +2008-09-01 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Move cross-compilation unit call into NEVER_INLINE function. + + * VM/Machine.cpp: + (KJS::doSetReturnAddressVmThrowTrampoline): + +2008-09-01 Sam Weinig + + Reviewed by Gavin Barraclough and Geoff Garen. + + Fix one test in fast/js. + + * VM/Machine.cpp: + (KJS::Machine::cti_op_construct_NotJSConstruct): Throw a createNotAConstructorError, + instead of a createNotAFunctionError. + +2008-08-31 Gavin Barraclough + + Reviewed by Maciej Stachowiak. + + Zero-cost exception handling. This patch takes the exception checking + back of the hot path. When an exception occurs in a Machine::cti* + method, the return address to JIT code is recorded, and is then + overwritten with a pointer to a trampoline routine. When the method + returns the trampoline will cause the cti_vm_throw method to be invoked. + + cti_vm_throw uses the return address preserved above, to discover the + vPC of the bytecode that raised the exception (using a map build during + translation). From the VPC of the faulting bytecode the vPC of a catch + routine may be discovered (unwinding the stack where necesary), and then + a bytecode address for the catch routine is looked up. Final cti_vm_throw + overwrites its return address to JIT code again, to trampoline directly + to the catch routine. + + cti_op_throw is handled in a similar fashion. + + * VM/CTI.cpp: + (KJS::CTI::emitPutCTIParam): + (KJS::CTI::emitPutToCallFrameHeader): + (KJS::CTI::emitGetFromCallFrameHeader): + (KJS::ctiSetReturnAddressForArgs): + (KJS::CTI::emitDebugExceptionCheck): + (KJS::CTI::printOpcodeOperandTypes): + (KJS::CTI::emitCall): + (KJS::CTI::compileOpCall): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile): + * VM/CTI.h: + (KJS::CallRecord::CallRecord): + (KJS::): + (KJS::CTI::execute): + * VM/CodeBlock.h: + * VM/Machine.cpp: + (KJS::Machine::privateExecute): + (KJS::Machine::cti_op_instanceof): + (KJS::Machine::cti_op_call_NotJSFunction): + (KJS::Machine::cti_op_resolve): + (KJS::Machine::cti_op_resolve_func): + (KJS::Machine::cti_op_resolve_skip): + (KJS::Machine::cti_op_resolve_with_base): + (KJS::Machine::cti_op_throw): + (KJS::Machine::cti_op_in): + (KJS::Machine::cti_vm_throw): + * VM/RegisterFile.h: + (KJS::RegisterFile::): + * kjs/ExecState.h: + (KJS::ExecState::setCtiReturnAddress): + (KJS::ExecState::ctiReturnAddress): + * masm/IA32MacroAsm.h: + (KJS::IA32MacroAssembler::): + (KJS::IA32MacroAssembler::emitPushl_m): + (KJS::IA32MacroAssembler::emitPopl_m): + (KJS::IA32MacroAssembler::getRelocatedAddress): + +2008-08-31 Mark Rowe + + Reviewed by Oliver Hunt. + + Fall back to PCRE for any regexp containing parentheses until we correctly backtrack within them. + + * wrec/WREC.cpp: + (KJS::WRECompiler::parseParentheses): + * wrec/WREC.h: + (KJS::WRECompiler::): + +2008-08-31 Mark Rowe + + Reviewed by Oliver Hunt. + + Fix several issues within ecma_3/RegExp/perlstress-001.js with WREC enabled. + + * wrec/WREC.cpp: + (KJS::WRECompiler::generateNonGreedyQuantifier): Compare with the maximum quantifier count rather than the minimum. + (KJS::WRECompiler::generateAssertionEOL): Do a register-to-register comparison rather than immediate-to-register. + (KJS::WRECompiler::parseCharacterClass): Pass through the correct inversion flag. + +2008-08-30 Mark Rowe + + Reviewed by Oliver Hunt. + + Re-fix the six remaining failures in the Mozilla JavaScript tests in a manner that does not kill performance. + This shows up as a 0.6% progression on SunSpider on my machine. + + Grow the JITCodeBuffer's underlying buffer when we run out of space rather than just bailing out. + + * VM/CodeBlock.h: + (KJS::CodeBlock::~CodeBlock): Switch to using fastFree now that JITCodeBuffer::copy uses fastMalloc. + * kjs/regexp.cpp: Ditto. + * masm/IA32MacroAsm.h: + (KJS::JITCodeBuffer::growBuffer): + (KJS::JITCodeBuffer::JITCodeBuffer): + (KJS::JITCodeBuffer::~JITCodeBuffer): + (KJS::JITCodeBuffer::putByte): + (KJS::JITCodeBuffer::putShort): + (KJS::JITCodeBuffer::putInt): + (KJS::JITCodeBuffer::reset): + (KJS::JITCodeBuffer::copy): + +2008-08-29 Oliver Hunt + + RS=Maciej + + Roll out previous patch as it causes a 5% performance regression + + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CTI.cpp: + (KJS::getJCB): + (KJS::CTI::privateCompile): + * VM/CodeBlock.h: + (KJS::CodeBlock::~CodeBlock): + * masm/IA32MacroAsm.h: + (KJS::JITCodeBuffer::JITCodeBuffer): + (KJS::JITCodeBuffer::putByte): + (KJS::JITCodeBuffer::putShort): + (KJS::JITCodeBuffer::putInt): + (KJS::JITCodeBuffer::getEIP): + (KJS::JITCodeBuffer::start): + (KJS::JITCodeBuffer::getOffset): + (KJS::JITCodeBuffer::reset): + (KJS::JITCodeBuffer::copy): + (KJS::IA32MacroAssembler::emitModRm_rr): + (KJS::IA32MacroAssembler::emitModRm_rm): + (KJS::IA32MacroAssembler::emitModRm_rmsib): + (KJS::IA32MacroAssembler::IA32MacroAssembler): + (KJS::IA32MacroAssembler::emitInt3): + (KJS::IA32MacroAssembler::emitPushl_r): + (KJS::IA32MacroAssembler::emitPopl_r): + (KJS::IA32MacroAssembler::emitMovl_rr): + (KJS::IA32MacroAssembler::emitAddl_rr): + (KJS::IA32MacroAssembler::emitAddl_i8r): + (KJS::IA32MacroAssembler::emitAddl_i32r): + (KJS::IA32MacroAssembler::emitAddl_mr): + (KJS::IA32MacroAssembler::emitAndl_rr): + (KJS::IA32MacroAssembler::emitAndl_i32r): + (KJS::IA32MacroAssembler::emitCmpl_i8r): + (KJS::IA32MacroAssembler::emitCmpl_rr): + (KJS::IA32MacroAssembler::emitCmpl_rm): + (KJS::IA32MacroAssembler::emitCmpl_i32r): + (KJS::IA32MacroAssembler::emitCmpl_i32m): + (KJS::IA32MacroAssembler::emitCmpw_rm): + (KJS::IA32MacroAssembler::emitOrl_rr): + (KJS::IA32MacroAssembler::emitOrl_i8r): + (KJS::IA32MacroAssembler::emitSubl_rr): + (KJS::IA32MacroAssembler::emitSubl_i8r): + (KJS::IA32MacroAssembler::emitSubl_i32r): + (KJS::IA32MacroAssembler::emitSubl_mr): + (KJS::IA32MacroAssembler::emitTestl_i32r): + (KJS::IA32MacroAssembler::emitTestl_rr): + (KJS::IA32MacroAssembler::emitXorl_i8r): + (KJS::IA32MacroAssembler::emitXorl_rr): + (KJS::IA32MacroAssembler::emitSarl_i8r): + (KJS::IA32MacroAssembler::emitSarl_CLr): + (KJS::IA32MacroAssembler::emitShl_i8r): + (KJS::IA32MacroAssembler::emitShll_CLr): + (KJS::IA32MacroAssembler::emitMull_rr): + (KJS::IA32MacroAssembler::emitIdivl_r): + (KJS::IA32MacroAssembler::emitCdq): + (KJS::IA32MacroAssembler::emitMovl_mr): + (KJS::IA32MacroAssembler::emitMovzwl_mr): + (KJS::IA32MacroAssembler::emitMovl_rm): + (KJS::IA32MacroAssembler::emitMovl_i32r): + (KJS::IA32MacroAssembler::emitMovl_i32m): + (KJS::IA32MacroAssembler::emitLeal_mr): + (KJS::IA32MacroAssembler::emitRet): + (KJS::IA32MacroAssembler::emitJmpN_r): + (KJS::IA32MacroAssembler::emitJmpN_m): + (KJS::IA32MacroAssembler::emitCall): + (KJS::IA32MacroAssembler::label): + (KJS::IA32MacroAssembler::emitUnlinkedJmp): + (KJS::IA32MacroAssembler::emitUnlinkedJne): + (KJS::IA32MacroAssembler::emitUnlinkedJe): + (KJS::IA32MacroAssembler::emitUnlinkedJl): + (KJS::IA32MacroAssembler::emitUnlinkedJle): + (KJS::IA32MacroAssembler::emitUnlinkedJge): + (KJS::IA32MacroAssembler::emitUnlinkedJae): + (KJS::IA32MacroAssembler::emitUnlinkedJo): + (KJS::IA32MacroAssembler::link): + * wrec/WREC.cpp: + (KJS::WRECompiler::compilePattern): + (KJS::WRECompiler::compile): + * wrec/WREC.h: + +2008-08-29 Mark Rowe + + Reviewed by Oliver Hunt. + + Have JITCodeBuffer manage a Vector containing the generated code so that it can grow + as needed when generating code for a large function. This fixes all six remaining failures + in Mozilla tests in both debug and release builds. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile): + * VM/CodeBlock.h: + (KJS::CodeBlock::~CodeBlock): + * masm/IA32MacroAsm.h: + (KJS::JITCodeBuffer::putByte): + (KJS::JITCodeBuffer::putShort): + (KJS::JITCodeBuffer::putInt): + (KJS::JITCodeBuffer::getEIP): + (KJS::JITCodeBuffer::start): + (KJS::JITCodeBuffer::getOffset): + (KJS::JITCodeBuffer::getCode): + (KJS::IA32MacroAssembler::emitModRm_rr): + * wrec/WREC.cpp: + (KJS::WRECompiler::compilePattern): + * wrec/WREC.h: + +2008-08-29 Mark Rowe + + Reviewed by Oliver Hunt. + + Implement parsing of octal escapes in regular expressions. This fixes three Mozilla tests. + + * wrec/WREC.cpp: + (KJS::WRECompiler::parseOctalEscape): + (KJS::WRECompiler::parseEscape): Parse the escape sequence as an octal escape if it has a leading zero. + Add a FIXME about treating invalid backreferences as octal escapes in the future. + * wrec/WREC.h: + (KJS::WRECompiler::consumeNumber): Multiply by 10 rather than 0 so that we handle numbers with more than + one digit. + * wtf/ASCIICType.h: + (WTF::isASCIIOctalDigit): + +2008-08-29 Sam Weinig + + Reviewed by Mark Rowe. + + Pass vPC to instanceof method. Fixes 2 mozilla tests in debug. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass2_Main): + * VM/Machine.cpp: + (KJS::Machine::cti_op_instanceof): + +2008-08-29 Sam Weinig + + Reviewed by Mark Rowe. + + Pass vPCs to resolve methods for correct exception creation. Fixes + 17 mozilla tests in debug. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass2_Main): + * VM/CTI.h: + * VM/Machine.cpp: + (KJS::Machine::cti_op_resolve): + (KJS::Machine::cti_op_resolve_func): + (KJS::Machine::cti_op_resolve_skip): + (KJS::Machine::cti_op_resolve_with_base): + +2008-08-29 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Remembering to actually throw the exception passed to op throw helps. + Regressions 19 -> 6. + + * VM/Machine.cpp: + (KJS::Machine::cti_op_throw): + (KJS::Machine::cti_vm_throw): + +2008-08-29 Gavin Barraclough + + Reviewed by Sam Weinig. + + Support for exception unwinding the stack. + + Once upon a time, Sam asked me for a bettr ChangeLog entry. The return address + is now preserved on entry to a JIT code function (if we preserve lazily we need + restore the native return address during exception stack unwind). This takes + the number of regressions down from ~150 to 19. + + * VM/CTI.cpp: + (KJS::getJCB): + (KJS::CTI::emitExceptionCheck): + (KJS::CTI::compileOpCall): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile): + * VM/CTI.h: + (KJS::): + * VM/Machine.cpp: + (KJS::Machine::throwException): + (KJS::Machine::cti_op_call_JSFunction): + (KJS::Machine::cti_op_call_NotJSFunction): + (KJS::Machine::cti_op_construct_JSConstruct): + (KJS::Machine::cti_op_construct_NotJSConstruct): + (KJS::Machine::cti_op_throw): + (KJS::Machine::cti_vm_throw): + +2008-08-29 Mark Rowe + + Reviewed by Oliver Hunt. + + Fix js1_2/regexp/word_boundary.js and four other Mozilla tests with WREC enabled. + + * wrec/WREC.cpp: + (KJS::WRECompiler::generateCharacterClassInvertedRange): If none of the exact matches + succeeded, jump to failure. + (KJS::WRECompiler::compilePattern): Restore and increment the current position stored + on the stack to ensure that it will be reset to the correct position after a failed + match has consumed input. + +2008-08-29 Mark Rowe + + Reviewed by Oliver Hunt. + + Fix a hang in ecma_3/RegExp/15.10.2-1.js with WREC enabled. + A backreference with a quantifier would get stuck in an infinite + loop if the captured range was empty. + + * wrec/WREC.cpp: + (KJS::WRECompiler::generateBackreferenceQuantifier): If the captured range + was empty, do not attempt to match the backreference. + (KJS::WRECompiler::parseBackreferenceQuantifier): + * wrec/WREC.h: + (KJS::Quantifier::): + +2008-08-28 Sam Weinig + + Reviewed by Oliver Hunt. + + Implement op_debug. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + * VM/Machine.cpp: + (KJS::Machine::debug): + (KJS::Machine::privateExecute): + (KJS::Machine::cti_op_debug): + * VM/Machine.h: + +2008-08-28 Sam Weinig + + Reviewed by Gavin Barraclough and Geoff Garen. + + Implement op_switch_string fixing 1 mozilla test and one test in fast/js. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile): + * VM/CTI.h: + (KJS::SwitchRecord::): + (KJS::SwitchRecord::SwitchRecord): + * VM/CodeBlock.cpp: + (KJS::CodeBlock::dump): + * VM/CodeBlock.h: + (KJS::ExpressionRangeInfo::): + (KJS::StringJumpTable::offsetForValue): + (KJS::StringJumpTable::ctiForValue): + (KJS::SimpleJumpTable::add): + (KJS::SimpleJumpTable::ctiForValue): + * VM/CodeGenerator.cpp: + (KJS::prepareJumpTableForStringSwitch): + * VM/Machine.cpp: + (KJS::Machine::privateExecute): + (KJS::Machine::cti_op_switch_string): + * VM/Machine.h: + +2008-08-28 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Do not recurse on the machine stack when executing op_call. + + * VM/CTI.cpp: + (KJS::CTI::emitGetPutArg): + (KJS::CTI::emitPutArg): + (KJS::CTI::emitPutArgConstant): + (KJS::CTI::compileOpCall): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile): + * VM/CTI.h: + (KJS::): + (KJS::CTI::compile): + (KJS::CTI::execute): + (KJS::CTI::): + * VM/Machine.cpp: + (KJS::Machine::Machine): + (KJS::Machine::execute): + (KJS::Machine::cti_op_call_JSFunction): + (KJS::Machine::cti_op_call_NotJSFunction): + (KJS::Machine::cti_op_ret): + (KJS::Machine::cti_op_construct_JSConstruct): + (KJS::Machine::cti_op_construct_NotJSConstruct): + (KJS::Machine::cti_op_call_eval): + * VM/Machine.h: + * VM/Register.h: + (KJS::Register::Register): + * VM/RegisterFile.h: + (KJS::RegisterFile::): + * kjs/InternalFunction.h: + (KJS::InternalFunction::InternalFunction): + * kjs/JSFunction.h: + (KJS::JSFunction::JSFunction): + * kjs/ScopeChain.h: + (KJS::ScopeChain::ScopeChain): + * masm/IA32MacroAsm.h: + (KJS::IA32MacroAssembler::): + (KJS::IA32MacroAssembler::emitModRm_opm): + (KJS::IA32MacroAssembler::emitCmpl_i32m): + (KJS::IA32MacroAssembler::emitCallN_r): + +2008-08-28 Sam Weinig + + Reviewed by Mark Rowe. + + Exit instead of crashing in ctiUnsupported and ctiTimedOut. + + * VM/Machine.cpp: + (KJS::ctiUnsupported): + (KJS::ctiTimedOut): + +2008-08-28 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + Implement codegen for op_jsr and op_sret. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile): + * VM/CTI.h: + (KJS::CTI::JSRInfo::JSRInfo): + * masm/IA32MacroAsm.h: + (KJS::IA32MacroAssembler::emitJmpN_m): + (KJS::IA32MacroAssembler::linkAbsoluteAddress): + +2008-08-28 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Initial support for exceptions (throw / catch must occur in same CodeBlock). + + * VM/CTI.cpp: + (KJS::CTI::emitExceptionCheck): + (KJS::CTI::emitCall): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile_pass4_SlowCases): + (KJS::CTI::privateCompile): + * VM/CTI.h: + * VM/CodeBlock.cpp: + (KJS::CodeBlock::nativeExceptionCodeForHandlerVPC): + * VM/CodeBlock.h: + * VM/CodeGenerator.cpp: + (KJS::CodeGenerator::emitCatch): + * VM/Machine.cpp: + (KJS::Machine::throwException): + (KJS::Machine::privateExecute): + (KJS::ctiUnsupported): + (KJS::ctiTimedOut): + (KJS::Machine::cti_op_add): + (KJS::Machine::cti_op_pre_inc): + (KJS::Machine::cti_timeout_check): + (KJS::Machine::cti_op_loop_if_less): + (KJS::Machine::cti_op_put_by_id): + (KJS::Machine::cti_op_get_by_id): + (KJS::Machine::cti_op_instanceof): + (KJS::Machine::cti_op_del_by_id): + (KJS::Machine::cti_op_mul): + (KJS::Machine::cti_op_call): + (KJS::Machine::cti_op_resolve): + (KJS::Machine::cti_op_construct): + (KJS::Machine::cti_op_get_by_val): + (KJS::Machine::cti_op_resolve_func): + (KJS::Machine::cti_op_sub): + (KJS::Machine::cti_op_put_by_val): + (KJS::Machine::cti_op_lesseq): + (KJS::Machine::cti_op_loop_if_true): + (KJS::Machine::cti_op_negate): + (KJS::Machine::cti_op_resolve_skip): + (KJS::Machine::cti_op_div): + (KJS::Machine::cti_op_pre_dec): + (KJS::Machine::cti_op_jless): + (KJS::Machine::cti_op_not): + (KJS::Machine::cti_op_jtrue): + (KJS::Machine::cti_op_post_inc): + (KJS::Machine::cti_op_eq): + (KJS::Machine::cti_op_lshift): + (KJS::Machine::cti_op_bitand): + (KJS::Machine::cti_op_rshift): + (KJS::Machine::cti_op_bitnot): + (KJS::Machine::cti_op_resolve_with_base): + (KJS::Machine::cti_op_mod): + (KJS::Machine::cti_op_less): + (KJS::Machine::cti_op_neq): + (KJS::Machine::cti_op_post_dec): + (KJS::Machine::cti_op_urshift): + (KJS::Machine::cti_op_bitxor): + (KJS::Machine::cti_op_bitor): + (KJS::Machine::cti_op_call_eval): + (KJS::Machine::cti_op_throw): + (KJS::Machine::cti_op_push_scope): + (KJS::Machine::cti_op_stricteq): + (KJS::Machine::cti_op_nstricteq): + (KJS::Machine::cti_op_to_jsnumber): + (KJS::Machine::cti_op_in): + (KJS::Machine::cti_op_del_by_val): + (KJS::Machine::cti_vm_throw): + * VM/Machine.h: + * kjs/ExecState.h: + * masm/IA32MacroAsm.h: + (KJS::IA32MacroAssembler::emitCmpl_i32m): + +2008-08-28 Mark Rowe + + Rubber-stamped by Oliver Hunt. + + Print debugging info to stderr so that run-webkit-tests can capture it. + This makes it easy to check whether test failures are due to unimplemented + op codes, missing support for exceptions, etc. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::printOpcodeOperandTypes): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile_pass4_SlowCases): + (KJS::CTI::privateCompile): + * VM/Machine.cpp: + (KJS::Machine::privateExecute): + (KJS::ctiException): + (KJS::ctiUnsupported): + (KJS::Machine::cti_op_call): + (KJS::Machine::cti_op_resolve): + (KJS::Machine::cti_op_construct): + (KJS::Machine::cti_op_get_by_val): + (KJS::Machine::cti_op_resolve_func): + (KJS::Machine::cti_op_resolve_skip): + (KJS::Machine::cti_op_resolve_with_base): + (KJS::Machine::cti_op_call_eval): + +2008-08-27 Mark Rowe + + Reviewed by Gavin Barraclough and Maciej Stachowiak. + + Fix fast/js/bitwise-and-on-undefined.html. + + A temporary value in the slow path of op_bitand was being stored in edx, but was + being clobbered by emitGetPutArg before we used it. To fix this, emitGetPutArg + now takes a third argument that specifies the scratch register to use when loading + from memory. This allows us to avoid clobbering the temporary in op_bitand. + + * VM/CTI.cpp: + (KJS::CTI::emitGetPutArg): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile_pass4_SlowCases): + * VM/CTI.h: + +2008-08-27 Mark Rowe + + Rubber-stamped by Oliver Hunt. + + Switch CTI on by default. + + * wtf/Platform.h: + +2008-08-27 Mark Rowe + + Reviewed by Oliver Hunt. + + Fix the build of the full WebKit stack. + + * JavaScriptCore.xcodeproj/project.pbxproj: Mark two new headers as private so they can be pulled in from WebCore. + * VM/CTI.h: Fix build issues that show up when compiled with GCC 4.2 as part of WebCore. + * wrec/WREC.h: Ditto. + +2008-08-27 Mark Rowe + + Reviewed by Sam Weinig. + + Implement op_new_error. Does not fix any tests as it is always followed by the unimplemented op_throw. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + * VM/Machine.cpp: + (KJS::Machine::cti_op_new_error): + * VM/Machine.h: + +2008-08-27 Sam Weinig + + Reviewed by Gavin Barraclough and Geoff Garen. + + Implement op_put_getter and op_put_setter. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + * VM/Machine.cpp: + (KJS::Machine::cti_op_put_getter): + (KJS::Machine::cti_op_put_setter): + * VM/Machine.h: + +2008-08-27 Sam Weinig + + Reviewed by Gavin Barraclough and Geoff Garen. + + Implement op_del_by_val fixing 3 mozilla tests. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + * VM/Machine.cpp: + (KJS::Machine::cti_op_del_by_val): + * VM/Machine.h: + +2008-08-27 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Quick & dirty fix to get SamplingTool sampling op_call. + + * VM/SamplingTool.h: + (KJS::SamplingTool::callingHostFunction): + +2008-08-27 Sam Weinig + + Reviewed by Gavin Barraclough and Geoff Garen. + + Fix op_put_by_index. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass2_Main): Use emitPutArgConstant instead of emitGetPutArg + for the property value. + * VM/Machine.cpp: + (KJS::Machine::cti_op_put_by_index): Get the property value from the correct argument. + +2008-08-27 Sam Weinig + + Reviewed by Gavin Barraclough and Geoff Garen. + + Implement op_switch_imm in the CTI fixing 13 mozilla tests. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + * VM/Machine.cpp: + (KJS::Machine::cti_op_switch_imm): + * VM/Machine.h: + +2008-08-27 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Implement op_switch_char in CTI. + + * VM/CTI.cpp: + (KJS::CTI::emitCall): + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile): + * VM/CTI.h: + (KJS::CallRecord::CallRecord): + (KJS::SwitchRecord::SwitchRecord): + * VM/CodeBlock.h: + (KJS::SimpleJumpTable::SimpleJumpTable::ctiForValue): + * VM/Machine.cpp: + (KJS::Machine::cti_op_switch_char): + * VM/Machine.h: + * masm/IA32MacroAsm.h: + (KJS::IA32MacroAssembler::): + (KJS::IA32MacroAssembler::emitJmpN_r): + (KJS::IA32MacroAssembler::getRelocatedAddress): + * wtf/Platform.h: + +2008-08-26 Sam Weinig + + Reviewed by Mark Rowe. + + Implement op_put_by_index to fix 1 mozilla test. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + * VM/Machine.cpp: + (KJS::Machine::cti_op_put_by_index): + * VM/Machine.h: + +2008-08-26 Gavin Barraclough + + Reviewed by Geoff Garen. + + More fixes from Geoff's review. + + * VM/CTI.cpp: + (KJS::CTI::emitGetArg): + (KJS::CTI::emitGetPutArg): + (KJS::CTI::emitPutArg): + (KJS::CTI::emitPutArgConstant): + (KJS::CTI::getConstantImmediateNumericArg): + (KJS::CTI::emitGetCTIParam): + (KJS::CTI::emitPutResult): + (KJS::CTI::emitCall): + (KJS::CTI::emitJumpSlowCaseIfNotImm): + (KJS::CTI::emitJumpSlowCaseIfNotImms): + (KJS::CTI::getDeTaggedConstantImmediate): + (KJS::CTI::emitFastArithDeTagImmediate): + (KJS::CTI::emitFastArithReTagImmediate): + (KJS::CTI::emitFastArithPotentiallyReTagImmediate): + (KJS::CTI::emitFastArithImmToInt): + (KJS::CTI::emitFastArithIntToImmOrSlowCase): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile_pass4_SlowCases): + (KJS::CTI::privateCompile): + * VM/CTI.h: + +2008-08-26 Mark Rowe + + Reviewed by Gavin Barraclough and Geoff Garen. + + Implement op_jmp_scopes to fix 2 Mozilla tests. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + * VM/Machine.cpp: + (KJS::Machine::cti_op_push_new_scope): Update ExecState::m_scopeChain after calling ARG_setScopeChain. + (KJS::Machine::cti_op_jmp_scopes): + * VM/Machine.h: + +2008-08-26 Gavin Barraclough + + Reviewed by Oliver Hunt. + + WebKit Regular Expression Compiler. (set ENABLE_WREC = 1 in Platform.h). + + * JavaScriptCore.xcodeproj/project.pbxproj: + * kjs/regexp.cpp: + * kjs/regexp.h: + * wrec: Added. + * wrec/WREC.cpp: Added. + * wrec/WREC.h: Added. + * wtf/Platform.h: + +2008-08-26 Sam Weinig + + Rubber-stamped by Oliver Hunt. + + Remove bogus assertion. + + * VM/Machine.cpp: + (KJS::Machine::cti_op_del_by_id): + +2008-08-26 Mark Rowe + + Reviewed by Sam Weinig. + + Implement op_push_new_scope and stub out op_catch. This fixes 11 Mozilla tests. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + * VM/Machine.cpp: + (KJS::Machine::cti_op_push_new_scope): + (KJS::Machine::cti_op_catch): + * VM/Machine.h: + +2008-08-26 Mark Rowe + + Reviewed by Sam Weinig. + + Clean up op_resolve_base so that it shares its implementation with the bytecode interpreter. + + * VM/Machine.cpp: + (KJS::inlineResolveBase): + (KJS::resolveBase): + +2008-08-26 Oliver Hunt + + Reviewed by Sam Weinig. + + Add codegen support for op_instanceof, fixing 15 mozilla tests. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + * VM/Machine.cpp: + (KJS::Machine::cti_op_instanceof): + (KJS::Machine::cti_op_del_by_id): + * VM/Machine.h: + * wtf/Platform.h: + +2008-08-26 Gavin Barraclough + + Reviewed by Geoff Garen. + + Fixes for initial review comments. + + * VM/CTI.cpp: + (KJS::CTI::ctiCompileGetArg): + (KJS::CTI::ctiCompileGetPutArg): + (KJS::CTI::ctiCompilePutResult): + (KJS::CTI::ctiCompileCall): + (KJS::CTI::CTI): + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::printOpcodeOperandTypes): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile_pass4_SlowCases): + (KJS::CTI::privateCompile): + * VM/CTI.h: + * VM/Register.h: + * kjs/JSValue.h: + +2008-08-26 Sam Weinig + + Reviewed by Gavin Barraclough and Geoff Garen. + + Fix up exception checking code. + + * VM/Machine.cpp: + (KJS::Machine::cti_op_call): + (KJS::Machine::cti_op_resolve): + (KJS::Machine::cti_op_construct): + (KJS::Machine::cti_op_resolve_func): + (KJS::Machine::cti_op_resolve_skip): + (KJS::Machine::cti_op_resolve_with_base): + (KJS::Machine::cti_op_call_eval): + +2008-08-26 Sam Weinig + + Reviewed by Oliver Hunt. + + Fix slowcase for op_post_inc and op_post_dec fixing 2 mozilla tests. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass4_SlowCases): + +2008-08-26 Mark Rowe + + Reviewed by Sam Weinig. + + Implement op_in, fixing 8 mozilla tests. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + * VM/Machine.cpp: + (KJS::Machine::cti_op_in): + * VM/Machine.h: + +2008-08-26 Mark Rowe + + Rubber-stamped by Oliver Hunt. + + Don't hardcode the size of a Register for op_new_array. Fixes a crash + seen during the Mozilla tests. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass2_Main): + +2008-08-26 Sam Weinig + + Reviewed by Gavin Barraclough and Geoff Garen. + + Add support for op_push_scope and op_pop_scope, fixing 20 mozilla tests. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + * VM/CTI.h: + * VM/Machine.cpp: + (KJS::Machine::cti_op_push_scope): + (KJS::Machine::cti_op_pop_scope): + * VM/Machine.h: + +2008-08-26 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + Add codegen support for op_del_by_id, fixing 49 mozilla tests. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + * VM/Machine.cpp: + (KJS::Machine::cti_op_del_by_id): + * VM/Machine.h: + +2008-08-26 Sam Weinig + + Reviewed by Gavin Barraclough and Geoff Garen. + + Don't hardcode the size of a Register for op_get_scoped_var and op_put_scoped_var + fixing 513 mozilla tests in debug build. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass2_Main): + +2008-08-26 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + Added code generator support for op_loop, fixing around 60 mozilla tests. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + +2008-08-26 Mark Rowe + + Reviewed by Sam Weinig. + + Set -fomit-frame-pointer in the correct location. + + * Configurations/JavaScriptCore.xcconfig: + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-08-26 Gavin Barraclough + + Reviewed by Geoff Garen. + + Inital cut of CTI, Geoff's review fixes to follow. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CTI.cpp: Added. + (KJS::getJCB): + (KJS::CTI::ctiCompileGetArg): + (KJS::CTI::ctiCompileGetPutArg): + (KJS::CTI::ctiCompilePutArg): + (KJS::CTI::ctiCompilePutArgImm): + (KJS::CTI::ctiImmediateNumericArg): + (KJS::CTI::ctiCompileGetCTIParam): + (KJS::CTI::ctiCompilePutResult): + (KJS::CTI::ctiCompileCall): + (KJS::CTI::slowCaseIfNotImm): + (KJS::CTI::slowCaseIfNotImms): + (KJS::CTI::ctiFastArithDeTagConstImmediate): + (KJS::CTI::ctiFastArithDeTagImmediate): + (KJS::CTI::ctiFastArithReTagImmediate): + (KJS::CTI::ctiFastArithPotentiallyReTagImmediate): + (KJS::CTI::ctiFastArithImmToInt): + (KJS::CTI::ctiFastArithIntToImmOrSlowCase): + (KJS::CTI::CTI): + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::ctiCompileAdd): + (KJS::CTI::ctiCompileAddImm): + (KJS::CTI::ctiCompileAddImmNotInt): + (KJS::CTI::TEMP_HACK_PRINT_TYPES): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile_pass3_Link): + (KJS::CTI::privateCompile_pass4_SlowCases): + (KJS::CTI::privateCompile): + * VM/CTI.h: Added. + (KJS::CTI2Result::CTI2Result): + (KJS::CallRecord::CallRecord): + (KJS::JmpTable::JmpTable): + (KJS::SlowCaseEntry::SlowCaseEntry): + (KJS::CTI::compile): + (KJS::CTI::LabelInfo::LabelInfo): + * VM/CodeBlock.h: + (KJS::CodeBlock::CodeBlock): + (KJS::CodeBlock::~CodeBlock): + * VM/Machine.cpp: + (KJS::Machine::execute): + (KJS::Machine::privateExecute): + (KJS::ctiException): + (KJS::ctiUnsupported): + (KJS::ctiTimedOut): + (KJS::Machine::cti_op_end): + (KJS::Machine::cti_op_add): + (KJS::Machine::cti_op_pre_inc): + (KJS::Machine::cti_timeout_check): + (KJS::Machine::cti_op_loop_if_less): + (KJS::Machine::cti_op_new_object): + (KJS::Machine::cti_op_put_by_id): + (KJS::Machine::cti_op_get_by_id): + (KJS::Machine::cti_op_mul): + (KJS::Machine::cti_op_new_func): + (KJS::Machine::cti_op_call): + (KJS::Machine::cti_op_ret): + (KJS::Machine::cti_op_new_array): + (KJS::Machine::cti_op_resolve): + (KJS::Machine::cti_op_construct): + (KJS::Machine::cti_op_get_by_val): + (KJS::Machine::cti_op_resolve_func): + (KJS::Machine::cti_op_sub): + (KJS::Machine::cti_op_put_by_val): + (KJS::Machine::cti_op_lesseq): + (KJS::Machine::cti_op_loop_if_true): + (KJS::Machine::cti_op_negate): + (KJS::Machine::cti_op_resolve_base): + (KJS::Machine::cti_op_resolve_skip): + (KJS::Machine::cti_op_div): + (KJS::Machine::cti_op_pre_dec): + (KJS::Machine::cti_op_jless): + (KJS::Machine::cti_op_not): + (KJS::Machine::cti_op_jtrue): + (KJS::Machine::cti_op_post_inc): + (KJS::Machine::cti_op_eq): + (KJS::Machine::cti_op_lshift): + (KJS::Machine::cti_op_bitand): + (KJS::Machine::cti_op_rshift): + (KJS::Machine::cti_op_bitnot): + (KJS::Machine::cti_op_resolve_with_base): + (KJS::Machine::cti_op_new_func_exp): + (KJS::Machine::cti_op_mod): + (KJS::Machine::cti_op_less): + (KJS::Machine::cti_op_neq): + (KJS::Machine::cti_op_post_dec): + (KJS::Machine::cti_op_urshift): + (KJS::Machine::cti_op_bitxor): + (KJS::Machine::cti_op_new_regexp): + (KJS::Machine::cti_op_bitor): + (KJS::Machine::cti_op_call_eval): + (KJS::Machine::cti_op_throw): + (KJS::Machine::cti_op_get_pnames): + (KJS::Machine::cti_op_next_pname): + (KJS::Machine::cti_op_typeof): + (KJS::Machine::cti_op_stricteq): + (KJS::Machine::cti_op_nstricteq): + (KJS::Machine::cti_op_to_jsnumber): + * VM/Machine.h: + * VM/Register.h: + (KJS::Register::jsValue): + (KJS::Register::getJSValue): + (KJS::Register::codeBlock): + (KJS::Register::scopeChain): + (KJS::Register::i): + (KJS::Register::r): + (KJS::Register::vPC): + (KJS::Register::jsPropertyNameIterator): + * VM/SamplingTool.cpp: + (KJS::): + (KJS::SamplingTool::run): + (KJS::SamplingTool::dump): + * VM/SamplingTool.h: + * kjs/JSImmediate.h: + (KJS::JSImmediate::zeroImmediate): + (KJS::JSImmediate::oneImmediate): + * kjs/JSValue.h: + * kjs/JSVariableObject.h: + (KJS::JSVariableObject::JSVariableObjectData::offsetOf_registers): + (KJS::JSVariableObject::offsetOf_d): + (KJS::JSVariableObject::offsetOf_Data_registers): + * masm: Added. + * masm/IA32MacroAsm.h: Added. + (KJS::JITCodeBuffer::JITCodeBuffer): + (KJS::JITCodeBuffer::putByte): + (KJS::JITCodeBuffer::putShort): + (KJS::JITCodeBuffer::putInt): + (KJS::JITCodeBuffer::getEIP): + (KJS::JITCodeBuffer::start): + (KJS::JITCodeBuffer::getOffset): + (KJS::JITCodeBuffer::reset): + (KJS::JITCodeBuffer::copy): + (KJS::IA32MacroAssembler::): + (KJS::IA32MacroAssembler::emitModRm_rr): + (KJS::IA32MacroAssembler::emitModRm_rm): + (KJS::IA32MacroAssembler::emitModRm_rmsib): + (KJS::IA32MacroAssembler::emitModRm_opr): + (KJS::IA32MacroAssembler::emitModRm_opm): + (KJS::IA32MacroAssembler::IA32MacroAssembler): + (KJS::IA32MacroAssembler::emitInt3): + (KJS::IA32MacroAssembler::emitPushl_r): + (KJS::IA32MacroAssembler::emitPopl_r): + (KJS::IA32MacroAssembler::emitMovl_rr): + (KJS::IA32MacroAssembler::emitAddl_rr): + (KJS::IA32MacroAssembler::emitAddl_i8r): + (KJS::IA32MacroAssembler::emitAddl_i32r): + (KJS::IA32MacroAssembler::emitAddl_mr): + (KJS::IA32MacroAssembler::emitAndl_rr): + (KJS::IA32MacroAssembler::emitAndl_i32r): + (KJS::IA32MacroAssembler::emitCmpl_i8r): + (KJS::IA32MacroAssembler::emitCmpl_rr): + (KJS::IA32MacroAssembler::emitCmpl_rm): + (KJS::IA32MacroAssembler::emitCmpl_i32r): + (KJS::IA32MacroAssembler::emitCmpw_rm): + (KJS::IA32MacroAssembler::emitOrl_rr): + (KJS::IA32MacroAssembler::emitOrl_i8r): + (KJS::IA32MacroAssembler::emitSubl_rr): + (KJS::IA32MacroAssembler::emitSubl_i8r): + (KJS::IA32MacroAssembler::emitSubl_i32r): + (KJS::IA32MacroAssembler::emitSubl_mr): + (KJS::IA32MacroAssembler::emitTestl_i32r): + (KJS::IA32MacroAssembler::emitTestl_rr): + (KJS::IA32MacroAssembler::emitXorl_i8r): + (KJS::IA32MacroAssembler::emitXorl_rr): + (KJS::IA32MacroAssembler::emitSarl_i8r): + (KJS::IA32MacroAssembler::emitSarl_CLr): + (KJS::IA32MacroAssembler::emitShl_i8r): + (KJS::IA32MacroAssembler::emitShll_CLr): + (KJS::IA32MacroAssembler::emitMull_rr): + (KJS::IA32MacroAssembler::emitIdivl_r): + (KJS::IA32MacroAssembler::emitCdq): + (KJS::IA32MacroAssembler::emitMovl_mr): + (KJS::IA32MacroAssembler::emitMovzwl_mr): + (KJS::IA32MacroAssembler::emitMovl_rm): + (KJS::IA32MacroAssembler::emitMovl_i32r): + (KJS::IA32MacroAssembler::emitMovl_i32m): + (KJS::IA32MacroAssembler::emitLeal_mr): + (KJS::IA32MacroAssembler::emitRet): + (KJS::IA32MacroAssembler::JmpSrc::JmpSrc): + (KJS::IA32MacroAssembler::JmpDst::JmpDst): + (KJS::IA32MacroAssembler::emitCall): + (KJS::IA32MacroAssembler::label): + (KJS::IA32MacroAssembler::emitUnlinkedJmp): + (KJS::IA32MacroAssembler::emitUnlinkedJne): + (KJS::IA32MacroAssembler::emitUnlinkedJe): + (KJS::IA32MacroAssembler::emitUnlinkedJl): + (KJS::IA32MacroAssembler::emitUnlinkedJle): + (KJS::IA32MacroAssembler::emitUnlinkedJge): + (KJS::IA32MacroAssembler::emitUnlinkedJae): + (KJS::IA32MacroAssembler::emitUnlinkedJo): + (KJS::IA32MacroAssembler::emitPredictionNotTaken): + (KJS::IA32MacroAssembler::link): + (KJS::IA32MacroAssembler::copy): + * wtf/Platform.h: + +2008-08-26 Oliver Hunt + + RS=Maciej. + + Enabled -fomit-frame-pointer on Release and Production builds, add additional Profiling build config for shark, etc. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +=== Start merge of squirrelfish-extreme === + +2008-09-06 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Fix the Mac Debug build by adding symbols that are exported only in a + Debug configuration. + + * Configurations/JavaScriptCore.xcconfig: + * DerivedSources.make: + * JavaScriptCore.Debug.exp: Added. + * JavaScriptCore.base.exp: Copied from JavaScriptCore.exp. + * JavaScriptCore.exp: Removed. + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-09-05 Darin Adler + + Reviewed by Cameron Zwarich. + + - https://bugs.webkit.org/show_bug.cgi?id=20681 + JSPropertyNameIterator functions need to be inlined + + 1.007x as fast on SunSpider overall + 1.081x as fast on SunSpider math-cordic + + * VM/JSPropertyNameIterator.cpp: Moved functions out of here. + * VM/JSPropertyNameIterator.h: + (KJS::JSPropertyNameIterator::JSPropertyNameIterator): Moved + this into the header and marked it inline. + (KJS::JSPropertyNameIterator::create): Ditto. + (KJS::JSPropertyNameIterator::next): Ditto. + +2008-09-05 Darin Adler + + Reviewed by Geoffrey Garen. + + - fix https://bugs.webkit.org/show_bug.cgi?id=20673 + single-character strings are churning in the Identifier table + + 1.007x as fast on SunSpider overall + 1.167x as fast on SunSpider string-fasta + + * JavaScriptCore.exp: Updated. + * kjs/SmallStrings.cpp: + (KJS::SmallStrings::singleCharacterStringRep): Added. + * kjs/SmallStrings.h: Added singleCharacterStringRep for clients that + need just a UString, not a JSString. + * kjs/identifier.cpp: + (KJS::Identifier::add): Added special cases for single character strings + so that the UString::Rep that ends up in the identifier table is the one + from the single-character string optimization; otherwise we end up having + to look it up in the identifier table over and over again. + (KJS::Identifier::addSlowCase): Ditto. + (KJS::Identifier::checkSameIdentifierTable): Made this function an empty + inline in release builds so that callers don't have to put #ifndef NDEBUG + at each call site. + * kjs/identifier.h: + (KJS::Identifier::add): Removed #ifndef NDEBUG around the calls to + checkSameIdentifierTable. + (KJS::Identifier::checkSameIdentifierTable): Added. Empty inline version + for NDEBUG builds. + +2008-09-05 Mark Rowe + + Build fix. + + * kjs/JSObject.h: Move the inline virtual destructor after a non-inline + virtual function so that the symbol for the vtable is not marked as a + weakly exported symbol. + +2008-09-05 Darin Adler + + Reviewed by Sam Weinig. + + - fix https://bugs.webkit.org/show_bug.cgi?id=20671 + JavaScriptCore string manipulation spends too much time in memcpy + + 1.011x as fast on SunSpider overall + 1.028x as fast on SunSpider string tests + + For small strings, use a loop rather than calling memcpy. The loop can + be faster because there's no function call overhead, and because it can + assume the pointers are aligned instead of checking that. Currently the + threshold is set at 20 characters, based on some testing on one particular + computer. Later we can tune this for various platforms by setting + USTRING_COPY_CHARS_INLINE_CUTOFF appropriately, but it does no great harm + if not perfectly tuned. + + * kjs/ustring.cpp: + (KJS::overflowIndicator): Removed bogus const. + (KJS::maxUChars): Ditto. + (KJS::copyChars): Added. + (KJS::UString::Rep::createCopying): Call copyChars instead of memcpy. + Also eliminated need for const_cast. + (KJS::UString::expandPreCapacity): Ditto. + (KJS::concatenate): Ditto. + (KJS::UString::spliceSubstringsWithSeparators): Ditto. + (KJS::UString::append): Ditto. + +2008-09-05 Kevin McCullough + + Reviewed by Sam and Alexey. + + Make the profiler work with a null exec state. This will allow other + applications start the profiler to get DTrace probes going without + needing a WebView. + + * ChangeLog: + * profiler/ProfileGenerator.cpp: + (KJS::ProfileGenerator::ProfileGenerator): + (KJS::ProfileGenerator::willExecute): + (KJS::ProfileGenerator::didExecute): + * profiler/Profiler.cpp: + (KJS::Profiler::startProfiling): + (KJS::Profiler::stopProfiling): + (KJS::dispatchFunctionToProfiles): + +2008-09-04 Gavin Barraclough + + Reviewed by Geoffrey Garen. + + Fixed an off-by-one error that would cause the StructureIDChain to + be one object too short. + + Can't construct a test case because other factors make this not crash + (yet!). + + * kjs/StructureID.cpp: + (KJS::StructureIDChain::StructureIDChain): + +2008-09-04 Kevin Ollivier + + wx build fixes. + + * JavaScriptCoreSources.bkl: + +2008-09-04 Mark Rowe + + Reviewed by Eric Seidel. + + Fix https://bugs.webkit.org/show_bug.cgi?id=20639. + Bug 20639: ENABLE_DASHBOARD_SUPPORT does not need to be a FEATURE_DEFINE + + * Configurations/JavaScriptCore.xcconfig: Remove ENABLE_DASHBOARD_SUPPORT from FEATURE_DEFINES. + * wtf/Platform.h: Set ENABLE_DASHBOARD_SUPPORT for PLATFORM(MAC). + +2008-09-04 Adele Peterson + + Build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.vcproj/jsc/jsc.vcproj: + +2008-09-04 Mark Rowe + + Mac build fix. + + * kjs/config.h: Only check the value of HAVE_CONFIG_H if it is defined. + +2008-09-04 Marco Barisione + + Reviewed by Eric Seidel. + + http://bugs.webkit.org/show_bug.cgi?id=20380 + [GTK][AUTOTOOLS] Include autotoolsconfig.h from config.h + + * kjs/config.h: Include the configuration header generated by + autotools if available. + +2008-09-04 Tor Arne Vestbø + + Reviewed by Simon. + + Fix the QtWebKit build to match changes in r36016 + + * JavaScriptCore.pri: + +2008-09-04 Mark Rowe + + Fix the 64-bit build. + + * VM/CodeBlock.cpp: + (KJS::CodeBlock::printStructureID): Store the instruction offset into an unsigned local + to avoid a warning related to format specifiers. + (KJS::CodeBlock::printStructureIDs): Ditto. + +2008-09-04 Cameron Zwarich + + Rubber-stamped by Oliver Hunt. + + Correct the spelling of 'entryIndices'. + + * kjs/PropertyMap.cpp: + (KJS::PropertyMap::get): + (KJS::PropertyMap::getLocation): + (KJS::PropertyMap::put): + (KJS::PropertyMap::insert): + (KJS::PropertyMap::remove): + (KJS::PropertyMap::checkConsistency): + * kjs/PropertyMap.h: + (KJS::PropertyMapHashTable::entries): + (KJS::PropertyMap::getOffset): + (KJS::PropertyMap::putOffset): + (KJS::PropertyMap::offsetForTableLocation): + +2008-09-03 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Fixed REGRESSION: Crash occurs at + KJS::Machine::privateExecute() when attempting to load my Mobile Gallery + (http://www.me.com/gallery/#home) + + also + + https://bugs.webkit.org/show_bug.cgi?id=20633 Crash in privateExecute + @ cs.byu.edu + + The underlying problem was that we would cache prototype properties + even if the prototype was a dictionary. + + The fix is to transition a prototype back from dictionary to normal + status when an opcode caches access to it. (This is better than just + refusing to cache, since a heavily accessed prototype is almost + certainly not a true dictionary.) + + * VM/Machine.cpp: + (KJS::Machine::tryCacheGetByID): + * kjs/JSObject.h: + +2008-09-03 Eric Seidel + + Reviewed by Sam. + + Clean up Platform.h and add PLATFORM(CHROMIUM), PLATFORM(SKIA) and USE(V8_BINDINGS) + + * Configurations/JavaScriptCore.xcconfig: add missing ENABLE_* + * wtf/ASCIICType.h: include since it depends on it. + * wtf/Platform.h: + +2008-09-03 Kevin McCullough + + Reviewed by Tim. + + Remove the rest of the "zombie" code from the profiler. + - There is no longer a need for the ProfilerClient callback mechanism. + + * API/JSProfilerPrivate.cpp: + (JSStartProfiling): + * JavaScriptCore.exp: + * profiler/HeavyProfile.h: + * profiler/ProfileGenerator.cpp: + (KJS::ProfileGenerator::create): + (KJS::ProfileGenerator::ProfileGenerator): + * profiler/ProfileGenerator.h: + (KJS::ProfileGenerator::profileGroup): + * profiler/Profiler.cpp: + (KJS::Profiler::startProfiling): + (KJS::Profiler::stopProfiling): Immediately return the profile when + stopped instead of using a callback. + * profiler/Profiler.h: + * profiler/TreeProfile.h: + +2008-09-03 Adele Peterson + + Build fix. + + * wtf/win/MainThreadWin.cpp: + +2008-09-02 Kevin McCullough + + Reviewed by Darin and Tim. + + Remove most of the "zombie" mode from the profiler. Next we will need + to remove the client callback mechanism in profiles. + + - This simplifies the code, leverages the recent changes I've made in + getting line numbers from SquirrelFish, and is a slight speed + improvement on SunSpider. + - Also the "zombie" mode was a constant source of odd edge cases and + obscure bugs so it's good to remove since all of its issues may not have + been found. + + * API/JSProfilerPrivate.cpp: No need to call didFinishAllExecution() any + more. + (JSEndProfiling): + * JavaScriptCore.exp: Export the new signature of retrieveLastCaller() + * VM/Machine.cpp: + (KJS::Machine::execute): No need to call didFinishAllExecution() any + more. + (KJS::Machine::retrieveCaller): Now operates on InternalFunctions now + since the RegisterFile is no longer guaranteeded to store only + JSFunctions + (KJS::Machine::retrieveLastCaller): Now also retrieve the function's + name + (KJS::Machine::callFrame): A result of changing retrieveCaller() + * VM/Machine.h: + * VM/Register.h: + * kjs/JSGlobalObject.cpp: + (KJS::JSGlobalObject::~JSGlobalObject): + * kjs/nodes.h: + * profiler/ProfileGenerator.cpp: + (KJS::ProfileGenerator::create): Now pass the original exec and get the + global exec and client when necessary. We need the original exec so we + can have the stack frame where profiling started. + (KJS::ProfileGenerator::ProfileGenerator): ditto. + (KJS::ProfileGenerator::addParentForConsoleStart): This is where the + parent to star of the profile is added, if there is one. + (KJS::ProfileGenerator::willExecute): Remove uglyness! + (KJS::ProfileGenerator::didExecute): Ditto! + (KJS::ProfileGenerator::stopProfiling): + (KJS::ProfileGenerator::removeProfileStart): Use a better way to find + and remove the function we are looking for. + (KJS::ProfileGenerator::removeProfileEnd): Ditto. + * profiler/ProfileGenerator.h: + (KJS::ProfileGenerator::client): + * profiler/ProfileNode.cpp: + (KJS::ProfileNode::removeChild): Add a better way to remove a child from + a ProfileNode. + (KJS::ProfileNode::stopProfiling): + (KJS::ProfileNode::debugPrintData): Modified a debug-only diagnostic + function to be sane. + * profiler/ProfileNode.h: + * profiler/Profiler.cpp: Change to pass the original exec state. + (KJS::Profiler::startProfiling): + (KJS::Profiler::stopProfiling): + (KJS::Profiler::willExecute): + (KJS::Profiler::didExecute): + (KJS::Profiler::createCallIdentifier): + * profiler/Profiler.h: + +2008-09-01 Alexey Proskuryakov + + Reviewed by Darin Adler. + + Implement callOnMainThreadAndWait(). + + This will be useful when a background thread needs to perform UI calls synchronously + (e.g. an openDatabase() call cannot return until the user answers to a confirmation dialog). + + * wtf/MainThread.cpp: + (WTF::FunctionWithContext::FunctionWithContext): Added a ThreadCondition member. When + non-zero, the condition is signalled after the function is called. + (WTF::mainThreadFunctionQueueMutex): Renamed from functionQueueMutex, sinc this is no longer + static. Changed to be initialized from initializeThreading() to avoid lock contention. + (WTF::initializeMainThread): On non-Windows platforms, just call mainThreadFunctionQueueMutex. + (WTF::dispatchFunctionsFromMainThread): Signal synchronous calls when done. + (WTF::callOnMainThread): Updated for functionQueueMutex rename. + (WTF::callOnMainThreadAndWait): Added. + + * wtf/MainThread.h: Added callOnMainThreadAndWait(); initializeMainThread() now exists on + all platforms. + + * wtf/win/MainThreadWin.cpp: (WTF::initializeMainThread): Added a callOnMainThreadAndWait() + call to initialize function queue mutex. + + * wtf/ThreadingGtk.cpp: (WTF::initializeThreading): + * wtf/ThreadingPthreads.cpp: (WTF::initializeThreading): + * wtf/ThreadingQt.cpp: (WTF::initializeThreading): + Only initialize mainThreadIdentifier on non-Darwin platforms. It was not guaranteed to be + accurate on Darwin. + +2008-09-03 Geoffrey Garen + + Reviewed by Darin Adler. + + Use isUndefinedOrNull() instead of separate checks for each in op_eq_null + and op_neq_null. + + * VM/Machine.cpp: + (KJS::Machine::privateExecute): + +2008-09-02 Csaba Osztrogonac + + Reviewed by Darin Adler. + + Bug 20296: OpcodeStats doesn't build on platforms which don't have mergesort(). + + + * VM/Opcode.cpp: + (KJS::OpcodeStats::~OpcodeStats): mergesort() replaced with qsort() + +2008-09-02 Geoffrey Garen + + Reviewed by Oliver Hunt. + + Fast path for array.length and string.length. + + SunSpider says 0.5% faster. + +2008-09-02 Geoffrey Garen + + Reviewed by Anders Carlsson. + + Added optimized paths for comparing to null. + + SunSpider says 0.5% faster. + +2008-09-02 Geoffrey Garen + + Reviewed by Sam Weinig. + + Changed jsDriver.pl to dump the exact text you would need in order to + reproduce a test result. This enables a fast workflow where you copy + and paste a test failure in the terminal. + + * tests/mozilla/jsDriver.pl: + +2008-09-02 Geoffrey Garen + + Reviewed by Sam Weinig. + + Implemented the rest of Darin's review comments for the 09-01 inline + caching patch. + + SunSpider says 0.5% faster, but that seems like noise. + + * JavaScriptCore.xcodeproj/project.pbxproj: Put PutPropertySlot into + its own file, and added BatchedTransitionOptimizer. + + * VM/CodeBlock.cpp: + (KJS::CodeBlock::~CodeBlock): Use array indexing instead of a pointer + iterator. + + * VM/CodeGenerator.cpp: + (KJS::CodeGenerator::CodeGenerator): Used BatchedTransitionOptimizer to + make batched put and remove for declared variables fast, without forever + pessimizing the global object. Removed the old getDirect/removeDirect hack + that tried to do the same in a more limited way. + + * VM/CodeGenerator.h: Moved IdentifierRepHash to the KJS namespace since + it doesn't specialize anything in WTF. + + * VM/Machine.cpp: + (KJS::Machine::Machine): Nixed the DummyConstruct tag because it was + confusingly named. + + (KJS::Machine::execute): Used BatchedTransitionOptimizer, as above. Fixed + up some comments. + + (KJS::cachePrototypeChain): Cast to JSObject*, since it's more specific. + + (KJS::Machine::tryCachePutByID): Use isNull() instead of comparing to + jsNull(), since isNull() leaves more options open for the future. + (KJS::Machine::tryCacheGetByID): ditto + (KJS::Machine::privateExecute): ditto + + * VM/SamplingTool.cpp: + (KJS::SamplingTool::dump): Use C++-style cast, to match our style + guidelines. + + * kjs/BatchedTransitionOptimizer.h: Added. New class that allows host + code to add a batch of properties to an object in an efficient way. + + * kjs/JSActivation.cpp: Use isNull(), as above. + + * kjs/JSArray.cpp: Get rid of DummyConstruct tag, as above. + * kjs/JSArray.h: + + * kjs/JSGlobalData.cpp: Nixed two unused StructureIDs. + * kjs/JSGlobalData.h: + + * kjs/JSImmediate.cpp: Use isNull(), as above. + + * kjs/JSObject.cpp: + (KJS::JSObject::mark): Moved mark tracing code elsewhere, to make this + function more readable. + + (KJS::JSObject::put): Use isNull(), as above. + + (KJS::JSObject::createInheritorID): Return a raw pointer, since the + object is owned by a data member, not necessarily the caller. + * kjs/JSObject.h: + + * kjs/JSString.cpp: Use isNull(), as above. + + * kjs/PropertyMap.h: Updated to use PropertySlot::invalidOffset. + + * kjs/PropertySlot.h: Changed KJS_INVALID_OFFSET to WTF::notFound + because C macros are so 80's. + + * kjs/PutPropertySlot.h: Added. Split out of PropertySlot.h. Also renamed + PutPropertySlot::SlotType to PutPropertySlot::Type, and slotBase to base, + since "slot" was redundant. + + * kjs/StructureID.cpp: Added a new transition *away* from dictionary + status, to support BatchedTransitionOptimizer. + + (KJS::StructureIDChain::StructureIDChain): No need to store m_size as + a data member, so keep it in a local, which might be faster. + * kjs/StructureID.h: + + * kjs/SymbolTable.h: Moved IdentifierRepHash to KJS namespace, as above. + * kjs/ustring.h: + +2008-09-02 Adam Roben + + Windows build fixes + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add + StructureID.{cpp,h} to the project. Also let VS reorder this file. + * VM/CodeBlock.cpp: Include StringExtras so that snprintf will be + defined on Windows. + +2008-09-01 Sam Weinig + + Fix release build. + + * JavaScriptCore.exp: + +2008-09-01 Jan Michael Alonzo + + Reviewed by Oliver Hunt. + + Gtk buildfix + + * GNUmakefile.am: + * kjs/PropertyMap.cpp: rename Identifier.h to identifier.h + * kjs/StructureID.cpp: include JSObject.h + +2008-09-01 Geoffrey Garen + + Reviewed by Darin Adler. + + First cut at inline caching for access to vanilla JavaScript properties. + + SunSpider says 4% faster. Tests heavy on dictionary-like access have + regressed a bit -- we have a lot of room to improve in this area, + but this patch is over-ripe as-is. + + JSCells now have a StructureID that uniquely identifies their layout, + and holds their prototype. + + JSValue::put takes a PropertySlot& argument, so it can fill in details + about where it put a value, for the sake of caching. + + * VM/CodeGenerator.cpp: + (KJS::CodeGenerator::CodeGenerator): Avoid calling removeDirect if we + can, since it disables inline caching in the global object. This can + probably improve in the future. + + * kjs/JSGlobalObject.cpp: Nixed reset(), since it complicates caching, and + wasn't really necessary. + + * kjs/JSObject.cpp: Tweaked getter / setter behavior not to rely on the + IsGetterSetter flag, since the flag was buggy. This is necessary in order + to avoid accidentally accessing a getter / setter as a normal property. + + Also changed getter / setter creation to honor ReadOnly, matching Mozilla. + + * kjs/PropertyMap.cpp: Nixed clear(), since it complicates caching and + isn't necessary. + + * kjs/Shell.cpp: Moved SamplingTool dumping outside the loop. This allows + you to aggregate sampling of multiple files (or the same file repeatedly), + which helped me track down regressions. + + * kjs/ustring.h: Moved IdentifierRepHash here to share it. + +2008-09-01 Geoffrey Garen + + Reviewed by Sam Weinig. + + Eagerly allocate the Math object's numeric constants. This avoids + constantly reallocating them in loops, and also ensures that the Math + object will not use the single property optimization, which makes + properties ineligible for caching. + + SunSpider reports a small speedup, in combination with inline caching. + + * kjs/MathObject.cpp: + (KJS::MathObject::MathObject): + (KJS::MathObject::getOwnPropertySlot): + * kjs/MathObject.h: + +2008-09-01 Jan Michael Alonzo + + Gtk build fix, not reviewed. + + * GNUmakefile.am: Add SmallStrings.cpp in both release and debug builds + +2008-08-31 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Bug 20577: REGRESSION (r36006): Gmail is broken + + + r36006 changed stringProtoFuncSubstr() so that it is uses the more + efficient jsSubstring(), rather than using UString::substr() and then + calling jsString(). However, the change did not account for the case + where the start and the length of the substring extend beyond the length + of the original string. This patch corrects that. + + * kjs/StringPrototype.cpp: + (KJS::stringProtoFuncSubstr): + +2008-08-31 Simon Hausmann + + Unreviewed build fix (with gcc 4.3) + + * kjs/ustring.h: Properly forward declare operator== for UString and + the the concatenate functions inside the KJS namespace. + +2008-08-30 Darin Adler + + Reviewed by Maciej. + + - https://bugs.webkit.org/show_bug.cgi?id=20333 + improve JavaScript speed when handling single-character strings + + 1.035x as fast on SunSpider overall. + 1.127x as fast on SunSpider string tests. + 1.910x as fast on SunSpider string-base64 test. + + * API/JSObjectRef.cpp: + (JSObjectMakeFunction): Removed unneeded explicit construction of UString. + + * GNUmakefile.am: Added SmallStrings.h and SmallStrings.cpp. + * JavaScriptCore.pri: Ditto. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + Ditto. + * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. + * JavaScriptCoreSources.bkl: Ditto. + + * JavaScriptCore.exp: Updated. + + * VM/Machine.cpp: + (KJS::jsAddSlowCase): Changed to use a code path that doesn't involve + a UString constructor. This avoids an extra jump caused by the "in charge" + vs. "not in charge" constructors. + (KJS::jsAdd): Ditto. + (KJS::jsTypeStringForValue): Adopted jsNontrivialString. + + * kjs/ArrayPrototype.cpp: + (KJS::arrayProtoFuncToString): Adopted jsEmptyString. + (KJS::arrayProtoFuncToLocaleString): Ditto. + (KJS::arrayProtoFuncJoin): Ditto. + * kjs/BooleanPrototype.cpp: + (KJS::booleanProtoFuncToString): Adopted jsNontrivialString. + * kjs/DateConstructor.cpp: + (KJS::callDate): Ditto. + * kjs/DatePrototype.cpp: + (KJS::formatLocaleDate): Adopted jsEmptyString and jsNontrivialString. + (KJS::dateProtoFuncToString): Ditto. + (KJS::dateProtoFuncToUTCString): Ditto. + (KJS::dateProtoFuncToDateString): Ditto. + (KJS::dateProtoFuncToTimeString): Ditto. + (KJS::dateProtoFuncToLocaleString): Ditto. + (KJS::dateProtoFuncToLocaleDateString): Ditto. + (KJS::dateProtoFuncToLocaleTimeString): Ditto. + (KJS::dateProtoFuncToGMTString): Ditto. + + * kjs/ErrorPrototype.cpp: + (KJS::ErrorPrototype::ErrorPrototype): Ditto. + (KJS::errorProtoFuncToString): Ditto. + + * kjs/JSGlobalData.h: Added SmallStrings. + + * kjs/JSString.cpp: + (KJS::jsString): Eliminated the overload that takes a const char*. + Added code to use SmallStrings to get strings of small sizes rather + than creating a new JSString every time. + (KJS::jsSubstring): Added. Used when creating a string from a substring + to avoid creating a JSString in cases where the substring will end up + empty or as one character. + (KJS::jsOwnedString): Added the same code as in jsString. + + * kjs/JSString.h: Added new functions jsEmptyString, jsSingleCharacterString, + jsSingleCharacterSubstring, jsSubstring, and jsNontrivialString for various + cases where we want to create JSString, and want special handling for small + strings. + (KJS::JSString::JSString): Added an overload that takes a PassRefPtr of + a UString::Rep so you don't have to construct a UString; PassRefPtr can be + more efficient. + (KJS::jsEmptyString): Added. + (KJS::jsSingleCharacterString): Added. + (KJS::jsSingleCharacterSubstring): Added. + (KJS::jsNontrivialString): Added. + (KJS::JSString::getIndex): Adopted jsSingleCharacterSubstring. + (KJS::JSString::getStringPropertySlot): Ditto. + + * kjs/NumberPrototype.cpp: + (KJS::numberProtoFuncToFixed): Adopted jsNontrivialString. + (KJS::numberProtoFuncToExponential): Ditto. + (KJS::numberProtoFuncToPrecision): Ditto. + + * kjs/ObjectPrototype.cpp: + (KJS::objectProtoFuncToLocaleString): Adopted toThisJSString. + (KJS::objectProtoFuncToString): Adopted jsNontrivialString. + + * kjs/RegExpConstructor.cpp: Separated the lastInput value that's used + with the lastOvector to return matches from the input value that can be + changed via JavaScript. They will be equal in many cases, but not all. + (KJS::RegExpConstructor::performMatch): Set input. + (KJS::RegExpMatchesArray::RegExpMatchesArray): Ditto. + (KJS::RegExpMatchesArray::fillArrayInstance): Adopted jsSubstring. Also, + use input rather than lastInput in the appropriate place. + (KJS::RegExpConstructor::getBackref): Adopted jsSubstring and jsEmptyString. + Added code to handle the case where there is no backref -- before this + depended on range checking in UString::substr which is not present in + jsSubstring. + (KJS::RegExpConstructor::getLastParen): Ditto. + (KJS::RegExpConstructor::getLeftContext): Ditto. + (KJS::RegExpConstructor::getRightContext): Ditto. + (KJS::RegExpConstructor::getValueProperty): Use input rather than lastInput. + Also adopt jsEmptyString. + (KJS::RegExpConstructor::putValueProperty): Ditto. + (KJS::RegExpConstructor::input): Ditto. + + * kjs/RegExpPrototype.cpp: + (KJS::regExpProtoFuncToString): Adopt jsNonTrivialString. Also changed to + use UString::append to append single characters rather than using += and + a C-style string. + + * kjs/SmallStrings.cpp: Added. + (KJS::SmallStringsStorage::SmallStringsStorage): Construct the + buffer and UString::Rep for all 256 single-character strings for + the U+0000 through U+00FF. This covers all the values used in + the base64 test as well as most values seen elsewhere on the web + as well. It's possible that later we might fix this to only work + for U+0000 through U+007F but the others are used quite a bit in + the current version of the base64 test. + (KJS::SmallStringsStorage::~SmallStringsStorage): Free memory. + (KJS::SmallStrings::SmallStrings): Create a set of small strings, + initially not created; created later when they are used. + (KJS::SmallStrings::~SmallStrings): Deallocate. Not left compiler + generated because the SmallStringsStorage class's destructor needs + to be visible. + (KJS::SmallStrings::mark): Mark all the strings. + (KJS::SmallStrings::createEmptyString): Create a cell for the + empty string. Called only the first time. + (KJS::SmallStrings::createSingleCharacterString): Create a cell + for one of the single-character strings. Called only the first time. + * kjs/SmallStrings.h: Added. + + * kjs/StringConstructor.cpp: + (KJS::stringFromCharCodeSlowCase): Factored out of strinFromCharCode. + Only used for cases where the caller does not pass exactly one argument. + (KJS::stringFromCharCode): Adopted jsSingleCharacterString. + (KJS::callStringConstructor): Adopted jsEmptyString. + + * kjs/StringObject.cpp: + (KJS::StringObject::StringObject): Adopted jsEmptyString. + + * kjs/StringPrototype.cpp: + (KJS::stringProtoFuncReplace): Adopted jsSubstring. + (KJS::stringProtoFuncCharAt): Adopted jsEmptyString and + jsSingleCharacterSubstring and also added a special case when the + index is an immediate number to avoid conversion to and from floating + point, since that's the common case. + (KJS::stringProtoFuncCharCodeAt): Ditto. + (KJS::stringProtoFuncMatch): Adopted jsSubstring and jsEmptyString. + (KJS::stringProtoFuncSlice): Adopted jsSubstring and + jsSingleCharacterSubstring. Also got rid of some unneeded locals and + removed unneeded code to set the length property of the array, since it + is automatically updated as values are added to the array. + (KJS::stringProtoFuncSplit): Adopted jsEmptyString. + (KJS::stringProtoFuncSubstr): Adopted jsSubstring. + (KJS::stringProtoFuncSubstring): Ditto. + + * kjs/collector.cpp: + (KJS::Heap::collect): Added a call to mark SmallStrings. + + * kjs/ustring.cpp: + (KJS::UString::expandedSize): Made this a static member function since + it doesn't need to look at any data members. + (KJS::UString::expandCapacity): Use a non-inline function, makeNull, to + set the rep to null in failure cases. This avoids adding a PIC branch for + the normal case when there is no failure. + (KJS::UString::expandPreCapacity): Ditto. + (KJS::UString::UString): Ditto. + (KJS::concatenate): Refactored the concatenation constructor into this + separate function. Calling the concatenation constructor was leading to + an extra branch because of the in-charge vs. not-in-charge versions not + both being inlined, and this was showing up as nearly 1% on Shark. Also + added a special case for when the second string is a single character, + since it's a common idiom to build up a string that way and we can do + things much more quickly, without involving memcpy for example. Also + adopted the non-inline function, nullRep, for the same reason given for + makeNull above. + (KJS::UString::append): Adopted makeNull for failure cases. + (KJS::UString::operator=): Ditto. + (KJS::UString::toDouble): Added a special case for converting single + character strings to numbers. We're doing this a ton of times while + running the base64 test. + (KJS::operator==): Added special cases so we can compare single-character + strings without calling memcmp. Later we might want to special case other + short lengths similarly. + (KJS::UString::makeNull): Added. + (KJS::UString::nullRep): Added. + * kjs/ustring.h: Added declarations for the nullRep and makeNull. Changed + expandedSize to be a static member function. Added a declaration of the + concatenate function. Removed the concatenation constructor. Rewrote + operator+ to use the concatenate function. + +2008-08-29 Anders Carlsson + + Build fix. + + * VM/Machine.cpp: + (KJS::getCPUTime): + +2008-08-29 Anders Carlsson + + Reviewed by Darin Adler. + + + When a machine is under heavy load, the Slow Script dialog often comes up many times and just gets in the way + + Instead of using clock time, use the CPU time spent executing the current thread when + determining if the script has been running for too long. + + * VM/Machine.cpp: + (KJS::getCPUTime): + (KJS::Machine::checkTimeout): + +2008-08-28 Cameron Zwarich + + Rubber-stamped by Sam Weinig. + + Change 'term' to 'expr' in variable names to standardize terminology. + + * kjs/nodes.cpp: + (KJS::BinaryOpNode::emitCode): + (KJS::ReverseBinaryOpNode::emitCode): + (KJS::ThrowableBinaryOpNode::emitCode): + * kjs/nodes.h: + (KJS::BinaryOpNode::BinaryOpNode): + (KJS::ReverseBinaryOpNode::ReverseBinaryOpNode): + (KJS::MultNode::): + (KJS::DivNode::): + (KJS::ModNode::): + (KJS::AddNode::): + (KJS::SubNode::): + (KJS::LeftShiftNode::): + (KJS::RightShiftNode::): + (KJS::UnsignedRightShiftNode::): + (KJS::LessNode::): + (KJS::GreaterNode::): + (KJS::LessEqNode::): + (KJS::GreaterEqNode::): + (KJS::ThrowableBinaryOpNode::): + (KJS::InstanceOfNode::): + (KJS::InNode::): + (KJS::EqualNode::): + (KJS::NotEqualNode::): + (KJS::StrictEqualNode::): + (KJS::NotStrictEqualNode::): + (KJS::BitAndNode::): + (KJS::BitOrNode::): + (KJS::BitXOrNode::): + * kjs/nodes2string.cpp: + (KJS::MultNode::streamTo): + (KJS::DivNode::streamTo): + (KJS::ModNode::streamTo): + (KJS::AddNode::streamTo): + (KJS::SubNode::streamTo): + (KJS::LeftShiftNode::streamTo): + (KJS::RightShiftNode::streamTo): + (KJS::UnsignedRightShiftNode::streamTo): + (KJS::LessNode::streamTo): + (KJS::GreaterNode::streamTo): + (KJS::LessEqNode::streamTo): + (KJS::GreaterEqNode::streamTo): + (KJS::InstanceOfNode::streamTo): + (KJS::InNode::streamTo): + (KJS::EqualNode::streamTo): + (KJS::NotEqualNode::streamTo): + (KJS::StrictEqualNode::streamTo): + (KJS::NotStrictEqualNode::streamTo): + (KJS::BitAndNode::streamTo): + (KJS::BitXOrNode::streamTo): + (KJS::BitOrNode::streamTo): + +2008-08-28 Alp Toker + + GTK+ dist/build fix. List newly added header files. + + * GNUmakefile.am: + +2008-08-28 Sam Weinig + + Reviewed by Oliver Hunt. + + Change to throw a ReferenceError at runtime instead of a ParseError + at parse time, when the left hand side expression of a for-in statement + is not an lvalue. + + * kjs/grammar.y: + * kjs/nodes.cpp: + (KJS::ForInNode::emitCode): + +2008-08-28 Alexey Proskuryakov + + Not reviewed, build fix (at least for OpenBSD, posssibly more). + + https://bugs.webkit.org/show_bug.cgi?id=20545 + missing #include in JavaScriptCore/VM/SamplingTool.cpp + + * VM/SamplingTool.cpp: add the missing include. + +2008-08-26 Kevin McCullough + + Reviewed by Geoff and Cameron. + + Hitting assertion in Register::codeBlock when + loading facebook (20516). + + - This was a result of my line numbers change. After a host function is + called the stack does not get reset correctly. + - Oddly this also appears to be a slight speedup on SunSpider. + + * VM/Machine.cpp: + (KJS::Machine::privateExecute): + +2008-08-26 Alexey Proskuryakov + + Reviewed by Geoff and Tim. + + Export new API methods. + + * JavaScriptCore.exp: + +2008-08-25 Kevin McCullough + + Reviewed by Geoff, Tim and Mark. + + JSProfiler: It would be nice if the profiles + in the console said what file and line number they came from + - Lay the foundation for getting line numbers and other data from the + JavaScript engine. With the cleanup in kjs/ExecState this is actually + a slight performance improvement. + + * JavaScriptCore.exp: Export retrieveLastCaller() for WebCore. + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/Machine.cpp: Now Host and JS functions set a call frame on the + exec state, so this and the profiler code were pulled out of the + branches. + (KJS::Machine::privateExecute): + (KJS::Machine::retrieveLastCaller): This get's the lineNumber, sourceID + and sourceURL for the previously called function. + * VM/Machine.h: + * kjs/ExecState.cpp: Remove references to JSFunction since it's not used + anywhere. + * kjs/ExecState.h: + +2008-08-25 Alexey Proskuryakov + + Reviewed by Darin Adler. + + Ensure that JSGlobalContextRelease() performs garbage collection, even if there are other + contexts in the current context's group. + + This is only really necessary when the last reference is released, but there is no way to + determine that, and no harm in collecting slightly more often. + + * API/JSContextRef.cpp: (JSGlobalContextRelease): Explicitly collect the heap if it is not + being destroyed. + +2008-08-24 Cameron Zwarich + + Reviewed by Oliver Hunt. + + Bug 20093: JSC shell does not clear exceptions after it executes toString on an expression + + + Clear exceptions after evaluating any code in the JSC shell. We do not + report exceptions that are caused by calling toString on the final + valued, but at least we avoid incorrect behaviour. + + Also, print any exceptions that occurred while evaluating code at the + interactive prompt, not just while evaluating code from a file. + + * kjs/Shell.cpp: + (runWithScripts): + (runInteractive): + +2008-08-24 Cameron Zwarich + + Reviewed by Oliver. + + Remove an unnecessary RefPtr to a RegisterID. + + * kjs/nodes.cpp: + (KJS::DeleteBracketNode::emitCode): + +2008-08-24 Mark Rowe + + Reviewed by Oliver Hunt. + + Use the correct version number for when JSGlobalContextCreate was introduced. + + * API/JSContextRef.h: + +2008-08-23 Cameron Zwarich + + Rubber-stamped by Mark Rowe. + + Remove modelines. + + * API/APICast.h: + * API/JSBase.cpp: + * API/JSCallbackConstructor.cpp: + * API/JSCallbackConstructor.h: + * API/JSCallbackFunction.cpp: + * API/JSCallbackFunction.h: + * API/JSCallbackObject.cpp: + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + * API/JSClassRef.cpp: + * API/JSContextRef.cpp: + * API/JSObjectRef.cpp: + * API/JSProfilerPrivate.cpp: + * API/JSStringRef.cpp: + * API/JSStringRefBSTR.cpp: + * API/JSStringRefCF.cpp: + * API/JSValueRef.cpp: + * API/tests/JSNode.c: + * API/tests/JSNode.h: + * API/tests/JSNodeList.c: + * API/tests/JSNodeList.h: + * API/tests/Node.c: + * API/tests/Node.h: + * API/tests/NodeList.c: + * API/tests/NodeList.h: + * API/tests/minidom.c: + * API/tests/minidom.js: + * API/tests/testapi.c: + * API/tests/testapi.js: + * JavaScriptCore.pro: + * kjs/FunctionConstructor.h: + * kjs/FunctionPrototype.h: + * kjs/JSArray.h: + * kjs/JSString.h: + * kjs/JSWrapperObject.cpp: + * kjs/NumberConstructor.h: + * kjs/NumberObject.h: + * kjs/NumberPrototype.h: + * kjs/lexer.h: + * kjs/lookup.h: + * wtf/Assertions.cpp: + * wtf/Assertions.h: + * wtf/HashCountedSet.h: + * wtf/HashFunctions.h: + * wtf/HashIterators.h: + * wtf/HashMap.h: + * wtf/HashSet.h: + * wtf/HashTable.h: + * wtf/HashTraits.h: + * wtf/ListHashSet.h: + * wtf/ListRefPtr.h: + * wtf/Noncopyable.h: + * wtf/OwnArrayPtr.h: + * wtf/OwnPtr.h: + * wtf/PassRefPtr.h: + * wtf/Platform.h: + * wtf/RefPtr.h: + * wtf/RefPtrHashMap.h: + * wtf/RetainPtr.h: + * wtf/UnusedParam.h: + * wtf/Vector.h: + * wtf/VectorTraits.h: + * wtf/unicode/Unicode.h: + * wtf/unicode/icu/UnicodeIcu.h: + +2008-08-22 Cameron Zwarich + + Reviewed by Oliver. + + Some cleanup to match our coding style. + + * VM/CodeGenerator.h: + * VM/Machine.cpp: + (KJS::Machine::privateExecute): + * kjs/ExecState.cpp: + * kjs/ExecState.h: + * kjs/completion.h: + * kjs/identifier.cpp: + (KJS::Identifier::equal): + (KJS::CStringTranslator::hash): + (KJS::CStringTranslator::equal): + (KJS::CStringTranslator::translate): + (KJS::UCharBufferTranslator::equal): + (KJS::UCharBufferTranslator::translate): + (KJS::Identifier::remove): + * kjs/operations.h: + +2008-08-20 Alexey Proskuryakov + + Windows build fix. + + * API/WebKitAvailability.h: Define DEPRECATED_ATTRIBUTE. + +2008-08-19 Alexey Proskuryakov + + Reviewed by Geoff Garen. + + Bring back shared JSGlobalData and implicit locking, because too many clients rely on it. + + * kjs/JSGlobalData.cpp: + (KJS::JSGlobalData::~JSGlobalData): + (KJS::JSGlobalData::JSGlobalData): Re-add shared instance. + (KJS::JSGlobalData::sharedInstanceExists): Ditto. + (KJS::JSGlobalData::sharedInstance): Ditto. + (KJS::JSGlobalData::sharedInstanceInternal): Ditto. + + * API/JSContextRef.h: Deprecated JSGlobalContextCreate(). Added a very conservative + description of its threading model (nothing is allowed). + + * API/JSContextRef.cpp: + (JSGlobalContextCreate): Use shared JSGlobalData. + (JSGlobalContextCreateInGroup): Support passing NULL group to request a unique one. + (JSGlobalContextRetain): Added back locking. + (JSGlobalContextRelease): Ditto. + (JSContextGetGlobalObject): Ditto. + + * API/tests/minidom.c: (main): + * API/tests/testapi.c: (main): + Switched to JSGlobalContextCreateInGroup() to avoid deprecation warnings. + + * JavaScriptCore.exp: Re-added JSLock methods. Added JSGlobalContextCreateInGroup (d'oh!). + + * API/JSBase.cpp: + (JSEvaluateScript): + (JSCheckScriptSyntax): + (JSGarbageCollect): + * API/JSCallbackConstructor.cpp: + (KJS::constructJSCallback): + * API/JSCallbackFunction.cpp: + (KJS::JSCallbackFunction::call): + * API/JSCallbackObjectFunctions.h: + (KJS::::init): + (KJS::::getOwnPropertySlot): + (KJS::::put): + (KJS::::deleteProperty): + (KJS::::construct): + (KJS::::hasInstance): + (KJS::::call): + (KJS::::getPropertyNames): + (KJS::::toNumber): + (KJS::::toString): + (KJS::::staticValueGetter): + (KJS::::callbackGetter): + * API/JSObjectRef.cpp: + (JSObjectMake): + (JSObjectMakeFunctionWithCallback): + (JSObjectMakeConstructor): + (JSObjectMakeFunction): + (JSObjectHasProperty): + (JSObjectGetProperty): + (JSObjectSetProperty): + (JSObjectGetPropertyAtIndex): + (JSObjectSetPropertyAtIndex): + (JSObjectDeleteProperty): + (JSObjectCallAsFunction): + (JSObjectCallAsConstructor): + (JSObjectCopyPropertyNames): + (JSPropertyNameArrayRelease): + (JSPropertyNameAccumulatorAddName): + * API/JSValueRef.cpp: + (JSValueIsEqual): + (JSValueIsInstanceOfConstructor): + (JSValueMakeNumber): + (JSValueMakeString): + (JSValueToNumber): + (JSValueToStringCopy): + (JSValueToObject): + (JSValueProtect): + (JSValueUnprotect): + * ForwardingHeaders/JavaScriptCore/JSLock.h: Added. + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * kjs/AllInOneFile.cpp: + * kjs/JSGlobalData.h: + * kjs/JSGlobalObject.cpp: + (KJS::JSGlobalObject::~JSGlobalObject): + (KJS::JSGlobalObject::init): + * kjs/JSLock.cpp: Added. + (KJS::createJSLockCount): + (KJS::JSLock::lockCount): + (KJS::setLockCount): + (KJS::JSLock::JSLock): + (KJS::JSLock::lock): + (KJS::JSLock::unlock): + (KJS::JSLock::currentThreadIsHoldingLock): + (KJS::JSLock::DropAllLocks::DropAllLocks): + (KJS::JSLock::DropAllLocks::~DropAllLocks): + * kjs/JSLock.h: Added. + (KJS::JSLock::JSLock): + (KJS::JSLock::~JSLock): + * kjs/Shell.cpp: + (functionGC): + (jscmain): + * kjs/collector.cpp: + (KJS::Heap::~Heap): + (KJS::Heap::heapAllocate): + (KJS::Heap::setGCProtectNeedsLocking): + (KJS::Heap::protect): + (KJS::Heap::unprotect): + (KJS::Heap::collect): + * kjs/identifier.cpp: + * kjs/interpreter.cpp: + (KJS::Interpreter::checkSyntax): + (KJS::Interpreter::evaluate): + Re-added implicit locking. + +2008-08-19 Kevin McCullough + + Reviewed by Tim and Mark. + + Implement DTrace hooks for dashcode and instruments. + + * API/JSProfilerPrivate.cpp: Added. Expose SPI so that profiling can be + turned on from a client. The DTrace probes were added within the + profiler mechanism for performance reasons so the profiler must be + started to enable tracing. + (JSStartProfiling): + (JSEndProfiling): + * API/JSProfilerPrivate.h: Added. Ditto. + * JavaScriptCore.exp: Exposing the start/stop methods to clients. + * JavaScriptCore.xcodeproj/project.pbxproj: + * kjs/Tracing.d: Define the DTrace probes. + * kjs/Tracing.h: Ditto. + * profiler/ProfileGenerator.cpp: Implement the DTrace probes in the + profiler. + (KJS::ProfileGenerator::willExecute): + (KJS::ProfileGenerator::didExecute): + +2008-08-19 Steve Falkenburg + + Build fix. + + * kjs/operations.cpp: + (KJS::equal): + +2008-08-18 Timothy Hatcher + + Fix an assertion when generating a heavy profile because the + empty value and deleted value of CallIdentifier where equal. + + https://bugs.webkit.org/show_bug.cgi?id=20439 + + Reviewed by Dan Bernstein. + + * profiler/CallIdentifier.h: Make the emptyValue for CallIdentifier + use empty strings for URL and function name. + +2008-08-12 Darin Adler + + Reviewed by Geoff. + + - eliminate JSValue::type() + + This will make it slightly easier to change the JSImmediate design without + having to touch so many call sites. + + SunSpider says this change is a wash (looked like a slight speedup, but not + statistically significant). + + * API/JSStringRef.cpp: Removed include of JSType.h. + * API/JSValueRef.cpp: Removed include of JSType.h. + (JSValueGetType): Replaced use of JSValue::type() with + JSValue::is functions. + + * JavaScriptCore.exp: Updated. + + * VM/JSPropertyNameIterator.cpp: Removed type() implementation. + (KJS::JSPropertyNameIterator::toPrimitive): Changed to take + PreferredPrimitiveType argument instead of JSType. + * VM/JSPropertyNameIterator.h: Ditto. + + * VM/Machine.cpp: + (KJS::fastIsNumber): Updated for name change. + (KJS::fastToInt32): Ditto. + (KJS::fastToUInt32): Ditto. + (KJS::jsAddSlowCase): Updated toPrimitive caller for change from + JSType to PreferredPrimitiveType. + (KJS::jsAdd): Replaced calls to JSValue::type() with calls to + JSValue::isString(). + (KJS::jsTypeStringForValue): Replaced calls to JSValue::type() + with multiple calls to JSValue::is -- we could make this a + virtual function instead if we want to have faster performance. + (KJS::Machine::privateExecute): Renamed JSImmediate::toTruncatedUInt32 + to JSImmediate::getTruncatedUInt32 for consistency with other functions. + Changed two calls of JSValue::type() to JSValue::isString(). + + * kjs/GetterSetter.cpp: + (KJS::GetterSetter::toPrimitive): Changed to take + PreferredPrimitiveType argument instead of JSType. + (KJS::GetterSetter::isGetterSetter): Added. + * kjs/GetterSetter.h: + + * kjs/JSCell.cpp: + (KJS::JSCell::isString): Added. + (KJS::JSCell::isGetterSetter): Added. + (KJS::JSCell::isObject): Added. + + * kjs/JSCell.h: Eliminated type function. Added isGetterSetter. + Made isString and isObject virtual. Changed toPrimitive to take + PreferredPrimitiveType argument instead of JSType. + (KJS::JSCell::isNumber): Use Heap::isNumber for faster performance. + (KJS::JSValue::isGetterSetter): Added. + (KJS::JSValue::toPrimitive): Changed to take + PreferredPrimitiveType argument instead of JSType. + + * kjs/JSImmediate.h: Removed JSValue::type() and replaced + JSValue::toTruncatedUInt32 with JSValue::getTruncatedUInt32. + (KJS::JSImmediate::isEitherImmediate): Added. + + * kjs/JSNotAnObject.cpp: + (KJS::JSNotAnObject::toPrimitive): Changed to take + PreferredPrimitiveType argument instead of JSType. + * kjs/JSNotAnObject.h: Ditto. + * kjs/JSNumberCell.cpp: + (KJS::JSNumberCell::toPrimitive): Ditto. + * kjs/JSNumberCell.h: + (KJS::JSNumberCell::toInt32): Renamed from fastToInt32. There's no + other "slow" version of this once you have a JSNumberCell, so there's + no need for "fast" in the name. It's a feature that this hides the + base class toInt32, which does the same job less efficiently (and has + an additional ExecState argument). + (KJS::JSNumberCell::toUInt32): Ditto. + + * kjs/JSObject.cpp: + (KJS::callDefaultValueFunction): Use isGetterSetter instead of type. + (KJS::JSObject::getPrimitiveNumber): Use PreferredPrimitiveType. + (KJS::JSObject::defaultValue): Ditto. + (KJS::JSObject::defineGetter): Use isGetterSetter. + (KJS::JSObject::defineSetter): Ditto. + (KJS::JSObject::lookupGetter): Ditto. + (KJS::JSObject::lookupSetter): Ditto. + (KJS::JSObject::toNumber): Use PreferredPrimitiveType. + (KJS::JSObject::toString): Ditto. + (KJS::JSObject::isObject): Added. + + * kjs/JSObject.h: + (KJS::JSObject::inherits): Call the isObject from JSCell; it's now + hidden by our override of isObject. + (KJS::JSObject::getOwnPropertySlotForWrite): Use isGetterSetter + instead of type. + (KJS::JSObject::getOwnPropertySlot): Ditto. + (KJS::JSObject::toPrimitive): Use PreferredPrimitiveType. + + * kjs/JSString.cpp: + (KJS::JSString::toPrimitive): Use PreferredPrimitiveType. + (KJS::JSString::isString): Added. + * kjs/JSString.h: Ditto. + + * kjs/JSValue.h: Removed type(), added isGetterSetter(). Added + PreferredPrimitiveType enum and used it as the argument for the + toPrimitive function. + (KJS::JSValue::getBoolean): Simplified a bit an removed a branch. + + * kjs/collector.cpp: + (KJS::typeName): Changed to use JSCell::is functions instead of + calling JSCell::type. + + * kjs/collector.h: + (KJS::Heap::isNumber): Renamed from fastIsNumber. + + * kjs/nodes.h: Added now-needed include of JSType, since the type + is used here to record types of values in the tree. + + * kjs/operations.cpp: + (KJS::equal): Rewrote to no longer depend on type(). + (KJS::strictEqual): Ditto. + +2008-08-18 Kevin McCullough + + Reviewed by Tim. + + If there are no nodes in a profile all the time should be attributed to + (idle) + + * profiler/Profile.cpp: If ther are no nodes make sure we still process + the head. + (KJS::Profile::forEach): + * profiler/ProfileGenerator.cpp: Remove some useless code. + (KJS::ProfileGenerator::stopProfiling): + +2008-08-18 Alexey Proskuryakov + + Reviewed by Maciej. + + Make JSGlobalContextRetain/Release actually work. + + * API/JSContextRef.cpp: + (JSGlobalContextRetain): + (JSGlobalContextRelease): + Ref/deref global data to give checking for globalData.refCount() some sense. + + * API/tests/testapi.c: (main): Added a test for this bug. + + * kjs/JSGlobalData.cpp: + (KJS::JSGlobalData::~JSGlobalData): + While checking for memory leaks, found that JSGlobalData::emptyList has changed to + a pointer, but it was not destructed, causing a huge leak in run-webkit-tests --threaded. + +2008-08-17 Cameron Zwarich + + Reviewed by Maciej. + + Change the counting of constants so that preincrement and predecrement of + const local variables are considered unexpected loads. + + * kjs/nodes.cpp: + (KJS::PrefixResolveNode::emitCode): + * kjs/nodes.h: + (KJS::ScopeNode::neededConstants): + +2008-08-17 Oliver Hunt + + Reviewed by Cameron Zwarich. + + In Gmail, a crash occurs at KJS::Machine::privateExecute() when applying list styling to text after a quote had been removed + + + This crash was caused by "depth()" incorrectly determining the scope depth + of a 0 depth function without a full scope chain. Because such a function + would not have an activation the depth function would return the scope depth + of the parent frame, thus triggering an incorrect unwind. Any subsequent + look up that walked the scope chain would result in incorrect behaviour, + leading to a crash or incorrect variable resolution. This can only actually + happen in try...finally statements as that's the only path that can result in + the need to unwind the scope chain, but not force the function to need a + full scope chain. + + The fix is simply to check for this case before attempting to walk the scope chain. + + * VM/Machine.cpp: + (KJS::depth): + (KJS::Machine::throwException): + +2008-08-17 Cameron Zwarich + + Reviewed by Maciej. + + Bug 20419: Remove op_jless + + + Remove op_jless, which is rarely used now that we have op_loop_if_less. + + * VM/CodeBlock.cpp: + (KJS::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (KJS::CodeGenerator::emitJumpIfTrue): + * VM/Machine.cpp: + (KJS::Machine::privateExecute): + * VM/Opcode.h: + +2008-08-17 Cameron Zwarich + + Reviewed by Dan Bernstein. + + Fix a typo in r35807 that is also causing build failures for + non-AllInOne builds. + + * kjs/NumberConstructor.cpp: + +2008-08-17 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Made room for a free word in JSCell. + + SunSpider says no change. + + I changed JSCallbackObjectData, Arguments, JSArray, and RegExpObject to + store auxiliary data in a secondary structure. + + I changed InternalFunction to store the function's name in the property + map. + + I changed JSGlobalObjectData to use a virtual destructor, so WebCore's + JSDOMWindowBaseData could inherit from it safely. (It's a strange design + for JSDOMWindowBase to allocate an object that JSGlobalObject deletes, + but that's really our only option, given the size constraint.) + + I also added a bunch of compile-time ASSERTs, and removed lots of comments + in JSObject.h because they were often out of date, and they got in the + way of reading what was actually going on. + + Also renamed JSArray::getLength to JSArray::length, to match our style + guidelines. + +2008-08-16 Geoffrey Garen + + Reviewed by Oliver Hunt. + + Sped up property access for array.length and string.length by adding a + mechanism for returning a temporary value directly instead of returning + a pointer to a function that retrieves the value. + + Also removed some unused cruft from PropertySlot. + + SunSpider says 0.5% - 1.2% faster. + + NOTE: This optimization is not a good idea in general, because it's + actually a pessimization in the case of resolve for assignment, + and it may get in the way of other optimizations in the future. + +2008-08-16 Dan Bernstein + + Reviewed by Geoffrey Garen. + + Disable dead code stripping in debug builds. + + * Configurations/Base.xcconfig: + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-08-15 Mark Rowe + + Reviewed by Oliver Hunt. + + FastMallocZone's enumeration code makes assumptions about handling of remote memory regions that overlap + + * wtf/FastMalloc.cpp: + (WTF::TCMalloc_Central_FreeList::enumerateFreeObjects): Don't directly compare pointers mapped into the local process with + a pointer that has not been mapped. Instead, calculate a local address for the pointer and compare with that. + (WTF::TCMallocStats::FreeObjectFinder::findFreeObjects): Pass in the remote address of the central free list so that it can + be used when calculating local addresses. + (WTF::TCMallocStats::FastMallocZone::enumerate): Ditto. + +2008-08-15 Mark Rowe + + Rubber-stamped by Geoff Garen. + + Please include a _debug version of JavaScriptCore framework + + * Configurations/Base.xcconfig: Factor out the debug-only settings so that they can shared + between the Debug configuration and debug Production variant. + * JavaScriptCore.xcodeproj/project.pbxproj: Enable the debug variant. + +2008-08-15 Mark Rowe + + Fix the 64-bit build. + + Add extra cast to avoid warnings about loss of precision when casting from + JSValue* to an integer type. + + * kjs/JSImmediate.h: + (KJS::JSImmediate::intValue): + (KJS::JSImmediate::uintValue): + +2008-08-15 Alexey Proskuryakov + + Still fixing Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: Added OpaqueJSString + to yet another place. + +2008-08-15 Alexey Proskuryakov + + Trying to fix non-Apple builds. + + * ForwardingHeaders/JavaScriptCore/OpaqueJSString.h: Added. + +2008-08-15 Gavin Barraclough + + Reviewed by Geoff Garen. + + Allow JSImmediate to hold 31 bit signed integer immediate values. The low two bits of a + JSValue* are a tag, with the tag value 00 indicating the JSValue* is a pointer to a + JSCell. Non-zero tag values used to indicate that the JSValue* is not a real pointer, + but instead holds an immediate value encoded within the pointer. This patch changes the + encoding so both the tag values 01 and 11 indicate the value is a signed integer, allowing + a 31 bit value to be stored. All other immediates are tagged with the value 10, and + distinguished by a secondary tag. + + Roughly +2% on SunSpider. + + * kjs/JSImmediate.h: Encoding of JSImmediates has changed - see comment at head of file for + descption of new layout. + +2008-08-15 Alexey Proskuryakov + + More build fixes. + + * API/OpaqueJSString.h: Add a namespace to friend declaration to appease MSVC. + * API/JSStringRefCF.h: (JSStringCreateWithCFString) Cast UniChar* to UChar* explicitly. + * JavaScriptCore.exp: Added OpaqueJSString::create(const KJS::UString&) to fix WebCore build. + +2008-08-15 Alexey Proskuryakov + + Build fix. + + * JavaScriptCore.xcodeproj/project.pbxproj: Marked OpaqueJSString as private + + * kjs/identifier.cpp: + (KJS::Identifier::checkSameIdentifierTable): + * kjs/identifier.h: + (KJS::Identifier::add): + Since checkSameIdentifierTable is exported for debug build's sake, gcc wants it to be + non-inline in release builds, too. + + * JavaScriptCore.exp: Don't export inline OpaqueJSString destructor. + +2008-08-15 Alexey Proskuryakov + + Reviewed by Geoff Garen. + + JSStringRef is created context-free, but can get linked to one via an identifier table, + breaking an implicit API contract. + + Made JSStringRef point to OpaqueJSString, which is a new string object separate from UString. + + * API/APICast.h: Removed toRef/toJS conversions for JSStringRef, as this is no longer a + simple typecast. + + * kjs/identifier.cpp: + (KJS::Identifier::checkSameIdentifierTable): + * kjs/identifier.h: + (KJS::Identifier::add): + (KJS::UString::checkSameIdentifierTable): + Added assertions to verify that an identifier is not being added to a different JSGlobalData. + + * API/JSObjectRef.cpp: + (OpaqueJSPropertyNameArray::OpaqueJSPropertyNameArray): Changed OpaqueJSPropertyNameArray to + hold JSStringRefs. This is necessary to avoid having to construct (and leak) a new instance + in JSPropertyNameArrayGetNameAtIndex(), now that making a JSStringRef is not just a typecast. + + * API/OpaqueJSString.cpp: Added. + (OpaqueJSString::create): + (OpaqueJSString::ustring): + (OpaqueJSString::identifier): + * API/OpaqueJSString.h: Added. + (OpaqueJSString::create): + (OpaqueJSString::characters): + (OpaqueJSString::length): + (OpaqueJSString::OpaqueJSString): + (OpaqueJSString::~OpaqueJSString): + + * API/JSBase.cpp: + (JSEvaluateScript): + (JSCheckScriptSyntax): + * API/JSCallbackObjectFunctions.h: + (KJS::::getOwnPropertySlot): + (KJS::::put): + (KJS::::deleteProperty): + (KJS::::staticValueGetter): + (KJS::::callbackGetter): + * API/JSStringRef.cpp: + (JSStringCreateWithCharacters): + (JSStringCreateWithUTF8CString): + (JSStringRetain): + (JSStringRelease): + (JSStringGetLength): + (JSStringGetCharactersPtr): + (JSStringGetMaximumUTF8CStringSize): + (JSStringGetUTF8CString): + (JSStringIsEqual): + * API/JSStringRefCF.cpp: + (JSStringCreateWithCFString): + (JSStringCopyCFString): + * API/JSValueRef.cpp: + (JSValueMakeString): + (JSValueToStringCopy): + Updated to use OpaqueJSString. + + * GNUmakefile.am: + * JavaScriptCore.exp: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + Added OpaqueJSString. + +2008-08-14 Kevin McCullough + + Reviewed by Tim. + + Notify of profile in console + - Profiles now have a unique ID so that they can be linked to the + console message that announces that a profile completed. + + * profiler/HeavyProfile.cpp: + (KJS::HeavyProfile::HeavyProfile): + * profiler/Profile.cpp: + (KJS::Profile::create): + (KJS::Profile::Profile): + * profiler/Profile.h: + (KJS::Profile::uid): + * profiler/ProfileGenerator.cpp: + (KJS::ProfileGenerator::create): + (KJS::ProfileGenerator::ProfileGenerator): + * profiler/ProfileGenerator.h: + * profiler/Profiler.cpp: + (KJS::Profiler::startProfiling): + * profiler/TreeProfile.cpp: + (KJS::TreeProfile::create): + (KJS::TreeProfile::TreeProfile): + * profiler/TreeProfile.h: + +2008-08-13 Geoffrey Garen + + Reviewed by Oliver Hunt. + + Nixed a PIC branch from JSObject::getOwnPropertySlot, by forcing + fillGetterProperty, which references a global function pointer, + out-of-line. + + .2% SunSpider speedup, 4.3% access-nbody speedup, 8.7% speedup on a + custom property access benchmark for objects with one property. + + * kjs/JSObject.cpp: + (KJS::JSObject::fillGetterPropertySlot): + +2008-08-13 Alp Toker + + Reviewed by Eric Seidel. + + https://bugs.webkit.org/show_bug.cgi?id=20349 + WTF::initializeThreading() fails if threading is already initialized + + Fix threading initialization logic to support cases where + g_thread_init() has already been called elsewhere. + + Resolves database-related crashers reported in several applications. + + * wtf/ThreadingGtk.cpp: + (WTF::initializeThreading): + +2008-08-13 Brad Hughes + + Reviewed by Simon. + + Fix compiling of QtWebKit in release mode with the Intel C++ Compiler for Linux + + The latest upgrade of the intel compiler allows us to compile all of + Qt with optimizations enabled (yay!). + + * JavaScriptCore.pro: + +2008-08-12 Oliver Hunt + + Reviewed by Geoff Garen. + + Add peephole optimisation to 'op_not... jfalse...' (eg. if(!...) ) + + This is a very slight win in sunspider, and a fairly substantial win + in hot code that does if(!...), etc. + + * VM/CodeGenerator.cpp: + (KJS::CodeGenerator::retrieveLastUnaryOp): + (KJS::CodeGenerator::rewindBinaryOp): + (KJS::CodeGenerator::rewindUnaryOp): + (KJS::CodeGenerator::emitJumpIfFalse): + * VM/CodeGenerator.h: + +2008-08-12 Dan Bernstein + + - JavaScriptCore part of + Make fast*alloc() abort() on failure and add "try" variants that + return NULL on failure. + + Reviewed by Darin Adler. + + * JavaScriptCore.exp: Exported tryFastCalloc(). + * VM/RegisterFile.h: + (KJS::RegisterFile::RegisterFile): Removed an ASSERT(). + * kjs/JSArray.cpp: + (KJS::JSArray::putSlowCase): Changed to use tryFastRealloc(). + (KJS::JSArray::increaseVectorLength): Ditto. + * kjs/ustring.cpp: + (KJS::allocChars): Changed to use tryFastMalloc(). + (KJS::reallocChars): Changed to use tryFastRealloc(). + * wtf/FastMalloc.cpp: + (WTF::fastZeroedMalloc): Removed null checking of fastMalloc()'s result + and removed extra call to InvokeNewHook(). + (WTF::tryFastZeroedMalloc): Added. Uses tryFastMalloc(). + (WTF::tryFastMalloc): Renamed fastMalloc() to this. + (WTF::fastMalloc): Added. This version abort()s if allocation fails. + (WTF::tryFastCalloc): Renamed fastCalloc() to this. + (WTF::fastCalloc): Added. This version abort()s if allocation fails. + (WTF::tryFastRealloc): Renamed fastRealloc() to this. + (WTF::fastRealloc): Added. This version abort()s if allocation fails. + (WTF::do_malloc): Made this a function template. When the abortOnFailure + template parameter is set, the function abort()s on failure to allocate. + Otherwise, it sets errno to ENOMEM and returns zero. + (WTF::TCMallocStats::fastMalloc): Defined to abort() on failure. + (WTF::TCMallocStats::tryFastMalloc): Added. Does not abort() on + failure. + (WTF::TCMallocStats::fastCalloc): Defined to abort() on failure. + (WTF::TCMallocStats::tryFastCalloc): Added. Does not abort() on + failure. + (WTF::TCMallocStats::fastRealloc): Defined to abort() on failure. + (WTF::TCMallocStats::tryFastRealloc): Added. Does not abort() on + failure. + * wtf/FastMalloc.h: Declared the "try" variants. + +2008-08-11 Adam Roben + + Move WTF::notFound into its own header so that it can be used + independently of Vector + + Rubberstamped by Darin Adler. + + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + Added NotFound.h to the project. + * wtf/NotFound.h: Added. Moved the notFound constant here... + * wtf/Vector.h: ...from here. + +2008-08-11 Alexey Proskuryakov + + Reviewed by Mark Rowe. + + REGRESSION: PhotoBooth hangs after launching under TOT Webkit + + * API/JSContextRef.cpp: (JSGlobalContextRelease): Corrected a comment. + + * kjs/collector.cpp: (KJS::Heap::~Heap): Ensure that JSGlobalData is not deleted while + sweeping the heap. + +== Rolled over to ChangeLog-2008-08-10 == diff --git a/src/3rdparty/webkit/JavaScriptCore/DerivedSources.make b/src/3rdparty/webkit/JavaScriptCore/DerivedSources.make index 4b33682..9eaccab 100644 --- a/src/3rdparty/webkit/JavaScriptCore/DerivedSources.make +++ b/src/3rdparty/webkit/JavaScriptCore/DerivedSources.make @@ -40,6 +40,7 @@ all : \ chartables.c \ DatePrototype.lut.h \ Grammar.cpp \ + JSONObject.lut.h \ Lexer.lut.h \ MathObject.lut.h \ NumberConstructor.lut.h \ diff --git a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.order b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.order index bb56e98..3ae3ec6 100644 --- a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.order +++ b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.order @@ -186,7 +186,7 @@ __Z10jscyyparsePv __ZN3JSC5Lexer3lexEPvS1_ __ZN3JSC10Identifier3addEPNS_12JSGlobalDataEPKti __ZN3WTF7HashSetIPN3JSC7UString3RepENS_7StrHashIS4_EENS_10HashTraitsIS4_EEE3addINS1_11UCharBufferENS1_21UCharBufferTranslatorEE -__ZN3JSC15SegmentedVectorINS_10IdentifierELm64EE6appendIS1_EEvRKT_ +__ZN3WTF15SegmentedVectorINS_10IdentifierELm64EE6appendIS1_EEvRKT_ __ZNK3JSC9HashTable11createTableEPNS_12JSGlobalDataE __ZN3JSC20ParserArenaDeletablenwEmPNS_12JSGlobalDataE __ZN3WTF6VectorIPN3JSC20ParserArenaDeletableELm0EE15reserveCapacityEm diff --git a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri index a7da71c..dbc467d 100644 --- a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri +++ b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri @@ -76,6 +76,7 @@ include(pcre/pcre.pri) LUT_FILES += \ runtime/DatePrototype.cpp \ + runtime/JSONObject.cpp \ runtime/NumberConstructor.cpp \ runtime/StringPrototype.cpp \ runtime/ArrayPrototype.cpp \ @@ -117,6 +118,7 @@ SOURCES += \ runtime/JSVariableObject.cpp \ runtime/JSActivation.cpp \ runtime/JSNotAnObject.cpp \ + runtime/JSONObject.cpp \ runtime/LiteralParser.cpp \ runtime/TimeoutChecker.cpp \ bytecode/CodeBlock.cpp \ @@ -159,8 +161,8 @@ SOURCES += \ runtime/ConstructData.cpp \ wtf/CurrentTime.cpp \ runtime/DateConstructor.cpp \ + runtime/DateConversion.cpp \ runtime/DateInstance.cpp \ - runtime/DateMath.cpp \ runtime/DatePrototype.cpp \ debugger/Debugger.cpp \ debugger/DebuggerCallFrame.cpp \ @@ -225,6 +227,7 @@ SOURCES += \ profiler/ProfileNode.cpp \ profiler/Profiler.cpp \ profiler/TreeProfile.cpp \ + wtf/DateMath.cpp \ wtf/FastMalloc.cpp \ wtf/Threading.cpp \ wtf/qt/MainThreadQt.cpp diff --git a/src/3rdparty/webkit/JavaScriptCore/assembler/ARMv7Assembler.h b/src/3rdparty/webkit/JavaScriptCore/assembler/ARMv7Assembler.h new file mode 100644 index 0000000..9745d6d --- /dev/null +++ b/src/3rdparty/webkit/JavaScriptCore/assembler/ARMv7Assembler.h @@ -0,0 +1,1758 @@ +/* + * Copyright (C) 2009 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef ARMAssembler_h +#define ARMAssembler_h + +#include + +#if ENABLE(ASSEMBLER) && PLATFORM_ARM_ARCH(7) + +#include "AssemblerBuffer.h" +#include +#include +#include + +namespace JSC { + +namespace ARM { + typedef enum { + r0, + r1, + r2, + r3, + r4, + r5, + r6, + r7, wr = r7, // thumb work register + r8, + r9, sb = r9, // static base + r10, sl = r10, // stack limit + r11, fp = r11, // frame pointer + r12, ip = r12, + r13, sp = r13, + r14, lr = r14, + r15, pc = r15, + } RegisterID; + + // s0 == d0 == q0 + // s4 == d2 == q1 + // etc + typedef enum { + s0 = 0, + s1 = 1, + s2 = 2, + s3 = 3, + s4 = 4, + s5 = 5, + s6 = 6, + s7 = 7, + s8 = 8, + s9 = 9, + s10 = 10, + s11 = 11, + s12 = 12, + s13 = 13, + s14 = 14, + s15 = 15, + s16 = 16, + s17 = 17, + s18 = 18, + s19 = 19, + s20 = 20, + s21 = 21, + s22 = 22, + s23 = 23, + s24 = 24, + s25 = 25, + s26 = 26, + s27 = 27, + s28 = 28, + s29 = 29, + s30 = 30, + s31 = 31, + d0 = 0 << 1, + d1 = 1 << 1, + d2 = 2 << 1, + d3 = 3 << 1, + d4 = 4 << 1, + d5 = 5 << 1, + d6 = 6 << 1, + d7 = 7 << 1, + d8 = 8 << 1, + d9 = 9 << 1, + d10 = 10 << 1, + d11 = 11 << 1, + d12 = 12 << 1, + d13 = 13 << 1, + d14 = 14 << 1, + d15 = 15 << 1, + d16 = 16 << 1, + d17 = 17 << 1, + d18 = 18 << 1, + d19 = 19 << 1, + d20 = 20 << 1, + d21 = 21 << 1, + d22 = 22 << 1, + d23 = 23 << 1, + d24 = 24 << 1, + d25 = 25 << 1, + d26 = 26 << 1, + d27 = 27 << 1, + d28 = 28 << 1, + d29 = 29 << 1, + d30 = 30 << 1, + d31 = 31 << 1, + q0 = 0 << 2, + q1 = 1 << 2, + q2 = 2 << 2, + q3 = 3 << 2, + q4 = 4 << 2, + q5 = 5 << 2, + q6 = 6 << 2, + q7 = 7 << 2, + q8 = 8 << 2, + q9 = 9 << 2, + q10 = 10 << 2, + q11 = 11 << 2, + q12 = 12 << 2, + q13 = 13 << 2, + q14 = 14 << 2, + q15 = 15 << 2, + q16 = 16 << 2, + q17 = 17 << 2, + q18 = 18 << 2, + q19 = 19 << 2, + q20 = 20 << 2, + q21 = 21 << 2, + q22 = 22 << 2, + q23 = 23 << 2, + q24 = 24 << 2, + q25 = 25 << 2, + q26 = 26 << 2, + q27 = 27 << 2, + q28 = 28 << 2, + q29 = 29 << 2, + q30 = 30 << 2, + q31 = 31 << 2, + } FPRegisterID; +} + +class ARMv7Assembler; +class ARMThumbImmediate { + friend class ARMv7Assembler; + + typedef uint8_t ThumbImmediateType; + static const ThumbImmediateType TypeInvalid = 0; + static const ThumbImmediateType TypeEncoded = 1; + static const ThumbImmediateType TypeUInt16 = 2; + + typedef union { + int16_t asInt; + struct { + unsigned imm8 : 8; + unsigned imm3 : 3; + unsigned i : 1; + unsigned imm4 : 4; + }; + // If this is an encoded immediate, then it may describe a shift, or a pattern. + struct { + unsigned shiftValue7 : 7; + unsigned shiftAmount : 5; + }; + struct { + unsigned immediate : 8; + unsigned pattern : 4; + }; + } ThumbImmediateValue; + + // byte0 contains least significant bit; not using an array to make client code endian agnostic. + typedef union { + int32_t asInt; + struct { + uint8_t byte0; + uint8_t byte1; + uint8_t byte2; + uint8_t byte3; + }; + } PatternBytes; + + ALWAYS_INLINE static int32_t countLeadingZerosPartial(uint32_t& value, int32_t& zeros, const int N) + { + if (value & ~((1<>= N; /* if any were set, lose the bottom N */ \ + else /* if none of the top N bits are set, */ \ + zeros += N; /* then we have identified N leading zeros */ + } + + static int32_t countLeadingZeros(uint32_t value) + { + if (!value) + return 32; + + int32_t zeros = 0; + countLeadingZerosPartial(value, zeros, 16); + countLeadingZerosPartial(value, zeros, 8); + countLeadingZerosPartial(value, zeros, 4); + countLeadingZerosPartial(value, zeros, 2); + countLeadingZerosPartial(value, zeros, 1); + return zeros; + } + + ARMThumbImmediate() + : m_type(TypeInvalid) + { + m_value.asInt = 0; + } + + ARMThumbImmediate(ThumbImmediateType type, ThumbImmediateValue value) + : m_type(type) + , m_value(value) + { + } + + ARMThumbImmediate(ThumbImmediateType type, uint16_t value) + : m_type(TypeUInt16) + { + m_value.asInt = value; + } + +public: + static ARMThumbImmediate makeEncodedImm(uint32_t value) + { + ThumbImmediateValue encoding; + encoding.asInt = 0; + + // okay, these are easy. + if (value < 256) { + encoding.immediate = value; + encoding.pattern = 0; + return ARMThumbImmediate(TypeEncoded, encoding); + } + + int32_t leadingZeros = countLeadingZeros(value); + // if there were 24 or more leading zeros, then we'd have hit the (value < 256) case. + ASSERT(leadingZeros < 24); + + // Given a number with bit fields Z:B:C, where count(Z)+count(B)+count(C) == 32, + // Z are the bits known zero, B is the 8-bit immediate, C are the bits to check for + // zero. count(B) == 8, so the count of bits to be checked is 24 - count(Z). + int32_t rightShiftAmount = 24 - leadingZeros; + if (value == ((value >> rightShiftAmount) << rightShiftAmount)) { + // Shift the value down to the low byte position. The assign to + // shiftValue7 drops the implicit top bit. + encoding.shiftValue7 = value >> rightShiftAmount; + // The endoded shift amount is the magnitude of a right rotate. + encoding.shiftAmount = 8 + leadingZeros; + return ARMThumbImmediate(TypeEncoded, encoding); + } + + PatternBytes bytes; + bytes.asInt = value; + + if ((bytes.byte0 == bytes.byte1) && (bytes.byte0 == bytes.byte2) && (bytes.byte0 == bytes.byte3)) { + encoding.immediate = bytes.byte0; + encoding.pattern = 3; + return ARMThumbImmediate(TypeEncoded, encoding); + } + + if ((bytes.byte0 == bytes.byte2) && !(bytes.byte1 | bytes.byte3)) { + encoding.immediate = bytes.byte0; + encoding.pattern = 1; + return ARMThumbImmediate(TypeEncoded, encoding); + } + + if ((bytes.byte1 == bytes.byte3) && !(bytes.byte0 | bytes.byte2)) { + encoding.immediate = bytes.byte0; + encoding.pattern = 2; + return ARMThumbImmediate(TypeEncoded, encoding); + } + + return ARMThumbImmediate(); + } + + static ARMThumbImmediate makeUInt12(int32_t value) + { + return (!(value & 0xfffff000)) + ? ARMThumbImmediate(TypeUInt16, (uint16_t)value) + : ARMThumbImmediate(); + } + + static ARMThumbImmediate makeUInt12OrEncodedImm(int32_t value) + { + // If this is not a 12-bit unsigned it, try making an encoded immediate. + return (!(value & 0xfffff000)) + ? ARMThumbImmediate(TypeUInt16, (uint16_t)value) + : makeEncodedImm(value); + } + + // The 'make' methods, above, return a !isValid() value if the argument + // cannot be represented as the requested type. This methods is called + // 'get' since the argument can always be represented. + static ARMThumbImmediate makeUInt16(uint16_t value) + { + return ARMThumbImmediate(TypeUInt16, value); + } + + bool isValid() + { + return m_type != TypeInvalid; + } + + // These methods rely on the format of encoded byte values. + bool isUInt3() { return !(m_value.asInt & 0xfff8); } + bool isUInt4() { return !(m_value.asInt & 0xfff0); } + bool isUInt5() { return !(m_value.asInt & 0xffe0); } + bool isUInt6() { return !(m_value.asInt & 0xffc0); } + bool isUInt7() { return !(m_value.asInt & 0xff80); } + bool isUInt8() { return !(m_value.asInt & 0xff00); } + bool isUInt9() { return (m_type == TypeUInt16) && !(m_value.asInt & 0xfe00); } + bool isUInt10() { return (m_type == TypeUInt16) && !(m_value.asInt & 0xfc00); } + bool isUInt12() { return (m_type == TypeUInt16) && !(m_value.asInt & 0xf000); } + bool isUInt16() { return m_type == TypeUInt16; } + uint8_t getUInt3() { ASSERT(isUInt3()); return m_value.asInt; } + uint8_t getUInt4() { ASSERT(isUInt4()); return m_value.asInt; } + uint8_t getUInt5() { ASSERT(isUInt5()); return m_value.asInt; } + uint8_t getUInt6() { ASSERT(isUInt6()); return m_value.asInt; } + uint8_t getUInt7() { ASSERT(isUInt7()); return m_value.asInt; } + uint8_t getUInt8() { ASSERT(isUInt8()); return m_value.asInt; } + uint8_t getUInt9() { ASSERT(isUInt9()); return m_value.asInt; } + uint8_t getUInt10() { ASSERT(isUInt10()); return m_value.asInt; } + uint16_t getUInt12() { ASSERT(isUInt12()); return m_value.asInt; } + uint16_t getUInt16() { ASSERT(isUInt16()); return m_value.asInt; } + + bool isEncodedImm() { return m_type == TypeEncoded; } + +private: + ThumbImmediateType m_type; + ThumbImmediateValue m_value; +}; + + +typedef enum { + SRType_LSL, + SRType_LSR, + SRType_ASR, + SRType_ROR, + + SRType_RRX = SRType_ROR +} ARMShiftType; + +class ARMv7Assembler; +class ShiftTypeAndAmount { + friend class ARMv7Assembler; + +public: + ShiftTypeAndAmount() + { + m_u.type = (ARMShiftType)0; + m_u.amount = 0; + } + + ShiftTypeAndAmount(ARMShiftType type, unsigned amount) + { + m_u.type = type; + m_u.amount = amount & 31; + } + + unsigned lo4() { return m_u.lo4; } + unsigned hi4() { return m_u.hi4; } + +private: + union { + struct { + unsigned lo4 : 4; + unsigned hi4 : 4; + }; + struct { + unsigned type : 2; + unsigned amount : 5; + }; + } m_u; +}; + + +/* +Some features of the Thumb instruction set are deprecated in ARMv7. Deprecated features affecting +instructions supported by ARMv7-M are as follows: +• use of the PC as or in a 16-bit ADD (SP plus register) instruction +• use of the SP as in a 16-bit ADD (SP plus register) instruction +• use of the SP as in a 16-bit CMP (register) instruction +• use of MOV (register) instructions in which is the SP or PC and is also the SP or PC. +• use of as the lowest-numbered register in the register list of a 16-bit STM instruction with base +register writeback +*/ + +class ARMv7Assembler { +public: + typedef ARM::RegisterID RegisterID; + typedef ARM::FPRegisterID FPRegisterID; + + // (HS, LO, HI, LS) -> (AE, B, A, BE) + // (VS, VC) -> (O, NO) + typedef enum { + ConditionEQ, + ConditionNE, + ConditionHS, + ConditionLO, + ConditionMI, + ConditionPL, + ConditionVS, + ConditionVC, + ConditionHI, + ConditionLS, + ConditionGE, + ConditionLT, + ConditionGT, + ConditionLE, + ConditionAL, + + ConditionCS = ConditionHS, + ConditionCC = ConditionLO, + } Condition; + + class JmpSrc { + friend class ARMv7Assembler; + friend class ARMInstructionFormatter; + public: + JmpSrc() + : m_offset(-1) + { + } + + private: + JmpSrc(int offset) + : m_offset(offset) + { + } + + int m_offset; + }; + + class JmpDst { + friend class ARMv7Assembler; + friend class ARMInstructionFormatter; + public: + JmpDst() + : m_offset(-1) + , m_used(false) + { + } + + bool isUsed() const { return m_used; } + void used() { m_used = true; } + private: + JmpDst(int offset) + : m_offset(offset) + , m_used(false) + { + ASSERT(m_offset == offset); + } + + int m_offset : 31; + int m_used : 1; + }; + +private: + + // ARMv7, Appx-A.6.3 + bool BadReg(RegisterID reg) + { + return (reg == ARM::sp) || (reg == ARM::pc); + } + + bool isSingleRegister(FPRegisterID reg) + { + // Check that the high bit isn't set (q16+), and that the low bit isn't (s1, s3, etc). + return !(reg & ~31); + } + + bool isDoubleRegister(FPRegisterID reg) + { + // Check that the high bit isn't set (q16+), and that the low bit isn't (s1, s3, etc). + return !(reg & ~(31 << 1)); + } + + bool isQuadRegister(FPRegisterID reg) + { + return !(reg & ~(31 << 2)); + } + + uint32_t singleRegisterNum(FPRegisterID reg) + { + ASSERT(isSingleRegister(reg)); + return reg; + } + + uint32_t doubleRegisterNum(FPRegisterID reg) + { + ASSERT(isDoubleRegister(reg)); + return reg >> 1; + } + + uint32_t quadRegisterNum(FPRegisterID reg) + { + ASSERT(isQuadRegister(reg)); + return reg >> 2; + } + + uint32_t singleRegisterMask(FPRegisterID rd, int highBitsShift, int lowBitShift) + { + uint32_t rdNum = singleRegisterNum(rd); + uint32_t rdMask = (rdNum >> 1) << highBitsShift; + if (rdNum & 1) + rdMask |= 1 << lowBitShift; + return rdMask; + } + + uint32_t doubleRegisterMask(FPRegisterID rd, int highBitShift, int lowBitsShift) + { + uint32_t rdNum = doubleRegisterNum(rd); + uint32_t rdMask = (rdNum & 0xf) << lowBitsShift; + if (rdNum & 16) + rdMask |= 1 << highBitShift; + return rdMask; + } + + typedef enum { + OP_ADD_reg_T1 = 0x1800, + OP_ADD_S_reg_T1 = 0x1800, + OP_SUB_reg_T1 = 0x1A00, + OP_SUB_S_reg_T1 = 0x1A00, + OP_ADD_imm_T1 = 0x1C00, + OP_ADD_S_imm_T1 = 0x1C00, + OP_SUB_imm_T1 = 0x1E00, + OP_SUB_S_imm_T1 = 0x1E00, + OP_MOV_imm_T1 = 0x2000, + OP_CMP_imm_T1 = 0x2800, + OP_ADD_imm_T2 = 0x3000, + OP_ADD_S_imm_T2 = 0x3000, + OP_SUB_imm_T2 = 0x3800, + OP_SUB_S_imm_T2 = 0x3800, + OP_AND_reg_T1 = 0x4000, + OP_EOR_reg_T1 = 0x4040, + OP_TST_reg_T1 = 0x4200, + OP_CMP_reg_T1 = 0x4280, + OP_ORR_reg_T1 = 0x4300, + OP_MVN_reg_T1 = 0x43C0, + OP_ADD_reg_T2 = 0x4400, + OP_MOV_reg_T1 = 0x4600, + OP_BLX = 0x4700, + OP_BX = 0x4700, + OP_LDRH_reg_T1 = 0x5A00, + OP_STR_reg_T1 = 0x5000, + OP_LDR_reg_T1 = 0x5800, + OP_STR_imm_T1 = 0x6000, + OP_LDR_imm_T1 = 0x6800, + OP_LDRH_imm_T1 = 0x8800, + OP_STR_imm_T2 = 0x9000, + OP_LDR_imm_T2 = 0x9800, + OP_ADD_SP_imm_T1 = 0xA800, + OP_ADD_SP_imm_T2 = 0xB000, + OP_SUB_SP_imm_T1 = 0xB080, + OP_BKPT = 0xBE00, + OP_IT = 0xBF00, + } OpcodeID; + + typedef enum { + OP_AND_reg_T2 = 0xEA00, + OP_TST_reg_T2 = 0xEA10, + OP_ORR_reg_T2 = 0xEA40, + OP_ASR_imm_T1 = 0xEA4F, + OP_LSL_imm_T1 = 0xEA4F, + OP_LSR_imm_T1 = 0xEA4F, + OP_ROR_imm_T1 = 0xEA4F, + OP_MVN_reg_T2 = 0xEA6F, + OP_EOR_reg_T2 = 0xEA80, + OP_ADD_reg_T3 = 0xEB00, + OP_ADD_S_reg_T3 = 0xEB10, + OP_SUB_reg_T2 = 0xEBA0, + OP_SUB_S_reg_T2 = 0xEBB0, + OP_CMP_reg_T2 = 0xEBB0, + OP_B_T4a = 0xF000, + OP_AND_imm_T1 = 0xF000, + OP_TST_imm = 0xF010, + OP_ORR_imm_T1 = 0xF040, + OP_MOV_imm_T2 = 0xF040, + OP_MVN_imm = 0xF060, + OP_EOR_imm_T1 = 0xF080, + OP_ADD_imm_T3 = 0xF100, + OP_ADD_S_imm_T3 = 0xF110, + OP_CMN_imm = 0xF110, + OP_SUB_imm_T3 = 0xF1A0, + OP_SUB_S_imm_T3 = 0xF1B0, + OP_CMP_imm_T2 = 0xF1B0, + OP_ADD_imm_T4 = 0xF200, + OP_MOV_imm_T3 = 0xF240, + OP_SUB_imm_T4 = 0xF2A0, + OP_MOVT = 0xF2C0, + OP_LDRH_reg_T2 = 0xF830, + OP_LDRH_imm_T3 = 0xF830, + OP_STR_imm_T4 = 0xF840, + OP_STR_reg_T2 = 0xF840, + OP_LDR_imm_T4 = 0xF850, + OP_LDR_reg_T2 = 0xF850, + OP_LDRH_imm_T2 = 0xF8B0, + OP_STR_imm_T3 = 0xF8C0, + OP_LDR_imm_T3 = 0xF8D0, + OP_LSL_reg_T2 = 0xFA00, + OP_LSR_reg_T2 = 0xFA20, + OP_ASR_reg_T2 = 0xFA40, + OP_ROR_reg_T2 = 0xFA60, + OP_SMULL_T1 = 0xFB80, + } OpcodeID1; + + typedef enum { + OP_B_T4b = 0x9000, + } OpcodeID2; + + struct FourFours { + FourFours(unsigned f3, unsigned f2, unsigned f1, unsigned f0) + { + m_u.f0 = f0; + m_u.f1 = f1; + m_u.f2 = f2; + m_u.f3 = f3; + } + + union { + unsigned value; + struct { + unsigned f0 : 4; + unsigned f1 : 4; + unsigned f2 : 4; + unsigned f3 : 4; + }; + } m_u; + }; + + class ARMInstructionFormatter; + + // false means else! + bool ifThenElseConditionBit(Condition condition, bool isIf) + { + return isIf ? (condition & 1) : !(condition & 1); + } + uint8_t ifThenElse(Condition condition, bool inst2if, bool inst3if, bool inst4if) + { + int mask = (ifThenElseConditionBit(condition, inst2if) << 3) + | (ifThenElseConditionBit(condition, inst3if) << 2) + | (ifThenElseConditionBit(condition, inst4if) << 1) + | 1; + ASSERT((condition != ConditionAL) || (mask & (mask - 1))); + return (condition << 4) | mask; + } + uint8_t ifThenElse(Condition condition, bool inst2if, bool inst3if) + { + int mask = (ifThenElseConditionBit(condition, inst2if) << 3) + | (ifThenElseConditionBit(condition, inst3if) << 2) + | 2; + ASSERT((condition != ConditionAL) || (mask & (mask - 1))); + return (condition << 4) | mask; + } + uint8_t ifThenElse(Condition condition, bool inst2if) + { + int mask = (ifThenElseConditionBit(condition, inst2if) << 3) + | 4; + ASSERT((condition != ConditionAL) || (mask & (mask - 1))); + return (condition << 4) | mask; + } + + uint8_t ifThenElse(Condition condition) + { + int mask = 8; + ASSERT((condition != ConditionAL) || (mask & (mask - 1))); + return (condition << 4) | mask; + } + +public: + + void add(RegisterID rd, RegisterID rn, ARMThumbImmediate imm) + { + // Rd can only be SP if Rn is also SP. + ASSERT((rd != ARM::sp) || (rn == ARM::sp)); + ASSERT(rd != ARM::pc); + ASSERT(rn != ARM::pc); + ASSERT(imm.isValid()); + + if (rn == ARM::sp) { + if (!(rd & 8) && imm.isUInt10()) { + m_formatter.oneWordOp5Reg3Imm8(OP_ADD_SP_imm_T1, rd, imm.getUInt10() >> 2); + return; + } else if ((rd == ARM::sp) && imm.isUInt9()) { + m_formatter.oneWordOp9Imm7(OP_ADD_SP_imm_T2, imm.getUInt9() >> 2); + return; + } + } else if (!((rd | rn) & 8)) { + if (imm.isUInt3()) { + m_formatter.oneWordOp7Reg3Reg3Reg3(OP_ADD_imm_T1, (RegisterID)imm.getUInt3(), rn, rd); + return; + } else if ((rd == rn) && imm.isUInt8()) { + m_formatter.oneWordOp5Reg3Imm8(OP_ADD_imm_T2, rd, imm.getUInt8()); + return; + } + } + + if (imm.isEncodedImm()) + m_formatter.twoWordOp5i6Imm4Reg4EncodedImm(OP_ADD_imm_T3, rn, rd, imm); + else { + ASSERT(imm.isUInt12()); + m_formatter.twoWordOp5i6Imm4Reg4EncodedImm(OP_ADD_imm_T4, rn, rd, imm); + } + } + + void add(RegisterID rd, RegisterID rn, RegisterID rm, ShiftTypeAndAmount shift) + { + ASSERT((rd != ARM::sp) || (rn == ARM::sp)); + ASSERT(rd != ARM::pc); + ASSERT(rn != ARM::pc); + ASSERT(!BadReg(rm)); + m_formatter.twoWordOp12Reg4FourFours(OP_ADD_reg_T3, rn, FourFours(shift.hi4(), rd, shift.lo4(), rm)); + } + + // NOTE: In an IT block, add doesn't modify the flags register. + void add(RegisterID rd, RegisterID rn, RegisterID rm) + { + if (rd == rn) + m_formatter.oneWordOp8RegReg143(OP_ADD_reg_T2, rm, rd); + else if (rd == rm) + m_formatter.oneWordOp8RegReg143(OP_ADD_reg_T2, rn, rd); + else if (!((rd | rn | rm) & 8)) + m_formatter.oneWordOp7Reg3Reg3Reg3(OP_ADD_reg_T1, rm, rn, rd); + else + add(rd, rn, rm, ShiftTypeAndAmount()); + } + + // Not allowed in an IT (if then) block. + void add_S(RegisterID rd, RegisterID rn, ARMThumbImmediate imm) + { + // Rd can only be SP if Rn is also SP. + ASSERT((rd != ARM::sp) || (rn == ARM::sp)); + ASSERT(rd != ARM::pc); + ASSERT(rn != ARM::pc); + ASSERT(imm.isEncodedImm()); + + if (!((rd | rn) & 8)) { + if (imm.isUInt3()) { + m_formatter.oneWordOp7Reg3Reg3Reg3(OP_ADD_S_imm_T1, (RegisterID)imm.getUInt3(), rn, rd); + return; + } else if ((rd == rn) && imm.isUInt8()) { + m_formatter.oneWordOp5Reg3Imm8(OP_ADD_S_imm_T2, rd, imm.getUInt8()); + return; + } + } + + m_formatter.twoWordOp5i6Imm4Reg4EncodedImm(OP_ADD_S_imm_T3, rn, rd, imm); + } + + // Not allowed in an IT (if then) block? + void add_S(RegisterID rd, RegisterID rn, RegisterID rm, ShiftTypeAndAmount shift) + { + ASSERT((rd != ARM::sp) || (rn == ARM::sp)); + ASSERT(rd != ARM::pc); + ASSERT(rn != ARM::pc); + ASSERT(!BadReg(rm)); + m_formatter.twoWordOp12Reg4FourFours(OP_ADD_S_reg_T3, rn, FourFours(shift.hi4(), rd, shift.lo4(), rm)); + } + + // Not allowed in an IT (if then) block. + void add_S(RegisterID rd, RegisterID rn, RegisterID rm) + { + if (!((rd | rn | rm) & 8)) + m_formatter.oneWordOp7Reg3Reg3Reg3(OP_ADD_S_reg_T1, rm, rn, rd); + else + add_S(rd, rn, rm, ShiftTypeAndAmount()); + } + + void ARM_and(RegisterID rd, RegisterID rn, ARMThumbImmediate imm) + { + ASSERT(!BadReg(rd)); + ASSERT(!BadReg(rn)); + ASSERT(imm.isEncodedImm()); + m_formatter.twoWordOp5i6Imm4Reg4EncodedImm(OP_AND_imm_T1, rn, rd, imm); + } + + void ARM_and(RegisterID rd, RegisterID rn, RegisterID rm, ShiftTypeAndAmount shift) + { + ASSERT(!BadReg(rd)); + ASSERT(!BadReg(rn)); + ASSERT(!BadReg(rm)); + m_formatter.twoWordOp12Reg4FourFours(OP_AND_reg_T2, rn, FourFours(shift.hi4(), rd, shift.lo4(), rm)); + } + + void ARM_and(RegisterID rd, RegisterID rn, RegisterID rm) + { + if ((rd == rn) && !((rd | rm) & 8)) + m_formatter.oneWordOp10Reg3Reg3(OP_AND_reg_T1, rm, rd); + else if ((rd == rm) && !((rd | rn) & 8)) + m_formatter.oneWordOp10Reg3Reg3(OP_AND_reg_T1, rn, rd); + else + ARM_and(rd, rn, rm, ShiftTypeAndAmount()); + } + + void asr(RegisterID rd, RegisterID rm, int32_t shiftAmount) + { + ASSERT(!BadReg(rd)); + ASSERT(!BadReg(rm)); + ShiftTypeAndAmount shift(SRType_ASR, shiftAmount); + m_formatter.twoWordOp16FourFours(OP_ASR_imm_T1, FourFours(shift.hi4(), rd, shift.lo4(), rm)); + } + + void asr(RegisterID rd, RegisterID rn, RegisterID rm) + { + ASSERT(!BadReg(rd)); + ASSERT(!BadReg(rn)); + ASSERT(!BadReg(rm)); + m_formatter.twoWordOp12Reg4FourFours(OP_ASR_reg_T2, rn, FourFours(0xf, rd, 0, rm)); + } + + // Only allowed in IT (if then) block if last instruction. + JmpSrc b() + { + m_formatter.twoWordOp16Op16(OP_B_T4a, OP_B_T4b); + return JmpSrc(m_formatter.size()); + } + + // Only allowed in IT (if then) block if last instruction. + JmpSrc blx(RegisterID rm) + { + ASSERT(rm != ARM::pc); + m_formatter.oneWordOp8RegReg143(OP_BLX, rm, (RegisterID)8); + return JmpSrc(m_formatter.size()); + } + + // Only allowed in IT (if then) block if last instruction. + JmpSrc bx(RegisterID rm) + { + m_formatter.oneWordOp8RegReg143(OP_BX, rm, (RegisterID)0); + return JmpSrc(m_formatter.size()); + } + + void bkpt(uint8_t imm=0) + { + m_formatter.oneWordOp8Imm8(OP_BKPT, imm); + } + + void cmn(RegisterID rn, ARMThumbImmediate imm) + { + ASSERT(rn != ARM::pc); + ASSERT(imm.isEncodedImm()); + + m_formatter.twoWordOp5i6Imm4Reg4EncodedImm(OP_CMN_imm, rn, (RegisterID)0xf, imm); + } + + void cmp(RegisterID rn, ARMThumbImmediate imm) + { + ASSERT(rn != ARM::pc); + ASSERT(imm.isEncodedImm()); + + if (!(rn & 8) && imm.isUInt8()) + m_formatter.oneWordOp5Reg3Imm8(OP_CMP_imm_T1, rn, imm.getUInt8()); + else + m_formatter.twoWordOp5i6Imm4Reg4EncodedImm(OP_CMP_imm_T2, rn, (RegisterID)0xf, imm); + } + + void cmp(RegisterID rn, RegisterID rm, ShiftTypeAndAmount shift) + { + ASSERT(rn != ARM::pc); + ASSERT(!BadReg(rm)); + m_formatter.twoWordOp12Reg4FourFours(OP_CMP_reg_T2, rn, FourFours(shift.hi4(), 0xf, shift.lo4(), rm)); + } + + void cmp(RegisterID rn, RegisterID rm) + { + if ((rn | rm) & 8) + cmp(rn, rm, ShiftTypeAndAmount()); + else + m_formatter.oneWordOp10Reg3Reg3(OP_CMP_reg_T1, rm, rn); + } + + // xor is not spelled with an 'e'. :-( + void eor(RegisterID rd, RegisterID rn, ARMThumbImmediate imm) + { + ASSERT(!BadReg(rd)); + ASSERT(!BadReg(rn)); + ASSERT(imm.isEncodedImm()); + m_formatter.twoWordOp5i6Imm4Reg4EncodedImm(OP_EOR_imm_T1, rn, rd, imm); + } + + // xor is not spelled with an 'e'. :-( + void eor(RegisterID rd, RegisterID rn, RegisterID rm, ShiftTypeAndAmount shift) + { + ASSERT(!BadReg(rd)); + ASSERT(!BadReg(rn)); + ASSERT(!BadReg(rm)); + m_formatter.twoWordOp12Reg4FourFours(OP_EOR_reg_T2, rn, FourFours(shift.hi4(), rd, shift.lo4(), rm)); + } + + // xor is not spelled with an 'e'. :-( + void eor(RegisterID rd, RegisterID rn, RegisterID rm) + { + if ((rd == rn) && !((rd | rm) & 8)) + m_formatter.oneWordOp10Reg3Reg3(OP_EOR_reg_T1, rm, rd); + else if ((rd == rm) && !((rd | rn) & 8)) + m_formatter.oneWordOp10Reg3Reg3(OP_EOR_reg_T1, rn, rd); + else + eor(rd, rn, rm, ShiftTypeAndAmount()); + } + + void it(Condition cond) + { + m_formatter.oneWordOp8Imm8(OP_IT, ifThenElse(cond)); + } + + void it(Condition cond, bool inst2if) + { + m_formatter.oneWordOp8Imm8(OP_IT, ifThenElse(cond, inst2if)); + } + + void it(Condition cond, bool inst2if, bool inst3if) + { + m_formatter.oneWordOp8Imm8(OP_IT, ifThenElse(cond, inst2if, inst3if)); + } + + void it(Condition cond, bool inst2if, bool inst3if, bool inst4if) + { + m_formatter.oneWordOp8Imm8(OP_IT, ifThenElse(cond, inst2if, inst3if, inst4if)); + } + + // rt == ARM::pc only allowed if last instruction in IT (if then) block. + void ldr(RegisterID rt, RegisterID rn, ARMThumbImmediate imm) + { + ASSERT(rn != ARM::pc); // LDR (literal) + ASSERT(imm.isUInt12()); + + if (!((rt | rn) & 8) && imm.isUInt7()) + m_formatter.oneWordOp5Imm5Reg3Reg3(OP_LDR_imm_T1, imm.getUInt7() >> 2, rn, rt); + else if ((rn == ARM::sp) && !(rt & 8) && imm.isUInt10()) + m_formatter.oneWordOp5Reg3Imm8(OP_LDR_imm_T2, rt, imm.getUInt10() >> 2); + else + m_formatter.twoWordOp12Reg4Reg4Imm12(OP_LDR_imm_T3, rn, rt, imm.getUInt12()); + } + + // If index is set, this is a regular offset or a pre-indexed load; + // if index is not set then is is a post-index load. + // + // If wback is set rn is updated - this is a pre or post index load, + // if wback is not set this is a regular offset memory access. + // + // (-255 <= offset <= 255) + // _reg = REG[rn] + // _tmp = _reg + offset + // MEM[index ? _tmp : _reg] = REG[rt] + // if (wback) REG[rn] = _tmp + void ldr(RegisterID rt, RegisterID rn, int offset, bool index, bool wback) + { + ASSERT(rt != ARM::pc); + ASSERT(rn != ARM::pc); + ASSERT(index || wback); + ASSERT(!wback | (rt != rn)); + + bool add = true; + if (offset < 0) { + add = false; + offset = -offset; + } + ASSERT((offset & ~0xff) == 0); + + offset |= (wback << 8); + offset |= (add << 9); + offset |= (index << 10); + offset |= (1 << 11); + + m_formatter.twoWordOp12Reg4Reg4Imm12(OP_LDR_imm_T4, rn, rt, offset); + } + + // rt == ARM::pc only allowed if last instruction in IT (if then) block. + void ldr(RegisterID rt, RegisterID rn, RegisterID rm, unsigned shift=0) + { + ASSERT(rn != ARM::pc); // LDR (literal) + ASSERT(!BadReg(rm)); + ASSERT(shift <= 3); + + if (!shift && !((rt | rn | rm) & 8)) + m_formatter.oneWordOp7Reg3Reg3Reg3(OP_LDR_reg_T1, rm, rn, rt); + else + m_formatter.twoWordOp12Reg4FourFours(OP_LDR_reg_T2, rn, FourFours(rt, 0, shift, rm)); + } + + // rt == ARM::pc only allowed if last instruction in IT (if then) block. + void ldrh(RegisterID rt, RegisterID rn, ARMThumbImmediate imm) + { + ASSERT(rn != ARM::pc); // LDR (literal) + ASSERT(imm.isUInt12()); + + if (!((rt | rn) & 8) && imm.isUInt6()) + m_formatter.oneWordOp5Imm5Reg3Reg3(OP_LDRH_imm_T1, imm.getUInt6() >> 2, rn, rt); + else + m_formatter.twoWordOp12Reg4Reg4Imm12(OP_LDRH_imm_T2, rn, rt, imm.getUInt12()); + } + + // If index is set, this is a regular offset or a pre-indexed load; + // if index is not set then is is a post-index load. + // + // If wback is set rn is updated - this is a pre or post index load, + // if wback is not set this is a regular offset memory access. + // + // (-255 <= offset <= 255) + // _reg = REG[rn] + // _tmp = _reg + offset + // MEM[index ? _tmp : _reg] = REG[rt] + // if (wback) REG[rn] = _tmp + void ldrh(RegisterID rt, RegisterID rn, int offset, bool index, bool wback) + { + ASSERT(rt != ARM::pc); + ASSERT(rn != ARM::pc); + ASSERT(index || wback); + ASSERT(!wback | (rt != rn)); + + bool add = true; + if (offset < 0) { + add = false; + offset = -offset; + } + ASSERT((offset & ~0xff) == 0); + + offset |= (wback << 8); + offset |= (add << 9); + offset |= (index << 10); + offset |= (1 << 11); + + m_formatter.twoWordOp12Reg4Reg4Imm12(OP_LDRH_imm_T3, rn, rt, offset); + } + + void ldrh(RegisterID rt, RegisterID rn, RegisterID rm, unsigned shift=0) + { + ASSERT(!BadReg(rt)); // Memory hint + ASSERT(rn != ARM::pc); // LDRH (literal) + ASSERT(!BadReg(rm)); + ASSERT(shift <= 3); + + if (!shift && !((rt | rn | rm) & 8)) + m_formatter.oneWordOp7Reg3Reg3Reg3(OP_LDRH_reg_T1, rm, rn, rt); + else + m_formatter.twoWordOp12Reg4FourFours(OP_LDRH_reg_T2, rn, FourFours(rt, 0, shift, rm)); + } + + void lsl(RegisterID rd, RegisterID rm, int32_t shiftAmount) + { + ASSERT(!BadReg(rd)); + ASSERT(!BadReg(rm)); + ShiftTypeAndAmount shift(SRType_LSL, shiftAmount); + m_formatter.twoWordOp16FourFours(OP_LSL_imm_T1, FourFours(shift.hi4(), rd, shift.lo4(), rm)); + } + + void lsl(RegisterID rd, RegisterID rn, RegisterID rm) + { + ASSERT(!BadReg(rd)); + ASSERT(!BadReg(rn)); + ASSERT(!BadReg(rm)); + m_formatter.twoWordOp12Reg4FourFours(OP_LSL_reg_T2, rn, FourFours(0xf, rd, 0, rm)); + } + + void lsr(RegisterID rd, RegisterID rm, int32_t shiftAmount) + { + ASSERT(!BadReg(rd)); + ASSERT(!BadReg(rm)); + ShiftTypeAndAmount shift(SRType_LSR, shiftAmount); + m_formatter.twoWordOp16FourFours(OP_LSR_imm_T1, FourFours(shift.hi4(), rd, shift.lo4(), rm)); + } + + void lsr(RegisterID rd, RegisterID rn, RegisterID rm) + { + ASSERT(!BadReg(rd)); + ASSERT(!BadReg(rn)); + ASSERT(!BadReg(rm)); + m_formatter.twoWordOp12Reg4FourFours(OP_LSR_reg_T2, rn, FourFours(0xf, rd, 0, rm)); + } + + void movT3(RegisterID rd, ARMThumbImmediate imm) + { + ASSERT(imm.isValid()); + ASSERT(!imm.isEncodedImm()); + ASSERT(!BadReg(rd)); + + m_formatter.twoWordOp5i6Imm4Reg4EncodedImm(OP_MOV_imm_T3, imm.m_value.imm4, rd, imm); + } + + void mov(RegisterID rd, ARMThumbImmediate imm) + { + ASSERT(imm.isValid()); + ASSERT(!BadReg(rd)); + + if ((rd < 8) && imm.isUInt8()) + m_formatter.oneWordOp5Reg3Imm8(OP_MOV_imm_T1, rd, imm.getUInt8()); + else if (imm.isEncodedImm()) + m_formatter.twoWordOp5i6Imm4Reg4EncodedImm(OP_MOV_imm_T2, 0xf, rd, imm); + else + movT3(rd, imm); + } + + void mov(RegisterID rd, RegisterID rm) + { + m_formatter.oneWordOp8RegReg143(OP_MOV_reg_T1, rm, rd); + } + + void movt(RegisterID rd, ARMThumbImmediate imm) + { + ASSERT(imm.isUInt16()); + ASSERT(!BadReg(rd)); + m_formatter.twoWordOp5i6Imm4Reg4EncodedImm(OP_MOVT, imm.m_value.imm4, rd, imm); + } + + void mvn(RegisterID rd, ARMThumbImmediate imm) + { + ASSERT(imm.isEncodedImm()); + ASSERT(!BadReg(rd)); + + m_formatter.twoWordOp5i6Imm4Reg4EncodedImm(OP_MVN_imm, 0xf, rd, imm); + } + + void mvn(RegisterID rd, RegisterID rm, ShiftTypeAndAmount shift) + { + ASSERT(!BadReg(rd)); + ASSERT(!BadReg(rm)); + m_formatter.twoWordOp16FourFours(OP_MVN_reg_T2, FourFours(shift.hi4(), rd, shift.lo4(), rm)); + } + + void mvn(RegisterID rd, RegisterID rm) + { + if (!((rd | rm) & 8)) + m_formatter.oneWordOp10Reg3Reg3(OP_MVN_reg_T1, rm, rd); + else + mvn(rd, rm, ShiftTypeAndAmount()); + } + + void orr(RegisterID rd, RegisterID rn, ARMThumbImmediate imm) + { + ASSERT(!BadReg(rd)); + ASSERT(!BadReg(rn)); + ASSERT(imm.isEncodedImm()); + m_formatter.twoWordOp5i6Imm4Reg4EncodedImm(OP_ORR_imm_T1, rn, rd, imm); + } + + void orr(RegisterID rd, RegisterID rn, RegisterID rm, ShiftTypeAndAmount shift) + { + ASSERT(!BadReg(rd)); + ASSERT(!BadReg(rn)); + ASSERT(!BadReg(rm)); + m_formatter.twoWordOp12Reg4FourFours(OP_ORR_reg_T2, rn, FourFours(shift.hi4(), rd, shift.lo4(), rm)); + } + + void orr(RegisterID rd, RegisterID rn, RegisterID rm) + { + if ((rd == rn) && !((rd | rm) & 8)) + m_formatter.oneWordOp10Reg3Reg3(OP_ORR_reg_T1, rm, rd); + else if ((rd == rm) && !((rd | rn) & 8)) + m_formatter.oneWordOp10Reg3Reg3(OP_ORR_reg_T1, rn, rd); + else + orr(rd, rn, rm, ShiftTypeAndAmount()); + } + + void ror(RegisterID rd, RegisterID rm, int32_t shiftAmount) + { + ASSERT(!BadReg(rd)); + ASSERT(!BadReg(rm)); + ShiftTypeAndAmount shift(SRType_ROR, shiftAmount); + m_formatter.twoWordOp16FourFours(OP_ROR_imm_T1, FourFours(shift.hi4(), rd, shift.lo4(), rm)); + } + + void ror(RegisterID rd, RegisterID rn, RegisterID rm) + { + ASSERT(!BadReg(rd)); + ASSERT(!BadReg(rn)); + ASSERT(!BadReg(rm)); + m_formatter.twoWordOp12Reg4FourFours(OP_ROR_reg_T2, rn, FourFours(0xf, rd, 0, rm)); + } + + void smull(RegisterID rdLo, RegisterID rdHi, RegisterID rn, RegisterID rm) + { + ASSERT(!BadReg(rdLo)); + ASSERT(!BadReg(rdHi)); + ASSERT(!BadReg(rn)); + ASSERT(!BadReg(rm)); + ASSERT(rdLo != rdHi); + m_formatter.twoWordOp12Reg4FourFours(OP_SMULL_T1, rn, FourFours(rdLo, rdHi, 0, rm)); + } + + // rt == ARM::pc only allowed if last instruction in IT (if then) block. + void str(RegisterID rt, RegisterID rn, ARMThumbImmediate imm) + { + ASSERT(rt != ARM::pc); + ASSERT(rn != ARM::pc); + ASSERT(imm.isUInt12()); + + if (!((rt | rn) & 8) && imm.isUInt7()) + m_formatter.oneWordOp5Imm5Reg3Reg3(OP_STR_imm_T1, imm.getUInt7() >> 2, rn, rt); + else if ((rn == ARM::sp) && !(rt & 8) && imm.isUInt10()) + m_formatter.oneWordOp5Reg3Imm8(OP_STR_imm_T2, rt, imm.getUInt10() >> 2); + else + m_formatter.twoWordOp12Reg4Reg4Imm12(OP_STR_imm_T3, rn, rt, imm.getUInt12()); + } + + // If index is set, this is a regular offset or a pre-indexed store; + // if index is not set then is is a post-index store. + // + // If wback is set rn is updated - this is a pre or post index store, + // if wback is not set this is a regular offset memory access. + // + // (-255 <= offset <= 255) + // _reg = REG[rn] + // _tmp = _reg + offset + // MEM[index ? _tmp : _reg] = REG[rt] + // if (wback) REG[rn] = _tmp + void str(RegisterID rt, RegisterID rn, int offset, bool index, bool wback) + { + ASSERT(rt != ARM::pc); + ASSERT(rn != ARM::pc); + ASSERT(index || wback); + ASSERT(!wback | (rt != rn)); + + bool add = true; + if (offset < 0) { + add = false; + offset = -offset; + } + ASSERT((offset & ~0xff) == 0); + + offset |= (wback << 8); + offset |= (add << 9); + offset |= (index << 10); + offset |= (1 << 11); + + m_formatter.twoWordOp12Reg4Reg4Imm12(OP_STR_imm_T4, rn, rt, offset); + } + + // rt == ARM::pc only allowed if last instruction in IT (if then) block. + void str(RegisterID rt, RegisterID rn, RegisterID rm, unsigned shift=0) + { + ASSERT(rn != ARM::pc); + ASSERT(!BadReg(rm)); + ASSERT(shift <= 3); + + if (!shift && !((rt | rn | rm) & 8)) + m_formatter.oneWordOp7Reg3Reg3Reg3(OP_STR_reg_T1, rm, rn, rt); + else + m_formatter.twoWordOp12Reg4FourFours(OP_STR_reg_T2, rn, FourFours(rt, 0, shift, rm)); + } + + void sub(RegisterID rd, RegisterID rn, ARMThumbImmediate imm) + { + // Rd can only be SP if Rn is also SP. + ASSERT((rd != ARM::sp) || (rn == ARM::sp)); + ASSERT(rd != ARM::pc); + ASSERT(rn != ARM::pc); + ASSERT(imm.isValid()); + + if ((rn == ARM::sp) && (rd == ARM::sp) && imm.isUInt9()) { + m_formatter.oneWordOp9Imm7(OP_SUB_SP_imm_T1, imm.getUInt9() >> 2); + return; + } else if (!((rd | rn) & 8)) { + if (imm.isUInt3()) { + m_formatter.oneWordOp7Reg3Reg3Reg3(OP_SUB_imm_T1, (RegisterID)imm.getUInt3(), rn, rd); + return; + } else if ((rd == rn) && imm.isUInt8()) { + m_formatter.oneWordOp5Reg3Imm8(OP_SUB_imm_T2, rd, imm.getUInt8()); + return; + } + } + + if (imm.isEncodedImm()) + m_formatter.twoWordOp5i6Imm4Reg4EncodedImm(OP_SUB_imm_T3, rn, rd, imm); + else { + ASSERT(imm.isUInt12()); + m_formatter.twoWordOp5i6Imm4Reg4EncodedImm(OP_SUB_imm_T4, rn, rd, imm); + } + } + + void sub(RegisterID rd, RegisterID rn, RegisterID rm, ShiftTypeAndAmount shift) + { + ASSERT((rd != ARM::sp) || (rn == ARM::sp)); + ASSERT(rd != ARM::pc); + ASSERT(rn != ARM::pc); + ASSERT(!BadReg(rm)); + m_formatter.twoWordOp12Reg4FourFours(OP_SUB_reg_T2, rn, FourFours(shift.hi4(), rd, shift.lo4(), rm)); + } + + // NOTE: In an IT block, add doesn't modify the flags register. + void sub(RegisterID rd, RegisterID rn, RegisterID rm) + { + if (!((rd | rn | rm) & 8)) + m_formatter.oneWordOp7Reg3Reg3Reg3(OP_SUB_reg_T1, rm, rn, rd); + else + sub(rd, rn, rm, ShiftTypeAndAmount()); + } + + // Not allowed in an IT (if then) block. + void sub_S(RegisterID rd, RegisterID rn, ARMThumbImmediate imm) + { + // Rd can only be SP if Rn is also SP. + ASSERT((rd != ARM::sp) || (rn == ARM::sp)); + ASSERT(rd != ARM::pc); + ASSERT(rn != ARM::pc); + ASSERT(imm.isValid()); + + if ((rn == ARM::sp) && (rd == ARM::sp) && imm.isUInt9()) { + m_formatter.oneWordOp9Imm7(OP_SUB_SP_imm_T1, imm.getUInt9() >> 2); + return; + } else if (!((rd | rn) & 8)) { + if (imm.isUInt3()) { + m_formatter.oneWordOp7Reg3Reg3Reg3(OP_SUB_S_imm_T1, (RegisterID)imm.getUInt3(), rn, rd); + return; + } else if ((rd == rn) && imm.isUInt8()) { + m_formatter.oneWordOp5Reg3Imm8(OP_SUB_S_imm_T2, rd, imm.getUInt8()); + return; + } + } + + m_formatter.twoWordOp5i6Imm4Reg4EncodedImm(OP_SUB_S_imm_T3, rn, rd, imm); + } + + // Not allowed in an IT (if then) block? + void sub_S(RegisterID rd, RegisterID rn, RegisterID rm, ShiftTypeAndAmount shift) + { + ASSERT((rd != ARM::sp) || (rn == ARM::sp)); + ASSERT(rd != ARM::pc); + ASSERT(rn != ARM::pc); + ASSERT(!BadReg(rm)); + m_formatter.twoWordOp12Reg4FourFours(OP_SUB_S_reg_T2, rn, FourFours(shift.hi4(), rd, shift.lo4(), rm)); + } + + // Not allowed in an IT (if then) block. + void sub_S(RegisterID rd, RegisterID rn, RegisterID rm) + { + if (!((rd | rn | rm) & 8)) + m_formatter.oneWordOp7Reg3Reg3Reg3(OP_SUB_S_reg_T1, rm, rn, rd); + else + sub_S(rd, rn, rm, ShiftTypeAndAmount()); + } + + void tst(RegisterID rn, ARMThumbImmediate imm) + { + ASSERT(!BadReg(rn)); + ASSERT(imm.isEncodedImm()); + + m_formatter.twoWordOp5i6Imm4Reg4EncodedImm(OP_TST_imm, rn, (RegisterID)0xf, imm); + } + + void tst(RegisterID rn, RegisterID rm, ShiftTypeAndAmount shift) + { + ASSERT(!BadReg(rn)); + ASSERT(!BadReg(rm)); + m_formatter.twoWordOp12Reg4FourFours(OP_TST_reg_T2, rn, FourFours(shift.hi4(), 0xf, shift.lo4(), rm)); + } + + void tst(RegisterID rn, RegisterID rm) + { + if ((rn | rm) & 8) + tst(rn, rm, ShiftTypeAndAmount()); + else + m_formatter.oneWordOp10Reg3Reg3(OP_TST_reg_T1, rm, rn); + } + + void vadd_F64(FPRegisterID rd, FPRegisterID rn, FPRegisterID rm) + { + m_formatter.vfpOp(0x0b00ee30 | doubleRegisterMask(rd, 6, 28) | doubleRegisterMask(rn, 23, 0) | doubleRegisterMask(rm, 21, 16)); + } + + void vcmp_F64(FPRegisterID rd, FPRegisterID rm) + { + m_formatter.vfpOp(0x0bc0eeb4 | doubleRegisterMask(rd, 6, 28) | doubleRegisterMask(rm, 21, 16)); + } + + void vcvt_F64_S32(FPRegisterID fd, FPRegisterID sm) + { + m_formatter.vfpOp(0x0bc0eeb8 | doubleRegisterMask(fd, 6, 28) | singleRegisterMask(sm, 16, 21)); + } + + void vcvt_S32_F64(FPRegisterID sd, FPRegisterID fm) + { + m_formatter.vfpOp(0x0bc0eebd | singleRegisterMask(sd, 28, 6) | doubleRegisterMask(fm, 21, 16)); + } + + void vldr(FPRegisterID rd, RegisterID rn, int32_t imm) + { + vmem(rd, rn, imm, true); + } + + void vmov(RegisterID rd, FPRegisterID sn) + { + m_formatter.vfpOp(0x0a10ee10 | (rd << 28) | singleRegisterMask(sn, 0, 23)); + } + + void vmov(FPRegisterID sn, RegisterID rd) + { + m_formatter.vfpOp(0x0a10ee00 | (rd << 28) | singleRegisterMask(sn, 0, 23)); + } + + // move FPSCR flags to APSR. + void vmrs_APSR_nzcv_FPSCR() + { + m_formatter.vfpOp(0xfa10eef1); + } + + void vmul_F64(FPRegisterID rd, FPRegisterID rn, FPRegisterID rm) + { + m_formatter.vfpOp(0x0b00ee20 | doubleRegisterMask(rd, 6, 28) | doubleRegisterMask(rn, 23, 0) | doubleRegisterMask(rm, 21, 16)); + } + + void vstr(FPRegisterID rd, RegisterID rn, int32_t imm) + { + vmem(rd, rn, imm, false); + } + + void vsub_F64(FPRegisterID rd, FPRegisterID rn, FPRegisterID rm) + { + m_formatter.vfpOp(0x0b40ee30 | doubleRegisterMask(rd, 6, 28) | doubleRegisterMask(rn, 23, 0) | doubleRegisterMask(rm, 21, 16)); + } + + + JmpDst label() + { + return JmpDst(m_formatter.size()); + } + + JmpDst align(int alignment) + { + while (!m_formatter.isAligned(alignment)) + bkpt(); + + return label(); + } + + static void* getRelocatedAddress(void* code, JmpSrc jump) + { + ASSERT(jump.m_offset != -1); + + return reinterpret_cast(reinterpret_cast(code) + jump.m_offset); + } + + static void* getRelocatedAddress(void* code, JmpDst destination) + { + ASSERT(destination.m_offset != -1); + + return reinterpret_cast(reinterpret_cast(code) + destination.m_offset); + } + + static int getDifferenceBetweenLabels(JmpDst src, JmpDst dst) + { + return dst.m_offset - src.m_offset; + } + + static int getDifferenceBetweenLabels(JmpDst src, JmpSrc dst) + { + return dst.m_offset - src.m_offset; + } + + static int getDifferenceBetweenLabels(JmpSrc src, JmpDst dst) + { + return dst.m_offset - src.m_offset; + } + + // Assembler admin methods: + + size_t size() const + { + return m_formatter.size(); + } + + void* executableCopy(ExecutablePool* allocator) + { + void* copy = m_formatter.executableCopy(allocator); + ASSERT(copy); + return copy; + } + + static unsigned getCallReturnOffset(JmpSrc call) + { + ASSERT(call.m_offset >= 0); + return call.m_offset; + } + + // Linking & patching: + // + // 'link' and 'patch' methods are for use on unprotected code - such as the code + // within the AssemblerBuffer, and code being patched by the patch buffer. Once + // code has been finalized it is (platform support permitting) within a non- + // writable region of memory; to modify the code in an execute-only execuable + // pool the 'repatch' and 'relink' methods should be used. + + void linkJump(JmpSrc from, JmpDst to) + { + ASSERT(to.m_offset != -1); + ASSERT(from.m_offset != -1); + + uint16_t* location = reinterpret_cast(reinterpret_cast(m_formatter.data()) + from.m_offset); + intptr_t relative = to.m_offset - from.m_offset; + + linkWithOffset(location, relative); + } + + static void linkJump(void* code, JmpSrc from, void* to) + { + ASSERT(from.m_offset != -1); + + uint16_t* location = reinterpret_cast(reinterpret_cast(code) + from.m_offset); + intptr_t relative = reinterpret_cast(to) - reinterpret_cast(location); + + linkWithOffset(location, relative); + } + + // bah, this mathod should really be static, since it is used by the LinkBuffer. + // return a bool saying whether the link was successful? + static void linkCall(void* code, JmpSrc from, void* to) + { + ASSERT(!(reinterpret_cast(code) & 1)); + ASSERT(from.m_offset != -1); + ASSERT(reinterpret_cast(to) & 1); + + patchPointer(reinterpret_cast(reinterpret_cast(code) + from.m_offset) - 1, to); + } + + static void patchPointer(void* code, JmpDst where, void* value) + { + patchPointer(reinterpret_cast(code) + where.m_offset, value); + } + + static void relinkJump(void* from, void* to) + { + ExecutableAllocator::MakeWritable unprotect(reinterpret_cast(from) - 2, 2 * sizeof(uint16_t)); + + ASSERT(!(reinterpret_cast(from) & 1)); + ASSERT(!(reinterpret_cast(to) & 1)); + + intptr_t relative = reinterpret_cast(to) - reinterpret_cast(from); + linkWithOffset(reinterpret_cast(from), relative); + } + + static void relinkCall(void* from, void* to) + { + ExecutableAllocator::MakeWritable unprotect(reinterpret_cast(from) - 5, 4 * sizeof(uint16_t)); + + ASSERT(!(reinterpret_cast(from) & 1)); + ASSERT(reinterpret_cast(to) & 1); + + patchPointer(reinterpret_cast(from) - 1, to); + } + + static void repatchInt32(void* where, int32_t value) + { + ExecutableAllocator::MakeWritable unprotect(reinterpret_cast(where) - 4, 4 * sizeof(uint16_t)); + + ASSERT(!(reinterpret_cast(where) & 1)); + + patchInt32(where, value); + } + + static void repatchPointer(void* where, void* value) + { + ExecutableAllocator::MakeWritable unprotect(reinterpret_cast(where) - 4, 4 * sizeof(uint16_t)); + + ASSERT(!(reinterpret_cast(where) & 1)); + + patchPointer(where, value); + } + + static void repatchLoadPtrToLEA(void* where) + { + ASSERT(!(reinterpret_cast(where) & 1)); + + uint16_t* loadOp = reinterpret_cast(where) + 4; + ASSERT((*loadOp & 0xfff0) == OP_LDR_reg_T2); + + ExecutableAllocator::MakeWritable unprotect(loadOp, sizeof(uint16_t)); + *loadOp = OP_ADD_reg_T3 | (*loadOp & 0xf); + } + +private: + + // Arm vfp addresses can be offset by a 9-bit ones-comp immediate, left shifted by 2. + // (i.e. +/-(0..255) 32-bit words) + void vmem(FPRegisterID rd, RegisterID rn, int32_t imm, bool isLoad) + { + bool up; + uint32_t offset; + if (imm < 0) { + offset = -imm; + up = false; + } else { + offset = imm; + up = true; + } + + // offset is effectively leftshifted by 2 already (the bottom two bits are zero, and not + // reperesented in the instruction. Left shift by 14, to mov it into position 0x00AA0000. + ASSERT((offset & ~(0xff << 2)) == 0); + offset <<= 14; + + m_formatter.vfpOp(0x0b00ed00 | offset | (up << 7) | (isLoad << 4) | doubleRegisterMask(rd, 6, 28) | rn); + } + + static void patchInt32(void* code, uint32_t value) + { + uint16_t* location = reinterpret_cast(code); + + ExecutableAllocator::MakeWritable unprotect(location - 4, 4 * sizeof(uint16_t)); + + uint16_t lo16 = value; + uint16_t hi16 = value >> 16; + + spliceHi5(location - 4, lo16); + spliceLo11(location - 3, lo16); + spliceHi5(location - 2, hi16); + spliceLo11(location - 1, hi16); + } + + static void patchPointer(void* code, void* value) + { + patchInt32(code, reinterpret_cast(value)); + } + + // Linking & patching: + // This method assumes that the JmpSrc being linked is a T4 b instruction. + static void linkWithOffset(uint16_t* instruction, intptr_t relative) + { + // Currently branches > 16m = mostly deathy. + if (((relative << 7) >> 7) != relative) { + // FIXME: This CRASH means we cannot turn the JIT on by default on arm-v7. + fprintf(stderr, "Error: Cannot link T4b.\n"); + CRASH(); + } + + // ARM encoding for the top two bits below the sign bit is 'peculiar'. + if (relative >= 0) + relative ^= 0xC00000; + + // All branch offsets should be an even distance. + ASSERT(!(relative & 1)); + + int word1 = ((relative & 0x1000000) >> 14) | ((relative & 0x3ff000) >> 12); + int word2 = ((relative & 0x800000) >> 10) | ((relative & 0x400000) >> 11) | ((relative & 0xffe) >> 1); + + instruction[-2] = OP_B_T4a | word1; + instruction[-1] = OP_B_T4b | word2; + } + + // These functions can be used to splice 16-bit immediates back into previously generated instructions. + static void spliceHi5(uint16_t* where, uint16_t what) + { + uint16_t pattern = (what >> 12) | ((what & 0x0800) >> 1); + *where = (*where & 0xFBF0) | pattern; + } + static void spliceLo11(uint16_t* where, uint16_t what) + { + uint16_t pattern = ((what & 0x0700) << 4) | (what & 0x00FF); + *where = (*where & 0x8F00) | pattern; + } + + class ARMInstructionFormatter { + public: + void oneWordOp5Reg3Imm8(OpcodeID op, RegisterID rd, uint8_t imm) + { + m_buffer.putShort(op | (rd << 8) | imm); + } + + void oneWordOp5Imm5Reg3Reg3(OpcodeID op, uint8_t imm, RegisterID reg1, RegisterID reg2) + { + m_buffer.putShort(op | (imm << 6) | (reg1 << 3) | reg2); + } + + void oneWordOp7Reg3Reg3Reg3(OpcodeID op, RegisterID reg1, RegisterID reg2, RegisterID reg3) + { + m_buffer.putShort(op | (reg1 << 6) | (reg2 << 3) | reg3); + } + + void oneWordOp8Imm8(OpcodeID op, uint8_t imm) + { + m_buffer.putShort(op | imm); + } + + void oneWordOp8RegReg143(OpcodeID op, RegisterID reg1, RegisterID reg2) + { + m_buffer.putShort(op | ((reg2 & 8) << 4) | (reg1 << 3) | (reg2 & 7)); + } + void oneWordOp9Imm7(OpcodeID op, uint8_t imm) + { + m_buffer.putShort(op | imm); + } + + void oneWordOp10Reg3Reg3(OpcodeID op, RegisterID reg1, RegisterID reg2) + { + m_buffer.putShort(op | (reg1 << 3) | reg2); + } + + void twoWordOp12Reg4FourFours(OpcodeID1 op, RegisterID reg, FourFours ff) + { + m_buffer.putShort(op | reg); + m_buffer.putShort(ff.m_u.value); + } + + void twoWordOp16FourFours(OpcodeID1 op, FourFours ff) + { + m_buffer.putShort(op); + m_buffer.putShort(ff.m_u.value); + } + + void twoWordOp16Op16(OpcodeID1 op1, OpcodeID2 op2) + { + m_buffer.putShort(op1); + m_buffer.putShort(op2); + } + + void twoWordOp5i6Imm4Reg4EncodedImm(OpcodeID1 op, int imm4, RegisterID rd, ARMThumbImmediate imm) + { + m_buffer.putShort(op | (imm.m_value.i << 10) | imm4); + m_buffer.putShort((imm.m_value.imm3 << 12) | (rd << 8) | imm.m_value.imm8); + } + + void twoWordOp12Reg4Reg4Imm12(OpcodeID1 op, RegisterID reg1, RegisterID reg2, uint16_t imm) + { + m_buffer.putShort(op | reg1); + m_buffer.putShort((reg2 << 12) | imm); + } + + void vfpOp(int32_t op) + { + m_buffer.putInt(op); + } + + + // Administrative methods: + + size_t size() const { return m_buffer.size(); } + bool isAligned(int alignment) const { return m_buffer.isAligned(alignment); } + void* data() const { return m_buffer.data(); } + void* executableCopy(ExecutablePool* allocator) { return m_buffer.executableCopy(allocator); } + + private: + AssemblerBuffer m_buffer; + } m_formatter; +}; + +} // namespace JSC + +#endif // ENABLE(ASSEMBLER) && PLATFORM_ARM_ARCH(7) + +#endif // ARMAssembler_h diff --git a/src/3rdparty/webkit/JavaScriptCore/assembler/AbstractMacroAssembler.h b/src/3rdparty/webkit/JavaScriptCore/assembler/AbstractMacroAssembler.h index 5def60f..cf94677 100644 --- a/src/3rdparty/webkit/JavaScriptCore/assembler/AbstractMacroAssembler.h +++ b/src/3rdparty/webkit/JavaScriptCore/assembler/AbstractMacroAssembler.h @@ -29,6 +29,7 @@ #include #include +#include #include #include @@ -48,15 +49,8 @@ public: typedef MacroAssemblerCodeRef CodeRef; class Jump; - class PatchBuffer; - class CodeLocationInstruction; - class CodeLocationLabel; - class CodeLocationJump; - class CodeLocationCall; - class CodeLocationNearCall; - class CodeLocationDataLabel32; - class CodeLocationDataLabelPtr; - class ProcessorReturnAddress; + class LinkBuffer; + class RepatchBuffer; typedef typename AssemblerType::RegisterID RegisterID; typedef typename AssemblerType::FPRegisterID FPRegisterID; @@ -181,17 +175,32 @@ public: struct Imm32 { explicit Imm32(int32_t value) : m_value(value) +#if PLATFORM_ARM_ARCH(7) + , m_isPointer(false) +#endif { } #if !PLATFORM(X86_64) explicit Imm32(ImmPtr ptr) : m_value(ptr.asIntptr()) +#if PLATFORM_ARM_ARCH(7) + , m_isPointer(true) +#endif { } #endif int32_t m_value; +#if PLATFORM_ARM_ARCH(7) + // We rely on being able to regenerate code to recover exception handling + // information. Since ARMv7 supports 16-bit immediates there is a danger + // that if pointer values change the layout of the generated code will change. + // To avoid this problem, always generate pointers (and thus Imm32s constructed + // from ImmPtrs) with a code sequence that is able to represent any pointer + // value - don't use a more compact form in these cases. + bool m_isPointer; +#endif }; @@ -212,7 +221,7 @@ public: friend class AbstractMacroAssembler; friend class Jump; friend class MacroAssemblerCodeRef; - friend class PatchBuffer; + friend class LinkBuffer; public: Label() @@ -237,7 +246,7 @@ public: class DataLabelPtr { template friend class AbstractMacroAssembler; - friend class PatchBuffer; + friend class LinkBuffer; public: DataLabelPtr() { @@ -259,7 +268,7 @@ public: class DataLabel32 { template friend class AbstractMacroAssembler; - friend class PatchBuffer; + friend class LinkBuffer; public: DataLabel32() { @@ -283,7 +292,7 @@ public: class Call { template friend class AbstractMacroAssembler; - friend class PatchBuffer; + friend class LinkBuffer; public: enum Flags { None = 0x0, @@ -328,7 +337,7 @@ public: template friend class AbstractMacroAssembler; friend class Call; - friend class PatchBuffer; + friend class LinkBuffer; public: Jump() { @@ -358,7 +367,7 @@ public: // A JumpList is a set of Jump objects. // All jumps in the set will be linked to the same destination. class JumpList { - friend class PatchBuffer; + friend class LinkBuffer; public: void link(AbstractMacroAssembler* masm) @@ -397,343 +406,14 @@ public: }; - // Section 3: MacroAssembler JIT instruction stream handles. - // - // The MacroAssembler supported facilities to modify a JIT generated - // instruction stream after it has been generated (relinking calls and - // jumps, and repatching data values). The following types are used - // to store handles into the underlying instruction stream, the type - // providing semantic information as to what it is that is in the - // instruction stream at this point, and thus what operations may be - // performed on it. - - - // CodeLocationCommon: - // - // Base type for other CodeLocation* types. A postion in the JIT genertaed - // instruction stream, without any semantic information. - class CodeLocationCommon { - public: - CodeLocationCommon() - { - } - - // In order to avoid the need to store multiple handles into the - // instructions stream, where the code generation is deterministic - // and the labels will always be a fixed distance apart, these - // methods may be used to recover a handle that has nopw been - // retained, based on a known fixed relative offset from one that has. - CodeLocationInstruction instructionAtOffset(int offset); - CodeLocationLabel labelAtOffset(int offset); - CodeLocationJump jumpAtOffset(int offset); - CodeLocationCall callAtOffset(int offset); - CodeLocationNearCall nearCallAtOffset(int offset); - CodeLocationDataLabelPtr dataLabelPtrAtOffset(int offset); - CodeLocationDataLabel32 dataLabel32AtOffset(int offset); - - protected: - explicit CodeLocationCommon(CodePtr location) - : m_location(location) - { - } - - void* dataLocation() { return m_location.dataLocation(); } - void* executableAddress() { return m_location.executableAddress(); } - - void reset() - { - m_location = CodePtr(); - } - - private: - CodePtr m_location; - }; - - // CodeLocationInstruction: - // - // An arbitrary instruction in the JIT code. - class CodeLocationInstruction : public CodeLocationCommon { - friend class CodeLocationCommon; - public: - CodeLocationInstruction() - { - } - - void repatchLoadPtrToLEA() - { - AssemblerType::repatchLoadPtrToLEA(this->dataLocation()); - } - - private: - explicit CodeLocationInstruction(void* location) - : CodeLocationCommon(CodePtr(location)) - { - } - }; - - // CodeLocationLabel: - // - // A point in the JIT code maked with a label. - class CodeLocationLabel : public CodeLocationCommon { - friend class CodeLocationCommon; - friend class CodeLocationJump; - friend class CodeLocationCall; - friend class CodeLocationNearCall; - friend class PatchBuffer; - friend class ProcessorReturnAddress; - - public: - CodeLocationLabel() - { - } - - void* addressForSwitch() { return this->executableAddress(); } - void* addressForExceptionHandler() { return this->executableAddress(); } - void* addressForJSR() { return this->executableAddress(); } - - bool operator!() - { - return !this->executableAddress(); - } - - void reset() - { - CodeLocationCommon::reset(); - } - - private: - explicit CodeLocationLabel(CodePtr location) - : CodeLocationCommon(location) - { - } - - explicit CodeLocationLabel(void* location) - : CodeLocationCommon(CodePtr(location)) - { - } - - void* getJumpDestination() { return this->executableAddress(); } - }; - - // CodeLocationJump: - // - // A point in the JIT code at which there is a jump instruction. - class CodeLocationJump : public CodeLocationCommon { - friend class CodeLocationCommon; - friend class PatchBuffer; - public: - CodeLocationJump() - { - } - - void relink(CodeLocationLabel destination) - { - AssemblerType::relinkJump(this->dataLocation(), destination.executableAddress()); - } - - private: - explicit CodeLocationJump(void* location) - : CodeLocationCommon(CodePtr(location)) - { - } - }; - - // CodeLocationCall: - // - // A point in the JIT code at which there is a call instruction. - class CodeLocationCall : public CodeLocationCommon { - friend class CodeLocationCommon; - friend class PatchBuffer; - friend class ProcessorReturnAddress; - public: - CodeLocationCall() - { - } - - void relink(CodeLocationLabel destination) - { -#if PLATFORM(X86_64) - CodeLocationCommon::dataLabelPtrAtOffset(-REPTACH_OFFSET_CALL_R11).repatch(destination.executableAddress()); -#else - AssemblerType::relinkCall(this->dataLocation(), destination.executableAddress()); -#endif - } - - void relink(FunctionPtr destination) - { -#if PLATFORM(X86_64) - CodeLocationCommon::dataLabelPtrAtOffset(-REPTACH_OFFSET_CALL_R11).repatch(destination.executableAddress()); -#else - AssemblerType::relinkCall(this->dataLocation(), destination.executableAddress()); -#endif - } - - // This methods returns the value that will be set as the return address - // within a function that has been called from this call instruction. - void* calleeReturnAddressValue() - { - return this->executableAddress(); - } - - private: - explicit CodeLocationCall(CodePtr location) - : CodeLocationCommon(location) - { - } - - explicit CodeLocationCall(void* location) - : CodeLocationCommon(CodePtr(location)) - { - } - }; - - // CodeLocationNearCall: - // - // A point in the JIT code at which there is a call instruction with near linkage. - class CodeLocationNearCall : public CodeLocationCommon { - friend class CodeLocationCommon; - friend class PatchBuffer; - friend class ProcessorReturnAddress; - public: - CodeLocationNearCall() - { - } - - void relink(CodePtr destination) - { - AssemblerType::relinkCall(this->dataLocation(), destination.executableAddress()); - } - - void relink(CodeLocationLabel destination) - { - AssemblerType::relinkCall(this->dataLocation(), destination.executableAddress()); - } - - void relink(FunctionPtr destination) - { - AssemblerType::relinkCall(this->dataLocation(), destination.executableAddress()); - } - - // This methods returns the value that will be set as the return address - // within a function that has been called from this call instruction. - void* calleeReturnAddressValue() - { - return this->executableAddress(); - } - - private: - explicit CodeLocationNearCall(CodePtr location) - : CodeLocationCommon(location) - { - } - - explicit CodeLocationNearCall(void* location) - : CodeLocationCommon(CodePtr(location)) - { - } - }; - - // CodeLocationDataLabel32: - // - // A point in the JIT code at which there is an int32_t immediate that may be repatched. - class CodeLocationDataLabel32 : public CodeLocationCommon { - friend class CodeLocationCommon; - friend class PatchBuffer; - public: - CodeLocationDataLabel32() - { - } - - void repatch(int32_t value) - { - AssemblerType::repatchInt32(this->dataLocation(), value); - } - - private: - explicit CodeLocationDataLabel32(void* location) - : CodeLocationCommon(CodePtr(location)) - { - } - }; - - // CodeLocationDataLabelPtr: - // - // A point in the JIT code at which there is a void* immediate that may be repatched. - class CodeLocationDataLabelPtr : public CodeLocationCommon { - friend class CodeLocationCommon; - friend class PatchBuffer; - public: - CodeLocationDataLabelPtr() - { - } - - void repatch(void* value) - { - AssemblerType::repatchPointer(this->dataLocation(), value); - } - - private: - explicit CodeLocationDataLabelPtr(void* location) - : CodeLocationCommon(CodePtr(location)) - { - } - }; - - // ProcessorReturnAddress: - // - // This class can be used to relink a call identified by its return address. - class ProcessorReturnAddress { - friend class CodeLocationCall; - friend class CodeLocationNearCall; - public: - ProcessorReturnAddress(void* location) - : m_location(location) - { - } - - void relinkCallerToTrampoline(CodeLocationLabel label) - { - CodeLocationCall(CodePtr(m_location)).relink(label); - } - - void relinkCallerToTrampoline(CodePtr newCalleeFunction) - { - relinkCallerToTrampoline(CodeLocationLabel(newCalleeFunction)); - } - - void relinkCallerToFunction(FunctionPtr function) - { - CodeLocationCall(CodePtr(m_location)).relink(function); - } - - void relinkNearCallerToTrampoline(CodeLocationLabel label) - { - CodeLocationNearCall(CodePtr(m_location)).relink(label); - } - - void relinkNearCallerToTrampoline(CodePtr newCalleeFunction) - { - relinkNearCallerToTrampoline(CodeLocationLabel(newCalleeFunction)); - } - - void* addressForLookup() - { - return m_location.value(); - } - - private: - ReturnAddressPtr m_location; - }; - - - // Section 4: PatchBuffer - utility to finalize code generation. + // Section 3: LinkBuffer - utility to finalize code generation. static CodePtr trampolineAt(CodeRef ref, Label label) { return CodePtr(AssemblerType::getRelocatedAddress(ref.m_code.dataLocation(), label.m_label)); } - // PatchBuffer: + // LinkBuffer: // // This class assists in linking code generated by the macro assembler, once code generation // has been completed, and the code has been copied to is final location in memory. At this @@ -750,12 +430,12 @@ public: // FIXME: distinguish between Calls & Jumps (make a specific call to obtain the return // address of calls, as opposed to a point that can be used to later relink a Jump - // possibly wrap the later up in an object that can do just that). - class PatchBuffer : public Noncopyable { + class LinkBuffer : public Noncopyable { public: // Note: Initialization sequence is significant, since executablePool is a PassRefPtr. // First, executablePool is copied into m_executablePool, then the initialization of // m_code uses m_executablePool, *not* executablePool, since this is no longer valid. - PatchBuffer(AbstractMacroAssembler* masm, PassRefPtr executablePool) + LinkBuffer(AbstractMacroAssembler* masm, PassRefPtr executablePool) : m_executablePool(executablePool) , m_code(masm->m_assembler.executableCopy(m_executablePool.get())) , m_size(masm->m_assembler.size()) @@ -765,7 +445,7 @@ public: { } - ~PatchBuffer() + ~LinkBuffer() { ASSERT(m_completed); } @@ -786,13 +466,13 @@ public: void link(Jump jump, CodeLocationLabel label) { - AssemblerType::linkJump(code(), jump.m_jmp, label.executableAddress()); + AssemblerType::linkJump(code(), jump.m_jmp, label.dataLocation()); } void link(JumpList list, CodeLocationLabel label) { for (unsigned i = 0; i < list.m_jumps.size(); ++i) - AssemblerType::linkJump(code(), list.m_jumps[i].m_jmp, label.executableAddress()); + AssemblerType::linkJump(code(), list.m_jumps[i].m_jmp, label.dataLocation()); } void patch(DataLabelPtr label, void* value) @@ -802,7 +482,7 @@ public: void patch(DataLabelPtr label, CodeLocationLabel value) { - AssemblerType::patchPointer(code(), label.m_label, value.getJumpDestination()); + AssemblerType::patchPointer(code(), label.m_label, value.executableAddress()); } // These methods are used to obtain handles to allow the code to be relinked / repatched later. @@ -886,8 +566,93 @@ public: #endif }; + class RepatchBuffer { + public: + RepatchBuffer() + { + } + + void relink(CodeLocationJump jump, CodeLocationLabel destination) + { + AssemblerType::relinkJump(jump.dataLocation(), destination.dataLocation()); + } + + void relink(CodeLocationCall call, CodeLocationLabel destination) + { +#if PLATFORM(X86_64) + repatch(call.dataLabelPtrAtOffset(-REPTACH_OFFSET_CALL_R11), destination.executableAddress()); +#else + AssemblerType::relinkCall(call.dataLocation(), destination.executableAddress()); +#endif + } + + void relink(CodeLocationCall call, FunctionPtr destination) + { +#if PLATFORM(X86_64) + repatch(call.dataLabelPtrAtOffset(-REPTACH_OFFSET_CALL_R11), destination.executableAddress()); +#else + AssemblerType::relinkCall(call.dataLocation(), destination.executableAddress()); +#endif + } + + void relink(CodeLocationNearCall nearCall, CodePtr destination) + { + AssemblerType::relinkCall(nearCall.dataLocation(), destination.executableAddress()); + } + + void relink(CodeLocationNearCall nearCall, CodeLocationLabel destination) + { + AssemblerType::relinkCall(nearCall.dataLocation(), destination.executableAddress()); + } + + void relink(CodeLocationNearCall nearCall, FunctionPtr destination) + { + AssemblerType::relinkCall(nearCall.dataLocation(), destination.executableAddress()); + } + + void repatch(CodeLocationDataLabel32 dataLabel32, int32_t value) + { + AssemblerType::repatchInt32(dataLabel32.dataLocation(), value); + } + + void repatch(CodeLocationDataLabelPtr dataLabelPtr, void* value) + { + AssemblerType::repatchPointer(dataLabelPtr.dataLocation(), value); + } + + void relinkCallerToTrampoline(ReturnAddressPtr returnAddress, CodeLocationLabel label) + { + relink(CodeLocationCall(CodePtr(returnAddress)), label); + } + + void relinkCallerToTrampoline(ReturnAddressPtr returnAddress, CodePtr newCalleeFunction) + { + relinkCallerToTrampoline(returnAddress, CodeLocationLabel(newCalleeFunction)); + } + + void relinkCallerToFunction(ReturnAddressPtr returnAddress, FunctionPtr function) + { + relink(CodeLocationCall(CodePtr(returnAddress)), function); + } + + void relinkNearCallerToTrampoline(ReturnAddressPtr returnAddress, CodeLocationLabel label) + { + relink(CodeLocationNearCall(CodePtr(returnAddress)), label); + } + + void relinkNearCallerToTrampoline(ReturnAddressPtr returnAddress, CodePtr newCalleeFunction) + { + relinkNearCallerToTrampoline(returnAddress, CodeLocationLabel(newCalleeFunction)); + } + + void repatchLoadPtrToLEA(CodeLocationInstruction instruction) + { + AssemblerType::repatchLoadPtrToLEA(instruction.dataLocation()); + } + }; + - // Section 5: Misc admin methods + // Section 4: Misc admin methods size_t size() { @@ -949,49 +714,6 @@ protected: AssemblerType m_assembler; }; - -template -typename AbstractMacroAssembler::CodeLocationInstruction AbstractMacroAssembler::CodeLocationCommon::instructionAtOffset(int offset) -{ - return typename AbstractMacroAssembler::CodeLocationInstruction(reinterpret_cast(dataLocation()) + offset); -} - -template -typename AbstractMacroAssembler::CodeLocationLabel AbstractMacroAssembler::CodeLocationCommon::labelAtOffset(int offset) -{ - return typename AbstractMacroAssembler::CodeLocationLabel(reinterpret_cast(dataLocation()) + offset); -} - -template -typename AbstractMacroAssembler::CodeLocationJump AbstractMacroAssembler::CodeLocationCommon::jumpAtOffset(int offset) -{ - return typename AbstractMacroAssembler::CodeLocationJump(reinterpret_cast(dataLocation()) + offset); -} - -template -typename AbstractMacroAssembler::CodeLocationCall AbstractMacroAssembler::CodeLocationCommon::callAtOffset(int offset) -{ - return typename AbstractMacroAssembler::CodeLocationCall(reinterpret_cast(dataLocation()) + offset); -} - -template -typename AbstractMacroAssembler::CodeLocationNearCall AbstractMacroAssembler::CodeLocationCommon::nearCallAtOffset(int offset) -{ - return typename AbstractMacroAssembler::CodeLocationNearCall(reinterpret_cast(dataLocation()) + offset); -} - -template -typename AbstractMacroAssembler::CodeLocationDataLabelPtr AbstractMacroAssembler::CodeLocationCommon::dataLabelPtrAtOffset(int offset) -{ - return typename AbstractMacroAssembler::CodeLocationDataLabelPtr(reinterpret_cast(dataLocation()) + offset); -} - -template -typename AbstractMacroAssembler::CodeLocationDataLabel32 AbstractMacroAssembler::CodeLocationCommon::dataLabel32AtOffset(int offset) -{ - return typename AbstractMacroAssembler::CodeLocationDataLabel32(reinterpret_cast(dataLocation()) + offset); -} - } // namespace JSC #endif // ENABLE(ASSEMBLER) diff --git a/src/3rdparty/webkit/JavaScriptCore/assembler/CodeLocation.h b/src/3rdparty/webkit/JavaScriptCore/assembler/CodeLocation.h new file mode 100644 index 0000000..b910b6f --- /dev/null +++ b/src/3rdparty/webkit/JavaScriptCore/assembler/CodeLocation.h @@ -0,0 +1,186 @@ +/* + * Copyright (C) 2009 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef CodeLocation_h +#define CodeLocation_h + +#include + +#include + +#if ENABLE(ASSEMBLER) + +namespace JSC { + +class CodeLocationInstruction; +class CodeLocationLabel; +class CodeLocationJump; +class CodeLocationCall; +class CodeLocationNearCall; +class CodeLocationDataLabel32; +class CodeLocationDataLabelPtr; + +// The CodeLocation* types are all pretty much do-nothing wrappers around +// CodePtr (or MacroAssemblerCodePtr, to give it its full name). These +// classes only exist to provide type-safety when linking and patching code. +// +// The one new piece of functionallity introduced by these classes is the +// ability to create (or put another way, to re-discover) another CodeLocation +// at an offset from one you already know. When patching code to optimize it +// we often want to patch a number of instructions that are short, fixed +// offsets apart. To reduce memory overhead we will only retain a pointer to +// one of the instructions, and we will use the *AtOffset methods provided by +// CodeLocationCommon to find the other points in the code to modify. +class CodeLocationCommon : public MacroAssemblerCodePtr { +public: + CodeLocationInstruction instructionAtOffset(int offset); + CodeLocationLabel labelAtOffset(int offset); + CodeLocationJump jumpAtOffset(int offset); + CodeLocationCall callAtOffset(int offset); + CodeLocationNearCall nearCallAtOffset(int offset); + CodeLocationDataLabelPtr dataLabelPtrAtOffset(int offset); + CodeLocationDataLabel32 dataLabel32AtOffset(int offset); + +protected: + CodeLocationCommon() + { + } + + CodeLocationCommon(MacroAssemblerCodePtr location) + : MacroAssemblerCodePtr(location) + { + } +}; + +class CodeLocationInstruction : public CodeLocationCommon { +public: + CodeLocationInstruction() {} + explicit CodeLocationInstruction(MacroAssemblerCodePtr location) + : CodeLocationCommon(location) {} + explicit CodeLocationInstruction(void* location) + : CodeLocationCommon(MacroAssemblerCodePtr(location)) {} +}; + +class CodeLocationLabel : public CodeLocationCommon { +public: + CodeLocationLabel() {} + explicit CodeLocationLabel(MacroAssemblerCodePtr location) + : CodeLocationCommon(location) {} + explicit CodeLocationLabel(void* location) + : CodeLocationCommon(MacroAssemblerCodePtr(location)) {} +}; + +class CodeLocationJump : public CodeLocationCommon { +public: + CodeLocationJump() {} + explicit CodeLocationJump(MacroAssemblerCodePtr location) + : CodeLocationCommon(location) {} + explicit CodeLocationJump(void* location) + : CodeLocationCommon(MacroAssemblerCodePtr(location)) {} +}; + +class CodeLocationCall : public CodeLocationCommon { +public: + CodeLocationCall() {} + explicit CodeLocationCall(MacroAssemblerCodePtr location) + : CodeLocationCommon(location) {} + explicit CodeLocationCall(void* location) + : CodeLocationCommon(MacroAssemblerCodePtr(location)) {} +}; + +class CodeLocationNearCall : public CodeLocationCommon { +public: + CodeLocationNearCall() {} + explicit CodeLocationNearCall(MacroAssemblerCodePtr location) + : CodeLocationCommon(location) {} + explicit CodeLocationNearCall(void* location) + : CodeLocationCommon(MacroAssemblerCodePtr(location)) {} +}; + +class CodeLocationDataLabel32 : public CodeLocationCommon { +public: + CodeLocationDataLabel32() {} + explicit CodeLocationDataLabel32(MacroAssemblerCodePtr location) + : CodeLocationCommon(location) {} + explicit CodeLocationDataLabel32(void* location) + : CodeLocationCommon(MacroAssemblerCodePtr(location)) {} +}; + +class CodeLocationDataLabelPtr : public CodeLocationCommon { +public: + CodeLocationDataLabelPtr() {} + explicit CodeLocationDataLabelPtr(MacroAssemblerCodePtr location) + : CodeLocationCommon(location) {} + explicit CodeLocationDataLabelPtr(void* location) + : CodeLocationCommon(MacroAssemblerCodePtr(location)) {} +}; + +inline CodeLocationInstruction CodeLocationCommon::instructionAtOffset(int offset) +{ + ASSERT_VALID_CODE_OFFSET(offset); + return CodeLocationInstruction(reinterpret_cast(dataLocation()) + offset); +} + +inline CodeLocationLabel CodeLocationCommon::labelAtOffset(int offset) +{ + ASSERT_VALID_CODE_OFFSET(offset); + return CodeLocationLabel(reinterpret_cast(dataLocation()) + offset); +} + +inline CodeLocationJump CodeLocationCommon::jumpAtOffset(int offset) +{ + ASSERT_VALID_CODE_OFFSET(offset); + return CodeLocationJump(reinterpret_cast(dataLocation()) + offset); +} + +inline CodeLocationCall CodeLocationCommon::callAtOffset(int offset) +{ + ASSERT_VALID_CODE_OFFSET(offset); + return CodeLocationCall(reinterpret_cast(dataLocation()) + offset); +} + +inline CodeLocationNearCall CodeLocationCommon::nearCallAtOffset(int offset) +{ + ASSERT_VALID_CODE_OFFSET(offset); + return CodeLocationNearCall(reinterpret_cast(dataLocation()) + offset); +} + +inline CodeLocationDataLabelPtr CodeLocationCommon::dataLabelPtrAtOffset(int offset) +{ + ASSERT_VALID_CODE_OFFSET(offset); + return CodeLocationDataLabelPtr(reinterpret_cast(dataLocation()) + offset); +} + +inline CodeLocationDataLabel32 CodeLocationCommon::dataLabel32AtOffset(int offset) +{ + ASSERT_VALID_CODE_OFFSET(offset); + return CodeLocationDataLabel32(reinterpret_cast(dataLocation()) + offset); +} + +} // namespace JSC + +#endif // ENABLE(ASSEMBLER) + +#endif // CodeLocation_h diff --git a/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssembler.h b/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssembler.h index f341267..43d27e7 100644 --- a/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssembler.h +++ b/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssembler.h @@ -30,7 +30,11 @@ #if ENABLE(ASSEMBLER) -#if PLATFORM(X86) +#if PLATFORM_ARM_ARCH(7) +#include "MacroAssemblerARMv7.h" +namespace JSC { typedef MacroAssemblerARMv7 MacroAssemblerBase; }; + +#elif PLATFORM(X86) #include "MacroAssemblerX86.h" namespace JSC { typedef MacroAssemblerX86 MacroAssemblerBase; }; diff --git a/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerARMv7.h b/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerARMv7.h new file mode 100644 index 0000000..bd83c60 --- /dev/null +++ b/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerARMv7.h @@ -0,0 +1,1063 @@ +/* + * Copyright (C) 2009 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef MacroAssemblerARMv7_h +#define MacroAssemblerARMv7_h + +#include + +#if ENABLE(ASSEMBLER) + +#include "ARMv7Assembler.h" +#include "AbstractMacroAssembler.h" + +namespace JSC { + +class MacroAssemblerARMv7 : public AbstractMacroAssembler { + // FIXME: switch dataTempRegister & addressTempRegister, or possibly use r7? + // - dTR is likely used more than aTR, and we'll get better instruction + // encoding if it's in the low 8 registers. + static const ARM::RegisterID dataTempRegister = ARM::ip; + static const RegisterID addressTempRegister = ARM::r3; + static const FPRegisterID fpTempRegister = ARM::d7; + + struct ArmAddress { + enum AddressType { + HasOffset, + HasIndex, + } type; + RegisterID base; + union { + int32_t offset; + struct { + RegisterID index; + Scale scale; + }; + } u; + + explicit ArmAddress(RegisterID base, int32_t offset = 0) + : type(HasOffset) + , base(base) + { + u.offset = offset; + } + + explicit ArmAddress(RegisterID base, RegisterID index, Scale scale = TimesOne) + : type(HasIndex) + , base(base) + { + u.index = index; + u.scale = scale; + } + }; + +public: + + static const Scale ScalePtr = TimesFour; + + enum Condition { + Equal = ARMv7Assembler::ConditionEQ, + NotEqual = ARMv7Assembler::ConditionNE, + Above = ARMv7Assembler::ConditionHI, + AboveOrEqual = ARMv7Assembler::ConditionHS, + Below = ARMv7Assembler::ConditionLO, + BelowOrEqual = ARMv7Assembler::ConditionLS, + GreaterThan = ARMv7Assembler::ConditionGT, + GreaterThanOrEqual = ARMv7Assembler::ConditionGE, + LessThan = ARMv7Assembler::ConditionLT, + LessThanOrEqual = ARMv7Assembler::ConditionLE, + Overflow = ARMv7Assembler::ConditionVS, + Signed = ARMv7Assembler::ConditionMI, + Zero = ARMv7Assembler::ConditionEQ, + NonZero = ARMv7Assembler::ConditionNE + }; + + enum DoubleCondition { + DoubleEqual = ARMv7Assembler::ConditionEQ, + DoubleGreaterThan = ARMv7Assembler::ConditionGT, + DoubleGreaterThanOrEqual = ARMv7Assembler::ConditionGE, + DoubleLessThan = ARMv7Assembler::ConditionLO, + DoubleLessThanOrEqual = ARMv7Assembler::ConditionLS, + }; + + static const RegisterID stackPointerRegister = ARM::sp; + static const RegisterID linkRegister = ARM::lr; + + // Integer arithmetic operations: + // + // Operations are typically two operand - operation(source, srcDst) + // For many operations the source may be an Imm32, the srcDst operand + // may often be a memory location (explictly described using an Address + // object). + + void add32(RegisterID src, RegisterID dest) + { + m_assembler.add(dest, dest, src); + } + + void add32(Imm32 imm, RegisterID dest) + { + add32(imm, dest, dest); + } + + void add32(Imm32 imm, RegisterID src, RegisterID dest) + { + ARMThumbImmediate armImm = ARMThumbImmediate::makeUInt12OrEncodedImm(imm.m_value); + if (armImm.isValid()) + m_assembler.add(dest, src, armImm); + else { + move(imm, dataTempRegister); + m_assembler.add(dest, src, dataTempRegister); + } + } + + void add32(Imm32 imm, Address address) + { + load32(address, dataTempRegister); + + ARMThumbImmediate armImm = ARMThumbImmediate::makeUInt12OrEncodedImm(imm.m_value); + if (armImm.isValid()) + m_assembler.add(dataTempRegister, dataTempRegister, armImm); + else { + // Hrrrm, since dataTempRegister holds the data loaded, + // use addressTempRegister to hold the immediate. + move(imm, addressTempRegister); + m_assembler.add(dataTempRegister, dataTempRegister, addressTempRegister); + } + + store32(dataTempRegister, address); + } + + void add32(Address src, RegisterID dest) + { + load32(src, dataTempRegister); + add32(dataTempRegister, dest); + } + + void add32(Imm32 imm, AbsoluteAddress address) + { + load32(address.m_ptr, dataTempRegister); + + ARMThumbImmediate armImm = ARMThumbImmediate::makeUInt12OrEncodedImm(imm.m_value); + if (armImm.isValid()) + m_assembler.add(dataTempRegister, dataTempRegister, armImm); + else { + // Hrrrm, since dataTempRegister holds the data loaded, + // use addressTempRegister to hold the immediate. + move(imm, addressTempRegister); + m_assembler.add(dataTempRegister, dataTempRegister, addressTempRegister); + } + + store32(dataTempRegister, address.m_ptr); + } + + void and32(RegisterID src, RegisterID dest) + { + m_assembler.ARM_and(dest, dest, src); + } + + void and32(Imm32 imm, RegisterID dest) + { + ARMThumbImmediate armImm = ARMThumbImmediate::makeEncodedImm(imm.m_value); + if (armImm.isValid()) + m_assembler.ARM_and(dest, dest, armImm); + else { + move(imm, dataTempRegister); + m_assembler.ARM_and(dest, dest, dataTempRegister); + } + } + + void lshift32(Imm32 imm, RegisterID dest) + { + m_assembler.lsl(dest, dest, imm.m_value); + } + + void lshift32(RegisterID shift_amount, RegisterID dest) + { + m_assembler.lsl(dest, dest, shift_amount); + } + + void mul32(RegisterID src, RegisterID dest) + { + m_assembler.smull(dest, dataTempRegister, dest, src); + } + + void mul32(Imm32 imm, RegisterID src, RegisterID dest) + { + move(imm, dataTempRegister); + m_assembler.smull(dest, dataTempRegister, src, dataTempRegister); + } + + void not32(RegisterID srcDest) + { + m_assembler.mvn(srcDest, srcDest); + } + + void or32(RegisterID src, RegisterID dest) + { + m_assembler.orr(dest, dest, src); + } + + void or32(Imm32 imm, RegisterID dest) + { + ARMThumbImmediate armImm = ARMThumbImmediate::makeEncodedImm(imm.m_value); + if (armImm.isValid()) + m_assembler.orr(dest, dest, armImm); + else { + move(imm, dataTempRegister); + m_assembler.orr(dest, dest, dataTempRegister); + } + } + + void rshift32(RegisterID shift_amount, RegisterID dest) + { + m_assembler.asr(dest, dest, shift_amount); + } + + void rshift32(Imm32 imm, RegisterID dest) + { + m_assembler.asr(dest, dest, imm.m_value); + } + + void sub32(RegisterID src, RegisterID dest) + { + m_assembler.sub(dest, dest, src); + } + + void sub32(Imm32 imm, RegisterID dest) + { + ARMThumbImmediate armImm = ARMThumbImmediate::makeUInt12OrEncodedImm(imm.m_value); + if (armImm.isValid()) + m_assembler.sub(dest, dest, armImm); + else { + move(imm, dataTempRegister); + m_assembler.sub(dest, dest, dataTempRegister); + } + } + + void sub32(Imm32 imm, Address address) + { + load32(address, dataTempRegister); + + ARMThumbImmediate armImm = ARMThumbImmediate::makeUInt12OrEncodedImm(imm.m_value); + if (armImm.isValid()) + m_assembler.sub(dataTempRegister, dataTempRegister, armImm); + else { + // Hrrrm, since dataTempRegister holds the data loaded, + // use addressTempRegister to hold the immediate. + move(imm, addressTempRegister); + m_assembler.sub(dataTempRegister, dataTempRegister, addressTempRegister); + } + + store32(dataTempRegister, address); + } + + void sub32(Address src, RegisterID dest) + { + load32(src, dataTempRegister); + sub32(dataTempRegister, dest); + } + + void sub32(Imm32 imm, AbsoluteAddress address) + { + load32(address.m_ptr, dataTempRegister); + + ARMThumbImmediate armImm = ARMThumbImmediate::makeUInt12OrEncodedImm(imm.m_value); + if (armImm.isValid()) + m_assembler.sub(dataTempRegister, dataTempRegister, armImm); + else { + // Hrrrm, since dataTempRegister holds the data loaded, + // use addressTempRegister to hold the immediate. + move(imm, addressTempRegister); + m_assembler.sub(dataTempRegister, dataTempRegister, addressTempRegister); + } + + store32(dataTempRegister, address.m_ptr); + } + + void xor32(RegisterID src, RegisterID dest) + { + m_assembler.eor(dest, dest, src); + } + + void xor32(Imm32 imm, RegisterID dest) + { + ARMThumbImmediate armImm = ARMThumbImmediate::makeEncodedImm(imm.m_value); + if (armImm.isValid()) + m_assembler.eor(dest, dest, armImm); + else { + move(imm, dataTempRegister); + m_assembler.eor(dest, dest, dataTempRegister); + } + } + + + // Memory access operations: + // + // Loads are of the form load(address, destination) and stores of the form + // store(source, address). The source for a store may be an Imm32. Address + // operand objects to loads and store will be implicitly constructed if a + // register is passed. + +private: + void load32(ArmAddress address, RegisterID dest) + { + if (address.type == ArmAddress::HasIndex) + m_assembler.ldr(dest, address.base, address.u.index, address.u.scale); + else if (address.u.offset >= 0) { + ARMThumbImmediate armImm = ARMThumbImmediate::makeUInt12(address.u.offset); + ASSERT(armImm.isValid()); + m_assembler.ldr(dest, address.base, armImm); + } else { + ASSERT(address.u.offset >= -255); + m_assembler.ldr(dest, address.base, address.u.offset, true, false); + } + } + + void load16(ArmAddress address, RegisterID dest) + { + if (address.type == ArmAddress::HasIndex) + m_assembler.ldrh(dest, address.base, address.u.index, address.u.scale); + else if (address.u.offset >= 0) { + ARMThumbImmediate armImm = ARMThumbImmediate::makeUInt12(address.u.offset); + ASSERT(armImm.isValid()); + m_assembler.ldrh(dest, address.base, armImm); + } else { + ASSERT(address.u.offset >= -255); + m_assembler.ldrh(dest, address.base, address.u.offset, true, false); + } + } + + void store32(RegisterID src, ArmAddress address) + { + if (address.type == ArmAddress::HasIndex) + m_assembler.str(src, address.base, address.u.index, address.u.scale); + else if (address.u.offset >= 0) { + ARMThumbImmediate armImm = ARMThumbImmediate::makeUInt12(address.u.offset); + ASSERT(armImm.isValid()); + m_assembler.str(src, address.base, armImm); + } else { + ASSERT(address.u.offset >= -255); + m_assembler.str(src, address.base, address.u.offset, true, false); + } + } + +public: + void load32(ImplicitAddress address, RegisterID dest) + { + load32(setupArmAddress(address), dest); + } + + void load32(BaseIndex address, RegisterID dest) + { + load32(setupArmAddress(address), dest); + } + + void load32(void* address, RegisterID dest) + { + move(ImmPtr(address), addressTempRegister); + m_assembler.ldr(dest, addressTempRegister, ARMThumbImmediate::makeUInt16(0)); + } + + DataLabel32 load32WithAddressOffsetPatch(Address address, RegisterID dest) + { + DataLabel32 label = moveWithPatch(Imm32(address.offset), dataTempRegister); + load32(ArmAddress(address.base, dataTempRegister), dest); + return label; + } + + Label loadPtrWithPatchToLEA(Address address, RegisterID dest) + { + Label label(this); + moveFixedWidthEncoding(Imm32(address.offset), dataTempRegister); + load32(ArmAddress(address.base, dataTempRegister), dest); + return label; + } + + void load16(BaseIndex address, RegisterID dest) + { + m_assembler.ldrh(dest, makeBaseIndexBase(address), address.index, address.scale); + } + + DataLabel32 store32WithAddressOffsetPatch(RegisterID src, Address address) + { + DataLabel32 label = moveWithPatch(Imm32(address.offset), dataTempRegister); + store32(src, ArmAddress(address.base, dataTempRegister)); + return label; + } + + void store32(RegisterID src, ImplicitAddress address) + { + store32(src, setupArmAddress(address)); + } + + void store32(RegisterID src, BaseIndex address) + { + store32(src, setupArmAddress(address)); + } + + void store32(Imm32 imm, ImplicitAddress address) + { + move(imm, dataTempRegister); + store32(dataTempRegister, setupArmAddress(address)); + } + + void store32(RegisterID src, void* address) + { + move(ImmPtr(address), addressTempRegister); + m_assembler.str(src, addressTempRegister, ARMThumbImmediate::makeUInt16(0)); + } + + void store32(Imm32 imm, void* address) + { + move(imm, dataTempRegister); + store32(dataTempRegister, address); + } + + + // Floating-point operations: + + bool supportsFloatingPoint() const { return true; } + // On x86(_64) the MacroAssembler provides an interface to truncate a double to an integer. + // If a value is not representable as an integer, and possibly for some values that are, + // (on x86 INT_MIN, since this is indistinguishable from results for out-of-range/NaN input) + // a branch will be taken. It is not clear whether this interface will be well suited to + // other platforms. On ARMv7 the hardware truncation operation produces multiple possible + // failure values (saturates to INT_MIN & INT_MAX, NaN reulsts in a value of 0). This is a + // temporary solution while we work out what this interface should be. Either we need to + // decide to make this interface work on all platforms, rework the interface to make it more + // generic, or decide that the MacroAssembler cannot practically be used to abstracted these + // operations, and make clients go directly to the m_assembler to plant truncation instructions. + // In short, FIXME:. + bool supportsFloatingPointTruncate() const { return false; } + + void loadDouble(ImplicitAddress address, FPRegisterID dest) + { + RegisterID base = address.base; + int32_t offset = address.offset; + + // Arm vfp addresses can be offset by a 9-bit ones-comp immediate, left shifted by 2. + if ((offset & 3) || (offset > (255 * 4)) || (offset < -(255 * 4))) { + add32(Imm32(offset), base, addressTempRegister); + base = addressTempRegister; + offset = 0; + } + + m_assembler.vldr(dest, base, offset); + } + + void storeDouble(FPRegisterID src, ImplicitAddress address) + { + RegisterID base = address.base; + int32_t offset = address.offset; + + // Arm vfp addresses can be offset by a 9-bit ones-comp immediate, left shifted by 2. + if ((offset & 3) || (offset > (255 * 4)) || (offset < -(255 * 4))) { + add32(Imm32(offset), base, addressTempRegister); + base = addressTempRegister; + offset = 0; + } + + m_assembler.vstr(src, base, offset); + } + + void addDouble(FPRegisterID src, FPRegisterID dest) + { + m_assembler.vadd_F64(dest, dest, src); + } + + void addDouble(Address src, FPRegisterID dest) + { + loadDouble(src, fpTempRegister); + addDouble(fpTempRegister, dest); + } + + void subDouble(FPRegisterID src, FPRegisterID dest) + { + m_assembler.vsub_F64(dest, dest, src); + } + + void subDouble(Address src, FPRegisterID dest) + { + loadDouble(src, fpTempRegister); + subDouble(fpTempRegister, dest); + } + + void mulDouble(FPRegisterID src, FPRegisterID dest) + { + m_assembler.vmul_F64(dest, dest, src); + } + + void mulDouble(Address src, FPRegisterID dest) + { + loadDouble(src, fpTempRegister); + mulDouble(fpTempRegister, dest); + } + + void convertInt32ToDouble(RegisterID src, FPRegisterID dest) + { + m_assembler.vmov(fpTempRegister, src); + m_assembler.vcvt_F64_S32(dest, fpTempRegister); + } + + Jump branchDouble(DoubleCondition cond, FPRegisterID left, FPRegisterID right) + { + m_assembler.vcmp_F64(left, right); + m_assembler.vmrs_APSR_nzcv_FPSCR(); + return makeBranch(cond); + } + + Jump branchTruncateDoubleToInt32(FPRegisterID, RegisterID) + { + ASSERT_NOT_REACHED(); + } + + + // Stack manipulation operations: + // + // The ABI is assumed to provide a stack abstraction to memory, + // containing machine word sized units of data. Push and pop + // operations add and remove a single register sized unit of data + // to or from the stack. Peek and poke operations read or write + // values on the stack, without moving the current stack position. + + void pop(RegisterID dest) + { + // store postindexed with writeback + m_assembler.ldr(dest, ARM::sp, sizeof(void*), false, true); + } + + void push(RegisterID src) + { + // store preindexed with writeback + m_assembler.str(src, ARM::sp, -sizeof(void*), true, true); + } + + void push(Address address) + { + load32(address, dataTempRegister); + push(dataTempRegister); + } + + void push(Imm32 imm) + { + move(imm, dataTempRegister); + push(dataTempRegister); + } + + // Register move operations: + // + // Move values in registers. + + void move(Imm32 imm, RegisterID dest) + { + uint32_t value = imm.m_value; + + if (imm.m_isPointer) + moveFixedWidthEncoding(imm, dest); + else { + ARMThumbImmediate armImm = ARMThumbImmediate::makeEncodedImm(value); + + if (armImm.isValid()) + m_assembler.mov(dest, armImm); + else if ((armImm = ARMThumbImmediate::makeEncodedImm(~value)).isValid()) + m_assembler.mvn(dest, armImm); + else { + m_assembler.mov(dest, ARMThumbImmediate::makeUInt16(value)); + if (value & 0xffff0000) + m_assembler.movt(dest, ARMThumbImmediate::makeUInt16(value >> 16)); + } + } + } + + void move(RegisterID src, RegisterID dest) + { + m_assembler.mov(dest, src); + } + + void move(ImmPtr imm, RegisterID dest) + { + move(Imm32(imm), dest); + } + + void swap(RegisterID reg1, RegisterID reg2) + { + move(reg1, dataTempRegister); + move(reg2, reg1); + move(dataTempRegister, reg2); + } + + void signExtend32ToPtr(RegisterID src, RegisterID dest) + { + if (src != dest) + move(src, dest); + } + + void zeroExtend32ToPtr(RegisterID src, RegisterID dest) + { + if (src != dest) + move(src, dest); + } + + + // Forwards / external control flow operations: + // + // This set of jump and conditional branch operations return a Jump + // object which may linked at a later point, allow forwards jump, + // or jumps that will require external linkage (after the code has been + // relocated). + // + // For branches, signed <, >, <= and >= are denoted as l, g, le, and ge + // respecitvely, for unsigned comparisons the names b, a, be, and ae are + // used (representing the names 'below' and 'above'). + // + // Operands to the comparision are provided in the expected order, e.g. + // jle32(reg1, Imm32(5)) will branch if the value held in reg1, when + // treated as a signed 32bit value, is less than or equal to 5. + // + // jz and jnz test whether the first operand is equal to zero, and take + // an optional second operand of a mask under which to perform the test. +private: + + // Should we be using TEQ for equal/not-equal? + void compare32(RegisterID left, Imm32 right) + { + int32_t imm = right.m_value; + if (!imm) + m_assembler.tst(left, left); + else { + ARMThumbImmediate armImm = ARMThumbImmediate::makeEncodedImm(imm); + if (armImm.isValid()) + m_assembler.cmp(left, armImm); + if ((armImm = ARMThumbImmediate::makeEncodedImm(-imm)).isValid()) + m_assembler.cmn(left, armImm); + else { + move(Imm32(imm), dataTempRegister); + m_assembler.cmp(left, dataTempRegister); + } + } + } + + void test32(RegisterID reg, Imm32 mask) + { + int32_t imm = mask.m_value; + + if (imm == -1) + m_assembler.tst(reg, reg); + else { + ARMThumbImmediate armImm = ARMThumbImmediate::makeEncodedImm(imm); + if (armImm.isValid()) + m_assembler.tst(reg, armImm); + else { + move(mask, dataTempRegister); + m_assembler.tst(reg, dataTempRegister); + } + } + } + +public: + Jump branch32(Condition cond, RegisterID left, RegisterID right) + { + m_assembler.cmp(left, right); + return Jump(makeBranch(cond)); + } + + Jump branch32(Condition cond, RegisterID left, Imm32 right) + { + compare32(left, right); + return Jump(makeBranch(cond)); + } + + Jump branch32(Condition cond, RegisterID left, Address right) + { + load32(right, dataTempRegister); + return branch32(cond, left, dataTempRegister); + } + + Jump branch32(Condition cond, Address left, RegisterID right) + { + load32(left, dataTempRegister); + return branch32(cond, dataTempRegister, right); + } + + Jump branch32(Condition cond, Address left, Imm32 right) + { + // use addressTempRegister incase the branch32 we call uses dataTempRegister. :-/ + load32(left, addressTempRegister); + return branch32(cond, addressTempRegister, right); + } + + Jump branch32(Condition cond, BaseIndex left, Imm32 right) + { + // use addressTempRegister incase the branch32 we call uses dataTempRegister. :-/ + load32(left, addressTempRegister); + return branch32(cond, addressTempRegister, right); + } + + Jump branch32(Condition cond, AbsoluteAddress left, RegisterID right) + { + load32(left.m_ptr, dataTempRegister); + return branch32(cond, dataTempRegister, right); + } + + Jump branch32(Condition cond, AbsoluteAddress left, Imm32 right) + { + // use addressTempRegister incase the branch32 we call uses dataTempRegister. :-/ + load32(left.m_ptr, addressTempRegister); + return branch32(cond, addressTempRegister, right); + } + + Jump branch16(Condition cond, BaseIndex left, RegisterID right) + { + load16(left, dataTempRegister); + m_assembler.lsl(addressTempRegister, right, 16); + m_assembler.lsl(dataTempRegister, dataTempRegister, 16); + return branch32(cond, dataTempRegister, addressTempRegister); + } + + Jump branch16(Condition cond, BaseIndex left, Imm32 right) + { + // use addressTempRegister incase the branch32 we call uses dataTempRegister. :-/ + load16(left, addressTempRegister); + m_assembler.lsl(addressTempRegister, addressTempRegister, 16); + return branch32(cond, addressTempRegister, Imm32(right.m_value << 16)); + } + + Jump branchTest32(Condition cond, RegisterID reg, RegisterID mask) + { + ASSERT((cond == Zero) || (cond == NonZero)); + m_assembler.tst(reg, mask); + return Jump(makeBranch(cond)); + } + + Jump branchTest32(Condition cond, RegisterID reg, Imm32 mask = Imm32(-1)) + { + ASSERT((cond == Zero) || (cond == NonZero)); + test32(reg, mask); + return Jump(makeBranch(cond)); + } + + Jump branchTest32(Condition cond, Address address, Imm32 mask = Imm32(-1)) + { + ASSERT((cond == Zero) || (cond == NonZero)); + // use addressTempRegister incase the branchTest32 we call uses dataTempRegister. :-/ + load32(address, addressTempRegister); + return branchTest32(cond, addressTempRegister, mask); + } + + Jump branchTest32(Condition cond, BaseIndex address, Imm32 mask = Imm32(-1)) + { + ASSERT((cond == Zero) || (cond == NonZero)); + // use addressTempRegister incase the branchTest32 we call uses dataTempRegister. :-/ + load32(address, addressTempRegister); + return branchTest32(cond, addressTempRegister, mask); + } + + Jump jump() + { + return Jump(makeJump()); + } + + void jump(RegisterID target) + { + m_assembler.bx(target); + } + + // Address is a memory location containing the address to jump to + void jump(Address address) + { + load32(address, dataTempRegister); + m_assembler.bx(dataTempRegister); + } + + + // Arithmetic control flow operations: + // + // This set of conditional branch operations branch based + // on the result of an arithmetic operation. The operation + // is performed as normal, storing the result. + // + // * jz operations branch if the result is zero. + // * jo operations branch if the (signed) arithmetic + // operation caused an overflow to occur. + + Jump branchAdd32(Condition cond, RegisterID src, RegisterID dest) + { + ASSERT((cond == Overflow) || (cond == Signed) || (cond == Zero) || (cond == NonZero)); + m_assembler.add_S(dest, dest, src); + return Jump(makeBranch(cond)); + } + + Jump branchAdd32(Condition cond, Imm32 imm, RegisterID dest) + { + ASSERT((cond == Overflow) || (cond == Signed) || (cond == Zero) || (cond == NonZero)); + ARMThumbImmediate armImm = ARMThumbImmediate::makeEncodedImm(imm.m_value); + if (armImm.isValid()) + m_assembler.add_S(dest, dest, armImm); + else { + move(imm, dataTempRegister); + m_assembler.add_S(dest, dest, dataTempRegister); + } + return Jump(makeBranch(cond)); + } + + Jump branchMul32(Condition cond, RegisterID src, RegisterID dest) + { + ASSERT(cond == Overflow); + m_assembler.smull(dest, dataTempRegister, dest, src); + m_assembler.asr(addressTempRegister, dest, 31); + return branch32(NotEqual, addressTempRegister, dataTempRegister); + } + + Jump branchMul32(Condition cond, Imm32 imm, RegisterID src, RegisterID dest) + { + ASSERT(cond == Overflow); + move(imm, dataTempRegister); + m_assembler.smull(dest, dataTempRegister, src, dataTempRegister); + m_assembler.asr(addressTempRegister, dest, 31); + return branch32(NotEqual, addressTempRegister, dataTempRegister); + } + + Jump branchSub32(Condition cond, RegisterID src, RegisterID dest) + { + ASSERT((cond == Overflow) || (cond == Signed) || (cond == Zero) || (cond == NonZero)); + m_assembler.sub_S(dest, dest, src); + return Jump(makeBranch(cond)); + } + + Jump branchSub32(Condition cond, Imm32 imm, RegisterID dest) + { + ASSERT((cond == Overflow) || (cond == Signed) || (cond == Zero) || (cond == NonZero)); + ARMThumbImmediate armImm = ARMThumbImmediate::makeEncodedImm(imm.m_value); + if (armImm.isValid()) + m_assembler.sub_S(dest, dest, armImm); + else { + move(imm, dataTempRegister); + m_assembler.sub_S(dest, dest, dataTempRegister); + } + return Jump(makeBranch(cond)); + } + + + // Miscellaneous operations: + + void breakpoint() + { + m_assembler.bkpt(); + } + + Call nearCall() + { + moveFixedWidthEncoding(Imm32(0), dataTempRegister); + return Call(m_assembler.blx(dataTempRegister), Call::LinkableNear); + } + + Call call() + { + moveFixedWidthEncoding(Imm32(0), dataTempRegister); + return Call(m_assembler.blx(dataTempRegister), Call::Linkable); + } + + Call call(RegisterID target) + { + return Call(m_assembler.blx(target), Call::None); + } + + Call call(Address address) + { + load32(address, dataTempRegister); + return Call(m_assembler.blx(dataTempRegister), Call::None); + } + + void ret() + { + m_assembler.bx(linkRegister); + } + + void set32(Condition cond, RegisterID left, RegisterID right, RegisterID dest) + { + m_assembler.cmp(left, right); + m_assembler.it(armV7Condition(cond), false); + m_assembler.mov(dest, ARMThumbImmediate::makeUInt16(1)); + m_assembler.mov(dest, ARMThumbImmediate::makeUInt16(0)); + } + + void set32(Condition cond, RegisterID left, Imm32 right, RegisterID dest) + { + compare32(left, right); + m_assembler.it(armV7Condition(cond), false); + m_assembler.mov(dest, ARMThumbImmediate::makeUInt16(1)); + m_assembler.mov(dest, ARMThumbImmediate::makeUInt16(0)); + } + + // FIXME: + // The mask should be optional... paerhaps the argument order should be + // dest-src, operations always have a dest? ... possibly not true, considering + // asm ops like test, or pseudo ops like pop(). + void setTest32(Condition cond, Address address, Imm32 mask, RegisterID dest) + { + load32(address, dataTempRegister); + test32(dataTempRegister, mask); + m_assembler.it(armV7Condition(cond), false); + m_assembler.mov(dest, ARMThumbImmediate::makeUInt16(1)); + m_assembler.mov(dest, ARMThumbImmediate::makeUInt16(0)); + } + + + DataLabel32 moveWithPatch(Imm32 imm, RegisterID dst) + { + moveFixedWidthEncoding(imm, dst); + return DataLabel32(this); + } + + DataLabelPtr moveWithPatch(ImmPtr imm, RegisterID dst) + { + moveFixedWidthEncoding(Imm32(imm), dst); + return DataLabelPtr(this); + } + + Jump branchPtrWithPatch(Condition cond, RegisterID left, DataLabelPtr& dataLabel, ImmPtr initialRightValue = ImmPtr(0)) + { + dataLabel = moveWithPatch(initialRightValue, dataTempRegister); + return branch32(cond, left, dataTempRegister); + } + + Jump branchPtrWithPatch(Condition cond, Address left, DataLabelPtr& dataLabel, ImmPtr initialRightValue = ImmPtr(0)) + { + load32(left, addressTempRegister); + dataLabel = moveWithPatch(initialRightValue, dataTempRegister); + return branch32(cond, addressTempRegister, dataTempRegister); + } + + DataLabelPtr storePtrWithPatch(ImmPtr initialValue, ImplicitAddress address) + { + DataLabelPtr label = moveWithPatch(initialValue, dataTempRegister); + store32(dataTempRegister, address); + return label; + } + DataLabelPtr storePtrWithPatch(ImplicitAddress address) { return storePtrWithPatch(ImmPtr(0), address); } + + + Call tailRecursiveCall() + { + // Like a normal call, but don't link. + moveFixedWidthEncoding(Imm32(0), dataTempRegister); + return Call(m_assembler.bx(dataTempRegister), Call::Linkable); + } + + Call makeTailRecursiveCall(Jump oldJump) + { + oldJump.link(this); + return tailRecursiveCall(); + } + + +protected: + ARMv7Assembler::JmpSrc makeJump() + { + return m_assembler.b(); + } + + ARMv7Assembler::JmpSrc makeBranch(ARMv7Assembler::Condition cond) + { + m_assembler.it(cond); + return m_assembler.b(); + } + ARMv7Assembler::JmpSrc makeBranch(Condition cond) { return makeBranch(armV7Condition(cond)); } + ARMv7Assembler::JmpSrc makeBranch(DoubleCondition cond) { return makeBranch(armV7Condition(cond)); } + + ArmAddress setupArmAddress(BaseIndex address) + { + if (address.offset) { + ARMThumbImmediate imm = ARMThumbImmediate::makeUInt12OrEncodedImm(address.offset); + if (imm.isValid()) + m_assembler.add(addressTempRegister, address.base, imm); + else { + move(Imm32(address.offset), addressTempRegister); + m_assembler.add(addressTempRegister, addressTempRegister, address.base); + } + + return ArmAddress(addressTempRegister, address.index, address.scale); + } else + return ArmAddress(address.base, address.index, address.scale); + } + + ArmAddress setupArmAddress(Address address) + { + if ((address.offset >= -0xff) && (address.offset <= 0xfff)) + return ArmAddress(address.base, address.offset); + + move(Imm32(address.offset), addressTempRegister); + return ArmAddress(address.base, addressTempRegister); + } + + ArmAddress setupArmAddress(ImplicitAddress address) + { + if ((address.offset >= -0xff) && (address.offset <= 0xfff)) + return ArmAddress(address.base, address.offset); + + move(Imm32(address.offset), addressTempRegister); + return ArmAddress(address.base, addressTempRegister); + } + + RegisterID makeBaseIndexBase(BaseIndex address) + { + if (!address.offset) + return address.base; + + ARMThumbImmediate imm = ARMThumbImmediate::makeUInt12OrEncodedImm(address.offset); + if (imm.isValid()) + m_assembler.add(addressTempRegister, address.base, imm); + else { + move(Imm32(address.offset), addressTempRegister); + m_assembler.add(addressTempRegister, addressTempRegister, address.base); + } + + return addressTempRegister; + } + + DataLabel32 moveFixedWidthEncoding(Imm32 imm, RegisterID dst) + { + uint32_t value = imm.m_value; + m_assembler.movT3(dst, ARMThumbImmediate::makeUInt16(value & 0xffff)); + m_assembler.movt(dst, ARMThumbImmediate::makeUInt16(value >> 16)); + } + + ARMv7Assembler::Condition armV7Condition(Condition cond) + { + return static_cast(cond); + } + + ARMv7Assembler::Condition armV7Condition(DoubleCondition cond) + { + return static_cast(cond); + } +}; + +} // namespace JSC + +#endif // ENABLE(ASSEMBLER) + +#endif // MacroAssemblerARMv7_h diff --git a/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerCodeRef.h b/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerCodeRef.h index 0603060..50fca5b 100644 --- a/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerCodeRef.h +++ b/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerCodeRef.h @@ -35,6 +35,25 @@ #if ENABLE(ASSEMBLER) +// ASSERT_VALID_CODE_POINTER checks that ptr is a non-null pointer, and that it is a valid +// instruction address on the platform (for example, check any alignment requirements). +#if PLATFORM_ARM_ARCH(7) +// ARM/thumb instructions must be 16-bit aligned, but all code pointers to be loaded +// into the processor are decorated with the bottom bit set, indicating that this is +// thumb code (as oposed to 32-bit traditional ARM). The first test checks for both +// decorated and undectorated null, and the second test ensures that the pointer is +// decorated. +#define ASSERT_VALID_CODE_POINTER(ptr) \ + ASSERT(reinterpret_cast(ptr) & ~1); \ + ASSERT(reinterpret_cast(ptr) & 1) +#define ASSERT_VALID_CODE_OFFSET(offset) \ + ASSERT(!(offset & 1)) // Must be multiple of 2. +#else +#define ASSERT_VALID_CODE_POINTER(ptr) \ + ASSERT(ptr) +#define ASSERT_VALID_CODE_OFFSET(offset) // Anything goes! +#endif + namespace JSC { // FunctionPtr: @@ -52,7 +71,7 @@ public: explicit FunctionPtr(FunctionType* value) : m_value(reinterpret_cast(value)) { - ASSERT(m_value); + ASSERT_VALID_CODE_POINTER(m_value); } void* value() const { return m_value; } @@ -79,7 +98,13 @@ public: explicit ReturnAddressPtr(void* value) : m_value(value) { - ASSERT(m_value); + ASSERT_VALID_CODE_POINTER(m_value); + } + + explicit ReturnAddressPtr(FunctionPtr function) + : m_value(function.value()) + { + ASSERT_VALID_CODE_POINTER(m_value); } void* value() const { return m_value; } @@ -99,19 +124,34 @@ public: } explicit MacroAssemblerCodePtr(void* value) +#if PLATFORM_ARM_ARCH(7) + // Decorate the pointer as a thumb code pointer. + : m_value(reinterpret_cast(value) + 1) +#else : m_value(value) +#endif { - ASSERT(m_value); + ASSERT_VALID_CODE_POINTER(m_value); } explicit MacroAssemblerCodePtr(ReturnAddressPtr ra) : m_value(ra.value()) { - ASSERT(m_value); + ASSERT_VALID_CODE_POINTER(m_value); } void* executableAddress() const { return m_value; } - void* dataLocation() const { ASSERT(m_value); return m_value; } +#if PLATFORM_ARM_ARCH(7) + // To use this pointer as a data address remove the decoration. + void* dataLocation() const { ASSERT_VALID_CODE_POINTER(m_value); return reinterpret_cast(m_value) - 1; } +#else + void* dataLocation() const { ASSERT_VALID_CODE_POINTER(m_value); return m_value; } +#endif + + bool operator!() + { + return !m_value; + } private: void* m_value; diff --git a/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerX86.h b/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerX86.h index 801bf61..aaf98fd 100644 --- a/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerX86.h +++ b/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerX86.h @@ -151,7 +151,16 @@ public: return DataLabelPtr(this); } + Label loadPtrWithPatchToLEA(Address address, RegisterID dest) + { + Label label(this); + load32(address, dest); + return label; + } + bool supportsFloatingPoint() const { return m_isSSE2Present; } + // See comment on MacroAssemblerARMv7::supportsFloatingPointTruncate() + bool supportsFloatingPointTruncate() const { return m_isSSE2Present; } private: const bool m_isSSE2Present; diff --git a/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerX86_64.h b/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerX86_64.h index 4da7fe6..ffdca7c 100644 --- a/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerX86_64.h +++ b/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerX86_64.h @@ -436,7 +436,16 @@ public: return label; } + Label loadPtrWithPatchToLEA(Address address, RegisterID dest) + { + Label label(this); + loadPtr(address, dest); + return label; + } + bool supportsFloatingPoint() const { return true; } + // See comment on MacroAssemblerARMv7::supportsFloatingPointTruncate() + bool supportsFloatingPointTruncate() const { return true; } }; } // namespace JSC diff --git a/src/3rdparty/webkit/JavaScriptCore/bytecode/CodeBlock.cpp b/src/3rdparty/webkit/JavaScriptCore/bytecode/CodeBlock.cpp index d2b122a..d777f73 100644 --- a/src/3rdparty/webkit/JavaScriptCore/bytecode/CodeBlock.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/bytecode/CodeBlock.cpp @@ -1265,6 +1265,28 @@ void CodeBlock::dumpStatistics() #endif } +CodeBlock::CodeBlock(ScopeNode* ownerNode) + : m_numCalleeRegisters(0) + , m_numConstants(0) + , m_numVars(0) + , m_numParameters(0) + , m_ownerNode(ownerNode) + , m_globalData(0) +#ifndef NDEBUG + , m_instructionCount(0) +#endif + , m_needsFullScopeChain(false) + , m_usesEval(false) + , m_isNumericCompareFunction(false) + , m_codeType(NativeCode) + , m_source(0) + , m_sourceOffset(0) + , m_exceptionInfo(0) +{ +#if DUMP_CODE_BLOCK_STATISTICS + liveCodeBlockSet.add(this); +#endif +} CodeBlock::CodeBlock(ScopeNode* ownerNode, CodeType codeType, PassRefPtr sourceProvider, unsigned sourceOffset) : m_numCalleeRegisters(0) @@ -1342,6 +1364,7 @@ void CodeBlock::unlinkCallers() void CodeBlock::derefStructures(Instruction* vPC) const { + ASSERT(m_codeType != NativeCode); Interpreter* interpreter = m_globalData->interpreter; if (vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_self)) { @@ -1387,6 +1410,7 @@ void CodeBlock::derefStructures(Instruction* vPC) const void CodeBlock::refStructures(Instruction* vPC) const { + ASSERT(m_codeType != NativeCode); Interpreter* interpreter = m_globalData->interpreter; if (vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_self)) { @@ -1441,6 +1465,7 @@ void CodeBlock::mark() void CodeBlock::reparseForExceptionInfoIfNecessary(CallFrame* callFrame) { + ASSERT(m_codeType != NativeCode); if (m_exceptionInfo) return; @@ -1511,6 +1536,7 @@ void CodeBlock::reparseForExceptionInfoIfNecessary(CallFrame* callFrame) HandlerInfo* CodeBlock::handlerForBytecodeOffset(unsigned bytecodeOffset) { + ASSERT(m_codeType != NativeCode); ASSERT(bytecodeOffset < m_instructionCount); if (!m_rareData) @@ -1529,6 +1555,7 @@ HandlerInfo* CodeBlock::handlerForBytecodeOffset(unsigned bytecodeOffset) int CodeBlock::lineNumberForBytecodeOffset(CallFrame* callFrame, unsigned bytecodeOffset) { + ASSERT(m_codeType != NativeCode); ASSERT(bytecodeOffset < m_instructionCount); reparseForExceptionInfoIfNecessary(callFrame); @@ -1554,6 +1581,7 @@ int CodeBlock::lineNumberForBytecodeOffset(CallFrame* callFrame, unsigned byteco int CodeBlock::expressionRangeForBytecodeOffset(CallFrame* callFrame, unsigned bytecodeOffset, int& divot, int& startOffset, int& endOffset) { + ASSERT(m_codeType != NativeCode); ASSERT(bytecodeOffset < m_instructionCount); reparseForExceptionInfoIfNecessary(callFrame); @@ -1593,6 +1621,7 @@ int CodeBlock::expressionRangeForBytecodeOffset(CallFrame* callFrame, unsigned b bool CodeBlock::getByIdExceptionInfoForBytecodeOffset(CallFrame* callFrame, unsigned bytecodeOffset, OpcodeID& opcodeID) { + ASSERT(m_codeType != NativeCode); ASSERT(bytecodeOffset < m_instructionCount); reparseForExceptionInfoIfNecessary(callFrame); @@ -1621,6 +1650,7 @@ bool CodeBlock::getByIdExceptionInfoForBytecodeOffset(CallFrame* callFrame, unsi #if ENABLE(JIT) bool CodeBlock::functionRegisterForBytecodeOffset(unsigned bytecodeOffset, int& functionRegisterIndex) { + ASSERT(m_codeType != NativeCode); ASSERT(bytecodeOffset < m_instructionCount); if (!m_rareData || !m_rareData->m_functionRegisterInfos.size()) @@ -1647,6 +1677,7 @@ bool CodeBlock::functionRegisterForBytecodeOffset(unsigned bytecodeOffset, int& #if !ENABLE(JIT) bool CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset(unsigned bytecodeOffset) { + ASSERT(m_codeType != NativeCode); if (m_globalResolveInstructions.isEmpty()) return false; @@ -1667,6 +1698,7 @@ bool CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset(unsigned bytecodeOff #else bool CodeBlock::hasGlobalResolveInfoAtBytecodeOffset(unsigned bytecodeOffset) { + ASSERT(m_codeType != NativeCode); if (m_globalResolveInfos.isEmpty()) return false; @@ -1689,6 +1721,7 @@ bool CodeBlock::hasGlobalResolveInfoAtBytecodeOffset(unsigned bytecodeOffset) #if ENABLE(JIT) void CodeBlock::setJITCode(JITCode jitCode) { + ASSERT(m_codeType != NativeCode); ownerNode()->setJITCode(jitCode); #if !ENABLE(OPCODE_SAMPLING) if (!BytecodeGenerator::dumpsGeneratedCode()) diff --git a/src/3rdparty/webkit/JavaScriptCore/bytecode/CodeBlock.h b/src/3rdparty/webkit/JavaScriptCore/bytecode/CodeBlock.h index ac29c6c..94901f9 100644 --- a/src/3rdparty/webkit/JavaScriptCore/bytecode/CodeBlock.h +++ b/src/3rdparty/webkit/JavaScriptCore/bytecode/CodeBlock.h @@ -49,7 +49,7 @@ namespace JSC { class ExecState; - enum CodeType { GlobalCode, EvalCode, FunctionCode }; + enum CodeType { GlobalCode, EvalCode, FunctionCode, NativeCode }; static ALWAYS_INLINE int missingThisObjectMarker() { return std::numeric_limits::max(); } @@ -59,7 +59,7 @@ namespace JSC { uint32_t target; uint32_t scopeDepth; #if ENABLE(JIT) - MacroAssembler::CodeLocationLabel nativeCode; + CodeLocationLabel nativeCode; #endif }; @@ -95,10 +95,9 @@ namespace JSC { } unsigned bytecodeIndex; - MacroAssembler::CodeLocationNearCall callReturnLocation; - MacroAssembler::CodeLocationDataLabelPtr hotPathBegin; - MacroAssembler::CodeLocationNearCall hotPathOther; - MacroAssembler::CodeLocationLabel coldPathOther; + CodeLocationNearCall callReturnLocation; + CodeLocationDataLabelPtr hotPathBegin; + CodeLocationNearCall hotPathOther; CodeBlock* callee; unsigned position; @@ -112,8 +111,8 @@ namespace JSC { { } - MacroAssembler::CodeLocationCall callReturnLocation; - MacroAssembler::CodeLocationDataLabelPtr structureLabel; + CodeLocationCall callReturnLocation; + CodeLocationDataLabelPtr structureLabel; Structure* cachedStructure; }; @@ -160,17 +159,17 @@ namespace JSC { inline void* getStructureStubInfoReturnLocation(StructureStubInfo* structureStubInfo) { - return structureStubInfo->callReturnLocation.calleeReturnAddressValue(); + return structureStubInfo->callReturnLocation.executableAddress(); } inline void* getCallLinkInfoReturnLocation(CallLinkInfo* callLinkInfo) { - return callLinkInfo->callReturnLocation.calleeReturnAddressValue(); + return callLinkInfo->callReturnLocation.executableAddress(); } inline void* getMethodCallLinkInfoReturnLocation(MethodCallLinkInfo* methodCallLinkInfo) { - return methodCallLinkInfo->callReturnLocation.calleeReturnAddressValue(); + return methodCallLinkInfo->callReturnLocation.executableAddress(); } inline unsigned getCallReturnOffset(CallReturnOffsetToBytecodeIndex* pc) @@ -218,6 +217,7 @@ namespace JSC { class CodeBlock { friend class JIT; public: + CodeBlock(ScopeNode* ownerNode); CodeBlock(ScopeNode* ownerNode, CodeType, PassRefPtr, unsigned sourceOffset); ~CodeBlock(); @@ -287,25 +287,25 @@ namespace JSC { m_linkedCallerList.shrink(lastPos); } - StructureStubInfo& getStubInfo(void* returnAddress) + StructureStubInfo& getStubInfo(ReturnAddressPtr returnAddress) { - return *(binaryChop(m_structureStubInfos.begin(), m_structureStubInfos.size(), returnAddress)); + return *(binaryChop(m_structureStubInfos.begin(), m_structureStubInfos.size(), returnAddress.value())); } - CallLinkInfo& getCallLinkInfo(void* returnAddress) + CallLinkInfo& getCallLinkInfo(ReturnAddressPtr returnAddress) { - return *(binaryChop(m_callLinkInfos.begin(), m_callLinkInfos.size(), returnAddress)); + return *(binaryChop(m_callLinkInfos.begin(), m_callLinkInfos.size(), returnAddress.value())); } - MethodCallLinkInfo& getMethodCallLinkInfo(void* returnAddress) + MethodCallLinkInfo& getMethodCallLinkInfo(ReturnAddressPtr returnAddress) { - return *(binaryChop(m_methodCallLinkInfos.begin(), m_methodCallLinkInfos.size(), returnAddress)); + return *(binaryChop(m_methodCallLinkInfos.begin(), m_methodCallLinkInfos.size(), returnAddress.value())); } - unsigned getBytecodeIndex(CallFrame* callFrame, void* nativePC) + unsigned getBytecodeIndex(CallFrame* callFrame, ReturnAddressPtr returnAddress) { reparseForExceptionInfoIfNecessary(callFrame); - return binaryChop(m_exceptionInfo->m_callReturnIndexVector.begin(), m_exceptionInfo->m_callReturnIndexVector.size(), ownerNode()->generatedJITCode().offsetOf(nativePC))->bytecodeIndex; + return binaryChop(m_exceptionInfo->m_callReturnIndexVector.begin(), m_exceptionInfo->m_callReturnIndexVector.size(), ownerNode()->generatedJITCode().offsetOf(returnAddress.value()))->bytecodeIndex; } bool functionRegisterForBytecodeOffset(unsigned bytecodeOffset, int& functionRegisterIndex); @@ -340,8 +340,8 @@ namespace JSC { CodeType codeType() const { return m_codeType; } - SourceProvider* source() const { return m_source.get(); } - unsigned sourceOffset() const { return m_sourceOffset; } + SourceProvider* source() const { ASSERT(m_codeType != NativeCode); return m_source.get(); } + unsigned sourceOffset() const { ASSERT(m_codeType != NativeCode); return m_sourceOffset; } size_t numberOfJumpTargets() const { return m_jumpTargets.size(); } void addJumpTarget(unsigned jumpTarget) { m_jumpTargets.append(jumpTarget); } @@ -433,7 +433,7 @@ namespace JSC { SymbolTable& symbolTable() { return m_symbolTable; } - EvalCodeCache& evalCodeCache() { createRareDataIfNecessary(); return m_rareData->m_evalCodeCache; } + EvalCodeCache& evalCodeCache() { ASSERT(m_codeType != NativeCode); createRareDataIfNecessary(); return m_rareData->m_evalCodeCache; } void shrinkToFit(); @@ -457,6 +457,7 @@ namespace JSC { void createRareDataIfNecessary() { + ASSERT(m_codeType != NativeCode); if (!m_rareData) m_rareData.set(new RareData); } diff --git a/src/3rdparty/webkit/JavaScriptCore/bytecode/Instruction.h b/src/3rdparty/webkit/JavaScriptCore/bytecode/Instruction.h index 24ba490..eeeac6f 100644 --- a/src/3rdparty/webkit/JavaScriptCore/bytecode/Instruction.h +++ b/src/3rdparty/webkit/JavaScriptCore/bytecode/Instruction.h @@ -38,12 +38,12 @@ namespace JSC { - // *Sigh*, If the JIT is enabled we need to track the stubRountine (of type MacroAssembler::CodeLocationLabel), + // *Sigh*, If the JIT is enabled we need to track the stubRountine (of type CodeLocationLabel), // If the JIT is not in use we don't actually need the variable (that said, if the JIT is not in use we don't // curently actually use PolymorphicAccessStructureLists, which we should). Anyway, this seems like the best // solution for now - will need to something smarter if/when we actually want mixed-mode operation. #if ENABLE(JIT) - typedef MacroAssembler::CodeLocationLabel PolymorphicAccessStructureListStubRoutineType; + typedef CodeLocationLabel PolymorphicAccessStructureListStubRoutineType; #else typedef void* PolymorphicAccessStructureListStubRoutineType; #endif diff --git a/src/3rdparty/webkit/JavaScriptCore/bytecode/JumpTable.h b/src/3rdparty/webkit/JavaScriptCore/bytecode/JumpTable.h index eee773c..b4f8e44 100644 --- a/src/3rdparty/webkit/JavaScriptCore/bytecode/JumpTable.h +++ b/src/3rdparty/webkit/JavaScriptCore/bytecode/JumpTable.h @@ -40,7 +40,7 @@ namespace JSC { struct OffsetLocation { int32_t branchOffset; #if ENABLE(JIT) - MacroAssembler::CodeLocationLabel ctiOffset; + CodeLocationLabel ctiOffset; #endif }; @@ -48,7 +48,7 @@ namespace JSC { typedef HashMap, OffsetLocation> StringOffsetTable; StringOffsetTable offsetTable; #if ENABLE(JIT) - MacroAssembler::CodeLocationLabel ctiDefault; // FIXME: it should not be necessary to store this. + CodeLocationLabel ctiDefault; // FIXME: it should not be necessary to store this. #endif inline int32_t offsetForValue(UString::Rep* value, int32_t defaultOffset) @@ -61,7 +61,7 @@ namespace JSC { } #if ENABLE(JIT) - inline MacroAssembler::CodeLocationLabel ctiForValue(UString::Rep* value) + inline CodeLocationLabel ctiForValue(UString::Rep* value) { StringOffsetTable::const_iterator end = offsetTable.end(); StringOffsetTable::const_iterator loc = offsetTable.find(value); @@ -77,8 +77,8 @@ namespace JSC { Vector branchOffsets; int32_t min; #if ENABLE(JIT) - Vector ctiOffsets; - MacroAssembler::CodeLocationLabel ctiDefault; + Vector ctiOffsets; + CodeLocationLabel ctiDefault; #endif int32_t offsetForValue(int32_t value, int32_t defaultOffset); @@ -89,7 +89,7 @@ namespace JSC { } #if ENABLE(JIT) - inline MacroAssembler::CodeLocationLabel ctiForValue(int32_t value) + inline CodeLocationLabel ctiForValue(int32_t value) { if (value >= min && static_cast(value - min) < ctiOffsets.size()) return ctiOffsets[value - min]; diff --git a/src/3rdparty/webkit/JavaScriptCore/bytecode/StructureStubInfo.h b/src/3rdparty/webkit/JavaScriptCore/bytecode/StructureStubInfo.h index 24fcb7d..95dd266 100644 --- a/src/3rdparty/webkit/JavaScriptCore/bytecode/StructureStubInfo.h +++ b/src/3rdparty/webkit/JavaScriptCore/bytecode/StructureStubInfo.h @@ -144,9 +144,9 @@ namespace JSC { } putByIdReplace; } u; - MacroAssembler::CodeLocationLabel stubRoutine; - MacroAssembler::CodeLocationCall callReturnLocation; - MacroAssembler::CodeLocationLabel hotPathBegin; + CodeLocationLabel stubRoutine; + CodeLocationCall callReturnLocation; + CodeLocationLabel hotPathBegin; }; } // namespace JSC diff --git a/src/3rdparty/webkit/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp b/src/3rdparty/webkit/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp index 21a3016..7feb3c8 100644 --- a/src/3rdparty/webkit/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp @@ -1815,7 +1815,7 @@ RegisterID* BytecodeGenerator::emitNextPropertyName(RegisterID* dst, RegisterID* RegisterID* BytecodeGenerator::emitCatch(RegisterID* targetRegister, Label* start, Label* end) { #if ENABLE(JIT) - HandlerInfo info = { start->offsetFrom(0), end->offsetFrom(0), instructions().size(), m_dynamicScopeDepth + m_baseScopeDepth, MacroAssembler::CodeLocationLabel() }; + HandlerInfo info = { start->offsetFrom(0), end->offsetFrom(0), instructions().size(), m_dynamicScopeDepth + m_baseScopeDepth, CodeLocationLabel() }; #else HandlerInfo info = { start->offsetFrom(0), end->offsetFrom(0), instructions().size(), m_dynamicScopeDepth + m_baseScopeDepth }; #endif diff --git a/src/3rdparty/webkit/JavaScriptCore/bytecompiler/BytecodeGenerator.h b/src/3rdparty/webkit/JavaScriptCore/bytecompiler/BytecodeGenerator.h index 6813d69..21de281 100644 --- a/src/3rdparty/webkit/JavaScriptCore/bytecompiler/BytecodeGenerator.h +++ b/src/3rdparty/webkit/JavaScriptCore/bytecompiler/BytecodeGenerator.h @@ -37,11 +37,11 @@ #include "LabelScope.h" #include "Interpreter.h" #include "RegisterID.h" -#include "SegmentedVector.h" #include "SymbolTable.h" #include "Debugger.h" #include "Nodes.h" #include +#include #include namespace JSC { @@ -449,11 +449,11 @@ namespace JSC { RegisterID m_thisRegister; RegisterID m_argumentsRegister; int m_activationRegisterIndex; - SegmentedVector m_calleeRegisters; - SegmentedVector m_parameters; - SegmentedVector m_globals; - SegmentedVector m_labels; - SegmentedVector m_labelScopes; + WTF::SegmentedVector m_calleeRegisters; + WTF::SegmentedVector m_parameters; + WTF::SegmentedVector m_globals; + WTF::SegmentedVector m_labels; + WTF::SegmentedVector m_labelScopes; RefPtr m_lastConstant; int m_finallyDepth; int m_dynamicScopeDepth; diff --git a/src/3rdparty/webkit/JavaScriptCore/bytecompiler/SegmentedVector.h b/src/3rdparty/webkit/JavaScriptCore/bytecompiler/SegmentedVector.h deleted file mode 100644 index bbab04f..0000000 --- a/src/3rdparty/webkit/JavaScriptCore/bytecompiler/SegmentedVector.h +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright (C) 2008 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef SegmentedVector_h -#define SegmentedVector_h - -#include - -namespace JSC { - - // SegmentedVector is just like Vector, but it doesn't move the values - // stored in its buffer when it grows. Therefore, it is safe to keep - // pointers into a SegmentedVector. - template class SegmentedVector { - public: - SegmentedVector() - : m_size(0) - { - m_segments.append(&m_inlineSegment); - } - - ~SegmentedVector() - { - deleteAllSegments(); - } - - size_t size() const { return m_size; } - - T& at(size_t index) - { - if (index < SegmentSize) - return m_inlineSegment[index]; - return segmentFor(index)->at(subscriptFor(index)); - } - - T& operator[](size_t index) - { - return at(index); - } - - T& last() - { - return at(size() - 1); - } - - template void append(const U& value) - { - ++m_size; - - if (m_size <= SegmentSize) { - m_inlineSegment.uncheckedAppend(value); - return; - } - - if (!segmentExistsFor(m_size - 1)) - m_segments.append(new Segment); - segmentFor(m_size - 1)->uncheckedAppend(value); - } - - void removeLast() - { - if (m_size <= SegmentSize) - m_inlineSegment.removeLast(); - else - segmentFor(m_size - 1)->removeLast(); - --m_size; - } - - void grow(size_t size) - { - ASSERT(size > m_size); - ensureSegmentsFor(size); - m_size = size; - } - - void clear() - { - deleteAllSegments(); - m_segments.resize(1); - m_inlineSegment.clear(); - m_size = 0; - } - - private: - typedef Vector Segment; - - void deleteAllSegments() - { - // Skip the first segment, because it's our inline segment, which was - // not created by new. - for (size_t i = 1; i < m_segments.size(); i++) - delete m_segments[i]; - } - - bool segmentExistsFor(size_t index) - { - return index / SegmentSize < m_segments.size(); - } - - Segment* segmentFor(size_t index) - { - return m_segments[index / SegmentSize]; - } - - size_t subscriptFor(size_t index) - { - return index % SegmentSize; - } - - void ensureSegmentsFor(size_t size) - { - size_t segmentCount = m_size / SegmentSize; - if (m_size % SegmentSize) - ++segmentCount; - segmentCount = std::max(segmentCount, 1); // We always have at least our inline segment. - - size_t neededSegmentCount = size / SegmentSize; - if (size % SegmentSize) - ++neededSegmentCount; - - // Fill up to N - 1 segments. - size_t end = neededSegmentCount - 1; - for (size_t i = segmentCount - 1; i < end; ++i) - ensureSegment(i, SegmentSize); - - // Grow segment N to accomodate the remainder. - ensureSegment(end, subscriptFor(size - 1) + 1); - } - - void ensureSegment(size_t segmentIndex, size_t size) - { - ASSERT(segmentIndex <= m_segments.size()); - if (segmentIndex == m_segments.size()) - m_segments.append(new Segment); - m_segments[segmentIndex]->grow(size); - } - - size_t m_size; - Segment m_inlineSegment; - Vector m_segments; - }; - -} // namespace JSC - -#endif // SegmentedVector_h diff --git a/src/3rdparty/webkit/JavaScriptCore/config.h b/src/3rdparty/webkit/JavaScriptCore/config.h index cecae47..6681761 100644 --- a/src/3rdparty/webkit/JavaScriptCore/config.h +++ b/src/3rdparty/webkit/JavaScriptCore/config.h @@ -42,7 +42,7 @@ #define max max #define min min -#if !COMPILER(MSVC7) && !PLATFORM(WIN_CE) +#if !COMPILER(MSVC7) && !PLATFORM(WINCE) // We need to define this before the first #include of stdlib.h or it won't contain rand_s. #ifndef _CRT_RAND_S #define _CRT_RAND_S diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/DatePrototype.lut.h b/src/3rdparty/webkit/JavaScriptCore/generated/DatePrototype.lut.h index d83e680..1f43d4d 100644 --- a/src/3rdparty/webkit/JavaScriptCore/generated/DatePrototype.lut.h +++ b/src/3rdparty/webkit/JavaScriptCore/generated/DatePrototype.lut.h @@ -4,8 +4,9 @@ namespace JSC { -static const struct HashTableValue dateTableValues[45] = { +static const struct HashTableValue dateTableValues[47] = { { "toString", DontEnum|Function, (intptr_t)dateProtoFuncToString, (intptr_t)0 }, + { "toISOString", DontEnum|Function, (intptr_t)dateProtoFuncToISOString, (intptr_t)0 }, { "toUTCString", DontEnum|Function, (intptr_t)dateProtoFuncToUTCString, (intptr_t)0 }, { "toDateString", DontEnum|Function, (intptr_t)dateProtoFuncToDateString, (intptr_t)0 }, { "toTimeString", DontEnum|Function, (intptr_t)dateProtoFuncToTimeString, (intptr_t)0 }, @@ -49,6 +50,7 @@ static const struct HashTableValue dateTableValues[45] = { { "setUTCFullYear", DontEnum|Function, (intptr_t)dateProtoFuncSetUTCFullYear, (intptr_t)3 }, { "setYear", DontEnum|Function, (intptr_t)dateProtoFuncSetYear, (intptr_t)1 }, { "getYear", DontEnum|Function, (intptr_t)dateProtoFuncGetYear, (intptr_t)0 }, + { "toJSON", DontEnum|Function, (intptr_t)dateProtoFuncToJSON, (intptr_t)0 }, { 0, 0, 0, 0 } }; diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.cpp b/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.cpp index bc5ebe4..0f7625a 100644 --- a/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.cpp @@ -1,23 +1,24 @@ - -/* A Bison parser, made by GNU Bison 2.4.1. */ +/* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton implementation for Bison's Yacc-like parsers in C - - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify + + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - + the Free Software Foundation; either version 2, or (at your option) + any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License - along with this program. If not, see . */ + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -28,7 +29,7 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ @@ -46,7 +47,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.4.1" +#define YYBISON_VERSION "2.3" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -54,28 +55,159 @@ /* Pure parsers. */ #define YYPURE 1 -/* Push parsers. */ -#define YYPUSH 0 - -/* Pull parsers. */ -#define YYPULL 1 - /* Using locations. */ #define YYLSP_NEEDED 1 /* Substitute the variable and function names. */ -#define yyparse jscyyparse -#define yylex jscyylex -#define yyerror jscyyerror -#define yylval jscyylval -#define yychar jscyychar -#define yydebug jscyydebug -#define yynerrs jscyynerrs -#define yylloc jscyylloc +#define yyparse jscyyparse +#define yylex jscyylex +#define yyerror jscyyerror +#define yylval jscyylval +#define yychar jscyychar +#define yydebug jscyydebug +#define yynerrs jscyynerrs +#define yylloc jscyylloc + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + NULLTOKEN = 258, + TRUETOKEN = 259, + FALSETOKEN = 260, + BREAK = 261, + CASE = 262, + DEFAULT = 263, + FOR = 264, + NEW = 265, + VAR = 266, + CONSTTOKEN = 267, + CONTINUE = 268, + FUNCTION = 269, + RETURN = 270, + VOIDTOKEN = 271, + DELETETOKEN = 272, + IF = 273, + THISTOKEN = 274, + DO = 275, + WHILE = 276, + INTOKEN = 277, + INSTANCEOF = 278, + TYPEOF = 279, + SWITCH = 280, + WITH = 281, + RESERVED = 282, + THROW = 283, + TRY = 284, + CATCH = 285, + FINALLY = 286, + DEBUGGER = 287, + IF_WITHOUT_ELSE = 288, + ELSE = 289, + EQEQ = 290, + NE = 291, + STREQ = 292, + STRNEQ = 293, + LE = 294, + GE = 295, + OR = 296, + AND = 297, + PLUSPLUS = 298, + MINUSMINUS = 299, + LSHIFT = 300, + RSHIFT = 301, + URSHIFT = 302, + PLUSEQUAL = 303, + MINUSEQUAL = 304, + MULTEQUAL = 305, + DIVEQUAL = 306, + LSHIFTEQUAL = 307, + RSHIFTEQUAL = 308, + URSHIFTEQUAL = 309, + ANDEQUAL = 310, + MODEQUAL = 311, + XOREQUAL = 312, + OREQUAL = 313, + OPENBRACE = 314, + CLOSEBRACE = 315, + NUMBER = 316, + IDENT = 317, + STRING = 318, + AUTOPLUSPLUS = 319, + AUTOMINUSMINUS = 320 + }; +#endif +/* Tokens. */ +#define NULLTOKEN 258 +#define TRUETOKEN 259 +#define FALSETOKEN 260 +#define BREAK 261 +#define CASE 262 +#define DEFAULT 263 +#define FOR 264 +#define NEW 265 +#define VAR 266 +#define CONSTTOKEN 267 +#define CONTINUE 268 +#define FUNCTION 269 +#define RETURN 270 +#define VOIDTOKEN 271 +#define DELETETOKEN 272 +#define IF 273 +#define THISTOKEN 274 +#define DO 275 +#define WHILE 276 +#define INTOKEN 277 +#define INSTANCEOF 278 +#define TYPEOF 279 +#define SWITCH 280 +#define WITH 281 +#define RESERVED 282 +#define THROW 283 +#define TRY 284 +#define CATCH 285 +#define FINALLY 286 +#define DEBUGGER 287 +#define IF_WITHOUT_ELSE 288 +#define ELSE 289 +#define EQEQ 290 +#define NE 291 +#define STREQ 292 +#define STRNEQ 293 +#define LE 294 +#define GE 295 +#define OR 296 +#define AND 297 +#define PLUSPLUS 298 +#define MINUSMINUS 299 +#define LSHIFT 300 +#define RSHIFT 301 +#define URSHIFT 302 +#define PLUSEQUAL 303 +#define MINUSEQUAL 304 +#define MULTEQUAL 305 +#define DIVEQUAL 306 +#define LSHIFTEQUAL 307 +#define RSHIFTEQUAL 308 +#define URSHIFTEQUAL 309 +#define ANDEQUAL 310 +#define MODEQUAL 311 +#define XOREQUAL 312 +#define OREQUAL 313 +#define OPENBRACE 314 +#define CLOSEBRACE 315 +#define NUMBER 316 +#define IDENT 317 +#define STRING 318 +#define AUTOPLUSPLUS 319 +#define AUTOMINUSMINUS 320 + -/* Copy the first part of user declarations. */ -/* Line 189 of yacc.c */ + +/* Copy the first part of user declarations. */ #line 3 "../parser/Grammar.y" @@ -231,9 +363,6 @@ static inline void appendToVarDeclarationList(void* globalPtr, ParserArenaDataStack_alloc, Stack, yysize); \ - Stack = &yyptr->Stack_alloc; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ @@ -2312,20 +2361,17 @@ yy_symbol_print (yyoutput, yytype, yyvaluep, yylocationp) #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) #else static void -yy_stack_print (yybottom, yytop) - yytype_int16 *yybottom; - yytype_int16 *yytop; +yy_stack_print (bottom, top) + yytype_int16 *bottom; + yytype_int16 *top; #endif { YYFPRINTF (stderr, "Stack now"); - for (; yybottom <= yytop; yybottom++) - { - int yybot = *yybottom; - YYFPRINTF (stderr, " %d", yybot); - } + for (; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } @@ -2360,11 +2406,11 @@ yy_reduce_print (yyvsp, yylsp, yyrule) /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { - YYFPRINTF (stderr, " $%d = ", yyi + 1); + fprintf (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , &(yylsp[(yyi + 1) - (yynrhs)]) ); - YYFPRINTF (stderr, "\n"); + fprintf (stderr, "\n"); } } @@ -2646,8 +2692,10 @@ yydestruct (yymsg, yytype, yyvaluep, yylocationp) break; } } + /* Prevent warnings from -Wmissing-prototypes. */ + #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); @@ -2666,9 +2714,10 @@ int yyparse (); -/*-------------------------. -| yyparse or yypush_parse. | -`-------------------------*/ + +/*----------. +| yyparse. | +`----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ @@ -2692,97 +2741,88 @@ yyparse () #endif #endif { -/* The lookahead symbol. */ + /* The look-ahead symbol. */ int yychar; -/* The semantic value of the lookahead symbol. */ +/* The semantic value of the look-ahead symbol. */ YYSTYPE yylval; -/* Location data for the lookahead symbol. */ +/* Number of syntax errors so far. */ +int yynerrs; +/* Location data for the look-ahead symbol. */ YYLTYPE yylloc; - /* Number of syntax errors so far. */ - int yynerrs; - - int yystate; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; + int yystate; + int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Look-ahead token as an internal (translated) token number. */ + int yytoken = 0; +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif - /* The stacks and their tools: - `yyss': related to states. - `yyvs': related to semantic values. - `yyls': related to locations. + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ - /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; - yytype_int16 *yyssp; + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss = yyssa; + yytype_int16 *yyssp; - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs; - YYSTYPE *yyvsp; + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp; - /* The location stack. */ - YYLTYPE yylsa[YYINITDEPTH]; - YYLTYPE *yyls; - YYLTYPE *yylsp; + /* The location stack. */ + YYLTYPE yylsa[YYINITDEPTH]; + YYLTYPE *yyls = yylsa; + YYLTYPE *yylsp; + /* The locations where the error started and ended. */ + YYLTYPE yyerror_range[2]; - /* The locations where the error started and ended. */ - YYLTYPE yyerror_range[2]; +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) - YYSIZE_T yystacksize; + YYSIZE_T yystacksize = YYINITDEPTH; - int yyn; - int yyresult; - /* Lookahead token as an internal (translated) token number. */ - int yytoken; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; YYLTYPE yyloc; -#if YYERROR_VERBOSE - /* Buffer for error messages, and its allocated size. */ - char yymsgbuf[128]; - char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; -#endif - -#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) - /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; - yytoken = 0; - yyss = yyssa; - yyvs = yyvsa; - yyls = yylsa; - yystacksize = YYINITDEPTH; - YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ + yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ + yyssp = yyss; yyvsp = yyvs; yylsp = yyls; - #if YYLTYPE_IS_TRIVIAL /* Initialize the default location before parsing starts. */ yylloc.first_line = yylloc.last_line = 1; - yylloc.first_column = yylloc.last_column = 1; + yylloc.first_column = yylloc.last_column = 0; #endif goto yysetstate; @@ -2821,7 +2861,6 @@ YYLTYPE yylloc; &yyvs1, yysize * sizeof (*yyvsp), &yyls1, yysize * sizeof (*yylsp), &yystacksize); - yyls = yyls1; yyss = yyss1; yyvs = yyvs1; @@ -2843,9 +2882,9 @@ YYLTYPE yylloc; (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss_alloc, yyss); - YYSTACK_RELOCATE (yyvs_alloc, yyvs); - YYSTACK_RELOCATE (yyls_alloc, yyls); + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + YYSTACK_RELOCATE (yyls); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); @@ -2866,9 +2905,6 @@ YYLTYPE yylloc; YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - if (yystate == YYFINAL) - YYACCEPT; - goto yybackup; /*-----------. @@ -2877,16 +2913,16 @@ YYLTYPE yylloc; yybackup: /* Do appropriate processing given the current state. Read a - lookahead token if we need one and don't already have one. */ + look-ahead token if we need one and don't already have one. */ - /* First try to decide what to do without reference to lookahead token. */ + /* First try to decide what to do without reference to look-ahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; - /* Not known => get a lookahead token if don't already have one. */ + /* Not known => get a look-ahead token if don't already have one. */ - /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); @@ -2918,16 +2954,20 @@ yybackup: goto yyreduce; } + if (yyn == YYFINAL) + YYACCEPT; + /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; - /* Shift the lookahead token. */ + /* Shift the look-ahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - /* Discard the shifted token. */ - yychar = YYEMPTY; + /* Discard the shifted token unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; @@ -2968,43 +3008,31 @@ yyreduce: switch (yyn) { case 2: - -/* Line 1455 of yacc.c */ #line 290 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) NullNode(GLOBAL_DATA), 0, 1); ;} break; case 3: - -/* Line 1455 of yacc.c */ #line 291 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) BooleanNode(GLOBAL_DATA, true), 0, 1); ;} break; case 4: - -/* Line 1455 of yacc.c */ #line 292 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) BooleanNode(GLOBAL_DATA, false), 0, 1); ;} break; case 5: - -/* Line 1455 of yacc.c */ #line 293 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makeNumberNode(GLOBAL_DATA, (yyvsp[(1) - (1)].doubleValue)), 0, 1); ;} break; case 6: - -/* Line 1455 of yacc.c */ #line 294 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) StringNode(GLOBAL_DATA, *(yyvsp[(1) - (1)].ident)), 0, 1); ;} break; case 7: - -/* Line 1455 of yacc.c */ #line 295 "../parser/Grammar.y" { Lexer& l = *LEXER; @@ -3018,8 +3046,6 @@ yyreduce: break; case 8: - -/* Line 1455 of yacc.c */ #line 304 "../parser/Grammar.y" { Lexer& l = *LEXER; @@ -3033,36 +3059,26 @@ yyreduce: break; case 9: - -/* Line 1455 of yacc.c */ #line 316 "../parser/Grammar.y" { (yyval.propertyNode) = createNodeInfo(new (GLOBAL_DATA) PropertyNode(GLOBAL_DATA, *(yyvsp[(1) - (3)].ident), (yyvsp[(3) - (3)].expressionNode).m_node, PropertyNode::Constant), (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 10: - -/* Line 1455 of yacc.c */ #line 317 "../parser/Grammar.y" { (yyval.propertyNode) = createNodeInfo(new (GLOBAL_DATA) PropertyNode(GLOBAL_DATA, *(yyvsp[(1) - (3)].ident), (yyvsp[(3) - (3)].expressionNode).m_node, PropertyNode::Constant), (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 11: - -/* Line 1455 of yacc.c */ #line 318 "../parser/Grammar.y" { (yyval.propertyNode) = createNodeInfo(new (GLOBAL_DATA) PropertyNode(GLOBAL_DATA, Identifier(GLOBAL_DATA, UString::from((yyvsp[(1) - (3)].doubleValue))), (yyvsp[(3) - (3)].expressionNode).m_node, PropertyNode::Constant), (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 12: - -/* Line 1455 of yacc.c */ #line 319 "../parser/Grammar.y" { (yyval.propertyNode) = createNodeInfo(makeGetterOrSetterPropertyNode(globalPtr, *(yyvsp[(1) - (7)].ident), *(yyvsp[(2) - (7)].ident), 0, (yyvsp[(6) - (7)].functionBodyNode), LEXER->sourceCode((yyvsp[(5) - (7)].intValue), (yyvsp[(7) - (7)].intValue), (yylsp[(5) - (7)]).first_line)), ClosureFeature, 0); DBG((yyvsp[(6) - (7)].functionBodyNode), (yylsp[(5) - (7)]), (yylsp[(7) - (7)])); if (!(yyval.propertyNode).m_node) YYABORT; ;} break; case 13: - -/* Line 1455 of yacc.c */ #line 321 "../parser/Grammar.y" { (yyval.propertyNode) = createNodeInfo(makeGetterOrSetterPropertyNode(globalPtr, *(yyvsp[(1) - (8)].ident), *(yyvsp[(2) - (8)].ident), (yyvsp[(4) - (8)].parameterList).m_node.head, (yyvsp[(7) - (8)].functionBodyNode), LEXER->sourceCode((yyvsp[(6) - (8)].intValue), (yyvsp[(8) - (8)].intValue), (yylsp[(6) - (8)]).first_line)), (yyvsp[(4) - (8)].parameterList).m_features | ClosureFeature, 0); @@ -3075,8 +3091,6 @@ yyreduce: break; case 14: - -/* Line 1455 of yacc.c */ #line 332 "../parser/Grammar.y" { (yyval.propertyList).m_node.head = new (GLOBAL_DATA) PropertyListNode(GLOBAL_DATA, (yyvsp[(1) - (1)].propertyNode).m_node); (yyval.propertyList).m_node.tail = (yyval.propertyList).m_node.head; @@ -3085,8 +3099,6 @@ yyreduce: break; case 15: - -/* Line 1455 of yacc.c */ #line 336 "../parser/Grammar.y" { (yyval.propertyList).m_node.head = (yyvsp[(1) - (3)].propertyList).m_node.head; (yyval.propertyList).m_node.tail = new (GLOBAL_DATA) PropertyListNode(GLOBAL_DATA, (yyvsp[(3) - (3)].propertyNode).m_node, (yyvsp[(1) - (3)].propertyList).m_node.tail); @@ -3095,71 +3107,51 @@ yyreduce: break; case 17: - -/* Line 1455 of yacc.c */ #line 344 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) ObjectLiteralNode(GLOBAL_DATA), 0, 0); ;} break; case 18: - -/* Line 1455 of yacc.c */ #line 345 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) ObjectLiteralNode(GLOBAL_DATA, (yyvsp[(2) - (3)].propertyList).m_node.head), (yyvsp[(2) - (3)].propertyList).m_features, (yyvsp[(2) - (3)].propertyList).m_numConstants); ;} break; case 19: - -/* Line 1455 of yacc.c */ #line 347 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) ObjectLiteralNode(GLOBAL_DATA, (yyvsp[(2) - (4)].propertyList).m_node.head), (yyvsp[(2) - (4)].propertyList).m_features, (yyvsp[(2) - (4)].propertyList).m_numConstants); ;} break; case 20: - -/* Line 1455 of yacc.c */ #line 351 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) ThisNode(GLOBAL_DATA), ThisFeature, 0); ;} break; case 23: - -/* Line 1455 of yacc.c */ #line 354 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) ResolveNode(GLOBAL_DATA, *(yyvsp[(1) - (1)].ident), (yylsp[(1) - (1)]).first_column), (*(yyvsp[(1) - (1)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0, 0); ;} break; case 24: - -/* Line 1455 of yacc.c */ #line 355 "../parser/Grammar.y" { (yyval.expressionNode) = (yyvsp[(2) - (3)].expressionNode); ;} break; case 25: - -/* Line 1455 of yacc.c */ #line 359 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) ArrayNode(GLOBAL_DATA, (yyvsp[(2) - (3)].intValue)), 0, (yyvsp[(2) - (3)].intValue) ? 1 : 0); ;} break; case 26: - -/* Line 1455 of yacc.c */ #line 360 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) ArrayNode(GLOBAL_DATA, (yyvsp[(2) - (3)].elementList).m_node.head), (yyvsp[(2) - (3)].elementList).m_features, (yyvsp[(2) - (3)].elementList).m_numConstants); ;} break; case 27: - -/* Line 1455 of yacc.c */ #line 361 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) ArrayNode(GLOBAL_DATA, (yyvsp[(4) - (5)].intValue), (yyvsp[(2) - (5)].elementList).m_node.head), (yyvsp[(2) - (5)].elementList).m_features, (yyvsp[(4) - (5)].intValue) ? (yyvsp[(2) - (5)].elementList).m_numConstants + 1 : (yyvsp[(2) - (5)].elementList).m_numConstants); ;} break; case 28: - -/* Line 1455 of yacc.c */ #line 365 "../parser/Grammar.y" { (yyval.elementList).m_node.head = new (GLOBAL_DATA) ElementNode(GLOBAL_DATA, (yyvsp[(1) - (2)].intValue), (yyvsp[(2) - (2)].expressionNode).m_node); (yyval.elementList).m_node.tail = (yyval.elementList).m_node.head; @@ -3168,8 +3160,6 @@ yyreduce: break; case 29: - -/* Line 1455 of yacc.c */ #line 370 "../parser/Grammar.y" { (yyval.elementList).m_node.head = (yyvsp[(1) - (4)].elementList).m_node.head; (yyval.elementList).m_node.tail = new (GLOBAL_DATA) ElementNode(GLOBAL_DATA, (yyvsp[(1) - (4)].elementList).m_node.tail, (yyvsp[(3) - (4)].intValue), (yyvsp[(4) - (4)].expressionNode).m_node); @@ -3178,36 +3168,26 @@ yyreduce: break; case 30: - -/* Line 1455 of yacc.c */ #line 377 "../parser/Grammar.y" { (yyval.intValue) = 0; ;} break; case 32: - -/* Line 1455 of yacc.c */ #line 382 "../parser/Grammar.y" { (yyval.intValue) = 1; ;} break; case 33: - -/* Line 1455 of yacc.c */ #line 383 "../parser/Grammar.y" { (yyval.intValue) = (yyvsp[(1) - (2)].intValue) + 1; ;} break; case 35: - -/* Line 1455 of yacc.c */ #line 388 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo((yyvsp[(1) - (1)].funcExprNode).m_node, (yyvsp[(1) - (1)].funcExprNode).m_features, (yyvsp[(1) - (1)].funcExprNode).m_numConstants); ;} break; case 36: - -/* Line 1455 of yacc.c */ #line 389 "../parser/Grammar.y" { BracketAccessorNode* node = new (GLOBAL_DATA) BracketAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_features & AssignFeature); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (4)]).first_column, (yylsp[(1) - (4)]).last_column, (yylsp[(4) - (4)]).last_column); @@ -3216,8 +3196,6 @@ yyreduce: break; case 37: - -/* Line 1455 of yacc.c */ #line 393 "../parser/Grammar.y" { DotAccessorNode* node = new (GLOBAL_DATA) DotAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, *(yyvsp[(3) - (3)].ident)); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (3)]).first_column, (yylsp[(1) - (3)]).last_column, (yylsp[(3) - (3)]).last_column); @@ -3226,8 +3204,6 @@ yyreduce: break; case 38: - -/* Line 1455 of yacc.c */ #line 397 "../parser/Grammar.y" { NewExprNode* node = new (GLOBAL_DATA) NewExprNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].argumentsNode).m_node); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(3) - (3)]).last_column); @@ -3236,8 +3212,6 @@ yyreduce: break; case 40: - -/* Line 1455 of yacc.c */ #line 405 "../parser/Grammar.y" { BracketAccessorNode* node = new (GLOBAL_DATA) BracketAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_features & AssignFeature); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (4)]).first_column, (yylsp[(1) - (4)]).last_column, (yylsp[(4) - (4)]).last_column); @@ -3246,8 +3220,6 @@ yyreduce: break; case 41: - -/* Line 1455 of yacc.c */ #line 409 "../parser/Grammar.y" { DotAccessorNode* node = new (GLOBAL_DATA) DotAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, *(yyvsp[(3) - (3)].ident)); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (3)]).first_column, (yylsp[(1) - (3)]).last_column, (yylsp[(3) - (3)]).last_column); @@ -3256,8 +3228,6 @@ yyreduce: break; case 42: - -/* Line 1455 of yacc.c */ #line 413 "../parser/Grammar.y" { NewExprNode* node = new (GLOBAL_DATA) NewExprNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].argumentsNode).m_node); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(3) - (3)]).last_column); @@ -3266,8 +3236,6 @@ yyreduce: break; case 44: - -/* Line 1455 of yacc.c */ #line 421 "../parser/Grammar.y" { NewExprNode* node = new (GLOBAL_DATA) NewExprNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).last_column, (yylsp[(2) - (2)]).last_column); @@ -3276,8 +3244,6 @@ yyreduce: break; case 46: - -/* Line 1455 of yacc.c */ #line 429 "../parser/Grammar.y" { NewExprNode* node = new (GLOBAL_DATA) NewExprNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).last_column, (yylsp[(2) - (2)]).last_column); @@ -3286,22 +3252,16 @@ yyreduce: break; case 47: - -/* Line 1455 of yacc.c */ #line 436 "../parser/Grammar.y" { (yyval.expressionNode) = makeFunctionCallNode(globalPtr, (yyvsp[(1) - (2)].expressionNode), (yyvsp[(2) - (2)].argumentsNode), (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column); ;} break; case 48: - -/* Line 1455 of yacc.c */ #line 437 "../parser/Grammar.y" { (yyval.expressionNode) = makeFunctionCallNode(globalPtr, (yyvsp[(1) - (2)].expressionNode), (yyvsp[(2) - (2)].argumentsNode), (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column); ;} break; case 49: - -/* Line 1455 of yacc.c */ #line 438 "../parser/Grammar.y" { BracketAccessorNode* node = new (GLOBAL_DATA) BracketAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_features & AssignFeature); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (4)]).first_column, (yylsp[(1) - (4)]).last_column, (yylsp[(4) - (4)]).last_column); @@ -3310,8 +3270,6 @@ yyreduce: break; case 50: - -/* Line 1455 of yacc.c */ #line 442 "../parser/Grammar.y" { DotAccessorNode* node = new (GLOBAL_DATA) DotAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, *(yyvsp[(3) - (3)].ident)); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (3)]).first_column, (yylsp[(1) - (3)]).last_column, (yylsp[(3) - (3)]).last_column); @@ -3319,22 +3277,16 @@ yyreduce: break; case 51: - -/* Line 1455 of yacc.c */ #line 448 "../parser/Grammar.y" { (yyval.expressionNode) = makeFunctionCallNode(globalPtr, (yyvsp[(1) - (2)].expressionNode), (yyvsp[(2) - (2)].argumentsNode), (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column); ;} break; case 52: - -/* Line 1455 of yacc.c */ #line 449 "../parser/Grammar.y" { (yyval.expressionNode) = makeFunctionCallNode(globalPtr, (yyvsp[(1) - (2)].expressionNode), (yyvsp[(2) - (2)].argumentsNode), (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column); ;} break; case 53: - -/* Line 1455 of yacc.c */ #line 450 "../parser/Grammar.y" { BracketAccessorNode* node = new (GLOBAL_DATA) BracketAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_features & AssignFeature); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (4)]).first_column, (yylsp[(1) - (4)]).last_column, (yylsp[(4) - (4)]).last_column); @@ -3343,8 +3295,6 @@ yyreduce: break; case 54: - -/* Line 1455 of yacc.c */ #line 454 "../parser/Grammar.y" { DotAccessorNode* node = new (GLOBAL_DATA) DotAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, *(yyvsp[(3) - (3)].ident)); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (3)]).first_column, (yylsp[(1) - (3)]).last_column, (yylsp[(3) - (3)]).last_column); @@ -3353,22 +3303,16 @@ yyreduce: break; case 55: - -/* Line 1455 of yacc.c */ #line 461 "../parser/Grammar.y" { (yyval.argumentsNode) = createNodeInfo(new (GLOBAL_DATA) ArgumentsNode(GLOBAL_DATA), 0, 0); ;} break; case 56: - -/* Line 1455 of yacc.c */ #line 462 "../parser/Grammar.y" { (yyval.argumentsNode) = createNodeInfo(new (GLOBAL_DATA) ArgumentsNode(GLOBAL_DATA, (yyvsp[(2) - (3)].argumentList).m_node.head), (yyvsp[(2) - (3)].argumentList).m_features, (yyvsp[(2) - (3)].argumentList).m_numConstants); ;} break; case 57: - -/* Line 1455 of yacc.c */ #line 466 "../parser/Grammar.y" { (yyval.argumentList).m_node.head = new (GLOBAL_DATA) ArgumentListNode(GLOBAL_DATA, (yyvsp[(1) - (1)].expressionNode).m_node); (yyval.argumentList).m_node.tail = (yyval.argumentList).m_node.head; @@ -3377,8 +3321,6 @@ yyreduce: break; case 58: - -/* Line 1455 of yacc.c */ #line 470 "../parser/Grammar.y" { (yyval.argumentList).m_node.head = (yyvsp[(1) - (3)].argumentList).m_node.head; (yyval.argumentList).m_node.tail = new (GLOBAL_DATA) ArgumentListNode(GLOBAL_DATA, (yyvsp[(1) - (3)].argumentList).m_node.tail, (yyvsp[(3) - (3)].expressionNode).m_node); @@ -3387,253 +3329,181 @@ yyreduce: break; case 64: - -/* Line 1455 of yacc.c */ #line 488 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makePostfixNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode).m_node, OpPlusPlus, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column), (yyvsp[(1) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (2)].expressionNode).m_numConstants); ;} break; case 65: - -/* Line 1455 of yacc.c */ #line 489 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makePostfixNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode).m_node, OpMinusMinus, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column), (yyvsp[(1) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (2)].expressionNode).m_numConstants); ;} break; case 67: - -/* Line 1455 of yacc.c */ #line 494 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makePostfixNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode).m_node, OpPlusPlus, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column), (yyvsp[(1) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (2)].expressionNode).m_numConstants); ;} break; case 68: - -/* Line 1455 of yacc.c */ #line 495 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makePostfixNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode).m_node, OpMinusMinus, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column), (yyvsp[(1) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (2)].expressionNode).m_numConstants); ;} break; case 69: - -/* Line 1455 of yacc.c */ #line 499 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makeDeleteNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).last_column, (yylsp[(2) - (2)]).last_column), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 70: - -/* Line 1455 of yacc.c */ #line 500 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) VoidNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants + 1); ;} break; case 71: - -/* Line 1455 of yacc.c */ #line 501 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makeTypeOfNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 72: - -/* Line 1455 of yacc.c */ #line 502 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makePrefixNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node, OpPlusPlus, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).first_column + 1, (yylsp[(2) - (2)]).last_column), (yyvsp[(2) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 73: - -/* Line 1455 of yacc.c */ #line 503 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makePrefixNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node, OpPlusPlus, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).first_column + 1, (yylsp[(2) - (2)]).last_column), (yyvsp[(2) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 74: - -/* Line 1455 of yacc.c */ #line 504 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makePrefixNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node, OpMinusMinus, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).first_column + 1, (yylsp[(2) - (2)]).last_column), (yyvsp[(2) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 75: - -/* Line 1455 of yacc.c */ #line 505 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makePrefixNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node, OpMinusMinus, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).first_column + 1, (yylsp[(2) - (2)]).last_column), (yyvsp[(2) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 76: - -/* Line 1455 of yacc.c */ #line 506 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) UnaryPlusNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 77: - -/* Line 1455 of yacc.c */ #line 507 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makeNegateNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 78: - -/* Line 1455 of yacc.c */ #line 508 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makeBitwiseNotNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 79: - -/* Line 1455 of yacc.c */ #line 509 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) LogicalNotNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 85: - -/* Line 1455 of yacc.c */ #line 523 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makeMultNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 86: - -/* Line 1455 of yacc.c */ #line 524 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makeDivNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 87: - -/* Line 1455 of yacc.c */ #line 525 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) ModNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 89: - -/* Line 1455 of yacc.c */ #line 531 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makeMultNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 90: - -/* Line 1455 of yacc.c */ #line 533 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makeDivNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 91: - -/* Line 1455 of yacc.c */ #line 535 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) ModNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 93: - -/* Line 1455 of yacc.c */ #line 540 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makeAddNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 94: - -/* Line 1455 of yacc.c */ #line 541 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makeSubNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 96: - -/* Line 1455 of yacc.c */ #line 547 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makeAddNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 97: - -/* Line 1455 of yacc.c */ #line 549 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makeSubNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 99: - -/* Line 1455 of yacc.c */ #line 554 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makeLeftShiftNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 100: - -/* Line 1455 of yacc.c */ #line 555 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makeRightShiftNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 101: - -/* Line 1455 of yacc.c */ #line 556 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) UnsignedRightShiftNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 103: - -/* Line 1455 of yacc.c */ #line 561 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makeLeftShiftNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 104: - -/* Line 1455 of yacc.c */ #line 562 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makeRightShiftNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 105: - -/* Line 1455 of yacc.c */ #line 563 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) UnsignedRightShiftNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 107: - -/* Line 1455 of yacc.c */ #line 568 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) LessNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 108: - -/* Line 1455 of yacc.c */ #line 569 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) GreaterNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 109: - -/* Line 1455 of yacc.c */ #line 570 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) LessEqNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 110: - -/* Line 1455 of yacc.c */ #line 571 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) GreaterEqNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 111: - -/* Line 1455 of yacc.c */ #line 572 "../parser/Grammar.y" { InstanceOfNode* node = new (GLOBAL_DATA) InstanceOfNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (3)]).first_column, (yylsp[(3) - (3)]).first_column, (yylsp[(3) - (3)]).last_column); @@ -3641,8 +3511,6 @@ yyreduce: break; case 112: - -/* Line 1455 of yacc.c */ #line 575 "../parser/Grammar.y" { InNode* node = new (GLOBAL_DATA) InNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (3)]).first_column, (yylsp[(3) - (3)]).first_column, (yylsp[(3) - (3)]).last_column); @@ -3650,36 +3518,26 @@ yyreduce: break; case 114: - -/* Line 1455 of yacc.c */ #line 582 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) LessNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 115: - -/* Line 1455 of yacc.c */ #line 583 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) GreaterNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 116: - -/* Line 1455 of yacc.c */ #line 584 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) LessEqNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 117: - -/* Line 1455 of yacc.c */ #line 585 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) GreaterEqNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 118: - -/* Line 1455 of yacc.c */ #line 587 "../parser/Grammar.y" { InstanceOfNode* node = new (GLOBAL_DATA) InstanceOfNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (3)]).first_column, (yylsp[(3) - (3)]).first_column, (yylsp[(3) - (3)]).last_column); @@ -3687,36 +3545,26 @@ yyreduce: break; case 120: - -/* Line 1455 of yacc.c */ #line 594 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) LessNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 121: - -/* Line 1455 of yacc.c */ #line 595 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) GreaterNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 122: - -/* Line 1455 of yacc.c */ #line 596 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) LessEqNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 123: - -/* Line 1455 of yacc.c */ #line 597 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) GreaterEqNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 124: - -/* Line 1455 of yacc.c */ #line 599 "../parser/Grammar.y" { InstanceOfNode* node = new (GLOBAL_DATA) InstanceOfNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (3)]).first_column, (yylsp[(3) - (3)]).first_column, (yylsp[(3) - (3)]).last_column); @@ -3724,8 +3572,6 @@ yyreduce: break; case 125: - -/* Line 1455 of yacc.c */ #line 603 "../parser/Grammar.y" { InNode* node = new (GLOBAL_DATA) InNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (3)]).first_column, (yylsp[(3) - (3)]).first_column, (yylsp[(3) - (3)]).last_column); @@ -3733,218 +3579,156 @@ yyreduce: break; case 127: - -/* Line 1455 of yacc.c */ #line 610 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) EqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 128: - -/* Line 1455 of yacc.c */ #line 611 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) NotEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 129: - -/* Line 1455 of yacc.c */ #line 612 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) StrictEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 130: - -/* Line 1455 of yacc.c */ #line 613 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) NotStrictEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 132: - -/* Line 1455 of yacc.c */ #line 619 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) EqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 133: - -/* Line 1455 of yacc.c */ #line 621 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) NotEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 134: - -/* Line 1455 of yacc.c */ #line 623 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) StrictEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 135: - -/* Line 1455 of yacc.c */ #line 625 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) NotStrictEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 137: - -/* Line 1455 of yacc.c */ #line 631 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) EqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 138: - -/* Line 1455 of yacc.c */ #line 632 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) NotEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 139: - -/* Line 1455 of yacc.c */ #line 634 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) StrictEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 140: - -/* Line 1455 of yacc.c */ #line 636 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) NotStrictEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 142: - -/* Line 1455 of yacc.c */ #line 641 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) BitAndNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 144: - -/* Line 1455 of yacc.c */ #line 647 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) BitAndNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 146: - -/* Line 1455 of yacc.c */ #line 652 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) BitAndNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 148: - -/* Line 1455 of yacc.c */ #line 657 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) BitXOrNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 150: - -/* Line 1455 of yacc.c */ #line 663 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) BitXOrNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 152: - -/* Line 1455 of yacc.c */ #line 669 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) BitXOrNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 154: - -/* Line 1455 of yacc.c */ #line 674 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) BitOrNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 156: - -/* Line 1455 of yacc.c */ #line 680 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) BitOrNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 158: - -/* Line 1455 of yacc.c */ #line 686 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) BitOrNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 160: - -/* Line 1455 of yacc.c */ #line 691 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, OpLogicalAnd), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 162: - -/* Line 1455 of yacc.c */ #line 697 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, OpLogicalAnd), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 164: - -/* Line 1455 of yacc.c */ #line 703 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, OpLogicalAnd), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 166: - -/* Line 1455 of yacc.c */ #line 708 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, OpLogicalOr), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 168: - -/* Line 1455 of yacc.c */ #line 714 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, OpLogicalOr), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 170: - -/* Line 1455 of yacc.c */ #line 719 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, OpLogicalOr), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 172: - -/* Line 1455 of yacc.c */ #line 725 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) ConditionalNode(GLOBAL_DATA, (yyvsp[(1) - (5)].expressionNode).m_node, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].expressionNode).m_node), (yyvsp[(1) - (5)].expressionNode).m_features | (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].expressionNode).m_features, (yyvsp[(1) - (5)].expressionNode).m_numConstants + (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].expressionNode).m_numConstants); ;} break; case 174: - -/* Line 1455 of yacc.c */ #line 731 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) ConditionalNode(GLOBAL_DATA, (yyvsp[(1) - (5)].expressionNode).m_node, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].expressionNode).m_node), (yyvsp[(1) - (5)].expressionNode).m_features | (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].expressionNode).m_features, (yyvsp[(1) - (5)].expressionNode).m_numConstants + (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].expressionNode).m_numConstants); ;} break; case 176: - -/* Line 1455 of yacc.c */ #line 737 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) ConditionalNode(GLOBAL_DATA, (yyvsp[(1) - (5)].expressionNode).m_node, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].expressionNode).m_node), (yyvsp[(1) - (5)].expressionNode).m_features | (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].expressionNode).m_features, (yyvsp[(1) - (5)].expressionNode).m_numConstants + (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].expressionNode).m_numConstants); ;} break; case 178: - -/* Line 1455 of yacc.c */ #line 743 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makeAssignNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(2) - (3)].op), (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(1) - (3)].expressionNode).m_features & AssignFeature, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).first_column + 1, (yylsp[(3) - (3)]).last_column), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); @@ -3952,8 +3736,6 @@ yyreduce: break; case 180: - -/* Line 1455 of yacc.c */ #line 751 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makeAssignNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(2) - (3)].op), (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(1) - (3)].expressionNode).m_features & AssignFeature, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).first_column + 1, (yylsp[(3) - (3)]).last_column), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); @@ -3961,8 +3743,6 @@ yyreduce: break; case 182: - -/* Line 1455 of yacc.c */ #line 759 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(makeAssignNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(2) - (3)].op), (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(1) - (3)].expressionNode).m_features & AssignFeature, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).first_column + 1, (yylsp[(3) - (3)]).last_column), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); @@ -3970,137 +3750,99 @@ yyreduce: break; case 183: - -/* Line 1455 of yacc.c */ #line 765 "../parser/Grammar.y" { (yyval.op) = OpEqual; ;} break; case 184: - -/* Line 1455 of yacc.c */ #line 766 "../parser/Grammar.y" { (yyval.op) = OpPlusEq; ;} break; case 185: - -/* Line 1455 of yacc.c */ #line 767 "../parser/Grammar.y" { (yyval.op) = OpMinusEq; ;} break; case 186: - -/* Line 1455 of yacc.c */ #line 768 "../parser/Grammar.y" { (yyval.op) = OpMultEq; ;} break; case 187: - -/* Line 1455 of yacc.c */ #line 769 "../parser/Grammar.y" { (yyval.op) = OpDivEq; ;} break; case 188: - -/* Line 1455 of yacc.c */ #line 770 "../parser/Grammar.y" { (yyval.op) = OpLShift; ;} break; case 189: - -/* Line 1455 of yacc.c */ #line 771 "../parser/Grammar.y" { (yyval.op) = OpRShift; ;} break; case 190: - -/* Line 1455 of yacc.c */ #line 772 "../parser/Grammar.y" { (yyval.op) = OpURShift; ;} break; case 191: - -/* Line 1455 of yacc.c */ #line 773 "../parser/Grammar.y" { (yyval.op) = OpAndEq; ;} break; case 192: - -/* Line 1455 of yacc.c */ #line 774 "../parser/Grammar.y" { (yyval.op) = OpXOrEq; ;} break; case 193: - -/* Line 1455 of yacc.c */ #line 775 "../parser/Grammar.y" { (yyval.op) = OpOrEq; ;} break; case 194: - -/* Line 1455 of yacc.c */ #line 776 "../parser/Grammar.y" { (yyval.op) = OpModEq; ;} break; case 196: - -/* Line 1455 of yacc.c */ #line 781 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) CommaNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 198: - -/* Line 1455 of yacc.c */ #line 786 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) CommaNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 200: - -/* Line 1455 of yacc.c */ #line 791 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(new (GLOBAL_DATA) CommaNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 218: - -/* Line 1455 of yacc.c */ #line 815 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) BlockNode(GLOBAL_DATA, 0), 0, 0, 0, 0); DBG((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(2) - (2)])); ;} break; case 219: - -/* Line 1455 of yacc.c */ #line 817 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) BlockNode(GLOBAL_DATA, (yyvsp[(2) - (3)].sourceElements).m_node), (yyvsp[(2) - (3)].sourceElements).m_varDeclarations, (yyvsp[(2) - (3)].sourceElements).m_funcDeclarations, (yyvsp[(2) - (3)].sourceElements).m_features, (yyvsp[(2) - (3)].sourceElements).m_numConstants); DBG((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(3) - (3)])); ;} break; case 220: - -/* Line 1455 of yacc.c */ #line 822 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(makeVarStatementNode(GLOBAL_DATA, (yyvsp[(2) - (3)].varDeclList).m_node), (yyvsp[(2) - (3)].varDeclList).m_varDeclarations, (yyvsp[(2) - (3)].varDeclList).m_funcDeclarations, (yyvsp[(2) - (3)].varDeclList).m_features, (yyvsp[(2) - (3)].varDeclList).m_numConstants); DBG((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(3) - (3)])); ;} break; case 221: - -/* Line 1455 of yacc.c */ #line 824 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(makeVarStatementNode(GLOBAL_DATA, (yyvsp[(2) - (3)].varDeclList).m_node), (yyvsp[(2) - (3)].varDeclList).m_varDeclarations, (yyvsp[(2) - (3)].varDeclList).m_funcDeclarations, (yyvsp[(2) - (3)].varDeclList).m_features, (yyvsp[(2) - (3)].varDeclList).m_numConstants); DBG((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(2) - (3)])); @@ -4108,8 +3850,6 @@ yyreduce: break; case 222: - -/* Line 1455 of yacc.c */ #line 830 "../parser/Grammar.y" { (yyval.varDeclList).m_node = 0; (yyval.varDeclList).m_varDeclarations = new (GLOBAL_DATA) ParserArenaData; @@ -4121,8 +3861,6 @@ yyreduce: break; case 223: - -/* Line 1455 of yacc.c */ #line 837 "../parser/Grammar.y" { AssignResolveNode* node = new (GLOBAL_DATA) AssignResolveNode(GLOBAL_DATA, *(yyvsp[(1) - (2)].ident), (yyvsp[(2) - (2)].expressionNode).m_node, (yyvsp[(2) - (2)].expressionNode).m_features & AssignFeature); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).first_column + 1, (yylsp[(2) - (2)]).last_column); @@ -4136,8 +3874,6 @@ yyreduce: break; case 224: - -/* Line 1455 of yacc.c */ #line 847 "../parser/Grammar.y" { (yyval.varDeclList).m_node = (yyvsp[(1) - (3)].varDeclList).m_node; (yyval.varDeclList).m_varDeclarations = (yyvsp[(1) - (3)].varDeclList).m_varDeclarations; @@ -4149,8 +3885,6 @@ yyreduce: break; case 225: - -/* Line 1455 of yacc.c */ #line 855 "../parser/Grammar.y" { AssignResolveNode* node = new (GLOBAL_DATA) AssignResolveNode(GLOBAL_DATA, *(yyvsp[(3) - (4)].ident), (yyvsp[(4) - (4)].expressionNode).m_node, (yyvsp[(4) - (4)].expressionNode).m_features & AssignFeature); SET_EXCEPTION_LOCATION(node, (yylsp[(3) - (4)]).first_column, (yylsp[(4) - (4)]).first_column + 1, (yylsp[(4) - (4)]).last_column); @@ -4164,8 +3898,6 @@ yyreduce: break; case 226: - -/* Line 1455 of yacc.c */ #line 867 "../parser/Grammar.y" { (yyval.varDeclList).m_node = 0; (yyval.varDeclList).m_varDeclarations = new (GLOBAL_DATA) ParserArenaData; @@ -4177,8 +3909,6 @@ yyreduce: break; case 227: - -/* Line 1455 of yacc.c */ #line 874 "../parser/Grammar.y" { AssignResolveNode* node = new (GLOBAL_DATA) AssignResolveNode(GLOBAL_DATA, *(yyvsp[(1) - (2)].ident), (yyvsp[(2) - (2)].expressionNode).m_node, (yyvsp[(2) - (2)].expressionNode).m_features & AssignFeature); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).first_column + 1, (yylsp[(2) - (2)]).last_column); @@ -4192,8 +3922,6 @@ yyreduce: break; case 228: - -/* Line 1455 of yacc.c */ #line 884 "../parser/Grammar.y" { (yyval.varDeclList).m_node = (yyvsp[(1) - (3)].varDeclList).m_node; (yyval.varDeclList).m_varDeclarations = (yyvsp[(1) - (3)].varDeclList).m_varDeclarations; @@ -4205,8 +3933,6 @@ yyreduce: break; case 229: - -/* Line 1455 of yacc.c */ #line 892 "../parser/Grammar.y" { AssignResolveNode* node = new (GLOBAL_DATA) AssignResolveNode(GLOBAL_DATA, *(yyvsp[(3) - (4)].ident), (yyvsp[(4) - (4)].expressionNode).m_node, (yyvsp[(4) - (4)].expressionNode).m_features & AssignFeature); SET_EXCEPTION_LOCATION(node, (yylsp[(3) - (4)]).first_column, (yylsp[(4) - (4)]).first_column + 1, (yylsp[(4) - (4)]).last_column); @@ -4220,24 +3946,18 @@ yyreduce: break; case 230: - -/* Line 1455 of yacc.c */ #line 904 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) ConstStatementNode(GLOBAL_DATA, (yyvsp[(2) - (3)].constDeclList).m_node.head), (yyvsp[(2) - (3)].constDeclList).m_varDeclarations, (yyvsp[(2) - (3)].constDeclList).m_funcDeclarations, (yyvsp[(2) - (3)].constDeclList).m_features, (yyvsp[(2) - (3)].constDeclList).m_numConstants); DBG((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(3) - (3)])); ;} break; case 231: - -/* Line 1455 of yacc.c */ #line 907 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) ConstStatementNode(GLOBAL_DATA, (yyvsp[(2) - (3)].constDeclList).m_node.head), (yyvsp[(2) - (3)].constDeclList).m_varDeclarations, (yyvsp[(2) - (3)].constDeclList).m_funcDeclarations, (yyvsp[(2) - (3)].constDeclList).m_features, (yyvsp[(2) - (3)].constDeclList).m_numConstants); DBG((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(2) - (3)])); AUTO_SEMICOLON; ;} break; case 232: - -/* Line 1455 of yacc.c */ #line 912 "../parser/Grammar.y" { (yyval.constDeclList).m_node.head = (yyvsp[(1) - (1)].constDeclNode).m_node; (yyval.constDeclList).m_node.tail = (yyval.constDeclList).m_node.head; @@ -4250,8 +3970,6 @@ yyreduce: break; case 233: - -/* Line 1455 of yacc.c */ #line 921 "../parser/Grammar.y" { (yyval.constDeclList).m_node.head = (yyvsp[(1) - (3)].constDeclList).m_node.head; (yyvsp[(1) - (3)].constDeclList).m_node.tail->m_next = (yyvsp[(3) - (3)].constDeclNode).m_node; @@ -4264,67 +3982,49 @@ yyreduce: break; case 234: - -/* Line 1455 of yacc.c */ #line 932 "../parser/Grammar.y" { (yyval.constDeclNode) = createNodeInfo(new (GLOBAL_DATA) ConstDeclNode(GLOBAL_DATA, *(yyvsp[(1) - (1)].ident), 0), (*(yyvsp[(1) - (1)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0, 0); ;} break; case 235: - -/* Line 1455 of yacc.c */ #line 933 "../parser/Grammar.y" { (yyval.constDeclNode) = createNodeInfo(new (GLOBAL_DATA) ConstDeclNode(GLOBAL_DATA, *(yyvsp[(1) - (2)].ident), (yyvsp[(2) - (2)].expressionNode).m_node), ((*(yyvsp[(1) - (2)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0) | (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 236: - -/* Line 1455 of yacc.c */ #line 937 "../parser/Grammar.y" { (yyval.expressionNode) = (yyvsp[(2) - (2)].expressionNode); ;} break; case 237: - -/* Line 1455 of yacc.c */ #line 941 "../parser/Grammar.y" { (yyval.expressionNode) = (yyvsp[(2) - (2)].expressionNode); ;} break; case 238: - -/* Line 1455 of yacc.c */ #line 945 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) EmptyStatementNode(GLOBAL_DATA), 0, 0, 0, 0); ;} break; case 239: - -/* Line 1455 of yacc.c */ #line 949 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) ExprStatementNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode).m_node), 0, 0, (yyvsp[(1) - (2)].expressionNode).m_features, (yyvsp[(1) - (2)].expressionNode).m_numConstants); DBG((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(2) - (2)])); ;} break; case 240: - -/* Line 1455 of yacc.c */ #line 951 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) ExprStatementNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode).m_node), 0, 0, (yyvsp[(1) - (2)].expressionNode).m_features, (yyvsp[(1) - (2)].expressionNode).m_numConstants); DBG((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(1) - (2)])); AUTO_SEMICOLON; ;} break; case 241: - -/* Line 1455 of yacc.c */ #line 957 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) IfNode(GLOBAL_DATA, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].statementNode).m_node), (yyvsp[(5) - (5)].statementNode).m_varDeclarations, (yyvsp[(5) - (5)].statementNode).m_funcDeclarations, (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].statementNode).m_features, (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].statementNode).m_numConstants); DBG((yyval.statementNode).m_node, (yylsp[(1) - (5)]), (yylsp[(4) - (5)])); ;} break; case 242: - -/* Line 1455 of yacc.c */ #line 960 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) IfElseNode(GLOBAL_DATA, (yyvsp[(3) - (7)].expressionNode).m_node, (yyvsp[(5) - (7)].statementNode).m_node, (yyvsp[(7) - (7)].statementNode).m_node), mergeDeclarationLists((yyvsp[(5) - (7)].statementNode).m_varDeclarations, (yyvsp[(7) - (7)].statementNode).m_varDeclarations), @@ -4335,32 +4035,24 @@ yyreduce: break; case 243: - -/* Line 1455 of yacc.c */ #line 969 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) DoWhileNode(GLOBAL_DATA, (yyvsp[(2) - (7)].statementNode).m_node, (yyvsp[(5) - (7)].expressionNode).m_node), (yyvsp[(2) - (7)].statementNode).m_varDeclarations, (yyvsp[(2) - (7)].statementNode).m_funcDeclarations, (yyvsp[(2) - (7)].statementNode).m_features | (yyvsp[(5) - (7)].expressionNode).m_features, (yyvsp[(2) - (7)].statementNode).m_numConstants + (yyvsp[(5) - (7)].expressionNode).m_numConstants); DBG((yyval.statementNode).m_node, (yylsp[(1) - (7)]), (yylsp[(3) - (7)])); ;} break; case 244: - -/* Line 1455 of yacc.c */ #line 971 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) DoWhileNode(GLOBAL_DATA, (yyvsp[(2) - (7)].statementNode).m_node, (yyvsp[(5) - (7)].expressionNode).m_node), (yyvsp[(2) - (7)].statementNode).m_varDeclarations, (yyvsp[(2) - (7)].statementNode).m_funcDeclarations, (yyvsp[(2) - (7)].statementNode).m_features | (yyvsp[(5) - (7)].expressionNode).m_features, (yyvsp[(2) - (7)].statementNode).m_numConstants + (yyvsp[(5) - (7)].expressionNode).m_numConstants); DBG((yyval.statementNode).m_node, (yylsp[(1) - (7)]), (yylsp[(3) - (7)])); ;} break; case 245: - -/* Line 1455 of yacc.c */ #line 973 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) WhileNode(GLOBAL_DATA, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].statementNode).m_node), (yyvsp[(5) - (5)].statementNode).m_varDeclarations, (yyvsp[(5) - (5)].statementNode).m_funcDeclarations, (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].statementNode).m_features, (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].statementNode).m_numConstants); DBG((yyval.statementNode).m_node, (yylsp[(1) - (5)]), (yylsp[(4) - (5)])); ;} break; case 246: - -/* Line 1455 of yacc.c */ #line 976 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) ForNode(GLOBAL_DATA, (yyvsp[(3) - (9)].expressionNode).m_node, (yyvsp[(5) - (9)].expressionNode).m_node, (yyvsp[(7) - (9)].expressionNode).m_node, (yyvsp[(9) - (9)].statementNode).m_node, false), (yyvsp[(9) - (9)].statementNode).m_varDeclarations, (yyvsp[(9) - (9)].statementNode).m_funcDeclarations, (yyvsp[(3) - (9)].expressionNode).m_features | (yyvsp[(5) - (9)].expressionNode).m_features | (yyvsp[(7) - (9)].expressionNode).m_features | (yyvsp[(9) - (9)].statementNode).m_features, @@ -4370,8 +4062,6 @@ yyreduce: break; case 247: - -/* Line 1455 of yacc.c */ #line 982 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) ForNode(GLOBAL_DATA, (yyvsp[(4) - (10)].varDeclList).m_node, (yyvsp[(6) - (10)].expressionNode).m_node, (yyvsp[(8) - (10)].expressionNode).m_node, (yyvsp[(10) - (10)].statementNode).m_node, true), mergeDeclarationLists((yyvsp[(4) - (10)].varDeclList).m_varDeclarations, (yyvsp[(10) - (10)].statementNode).m_varDeclarations), @@ -4382,8 +4072,6 @@ yyreduce: break; case 248: - -/* Line 1455 of yacc.c */ #line 989 "../parser/Grammar.y" { ForInNode* node = new (GLOBAL_DATA) ForInNode(GLOBAL_DATA, (yyvsp[(3) - (7)].expressionNode).m_node, (yyvsp[(5) - (7)].expressionNode).m_node, (yyvsp[(7) - (7)].statementNode).m_node); @@ -4396,8 +4084,6 @@ yyreduce: break; case 249: - -/* Line 1455 of yacc.c */ #line 998 "../parser/Grammar.y" { ForInNode *forIn = new (GLOBAL_DATA) ForInNode(GLOBAL_DATA, *(yyvsp[(4) - (8)].ident), 0, (yyvsp[(6) - (8)].expressionNode).m_node, (yyvsp[(8) - (8)].statementNode).m_node, (yylsp[(5) - (8)]).first_column, (yylsp[(5) - (8)]).first_column - (yylsp[(4) - (8)]).first_column, (yylsp[(6) - (8)]).last_column - (yylsp[(5) - (8)]).first_column); SET_EXCEPTION_LOCATION(forIn, (yylsp[(4) - (8)]).first_column, (yylsp[(5) - (8)]).first_column + 1, (yylsp[(6) - (8)]).last_column); @@ -4407,8 +4093,6 @@ yyreduce: break; case 250: - -/* Line 1455 of yacc.c */ #line 1004 "../parser/Grammar.y" { ForInNode *forIn = new (GLOBAL_DATA) ForInNode(GLOBAL_DATA, *(yyvsp[(4) - (9)].ident), (yyvsp[(5) - (9)].expressionNode).m_node, (yyvsp[(7) - (9)].expressionNode).m_node, (yyvsp[(9) - (9)].statementNode).m_node, (yylsp[(5) - (9)]).first_column, (yylsp[(5) - (9)]).first_column - (yylsp[(4) - (9)]).first_column, (yylsp[(5) - (9)]).last_column - (yylsp[(5) - (9)]).first_column); SET_EXCEPTION_LOCATION(forIn, (yylsp[(4) - (9)]).first_column, (yylsp[(6) - (9)]).first_column + 1, (yylsp[(7) - (9)]).last_column); @@ -4420,22 +4104,16 @@ yyreduce: break; case 251: - -/* Line 1455 of yacc.c */ #line 1014 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(0, 0, 0); ;} break; case 253: - -/* Line 1455 of yacc.c */ #line 1019 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo(0, 0, 0); ;} break; case 255: - -/* Line 1455 of yacc.c */ #line 1024 "../parser/Grammar.y" { ContinueNode* node = new (GLOBAL_DATA) ContinueNode(GLOBAL_DATA); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(1) - (2)]).last_column); @@ -4444,8 +4122,6 @@ yyreduce: break; case 256: - -/* Line 1455 of yacc.c */ #line 1028 "../parser/Grammar.y" { ContinueNode* node = new (GLOBAL_DATA) ContinueNode(GLOBAL_DATA); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(1) - (2)]).last_column); @@ -4454,8 +4130,6 @@ yyreduce: break; case 257: - -/* Line 1455 of yacc.c */ #line 1032 "../parser/Grammar.y" { ContinueNode* node = new (GLOBAL_DATA) ContinueNode(GLOBAL_DATA, *(yyvsp[(2) - (3)].ident)); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4464,8 +4138,6 @@ yyreduce: break; case 258: - -/* Line 1455 of yacc.c */ #line 1036 "../parser/Grammar.y" { ContinueNode* node = new (GLOBAL_DATA) ContinueNode(GLOBAL_DATA, *(yyvsp[(2) - (3)].ident)); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4474,8 +4146,6 @@ yyreduce: break; case 259: - -/* Line 1455 of yacc.c */ #line 1043 "../parser/Grammar.y" { BreakNode* node = new (GLOBAL_DATA) BreakNode(GLOBAL_DATA); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(1) - (2)]).last_column); @@ -4483,8 +4153,6 @@ yyreduce: break; case 260: - -/* Line 1455 of yacc.c */ #line 1046 "../parser/Grammar.y" { BreakNode* node = new (GLOBAL_DATA) BreakNode(GLOBAL_DATA); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(1) - (2)]).last_column); @@ -4492,8 +4160,6 @@ yyreduce: break; case 261: - -/* Line 1455 of yacc.c */ #line 1049 "../parser/Grammar.y" { BreakNode* node = new (GLOBAL_DATA) BreakNode(GLOBAL_DATA, *(yyvsp[(2) - (3)].ident)); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4501,8 +4167,6 @@ yyreduce: break; case 262: - -/* Line 1455 of yacc.c */ #line 1052 "../parser/Grammar.y" { BreakNode* node = new (GLOBAL_DATA) BreakNode(GLOBAL_DATA, *(yyvsp[(2) - (3)].ident)); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4510,8 +4174,6 @@ yyreduce: break; case 263: - -/* Line 1455 of yacc.c */ #line 1058 "../parser/Grammar.y" { ReturnNode* node = new (GLOBAL_DATA) ReturnNode(GLOBAL_DATA, 0); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(1) - (2)]).last_column); @@ -4519,8 +4181,6 @@ yyreduce: break; case 264: - -/* Line 1455 of yacc.c */ #line 1061 "../parser/Grammar.y" { ReturnNode* node = new (GLOBAL_DATA) ReturnNode(GLOBAL_DATA, 0); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(1) - (2)]).last_column); @@ -4528,8 +4188,6 @@ yyreduce: break; case 265: - -/* Line 1455 of yacc.c */ #line 1064 "../parser/Grammar.y" { ReturnNode* node = new (GLOBAL_DATA) ReturnNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4537,8 +4195,6 @@ yyreduce: break; case 266: - -/* Line 1455 of yacc.c */ #line 1067 "../parser/Grammar.y" { ReturnNode* node = new (GLOBAL_DATA) ReturnNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4546,8 +4202,6 @@ yyreduce: break; case 267: - -/* Line 1455 of yacc.c */ #line 1073 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) WithNode(GLOBAL_DATA, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].statementNode).m_node, (yylsp[(3) - (5)]).last_column, (yylsp[(3) - (5)]).last_column - (yylsp[(3) - (5)]).first_column), (yyvsp[(5) - (5)].statementNode).m_varDeclarations, (yyvsp[(5) - (5)].statementNode).m_funcDeclarations, (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].statementNode).m_features | WithFeature, (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].statementNode).m_numConstants); @@ -4555,8 +4209,6 @@ yyreduce: break; case 268: - -/* Line 1455 of yacc.c */ #line 1079 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) SwitchNode(GLOBAL_DATA, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].caseBlockNode).m_node), (yyvsp[(5) - (5)].caseBlockNode).m_varDeclarations, (yyvsp[(5) - (5)].caseBlockNode).m_funcDeclarations, (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].caseBlockNode).m_features, (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].caseBlockNode).m_numConstants); @@ -4564,15 +4216,11 @@ yyreduce: break; case 269: - -/* Line 1455 of yacc.c */ #line 1085 "../parser/Grammar.y" { (yyval.caseBlockNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) CaseBlockNode(GLOBAL_DATA, (yyvsp[(2) - (3)].clauseList).m_node.head, 0, 0), (yyvsp[(2) - (3)].clauseList).m_varDeclarations, (yyvsp[(2) - (3)].clauseList).m_funcDeclarations, (yyvsp[(2) - (3)].clauseList).m_features, (yyvsp[(2) - (3)].clauseList).m_numConstants); ;} break; case 270: - -/* Line 1455 of yacc.c */ #line 1087 "../parser/Grammar.y" { (yyval.caseBlockNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) CaseBlockNode(GLOBAL_DATA, (yyvsp[(2) - (5)].clauseList).m_node.head, (yyvsp[(3) - (5)].caseClauseNode).m_node, (yyvsp[(4) - (5)].clauseList).m_node.head), mergeDeclarationLists(mergeDeclarationLists((yyvsp[(2) - (5)].clauseList).m_varDeclarations, (yyvsp[(3) - (5)].caseClauseNode).m_varDeclarations), (yyvsp[(4) - (5)].clauseList).m_varDeclarations), @@ -4582,15 +4230,11 @@ yyreduce: break; case 271: - -/* Line 1455 of yacc.c */ #line 1095 "../parser/Grammar.y" { (yyval.clauseList).m_node.head = 0; (yyval.clauseList).m_node.tail = 0; (yyval.clauseList).m_varDeclarations = 0; (yyval.clauseList).m_funcDeclarations = 0; (yyval.clauseList).m_features = 0; (yyval.clauseList).m_numConstants = 0; ;} break; case 273: - -/* Line 1455 of yacc.c */ #line 1100 "../parser/Grammar.y" { (yyval.clauseList).m_node.head = new (GLOBAL_DATA) ClauseListNode(GLOBAL_DATA, (yyvsp[(1) - (1)].caseClauseNode).m_node); (yyval.clauseList).m_node.tail = (yyval.clauseList).m_node.head; @@ -4601,8 +4245,6 @@ yyreduce: break; case 274: - -/* Line 1455 of yacc.c */ #line 1106 "../parser/Grammar.y" { (yyval.clauseList).m_node.head = (yyvsp[(1) - (2)].clauseList).m_node.head; (yyval.clauseList).m_node.tail = new (GLOBAL_DATA) ClauseListNode(GLOBAL_DATA, (yyvsp[(1) - (2)].clauseList).m_node.tail, (yyvsp[(2) - (2)].caseClauseNode).m_node); @@ -4614,36 +4256,26 @@ yyreduce: break; case 275: - -/* Line 1455 of yacc.c */ #line 1116 "../parser/Grammar.y" { (yyval.caseClauseNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) CaseClauseNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node), 0, 0, (yyvsp[(2) - (3)].expressionNode).m_features, (yyvsp[(2) - (3)].expressionNode).m_numConstants); ;} break; case 276: - -/* Line 1455 of yacc.c */ #line 1117 "../parser/Grammar.y" { (yyval.caseClauseNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) CaseClauseNode(GLOBAL_DATA, (yyvsp[(2) - (4)].expressionNode).m_node, (yyvsp[(4) - (4)].sourceElements).m_node), (yyvsp[(4) - (4)].sourceElements).m_varDeclarations, (yyvsp[(4) - (4)].sourceElements).m_funcDeclarations, (yyvsp[(2) - (4)].expressionNode).m_features | (yyvsp[(4) - (4)].sourceElements).m_features, (yyvsp[(2) - (4)].expressionNode).m_numConstants + (yyvsp[(4) - (4)].sourceElements).m_numConstants); ;} break; case 277: - -/* Line 1455 of yacc.c */ #line 1121 "../parser/Grammar.y" { (yyval.caseClauseNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) CaseClauseNode(GLOBAL_DATA, 0), 0, 0, 0, 0); ;} break; case 278: - -/* Line 1455 of yacc.c */ #line 1122 "../parser/Grammar.y" { (yyval.caseClauseNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) CaseClauseNode(GLOBAL_DATA, 0, (yyvsp[(3) - (3)].sourceElements).m_node), (yyvsp[(3) - (3)].sourceElements).m_varDeclarations, (yyvsp[(3) - (3)].sourceElements).m_funcDeclarations, (yyvsp[(3) - (3)].sourceElements).m_features, (yyvsp[(3) - (3)].sourceElements).m_numConstants); ;} break; case 279: - -/* Line 1455 of yacc.c */ #line 1126 "../parser/Grammar.y" { LabelNode* node = new (GLOBAL_DATA) LabelNode(GLOBAL_DATA, *(yyvsp[(1) - (3)].ident), (yyvsp[(3) - (3)].statementNode).m_node); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4651,8 +4283,6 @@ yyreduce: break; case 280: - -/* Line 1455 of yacc.c */ #line 1132 "../parser/Grammar.y" { ThrowNode* node = new (GLOBAL_DATA) ThrowNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4661,8 +4291,6 @@ yyreduce: break; case 281: - -/* Line 1455 of yacc.c */ #line 1136 "../parser/Grammar.y" { ThrowNode* node = new (GLOBAL_DATA) ThrowNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node); SET_EXCEPTION_LOCATION(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4671,8 +4299,6 @@ yyreduce: break; case 282: - -/* Line 1455 of yacc.c */ #line 1143 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) TryNode(GLOBAL_DATA, (yyvsp[(2) - (4)].statementNode).m_node, GLOBAL_DATA->propertyNames->nullIdentifier, false, 0, (yyvsp[(4) - (4)].statementNode).m_node), mergeDeclarationLists((yyvsp[(2) - (4)].statementNode).m_varDeclarations, (yyvsp[(4) - (4)].statementNode).m_varDeclarations), @@ -4683,8 +4309,6 @@ yyreduce: break; case 283: - -/* Line 1455 of yacc.c */ #line 1149 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) TryNode(GLOBAL_DATA, (yyvsp[(2) - (7)].statementNode).m_node, *(yyvsp[(5) - (7)].ident), ((yyvsp[(7) - (7)].statementNode).m_features & EvalFeature) != 0, (yyvsp[(7) - (7)].statementNode).m_node, 0), mergeDeclarationLists((yyvsp[(2) - (7)].statementNode).m_varDeclarations, (yyvsp[(7) - (7)].statementNode).m_varDeclarations), @@ -4695,8 +4319,6 @@ yyreduce: break; case 284: - -/* Line 1455 of yacc.c */ #line 1156 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) TryNode(GLOBAL_DATA, (yyvsp[(2) - (9)].statementNode).m_node, *(yyvsp[(5) - (9)].ident), ((yyvsp[(7) - (9)].statementNode).m_features & EvalFeature) != 0, (yyvsp[(7) - (9)].statementNode).m_node, (yyvsp[(9) - (9)].statementNode).m_node), mergeDeclarationLists(mergeDeclarationLists((yyvsp[(2) - (9)].statementNode).m_varDeclarations, (yyvsp[(7) - (9)].statementNode).m_varDeclarations), (yyvsp[(9) - (9)].statementNode).m_varDeclarations), @@ -4707,31 +4329,23 @@ yyreduce: break; case 285: - -/* Line 1455 of yacc.c */ #line 1165 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) DebuggerStatementNode(GLOBAL_DATA), 0, 0, 0, 0); DBG((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(2) - (2)])); ;} break; case 286: - -/* Line 1455 of yacc.c */ #line 1167 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(new (GLOBAL_DATA) DebuggerStatementNode(GLOBAL_DATA), 0, 0, 0, 0); DBG((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(1) - (2)])); AUTO_SEMICOLON; ;} break; case 287: - -/* Line 1455 of yacc.c */ #line 1172 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(new FuncDeclNode(GLOBAL_DATA, *(yyvsp[(2) - (7)].ident), (yyvsp[(6) - (7)].functionBodyNode), LEXER->sourceCode((yyvsp[(5) - (7)].intValue), (yyvsp[(7) - (7)].intValue), (yylsp[(5) - (7)]).first_line)), 0, new (GLOBAL_DATA) ParserArenaData, ((*(yyvsp[(2) - (7)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0) | ClosureFeature, 0); DBG((yyvsp[(6) - (7)].functionBodyNode), (yylsp[(5) - (7)]), (yylsp[(7) - (7)])); (yyval.statementNode).m_funcDeclarations->data.append(static_cast((yyval.statementNode).m_node)); ;} break; case 288: - -/* Line 1455 of yacc.c */ #line 1174 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo(new FuncDeclNode(GLOBAL_DATA, *(yyvsp[(2) - (8)].ident), (yyvsp[(7) - (8)].functionBodyNode), LEXER->sourceCode((yyvsp[(6) - (8)].intValue), (yyvsp[(8) - (8)].intValue), (yylsp[(6) - (8)]).first_line), (yyvsp[(4) - (8)].parameterList).m_node.head), 0, new (GLOBAL_DATA) ParserArenaData, ((*(yyvsp[(2) - (8)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0) | (yyvsp[(4) - (8)].parameterList).m_features | ClosureFeature, 0); @@ -4743,15 +4357,11 @@ yyreduce: break; case 289: - -/* Line 1455 of yacc.c */ #line 1184 "../parser/Grammar.y" { (yyval.funcExprNode) = createNodeInfo(new FuncExprNode(GLOBAL_DATA, GLOBAL_DATA->propertyNames->nullIdentifier, (yyvsp[(5) - (6)].functionBodyNode), LEXER->sourceCode((yyvsp[(4) - (6)].intValue), (yyvsp[(6) - (6)].intValue), (yylsp[(4) - (6)]).first_line)), ClosureFeature, 0); DBG((yyvsp[(5) - (6)].functionBodyNode), (yylsp[(4) - (6)]), (yylsp[(6) - (6)])); ;} break; case 290: - -/* Line 1455 of yacc.c */ #line 1186 "../parser/Grammar.y" { (yyval.funcExprNode) = createNodeInfo(new FuncExprNode(GLOBAL_DATA, GLOBAL_DATA->propertyNames->nullIdentifier, (yyvsp[(6) - (7)].functionBodyNode), LEXER->sourceCode((yyvsp[(5) - (7)].intValue), (yyvsp[(7) - (7)].intValue), (yylsp[(5) - (7)]).first_line), (yyvsp[(3) - (7)].parameterList).m_node.head), (yyvsp[(3) - (7)].parameterList).m_features | ClosureFeature, 0); @@ -4762,15 +4372,11 @@ yyreduce: break; case 291: - -/* Line 1455 of yacc.c */ #line 1192 "../parser/Grammar.y" { (yyval.funcExprNode) = createNodeInfo(new FuncExprNode(GLOBAL_DATA, *(yyvsp[(2) - (7)].ident), (yyvsp[(6) - (7)].functionBodyNode), LEXER->sourceCode((yyvsp[(5) - (7)].intValue), (yyvsp[(7) - (7)].intValue), (yylsp[(5) - (7)]).first_line)), ClosureFeature, 0); DBG((yyvsp[(6) - (7)].functionBodyNode), (yylsp[(5) - (7)]), (yylsp[(7) - (7)])); ;} break; case 292: - -/* Line 1455 of yacc.c */ #line 1194 "../parser/Grammar.y" { (yyval.funcExprNode) = createNodeInfo(new FuncExprNode(GLOBAL_DATA, *(yyvsp[(2) - (8)].ident), (yyvsp[(7) - (8)].functionBodyNode), LEXER->sourceCode((yyvsp[(6) - (8)].intValue), (yyvsp[(8) - (8)].intValue), (yylsp[(6) - (8)]).first_line), (yyvsp[(4) - (8)].parameterList).m_node.head), (yyvsp[(4) - (8)].parameterList).m_features | ClosureFeature, 0); @@ -4781,8 +4387,6 @@ yyreduce: break; case 293: - -/* Line 1455 of yacc.c */ #line 1203 "../parser/Grammar.y" { (yyval.parameterList).m_node.head = new (GLOBAL_DATA) ParameterNode(GLOBAL_DATA, *(yyvsp[(1) - (1)].ident)); (yyval.parameterList).m_features = (*(yyvsp[(1) - (1)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0; @@ -4790,8 +4394,6 @@ yyreduce: break; case 294: - -/* Line 1455 of yacc.c */ #line 1206 "../parser/Grammar.y" { (yyval.parameterList).m_node.head = (yyvsp[(1) - (3)].parameterList).m_node.head; (yyval.parameterList).m_features = (yyvsp[(1) - (3)].parameterList).m_features | ((*(yyvsp[(3) - (3)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0); @@ -4799,37 +4401,27 @@ yyreduce: break; case 295: - -/* Line 1455 of yacc.c */ #line 1212 "../parser/Grammar.y" { (yyval.functionBodyNode) = FunctionBodyNode::create(GLOBAL_DATA); ;} break; case 296: - -/* Line 1455 of yacc.c */ #line 1213 "../parser/Grammar.y" { (yyval.functionBodyNode) = FunctionBodyNode::create(GLOBAL_DATA); ;} break; case 297: - -/* Line 1455 of yacc.c */ #line 1217 "../parser/Grammar.y" { GLOBAL_DATA->parser->didFinishParsing(new (GLOBAL_DATA) SourceElements(GLOBAL_DATA), 0, 0, NoFeatures, (yylsp[(0) - (0)]).last_line, 0); ;} break; case 298: - -/* Line 1455 of yacc.c */ #line 1218 "../parser/Grammar.y" { GLOBAL_DATA->parser->didFinishParsing((yyvsp[(1) - (1)].sourceElements).m_node, (yyvsp[(1) - (1)].sourceElements).m_varDeclarations, (yyvsp[(1) - (1)].sourceElements).m_funcDeclarations, (yyvsp[(1) - (1)].sourceElements).m_features, (yylsp[(1) - (1)]).last_line, (yyvsp[(1) - (1)].sourceElements).m_numConstants); ;} break; case 299: - -/* Line 1455 of yacc.c */ #line 1223 "../parser/Grammar.y" { (yyval.sourceElements).m_node = new (GLOBAL_DATA) SourceElements(GLOBAL_DATA); (yyval.sourceElements).m_node->append((yyvsp[(1) - (1)].statementNode).m_node); @@ -4841,8 +4433,6 @@ yyreduce: break; case 300: - -/* Line 1455 of yacc.c */ #line 1230 "../parser/Grammar.y" { (yyval.sourceElements).m_node->append((yyvsp[(2) - (2)].statementNode).m_node); (yyval.sourceElements).m_varDeclarations = mergeDeclarationLists((yyvsp[(1) - (2)].sourceElements).m_varDeclarations, (yyvsp[(2) - (2)].statementNode).m_varDeclarations); @@ -4853,261 +4443,188 @@ yyreduce: break; case 304: - -/* Line 1455 of yacc.c */ #line 1244 "../parser/Grammar.y" { ;} break; case 305: - -/* Line 1455 of yacc.c */ #line 1245 "../parser/Grammar.y" { ;} break; case 306: - -/* Line 1455 of yacc.c */ #line 1246 "../parser/Grammar.y" { Lexer& l = *LEXER; if (!l.scanRegExp()) YYABORT; ;} break; case 307: - -/* Line 1455 of yacc.c */ #line 1247 "../parser/Grammar.y" { Lexer& l = *LEXER; if (!l.scanRegExp()) YYABORT; ;} break; case 308: - -/* Line 1455 of yacc.c */ #line 1251 "../parser/Grammar.y" { ;} break; case 309: - -/* Line 1455 of yacc.c */ #line 1252 "../parser/Grammar.y" { ;} break; case 310: - -/* Line 1455 of yacc.c */ #line 1253 "../parser/Grammar.y" { ;} break; case 311: - -/* Line 1455 of yacc.c */ #line 1254 "../parser/Grammar.y" { if (*(yyvsp[(1) - (7)].ident) != "get" && *(yyvsp[(1) - (7)].ident) != "set") YYABORT; ;} break; case 312: - -/* Line 1455 of yacc.c */ #line 1255 "../parser/Grammar.y" { if (*(yyvsp[(1) - (8)].ident) != "get" && *(yyvsp[(1) - (8)].ident) != "set") YYABORT; ;} break; case 316: - -/* Line 1455 of yacc.c */ #line 1265 "../parser/Grammar.y" { ;} break; case 317: - -/* Line 1455 of yacc.c */ #line 1266 "../parser/Grammar.y" { ;} break; case 318: - -/* Line 1455 of yacc.c */ #line 1268 "../parser/Grammar.y" { ;} break; case 322: - -/* Line 1455 of yacc.c */ #line 1275 "../parser/Grammar.y" { ;} break; case 517: - -/* Line 1455 of yacc.c */ #line 1643 "../parser/Grammar.y" { ;} break; case 518: - -/* Line 1455 of yacc.c */ #line 1644 "../parser/Grammar.y" { ;} break; case 520: - -/* Line 1455 of yacc.c */ #line 1649 "../parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 521: - -/* Line 1455 of yacc.c */ #line 1653 "../parser/Grammar.y" { ;} break; case 522: - -/* Line 1455 of yacc.c */ #line 1654 "../parser/Grammar.y" { ;} break; case 525: - -/* Line 1455 of yacc.c */ #line 1660 "../parser/Grammar.y" { ;} break; case 526: - -/* Line 1455 of yacc.c */ #line 1661 "../parser/Grammar.y" { ;} break; case 530: - -/* Line 1455 of yacc.c */ #line 1668 "../parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 533: - -/* Line 1455 of yacc.c */ #line 1677 "../parser/Grammar.y" { ;} break; case 534: - -/* Line 1455 of yacc.c */ #line 1678 "../parser/Grammar.y" { ;} break; case 539: - -/* Line 1455 of yacc.c */ #line 1695 "../parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 555: - -/* Line 1455 of yacc.c */ #line 1726 "../parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 557: - -/* Line 1455 of yacc.c */ #line 1728 "../parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 559: - -/* Line 1455 of yacc.c */ #line 1733 "../parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 561: - -/* Line 1455 of yacc.c */ #line 1735 "../parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 563: - -/* Line 1455 of yacc.c */ #line 1740 "../parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 565: - -/* Line 1455 of yacc.c */ #line 1742 "../parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 568: - -/* Line 1455 of yacc.c */ #line 1754 "../parser/Grammar.y" { ;} break; case 569: - -/* Line 1455 of yacc.c */ #line 1755 "../parser/Grammar.y" { ;} break; case 578: - -/* Line 1455 of yacc.c */ #line 1779 "../parser/Grammar.y" { ;} break; case 580: - -/* Line 1455 of yacc.c */ #line 1784 "../parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 585: - -/* Line 1455 of yacc.c */ #line 1795 "../parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 592: - -/* Line 1455 of yacc.c */ #line 1811 "../parser/Grammar.y" { ;} break; - -/* Line 1455 of yacc.c */ -#line 5111 "JavaScriptCore/tmp/../generated/Grammar.tab.c" +/* Line 1267 of yacc.c. */ +#line 4628 "JavaScriptCore/tmp/../generated/Grammar.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -5183,7 +4700,7 @@ yyerrlab: if (yyerrstatus == 3) { - /* If just tried and failed to reuse lookahead token after an + /* If just tried and failed to reuse look-ahead token after an error, discard it. */ if (yychar <= YYEOF) @@ -5200,7 +4717,7 @@ yyerrlab: } } - /* Else will try to reuse lookahead token after shifting the error + /* Else will try to reuse look-ahead token after shifting the error token. */ goto yyerrlab1; @@ -5258,11 +4775,14 @@ yyerrlab1: YY_STACK_PRINT (yyss, yyssp); } + if (yyn == YYFINAL) + YYACCEPT; + *++yyvsp = yylval; yyerror_range[1] = yylloc; /* Using YYLLOC is tempting, but would change the location of - the lookahead. YYLOC is available though. */ + the look-ahead. YYLOC is available though. */ YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2); *++yylsp = yyloc; @@ -5287,7 +4807,7 @@ yyabortlab: yyresult = 1; goto yyreturn; -#if !defined(yyoverflow) || YYERROR_VERBOSE +#ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ @@ -5298,7 +4818,7 @@ yyexhaustedlab: #endif yyreturn: - if (yychar != YYEMPTY) + if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, &yylloc); /* Do not reclaim the symbols of the rule which action triggered @@ -5324,8 +4844,6 @@ yyreturn: } - -/* Line 1675 of yacc.c */ #line 1827 "../parser/Grammar.y" diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.h b/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.h index c7d3837..ebd30c8 100644 --- a/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.h +++ b/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.h @@ -1,23 +1,24 @@ - -/* A Bison parser, made by GNU Bison 2.4.1. */ +/* A Bison parser, made by GNU Bison 2.3. */ /* Skeleton interface for Bison's Yacc-like parsers in C - - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify + + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - + the Free Software Foundation; either version 2, or (at your option) + any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License - along with this program. If not, see . */ + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -28,11 +29,10 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ - /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE @@ -104,16 +104,78 @@ AUTOMINUSMINUS = 320 }; #endif +/* Tokens. */ +#define NULLTOKEN 258 +#define TRUETOKEN 259 +#define FALSETOKEN 260 +#define BREAK 261 +#define CASE 262 +#define DEFAULT 263 +#define FOR 264 +#define NEW 265 +#define VAR 266 +#define CONSTTOKEN 267 +#define CONTINUE 268 +#define FUNCTION 269 +#define RETURN 270 +#define VOIDTOKEN 271 +#define DELETETOKEN 272 +#define IF 273 +#define THISTOKEN 274 +#define DO 275 +#define WHILE 276 +#define INTOKEN 277 +#define INSTANCEOF 278 +#define TYPEOF 279 +#define SWITCH 280 +#define WITH 281 +#define RESERVED 282 +#define THROW 283 +#define TRY 284 +#define CATCH 285 +#define FINALLY 286 +#define DEBUGGER 287 +#define IF_WITHOUT_ELSE 288 +#define ELSE 289 +#define EQEQ 290 +#define NE 291 +#define STREQ 292 +#define STRNEQ 293 +#define LE 294 +#define GE 295 +#define OR 296 +#define AND 297 +#define PLUSPLUS 298 +#define MINUSMINUS 299 +#define LSHIFT 300 +#define RSHIFT 301 +#define URSHIFT 302 +#define PLUSEQUAL 303 +#define MINUSEQUAL 304 +#define MULTEQUAL 305 +#define DIVEQUAL 306 +#define LSHIFTEQUAL 307 +#define RSHIFTEQUAL 308 +#define URSHIFTEQUAL 309 +#define ANDEQUAL 310 +#define MODEQUAL 311 +#define XOREQUAL 312 +#define OREQUAL 313 +#define OPENBRACE 314 +#define CLOSEBRACE 315 +#define NUMBER 316 +#define IDENT 317 +#define STRING 318 +#define AUTOPLUSPLUS 319 +#define AUTOMINUSMINUS 320 + #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -{ - -/* Line 1676 of yacc.c */ #line 157 "../parser/Grammar.y" - +{ int intValue; double doubleValue; Identifier* ident; @@ -143,15 +205,13 @@ typedef union YYSTYPE ParameterListInfo parameterList; Operator op; - - - -/* Line 1676 of yacc.c */ -#line 151 "JavaScriptCore/tmp/../generated/Grammar.tab.h" -} YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 +} +/* Line 1489 of yacc.c. */ +#line 211 "JavaScriptCore/tmp/../generated/Grammar.tab.h" + YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 #endif @@ -170,4 +230,3 @@ typedef struct YYLTYPE #endif - diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/JSONObject.lut.h b/src/3rdparty/webkit/JavaScriptCore/generated/JSONObject.lut.h new file mode 100644 index 0000000..2b7e836 --- /dev/null +++ b/src/3rdparty/webkit/JavaScriptCore/generated/JSONObject.lut.h @@ -0,0 +1,15 @@ +// Automatically generated from ../runtime/JSONObject.cpp using JavaScriptCore/create_hash_table. DO NOT EDIT! + +#include "Lookup.h" + +namespace JSC { + +static const struct HashTableValue jsonTableValues[3] = { + { "parse", DontEnum|Function, (intptr_t)JSONProtoFuncParse, (intptr_t)1 }, + { "stringify", DontEnum|Function, (intptr_t)JSONProtoFuncStringify, (intptr_t)1 }, + { 0, 0, 0, 0 } +}; + +extern const struct HashTable jsonTable = + { 4, 3, jsonTableValues, 0 }; +} // namespace diff --git a/src/3rdparty/webkit/JavaScriptCore/interpreter/CallFrame.h b/src/3rdparty/webkit/JavaScriptCore/interpreter/CallFrame.h index a61e143..0b0e5fe 100644 --- a/src/3rdparty/webkit/JavaScriptCore/interpreter/CallFrame.h +++ b/src/3rdparty/webkit/JavaScriptCore/interpreter/CallFrame.h @@ -89,6 +89,7 @@ namespace JSC { #endif static const HashTable* arrayTable(CallFrame* callFrame) { return callFrame->globalData().arrayTable; } static const HashTable* dateTable(CallFrame* callFrame) { return callFrame->globalData().dateTable; } + static const HashTable* jsonTable(CallFrame* callFrame) { return callFrame->globalData().jsonTable; } static const HashTable* mathTable(CallFrame* callFrame) { return callFrame->globalData().mathTable; } static const HashTable* numberTable(CallFrame* callFrame) { return callFrame->globalData().numberTable; } static const HashTable* regExpTable(CallFrame* callFrame) { return callFrame->globalData().regExpTable; } diff --git a/src/3rdparty/webkit/JavaScriptCore/interpreter/Interpreter.cpp b/src/3rdparty/webkit/JavaScriptCore/interpreter/Interpreter.cpp index d980962..fa7ec0b 100644 --- a/src/3rdparty/webkit/JavaScriptCore/interpreter/Interpreter.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/interpreter/Interpreter.cpp @@ -76,7 +76,7 @@ namespace JSC { static ALWAYS_INLINE unsigned bytecodeOffsetForPC(CallFrame* callFrame, CodeBlock* codeBlock, void* pc) { #if ENABLE(JIT) - return codeBlock->getBytecodeIndex(callFrame, pc); + return codeBlock->getBytecodeIndex(callFrame, ReturnAddressPtr(pc)); #else UNUSED_PARAM(callFrame); return static_cast(pc) - codeBlock->instructions().begin(); @@ -350,7 +350,7 @@ NEVER_INLINE JSValue Interpreter::callEval(CallFrame* callFrame, RegisterFile* r UString programSource = asString(program)->value(); - LiteralParser preparser(callFrame, programSource); + LiteralParser preparser(callFrame, programSource, LiteralParser::NonStrictJSON); if (JSValue parsedObject = preparser.tryLiteralParse()) return parsedObject; @@ -970,12 +970,18 @@ NEVER_INLINE void Interpreter::tryCachePutByID(CallFrame* callFrame, CodeBlock* return; } + StructureChain* protoChain = structure->prototypeChain(callFrame); + if (!protoChain->isCacheable()) { + vPC[0] = getOpcode(op_put_by_id_generic); + return; + } + // Structure transition, cache transition info if (slot.type() == PutPropertySlot::NewProperty) { vPC[0] = getOpcode(op_put_by_id_transition); vPC[4] = structure->previousID(); vPC[5] = structure; - vPC[6] = structure->prototypeChain(callFrame); + vPC[6] = protoChain; vPC[7] = slot.cachedOffset(); codeBlock->refStructures(vPC); return; @@ -1077,9 +1083,15 @@ NEVER_INLINE void Interpreter::tryCacheGetByID(CallFrame* callFrame, CodeBlock* return; } + StructureChain* protoChain = structure->prototypeChain(callFrame); + if (!protoChain->isCacheable()) { + vPC[0] = getOpcode(op_put_by_id_generic); + return; + } + vPC[0] = getOpcode(op_get_by_id_chain); vPC[4] = structure; - vPC[5] = structure->prototypeChain(callFrame); + vPC[5] = protoChain; vPC[6] = count; vPC[7] = slot.cachedOffset(); codeBlock->refStructures(vPC); diff --git a/src/3rdparty/webkit/JavaScriptCore/interpreter/RegisterFile.h b/src/3rdparty/webkit/JavaScriptCore/interpreter/RegisterFile.h index 933efb9..3a6e63b 100644 --- a/src/3rdparty/webkit/JavaScriptCore/interpreter/RegisterFile.h +++ b/src/3rdparty/webkit/JavaScriptCore/interpreter/RegisterFile.h @@ -176,23 +176,31 @@ namespace JSC { #if HAVE(MMAP) m_buffer = static_cast(mmap(0, bufferLength, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, VM_TAG_FOR_REGISTERFILE_MEMORY, 0)); if (m_buffer == MAP_FAILED) { +#if PLATFORM(WINCE) + fprintf(stderr, "Could not allocate register file: %d\n", GetLastError()); +#else fprintf(stderr, "Could not allocate register file: %d\n", errno); +#endif CRASH(); } #elif HAVE(VIRTUALALLOC) m_buffer = static_cast(VirtualAlloc(0, roundUpAllocationSize(bufferLength, commitSize), MEM_RESERVE, PAGE_READWRITE)); if (!m_buffer) { - #if !PLATFORM(WIN_CE) +#if PLATFORM(WINCE) + fprintf(stderr, "Could not allocate register file: %d\n", GetLastError()); +#else fprintf(stderr, "Could not allocate register file: %d\n", errno); - #endif +#endif CRASH(); } size_t committedSize = roundUpAllocationSize(maxGlobals * sizeof(Register), commitSize); void* commitCheck = VirtualAlloc(m_buffer, committedSize, MEM_COMMIT, PAGE_READWRITE); if (commitCheck != m_buffer) { - #if !PLATFORM(WIN_CE) +#if PLATFORM(WINCE) + fprintf(stderr, "Could not allocate register file: %d\n", GetLastError()); +#else fprintf(stderr, "Could not allocate register file: %d\n", errno); - #endif +#endif CRASH(); } m_commitEnd = reinterpret_cast(reinterpret_cast(m_buffer) + committedSize); @@ -226,7 +234,9 @@ namespace JSC { if (newEnd > m_commitEnd) { size_t size = roundUpAllocationSize(reinterpret_cast(newEnd) - reinterpret_cast(m_commitEnd), commitSize); if (!VirtualAlloc(m_commitEnd, size, MEM_COMMIT, PAGE_READWRITE)) { -#if !PLATFORM(WIN_CE) +#if PLATFORM(WINCE) + fprintf(stderr, "Could not allocate register file: %d\n", GetLastError()); +#else fprintf(stderr, "Could not allocate register file: %d\n", errno); #endif CRASH(); diff --git a/src/3rdparty/webkit/JavaScriptCore/jit/ExecutableAllocator.h b/src/3rdparty/webkit/JavaScriptCore/jit/ExecutableAllocator.h index 18261f8..0de4f79 100644 --- a/src/3rdparty/webkit/JavaScriptCore/jit/ExecutableAllocator.h +++ b/src/3rdparty/webkit/JavaScriptCore/jit/ExecutableAllocator.h @@ -26,12 +26,17 @@ #ifndef ExecutableAllocator_h #define ExecutableAllocator_h +#include #include #include #include +#include #include -#include +#if PLATFORM(IPHONE) +#include +#include +#endif #define JIT_ALLOCATOR_PAGE_SIZE (ExecutableAllocator::pageSize) #define JIT_ALLOCATOR_LARGE_ALLOC_SIZE (ExecutableAllocator::pageSize * 4) @@ -151,10 +156,20 @@ public: return pool.release(); } -#if ENABLE(ASSEMBLER_WX_EXCLUSIVE) - static void makeWritable(void* start, size_t size) { reprotectRegion(start, size, Writable); } - static void makeExecutable(void* start, size_t size) { reprotectRegion(start, size, Executable); } +#if ENABLE(ASSEMBLER_WX_EXCLUSIVE) || !(PLATFORM(X86) || PLATFORM(X86_64)) + static void makeWritable(void* start, size_t size) + { + reprotectRegion(start, size, Writable); + } + + static void makeExecutable(void* start, size_t size) + { + reprotectRegion(start, size, Executable); + cacheFlush(start, size); + } + // If ASSEMBLER_WX_EXCLUSIVE protection is turned on, or on non-x86 platforms, + // we need to track start & size so we can makeExecutable/cacheFlush at the end. class MakeWritable { public: MakeWritable(void* start, size_t size) @@ -176,13 +191,32 @@ public: #else static void makeWritable(void*, size_t) {} static void makeExecutable(void*, size_t) {} + + // On x86, without ASSEMBLER_WX_EXCLUSIVE, there is nothing to do here. class MakeWritable { public: MakeWritable(void*, size_t) {} }; #endif private: +#if ENABLE(ASSEMBLER_WX_EXCLUSIVE) || !(PLATFORM(X86) || PLATFORM(X86_64)) #if ENABLE(ASSEMBLER_WX_EXCLUSIVE) static void reprotectRegion(void*, size_t, ProtectionSeting); +#else + static void reprotectRegion(void*, size_t, ProtectionSeting) {} +#endif + + static void cacheFlush(void* code, size_t size) + { +#if PLATFORM(X86) || PLATFORM(X86_64) + UNUSED_PARAM(code); + UNUSED_PARAM(size); +#elif PLATFORM_ARM_ARCH(7) && PLATFORM(IPHONE) + sys_dcache_flush(code, size); + sys_icache_invalidate(code, size); +#else +#error "ExecutableAllocator::cacheFlush not implemented on this platform." +#endif + } #endif RefPtr m_smallAllocationPool; diff --git a/src/3rdparty/webkit/JavaScriptCore/jit/JIT.cpp b/src/3rdparty/webkit/JavaScriptCore/jit/JIT.cpp index 7f2656c..02cb09b 100644 --- a/src/3rdparty/webkit/JavaScriptCore/jit/JIT.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/jit/JIT.cpp @@ -1,4 +1,3 @@ - /* * Copyright (C) 2008, 2009 Apple Inc. All rights reserved. * @@ -46,19 +45,22 @@ using namespace std; namespace JSC { -void ctiPatchNearCallByReturnAddress(MacroAssembler::ProcessorReturnAddress returnAddress, MacroAssemblerCodePtr newCalleeFunction) +void ctiPatchNearCallByReturnAddress(ReturnAddressPtr returnAddress, MacroAssemblerCodePtr newCalleeFunction) { - returnAddress.relinkNearCallerToTrampoline(newCalleeFunction); + MacroAssembler::RepatchBuffer repatchBuffer; + repatchBuffer.relinkNearCallerToTrampoline(returnAddress, newCalleeFunction); } -void ctiPatchCallByReturnAddress(MacroAssembler::ProcessorReturnAddress returnAddress, MacroAssemblerCodePtr newCalleeFunction) +void ctiPatchCallByReturnAddress(ReturnAddressPtr returnAddress, MacroAssemblerCodePtr newCalleeFunction) { - returnAddress.relinkCallerToTrampoline(newCalleeFunction); + MacroAssembler::RepatchBuffer repatchBuffer; + repatchBuffer.relinkCallerToTrampoline(returnAddress, newCalleeFunction); } -void ctiPatchCallByReturnAddress(MacroAssembler::ProcessorReturnAddress returnAddress, FunctionPtr newCalleeFunction) +void ctiPatchCallByReturnAddress(ReturnAddressPtr returnAddress, FunctionPtr newCalleeFunction) { - returnAddress.relinkCallerToFunction(newCalleeFunction); + MacroAssembler::RepatchBuffer repatchBuffer; + repatchBuffer.relinkCallerToFunction(returnAddress, newCalleeFunction); } JIT::JIT(JSGlobalData* globalData, CodeBlock* codeBlock) @@ -68,6 +70,7 @@ JIT::JIT(JSGlobalData* globalData, CodeBlock* codeBlock) , m_labels(codeBlock ? codeBlock->instructions().size() : 0) , m_propertyAccessCompilationInfo(codeBlock ? codeBlock->numberOfStructureStubInfos() : 0) , m_callStructureStubCompilationInfo(codeBlock ? codeBlock->numberOfCallLinkInfos() : 0) + , m_bytecodeIndex((unsigned)-1) , m_lastResultBytecodeRegister(std::numeric_limits::max()) , m_jumpTargetsPosition(0) { @@ -403,10 +406,10 @@ void JIT::privateCompile() // In the case of a fast linked call, we do not set this up in the caller. emitPutImmediateToCallFrameHeader(m_codeBlock, RegisterFile::CodeBlock); - peek(regT0, FIELD_OFFSET(JITStackFrame, registerFile) / sizeof (void*)); + peek(regT0, OBJECT_OFFSETOF(JITStackFrame, registerFile) / sizeof (void*)); addPtr(Imm32(m_codeBlock->m_numCalleeRegisters * sizeof(Register)), callFrameRegister, regT1); - slowRegisterFileCheck = branchPtr(Above, regT1, Address(regT0, FIELD_OFFSET(RegisterFile, m_end))); + slowRegisterFileCheck = branchPtr(Above, regT1, Address(regT0, OBJECT_OFFSETOF(RegisterFile, m_end))); afterRegisterFileCheck = label(); } @@ -426,7 +429,7 @@ void JIT::privateCompile() ASSERT(m_jmpTable.isEmpty()); - PatchBuffer patchBuffer(this, m_globalData->executableAllocator.poolForSize(m_assembler.size())); + LinkBuffer patchBuffer(this, m_globalData->executableAllocator.poolForSize(m_assembler.size())); // Translate vPC offsets into addresses in JIT generated code, for switch tables. for (unsigned i = 0; i < m_switches.size(); ++i) { @@ -474,7 +477,7 @@ void JIT::privateCompile() // Link absolute addresses for jsr for (Vector::iterator iter = m_jsrSites.begin(); iter != m_jsrSites.end(); ++iter) - patchBuffer.patch(iter->storeLocation, patchBuffer.locationOf(iter->target).addressForJSR()); + patchBuffer.patch(iter->storeLocation, patchBuffer.locationOf(iter->target).executableAddress()); #if ENABLE(JIT_OPTIMIZE_PROPERTY_ACCESS) for (unsigned i = 0; i < m_codeBlock->numberOfStructureStubInfos(); ++i) { @@ -489,7 +492,6 @@ void JIT::privateCompile() info.callReturnLocation = patchBuffer.locationOfNearCall(m_callStructureStubCompilationInfo[i].callReturnLocation); info.hotPathBegin = patchBuffer.locationOf(m_callStructureStubCompilationInfo[i].hotPathBegin); info.hotPathOther = patchBuffer.locationOfNearCall(m_callStructureStubCompilationInfo[i].hotPathOther); - info.coldPathOther = patchBuffer.locationOf(m_callStructureStubCompilationInfo[i].coldPathOther); } #endif unsigned methodCallCount = m_methodCallCompilationInfo.size(); @@ -514,8 +516,8 @@ void JIT::privateCompileCTIMachineTrampolines(RefPtr* executable Jump array_failureCases2 = branchPtr(NotEqual, Address(regT0), ImmPtr(m_globalData->jsArrayVPtr)); // Checks out okay! - get the length from the storage - loadPtr(Address(regT0, FIELD_OFFSET(JSArray, m_storage)), regT0); - load32(Address(regT0, FIELD_OFFSET(ArrayStorage, m_length)), regT0); + loadPtr(Address(regT0, OBJECT_OFFSETOF(JSArray, m_storage)), regT0); + load32(Address(regT0, OBJECT_OFFSETOF(ArrayStorage, m_length)), regT0); Jump array_failureCases3 = branch32(Above, regT0, Imm32(JSImmediate::maxImmediateInt)); @@ -532,8 +534,8 @@ void JIT::privateCompileCTIMachineTrampolines(RefPtr* executable Jump string_failureCases2 = branchPtr(NotEqual, Address(regT0), ImmPtr(m_globalData->jsStringVPtr)); // Checks out okay! - get the length from the Ustring. - loadPtr(Address(regT0, FIELD_OFFSET(JSString, m_value) + FIELD_OFFSET(UString, m_rep)), regT0); - load32(Address(regT0, FIELD_OFFSET(UString::Rep, len)), regT0); + loadPtr(Address(regT0, OBJECT_OFFSETOF(JSString, m_value) + OBJECT_OFFSETOF(UString, m_rep)), regT0); + load32(Address(regT0, OBJECT_OFFSETOF(UString::Rep, len)), regT0); Jump string_failureCases3 = branch32(Above, regT0, Imm32(JSImmediate::maxImmediateInt)); @@ -544,16 +546,14 @@ void JIT::privateCompileCTIMachineTrampolines(RefPtr* executable #endif // (3) Trampolines for the slow cases of op_call / op_call_eval / op_construct. - + COMPILE_ASSERT(sizeof(CodeType) == 4, CodeTypeEnumMustBe32Bit); + Label virtualCallPreLinkBegin = align(); // Load the callee CodeBlock* into eax - loadPtr(Address(regT2, FIELD_OFFSET(JSFunction, m_body)), regT3); - loadPtr(Address(regT3, FIELD_OFFSET(FunctionBodyNode, m_code)), regT0); + loadPtr(Address(regT2, OBJECT_OFFSETOF(JSFunction, m_body)), regT3); + loadPtr(Address(regT3, OBJECT_OFFSETOF(FunctionBodyNode, m_code)), regT0); Jump hasCodeBlock1 = branchTestPtr(NonZero, regT0); - // If m_code is null and m_jitCode is not, then we have a native function, so arity is irrelevant - loadPtr(Address(regT3, FIELD_OFFSET(FunctionBodyNode, m_jitCode)), regT0); - Jump isNativeFunc1 = branchTestPtr(NonZero, regT0); preverveReturnAddressAfterCall(regT3); restoreArgumentReference(); Call callJSFunction1 = call(); @@ -562,8 +562,10 @@ void JIT::privateCompileCTIMachineTrampolines(RefPtr* executable restoreReturnAddressBeforeReturn(regT3); hasCodeBlock1.link(this); + Jump isNativeFunc1 = branch32(Equal, Address(regT0, OBJECT_OFFSETOF(CodeBlock, m_codeType)), Imm32(NativeCode)); + // Check argCount matches callee arity. - Jump arityCheckOkay1 = branch32(Equal, Address(regT0, FIELD_OFFSET(CodeBlock, m_numParameters)), regT1); + Jump arityCheckOkay1 = branch32(Equal, Address(regT0, OBJECT_OFFSETOF(CodeBlock, m_numParameters)), regT1); preverveReturnAddressAfterCall(regT3); emitPutJITStubArg(regT3, 2); emitPutJITStubArg(regT0, 4); @@ -590,12 +592,9 @@ void JIT::privateCompileCTIMachineTrampolines(RefPtr* executable Label virtualCallLinkBegin = align(); // Load the callee CodeBlock* into eax - loadPtr(Address(regT2, FIELD_OFFSET(JSFunction, m_body)), regT3); - loadPtr(Address(regT3, FIELD_OFFSET(FunctionBodyNode, m_code)), regT0); + loadPtr(Address(regT2, OBJECT_OFFSETOF(JSFunction, m_body)), regT3); + loadPtr(Address(regT3, OBJECT_OFFSETOF(FunctionBodyNode, m_code)), regT0); Jump hasCodeBlock2 = branchTestPtr(NonZero, regT0); - // If m_code is null and m_jitCode is not, then we have a native function, so arity is irrelevant - loadPtr(Address(regT3, FIELD_OFFSET(FunctionBodyNode, m_jitCode)), regT0); - Jump isNativeFunc2 = branchTestPtr(NonZero, regT0); preverveReturnAddressAfterCall(regT3); restoreArgumentReference(); Call callJSFunction2 = call(); @@ -604,8 +603,10 @@ void JIT::privateCompileCTIMachineTrampolines(RefPtr* executable restoreReturnAddressBeforeReturn(regT3); hasCodeBlock2.link(this); + Jump isNativeFunc2 = branch32(Equal, Address(regT0, OBJECT_OFFSETOF(CodeBlock, m_codeType)), Imm32(NativeCode)); + // Check argCount matches callee arity. - Jump arityCheckOkay2 = branch32(Equal, Address(regT0, FIELD_OFFSET(CodeBlock, m_numParameters)), regT1); + Jump arityCheckOkay2 = branch32(Equal, Address(regT0, OBJECT_OFFSETOF(CodeBlock, m_numParameters)), regT1); preverveReturnAddressAfterCall(regT3); emitPutJITStubArg(regT3, 2); emitPutJITStubArg(regT0, 4); @@ -631,23 +632,22 @@ void JIT::privateCompileCTIMachineTrampolines(RefPtr* executable Label virtualCallBegin = align(); // Load the callee CodeBlock* into eax - loadPtr(Address(regT2, FIELD_OFFSET(JSFunction, m_body)), regT3); - loadPtr(Address(regT3, FIELD_OFFSET(FunctionBodyNode, m_code)), regT0); + loadPtr(Address(regT2, OBJECT_OFFSETOF(JSFunction, m_body)), regT3); + loadPtr(Address(regT3, OBJECT_OFFSETOF(FunctionBodyNode, m_code)), regT0); Jump hasCodeBlock3 = branchTestPtr(NonZero, regT0); - // If m_code is null and m_jitCode is not, then we have a native function, so arity is irrelevant - loadPtr(Address(regT3, FIELD_OFFSET(FunctionBodyNode, m_jitCode)), regT0); - Jump isNativeFunc3 = branchTestPtr(NonZero, regT0); preverveReturnAddressAfterCall(regT3); restoreArgumentReference(); Call callJSFunction3 = call(); emitGetJITStubArg(1, regT2); emitGetJITStubArg(3, regT1); restoreReturnAddressBeforeReturn(regT3); - loadPtr(Address(regT2, FIELD_OFFSET(JSFunction, m_body)), regT3); // reload the function body nody, so we can reload the code pointer. + loadPtr(Address(regT2, OBJECT_OFFSETOF(JSFunction, m_body)), regT3); // reload the function body nody, so we can reload the code pointer. hasCodeBlock3.link(this); + + Jump isNativeFunc3 = branch32(Equal, Address(regT0, OBJECT_OFFSETOF(CodeBlock, m_codeType)), Imm32(NativeCode)); // Check argCount matches callee arity. - Jump arityCheckOkay3 = branch32(Equal, Address(regT0, FIELD_OFFSET(CodeBlock, m_numParameters)), regT1); + Jump arityCheckOkay3 = branch32(Equal, Address(regT0, OBJECT_OFFSETOF(CodeBlock, m_numParameters)), regT1); preverveReturnAddressAfterCall(regT3); emitPutJITStubArg(regT3, 2); emitPutJITStubArg(regT0, 4); @@ -657,12 +657,13 @@ void JIT::privateCompileCTIMachineTrampolines(RefPtr* executable emitGetJITStubArg(1, regT2); emitGetJITStubArg(3, regT1); restoreReturnAddressBeforeReturn(regT3); - loadPtr(Address(regT2, FIELD_OFFSET(JSFunction, m_body)), regT3); // reload the function body nody, so we can reload the code pointer. + loadPtr(Address(regT2, OBJECT_OFFSETOF(JSFunction, m_body)), regT3); // reload the function body nody, so we can reload the code pointer. arityCheckOkay3.link(this); - // load ctiCode from the new codeBlock. - loadPtr(Address(regT3, FIELD_OFFSET(FunctionBodyNode, m_jitCode)), regT0); isNativeFunc3.link(this); + // load ctiCode from the new codeBlock. + loadPtr(Address(regT3, OBJECT_OFFSETOF(FunctionBodyNode, m_jitCode)), regT0); + compileOpCallInitializeCallFrame(); jump(regT0); @@ -689,7 +690,7 @@ void JIT::privateCompileCTIMachineTrampolines(RefPtr* executable subPtr(Imm32(1), X86::ecx); // Don't include 'this' in argcount // Push argcount - storePtr(X86::ecx, Address(stackPointerRegister, FIELD_OFFSET(ArgList, m_argCount))); + storePtr(X86::ecx, Address(stackPointerRegister, OBJECT_OFFSETOF(ArgList, m_argCount))); // Calculate the start of the callframe header, and store in edx addPtr(Imm32(-RegisterFile::CallFrameHeaderSize * (int32_t)sizeof(Register)), callFrameRegister, X86::edx); @@ -699,7 +700,7 @@ void JIT::privateCompileCTIMachineTrampolines(RefPtr* executable subPtr(X86::ecx, X86::edx); // push pointer to arguments - storePtr(X86::edx, Address(stackPointerRegister, FIELD_OFFSET(ArgList, m_args))); + storePtr(X86::edx, Address(stackPointerRegister, OBJECT_OFFSETOF(ArgList, m_args))); // ArgList is passed by reference so is stackPointerRegister move(stackPointerRegister, X86::ecx); @@ -711,10 +712,10 @@ void JIT::privateCompileCTIMachineTrampolines(RefPtr* executable move(callFrameRegister, X86::edi); - call(Address(X86::esi, FIELD_OFFSET(JSFunction, m_data))); + call(Address(X86::esi, OBJECT_OFFSETOF(JSFunction, m_data))); addPtr(Imm32(sizeof(ArgList)), stackPointerRegister); -#else +#elif PLATFORM(X86) emitGetFromCallFrameHeader32(RegisterFile::ArgumentCount, regT0); /* We have two structs that we use to describe the stackframe we set up for our @@ -760,7 +761,7 @@ void JIT::privateCompileCTIMachineTrampolines(RefPtr* executable subPtr(Imm32(1), regT0); // Don't include 'this' in argcount // push argcount - storePtr(regT0, Address(stackPointerRegister, FIELD_OFFSET(NativeCallFrameStructure, args) + FIELD_OFFSET(ArgList, m_argCount))); + storePtr(regT0, Address(stackPointerRegister, OBJECT_OFFSETOF(NativeCallFrameStructure, args) + OBJECT_OFFSETOF(ArgList, m_argCount))); // Calculate the start of the callframe header, and store in regT1 addPtr(Imm32(-RegisterFile::CallFrameHeaderSize * (int)sizeof(Register)), callFrameRegister, regT1); @@ -768,28 +769,28 @@ void JIT::privateCompileCTIMachineTrampolines(RefPtr* executable // Calculate start of arguments as callframe header - sizeof(Register) * argcount (regT0) mul32(Imm32(sizeof(Register)), regT0, regT0); subPtr(regT0, regT1); - storePtr(regT1, Address(stackPointerRegister, FIELD_OFFSET(NativeCallFrameStructure, args) + FIELD_OFFSET(ArgList, m_args))); + storePtr(regT1, Address(stackPointerRegister, OBJECT_OFFSETOF(NativeCallFrameStructure, args) + OBJECT_OFFSETOF(ArgList, m_args))); // ArgList is passed by reference so is stackPointerRegister + 4 * sizeof(Register) - addPtr(Imm32(FIELD_OFFSET(NativeCallFrameStructure, args)), stackPointerRegister, regT0); - storePtr(regT0, Address(stackPointerRegister, FIELD_OFFSET(NativeCallFrameStructure, argPointer))); + addPtr(Imm32(OBJECT_OFFSETOF(NativeCallFrameStructure, args)), stackPointerRegister, regT0); + storePtr(regT0, Address(stackPointerRegister, OBJECT_OFFSETOF(NativeCallFrameStructure, argPointer))); // regT1 currently points to the first argument, regT1 - sizeof(Register) points to 'this' loadPtr(Address(regT1, -(int)sizeof(Register)), regT1); - storePtr(regT1, Address(stackPointerRegister, FIELD_OFFSET(NativeCallFrameStructure, thisValue))); + storePtr(regT1, Address(stackPointerRegister, OBJECT_OFFSETOF(NativeCallFrameStructure, thisValue))); #if COMPILER(MSVC) || PLATFORM(LINUX) // ArgList is passed by reference so is stackPointerRegister + 4 * sizeof(Register) - addPtr(Imm32(FIELD_OFFSET(NativeCallFrameStructure, result)), stackPointerRegister, X86::ecx); + addPtr(Imm32(OBJECT_OFFSETOF(NativeCallFrameStructure, result)), stackPointerRegister, X86::ecx); // Plant callee emitGetFromCallFrameHeaderPtr(RegisterFile::Callee, X86::eax); - storePtr(X86::eax, Address(stackPointerRegister, FIELD_OFFSET(NativeCallFrameStructure, callee))); + storePtr(X86::eax, Address(stackPointerRegister, OBJECT_OFFSETOF(NativeCallFrameStructure, callee))); // Plant callframe move(callFrameRegister, X86::edx); - call(Address(X86::eax, FIELD_OFFSET(JSFunction, m_data))); + call(Address(X86::eax, OBJECT_OFFSETOF(JSFunction, m_data))); // JSValue is a non-POD type loadPtr(Address(X86::eax), X86::eax); @@ -799,13 +800,17 @@ void JIT::privateCompileCTIMachineTrampolines(RefPtr* executable // Plant callframe move(callFrameRegister, X86::ecx); - call(Address(X86::edx, FIELD_OFFSET(JSFunction, m_data))); + call(Address(X86::edx, OBJECT_OFFSETOF(JSFunction, m_data))); #endif // We've put a few temporaries on the stack in addition to the actual arguments // so pull them off now addPtr(Imm32(NativeCallFrameSize - sizeof(NativeFunctionCalleeSignature)), stackPointerRegister); +#elif ENABLE(JIT_OPTIMIZE_NATIVE_CALL) +#error "JIT_OPTIMIZE_NATIVE_CALL not yet supported on this platform." +#else + breakpoint(); #endif // Check for an exception @@ -830,7 +835,7 @@ void JIT::privateCompileCTIMachineTrampolines(RefPtr* executable storePtr(regT1, regT2); move(ImmPtr(reinterpret_cast(ctiVMThrowTrampoline)), regT2); emitGetFromCallFrameHeaderPtr(RegisterFile::CallerFrame, callFrameRegister); - poke(callFrameRegister, offsetof(struct JITStackFrame, callFrame) / sizeof (void*)); + poke(callFrameRegister, OBJECT_OFFSETOF(struct JITStackFrame, callFrame) / sizeof (void*)); restoreReturnAddressBeforeReturn(regT2); ret(); @@ -845,7 +850,7 @@ void JIT::privateCompileCTIMachineTrampolines(RefPtr* executable #endif // All trampolines constructed! copy the code, link up calls, and set the pointers on the Machine object. - PatchBuffer patchBuffer(this, m_globalData->executableAllocator.poolForSize(m_assembler.size())); + LinkBuffer patchBuffer(this, m_globalData->executableAllocator.poolForSize(m_assembler.size())); #if ENABLE(JIT_OPTIMIZE_PROPERTY_ACCESS) patchBuffer.link(array_failureCases1Call, FunctionPtr(JITStubs::cti_op_get_by_id_array_fail)); @@ -882,15 +887,15 @@ void JIT::privateCompileCTIMachineTrampolines(RefPtr* executable void JIT::emitGetVariableObjectRegister(RegisterID variableObject, int index, RegisterID dst) { - loadPtr(Address(variableObject, FIELD_OFFSET(JSVariableObject, d)), dst); - loadPtr(Address(dst, FIELD_OFFSET(JSVariableObject::JSVariableObjectData, registers)), dst); + loadPtr(Address(variableObject, OBJECT_OFFSETOF(JSVariableObject, d)), dst); + loadPtr(Address(dst, OBJECT_OFFSETOF(JSVariableObject::JSVariableObjectData, registers)), dst); loadPtr(Address(dst, index * sizeof(Register)), dst); } void JIT::emitPutVariableObjectRegister(RegisterID src, RegisterID variableObject, int index) { - loadPtr(Address(variableObject, FIELD_OFFSET(JSVariableObject, d)), variableObject); - loadPtr(Address(variableObject, FIELD_OFFSET(JSVariableObject::JSVariableObjectData, registers)), variableObject); + loadPtr(Address(variableObject, OBJECT_OFFSETOF(JSVariableObject, d)), variableObject); + loadPtr(Address(variableObject, OBJECT_OFFSETOF(JSVariableObject::JSVariableObjectData, registers)), variableObject); storePtr(src, Address(variableObject, index * sizeof(Register))); } @@ -899,25 +904,29 @@ void JIT::unlinkCall(CallLinkInfo* callLinkInfo) // When the JSFunction is deleted the pointer embedded in the instruction stream will no longer be valid // (and, if a new JSFunction happened to be constructed at the same location, we could get a false positive // match). Reset the check so it no longer matches. - callLinkInfo->hotPathBegin.repatch(JSValue::encode(JSValue())); + RepatchBuffer repatchBuffer; + repatchBuffer.repatch(callLinkInfo->hotPathBegin, JSValue::encode(JSValue())); } -void JIT::linkCall(JSFunction* callee, CodeBlock* calleeCodeBlock, JITCode& code, CallLinkInfo* callLinkInfo, int callerArgCount) +void JIT::linkCall(JSFunction* callee, CodeBlock* calleeCodeBlock, JITCode& code, CallLinkInfo* callLinkInfo, int callerArgCount, JSGlobalData* globalData) { + ASSERT(calleeCodeBlock); + RepatchBuffer repatchBuffer; + // Currently we only link calls with the exact number of arguments. // If this is a native call calleeCodeBlock is null so the number of parameters is unimportant - if (!calleeCodeBlock || callerArgCount == calleeCodeBlock->m_numParameters) { + if (callerArgCount == calleeCodeBlock->m_numParameters || calleeCodeBlock->codeType() == NativeCode) { ASSERT(!callLinkInfo->isLinked()); if (calleeCodeBlock) calleeCodeBlock->addCaller(callLinkInfo); - callLinkInfo->hotPathBegin.repatch(callee); - callLinkInfo->hotPathOther.relink(code.addressForCall()); + repatchBuffer.repatch(callLinkInfo->hotPathBegin, callee); + repatchBuffer.relink(callLinkInfo->hotPathOther, code.addressForCall()); } - // patch the instruction that jumps out to the cold path, so that we only try to link once. - callLinkInfo->hotPathBegin.jumpAtOffset(patchOffsetOpCallCompareToJump).relink(callLinkInfo->coldPathOther); + // patch the call so we do not continue to try to link. + repatchBuffer.relink(callLinkInfo->callReturnLocation, globalData->jitStubs.ctiVirtualCall()); } } // namespace JSC diff --git a/src/3rdparty/webkit/JavaScriptCore/jit/JIT.h b/src/3rdparty/webkit/JavaScriptCore/jit/JIT.h index c9e5355..bc006fc 100644 --- a/src/3rdparty/webkit/JavaScriptCore/jit/JIT.h +++ b/src/3rdparty/webkit/JavaScriptCore/jit/JIT.h @@ -28,6 +28,11 @@ #include +// OBJECT_OFFSETOF: Like the C++ offsetof macro, but you can use it with classes. +// The magic number 0x4000 is insignificant. We use it to avoid using NULL, since +// NULL can cause compiler problems, especially in cases of multiple inheritance. +#define OBJECT_OFFSETOF(class, field) (reinterpret_cast(&(reinterpret_cast(0x4000)->field)) - 0x4000) + #if ENABLE(JIT) // We've run into some problems where changing the size of the class JIT leads to @@ -153,7 +158,6 @@ namespace JSC { MacroAssembler::DataLabelPtr hotPathBegin; MacroAssembler::Call hotPathOther; MacroAssembler::Call callReturnLocation; - MacroAssembler::Label coldPathOther; }; struct MethodCallCompilationInfo { @@ -167,9 +171,9 @@ namespace JSC { }; // Near calls can only be patched to other JIT code, regular calls can be patched to JIT code or relinked to stub functions. - void ctiPatchNearCallByReturnAddress(MacroAssembler::ProcessorReturnAddress returnAddress, MacroAssemblerCodePtr newCalleeFunction); - void ctiPatchCallByReturnAddress(MacroAssembler::ProcessorReturnAddress returnAddress, MacroAssemblerCodePtr newCalleeFunction); - void ctiPatchCallByReturnAddress(MacroAssembler::ProcessorReturnAddress returnAddress, FunctionPtr newCalleeFunction); + void ctiPatchNearCallByReturnAddress(ReturnAddressPtr returnAddress, MacroAssemblerCodePtr newCalleeFunction); + void ctiPatchCallByReturnAddress(ReturnAddressPtr returnAddress, MacroAssemblerCodePtr newCalleeFunction); + void ctiPatchCallByReturnAddress(ReturnAddressPtr returnAddress, FunctionPtr newCalleeFunction); class JIT : private MacroAssembler { friend class JITStubCall; @@ -228,6 +232,22 @@ namespace JSC { static const FPRegisterID fpRegT0 = X86::xmm0; static const FPRegisterID fpRegT1 = X86::xmm1; static const FPRegisterID fpRegT2 = X86::xmm2; +#elif PLATFORM_ARM_ARCH(7) + static const RegisterID returnValueRegister = ARM::r0; + static const RegisterID cachedResultRegister = ARM::r0; + static const RegisterID firstArgumentRegister = ARM::r0; + + static const RegisterID regT0 = ARM::r0; + static const RegisterID regT1 = ARM::r1; + static const RegisterID regT2 = ARM::r2; + static const RegisterID regT3 = ARM::r4; + + static const RegisterID callFrameRegister = ARM::r5; + static const RegisterID timeoutCheckRegister = ARM::r6; + + static const FPRegisterID fpRegT0 = ARM::d0; + static const FPRegisterID fpRegT1 = ARM::d1; + static const FPRegisterID fpRegT2 = ARM::d2; #else #error "JIT not supported on this platform." #endif @@ -260,7 +280,7 @@ namespace JSC { static const int patchOffsetMethodCheckProtoObj = 20; static const int patchOffsetMethodCheckProtoStruct = 30; static const int patchOffsetMethodCheckPutFunction = 50; -#else +#elif PLATFORM(X86) // These architecture specific value are used to enable patching - see comment on op_put_by_id. static const int patchOffsetPutByIdStructure = 7; static const int patchOffsetPutByIdExternalLoad = 13; @@ -287,6 +307,29 @@ namespace JSC { static const int patchOffsetMethodCheckProtoObj = 11; static const int patchOffsetMethodCheckProtoStruct = 18; static const int patchOffsetMethodCheckPutFunction = 29; +#elif PLATFORM_ARM_ARCH(7) + // These architecture specific value are used to enable patching - see comment on op_put_by_id. + static const int patchOffsetPutByIdStructure = 10; + static const int patchOffsetPutByIdExternalLoad = 20; + static const int patchLengthPutByIdExternalLoad = 12; + static const int patchOffsetPutByIdPropertyMapOffset = 40; + // These architecture specific value are used to enable patching - see comment on op_get_by_id. + static const int patchOffsetGetByIdStructure = 10; + static const int patchOffsetGetByIdBranchToSlowCase = 20; + static const int patchOffsetGetByIdExternalLoad = 20; + static const int patchLengthGetByIdExternalLoad = 12; + static const int patchOffsetGetByIdPropertyMapOffset = 40; + static const int patchOffsetGetByIdPutResult = 44; +#if ENABLE(OPCODE_SAMPLING) + static const int patchOffsetGetByIdSlowCaseCall = 0; // FIMXE +#else + static const int patchOffsetGetByIdSlowCaseCall = 28; +#endif + static const int patchOffsetOpCallCompareToJump = 10; + + static const int patchOffsetMethodCheckProtoObj = 18; + static const int patchOffsetMethodCheckProtoStruct = 28; + static const int patchOffsetMethodCheckPutFunction = 46; #endif public: @@ -296,57 +339,81 @@ namespace JSC { jit.privateCompile(); } - static void compileGetByIdProto(JSGlobalData* globalData, CallFrame* callFrame, CodeBlock* codeBlock, StructureStubInfo* stubInfo, Structure* structure, Structure* prototypeStructure, size_t cachedOffset, ProcessorReturnAddress returnAddress) + static void compileGetByIdProto(JSGlobalData* globalData, CallFrame* callFrame, CodeBlock* codeBlock, StructureStubInfo* stubInfo, Structure* structure, Structure* prototypeStructure, size_t cachedOffset, ReturnAddressPtr returnAddress) { JIT jit(globalData, codeBlock); +#if ENABLE(OPCODE_SAMPLING) + jit->m_bytecodeIndex = jit->m_codeBlock->getCallReturnOffset(returnAddress.value()); +#endif jit.privateCompileGetByIdProto(stubInfo, structure, prototypeStructure, cachedOffset, returnAddress, callFrame); } static void compileGetByIdSelfList(JSGlobalData* globalData, CodeBlock* codeBlock, StructureStubInfo* stubInfo, PolymorphicAccessStructureList* polymorphicStructures, int currentIndex, Structure* structure, size_t cachedOffset) { JIT jit(globalData, codeBlock); +#if ENABLE(OPCODE_SAMPLING) + jit->m_bytecodeIndex = jit->m_codeBlock->getCallReturnOffset(returnAddress.value()); +#endif jit.privateCompileGetByIdSelfList(stubInfo, polymorphicStructures, currentIndex, structure, cachedOffset); } static void compileGetByIdProtoList(JSGlobalData* globalData, CallFrame* callFrame, CodeBlock* codeBlock, StructureStubInfo* stubInfo, PolymorphicAccessStructureList* prototypeStructureList, int currentIndex, Structure* structure, Structure* prototypeStructure, size_t cachedOffset) { JIT jit(globalData, codeBlock); +#if ENABLE(OPCODE_SAMPLING) + jit->m_bytecodeIndex = jit->m_codeBlock->getCallReturnOffset(returnAddress.value()); +#endif jit.privateCompileGetByIdProtoList(stubInfo, prototypeStructureList, currentIndex, structure, prototypeStructure, cachedOffset, callFrame); } static void compileGetByIdChainList(JSGlobalData* globalData, CallFrame* callFrame, CodeBlock* codeBlock, StructureStubInfo* stubInfo, PolymorphicAccessStructureList* prototypeStructureList, int currentIndex, Structure* structure, StructureChain* chain, size_t count, size_t cachedOffset) { JIT jit(globalData, codeBlock); +#if ENABLE(OPCODE_SAMPLING) + jit->m_bytecodeIndex = jit->m_codeBlock->getCallReturnOffset(returnAddress.value()); +#endif jit.privateCompileGetByIdChainList(stubInfo, prototypeStructureList, currentIndex, structure, chain, count, cachedOffset, callFrame); } - static void compileGetByIdChain(JSGlobalData* globalData, CallFrame* callFrame, CodeBlock* codeBlock, StructureStubInfo* stubInfo, Structure* structure, StructureChain* chain, size_t count, size_t cachedOffset, ProcessorReturnAddress returnAddress) + static void compileGetByIdChain(JSGlobalData* globalData, CallFrame* callFrame, CodeBlock* codeBlock, StructureStubInfo* stubInfo, Structure* structure, StructureChain* chain, size_t count, size_t cachedOffset, ReturnAddressPtr returnAddress) { JIT jit(globalData, codeBlock); +#if ENABLE(OPCODE_SAMPLING) + jit->m_bytecodeIndex = jit->m_codeBlock->getCallReturnOffset(returnAddress.value()); +#endif jit.privateCompileGetByIdChain(stubInfo, structure, chain, count, cachedOffset, returnAddress, callFrame); } - static void compilePutByIdTransition(JSGlobalData* globalData, CodeBlock* codeBlock, StructureStubInfo* stubInfo, Structure* oldStructure, Structure* newStructure, size_t cachedOffset, StructureChain* chain, ProcessorReturnAddress returnAddress) + static void compilePutByIdTransition(JSGlobalData* globalData, CodeBlock* codeBlock, StructureStubInfo* stubInfo, Structure* oldStructure, Structure* newStructure, size_t cachedOffset, StructureChain* chain, ReturnAddressPtr returnAddress) { JIT jit(globalData, codeBlock); +#if ENABLE(OPCODE_SAMPLING) + jit->m_bytecodeIndex = jit->m_codeBlock->getCallReturnOffset(returnAddress.value()); +#endif jit.privateCompilePutByIdTransition(stubInfo, oldStructure, newStructure, cachedOffset, chain, returnAddress); } static void compileCTIMachineTrampolines(JSGlobalData* globalData, RefPtr* executablePool, CodePtr* ctiArrayLengthTrampoline, CodePtr* ctiStringLengthTrampoline, CodePtr* ctiVirtualCallPreLink, CodePtr* ctiVirtualCallLink, CodePtr* ctiVirtualCall, CodePtr* ctiNativeCallThunk) { JIT jit(globalData); +#if ENABLE(OPCODE_SAMPLING) + jit->m_bytecodeIndex = jit->m_codeBlock->getCallReturnOffset(returnAddress.value()); +#endif jit.privateCompileCTIMachineTrampolines(executablePool, globalData, ctiArrayLengthTrampoline, ctiStringLengthTrampoline, ctiVirtualCallPreLink, ctiVirtualCallLink, ctiVirtualCall, ctiNativeCallThunk); } - static void patchGetByIdSelf(StructureStubInfo*, Structure*, size_t cachedOffset, ProcessorReturnAddress returnAddress); - static void patchPutByIdReplace(StructureStubInfo*, Structure*, size_t cachedOffset, ProcessorReturnAddress returnAddress); + static void patchGetByIdSelf(StructureStubInfo*, Structure*, size_t cachedOffset, ReturnAddressPtr returnAddress); + static void patchPutByIdReplace(StructureStubInfo*, Structure*, size_t cachedOffset, ReturnAddressPtr returnAddress); static void patchMethodCallProto(MethodCallLinkInfo&, JSFunction*, Structure*, JSObject*); - static void compilePatchGetArrayLength(JSGlobalData* globalData, CodeBlock* codeBlock, ProcessorReturnAddress returnAddress) + static void compilePatchGetArrayLength(JSGlobalData* globalData, CodeBlock* codeBlock, ReturnAddressPtr returnAddress) { JIT jit(globalData, codeBlock); +#if ENABLE(OPCODE_SAMPLING) + jit->m_bytecodeIndex = jit->m_codeBlock->getCallReturnOffset(returnAddress.value()); +#endif return jit.privateCompilePatchGetArrayLength(returnAddress); } - static void linkCall(JSFunction* callee, CodeBlock* calleeCodeBlock, JITCode&, CallLinkInfo*, int callerArgCount); + static void linkCall(JSFunction* callee, CodeBlock* calleeCodeBlock, JITCode&, CallLinkInfo*, int callerArgCount, JSGlobalData*); static void unlinkCall(CallLinkInfo*); private: @@ -367,15 +434,15 @@ namespace JSC { void privateCompileLinkPass(); void privateCompileSlowCases(); void privateCompile(); - void privateCompileGetByIdProto(StructureStubInfo*, Structure*, Structure* prototypeStructure, size_t cachedOffset, ProcessorReturnAddress returnAddress, CallFrame* callFrame); + void privateCompileGetByIdProto(StructureStubInfo*, Structure*, Structure* prototypeStructure, size_t cachedOffset, ReturnAddressPtr returnAddress, CallFrame* callFrame); void privateCompileGetByIdSelfList(StructureStubInfo*, PolymorphicAccessStructureList*, int, Structure*, size_t cachedOffset); void privateCompileGetByIdProtoList(StructureStubInfo*, PolymorphicAccessStructureList*, int, Structure*, Structure* prototypeStructure, size_t cachedOffset, CallFrame* callFrame); void privateCompileGetByIdChainList(StructureStubInfo*, PolymorphicAccessStructureList*, int, Structure*, StructureChain* chain, size_t count, size_t cachedOffset, CallFrame* callFrame); - void privateCompileGetByIdChain(StructureStubInfo*, Structure*, StructureChain*, size_t count, size_t cachedOffset, ProcessorReturnAddress returnAddress, CallFrame* callFrame); - void privateCompilePutByIdTransition(StructureStubInfo*, Structure*, Structure*, size_t cachedOffset, StructureChain*, ProcessorReturnAddress returnAddress); + void privateCompileGetByIdChain(StructureStubInfo*, Structure*, StructureChain*, size_t count, size_t cachedOffset, ReturnAddressPtr returnAddress, CallFrame* callFrame); + void privateCompilePutByIdTransition(StructureStubInfo*, Structure*, Structure*, size_t cachedOffset, StructureChain*, ReturnAddressPtr returnAddress); void privateCompileCTIMachineTrampolines(RefPtr* executablePool, JSGlobalData* data, CodePtr* ctiArrayLengthTrampoline, CodePtr* ctiStringLengthTrampoline, CodePtr* ctiVirtualCallPreLink, CodePtr* ctiVirtualCallLink, CodePtr* ctiVirtualCall, CodePtr* ctiNativeCallThunk); - void privateCompilePatchGetArrayLength(ProcessorReturnAddress returnAddress); + void privateCompilePatchGetArrayLength(ReturnAddressPtr returnAddress); void addSlowCase(Jump); void addJump(Jump, int); @@ -397,7 +464,7 @@ namespace JSC { void compileOpStrictEq(Instruction* instruction, CompileOpStrictEqType type); void compileGetDirectOffset(RegisterID base, RegisterID result, Structure* structure, size_t cachedOffset); - void compileGetDirectOffset(JSObject* base, RegisterID result, size_t cachedOffset); + void compileGetDirectOffset(JSObject* base, RegisterID temp, RegisterID result, size_t cachedOffset); void compilePutDirectOffset(RegisterID base, RegisterID value, Structure* structure, size_t cachedOffset); // Arithmetic Ops diff --git a/src/3rdparty/webkit/JavaScriptCore/jit/JITArithmetic.cpp b/src/3rdparty/webkit/JavaScriptCore/jit/JITArithmetic.cpp index 2ceb935..15808e2 100644 --- a/src/3rdparty/webkit/JavaScriptCore/jit/JITArithmetic.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/jit/JITArithmetic.cpp @@ -116,18 +116,19 @@ void JIT::emit_op_rshift(Instruction* currentInstruction) #endif } else { emitGetVirtualRegisters(op1, regT0, op2, regT2); - if (supportsFloatingPoint()) { + if (supportsFloatingPointTruncate()) { Jump lhsIsInt = emitJumpIfImmediateInteger(regT0); #if USE(ALTERNATE_JSIMMEDIATE) // supportsFloatingPoint() && USE(ALTERNATE_JSIMMEDIATE) => 3 SlowCases addSlowCase(emitJumpIfNotImmediateNumber(regT0)); + addPtr(tagTypeNumberRegister, regT0); movePtrToDouble(regT0, fpRegT0); addSlowCase(branchTruncateDoubleToInt32(fpRegT0, regT0)); #else // supportsFloatingPoint() && !USE(ALTERNATE_JSIMMEDIATE) => 5 SlowCases (of which 1 IfNotJSCell) emitJumpSlowCaseIfNotJSCell(regT0, op1); addSlowCase(checkStructure(regT0, m_globalData->numberStructure.get())); - loadDouble(Address(regT0, FIELD_OFFSET(JSNumberCell, m_value)), fpRegT0); + loadDouble(Address(regT0, OBJECT_OFFSETOF(JSNumberCell, m_value)), fpRegT0); addSlowCase(branchTruncateDoubleToInt32(fpRegT0, regT0)); addSlowCase(branchAdd32(Overflow, regT0, regT0)); #endif @@ -171,7 +172,7 @@ void JIT::emitSlow_op_rshift(Instruction* currentInstruction, VectornumberStructure.get()); - loadDouble(Address(regT0, FIELD_OFFSET(JSNumberCell, m_value)), fpRegT0); + loadDouble(Address(regT0, OBJECT_OFFSETOF(JSNumberCell, m_value)), fpRegT0); #endif int32_t op2imm = getConstantOperand(op2).getInt32Fast();; @@ -303,7 +304,7 @@ void JIT::emitSlow_op_jnless(Instruction* currentInstruction, VectornumberStructure.get()); - loadDouble(Address(regT1, FIELD_OFFSET(JSNumberCell, m_value)), fpRegT1); + loadDouble(Address(regT1, OBJECT_OFFSETOF(JSNumberCell, m_value)), fpRegT1); #endif int32_t op1imm = getConstantOperand(op1).getInt32Fast();; @@ -353,8 +354,8 @@ void JIT::emitSlow_op_jnless(Instruction* currentInstruction, VectornumberStructure.get()); Jump fail4 = checkStructure(regT1, m_globalData->numberStructure.get()); - loadDouble(Address(regT0, FIELD_OFFSET(JSNumberCell, m_value)), fpRegT0); - loadDouble(Address(regT1, FIELD_OFFSET(JSNumberCell, m_value)), fpRegT1); + loadDouble(Address(regT0, OBJECT_OFFSETOF(JSNumberCell, m_value)), fpRegT0); + loadDouble(Address(regT1, OBJECT_OFFSETOF(JSNumberCell, m_value)), fpRegT1); #endif emitJumpSlowToHot(branchDouble(DoubleLessThanOrEqual, fpRegT1, fpRegT0), target + 3); @@ -447,7 +448,7 @@ void JIT::emitSlow_op_jnlesseq(Instruction* currentInstruction, VectornumberStructure.get()); - loadDouble(Address(regT0, FIELD_OFFSET(JSNumberCell, m_value)), fpRegT0); + loadDouble(Address(regT0, OBJECT_OFFSETOF(JSNumberCell, m_value)), fpRegT0); #endif int32_t op2imm = getConstantOperand(op2).getInt32Fast();; @@ -488,7 +489,7 @@ void JIT::emitSlow_op_jnlesseq(Instruction* currentInstruction, VectornumberStructure.get()); - loadDouble(Address(regT1, FIELD_OFFSET(JSNumberCell, m_value)), fpRegT1); + loadDouble(Address(regT1, OBJECT_OFFSETOF(JSNumberCell, m_value)), fpRegT1); #endif int32_t op1imm = getConstantOperand(op1).getInt32Fast();; @@ -538,8 +539,8 @@ void JIT::emitSlow_op_jnlesseq(Instruction* currentInstruction, VectornumberStructure.get()); Jump fail4 = checkStructure(regT1, m_globalData->numberStructure.get()); - loadDouble(Address(regT0, FIELD_OFFSET(JSNumberCell, m_value)), fpRegT0); - loadDouble(Address(regT1, FIELD_OFFSET(JSNumberCell, m_value)), fpRegT1); + loadDouble(Address(regT0, OBJECT_OFFSETOF(JSNumberCell, m_value)), fpRegT0); + loadDouble(Address(regT1, OBJECT_OFFSETOF(JSNumberCell, m_value)), fpRegT1); #endif emitJumpSlowToHot(branchDouble(DoubleLessThan, fpRegT1, fpRegT0), target + 3); @@ -1105,7 +1106,7 @@ void JIT::compileBinaryArithOp(OpcodeID opcodeID, unsigned dst, unsigned src1, u } // (1a) if we get here, src1 is also a number cell - loadDouble(Address(regT0, FIELD_OFFSET(JSNumberCell, m_value)), fpRegT0); + loadDouble(Address(regT0, OBJECT_OFFSETOF(JSNumberCell, m_value)), fpRegT0); Jump loadedDouble = jump(); // (1b) if we get here, src1 is an immediate op1imm.link(this); @@ -1114,16 +1115,16 @@ void JIT::compileBinaryArithOp(OpcodeID opcodeID, unsigned dst, unsigned src1, u // (1c) loadedDouble.link(this); if (opcodeID == op_add) - addDouble(Address(regT1, FIELD_OFFSET(JSNumberCell, m_value)), fpRegT0); + addDouble(Address(regT1, OBJECT_OFFSETOF(JSNumberCell, m_value)), fpRegT0); else if (opcodeID == op_sub) - subDouble(Address(regT1, FIELD_OFFSET(JSNumberCell, m_value)), fpRegT0); + subDouble(Address(regT1, OBJECT_OFFSETOF(JSNumberCell, m_value)), fpRegT0); else { ASSERT(opcodeID == op_mul); - mulDouble(Address(regT1, FIELD_OFFSET(JSNumberCell, m_value)), fpRegT0); + mulDouble(Address(regT1, OBJECT_OFFSETOF(JSNumberCell, m_value)), fpRegT0); } // Store the result to the JSNumberCell and jump. - storeDouble(fpRegT0, Address(regT1, FIELD_OFFSET(JSNumberCell, m_value))); + storeDouble(fpRegT0, Address(regT1, OBJECT_OFFSETOF(JSNumberCell, m_value))); move(regT1, regT0); emitPutVirtualRegister(dst); wasJSNumberCell2 = jump(); @@ -1151,7 +1152,7 @@ void JIT::compileBinaryArithOp(OpcodeID opcodeID, unsigned dst, unsigned src1, u } // (1a) if we get here, src2 is also a number cell - loadDouble(Address(regT1, FIELD_OFFSET(JSNumberCell, m_value)), fpRegT1); + loadDouble(Address(regT1, OBJECT_OFFSETOF(JSNumberCell, m_value)), fpRegT1); Jump loadedDouble = jump(); // (1b) if we get here, src2 is an immediate op2imm.link(this); @@ -1159,7 +1160,7 @@ void JIT::compileBinaryArithOp(OpcodeID opcodeID, unsigned dst, unsigned src1, u convertInt32ToDouble(regT1, fpRegT1); // (1c) loadedDouble.link(this); - loadDouble(Address(regT0, FIELD_OFFSET(JSNumberCell, m_value)), fpRegT0); + loadDouble(Address(regT0, OBJECT_OFFSETOF(JSNumberCell, m_value)), fpRegT0); if (opcodeID == op_add) addDouble(fpRegT1, fpRegT0); else if (opcodeID == op_sub) @@ -1168,11 +1169,11 @@ void JIT::compileBinaryArithOp(OpcodeID opcodeID, unsigned dst, unsigned src1, u ASSERT(opcodeID == op_mul); mulDouble(fpRegT1, fpRegT0); } - storeDouble(fpRegT0, Address(regT0, FIELD_OFFSET(JSNumberCell, m_value))); + storeDouble(fpRegT0, Address(regT0, OBJECT_OFFSETOF(JSNumberCell, m_value))); emitPutVirtualRegister(dst); // Store the result to the JSNumberCell and jump. - storeDouble(fpRegT0, Address(regT0, FIELD_OFFSET(JSNumberCell, m_value))); + storeDouble(fpRegT0, Address(regT0, OBJECT_OFFSETOF(JSNumberCell, m_value))); emitPutVirtualRegister(dst); wasJSNumberCell1 = jump(); diff --git a/src/3rdparty/webkit/JavaScriptCore/jit/JITCall.cpp b/src/3rdparty/webkit/JavaScriptCore/jit/JITCall.cpp index cf852be..abdb5ed 100644 --- a/src/3rdparty/webkit/JavaScriptCore/jit/JITCall.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/jit/JITCall.cpp @@ -49,7 +49,7 @@ void JIT::compileOpCallInitializeCallFrame() { store32(regT1, Address(callFrameRegister, RegisterFile::ArgumentCount * static_cast(sizeof(Register)))); - loadPtr(Address(regT2, FIELD_OFFSET(JSFunction, m_data) + FIELD_OFFSET(ScopeChain, m_node)), regT1); // newScopeChain + loadPtr(Address(regT2, OBJECT_OFFSETOF(JSFunction, m_data) + OBJECT_OFFSETOF(ScopeChain, m_node)), regT1); // newScopeChain storePtr(ImmPtr(JSValue::encode(JSValue())), Address(callFrameRegister, RegisterFile::OptionalCalleeArguments * static_cast(sizeof(Register)))); storePtr(regT2, Address(callFrameRegister, RegisterFile::Callee * static_cast(sizeof(Register)))); @@ -242,7 +242,7 @@ void JIT::compileOpCall(OpcodeID opcodeID, Instruction* instruction, unsigned ca // Note that this omits to set up RegisterFile::CodeBlock, which is set in the callee storePtr(ImmPtr(JSValue::encode(JSValue())), Address(callFrameRegister, (registerOffset + RegisterFile::OptionalCalleeArguments) * static_cast(sizeof(Register)))); storePtr(regT2, Address(callFrameRegister, (registerOffset + RegisterFile::Callee) * static_cast(sizeof(Register)))); - loadPtr(Address(regT2, FIELD_OFFSET(JSFunction, m_data) + FIELD_OFFSET(ScopeChain, m_node)), regT1); // newScopeChain + loadPtr(Address(regT2, OBJECT_OFFSETOF(JSFunction, m_data) + OBJECT_OFFSETOF(ScopeChain, m_node)), regT1); // newScopeChain store32(Imm32(argCount), Address(callFrameRegister, (registerOffset + RegisterFile::ArgumentCount) * static_cast(sizeof(Register)))); storePtr(callFrameRegister, Address(callFrameRegister, (registerOffset + RegisterFile::CallerFrame) * static_cast(sizeof(Register)))); storePtr(regT1, Address(callFrameRegister, (registerOffset + RegisterFile::ScopeChain) * static_cast(sizeof(Register)))); @@ -285,60 +285,32 @@ void JIT::compileOpCallSlowCase(Instruction* instruction, Vector: emitGetVirtualRegister(callee, regT2); } - move(Imm32(argCount), regT1); - // Speculatively roll the callframe, assuming argCount will match the arity. storePtr(callFrameRegister, Address(callFrameRegister, (RegisterFile::CallerFrame + registerOffset) * static_cast(sizeof(Register)))); addPtr(Imm32(registerOffset * static_cast(sizeof(Register))), callFrameRegister); + move(Imm32(argCount), regT1); - m_callStructureStubCompilationInfo[callLinkInfoIndex].callReturnLocation = - emitNakedCall(m_globalData->jitStubs.ctiVirtualCallPreLink()); + m_callStructureStubCompilationInfo[callLinkInfoIndex].callReturnLocation = emitNakedCall(m_globalData->jitStubs.ctiVirtualCallPreLink()); - Jump storeResultForFirstRun = jump(); + // Put the return value in dst. + emitPutVirtualRegister(dst); + sampleCodeBlock(m_codeBlock); - // This is the address for the cold path *after* the first run (which tries to link the call). - m_callStructureStubCompilationInfo[callLinkInfoIndex].coldPathOther = MacroAssembler::Label(this); + // If not, we need an extra case in the if below! + ASSERT(OPCODE_LENGTH(op_call) == OPCODE_LENGTH(op_call_eval)); - // The arguments have been set up on the hot path for op_call_eval - if (opcodeID == op_call) - compileOpCallSetupArgs(instruction); - else if (opcodeID == op_construct) - compileOpConstructSetupArgs(instruction); - - // Check for JSFunctions. - Jump isNotObject = emitJumpIfNotJSCell(regT2); - Jump isJSFunction = branchPtr(Equal, Address(regT2), ImmPtr(m_globalData->jsFunctionVPtr)); + // Done! - return back to the hot path. + if (opcodeID == op_construct) + emitJumpSlowToHot(jump(), OPCODE_LENGTH(op_construct)); + else + emitJumpSlowToHot(jump(), OPCODE_LENGTH(op_call)); // This handles host functions - isNotObject.link(this); callLinkFailNotObject.link(this); callLinkFailNotJSFunction.link(this); - JITStubCall stubCall(this, opcodeID == op_construct ? JITStubs::cti_op_construct_NotJSConstruct : JITStubs::cti_op_call_NotJSFunction); - stubCall.call(); - Jump wasNotJSFunction = jump(); - - // Next, handle JSFunctions... - isJSFunction.link(this); + JITStubCall(this, opcodeID == op_construct ? JITStubs::cti_op_construct_NotJSConstruct : JITStubs::cti_op_call_NotJSFunction).call(); - // First, in the case of a construct, allocate the new object. - if (opcodeID == op_construct) { - JITStubCall stubCall(this, JITStubs::cti_op_construct_JSConstruct); - stubCall.call(registerOffset - RegisterFile::CallFrameHeaderSize - argCount); - emitGetVirtualRegister(callee, regT2); - } - - // Speculatively roll the callframe, assuming argCount will match the arity. - storePtr(callFrameRegister, Address(callFrameRegister, (RegisterFile::CallerFrame + registerOffset) * static_cast(sizeof(Register)))); - addPtr(Imm32(registerOffset * static_cast(sizeof(Register))), callFrameRegister); - move(Imm32(argCount), regT1); - - emitNakedCall(m_globalData->jitStubs.ctiVirtualCall()); - - // Put the return value in dst. In the interpreter, op_ret does this. - wasNotJSFunction.link(this); - storeResultForFirstRun.link(this); emitPutVirtualRegister(dst); - sampleCodeBlock(m_codeBlock); } diff --git a/src/3rdparty/webkit/JavaScriptCore/jit/JITInlineMethods.h b/src/3rdparty/webkit/JavaScriptCore/jit/JITInlineMethods.h index d5de291..deca0d1 100644 --- a/src/3rdparty/webkit/JavaScriptCore/jit/JITInlineMethods.h +++ b/src/3rdparty/webkit/JavaScriptCore/jit/JITInlineMethods.h @@ -30,15 +30,6 @@ #if ENABLE(JIT) -#if PLATFORM(WIN) -#undef FIELD_OFFSET // Fix conflict with winnt.h. -#endif - -// FIELD_OFFSET: Like the C++ offsetof macro, but you can use it with classes. -// The magic number 0x4000 is insignificant. We use it to avoid using NULL, since -// NULL can cause compiler problems, especially in cases of multiple inheritance. -#define FIELD_OFFSET(class, field) (reinterpret_cast(&(reinterpret_cast(0x4000)->field)) - 0x4000) - namespace JSC { ALWAYS_INLINE void JIT::killLastResultRegister() @@ -186,6 +177,8 @@ ALWAYS_INLINE JIT::Call JIT::emitNakedCall(CodePtr function) return nakedCall; } +#if PLATFORM(X86) || PLATFORM(X86_64) + ALWAYS_INLINE void JIT::preverveReturnAddressAfterCall(RegisterID reg) { pop(reg); @@ -201,31 +194,52 @@ ALWAYS_INLINE void JIT::restoreReturnAddressBeforeReturn(Address address) push(address); } +#elif PLATFORM_ARM_ARCH(7) + +ALWAYS_INLINE void JIT::preverveReturnAddressAfterCall(RegisterID reg) +{ + move(linkRegister, reg); +} + +ALWAYS_INLINE void JIT::restoreReturnAddressBeforeReturn(RegisterID reg) +{ + move(reg, linkRegister); +} + +ALWAYS_INLINE void JIT::restoreReturnAddressBeforeReturn(Address address) +{ + loadPtr(address, linkRegister); +} + +#endif + #if USE(JIT_STUB_ARGUMENT_VA_LIST) ALWAYS_INLINE void JIT::restoreArgumentReference() { - poke(callFrameRegister, offsetof(struct JITStackFrame, callFrame) / sizeof (void*)); + poke(callFrameRegister, OBJECT_OFFSETOF(struct JITStackFrame, callFrame) / sizeof (void*)); } ALWAYS_INLINE void JIT::restoreArgumentReferenceForTrampoline() {} #else ALWAYS_INLINE void JIT::restoreArgumentReference() { move(stackPointerRegister, firstArgumentRegister); - poke(callFrameRegister, offsetof(struct JITStackFrame, callFrame) / sizeof (void*)); + poke(callFrameRegister, OBJECT_OFFSETOF(struct JITStackFrame, callFrame) / sizeof (void*)); } ALWAYS_INLINE void JIT::restoreArgumentReferenceForTrampoline() { - // In the trampoline on x86-64, the first argument register is not overwritten. -#if !PLATFORM(X86_64) +#if PLATFORM(X86) + // Within a trampoline the return address will be on the stack at this point. + addPtr(Imm32(sizeof(void*)), stackPointerRegister, firstArgumentRegister); +#elif PLATFORM_ARM_ARCH(7) move(stackPointerRegister, firstArgumentRegister); - addPtr(Imm32(sizeof(void*)), firstArgumentRegister); #endif + // In the trampoline on x86-64, the first argument register is not overwritten. } #endif ALWAYS_INLINE JIT::Jump JIT::checkStructure(RegisterID reg, Structure* structure) { - return branchPtr(NotEqual, Address(reg, FIELD_OFFSET(JSCell, m_structure)), ImmPtr(structure)); + return branchPtr(NotEqual, Address(reg, OBJECT_OFFSETOF(JSCell, m_structure)), ImmPtr(structure)); } ALWAYS_INLINE JIT::Jump JIT::emitJumpIfJSCell(RegisterID reg) diff --git a/src/3rdparty/webkit/JavaScriptCore/jit/JITOpcodes.cpp b/src/3rdparty/webkit/JavaScriptCore/jit/JITOpcodes.cpp index 1737551..dbcb34d 100644 --- a/src/3rdparty/webkit/JavaScriptCore/jit/JITOpcodes.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/jit/JITOpcodes.cpp @@ -159,18 +159,18 @@ void JIT::emit_op_instanceof(Instruction* currentInstruction) emitJumpSlowCaseIfNotJSCell(regT1); // Check that baseVal is an object, that it 'ImplementsHasInstance' but that it does not 'OverridesHasInstance'. - loadPtr(Address(regT0, FIELD_OFFSET(JSCell, m_structure)), regT0); - addSlowCase(branch32(NotEqual, Address(regT0, FIELD_OFFSET(Structure, m_typeInfo.m_type)), Imm32(ObjectType))); - addSlowCase(branchTest32(Zero, Address(regT0, FIELD_OFFSET(Structure, m_typeInfo.m_flags)), Imm32(ImplementsDefaultHasInstance))); + loadPtr(Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)), regT0); + addSlowCase(branch32(NotEqual, Address(regT0, OBJECT_OFFSETOF(Structure, m_typeInfo.m_type)), Imm32(ObjectType))); + addSlowCase(branchTest32(Zero, Address(regT0, OBJECT_OFFSETOF(Structure, m_typeInfo.m_flags)), Imm32(ImplementsDefaultHasInstance))); // If value is not an Object, return false. Jump valueIsImmediate = emitJumpIfNotJSCell(regT2); - loadPtr(Address(regT2, FIELD_OFFSET(JSCell, m_structure)), regT0); - Jump valueIsNotObject = branch32(NotEqual, Address(regT0, FIELD_OFFSET(Structure, m_typeInfo.m_type)), Imm32(ObjectType)); + loadPtr(Address(regT2, OBJECT_OFFSETOF(JSCell, m_structure)), regT0); + Jump valueIsNotObject = branch32(NotEqual, Address(regT0, OBJECT_OFFSETOF(Structure, m_typeInfo.m_type)), Imm32(ObjectType)); // Check proto is object. - loadPtr(Address(regT1, FIELD_OFFSET(JSCell, m_structure)), regT0); - addSlowCase(branch32(NotEqual, Address(regT0, FIELD_OFFSET(Structure, m_typeInfo.m_type)), Imm32(ObjectType))); + loadPtr(Address(regT1, OBJECT_OFFSETOF(JSCell, m_structure)), regT0); + addSlowCase(branch32(NotEqual, Address(regT0, OBJECT_OFFSETOF(Structure, m_typeInfo.m_type)), Imm32(ObjectType))); // Optimistically load the result true, and start looping. // Initially, regT1 still contains proto and regT2 still contains value. @@ -180,8 +180,8 @@ void JIT::emit_op_instanceof(Instruction* currentInstruction) // Load the prototype of the object in regT2. If this is equal to regT1 - WIN! // Otherwise, check if we've hit null - if we have then drop out of the loop, if not go again. - loadPtr(Address(regT2, FIELD_OFFSET(JSCell, m_structure)), regT2); - loadPtr(Address(regT2, FIELD_OFFSET(Structure, m_prototype)), regT2); + loadPtr(Address(regT2, OBJECT_OFFSETOF(JSCell, m_structure)), regT2); + loadPtr(Address(regT2, OBJECT_OFFSETOF(Structure, m_prototype)), regT2); Jump isInstance = branchPtr(Equal, regT2, regT1); branchPtr(NotEqual, regT2, ImmPtr(JSValue::encode(jsNull())), loop); @@ -251,9 +251,9 @@ void JIT::emit_op_get_scoped_var(Instruction* currentInstruction) emitGetFromCallFrameHeaderPtr(RegisterFile::ScopeChain, regT0); while (skip--) - loadPtr(Address(regT0, FIELD_OFFSET(ScopeChainNode, next)), regT0); + loadPtr(Address(regT0, OBJECT_OFFSETOF(ScopeChainNode, next)), regT0); - loadPtr(Address(regT0, FIELD_OFFSET(ScopeChainNode, object)), regT0); + loadPtr(Address(regT0, OBJECT_OFFSETOF(ScopeChainNode, object)), regT0); emitGetVariableObjectRegister(regT0, currentInstruction[2].u.operand, regT0); emitPutVirtualRegister(currentInstruction[1].u.operand); } @@ -265,9 +265,9 @@ void JIT::emit_op_put_scoped_var(Instruction* currentInstruction) emitGetFromCallFrameHeaderPtr(RegisterFile::ScopeChain, regT1); emitGetVirtualRegister(currentInstruction[3].u.operand, regT0); while (skip--) - loadPtr(Address(regT1, FIELD_OFFSET(ScopeChainNode, next)), regT1); + loadPtr(Address(regT1, OBJECT_OFFSETOF(ScopeChainNode, next)), regT1); - loadPtr(Address(regT1, FIELD_OFFSET(ScopeChainNode, object)), regT1); + loadPtr(Address(regT1, OBJECT_OFFSETOF(ScopeChainNode, object)), regT1); emitPutVariableObjectRegister(regT0, regT1, currentInstruction[1].u.operand); } @@ -327,8 +327,8 @@ void JIT::emit_op_construct_verify(Instruction* currentInstruction) emitGetVirtualRegister(currentInstruction[1].u.operand, regT0); emitJumpSlowCaseIfNotJSCell(regT0); - loadPtr(Address(regT0, FIELD_OFFSET(JSCell, m_structure)), regT2); - addSlowCase(branch32(NotEqual, Address(regT2, FIELD_OFFSET(Structure, m_typeInfo) + FIELD_OFFSET(TypeInfo, m_type)), Imm32(ObjectType))); + loadPtr(Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)), regT2); + addSlowCase(branch32(NotEqual, Address(regT2, OBJECT_OFFSETOF(Structure, m_typeInfo) + OBJECT_OFFSETOF(TypeInfo, m_type)), Imm32(ObjectType))); } @@ -407,11 +407,11 @@ void JIT::emit_op_resolve_global(Instruction* currentInstruction) // Check Structure of global object move(ImmPtr(globalObject), regT0); loadPtr(structureAddress, regT1); - Jump noMatch = branchPtr(NotEqual, regT1, Address(regT0, FIELD_OFFSET(JSCell, m_structure))); // Structures don't match + Jump noMatch = branchPtr(NotEqual, regT1, Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure))); // Structures don't match // Load cached property // Assume that the global object always uses external storage. - loadPtr(Address(regT0, FIELD_OFFSET(JSGlobalObject, m_externalStorage)), regT0); + loadPtr(Address(regT0, OBJECT_OFFSETOF(JSGlobalObject, m_externalStorage)), regT0); load32(offsetAddr, regT1); loadPtr(BaseIndex(regT0, regT1, ScalePtr), regT0); emitPutVirtualRegister(currentInstruction[1].u.operand); @@ -459,8 +459,8 @@ void JIT::emit_op_jeq_null(Instruction* currentInstruction) Jump isImmediate = emitJumpIfNotJSCell(regT0); // First, handle JSCell cases - check MasqueradesAsUndefined bit on the structure. - loadPtr(Address(regT0, FIELD_OFFSET(JSCell, m_structure)), regT2); - addJump(branchTest32(NonZero, Address(regT2, FIELD_OFFSET(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined)), target + 2); + loadPtr(Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)), regT2); + addJump(branchTest32(NonZero, Address(regT2, OBJECT_OFFSETOF(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined)), target + 2); Jump wasNotImmediate = jump(); // Now handle the immediate cases - undefined & null @@ -480,8 +480,8 @@ void JIT::emit_op_jneq_null(Instruction* currentInstruction) Jump isImmediate = emitJumpIfNotJSCell(regT0); // First, handle JSCell cases - check MasqueradesAsUndefined bit on the structure. - loadPtr(Address(regT0, FIELD_OFFSET(JSCell, m_structure)), regT2); - addJump(branchTest32(Zero, Address(regT2, FIELD_OFFSET(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined)), target + 2); + loadPtr(Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)), regT2); + addJump(branchTest32(Zero, Address(regT2, OBJECT_OFFSETOF(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined)), target + 2); Jump wasNotImmediate = jump(); // Now handle the immediate cases - undefined & null @@ -670,8 +670,8 @@ void JIT::emit_op_to_jsnumber(Instruction* currentInstruction) Jump wasImmediate = emitJumpIfImmediateInteger(regT0); emitJumpSlowCaseIfNotJSCell(regT0, srcVReg); - loadPtr(Address(regT0, FIELD_OFFSET(JSCell, m_structure)), regT2); - addSlowCase(branch32(NotEqual, Address(regT2, FIELD_OFFSET(Structure, m_typeInfo.m_type)), Imm32(NumberType))); + loadPtr(Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)), regT2); + addSlowCase(branch32(NotEqual, Address(regT2, OBJECT_OFFSETOF(Structure, m_typeInfo.m_type)), Imm32(NumberType))); wasImmediate.link(this); @@ -689,7 +689,7 @@ void JIT::emit_op_push_new_scope(Instruction* currentInstruction) void JIT::emit_op_catch(Instruction* currentInstruction) { killLastResultRegister(); // FIXME: Implicitly treat op_catch as a labeled statement, and remove this line of code. - peek(callFrameRegister, offsetof(struct JITStackFrame, callFrame) / sizeof (void*)); + peek(callFrameRegister, OBJECT_OFFSETOF(struct JITStackFrame, callFrame) / sizeof (void*)); emitPutVirtualRegister(currentInstruction[1].u.operand); } @@ -781,8 +781,8 @@ void JIT::emit_op_eq_null(Instruction* currentInstruction) emitGetVirtualRegister(src1, regT0); Jump isImmediate = emitJumpIfNotJSCell(regT0); - loadPtr(Address(regT0, FIELD_OFFSET(JSCell, m_structure)), regT2); - setTest32(NonZero, Address(regT2, FIELD_OFFSET(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined), regT0); + loadPtr(Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)), regT2); + setTest32(NonZero, Address(regT2, OBJECT_OFFSETOF(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined), regT0); Jump wasNotImmediate = jump(); @@ -806,8 +806,8 @@ void JIT::emit_op_neq_null(Instruction* currentInstruction) emitGetVirtualRegister(src1, regT0); Jump isImmediate = emitJumpIfNotJSCell(regT0); - loadPtr(Address(regT0, FIELD_OFFSET(JSCell, m_structure)), regT2); - setTest32(Zero, Address(regT2, FIELD_OFFSET(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined), regT0); + loadPtr(Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)), regT2); + setTest32(Zero, Address(regT2, OBJECT_OFFSETOF(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined), regT0); Jump wasNotImmediate = jump(); @@ -866,14 +866,14 @@ void JIT::emit_op_convert_this(Instruction* currentInstruction) emitGetVirtualRegister(currentInstruction[1].u.operand, regT0); emitJumpSlowCaseIfNotJSCell(regT0); - loadPtr(Address(regT0, FIELD_OFFSET(JSCell, m_structure)), regT1); - addSlowCase(branchTest32(NonZero, Address(regT1, FIELD_OFFSET(Structure, m_typeInfo.m_flags)), Imm32(NeedsThisConversion))); + loadPtr(Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)), regT1); + addSlowCase(branchTest32(NonZero, Address(regT1, OBJECT_OFFSETOF(Structure, m_typeInfo.m_flags)), Imm32(NeedsThisConversion))); } void JIT::emit_op_profile_will_call(Instruction* currentInstruction) { - peek(regT1, FIELD_OFFSET(JITStackFrame, enabledProfilerReference) / sizeof (void*)); + peek(regT1, OBJECT_OFFSETOF(JITStackFrame, enabledProfilerReference) / sizeof (void*)); Jump noProfiler = branchTestPtr(Zero, Address(regT1)); JITStubCall stubCall(this, JITStubs::cti_op_profile_will_call); @@ -885,7 +885,7 @@ void JIT::emit_op_profile_will_call(Instruction* currentInstruction) void JIT::emit_op_profile_did_call(Instruction* currentInstruction) { - peek(regT1, FIELD_OFFSET(JITStackFrame, enabledProfilerReference) / sizeof (void*)); + peek(regT1, OBJECT_OFFSETOF(JITStackFrame, enabledProfilerReference) / sizeof (void*)); Jump noProfiler = branchTestPtr(Zero, Address(regT1)); JITStubCall stubCall(this, JITStubs::cti_op_profile_did_call); @@ -943,10 +943,10 @@ void JIT::emitSlow_op_get_by_val(Instruction* currentInstruction, VectorjsArrayVPtr))); // This is an array; get the m_storage pointer into ecx, then check if the index is below the fast cutoff - loadPtr(Address(regT0, FIELD_OFFSET(JSArray, m_storage)), regT2); - addSlowCase(branch32(AboveOrEqual, regT1, Address(regT0, FIELD_OFFSET(JSArray, m_fastAccessCutoff)))); + loadPtr(Address(regT0, OBJECT_OFFSETOF(JSArray, m_storage)), regT2); + addSlowCase(branch32(AboveOrEqual, regT1, Address(regT0, OBJECT_OFFSETOF(JSArray, m_fastAccessCutoff)))); // Get the value from the vector - loadPtr(BaseIndex(regT2, regT1, ScalePtr, FIELD_OFFSET(ArrayStorage, m_vector[0])), regT0); + loadPtr(BaseIndex(regT2, regT1, ScalePtr, OBJECT_OFFSETOF(ArrayStorage, m_vector[0])), regT0); emitPutVirtualRegister(currentInstruction[1].u.operand); } @@ -86,19 +86,19 @@ void JIT::emit_op_put_by_val(Instruction* currentInstruction) addSlowCase(branchPtr(NotEqual, Address(regT0), ImmPtr(m_globalData->jsArrayVPtr))); // This is an array; get the m_storage pointer into ecx, then check if the index is below the fast cutoff - loadPtr(Address(regT0, FIELD_OFFSET(JSArray, m_storage)), regT2); - Jump inFastVector = branch32(Below, regT1, Address(regT0, FIELD_OFFSET(JSArray, m_fastAccessCutoff))); + loadPtr(Address(regT0, OBJECT_OFFSETOF(JSArray, m_storage)), regT2); + Jump inFastVector = branch32(Below, regT1, Address(regT0, OBJECT_OFFSETOF(JSArray, m_fastAccessCutoff))); // No; oh well, check if the access if within the vector - if so, we may still be okay. - addSlowCase(branch32(AboveOrEqual, regT1, Address(regT2, FIELD_OFFSET(ArrayStorage, m_vectorLength)))); + addSlowCase(branch32(AboveOrEqual, regT1, Address(regT2, OBJECT_OFFSETOF(ArrayStorage, m_vectorLength)))); // This is a write to the slow part of the vector; first, we have to check if this would be the first write to this location. // FIXME: should be able to handle initial write to array; increment the the number of items in the array, and potentially update fast access cutoff. - addSlowCase(branchTestPtr(Zero, BaseIndex(regT2, regT1, ScalePtr, FIELD_OFFSET(ArrayStorage, m_vector[0])))); + addSlowCase(branchTestPtr(Zero, BaseIndex(regT2, regT1, ScalePtr, OBJECT_OFFSETOF(ArrayStorage, m_vector[0])))); // All good - put the value into the array. inFastVector.link(this); emitGetVirtualRegister(currentInstruction[3].u.operand, regT0); - storePtr(regT0, BaseIndex(regT2, regT1, ScalePtr, FIELD_OFFSET(ArrayStorage, m_vector[0]))); + storePtr(regT0, BaseIndex(regT2, regT1, ScalePtr, OBJECT_OFFSETOF(ArrayStorage, m_vector[0]))); } void JIT::emit_op_put_by_index(Instruction* currentInstruction) @@ -212,9 +212,9 @@ void JIT::emit_op_method_check(Instruction* currentInstruction) m_methodCallCompilationInfo.append(MethodCallCompilationInfo(m_propertyAccessInstructionIndex)); MethodCallCompilationInfo& info = m_methodCallCompilationInfo.last(); Jump notCell = emitJumpIfNotJSCell(regT0); - Jump structureCheck = branchPtrWithPatch(NotEqual, Address(regT0, FIELD_OFFSET(JSCell, m_structure)), info.structureToCompare, ImmPtr(reinterpret_cast(patchGetByIdDefaultStructure))); + Jump structureCheck = branchPtrWithPatch(NotEqual, Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)), info.structureToCompare, ImmPtr(reinterpret_cast(patchGetByIdDefaultStructure))); DataLabelPtr protoStructureToCompare, protoObj = moveWithPatch(ImmPtr(0), regT1); - Jump protoStructureCheck = branchPtrWithPatch(NotEqual, Address(regT1, FIELD_OFFSET(JSCell, m_structure)), protoStructureToCompare, ImmPtr(reinterpret_cast(patchGetByIdDefaultStructure))); + Jump protoStructureCheck = branchPtrWithPatch(NotEqual, Address(regT1, OBJECT_OFFSETOF(JSCell, m_structure)), protoStructureToCompare, ImmPtr(reinterpret_cast(patchGetByIdDefaultStructure))); // This will be relinked to load the function without doing a load. DataLabelPtr putFunction = moveWithPatch(ImmPtr(0), regT0); @@ -285,13 +285,12 @@ void JIT::compileGetByIdHotPath(int, int baseVReg, Identifier*, unsigned propert m_propertyAccessCompilationInfo[propertyAccessInstructionIndex].hotPathBegin = hotPathBegin; DataLabelPtr structureToCompare; - Jump structureCheck = branchPtrWithPatch(NotEqual, Address(regT0, FIELD_OFFSET(JSCell, m_structure)), structureToCompare, ImmPtr(reinterpret_cast(patchGetByIdDefaultStructure))); + Jump structureCheck = branchPtrWithPatch(NotEqual, Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)), structureToCompare, ImmPtr(reinterpret_cast(patchGetByIdDefaultStructure))); addSlowCase(structureCheck); ASSERT(differenceBetween(hotPathBegin, structureToCompare) == patchOffsetGetByIdStructure); ASSERT(differenceBetween(hotPathBegin, structureCheck) == patchOffsetGetByIdBranchToSlowCase); - Label externalLoad(this); - loadPtr(Address(regT0, FIELD_OFFSET(JSObject, m_externalStorage)), regT0); + Label externalLoad = loadPtrWithPatchToLEA(Address(regT0, OBJECT_OFFSETOF(JSObject, m_externalStorage)), regT0); Label externalLoadComplete(this); ASSERT(differenceBetween(hotPathBegin, externalLoad) == patchOffsetGetByIdExternalLoad); ASSERT(differenceBetween(externalLoad, externalLoadComplete) == patchLengthGetByIdExternalLoad); @@ -358,12 +357,11 @@ void JIT::emit_op_put_by_id(Instruction* currentInstruction) // It is important that the following instruction plants a 32bit immediate, in order that it can be patched over. DataLabelPtr structureToCompare; - addSlowCase(branchPtrWithPatch(NotEqual, Address(regT0, FIELD_OFFSET(JSCell, m_structure)), structureToCompare, ImmPtr(reinterpret_cast(patchGetByIdDefaultStructure)))); + addSlowCase(branchPtrWithPatch(NotEqual, Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)), structureToCompare, ImmPtr(reinterpret_cast(patchGetByIdDefaultStructure)))); ASSERT(differenceBetween(hotPathBegin, structureToCompare) == patchOffsetPutByIdStructure); // Plant a load from a bogus ofset in the object's property map; we will patch this later, if it is to be used. - Label externalLoad(this); - loadPtr(Address(regT0, FIELD_OFFSET(JSObject, m_externalStorage)), regT0); + Label externalLoad = loadPtrWithPatchToLEA(Address(regT0, OBJECT_OFFSETOF(JSObject, m_externalStorage)), regT0); Label externalLoadComplete(this); ASSERT(differenceBetween(hotPathBegin, externalLoad) == patchOffsetPutByIdExternalLoad); ASSERT(differenceBetween(externalLoad, externalLoadComplete) == patchLengthPutByIdExternalLoad); @@ -398,9 +396,9 @@ void JIT::compilePutDirectOffset(RegisterID base, RegisterID value, Structure* s { int offset = cachedOffset * sizeof(JSValue); if (structure->isUsingInlineStorage()) - offset += FIELD_OFFSET(JSObject, m_inlineStorage); + offset += OBJECT_OFFSETOF(JSObject, m_inlineStorage); else - loadPtr(Address(base, FIELD_OFFSET(JSObject, m_externalStorage)), base); + loadPtr(Address(base, OBJECT_OFFSETOF(JSObject, m_externalStorage)), base); storePtr(value, Address(base, offset)); } @@ -409,34 +407,37 @@ void JIT::compileGetDirectOffset(RegisterID base, RegisterID result, Structure* { int offset = cachedOffset * sizeof(JSValue); if (structure->isUsingInlineStorage()) - offset += FIELD_OFFSET(JSObject, m_inlineStorage); + offset += OBJECT_OFFSETOF(JSObject, m_inlineStorage); else - loadPtr(Address(base, FIELD_OFFSET(JSObject, m_externalStorage)), base); + loadPtr(Address(base, OBJECT_OFFSETOF(JSObject, m_externalStorage)), base); loadPtr(Address(base, offset), result); } -void JIT::compileGetDirectOffset(JSObject* base, RegisterID result, size_t cachedOffset) +void JIT::compileGetDirectOffset(JSObject* base, RegisterID temp, RegisterID result, size_t cachedOffset) { if (base->isUsingInlineStorage()) loadPtr(static_cast(&base->m_inlineStorage[cachedOffset]), result); - else - loadPtr(static_cast(&base->m_externalStorage[cachedOffset]), result); + else { + PropertyStorage* protoPropertyStorage = &base->m_externalStorage; + loadPtr(static_cast(protoPropertyStorage), temp); + loadPtr(Address(temp, cachedOffset * sizeof(JSValue)), result); + } } -void JIT::privateCompilePutByIdTransition(StructureStubInfo* stubInfo, Structure* oldStructure, Structure* newStructure, size_t cachedOffset, StructureChain* chain, ProcessorReturnAddress returnAddress) +void JIT::privateCompilePutByIdTransition(StructureStubInfo* stubInfo, Structure* oldStructure, Structure* newStructure, size_t cachedOffset, StructureChain* chain, ReturnAddressPtr returnAddress) { JumpList failureCases; // Check eax is an object of the right Structure. failureCases.append(emitJumpIfNotJSCell(regT0)); - failureCases.append(branchPtr(NotEqual, Address(regT0, FIELD_OFFSET(JSCell, m_structure)), ImmPtr(oldStructure))); + failureCases.append(branchPtr(NotEqual, Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)), ImmPtr(oldStructure))); JumpList successCases; // ecx = baseObject - loadPtr(Address(regT0, FIELD_OFFSET(JSCell, m_structure)), regT2); + loadPtr(Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)), regT2); // proto(ecx) = baseObject->structure()->prototype() - failureCases.append(branch32(NotEqual, Address(regT2, FIELD_OFFSET(Structure, m_typeInfo) + FIELD_OFFSET(TypeInfo, m_type)), Imm32(ObjectType))); + failureCases.append(branch32(NotEqual, Address(regT2, OBJECT_OFFSETOF(Structure, m_typeInfo) + OBJECT_OFFSETOF(TypeInfo, m_type)), Imm32(ObjectType))); - loadPtr(Address(regT2, FIELD_OFFSET(Structure, m_prototype)), regT2); + loadPtr(Address(regT2, OBJECT_OFFSETOF(Structure, m_prototype)), regT2); // ecx = baseObject->m_structure for (RefPtr* it = chain->head(); *it; ++it) { @@ -444,11 +445,11 @@ void JIT::privateCompilePutByIdTransition(StructureStubInfo* stubInfo, Structure successCases.append(branchPtr(Equal, regT2, ImmPtr(JSValue::encode(jsNull())))); // Check the structure id - failureCases.append(branchPtr(NotEqual, Address(regT2, FIELD_OFFSET(JSCell, m_structure)), ImmPtr(it->get()))); + failureCases.append(branchPtr(NotEqual, Address(regT2, OBJECT_OFFSETOF(JSCell, m_structure)), ImmPtr(it->get()))); - loadPtr(Address(regT2, FIELD_OFFSET(JSCell, m_structure)), regT2); - failureCases.append(branch32(NotEqual, Address(regT2, FIELD_OFFSET(Structure, m_typeInfo) + FIELD_OFFSET(TypeInfo, m_type)), Imm32(ObjectType))); - loadPtr(Address(regT2, FIELD_OFFSET(Structure, m_prototype)), regT2); + loadPtr(Address(regT2, OBJECT_OFFSETOF(JSCell, m_structure)), regT2); + failureCases.append(branch32(NotEqual, Address(regT2, OBJECT_OFFSETOF(Structure, m_typeInfo) + OBJECT_OFFSETOF(TypeInfo, m_type)), Imm32(ObjectType))); + loadPtr(Address(regT2, OBJECT_OFFSETOF(Structure, m_prototype)), regT2); } successCases.link(this); @@ -477,7 +478,7 @@ void JIT::privateCompilePutByIdTransition(StructureStubInfo* stubInfo, Structure // codeblock should ensure oldStructure->m_refCount > 0 sub32(Imm32(1), AbsoluteAddress(oldStructure->addressOfCount())); add32(Imm32(1), AbsoluteAddress(newStructure->addressOfCount())); - storePtr(ImmPtr(newStructure), Address(regT0, FIELD_OFFSET(JSCell, m_structure))); + storePtr(ImmPtr(newStructure), Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure))); // write the value compilePutDirectOffset(regT0, regT1, newStructure, cachedOffset); @@ -489,7 +490,7 @@ void JIT::privateCompilePutByIdTransition(StructureStubInfo* stubInfo, Structure restoreArgumentReferenceForTrampoline(); Call failureCall = tailRecursiveCall(); - PatchBuffer patchBuffer(this, m_codeBlock->executablePool()); + LinkBuffer patchBuffer(this, m_codeBlock->executablePool()); patchBuffer.link(failureCall, FunctionPtr(JITStubs::cti_op_put_by_id_fail)); @@ -500,77 +501,81 @@ void JIT::privateCompilePutByIdTransition(StructureStubInfo* stubInfo, Structure CodeLocationLabel entryLabel = patchBuffer.finalizeCodeAddendum(); stubInfo->stubRoutine = entryLabel; - returnAddress.relinkCallerToTrampoline(entryLabel); + RepatchBuffer repatchBuffer; + repatchBuffer.relinkCallerToTrampoline(returnAddress, entryLabel); } -void JIT::patchGetByIdSelf(StructureStubInfo* stubInfo, Structure* structure, size_t cachedOffset, ProcessorReturnAddress returnAddress) +void JIT::patchGetByIdSelf(StructureStubInfo* stubInfo, Structure* structure, size_t cachedOffset, ReturnAddressPtr returnAddress) { + RepatchBuffer repatchBuffer; + // We don't want to patch more than once - in future go to cti_op_get_by_id_generic. // Should probably go to JITStubs::cti_op_get_by_id_fail, but that doesn't do anything interesting right now. - returnAddress.relinkCallerToFunction(FunctionPtr(JITStubs::cti_op_get_by_id_self_fail)); + repatchBuffer.relinkCallerToFunction(returnAddress, FunctionPtr(JITStubs::cti_op_get_by_id_self_fail)); int offset = sizeof(JSValue) * cachedOffset; // If we're patching to use inline storage, convert the initial load to a lea; this avoids the extra load // and makes the subsequent load's offset automatically correct if (structure->isUsingInlineStorage()) - stubInfo->hotPathBegin.instructionAtOffset(patchOffsetGetByIdExternalLoad).repatchLoadPtrToLEA(); + repatchBuffer.repatchLoadPtrToLEA(stubInfo->hotPathBegin.instructionAtOffset(patchOffsetGetByIdExternalLoad)); // Patch the offset into the propoerty map to load from, then patch the Structure to look for. - stubInfo->hotPathBegin.dataLabelPtrAtOffset(patchOffsetGetByIdStructure).repatch(structure); - stubInfo->hotPathBegin.dataLabel32AtOffset(patchOffsetGetByIdPropertyMapOffset).repatch(offset); + repatchBuffer.repatch(stubInfo->hotPathBegin.dataLabelPtrAtOffset(patchOffsetGetByIdStructure), structure); + repatchBuffer.repatch(stubInfo->hotPathBegin.dataLabel32AtOffset(patchOffsetGetByIdPropertyMapOffset), offset); } void JIT::patchMethodCallProto(MethodCallLinkInfo& methodCallLinkInfo, JSFunction* callee, Structure* structure, JSObject* proto) { + RepatchBuffer repatchBuffer; + ASSERT(!methodCallLinkInfo.cachedStructure); methodCallLinkInfo.cachedStructure = structure; structure->ref(); - methodCallLinkInfo.structureLabel.repatch(structure); - methodCallLinkInfo.structureLabel.dataLabelPtrAtOffset(patchOffsetMethodCheckProtoObj).repatch(proto); - methodCallLinkInfo.structureLabel.dataLabelPtrAtOffset(patchOffsetMethodCheckProtoStruct).repatch(proto->structure()); - methodCallLinkInfo.structureLabel.dataLabelPtrAtOffset(patchOffsetMethodCheckPutFunction).repatch(callee); + repatchBuffer.repatch(methodCallLinkInfo.structureLabel, structure); + repatchBuffer.repatch(methodCallLinkInfo.structureLabel.dataLabelPtrAtOffset(patchOffsetMethodCheckProtoObj), proto); + repatchBuffer.repatch(methodCallLinkInfo.structureLabel.dataLabelPtrAtOffset(patchOffsetMethodCheckProtoStruct), proto->structure()); + repatchBuffer.repatch(methodCallLinkInfo.structureLabel.dataLabelPtrAtOffset(patchOffsetMethodCheckPutFunction), callee); } -void JIT::patchPutByIdReplace(StructureStubInfo* stubInfo, Structure* structure, size_t cachedOffset, ProcessorReturnAddress returnAddress) +void JIT::patchPutByIdReplace(StructureStubInfo* stubInfo, Structure* structure, size_t cachedOffset, ReturnAddressPtr returnAddress) { + RepatchBuffer repatchBuffer; + // We don't want to patch more than once - in future go to cti_op_put_by_id_generic. // Should probably go to JITStubs::cti_op_put_by_id_fail, but that doesn't do anything interesting right now. - returnAddress.relinkCallerToFunction(FunctionPtr(JITStubs::cti_op_put_by_id_generic)); + repatchBuffer.relinkCallerToFunction(returnAddress, FunctionPtr(JITStubs::cti_op_put_by_id_generic)); int offset = sizeof(JSValue) * cachedOffset; // If we're patching to use inline storage, convert the initial load to a lea; this avoids the extra load // and makes the subsequent load's offset automatically correct if (structure->isUsingInlineStorage()) - stubInfo->hotPathBegin.instructionAtOffset(patchOffsetPutByIdExternalLoad).repatchLoadPtrToLEA(); + repatchBuffer.repatchLoadPtrToLEA(stubInfo->hotPathBegin.instructionAtOffset(patchOffsetPutByIdExternalLoad)); // Patch the offset into the propoerty map to load from, then patch the Structure to look for. - stubInfo->hotPathBegin.dataLabelPtrAtOffset(patchOffsetPutByIdStructure).repatch(structure); - stubInfo->hotPathBegin.dataLabel32AtOffset(patchOffsetPutByIdPropertyMapOffset).repatch(offset); + repatchBuffer.repatch(stubInfo->hotPathBegin.dataLabelPtrAtOffset(patchOffsetPutByIdStructure), structure); + repatchBuffer.repatch(stubInfo->hotPathBegin.dataLabel32AtOffset(patchOffsetPutByIdPropertyMapOffset), offset); } -void JIT::privateCompilePatchGetArrayLength(ProcessorReturnAddress returnAddress) +void JIT::privateCompilePatchGetArrayLength(ReturnAddressPtr returnAddress) { - StructureStubInfo* stubInfo = &m_codeBlock->getStubInfo(returnAddress.addressForLookup()); - - // We don't want to patch more than once - in future go to cti_op_put_by_id_generic. - returnAddress.relinkCallerToFunction(FunctionPtr(JITStubs::cti_op_get_by_id_array_fail)); + StructureStubInfo* stubInfo = &m_codeBlock->getStubInfo(returnAddress); // Check eax is an array Jump failureCases1 = branchPtr(NotEqual, Address(regT0), ImmPtr(m_globalData->jsArrayVPtr)); // Checks out okay! - get the length from the storage - loadPtr(Address(regT0, FIELD_OFFSET(JSArray, m_storage)), regT2); - load32(Address(regT2, FIELD_OFFSET(ArrayStorage, m_length)), regT2); + loadPtr(Address(regT0, OBJECT_OFFSETOF(JSArray, m_storage)), regT2); + load32(Address(regT2, OBJECT_OFFSETOF(ArrayStorage, m_length)), regT2); Jump failureCases2 = branch32(Above, regT2, Imm32(JSImmediate::maxImmediateInt)); emitFastArithIntToImmNoCheck(regT2, regT0); Jump success = jump(); - PatchBuffer patchBuffer(this, m_codeBlock->executablePool()); + LinkBuffer patchBuffer(this, m_codeBlock->executablePool()); // Use the patch information to link the failure cases back to the original slow case routine. CodeLocationLabel slowCaseBegin = stubInfo->callReturnLocation.labelAtOffset(-patchOffsetGetByIdSlowCaseCall); @@ -586,14 +591,15 @@ void JIT::privateCompilePatchGetArrayLength(ProcessorReturnAddress returnAddress // Finally patch the jump to slow case back in the hot path to jump here instead. CodeLocationJump jumpLocation = stubInfo->hotPathBegin.jumpAtOffset(patchOffsetGetByIdBranchToSlowCase); - jumpLocation.relink(entryLabel); -} + RepatchBuffer repatchBuffer; + repatchBuffer.relink(jumpLocation, entryLabel); -void JIT::privateCompileGetByIdProto(StructureStubInfo* stubInfo, Structure* structure, Structure* prototypeStructure, size_t cachedOffset, ProcessorReturnAddress returnAddress, CallFrame* callFrame) -{ // We don't want to patch more than once - in future go to cti_op_put_by_id_generic. - returnAddress.relinkCallerToFunction(FunctionPtr(JITStubs::cti_op_get_by_id_proto_list)); + repatchBuffer.relinkCallerToFunction(returnAddress, FunctionPtr(JITStubs::cti_op_get_by_id_array_fail)); +} +void JIT::privateCompileGetByIdProto(StructureStubInfo* stubInfo, Structure* structure, Structure* prototypeStructure, size_t cachedOffset, ReturnAddressPtr returnAddress, CallFrame* callFrame) +{ // The prototype object definitely exists (if this stub exists the CodeBlock is referencing a Structure that is // referencing the prototype object - let's speculatively load it's table nice and early!) JSObject* protoObject = asObject(structure->prototypeForLookup(callFrame)); @@ -611,11 +617,11 @@ void JIT::privateCompileGetByIdProto(StructureStubInfo* stubInfo, Structure* str #endif // Checks out okay! - getDirectOffset - compileGetDirectOffset(protoObject, regT0, cachedOffset); + compileGetDirectOffset(protoObject, regT1, regT0, cachedOffset); Jump success = jump(); - PatchBuffer patchBuffer(this, m_codeBlock->executablePool()); + LinkBuffer patchBuffer(this, m_codeBlock->executablePool()); // Use the patch information to link the failure cases back to the original slow case routine. CodeLocationLabel slowCaseBegin = stubInfo->callReturnLocation.labelAtOffset(-patchOffsetGetByIdSlowCaseCall); @@ -631,7 +637,11 @@ void JIT::privateCompileGetByIdProto(StructureStubInfo* stubInfo, Structure* str // Finally patch the jump to slow case back in the hot path to jump here instead. CodeLocationJump jumpLocation = stubInfo->hotPathBegin.jumpAtOffset(patchOffsetGetByIdBranchToSlowCase); - jumpLocation.relink(entryLabel); + RepatchBuffer repatchBuffer; + repatchBuffer.relink(jumpLocation, entryLabel); + + // We don't want to patch more than once - in future go to cti_op_put_by_id_generic. + repatchBuffer.relinkCallerToFunction(returnAddress, FunctionPtr(JITStubs::cti_op_get_by_id_proto_list)); } void JIT::privateCompileGetByIdSelfList(StructureStubInfo* stubInfo, PolymorphicAccessStructureList* polymorphicStructures, int currentIndex, Structure* structure, size_t cachedOffset) @@ -640,7 +650,7 @@ void JIT::privateCompileGetByIdSelfList(StructureStubInfo* stubInfo, Polymorphic compileGetDirectOffset(regT0, regT0, structure, cachedOffset); Jump success = jump(); - PatchBuffer patchBuffer(this, m_codeBlock->executablePool()); + LinkBuffer patchBuffer(this, m_codeBlock->executablePool()); // Use the patch information to link the failure cases back to the original slow case routine. CodeLocationLabel lastProtoBegin = polymorphicStructures->list[currentIndex - 1].stubRoutine; @@ -659,7 +669,8 @@ void JIT::privateCompileGetByIdSelfList(StructureStubInfo* stubInfo, Polymorphic // Finally patch the jump to slow case back in the hot path to jump here instead. CodeLocationJump jumpLocation = stubInfo->hotPathBegin.jumpAtOffset(patchOffsetGetByIdBranchToSlowCase); - jumpLocation.relink(entryLabel); + RepatchBuffer repatchBuffer; + repatchBuffer.relink(jumpLocation, entryLabel); } void JIT::privateCompileGetByIdProtoList(StructureStubInfo* stubInfo, PolymorphicAccessStructureList* prototypeStructures, int currentIndex, Structure* structure, Structure* prototypeStructure, size_t cachedOffset, CallFrame* callFrame) @@ -681,11 +692,11 @@ void JIT::privateCompileGetByIdProtoList(StructureStubInfo* stubInfo, Polymorphi #endif // Checks out okay! - getDirectOffset - compileGetDirectOffset(protoObject, regT0, cachedOffset); + compileGetDirectOffset(protoObject, regT1, regT0, cachedOffset); Jump success = jump(); - PatchBuffer patchBuffer(this, m_codeBlock->executablePool()); + LinkBuffer patchBuffer(this, m_codeBlock->executablePool()); // Use the patch information to link the failure cases back to the original slow case routine. CodeLocationLabel lastProtoBegin = prototypeStructures->list[currentIndex - 1].stubRoutine; @@ -703,7 +714,8 @@ void JIT::privateCompileGetByIdProtoList(StructureStubInfo* stubInfo, Polymorphi // Finally patch the jump to slow case back in the hot path to jump here instead. CodeLocationJump jumpLocation = stubInfo->hotPathBegin.jumpAtOffset(patchOffsetGetByIdBranchToSlowCase); - jumpLocation.relink(entryLabel); + RepatchBuffer repatchBuffer; + repatchBuffer.relink(jumpLocation, entryLabel); } void JIT::privateCompileGetByIdChainList(StructureStubInfo* stubInfo, PolymorphicAccessStructureList* prototypeStructures, int currentIndex, Structure* structure, StructureChain* chain, size_t count, size_t cachedOffset, CallFrame* callFrame) @@ -734,10 +746,10 @@ void JIT::privateCompileGetByIdChainList(StructureStubInfo* stubInfo, Polymorphi } ASSERT(protoObject); - compileGetDirectOffset(protoObject, regT0, cachedOffset); + compileGetDirectOffset(protoObject, regT1, regT0, cachedOffset); Jump success = jump(); - PatchBuffer patchBuffer(this, m_codeBlock->executablePool()); + LinkBuffer patchBuffer(this, m_codeBlock->executablePool()); // Use the patch information to link the failure cases back to the original slow case routine. CodeLocationLabel lastProtoBegin = prototypeStructures->list[currentIndex - 1].stubRoutine; @@ -756,14 +768,12 @@ void JIT::privateCompileGetByIdChainList(StructureStubInfo* stubInfo, Polymorphi // Finally patch the jump to slow case back in the hot path to jump here instead. CodeLocationJump jumpLocation = stubInfo->hotPathBegin.jumpAtOffset(patchOffsetGetByIdBranchToSlowCase); - jumpLocation.relink(entryLabel); + RepatchBuffer repatchBuffer; + repatchBuffer.relink(jumpLocation, entryLabel); } -void JIT::privateCompileGetByIdChain(StructureStubInfo* stubInfo, Structure* structure, StructureChain* chain, size_t count, size_t cachedOffset, ProcessorReturnAddress returnAddress, CallFrame* callFrame) +void JIT::privateCompileGetByIdChain(StructureStubInfo* stubInfo, Structure* structure, StructureChain* chain, size_t count, size_t cachedOffset, ReturnAddressPtr returnAddress, CallFrame* callFrame) { - // We don't want to patch more than once - in future go to cti_op_put_by_id_generic. - returnAddress.relinkCallerToFunction(FunctionPtr(JITStubs::cti_op_get_by_id_proto_list)); - ASSERT(count); JumpList bucketsOfFail; @@ -789,10 +799,10 @@ void JIT::privateCompileGetByIdChain(StructureStubInfo* stubInfo, Structure* str } ASSERT(protoObject); - compileGetDirectOffset(protoObject, regT0, cachedOffset); + compileGetDirectOffset(protoObject, regT1, regT0, cachedOffset); Jump success = jump(); - PatchBuffer patchBuffer(this, m_codeBlock->executablePool()); + LinkBuffer patchBuffer(this, m_codeBlock->executablePool()); // Use the patch information to link the failure cases back to the original slow case routine. patchBuffer.link(bucketsOfFail, stubInfo->callReturnLocation.labelAtOffset(-patchOffsetGetByIdSlowCaseCall)); @@ -806,7 +816,11 @@ void JIT::privateCompileGetByIdChain(StructureStubInfo* stubInfo, Structure* str // Finally patch the jump to slow case back in the hot path to jump here instead. CodeLocationJump jumpLocation = stubInfo->hotPathBegin.jumpAtOffset(patchOffsetGetByIdBranchToSlowCase); - jumpLocation.relink(entryLabel); + RepatchBuffer repatchBuffer; + repatchBuffer.relink(jumpLocation, entryLabel); + + // We don't want to patch more than once - in future go to cti_op_put_by_id_generic. + repatchBuffer.relinkCallerToFunction(returnAddress, FunctionPtr(JITStubs::cti_op_get_by_id_proto_list)); } /* ------------------------------ END: !ENABLE / ENABLE(JIT_OPTIMIZE_PROPERTY_ACCESS) ------------------------------ */ diff --git a/src/3rdparty/webkit/JavaScriptCore/jit/JITStubCall.h b/src/3rdparty/webkit/JavaScriptCore/jit/JITStubCall.h index 6c9ccc1..2dc69c1 100644 --- a/src/3rdparty/webkit/JavaScriptCore/jit/JITStubCall.h +++ b/src/3rdparty/webkit/JavaScriptCore/jit/JITStubCall.h @@ -107,9 +107,8 @@ namespace JSC { JIT::Call call() { - ASSERT(m_jit->m_bytecodeIndex != (unsigned)-1); // This method should only be called during hot/cold path generation, so that m_bytecodeIndex is set. - #if ENABLE(OPCODE_SAMPLING) + ASSERT(m_jit->m_bytecodeIndex != (unsigned)-1); m_jit->sampleInstruction(m_jit->m_codeBlock->instructions().begin() + m_jit->m_bytecodeIndex, true); #endif diff --git a/src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.cpp b/src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.cpp index 41ebd20..02bf7c0 100644 --- a/src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.cpp @@ -77,7 +77,7 @@ COMPILE_ASSERT(offsetof(struct JITStackFrame, callFrame) == 0x38, JITStackFrame_ COMPILE_ASSERT(offsetof(struct JITStackFrame, code) == 0x30, JITStackFrame_code_offset_matches_ctiTrampoline); COMPILE_ASSERT(offsetof(struct JITStackFrame, savedEBX) == 0x1c, JITStackFrame_stub_argument_space_matches_ctiTrampoline); -asm( +asm volatile ( ".globl " SYMBOL_STRING(ctiTrampoline) "\n" SYMBOL_STRING(ctiTrampoline) ":" "\n" "pushl %ebp" "\n" @@ -97,13 +97,22 @@ SYMBOL_STRING(ctiTrampoline) ":" "\n" "ret" "\n" ); -asm( +asm volatile ( ".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n" SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n" #if !USE(JIT_STUB_ARGUMENT_VA_LIST) "movl %esp, %ecx" "\n" #endif "call " SYMBOL_STRING(cti_vm_throw) "\n" + "addl $0x1c, %esp" "\n" + "popl %ebx" "\n" + "popl %edi" "\n" + "popl %esi" "\n" + "popl %ebp" "\n" + "ret" "\n" +); + +asm volatile ( ".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n" SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n" "addl $0x1c, %esp" "\n" @@ -126,7 +135,7 @@ COMPILE_ASSERT(offsetof(struct JITStackFrame, callFrame) == 0x90, JITStackFrame_ COMPILE_ASSERT(offsetof(struct JITStackFrame, code) == 0x80, JITStackFrame_code_offset_matches_ctiTrampoline); COMPILE_ASSERT(offsetof(struct JITStackFrame, savedRBX) == 0x48, JITStackFrame_stub_argument_space_matches_ctiTrampoline); -asm( +asm volatile ( ".globl " SYMBOL_STRING(ctiTrampoline) "\n" SYMBOL_STRING(ctiTrampoline) ":" "\n" "pushq %rbp" "\n" @@ -152,11 +161,22 @@ SYMBOL_STRING(ctiTrampoline) ":" "\n" "ret" "\n" ); -asm( +asm volatile ( ".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n" SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n" "movq %rsp, %rdi" "\n" "call " SYMBOL_STRING(cti_vm_throw) "\n" + "addq $0x48, %rsp" "\n" + "popq %rbx" "\n" + "popq %r15" "\n" + "popq %r14" "\n" + "popq %r13" "\n" + "popq %r12" "\n" + "popq %rbp" "\n" + "ret" "\n" +); + +asm volatile ( ".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n" SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n" "addq $0x48, %rsp" "\n" @@ -169,6 +189,70 @@ SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n" "ret" "\n" ); +#elif COMPILER(GCC) && PLATFORM_ARM_ARCH(7) + +#if USE(JIT_STUB_ARGUMENT_VA_LIST) +#error "JIT_STUB_ARGUMENT_VA_LIST not supported on ARMv7." +#endif + +asm volatile ( +".text" "\n" +".align 2" "\n" +".globl " SYMBOL_STRING(ctiTrampoline) "\n" +".thumb" "\n" +".thumb_func " SYMBOL_STRING(ctiTrampoline) "\n" +SYMBOL_STRING(ctiTrampoline) ":" "\n" + "sub sp, sp, #0x3c" "\n" + "str lr, [sp, #0x20]" "\n" + "str r4, [sp, #0x24]" "\n" + "str r5, [sp, #0x28]" "\n" + "str r6, [sp, #0x2c]" "\n" + "str r1, [sp, #0x30]" "\n" + "str r2, [sp, #0x34]" "\n" + "str r3, [sp, #0x38]" "\n" + "cpy r5, r2" "\n" + "mov r6, #512" "\n" + "blx r0" "\n" + "ldr r6, [sp, #0x2c]" "\n" + "ldr r5, [sp, #0x28]" "\n" + "ldr r4, [sp, #0x24]" "\n" + "ldr lr, [sp, #0x20]" "\n" + "add sp, sp, #0x3c" "\n" + "bx lr" "\n" +); + +asm volatile ( +".text" "\n" +".align 2" "\n" +".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n" +".thumb" "\n" +".thumb_func " SYMBOL_STRING(ctiVMThrowTrampoline) "\n" +SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n" + "cpy r0, sp" "\n" + "bl " SYMBOL_STRING(cti_vm_throw) "\n" + "ldr r6, [sp, #0x2c]" "\n" + "ldr r5, [sp, #0x28]" "\n" + "ldr r4, [sp, #0x24]" "\n" + "ldr lr, [sp, #0x20]" "\n" + "add sp, sp, #0x3c" "\n" + "bx lr" "\n" +); + +asm volatile ( +".text" "\n" +".align 2" "\n" +".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n" +".thumb" "\n" +".thumb_func " SYMBOL_STRING(ctiOpThrowNotCaught) "\n" +SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n" + "ldr r6, [sp, #0x2c]" "\n" + "ldr r5, [sp, #0x28]" "\n" + "ldr r4, [sp, #0x24]" "\n" + "ldr lr, [sp, #0x20]" "\n" + "add sp, sp, #0x3c" "\n" + "bx lr" "\n" +); + #elif COMPILER(MSVC) #if USE(JIT_STUB_ARGUMENT_VA_LIST) @@ -218,18 +302,18 @@ extern "C" { ret; } } - - __declspec(naked) void ctiOpThrowNotCaught() - { - __asm { - add esp, 0x1c; - pop ebx; - pop edi; - pop esi; - pop ebp; - ret; - } - } + + __declspec(naked) void ctiOpThrowNotCaught() + { + __asm { + add esp, 0x1c; + pop ebx; + pop edi; + pop esi; + pop ebp; + ret; + } + } } #endif @@ -243,11 +327,29 @@ extern "C" { JITThunks::JITThunks(JSGlobalData* globalData) { JIT::compileCTIMachineTrampolines(globalData, &m_executablePool, &m_ctiArrayLengthTrampoline, &m_ctiStringLengthTrampoline, &m_ctiVirtualCallPreLink, &m_ctiVirtualCallLink, &m_ctiVirtualCall, &m_ctiNativeCallThunk); + +#if PLATFORM_ARM_ARCH(7) + // Unfortunate the arm compiler does not like the use of offsetof on JITStackFrame (since it contains non POD types), + // and the OBJECT_OFFSETOF macro does not appear constantish enough for it to be happy with its use in COMPILE_ASSERT + // macros. + ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedReturnAddress) == 0x20); + ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedR4) == 0x24); + ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedR5) == 0x28); + ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, preservedR6) == 0x2c); + + ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, registerFile) == 0x30); + ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, callFrame) == 0x34); + ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, exception) == 0x38); + // The fifth argument is the first item already on the stack. + ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, enabledProfilerReference) == 0x3c); + + ASSERT(OBJECT_OFFSETOF(struct JITStackFrame, thunkReturnAddress) == 0x1C); +#endif } #if ENABLE(JIT_OPTIMIZE_PROPERTY_ACCESS) -NEVER_INLINE void JITThunks::tryCachePutByID(CallFrame* callFrame, CodeBlock* codeBlock, void* returnAddress, JSValue baseValue, const PutPropertySlot& slot) +NEVER_INLINE void JITThunks::tryCachePutByID(CallFrame* callFrame, CodeBlock* codeBlock, ReturnAddressPtr returnAddress, JSValue baseValue, const PutPropertySlot& slot) { // The interpreter checks for recursion here; I do not believe this can occur in CTI. @@ -281,6 +383,10 @@ NEVER_INLINE void JITThunks::tryCachePutByID(CallFrame* callFrame, CodeBlock* co // Structure transition, cache transition info if (slot.type() == PutPropertySlot::NewProperty) { StructureChain* prototypeChain = structure->prototypeChain(callFrame); + if (!prototypeChain->isCacheable()) { + ctiPatchCallByReturnAddress(returnAddress, FunctionPtr(JITStubs::cti_op_put_by_id_generic)); + return; + } stubInfo->initPutByIdTransition(structure->previousID(), structure, prototypeChain); JIT::compilePutByIdTransition(callFrame->scopeChain()->globalData, codeBlock, stubInfo, structure->previousID(), structure, slot.cachedOffset(), prototypeChain, returnAddress); return; @@ -291,7 +397,7 @@ NEVER_INLINE void JITThunks::tryCachePutByID(CallFrame* callFrame, CodeBlock* co JIT::patchPutByIdReplace(stubInfo, structure, slot.cachedOffset(), returnAddress); } -NEVER_INLINE void JITThunks::tryCacheGetByID(CallFrame* callFrame, CodeBlock* codeBlock, void* returnAddress, JSValue baseValue, const Identifier& propertyName, const PropertySlot& slot) +NEVER_INLINE void JITThunks::tryCacheGetByID(CallFrame* callFrame, CodeBlock* codeBlock, ReturnAddressPtr returnAddress, JSValue baseValue, const Identifier& propertyName, const PropertySlot& slot) { // FIXME: Write a test that proves we need to check for recursion here just // like the interpreter does, then add a check for recursion. @@ -368,6 +474,10 @@ NEVER_INLINE void JITThunks::tryCacheGetByID(CallFrame* callFrame, CodeBlock* co } StructureChain* prototypeChain = structure->prototypeChain(callFrame); + if (!prototypeChain->isCacheable()) { + ctiPatchCallByReturnAddress(returnAddress, FunctionPtr(JITStubs::cti_op_get_by_id_generic)); + return; + } stubInfo->initGetByIdChain(structure, prototypeChain); JIT::compileGetByIdChain(callFrame->scopeChain()->globalData, callFrame, codeBlock, stubInfo, structure, prototypeChain, count, slot.cachedOffset(), returnAddress); } @@ -398,7 +508,7 @@ struct StackHack { : stackFrame(stackFrame) , savedReturnAddress(*stackFrame.returnAddressSlot()) { - *stackFrame.returnAddressSlot() = reinterpret_cast(jscGeneratedNativeCode); + *stackFrame.returnAddressSlot() = ReturnAddressPtr(FunctionPtr(jscGeneratedNativeCode)); } ALWAYS_INLINE ~StackHack() @@ -407,17 +517,17 @@ struct StackHack { } JITStackFrame& stackFrame; - void* savedReturnAddress; + ReturnAddressPtr savedReturnAddress; }; #define STUB_INIT_STACK_FRAME(stackFrame) SETUP_VA_LISTL_ARGS; JITStackFrame& stackFrame = *reinterpret_cast(STUB_ARGS); StackHack stackHack(stackFrame) -#define STUB_SET_RETURN_ADDRESS(returnAddress) stackHack.savedReturnAddress = returnAddress +#define STUB_SET_RETURN_ADDRESS(returnAddress) stackHack.savedReturnAddress = ReturnAddressPtr(returnAddress) #define STUB_RETURN_ADDRESS stackHack.savedReturnAddress #else #define STUB_INIT_STACK_FRAME(stackFrame) SETUP_VA_LISTL_ARGS; JITStackFrame& stackFrame = *reinterpret_cast(STUB_ARGS) -#define STUB_SET_RETURN_ADDRESS(returnAddress) *stackFrame.returnAddressSlot() = returnAddress +#define STUB_SET_RETURN_ADDRESS(returnAddress) *stackFrame.returnAddressSlot() = ReturnAddressPtr(returnAddress) #define STUB_RETURN_ADDRESS *stackFrame.returnAddressSlot() #endif @@ -426,14 +536,14 @@ struct StackHack { // to get the address of the ctiVMThrowTrampoline function. It's also // good to keep the code size down by leaving as much of the exception // handling code out of line as possible. -static NEVER_INLINE void returnToThrowTrampoline(JSGlobalData* globalData, void* exceptionLocation, void*& returnAddressSlot) +static NEVER_INLINE void returnToThrowTrampoline(JSGlobalData* globalData, ReturnAddressPtr exceptionLocation, ReturnAddressPtr& returnAddressSlot) { ASSERT(globalData->exception); globalData->exceptionLocation = exceptionLocation; - returnAddressSlot = reinterpret_cast(ctiVMThrowTrampoline); + returnAddressSlot = ReturnAddressPtr(FunctionPtr(ctiVMThrowTrampoline)); } -static NEVER_INLINE void throwStackOverflowError(CallFrame* callFrame, JSGlobalData* globalData, void* exceptionLocation, void*& returnAddressSlot) +static NEVER_INLINE void throwStackOverflowError(CallFrame* callFrame, JSGlobalData* globalData, ReturnAddressPtr exceptionLocation, ReturnAddressPtr& returnAddressSlot) { globalData->exception = createStackOverflowError(callFrame); returnToThrowTrampoline(globalData, exceptionLocation, returnAddressSlot); @@ -467,7 +577,29 @@ static NEVER_INLINE void throwStackOverflowError(CallFrame* callFrame, JSGlobalD namespace JITStubs { +#if PLATFORM_ARM_ARCH(7) + +#define DEFINE_STUB_FUNCTION(rtype, op) \ + extern "C" { \ + rtype JITStubThunked_##op(STUB_ARGS_DECLARATION); \ + }; \ + asm volatile ( \ + ".text" "\n" \ + ".align 2" "\n" \ + ".globl " SYMBOL_STRING(cti_##op) "\n" \ + ".thumb" "\n" \ + ".thumb_func " SYMBOL_STRING(cti_##op) "\n" \ + SYMBOL_STRING(cti_##op) ":" "\n" \ + "str lr, [sp, #0x1c]" "\n" \ + "bl " SYMBOL_STRING(JITStubThunked_##op) "\n" \ + "ldr lr, [sp, #0x1c]" "\n" \ + "bx lr" "\n" \ + ); \ + rtype JITStubThunked_##op(STUB_ARGS_DECLARATION) \ + +#else #define DEFINE_STUB_FUNCTION(rtype, op) rtype JIT_STUB cti_##op(STUB_ARGS_DECLARATION) +#endif DEFINE_STUB_FUNCTION(JSObject*, op_convert_this) { @@ -573,7 +705,7 @@ DEFINE_STUB_FUNCTION(void, register_file_check) // moved the call frame forward. CallFrame* oldCallFrame = stackFrame.callFrame->callerFrame(); stackFrame.callFrame = oldCallFrame; - throwStackOverflowError(oldCallFrame, stackFrame.globalData, oldCallFrame->returnPC(), STUB_RETURN_ADDRESS); + throwStackOverflowError(oldCallFrame, stackFrame.globalData, ReturnAddressPtr(oldCallFrame->returnPC()), STUB_RETURN_ADDRESS); } DEFINE_STUB_FUNCTION(int, op_loop_if_less) @@ -832,7 +964,7 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_get_by_id_self_fail) if (stubInfo->opcodeID == op_get_by_id_self) { ASSERT(!stubInfo->stubRoutine); - polymorphicStructureList = new PolymorphicAccessStructureList(MacroAssembler::CodeLocationLabel(), stubInfo->u.getByIdSelf.baseObjectStructure); + polymorphicStructureList = new PolymorphicAccessStructureList(CodeLocationLabel(), stubInfo->u.getByIdSelf.baseObjectStructure); stubInfo->initGetByIdSelfList(polymorphicStructureList, 2); } else { polymorphicStructureList = stubInfo->u.getByIdSelfList.structureList; @@ -858,12 +990,12 @@ static PolymorphicAccessStructureList* getPolymorphicAccessStructureListSlot(Str switch (stubInfo->opcodeID) { case op_get_by_id_proto: prototypeStructureList = new PolymorphicAccessStructureList(stubInfo->stubRoutine, stubInfo->u.getByIdProto.baseObjectStructure, stubInfo->u.getByIdProto.prototypeStructure); - stubInfo->stubRoutine.reset(); + stubInfo->stubRoutine = CodeLocationLabel(); stubInfo->initGetByIdProtoList(prototypeStructureList, 2); break; case op_get_by_id_chain: prototypeStructureList = new PolymorphicAccessStructureList(stubInfo->stubRoutine, stubInfo->u.getByIdChain.baseObjectStructure, stubInfo->u.getByIdChain.chain); - stubInfo->stubRoutine.reset(); + stubInfo->stubRoutine = CodeLocationLabel(); stubInfo->initGetByIdProtoList(prototypeStructureList, 2); break; case op_get_by_id_proto_list: @@ -919,9 +1051,15 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_get_by_id_proto_list) if (listIndex == (POLYMORPHIC_LIST_CACHE_SIZE - 1)) ctiPatchCallByReturnAddress(STUB_RETURN_ADDRESS, FunctionPtr(cti_op_get_by_id_proto_list_full)); } else if (size_t count = countPrototypeChainEntriesAndCheckForProxies(callFrame, baseValue, slot)) { + StructureChain* protoChain = structure->prototypeChain(callFrame); + if (!protoChain->isCacheable()) { + ctiPatchCallByReturnAddress(STUB_RETURN_ADDRESS, FunctionPtr(cti_op_get_by_id_proto_fail)); + return JSValue::encode(result); + } + int listIndex; PolymorphicAccessStructureList* prototypeStructureList = getPolymorphicAccessStructureListSlot(stubInfo, listIndex); - JIT::compileGetByIdChainList(callFrame->scopeChain()->globalData, callFrame, codeBlock, stubInfo, prototypeStructureList, listIndex, structure, structure->prototypeChain(callFrame), count, slot.cachedOffset()); + JIT::compileGetByIdChainList(callFrame->scopeChain()->globalData, callFrame, codeBlock, stubInfo, prototypeStructureList, listIndex, structure, protoChain, count, slot.cachedOffset()); if (listIndex == (POLYMORPHIC_LIST_CACHE_SIZE - 1)) ctiPatchCallByReturnAddress(STUB_RETURN_ADDRESS, FunctionPtr(cti_op_get_by_id_proto_list_full)); @@ -1072,6 +1210,7 @@ DEFINE_STUB_FUNCTION(void*, op_call_JSFunction) #endif JSFunction* function = asFunction(stackFrame.args[0].jsValue()); + ASSERT(!function->isHostFunction()); FunctionBodyNode* body = function->body(); ScopeChainNode* callDataScopeChain = function->scope().node(); body->jitCode(callDataScopeChain); @@ -1085,6 +1224,7 @@ DEFINE_STUB_FUNCTION(VoidPtrPair, op_call_arityCheck) CallFrame* callFrame = stackFrame.callFrame; CodeBlock* newCodeBlock = stackFrame.args[3].codeBlock(); + ASSERT(newCodeBlock->codeType() != NativeCode); int argCount = stackFrame.args[2].int32(); ASSERT(argCount != newCodeBlock->m_numParameters); @@ -1146,9 +1286,11 @@ DEFINE_STUB_FUNCTION(void*, vm_lazyLinkCall) CodeBlock* codeBlock = 0; if (!callee->isHostFunction()) codeBlock = &callee->body()->bytecode(callee->scope().node()); + else + codeBlock = &callee->body()->generatedBytecode(); CallLinkInfo* callLinkInfo = &stackFrame.callFrame->callerFrame()->codeBlock()->getCallLinkInfo(stackFrame.args[1].returnAddress()); - JIT::linkCall(callee, codeBlock, jitCode, callLinkInfo, stackFrame.args[2].int32()); + JIT::linkCall(callee, codeBlock, jitCode, callLinkInfo, stackFrame.args[2].int32(), stackFrame.globalData); return jitCode.addressForCall().executableAddress(); } @@ -1179,7 +1321,7 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_call_NotJSFunction) CallFrame* previousCallFrame = stackFrame.callFrame; CallFrame* callFrame = CallFrame::create(previousCallFrame->registers() + registerOffset); - callFrame->init(0, static_cast(STUB_RETURN_ADDRESS), previousCallFrame->scopeChain(), previousCallFrame, 0, argCount, 0); + callFrame->init(0, static_cast((STUB_RETURN_ADDRESS).value()), previousCallFrame->scopeChain(), previousCallFrame, 0, argCount, 0); stackFrame.callFrame = callFrame; Register* argv = stackFrame.callFrame->registers() - RegisterFile::CallFrameHeaderSize - argCount; @@ -2234,7 +2376,7 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, op_throw) } stackFrame.callFrame = callFrame; - void* catchRoutine = handler->nativeCode.addressForExceptionHandler(); + void* catchRoutine = handler->nativeCode.executableAddress(); ASSERT(catchRoutine); STUB_SET_RETURN_ADDRESS(catchRoutine); return JSValue::encode(exceptionValue); @@ -2442,14 +2584,14 @@ DEFINE_STUB_FUNCTION(void*, op_switch_imm) CodeBlock* codeBlock = callFrame->codeBlock(); if (scrutinee.isInt32Fast()) - return codeBlock->immediateSwitchJumpTable(tableIndex).ctiForValue(scrutinee.getInt32Fast()).addressForSwitch(); + return codeBlock->immediateSwitchJumpTable(tableIndex).ctiForValue(scrutinee.getInt32Fast()).executableAddress(); else { double value; int32_t intValue; if (scrutinee.getNumber(value) && ((intValue = static_cast(value)) == value)) - return codeBlock->immediateSwitchJumpTable(tableIndex).ctiForValue(intValue).addressForSwitch(); + return codeBlock->immediateSwitchJumpTable(tableIndex).ctiForValue(intValue).executableAddress(); else - return codeBlock->immediateSwitchJumpTable(tableIndex).ctiDefault.addressForSwitch(); + return codeBlock->immediateSwitchJumpTable(tableIndex).ctiDefault.executableAddress(); } } @@ -2462,12 +2604,12 @@ DEFINE_STUB_FUNCTION(void*, op_switch_char) CallFrame* callFrame = stackFrame.callFrame; CodeBlock* codeBlock = callFrame->codeBlock(); - void* result = codeBlock->characterSwitchJumpTable(tableIndex).ctiDefault.addressForSwitch(); + void* result = codeBlock->characterSwitchJumpTable(tableIndex).ctiDefault.executableAddress(); if (scrutinee.isString()) { UString::Rep* value = asString(scrutinee)->value().rep(); if (value->size() == 1) - result = codeBlock->characterSwitchJumpTable(tableIndex).ctiForValue(value->data()[0]).addressForSwitch(); + result = codeBlock->characterSwitchJumpTable(tableIndex).ctiForValue(value->data()[0]).executableAddress(); } return result; @@ -2482,11 +2624,11 @@ DEFINE_STUB_FUNCTION(void*, op_switch_string) CallFrame* callFrame = stackFrame.callFrame; CodeBlock* codeBlock = callFrame->codeBlock(); - void* result = codeBlock->stringSwitchJumpTable(tableIndex).ctiDefault.addressForSwitch(); + void* result = codeBlock->stringSwitchJumpTable(tableIndex).ctiDefault.executableAddress(); if (scrutinee.isString()) { UString::Rep* value = asString(scrutinee)->value().rep(); - result = codeBlock->stringSwitchJumpTable(tableIndex).ctiForValue(value).addressForSwitch(); + result = codeBlock->stringSwitchJumpTable(tableIndex).ctiForValue(value).executableAddress(); } return result; @@ -2590,7 +2732,7 @@ DEFINE_STUB_FUNCTION(EncodedJSValue, vm_throw) } stackFrame.callFrame = callFrame; - void* catchRoutine = handler->nativeCode.addressForExceptionHandler(); + void* catchRoutine = handler->nativeCode.executableAddress(); ASSERT(catchRoutine); STUB_SET_RETURN_ADDRESS(catchRoutine); return JSValue::encode(exceptionValue); diff --git a/src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.h b/src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.h index 48e5369..0493189 100644 --- a/src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.h +++ b/src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.h @@ -68,7 +68,7 @@ namespace JSC { FuncExprNode* funcExprNode() { return static_cast(asPointer); } RegExp* regExp() { return static_cast(asPointer); } JSPropertyNameIterator* propertyNameIterator() { return static_cast(asPointer); } - void* returnAddress() { return asPointer; } + ReturnAddressPtr returnAddress() { return ReturnAddressPtr(asPointer); } }; #if PLATFORM(X86_64) @@ -92,7 +92,7 @@ namespace JSC { JSGlobalData* globalData; // When JIT code makes a call, it pushes its return address just below the rest of the stack. - void** returnAddressSlot() { return reinterpret_cast(this) - 1; } + ReturnAddressPtr* returnAddressSlot() { return reinterpret_cast(this) - 1; } }; #elif PLATFORM(X86) struct JITStackFrame { @@ -113,7 +113,30 @@ namespace JSC { JSGlobalData* globalData; // When JIT code makes a call, it pushes its return address just below the rest of the stack. - void** returnAddressSlot() { return reinterpret_cast(this) - 1; } + ReturnAddressPtr* returnAddressSlot() { return reinterpret_cast(this) - 1; } + }; +#elif PLATFORM_ARM_ARCH(7) + struct JITStackFrame { + JITStubArg padding; // Unused + JITStubArg args[6]; + + ReturnAddressPtr thunkReturnAddress; + + void* preservedReturnAddress; + void* preservedR4; + void* preservedR5; + void* preservedR6; + + // These arguments passed in r1..r3 (r0 contained the entry code pointed, which is not preserved) + RegisterFile* registerFile; + CallFrame* callFrame; + JSValue* exception; + + // These arguments passed on the stack. + Profiler** enabledProfilerReference; + JSGlobalData* globalData; + + ReturnAddressPtr* returnAddressSlot() { return &thunkReturnAddress; } }; #else #error "JITStackFrame not defined for this platform." @@ -172,8 +195,8 @@ namespace JSC { public: JITThunks(JSGlobalData*); - static void tryCacheGetByID(CallFrame*, CodeBlock*, void* returnAddress, JSValue baseValue, const Identifier& propertyName, const PropertySlot&); - static void tryCachePutByID(CallFrame*, CodeBlock*, void* returnAddress, JSValue baseValue, const PutPropertySlot&); + static void tryCacheGetByID(CallFrame*, CodeBlock*, ReturnAddressPtr returnAddress, JSValue baseValue, const Identifier& propertyName, const PropertySlot&); + static void tryCachePutByID(CallFrame*, CodeBlock*, ReturnAddressPtr returnAddress, JSValue baseValue, const PutPropertySlot&); MacroAssemblerCodePtr ctiArrayLengthTrampoline() { return m_ctiArrayLengthTrampoline; } MacroAssemblerCodePtr ctiStringLengthTrampoline() { return m_ctiStringLengthTrampoline; } diff --git a/src/3rdparty/webkit/JavaScriptCore/jsc.cpp b/src/3rdparty/webkit/JavaScriptCore/jsc.cpp index 21a8c18..20d6694 100644 --- a/src/3rdparty/webkit/JavaScriptCore/jsc.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/jsc.cpp @@ -52,7 +52,7 @@ #include #endif -#if COMPILER(MSVC) && !PLATFORM(WIN_CE) +#if COMPILER(MSVC) && !PLATFORM(WINCE) #include #include #include @@ -75,6 +75,7 @@ static JSValue JSC_HOST_CALL functionGC(ExecState*, JSObject*, JSValue, const Ar static JSValue JSC_HOST_CALL functionVersion(ExecState*, JSObject*, JSValue, const ArgList&); static JSValue JSC_HOST_CALL functionRun(ExecState*, JSObject*, JSValue, const ArgList&); static JSValue JSC_HOST_CALL functionLoad(ExecState*, JSObject*, JSValue, const ArgList&); +static JSValue JSC_HOST_CALL functionCheckSyntax(ExecState*, JSObject*, JSValue, const ArgList&); static JSValue JSC_HOST_CALL functionReadline(ExecState*, JSObject*, JSValue, const ArgList&); static NO_RETURN JSValue JSC_HOST_CALL functionQuit(ExecState*, JSObject*, JSValue, const ArgList&); @@ -184,6 +185,7 @@ GlobalObject::GlobalObject(const Vector& arguments) putDirectFunction(globalExec(), new (globalExec()) NativeFunctionWrapper(globalExec(), prototypeFunctionStructure(), 1, Identifier(globalExec(), "version"), functionVersion)); putDirectFunction(globalExec(), new (globalExec()) NativeFunctionWrapper(globalExec(), prototypeFunctionStructure(), 1, Identifier(globalExec(), "run"), functionRun)); putDirectFunction(globalExec(), new (globalExec()) NativeFunctionWrapper(globalExec(), prototypeFunctionStructure(), 1, Identifier(globalExec(), "load"), functionLoad)); + putDirectFunction(globalExec(), new (globalExec()) NativeFunctionWrapper(globalExec(), prototypeFunctionStructure(), 1, Identifier(globalExec(), "checkSyntax"), functionCheckSyntax)); putDirectFunction(globalExec(), new (globalExec()) NativeFunctionWrapper(globalExec(), prototypeFunctionStructure(), 0, Identifier(globalExec(), "readline"), functionReadline)); #if ENABLE(SAMPLING_FLAGS) @@ -264,6 +266,22 @@ JSValue JSC_HOST_CALL functionLoad(ExecState* exec, JSObject* o, JSValue v, cons return result.value(); } +JSValue JSC_HOST_CALL functionCheckSyntax(ExecState* exec, JSObject* o, JSValue v, const ArgList& args) +{ + UNUSED_PARAM(o); + UNUSED_PARAM(v); + UString fileName = args.at(0).toString(exec); + Vector script; + if (!fillBufferWithContentsOfFile(fileName, script)) + return throwError(exec, GeneralError, "Could not open file."); + + JSGlobalObject* globalObject = exec->lexicalGlobalObject(); + Completion result = checkSyntax(globalObject->globalExec(), makeSource(script.data(), fileName)); + if (result.complType() == Throw) + exec->setException(result.value()); + return result.value(); +} + #if ENABLE(SAMPLING_FLAGS) JSValue JSC_HOST_CALL functionSetSamplingFlags(ExecState* exec, JSObject*, JSValue, const ArgList& args) { @@ -332,7 +350,7 @@ int main(int argc, char** argv) _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE); #endif -#if COMPILER(MSVC) && !PLATFORM(WIN_CE) +#if COMPILER(MSVC) && !PLATFORM(WINCE) timeBeginPeriod(1); #endif diff --git a/src/3rdparty/webkit/JavaScriptCore/parser/Lexer.h b/src/3rdparty/webkit/JavaScriptCore/parser/Lexer.h index 9c22a9c..0e1b618 100644 --- a/src/3rdparty/webkit/JavaScriptCore/parser/Lexer.h +++ b/src/3rdparty/webkit/JavaScriptCore/parser/Lexer.h @@ -23,9 +23,9 @@ #define Lexer_h #include "Lookup.h" -#include "SegmentedVector.h" #include "SourceCode.h" #include +#include #include #include @@ -108,7 +108,7 @@ namespace JSC { int m_next2; int m_next3; - SegmentedVector m_identifiers; + WTF::SegmentedVector m_identifiers; JSGlobalData* m_globalData; diff --git a/src/3rdparty/webkit/JavaScriptCore/parser/Nodes.cpp b/src/3rdparty/webkit/JavaScriptCore/parser/Nodes.cpp index 4ddf13a..3cfd125 100644 --- a/src/3rdparty/webkit/JavaScriptCore/parser/Nodes.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/parser/Nodes.cpp @@ -1889,8 +1889,8 @@ void ProgramNode::generateBytecode(ScopeChainNode* scopeChainNode) m_code.set(new ProgramCodeBlock(this, GlobalCode, globalObject, source().provider())); - BytecodeGenerator generator(this, globalObject->debugger(), scopeChain, &globalObject->symbolTable(), m_code.get()); - generator.generate(); + OwnPtr generator(new BytecodeGenerator(this, globalObject->debugger(), scopeChain, &globalObject->symbolTable(), m_code.get())); + generator->generate(); destroyData(); } @@ -1944,8 +1944,8 @@ void EvalNode::generateBytecode(ScopeChainNode* scopeChainNode) m_code.set(new EvalCodeBlock(this, globalObject, source().provider(), scopeChain.localDepth())); - BytecodeGenerator generator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get()); - generator.generate(); + OwnPtr generator(new BytecodeGenerator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get())); + generator->generate(); // Eval code needs to hang on to its declaration stacks to keep declaration info alive until Interpreter::execute time, // so the entire ScopeNodeData cannot be destoyed. @@ -1961,9 +1961,9 @@ EvalCodeBlock& EvalNode::bytecodeForExceptionInfoReparse(ScopeChainNode* scopeCh m_code.set(new EvalCodeBlock(this, globalObject, source().provider(), scopeChain.localDepth())); - BytecodeGenerator generator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get()); - generator.setRegeneratingForExceptionInfo(codeBlockBeingRegeneratedFrom); - generator.generate(); + OwnPtr generator(new BytecodeGenerator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get())); + generator->setRegeneratingForExceptionInfo(codeBlockBeingRegeneratedFrom); + generator->generate(); return *m_code; } @@ -2037,11 +2037,17 @@ PassRefPtr FunctionBodyNode::createNativeThunk(JSGlobalData* g { RefPtr body = new FunctionBodyNode(globalData); globalData->parser->arena().reset(); + body->m_code.set(new CodeBlock(body.get())); body->m_jitCode = JITCode(JITCode::HostFunction(globalData->jitStubs.ctiNativeCallThunk())); return body.release(); } #endif +bool FunctionBodyNode::isHostFunction() const +{ + return m_code && m_code->codeType() == NativeCode; +} + FunctionBodyNode* FunctionBodyNode::create(JSGlobalData* globalData) { return new FunctionBodyNode(globalData); @@ -2071,8 +2077,8 @@ void FunctionBodyNode::generateBytecode(ScopeChainNode* scopeChainNode) m_code.set(new CodeBlock(this, FunctionCode, source().provider(), source().startOffset())); - BytecodeGenerator generator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get()); - generator.generate(); + OwnPtr generator(new BytecodeGenerator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get())); + generator->generate(); destroyData(); } @@ -2097,9 +2103,9 @@ CodeBlock& FunctionBodyNode::bytecodeForExceptionInfoReparse(ScopeChainNode* sco m_code.set(new CodeBlock(this, FunctionCode, source().provider(), source().startOffset())); - BytecodeGenerator generator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get()); - generator.setRegeneratingForExceptionInfo(codeBlockBeingRegeneratedFrom); - generator.generate(); + OwnPtr generator(new BytecodeGenerator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get())); + generator->setRegeneratingForExceptionInfo(codeBlockBeingRegeneratedFrom); + generator->generate(); return *m_code; } diff --git a/src/3rdparty/webkit/JavaScriptCore/parser/Nodes.h b/src/3rdparty/webkit/JavaScriptCore/parser/Nodes.h index cda1ee4..7cdc19d 100644 --- a/src/3rdparty/webkit/JavaScriptCore/parser/Nodes.h +++ b/src/3rdparty/webkit/JavaScriptCore/parser/Nodes.h @@ -1554,14 +1554,7 @@ namespace JSC { return m_code; } - bool isHostFunction() const - { -#if ENABLE(JIT) - return !!m_jitCode && !m_code; -#else - return true; -#endif - } + bool isHostFunction() const; virtual void mark(); diff --git a/src/3rdparty/webkit/JavaScriptCore/pcre/pcre_exec.cpp b/src/3rdparty/webkit/JavaScriptCore/pcre/pcre_exec.cpp index 80a092a..af770f3 100644 --- a/src/3rdparty/webkit/JavaScriptCore/pcre/pcre_exec.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/pcre/pcre_exec.cpp @@ -50,7 +50,7 @@ the JavaScript specification. There are also some supporting functions. */ #include #if REGEXP_HISTOGRAM -#include +#include #include #endif diff --git a/src/3rdparty/webkit/JavaScriptCore/profiler/CallIdentifier.h b/src/3rdparty/webkit/JavaScriptCore/profiler/CallIdentifier.h index c2c25d5..fdd7bbc 100644 --- a/src/3rdparty/webkit/JavaScriptCore/profiler/CallIdentifier.h +++ b/src/3rdparty/webkit/JavaScriptCore/profiler/CallIdentifier.h @@ -28,10 +28,11 @@ #define CallIdentifier_h #include +#include "FastAllocBase.h" namespace JSC { - struct CallIdentifier { + struct CallIdentifier : public WTF::FastAllocBase { UString m_name; UString m_url; unsigned m_lineNumber; diff --git a/src/3rdparty/webkit/JavaScriptCore/profiler/ProfileNode.cpp b/src/3rdparty/webkit/JavaScriptCore/profiler/ProfileNode.cpp index bf0bbcb..19050aa 100644 --- a/src/3rdparty/webkit/JavaScriptCore/profiler/ProfileNode.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/profiler/ProfileNode.cpp @@ -29,9 +29,9 @@ #include "config.h" #include "ProfileNode.h" -#include "DateMath.h" #include "Profiler.h" #include +#include #if PLATFORM(WIN_OS) #include @@ -49,7 +49,7 @@ static double getCount() QueryPerformanceCounter(&counter); return static_cast(counter.QuadPart) / frequency.QuadPart; #else - return getCurrentUTCTimeWithMicroseconds(); + return WTF::getCurrentUTCTimeWithMicroseconds(); #endif } diff --git a/src/3rdparty/webkit/JavaScriptCore/profiler/ProfilerServer.mm b/src/3rdparty/webkit/JavaScriptCore/profiler/ProfilerServer.mm index ef16f4c..a3944de 100644 --- a/src/3rdparty/webkit/JavaScriptCore/profiler/ProfilerServer.mm +++ b/src/3rdparty/webkit/JavaScriptCore/profiler/ProfilerServer.mm @@ -28,9 +28,12 @@ #import "JSProfilerPrivate.h" #import "JSRetainPtr.h" - #import +#if PLATFORM(IPHONE_SIMULATOR) +#import +#endif + @interface ProfilerServer : NSObject { @private NSString *_serverName; @@ -62,16 +65,22 @@ if ([defaults boolForKey:@"EnableJSProfiling"]) [self startProfiling]; +#if !PLATFORM(IPHONE) || PLATFORM(IPHONE_SIMULATOR) + // FIXME: // The catch-all notifications [[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(startProfiling) name:@"ProfilerServerStartNotification" object:nil]; [[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(stopProfiling) name:@"ProfilerServerStopNotification" object:nil]; +#endif // The specific notifications NSProcessInfo *processInfo = [NSProcessInfo processInfo]; _serverName = [[NSString alloc] initWithFormat:@"ProfilerServer-%d", [processInfo processIdentifier]]; +#if !PLATFORM(IPHONE) || PLATFORM(IPHONE_SIMULATOR) + // FIXME: [[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(startProfiling) name:[_serverName stringByAppendingString:@"-Start"] object:nil]; [[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(stopProfiling) name:[_serverName stringByAppendingString:@"-Stop"] object:nil]; +#endif [pool drain]; diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/ArgList.h b/src/3rdparty/webkit/JavaScriptCore/runtime/ArgList.h index 8e85d7f..4d571fc 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/ArgList.h +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/ArgList.h @@ -44,7 +44,8 @@ namespace JSC { // Constructor for a read-write list, to which you may append values. // FIXME: Remove all clients of this API, then remove this API. MarkedArgumentBuffer() - : m_markSet(0) + : m_isUsingInlineBuffer(true) + , m_markSet(0) #ifndef NDEBUG , m_isReadOnly(false) #endif @@ -57,6 +58,7 @@ namespace JSC { MarkedArgumentBuffer(Register* buffer, size_t size) : m_buffer(buffer) , m_size(size) + , m_isUsingInlineBuffer(true) , m_markSet(0) #ifndef NDEBUG , m_isReadOnly(true) @@ -103,7 +105,7 @@ namespace JSC { { ASSERT(!m_isReadOnly); - if (m_size < inlineCapacity) { + if (m_isUsingInlineBuffer && m_size < inlineCapacity) { m_vector.uncheckedAppend(v); ++m_size; } else { @@ -111,9 +113,23 @@ namespace JSC { // the performance of the fast "just append to inline buffer" case. slowAppend(v); ++m_size; + m_isUsingInlineBuffer = false; } } + void removeLast() + { + ASSERT(m_size); + m_size--; + m_vector.removeLast(); + } + + JSValue last() + { + ASSERT(m_size); + return m_buffer[m_size - 1].jsValue(); + } + iterator begin() { return m_buffer; } iterator end() { return m_buffer + m_size; } @@ -127,6 +143,7 @@ namespace JSC { Register* m_buffer; size_t m_size; + bool m_isUsingInlineBuffer; VectorType m_vector; ListSet* m_markSet; diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp index 1e5eab3..0ff97b8 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp @@ -1,7 +1,6 @@ /* * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. * Copyright (C) 2007 Eric Seidel - * Copyright (C) 2008 Torch Mobile, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -28,6 +27,7 @@ #include "Interpreter.h" #include "JSGlobalObject.h" #include "JSLock.h" +#include "JSONObject.h" #include "JSString.h" #include "JSValue.h" #include "Nodes.h" @@ -409,54 +409,68 @@ void* Heap::allocateNumber(size_t s) return heapAllocate(s); } -#if PLATFORM(WIN_CE) -// Return the number of bytes that are writable starting at p. -// The pointer p is assumed to be page aligned. -static inline DWORD numberOfWritableBytes(void* p) -{ - MEMORY_BASIC_INFORMATION buf; - DWORD result = VirtualQuery(p, &buf, sizeof(buf)); - ASSERT(result == sizeof(buf)); - DWORD protect = (buf.Protect & ~(PAGE_GUARD | PAGE_NOCACHE)); - - // check if the page is writable - if (protect != PAGE_READWRITE && protect != PAGE_WRITECOPY && - protect != PAGE_EXECUTE_READWRITE && protect != PAGE_EXECUTE_WRITECOPY) - return 0; - - if (buf.State != MEM_COMMIT) - return 0; +#if PLATFORM(WINCE) +void* g_stackBase = 0; - return buf.RegionSize; -} - -static DWORD systemPageSize() - { - SYSTEM_INFO sysInfo; - GetSystemInfo(&sysInfo); - return sysInfo.dwPageSize; +inline bool isPageWritable(void* page) +{ + MEMORY_BASIC_INFORMATION memoryInformation; + DWORD result = VirtualQuery(page, &memoryInformation, sizeof(memoryInformation)); + + // return false on error, including ptr outside memory + if (result != sizeof(memoryInformation)) + return false; + + DWORD protect = memoryInformation.Protect & ~(PAGE_GUARD | PAGE_NOCACHE); + return protect == PAGE_READWRITE + || protect == PAGE_WRITECOPY + || protect == PAGE_EXECUTE_READWRITE + || protect == PAGE_EXECUTE_WRITECOPY; } -static inline void* currentThreadStackBaseWinCE() +static void* getStackBase(void* previousFrame) { - static DWORD pageSize = systemPageSize(); - int dummy; - void* sp = &dummy; - char* alignedStackPtr = reinterpret_cast((DWORD)sp & ~(pageSize - 1)); - DWORD size = 0; - while (size = numberOfWritableBytes(alignedStackPtr)) - alignedStackPtr += size; - return alignedStackPtr; + // find the address of this stack frame by taking the address of a local variable + bool isGrowingDownward; + void* thisFrame = (void*)(&isGrowingDownward); + + isGrowingDownward = previousFrame < &thisFrame; + static DWORD pageSize = 0; + if (!pageSize) { + SYSTEM_INFO systemInfo; + GetSystemInfo(&systemInfo); + pageSize = systemInfo.dwPageSize; + } + + // scan all of memory starting from this frame, and return the last writeable page found + register char* currentPage = (char*)((DWORD)thisFrame & ~(pageSize - 1)); + if (isGrowingDownward) { + while (currentPage > 0) { + // check for underflow + if (currentPage >= (char*)pageSize) + currentPage -= pageSize; + else + currentPage = 0; + if (!isPageWritable(currentPage)) + return currentPage + pageSize; + } + return 0; + } else { + while (true) { + // guaranteed to complete because isPageWritable returns false at end of memory + currentPage += pageSize; + if (!isPageWritable(currentPage)) + return currentPage; + } + } } -#endif // PLATFORM(WIN_CE) +#endif static inline void* currentThreadStackBase() { #if PLATFORM(DARWIN) pthread_t thread = pthread_self(); return pthread_get_stackaddr_np(thread); -#elif PLATFORM(WIN_CE) - return currentThreadStackBaseWinCE(); #elif PLATFORM(WIN_OS) && PLATFORM(X86) && COMPILER(MSVC) // offset 0x18 from the FS segment register gives a pointer to // the thread information block for the current thread @@ -560,6 +574,13 @@ static inline void* currentThreadStackBase() } return static_cast(stackBase) + stackSize; #endif +#elif PLATFORM(WINCE) + if (g_stackBase) + return g_stackBase; + else { + int dummy; + return getStackBase(&dummy); + } #else #error Need a way to get the stack base on this platform #endif @@ -1094,6 +1115,8 @@ bool Heap::collect() m_globalData->smallStrings.mark(); if (m_globalData->scopeNodeBeingReparsed) m_globalData->scopeNodeBeingReparsed->mark(); + if (m_globalData->firstStringifierToMark) + JSONObject::markStringifiers(m_globalData->firstStringifierToMark); JAVASCRIPTCORE_GC_MARKED(); diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/CommonIdentifiers.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/CommonIdentifiers.cpp index fe0a830..3837817 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/CommonIdentifiers.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/CommonIdentifiers.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003, 2007 Apple Inc. All rights reserved. + * Copyright (C) 2003, 2007, 2009 Apple Inc. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -23,12 +23,13 @@ namespace JSC { -const char* const nullCString = 0; +static const char* const nullCString = 0; #define INITIALIZE_PROPERTY_NAME(name) , name(globalData, #name) CommonIdentifiers::CommonIdentifiers(JSGlobalData* globalData) : nullIdentifier(globalData, nullCString) + , emptyIdentifier(globalData, "") , underscoreProto(globalData, "__proto__") , thisIdentifier(globalData, "this") JSC_COMMON_IDENTIFIERS_EACH_PROPERTY_NAME(INITIALIZE_PROPERTY_NAME) diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/CommonIdentifiers.h b/src/3rdparty/webkit/JavaScriptCore/runtime/CommonIdentifiers.h index d4c5d52..408d819 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/CommonIdentifiers.h +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/CommonIdentifiers.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003,2007 Apple Computer, Inc + * Copyright (C) 2003, 2007, 2009 Apple Inc. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -59,6 +59,8 @@ macro(test) \ macro(toExponential) \ macro(toFixed) \ + macro(toISOString) \ + macro(toJSON) \ macro(toLocaleString) \ macro(toPrecision) \ macro(toString) \ @@ -75,6 +77,7 @@ namespace JSC { public: const Identifier nullIdentifier; + const Identifier emptyIdentifier; const Identifier underscoreProto; const Identifier thisIdentifier; diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/DateConstructor.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/DateConstructor.cpp index 54362d0..6d7d934 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/DateConstructor.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/DateConstructor.cpp @@ -22,8 +22,8 @@ #include "config.h" #include "DateConstructor.h" +#include "DateConversion.h" #include "DateInstance.h" -#include "DateMath.h" #include "DatePrototype.h" #include "JSFunction.h" #include "JSGlobalObject.h" @@ -32,8 +32,13 @@ #include "PrototypeFunction.h" #include #include +#include #include +#if PLATFORM(WINCE) && !PLATFORM(QT) +extern "C" time_t time(time_t* timer); //provided by libce +#endif + #if HAVE(SYS_TIME_H) #include #endif @@ -42,6 +47,8 @@ #include #endif +using namespace WTF; + namespace JSC { // TODO: MakeTime (15.9.11.1) etc. ? diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/DateConversion.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/DateConversion.cpp new file mode 100644 index 0000000..a725478 --- /dev/null +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/DateConversion.cpp @@ -0,0 +1,101 @@ +/* + * Copyright (C) 1999-2000 Harri Porten (porten@kde.org) + * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. + * Copyright (C) 2009 Google Inc. All rights reserved. + * + * The Original Code is Mozilla Communicator client code, released + * March 31, 1998. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Alternatively, the contents of this file may be used under the terms + * of either the Mozilla Public License Version 1.1, found at + * http://www.mozilla.org/MPL/ (the "MPL") or the GNU General Public + * License Version 2.0, found at http://www.fsf.org/copyleft/gpl.html + * (the "GPL"), in which case the provisions of the MPL or the GPL are + * applicable instead of those above. If you wish to allow use of your + * version of this file only under the terms of one of those two + * licenses (the MPL or the GPL) and not to allow others to use your + * version of this file under the LGPL, indicate your decision by + * deletingthe provisions above and replace them with the notice and + * other provisions required by the MPL or the GPL, as the case may be. + * If you do not delete the provisions above, a recipient may use your + * version of this file under any of the LGPL, the MPL or the GPL. + */ + +#include "config.h" +#include "DateConversion.h" + +#include "UString.h" +#include +#include + +using namespace WTF; + +namespace JSC { + +double parseDate(const UString &date) +{ + return parseDateFromNullTerminatedCharacters(date.UTF8String().c_str()); +} + +UString formatDate(const GregorianDateTime &t) +{ + char buffer[100]; + snprintf(buffer, sizeof(buffer), "%s %s %02d %04d", + weekdayName[(t.weekDay + 6) % 7], + monthName[t.month], t.monthDay, t.year + 1900); + return buffer; +} + +UString formatDateUTCVariant(const GregorianDateTime &t) +{ + char buffer[100]; + snprintf(buffer, sizeof(buffer), "%s, %02d %s %04d", + weekdayName[(t.weekDay + 6) % 7], + t.monthDay, monthName[t.month], t.year + 1900); + return buffer; +} + +UString formatTime(const GregorianDateTime &t, bool utc) +{ + char buffer[100]; + if (utc) { + snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d GMT", t.hour, t.minute, t.second); + } else { + int offset = abs(gmtoffset(t)); + char timeZoneName[70]; + struct tm gtm = t; + strftime(timeZoneName, sizeof(timeZoneName), "%Z", >m); + + if (timeZoneName[0]) { + snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d GMT%c%02d%02d (%s)", + t.hour, t.minute, t.second, + gmtoffset(t) < 0 ? '-' : '+', offset / (60*60), (offset / 60) % 60, timeZoneName); + } else { + snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d GMT%c%02d%02d", + t.hour, t.minute, t.second, + gmtoffset(t) < 0 ? '-' : '+', offset / (60*60), (offset / 60) % 60); + } + } + return UString(buffer); +} + +} // namespace JSC diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/DateConversion.h b/src/3rdparty/webkit/JavaScriptCore/runtime/DateConversion.h new file mode 100644 index 0000000..0d12815 --- /dev/null +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/DateConversion.h @@ -0,0 +1,60 @@ +/* + * Copyright (C) 1999-2000 Harri Porten (porten@kde.org) + * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. + * Copyright (C) 2009 Google Inc. All rights reserved. + * + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Mozilla Communicator client code, released + * March 31, 1998. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either of the GNU General Public License Version 2 or later (the "GPL"), + * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + */ + +#ifndef DateConversion_h +#define DateConversion_h + +namespace WTF { + struct GregorianDateTime; +} + +namespace JSC { + +class UString; + +double parseDate(const UString&); +UString formatDate(const WTF::GregorianDateTime&); +UString formatDateUTCVariant(const WTF::GregorianDateTime&); +UString formatTime(const WTF::GregorianDateTime&, bool inputIsUTC); + +} // namespace JSC + +#endif // DateConversion_h diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/DateInstance.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/DateInstance.cpp index 8806dec..62791ae 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/DateInstance.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/DateInstance.cpp @@ -22,10 +22,12 @@ #include "config.h" #include "DateInstance.h" -#include "DateMath.h" #include +#include #include +using namespace WTF; + namespace JSC { struct DateInstance::Cache { @@ -58,13 +60,13 @@ void DateInstance::msToGregorianDateTime(double milli, bool outputIsUTC, Gregori if (outputIsUTC) { if (m_cache->m_gregorianDateTimeUTCCachedForMS != milli) { - JSC::msToGregorianDateTime(milli, true, m_cache->m_cachedGregorianDateTimeUTC); + WTF::msToGregorianDateTime(milli, true, m_cache->m_cachedGregorianDateTimeUTC); m_cache->m_gregorianDateTimeUTCCachedForMS = milli; } t.copyFrom(m_cache->m_cachedGregorianDateTimeUTC); } else { if (m_cache->m_gregorianDateTimeCachedForMS != milli) { - JSC::msToGregorianDateTime(milli, false, m_cache->m_cachedGregorianDateTime); + WTF::msToGregorianDateTime(milli, false, m_cache->m_cachedGregorianDateTime); m_cache->m_gregorianDateTimeCachedForMS = milli; } t.copyFrom(m_cache->m_cachedGregorianDateTime); diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/DateInstance.h b/src/3rdparty/webkit/JavaScriptCore/runtime/DateInstance.h index 0ecd1db..3b73521 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/DateInstance.h +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/DateInstance.h @@ -23,9 +23,11 @@ #include "JSWrapperObject.h" -namespace JSC { - +namespace WTF { struct GregorianDateTime; +} + +namespace JSC { class DateInstance : public JSWrapperObject { public: @@ -34,14 +36,14 @@ namespace JSC { double internalNumber() const { return internalValue().uncheckedGetNumber(); } - bool getTime(GregorianDateTime&, int& offset) const; - bool getUTCTime(GregorianDateTime&) const; + bool getTime(WTF::GregorianDateTime&, int& offset) const; + bool getUTCTime(WTF::GregorianDateTime&) const; bool getTime(double& milliseconds, int& offset) const; bool getUTCTime(double& milliseconds) const; static const ClassInfo info; - void msToGregorianDateTime(double, bool outputIsUTC, GregorianDateTime&) const; + void msToGregorianDateTime(double, bool outputIsUTC, WTF::GregorianDateTime&) const; private: virtual const ClassInfo* classInfo() const { return &info; } diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/DateMath.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/DateMath.cpp deleted file mode 100644 index 2f8c88c..0000000 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/DateMath.cpp +++ /dev/null @@ -1,935 +0,0 @@ -/* - * Copyright (C) 1999-2000 Harri Porten (porten@kde.org) - * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. - * - * The Original Code is Mozilla Communicator client code, released - * March 31, 1998. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Alternatively, the contents of this file may be used under the terms - * of either the Mozilla Public License Version 1.1, found at - * http://www.mozilla.org/MPL/ (the "MPL") or the GNU General Public - * License Version 2.0, found at http://www.fsf.org/copyleft/gpl.html - * (the "GPL"), in which case the provisions of the MPL or the GPL are - * applicable instead of those above. If you wish to allow use of your - * version of this file only under the terms of one of those two - * licenses (the MPL or the GPL) and not to allow others to use your - * version of this file under the LGPL, indicate your decision by - * deletingthe provisions above and replace them with the notice and - * other provisions required by the MPL or the GPL, as the case may be. - * If you do not delete the provisions above, a recipient may use your - * version of this file under any of the LGPL, the MPL or the GPL. - */ - -#include "config.h" -#include "DateMath.h" - -#include "JSNumberCell.h" -#include -#include -#include -#include -#include -#include -#include -#include - -#if HAVE(ERRNO_H) -#include -#endif - -#if PLATFORM(DARWIN) -#include -#endif - -#if HAVE(SYS_TIME_H) -#include -#endif - -#if HAVE(SYS_TIMEB_H) -#include -#endif - -using namespace WTF; - -namespace JSC { - -/* Constants */ - -static const double minutesPerDay = 24.0 * 60.0; -static const double secondsPerDay = 24.0 * 60.0 * 60.0; -static const double secondsPerYear = 24.0 * 60.0 * 60.0 * 365.0; - -static const double usecPerSec = 1000000.0; - -static const double maxUnixTime = 2145859200.0; // 12/31/2037 - -// Day of year for the first day of each month, where index 0 is January, and day 0 is January 1. -// First for non-leap years, then for leap years. -static const int firstDayOfMonth[2][12] = { - {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334}, - {0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335} -}; - -static inline bool isLeapYear(int year) -{ - if (year % 4 != 0) - return false; - if (year % 400 == 0) - return true; - if (year % 100 == 0) - return false; - return true; -} - -static inline int daysInYear(int year) -{ - return 365 + isLeapYear(year); -} - -static inline double daysFrom1970ToYear(int year) -{ - // The Gregorian Calendar rules for leap years: - // Every fourth year is a leap year. 2004, 2008, and 2012 are leap years. - // However, every hundredth year is not a leap year. 1900 and 2100 are not leap years. - // Every four hundred years, there's a leap year after all. 2000 and 2400 are leap years. - - static const int leapDaysBefore1971By4Rule = 1970 / 4; - static const int excludedLeapDaysBefore1971By100Rule = 1970 / 100; - static const int leapDaysBefore1971By400Rule = 1970 / 400; - - const double yearMinusOne = year - 1; - const double yearsToAddBy4Rule = floor(yearMinusOne / 4.0) - leapDaysBefore1971By4Rule; - const double yearsToExcludeBy100Rule = floor(yearMinusOne / 100.0) - excludedLeapDaysBefore1971By100Rule; - const double yearsToAddBy400Rule = floor(yearMinusOne / 400.0) - leapDaysBefore1971By400Rule; - - return 365.0 * (year - 1970) + yearsToAddBy4Rule - yearsToExcludeBy100Rule + yearsToAddBy400Rule; -} - -static inline double msToDays(double ms) -{ - return floor(ms / msPerDay); -} - -static inline int msToYear(double ms) -{ - int approxYear = static_cast(floor(ms / (msPerDay * 365.2425)) + 1970); - double msFromApproxYearTo1970 = msPerDay * daysFrom1970ToYear(approxYear); - if (msFromApproxYearTo1970 > ms) - return approxYear - 1; - if (msFromApproxYearTo1970 + msPerDay * daysInYear(approxYear) <= ms) - return approxYear + 1; - return approxYear; -} - -static inline int dayInYear(double ms, int year) -{ - return static_cast(msToDays(ms) - daysFrom1970ToYear(year)); -} - -static inline double msToMilliseconds(double ms) -{ - double result = fmod(ms, msPerDay); - if (result < 0) - result += msPerDay; - return result; -} - -// 0: Sunday, 1: Monday, etc. -static inline int msToWeekDay(double ms) -{ - int wd = (static_cast(msToDays(ms)) + 4) % 7; - if (wd < 0) - wd += 7; - return wd; -} - -static inline int msToSeconds(double ms) -{ - double result = fmod(floor(ms / msPerSecond), secondsPerMinute); - if (result < 0) - result += secondsPerMinute; - return static_cast(result); -} - -static inline int msToMinutes(double ms) -{ - double result = fmod(floor(ms / msPerMinute), minutesPerHour); - if (result < 0) - result += minutesPerHour; - return static_cast(result); -} - -static inline int msToHours(double ms) -{ - double result = fmod(floor(ms/msPerHour), hoursPerDay); - if (result < 0) - result += hoursPerDay; - return static_cast(result); -} - -static inline int monthFromDayInYear(int dayInYear, bool leapYear) -{ - const int d = dayInYear; - int step; - - if (d < (step = 31)) - return 0; - step += (leapYear ? 29 : 28); - if (d < step) - return 1; - if (d < (step += 31)) - return 2; - if (d < (step += 30)) - return 3; - if (d < (step += 31)) - return 4; - if (d < (step += 30)) - return 5; - if (d < (step += 31)) - return 6; - if (d < (step += 31)) - return 7; - if (d < (step += 30)) - return 8; - if (d < (step += 31)) - return 9; - if (d < (step += 30)) - return 10; - return 11; -} - -static inline bool checkMonth(int dayInYear, int& startDayOfThisMonth, int& startDayOfNextMonth, int daysInThisMonth) -{ - startDayOfThisMonth = startDayOfNextMonth; - startDayOfNextMonth += daysInThisMonth; - return (dayInYear <= startDayOfNextMonth); -} - -static inline int dayInMonthFromDayInYear(int dayInYear, bool leapYear) -{ - const int d = dayInYear; - int step; - int next = 30; - - if (d <= next) - return d + 1; - const int daysInFeb = (leapYear ? 29 : 28); - if (checkMonth(d, step, next, daysInFeb)) - return d - step; - if (checkMonth(d, step, next, 31)) - return d - step; - if (checkMonth(d, step, next, 30)) - return d - step; - if (checkMonth(d, step, next, 31)) - return d - step; - if (checkMonth(d, step, next, 30)) - return d - step; - if (checkMonth(d, step, next, 31)) - return d - step; - if (checkMonth(d, step, next, 31)) - return d - step; - if (checkMonth(d, step, next, 30)) - return d - step; - if (checkMonth(d, step, next, 31)) - return d - step; - if (checkMonth(d, step, next, 30)) - return d - step; - step = next; - return d - step; -} - -static inline int monthToDayInYear(int month, bool isLeapYear) -{ - return firstDayOfMonth[isLeapYear][month]; -} - -static inline double timeToMS(double hour, double min, double sec, double ms) -{ - return (((hour * minutesPerHour + min) * secondsPerMinute + sec) * msPerSecond + ms); -} - -static int dateToDayInYear(int year, int month, int day) -{ - year += month / 12; - - month %= 12; - if (month < 0) { - month += 12; - --year; - } - - int yearday = static_cast(floor(daysFrom1970ToYear(year))); - int monthday = monthToDayInYear(month, isLeapYear(year)); - - return yearday + monthday + day - 1; -} - -double getCurrentUTCTime() -{ - return floor(getCurrentUTCTimeWithMicroseconds()); -} - -// Returns current time in milliseconds since 1 Jan 1970. -double getCurrentUTCTimeWithMicroseconds() -{ - return currentTime() * 1000.0; -} - -void getLocalTime(const time_t* localTime, struct tm* localTM) -{ -#if COMPILER(MSVC7) || COMPILER(MINGW) || PLATFORM(WIN_CE) - *localTM = *localtime(localTime); -#elif COMPILER(MSVC) - localtime_s(localTM, localTime); -#else - localtime_r(localTime, localTM); -#endif -} - -// There is a hard limit at 2038 that we currently do not have a workaround -// for (rdar://problem/5052975). -static inline int maximumYearForDST() -{ - return 2037; -} - -static inline int minimumYearForDST() -{ - // Because of the 2038 issue (see maximumYearForDST) if the current year is - // greater than the max year minus 27 (2010), we want to use the max year - // minus 27 instead, to ensure there is a range of 28 years that all years - // can map to. - return std::min(msToYear(getCurrentUTCTime()), maximumYearForDST() - 27) ; -} - -/* - * Find an equivalent year for the one given, where equivalence is deterined by - * the two years having the same leapness and the first day of the year, falling - * on the same day of the week. - * - * This function returns a year between this current year and 2037, however this - * function will potentially return incorrect results if the current year is after - * 2010, (rdar://problem/5052975), if the year passed in is before 1900 or after - * 2100, (rdar://problem/5055038). - */ -int equivalentYearForDST(int year) -{ - // It is ok if the cached year is not the current year as long as the rules - // for DST did not change between the two years; if they did the app would need - // to be restarted. - static int minYear = minimumYearForDST(); - int maxYear = maximumYearForDST(); - - int difference; - if (year > maxYear) - difference = minYear - year; - else if (year < minYear) - difference = maxYear - year; - else - return year; - - int quotient = difference / 28; - int product = (quotient) * 28; - - year += product; - ASSERT((year >= minYear && year <= maxYear) || (product - year == static_cast(NaN))); - return year; -} - -static int32_t calculateUTCOffset() -{ - tm localt; - memset(&localt, 0, sizeof(localt)); - - // get the difference between this time zone and UTC on Jan 01, 2000 12:00:00 AM - localt.tm_mday = 1; - localt.tm_year = 100; - time_t utcOffset = 946684800 - mktime(&localt); - - return static_cast(utcOffset * 1000); -} - -#if PLATFORM(DARWIN) -static int32_t s_cachedUTCOffset; // In milliseconds. An assumption here is that access to an int32_t variable is atomic on platforms that take this code path. -static bool s_haveCachedUTCOffset; -static int s_notificationToken; -#endif - -/* - * Get the difference in milliseconds between this time zone and UTC (GMT) - * NOT including DST. - */ -double getUTCOffset() -{ -#if PLATFORM(DARWIN) - if (s_haveCachedUTCOffset) { - int notified; - uint32_t status = notify_check(s_notificationToken, ¬ified); - if (status == NOTIFY_STATUS_OK && !notified) - return s_cachedUTCOffset; - } -#endif - - int32_t utcOffset = calculateUTCOffset(); - -#if PLATFORM(DARWIN) - // Theoretically, it is possible that several threads will be executing this code at once, in which case we will have a race condition, - // and a newer value may be overwritten. In practice, time zones don't change that often. - s_cachedUTCOffset = utcOffset; -#endif - - return utcOffset; -} - -/* - * Get the DST offset for the time passed in. Takes - * seconds (not milliseconds) and cannot handle dates before 1970 - * on some OS' - */ -static double getDSTOffsetSimple(double localTimeSeconds, double utcOffset) -{ - if (localTimeSeconds > maxUnixTime) - localTimeSeconds = maxUnixTime; - else if (localTimeSeconds < 0) // Go ahead a day to make localtime work (does not work with 0) - localTimeSeconds += secondsPerDay; - - //input is UTC so we have to shift back to local time to determine DST thus the + getUTCOffset() - double offsetTime = (localTimeSeconds * msPerSecond) + utcOffset; - - // Offset from UTC but doesn't include DST obviously - int offsetHour = msToHours(offsetTime); - int offsetMinute = msToMinutes(offsetTime); - - // FIXME: time_t has a potential problem in 2038 - time_t localTime = static_cast(localTimeSeconds); - - tm localTM; - getLocalTime(&localTime, &localTM); - - double diff = ((localTM.tm_hour - offsetHour) * secondsPerHour) + ((localTM.tm_min - offsetMinute) * 60); - - if (diff < 0) - diff += secondsPerDay; - - return (diff * msPerSecond); -} - -// Get the DST offset, given a time in UTC -static double getDSTOffset(double ms, double utcOffset) -{ - // On Mac OS X, the call to localtime (see getDSTOffsetSimple) will return historically accurate - // DST information (e.g. New Zealand did not have DST from 1946 to 1974) however the JavaScript - // standard explicitly dictates that historical information should not be considered when - // determining DST. For this reason we shift away from years that localtime can handle but would - // return historically accurate information. - int year = msToYear(ms); - int equivalentYear = equivalentYearForDST(year); - if (year != equivalentYear) { - bool leapYear = isLeapYear(year); - int dayInYearLocal = dayInYear(ms, year); - int dayInMonth = dayInMonthFromDayInYear(dayInYearLocal, leapYear); - int month = monthFromDayInYear(dayInYearLocal, leapYear); - int day = dateToDayInYear(equivalentYear, month, dayInMonth); - ms = (day * msPerDay) + msToMilliseconds(ms); - } - - return getDSTOffsetSimple(ms / msPerSecond, utcOffset); -} - -double gregorianDateTimeToMS(const GregorianDateTime& t, double milliSeconds, bool inputIsUTC) -{ - int day = dateToDayInYear(t.year + 1900, t.month, t.monthDay); - double ms = timeToMS(t.hour, t.minute, t.second, milliSeconds); - double result = (day * msPerDay) + ms; - - if (!inputIsUTC) { // convert to UTC - double utcOffset = getUTCOffset(); - result -= utcOffset; - result -= getDSTOffset(result, utcOffset); - } - - return result; -} - -void msToGregorianDateTime(double ms, bool outputIsUTC, GregorianDateTime& tm) -{ - // input is UTC - double dstOff = 0.0; - const double utcOff = getUTCOffset(); - - if (!outputIsUTC) { // convert to local time - dstOff = getDSTOffset(ms, utcOff); - ms += dstOff + utcOff; - } - - const int year = msToYear(ms); - tm.second = msToSeconds(ms); - tm.minute = msToMinutes(ms); - tm.hour = msToHours(ms); - tm.weekDay = msToWeekDay(ms); - tm.yearDay = dayInYear(ms, year); - tm.monthDay = dayInMonthFromDayInYear(tm.yearDay, isLeapYear(year)); - tm.month = monthFromDayInYear(tm.yearDay, isLeapYear(year)); - tm.year = year - 1900; - tm.isDST = dstOff != 0.0; - - tm.utcOffset = static_cast((dstOff + utcOff) / msPerSecond); - tm.timeZone = NULL; -} - -void initDateMath() -{ -#ifndef NDEBUG - static bool alreadyInitialized; - ASSERT(!alreadyInitialized++); -#endif - - equivalentYearForDST(2000); // Need to call once to initialize a static used in this function. -#if PLATFORM(DARWIN) - // Register for a notification whenever the time zone changes. - uint32_t status = notify_register_check("com.apple.system.timezone", &s_notificationToken); - if (status == NOTIFY_STATUS_OK) { - s_cachedUTCOffset = calculateUTCOffset(); - s_haveCachedUTCOffset = true; - } -#endif -} - -static inline double ymdhmsToSeconds(long year, int mon, int day, int hour, int minute, int second) -{ - double days = (day - 32075) - + floor(1461 * (year + 4800.0 + (mon - 14) / 12) / 4) - + 367 * (mon - 2 - (mon - 14) / 12 * 12) / 12 - - floor(3 * ((year + 4900.0 + (mon - 14) / 12) / 100) / 4) - - 2440588; - return ((days * hoursPerDay + hour) * minutesPerHour + minute) * secondsPerMinute + second; -} - -// We follow the recommendation of RFC 2822 to consider all -// obsolete time zones not listed here equivalent to "-0000". -static const struct KnownZone { -#if !PLATFORM(WIN_OS) - const -#endif - char tzName[4]; - int tzOffset; -} known_zones[] = { - { "UT", 0 }, - { "GMT", 0 }, - { "EST", -300 }, - { "EDT", -240 }, - { "CST", -360 }, - { "CDT", -300 }, - { "MST", -420 }, - { "MDT", -360 }, - { "PST", -480 }, - { "PDT", -420 } -}; - -inline static void skipSpacesAndComments(const char*& s) -{ - int nesting = 0; - char ch; - while ((ch = *s)) { - if (!isASCIISpace(ch)) { - if (ch == '(') - nesting++; - else if (ch == ')' && nesting > 0) - nesting--; - else if (nesting == 0) - break; - } - s++; - } -} - -// returns 0-11 (Jan-Dec); -1 on failure -static int findMonth(const char* monthStr) -{ - ASSERT(monthStr); - char needle[4]; - for (int i = 0; i < 3; ++i) { - if (!*monthStr) - return -1; - needle[i] = static_cast(toASCIILower(*monthStr++)); - } - needle[3] = '\0'; - const char *haystack = "janfebmaraprmayjunjulaugsepoctnovdec"; - const char *str = strstr(haystack, needle); - if (str) { - int position = static_cast(str - haystack); - if (position % 3 == 0) - return position / 3; - } - return -1; -} - -static bool parseLong(const char* string, char** stopPosition, int base, long* result) -{ - *result = strtol(string, stopPosition, base); - // Avoid the use of errno as it is not available on Windows CE - if (string == *stopPosition || *result == LONG_MIN || *result == LONG_MAX) - return false; - return true; -} - -double parseDate(const UString &date) -{ - // This parses a date in the form: - // Tuesday, 09-Nov-99 23:12:40 GMT - // or - // Sat, 01-Jan-2000 08:00:00 GMT - // or - // Sat, 01 Jan 2000 08:00:00 GMT - // or - // 01 Jan 99 22:00 +0100 (exceptions in rfc822/rfc2822) - // ### non RFC formats, added for Javascript: - // [Wednesday] January 09 1999 23:12:40 GMT - // [Wednesday] January 09 23:12:40 GMT 1999 - // - // We ignore the weekday. - - CString dateCString = date.UTF8String(); - const char *dateString = dateCString.c_str(); - - // Skip leading space - skipSpacesAndComments(dateString); - - long month = -1; - const char *wordStart = dateString; - // Check contents of first words if not number - while (*dateString && !isASCIIDigit(*dateString)) { - if (isASCIISpace(*dateString) || *dateString == '(') { - if (dateString - wordStart >= 3) - month = findMonth(wordStart); - skipSpacesAndComments(dateString); - wordStart = dateString; - } else - dateString++; - } - - // Missing delimiter between month and day (like "January29")? - if (month == -1 && wordStart != dateString) - month = findMonth(wordStart); - - skipSpacesAndComments(dateString); - - if (!*dateString) - return NaN; - - // ' 09-Nov-99 23:12:40 GMT' - char* newPosStr; - long day; - if (!parseLong(dateString, &newPosStr, 10, &day)) - return NaN; - dateString = newPosStr; - - if (!*dateString) - return NaN; - - if (day < 0) - return NaN; - - long year = 0; - if (day > 31) { - // ### where is the boundary and what happens below? - if (*dateString != '/') - return NaN; - // looks like a YYYY/MM/DD date - if (!*++dateString) - return NaN; - year = day; - if (!parseLong(dateString, &newPosStr, 10, &month)) - return NaN; - month -= 1; - dateString = newPosStr; - if (*dateString++ != '/' || !*dateString) - return NaN; - if (!parseLong(dateString, &newPosStr, 10, &day)) - return NaN; - dateString = newPosStr; - } else if (*dateString == '/' && month == -1) { - dateString++; - // This looks like a MM/DD/YYYY date, not an RFC date. - month = day - 1; // 0-based - if (!parseLong(dateString, &newPosStr, 10, &day)) - return NaN; - if (day < 1 || day > 31) - return NaN; - dateString = newPosStr; - if (*dateString == '/') - dateString++; - if (!*dateString) - return NaN; - } else { - if (*dateString == '-') - dateString++; - - skipSpacesAndComments(dateString); - - if (*dateString == ',') - dateString++; - - if (month == -1) { // not found yet - month = findMonth(dateString); - if (month == -1) - return NaN; - - while (*dateString && *dateString != '-' && *dateString != ',' && !isASCIISpace(*dateString)) - dateString++; - - if (!*dateString) - return NaN; - - // '-99 23:12:40 GMT' - if (*dateString != '-' && *dateString != '/' && *dateString != ',' && !isASCIISpace(*dateString)) - return NaN; - dateString++; - } - } - - if (month < 0 || month > 11) - return NaN; - - // '99 23:12:40 GMT' - if (year <= 0 && *dateString) { - if (!parseLong(dateString, &newPosStr, 10, &year)) - return NaN; - } - - // Don't fail if the time is missing. - long hour = 0; - long minute = 0; - long second = 0; - if (!*newPosStr) - dateString = newPosStr; - else { - // ' 23:12:40 GMT' - if (!(isASCIISpace(*newPosStr) || *newPosStr == ',')) { - if (*newPosStr != ':') - return NaN; - // There was no year; the number was the hour. - year = -1; - } else { - // in the normal case (we parsed the year), advance to the next number - dateString = ++newPosStr; - skipSpacesAndComments(dateString); - } - - parseLong(dateString, &newPosStr, 10, &hour); - // Do not check for errno here since we want to continue - // even if errno was set becasue we are still looking - // for the timezone! - - // Read a number? If not, this might be a timezone name. - if (newPosStr != dateString) { - dateString = newPosStr; - - if (hour < 0 || hour > 23) - return NaN; - - if (!*dateString) - return NaN; - - // ':12:40 GMT' - if (*dateString++ != ':') - return NaN; - - if (!parseLong(dateString, &newPosStr, 10, &minute)) - return NaN; - dateString = newPosStr; - - if (minute < 0 || minute > 59) - return NaN; - - // ':40 GMT' - if (*dateString && *dateString != ':' && !isASCIISpace(*dateString)) - return NaN; - - // seconds are optional in rfc822 + rfc2822 - if (*dateString ==':') { - dateString++; - - if (!parseLong(dateString, &newPosStr, 10, &second)) - return NaN; - dateString = newPosStr; - - if (second < 0 || second > 59) - return NaN; - } - - skipSpacesAndComments(dateString); - - if (strncasecmp(dateString, "AM", 2) == 0) { - if (hour > 12) - return NaN; - if (hour == 12) - hour = 0; - dateString += 2; - skipSpacesAndComments(dateString); - } else if (strncasecmp(dateString, "PM", 2) == 0) { - if (hour > 12) - return NaN; - if (hour != 12) - hour += 12; - dateString += 2; - skipSpacesAndComments(dateString); - } - } - } - - bool haveTZ = false; - int offset = 0; - - // Don't fail if the time zone is missing. - // Some websites omit the time zone (4275206). - if (*dateString) { - if (strncasecmp(dateString, "GMT", 3) == 0 || strncasecmp(dateString, "UTC", 3) == 0) { - dateString += 3; - haveTZ = true; - } - - if (*dateString == '+' || *dateString == '-') { - long o; - if (!parseLong(dateString, &newPosStr, 10, &o)) - return NaN; - dateString = newPosStr; - - if (o < -9959 || o > 9959) - return NaN; - - int sgn = (o < 0) ? -1 : 1; - o = abs(o); - if (*dateString != ':') { - offset = ((o / 100) * 60 + (o % 100)) * sgn; - } else { // GMT+05:00 - long o2; - if (!parseLong(dateString, &newPosStr, 10, &o2)) - return NaN; - dateString = newPosStr; - offset = (o * 60 + o2) * sgn; - } - haveTZ = true; - } else { - for (int i = 0; i < int(sizeof(known_zones) / sizeof(KnownZone)); i++) { - if (0 == strncasecmp(dateString, known_zones[i].tzName, strlen(known_zones[i].tzName))) { - offset = known_zones[i].tzOffset; - dateString += strlen(known_zones[i].tzName); - haveTZ = true; - break; - } - } - } - } - - skipSpacesAndComments(dateString); - - if (*dateString && year == -1) { - if (!parseLong(dateString, &newPosStr, 10, &year)) - return NaN; - dateString = newPosStr; - } - - skipSpacesAndComments(dateString); - - // Trailing garbage - if (*dateString) - return NaN; - - // Y2K: Handle 2 digit years. - if (year >= 0 && year < 100) { - if (year < 50) - year += 2000; - else - year += 1900; - } - - // fall back to local timezone - if (!haveTZ) { - GregorianDateTime t; - t.monthDay = day; - t.month = month; - t.year = year - 1900; - t.isDST = -1; - t.second = second; - t.minute = minute; - t.hour = hour; - - // Use our gregorianDateTimeToMS() rather than mktime() as the latter can't handle the full year range. - return gregorianDateTimeToMS(t, 0, false); - } - - return (ymdhmsToSeconds(year, month + 1, day, hour, minute, second) - (offset * 60.0)) * msPerSecond; -} - -double timeClip(double t) -{ - if (!isfinite(t)) - return NaN; - if (fabs(t) > 8.64E15) - return NaN; - return trunc(t); -} - -UString formatDate(const GregorianDateTime &t) -{ - char buffer[100]; - snprintf(buffer, sizeof(buffer), "%s %s %02d %04d", - weekdayName[(t.weekDay + 6) % 7], - monthName[t.month], t.monthDay, t.year + 1900); - return buffer; -} - -UString formatDateUTCVariant(const GregorianDateTime &t) -{ - char buffer[100]; - snprintf(buffer, sizeof(buffer), "%s, %02d %s %04d", - weekdayName[(t.weekDay + 6) % 7], - t.monthDay, monthName[t.month], t.year + 1900); - return buffer; -} - -UString formatTime(const GregorianDateTime &t, bool utc) -{ - char buffer[100]; - if (utc) { - snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d GMT", t.hour, t.minute, t.second); - } else { - int offset = abs(gmtoffset(t)); - char timeZoneName[70]; - struct tm gtm = t; - strftime(timeZoneName, sizeof(timeZoneName), "%Z", >m); - - if (timeZoneName[0]) { - snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d GMT%c%02d%02d (%s)", - t.hour, t.minute, t.second, - gmtoffset(t) < 0 ? '-' : '+', offset / (60*60), (offset / 60) % 60, timeZoneName); - } else { - snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d GMT%c%02d%02d", - t.hour, t.minute, t.second, - gmtoffset(t) < 0 ? '-' : '+', offset / (60*60), (offset / 60) % 60); - } - } - return UString(buffer); -} - -} // namespace JSC diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/DateMath.h b/src/3rdparty/webkit/JavaScriptCore/runtime/DateMath.h deleted file mode 100644 index 8a15c80..0000000 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/DateMath.h +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Copyright (C) 1999-2000 Harri Porten (porten@kde.org) - * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. - * - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Communicator client code, released - * March 31, 1998. - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either of the GNU General Public License Version 2 or later (the "GPL"), - * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - */ - -#ifndef DateMath_h -#define DateMath_h - -#include -#include -#include - -namespace JSC { - -class UString; -struct GregorianDateTime; - -void initDateMath(); -void msToGregorianDateTime(double, bool outputIsUTC, GregorianDateTime&); -double gregorianDateTimeToMS(const GregorianDateTime&, double, bool inputIsUTC); -double getUTCOffset(); -int equivalentYearForDST(int year); -double getCurrentUTCTime(); -double getCurrentUTCTimeWithMicroseconds(); -void getLocalTime(const time_t*, tm*); - -// Not really math related, but this is currently the only shared place to put these. -double parseDate(const UString&); -double timeClip(double); -UString formatDate(const GregorianDateTime&); -UString formatDateUTCVariant(const GregorianDateTime&); -UString formatTime(const GregorianDateTime&, bool inputIsUTC); - - -const char * const weekdayName[7] = { "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" }; -const char * const monthName[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; - -const double hoursPerDay = 24.0; -const double minutesPerHour = 60.0; -const double secondsPerHour = 60.0 * 60.0; -const double secondsPerMinute = 60.0; -const double msPerSecond = 1000.0; -const double msPerMinute = 60.0 * 1000.0; -const double msPerHour = 60.0 * 60.0 * 1000.0; -const double msPerDay = 24.0 * 60.0 * 60.0 * 1000.0; - -// Intentionally overridding the default tm of the system -// Tee members of tm differ on various operating systems. -struct GregorianDateTime : Noncopyable { - GregorianDateTime() - : second(0) - , minute(0) - , hour(0) - , weekDay(0) - , monthDay(0) - , yearDay(0) - , month(0) - , year(0) - , isDST(0) - , utcOffset(0) - , timeZone(0) - { - } - - ~GregorianDateTime() - { - delete [] timeZone; - } - - GregorianDateTime(const tm& inTm) - : second(inTm.tm_sec) - , minute(inTm.tm_min) - , hour(inTm.tm_hour) - , weekDay(inTm.tm_wday) - , monthDay(inTm.tm_mday) - , yearDay(inTm.tm_yday) - , month(inTm.tm_mon) - , year(inTm.tm_year) - , isDST(inTm.tm_isdst) - { -#if !PLATFORM(WIN_OS) && !PLATFORM(SOLARIS) && !COMPILER(RVCT) - utcOffset = static_cast(inTm.tm_gmtoff); - - int inZoneSize = strlen(inTm.tm_zone) + 1; - timeZone = new char[inZoneSize]; - strncpy(timeZone, inTm.tm_zone, inZoneSize); -#else - utcOffset = static_cast(getUTCOffset() / msPerSecond + (isDST ? secondsPerHour : 0)); - timeZone = 0; -#endif - } - - operator tm() const - { - tm ret; - memset(&ret, 0, sizeof(ret)); - - ret.tm_sec = second; - ret.tm_min = minute; - ret.tm_hour = hour; - ret.tm_wday = weekDay; - ret.tm_mday = monthDay; - ret.tm_yday = yearDay; - ret.tm_mon = month; - ret.tm_year = year; - ret.tm_isdst = isDST; - -#if !PLATFORM(WIN_OS) && !PLATFORM(SOLARIS) && !COMPILER(RVCT) - ret.tm_gmtoff = static_cast(utcOffset); - ret.tm_zone = timeZone; -#endif - - return ret; - } - - void copyFrom(const GregorianDateTime& rhs) - { - second = rhs.second; - minute = rhs.minute; - hour = rhs.hour; - weekDay = rhs.weekDay; - monthDay = rhs.monthDay; - yearDay = rhs.yearDay; - month = rhs.month; - year = rhs.year; - isDST = rhs.isDST; - utcOffset = rhs.utcOffset; - if (rhs.timeZone) { - int inZoneSize = strlen(rhs.timeZone) + 1; - timeZone = new char[inZoneSize]; - strncpy(timeZone, rhs.timeZone, inZoneSize); - } else - timeZone = 0; - } - - int second; - int minute; - int hour; - int weekDay; - int monthDay; - int yearDay; - int month; - int year; - int isDST; - int utcOffset; - char* timeZone; -}; - -static inline int gmtoffset(const GregorianDateTime& t) -{ - return t.utcOffset; -} - -} // namespace JSC - -#endif // DateMath_h diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/DatePrototype.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/DatePrototype.cpp index ff3fb19..e2482f4 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/DatePrototype.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/DatePrototype.cpp @@ -1,6 +1,7 @@ /* * Copyright (C) 1999-2000 Harri Porten (porten@kde.org) * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. + * Copyright (C) 2008, 2009 Torch Mobile, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -22,7 +23,7 @@ #include "config.h" #include "DatePrototype.h" -#include "DateMath.h" +#include "DateConversion.h" #include "Error.h" #include "JSString.h" #include "ObjectPrototype.h" @@ -38,6 +39,7 @@ #include #include #include +#include #include #include #include @@ -58,6 +60,10 @@ #include #endif +#if PLATFORM(WINCE) && !PLATFORM(QT) +extern "C" size_t strftime(char * const s, const size_t maxsize, const char * const format, const struct tm * const t); //provided by libce +#endif + using namespace WTF; namespace JSC { @@ -107,6 +113,9 @@ static JSValue JSC_HOST_CALL dateProtoFuncToLocaleTimeString(ExecState*, JSObjec static JSValue JSC_HOST_CALL dateProtoFuncToString(ExecState*, JSObject*, JSValue, const ArgList&); static JSValue JSC_HOST_CALL dateProtoFuncToTimeString(ExecState*, JSObject*, JSValue, const ArgList&); static JSValue JSC_HOST_CALL dateProtoFuncToUTCString(ExecState*, JSObject*, JSValue, const ArgList&); +static JSValue JSC_HOST_CALL dateProtoFuncToISOString(ExecState*, JSObject*, JSValue, const ArgList&); + +static JSValue JSC_HOST_CALL dateProtoFuncToJSON(ExecState*, JSObject*, JSValue, const ArgList&); } @@ -189,6 +198,9 @@ static JSCell* formatLocaleDate(ExecState* exec, const GregorianDateTime& gdt, L { #if HAVE(LANGINFO_H) static const nl_item formats[] = { D_T_FMT, D_FMT, T_FMT }; +#elif PLATFORM(WINCE) && !PLATFORM(QT) + // strftime() we are using does not support # + static const char* const formatStrings[] = { "%c", "%x", "%X" }; #else static const char* const formatStrings[] = { "%#c", "%#x", "%X" }; #endif @@ -333,6 +345,7 @@ const ClassInfo DatePrototype::info = {"Date", &DateInstance::info, 0, ExecState /* Source for DatePrototype.lut.h @begin dateTable toString dateProtoFuncToString DontEnum|Function 0 + toISOString dateProtoFuncToISOString DontEnum|Function 0 toUTCString dateProtoFuncToUTCString DontEnum|Function 0 toDateString dateProtoFuncToDateString DontEnum|Function 0 toTimeString dateProtoFuncToTimeString DontEnum|Function 0 @@ -376,6 +389,7 @@ const ClassInfo DatePrototype::info = {"Date", &DateInstance::info, 0, ExecState setUTCFullYear dateProtoFuncSetUTCFullYear DontEnum|Function 3 setYear dateProtoFuncSetYear DontEnum|Function 1 getYear dateProtoFuncGetYear DontEnum|Function 0 + toJSON dateProtoFuncToJSON DontEnum|Function 0 @end */ @@ -429,6 +443,28 @@ JSValue JSC_HOST_CALL dateProtoFuncToUTCString(ExecState* exec, JSObject*, JSVal return jsNontrivialString(exec, formatDateUTCVariant(t) + " " + formatTime(t, utc)); } +JSValue JSC_HOST_CALL dateProtoFuncToISOString(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&) +{ + if (!thisValue.isObject(&DateInstance::info)) + return throwError(exec, TypeError); + + const bool utc = true; + + DateInstance* thisDateObj = asDateInstance(thisValue); + double milli = thisDateObj->internalNumber(); + if (!isfinite(milli)) + return jsNontrivialString(exec, "Invalid Date"); + + GregorianDateTime t; + thisDateObj->msToGregorianDateTime(milli, utc, t); + // Maximum amount of space we need in buffer: 6 (max. digits in year) + 2 * 5 (2 characters each for month, day, hour, minute, second) + // 6 for formatting and one for null termination = 23. We add one extra character to allow us to force null termination. + char buffer[24]; + snprintf(buffer, sizeof(buffer) - 1, "%04d-%02d-%02dT%02d:%02d:%02dZ", 1900 + t.year, t.month + 1, t.monthDay, t.hour, t.minute, t.second); + buffer[sizeof(buffer) - 1] = 0; + return jsNontrivialString(exec, buffer); +} + JSValue JSC_HOST_CALL dateProtoFuncToDateString(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&) { if (!thisValue.isObject(&DateInstance::info)) @@ -1043,4 +1079,27 @@ JSValue JSC_HOST_CALL dateProtoFuncGetYear(ExecState* exec, JSObject*, JSValue t return jsNumber(exec, t.year); } +JSValue JSC_HOST_CALL dateProtoFuncToJSON(ExecState* exec, JSObject*, JSValue thisValue, const ArgList&) +{ + JSObject* object = thisValue.toThisObject(exec); + if (exec->hadException()) + return jsNull(); + + JSValue toISOValue = object->get(exec, exec->globalData().propertyNames->toISOString); + if (exec->hadException()) + return jsNull(); + + CallData callData; + CallType callType = toISOValue.getCallData(callData); + if (callType == CallTypeNone) + return throwError(exec, TypeError, "toISOString is not a function"); + + JSValue result = call(exec, asObject(toISOValue), callType, callData, object, exec->emptyList()); + if (exec->hadException()) + return jsNull(); + if (result.isObject()) + return throwError(exec, TypeError, "toISOString did not return a primitive value"); + return result; +} + } // namespace JSC diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/InitializeThreading.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/InitializeThreading.cpp index cda9fb1..a0620e7 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/InitializeThreading.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/InitializeThreading.cpp @@ -31,11 +31,11 @@ #include "JSImmediate.h" #include "Collector.h" -#include "DateMath.h" #include "dtoa.h" #include "Identifier.h" #include "JSGlobalObject.h" #include "UString.h" +#include #include using namespace WTF; @@ -52,7 +52,7 @@ static void initializeThreadingOnce() initializeUString(); #if ENABLE(JSC_MULTIPLE_THREADS) s_dtoaP5Mutex = new Mutex; - initDateMath(); + WTF::initializeDates(); #endif } diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/JSFunction.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/JSFunction.cpp index f456451..b79074f 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/JSFunction.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/JSFunction.cpp @@ -48,7 +48,7 @@ const ClassInfo JSFunction::info = { "Function", &InternalFunction::info, 0, 0 } JSFunction::JSFunction(ExecState* exec, PassRefPtr structure, int length, const Identifier& name, NativeFunction func) : Base(&exec->globalData(), structure, name) #if ENABLE(JIT) - , m_body(exec->globalData().nativeFunctionThunk()) + , m_body(FunctionBodyNode::createNativeThunk(&exec->globalData())) #else , m_body(0) #endif @@ -76,22 +76,19 @@ JSFunction::~JSFunction() // JIT code for other functions may have had calls linked directly to the code for this function; these links // are based on a check for the this pointer value for this JSFunction - which will no longer be valid once // this memory is freed and may be reused (potentially for another, different JSFunction). - if (!isHostFunction()) { - if (m_body && m_body->isGenerated()) - m_body->generatedBytecode().unlinkCallers(); - scopeChain().~ScopeChain(); - } - + if (m_body && m_body->isGenerated()) + m_body->generatedBytecode().unlinkCallers(); #endif + if (!isHostFunction()) + scopeChain().~ScopeChain(); } void JSFunction::mark() { Base::mark(); - if (!isHostFunction()) { - m_body->mark(); + m_body->mark(); + if (!isHostFunction()) scopeChain().mark(); - } } CallType JSFunction::getCallData(CallData& callData) diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalData.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalData.cpp index 1594848..d5c4ee4 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalData.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalData.cpp @@ -60,6 +60,7 @@ using namespace WTF; namespace JSC { extern const HashTable arrayTable; +extern const HashTable jsonTable; extern const HashTable dateTable; extern const HashTable mathTable; extern const HashTable numberTable; @@ -105,6 +106,7 @@ JSGlobalData::JSGlobalData(bool isShared, const VPtrSet& vptrSet) , clientData(0) , arrayTable(fastNew(JSC::arrayTable)) , dateTable(fastNew(JSC::dateTable)) + , jsonTable(fastNew(JSC::jsonTable)) , mathTable(fastNew(JSC::mathTable)) , numberTable(fastNew(JSC::numberTable)) , regExpTable(fastNew(JSC::regExpTable)) @@ -137,6 +139,7 @@ JSGlobalData::JSGlobalData(bool isShared, const VPtrSet& vptrSet) , head(0) , dynamicGlobalObject(0) , scopeNodeBeingReparsed(0) + , firstStringifierToMark(0) { #if PLATFORM(MAC) startProfilerServerIfNeeded(); @@ -155,17 +158,16 @@ JSGlobalData::~JSGlobalData() arrayTable->deleteTable(); dateTable->deleteTable(); + jsonTable->deleteTable(); mathTable->deleteTable(); numberTable->deleteTable(); regExpTable->deleteTable(); regExpConstructorTable->deleteTable(); stringTable->deleteTable(); -#if ENABLE(JIT) - lazyNativeFunctionThunk.clear(); -#endif fastDelete(const_cast(arrayTable)); fastDelete(const_cast(dateTable)); + fastDelete(const_cast(jsonTable)); fastDelete(const_cast(mathTable)); fastDelete(const_cast(numberTable)); fastDelete(const_cast(regExpTable)); @@ -222,15 +224,6 @@ JSGlobalData*& JSGlobalData::sharedInstanceInternal() return sharedInstance; } -#if ENABLE(JIT) - -void JSGlobalData::createNativeThunk() -{ - lazyNativeFunctionThunk = FunctionBodyNode::createNativeThunk(this); -} - -#endif - // FIXME: We can also detect forms like v1 < v2 ? -1 : 0, reverse comparison, etc. const Vector& JSGlobalData::numericCompareFunction(ExecState* exec) { diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalData.h b/src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalData.h index e53746b..96a3c2c 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalData.h +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalData.h @@ -54,8 +54,10 @@ namespace JSC { class Lexer; class Parser; class ScopeNode; + class Stringifier; class Structure; class UString; + struct HashTable; struct VPtrSet; @@ -82,6 +84,7 @@ namespace JSC { const HashTable* arrayTable; const HashTable* dateTable; + const HashTable* jsonTable; const HashTable* mathTable; const HashTable* numberTable; const HashTable* regExpTable; @@ -117,20 +120,13 @@ namespace JSC { Interpreter* interpreter; #if ENABLE(JIT) JITThunks jitStubs; - FunctionBodyNode* nativeFunctionThunk() - { - if (!lazyNativeFunctionThunk) - createNativeThunk(); - return lazyNativeFunctionThunk.get(); - } - RefPtr lazyNativeFunctionThunk; #endif TimeoutChecker timeoutChecker; Heap heap; JSValue exception; #if ENABLE(JIT) - void* exceptionLocation; + ReturnAddressPtr exceptionLocation; #endif const Vector& numericCompareFunction(ExecState*); @@ -145,6 +141,7 @@ namespace JSC { HashSet arrayVisitedElements; ScopeNode* scopeNodeBeingReparsed; + Stringifier* firstStringifierToMark; private: JSGlobalData(bool isShared, const VPtrSet&); diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalObject.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalObject.cpp index 1e9f670..c56b84b 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalObject.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalObject.cpp @@ -50,6 +50,7 @@ #include "JSFunction.h" #include "JSGlobalObjectFunctions.h" #include "JSLock.h" +#include "JSONObject.h" #include "Interpreter.h" #include "MathObject.h" #include "NativeErrorConstructor.h" @@ -318,7 +319,8 @@ void JSGlobalObject::reset(JSValue prototype) GlobalPropertyInfo(Identifier(exec, "Math"), new (exec) MathObject(exec, MathObject::createStructure(d()->objectPrototype)), DontEnum | DontDelete), GlobalPropertyInfo(Identifier(exec, "NaN"), jsNaN(exec), DontEnum | DontDelete), GlobalPropertyInfo(Identifier(exec, "Infinity"), jsNumber(exec, Inf), DontEnum | DontDelete), - GlobalPropertyInfo(Identifier(exec, "undefined"), jsUndefined(), DontEnum | DontDelete) + GlobalPropertyInfo(Identifier(exec, "undefined"), jsUndefined(), DontEnum | DontDelete), + GlobalPropertyInfo(Identifier(exec, "JSON"), new (exec) JSONObject(JSONObject::createStructure(d()->objectPrototype)), DontEnum | DontDelete) }; addStaticGlobals(staticGlobals, sizeof(staticGlobals) / sizeof(GlobalPropertyInfo)); diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalObject.h b/src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalObject.h index da9a819..983274b 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalObject.h +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalObject.h @@ -169,7 +169,7 @@ namespace JSC { virtual void mark(); virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&); - virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&, bool& slotIsWriteable); + virtual bool hasOwnPropertyForWrite(ExecState*, const Identifier&); virtual void put(ExecState*, const Identifier&, JSValue, PutPropertySlot&); virtual void putWithAttributes(ExecState*, const Identifier& propertyName, JSValue value, unsigned attributes); @@ -325,10 +325,12 @@ namespace JSC { return symbolTableGet(propertyName, slot); } - inline bool JSGlobalObject::getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot& slot, bool& slotIsWriteable) + inline bool JSGlobalObject::hasOwnPropertyForWrite(ExecState* exec, const Identifier& propertyName) { - if (JSVariableObject::getOwnPropertySlotForWrite(exec, propertyName, slot, slotIsWriteable)) + PropertySlot slot; + if (JSVariableObject::getOwnPropertySlot(exec, propertyName, slot)) return true; + bool slotIsWriteable; return symbolTableGet(propertyName, slot, slotIsWriteable); } diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp index b013957..85f92f2 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp @@ -282,7 +282,7 @@ JSValue JSC_HOST_CALL globalFuncEval(ExecState* exec, JSObject* function, JSValu UString s = x.toString(exec); - LiteralParser preparser(exec, s); + LiteralParser preparser(exec, s, LiteralParser::NonStrictJSON); if (JSValue parsedObject = preparser.tryLiteralParse()) return parsedObject; diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/JSONObject.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/JSONObject.cpp new file mode 100644 index 0000000..4a89c55 --- /dev/null +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/JSONObject.cpp @@ -0,0 +1,766 @@ +/* + * Copyright (C) 2009 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" +#include "JSONObject.h" + +#include "BooleanObject.h" +#include "Error.h" +#include "ExceptionHelpers.h" +#include "JSArray.h" +#include "LiteralParser.h" +#include "PropertyNameArray.h" +#include + +namespace JSC { + +ASSERT_CLASS_FITS_IN_CELL(JSONObject); + +static JSValue JSC_HOST_CALL JSONProtoFuncParse(ExecState*, JSObject*, JSValue, const ArgList&); +static JSValue JSC_HOST_CALL JSONProtoFuncStringify(ExecState*, JSObject*, JSValue, const ArgList&); + +} + +#include "JSONObject.lut.h" + +namespace JSC { + +// PropertyNameForFunctionCall objects must be on the stack, since the JSValue that they create is not marked. +class PropertyNameForFunctionCall { +public: + PropertyNameForFunctionCall(const Identifier&); + PropertyNameForFunctionCall(unsigned); + + JSValue value(ExecState*) const; + +private: + const Identifier* m_identifier; + unsigned m_number; + mutable JSValue m_value; +}; + +class Stringifier : Noncopyable { +public: + Stringifier(ExecState*, JSValue replacer, JSValue space); + ~Stringifier(); + JSValue stringify(JSValue); + + void mark(); + +private: + typedef UString StringBuilder; + + class Holder { + public: + Holder(JSObject*); + + JSObject* object() const { return m_object; } + + bool appendNextProperty(Stringifier&, StringBuilder&); + + private: + JSObject* const m_object; + const bool m_isArray; + bool m_isJSArray; + unsigned m_index; + unsigned m_size; + RefPtr m_propertyNames; + }; + + friend class Holder; + + static void appendQuotedString(StringBuilder&, const UString&); + + JSValue toJSON(JSValue, const PropertyNameForFunctionCall&); + + enum StringifyResult { StringifyFailed, StringifySucceeded, StringifyFailedDueToUndefinedValue }; + StringifyResult appendStringifiedValue(StringBuilder&, JSValue, JSObject* holder, const PropertyNameForFunctionCall&); + + bool willIndent() const; + void indent(); + void unindent(); + void startNewLine(StringBuilder&) const; + + Stringifier* const m_nextStringifierToMark; + ExecState* const m_exec; + const JSValue m_replacer; + bool m_usingArrayReplacer; + PropertyNameArray m_arrayReplacerPropertyNames; + CallType m_replacerCallType; + CallData m_replacerCallData; + const UString m_gap; + + HashSet m_holderCycleDetector; + Vector m_holderStack; + UString m_repeatedGap; + UString m_indent; +}; + +// ------------------------------ helper functions -------------------------------- + +static inline JSValue unwrapBoxedPrimitive(JSValue value) +{ + if (!value.isObject()) + return value; + if (!asObject(value)->inherits(&NumberObject::info) && !asObject(value)->inherits(&StringObject::info) && !asObject(value)->inherits(&BooleanObject::info)) + return value; + return static_cast(asObject(value))->internalValue(); +} + +static inline UString gap(JSValue space) +{ + space = unwrapBoxedPrimitive(space); + + // If the space value is a number, create a gap string with that number of spaces. + double spaceCount; + if (space.getNumber(spaceCount)) { + const int maxSpaceCount = 100; + int count; + if (spaceCount > maxSpaceCount) + count = maxSpaceCount; + else if (!(spaceCount > 0)) + count = 0; + else + count = static_cast(spaceCount); + UChar spaces[maxSpaceCount]; + for (int i = 0; i < count; ++i) + spaces[i] = ' '; + return UString(spaces, count); + } + + // If the space value is a string, use it as the gap string, otherwise use no gap string. + return space.getString(); +} + +// ------------------------------ PropertyNameForFunctionCall -------------------------------- + +inline PropertyNameForFunctionCall::PropertyNameForFunctionCall(const Identifier& identifier) + : m_identifier(&identifier) +{ +} + +inline PropertyNameForFunctionCall::PropertyNameForFunctionCall(unsigned number) + : m_identifier(0) + , m_number(number) +{ +} + +JSValue PropertyNameForFunctionCall::value(ExecState* exec) const +{ + if (!m_value) { + if (m_identifier) + m_value = jsString(exec, m_identifier->ustring()); + else + m_value = jsNumber(exec, m_number); + } + return m_value; +} + +// ------------------------------ Stringifier -------------------------------- + +Stringifier::Stringifier(ExecState* exec, JSValue replacer, JSValue space) + : m_nextStringifierToMark(exec->globalData().firstStringifierToMark) + , m_exec(exec) + , m_replacer(replacer) + , m_usingArrayReplacer(false) + , m_arrayReplacerPropertyNames(exec) + , m_replacerCallType(CallTypeNone) + , m_gap(gap(space)) +{ + exec->globalData().firstStringifierToMark = this; + + if (!m_replacer.isObject()) + return; + + if (asObject(m_replacer)->inherits(&JSArray::info)) { + m_usingArrayReplacer = true; + JSObject* array = asObject(m_replacer); + unsigned length = array->get(exec, exec->globalData().propertyNames->length).toUInt32(exec); + for (unsigned i = 0; i < length; ++i) { + JSValue name = array->get(exec, i); + if (exec->hadException()) + break; + UString propertyName; + if (!name.getString(propertyName)) + continue; + if (exec->hadException()) + return; + m_arrayReplacerPropertyNames.add(Identifier(exec, propertyName)); + } + return; + } + + m_replacerCallType = asObject(m_replacer)->getCallData(m_replacerCallData); +} + +Stringifier::~Stringifier() +{ + ASSERT(m_exec->globalData().firstStringifierToMark == this); + m_exec->globalData().firstStringifierToMark = m_nextStringifierToMark; +} + +void Stringifier::mark() +{ + for (Stringifier* stringifier = this; stringifier; stringifier = stringifier->m_nextStringifierToMark) { + size_t size = m_holderStack.size(); + for (size_t i = 0; i < size; ++i) { + JSObject* object = m_holderStack[i].object(); + if (!object->marked()) + object->mark(); + } + } +} + +JSValue Stringifier::stringify(JSValue value) +{ + JSObject* object = constructEmptyObject(m_exec); + if (m_exec->hadException()) + return jsNull(); + + PropertyNameForFunctionCall emptyPropertyName(m_exec->globalData().propertyNames->emptyIdentifier); + object->putDirect(m_exec->globalData().propertyNames->emptyIdentifier, value); + + StringBuilder result; + if (appendStringifiedValue(result, value, object, emptyPropertyName) != StringifySucceeded) + return jsUndefined(); + if (m_exec->hadException()) + return jsNull(); + + return jsString(m_exec, result); +} + +void Stringifier::appendQuotedString(StringBuilder& builder, const UString& value) +{ + int length = value.size(); + + // String length plus 2 for quote marks plus 8 so we can accomodate a few escaped characters. + builder.reserveCapacity(builder.size() + length + 2 + 8); + + builder.append('"'); + + const UChar* data = value.data(); + for (int i = 0; i < length; ++i) { + int start = i; + while (i < length && (data[i] > 0x1F && data[i] != '"' && data[i] != '\\')) + ++i; + builder.append(data + start, i - start); + if (i >= length) + break; + switch (data[i]) { + case '\t': + builder.append('\\'); + builder.append('t'); + break; + case '\r': + builder.append('\\'); + builder.append('r'); + break; + case '\n': + builder.append('\\'); + builder.append('n'); + break; + case '\f': + builder.append('\\'); + builder.append('f'); + break; + case '\b': + builder.append('\\'); + builder.append('b'); + break; + case '"': + builder.append('\\'); + builder.append('"'); + break; + case '\\': + builder.append('\\'); + builder.append('\\'); + break; + default: + static const char hexDigits[] = "0123456789abcdef"; + UChar ch = data[i]; + UChar hex[] = { '\\', 'u', hexDigits[(ch >> 12) & 0xF], hexDigits[(ch >> 8) & 0xF], hexDigits[(ch >> 4) & 0xF], hexDigits[ch & 0xF] }; + builder.append(hex, sizeof(hex) / sizeof(UChar)); + break; + } + } + + builder.append('"'); +} + +inline JSValue Stringifier::toJSON(JSValue value, const PropertyNameForFunctionCall& propertyName) +{ + ASSERT(!m_exec->hadException()); + if (!value.isObject() || !asObject(value)->hasProperty(m_exec, m_exec->globalData().propertyNames->toJSON)) + return value; + + JSValue toJSONFunction = asObject(value)->get(m_exec, m_exec->globalData().propertyNames->toJSON); + if (m_exec->hadException()) + return jsNull(); + + if (!toJSONFunction.isObject()) + return value; + + JSObject* object = asObject(toJSONFunction); + CallData callData; + CallType callType = object->getCallData(callData); + if (callType == CallTypeNone) + return value; + + JSValue list[] = { propertyName.value(m_exec) }; + ArgList args(list, sizeof(list) / sizeof(JSValue)); + return call(m_exec, object, callType, callData, value, args); +} + +Stringifier::StringifyResult Stringifier::appendStringifiedValue(StringBuilder& builder, JSValue value, JSObject* holder, const PropertyNameForFunctionCall& propertyName) +{ + // Call the toJSON function. + value = toJSON(value, propertyName); + if (m_exec->hadException()) + return StringifyFailed; + if (value.isUndefined() && !holder->inherits(&JSArray::info)) + return StringifyFailedDueToUndefinedValue; + + // Call the replacer function. + if (m_replacerCallType != CallTypeNone) { + JSValue list[] = { propertyName.value(m_exec), value }; + ArgList args(list, sizeof(list) / sizeof(JSValue)); + value = call(m_exec, m_replacer, m_replacerCallType, m_replacerCallData, holder, args); + if (m_exec->hadException()) + return StringifyFailed; + } + + if (value.isNull()) { + builder.append("null"); + return StringifySucceeded; + } + + value = unwrapBoxedPrimitive(value); + + if (value.isBoolean()) { + builder.append(value.getBoolean() ? "true" : "false"); + return StringifySucceeded; + } + + UString stringValue; + if (value.getString(stringValue)) { + appendQuotedString(builder, stringValue); + return StringifySucceeded; + } + + double numericValue; + if (value.getNumber(numericValue)) { + if (!isfinite(numericValue)) + builder.append("null"); + else + builder.append(UString::from(numericValue)); + return StringifySucceeded; + } + + if (!value.isObject()) + return StringifyFailed; + + JSObject* object = asObject(value); + + // Handle cycle detection, and put the holder on the stack. + if (!m_holderCycleDetector.add(object).second) { + throwError(m_exec, TypeError); + return StringifyFailed; + } + bool holderStackWasEmpty = m_holderStack.isEmpty(); + m_holderStack.append(object); + if (!holderStackWasEmpty) + return StringifySucceeded; + + // If this is the outermost call, then loop to handle everything on the holder stack. + TimeoutChecker localTimeoutChecker(m_exec->globalData().timeoutChecker); + localTimeoutChecker.reset(); + unsigned tickCount = localTimeoutChecker.ticksUntilNextCheck(); + do { + while (m_holderStack.last().appendNextProperty(*this, builder)) { + if (m_exec->hadException()) + return StringifyFailed; + if (!--tickCount) { + if (localTimeoutChecker.didTimeOut(m_exec)) { + m_exec->setException(createInterruptedExecutionException(&m_exec->globalData())); + return StringifyFailed; + } + tickCount = localTimeoutChecker.ticksUntilNextCheck(); + } + } + m_holderCycleDetector.remove(m_holderStack.last().object()); + m_holderStack.removeLast(); + } while (!m_holderStack.isEmpty()); + return StringifySucceeded; +} + +inline bool Stringifier::willIndent() const +{ + return !m_gap.isEmpty(); +} + +inline void Stringifier::indent() +{ + // Use a single shared string, m_repeatedGap, so we don't keep allocating new ones as we indent and unindent. + int newSize = m_indent.size() + m_gap.size(); + if (newSize > m_repeatedGap.size()) + m_repeatedGap.append(m_gap); + ASSERT(newSize <= m_repeatedGap.size()); + m_indent = m_repeatedGap.substr(0, newSize); +} + +inline void Stringifier::unindent() +{ + ASSERT(m_indent.size() >= m_gap.size()); + m_indent = m_repeatedGap.substr(0, m_indent.size() - m_gap.size()); +} + +inline void Stringifier::startNewLine(StringBuilder& builder) const +{ + if (m_gap.isEmpty()) + return; + builder.append('\n'); + builder.append(m_indent); +} + +inline Stringifier::Holder::Holder(JSObject* object) + : m_object(object) + , m_isArray(object->inherits(&JSArray::info)) + , m_index(0) +{ +} + +bool Stringifier::Holder::appendNextProperty(Stringifier& stringifier, StringBuilder& builder) +{ + ASSERT(m_index <= m_size); + + ExecState* exec = stringifier.m_exec; + + // First time through, initialize. + if (!m_index) { + if (m_isArray) { + m_isJSArray = isJSArray(&exec->globalData(), m_object); + m_size = m_object->get(exec, exec->globalData().propertyNames->length).toUInt32(exec); + builder.append('['); + } else { + if (stringifier.m_usingArrayReplacer) + m_propertyNames = stringifier.m_arrayReplacerPropertyNames.data(); + else { + PropertyNameArray objectPropertyNames(exec); + m_object->getPropertyNames(exec, objectPropertyNames); + m_propertyNames = objectPropertyNames.releaseData(); + } + m_size = m_propertyNames->propertyNameVector().size(); + builder.append('{'); + } + stringifier.indent(); + } + + // Last time through, finish up and return false. + if (m_index == m_size) { + stringifier.unindent(); + if (m_size && builder[builder.size() - 1] != '{') + stringifier.startNewLine(builder); + builder.append(m_isArray ? ']' : '}'); + return false; + } + + // Handle a single element of the array or object. + unsigned index = m_index++; + unsigned rollBackPoint = 0; + StringifyResult stringifyResult; + if (m_isArray) { + // Get the value. + JSValue value; + if (m_isJSArray && asArray(m_object)->canGetIndex(index)) + value = asArray(m_object)->getIndex(index); + else { + PropertySlot slot(m_object); + if (!m_object->getOwnPropertySlot(exec, index, slot)) + slot.setUndefined(); + if (exec->hadException()) + return false; + value = slot.getValue(exec, index); + } + + // Append the separator string. + if (index) + builder.append(','); + stringifier.startNewLine(builder); + + // Append the stringified value. + stringifyResult = stringifier.appendStringifiedValue(builder, value, m_object, index); + } else { + // Get the value. + PropertySlot slot(m_object); + Identifier& propertyName = m_propertyNames->propertyNameVector()[index]; + if (!m_object->getOwnPropertySlot(exec, propertyName, slot)) + return true; + JSValue value = slot.getValue(exec, propertyName); + if (exec->hadException()) + return false; + + rollBackPoint = builder.size(); + + // Append the separator string. + if (builder[rollBackPoint - 1] != '{') + builder.append(','); + stringifier.startNewLine(builder); + + // Append the property name. + appendQuotedString(builder, propertyName.ustring()); + builder.append(':'); + if (stringifier.willIndent()) + builder.append(' '); + + // Append the stringified value. + stringifyResult = stringifier.appendStringifiedValue(builder, value, m_object, propertyName); + } + + // From this point on, no access to the this pointer or to any members, because the + // Holder object may have moved if the call to stringify pushed a new Holder onto + // m_holderStack. + + switch (stringifyResult) { + case StringifyFailed: + builder.append("null"); + break; + case StringifySucceeded: + break; + case StringifyFailedDueToUndefinedValue: + // This only occurs when get an undefined value for an object property. + // In this case we don't want the separator and property name that we + // already appended, so roll back. + builder = builder.substr(0, rollBackPoint); + break; + } + + return true; +} + +// ------------------------------ JSONObject -------------------------------- + +const ClassInfo JSONObject::info = { "JSON", 0, 0, ExecState::jsonTable }; + +/* Source for JSONObject.lut.h +@begin jsonTable + parse JSONProtoFuncParse DontEnum|Function 1 + stringify JSONProtoFuncStringify DontEnum|Function 1 +@end +*/ + +// ECMA 15.8 + +bool JSONObject::getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot& slot) +{ + const HashEntry* entry = ExecState::jsonTable(exec)->entry(exec, propertyName); + if (!entry) + return JSObject::getOwnPropertySlot(exec, propertyName, slot); + + ASSERT(entry->attributes() & Function); + setUpStaticFunctionSlot(exec, entry, this, propertyName, slot); + return true; +} + +void JSONObject::markStringifiers(Stringifier* stringifier) +{ + stringifier->mark(); +} + +class Walker { +public: + Walker(ExecState* exec, JSObject* function, CallType callType, CallData callData) + : m_exec(exec) + , m_function(function) + , m_callType(callType) + , m_callData(callData) + { + } + JSValue walk(JSValue unfiltered); +private: + JSValue callReviver(JSValue property, JSValue unfiltered) + { + JSValue args[] = { property, unfiltered }; + ArgList argList(args, 2); + return call(m_exec, m_function, m_callType, m_callData, jsNull(), argList); + } + + friend class Holder; + + ExecState* m_exec; + JSObject* m_function; + CallType m_callType; + CallData m_callData; +}; + +enum WalkerState { StateUnknown, ArrayStartState, ArrayStartVisitMember, ArrayEndVisitMember, + ObjectStartState, ObjectStartVisitMember, ObjectEndVisitMember }; +NEVER_INLINE JSValue Walker::walk(JSValue unfiltered) +{ + Vector propertyStack; + Vector indexStack; + Vector objectStack; + Vector arrayStack; + + Vector stateStack; + WalkerState state = StateUnknown; + JSValue inValue = unfiltered; + JSValue outValue = jsNull(); + while (1) { + switch (state) { + arrayStartState: + case ArrayStartState: { + ASSERT(inValue.isObject()); + ASSERT(isJSArray(&m_exec->globalData(), asObject(inValue))); + JSArray* array = asArray(inValue); + arrayStack.append(array); + indexStack.append(0); + // fallthrough + } + arrayStartVisitMember: + case ArrayStartVisitMember: { + JSArray* array = arrayStack.last(); + uint32_t index = indexStack.last(); + if (index == array->length()) { + outValue = array; + arrayStack.removeLast(); + indexStack.removeLast(); + break; + } + inValue = array->getIndex(index); + if (inValue.isObject()) { + stateStack.append(ArrayEndVisitMember); + goto stateUnknown; + } else + outValue = inValue; + // fallthrough + } + case ArrayEndVisitMember: { + JSArray* array = arrayStack.last(); + array->setIndex(indexStack.last(), callReviver(jsString(m_exec, UString::from(indexStack.last())), outValue)); + if (m_exec->hadException()) + return jsNull(); + indexStack.last()++; + goto arrayStartVisitMember; + } + objectStartState: + case ObjectStartState: { + ASSERT(inValue.isObject()); + ASSERT(!isJSArray(&m_exec->globalData(), asObject(inValue))); + JSObject* object = asObject(inValue); + objectStack.append(object); + indexStack.append(0); + propertyStack.append(PropertyNameArray(m_exec)); + object->getPropertyNames(m_exec, propertyStack.last()); + // fallthrough + } + objectStartVisitMember: + case ObjectStartVisitMember: { + JSObject* object = objectStack.last(); + uint32_t index = indexStack.last(); + PropertyNameArray& properties = propertyStack.last(); + if (index == properties.size()) { + outValue = object; + objectStack.removeLast(); + indexStack.removeLast(); + propertyStack.removeLast(); + break; + } + PropertySlot slot; + object->getOwnPropertySlot(m_exec, properties[index], slot); + inValue = slot.getValue(m_exec, properties[index]); + ASSERT(!m_exec->hadException()); + if (inValue.isObject()) { + stateStack.append(ObjectEndVisitMember); + goto stateUnknown; + } else + outValue = inValue; + // fallthrough + } + case ObjectEndVisitMember: { + JSObject* object = objectStack.last(); + Identifier prop = propertyStack.last()[indexStack.last()]; + PutPropertySlot slot; + object->put(m_exec, prop, callReviver(jsString(m_exec, prop.ustring()), outValue), slot); + if (m_exec->hadException()) + return jsNull(); + indexStack.last()++; + goto objectStartVisitMember; + } + stateUnknown: + case StateUnknown: + if (!inValue.isObject()) { + outValue = inValue; + break; + } + if (isJSArray(&m_exec->globalData(), asObject(inValue))) + goto arrayStartState; + goto objectStartState; + } + if (stateStack.isEmpty()) + break; + state = stateStack.last(); + stateStack.removeLast(); + } + return callReviver(jsEmptyString(m_exec), outValue); +} + +// ECMA-262 v5 15.12.2 +JSValue JSC_HOST_CALL JSONProtoFuncParse(ExecState* exec, JSObject*, JSValue, const ArgList& args) +{ + if (args.isEmpty()) + return throwError(exec, GeneralError, "JSON.parse requires at least one parameter"); + JSValue value = args.at(0); + UString source = value.toString(exec); + if (exec->hadException()) + return jsNull(); + + LiteralParser jsonParser(exec, source, LiteralParser::StrictJSON); + JSValue unfiltered = jsonParser.tryLiteralParse(); + if (!unfiltered) + return throwError(exec, SyntaxError, "Unable to parse JSON string"); + + if (args.size() < 2) + return unfiltered; + + JSValue function = args.at(1); + CallData callData; + CallType callType = function.getCallData(callData); + if (callType == CallTypeNone) + return unfiltered; + return Walker(exec, asObject(function), callType, callData).walk(unfiltered); +} + +// ECMA-262 v5 15.12.3 +JSValue JSC_HOST_CALL JSONProtoFuncStringify(ExecState* exec, JSObject*, JSValue, const ArgList& args) +{ + if (args.isEmpty()) + return throwError(exec, GeneralError, "No input to stringify"); + JSValue value = args.at(0); + JSValue replacer = args.at(1); + JSValue space = args.at(2); + return Stringifier(exec, replacer, space).stringify(value); +} + +} // namespace JSC diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/JSONObject.h b/src/3rdparty/webkit/JavaScriptCore/runtime/JSONObject.h new file mode 100644 index 0000000..8d5364a --- /dev/null +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/JSONObject.h @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2009 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef JSONObject_h +#define JSONObject_h + +#include "JSObject.h" + +namespace JSC { + + class Stringifier; + + class JSONObject : public JSObject { + public: + JSONObject(PassRefPtr structure) + : JSObject(structure) + { + } + + static PassRefPtr createStructure(JSValue prototype) + { + return Structure::create(prototype, TypeInfo(ObjectType)); + } + + static void markStringifiers(Stringifier*); + + private: + virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&); + + virtual const ClassInfo* classInfo() const { return &info; } + static const ClassInfo info; + }; + +} // namespace JSC + +#endif // JSONObject_h diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/JSObject.h b/src/3rdparty/webkit/JavaScriptCore/runtime/JSObject.h index 54805f2..db47ac7 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/JSObject.h +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/JSObject.h @@ -203,9 +203,6 @@ namespace JSC { return Structure::create(prototype, TypeInfo(ObjectType, HasStandardGetOwnPropertySlot)); } - protected: - bool getOwnPropertySlotForWrite(ExecState*, const Identifier&, PropertySlot&, bool& slotIsWriteable); - private: ConstPropertyStorage propertyStorage() const { return (isUsingInlineStorage() ? m_inlineStorage : m_externalStorage); } PropertyStorage propertyStorage() { return (isUsingInlineStorage() ? m_inlineStorage : m_externalStorage); } @@ -328,30 +325,6 @@ ALWAYS_INLINE bool JSObject::inlineGetOwnPropertySlot(ExecState* exec, const Ide return false; } -ALWAYS_INLINE bool JSObject::getOwnPropertySlotForWrite(ExecState* exec, const Identifier& propertyName, PropertySlot& slot, bool& slotIsWriteable) -{ - unsigned attributes; - if (JSValue* location = getDirectLocation(propertyName, attributes)) { - if (m_structure->hasGetterSetterProperties() && location[0].isGetterSetter()) { - slotIsWriteable = false; - fillGetterPropertySlot(slot, location); - } else { - slotIsWriteable = !(attributes & ReadOnly); - slot.setValueSlot(this, location, offsetForLocation(location)); - } - return true; - } - - // non-standard Netscape extension - if (propertyName == exec->propertyNames().underscoreProto) { - slot.setValue(prototype()); - slotIsWriteable = false; - return true; - } - - return false; -} - // It may seem crazy to inline a function this large, especially a virtual function, // but it makes a big difference to property lookup that derived classes can inline their // base class call to this. diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/JSStaticScopeObject.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/JSStaticScopeObject.cpp index 0253fdd..85907c8 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/JSStaticScopeObject.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/JSStaticScopeObject.cpp @@ -76,9 +76,4 @@ inline bool JSStaticScopeObject::getOwnPropertySlot(ExecState*, const Identifier return symbolTableGet(propertyName, slot); } -inline bool JSStaticScopeObject::getOwnPropertySlot(ExecState*, const Identifier& propertyName, PropertySlot& slot, bool& slotIsWriteable) -{ - return symbolTableGet(propertyName, slot, slotIsWriteable); -} - } diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/JSStaticScopeObject.h b/src/3rdparty/webkit/JavaScriptCore/runtime/JSStaticScopeObject.h index 7e7ce65..2caf540 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/JSStaticScopeObject.h +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/JSStaticScopeObject.h @@ -54,7 +54,6 @@ namespace JSC{ bool isDynamicScope() const; virtual JSObject* toThisObject(ExecState*) const; virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&); - virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&, bool& slotIsWriteable); virtual void put(ExecState*, const Identifier&, JSValue, PutPropertySlot&); void putWithAttributes(ExecState*, const Identifier&, JSValue, unsigned attributes); diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/LiteralParser.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/LiteralParser.cpp index 10f9a13..3f3fab9 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/LiteralParser.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/LiteralParser.cpp @@ -28,31 +28,12 @@ #include "JSArray.h" #include "JSString.h" +#include "Lexer.h" #include +#include namespace JSC { -class LiteralParser::StackGuard { -public: - StackGuard(LiteralParser* parser) - : m_parser(parser) - { - m_parser->m_depth++; - } - ~StackGuard() - { - m_parser->m_depth--; - } - bool isSafe() { return m_parser->m_depth < 10; } -private: - LiteralParser* m_parser; -}; - -static bool isSafeStringCharacter(UChar c) -{ - return (c >= ' ' && c <= 0xff && c != '\\') || c == '\t'; -} - LiteralParser::TokenType LiteralParser::Lexer::lex(LiteralParserToken& token) { while (m_ptr < m_end && isASCIISpace(*m_ptr)) @@ -100,8 +81,33 @@ LiteralParser::TokenType LiteralParser::Lexer::lex(LiteralParserToken& token) token.end = ++m_ptr; return TokColon; case '"': - return lexString(token); - + if (m_mode == StrictJSON) + return lexString(token); + return lexString(token); + case 't': + if (m_end - m_ptr >= 4 && m_ptr[1] == 'r' && m_ptr[2] == 'u' && m_ptr[3] == 'e') { + m_ptr += 4; + token.type = TokTrue; + token.end = m_ptr; + return TokTrue; + } + break; + case 'f': + if (m_end - m_ptr >= 5 && m_ptr[1] == 'a' && m_ptr[2] == 'l' && m_ptr[3] == 's' && m_ptr[4] == 'e') { + m_ptr += 5; + token.type = TokFalse; + token.end = m_ptr; + return TokFalse; + } + break; + case 'n': + if (m_end - m_ptr >= 4 && m_ptr[1] == 'u' && m_ptr[2] == 'l' && m_ptr[3] == 'l') { + m_ptr += 4; + token.type = TokNull; + token.end = m_ptr; + return TokNull; + } + break; case '-': case '0': case '1': @@ -118,16 +124,80 @@ LiteralParser::TokenType LiteralParser::Lexer::lex(LiteralParserToken& token) return TokError; } -LiteralParser::TokenType LiteralParser::Lexer::lexString(LiteralParserToken& token) +static inline bool isSafeStringCharacter(UChar c) +{ + return (c >= ' ' && c <= 0xff && c != '\\' && c != '"') || c == '\t'; +} + +template LiteralParser::TokenType LiteralParser::Lexer::lexString(LiteralParserToken& token) { ++m_ptr; - while (m_ptr < m_end && isSafeStringCharacter(*m_ptr) && *m_ptr != '"') - ++m_ptr; - if (m_ptr >= m_end || *m_ptr != '"') { - token.type = TokError; - token.end = ++m_ptr; + const UChar* runStart; + token.stringToken = UString(); + do { + runStart = m_ptr; + while (m_ptr < m_end && isSafeStringCharacter(*m_ptr)) + ++m_ptr; + if (runStart < m_ptr) + token.stringToken.append(runStart, m_ptr - runStart); + if ((mode == StrictJSON) && m_ptr < m_end && *m_ptr == '\\') { + ++m_ptr; + if (m_ptr >= m_end) + return TokError; + switch (*m_ptr) { + case '"': + token.stringToken.append('"'); + m_ptr++; + break; + case '\\': + token.stringToken.append('\\'); + m_ptr++; + break; + case '/': + token.stringToken.append('/'); + m_ptr++; + break; + case 'b': + token.stringToken.append('\b'); + m_ptr++; + break; + case 'f': + token.stringToken.append('\f'); + m_ptr++; + break; + case 'n': + token.stringToken.append('\n'); + m_ptr++; + break; + case 'r': + token.stringToken.append('\r'); + m_ptr++; + break; + case 't': + token.stringToken.append('\t'); + m_ptr++; + break; + + case 'u': + if ((m_end - m_ptr) < 5) // uNNNN == 5 characters + return TokError; + for (int i = 1; i < 5; i++) { + if (!isASCIIHexDigit(m_ptr[i])) + return TokError; + } + token.stringToken.append(JSC::Lexer::convertUnicode(m_ptr[1], m_ptr[2], m_ptr[3], m_ptr[4])); + m_ptr += 5; + break; + + default: + return TokError; + } + } + } while ((mode == StrictJSON) && m_ptr != runStart && (m_ptr < m_end) && *m_ptr != '"'); + + if (m_ptr >= m_end || *m_ptr != '"') return TokError; - } + token.type = TokString; token.end = ++m_ptr; return TokString; @@ -167,7 +237,7 @@ LiteralParser::TokenType LiteralParser::Lexer::lexNumber(LiteralParserToken& tok if (m_ptr < m_end && *m_ptr == '.') { ++m_ptr; // [0-9]+ - if (m_ptr >= m_end && !isASCIIDigit(*m_ptr)) + if (m_ptr >= m_end || !isASCIIDigit(*m_ptr)) return TokError; ++m_ptr; @@ -184,7 +254,7 @@ LiteralParser::TokenType LiteralParser::Lexer::lexNumber(LiteralParserToken& tok ++m_ptr; // [0-9]+ - if (m_ptr >= m_end && !isASCIIDigit(*m_ptr)) + if (m_ptr >= m_end || !isASCIIDigit(*m_ptr)) return TokError; ++m_ptr; @@ -194,113 +264,186 @@ LiteralParser::TokenType LiteralParser::Lexer::lexNumber(LiteralParserToken& tok token.type = TokNumber; token.end = m_ptr; + Vector buffer(token.end - token.start + 1); + int i; + for (i = 0; i < token.end - token.start; i++) { + ASSERT(static_cast(token.start[i]) == token.start[i]); + buffer[i] = static_cast(token.start[i]); + } + buffer[i] = 0; + char* end; + token.numberToken = WTF::strtod(buffer.data(), &end); + ASSERT(buffer.data() + (token.end - token.start) == end); return TokNumber; } -JSValue LiteralParser::parseStatement() +JSValue LiteralParser::parse(ParserState initialState) { - StackGuard guard(this); - if (!guard.isSafe()) - return abortParse(); + ParserState state = initialState; + MarkedArgumentBuffer objectStack; + JSValue lastValue; + Vector stateStack; + Vector identifierStack; + while (1) { + switch(state) { + startParseArray: + case StartParseArray: { + JSArray* array = constructEmptyArray(m_exec); + objectStack.append(array); + // fallthrough + } + doParseArrayStartExpression: + case DoParseArrayStartExpression: { + if (m_lexer.next() == TokRBracket) { + m_lexer.next(); + lastValue = objectStack.last(); + objectStack.removeLast(); + break; + } - switch (m_lexer.currentToken().type) { - case TokLBracket: - case TokNumber: - case TokString: - return parseExpression(); - case TokLParen: { - m_lexer.next(); - JSValue result = parseExpression(); - if (m_aborted || m_lexer.currentToken().type != TokRParen) - return abortParse(); - m_lexer.next(); - return result; - } - default: - return abortParse(); - } -} + stateStack.append(DoParseArrayEndExpression); + goto startParseExpression; + } + case DoParseArrayEndExpression: { + asArray(objectStack.last())->push(m_exec, lastValue); + + if (m_lexer.currentToken().type == TokComma) + goto doParseArrayStartExpression; -JSValue LiteralParser::parseExpression() -{ - StackGuard guard(this); - if (!guard.isSafe()) - return abortParse(); - switch (m_lexer.currentToken().type) { - case TokLBracket: - return parseArray(); - case TokLBrace: - return parseObject(); - case TokString: { - Lexer::LiteralParserToken stringToken = m_lexer.currentToken(); - m_lexer.next(); - return jsString(m_exec, UString(stringToken.start + 1, stringToken.end - stringToken.start - 2)); - } - case TokNumber: { - Lexer::LiteralParserToken numberToken = m_lexer.currentToken(); - m_lexer.next(); - return jsNumber(m_exec, UString(numberToken.start, numberToken.end - numberToken.start).toDouble()); - } - default: - return JSValue(); - } -} + if (m_lexer.currentToken().type != TokRBracket) + return JSValue(); + + m_lexer.next(); + lastValue = objectStack.last(); + objectStack.removeLast(); + break; + } + startParseObject: + case StartParseObject: { + JSObject* object = constructEmptyObject(m_exec); + objectStack.append(object); -JSValue LiteralParser::parseArray() -{ - StackGuard guard(this); - if (!guard.isSafe()) - return abortParse(); - JSArray* array = constructEmptyArray(m_exec); - while (true) { - m_lexer.next(); - JSValue value = parseExpression(); - if (m_aborted) - return JSValue(); - if (!value) - break; - array->push(m_exec, value); + TokenType type = m_lexer.next(); + if (type == TokString) { + Lexer::LiteralParserToken identifierToken = m_lexer.currentToken(); - if (m_lexer.currentToken().type != TokComma) - break; - } - if (m_lexer.currentToken().type != TokRBracket) - return abortParse(); + // Check for colon + if (m_lexer.next() != TokColon) + return JSValue(); + + m_lexer.next(); + identifierStack.append(Identifier(m_exec, identifierToken.stringToken)); + stateStack.append(DoParseObjectEndExpression); + goto startParseExpression; + } else if (type != TokRBrace) + return JSValue(); + m_lexer.next(); + lastValue = objectStack.last(); + objectStack.removeLast(); + break; + } + doParseObjectStartExpression: + case DoParseObjectStartExpression: { + TokenType type = m_lexer.next(); + if (type != TokString) + return JSValue(); + Lexer::LiteralParserToken identifierToken = m_lexer.currentToken(); - m_lexer.next(); - return array; -} + // Check for colon + if (m_lexer.next() != TokColon) + return JSValue(); -JSValue LiteralParser::parseObject() -{ - StackGuard guard(this); - if (!guard.isSafe()) - return abortParse(); - JSObject* object = constructEmptyObject(m_exec); - - while (m_lexer.next() == TokString) { - Lexer::LiteralParserToken identifierToken = m_lexer.currentToken(); - - // Check for colon - if (m_lexer.next() != TokColon) - return abortParse(); - m_lexer.next(); - - JSValue value = parseExpression(); - if (!value || m_aborted) - return abortParse(); - - Identifier ident(m_exec, identifierToken.start + 1, identifierToken.end - identifierToken.start - 2); - object->putDirect(ident, value); - - if (m_lexer.currentToken().type != TokComma) - break; + m_lexer.next(); + identifierStack.append(Identifier(m_exec, identifierToken.stringToken)); + stateStack.append(DoParseObjectEndExpression); + goto startParseExpression; + } + case DoParseObjectEndExpression: + { + asObject(objectStack.last())->putDirect(identifierStack.last(), lastValue); + identifierStack.removeLast(); + if (m_lexer.currentToken().type == TokComma) + goto doParseObjectStartExpression; + if (m_lexer.currentToken().type != TokRBrace) + return JSValue(); + m_lexer.next(); + lastValue = objectStack.last(); + objectStack.removeLast(); + break; + } + startParseExpression: + case StartParseExpression: { + switch (m_lexer.currentToken().type) { + case TokLBracket: + goto startParseArray; + case TokLBrace: + goto startParseObject; + case TokString: { + Lexer::LiteralParserToken stringToken = m_lexer.currentToken(); + m_lexer.next(); + lastValue = jsString(m_exec, stringToken.stringToken); + break; + } + case TokNumber: { + Lexer::LiteralParserToken numberToken = m_lexer.currentToken(); + m_lexer.next(); + lastValue = jsNumber(m_exec, numberToken.numberToken); + break; + } + case TokNull: + m_lexer.next(); + lastValue = jsNull(); + break; + + case TokTrue: + m_lexer.next(); + lastValue = jsBoolean(true); + break; + + case TokFalse: + m_lexer.next(); + lastValue = jsBoolean(false); + break; + + default: + // Error + return JSValue(); + } + break; + } + case StartParseStatement: { + switch (m_lexer.currentToken().type) { + case TokLBracket: + case TokNumber: + case TokString: + goto startParseExpression; + + case TokLParen: { + m_lexer.next(); + stateStack.append(StartParseStatementEndStatement); + goto startParseExpression; + } + default: + return JSValue(); + } + } + case StartParseStatementEndStatement: { + ASSERT(stateStack.isEmpty()); + if (m_lexer.currentToken().type != TokRParen) + return JSValue(); + if (m_lexer.next() == TokEnd) + return lastValue; + return JSValue(); + } + default: + ASSERT_NOT_REACHED(); + } + if (stateStack.isEmpty()) + return lastValue; + state = stateStack.last(); + stateStack.removeLast(); + continue; } - - if (m_lexer.currentToken().type != TokRBrace) - return abortParse(); - m_lexer.next(); - return object; } } diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/LiteralParser.h b/src/3rdparty/webkit/JavaScriptCore/runtime/LiteralParser.h index a72e3d0..bceee7c 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/LiteralParser.h +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/LiteralParser.h @@ -34,27 +34,31 @@ namespace JSC { class LiteralParser { public: - LiteralParser(ExecState* exec, const UString& s) + typedef enum { StrictJSON, NonStrictJSON } ParserMode; + LiteralParser(ExecState* exec, const UString& s, ParserMode mode) : m_exec(exec) - , m_lexer(s) - , m_depth(0) - , m_aborted(false) + , m_lexer(s, mode) + , m_mode(mode) { } JSValue tryLiteralParse() { m_lexer.next(); - JSValue result = parseStatement(); - if (m_aborted || m_lexer.currentToken().type != TokEnd) + JSValue result = parse(m_mode == StrictJSON ? StartParseExpression : StartParseStatement); + if (m_lexer.currentToken().type != TokEnd) return JSValue(); return result; } private: - + enum ParserState { StartParseObject, StartParseArray, StartParseExpression, + StartParseStatement, StartParseStatementEndStatement, + DoParseObjectStartExpression, DoParseObjectEndExpression, + DoParseArrayStartExpression, DoParseArrayEndExpression }; enum TokenType { TokLBracket, TokRBracket, TokLBrace, TokRBrace, TokString, TokIdentifier, TokNumber, TokColon, - TokLParen, TokRParen, TokComma, TokEnd, TokError }; + TokLParen, TokRParen, TokComma, TokTrue, TokFalse, + TokNull, TokEnd, TokError }; class Lexer { public: @@ -62,9 +66,12 @@ namespace JSC { TokenType type; const UChar* start; const UChar* end; + UString stringToken; + double numberToken; }; - Lexer(const UString& s) + Lexer(const UString& s, ParserMode mode) : m_string(s) + , m_mode(mode) , m_ptr(s.data()) , m_end(s.data() + s.size()) { @@ -82,30 +89,21 @@ namespace JSC { private: TokenType lex(LiteralParserToken&); - TokenType lexString(LiteralParserToken&); + template TokenType lexString(LiteralParserToken&); TokenType lexNumber(LiteralParserToken&); LiteralParserToken m_currentToken; UString m_string; + ParserMode m_mode; const UChar* m_ptr; const UChar* m_end; }; class StackGuard; - JSValue parseStatement(); - JSValue parseExpression(); - JSValue parseArray(); - JSValue parseObject(); - - JSValue abortParse() - { - m_aborted = true; - return JSValue(); - } + JSValue parse(ParserState); ExecState* m_exec; LiteralParser::Lexer m_lexer; - int m_depth; - bool m_aborted; + ParserMode m_mode; }; } diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/PropertySlot.h b/src/3rdparty/webkit/JavaScriptCore/runtime/PropertySlot.h index 7af60ce..da0d152 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/PropertySlot.h +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/PropertySlot.h @@ -79,16 +79,6 @@ namespace JSC { return m_offset; } - void putValue(JSValue value) - { - if (m_getValue == JSC_VALUE_SLOT_MARKER) { - *m_data.valueSlot = value; - return; - } - ASSERT(m_getValue == JSC_REGISTER_SLOT_MARKER); - *m_data.registerSlot = JSValue(value); - } - void setValueSlot(JSValue* valueSlot) { ASSERT(valueSlot); diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/ScopeChain.h b/src/3rdparty/webkit/JavaScriptCore/runtime/ScopeChain.h index 6f1560a..3b10d32 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/ScopeChain.h +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/ScopeChain.h @@ -21,7 +21,7 @@ #ifndef ScopeChain_h #define ScopeChain_h -#include +#include "FastAllocBase.h" namespace JSC { @@ -30,7 +30,7 @@ namespace JSC { class JSObject; class ScopeChainIterator; - class ScopeChainNode { + class ScopeChainNode : public WTF::FastAllocBase { public: ScopeChainNode(ScopeChainNode* next, JSObject* object, JSGlobalData* globalData, JSObject* globalThis) : next(next) diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/Structure.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/Structure.cpp index 3597a5c..5dfd919 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/Structure.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/Structure.cpp @@ -306,8 +306,11 @@ void Structure::getEnumerablePropertyNames(ExecState* exec, PropertyNameArray& p } if (shouldCache) { + StructureChain* protoChain = prototypeChain(exec); m_cachedPropertyNameArrayData = propertyNames.data(); - m_cachedPropertyNameArrayData->setCachedPrototypeChain(prototypeChain(exec)); + if (!protoChain->isCacheable()) + return; + m_cachedPropertyNameArrayData->setCachedPrototypeChain(protoChain); m_cachedPropertyNameArrayData->setCachedStructure(this); } } @@ -407,6 +410,7 @@ PassRefPtr Structure::addPropertyTransition(Structure* structure, con if (structure->transitionCount() > s_maxTransitionLength) { RefPtr transition = toDictionaryTransition(structure); + ASSERT(structure != transition); offset = transition->put(propertyName, attributes, specificValue); if (transition->propertyStorageSize() > transition->propertyStorageCapacity()) transition->growPropertyStorageCapacity(); diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/StructureChain.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/StructureChain.cpp index 085876c..85049b1 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/StructureChain.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/StructureChain.cpp @@ -46,4 +46,15 @@ StructureChain::StructureChain(Structure* head) m_vector[i] = 0; } +bool StructureChain::isCacheable() const +{ + uint32_t i = 0; + + while (m_vector[i]) { + if (m_vector[i++]->isDictionary()) + return false; + } + return true; +} + } // namespace JSC diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/StructureChain.h b/src/3rdparty/webkit/JavaScriptCore/runtime/StructureChain.h index 795e649..c48749d 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/StructureChain.h +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/StructureChain.h @@ -39,6 +39,7 @@ namespace JSC { public: static PassRefPtr create(Structure* head) { return adoptRef(new StructureChain(head)); } RefPtr* head() { return m_vector.get(); } + bool isCacheable() const; private: StructureChain(Structure* head); diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/UString.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/UString.cpp index 0eb46da..118751e 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/UString.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/UString.cpp @@ -63,7 +63,7 @@ extern const double NaN; extern const double Inf; // This number must be at least 2 to avoid sharing empty, null as well as 1 character strings from SmallStrings. -static const int minLengthToShare = 30; +static const int minLengthToShare = 10; static inline size_t overflowIndicator() { return std::numeric_limits::max(); } static inline size_t maxUChars() { return std::numeric_limits::max() / sizeof(UChar); } @@ -243,6 +243,15 @@ PassRefPtr UString::Rep::create(UChar* string, int length, PassRef return rep; } +UString::SharedUChar* UString::Rep::sharedBuffer() +{ + UString::BaseString* base = baseString(); + if (len < minLengthToShare) + return 0; + + return base->sharedBuffer(); +} + void UString::Rep::destroy() { checkConsistency(); @@ -385,10 +394,6 @@ void UString::Rep::checkConsistency() const UString::SharedUChar* UString::BaseString::sharedBuffer() { - - if (len < minLengthToShare) - return 0; - if (!m_sharedBuffer) setSharedBuffer(SharedUChar::create(new OwnFastMallocPtr(buf))); return m_sharedBuffer; diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/UString.h b/src/3rdparty/webkit/JavaScriptCore/runtime/UString.h index 6852d91..d01b75d 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/UString.h +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/UString.h @@ -107,6 +107,7 @@ namespace JSC { // Uses SharedUChar to have joint ownership over the UChar*. static PassRefPtr create(UChar*, int, PassRefPtr); + SharedUChar* sharedBuffer(); void destroy(); bool baseIsSelf() const { return m_identifierTableAndFlags.isFlagSet(BaseStringFlag); } @@ -192,7 +193,6 @@ namespace JSC { struct BaseString : public Rep { bool isShared() { return rc != 1 || isBufferReadOnly(); } void setSharedBuffer(PassRefPtr); - SharedUChar* sharedBuffer(); bool isBufferReadOnly() { @@ -224,6 +224,7 @@ namespace JSC { checkConsistency(); } + SharedUChar* sharedBuffer(); bool slowIsBufferReadOnly(); friend struct Rep; diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/Assertions.cpp b/src/3rdparty/webkit/JavaScriptCore/wtf/Assertions.cpp index 6e04fe1..098186e 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/Assertions.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/Assertions.cpp @@ -34,7 +34,7 @@ #include #endif -#if COMPILER(MSVC) && !PLATFORM(WIN_CE) +#if COMPILER(MSVC) && !PLATFORM(WINCE) #ifndef WINVER #define WINVER 0x0500 #endif @@ -54,7 +54,7 @@ static void vprintf_stderr_common(const char* format, va_list args) if (strstr(format, "%@")) { CFStringRef cfFormat = CFStringCreateWithCString(NULL, format, kCFStringEncodingUTF8); CFStringRef str = CFStringCreateWithFormatAndArguments(NULL, NULL, cfFormat, args); - + int length = CFStringGetMaximumSizeForEncoding(CFStringGetLength(str), kCFStringEncodingUTF8); char* buffer = (char*)malloc(length + 1); @@ -66,7 +66,7 @@ static void vprintf_stderr_common(const char* format, va_list args) CFRelease(str); CFRelease(cfFormat); } else -#elif COMPILER(MSVC) && !PLATFORM(WIN_CE) +#elif COMPILER(MSVC) && !PLATFORM(WINCE) if (IsDebuggerPresent()) { size_t size = 1024; diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/Assertions.h b/src/3rdparty/webkit/JavaScriptCore/wtf/Assertions.h index 9643517..ad66d06 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/Assertions.h +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/Assertions.h @@ -128,7 +128,7 @@ void WTFLogVerbose(const char* file, int line, const char* function, WTFLogChann /* ASSERT, ASSERT_WITH_MESSAGE, ASSERT_NOT_REACHED */ -#if PLATFORM(WIN_CE) +#if PLATFORM(WINCE) && !PLATFORM(TORCHMOBILE) /* FIXME: We include this here only to avoid a conflict with the ASSERT macro. */ #include #undef min diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/CurrentTime.cpp b/src/3rdparty/webkit/JavaScriptCore/wtf/CurrentTime.cpp index 7ce9d65..73c2c5c 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/CurrentTime.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/CurrentTime.cpp @@ -43,7 +43,7 @@ #if HAVE(SYS_TIMEB_H) #include #endif -#if !PLATFORM(WIN_CE) +#if !PLATFORM(WINCE) #include #endif #include @@ -111,7 +111,7 @@ static double highResUpTime() static double lowResUTCTime() { -#if PLATFORM(WIN_CE) +#if PLATFORM(WINCE) SYSTEMTIME systemTime; GetSystemTime(&systemTime); struct tm tmtime; @@ -124,11 +124,11 @@ static double lowResUTCTime() tmtime.tm_sec = systemTime.wSecond; time_t timet = mktime(&tmtime); return timet * msPerSecond + systemTime.wMilliseconds; -#else // PLATFORM(WIN_CE) +#else struct _timeb timebuffer; _ftime(&timebuffer); return timebuffer.time * msPerSecond + timebuffer.millitm; -#endif // PLATFORM(WIN_CE) +#endif } static bool qpcAvailable() diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/DateMath.cpp b/src/3rdparty/webkit/JavaScriptCore/wtf/DateMath.cpp new file mode 100644 index 0000000..47c9d44 --- /dev/null +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/DateMath.cpp @@ -0,0 +1,911 @@ +/* + * Copyright (C) 1999-2000 Harri Porten (porten@kde.org) + * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. + * Copyright (C) 2009 Google Inc. All rights reserved. + * + * The Original Code is Mozilla Communicator client code, released + * March 31, 1998. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Alternatively, the contents of this file may be used under the terms + * of either the Mozilla Public License Version 1.1, found at + * http://www.mozilla.org/MPL/ (the "MPL") or the GNU General Public + * License Version 2.0, found at http://www.fsf.org/copyleft/gpl.html + * (the "GPL"), in which case the provisions of the MPL or the GPL are + * applicable instead of those above. If you wish to allow use of your + * version of this file only under the terms of one of those two + * licenses (the MPL or the GPL) and not to allow others to use your + * version of this file under the LGPL, indicate your decision by + * deletingthe provisions above and replace them with the notice and + * other provisions required by the MPL or the GPL, as the case may be. + * If you do not delete the provisions above, a recipient may use your + * version of this file under any of the LGPL, the MPL or the GPL. + */ + +#include "config.h" +#include "DateMath.h" + +#include "Assertions.h" +#include "ASCIICType.h" +#include "CurrentTime.h" +#include "MathExtras.h" +#include "StringExtras.h" + +#include +#include +#include +#include +#include + + +#if HAVE(ERRNO_H) +#include +#endif + +#if PLATFORM(DARWIN) +#include +#endif + +#if HAVE(SYS_TIME_H) +#include +#endif + +#if HAVE(SYS_TIMEB_H) +#include +#endif + +#define NaN std::numeric_limits::quiet_NaN() + +namespace WTF { + +/* Constants */ + +static const double minutesPerDay = 24.0 * 60.0; +static const double secondsPerDay = 24.0 * 60.0 * 60.0; +static const double secondsPerYear = 24.0 * 60.0 * 60.0 * 365.0; + +static const double usecPerSec = 1000000.0; + +static const double maxUnixTime = 2145859200.0; // 12/31/2037 + +// Day of year for the first day of each month, where index 0 is January, and day 0 is January 1. +// First for non-leap years, then for leap years. +static const int firstDayOfMonth[2][12] = { + {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334}, + {0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335} +}; + +static inline bool isLeapYear(int year) +{ + if (year % 4 != 0) + return false; + if (year % 400 == 0) + return true; + if (year % 100 == 0) + return false; + return true; +} + +static inline int daysInYear(int year) +{ + return 365 + isLeapYear(year); +} + +static inline double daysFrom1970ToYear(int year) +{ + // The Gregorian Calendar rules for leap years: + // Every fourth year is a leap year. 2004, 2008, and 2012 are leap years. + // However, every hundredth year is not a leap year. 1900 and 2100 are not leap years. + // Every four hundred years, there's a leap year after all. 2000 and 2400 are leap years. + + static const int leapDaysBefore1971By4Rule = 1970 / 4; + static const int excludedLeapDaysBefore1971By100Rule = 1970 / 100; + static const int leapDaysBefore1971By400Rule = 1970 / 400; + + const double yearMinusOne = year - 1; + const double yearsToAddBy4Rule = floor(yearMinusOne / 4.0) - leapDaysBefore1971By4Rule; + const double yearsToExcludeBy100Rule = floor(yearMinusOne / 100.0) - excludedLeapDaysBefore1971By100Rule; + const double yearsToAddBy400Rule = floor(yearMinusOne / 400.0) - leapDaysBefore1971By400Rule; + + return 365.0 * (year - 1970) + yearsToAddBy4Rule - yearsToExcludeBy100Rule + yearsToAddBy400Rule; +} + +static inline double msToDays(double ms) +{ + return floor(ms / msPerDay); +} + +static inline int msToYear(double ms) +{ + int approxYear = static_cast(floor(ms / (msPerDay * 365.2425)) + 1970); + double msFromApproxYearTo1970 = msPerDay * daysFrom1970ToYear(approxYear); + if (msFromApproxYearTo1970 > ms) + return approxYear - 1; + if (msFromApproxYearTo1970 + msPerDay * daysInYear(approxYear) <= ms) + return approxYear + 1; + return approxYear; +} + +static inline int dayInYear(double ms, int year) +{ + return static_cast(msToDays(ms) - daysFrom1970ToYear(year)); +} + +static inline double msToMilliseconds(double ms) +{ + double result = fmod(ms, msPerDay); + if (result < 0) + result += msPerDay; + return result; +} + +// 0: Sunday, 1: Monday, etc. +static inline int msToWeekDay(double ms) +{ + int wd = (static_cast(msToDays(ms)) + 4) % 7; + if (wd < 0) + wd += 7; + return wd; +} + +static inline int msToSeconds(double ms) +{ + double result = fmod(floor(ms / msPerSecond), secondsPerMinute); + if (result < 0) + result += secondsPerMinute; + return static_cast(result); +} + +static inline int msToMinutes(double ms) +{ + double result = fmod(floor(ms / msPerMinute), minutesPerHour); + if (result < 0) + result += minutesPerHour; + return static_cast(result); +} + +static inline int msToHours(double ms) +{ + double result = fmod(floor(ms/msPerHour), hoursPerDay); + if (result < 0) + result += hoursPerDay; + return static_cast(result); +} + +static inline int monthFromDayInYear(int dayInYear, bool leapYear) +{ + const int d = dayInYear; + int step; + + if (d < (step = 31)) + return 0; + step += (leapYear ? 29 : 28); + if (d < step) + return 1; + if (d < (step += 31)) + return 2; + if (d < (step += 30)) + return 3; + if (d < (step += 31)) + return 4; + if (d < (step += 30)) + return 5; + if (d < (step += 31)) + return 6; + if (d < (step += 31)) + return 7; + if (d < (step += 30)) + return 8; + if (d < (step += 31)) + return 9; + if (d < (step += 30)) + return 10; + return 11; +} + +static inline bool checkMonth(int dayInYear, int& startDayOfThisMonth, int& startDayOfNextMonth, int daysInThisMonth) +{ + startDayOfThisMonth = startDayOfNextMonth; + startDayOfNextMonth += daysInThisMonth; + return (dayInYear <= startDayOfNextMonth); +} + +static inline int dayInMonthFromDayInYear(int dayInYear, bool leapYear) +{ + const int d = dayInYear; + int step; + int next = 30; + + if (d <= next) + return d + 1; + const int daysInFeb = (leapYear ? 29 : 28); + if (checkMonth(d, step, next, daysInFeb)) + return d - step; + if (checkMonth(d, step, next, 31)) + return d - step; + if (checkMonth(d, step, next, 30)) + return d - step; + if (checkMonth(d, step, next, 31)) + return d - step; + if (checkMonth(d, step, next, 30)) + return d - step; + if (checkMonth(d, step, next, 31)) + return d - step; + if (checkMonth(d, step, next, 31)) + return d - step; + if (checkMonth(d, step, next, 30)) + return d - step; + if (checkMonth(d, step, next, 31)) + return d - step; + if (checkMonth(d, step, next, 30)) + return d - step; + step = next; + return d - step; +} + +static inline int monthToDayInYear(int month, bool isLeapYear) +{ + return firstDayOfMonth[isLeapYear][month]; +} + +static inline double timeToMS(double hour, double min, double sec, double ms) +{ + return (((hour * minutesPerHour + min) * secondsPerMinute + sec) * msPerSecond + ms); +} + +static int dateToDayInYear(int year, int month, int day) +{ + year += month / 12; + + month %= 12; + if (month < 0) { + month += 12; + --year; + } + + int yearday = static_cast(floor(daysFrom1970ToYear(year))); + int monthday = monthToDayInYear(month, isLeapYear(year)); + + return yearday + monthday + day - 1; +} + +double getCurrentUTCTime() +{ + return floor(getCurrentUTCTimeWithMicroseconds()); +} + +// Returns current time in milliseconds since 1 Jan 1970. +double getCurrentUTCTimeWithMicroseconds() +{ + return currentTime() * 1000.0; +} + +void getLocalTime(const time_t* localTime, struct tm* localTM) +{ +#if COMPILER(MSVC7) || COMPILER(MINGW) || PLATFORM(WINCE) + *localTM = *localtime(localTime); +#elif COMPILER(MSVC) + localtime_s(localTM, localTime); +#else + localtime_r(localTime, localTM); +#endif +} + +// There is a hard limit at 2038 that we currently do not have a workaround +// for (rdar://problem/5052975). +static inline int maximumYearForDST() +{ + return 2037; +} + +static inline int minimumYearForDST() +{ + // Because of the 2038 issue (see maximumYearForDST) if the current year is + // greater than the max year minus 27 (2010), we want to use the max year + // minus 27 instead, to ensure there is a range of 28 years that all years + // can map to. + return std::min(msToYear(getCurrentUTCTime()), maximumYearForDST() - 27) ; +} + +/* + * Find an equivalent year for the one given, where equivalence is deterined by + * the two years having the same leapness and the first day of the year, falling + * on the same day of the week. + * + * This function returns a year between this current year and 2037, however this + * function will potentially return incorrect results if the current year is after + * 2010, (rdar://problem/5052975), if the year passed in is before 1900 or after + * 2100, (rdar://problem/5055038). + */ +int equivalentYearForDST(int year) +{ + // It is ok if the cached year is not the current year as long as the rules + // for DST did not change between the two years; if they did the app would need + // to be restarted. + static int minYear = minimumYearForDST(); + int maxYear = maximumYearForDST(); + + int difference; + if (year > maxYear) + difference = minYear - year; + else if (year < minYear) + difference = maxYear - year; + else + return year; + + int quotient = difference / 28; + int product = (quotient) * 28; + + year += product; + ASSERT((year >= minYear && year <= maxYear) || (product - year == static_cast(NaN))); + return year; +} + +static int32_t calculateUTCOffset() +{ + time_t localTime = time(0); + tm localt; + getLocalTime(&localTime, &localt); + + // Get the difference between this time zone and UTC on the 1st of January of this year. + localt.tm_sec = 0; + localt.tm_min = 0; + localt.tm_hour = 0; + localt.tm_mday = 1; + localt.tm_mon = 0; + // Not setting localt.tm_year! + localt.tm_wday = 0; + localt.tm_yday = 0; + localt.tm_isdst = 0; +#if PLATFORM(WIN_OS) || PLATFORM(SOLARIS) || COMPILER(RVCT) + // Using a canned date of 01/01/2009 on platforms with weaker date-handling foo. + localt.tm_year = 109; + time_t utcOffset = 1230768000 - mktime(&localt); +#else + localt.tm_zone = 0; + localt.tm_gmtoff = 0; + time_t utcOffset = timegm(&localt) - mktime(&localt); +#endif + + return static_cast(utcOffset * 1000); +} + +#if PLATFORM(DARWIN) +static int32_t s_cachedUTCOffset; // In milliseconds. An assumption here is that access to an int32_t variable is atomic on platforms that take this code path. +static bool s_haveCachedUTCOffset; +static int s_notificationToken; +#endif + +/* + * Get the difference in milliseconds between this time zone and UTC (GMT) + * NOT including DST. + */ +double getUTCOffset() +{ +#if PLATFORM(DARWIN) + if (s_haveCachedUTCOffset) { + int notified; + uint32_t status = notify_check(s_notificationToken, ¬ified); + if (status == NOTIFY_STATUS_OK && !notified) + return s_cachedUTCOffset; + } +#endif + + int32_t utcOffset = calculateUTCOffset(); + +#if PLATFORM(DARWIN) + // Theoretically, it is possible that several threads will be executing this code at once, in which case we will have a race condition, + // and a newer value may be overwritten. In practice, time zones don't change that often. + s_cachedUTCOffset = utcOffset; +#endif + + return utcOffset; +} + +/* + * Get the DST offset for the time passed in. Takes + * seconds (not milliseconds) and cannot handle dates before 1970 + * on some OS' + */ +static double getDSTOffsetSimple(double localTimeSeconds, double utcOffset) +{ + if (localTimeSeconds > maxUnixTime) + localTimeSeconds = maxUnixTime; + else if (localTimeSeconds < 0) // Go ahead a day to make localtime work (does not work with 0) + localTimeSeconds += secondsPerDay; + + //input is UTC so we have to shift back to local time to determine DST thus the + getUTCOffset() + double offsetTime = (localTimeSeconds * msPerSecond) + utcOffset; + + // Offset from UTC but doesn't include DST obviously + int offsetHour = msToHours(offsetTime); + int offsetMinute = msToMinutes(offsetTime); + + // FIXME: time_t has a potential problem in 2038 + time_t localTime = static_cast(localTimeSeconds); + + tm localTM; + getLocalTime(&localTime, &localTM); + + double diff = ((localTM.tm_hour - offsetHour) * secondsPerHour) + ((localTM.tm_min - offsetMinute) * 60); + + if (diff < 0) + diff += secondsPerDay; + + return (diff * msPerSecond); +} + +// Get the DST offset, given a time in UTC +static double getDSTOffset(double ms, double utcOffset) +{ + // On Mac OS X, the call to localtime (see getDSTOffsetSimple) will return historically accurate + // DST information (e.g. New Zealand did not have DST from 1946 to 1974) however the JavaScript + // standard explicitly dictates that historical information should not be considered when + // determining DST. For this reason we shift away from years that localtime can handle but would + // return historically accurate information. + int year = msToYear(ms); + int equivalentYear = equivalentYearForDST(year); + if (year != equivalentYear) { + bool leapYear = isLeapYear(year); + int dayInYearLocal = dayInYear(ms, year); + int dayInMonth = dayInMonthFromDayInYear(dayInYearLocal, leapYear); + int month = monthFromDayInYear(dayInYearLocal, leapYear); + int day = dateToDayInYear(equivalentYear, month, dayInMonth); + ms = (day * msPerDay) + msToMilliseconds(ms); + } + + return getDSTOffsetSimple(ms / msPerSecond, utcOffset); +} + +double gregorianDateTimeToMS(const GregorianDateTime& t, double milliSeconds, bool inputIsUTC) +{ + int day = dateToDayInYear(t.year + 1900, t.month, t.monthDay); + double ms = timeToMS(t.hour, t.minute, t.second, milliSeconds); + double result = (day * msPerDay) + ms; + + if (!inputIsUTC) { // convert to UTC + double utcOffset = getUTCOffset(); + result -= utcOffset; + result -= getDSTOffset(result, utcOffset); + } + + return result; +} + +void msToGregorianDateTime(double ms, bool outputIsUTC, GregorianDateTime& tm) +{ + // input is UTC + double dstOff = 0.0; + const double utcOff = getUTCOffset(); + + if (!outputIsUTC) { // convert to local time + dstOff = getDSTOffset(ms, utcOff); + ms += dstOff + utcOff; + } + + const int year = msToYear(ms); + tm.second = msToSeconds(ms); + tm.minute = msToMinutes(ms); + tm.hour = msToHours(ms); + tm.weekDay = msToWeekDay(ms); + tm.yearDay = dayInYear(ms, year); + tm.monthDay = dayInMonthFromDayInYear(tm.yearDay, isLeapYear(year)); + tm.month = monthFromDayInYear(tm.yearDay, isLeapYear(year)); + tm.year = year - 1900; + tm.isDST = dstOff != 0.0; + + tm.utcOffset = static_cast((dstOff + utcOff) / msPerSecond); + tm.timeZone = NULL; +} + +void initializeDates() +{ +#ifndef NDEBUG + static bool alreadyInitialized; + ASSERT(!alreadyInitialized++); +#endif + + equivalentYearForDST(2000); // Need to call once to initialize a static used in this function. +#if PLATFORM(DARWIN) + // Register for a notification whenever the time zone changes. + uint32_t status = notify_register_check("com.apple.system.timezone", &s_notificationToken); + if (status == NOTIFY_STATUS_OK) { + s_cachedUTCOffset = calculateUTCOffset(); + s_haveCachedUTCOffset = true; + } +#endif +} + +static inline double ymdhmsToSeconds(long year, int mon, int day, int hour, int minute, int second) +{ + double days = (day - 32075) + + floor(1461 * (year + 4800.0 + (mon - 14) / 12) / 4) + + 367 * (mon - 2 - (mon - 14) / 12 * 12) / 12 + - floor(3 * ((year + 4900.0 + (mon - 14) / 12) / 100) / 4) + - 2440588; + return ((days * hoursPerDay + hour) * minutesPerHour + minute) * secondsPerMinute + second; +} + +// We follow the recommendation of RFC 2822 to consider all +// obsolete time zones not listed here equivalent to "-0000". +static const struct KnownZone { +#if !PLATFORM(WIN_OS) + const +#endif + char tzName[4]; + int tzOffset; +} known_zones[] = { + { "UT", 0 }, + { "GMT", 0 }, + { "EST", -300 }, + { "EDT", -240 }, + { "CST", -360 }, + { "CDT", -300 }, + { "MST", -420 }, + { "MDT", -360 }, + { "PST", -480 }, + { "PDT", -420 } +}; + +inline static void skipSpacesAndComments(const char*& s) +{ + int nesting = 0; + char ch; + while ((ch = *s)) { + if (!isASCIISpace(ch)) { + if (ch == '(') + nesting++; + else if (ch == ')' && nesting > 0) + nesting--; + else if (nesting == 0) + break; + } + s++; + } +} + +// returns 0-11 (Jan-Dec); -1 on failure +static int findMonth(const char* monthStr) +{ + ASSERT(monthStr); + char needle[4]; + for (int i = 0; i < 3; ++i) { + if (!*monthStr) + return -1; + needle[i] = static_cast(toASCIILower(*monthStr++)); + } + needle[3] = '\0'; + const char *haystack = "janfebmaraprmayjunjulaugsepoctnovdec"; + const char *str = strstr(haystack, needle); + if (str) { + int position = static_cast(str - haystack); + if (position % 3 == 0) + return position / 3; + } + return -1; +} + +static bool parseLong(const char* string, char** stopPosition, int base, long* result) +{ + *result = strtol(string, stopPosition, base); + // Avoid the use of errno as it is not available on Windows CE + if (string == *stopPosition || *result == LONG_MIN || *result == LONG_MAX) + return false; + return true; +} + +double parseDateFromNullTerminatedCharacters(const char* dateString) +{ + // This parses a date in the form: + // Tuesday, 09-Nov-99 23:12:40 GMT + // or + // Sat, 01-Jan-2000 08:00:00 GMT + // or + // Sat, 01 Jan 2000 08:00:00 GMT + // or + // 01 Jan 99 22:00 +0100 (exceptions in rfc822/rfc2822) + // ### non RFC formats, added for Javascript: + // [Wednesday] January 09 1999 23:12:40 GMT + // [Wednesday] January 09 23:12:40 GMT 1999 + // + // We ignore the weekday. + + // Skip leading space + skipSpacesAndComments(dateString); + + long month = -1; + const char *wordStart = dateString; + // Check contents of first words if not number + while (*dateString && !isASCIIDigit(*dateString)) { + if (isASCIISpace(*dateString) || *dateString == '(') { + if (dateString - wordStart >= 3) + month = findMonth(wordStart); + skipSpacesAndComments(dateString); + wordStart = dateString; + } else + dateString++; + } + + // Missing delimiter between month and day (like "January29")? + if (month == -1 && wordStart != dateString) + month = findMonth(wordStart); + + skipSpacesAndComments(dateString); + + if (!*dateString) + return NaN; + + // ' 09-Nov-99 23:12:40 GMT' + char* newPosStr; + long day; + if (!parseLong(dateString, &newPosStr, 10, &day)) + return NaN; + dateString = newPosStr; + + if (!*dateString) + return NaN; + + if (day < 0) + return NaN; + + long year = 0; + if (day > 31) { + // ### where is the boundary and what happens below? + if (*dateString != '/') + return NaN; + // looks like a YYYY/MM/DD date + if (!*++dateString) + return NaN; + year = day; + if (!parseLong(dateString, &newPosStr, 10, &month)) + return NaN; + month -= 1; + dateString = newPosStr; + if (*dateString++ != '/' || !*dateString) + return NaN; + if (!parseLong(dateString, &newPosStr, 10, &day)) + return NaN; + dateString = newPosStr; + } else if (*dateString == '/' && month == -1) { + dateString++; + // This looks like a MM/DD/YYYY date, not an RFC date. + month = day - 1; // 0-based + if (!parseLong(dateString, &newPosStr, 10, &day)) + return NaN; + if (day < 1 || day > 31) + return NaN; + dateString = newPosStr; + if (*dateString == '/') + dateString++; + if (!*dateString) + return NaN; + } else { + if (*dateString == '-') + dateString++; + + skipSpacesAndComments(dateString); + + if (*dateString == ',') + dateString++; + + if (month == -1) { // not found yet + month = findMonth(dateString); + if (month == -1) + return NaN; + + while (*dateString && *dateString != '-' && *dateString != ',' && !isASCIISpace(*dateString)) + dateString++; + + if (!*dateString) + return NaN; + + // '-99 23:12:40 GMT' + if (*dateString != '-' && *dateString != '/' && *dateString != ',' && !isASCIISpace(*dateString)) + return NaN; + dateString++; + } + } + + if (month < 0 || month > 11) + return NaN; + + // '99 23:12:40 GMT' + if (year <= 0 && *dateString) { + if (!parseLong(dateString, &newPosStr, 10, &year)) + return NaN; + } + + // Don't fail if the time is missing. + long hour = 0; + long minute = 0; + long second = 0; + if (!*newPosStr) + dateString = newPosStr; + else { + // ' 23:12:40 GMT' + if (!(isASCIISpace(*newPosStr) || *newPosStr == ',')) { + if (*newPosStr != ':') + return NaN; + // There was no year; the number was the hour. + year = -1; + } else { + // in the normal case (we parsed the year), advance to the next number + dateString = ++newPosStr; + skipSpacesAndComments(dateString); + } + + parseLong(dateString, &newPosStr, 10, &hour); + // Do not check for errno here since we want to continue + // even if errno was set becasue we are still looking + // for the timezone! + + // Read a number? If not, this might be a timezone name. + if (newPosStr != dateString) { + dateString = newPosStr; + + if (hour < 0 || hour > 23) + return NaN; + + if (!*dateString) + return NaN; + + // ':12:40 GMT' + if (*dateString++ != ':') + return NaN; + + if (!parseLong(dateString, &newPosStr, 10, &minute)) + return NaN; + dateString = newPosStr; + + if (minute < 0 || minute > 59) + return NaN; + + // ':40 GMT' + if (*dateString && *dateString != ':' && !isASCIISpace(*dateString)) + return NaN; + + // seconds are optional in rfc822 + rfc2822 + if (*dateString ==':') { + dateString++; + + if (!parseLong(dateString, &newPosStr, 10, &second)) + return NaN; + dateString = newPosStr; + + if (second < 0 || second > 59) + return NaN; + } + + skipSpacesAndComments(dateString); + + if (strncasecmp(dateString, "AM", 2) == 0) { + if (hour > 12) + return NaN; + if (hour == 12) + hour = 0; + dateString += 2; + skipSpacesAndComments(dateString); + } else if (strncasecmp(dateString, "PM", 2) == 0) { + if (hour > 12) + return NaN; + if (hour != 12) + hour += 12; + dateString += 2; + skipSpacesAndComments(dateString); + } + } + } + + bool haveTZ = false; + int offset = 0; + + // Don't fail if the time zone is missing. + // Some websites omit the time zone (4275206). + if (*dateString) { + if (strncasecmp(dateString, "GMT", 3) == 0 || strncasecmp(dateString, "UTC", 3) == 0) { + dateString += 3; + haveTZ = true; + } + + if (*dateString == '+' || *dateString == '-') { + long o; + if (!parseLong(dateString, &newPosStr, 10, &o)) + return NaN; + dateString = newPosStr; + + if (o < -9959 || o > 9959) + return NaN; + + int sgn = (o < 0) ? -1 : 1; + o = abs(o); + if (*dateString != ':') { + offset = ((o / 100) * 60 + (o % 100)) * sgn; + } else { // GMT+05:00 + long o2; + if (!parseLong(dateString, &newPosStr, 10, &o2)) + return NaN; + dateString = newPosStr; + offset = (o * 60 + o2) * sgn; + } + haveTZ = true; + } else { + for (int i = 0; i < int(sizeof(known_zones) / sizeof(KnownZone)); i++) { + if (0 == strncasecmp(dateString, known_zones[i].tzName, strlen(known_zones[i].tzName))) { + offset = known_zones[i].tzOffset; + dateString += strlen(known_zones[i].tzName); + haveTZ = true; + break; + } + } + } + } + + skipSpacesAndComments(dateString); + + if (*dateString && year == -1) { + if (!parseLong(dateString, &newPosStr, 10, &year)) + return NaN; + dateString = newPosStr; + } + + skipSpacesAndComments(dateString); + + // Trailing garbage + if (*dateString) + return NaN; + + // Y2K: Handle 2 digit years. + if (year >= 0 && year < 100) { + if (year < 50) + year += 2000; + else + year += 1900; + } + + // fall back to local timezone + if (!haveTZ) { + GregorianDateTime t; + t.monthDay = day; + t.month = month; + t.year = year - 1900; + t.isDST = -1; + t.second = second; + t.minute = minute; + t.hour = hour; + + // Use our gregorianDateTimeToMS() rather than mktime() as the latter can't handle the full year range. + return gregorianDateTimeToMS(t, 0, false); + } + + return (ymdhmsToSeconds(year, month + 1, day, hour, minute, second) - (offset * 60.0)) * msPerSecond; +} + +double timeClip(double t) +{ + if (!isfinite(t)) + return NaN; + if (fabs(t) > 8.64E15) + return NaN; + return trunc(t); +} + + +} // namespace WTF diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/DateMath.h b/src/3rdparty/webkit/JavaScriptCore/wtf/DateMath.h new file mode 100644 index 0000000..8690a49 --- /dev/null +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/DateMath.h @@ -0,0 +1,187 @@ +/* + * Copyright (C) 1999-2000 Harri Porten (porten@kde.org) + * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. + * Copyright (C) 2009 Google Inc. All rights reserved. + * + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Mozilla Communicator client code, released + * March 31, 1998. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either of the GNU General Public License Version 2 or later (the "GPL"), + * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + */ + +#ifndef DateMath_h +#define DateMath_h + +#include +#include +#include + +namespace WTF { + +struct GregorianDateTime; + +void initializeDates(); +void msToGregorianDateTime(double, bool outputIsUTC, GregorianDateTime&); +double gregorianDateTimeToMS(const GregorianDateTime&, double, bool inputIsUTC); +double getUTCOffset(); +int equivalentYearForDST(int year); +double getCurrentUTCTime(); +double getCurrentUTCTimeWithMicroseconds(); +void getLocalTime(const time_t*, tm*); + +// Not really math related, but this is currently the only shared place to put these. +double parseDateFromNullTerminatedCharacters(const char*); +double timeClip(double); + +const char * const weekdayName[7] = { "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" }; +const char * const monthName[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; + +const double hoursPerDay = 24.0; +const double minutesPerHour = 60.0; +const double secondsPerHour = 60.0 * 60.0; +const double secondsPerMinute = 60.0; +const double msPerSecond = 1000.0; +const double msPerMinute = 60.0 * 1000.0; +const double msPerHour = 60.0 * 60.0 * 1000.0; +const double msPerDay = 24.0 * 60.0 * 60.0 * 1000.0; + +// Intentionally overridding the default tm of the system +// Tee members of tm differ on various operating systems. +struct GregorianDateTime : Noncopyable { + GregorianDateTime() + : second(0) + , minute(0) + , hour(0) + , weekDay(0) + , monthDay(0) + , yearDay(0) + , month(0) + , year(0) + , isDST(0) + , utcOffset(0) + , timeZone(0) + { + } + + ~GregorianDateTime() + { + delete [] timeZone; + } + + GregorianDateTime(const tm& inTm) + : second(inTm.tm_sec) + , minute(inTm.tm_min) + , hour(inTm.tm_hour) + , weekDay(inTm.tm_wday) + , monthDay(inTm.tm_mday) + , yearDay(inTm.tm_yday) + , month(inTm.tm_mon) + , year(inTm.tm_year) + , isDST(inTm.tm_isdst) + { +#if !PLATFORM(WIN_OS) && !PLATFORM(SOLARIS) && !COMPILER(RVCT) + utcOffset = static_cast(inTm.tm_gmtoff); + + int inZoneSize = strlen(inTm.tm_zone) + 1; + timeZone = new char[inZoneSize]; + strncpy(timeZone, inTm.tm_zone, inZoneSize); +#else + utcOffset = static_cast(getUTCOffset() / msPerSecond + (isDST ? secondsPerHour : 0)); + timeZone = 0; +#endif + } + + operator tm() const + { + tm ret; + memset(&ret, 0, sizeof(ret)); + + ret.tm_sec = second; + ret.tm_min = minute; + ret.tm_hour = hour; + ret.tm_wday = weekDay; + ret.tm_mday = monthDay; + ret.tm_yday = yearDay; + ret.tm_mon = month; + ret.tm_year = year; + ret.tm_isdst = isDST; + +#if !PLATFORM(WIN_OS) && !PLATFORM(SOLARIS) && !COMPILER(RVCT) + ret.tm_gmtoff = static_cast(utcOffset); + ret.tm_zone = timeZone; +#endif + + return ret; + } + + void copyFrom(const GregorianDateTime& rhs) + { + second = rhs.second; + minute = rhs.minute; + hour = rhs.hour; + weekDay = rhs.weekDay; + monthDay = rhs.monthDay; + yearDay = rhs.yearDay; + month = rhs.month; + year = rhs.year; + isDST = rhs.isDST; + utcOffset = rhs.utcOffset; + if (rhs.timeZone) { + int inZoneSize = strlen(rhs.timeZone) + 1; + timeZone = new char[inZoneSize]; + strncpy(timeZone, rhs.timeZone, inZoneSize); + } else + timeZone = 0; + } + + int second; + int minute; + int hour; + int weekDay; + int monthDay; + int yearDay; + int month; + int year; + int isDST; + int utcOffset; + char* timeZone; +}; + +static inline int gmtoffset(const GregorianDateTime& t) +{ + return t.utcOffset; +} + +} // namespace WTF + +#endif // DateMath_h diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/Deque.h b/src/3rdparty/webkit/JavaScriptCore/wtf/Deque.h index c371d38..3c3d378 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/Deque.h +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/Deque.h @@ -44,7 +44,7 @@ namespace WTF { template class DequeConstReverseIterator; template - class Deque { + class Deque : public FastAllocBase { public: typedef DequeIterator iterator; typedef DequeConstIterator const_iterator; diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/FastMalloc.cpp b/src/3rdparty/webkit/JavaScriptCore/wtf/FastMalloc.cpp index f114160..c65ba85 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/FastMalloc.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/FastMalloc.cpp @@ -4089,7 +4089,7 @@ extern "C" { malloc_introspection_t jscore_fastmalloc_introspection = { &FastMallocZone::enumerate, &FastMallocZone::goodSize, &FastMallocZone::check, &FastMallocZone::print, &FastMallocZone::log, &FastMallocZone::forceLock, &FastMallocZone::forceUnlock, &FastMallocZone::statistics -#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) +#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !PLATFORM(IPHONE) , 0 // zone_locked will not be called on the zone unless it advertises itself as version five or higher. #endif diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/HashCountedSet.h b/src/3rdparty/webkit/JavaScriptCore/wtf/HashCountedSet.h index 6fc0234..1a422d8 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/HashCountedSet.h +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/HashCountedSet.h @@ -22,13 +22,14 @@ #define WTF_HashCountedSet_h #include "Assertions.h" +#include "FastAllocBase.h" #include "HashMap.h" #include "Vector.h" namespace WTF { template::Hash, - typename Traits = HashTraits > class HashCountedSet { + typename Traits = HashTraits > class HashCountedSet : public FastAllocBase { private: typedef HashMap ImplType; public: diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/HashSet.h b/src/3rdparty/webkit/JavaScriptCore/wtf/HashSet.h index da99f2c..d664c67 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/HashSet.h +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/HashSet.h @@ -21,6 +21,7 @@ #ifndef WTF_HashSet_h #define WTF_HashSet_h +#include "FastAllocBase.h" #include "HashTable.h" namespace WTF { @@ -32,7 +33,7 @@ namespace WTF { template struct IdentityExtractor; template::Hash, - typename TraitsArg = HashTraits > class HashSet { + typename TraitsArg = HashTraits > class HashSet : public FastAllocBase { private: typedef HashArg HashFunctions; typedef TraitsArg ValueTraits; diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h b/src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h index 76488b4..324300d 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h @@ -39,10 +39,8 @@ #endif #if COMPILER(MSVC) -#if PLATFORM(WIN_CE) +#if PLATFORM(WINCE) #include -#else -#include #endif #include diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/MessageQueue.h b/src/3rdparty/webkit/JavaScriptCore/wtf/MessageQueue.h index 9549f37..7721dba 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/MessageQueue.h +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/MessageQueue.h @@ -47,9 +47,10 @@ namespace WTF { template class MessageQueue : Noncopyable { public: - MessageQueue() : m_killed(false) {} + MessageQueue() : m_killed(false) { } void append(const DataType&); + bool appendAndCheckEmpty(const DataType&); void prepend(const DataType&); bool waitForMessage(DataType&); template @@ -81,6 +82,17 @@ namespace WTF { m_condition.signal(); } + // Returns true if the queue was empty before the item was added. + template + inline bool MessageQueue::appendAndCheckEmpty(const DataType& message) + { + MutexLocker lock(m_mutex); + bool wasEmpty = m_queue.isEmpty(); + m_queue.append(message); + m_condition.signal(); + return wasEmpty; + } + template inline void MessageQueue::prepend(const DataType& message) { diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h b/src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h index b08e08c..c82d1f7 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h @@ -46,6 +46,7 @@ #elif !defined(MAC_OS_X_VERSION_10_6) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6 #define BUILDING_ON_LEOPARD 1 #endif +#include #endif /* PLATFORM(WIN_OS) */ @@ -55,12 +56,12 @@ #define WTF_PLATFORM_WIN_OS 1 #endif -/* PLATFORM(WIN_CE) */ +/* PLATFORM(WINCE) */ /* Operating system level dependencies for Windows CE that should be used */ /* regardless of operating environment */ /* Note that for this platform PLATFORM(WIN_OS) is also defined. */ #if defined(_WIN32_WCE) -#define WTF_PLATFORM_WIN_CE 1 +#define WTF_PLATFORM_WINCE 1 #include #endif @@ -150,11 +151,30 @@ #define WTF_PLATFORM_WIN 1 #endif +/* PLATFORM(IPHONE) */ +#if (defined(TARGET_OS_EMBEDDED) && TARGET_OS_EMBEDDED) || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) +#define WTF_PLATFORM_IPHONE 1 +#endif + +/* PLATFORM(IPHONE_SIMULATOR) */ +#if defined(TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR +#define WTF_PLATFORM_IPHONE 1 +#define WTF_PLATFORM_IPHONE_SIMULATOR 1 +#else +#define WTF_PLATFORM_IPHONE_SIMULATOR 0 +#endif + +#if !defined(WTF_PLATFORM_IPHONE) +#define WTF_PLATFORM_IPHONE 0 +#endif + /* Graphics engines */ /* PLATFORM(CG) and PLATFORM(CI) */ -#if PLATFORM(MAC) +#if PLATFORM(MAC) || PLATFORM(IPHONE) #define WTF_PLATFORM_CG 1 +#endif +#if PLATFORM(MAC) && !PLATFORM(IPHONE) #define WTF_PLATFORM_CI 1 #endif @@ -208,7 +228,29 @@ #if !defined(__ARM_EABI__) #define WTF_PLATFORM_FORCE_PACK 1 #endif +#define ARM_ARCH_VERSION 3 +#if defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) +#undef ARM_ARCH_VERSION +#define ARM_ARCH_VERSION 4 +#endif +#if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) \ + || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \ + || defined(__ARM_ARCH_5TEJ__) +#undef ARM_ARCH_VERSION +#define ARM_ARCH_VERSION 5 #endif +#if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \ + || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \ + || defined(__ARM_ARCH_6ZK__) +#undef ARM_ARCH_VERSION +#define ARM_ARCH_VERSION 6 +#endif +#if defined(__ARM_ARCH_7A__) +#undef ARM_ARCH_VERSION +#define ARM_ARCH_VERSION 7 +#endif +#endif /* ARM */ +#define PLATFORM_ARM_ARCH(N) (PLATFORM(ARM) && ARM_ARCH_VERSION >= N) /* PLATFORM(X86) */ #if defined(__i386__) \ @@ -236,12 +278,12 @@ #define WTF_PLATFORM_BIG_ENDIAN 1 #endif -/* PLATFORM(WIN_CE) && PLATFORM(QT) +/* PLATFORM(WINCE) && PLATFORM(QT) We can not determine the endianess at compile time. For Qt for Windows CE the endianess is specified in the device specific makespec */ -#if PLATFORM(WIN_CE) && PLATFORM(QT) +#if PLATFORM(WINCE) && PLATFORM(QT) # include # undef WTF_PLATFORM_BIG_ENDIAN # undef WTF_PLATFORM_MIDDLE_ENDIAN @@ -293,7 +335,7 @@ #define WTF_COMPILER_WINSCW 1 #endif -#if (PLATFORM(MAC) || PLATFORM(WIN)) && !defined(ENABLE_JSC_MULTIPLE_THREADS) +#if (PLATFORM(IPHONE) || PLATFORM(MAC) || PLATFORM(WIN)) && !defined(ENABLE_JSC_MULTIPLE_THREADS) #define ENABLE_JSC_MULTIPLE_THREADS 1 #endif @@ -308,7 +350,7 @@ #define WTF_USE_ICU_UNICODE 1 #endif -#if PLATFORM(MAC) +#if PLATFORM(MAC) && !PLATFORM(IPHONE) #define WTF_PLATFORM_CF 1 #define WTF_USE_PTHREADS 1 #if !defined(ENABLE_MAC_JAVA_BRIDGE) @@ -326,6 +368,18 @@ #define WTF_USE_PTHREADS 1 #endif +#if PLATFORM(IPHONE) +#define WTF_PLATFORM_CF 1 +#define WTF_USE_PTHREADS 1 +#define ENABLE_FTPDIR 1 +#define ENABLE_MAC_JAVA_BRIDGE 0 +#define ENABLE_ICONDATABASE 0 +#define ENABLE_GEOLOCATION 1 +#define ENABLE_NETSCAPE_PLUGIN_API 0 +#define HAVE_READLINE 1 +#define ENABLE_REPAINT_THROTTLING 1 +#endif + #if PLATFORM(WIN) #define WTF_USE_WININET 1 #endif @@ -343,7 +397,7 @@ #endif #if !defined(HAVE_ACCESSIBILITY) -#if PLATFORM(MAC) || PLATFORM(WIN) || PLATFORM(GTK) || PLATFORM(CHROMIUM) +#if PLATFORM(IPHONE) || PLATFORM(MAC) || PLATFORM(WIN) || PLATFORM(GTK) || PLATFORM(CHROMIUM) #define HAVE_ACCESSIBILITY 1 #endif #endif /* !defined(HAVE_ACCESSIBILITY) */ @@ -360,15 +414,19 @@ #define HAVE_SYS_TIME_H 1 #define HAVE_SYS_TIMEB_H 1 -#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) +#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !PLATFORM(IPHONE) #define HAVE_MADV_FREE_REUSE 1 #define HAVE_MADV_FREE 1 #endif +#if PLATFORM(IPHONE) +#define HAVE_MADV_FREE 1 +#endif + #elif PLATFORM(WIN_OS) #define HAVE_FLOAT_H 1 -#if PLATFORM(WIN_CE) +#if PLATFORM(WINCE) #define HAVE_ERRNO_H 0 #else #define HAVE_SYS_TIMEB_H 1 @@ -481,29 +539,38 @@ #elif PLATFORM(X86) && PLATFORM(MAC) #define ENABLE_JIT 1 #define WTF_USE_JIT_STUB_ARGUMENT_VA_LIST 1 +#elif PLATFORM_ARM_ARCH(7) && PLATFORM(IPHONE) + /* Under development, temporarily disabled until 16Mb link range limit in assembler is fixed. */ + #define ENABLE_JIT 0 + #define ENABLE_JIT_OPTIMIZE_NATIVE_CALL 0 /* The JIT is tested & working on x86 Windows */ #elif PLATFORM(X86) && PLATFORM(WIN) #define ENABLE_JIT 1 #endif - #define ENABLE_JIT_OPTIMIZE_CALL 1 - #define ENABLE_JIT_OPTIMIZE_NATIVE_CALL 1 - #define ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS 1 - #define ENABLE_JIT_OPTIMIZE_ARITHMETIC 1 - #define ENABLE_JIT_OPTIMIZE_METHOD_CALLS 1 #endif -#if PLATFORM(X86_64) - #define JSC_HOST_CALL -#elif COMPILER(MSVC) - #define JSC_HOST_CALL __fastcall -#elif COMPILER(GCC) && PLATFORM(X86) - #define JSC_HOST_CALL __attribute__ ((fastcall)) +#ifndef ENABLE_JIT_OPTIMIZE_CALL +#define ENABLE_JIT_OPTIMIZE_CALL 1 +#endif +#ifndef ENABLE_JIT_OPTIMIZE_NATIVE_CALL +#define ENABLE_JIT_OPTIMIZE_NATIVE_CALL 1 +#endif +#ifndef ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS +#define ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS 1 +#endif +#ifndef ENABLE_JIT_OPTIMIZE_ARITHMETIC +#define ENABLE_JIT_OPTIMIZE_ARITHMETIC 1 +#endif +#ifndef ENABLE_JIT_OPTIMIZE_METHOD_CALLS +#define ENABLE_JIT_OPTIMIZE_METHOD_CALLS 1 +#endif + +#if PLATFORM(X86) && COMPILER(MSVC) +#define JSC_HOST_CALL __fastcall +#elif PLATFORM(X86) && COMPILER(GCC) +#define JSC_HOST_CALL __attribute__ ((fastcall)) #else - #if ENABLE(JIT) - #error Need to support register calling convention in this compiler - #else - #define JSC_HOST_CALL - #endif +#define JSC_HOST_CALL #endif #if COMPILER(GCC) && !ENABLE(JIT) @@ -520,6 +587,8 @@ /* YARR supports x86 & x86-64, and has been tested on Mac and Windows. */ #if (!defined(ENABLE_YARR_JIT) && PLATFORM(X86) && PLATFORM(MAC)) \ || (!defined(ENABLE_YARR_JIT) && PLATFORM(X86_64) && PLATFORM(MAC)) \ + /* Under development, temporarily disabled until 16Mb link range limit in assembler is fixed. */ \ + || (!defined(ENABLE_YARR_JIT) && PLATFORM_ARM_ARCH(7) && PLATFORM(IPHONE) && 0) \ || (!defined(ENABLE_YARR_JIT) && PLATFORM(X86) && PLATFORM(WIN)) #define ENABLE_YARR 1 #define ENABLE_YARR_JIT 1 @@ -534,7 +603,11 @@ #endif /* Setting this flag prevents the assembler from using RWX memory; this may improve security but currectly comes at a significant performance cost. */ +#if PLATFORM_ARM_ARCH(7) && PLATFORM(IPHONE) +#define ENABLE_ASSEMBLER_WX_EXCLUSIVE 1 +#else #define ENABLE_ASSEMBLER_WX_EXCLUSIVE 0 +#endif #if !defined(ENABLE_PAN_SCROLLING) && PLATFORM(WIN_OS) #define ENABLE_PAN_SCROLLING 1 @@ -555,4 +628,15 @@ #define WTF_USE_FONT_FAST_PATH 1 #endif +/* Accelerated compositing */ +#if PLATFORM(MAC) +#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) +#define WTF_USE_ACCELERATED_COMPOSITING 1 +#endif +#endif + +#if PLATFORM(IPHONE) +#define WTF_USE_ACCELERATED_COMPOSITING 1 +#endif + #endif /* WTF_Platform_h */ diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/RandomNumberSeed.h b/src/3rdparty/webkit/JavaScriptCore/wtf/RandomNumberSeed.h index 161377f..32291dd 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/RandomNumberSeed.h +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/RandomNumberSeed.h @@ -38,7 +38,7 @@ #include #endif -#if PLATFORM(WIN_CE) +#if PLATFORM(WINCE) #include #endif diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/RefPtr.h b/src/3rdparty/webkit/JavaScriptCore/wtf/RefPtr.h index 929e745..74cd0ea 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/RefPtr.h +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/RefPtr.h @@ -23,6 +23,7 @@ #include #include "AlwaysInline.h" +#include "FastAllocBase.h" namespace WTF { @@ -32,7 +33,7 @@ namespace WTF { enum HashTableDeletedValueType { HashTableDeletedValue }; - template class RefPtr { + template class RefPtr : public FastAllocBase { public: RefPtr() : m_ptr(0) { } RefPtr(T* ptr) : m_ptr(ptr) { if (ptr) ptr->ref(); } diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/SegmentedVector.h b/src/3rdparty/webkit/JavaScriptCore/wtf/SegmentedVector.h new file mode 100644 index 0000000..065c19c --- /dev/null +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/SegmentedVector.h @@ -0,0 +1,252 @@ +/* + * Copyright (C) 2008 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef SegmentedVector_h +#define SegmentedVector_h + +#include + +namespace WTF { + + // An iterator for SegmentedVector. It supports only the pre ++ operator + template class SegmentedVector; + template class SegmentedVectorIterator { + private: + friend class SegmentedVector; + public: + typedef SegmentedVectorIterator Iterator; + + ~SegmentedVectorIterator() { } + + T& operator*() const { return m_vector.m_segments.at(m_segment)->at(m_index); } + T* operator->() const { return &m_vector.m_segments.at(m_segment)->at(m_index); } + + // Only prefix ++ operator supported + Iterator& operator++() + { + ASSERT(m_index != SegmentSize); + ++m_index; + if (m_index >= m_vector.m_segments.at(m_segment)->size()) { + if (m_segment + 1 < m_vector.m_segments.size()) { + ASSERT(m_vector.m_segments.at(m_segment)->size() > 0); + ++m_segment; + m_index = 0; + } else { + // Points to the "end" symbol + m_segment = 0; + m_index = SegmentSize; + } + } + return *this; + } + + bool operator==(const Iterator& other) const + { + return (m_index == other.m_index && m_segment = other.m_segment && &m_vector == &other.m_vector); + } + + bool operator!=(const Iterator& other) const + { + return (m_index != other.m_index || m_segment != other.m_segment || &m_vector != &other.m_vector); + } + + SegmentedVectorIterator& operator=(const SegmentedVectorIterator& other) + { + m_vector = other.m_vector; + m_segment = other.m_segment; + m_index = other.m_index; + return *this; + } + + private: + SegmentedVectorIterator(SegmentedVector& vector, size_t segment, size_t index) + : m_vector(vector) + , m_segment(segment) + , m_index(index) + { + } + + SegmentedVector& m_vector; + size_t m_segment; + size_t m_index; + }; + + // SegmentedVector is just like Vector, but it doesn't move the values + // stored in its buffer when it grows. Therefore, it is safe to keep + // pointers into a SegmentedVector. + template class SegmentedVector { + friend class SegmentedVectorIterator; + public: + typedef SegmentedVectorIterator Iterator; + + SegmentedVector() + : m_size(0) + { + m_segments.append(&m_inlineSegment); + } + + ~SegmentedVector() + { + deleteAllSegments(); + } + + size_t size() const { return m_size; } + + T& at(size_t index) + { + if (index < SegmentSize) + return m_inlineSegment[index]; + return segmentFor(index)->at(subscriptFor(index)); + } + + T& operator[](size_t index) + { + return at(index); + } + + T& last() + { + return at(size() - 1); + } + + template void append(const U& value) + { + ++m_size; + + if (m_size <= SegmentSize) { + m_inlineSegment.uncheckedAppend(value); + return; + } + + if (!segmentExistsFor(m_size - 1)) + m_segments.append(new Segment); + segmentFor(m_size - 1)->uncheckedAppend(value); + } + + T& alloc() + { + append(T()); + return last(); + } + + void removeLast() + { + if (m_size <= SegmentSize) + m_inlineSegment.removeLast(); + else + segmentFor(m_size - 1)->removeLast(); + --m_size; + } + + void grow(size_t size) + { + ASSERT(size > m_size); + ensureSegmentsFor(size); + m_size = size; + } + + void clear() + { + deleteAllSegments(); + m_segments.resize(1); + m_inlineSegment.clear(); + m_size = 0; + } + + Iterator begin() + { + return Iterator(*this, 0, m_size ? 0 : SegmentSize); + } + + Iterator end() + { + return Iterator(*this, 0, SegmentSize); + } + + private: + typedef Vector Segment; + + void deleteAllSegments() + { + // Skip the first segment, because it's our inline segment, which was + // not created by new. + for (size_t i = 1; i < m_segments.size(); i++) + delete m_segments[i]; + } + + bool segmentExistsFor(size_t index) + { + return index / SegmentSize < m_segments.size(); + } + + Segment* segmentFor(size_t index) + { + return m_segments[index / SegmentSize]; + } + + size_t subscriptFor(size_t index) + { + return index % SegmentSize; + } + + void ensureSegmentsFor(size_t size) + { + size_t segmentCount = m_size / SegmentSize; + if (m_size % SegmentSize) + ++segmentCount; + segmentCount = std::max(segmentCount, 1); // We always have at least our inline segment. + + size_t neededSegmentCount = size / SegmentSize; + if (size % SegmentSize) + ++neededSegmentCount; + + // Fill up to N - 1 segments. + size_t end = neededSegmentCount - 1; + for (size_t i = segmentCount - 1; i < end; ++i) + ensureSegment(i, SegmentSize); + + // Grow segment N to accomodate the remainder. + ensureSegment(end, subscriptFor(size - 1) + 1); + } + + void ensureSegment(size_t segmentIndex, size_t size) + { + ASSERT(segmentIndex <= m_segments.size()); + if (segmentIndex == m_segments.size()) + m_segments.append(new Segment); + m_segments[segmentIndex]->grow(size); + } + + size_t m_size; + Segment m_inlineSegment; + Vector m_segments; + }; + +} // namespace WTF + +#endif // SegmentedVector_h diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/StringExtras.h b/src/3rdparty/webkit/JavaScriptCore/wtf/StringExtras.h index 926fd61..1c23390 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/StringExtras.h +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/StringExtras.h @@ -45,7 +45,7 @@ inline int snprintf(char* buffer, size_t count, const char* format, ...) return result; } -#if COMPILER(MSVC7) || PLATFORM(WIN_CE) +#if COMPILER(MSVC7) || PLATFORM(WINCE) inline int vsnprintf(char* buffer, size_t count, const char* format, va_list args) { @@ -54,7 +54,7 @@ inline int vsnprintf(char* buffer, size_t count, const char* format, va_list arg #endif -#if PLATFORM(WIN_CE) +#if PLATFORM(WINCE) inline int strnicmp(const char* string1, const char* string2, size_t count) { diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/Threading.h b/src/3rdparty/webkit/JavaScriptCore/wtf/Threading.h index 02fa3a4..b12f41f 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/Threading.h +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/Threading.h @@ -59,7 +59,7 @@ #ifndef Threading_h #define Threading_h -#if PLATFORM(WIN_CE) +#if PLATFORM(WINCE) #include #endif @@ -67,7 +67,7 @@ #include #include -#if PLATFORM(WIN_OS) && !PLATFORM(WIN_CE) +#if PLATFORM(WIN_OS) && !PLATFORM(WINCE) #include #elif PLATFORM(DARWIN) #include @@ -126,18 +126,22 @@ void detachThread(ThreadIdentifier); #if USE(PTHREADS) typedef pthread_mutex_t PlatformMutex; +typedef pthread_rwlock_t PlatformReadWriteLock; typedef pthread_cond_t PlatformCondition; #elif PLATFORM(GTK) typedef GOwnPtr PlatformMutex; +typedef void* PlatformReadWriteLock; // FIXME: Implement. typedef GOwnPtr PlatformCondition; #elif PLATFORM(QT) typedef QT_PREPEND_NAMESPACE(QMutex)* PlatformMutex; +typedef void* PlatformReadWriteLock; // FIXME: Implement. typedef QT_PREPEND_NAMESPACE(QWaitCondition)* PlatformCondition; #elif PLATFORM(WIN_OS) struct PlatformMutex { CRITICAL_SECTION m_internalMutex; size_t m_recursionCount; }; +typedef void* PlatformReadWriteLock; // FIXME: Implement. struct PlatformCondition { size_t m_waitersGone; size_t m_waitersBlocked; @@ -151,6 +155,7 @@ struct PlatformCondition { }; #else typedef void* PlatformMutex; +typedef void* PlatformReadWriteLock; typedef void* PlatformCondition; #endif @@ -171,6 +176,23 @@ private: typedef Locker MutexLocker; +class ReadWriteLock : Noncopyable { +public: + ReadWriteLock(); + ~ReadWriteLock(); + + void readLock(); + bool tryReadLock(); + + void writeLock(); + bool tryWriteLock(); + + void unlock(); + +private: + PlatformReadWriteLock m_readWriteLock; +}; + class ThreadCondition : Noncopyable { public: ThreadCondition(); @@ -190,7 +212,7 @@ private: #if PLATFORM(WIN_OS) #define WTF_USE_LOCKFREE_THREADSAFESHARED 1 -#if COMPILER(MINGW) || COMPILER(MSVC7) || PLATFORM(WIN_CE) +#if COMPILER(MINGW) || COMPILER(MSVC7) || PLATFORM(WINCE) inline void atomicIncrement(int* addend) { InterlockedIncrement(reinterpret_cast(addend)); } inline int atomicDecrement(int* addend) { return InterlockedDecrement(reinterpret_cast(addend)); } #else diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/ThreadingNone.cpp b/src/3rdparty/webkit/JavaScriptCore/wtf/ThreadingNone.cpp index e713102..46f23d2 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/ThreadingNone.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/ThreadingNone.cpp @@ -48,8 +48,8 @@ void Mutex::unlock() { } ThreadCondition::ThreadCondition() { } ThreadCondition::~ThreadCondition() { } -void ThreadCondition::wait(Mutex& mutex) { } -bool ThreadCondition::timedWait(Mutex& mutex, double absoluteTime) { return false; } +void ThreadCondition::wait(Mutex&) { } +bool ThreadCondition::timedWait(Mutex&, double) { return false; } void ThreadCondition::signal() { } void ThreadCondition::broadcast() { } diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/ThreadingPthreads.cpp b/src/3rdparty/webkit/JavaScriptCore/wtf/ThreadingPthreads.cpp index 3f5cbf5..d0e6df8 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/ThreadingPthreads.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/ThreadingPthreads.cpp @@ -183,7 +183,7 @@ ThreadIdentifier createThreadInternal(ThreadFunction entryPoint, void* data, con void setThreadNameInternal(const char* threadName) { -#if PLATFORM(DARWIN) && !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) +#if PLATFORM(DARWIN) && !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !PLATFORM(IPHONE) pthread_setname_np(threadName); #else UNUSED_PARAM(threadName); @@ -267,6 +267,61 @@ void Mutex::unlock() ASSERT_UNUSED(result, !result); } + +ReadWriteLock::ReadWriteLock() +{ + pthread_rwlock_init(&m_readWriteLock, NULL); +} + +ReadWriteLock::~ReadWriteLock() +{ + pthread_rwlock_destroy(&m_readWriteLock); +} + +void ReadWriteLock::readLock() +{ + int result = pthread_rwlock_rdlock(&m_readWriteLock); + ASSERT_UNUSED(result, !result); +} + +bool ReadWriteLock::tryReadLock() +{ + int result = pthread_rwlock_tryrdlock(&m_readWriteLock); + + if (result == 0) + return true; + if (result == EBUSY || result == EAGAIN) + return false; + + ASSERT_NOT_REACHED(); + return false; +} + +void ReadWriteLock::writeLock() +{ + int result = pthread_rwlock_wrlock(&m_readWriteLock); + ASSERT_UNUSED(result, !result); +} + +bool ReadWriteLock::tryWriteLock() +{ + int result = pthread_rwlock_trywrlock(&m_readWriteLock); + + if (result == 0) + return true; + if (result == EBUSY || result == EAGAIN) + return false; + + ASSERT_NOT_REACHED(); + return false; +} + +void ReadWriteLock::unlock() +{ + int result = pthread_rwlock_unlock(&m_readWriteLock); + ASSERT_UNUSED(result, !result); +} + ThreadCondition::ThreadCondition() { pthread_cond_init(&m_condition, NULL); diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h b/src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h index dcfeb29..050feb1 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h @@ -21,14 +21,11 @@ #ifndef WTF_Vector_h #define WTF_Vector_h -#include "Assertions.h" -#include "FastMalloc.h" +#include "FastAllocBase.h" #include "Noncopyable.h" #include "NotFound.h" #include "VectorTraits.h" #include -#include -#include #include namespace WTF { @@ -433,7 +430,7 @@ namespace WTF { }; template - class Vector { + class Vector : public FastAllocBase { private: typedef VectorBuffer Buffer; typedef VectorTypeOperations TypeOperations; diff --git a/src/3rdparty/webkit/JavaScriptCore/yarr/RegexJIT.cpp b/src/3rdparty/webkit/JavaScriptCore/yarr/RegexJIT.cpp index a64dd8d..29a9d18 100644 --- a/src/3rdparty/webkit/JavaScriptCore/yarr/RegexJIT.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/yarr/RegexJIT.cpp @@ -43,6 +43,17 @@ namespace JSC { namespace Yarr { class RegexGenerator : private MacroAssembler { friend void jitCompileRegex(JSGlobalData* globalData, RegexCodeBlock& jitObject, const UString& pattern, unsigned& numSubpatterns, const char*& error, bool ignoreCase, bool multiline); +#if PLATFORM_ARM_ARCH(7) + static const RegisterID input = ARM::r0; + static const RegisterID index = ARM::r1; + static const RegisterID length = ARM::r2; + + static const RegisterID output = ARM::r4; + static const RegisterID regT0 = ARM::r5; + static const RegisterID regT1 = ARM::r6; + + static const RegisterID returnRegister = ARM::r0; +#endif #if PLATFORM(X86) static const RegisterID input = X86::eax; static const RegisterID index = X86::edx; @@ -1278,34 +1289,47 @@ class RegexGenerator : private MacroAssembler { void generateEnter() { - // On x86 edi & esi are callee preserved registers. +#if PLATFORM(X86_64) + push(X86::ebp); + move(stackPointerRegister, X86::ebp); +#elif PLATFORM(X86) push(X86::ebp); move(stackPointerRegister, X86::ebp); -#if PLATFORM(X86) // TODO: do we need spill registers to fill the output pointer if there are no sub captures? push(X86::ebx); push(X86::edi); push(X86::esi); // load output into edi (2 = saved ebp + return address). -#if COMPILER(MSVC) + #if COMPILER(MSVC) loadPtr(Address(X86::ebp, 2 * sizeof(void*)), input); loadPtr(Address(X86::ebp, 3 * sizeof(void*)), index); loadPtr(Address(X86::ebp, 4 * sizeof(void*)), length); loadPtr(Address(X86::ebp, 5 * sizeof(void*)), output); -#else + #else loadPtr(Address(X86::ebp, 2 * sizeof(void*)), output); -#endif + #endif +#elif PLATFORM_ARM_ARCH(7) + push(ARM::r4); + push(ARM::r5); + push(ARM::r6); + move(ARM::r3, output); #endif } void generateReturn() { -#if PLATFORM(X86) +#if PLATFORM(X86_64) + pop(X86::ebp); +#elif PLATFORM(X86) pop(X86::esi); pop(X86::edi); pop(X86::ebx); -#endif pop(X86::ebp); +#elif PLATFORM_ARM_ARCH(7) + pop(ARM::r6); + pop(ARM::r5); + pop(ARM::r4); +#endif ret(); } @@ -1334,7 +1358,7 @@ public: { generate(); - PatchBuffer patchBuffer(this, globalData->executableAllocator.poolForSize(size())); + LinkBuffer patchBuffer(this, globalData->executableAllocator.poolForSize(size())); for (unsigned i = 0; i < m_backtrackRecords.size(); ++i) patchBuffer.patch(m_backtrackRecords[i].dataLabel, patchBuffer.locationOf(m_backtrackRecords[i].backtrackLocation)); diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index f3e81c1..5e73fee 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -4,8 +4,8 @@ This is a snapshot of the Qt port of WebKit from The commit imported was from the - origin/qtwebkit-4.6-staging branch/tag + qtwebkit-4.6-snapshot-24062009 branch/tag and has the sha1 checksum - 751940f0f1fb2599250632d7f0a3ead3930466af + 6d5a2a0472a6af0b7f781da018e76bb8522d57a5 diff --git a/src/3rdparty/webkit/WebCore/ChangeLog b/src/3rdparty/webkit/WebCore/ChangeLog index 14190f6..25427bc 100644 --- a/src/3rdparty/webkit/WebCore/ChangeLog +++ b/src/3rdparty/webkit/WebCore/ChangeLog @@ -1,95362 +1,3508 @@ -2009-06-10 Tor Arne Vestbø +2009-06-24 Simon Hausmann - Reviewed by Simon Hausmann. - - Fix the build of PluginView on Qt with 64-bit where we disable plugins - at compile time. - - Use the FooNone.cpp files at compile-time. - - * plugins/PluginPackageNone.cpp: - * plugins/mac/PluginPackageMac.cpp: - * plugins/mac/PluginViewMac.cpp: + Reviewed by Tor Arne Vestbø. -2009-06-08 Tor Arne Vestbø + Fix the build without ENABLE_VIDEO. - Reviewed by Simon Hausmann. + * html/CanvasRenderingContext2D.cpp: Add #if ENABLE guards. + * html/CanvasRenderingContext2D.h: Ditto. - [Qt] Don't enable ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH on Windows - - This define was brought in after refactoring some code from - PluginPackage(Qt|Gtk).cpp into the shared PluginPackage.cpp. +2009-06-24 Siddhartha Chattopadhyay - * WebCore.pro: + Reviewed by Eric Seidel. -2009-06-08 Tor Arne Vestbø + Fix for https://bugs.webkit.org/show_bug.cgi?id=26200 which I introduced earlier. I had + the smartReplace set TRUE initially, which was wrong since the purpose of this call is + to just replace the selection, and place the caret at the end of the selection it replaced. - Reviewed by Simon Hausmann. + * editing/Editor.cpp: + (WebCore::Editor::markMisspellingsAfterTypingToPosition): + * manual-tests/textarea-caret-position-after-auto-spell-correct.html: Added. - [Qt] Use $QMAKE_PATH_SEP instead of hardcoded / to fix Windows build +2009-06-24 Kevin Watters - * WebCore.pro: + Reviewed by Kevin Ollivier. -2009-06-08 Laszlo Gombos + Don't use an unsigned int for intervalInMS because we sometimes initialize + it with a negative value. - Reviewed by Ariya Hidayat. + * platform/wx/SharedTimerWx.cpp: + (WebCore::setSharedTimerFireTime): - [Qt] Build fix when NETSCAPE_PLUGIN_API support is turned off - https://bugs.webkit.org/show_bug.cgi?id=26244 +2009-06-24 Eric Seidel - * WebCore.pro: Define PLUGIN_PACKAGE_SIMPLE_HASH only if - NETSCAPE_PLUGIN_API is turned on - * plugins/PluginPackage.cpp: Guard initializeBrowserFuncs() - * plugins/PluginViewNone.cpp: Match guards with PluginView.h + No review, build fix only. -2009-06-07 Dan Bernstein + The previous checkin had an improper merge. This fixes the build. - Reviewed by Sam Weinig. + * page/DragController.cpp: + (WebCore::DragController::tryDocumentDrag): - - fix -[WebView _selectionIsAll] returns YES - when the selection is inside a text field. +2009-06-05 Eric Seidel - * editing/VisibleSelection.cpp: - (WebCore::VisibleSelection::isAll): Return false if the selection is in - a shadow tree. + Reviewed by Oliver Hunt. -2009-06-07 Gustavo Noronha Silva + https://bugs.webkit.org/show_bug.cgi?id=25922 + JS setting dropEffect = "none" causes tryDHTMLDrag + to return DragOperationNone. Which is also the value + tryDHTMLDrag previously used to indicate JS did not + want to handle the drag. - Reviewed by Holger Freyther. + Make it possible for the DragController::try* methods + to return a bool to indicate if javascript accepted + or rejected the drag event, separate from the DragOperation. - https://bugs.webkit.org/show_bug.cgi?id=26106 - [GTK] Crashes when you keep a combo open during a page transition, then close it + Tests: + - fast/events/drag-to-navigate.html + - fast/events/prevent-drag-to-navigate.html - Hide the combo popup and disconnect from its signals during - PopupMenu destruction to handle this exceptional case with no - crash. + * page/DragController.cpp: + (WebCore::DragController::dragEnteredOrUpdated): + (WebCore::DragController::tryDocumentDrag): + (WebCore::defaultOperationForDrag): + (WebCore::DragController::tryDHTMLDrag): + * page/DragController.h: - * platform/gtk/PopupMenuGtk.cpp: - (WebCore::PopupMenu::~PopupMenu): - (WebCore::PopupMenu::menuUnmapped): +2009-06-23 Oliver Hunt and Eric Carlson -2009-06-06 Sam Weinig + Reviewed by Sam Weinig and Dave Hyatt. - Reviewed by Dan Bernstein. + Add Canvas API to allow drawing of