summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/ChangeLog-2013-04-24
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/ChangeLog-2013-04-24')
-rw-r--r--Source/JavaScriptCore/ChangeLog-2013-04-2429044
1 files changed, 29044 insertions, 0 deletions
diff --git a/Source/JavaScriptCore/ChangeLog-2013-04-24 b/Source/JavaScriptCore/ChangeLog-2013-04-24
new file mode 100644
index 000000000..d3b5d15cd
--- /dev/null
+++ b/Source/JavaScriptCore/ChangeLog-2013-04-24
@@ -0,0 +1,29044 @@
+2013-04-23 Filip Pizlo <fpizlo@apple.com>
+
+ DFG CFA filters CheckFunction in a really weird way, and assumes that the function's structure won't change
+ https://bugs.webkit.org/show_bug.cgi?id=115077
+
+ Reviewed by Oliver Hunt.
+
+ The filtering did three things that are unusual:
+
+ 1) AbstractValue::filterByValue() assumed that the passed value's structure wouldn't change, in
+ the sense that at it assumed it could use that value's *current* structure to do structure
+ filtering. Filtering by structure only makes sense if you can prove that the given value will
+ always have that structure (for example by either using a watchpoing or emitting code that
+ checks that structure at run-time).
+
+ 2) AbstractValue::filterByValue() and the CheckFunction case in AbstractState::executeEffects()
+ tried to invalidate the CFA based on whether the filtration led to an empty value. This is
+ well-intentioned, but it's not how the CFA currently works. It's inconsistent with other
+ parts of the CFA. We shouldn't introduce this feature into just one kind of filtration and
+ not have it elsewhere.
+
+ 3) The attempt to detect when the value was empty was actually implemented incorrectly. It
+ relied on AbstractValue::validate(). That method says that a concrete value does not belong
+ to the abstract value if it has a different structure. This makes sense for the other place
+ where AbstractValue::validate() is called: during OSR entry, where we are talking about a
+ JSValue that we see *right now*. It doesn't make sense in the CFA, since in the CFA any
+ value we observe in the code is a value whose structure may change when the code starts
+ running, and so we cannot use the value's current structure to infer things about the code
+ when it starts running.
+
+ I fixed the above problems by (1) changing filterByValue() to not filter the structure, (2)
+ changing filterByValue() and the CheckFunction case to not invalidate the CFA, and (3)
+ making sure that nobody else was misusing AbstractValue::validate() (they weren't).
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::executeEffects):
+ * dfg/DFGAbstractValue.h:
+ (JSC::DFG::AbstractValue::filterByValue):
+
+2013-04-23 Oliver Hunt <oliver@apple.com>
+
+ Default ParserError() initialiser doesn't initialise all fields
+ https://bugs.webkit.org/show_bug.cgi?id=115074
+
+ Reviewed by Joseph Pecoraro.
+
+ Only the jsc command prompt depended on this, but we'll fix it to
+ be on the safe side.
+
+ * parser/ParserError.h:
+ (JSC::ParserError::ParserError):
+
+2013-04-23 Christophe Dumez <ch.dumez@sisa.samsung.com>
+
+ Global constructors should be configurable and not enumerable
+ https://bugs.webkit.org/show_bug.cgi?id=110573
+
+ Reviewed by Geoffrey Garen.
+
+ Update JSObject::deleteProperty() so that mark to set the property
+ value to undefined if it is in static hashtable of properties. The
+ previous code was not doing anything in this case and this meant
+ we could not remove builtin DOMWindow properties such as
+ "ProgressEvent" even if marked as Deletable.
+
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::deleteProperty):
+ * runtime/Lookup.h:
+ (JSC):
+ (JSC::putEntry):
+ (JSC::lookupPut):
+
+2013-04-23 Geoffrey Garen <ggaren@apple.com>
+
+ Filled out more cases of branch folding in bytecode when emitting
+ expressions into a branching context
+ https://bugs.webkit.org/show_bug.cgi?id=115057
+
+ Reviewed by Filip Pizlo.
+
+ This covers a few cases like:
+
+ - while (true) { }
+ - while (1) { }
+ - if (x) break;
+ - if (x) continue;
+ - if (boolean_expr == boolean_const) { }
+ - if (boolean_expr == 1_or_0) { }
+ - if (bitop == 1_or_0) { }
+
+ This also works, but will bring shame on your family:
+
+ - while ("hello world") { }
+
+ No change on the benchmarks we track, but a 2.5X speedup on a microbenchmark
+ that uses these techniques.
+
+ * JavaScriptCore.order: Order!
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitNewArray):
+ (JSC::BytecodeGenerator::emitThrowReferenceError):
+ (JSC::BytecodeGenerator::emitReadOnlyExceptionIfNeeded):
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::BytecodeGenerator::shouldEmitDebugHooks): Updated ancillary code
+ for interface simplifications.
+
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::ConstantNode::emitBytecodeInConditionContext): Constants can
+ jump unconditionally when used within a condition context.
+
+ (JSC::ConstantNode::emitBytecode):
+ (JSC::StringNode::jsValue): Gave constants a common base class so I
+ could implement their codegen just once.
+
+ (JSC::BinaryOpNode::emitBytecodeInConditionContext):
+ (JSC::canFoldToBranch):
+ (JSC::BinaryOpNode::tryFoldToBranch): Fold (!/=)= and (!/=)== where
+ appropriate. A lot of cases are not appropriate because of the surprising
+ type conversion semantics of ==. For example, if (number == true) { } is
+ not the same as if (number) { } because the former will up-convert true
+ to number and then do numeric comparison.
+
+ (JSC::singleStatement):
+ (JSC::IfElseNode::tryFoldBreakAndContinue):
+ (JSC::IfElseNode::emitBytecode):
+ (JSC::ContinueNode::trivialTarget):
+ (JSC::BreakNode::trivialTarget): Fold "if (expression) break" and
+ "if (expression) continue" into direct jumps from expression.
+
+ * parser/ASTBuilder.h:
+ (ASTBuilder):
+ (JSC::ASTBuilder::createIfStatement):
+ * parser/NodeConstructors.h:
+ (JSC::ConstantNode::ConstantNode):
+ (JSC):
+ (JSC::NullNode::NullNode):
+ (JSC::BooleanNode::BooleanNode):
+ (JSC::NumberNode::NumberNode):
+ (JSC::StringNode::StringNode):
+ (JSC::IfElseNode::IfElseNode):
+ * parser/Nodes.h:
+ (JSC::ExpressionNode::isConstant):
+ (JSC::ExpressionNode::isBoolean):
+ (JSC::StatementNode::isBreak):
+ (JSC::StatementNode::isContinue):
+ (ConstantNode):
+ (JSC::ConstantNode::isPure):
+ (JSC::ConstantNode::isConstant):
+ (NullNode):
+ (JSC::NullNode::jsValue):
+ (JSC::BooleanNode::value):
+ (JSC::BooleanNode::isBoolean):
+ (JSC::BooleanNode::jsValue):
+ (JSC::NumberNode::value):
+ (NumberNode):
+ (JSC::NumberNode::jsValue):
+ (StringNode):
+ (BinaryOpNode):
+ (IfElseNode):
+ (ContinueNode):
+ (JSC::ContinueNode::isContinue):
+ (BreakNode):
+ (JSC::BreakNode::isBreak):
+ * parser/Parser.cpp:
+ (JSC::::parseIfStatement):
+ * parser/ResultType.h:
+ (JSC::ResultType::definitelyIsBoolean):
+ (ResultType):
+ * runtime/JSCJSValueInlines.h:
+ (JSC::JSValue::pureToBoolean):
+ * runtime/JSCell.h:
+ * runtime/JSCellInlines.h:
+ (JSC::JSCell::pureToBoolean): Updated for interface changes above.
+
+2013-04-23 Mark Lam <mark.lam@apple.com>
+
+ Simplify the baseline JIT loop hint call site.
+ https://bugs.webkit.org/show_bug.cgi?id=115052.
+
+ Reviewed by Geoffrey Garen.
+
+ Moved the watchdog timer check after the JIT optimization check. This
+ ensures that the JIT opimization counter is incremented on every loop
+ hint even if the watchdog timer fires.
+
+ Removed the code that allows the JIT OSR to happen if the watchdog
+ timer fires but does not result in a termination. It is extremely rare
+ that the JIT optimization counter would trigger an OSR on the same pass
+ as when the watchdog timer fire. If it does happen, we'll simply hold
+ off on servicing the watchdog timer until the next pass (because it's
+ not time critical).
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_loop_hint):
+ (JSC::JIT::emitSlow_op_loop_hint):
+
+2013-04-23 Roger Fong <roger_fong@apple.com>
+
+ AppleWin build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+
+2013-04-18 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: Update public header documentation
+ https://bugs.webkit.org/show_bug.cgi?id=114841
+
+ Reviewed by Geoffrey Garen.
+
+ Added documentation for the newly added object lifetime-related stuff.
+
+ * API/JSManagedValue.h:
+ * API/JSVirtualMachine.h:
+
+2013-04-22 Mark Lam <mark.lam@apple.com>
+
+ Fix a typo in MacroAssemblerARMv7.h.
+ https://bugs.webkit.org/show_bug.cgi?id=115011.
+
+ Reviewed by Geoffrey Garen.
+
+ * assembler/ARMAssembler.h: Fix a comment.
+ * assembler/ARMv7Assembler.h: Added some comments.
+ * assembler/MacroAssemblerARMv7.h:
+ - ARMAssembler::PL should be ARMv7Assembler::ConditionPL.
+
+2013-04-22 Julien Brianceau <jbrianceau@nds.com>
+
+ Add branchAdd32 missing implementation in SH4 base JIT.
+ This should fix SH4 build, broken since r148893.
+ https://bugs.webkit.org/show_bug.cgi?id=114993.
+
+ Reviewed by Oliver Hunt.
+
+ * assembler/MacroAssemblerSH4.h:
+ (JSC::MacroAssemblerSH4::branchAdd32):
+ (MacroAssemblerSH4):
+
+2013-04-22 Benjamin Poulain <bpoulain@apple.com>
+
+ Windows build fix after r148921
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+
+2013-04-22 Benjamin Poulain <benjamin@webkit.org>
+
+ Remove the memory instrumentation code
+ https://bugs.webkit.org/show_bug.cgi?id=114931
+
+ Reviewed by Andreas Kling.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+
+2013-04-22 Mark Lam <mark.lam@apple.com>
+
+ Fix broken 32-bit build to green the bots.
+ https://bugs.webkit.org/show_bug.cgi?id=114968.
+
+ Unreviewed.
+
+ Basically, I moved a JIT::emit_op_loop_hint() and JIT::emitSlow_op_loop_hint()
+ into common code where they belong, instead of the 64-bit specific section.
+
+ Also fixed some SH4 assertions failures which were also caused by
+ https://bugs.webkit.org/show_bug.cgi?id=114963. Thanks to Julien Brianceau
+ for pointing this out.
+
+ * assembler/MacroAssemblerSH4.h:
+ (JSC::MacroAssemblerSH4::branchAdd32):
+ * jit/JITOpcodes.cpp:
+ (JSC):
+ (JSC::JIT::emit_op_loop_hint):
+ (JSC::JIT::emitSlow_op_loop_hint):
+
+2013-04-22 Oliver Hunt <oliver@apple.com>
+
+ Perform null check before trying to use the result of readline()
+
+ RS=Gavin
+
+ * jsc.cpp:
+ (runInteractive):
+
+2013-04-22 Oliver Hunt <oliver@apple.com>
+
+ Fix assertions to account for new Vector layout
+
+ RS=Gavin
+
+ * llint/LLIntData.cpp:
+ (JSC::LLInt::Data::performAssertions):
+
+2013-04-22 Mark Lam <mark.lam@apple.com>
+
+ Change baseline JIT watchdog timer check to use the proper fast slow path
+ infrastructure.
+ https://bugs.webkit.org/show_bug.cgi?id=114963.
+
+ Reviewed by Oliver Hunt.
+
+ Edit: The PositiveOrZero condition is added because it is needed for
+ the JIT optimization check. Previously, the JIT check branches around
+ the slow path if the test result is 'Signed' i.e. negative. Since we
+ now need to test for a condition that branches to the slow path (not
+ around it), we need the complement of 'Signed / Negative' i.e. Positive
+ or zero.
+
+ SH4 parts contributed by Julien Brianceau.
+
+ * assembler/ARMAssembler.h:
+ * assembler/MacroAssemblerARM.h:
+ * assembler/MacroAssemblerARMv7.h:
+ * assembler/MacroAssemblerMIPS.h:
+ (JSC::MacroAssemblerMIPS::branchAdd32):
+ * assembler/MacroAssemblerSH4.h:
+ (JSC::MacroAssemblerSH4::branchAdd32):
+ * assembler/MacroAssemblerX86Common.h:
+ * assembler/SH4Assembler.h:
+ * jit/JIT.cpp:
+ (JSC::JIT::emitEnterOptimizationCheck):
+ (JSC::JIT::privateCompileSlowCases):
+ * jit/JIT.h:
+ (JSC::JIT::emitEnterOptimizationCheck):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_loop_hint):
+ (JSC::JIT::emitSlow_op_loop_hint):
+ (JSC::JIT::emit_op_enter):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::emit_op_enter):
+
+2013-04-22 Andreas Kling <akling@apple.com>
+
+ Shrink baseline size of WTF::Vector on 64-bit by switching to unsigned capacity and size.
+ <http://webkit.org/b/97268>
+ <rdar://problem/12376519>
+
+ Reviewed by Sam Weinig.
+
+ Update LLInt WTF::Vector offset constants to match the new memory layout.
+
+ * llint/LowLevelInterpreter.asm:
+
+2013-04-21 Oliver Hunt <oliver@apple.com>
+
+ JS Lexer and Parser should be more informative when they encounter errors
+ https://bugs.webkit.org/show_bug.cgi?id=114924
+
+ Reviewed by Filip Pizlo.
+
+ Add new tokens to represent the various ways that parsing and lexing have failed.
+ This gives us the ability to produce better error messages in some cases,
+ and to indicate whether or not the failure was due to invalid source, or simply
+ early termination.
+
+ The jsc prompt now makes use of this so that you can write functions that
+ are more than one line long.
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::generate):
+ * jsc.cpp:
+ (stringFromUTF):
+ (jscSource):
+ (runInteractive):
+ * parser/Lexer.cpp:
+ (JSC::::parseFourDigitUnicodeHex):
+ (JSC::::parseIdentifierSlowCase):
+ (JSC::::parseString):
+ (JSC::::parseStringSlowCase):
+ (JSC::::lex):
+ * parser/Lexer.h:
+ (UnicodeHexValue):
+ (JSC::Lexer::UnicodeHexValue::UnicodeHexValue):
+ (JSC::Lexer::UnicodeHexValue::valueType):
+ (JSC::Lexer::UnicodeHexValue::isValid):
+ (JSC::Lexer::UnicodeHexValue::value):
+ (Lexer):
+ * parser/Parser.h:
+ (JSC::Parser::getTokenName):
+ (JSC::Parser::updateErrorMessageSpecialCase):
+ (JSC::::parse):
+ * parser/ParserError.h:
+ (ParserError):
+ (JSC::ParserError::ParserError):
+ * parser/ParserTokens.h:
+ * runtime/Completion.cpp:
+ (JSC):
+ (JSC::checkSyntax):
+ * runtime/Completion.h:
+ (JSC):
+
+2013-04-21 Mark Lam <mark.lam@apple.com>
+
+ Refactor identical inline functions in JSVALUE64 and JSVALUE32_64 sections
+ out into the common section.
+ https://bugs.webkit.org/show_bug.cgi?id=114910.
+
+ Reviewed by Filip Pizlo.
+
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+ (JSC::DFG::SpeculativeJIT::callOperation):
+
+2013-04-20 Allan Sandfeld Jensen <allan.jensen@digia.com>
+
+ LLint should be able to use x87 instead of SSE for floating pointer
+ https://bugs.webkit.org/show_bug.cgi?id=112239
+
+ Reviewed by Filip Pizlo.
+
+ Implements LLInt floating point operations in x87, to ensure we support
+ x86 without SSE2.
+
+ X86 (except 64bit) now defaults to using x87 instructions in order to
+ support all 32bit x86 back to i686. The implementation uses the fucomi
+ instruction from i686 which sets the new minimum.
+
+ The FPU registers must always be empty on entering or exiting a function.
+ We make sure to only use two X87 registers, and they are always emptied
+ before calling deeper functions or returning from the LLInt.
+
+ * jit/JITStubs.cpp:
+ (JSC): Empty FPU registers before exiting.
+ * llint/LowLevelInterpreter32_64.asm:
+ * llint/LowLevelInterpreter64.asm:
+ * offlineasm/instructions.rb:
+ * offlineasm/x86.rb:
+
+2013-04-19 Roger Fong <roger_fong@apple.com>
+
+ Remove uses of WebKit_Source from AppleWin build in JavaScriptCore.
+
+ * JavaScriptCore.vcxproj/JavaScriptCore.make:
+ * JavaScriptCore.vcxproj/build-generated-files.sh:
+ * JavaScriptCore.vcxproj/copy-files.cmd:
+ * JavaScriptCore.vcxproj/testRegExp/testRegExp.vcxproj:
+
+2013-04-19 Benjamin Poulain <bpoulain@apple.com>
+
+ Rename JSStringJoiner::build() to join()
+ https://bugs.webkit.org/show_bug.cgi?id=114845
+
+ Reviewed by Geoffrey Garen.
+
+ The method name build() came from StringBuilder history. It does not make much
+ sense on the StringJoiner.
+
+ * runtime/ArrayPrototype.cpp:
+ (JSC::arrayProtoFuncToString):
+ (JSC::arrayProtoFuncToLocaleString):
+ (JSC::arrayProtoFuncJoin):
+ * runtime/JSStringJoiner.cpp:
+ (JSC::JSStringJoiner::join):
+ * runtime/JSStringJoiner.h:
+ (JSStringJoiner):
+
+2013-04-19 Roger Fong <roger_fong@apple.com>
+
+ Unreviewed. WebKit_Source is incorrectly set.
+
+ * JavaScriptCore.vcxproj/JavaScriptCore.make:
+
+2013-04-19 Martin Robinson <mrobinson@igalia.com>
+
+ [GTK] JSCore.gir.in has a few problems
+ https://bugs.webkit.org/show_bug.cgi?id=114710
+
+ Reviewed by Philippe Normand.
+
+ * GNUmakefile.am: Add the gobject introspection steps for JavaScriptCore here,
+ because they are shared between WebKit1 and WebKit2.
+ * JavaScriptCore.gir.in: Added. Moved from the WebKit1 directory. Now written
+ as foreign interfaces and referencing the javascriptcoregtk library.
+
+2013-04-18 Benjamin Poulain <bpoulain@apple.com>
+
+ Use StringJoiner to create the JSString of arrayProtoFuncToString
+ https://bugs.webkit.org/show_bug.cgi?id=114779
+
+ Reviewed by Geoffrey Garen.
+
+ The function arrayProtoFuncToString was just a glorified JSStringJoiner.
+ This patch replaces it by JSStringJoiner to simplify the code and enjoy any optimization
+ made on JSStringJoiner.
+
+ For some reason, this makes the execution 3.4% faster, despite having almost identical code.
+
+ * runtime/ArrayPrototype.cpp:
+ (JSC::arrayProtoFuncToString):
+
+2013-04-18 Oliver Hunt <oliver@apple.com>
+
+ StackFrame::column() returning bogus value
+ https://bugs.webkit.org/show_bug.cgi?id=114840
+
+ Reviewed by Gavin Barraclough.
+
+ Don't add one part of the expression offset to the other part of the expression.
+ Make StackFrame::toString() include the column info.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::StackFrame::expressionInfo):
+ (JSC::StackFrame::toString):
+
+2013-04-18 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Crash beneath JSC::JIT::privateCompileSlowCases @ stephenrdonaldson.com
+ https://bugs.webkit.org/show_bug.cgi?id=114774
+
+ Reviewed by Geoffrey Garen.
+
+ We're not linking up all of the slow cases in the baseline JIT when compiling put_to_base.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emitSlow_op_put_to_base):
+
+2013-04-18 Mark Lam <mark.lam@apple.com>
+
+ Interpreter entry points should throw the TerminatedExecutionException from the caller frame.
+ https://bugs.webkit.org/show_bug.cgi?id=114816.
+
+ Reviewed by Oliver Hunt.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::execute):
+ (JSC::Interpreter::executeCall):
+ (JSC::Interpreter::executeConstruct):
+
+2013-04-18 Gabor Rapcsanyi <rgabor@webkit.org>
+
+ LLInt ARM backend should not use the d8 register as scratch register
+ https://bugs.webkit.org/show_bug.cgi?id=114811
+
+ Reviewed by Filip Pizlo.
+
+ The d8 register must preserved across function calls and should
+ not used as scratch register. Changing it to d6.
+
+ * offlineasm/arm.rb:
+
+2013-04-18 Geoffrey Garen <ggaren@apple.com>
+
+ Removed HeapTimer::synchronize
+ https://bugs.webkit.org/show_bug.cgi?id=114832
+
+ Reviewed by Mark Hahnenberg.
+
+ HeapTimer::synchronize was a flawed attempt to make HeapTimer thread-safe.
+ Instead, we use proper locking now.
+
+ This is a slight API change, since the GC timer will now only fire in the
+ run loop that created the JS VM, even if another run loop later executes
+ some JS.
+
+ * API/APIShims.h:
+ (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
+ * heap/HeapTimer.cpp:
+ (JSC):
+ * heap/HeapTimer.h:
+ (HeapTimer):
+
+2013-04-17 Geoffrey Garen <ggaren@apple.com>
+
+ Renamed JSGlobalData to VM
+ https://bugs.webkit.org/show_bug.cgi?id=114777
+
+ Reviewed by Phil Pizlo.
+
+ * API/APICast.h:
+ (JSC):
+ (toJS):
+ (toRef):
+ * API/APIShims.h:
+ (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
+ (APIEntryShimWithoutLock):
+ (JSC::APIEntryShim::APIEntryShim):
+ (APIEntryShim):
+ (JSC::APIEntryShim::~APIEntryShim):
+ (JSC::APICallbackShim::APICallbackShim):
+ (JSC::APICallbackShim::~APICallbackShim):
+ (APICallbackShim):
+ * API/JSAPIWrapperObject.h:
+ (JSAPIWrapperObject):
+ * API/JSAPIWrapperObject.mm:
+ (JSC::::createStructure):
+ (JSC::JSAPIWrapperObject::JSAPIWrapperObject):
+ (JSC::JSAPIWrapperObject::finishCreation):
+ (JSC::JSAPIWrapperObject::visitChildren):
+ * API/JSBase.cpp:
+ (JSGarbageCollect):
+ (JSReportExtraMemoryCost):
+ (JSSynchronousGarbageCollectForDebugging):
+ * API/JSCallbackConstructor.cpp:
+ (JSC::JSCallbackConstructor::JSCallbackConstructor):
+ (JSC::JSCallbackConstructor::finishCreation):
+ * API/JSCallbackConstructor.h:
+ (JSC::JSCallbackConstructor::createStructure):
+ * API/JSCallbackFunction.cpp:
+ (JSC::JSCallbackFunction::finishCreation):
+ (JSC::JSCallbackFunction::create):
+ * API/JSCallbackFunction.h:
+ (JSCallbackFunction):
+ (JSC::JSCallbackFunction::createStructure):
+ * API/JSCallbackObject.cpp:
+ (JSC::::create):
+ (JSC::::createStructure):
+ * API/JSCallbackObject.h:
+ (JSC::JSCallbackObjectData::setPrivateProperty):
+ (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
+ (JSCallbackObject):
+ (JSC::JSCallbackObject::setPrivateProperty):
+ * API/JSCallbackObjectFunctions.h:
+ (JSC::::JSCallbackObject):
+ (JSC::::finishCreation):
+ (JSC::::put):
+ (JSC::::staticFunctionGetter):
+ * API/JSClassRef.cpp:
+ (OpaqueJSClassContextData::OpaqueJSClassContextData):
+ (OpaqueJSClass::contextData):
+ (OpaqueJSClass::prototype):
+ * API/JSClassRef.h:
+ (OpaqueJSClassContextData):
+ * API/JSContext.mm:
+ (-[JSContext setException:]):
+ (-[JSContext initWithGlobalContextRef:]):
+ (+[JSContext contextWithGlobalContextRef:]):
+ * API/JSContextRef.cpp:
+ (JSContextGroupCreate):
+ (JSContextGroupRelease):
+ (JSGlobalContextCreate):
+ (JSGlobalContextCreateInGroup):
+ (JSGlobalContextRetain):
+ (JSGlobalContextRelease):
+ (JSContextGetGroup):
+ (JSContextCreateBacktrace):
+ * API/JSObjectRef.cpp:
+ (JSObjectMake):
+ (JSObjectMakeConstructor):
+ (JSObjectMakeFunction):
+ (JSObjectSetPrototype):
+ (JSObjectHasProperty):
+ (JSObjectGetProperty):
+ (JSObjectSetProperty):
+ (JSObjectDeleteProperty):
+ (JSObjectGetPrivateProperty):
+ (JSObjectSetPrivateProperty):
+ (JSObjectDeletePrivateProperty):
+ (OpaqueJSPropertyNameArray::OpaqueJSPropertyNameArray):
+ (OpaqueJSPropertyNameArray):
+ (JSObjectCopyPropertyNames):
+ (JSPropertyNameArrayRelease):
+ (JSPropertyNameAccumulatorAddName):
+ * API/JSScriptRef.cpp:
+ (OpaqueJSScript::create):
+ (OpaqueJSScript::vm):
+ (OpaqueJSScript::OpaqueJSScript):
+ (OpaqueJSScript):
+ (parseScript):
+ * API/JSVirtualMachine.mm:
+ (scanExternalObjectGraph):
+ * API/JSVirtualMachineInternal.h:
+ (JSC):
+ * API/JSWrapperMap.mm:
+ (makeWrapper):
+ * API/ObjCCallbackFunction.h:
+ (JSC::ObjCCallbackFunction::createStructure):
+ * API/ObjCCallbackFunction.mm:
+ (JSC::ObjCCallbackFunction::create):
+ * API/OpaqueJSString.cpp:
+ (OpaqueJSString::identifier):
+ * API/OpaqueJSString.h:
+ (JSC):
+ (OpaqueJSString):
+ * GNUmakefile.list.am:
+ * JSCTypedArrayStubs.h:
+ (JSC):
+ * JavaScriptCore.order:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * KeywordLookupGenerator.py:
+ (Trie.printSubTreeAsC):
+ * Target.pri:
+ * assembler/ARMAssembler.cpp:
+ (JSC::ARMAssembler::executableCopy):
+ * assembler/ARMAssembler.h:
+ (ARMAssembler):
+ * assembler/AssemblerBuffer.h:
+ (JSC::AssemblerBuffer::executableCopy):
+ * assembler/AssemblerBufferWithConstantPool.h:
+ (JSC::AssemblerBufferWithConstantPool::executableCopy):
+ * assembler/LinkBuffer.cpp:
+ (JSC::LinkBuffer::linkCode):
+ * assembler/LinkBuffer.h:
+ (JSC):
+ (JSC::LinkBuffer::LinkBuffer):
+ (LinkBuffer):
+ * assembler/MIPSAssembler.h:
+ (JSC::MIPSAssembler::executableCopy):
+ * assembler/SH4Assembler.h:
+ (JSC::SH4Assembler::executableCopy):
+ * assembler/X86Assembler.h:
+ (JSC::X86Assembler::executableCopy):
+ (JSC::X86Assembler::X86InstructionFormatter::executableCopy):
+ * bytecode/CallLinkInfo.cpp:
+ (JSC::CallLinkInfo::unlink):
+ * bytecode/CallLinkInfo.h:
+ (CallLinkInfo):
+ * bytecode/CodeBlock.cpp:
+ (JSC::dumpStructure):
+ (JSC::CodeBlock::printStructures):
+ (JSC::CodeBlock::CodeBlock):
+ (JSC::CodeBlock::~CodeBlock):
+ (JSC::CodeBlock::visitStructures):
+ (JSC::CodeBlock::finalizeUnconditionally):
+ (JSC::CodeBlock::createActivation):
+ (JSC::CodeBlock::unlinkCalls):
+ (JSC::CodeBlock::unlinkIncomingCalls):
+ (JSC::CodeBlock::findClosureCallForReturnPC):
+ (JSC::ProgramCodeBlock::jettisonImpl):
+ (JSC::EvalCodeBlock::jettisonImpl):
+ (JSC::FunctionCodeBlock::jettisonImpl):
+ (JSC::CodeBlock::predictedMachineCodeSize):
+ (JSC::CodeBlock::usesOpcode):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::appendWeakReference):
+ (JSC::CodeBlock::appendWeakReferenceTransition):
+ (JSC::CodeBlock::setJITCode):
+ (JSC::CodeBlock::setGlobalData):
+ (JSC::CodeBlock::vm):
+ (JSC::CodeBlock::valueProfileForBytecodeOffset):
+ (JSC::CodeBlock::addConstant):
+ (JSC::CodeBlock::setConstantRegisters):
+ (CodeBlock):
+ (JSC::CodeBlock::WeakReferenceTransition::WeakReferenceTransition):
+ * bytecode/EvalCodeCache.h:
+ (JSC::EvalCodeCache::getSlow):
+ * bytecode/GetByIdStatus.cpp:
+ (JSC::GetByIdStatus::computeFromLLInt):
+ (JSC::GetByIdStatus::computeForChain):
+ (JSC::GetByIdStatus::computeFor):
+ * bytecode/GetByIdStatus.h:
+ (GetByIdStatus):
+ * bytecode/Instruction.h:
+ (JSC::Instruction::Instruction):
+ * bytecode/ObjectAllocationProfile.h:
+ (JSC::ObjectAllocationProfile::initialize):
+ (JSC::ObjectAllocationProfile::possibleDefaultPropertyCount):
+ * bytecode/PolymorphicAccessStructureList.h:
+ (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set):
+ (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList):
+ * bytecode/PolymorphicPutByIdList.h:
+ (JSC::PutByIdAccess::transition):
+ (JSC::PutByIdAccess::replace):
+ * bytecode/PreciseJumpTargets.cpp:
+ (JSC::computePreciseJumpTargets):
+ * bytecode/PutByIdStatus.cpp:
+ (JSC::PutByIdStatus::computeFromLLInt):
+ (JSC::PutByIdStatus::computeFor):
+ * bytecode/PutByIdStatus.h:
+ (JSC):
+ (PutByIdStatus):
+ * bytecode/ResolveGlobalStatus.cpp:
+ (JSC::computeForStructure):
+ * bytecode/SamplingTool.cpp:
+ (JSC::SamplingTool::notifyOfScope):
+ * bytecode/SamplingTool.h:
+ (JSC::ScriptSampleRecord::ScriptSampleRecord):
+ (SamplingTool):
+ * bytecode/StructureStubInfo.h:
+ (JSC::StructureStubInfo::initGetByIdSelf):
+ (JSC::StructureStubInfo::initGetByIdProto):
+ (JSC::StructureStubInfo::initGetByIdChain):
+ (JSC::StructureStubInfo::initPutByIdTransition):
+ (JSC::StructureStubInfo::initPutByIdReplace):
+ * bytecode/UnlinkedCodeBlock.cpp:
+ (JSC::generateFunctionCodeBlock):
+ (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
+ (JSC::UnlinkedFunctionExecutable::link):
+ (JSC::UnlinkedFunctionExecutable::fromGlobalCode):
+ (JSC::UnlinkedFunctionExecutable::codeBlockFor):
+ (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
+ * bytecode/UnlinkedCodeBlock.h:
+ (JSC::UnlinkedFunctionExecutable::create):
+ (UnlinkedFunctionExecutable):
+ (JSC::UnlinkedFunctionExecutable::finishCreation):
+ (JSC::UnlinkedFunctionExecutable::createStructure):
+ (JSC::UnlinkedCodeBlock::addRegExp):
+ (JSC::UnlinkedCodeBlock::addConstant):
+ (JSC::UnlinkedCodeBlock::addFunctionDecl):
+ (JSC::UnlinkedCodeBlock::addFunctionExpr):
+ (JSC::UnlinkedCodeBlock::vm):
+ (UnlinkedCodeBlock):
+ (JSC::UnlinkedCodeBlock::finishCreation):
+ (JSC::UnlinkedGlobalCodeBlock::UnlinkedGlobalCodeBlock):
+ (JSC::UnlinkedProgramCodeBlock::create):
+ (JSC::UnlinkedProgramCodeBlock::addFunctionDeclaration):
+ (JSC::UnlinkedProgramCodeBlock::UnlinkedProgramCodeBlock):
+ (JSC::UnlinkedProgramCodeBlock::createStructure):
+ (JSC::UnlinkedEvalCodeBlock::create):
+ (JSC::UnlinkedEvalCodeBlock::UnlinkedEvalCodeBlock):
+ (JSC::UnlinkedEvalCodeBlock::createStructure):
+ (JSC::UnlinkedFunctionCodeBlock::create):
+ (JSC::UnlinkedFunctionCodeBlock::UnlinkedFunctionCodeBlock):
+ (JSC::UnlinkedFunctionCodeBlock::createStructure):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ (JSC::BytecodeGenerator::addConstant):
+ (JSC::BytecodeGenerator::emitLoad):
+ (JSC::BytecodeGenerator::emitDirectPutById):
+ (JSC::BytecodeGenerator::addStringConstant):
+ (JSC::BytecodeGenerator::expectedFunctionForIdentifier):
+ (JSC::BytecodeGenerator::emitThrowReferenceError):
+ (JSC::BytecodeGenerator::emitReadOnlyExceptionIfNeeded):
+ * bytecompiler/BytecodeGenerator.h:
+ (BytecodeGenerator):
+ (JSC::BytecodeGenerator::vm):
+ (JSC::BytecodeGenerator::propertyNames):
+ (JSC::BytecodeGenerator::makeFunction):
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::RegExpNode::emitBytecode):
+ (JSC::ArrayNode::toArgumentList):
+ (JSC::ApplyFunctionCallDotNode::emitBytecode):
+ (JSC::InstanceOfNode::emitBytecode):
+ * debugger/Debugger.cpp:
+ (JSC::Debugger::recompileAllJSFunctions):
+ (JSC::evaluateInGlobalCallFrame):
+ * debugger/Debugger.h:
+ (JSC):
+ * debugger/DebuggerActivation.cpp:
+ (JSC::DebuggerActivation::DebuggerActivation):
+ (JSC::DebuggerActivation::finishCreation):
+ * debugger/DebuggerActivation.h:
+ (JSC::DebuggerActivation::create):
+ (JSC::DebuggerActivation::createStructure):
+ (DebuggerActivation):
+ * debugger/DebuggerCallFrame.cpp:
+ (JSC::DebuggerCallFrame::evaluate):
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::executeEffects):
+ * dfg/DFGAssemblyHelpers.h:
+ (JSC::DFG::AssemblyHelpers::AssemblyHelpers):
+ (JSC::DFG::AssemblyHelpers::vm):
+ (JSC::DFG::AssemblyHelpers::debugCall):
+ (JSC::DFG::AssemblyHelpers::emitExceptionCheck):
+ (AssemblyHelpers):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::ByteCodeParser):
+ (ByteCodeParser):
+ (JSC::DFG::ByteCodeParser::handleConstantInternalFunction):
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
+ (JSC::DFG::ByteCodeParser::parseCodeBlock):
+ * dfg/DFGByteCodeParser.h:
+ (JSC):
+ * dfg/DFGCCallHelpers.h:
+ (JSC::DFG::CCallHelpers::CCallHelpers):
+ * dfg/DFGCapabilities.cpp:
+ (JSC::DFG::canHandleOpcodes):
+ * dfg/DFGConstantFoldingPhase.cpp:
+ (JSC::DFG::ConstantFoldingPhase::foldConstants):
+ * dfg/DFGDisassembler.cpp:
+ (JSC::DFG::Disassembler::reportToProfiler):
+ * dfg/DFGDriver.cpp:
+ (JSC::DFG::compile):
+ * dfg/DFGDriver.h:
+ (JSC):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ (JSC::DFG::FixupPhase::isStringPrototypeMethodSane):
+ (JSC::DFG::FixupPhase::canOptimizeStringObjectAccess):
+ * dfg/DFGGraph.cpp:
+ (JSC::DFG::Graph::Graph):
+ * dfg/DFGGraph.h:
+ (Graph):
+ * dfg/DFGJITCompiler.cpp:
+ (JSC::DFG::JITCompiler::JITCompiler):
+ (JSC::DFG::JITCompiler::linkOSRExits):
+ (JSC::DFG::JITCompiler::link):
+ (JSC::DFG::JITCompiler::compile):
+ (JSC::DFG::JITCompiler::compileFunction):
+ * dfg/DFGJITCompiler.h:
+ (JSC):
+ * dfg/DFGOSREntry.cpp:
+ (JSC::DFG::prepareOSREntry):
+ * dfg/DFGOSRExitCompiler.cpp:
+ * dfg/DFGOSRExitCompiler32_64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGOSRExitCompiler64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGOperations.cpp:
+ (JSC::DFG::putByVal):
+ (JSC::DFG::operationPutByValInternal):
+ (JSC::getHostCallReturnValueWithExecState):
+ * dfg/DFGPhase.h:
+ (JSC::DFG::Phase::vm):
+ * dfg/DFGRepatch.cpp:
+ (JSC::DFG::generateProtoChainAccessStub):
+ (JSC::DFG::tryCacheGetByID):
+ (JSC::DFG::tryBuildGetByIDList):
+ (JSC::DFG::tryBuildGetByIDProtoList):
+ (JSC::DFG::emitPutReplaceStub):
+ (JSC::DFG::emitPutTransitionStub):
+ (JSC::DFG::tryCachePutByID):
+ (JSC::DFG::tryBuildPutByIdList):
+ (JSC::DFG::linkSlowFor):
+ (JSC::DFG::dfgLinkFor):
+ (JSC::DFG::dfgLinkSlowFor):
+ (JSC::DFG::dfgLinkClosureCall):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::typedArrayDescriptor):
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
+ (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
+ (JSC::DFG::SpeculativeJIT::compileFromCharCode):
+ (JSC::DFG::SpeculativeJIT::compileMakeRope):
+ (JSC::DFG::SpeculativeJIT::compileStringEquality):
+ (JSC::DFG::SpeculativeJIT::compileToStringOnCell):
+ (JSC::DFG::SpeculativeJIT::speculateObject):
+ (JSC::DFG::SpeculativeJIT::speculateObjectOrOther):
+ (JSC::DFG::SpeculativeJIT::speculateString):
+ (JSC::DFG::SpeculativeJIT::speculateStringOrStringObject):
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::prepareForExternalCall):
+ (JSC::DFG::SpeculativeJIT::emitAllocateBasicStorage):
+ (JSC::DFG::SpeculativeJIT::emitAllocateJSObject):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compileObjectEquality):
+ (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
+ (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
+ (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compileObjectEquality):
+ (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
+ (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
+ (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGThunks.cpp:
+ (JSC::DFG::osrExitGenerationThunkGenerator):
+ (JSC::DFG::throwExceptionFromCallSlowPathGenerator):
+ (JSC::DFG::slowPathFor):
+ (JSC::DFG::linkForThunkGenerator):
+ (JSC::DFG::linkCallThunkGenerator):
+ (JSC::DFG::linkConstructThunkGenerator):
+ (JSC::DFG::linkClosureCallThunkGenerator):
+ (JSC::DFG::virtualForThunkGenerator):
+ (JSC::DFG::virtualCallThunkGenerator):
+ (JSC::DFG::virtualConstructThunkGenerator):
+ * dfg/DFGThunks.h:
+ (JSC):
+ (DFG):
+ * heap/BlockAllocator.h:
+ (JSC):
+ * heap/CopiedSpace.cpp:
+ (JSC::CopiedSpace::tryAllocateSlowCase):
+ (JSC::CopiedSpace::tryReallocate):
+ * heap/CopiedSpaceInlines.h:
+ (JSC::CopiedSpace::tryAllocate):
+ * heap/GCThreadSharedData.cpp:
+ (JSC::GCThreadSharedData::GCThreadSharedData):
+ (JSC::GCThreadSharedData::reset):
+ * heap/GCThreadSharedData.h:
+ (JSC):
+ (GCThreadSharedData):
+ * heap/HandleSet.cpp:
+ (JSC::HandleSet::HandleSet):
+ (JSC::HandleSet::~HandleSet):
+ (JSC::HandleSet::grow):
+ * heap/HandleSet.h:
+ (JSC):
+ (HandleSet):
+ (JSC::HandleSet::vm):
+ * heap/Heap.cpp:
+ (JSC::Heap::Heap):
+ (JSC):
+ (JSC::Heap::lastChanceToFinalize):
+ (JSC::Heap::protect):
+ (JSC::Heap::unprotect):
+ (JSC::Heap::stack):
+ (JSC::Heap::getConservativeRegisterRoots):
+ (JSC::Heap::markRoots):
+ (JSC::Heap::deleteAllCompiledCode):
+ (JSC::Heap::collect):
+ (JSC::Heap::isValidAllocation):
+ * heap/Heap.h:
+ (JSC):
+ (Heap):
+ (JSC::Heap::vm):
+ * heap/HeapTimer.cpp:
+ (JSC::HeapTimer::HeapTimer):
+ (JSC::HeapTimer::timerDidFire):
+ (JSC::HeapTimer::timerEvent):
+ * heap/HeapTimer.h:
+ (JSC):
+ (HeapTimer):
+ * heap/IncrementalSweeper.cpp:
+ (JSC::IncrementalSweeper::IncrementalSweeper):
+ (JSC::IncrementalSweeper::sweepNextBlock):
+ (JSC::IncrementalSweeper::willFinishSweeping):
+ (JSC::IncrementalSweeper::create):
+ * heap/IncrementalSweeper.h:
+ (IncrementalSweeper):
+ * heap/Local.h:
+ (Local):
+ (JSC::::Local):
+ (JSC::LocalStack::LocalStack):
+ (JSC::LocalStack::push):
+ (LocalStack):
+ * heap/LocalScope.h:
+ (JSC):
+ (LocalScope):
+ (JSC::LocalScope::LocalScope):
+ * heap/MachineStackMarker.cpp:
+ (JSC::MachineThreads::addCurrentThread):
+ * heap/MarkedAllocator.cpp:
+ (JSC::MarkedAllocator::allocateSlowCase):
+ * heap/MarkedBlock.cpp:
+ (JSC::MarkedBlock::MarkedBlock):
+ * heap/MarkedBlock.h:
+ (JSC::MarkedBlock::vm):
+ * heap/SlotVisitor.cpp:
+ (JSC::SlotVisitor::SlotVisitor):
+ (JSC::SlotVisitor::setup):
+ * heap/Strong.h:
+ (JSC):
+ (Strong):
+ (JSC::Strong::operator=):
+ * heap/StrongInlines.h:
+ (JSC::::Strong):
+ (JSC::::set):
+ * heap/SuperRegion.h:
+ (JSC):
+ * heap/WeakSet.cpp:
+ * heap/WeakSet.h:
+ (WeakSet):
+ (JSC::WeakSet::WeakSet):
+ (JSC::WeakSet::vm):
+ * interpreter/AbstractPC.cpp:
+ (JSC::AbstractPC::AbstractPC):
+ * interpreter/AbstractPC.h:
+ (JSC):
+ (AbstractPC):
+ * interpreter/CachedCall.h:
+ (JSC::CachedCall::CachedCall):
+ * interpreter/CallFrame.h:
+ (ExecState):
+ (JSC::ExecState::clearException):
+ (JSC::ExecState::clearSupplementaryExceptionInfo):
+ (JSC::ExecState::exception):
+ (JSC::ExecState::hadException):
+ (JSC::ExecState::propertyNames):
+ (JSC::ExecState::emptyList):
+ (JSC::ExecState::interpreter):
+ (JSC::ExecState::heap):
+ (JSC::ExecState::arrayConstructorTable):
+ (JSC::ExecState::arrayPrototypeTable):
+ (JSC::ExecState::booleanPrototypeTable):
+ (JSC::ExecState::dateTable):
+ (JSC::ExecState::dateConstructorTable):
+ (JSC::ExecState::errorPrototypeTable):
+ (JSC::ExecState::globalObjectTable):
+ (JSC::ExecState::jsonTable):
+ (JSC::ExecState::mathTable):
+ (JSC::ExecState::numberConstructorTable):
+ (JSC::ExecState::numberPrototypeTable):
+ (JSC::ExecState::objectConstructorTable):
+ (JSC::ExecState::privateNamePrototypeTable):
+ (JSC::ExecState::regExpTable):
+ (JSC::ExecState::regExpConstructorTable):
+ (JSC::ExecState::regExpPrototypeTable):
+ (JSC::ExecState::stringConstructorTable):
+ (JSC::ExecState::abstractReturnPC):
+ * interpreter/CallFrameClosure.h:
+ (CallFrameClosure):
+ * interpreter/Interpreter.cpp:
+ (JSC):
+ (JSC::eval):
+ (JSC::loadVarargs):
+ (JSC::Interpreter::Interpreter):
+ (JSC::Interpreter::dumpRegisters):
+ (JSC::Interpreter::unwindCallFrame):
+ (JSC::appendSourceToError):
+ (JSC::getCallerInfo):
+ (JSC::Interpreter::getStackTrace):
+ (JSC::Interpreter::addStackTraceIfNecessary):
+ (JSC::Interpreter::throwException):
+ (JSC::Interpreter::execute):
+ (JSC::Interpreter::executeCall):
+ (JSC::Interpreter::executeConstruct):
+ (JSC::Interpreter::prepareForRepeatCall):
+ (JSC::Interpreter::retrieveArgumentsFromVMCode):
+ (JSC::Interpreter::retrieveCallerFromVMCode):
+ * interpreter/Interpreter.h:
+ (JSC):
+ (JSC::TopCallFrameSetter::TopCallFrameSetter):
+ (JSC::TopCallFrameSetter::~TopCallFrameSetter):
+ (TopCallFrameSetter):
+ (JSC::NativeCallFrameTracer::NativeCallFrameTracer):
+ (Interpreter):
+ * interpreter/JSStack.cpp:
+ (JSC::JSStack::JSStack):
+ * interpreter/JSStack.h:
+ (JSC):
+ * jit/ClosureCallStubRoutine.cpp:
+ (JSC::ClosureCallStubRoutine::ClosureCallStubRoutine):
+ * jit/ClosureCallStubRoutine.h:
+ (ClosureCallStubRoutine):
+ * jit/ExecutableAllocator.cpp:
+ (JSC::ExecutableAllocator::ExecutableAllocator):
+ (JSC::ExecutableAllocator::allocate):
+ * jit/ExecutableAllocator.h:
+ (JSC):
+ (ExecutableAllocator):
+ * jit/ExecutableAllocatorFixedVMPool.cpp:
+ (JSC::ExecutableAllocator::ExecutableAllocator):
+ (JSC::ExecutableAllocator::allocate):
+ * jit/GCAwareJITStubRoutine.cpp:
+ (JSC::GCAwareJITStubRoutine::GCAwareJITStubRoutine):
+ (JSC::MarkingGCAwareJITStubRoutineWithOneObject::MarkingGCAwareJITStubRoutineWithOneObject):
+ (JSC::createJITStubRoutine):
+ * jit/GCAwareJITStubRoutine.h:
+ (GCAwareJITStubRoutine):
+ (MarkingGCAwareJITStubRoutineWithOneObject):
+ (JSC):
+ * jit/JIT.cpp:
+ (JSC::JIT::JIT):
+ (JSC::JIT::privateCompile):
+ (JSC::JIT::linkFor):
+ (JSC::JIT::linkSlowCall):
+ * jit/JIT.h:
+ (JSC::JIT::compile):
+ (JSC::JIT::compileClosureCall):
+ (JSC::JIT::compileGetByIdProto):
+ (JSC::JIT::compileGetByIdSelfList):
+ (JSC::JIT::compileGetByIdProtoList):
+ (JSC::JIT::compileGetByIdChainList):
+ (JSC::JIT::compileGetByIdChain):
+ (JSC::JIT::compilePutByIdTransition):
+ (JSC::JIT::compileGetByVal):
+ (JSC::JIT::compilePutByVal):
+ (JSC::JIT::compileCTINativeCall):
+ (JSC::JIT::compilePatchGetArrayLength):
+ (JIT):
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileLoadVarargs):
+ (JSC::JIT::compileCallEvalSlowCase):
+ (JSC::JIT::compileOpCallSlowCase):
+ (JSC::JIT::privateCompileClosureCall):
+ * jit/JITCall32_64.cpp:
+ (JSC::JIT::compileLoadVarargs):
+ (JSC::JIT::compileCallEvalSlowCase):
+ (JSC::JIT::compileOpCallSlowCase):
+ (JSC::JIT::privateCompileClosureCall):
+ * jit/JITCode.h:
+ (JSC):
+ (JSC::JITCode::execute):
+ * jit/JITDriver.h:
+ (JSC::jitCompileIfAppropriate):
+ (JSC::jitCompileFunctionIfAppropriate):
+ * jit/JITExceptions.cpp:
+ (JSC::genericThrow):
+ (JSC::jitThrow):
+ * jit/JITExceptions.h:
+ (JSC):
+ * jit/JITInlines.h:
+ (JSC::JIT::emitLoadCharacterString):
+ (JSC::JIT::updateTopCallFrame):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::privateCompileCTINativeCall):
+ (JSC::JIT::emit_op_new_object):
+ (JSC::JIT::emit_op_to_primitive):
+ (JSC::JIT::emit_op_catch):
+ (JSC::JIT::emit_op_convert_this):
+ (JSC::JIT::emitSlow_op_convert_this):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::privateCompileCTINativeCall):
+ (JSC::JIT::emit_op_new_object):
+ (JSC::JIT::emit_op_to_primitive):
+ (JSC::JIT::emitSlow_op_eq):
+ (JSC::JIT::emitSlow_op_neq):
+ (JSC::JIT::compileOpStrictEq):
+ (JSC::JIT::emit_op_catch):
+ (JSC::JIT::emit_op_convert_this):
+ (JSC::JIT::emitSlow_op_convert_this):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::stringGetByValStubGenerator):
+ (JSC::JIT::emitSlow_op_get_by_val):
+ (JSC::JIT::compileGetByIdHotPath):
+ (JSC::JIT::privateCompilePutByIdTransition):
+ (JSC::JIT::privateCompilePatchGetArrayLength):
+ (JSC::JIT::privateCompileGetByIdProto):
+ (JSC::JIT::privateCompileGetByIdSelfList):
+ (JSC::JIT::privateCompileGetByIdProtoList):
+ (JSC::JIT::privateCompileGetByIdChainList):
+ (JSC::JIT::privateCompileGetByIdChain):
+ (JSC::JIT::privateCompileGetByVal):
+ (JSC::JIT::privateCompilePutByVal):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::stringGetByValStubGenerator):
+ (JSC::JIT::emitSlow_op_get_by_val):
+ (JSC::JIT::compileGetByIdHotPath):
+ (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::ctiTrampoline):
+ (JSC):
+ (JSC::performPlatformSpecificJITAssertions):
+ (JSC::tryCachePutByID):
+ (JSC::tryCacheGetByID):
+ (JSC::returnToThrowTrampoline):
+ (JSC::throwExceptionFromOpCall):
+ (JSC::DEFINE_STUB_FUNCTION):
+ (JSC::getPolymorphicAccessStructureListSlot):
+ (JSC::jitCompileFor):
+ (JSC::lazyLinkFor):
+ (JSC::putByVal):
+ * jit/JITStubs.h:
+ (JSC):
+ (JITStackFrame):
+ * jit/JITThunks.cpp:
+ (JSC::JITThunks::ctiNativeCall):
+ (JSC::JITThunks::ctiNativeConstruct):
+ (JSC::JITThunks::ctiStub):
+ (JSC::JITThunks::hostFunctionStub):
+ * jit/JITThunks.h:
+ (JSC):
+ (JITThunks):
+ * jit/JITWriteBarrier.h:
+ (JSC):
+ (JSC::JITWriteBarrierBase::set):
+ (JSC::JITWriteBarrier::set):
+ * jit/SpecializedThunkJIT.h:
+ (JSC::SpecializedThunkJIT::loadJSStringArgument):
+ (JSC::SpecializedThunkJIT::finalize):
+ * jit/ThunkGenerator.h:
+ (JSC):
+ * jit/ThunkGenerators.cpp:
+ (JSC::generateSlowCaseFor):
+ (JSC::linkForGenerator):
+ (JSC::linkCallGenerator):
+ (JSC::linkConstructGenerator):
+ (JSC::linkClosureCallGenerator):
+ (JSC::virtualForGenerator):
+ (JSC::virtualCallGenerator):
+ (JSC::virtualConstructGenerator):
+ (JSC::stringLengthTrampolineGenerator):
+ (JSC::nativeForGenerator):
+ (JSC::nativeCallGenerator):
+ (JSC::nativeConstructGenerator):
+ (JSC::stringCharLoad):
+ (JSC::charToString):
+ (JSC::charCodeAtThunkGenerator):
+ (JSC::charAtThunkGenerator):
+ (JSC::fromCharCodeThunkGenerator):
+ (JSC::sqrtThunkGenerator):
+ (JSC::floorThunkGenerator):
+ (JSC::ceilThunkGenerator):
+ (JSC::roundThunkGenerator):
+ (JSC::expThunkGenerator):
+ (JSC::logThunkGenerator):
+ (JSC::absThunkGenerator):
+ (JSC::powThunkGenerator):
+ * jit/ThunkGenerators.h:
+ (JSC):
+ * jsc.cpp:
+ (GlobalObject):
+ (GlobalObject::create):
+ (GlobalObject::createStructure):
+ (GlobalObject::finishCreation):
+ (GlobalObject::addFunction):
+ (GlobalObject::addConstructableFunction):
+ (functionDumpCallFrame):
+ (functionJSCStack):
+ (functionReleaseExecutableMemory):
+ (functionRun):
+ (main):
+ (runWithScripts):
+ (jscmain):
+ * llint/LLIntData.cpp:
+ (JSC::LLInt::Data::performAssertions):
+ * llint/LLIntData.h:
+ (JSC):
+ (Data):
+ (JSC::LLInt::Data::performAssertions):
+ * llint/LLIntEntrypoints.cpp:
+ (JSC::LLInt::getFunctionEntrypoint):
+ (JSC::LLInt::getEvalEntrypoint):
+ (JSC::LLInt::getProgramEntrypoint):
+ * llint/LLIntEntrypoints.h:
+ (JSC):
+ (LLInt):
+ (JSC::LLInt::getEntrypoint):
+ * llint/LLIntExceptions.cpp:
+ (JSC::LLInt::interpreterThrowInCaller):
+ (JSC::LLInt::returnToThrow):
+ (JSC::LLInt::callToThrow):
+ * llint/LLIntOffsetsExtractor.cpp:
+ * llint/LLIntSlowPaths.cpp:
+ (LLInt):
+ (JSC::LLInt::llint_trace_operand):
+ (JSC::LLInt::llint_trace_value):
+ (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+ (JSC::LLInt::shouldJIT):
+ (JSC::LLInt::handleHostCall):
+ (JSC::LLInt::setUpCall):
+ * llint/LLIntThunks.cpp:
+ (JSC::LLInt::generateThunkWithJumpTo):
+ (JSC::LLInt::functionForCallEntryThunkGenerator):
+ (JSC::LLInt::functionForConstructEntryThunkGenerator):
+ (JSC::LLInt::functionForCallArityCheckThunkGenerator):
+ (JSC::LLInt::functionForConstructArityCheckThunkGenerator):
+ (JSC::LLInt::evalEntryThunkGenerator):
+ (JSC::LLInt::programEntryThunkGenerator):
+ * llint/LLIntThunks.h:
+ (JSC):
+ (LLInt):
+ * llint/LowLevelInterpreter.asm:
+ * llint/LowLevelInterpreter.cpp:
+ (JSC::CLoop::execute):
+ * llint/LowLevelInterpreter32_64.asm:
+ * llint/LowLevelInterpreter64.asm:
+ * offlineasm/cloop.rb:
+ * parser/ASTBuilder.h:
+ (JSC::ASTBuilder::ASTBuilder):
+ (JSC::ASTBuilder::createSourceElements):
+ (JSC::ASTBuilder::createCommaExpr):
+ (JSC::ASTBuilder::createLogicalNot):
+ (JSC::ASTBuilder::createUnaryPlus):
+ (JSC::ASTBuilder::createVoid):
+ (JSC::ASTBuilder::thisExpr):
+ (JSC::ASTBuilder::createResolve):
+ (JSC::ASTBuilder::createObjectLiteral):
+ (JSC::ASTBuilder::createArray):
+ (JSC::ASTBuilder::createNumberExpr):
+ (JSC::ASTBuilder::createString):
+ (JSC::ASTBuilder::createBoolean):
+ (JSC::ASTBuilder::createNull):
+ (JSC::ASTBuilder::createBracketAccess):
+ (JSC::ASTBuilder::createDotAccess):
+ (JSC::ASTBuilder::createRegExp):
+ (JSC::ASTBuilder::createNewExpr):
+ (JSC::ASTBuilder::createConditionalExpr):
+ (JSC::ASTBuilder::createAssignResolve):
+ (JSC::ASTBuilder::createFunctionExpr):
+ (JSC::ASTBuilder::createFunctionBody):
+ (JSC::ASTBuilder::createGetterOrSetterProperty):
+ (JSC::ASTBuilder::createArguments):
+ (JSC::ASTBuilder::createArgumentsList):
+ (JSC::ASTBuilder::createProperty):
+ (JSC::ASTBuilder::createPropertyList):
+ (JSC::ASTBuilder::createElementList):
+ (JSC::ASTBuilder::createFormalParameterList):
+ (JSC::ASTBuilder::createClause):
+ (JSC::ASTBuilder::createClauseList):
+ (JSC::ASTBuilder::createFuncDeclStatement):
+ (JSC::ASTBuilder::createBlockStatement):
+ (JSC::ASTBuilder::createExprStatement):
+ (JSC::ASTBuilder::createIfStatement):
+ (JSC::ASTBuilder::createForLoop):
+ (JSC::ASTBuilder::createForInLoop):
+ (JSC::ASTBuilder::createEmptyStatement):
+ (JSC::ASTBuilder::createVarStatement):
+ (JSC::ASTBuilder::createReturnStatement):
+ (JSC::ASTBuilder::createBreakStatement):
+ (JSC::ASTBuilder::createContinueStatement):
+ (JSC::ASTBuilder::createTryStatement):
+ (JSC::ASTBuilder::createSwitchStatement):
+ (JSC::ASTBuilder::createWhileStatement):
+ (JSC::ASTBuilder::createDoWhileStatement):
+ (JSC::ASTBuilder::createLabelStatement):
+ (JSC::ASTBuilder::createWithStatement):
+ (JSC::ASTBuilder::createThrowStatement):
+ (JSC::ASTBuilder::createDebugger):
+ (JSC::ASTBuilder::createConstStatement):
+ (JSC::ASTBuilder::appendConstDecl):
+ (JSC::ASTBuilder::addVar):
+ (JSC::ASTBuilder::combineCommaNodes):
+ (JSC::ASTBuilder::Scope::Scope):
+ (JSC::ASTBuilder::createNumber):
+ (ASTBuilder):
+ (JSC::ASTBuilder::makeTypeOfNode):
+ (JSC::ASTBuilder::makeDeleteNode):
+ (JSC::ASTBuilder::makeNegateNode):
+ (JSC::ASTBuilder::makeBitwiseNotNode):
+ (JSC::ASTBuilder::makeMultNode):
+ (JSC::ASTBuilder::makeDivNode):
+ (JSC::ASTBuilder::makeModNode):
+ (JSC::ASTBuilder::makeAddNode):
+ (JSC::ASTBuilder::makeSubNode):
+ (JSC::ASTBuilder::makeLeftShiftNode):
+ (JSC::ASTBuilder::makeRightShiftNode):
+ (JSC::ASTBuilder::makeURightShiftNode):
+ (JSC::ASTBuilder::makeBitOrNode):
+ (JSC::ASTBuilder::makeBitAndNode):
+ (JSC::ASTBuilder::makeBitXOrNode):
+ (JSC::ASTBuilder::makeFunctionCallNode):
+ (JSC::ASTBuilder::makeBinaryNode):
+ (JSC::ASTBuilder::makeAssignNode):
+ (JSC::ASTBuilder::makePrefixNode):
+ (JSC::ASTBuilder::makePostfixNode):
+ * parser/Lexer.cpp:
+ (JSC::Keywords::Keywords):
+ (JSC::::Lexer):
+ (JSC::::parseIdentifier):
+ (JSC::::parseIdentifierSlowCase):
+ * parser/Lexer.h:
+ (JSC::Keywords::isKeyword):
+ (JSC::Keywords::getKeyword):
+ (Keywords):
+ (Lexer):
+ (JSC::::makeIdentifier):
+ (JSC::::makeRightSizedIdentifier):
+ (JSC::::makeIdentifierLCharFromUChar):
+ (JSC::::makeLCharIdentifier):
+ * parser/NodeConstructors.h:
+ (JSC::ParserArenaFreeable::operator new):
+ (JSC::ParserArenaDeletable::operator new):
+ (JSC::ParserArenaRefCounted::ParserArenaRefCounted):
+ (JSC::PropertyNode::PropertyNode):
+ (JSC::ContinueNode::ContinueNode):
+ (JSC::BreakNode::BreakNode):
+ (JSC::ForInNode::ForInNode):
+ * parser/Nodes.cpp:
+ (JSC::ScopeNode::ScopeNode):
+ (JSC::ProgramNode::ProgramNode):
+ (JSC::ProgramNode::create):
+ (JSC::EvalNode::EvalNode):
+ (JSC::EvalNode::create):
+ (JSC::FunctionBodyNode::FunctionBodyNode):
+ (JSC::FunctionBodyNode::create):
+ * parser/Nodes.h:
+ (ParserArenaFreeable):
+ (ParserArenaDeletable):
+ (ParserArenaRefCounted):
+ (ArrayNode):
+ (ForInNode):
+ (ContinueNode):
+ (BreakNode):
+ (ScopeNode):
+ (ProgramNode):
+ (EvalNode):
+ (FunctionBodyNode):
+ * parser/Parser.cpp:
+ (JSC::::Parser):
+ (JSC::::parseInner):
+ (JSC::::parseSourceElements):
+ (JSC::::parseTryStatement):
+ (JSC::::parseFunctionBody):
+ (JSC::::parseFunctionInfo):
+ (JSC::::parseAssignmentExpression):
+ (JSC::::parseProperty):
+ (JSC::::parsePrimaryExpression):
+ (JSC::::parseMemberExpression):
+ (JSC::::parseUnaryExpression):
+ * parser/Parser.h:
+ (JSC):
+ (JSC::Scope::Scope):
+ (JSC::Scope::declareVariable):
+ (JSC::Scope::declareParameter):
+ (Scope):
+ (Parser):
+ (JSC::Parser::pushScope):
+ (JSC::::parse):
+ (JSC::parse):
+ * parser/ParserArena.h:
+ (IdentifierArena):
+ (JSC::IdentifierArena::makeIdentifier):
+ (JSC::IdentifierArena::makeIdentifierLCharFromUChar):
+ (JSC::IdentifierArena::makeNumericIdentifier):
+ * parser/SyntaxChecker.h:
+ (JSC::SyntaxChecker::SyntaxChecker):
+ (JSC::SyntaxChecker::createProperty):
+ (JSC::SyntaxChecker::createGetterOrSetterProperty):
+ * profiler/LegacyProfiler.cpp:
+ (JSC::LegacyProfiler::startProfiling):
+ (JSC::LegacyProfiler::stopProfiling):
+ * profiler/LegacyProfiler.h:
+ (JSC):
+ * profiler/ProfilerBytecode.cpp:
+ (JSC::Profiler::Bytecode::toJS):
+ * profiler/ProfilerBytecodeSequence.cpp:
+ (JSC::Profiler::BytecodeSequence::BytecodeSequence):
+ (JSC::Profiler::BytecodeSequence::addSequenceProperties):
+ * profiler/ProfilerBytecodes.cpp:
+ (JSC::Profiler::Bytecodes::toJS):
+ * profiler/ProfilerCompilation.cpp:
+ (JSC::Profiler::Compilation::toJS):
+ * profiler/ProfilerCompiledBytecode.cpp:
+ (JSC::Profiler::CompiledBytecode::toJS):
+ * profiler/ProfilerDatabase.cpp:
+ (JSC::Profiler::Database::Database):
+ (JSC::Profiler::Database::toJS):
+ (JSC::Profiler::Database::toJSON):
+ * profiler/ProfilerDatabase.h:
+ (Database):
+ * profiler/ProfilerOSRExit.cpp:
+ (JSC::Profiler::OSRExit::toJS):
+ * profiler/ProfilerOrigin.cpp:
+ (JSC::Profiler::Origin::toJS):
+ * profiler/ProfilerProfiledBytecodes.cpp:
+ (JSC::Profiler::ProfiledBytecodes::toJS):
+ * runtime/ArgList.h:
+ (MarkedArgumentBuffer):
+ * runtime/Arguments.cpp:
+ (JSC::Arguments::putByIndex):
+ (JSC::Arguments::put):
+ (JSC::Arguments::deleteProperty):
+ (JSC::Arguments::defineOwnProperty):
+ (JSC::Arguments::tearOff):
+ (JSC::Arguments::didTearOffActivation):
+ (JSC::Arguments::tearOffForInlineCallFrame):
+ * runtime/Arguments.h:
+ (JSC::Arguments::create):
+ (JSC::Arguments::createStructure):
+ (Arguments):
+ (JSC::Arguments::Arguments):
+ (JSC::Arguments::trySetArgument):
+ (JSC::Arguments::finishCreation):
+ * runtime/ArrayConstructor.cpp:
+ (JSC::ArrayConstructor::finishCreation):
+ * runtime/ArrayConstructor.h:
+ (JSC::ArrayConstructor::createStructure):
+ * runtime/ArrayPrototype.cpp:
+ (JSC::ArrayPrototype::ArrayPrototype):
+ (JSC::ArrayPrototype::finishCreation):
+ (JSC::arrayProtoFuncSort):
+ (JSC::arrayProtoFuncSplice):
+ * runtime/ArrayPrototype.h:
+ (JSC::ArrayPrototype::createStructure):
+ * runtime/BatchedTransitionOptimizer.h:
+ (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
+ (JSC::BatchedTransitionOptimizer::~BatchedTransitionOptimizer):
+ (BatchedTransitionOptimizer):
+ * runtime/BooleanConstructor.cpp:
+ (JSC::BooleanConstructor::finishCreation):
+ (JSC::constructBoolean):
+ (JSC::constructBooleanFromImmediateBoolean):
+ * runtime/BooleanConstructor.h:
+ (JSC::BooleanConstructor::createStructure):
+ * runtime/BooleanObject.cpp:
+ (JSC::BooleanObject::BooleanObject):
+ (JSC::BooleanObject::finishCreation):
+ * runtime/BooleanObject.h:
+ (BooleanObject):
+ (JSC::BooleanObject::create):
+ (JSC::BooleanObject::createStructure):
+ * runtime/BooleanPrototype.cpp:
+ (JSC::BooleanPrototype::BooleanPrototype):
+ (JSC::BooleanPrototype::finishCreation):
+ (JSC::booleanProtoFuncToString):
+ * runtime/BooleanPrototype.h:
+ (JSC::BooleanPrototype::createStructure):
+ * runtime/Butterfly.h:
+ (JSC):
+ (Butterfly):
+ * runtime/ButterflyInlines.h:
+ (JSC::Butterfly::createUninitialized):
+ (JSC::Butterfly::create):
+ (JSC::Butterfly::growPropertyStorage):
+ (JSC::Butterfly::createOrGrowArrayRight):
+ (JSC::Butterfly::growArrayRight):
+ (JSC::Butterfly::resizeArray):
+ * runtime/CodeCache.cpp:
+ (JSC::CodeCache::getCodeBlock):
+ (JSC::CodeCache::getProgramCodeBlock):
+ (JSC::CodeCache::getEvalCodeBlock):
+ (JSC::CodeCache::getFunctionExecutableFromGlobalCode):
+ * runtime/CodeCache.h:
+ (JSC):
+ (JSC::SourceCodeValue::SourceCodeValue):
+ (CodeCache):
+ * runtime/CommonIdentifiers.cpp:
+ (JSC):
+ (JSC::CommonIdentifiers::CommonIdentifiers):
+ * runtime/CommonIdentifiers.h:
+ (CommonIdentifiers):
+ * runtime/CommonSlowPaths.h:
+ (JSC::CommonSlowPaths::opIn):
+ * runtime/Completion.cpp:
+ (JSC::checkSyntax):
+ (JSC::evaluate):
+ * runtime/DateConstructor.cpp:
+ (JSC::DateConstructor::finishCreation):
+ * runtime/DateConstructor.h:
+ (JSC::DateConstructor::createStructure):
+ * runtime/DateInstance.cpp:
+ (JSC::DateInstance::DateInstance):
+ (JSC::DateInstance::finishCreation):
+ (JSC::DateInstance::calculateGregorianDateTime):
+ (JSC::DateInstance::calculateGregorianDateTimeUTC):
+ * runtime/DateInstance.h:
+ (DateInstance):
+ (JSC::DateInstance::create):
+ (JSC::DateInstance::createStructure):
+ * runtime/DatePrototype.cpp:
+ (JSC::DatePrototype::finishCreation):
+ (JSC::dateProtoFuncSetTime):
+ (JSC::setNewValueFromTimeArgs):
+ (JSC::setNewValueFromDateArgs):
+ (JSC::dateProtoFuncSetYear):
+ (JSC::dateProtoFuncToJSON):
+ * runtime/DatePrototype.h:
+ (JSC::DatePrototype::createStructure):
+ * runtime/Error.cpp:
+ (JSC::createError):
+ (JSC::createEvalError):
+ (JSC::createRangeError):
+ (JSC::createReferenceError):
+ (JSC::createSyntaxError):
+ (JSC::createTypeError):
+ (JSC::createURIError):
+ (JSC::addErrorInfo):
+ (JSC::throwError):
+ * runtime/Error.h:
+ (JSC):
+ (JSC::StrictModeTypeErrorFunction::create):
+ (JSC::StrictModeTypeErrorFunction::createStructure):
+ * runtime/ErrorConstructor.cpp:
+ (JSC::ErrorConstructor::finishCreation):
+ * runtime/ErrorConstructor.h:
+ (JSC::ErrorConstructor::createStructure):
+ * runtime/ErrorInstance.cpp:
+ (JSC::ErrorInstance::ErrorInstance):
+ * runtime/ErrorInstance.h:
+ (JSC::ErrorInstance::createStructure):
+ (JSC::ErrorInstance::create):
+ (ErrorInstance):
+ (JSC::ErrorInstance::finishCreation):
+ * runtime/ErrorPrototype.cpp:
+ (JSC::ErrorPrototype::ErrorPrototype):
+ (JSC::ErrorPrototype::finishCreation):
+ * runtime/ErrorPrototype.h:
+ (JSC::ErrorPrototype::createStructure):
+ * runtime/ExceptionHelpers.cpp:
+ (JSC::createInterruptedExecutionException):
+ (JSC::createTerminatedExecutionException):
+ * runtime/ExceptionHelpers.h:
+ (JSC):
+ (JSC::InterruptedExecutionError::InterruptedExecutionError):
+ (JSC::InterruptedExecutionError::create):
+ (JSC::InterruptedExecutionError::createStructure):
+ (JSC::TerminatedExecutionError::TerminatedExecutionError):
+ (JSC::TerminatedExecutionError::create):
+ (JSC::TerminatedExecutionError::createStructure):
+ * runtime/Executable.cpp:
+ (JSC::jettisonCodeBlock):
+ (JSC::EvalExecutable::EvalExecutable):
+ (JSC::ProgramExecutable::ProgramExecutable):
+ (JSC::FunctionExecutable::FunctionExecutable):
+ (JSC::EvalExecutable::compileOptimized):
+ (JSC::EvalExecutable::compileInternal):
+ (JSC::EvalExecutable::jettisonOptimizedCode):
+ (JSC::ProgramExecutable::checkSyntax):
+ (JSC::ProgramExecutable::compileOptimized):
+ (JSC::ProgramExecutable::jettisonOptimizedCode):
+ (JSC::ProgramExecutable::initializeGlobalProperties):
+ (JSC::FunctionExecutable::compileOptimizedForCall):
+ (JSC::FunctionExecutable::compileOptimizedForConstruct):
+ (JSC::FunctionExecutable::produceCodeBlockFor):
+ (JSC::FunctionExecutable::jettisonOptimizedCodeForCall):
+ (JSC::FunctionExecutable::jettisonOptimizedCodeForConstruct):
+ (JSC::FunctionExecutable::fromGlobalCode):
+ * runtime/Executable.h:
+ (JSC::ExecutableBase::ExecutableBase):
+ (JSC::ExecutableBase::finishCreation):
+ (JSC::ExecutableBase::createStructure):
+ (JSC::NativeExecutable::create):
+ (JSC::NativeExecutable::createStructure):
+ (JSC::NativeExecutable::finishCreation):
+ (JSC::NativeExecutable::NativeExecutable):
+ (JSC::ScriptExecutable::ScriptExecutable):
+ (JSC::ScriptExecutable::finishCreation):
+ (JSC::EvalExecutable::compile):
+ (EvalExecutable):
+ (JSC::EvalExecutable::create):
+ (JSC::EvalExecutable::createStructure):
+ (JSC::ProgramExecutable::create):
+ (ProgramExecutable):
+ (JSC::ProgramExecutable::compile):
+ (JSC::ProgramExecutable::createStructure):
+ (JSC::FunctionExecutable::create):
+ (JSC::FunctionExecutable::compileForCall):
+ (FunctionExecutable):
+ (JSC::FunctionExecutable::compileForConstruct):
+ (JSC::FunctionExecutable::jettisonOptimizedCodeFor):
+ (JSC::FunctionExecutable::createStructure):
+ (JSC::JSFunction::JSFunction):
+ * runtime/ExecutionHarness.h:
+ (JSC::prepareForExecution):
+ (JSC::prepareFunctionForExecution):
+ * runtime/FunctionConstructor.cpp:
+ (JSC::FunctionConstructor::finishCreation):
+ * runtime/FunctionConstructor.h:
+ (JSC::FunctionConstructor::createStructure):
+ * runtime/FunctionPrototype.cpp:
+ (JSC::FunctionPrototype::finishCreation):
+ (JSC::FunctionPrototype::addFunctionProperties):
+ (JSC::functionProtoFuncBind):
+ * runtime/FunctionPrototype.h:
+ (JSC::FunctionPrototype::createStructure):
+ * runtime/GCActivityCallback.cpp:
+ (JSC::DefaultGCActivityCallback::DefaultGCActivityCallback):
+ (JSC::DefaultGCActivityCallback::doWork):
+ (JSC::DefaultGCActivityCallback::didAllocate):
+ * runtime/GCActivityCallback.h:
+ (JSC::GCActivityCallback::GCActivityCallback):
+ * runtime/GCActivityCallbackBlackBerry.cpp:
+ (JSC::DefaultGCActivityCallback::DefaultGCActivityCallback):
+ (JSC::DefaultGCActivityCallback::doWork):
+ (JSC::DefaultGCActivityCallback::didAllocate):
+ * runtime/GetterSetter.h:
+ (JSC::GetterSetter::GetterSetter):
+ (JSC::GetterSetter::create):
+ (JSC::GetterSetter::setGetter):
+ (JSC::GetterSetter::setSetter):
+ (JSC::GetterSetter::createStructure):
+ * runtime/Identifier.cpp:
+ (JSC::Identifier::add):
+ (JSC::Identifier::add8):
+ (JSC::Identifier::addSlowCase):
+ (JSC::Identifier::from):
+ (JSC::Identifier::checkCurrentIdentifierTable):
+ * runtime/Identifier.h:
+ (JSC::Identifier::Identifier):
+ (JSC::Identifier::createLCharFromUChar):
+ (Identifier):
+ (JSC::Identifier::add):
+ * runtime/InternalFunction.cpp:
+ (JSC::InternalFunction::InternalFunction):
+ (JSC::InternalFunction::finishCreation):
+ (JSC::InternalFunction::name):
+ (JSC::InternalFunction::displayName):
+ * runtime/InternalFunction.h:
+ (JSC::InternalFunction::createStructure):
+ (InternalFunction):
+ * runtime/JSAPIValueWrapper.h:
+ (JSC::JSAPIValueWrapper::createStructure):
+ (JSC::JSAPIValueWrapper::finishCreation):
+ (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
+ * runtime/JSActivation.cpp:
+ (JSC::JSActivation::symbolTablePut):
+ (JSC::JSActivation::symbolTablePutWithAttributes):
+ (JSC::JSActivation::getOwnPropertySlot):
+ (JSC::JSActivation::put):
+ (JSC::JSActivation::putDirectVirtual):
+ (JSC::JSActivation::argumentsGetter):
+ * runtime/JSActivation.h:
+ (JSActivation):
+ (JSC::JSActivation::create):
+ (JSC::JSActivation::createStructure):
+ (JSC::JSActivation::JSActivation):
+ (JSC::JSActivation::tearOff):
+ * runtime/JSArray.cpp:
+ (JSC::createArrayButterflyInDictionaryIndexingMode):
+ (JSC::JSArray::setLengthWritable):
+ (JSC::JSArray::unshiftCountSlowCase):
+ (JSC::JSArray::setLength):
+ (JSC::JSArray::push):
+ (JSC::JSArray::shiftCountWithAnyIndexingType):
+ (JSC::JSArray::unshiftCountWithArrayStorage):
+ (JSC::JSArray::unshiftCountWithAnyIndexingType):
+ (JSC::ContiguousTypeAccessor::setWithValue):
+ (JSC::JSArray::sortCompactedVector):
+ (JSC::JSArray::sortVector):
+ * runtime/JSArray.h:
+ (JSC::JSArray::JSArray):
+ (JSArray):
+ (JSC::JSArray::shiftCountForShift):
+ (JSC::JSArray::unshiftCountForShift):
+ (JSC::JSArray::createStructure):
+ (JSC::createContiguousArrayButterfly):
+ (JSC::createArrayButterfly):
+ (JSC):
+ (JSC::JSArray::create):
+ (JSC::JSArray::tryCreateUninitialized):
+ (JSC::constructArray):
+ * runtime/JSBoundFunction.cpp:
+ (JSC::JSBoundFunction::create):
+ (JSC::JSBoundFunction::JSBoundFunction):
+ * runtime/JSBoundFunction.h:
+ (JSC::JSBoundFunction::createStructure):
+ * runtime/JSCJSValue.cpp:
+ (JSC::JSValue::putToPrimitive):
+ (JSC::JSValue::toStringSlowCase):
+ * runtime/JSCJSValue.h:
+ (JSC):
+ * runtime/JSCell.h:
+ (JSCell):
+ * runtime/JSCellInlines.h:
+ (JSC::JSCell::JSCell):
+ (JSC::JSCell::finishCreation):
+ (JSC::allocateCell):
+ (JSC::JSCell::setStructure):
+ (JSC::JSCell::fastGetOwnProperty):
+ * runtime/JSDateMath.cpp:
+ (JSC::getDSTOffset):
+ (JSC::getUTCOffset):
+ (JSC::parseDate):
+ * runtime/JSDestructibleObject.h:
+ (JSC::JSDestructibleObject::JSDestructibleObject):
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::create):
+ (JSC::JSFunction::JSFunction):
+ (JSC::JSFunction::finishCreation):
+ (JSC::JSFunction::createAllocationProfile):
+ (JSC::JSFunction::name):
+ (JSC::JSFunction::displayName):
+ (JSC::JSFunction::getOwnPropertySlot):
+ (JSC::JSFunction::deleteProperty):
+ * runtime/JSFunction.h:
+ (JSFunction):
+ (JSC::JSFunction::create):
+ (JSC::JSFunction::setScope):
+ (JSC::JSFunction::createStructure):
+ * runtime/JSGlobalData.cpp: Removed.
+ * runtime/JSGlobalData.h: Removed.
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::JSGlobalObject):
+ (JSC::JSGlobalObject::~JSGlobalObject):
+ (JSC::JSGlobalObject::setGlobalThis):
+ (JSC::JSGlobalObject::init):
+ (JSC::JSGlobalObject::putDirectVirtual):
+ (JSC::JSGlobalObject::reset):
+ (JSC):
+ (JSC::JSGlobalObject::haveABadTime):
+ (JSC::JSGlobalObject::createThrowTypeError):
+ (JSC::JSGlobalObject::resetPrototype):
+ (JSC::JSGlobalObject::addStaticGlobals):
+ (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):
+ (JSC::JSGlobalObject::createProgramCodeBlock):
+ (JSC::JSGlobalObject::createEvalCodeBlock):
+ * runtime/JSGlobalObject.h:
+ (JSC::JSGlobalObject::create):
+ (JSGlobalObject):
+ (JSC::JSGlobalObject::finishCreation):
+ (JSC::JSGlobalObject::vm):
+ (JSC::JSGlobalObject::createStructure):
+ (JSC::ExecState::dynamicGlobalObject):
+ (JSC::constructEmptyArray):
+ (DynamicGlobalObjectScope):
+ * runtime/JSGlobalObjectFunctions.cpp:
+ (JSC::globalFuncProtoSetter):
+ * runtime/JSLock.cpp:
+ (JSC::JSLockHolder::JSLockHolder):
+ (JSC::JSLockHolder::init):
+ (JSC::JSLockHolder::~JSLockHolder):
+ (JSC::JSLock::JSLock):
+ (JSC::JSLock::willDestroyGlobalData):
+ (JSC::JSLock::lock):
+ (JSC::JSLock::unlock):
+ (JSC::JSLock::DropAllLocks::DropAllLocks):
+ (JSC::JSLock::DropAllLocks::~DropAllLocks):
+ * runtime/JSLock.h:
+ (JSC):
+ (JSLockHolder):
+ (JSLock):
+ (JSC::JSLock::vm):
+ (DropAllLocks):
+ * runtime/JSNameScope.h:
+ (JSC::JSNameScope::createStructure):
+ (JSC::JSNameScope::finishCreation):
+ (JSC::JSNameScope::JSNameScope):
+ * runtime/JSNotAnObject.h:
+ (JSC::JSNotAnObject::JSNotAnObject):
+ (JSC::JSNotAnObject::create):
+ (JSC::JSNotAnObject::createStructure):
+ * runtime/JSONObject.cpp:
+ (JSC::JSONObject::JSONObject):
+ (JSC::JSONObject::finishCreation):
+ (Holder):
+ (JSC::Stringifier::Stringifier):
+ (JSC::Stringifier::stringify):
+ (JSC::Stringifier::toJSON):
+ (JSC::Stringifier::appendStringifiedValue):
+ (JSC::Stringifier::Holder::Holder):
+ (JSC::Stringifier::Holder::appendNextProperty):
+ (JSC::Walker::Walker):
+ (JSC::Walker::walk):
+ (JSC::JSONProtoFuncParse):
+ (JSC::JSONProtoFuncStringify):
+ (JSC::JSONStringify):
+ * runtime/JSONObject.h:
+ (JSC::JSONObject::createStructure):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::put):
+ (JSC::JSObject::putByIndex):
+ (JSC::JSObject::enterDictionaryIndexingModeWhenArrayStorageAlreadyExists):
+ (JSC::JSObject::enterDictionaryIndexingMode):
+ (JSC::JSObject::notifyPresenceOfIndexedAccessors):
+ (JSC::JSObject::createInitialIndexedStorage):
+ (JSC::JSObject::createInitialUndecided):
+ (JSC::JSObject::createInitialInt32):
+ (JSC::JSObject::createInitialDouble):
+ (JSC::JSObject::createInitialContiguous):
+ (JSC::JSObject::createArrayStorage):
+ (JSC::JSObject::createInitialArrayStorage):
+ (JSC::JSObject::convertUndecidedToInt32):
+ (JSC::JSObject::convertUndecidedToDouble):
+ (JSC::JSObject::convertUndecidedToContiguous):
+ (JSC::JSObject::constructConvertedArrayStorageWithoutCopyingElements):
+ (JSC::JSObject::convertUndecidedToArrayStorage):
+ (JSC::JSObject::convertInt32ToDouble):
+ (JSC::JSObject::convertInt32ToContiguous):
+ (JSC::JSObject::convertInt32ToArrayStorage):
+ (JSC::JSObject::genericConvertDoubleToContiguous):
+ (JSC::JSObject::convertDoubleToContiguous):
+ (JSC::JSObject::rageConvertDoubleToContiguous):
+ (JSC::JSObject::convertDoubleToArrayStorage):
+ (JSC::JSObject::convertContiguousToArrayStorage):
+ (JSC::JSObject::convertUndecidedForValue):
+ (JSC::JSObject::convertInt32ForValue):
+ (JSC::JSObject::setIndexQuicklyToUndecided):
+ (JSC::JSObject::convertInt32ToDoubleOrContiguousWhilePerformingSetIndex):
+ (JSC::JSObject::convertDoubleToContiguousWhilePerformingSetIndex):
+ (JSC::JSObject::ensureInt32Slow):
+ (JSC::JSObject::ensureDoubleSlow):
+ (JSC::JSObject::ensureContiguousSlow):
+ (JSC::JSObject::rageEnsureContiguousSlow):
+ (JSC::JSObject::ensureArrayStorageSlow):
+ (JSC::JSObject::ensureArrayStorageExistsAndEnterDictionaryIndexingMode):
+ (JSC::JSObject::switchToSlowPutArrayStorage):
+ (JSC::JSObject::putDirectVirtual):
+ (JSC::JSObject::setPrototype):
+ (JSC::JSObject::setPrototypeWithCycleCheck):
+ (JSC::JSObject::putDirectAccessor):
+ (JSC::JSObject::deleteProperty):
+ (JSC::JSObject::getPropertySpecificValue):
+ (JSC::JSObject::getOwnNonIndexPropertyNames):
+ (JSC::JSObject::seal):
+ (JSC::JSObject::freeze):
+ (JSC::JSObject::preventExtensions):
+ (JSC::JSObject::reifyStaticFunctionsForDelete):
+ (JSC::JSObject::removeDirect):
+ (JSC::JSObject::putIndexedDescriptor):
+ (JSC::JSObject::defineOwnIndexedProperty):
+ (JSC::JSObject::allocateSparseIndexMap):
+ (JSC::JSObject::putByIndexBeyondVectorLengthWithoutAttributes):
+ (JSC::JSObject::putByIndexBeyondVectorLengthWithArrayStorage):
+ (JSC::JSObject::putByIndexBeyondVectorLength):
+ (JSC::JSObject::putDirectIndexBeyondVectorLengthWithArrayStorage):
+ (JSC::JSObject::putDirectIndexBeyondVectorLength):
+ (JSC::JSObject::putDirectNativeFunction):
+ (JSC::JSObject::increaseVectorLength):
+ (JSC::JSObject::ensureLengthSlow):
+ (JSC::JSObject::growOutOfLineStorage):
+ (JSC::JSObject::getOwnPropertyDescriptor):
+ (JSC::putDescriptor):
+ (JSC::JSObject::putDirectMayBeIndex):
+ (JSC::DefineOwnPropertyScope::DefineOwnPropertyScope):
+ (JSC::DefineOwnPropertyScope::~DefineOwnPropertyScope):
+ (DefineOwnPropertyScope):
+ (JSC::JSObject::defineOwnNonIndexProperty):
+ * runtime/JSObject.h:
+ (JSObject):
+ (JSC::JSObject::putByIndexInline):
+ (JSC::JSObject::putDirectIndex):
+ (JSC::JSObject::setIndexQuickly):
+ (JSC::JSObject::initializeIndex):
+ (JSC::JSObject::getDirect):
+ (JSC::JSObject::getDirectOffset):
+ (JSC::JSObject::putDirect):
+ (JSC::JSObject::isSealed):
+ (JSC::JSObject::isFrozen):
+ (JSC::JSObject::flattenDictionaryObject):
+ (JSC::JSObject::ensureInt32):
+ (JSC::JSObject::ensureDouble):
+ (JSC::JSObject::ensureContiguous):
+ (JSC::JSObject::rageEnsureContiguous):
+ (JSC::JSObject::ensureArrayStorage):
+ (JSC::JSObject::finishCreation):
+ (JSC::JSObject::createStructure):
+ (JSC::JSObject::ensureLength):
+ (JSC::JSNonFinalObject::createStructure):
+ (JSC::JSNonFinalObject::JSNonFinalObject):
+ (JSC::JSNonFinalObject::finishCreation):
+ (JSC::JSFinalObject::createStructure):
+ (JSC::JSFinalObject::finishCreation):
+ (JSC::JSFinalObject::JSFinalObject):
+ (JSC::JSFinalObject::create):
+ (JSC::JSObject::setButterfly):
+ (JSC::JSObject::JSObject):
+ (JSC::JSObject::inlineGetOwnPropertySlot):
+ (JSC::JSObject::putDirectInternal):
+ (JSC::JSObject::setStructureAndReallocateStorageIfNecessary):
+ (JSC::JSObject::putOwnDataProperty):
+ (JSC::JSObject::putDirectWithoutTransition):
+ (JSC):
+ * runtime/JSPropertyNameIterator.cpp:
+ (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
+ (JSC::JSPropertyNameIterator::create):
+ * runtime/JSPropertyNameIterator.h:
+ (JSC::JSPropertyNameIterator::createStructure):
+ (JSC::JSPropertyNameIterator::setCachedStructure):
+ (JSC::JSPropertyNameIterator::setCachedPrototypeChain):
+ (JSC::JSPropertyNameIterator::finishCreation):
+ (JSC::StructureRareData::setEnumerationCache):
+ * runtime/JSProxy.cpp:
+ (JSC::JSProxy::setTarget):
+ * runtime/JSProxy.h:
+ (JSC::JSProxy::create):
+ (JSC::JSProxy::createStructure):
+ (JSC::JSProxy::JSProxy):
+ (JSC::JSProxy::finishCreation):
+ (JSProxy):
+ * runtime/JSScope.cpp:
+ (JSC::executeResolveOperations):
+ (JSC::JSScope::resolveContainingScopeInternal):
+ (JSC::JSScope::resolveWithBase):
+ (JSC::JSScope::resolveWithThis):
+ (JSC::JSScope::resolvePut):
+ * runtime/JSScope.h:
+ (JSScope):
+ (JSC::JSScope::JSScope):
+ (JSC::JSScope::vm):
+ (JSC::ExecState::vm):
+ * runtime/JSSegmentedVariableObject.h:
+ (JSC::JSSegmentedVariableObject::JSSegmentedVariableObject):
+ (JSC::JSSegmentedVariableObject::finishCreation):
+ * runtime/JSString.cpp:
+ (JSC::JSRopeString::RopeBuilder::expand):
+ (JSC::StringObject::create):
+ * runtime/JSString.h:
+ (JSC):
+ (JSString):
+ (JSC::JSString::JSString):
+ (JSC::JSString::finishCreation):
+ (JSC::JSString::create):
+ (JSC::JSString::createHasOtherOwner):
+ (JSC::JSString::createStructure):
+ (JSRopeString):
+ (JSC::JSRopeString::RopeBuilder::RopeBuilder):
+ (JSC::JSRopeString::RopeBuilder::append):
+ (RopeBuilder):
+ (JSC::JSRopeString::JSRopeString):
+ (JSC::JSRopeString::finishCreation):
+ (JSC::JSRopeString::append):
+ (JSC::JSRopeString::createNull):
+ (JSC::JSRopeString::create):
+ (JSC::jsEmptyString):
+ (JSC::jsSingleCharacterString):
+ (JSC::jsSingleCharacterSubstring):
+ (JSC::jsNontrivialString):
+ (JSC::jsString):
+ (JSC::jsSubstring):
+ (JSC::jsSubstring8):
+ (JSC::jsOwnedString):
+ (JSC::jsStringBuilder):
+ (JSC::inlineJSValueNotStringtoString):
+ * runtime/JSStringJoiner.cpp:
+ (JSC::JSStringJoiner::build):
+ * runtime/JSSymbolTableObject.h:
+ (JSC::JSSymbolTableObject::JSSymbolTableObject):
+ (JSC::JSSymbolTableObject::finishCreation):
+ (JSC::symbolTablePut):
+ (JSC::symbolTablePutWithAttributes):
+ * runtime/JSVariableObject.h:
+ (JSC::JSVariableObject::JSVariableObject):
+ * runtime/JSWithScope.h:
+ (JSC::JSWithScope::create):
+ (JSC::JSWithScope::createStructure):
+ (JSC::JSWithScope::JSWithScope):
+ * runtime/JSWrapperObject.h:
+ (JSWrapperObject):
+ (JSC::JSWrapperObject::createStructure):
+ (JSC::JSWrapperObject::JSWrapperObject):
+ (JSC::JSWrapperObject::setInternalValue):
+ * runtime/LiteralParser.cpp:
+ (JSC::::tryJSONPParse):
+ (JSC::::makeIdentifier):
+ (JSC::::parse):
+ * runtime/Lookup.cpp:
+ (JSC::HashTable::createTable):
+ (JSC::setUpStaticFunctionSlot):
+ * runtime/Lookup.h:
+ (JSC::HashTable::initializeIfNeeded):
+ (JSC::HashTable::entry):
+ (JSC::HashTable::begin):
+ (JSC::HashTable::end):
+ (HashTable):
+ (JSC::lookupPut):
+ * runtime/MathObject.cpp:
+ (JSC::MathObject::MathObject):
+ (JSC::MathObject::finishCreation):
+ (JSC::mathProtoFuncSin):
+ * runtime/MathObject.h:
+ (JSC::MathObject::createStructure):
+ * runtime/MemoryStatistics.cpp:
+ * runtime/MemoryStatistics.h:
+ * runtime/NameConstructor.cpp:
+ (JSC::NameConstructor::finishCreation):
+ (JSC::constructPrivateName):
+ * runtime/NameConstructor.h:
+ (JSC::NameConstructor::createStructure):
+ * runtime/NameInstance.cpp:
+ (JSC::NameInstance::NameInstance):
+ * runtime/NameInstance.h:
+ (JSC::NameInstance::createStructure):
+ (JSC::NameInstance::create):
+ (NameInstance):
+ (JSC::NameInstance::finishCreation):
+ * runtime/NamePrototype.cpp:
+ (JSC::NamePrototype::NamePrototype):
+ (JSC::NamePrototype::finishCreation):
+ * runtime/NamePrototype.h:
+ (JSC::NamePrototype::createStructure):
+ * runtime/NativeErrorConstructor.h:
+ (JSC::NativeErrorConstructor::createStructure):
+ (JSC::NativeErrorConstructor::finishCreation):
+ * runtime/NativeErrorPrototype.cpp:
+ (JSC::NativeErrorPrototype::finishCreation):
+ * runtime/NumberConstructor.cpp:
+ (JSC::NumberConstructor::finishCreation):
+ (JSC::constructWithNumberConstructor):
+ * runtime/NumberConstructor.h:
+ (JSC::NumberConstructor::createStructure):
+ * runtime/NumberObject.cpp:
+ (JSC::NumberObject::NumberObject):
+ (JSC::NumberObject::finishCreation):
+ (JSC::constructNumber):
+ * runtime/NumberObject.h:
+ (NumberObject):
+ (JSC::NumberObject::create):
+ (JSC::NumberObject::createStructure):
+ * runtime/NumberPrototype.cpp:
+ (JSC::NumberPrototype::NumberPrototype):
+ (JSC::NumberPrototype::finishCreation):
+ (JSC::integerValueToString):
+ (JSC::numberProtoFuncToString):
+ * runtime/NumberPrototype.h:
+ (JSC::NumberPrototype::createStructure):
+ * runtime/ObjectConstructor.cpp:
+ (JSC::ObjectConstructor::finishCreation):
+ (JSC::objectConstructorGetOwnPropertyDescriptor):
+ (JSC::objectConstructorSeal):
+ (JSC::objectConstructorFreeze):
+ (JSC::objectConstructorPreventExtensions):
+ (JSC::objectConstructorIsSealed):
+ (JSC::objectConstructorIsFrozen):
+ * runtime/ObjectConstructor.h:
+ (JSC::ObjectConstructor::createStructure):
+ (JSC::constructEmptyObject):
+ * runtime/ObjectPrototype.cpp:
+ (JSC::ObjectPrototype::ObjectPrototype):
+ (JSC::ObjectPrototype::finishCreation):
+ (JSC::objectProtoFuncToString):
+ * runtime/ObjectPrototype.h:
+ (JSC::ObjectPrototype::createStructure):
+ * runtime/Operations.cpp:
+ (JSC::jsTypeStringForValue):
+ * runtime/Operations.h:
+ (JSC):
+ (JSC::jsString):
+ (JSC::jsStringFromArguments):
+ (JSC::normalizePrototypeChainForChainAccess):
+ (JSC::normalizePrototypeChain):
+ * runtime/PropertyMapHashTable.h:
+ (JSC::PropertyMapEntry::PropertyMapEntry):
+ (JSC::PropertyTable::createStructure):
+ (PropertyTable):
+ (JSC::PropertyTable::copy):
+ * runtime/PropertyNameArray.h:
+ (JSC::PropertyNameArray::PropertyNameArray):
+ (JSC::PropertyNameArray::vm):
+ (JSC::PropertyNameArray::addKnownUnique):
+ (PropertyNameArray):
+ * runtime/PropertyTable.cpp:
+ (JSC::PropertyTable::create):
+ (JSC::PropertyTable::clone):
+ (JSC::PropertyTable::PropertyTable):
+ * runtime/PrototypeMap.cpp:
+ (JSC::PrototypeMap::emptyObjectStructureForPrototype):
+ * runtime/RegExp.cpp:
+ (JSC::RegExp::RegExp):
+ (JSC::RegExp::finishCreation):
+ (JSC::RegExp::createWithoutCaching):
+ (JSC::RegExp::create):
+ (JSC::RegExp::compile):
+ (JSC::RegExp::compileIfNecessary):
+ (JSC::RegExp::match):
+ (JSC::RegExp::compileMatchOnly):
+ (JSC::RegExp::compileIfNecessaryMatchOnly):
+ * runtime/RegExp.h:
+ (JSC):
+ (RegExp):
+ (JSC::RegExp::createStructure):
+ * runtime/RegExpCache.cpp:
+ (JSC::RegExpCache::lookupOrCreate):
+ (JSC::RegExpCache::RegExpCache):
+ (JSC::RegExpCache::addToStrongCache):
+ * runtime/RegExpCache.h:
+ (RegExpCache):
+ * runtime/RegExpCachedResult.cpp:
+ (JSC::RegExpCachedResult::lastResult):
+ (JSC::RegExpCachedResult::setInput):
+ * runtime/RegExpCachedResult.h:
+ (JSC::RegExpCachedResult::RegExpCachedResult):
+ (JSC::RegExpCachedResult::record):
+ * runtime/RegExpConstructor.cpp:
+ (JSC::RegExpConstructor::RegExpConstructor):
+ (JSC::RegExpConstructor::finishCreation):
+ (JSC::constructRegExp):
+ * runtime/RegExpConstructor.h:
+ (JSC::RegExpConstructor::createStructure):
+ (RegExpConstructor):
+ (JSC::RegExpConstructor::performMatch):
+ * runtime/RegExpMatchesArray.cpp:
+ (JSC::RegExpMatchesArray::RegExpMatchesArray):
+ (JSC::RegExpMatchesArray::create):
+ (JSC::RegExpMatchesArray::finishCreation):
+ (JSC::RegExpMatchesArray::reifyAllProperties):
+ * runtime/RegExpMatchesArray.h:
+ (RegExpMatchesArray):
+ (JSC::RegExpMatchesArray::createStructure):
+ * runtime/RegExpObject.cpp:
+ (JSC::RegExpObject::RegExpObject):
+ (JSC::RegExpObject::finishCreation):
+ (JSC::RegExpObject::match):
+ * runtime/RegExpObject.h:
+ (JSC::RegExpObject::create):
+ (JSC::RegExpObject::setRegExp):
+ (JSC::RegExpObject::setLastIndex):
+ (JSC::RegExpObject::createStructure):
+ * runtime/RegExpPrototype.cpp:
+ (JSC::regExpProtoFuncCompile):
+ * runtime/RegExpPrototype.h:
+ (JSC::RegExpPrototype::createStructure):
+ * runtime/SmallStrings.cpp:
+ (JSC::SmallStrings::initializeCommonStrings):
+ (JSC::SmallStrings::createEmptyString):
+ (JSC::SmallStrings::createSingleCharacterString):
+ (JSC::SmallStrings::initialize):
+ * runtime/SmallStrings.h:
+ (JSC):
+ (JSC::SmallStrings::singleCharacterString):
+ (SmallStrings):
+ * runtime/SparseArrayValueMap.cpp:
+ (JSC::SparseArrayValueMap::SparseArrayValueMap):
+ (JSC::SparseArrayValueMap::finishCreation):
+ (JSC::SparseArrayValueMap::create):
+ (JSC::SparseArrayValueMap::createStructure):
+ (JSC::SparseArrayValueMap::putDirect):
+ (JSC::SparseArrayEntry::put):
+ * runtime/SparseArrayValueMap.h:
+ * runtime/StrictEvalActivation.cpp:
+ (JSC::StrictEvalActivation::StrictEvalActivation):
+ * runtime/StrictEvalActivation.h:
+ (JSC::StrictEvalActivation::create):
+ (JSC::StrictEvalActivation::createStructure):
+ * runtime/StringConstructor.cpp:
+ (JSC::StringConstructor::finishCreation):
+ * runtime/StringConstructor.h:
+ (JSC::StringConstructor::createStructure):
+ * runtime/StringObject.cpp:
+ (JSC::StringObject::StringObject):
+ (JSC::StringObject::finishCreation):
+ (JSC::constructString):
+ * runtime/StringObject.h:
+ (JSC::StringObject::create):
+ (JSC::StringObject::createStructure):
+ (StringObject):
+ * runtime/StringPrototype.cpp:
+ (JSC::StringPrototype::StringPrototype):
+ (JSC::StringPrototype::finishCreation):
+ (JSC::removeUsingRegExpSearch):
+ (JSC::replaceUsingRegExpSearch):
+ (JSC::stringProtoFuncMatch):
+ (JSC::stringProtoFuncSearch):
+ (JSC::stringProtoFuncSplit):
+ * runtime/StringPrototype.h:
+ (JSC::StringPrototype::createStructure):
+ * runtime/StringRecursionChecker.h:
+ (JSC::StringRecursionChecker::performCheck):
+ (JSC::StringRecursionChecker::~StringRecursionChecker):
+ * runtime/Structure.cpp:
+ (JSC::StructureTransitionTable::add):
+ (JSC::Structure::Structure):
+ (JSC::Structure::materializePropertyMap):
+ (JSC::Structure::despecifyDictionaryFunction):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::removePropertyTransition):
+ (JSC::Structure::changePrototypeTransition):
+ (JSC::Structure::despecifyFunctionTransition):
+ (JSC::Structure::attributeChangeTransition):
+ (JSC::Structure::toDictionaryTransition):
+ (JSC::Structure::toCacheableDictionaryTransition):
+ (JSC::Structure::toUncacheableDictionaryTransition):
+ (JSC::Structure::sealTransition):
+ (JSC::Structure::freezeTransition):
+ (JSC::Structure::preventExtensionsTransition):
+ (JSC::Structure::takePropertyTableOrCloneIfPinned):
+ (JSC::Structure::nonPropertyTransition):
+ (JSC::Structure::isSealed):
+ (JSC::Structure::isFrozen):
+ (JSC::Structure::flattenDictionaryStructure):
+ (JSC::Structure::addPropertyWithoutTransition):
+ (JSC::Structure::removePropertyWithoutTransition):
+ (JSC::Structure::allocateRareData):
+ (JSC::Structure::cloneRareDataFrom):
+ (JSC::Structure::copyPropertyTable):
+ (JSC::Structure::copyPropertyTableForPinning):
+ (JSC::Structure::get):
+ (JSC::Structure::despecifyFunction):
+ (JSC::Structure::despecifyAllFunctions):
+ (JSC::Structure::putSpecificValue):
+ (JSC::Structure::createPropertyMap):
+ (JSC::Structure::getPropertyNamesFromStructure):
+ (JSC::Structure::prototypeChainMayInterceptStoreTo):
+ * runtime/Structure.h:
+ (Structure):
+ (JSC::Structure::finishCreation):
+ (JSC::Structure::setPrototypeWithoutTransition):
+ (JSC::Structure::setGlobalObject):
+ (JSC::Structure::setObjectToStringValue):
+ (JSC::Structure::materializePropertyMapIfNecessary):
+ (JSC::Structure::materializePropertyMapIfNecessaryForPinning):
+ (JSC::Structure::setPreviousID):
+ * runtime/StructureChain.cpp:
+ (JSC::StructureChain::StructureChain):
+ * runtime/StructureChain.h:
+ (JSC::StructureChain::create):
+ (JSC::StructureChain::createStructure):
+ (JSC::StructureChain::finishCreation):
+ (StructureChain):
+ * runtime/StructureInlines.h:
+ (JSC::Structure::create):
+ (JSC::Structure::createStructure):
+ (JSC::Structure::get):
+ (JSC::Structure::setEnumerationCache):
+ (JSC::Structure::prototypeChain):
+ (JSC::Structure::propertyTable):
+ * runtime/StructureRareData.cpp:
+ (JSC::StructureRareData::createStructure):
+ (JSC::StructureRareData::create):
+ (JSC::StructureRareData::clone):
+ (JSC::StructureRareData::StructureRareData):
+ * runtime/StructureRareData.h:
+ (StructureRareData):
+ * runtime/StructureRareDataInlines.h:
+ (JSC::StructureRareData::setPreviousID):
+ (JSC::StructureRareData::setObjectToStringValue):
+ * runtime/StructureTransitionTable.h:
+ (StructureTransitionTable):
+ (JSC::StructureTransitionTable::setSingleTransition):
+ * runtime/SymbolTable.h:
+ (JSC::SharedSymbolTable::create):
+ (JSC::SharedSymbolTable::createStructure):
+ (JSC::SharedSymbolTable::SharedSymbolTable):
+ * runtime/VM.cpp: Copied from Source/JavaScriptCore/runtime/JSGlobalData.cpp.
+ (JSC::VM::VM):
+ (JSC::VM::~VM):
+ (JSC::VM::createContextGroup):
+ (JSC::VM::create):
+ (JSC::VM::createLeaked):
+ (JSC::VM::sharedInstanceExists):
+ (JSC::VM::sharedInstance):
+ (JSC::VM::sharedInstanceInternal):
+ (JSC::VM::getHostFunction):
+ (JSC::VM::ClientData::~ClientData):
+ (JSC::VM::resetDateCache):
+ (JSC::VM::startSampling):
+ (JSC::VM::stopSampling):
+ (JSC::VM::discardAllCode):
+ (JSC::VM::dumpSampleData):
+ (JSC::VM::addSourceProviderCache):
+ (JSC::VM::clearSourceProviderCaches):
+ (JSC::VM::releaseExecutableMemory):
+ (JSC::releaseExecutableMemory):
+ (JSC::VM::gatherConservativeRoots):
+ (JSC::VM::addRegExpToTrace):
+ (JSC::VM::dumpRegExpTrace):
+ * runtime/VM.h: Copied from Source/JavaScriptCore/runtime/JSGlobalData.h.
+ (VM):
+ (JSC::VM::isSharedInstance):
+ (JSC::VM::usingAPI):
+ (JSC::VM::isInitializingObject):
+ (JSC::VM::setInitializingObjectClass):
+ (JSC::WeakSet::heap):
+ * runtime/WriteBarrier.h:
+ (JSC):
+ (JSC::WriteBarrierBase::set):
+ (JSC::WriteBarrierBase::setMayBeNull):
+ (JSC::WriteBarrierBase::setEarlyValue):
+ (JSC::WriteBarrier::WriteBarrier):
+ * testRegExp.cpp:
+ (GlobalObject):
+ (GlobalObject::create):
+ (GlobalObject::createStructure):
+ (GlobalObject::finishCreation):
+ (main):
+ (testOneRegExp):
+ (parseRegExpLine):
+ (runFromFiles):
+ (realMain):
+ * yarr/YarrInterpreter.h:
+ (BytecodePattern):
+ * yarr/YarrJIT.cpp:
+ (YarrGenerator):
+ (JSC::Yarr::YarrGenerator::compile):
+ (JSC::Yarr::jitCompile):
+ * yarr/YarrJIT.h:
+ (JSC):
+
+2013-04-18 Xuefei Ren <xren@blackberry.com>
+
+ remove build warning(unused parameter)
+ https://bugs.webkit.org/show_bug.cgi?id=114670
+
+ Reviewed by Rob Buis.
+
+ remove warning in Source/JavaScriptCore/runtime/GCActivityCallbackBlackBerry.cpp
+
+ * runtime/GCActivityCallbackBlackBerry.cpp:
+ (JSC::DefaultGCActivityCallback::didAllocate):
+
+2013-04-18 Jonathan Liu <net147@gmail.com>
+
+ Implement JIT for MinGW-w64 64-bit
+ https://bugs.webkit.org/show_bug.cgi?id=114580
+
+ Reviewed by Jocelyn Turcotte.
+
+ * jit/JITStubs.cpp:
+ (JSC):
+
+2013-04-17 Mark Lam <mark.lam@apple.com>
+
+ Avoid using a branch range that is too far for some CPU architectures.
+ https://bugs.webkit.org/show_bug.cgi?id=114782.
+
+ Reviewed by David Kilzer.
+
+ * llint/LowLevelInterpreter.asm:
+ * llint/LowLevelInterpreter32_64.asm:
+ * llint/LowLevelInterpreter64.asm:
+
+2013-04-17 Julien Brianceau <jbrianceau@nds.com>
+
+ Fix SH4 build (broken since r148639).
+ https://bugs.webkit.org/show_bug.cgi?id=114773.
+
+ Allow longer displacements for specific branches in SH4 LLINT.
+
+ Reviewed by Oliver Hunt.
+
+ * offlineasm/sh4.rb:
+
+2013-04-14 Roger Fong <roger_fong@apple.com>
+
+ Unreviewed. More Windows build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+
+2013-04-14 Roger Fong <roger_fong@apple.com>
+
+ Unreviewed. Windows build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+
+2013-04-17 Mark Lam <mark.lam@apple.com>
+
+ Fix broken build. Replaced a static const with a #define.
+ https://bugs.webkit.org/show_bug.cgi?id=114577.
+
+ Unreviewed.
+
+ * runtime/Watchdog.cpp:
+ (JSC::Watchdog::Watchdog):
+ (JSC::Watchdog::isEnabled):
+
+2013-04-17 Mark Lam <mark.lam@apple.com>
+
+ Add LLINT and baseline JIT support for timing out scripts.
+ https://bugs.webkit.org/show_bug.cgi?id=114577.
+
+ Reviewed by Geoffrey Garen.
+
+ Introduces the new Watchdog class which is used to track script
+ execution time, and initiate script termination if needed.
+
+ * API/JSContextRef.cpp:
+ (internalScriptTimeoutCallback):
+ (JSContextGroupSetExecutionTimeLimit):
+ (JSContextGroupClearExecutionTimeLimit):
+ * API/JSContextRefPrivate.h:
+ - Added new script execution time limit APIs.
+ * API/tests/testapi.c:
+ (currentCPUTime):
+ (shouldTerminateCallback):
+ (cancelTerminateCallback):
+ (extendTerminateCallback):
+ (main):
+ - Added new API tests for script execution time limit.
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitLoopHint):
+ - loop hints are needed for the llint as well. Hence, it will be
+ emitted unconditionally.
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::addStackTraceIfNecessary):
+ (JSC::Interpreter::throwException):
+ (JSC::Interpreter::execute):
+ (JSC::Interpreter::executeCall):
+ (JSC::Interpreter::executeConstruct):
+ - Added checks for script termination before entering script code.
+ * jit/JIT.cpp:
+ (JSC::JIT::emitWatchdogTimerCheck):
+ * jit/JIT.h:
+ (JSC::JIT::emit_op_loop_hint):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION(void, handle_watchdog_timer)):
+ * jit/JITStubs.h:
+ * llint/LLIntExceptions.cpp:
+ (JSC::LLInt::doThrow):
+ - Factored out some common code from returnToThrow() and callToThrow().
+ (JSC::LLInt::returnToThrow):
+ (JSC::LLInt::callToThrow):
+ * llint/LLIntSlowPaths.cpp:
+ (JSC::LLInt::LLINT_SLOW_PATH_DECL(slow_path_handle_watchdog_timer)):
+ * llint/LLIntSlowPaths.h:
+ * llint/LowLevelInterpreter.asm:
+ * llint/LowLevelInterpreter32_64.asm:
+ * llint/LowLevelInterpreter64.asm:
+ * runtime/ExceptionHelpers.cpp:
+ (JSC::throwTerminatedExecutionException):
+ - Also removed the now unused InterruptedExecutionException.
+ * runtime/ExceptionHelpers.h:
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSGlobalData.h:
+ - Added watchdog, and removed the now obsolete Terminator.
+ * runtime/Terminator.h: Removed.
+ * runtime/Watchdog.cpp: Added.
+ (JSC::Watchdog::Watchdog):
+ (JSC::Watchdog::~Watchdog):
+ (JSC::Watchdog::setTimeLimit):
+ (JSC::Watchdog::didFire):
+ (JSC::Watchdog::isEnabled):
+ (JSC::Watchdog::fire):
+ (JSC::Watchdog::arm):
+ (JSC::Watchdog::disarm):
+ (JSC::Watchdog::startCountdownIfNeeded):
+ (JSC::Watchdog::startCountdown):
+ (JSC::Watchdog::stopCountdown):
+ (JSC::Watchdog::Scope::Scope):
+ (JSC::Watchdog::Scope::~Scope):
+ * runtime/Watchdog.h: Added.
+ (Watchdog):
+ (JSC::Watchdog::didFire):
+ (JSC::Watchdog::timerDidFireAddress):
+ (JSC::Watchdog::isArmed):
+ (Watchdog::Scope):
+ * runtime/WatchdogMac.cpp: Added.
+ (JSC::Watchdog::initTimer):
+ (JSC::Watchdog::destroyTimer):
+ (JSC::Watchdog::startTimer):
+ (JSC::Watchdog::stopTimer):
+ * runtime/WatchdogNone.cpp: Added.
+ (JSC::Watchdog::initTimer):
+ (JSC::Watchdog::destroyTimer):
+ (JSC::Watchdog::startTimer):
+ (JSC::Watchdog::stopTimer):
+
+2013-04-14 Roger Fong <roger_fong@apple.com>
+
+ Unreviewed. VS2010 Windows build fix.
+
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorPostBuild.cmd:
+
+2013-04-14 Roger Fong <roger_fong@apple.com>
+
+ Copy make-file-export-generator script to the the Source folders of the projects that use it.
+ <rdar://problem/13675604>
+
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGenerator.vcxproj:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGenerator.vcxproj.filters:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorBuildCmd.cmd:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/make-export-file-generator: Copied from Source/WebCore/make-export-file-generator.
+
+2013-04-17 Brent Fulgham <bfulgham@webkit.org>
+
+ [Windows, WinCairo] Stop individually building WTF files in JSC.
+ https://bugs.webkit.org/show_bug.cgi?id=114705
+
+ Reviewed by Anders Carlsson.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+ Export additional String/fastMalloc symbols needed by JSC program.
+ * JavaScriptCore.vcproj/jsc/jsc.vcproj: Don't manually build
+ WTF implementation files (a second time!) in this project.
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+ Export additional String/fastMalloc symbols needed by JSC program.
+ * JavaScriptCore.vcxproj/jsc/jsc.vcxproj: Don't manually
+ build WTF implementation files (a second time!) in this project.
+ * JavaScriptCore.vcxproj/jsc/jsc.vcxproj.filters: Ditto.
+
+2013-04-17 Mark Lam <mark.lam@apple.com>
+
+ releaseExecutableMemory() should canonicalize cell liveness data before
+ it scans the GC roots.
+ https://bugs.webkit.org/show_bug.cgi?id=114733.
+
+ Reviewed by Mark Hahnenberg.
+
+ * heap/Heap.cpp:
+ (JSC::Heap::canonicalizeCellLivenessData):
+ * heap/Heap.h:
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::releaseExecutableMemory):
+
+2013-04-16 Commit Queue <rniwa@webkit.org>
+
+ Unreviewed, rolling out r148576.
+ http://trac.webkit.org/changeset/148576
+ https://bugs.webkit.org/show_bug.cgi?id=114714
+
+ WebCore is building some of these same files (Requested by
+ bfulgham on #webkit).
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+ * JavaScriptCore.vcproj/jsc/jsc.vcproj:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+ * JavaScriptCore.vcxproj/jsc/jsc.vcxproj:
+ * JavaScriptCore.vcxproj/jsc/jsc.vcxproj.filters:
+
+2013-04-16 Brent Fulgham <bfulgham@webkit.org>
+
+ [Windows, WinCairo] Stop individually building WTF files in JSC.
+ https://bugs.webkit.org/show_bug.cgi?id=114705
+
+ Reviewed by Anders Carlsson.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+ Export additional String/fastMalloc symbols needed by JSC program.
+ * JavaScriptCore.vcproj/jsc/jsc.vcproj: Don't manually build
+ WTF implementation files (a second time!) in this project.
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+ Export additional String/fastMalloc symbols needed by JSC program.
+ * JavaScriptCore.vcxproj/jsc/jsc.vcxproj: Don't manually
+ build WTF implementation files (a second time!) in this project.
+ * JavaScriptCore.vcxproj/jsc/jsc.vcxproj.filters: Ditto.
+
+2013-04-16 Patrick Gansterer <paroga@webkit.org>
+
+ [CMake] Do not use JAVASCRIPTCORE_DIR in add_custom_command() of JavaScriptCore project
+ https://bugs.webkit.org/show_bug.cgi?id=114265
+
+ Reviewed by Brent Fulgham.
+
+ Use CMAKE_CURRENT_SOURCE_DIR instead, since it provides the same value and is more
+ understandable. Also move the GENERATE_HASH_LUT macro into the CMakeLists.txt
+ of JavaScriptCore to avoid the usage of JAVASCRIPTCORE_DIR there too.
+
+ * CMakeLists.txt:
+
+2013-04-16 Anders Carlsson <andersca@apple.com>
+
+ Another Windows build fix attempt.
+
+ * runtime/JSGlobalData.h:
+ (JSGlobalData):
+
+2013-04-16 Anders Carlsson <andersca@apple.com>
+
+ Try to fix the Windows build.
+
+ * runtime/JSGlobalData.h:
+
+2013-04-16 Brent Fulgham <bfulgham@webkit.org>
+
+ [Windows] Unreviewed VS2010 build correction.
+
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorCommon.props:
+ Specify proper link library to avoid mixture of ICU 4.0 and 4.6
+ symbols during link.
+
+2013-04-15 Ryosuke Niwa <rniwa@webkit.org>
+
+ Windows clean build fix after r148479.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+
+2013-04-15 Anders Carlsson <andersca@apple.com>
+
+ ScriptWrappable subclasses shouldn't have to include WeakInlines.h
+ https://bugs.webkit.org/show_bug.cgi?id=114641
+
+ Reviewed by Alexey Proskuryakov.
+
+ Move back the Weak constructor, destructor and clear() to Weak.h. Add a new weakClearSlowCase function
+ and put it in Weak.cpp.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * heap/Weak.cpp: Added.
+ * heap/Weak.h:
+ * heap/WeakInlines.h:
+ * heap/WeakSetInlines.h:
+
+2013-04-15 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ HeapTimer lifetime should be less complicated
+ https://bugs.webkit.org/show_bug.cgi?id=114529
+
+ Reviewed by Oliver Hunt.
+
+ Right now our HeapTimer lifetime is rather complicated. HeapTimers are "owned" by the JSGlobalData,
+ but there's an issue in that there can be races between a thread that is trying to tear down a JSGlobalData
+ and the HeapTimer's fire function. Our current code for tearing down HeapTimers is an intricate and delicate
+ dance which probably contains subtle bugs.
+
+ We can make our lives easier by changing things around a bit.
+
+ 1) We should free the API lock from being solely owned by the JSGlobalData so we don't have to worry about
+ grabbing the lock out of invalid memory when our HeapTimer callback fires.
+
+ 2) We should also make it so that we deref the JSGlobalData first, then unlock the API lock so that when we
+ have the lock, the JSGlobalData is in one of two states: fully valid or completely destroyed, and we know exactly which one.
+
+ 3) The JSLock can tell us this information by keeping a back pointer to the JSGlobalData. When the JSGlobalData's
+ destructor is called, it clears this pointer in the JSLock. Other clients of the API lock can then check
+ this pointer to determine whether or not the JSGlobalData is still around.
+
+ 4) The CFRunLoopTimer will use the API lock as its context rather than the HeapTimer itself. The only way
+ the HeapTimer's callback can get to the HeapTimer is through the API lock's JSGlobalData pointer.
+
+ 5) The CFRunLoopTimerContext struct has two fields for retain and release callbacks for the context's info field.
+ We'll provide these callbacks to ref() and deref() the JSLock as necessary. Thus, the timer becomes the other
+ owner of the JSLock apart from the JSGlobalData.
+
+ * API/APIShims.h: Remove the cruft that was required by the previous design, such as RefGlobalDataTag.
+ (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
+ (JSC::APIEntryShimWithoutLock::~APIEntryShimWithoutLock):
+ (APIEntryShimWithoutLock):
+ (JSC::APIEntryShim::APIEntryShim):
+ (JSC::APIEntryShim::~APIEntryShim): Protect the API lock with a RefPtr, deref the JSGlobalData, which could destroy it,
+ then unlock the API lock. This ordering prevents others from obtaining the API lock while the JSGlobalData is in the
+ middle of being torn down.
+ (JSC::APIEntryShim::init): We now take the lock, then ref the JSGlobalData, which is the opposite order of when we
+ tear down the shim.
+ * heap/Heap.cpp:
+ (JSC::Heap::setActivityCallback): Use PassOwnPtr now.
+ (JSC::Heap::activityCallback): Ditto.
+ (JSC::Heap::sweeper): Ditto.
+ (JSC):
+ * heap/Heap.h:
+ (Heap):
+ * heap/HeapTimer.cpp:
+ (JSC::retainAPILock): Retain callback for CFRunLoopTimerContext struct.
+ (JSC::releaseAPILock): Release callback for the CFRunLoopTimerContext struct.
+ (JSC::HeapTimer::HeapTimer): Use the API lock as the context's info field rather than the HeapTimer.
+ (JSC::HeapTimer::timerDidFire): Grab the API lock. Return early if the JSGlobalData has already been destroyed.
+ Otherwise, figure out which kind of HeapTimer we are based on the CFRunLoopTimerRef passed to the callback and
+ call the HeapTimer's callback.
+ * heap/HeapTimer.h:
+ (HeapTimer):
+ * heap/IncrementalSweeper.cpp:
+ (JSC::IncrementalSweeper::create): PassOwnPtr all the things.
+ * heap/IncrementalSweeper.h:
+ (IncrementalSweeper):
+ * jsc.cpp:
+ (jscmain): We use an APIEntryShim instead of a RefPtr for the JSGlobalData because we need to
+ tear down the JSGlobalData while we still hold the lock, which the APIEntryShim handles correctly.
+ * runtime/GCActivityCallback.h:
+ (DefaultGCActivityCallback):
+ (JSC::DefaultGCActivityCallback::create):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ (JSC::JSGlobalData::~JSGlobalData): Notify the API lock that the JSGlobalData is being torn down.
+ * runtime/JSGlobalData.h:
+ (JSGlobalData):
+ (JSC::JSGlobalData::apiLock):
+ * runtime/JSLock.cpp:
+ (JSC::JSLockHolder::JSLockHolder): Ref, then lock (just like the API shim).
+ (JSC):
+ (JSC::JSLock::willDestroyGlobalData):
+ (JSC::JSLockHolder::init):
+ (JSC::JSLockHolder::~JSLockHolder): Protect, deref, then unlock (just like the API shim).
+ (JSC::JSLock::JSLock):
+ * runtime/JSLock.h: Add back pointer to the JSGlobalData and a callback for when the JSGlobalData is being
+ torn down that clears this pointer to notify other clients (i.e. timer callbacks) that the JSGlobalData is no
+ longer valid.
+ (JSLockHolder):
+ (JSLock):
+ (JSC::JSLock::globalData):
+ * testRegExp.cpp:
+ (realMain): We use an APIEntryShim instead of a RefPtr for the JSGlobalData because we need to
+ tear down the JSGlobalData while we still hold the lock, which the APIEntryShim handles correctly.
+
+2013-04-15 Julien Brianceau <jbrianceau@nds.com>
+
+ LLInt SH4 backend implementation
+ https://bugs.webkit.org/show_bug.cgi?id=112886
+
+ Reviewed by Oliver Hunt.
+
+ * dfg/DFGOperations.cpp:
+ (JSC):
+ * jit/JITStubs.cpp:
+ * llint/LLIntOfflineAsmConfig.h:
+ * llint/LowLevelInterpreter.asm:
+ * llint/LowLevelInterpreter32_64.asm:
+ * offlineasm/arm.rb:
+ * offlineasm/ast.rb:
+ * offlineasm/backends.rb:
+ * offlineasm/instructions.rb:
+ * offlineasm/mips.rb:
+ * offlineasm/risc.rb:
+ * offlineasm/sh4.rb: Added.
+
+2013-04-15 Patrick Gansterer <paroga@webkit.org>
+
+ [CMake] Add WTF_USE_*_UNICODE variables
+ https://bugs.webkit.org/show_bug.cgi?id=114556
+
+ Reviewed by Brent Fulgham.
+
+ WTF_USE_ICU_UNICODE and WTF_USE_WCHAR_UNICODE are used to
+ reduce duplication in the platform specific CMake files.
+
+ * CMakeLists.txt:
+ * PlatformEfl.cmake:
+
+2013-04-13 Patrick Gansterer <paroga@webkit.org>
+
+ Add missing export macro to SymbolTableEntry::freeFatEntrySlow()
+
+ * runtime/SymbolTable.h:
+ (SymbolTableEntry):
+
+2013-04-12 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Block freeing thread should call Region::destroy instead of delete
+ https://bugs.webkit.org/show_bug.cgi?id=114544
+
+ Reviewed by Oliver Hunt.
+
+ Since Region doesn't have a virtual destructor, calling delete will not properly clean up all of
+ the state of the Region. We should call destroy() instead.
+
+ * heap/BlockAllocator.cpp:
+ (JSC::BlockAllocator::releaseFreeRegions):
+ (JSC::BlockAllocator::blockFreeingThreadMain):
+
+2013-04-11 Benjamin Poulain <bpoulain@apple.com>
+
+ Merge CharacterClassTable into CharacterClass
+ https://bugs.webkit.org/show_bug.cgi?id=114409
+
+ Reviewed by Darin Adler.
+
+ CharacterClassTable is only a pointer and a boolean.
+ It is a little overkill to make a separate allocation
+ for that.
+
+ * create_regex_tables:
+ * yarr/YarrJIT.cpp:
+ (JSC::Yarr::YarrGenerator::matchCharacterClass):
+ * yarr/YarrPattern.cpp:
+ (JSC::Yarr::CharacterClassConstructor::charClass):
+ * yarr/YarrPattern.h:
+ (CharacterClass):
+ (JSC::Yarr::CharacterClass::CharacterClass):
+
+2013-04-11 Michael Saboff <msaboff@apple.com>
+
+ Added UNLIKELY() suggested in https://bugs.webkit.org/show_bug.cgi?id=114366
+ after checking in the original change.
+
+ Rubber-stamped by Jessie Berlin.
+
+ * dfg/DFGOperations.cpp:
+
+2013-04-10 Benjamin Poulain <benjamin@webkit.org>
+
+ Unify JSC Parser's error and error message
+ https://bugs.webkit.org/show_bug.cgi?id=114363
+
+ Reviewed by Geoffrey Garen.
+
+ The parser kept the error state over two attributes:
+ error and errorMessage. They were changed in sync,
+ but had some discrepancy (for example, the error message
+ was always defined to something).
+
+ This patch unifies the two. There is an error if
+ if the error message is non-null or if the parsing finished
+ before the end.
+
+ This also gets rid of the allocation of the error message
+ when instantiating a parser.
+
+ * parser/Parser.cpp:
+ (JSC::::Parser):
+ (JSC::::parseInner):
+ (JSC::::parseSourceElements):
+ (JSC::::parseVarDeclaration):
+ (JSC::::parseConstDeclaration):
+ (JSC::::parseForStatement):
+ (JSC::::parseSwitchStatement):
+ (JSC::::parsePrimaryExpression):
+ * parser/Parser.h:
+ (JSC::Parser::updateErrorMessage):
+ (JSC::Parser::updateErrorWithNameAndMessage):
+ (JSC::Parser::hasError):
+ (Parser):
+
+2013-04-10 Oliver Hunt <oliver@apple.com>
+
+ Set trap is not being called for API objects
+ https://bugs.webkit.org/show_bug.cgi?id=114403
+
+ Reviewed by Anders Carlsson.
+
+ Intercept putByIndex on the callback object and add tests
+ to make sure we don't regress in future.
+
+ * API/JSCallbackObject.h:
+ (JSCallbackObject):
+ * API/JSCallbackObjectFunctions.h:
+ (JSC::::putByIndex):
+ (JSC):
+ * API/tests/testapi.c:
+ (PropertyCatchalls_setProperty):
+ * API/tests/testapi.js:
+
+2013-04-10 Benjamin Poulain <bpoulain@apple.com>
+
+ Mass remove all the empty directories
+
+ Rubberstamped by Ryosuke Niwa.
+
+ * qt/api: Removed.
+ * qt/benchmarks/qscriptengine: Removed.
+ * qt/benchmarks/qscriptvalue: Removed.
+ * qt/tests/qscriptengine: Removed.
+ * qt/tests/qscriptstring: Removed.
+ * qt/tests/qscriptvalue: Removed.
+ * qt/tests/qscriptvalueiterator: Removed.
+
+2013-04-10 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ JSObject::getOwnNonIndexPropertyNames calculates numCacheableSlots incorrectly
+ https://bugs.webkit.org/show_bug.cgi?id=114235
+
+ Reviewed by Filip Pizlo.
+
+ If the object doesn't have any properties but the prototype does, we'll assume those prototype properties are
+ accessible in the base object's backing store, which is bad.
+
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::getPropertyNames):
+ (JSC::JSObject::getOwnNonIndexPropertyNames):
+ * runtime/PropertyNameArray.h:
+ (JSC::PropertyNameArray::PropertyNameArray):
+ (JSC::PropertyNameArray::setNumCacheableSlotsForObject):
+ (JSC::PropertyNameArray::setBaseObject):
+ (PropertyNameArray):
+
+2013-04-10 Patrick Gansterer <paroga@webkit.org>
+
+ Remove code duplicates from MacroAssemblerARM
+ https://bugs.webkit.org/show_bug.cgi?id=104457
+
+ Reviewed by Oliver Hunt.
+
+ Reuse some existing methods to avoid duplicated code.
+
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::store8):
+ (JSC::MacroAssemblerARM::store32):
+ (JSC::MacroAssemblerARM::swap):
+ (JSC::MacroAssemblerARM::add32):
+ (JSC::MacroAssemblerARM::sub32):
+
+2013-04-10 Michael Saboff <msaboff@apple.com>
+
+ DFG: Negative size for new Array() interpreted as large unsigned int
+ https://bugs.webkit.org/show_bug.cgi?id=114366
+
+ Reviewed by Oliver Hunt.
+
+ Added new check in operationNewArrayWithSize() for a negative
+ size. If size is negative throw a "RangeError: Array size is not a
+ small enough positive integer" exception.
+
+ * dfg/DFGOperations.cpp:
+
+2013-04-10 peavo@outlook.com <peavo@outlook.com>
+
+ WinCairo build fails to link.
+ https://bugs.webkit.org/show_bug.cgi?id=114358
+
+ Reviewed by Brent Fulgham.
+
+ Export the symbol WTF::MD5::checksum().
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+
+2013-04-08 Anders Carlsson <andersca@apple.com>
+
+ Remove unneeded headers from FrameLoader.h
+ https://bugs.webkit.org/show_bug.cgi?id=114223
+
+ Reviewed by Geoffrey Garen.
+
+ Update for WTF changes.
+
+ * bytecode/SpeculatedType.h:
+ * runtime/JSCJSValue.h:
+
+2013-04-09 Geoffrey Garen <ggaren@apple.com>
+
+ Removed bitrotted TimeoutChecker code
+ https://bugs.webkit.org/show_bug.cgi?id=114336
+
+ Reviewed by Alexey Proskuryakov.
+
+ This mechanism hasn't worked for a while.
+
+ MarkL is working on a new version of this feature with a distinct
+ implementation.
+
+ * API/APIShims.h:
+ (JSC::APIEntryShim::~APIEntryShim):
+ (JSC::APIEntryShim::init):
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * dfg/DFGGPRInfo.h:
+ * jit/JIT.cpp:
+ * jit/JIT.h:
+ * jit/JITStubs.cpp:
+ * jit/JITStubs.h:
+ * jit/JSInterfaceJIT.h:
+ (JSInterfaceJIT):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSGlobalData.h:
+ * runtime/JSGlobalObject.cpp:
+ * runtime/JSONObject.cpp:
+ (JSC::Stringifier::appendStringifiedValue):
+ (JSC::Walker::walk):
+ * runtime/TimeoutChecker.cpp: Removed.
+ * runtime/TimeoutChecker.h: Removed.
+
+2013-04-10 Oliver Hunt <oliver@apple.com>
+
+ REGRESSION (r148073): WebKit Nightly r148082 crashes on launch in JSObjectSetPrivate
+ https://bugs.webkit.org/show_bug.cgi?id=114341
+
+ Reviewed by Alexey Proskuryakov.
+
+ Make JSObjectSetPrivate use uncheckedToJS as some clients
+ clear their private data during finalization for some reason.
+
+ * API/JSObjectRef.cpp:
+ (JSObjectSetPrivate):
+
+2013-04-09 Oliver Hunt <oliver@apple.com>
+
+ Add liveness tests to JSC API entry points
+ https://bugs.webkit.org/show_bug.cgi?id=114318
+
+ Reviewed by Geoffrey Garen.
+
+ Add simple checks for the existence of a method table on any
+ JSCells passed across the API. This in turn forces a structure
+ validity test.
+
+ * API/APICast.h:
+ (toJS):
+ (toJSForGC):
+ (unsafeToJS):
+ * API/JSObjectRef.cpp:
+ (JSObjectGetPrivate):
+
+2013-04-09 Oliver Hunt <oliver@apple.com>
+
+ Rollout last patch as it destroyed everything
+
+ * API/APICast.h:
+ (toJS):
+ (toJSForGC):
+
+2013-04-09 Oliver Hunt <oliver@apple.com>
+
+ Add liveness tests to JSC API entry points
+ https://bugs.webkit.org/show_bug.cgi?id=114318
+
+ Reviewed by Filip Pizlo.
+
+ Add simple checks for the existence of a method table on any
+ JSCells passed across the API. This in turn forces a structure
+ validity test.
+
+ * API/APICast.h:
+ (toJS):
+ (toJSForGC):
+
+2013-04-09 Balazs Kilvady <kilvadyb@homejinni.com>
+
+ LLInt conditional branch compilation fault on MIPS.
+ https://bugs.webkit.org/show_bug.cgi?id=114264
+
+ Reviewed by Filip Pizlo.
+
+ Fix conditional branch compilation in LLInt offlineasm.
+
+ * offlineasm/mips.rb:
+
+2013-04-08 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ JSObject::getOwnNonIndexPropertyNames calculates numCacheableSlots incorrectly
+ https://bugs.webkit.org/show_bug.cgi?id=114235
+
+ Reviewed by Geoffrey Garen.
+
+ Due to the way that numCacheableSlots is currently calculated, checking an object's prototype for enumerable
+ properties causes us not to cache any properties at all. We should only cache properties on the object itself
+ since we currently don't take advantage of any sort of name caching for properties in the prototype chain.
+ This fix undoes a ~2% SunSpider regression caused by http://trac.webkit.org/changeset/147570.
+
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::getOwnNonIndexPropertyNames):
+
+2013-04-09 Ryosuke Niwa <rniwa@webkit.org>
+
+ Remove yarr.gyp
+ https://bugs.webkit.org/show_bug.cgi?id=114247
+
+ Reviewed by Benjamin Poulain.
+
+ * yarr/yarr.gyp: Removed.
+
+2013-04-08 Ryosuke Niwa <rniwa@webkit.org>
+
+ Remove JavaScriptCore.gyp/gypi
+ https://bugs.webkit.org/show_bug.cgi?id=114238
+
+ Reviewed by Benjamin Poulain.
+
+ * JavaScriptCore.gyp: Removed.
+ * JavaScriptCore.gyp/.gitignore: Removed.
+ * JavaScriptCore.gypi: Removed.
+
+2013-04-08 Vahag Vardanyan <vaag@ispras.ru>
+
+ Adds fromCharCode intrinsic support.
+ https://bugs.webkit.org/show_bug.cgi?id=104807
+
+ Reviewed by Oliver Hunt.
+
+ Switch to using fromCharCode intrinsic instead of call operation in some cases.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::executeEffects):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::handleIntrinsic):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ * dfg/DFGNodeType.h:
+ (DFG):
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGOperations.h:
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileFromCharCode):
+ (DFG):
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::callOperation):
+ (SpeculativeJIT):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * runtime/StringConstructor.cpp:
+ (JSC::stringFromCharCode):
+ (JSC):
+ * runtime/StringConstructor.h:
+ (JSC):
+
+2013-04-08 Benjamin Poulain <benjamin@webkit.org>
+
+ Remove HTML Notification
+ https://bugs.webkit.org/show_bug.cgi?id=114231
+
+ Reviewed by Ryosuke Niwa.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2013-04-05 Roger Fong <roger_fong@apple.com>
+
+ Build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+
+2013-04-08 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should be able to inline string equality comparisons
+ https://bugs.webkit.org/show_bug.cgi?id=114224
+
+ Reviewed by Oliver Hunt.
+
+ Inline 8-bit string equality, go to slow path for 16-bit strings. 2x speed-up for string equality
+ comparisons on 8-bit strings. 20-50% speed-up on JSRegress/HashMap tests. 30% speed-up on
+ string-fasta. 2% speed-up on SunSpider overall. Some small speed-ups elsewhere.
+
+ This is a gnarly change but we have loads of test coverage already between the HashMap tests and
+ preexisting DFG string equality tests (which appear to have been designed to test OSR exits, but
+ also give us good overall coverage on string equality behavior).
+
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGOperations.h:
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
+ (JSC::DFG::SpeculativeJIT::compare):
+ (JSC::DFG::SpeculativeJIT::compileStrictEq):
+ (JSC::DFG::SpeculativeJIT::compileStringEquality):
+ (DFG):
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+
+2013-04-08 Geoffrey Garen <ggaren@apple.com>
+
+ Stop #include-ing all of JavaScriptCore in every DOM-related file
+ https://bugs.webkit.org/show_bug.cgi?id=114220
+
+ Reviewed by Sam Weinig.
+
+ I separated WeakInlines.h from Weak.h so WebCore data types that need
+ to declare a Weak<T> data member don't have to #include all of the
+ infrastructure for accessing that data member.
+
+ This also required separating Weak<T> from PassWeak<T> by removing the
+ WeakImplAccessor class template and pushing code down into its subclasses.
+
+ * API/JSWeakObjectMapRefPrivate.cpp:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/UnlinkedCodeBlock.h:
+ * heap/PassWeak.h:
+ (JSC):
+ (PassWeak):
+ (JSC::::PassWeak):
+ (JSC::::operator):
+ (JSC::::get):
+ * heap/SlotVisitorInlines.h:
+ * heap/Weak.h:
+ (JSC):
+ (Weak):
+ * heap/WeakInlines.h: Copied from Source/JavaScriptCore/heap/Weak.h.
+ (JSC):
+ (JSC::::Weak):
+ (JSC::::operator):
+ (JSC::::get):
+ (JSC::::was):
+ (JSC::weakClear):
+ * jit/JITThunks.h:
+ * runtime/RegExpCache.h:
+ * runtime/Structure.h:
+ * runtime/WeakGCMap.h:
+
+2013-04-05 Roger Fong <roger_fong@apple.com>
+
+ Windows build fix fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+
+2013-04-05 Roger Fong <roger_fong@apple.com>
+
+ Windows build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+
+2013-04-08 Oliver Hunt <oliver@apple.com>
+
+ Make resolve more robust in the face of lookup misses
+ https://bugs.webkit.org/show_bug.cgi?id=114211
+
+ Reviewed by Filip Pizlo.
+
+ This simply short circuits the resolve operations in the
+ event that we don't find a path to a property. There's no
+ repro case for this happening unfortunately.
+
+ * llint/LLIntSlowPaths.cpp:
+ (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+
+2013-04-08 Oliver Hunt <oliver@apple.com>
+
+ Build fix.
+
+ * assembler/ARMv7Assembler.h:
+ (ARMv7Assembler):
+
+2013-04-08 Justin Haygood <jhaygood@reaktix.com>
+
+ Allow KeywordLookupGenerator.py to work on Windows with Windows style line endings
+ https://bugs.webkit.org/show_bug.cgi?id=63234
+
+ Reviewed by Oliver Hunt.
+
+ * KeywordLookupGenerator.py:
+ (parseKeywords):
+
+2013-04-08 Filip Pizlo <fpizlo@apple.com>
+
+ REGRESSION(r146669): Assertion hit in JSC::DFG::SpeculativeJIT::fillSpeculateCell() running webgl tests
+ https://bugs.webkit.org/show_bug.cgi?id=114129
+ <rdar://problem/13594898>
+
+ Reviewed by Darin Adler.
+
+ The check to see if we need a cell check when simplifying a GetById or PutById needs to be hoisted to
+ above where we abstractly execute the instruction, since after we abstracting execute it, it will
+ seem like it no longer needs the cell check.
+
+ * dfg/DFGConstantFoldingPhase.cpp:
+ (JSC::DFG::ConstantFoldingPhase::foldConstants):
+
+2013-04-07 Oliver Hunt <oliver@apple.com>
+
+ Add bounds checking for WTF::Vector::operator[]
+ https://bugs.webkit.org/show_bug.cgi?id=89600
+
+ Reviewed by Filip Pizlo.
+
+ Make a few JSC classes opt-out of release mode bounds checking.
+
+ * assembler/AssemblerBuffer.h:
+ (AssemblerBuffer):
+ * assembler/AssemblerBufferWithConstantPool.h:
+ (AssemblerBufferWithConstantPool):
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::CodeBlock):
+ (JSC::CodeBlock::bytecodeOffset):
+ (JSC):
+ (JSC::replaceExistingEntries):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::bytecodeOffsetForCallAtIndex):
+ (JSC::CodeBlock::callReturnIndexVector):
+ (JSC::CodeBlock::codeOrigins):
+ (RareData):
+ * bytecode/UnlinkedCodeBlock.h:
+ (JSC::UnlinkedEvalCodeBlock::adoptVariables):
+ (UnlinkedEvalCodeBlock):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ (JSC::BytecodeGenerator::emitNewArray):
+ (JSC::BytecodeGenerator::emitCall):
+ (JSC::BytecodeGenerator::emitConstruct):
+ * bytecompiler/BytecodeGenerator.h:
+ (CallArguments):
+ (JSC::BytecodeGenerator::instructions):
+ (BytecodeGenerator):
+ * bytecompiler/StaticPropertyAnalysis.h:
+ (JSC::StaticPropertyAnalysis::create):
+ (JSC::StaticPropertyAnalysis::StaticPropertyAnalysis):
+ (StaticPropertyAnalysis):
+ * bytecompiler/StaticPropertyAnalyzer.h:
+ (StaticPropertyAnalyzer):
+ (JSC::StaticPropertyAnalyzer::StaticPropertyAnalyzer):
+ * dfg/DFGJITCompiler.cpp:
+ (JSC::DFG::JITCompiler::link):
+ * parser/ASTBuilder.h:
+ (ASTBuilder):
+ * runtime/ArgList.h:
+ (MarkedArgumentBuffer):
+ * runtime/ArrayPrototype.cpp:
+ (JSC::arrayProtoFuncSort):
+
+2013-04-07 Benjamin Poulain <benjamin@webkit.org>
+
+ Use Vector::reserveInitialCapacity() when possible in JavaScriptCore runtime
+ https://bugs.webkit.org/show_bug.cgi?id=114111
+
+ Reviewed by Andreas Kling.
+
+ Almost all the code was already using Vector::reserveInitialCapacity()
+ and Vector::uncheckedAppend(). Fix the remaining parts.
+
+ * runtime/ArgList.h:
+ (MarkedArgumentBuffer): The type VectorType is unused.
+
+ * runtime/ArrayPrototype.cpp:
+ (JSC::arrayProtoFuncSort):
+ Move the variable closer to where it is needed.
+
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::setLengthWithArrayStorage):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::getOwnPropertyNames):
+
+2013-04-07 Patrick Gansterer <paroga@webkit.org>
+
+ Remove references to Skia and V8 from CMake files
+ https://bugs.webkit.org/show_bug.cgi?id=114130
+
+ Reviewed by Geoffrey Garen.
+
+ * shell/PlatformBlackBerry.cmake:
+
+2013-04-07 David Kilzer <ddkilzer@apple.com>
+
+ Remove the rest of SVG_DOM_OBJC_BINDINGS
+ <http://webkit.org/b/114112>
+
+ Reviewed by Geoffrey Garen.
+
+ * Configurations/FeatureDefines.xcconfig:
+ - Remove ENABLE_SVG_DOM_OBJC_BINDINGS macro.
+
+2013-04-07 Oliver Hunt <oliver@apple.com>
+
+ Inspector should display information about non-object exceptions
+ https://bugs.webkit.org/show_bug.cgi?id=114123
+
+ Reviewed by Adele Peterson.
+
+ Make sure we store the right stack information, even when throwing
+ a primitive.
+
+ * interpreter/CallFrame.h:
+ (JSC::ExecState::clearSupplementaryExceptionInfo):
+ (ExecState):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::addStackTraceIfNecessary):
+ (JSC::Interpreter::throwException):
+
+2013-04-06 Oliver Hunt <oliver@apple.com>
+
+ Unify the many and varied stack trace mechanisms, and make the result sane.
+ https://bugs.webkit.org/show_bug.cgi?id=114072
+
+ Reviewed by Filip Pizlo.
+
+ Makes JSC::StackFrame record the bytecode offset and other necessary data
+ rather than requiring us to perform eager evaluation of the line number, etc.
+ Then remove most of the users of retrieveLastCaller, as most of them were
+ using it to create a stack trace in a fairly incomplete and inefficient way.
+
+ StackFrame now also has a couple of helpers to get the line and column info.
+
+ * API/JSContextRef.cpp:
+ (JSContextCreateBacktrace):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitDebugHook):
+ * interpreter/Interpreter.cpp:
+ (JSC):
+ (JSC::Interpreter::dumpRegisters):
+ (JSC::Interpreter::unwindCallFrame):
+ (JSC::getBytecodeOffsetForCallFrame):
+ (JSC::getCallerInfo):
+ (JSC::StackFrame::line):
+ (JSC::StackFrame::column):
+ (JSC::StackFrame::expressionInfo):
+ (JSC::StackFrame::toString):
+ (JSC::Interpreter::getStackTrace):
+ (JSC::Interpreter::addStackTraceIfNecessary):
+ (JSC::Interpreter::retrieveCallerFromVMCode):
+ * interpreter/Interpreter.h:
+ (StackFrame):
+ (Interpreter):
+ * runtime/Error.cpp:
+ (JSC::throwError):
+ * runtime/JSGlobalData.h:
+ (JSC):
+ (JSGlobalData):
+ * runtime/JSGlobalObject.cpp:
+ (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):
+
+2013-04-06 Geoffrey Garen <ggaren@apple.com>
+
+ Removed v8 bindings hooks from IDL files
+ https://bugs.webkit.org/show_bug.cgi?id=114091
+
+ Reviewed by Anders Carlsson and Sam Weinig.
+
+ * heap/HeapStatistics.h:
+
+2013-04-03 Roger Fong <roger_fong@apple.com>
+
+ Windows VS2010 build fix.
+
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+
+2013-04-06 Zan Dobersek <zdobersek@igalia.com>
+
+ Remove the remaining PLATFORM(CHROMIUM) guard in JavaScriptCore
+ https://bugs.webkit.org/show_bug.cgi?id=114082
+
+ Reviewed by Ryosuke Niwa.
+
+ * runtime/JSExportMacros.h: Remove the remaining PLATFORM(CHROMIUM) guard.
+
+2013-04-06 Ed Bartosh <bartosh@gmail.com>
+
+ --minimal build fails with error: control reaches end of non-void function
+ https://bugs.webkit.org/show_bug.cgi?id=114085
+
+ Reviewed by Oliver Hunt.
+
+ * interpreter/Interpreter.cpp: return 0 if JIT is not enabled
+ (JSC::getBytecodeOffsetForCallFrame):
+
+2013-04-06 Geoffrey Garen <ggaren@apple.com>
+
+ Try to fix the Windows build.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+ Added back a symbol that is exported.
+
+2013-04-06 Geoffrey Garen <ggaren@apple.com>
+
+ Try to fix the Windows build.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+ Removed symbols that aren't exported.
+
+2013-04-06 Geoffrey Garen <ggaren@apple.com>
+
+ Rolled out 147820 and 147818 because they caused plugins tests to ASSERT
+ https://bugs.webkit.org/show_bug.cgi?id=114094
+
+ Reviewed by Anders Carlsson.
+
+ * API/JSContextRef.cpp:
+ (JSContextCreateBacktrace):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitDebugHook):
+ * interpreter/Interpreter.cpp:
+ (JSC):
+ (JSC::Interpreter::dumpRegisters):
+ (JSC::Interpreter::unwindCallFrame):
+ (JSC::getLineNumberForCallFrame):
+ (JSC::getCallerInfo):
+ (JSC::Interpreter::getStackTrace):
+ (JSC::Interpreter::addStackTraceIfNecessary):
+ (JSC::Interpreter::retrieveCallerFromVMCode):
+ * interpreter/Interpreter.h:
+ (StackFrame):
+ (JSC::StackFrame::toString):
+ (JSC::StackFrame::friendlyLineNumber):
+ (Interpreter):
+ * runtime/Error.cpp:
+ (JSC::throwError):
+ * runtime/JSGlobalData.h:
+ (JSC):
+ (JSGlobalData):
+ * runtime/JSGlobalObject.cpp:
+ (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):
+
+2013-04-06 Patrick Gansterer <paroga@webkit.org>
+
+ Unreviewed build fix after r146932.
+
+ * profiler/ProfilerDatabase.cpp:
+ (Profiler):
+
+2013-04-06 Patrick Gansterer <paroga@webkit.org>
+
+ Do not call getenv() on Windows CE where it does not exist.
+
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+
+2013-04-05 Benjamin Poulain <benjamin@webkit.org>
+
+ Second attempt to fix the Windows bot
+
+ Unreviewed.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+
+2013-04-05 Benjamin Poulain <bpoulain@apple.com>
+
+ Attempt to fix the Windows bot
+
+ Unreviewed.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+ r147825 removed the symbol for nullptr_t. Add it back.
+
+2013-04-02 Roger Fong <roger_fong@apple.com>
+
+ Build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+
+2013-04-05 Oliver Hunt <oliver@apple.com>
+
+ Build fix.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::getBytecodeOffsetForCallFrame):
+
+2013-04-05 Oliver Hunt <oliver@apple.com>
+
+ Unify the many and varied stack trace mechanisms, and make the result sane.
+ https://bugs.webkit.org/show_bug.cgi?id=114072
+
+ Reviewed by Filip Pizlo.
+
+ Makes JSC::StackFrame record the bytecode offset and other necessary data
+ rather than requiring us to perform eager evaluation of the line number, etc.
+ Then remove most of the users of retrieveLastCaller, as most of them were
+ using it to create a stack trace in a fairly incomplete and inefficient way.
+
+ StackFrame now also has a couple of helpers to get the line and column info.
+
+ * API/JSContextRef.cpp:
+ (JSContextCreateBacktrace):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitDebugHook):
+ * interpreter/Interpreter.cpp:
+ (JSC):
+ (JSC::Interpreter::dumpRegisters):
+ (JSC::Interpreter::unwindCallFrame):
+ (JSC::getBytecodeOffsetForCallFrame):
+ (JSC::getCallerInfo):
+ (JSC::StackFrame::line):
+ (JSC::StackFrame::column):
+ (JSC::StackFrame::expressionInfo):
+ (JSC::StackFrame::toString):
+ (JSC::Interpreter::getStackTrace):
+ (JSC::Interpreter::addStackTraceIfNecessary):
+ (JSC::Interpreter::retrieveCallerFromVMCode):
+ * interpreter/Interpreter.h:
+ (StackFrame):
+ (Interpreter):
+ * runtime/Error.cpp:
+ (JSC::throwError):
+ * runtime/JSGlobalData.h:
+ (JSC):
+ (JSGlobalData):
+ * runtime/JSGlobalObject.cpp:
+ (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):
+
+2013-04-05 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ tryCacheGetByID sets StructureStubInfo accessType to an incorrect value
+ https://bugs.webkit.org/show_bug.cgi?id=114068
+
+ Reviewed by Geoffrey Garen.
+
+ In the case where we have a non-Value cacheable property, we set the StructureStubInfo accessType to
+ get_by_id_self, but then we don't patch self and instead patch in a get_by_id_self_fail. This leads to
+ incorrect profiling data so when the DFG compiles the function, it uses a GetByOffset rather than a GetById,
+ which leads to loading a GetterSetter directly out of an object.
+
+ * jit/JITStubs.cpp:
+ (JSC::tryCacheGetByID):
+ (JSC::DEFINE_STUB_FUNCTION):
+
+2013-04-05 Filip Pizlo <fpizlo@apple.com>
+
+ If CallFrame::trueCallFrame() knows that it's about to read garbage instead of a valid CodeOrigin/InlineCallFrame, then it should give up and return 0 and all callers should be robust against this
+ https://bugs.webkit.org/show_bug.cgi?id=114062
+
+ Reviewed by Oliver Hunt.
+
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::canGetCodeOrigin):
+ (CodeBlock):
+ * interpreter/CallFrame.cpp:
+ (JSC::CallFrame::trueCallFrame):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::getStackTrace):
+
+2013-04-05 Geoffrey Garen <ggaren@apple.com>
+
+ Made USE(JSC) unconditional
+ https://bugs.webkit.org/show_bug.cgi?id=114058
+
+ Reviewed by Anders Carlsson.
+
+ * config.h:
+
+2013-04-05 Filip Pizlo <fpizlo@apple.com>
+
+ Unreviewed, rolling out http://trac.webkit.org/changeset/147729
+
+ It's causing a bunch of breakage on some more strict compilers:
+ <inline asm>:1267:2: error: ambiguous instructions require an explicit suffix (could be 'ficomps', or 'ficompl')
+
+ * offlineasm/x86.rb:
+
+2013-04-05 Roger Fong <roger_fong@apple.com>
+
+ More VS2010 solution makefile fixes.
+ <rdar://problem/13588964>
+
+ * JavaScriptCore.vcxproj/JavaScriptCore.make:
+
+2013-04-05 Allan Sandfeld Jensen <allan.jensen@digia.com>
+
+ LLint should be able to use x87 instead of SSE for floating pointer
+
+ https://bugs.webkit.org/show_bug.cgi?id=112239
+
+ Reviewed by Filip Pizlo.
+
+ Implements LLInt floating point operations in x87, to ensure we support
+ x86 without SSE2.
+
+ X86 (except 64bit) now defaults to using x87 instructions in order to
+ support all 32bit x86 back to i686. The implementation uses the fucomi
+ instruction from i686 which sets the new minimum.
+
+ * offlineasm/x86.rb:
+
+2013-04-04 Christophe Dumez <ch.dumez@sisa.samsung.com>
+
+ Unreviewed EFL build fix.
+
+ We had undefined reference to `JSC::CodeOrigin::maximumBytecodeIndex'.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::findClosureCallForReturnPC):
+ (JSC::CodeBlock::bytecodeOffset):
+
+2013-04-04 Geoffrey Garen <ggaren@apple.com>
+
+ Stop pretending that statements return a value
+ https://bugs.webkit.org/show_bug.cgi?id=113969
+
+ Reviewed by Oliver Hunt.
+
+ Expressions have an intrinsic value, which they return to their parent
+ in the AST.
+
+ Statements just execute for effect in sequence.
+
+ This patch moves emitBytecode into the ExpressionNode and StatementNode
+ subclasses, and changes the SatementNode subclass to return void. This
+ eliminates some cruft where we used to return 0, or try to save a bogus
+ register and return it, as if a statement had a consuming parent in the
+ AST.
+
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::BytecodeGenerator::emitNode):
+ (BytecodeGenerator):
+ (JSC::BytecodeGenerator::emitNodeInConditionContext):
+ * bytecompiler/NodesCodegen.cpp:
+ (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::CaseClauseNode::emitBytecode):
+ (JSC::CaseBlockNode::emitBytecodeForBlock):
+ (JSC::SwitchNode::emitBytecode):
+ (JSC::LabelNode::emitBytecode):
+ (JSC::ThrowNode::emitBytecode):
+ (JSC::TryNode::emitBytecode):
+ (JSC::ScopeNode::emitStatementsBytecode):
+ (JSC::ProgramNode::emitBytecode):
+ (JSC::EvalNode::emitBytecode):
+ (JSC::FunctionBodyNode::emitBytecode):
+ (JSC::FuncDeclNode::emitBytecode):
+ * parser/NodeConstructors.h:
+ (JSC::PropertyListNode::PropertyListNode):
+ (JSC::ArgumentListNode::ArgumentListNode):
+ * parser/Nodes.h:
+ (Node):
+ (ExpressionNode):
+ (StatementNode):
+ (ConstStatementNode):
+ (BlockNode):
+ (EmptyStatementNode):
+ (DebuggerStatementNode):
+ (ExprStatementNode):
+ (VarStatementNode):
+ (IfNode):
+ (IfElseNode):
+ (DoWhileNode):
+ (WhileNode):
+ (ForNode):
+ (ForInNode):
+ (ContinueNode):
+ (BreakNode):
+ (ReturnNode):
+ (WithNode):
+ (LabelNode):
+ (ThrowNode):
+ (TryNode):
+ (ProgramNode):
+ (EvalNode):
+ (FunctionBodyNode):
+ (FuncDeclNode):
+ (CaseBlockNode):
+ (SwitchNode):
+
+2013-04-04 Oliver Hunt <oliver@apple.com>
+
+ Exception stack unwinding doesn't handle inline callframes correctly
+ https://bugs.webkit.org/show_bug.cgi?id=113952
+
+ Reviewed by Geoffrey Garen.
+
+ The basic problem here is that the exception stack unwinding was
+ attempting to be "clever" and avoid doing a correct stack walk
+ as it "knew" inline callframes couldn't have exception handlers.
+
+ This used to be safe as the exception handling machinery was
+ designed to fail gently and just claim that no handler existed.
+ This was "safe" and even "correct" inasmuch as we currently
+ don't run any code with exception handlers through the dfg.
+
+ This patch fixes the logic by simply making everything uniformly
+ use the safe stack walking machinery, and making the correct
+ boundary checks occur everywhere that they should.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::findClosureCallForReturnPC):
+ (JSC::CodeBlock::bytecodeOffset):
+ * interpreter/Interpreter.cpp:
+ (JSC):
+ (JSC::Interpreter::dumpRegisters):
+ (JSC::Interpreter::unwindCallFrame):
+ (JSC::getCallerInfo):
+ (JSC::Interpreter::getStackTrace):
+ (JSC::Interpreter::retrieveCallerFromVMCode):
+
+2013-04-04 Geoffrey Garen <ggaren@apple.com>
+
+ Removed a defunct comment
+ https://bugs.webkit.org/show_bug.cgi?id=113948
+
+ Reviewed by Oliver Hunt.
+
+ This is also a convenient way to test the EWS.
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC):
+
+2013-04-04 Martin Robinson <mrobinson@igalia.com>
+
+ [GTK] Remove the gyp build
+ https://bugs.webkit.org/show_bug.cgi?id=113942
+
+ Reviewed by Gustavo Noronha Silva.
+
+ * JavaScriptCore.gyp/JavaScriptCoreGTK.gyp: Removed.
+ * JavaScriptCore.gyp/redirect-stdout.sh: Removed.
+
+2013-04-04 Geoffrey Garen <ggaren@apple.com>
+
+ Simplified bytecode generation by merging prefix and postfix nodes
+ https://bugs.webkit.org/show_bug.cgi?id=113925
+
+ Reviewed by Filip Pizlo.
+
+ PostfixNode now inherits from PrefixNode, so when we detect that we're
+ in a context where postifx and prefix are equivalent, PostFixNode can
+ just call through to PrefixNode codegen, instead of duplicating the
+ logic.
+
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::PostfixNode::emitResolve):
+ (JSC::PostfixNode::emitBracket):
+ (JSC::PostfixNode::emitDot):
+ * parser/NodeConstructors.h:
+ (JSC::PostfixNode::PostfixNode):
+ * parser/Nodes.h:
+ (JSC):
+ (PrefixNode):
+ (PostfixNode):
+
+2013-04-04 Andras Becsi <andras.becsi@digia.com>
+
+ Fix the build with GCC 4.8
+ https://bugs.webkit.org/show_bug.cgi?id=113147
+
+ Reviewed by Allan Sandfeld Jensen.
+
+ Initialize JSObject* exception to suppress warnings that make
+ the build fail because of -Werror=maybe-uninitialized.
+
+ * runtime/Executable.cpp:
+ (JSC::FunctionExecutable::compileForCallInternal):
+ (JSC::FunctionExecutable::compileForConstructInternal):
+
+2013-04-02 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ get_by_pname can become confused when iterating over objects with static properties
+ https://bugs.webkit.org/show_bug.cgi?id=113831
+
+ Reviewed by Geoffrey Garen.
+
+ get_by_pname doesn't take static properties into account when using a JSPropertyNameIterator to directly
+ access an object's backing store. One way to fix this is to not cache any properties when iterating over
+ objects with static properties. This patch fixes the bug that was originally reported on swisscom.ch.
+
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::getOwnNonIndexPropertyNames):
+ * runtime/JSPropertyNameIterator.cpp:
+ (JSC::JSPropertyNameIterator::create):
+ * runtime/PropertyNameArray.h:
+ (JSC::PropertyNameArray::PropertyNameArray):
+ (JSC::PropertyNameArray::numCacheableSlots):
+ (JSC::PropertyNameArray::setNumCacheableSlots):
+ (PropertyNameArray):
+
+2013-04-02 Geoffrey Garen <ggaren@apple.com>
+
+ DFG should compile a little sooner
+ https://bugs.webkit.org/show_bug.cgi?id=113835
+
+ Unreviewed.
+
+ Rolled out r147511 because it was based on incorrect performance
+ measurement.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::optimizationThresholdScalingFactor):
+
+2013-04-02 Geoffrey Garen <ggaren@apple.com>
+
+ DFG should compile a little sooner
+ https://bugs.webkit.org/show_bug.cgi?id=113835
+
+ Reviewed by Michael Saboff.
+
+ 2% speedup on SunSpider.
+
+ 2% speedup on JSRegress.
+
+ Neutral on Octane, v8, and Kraken.
+
+ The worst-hit single sub-test is kraken-stanford-crypto-ccm.js, which gets
+ 18% slower. Since Kraken is neutral overall in its preferred mean, I
+ think that's OK for now.
+
+ (Our array indexing speculation fails pathologically on
+ kraken-stanford-crypto-ccm.js. Compiling sooner is a regression because
+ it triggers those failures sooner. I'm going to file some follow-up bugs
+ explaining how to fix our speculations on this sub-test, at which point
+ compiling earlier should become a slight speedup on Kraken overall.)
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::optimizationThresholdScalingFactor): I experimented
+ with a few different options, including reducing the coefficient 'a'.
+ A simple linear reduction on instruction count worked best.
+
+2013-04-01 Benjamin Poulain <benjamin@webkit.org>
+
+ Use Vector::reserveInitialCapacity and Vector::uncheckedAppend for JSC's APIs
+ https://bugs.webkit.org/show_bug.cgi?id=113651
+
+ Reviewed by Andreas Kling.
+
+ This removes a bunch of branches on initialization and when
+ filling the vector.
+
+ * API/JSCallbackConstructor.cpp:
+ (JSC::constructJSCallback):
+ * API/JSCallbackFunction.cpp:
+ (JSC::JSCallbackFunction::call):
+ * API/JSCallbackObjectFunctions.h:
+ (JSC::::construct):
+ (JSC::::call):
+ * API/JSObjectRef.cpp:
+ (JSObjectCopyPropertyNames):
+
+2013-04-01 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Fixing borked VS 2010 project file
+
+ Unreviewed bot greening.
+
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
+
+2013-04-01 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ One more Windows build fix
+
+ Unreviewed.
+
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+
+2013-04-01 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ More build fallout fixes.
+
+ Unreviewed build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def: Add new export symbols.
+ * heap/SuperRegion.cpp: Windows didn't like "LLU".
+
+2013-04-01 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ r147324 broke the world
+ https://bugs.webkit.org/show_bug.cgi?id=113704
+
+ Unreviewed build fix.
+
+ Remove a bunch of unused variables and use the correctly sized types for 32-bit platforms.
+
+ * heap/BlockAllocator.cpp:
+ (JSC::BlockAllocator::BlockAllocator):
+ * heap/BlockAllocator.h:
+ (BlockAllocator):
+ * heap/Heap.cpp:
+ (JSC::Heap::Heap):
+ * heap/SuperRegion.cpp:
+ (JSC::SuperRegion::SuperRegion):
+ * heap/SuperRegion.h:
+ (SuperRegion):
+
+2013-04-01 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ 32-bit Windows build fix
+
+ Unreviewed build fix.
+
+ * heap/SuperRegion.cpp:
+ * heap/SuperRegion.h: Use uint64_t instead of size_t.
+ (SuperRegion):
+
+2013-04-01 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ EFL build fix
+
+ Unreviewed build fix.
+
+ * CMakeLists.txt:
+
+2013-03-31 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Regions should be allocated from the same contiguous segment of virtual memory
+ https://bugs.webkit.org/show_bug.cgi?id=113662
+
+ Reviewed by Filip Pizlo.
+
+ Instead of letting the OS spread our Regions all over the place, we should allocate them all within
+ some range of each other. This change will open the door to some other optimizations, e.g. doing simple
+ range checks for our write barriers and compressing JSCell pointers to 32-bits.
+
+ Added new SuperRegion class that encapsulates allocating Regions from a contiguous reserved chunk of
+ virtual address space. It functions very similarly to the FixedVMPoolExecutableAllocator class used by the JIT.
+
+ Also added two new subclasses of Region, NormalRegion and ExcessRegion.
+
+ NormalRegion is the type of Region that is normally allocated when there is available space remaining
+ in the SuperRegion. If we ever run out of space in the SuperRegion, we fall back to allocating
+ ExcessRegions, which are identical to how Regions have behaved up until now, i.e. they contain a
+ PageAllocationAligned.
+
+ We only use the SuperRegion (and NormalRegions) on 64-bit systems, since it doesn't make sense to reserve the
+ entire 4 GB address space on 32-bit systems just for the JS heap.
+
+ * GNUmakefile.list.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * heap/BlockAllocator.cpp:
+ (JSC::BlockAllocator::BlockAllocator):
+ * heap/BlockAllocator.h:
+ (JSC):
+ (BlockAllocator):
+ (JSC::BlockAllocator::allocate):
+ (JSC::BlockAllocator::allocateCustomSize):
+ (JSC::BlockAllocator::deallocateCustomSize):
+ * heap/Heap.cpp:
+ (JSC::Heap::Heap):
+ (JSC):
+ (JSC::Heap::didExceedFixedHeapSizeLimit):
+ * heap/Heap.h:
+ (Heap):
+ * heap/MarkedBlock.cpp:
+ (JSC::MarkedBlock::create):
+ * heap/Region.h:
+ (Region):
+ (JSC):
+ (NormalRegion):
+ (JSC::NormalRegion::base):
+ (JSC::NormalRegion::size):
+ (ExcessRegion):
+ (JSC::ExcessRegion::base):
+ (JSC::ExcessRegion::size):
+ (JSC::NormalRegion::NormalRegion):
+ (JSC::NormalRegion::tryCreate):
+ (JSC::NormalRegion::tryCreateCustomSize):
+ (JSC::NormalRegion::reset):
+ (JSC::ExcessRegion::ExcessRegion):
+ (JSC::ExcessRegion::~ExcessRegion):
+ (JSC::ExcessRegion::create):
+ (JSC::ExcessRegion::createCustomSize):
+ (JSC::ExcessRegion::reset):
+ (JSC::Region::Region):
+ (JSC::Region::initializeBlockList):
+ (JSC::Region::create):
+ (JSC::Region::createCustomSize):
+ (JSC::Region::~Region):
+ (JSC::Region::destroy):
+ (JSC::Region::reset):
+ (JSC::Region::deallocate):
+ (JSC::Region::base):
+ (JSC::Region::size):
+ * heap/SuperRegion.cpp: Added.
+ (JSC):
+ (JSC::SuperRegion::SuperRegion):
+ (JSC::SuperRegion::getAlignedBase):
+ (JSC::SuperRegion::allocateNewSpace):
+ (JSC::SuperRegion::notifyNeedPage):
+ (JSC::SuperRegion::notifyPageIsFree):
+ * heap/SuperRegion.h: Added.
+ (JSC):
+ (SuperRegion):
+
+2013-04-01 Benjamin Poulain <benjamin@webkit.org>
+
+ Remove an unused variable from the ARMv7 Assembler
+ https://bugs.webkit.org/show_bug.cgi?id=113653
+
+ Reviewed by Andreas Kling.
+
+ * assembler/ARMv7Assembler.h:
+ (ARMv7Assembler):
+
+2013-03-31 Adam Barth <abarth@webkit.org>
+
+ [Chromium] Yarr should build using a separate GYP file from JavaScriptCore
+ https://bugs.webkit.org/show_bug.cgi?id=113652
+
+ Reviewed by Nico Weber.
+
+ This patch moves JavaScriptCore.gyp to yarr.gyp because Chromium only
+ uses this GYP file to build yarr.
+
+ * JavaScriptCore.gyp/JavaScriptCoreGTK.gyp:
+ * JavaScriptCore.gypi:
+ * yarr/yarr.gyp: Renamed from Source/JavaScriptCore/JavaScriptCore.gyp/JavaScriptCore.gyp.
+
+2013-03-31 Filip Pizlo <fpizlo@apple.com>
+
+ Unreviewed, fix a comment. While thinking about TBAA for array accesses,
+ I realized that we have to be super careful about aliasing of typed arrays.
+
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::getByValLoadElimination):
+
+2013-03-30 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Move Region into its own header
+ https://bugs.webkit.org/show_bug.cgi?id=113617
+
+ Reviewed by Geoffrey Garen.
+
+ BlockAllocator.h is getting a little crowded. We should move the Region class into its own
+ header, since it's pretty independent from the BlockAllocator.
+
+ * GNUmakefile.list.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * heap/BlockAllocator.h:
+ (JSC):
+ * heap/Region.h: Added.
+ (JSC):
+ (DeadBlock):
+ (JSC::DeadBlock::DeadBlock):
+ (Region):
+ (JSC::Region::blockSize):
+ (JSC::Region::isFull):
+ (JSC::Region::isEmpty):
+ (JSC::Region::isCustomSize):
+ (JSC::Region::create):
+ (JSC::Region::createCustomSize):
+ (JSC::Region::Region):
+ (JSC::Region::~Region):
+ (JSC::Region::reset):
+ (JSC::Region::allocate):
+ (JSC::Region::deallocate):
+
+2013-03-29 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: Remove -[JSManagedValue managedValueWithValue:owner:]
+ https://bugs.webkit.org/show_bug.cgi?id=113602
+
+ Reviewed by Geoffrey Garen.
+
+ Since we put the primary way of keeping track of external object graphs (i.e. "managed" references)
+ in JSVirtualMachine, there is some overlap in the functionality of that interface and JSManagedValue.
+ Specifically, we no longer need the methods that include an owner, since ownership is now tracked
+ by JSVirtualMachine. These JSManagedValues will become weak pointers unless they are used
+ with [JSVirtualMachine addManagedReference:withOwner:], in which case their lifetime is tied to that
+ of their owner.
+
+ * API/JSManagedValue.h:
+ * API/JSManagedValue.mm:
+ (-[JSManagedValue init]):
+ (-[JSManagedValue initWithValue:]):
+ (JSManagedValueHandleOwner::isReachableFromOpaqueRoots):
+ * API/JSVirtualMachine.mm:
+ (getInternalObjcObject):
+ * API/tests/testapi.mm:
+ (-[TextXYZ setOnclick:]):
+ (-[TextXYZ dealloc]):
+
+2013-03-29 Geoffrey Garen <ggaren@apple.com>
+
+ Simplified bytecode generation by unforking "condition context" codegen
+ https://bugs.webkit.org/show_bug.cgi?id=113554
+
+ Reviewed by Mark Hahnenberg.
+
+ Now, a node that establishes a condition context can always ask its child
+ nodes to generate into that context.
+
+ This has a few advantages:
+
+ (*) Removes a bunch of code;
+
+ (*) Optimizes a few missed cases like "if (!(x < 2))", "if (!!x)", and
+ "if (!x || !y)";
+
+ (*) Paves the way to removing more opcodes.
+
+ * bytecode/Opcode.h:
+ (JSC): Separated out the branching opcodes for clarity.
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::ExpressionNode::emitBytecodeInConditionContext): All expressions
+ can be emitted in a condition context now -- the default behavior is
+ to branch based on the expression's value.
+
+ (JSC::LogicalNotNode::emitBytecodeInConditionContext):
+ (JSC::LogicalOpNode::emitBytecodeInConditionContext):
+ (JSC::ConditionalNode::emitBytecode):
+ (JSC::IfNode::emitBytecode):
+ (JSC::IfElseNode::emitBytecode):
+ (JSC::DoWhileNode::emitBytecode):
+ (JSC::WhileNode::emitBytecode):
+ (JSC::ForNode::emitBytecode):
+ * parser/Nodes.h:
+ (JSC::ExpressionNode::isSubtract):
+ (ExpressionNode):
+ (LogicalNotNode):
+ (LogicalOpNode): Removed lots of code for handling expressions
+ that couldn't generate into a condition context because all expressions
+ can now.
+
+2013-03-28 Geoffrey Garen <ggaren@apple.com>
+
+ Simplified the bytecode by removing op_loop and op_loop_if_*
+ https://bugs.webkit.org/show_bug.cgi?id=113548
+
+ Reviewed by Filip Pizlo.
+
+ Regular jumps will suffice.
+
+ These opcodes are identical to branches, except they also do timeout
+ checking. That style of timeout checking has been broken for a long
+ time, and when we add back timeout checking, it won't use these opcodes.
+
+ * JavaScriptCore.order:
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dumpBytecode):
+ * bytecode/Opcode.h:
+ (JSC):
+ (JSC::padOpcodeName):
+ * bytecode/PreciseJumpTargets.cpp:
+ (JSC::computePreciseJumpTargets):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitJump):
+ (JSC::BytecodeGenerator::emitJumpIfTrue):
+ (JSC::BytecodeGenerator::emitJumpIfFalse):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ * dfg/DFGCapabilities.h:
+ (JSC::DFG::canCompileOpcode):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ (JSC::JIT::privateCompileSlowCases):
+ * jit/JIT.h:
+ (JIT):
+ (JSC):
+ * llint/LowLevelInterpreter.asm:
+ * llint/LowLevelInterpreter32_64.asm:
+ * llint/LowLevelInterpreter64.asm:
+
+2013-03-28 Geoffrey Garen <ggaren@apple.com>
+
+ Simplified the bytecode by removing op_jmp_scopes
+ https://bugs.webkit.org/show_bug.cgi?id=113545
+
+ Reviewed by Filip Pizlo.
+
+ We already have op_pop_scope and op_jmp, so we don't need op_jmp_scopes.
+ Using op_jmp_scopes was also adding a "jump to self" to codegen for
+ return statements, which was pretty silly.
+
+ * JavaScriptCore.order:
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dumpBytecode):
+ * bytecode/Opcode.h:
+ (JSC::padOpcodeName):
+ * bytecode/PreciseJumpTargets.cpp:
+ (JSC::computePreciseJumpTargets):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitComplexPopScopes):
+ (JSC::BytecodeGenerator::emitPopScopes):
+ * bytecompiler/BytecodeGenerator.h:
+ (BytecodeGenerator):
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::ContinueNode::emitBytecode):
+ (JSC::BreakNode::emitBytecode):
+ (JSC::ReturnNode::emitBytecode):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ * jit/JIT.h:
+ * jit/JITOpcodes.cpp:
+ * jit/JITOpcodes32_64.cpp:
+ * jit/JITStubs.cpp:
+ * jit/JITStubs.h:
+ * llint/LLIntSlowPaths.cpp:
+ * llint/LLIntSlowPaths.h:
+ * llint/LowLevelInterpreter.asm:
+
+2013-03-28 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Safari hangs during test262 run in CodeCache::pruneSlowCase
+ https://bugs.webkit.org/show_bug.cgi?id=113469
+
+ Reviewed by Geoffrey Garen.
+
+ We can end up hanging for quite some time if we add a lot of small keys to the CodeCache.
+ By the time we get around to pruning the cache, we have a potentially tens or hundreds of
+ thousands of small entries, which can cause a noticeable hang when pruning them.
+
+ To fix this issue we added a hard cap to the number of entries in the cache because we
+ could potentially have to remove every element in the map.
+
+ * runtime/CodeCache.cpp:
+ (JSC::CodeCacheMap::pruneSlowCase): We need to prune until we're both under the hard cap and the
+ capacity in bytes.
+ * runtime/CodeCache.h:
+ (CodeCacheMap):
+ (JSC::CodeCacheMap::numberOfEntries): Convenience accessor function to the number of entries in
+ the map that does the cast to size_t of m_map.size() for us.
+ (JSC::CodeCacheMap::canPruneQuickly): Checks that the total number is under the hard cap. We put this
+ check inside a function to more accurately describe why we're doing the check and to abstract out
+ the actual calculation in case we want to coalesce calls to pruneSlowCase in the future.
+ (JSC::CodeCacheMap::prune): Check the number of entries against our hard cap. If it's greater than
+ the cap then we need to drop down to pruneSlowCase.
+
+2013-03-28 Zan Dobersek <zdobersek@igalia.com>
+
+ Unreviewed build fix for the EFL and GTK ports.
+
+ * runtime/CodeCache.cpp:
+ (JSC::CodeCacheMap::pruneSlowCase): Pass a 0 casted to the int64_t type instead of 0LL
+ to the std::max call so the arguments' types match.
+
+2013-03-27 Geoffrey Garen <ggaren@apple.com>
+
+ Unreviewed build fix: Removed a dead field.
+
+ Pointed out by Mark Lam.
+
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::ByteCodeParser):
+ (ByteCodeParser):
+
+2013-03-27 Geoffrey Garen <ggaren@apple.com>
+
+ Unreviewed build fix: Removed a dead field.
+
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::ByteCodeParser):
+ (ByteCodeParser):
+
+2013-03-27 Geoffrey Garen <ggaren@apple.com>
+
+ Removed some dead code in the DFG bytecode parser
+ https://bugs.webkit.org/show_bug.cgi?id=113472
+
+ Reviewed by Sam Weinig.
+
+ Now that Phi creation and liveness analysis are separate passes, we can
+ remove the vestiges of code that used to do that in the bytecode
+ parser.
+
+ * dfg/DFGByteCodeParser.cpp:
+ (ByteCodeParser):
+ (JSC::DFG::ByteCodeParser::addToGraph):
+ (JSC::DFG::ByteCodeParser::parse):
+
+2013-03-27 Filip Pizlo <fpizlo@apple.com>
+
+ JIT and DFG should NaN-check loads from Float32 arrays
+ https://bugs.webkit.org/show_bug.cgi?id=113462
+ <rdar://problem/13490804>
+
+ Reviewed by Mark Hahnenberg.
+
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emitFloatTypedArrayGetByVal):
+
+2013-03-27 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ CodeCache::m_capacity can becoming negative, producing undefined results in pruneSlowCase
+ https://bugs.webkit.org/show_bug.cgi?id=113453
+
+ Reviewed by Geoffrey Garen.
+
+ * runtime/CodeCache.cpp:
+ (JSC::CodeCacheMap::pruneSlowCase): We make sure that m_minCapacity doesn't drop below zero now.
+ This prevents m_capacity from doing the same.
+
+2013-03-27 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should use CheckStructure for typed array checks whenever possible
+ https://bugs.webkit.org/show_bug.cgi?id=113374
+
+ Reviewed by Geoffrey Garen.
+
+ We used to do the right thing, but it appears that this regressed at some point. Since the
+ FixupPhase now has the ability to outright remove spurious CheckStructures on array
+ operations, it is profitable for the ByteCodeParser to insert CheckStructures whenver there
+ is a chance that it might be profitable, and when the profiling tells us what structure to
+ check.
+
+ Also added some code for doing ArrayProfile debugging.
+
+ This is a slightly speed-up. Maybe 3% on Mandreel.
+
+ * bytecode/ArrayProfile.cpp:
+ (JSC::ArrayProfile::computeUpdatedPrediction):
+ * dfg/DFGArrayMode.h:
+ (JSC::DFG::ArrayMode::benefitsFromStructureCheck):
+
+2013-03-27 Zeno Albisser <zeno@webkit.org>
+
+ [Qt] Remove Qt specific WorkQueueItem definitions.
+ https://bugs.webkit.org/show_bug.cgi?id=112891
+
+ This patch is preparation work for removing
+ WorkQueue related code from TestRunnerQt and
+ replacing it with generic TestRunner code.
+
+ Reviewed by Benjamin Poulain.
+
+ * API/JSStringRefQt.cpp:
+ (JSStringCreateWithQString):
+ Adding a convenience function to create a
+ JSStringRef from a QString.
+ * API/JSStringRefQt.h:
+
+2013-03-26 Filip Pizlo <fpizlo@apple.com>
+
+ REGRESSION: Sometimes, operations on proven strings ignore changes to the string prototype
+ https://bugs.webkit.org/show_bug.cgi?id=113353
+ <rdar://problem/13510778>
+
+ Reviewed by Mark Hahnenberg and Geoffrey Garen.
+
+ ToString should call speculateStringObject() even if you know that it's a string object, since
+ it calls it to also get the watchpoint. Note that even with this change, if you do
+ Phantom(Check:StringObject:@a), it might get eliminated just because we proved that @a is a
+ string object (thereby eliminating the prototype watchpoint); that's fine since ToString is
+ MustGenerate and never decays to Phantom.
+
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileToStringOnCell):
+ (JSC::DFG::SpeculativeJIT::speculateStringObject):
+ (JSC::DFG::SpeculativeJIT::speculateStringOrStringObject):
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+ (JSC::DFG::SpeculativeJIT::speculateStringObjectForStructure):
+
+2013-03-26 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ REGRESSION(r144131): It made fast/js/regress/string-repeat-arith.html assert on 32 bit
+ https://bugs.webkit.org/show_bug.cgi?id=112106
+
+ Rubber stamped by Filip Pizlo.
+
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::checkGeneratedTypeForToInt32): Get rid of the case for constants because
+ we would have done constant folding anyways on a ValueToInt32.
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean): Fixed a random compile error with this flag enabled.
+
+2013-03-26 Filip Pizlo <fpizlo@apple.com>
+
+ JSC_enableProfiler=true should also cause JSGlobalData to save the profiler output somewhere
+ https://bugs.webkit.org/show_bug.cgi?id=113144
+
+ Reviewed by Geoffrey Garen.
+
+ Forgot to include Geoff's requested change in the original commit.
+
+ * profiler/ProfilerDatabase.cpp:
+ (Profiler):
+
+2013-03-25 Filip Pizlo <fpizlo@apple.com>
+
+ JSC_enableProfiler=true should also cause JSGlobalData to save the profiler output somewhere
+ https://bugs.webkit.org/show_bug.cgi?id=113144
+
+ Reviewed by Geoffrey Garen.
+
+ Added the ability to save profiler output with JSC_enableProfiler=true. It will save it
+ to the current directory, or JSC_PROFILER_PATH if the latter was specified.
+
+ This works by saving the Profiler::Database either when it is destroyed or atexit(),
+ whichever happens first.
+
+ This allows use of the profiler from any WebKit client.
+
+ * jsc.cpp:
+ (jscmain):
+ * profiler/ProfilerDatabase.cpp:
+ (Profiler):
+ (JSC::Profiler::Database::Database):
+ (JSC::Profiler::Database::~Database):
+ (JSC::Profiler::Database::registerToSaveAtExit):
+ (JSC::Profiler::Database::addDatabaseToAtExit):
+ (JSC::Profiler::Database::removeDatabaseFromAtExit):
+ (JSC::Profiler::Database::performAtExitSave):
+ (JSC::Profiler::Database::removeFirstAtExitDatabase):
+ (JSC::Profiler::Database::atExitCallback):
+ * profiler/ProfilerDatabase.h:
+ (JSC::Profiler::Database::databaseID):
+ (Database):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+
+2013-03-25 Filip Pizlo <fpizlo@apple.com>
+
+ ArrayMode should not consider SpecOther when refining the base
+ https://bugs.webkit.org/show_bug.cgi?id=113271
+
+ Reviewed by Geoffrey Garen.
+
+ 9% speed-up on Octane/pdfjs.
+
+ * dfg/DFGArrayMode.cpp:
+ (JSC::DFG::ArrayMode::refine):
+
+2013-03-26 Csaba Osztrogonác <ossy@webkit.org>
+
+ Fix unused parameter warnings in JITInlines.h
+ https://bugs.webkit.org/show_bug.cgi?id=112560
+
+ Reviewed by Zoltan Herczeg.
+
+ * jit/JITInlines.h:
+ (JSC::JIT::beginUninterruptedSequence):
+ (JSC::JIT::endUninterruptedSequence):
+ (JSC):
+
+2013-03-25 Kent Tamura <tkent@chromium.org>
+
+ Rename ENABLE_INPUT_TYPE_DATETIME
+ https://bugs.webkit.org/show_bug.cgi?id=113254
+
+ Reviewed by Kentaro Hara.
+
+ Rename ENABLE_INPUT_TYPE_DATETIME to ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE.
+ Actually I'd like to remove the code, but we shouldn't remove it yet
+ because we shipped products with it on some platforms.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2013-03-25 Mark Lam <mark.lam@apple.com>
+
+ Offlineasm cloop backend compiles op+branch incorrectly.
+ https://bugs.webkit.org/show_bug.cgi?id=113146.
+
+ Reviewed by Geoffrey Garen.
+
+ * dfg/DFGRepatch.h:
+ (JSC::DFG::dfgResetGetByID):
+ (JSC::DFG::dfgResetPutByID):
+ - These functions never return when the DFG is dsiabled, not just when
+ asserts are enabled. Changing the attribute from NO_RETURN_DUE_TO_ASSERT
+ to NO_RETURN.
+ * llint/LLIntOfflineAsmConfig.h:
+ - Added some #defines needed to get the cloop building again.
+ * offlineasm/cloop.rb:
+ - Fix cloopEmitOpAndBranchIfOverflow() and cloopEmitOpAndBranch() to
+ emit code that unconditionally executes the specified operation before
+ doing the conditional branch.
+
+2013-03-25 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ JSObject::enterDictionaryIndexingMode doesn't have a case for ALL_BLANK_INDEXING_TYPES
+ https://bugs.webkit.org/show_bug.cgi?id=113236
+
+ Reviewed by Geoffrey Garen.
+
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::enterDictionaryIndexingMode): We forgot blank indexing types.
+
+2013-03-23 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ HandleSet should use HeapBlocks for storing handles
+ https://bugs.webkit.org/show_bug.cgi?id=113145
+
+ Reviewed by Geoffrey Garen.
+
+ * GNUmakefile.list.am: Build project changes.
+ * JavaScriptCore.gypi: Ditto.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: Ditto.
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters: Ditto.
+ * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
+ * heap/BlockAllocator.cpp: Rename the RegionSet to m_fourKBBlockRegionSet because there are
+ too many block types to include them all in the name now.
+ (JSC::BlockAllocator::BlockAllocator):
+ * heap/BlockAllocator.h:
+ (BlockAllocator): Add the appropriate override for regionSetFor.
+ (JSC::WeakBlock):
+ (JSC::MarkStackSegment):
+ (JSC::HandleBlock):
+ * heap/HandleBlock.h: Added.
+ (HandleBlock): New class for HandleBlocks.
+ (JSC::HandleBlock::blockFor): Static method to get the block of the given HandleNode pointer. Allows
+ us to quickly figure out which HandleSet the HandleNode belongs to without storing the pointer to it
+ in the HandleNode.
+ (JSC::HandleBlock::handleSet): Getter.
+ * heap/HandleBlockInlines.h: Added.
+ (JSC::HandleBlock::create):
+ (JSC::HandleBlock::HandleBlock):
+ (JSC::HandleBlock::payloadEnd):
+ (JSC::HandleBlock::payload):
+ (JSC::HandleBlock::nodes):
+ (JSC::HandleBlock::nodeAtIndex):
+ (JSC::HandleBlock::nodeCapacity):
+ * heap/HandleSet.cpp:
+ (JSC::HandleSet::~HandleSet):
+ (JSC::HandleSet::grow):
+ * heap/HandleSet.h:
+ (HandleNode): Move the internal Node class from HandleSet to be its own public class so it can be
+ used by HandleBlock.
+ (HandleSet): Add a typedef so that Node refers to the new HandleNode class.
+ (JSC::HandleSet::toHandle):
+ (JSC::HandleSet::toNode):
+ (JSC::HandleSet::allocate):
+ (JSC::HandleSet::deallocate):
+ (JSC::HandleNode::HandleNode):
+ (JSC::HandleNode::slot):
+ (JSC::HandleNode::handleSet): Use the new blockFor static function to get the right HandleBlock and lookup
+ the HandleSet.
+ (JSC::HandleNode::setPrev):
+ (JSC::HandleNode::prev):
+ (JSC::HandleNode::setNext):
+ (JSC::HandleNode::next):
+ (JSC::HandleSet::forEachStrongHandle):
+ * heap/Heap.h: Friend HandleSet so that it can access the BlockAllocator when allocating HandleBlocks.
+
+2013-03-22 David Kilzer <ddkilzer@apple.com>
+
+ BUILD FIX (r145119): Make JSValue* properties default to (assign)
+ <rdar://problem/13380794>
+
+ Reviewed by Mark Hahnenberg.
+
+ Fixes the following build failures:
+
+ Source/JavaScriptCore/API/tests/testapi.mm:106:1: error: no 'assign', 'retain', or 'copy' attribute is specified - 'assign' is assumed [-Werror,-Wobjc-property-no-attribute]
+ @property JSValue *onclick;
+ ^
+ Source/JavaScriptCore/API/tests/testapi.mm:106:1: error: default property attrib ute 'assign' not appropriate for non-GC object [-Werror,-Wobjc-property-no-attribute]
+ Source/JavaScriptCore/API/tests/testapi.mm:107:1: error: no 'assign', 'retain', or 'copy' attribute is specified - 'assign' is assumed [-Werror,-Wobjc-property-no-attribute]
+ @property JSValue *weakOnclick;
+ ^
+ Source/JavaScriptCore/API/tests/testapi.mm:107:1: error: default property attribute 'assign' not appropriate for non-GC object [-Werror,-Wobjc-property-no-attribute]
+ 4 errors generated.
+
+ * API/tests/testapi.mm: Default to (assign) for JSValue*
+ properties.
+
+2013-03-22 Ryosuke Niwa <rniwa@webkit.org>
+
+ testLeakingPrototypesAcrossContexts added in r146682 doesn't compile on Win and fails on Mac
+ https://bugs.webkit.org/show_bug.cgi?id=113125
+
+ Reviewed by Mark Hahnenberg
+
+ Remove the test added in r146682 as it's now failing on Mac.
+ This is the test that was causing a compilation failure on Windows.
+
+ * API/tests/testapi.c:
+ (main):
+
+2013-03-22 Ryosuke Niwa <rniwa@webkit.org>
+
+ Fix the typo: WIN -> WINDOWS.
+
+ * API/tests/testapi.c:
+ (main):
+
+2013-03-22 Ryosuke Niwa <rniwa@webkit.org>
+
+ I really can't figure out what's wrong with this one.
+ Temporarily disable the test added by r146682 on Windows since it doesn't compile.
+
+ * API/tests/testapi.c:
+ (main):
+
+2013-03-22 Ryosuke Niwa <rniwa@webkit.org>
+
+ Another build fix (after r146693) for r146682.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+
+2013-03-22 Roger Fong <roger_fong@apple.com>
+
+ Unreviewed. AppleWin build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:
+ * JavaScriptCore.vcxproj/copy-files.cmd:
+
+2013-03-22 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ -[TinyDOMNode dealloc] should call [super dealloc] when ARC is not enabled
+ https://bugs.webkit.org/show_bug.cgi?id=113054
+
+ Reviewed by Geoffrey Garen.
+
+ * API/tests/testapi.mm:
+ (-[TinyDOMNode dealloc]):
+
+2013-03-22 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ opaqueJSClassData should be cached on JSGlobalObject, not the JSGlobalData
+ https://bugs.webkit.org/show_bug.cgi?id=113086
+
+ Reviewed by Geoffrey Garen.
+
+ opaqueJSClassData stores cached prototypes for JSClassRefs in the C API. It doesn't make sense to
+ share these prototypes within a JSGlobalData across JSGlobalObjects, and in fact doing so will cause
+ a leak of the original JSGlobalObject that these prototypes were created in. Therefore we should move
+ this cache to JSGlobalObject where it belongs and where it won't cause memory leaks.
+
+ * API/JSBase.cpp: Needed to add an extern "C" so that testapi.c can use the super secret GC function.
+ * API/JSClassRef.cpp: We now grab the cached context data from the global object rather than the global data.
+ (OpaqueJSClass::contextData):
+ * API/JSClassRef.h: Remove this header because it's unnecessary and causes circular dependencies.
+ * API/tests/testapi.c: Added a new test that makes sure that using the same JSClassRef in two different contexts
+ doesn't cause leaks of the original global object.
+ (leakFinalize):
+ (nestedAllocateObject): This is a hack to bypass the conservative scan of the GC, which was unnecessarily marking
+ objects and keeping them alive, ruining the test result.
+ (testLeakingPrototypesAcrossContexts):
+ (main):
+ * API/tests/testapi.mm: extern "C" this so we can continue using it here.
+ * runtime/JSGlobalData.cpp: Remove JSClassRef related stuff.
+ (JSC::JSGlobalData::~JSGlobalData):
+ * runtime/JSGlobalData.h:
+ (JSGlobalData):
+ * runtime/JSGlobalObject.h: Add the stuff that JSGlobalData had. We add it to JSGlobalObjectRareData so that
+ clients who don't use the C API don't have to pay the memory cost of this extra HashMap.
+ (JSGlobalObject):
+ (JSGlobalObjectRareData):
+ (JSC::JSGlobalObject::opaqueJSClassData):
+
+2013-03-19 Martin Robinson <mrobinson@igalia.com>
+
+ [GTK] Add support for building the WebCore bindings to the gyp build
+ https://bugs.webkit.org/show_bug.cgi?id=112638
+
+ Reviewed by Nico Weber.
+
+ * JavaScriptCore.gyp/JavaScriptCoreGTK.gyp: Export all include directories to direct
+ dependents and fix the indentation of the libjavascriptcore target.
+
+2013-03-21 Filip Pizlo <fpizlo@apple.com>
+
+ Fix some minor issues in the DFG's profiling of heap accesses
+ https://bugs.webkit.org/show_bug.cgi?id=113010
+
+ Reviewed by Goeffrey Garen.
+
+ 1) If a CodeBlock gets jettisoned by GC, we should count the exit sites.
+
+ 2) If a CodeBlock clears a structure stub during GC, it should record this, and
+ the DFG should prefer to not inline that access (i.e. treat it as if it had an
+ exit site).
+
+ 3) If a PutById was seen by the baseline JIT, and the JIT attempted to cache it,
+ but it chose not to, then assume that it will take slow path.
+
+ 4) If we frequently exited because of a structure check on a weak constant,
+ don't try to inline that access in the future.
+
+ 5) Treat all exits that were counted as being frequent.
+
+ 81% speed-up on Octane/gbemu. Small speed-ups elsewhere, and no regressions.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::finalizeUnconditionally):
+ (JSC):
+ (JSC::CodeBlock::resetStubDuringGCInternal):
+ (JSC::CodeBlock::reoptimize):
+ (JSC::CodeBlock::jettison):
+ (JSC::ProgramCodeBlock::jettisonImpl):
+ (JSC::EvalCodeBlock::jettisonImpl):
+ (JSC::FunctionCodeBlock::jettisonImpl):
+ (JSC::CodeBlock::tallyFrequentExitSites):
+ * bytecode/CodeBlock.h:
+ (CodeBlock):
+ (JSC::CodeBlock::tallyFrequentExitSites):
+ (ProgramCodeBlock):
+ (EvalCodeBlock):
+ (FunctionCodeBlock):
+ * bytecode/GetByIdStatus.cpp:
+ (JSC::GetByIdStatus::computeFor):
+ * bytecode/PutByIdStatus.cpp:
+ (JSC::PutByIdStatus::computeFor):
+ * bytecode/StructureStubInfo.h:
+ (JSC::StructureStubInfo::StructureStubInfo):
+ (StructureStubInfo):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::handleGetById):
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ * dfg/DFGOSRExit.cpp:
+ (JSC::DFG::OSRExit::considerAddingAsFrequentExitSiteSlow):
+ * dfg/DFGOSRExit.h:
+ (JSC::DFG::OSRExit::considerAddingAsFrequentExitSite):
+ (OSRExit):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * runtime/Options.h:
+ (JSC):
+
+2013-03-22 Filip Pizlo <fpizlo@apple.com>
+
+ DFG folding of PutById to SimpleReplace should consider the specialized function case
+ https://bugs.webkit.org/show_bug.cgi?id=113093
+
+ Reviewed by Geoffrey Garen and Mark Hahnenberg.
+
+ * bytecode/PutByIdStatus.cpp:
+ (JSC::PutByIdStatus::computeFor):
+
+2013-03-22 David Kilzer <ddkilzer@apple.com>
+
+ BUILD FIX (r146558): Build testapi.mm with ARC enabled for armv7s
+ <http://webkit.org/b/112608>
+
+ Fixes the following build failure:
+
+ Source/JavaScriptCore/API/tests/testapi.mm:205:1: error: method possibly missing a [super dealloc] call [-Werror,-Wobjc-missing-super-calls]
+ }
+ ^
+ 1 error generated.
+
+ * Configurations/ToolExecutable.xcconfig: Enable ARC for armv7s
+ architecture.
+
+2013-03-22 David Kilzer <ddkilzer@apple.com>
+
+ Revert "BUILD FIX (r146558): Call [super dealloc] from -[TinyDOMNode dealloc]"
+
+ This fixes a build failure introduced by this change:
+
+ Source/JavaScriptCore/API/tests/testapi.mm:206:6: error: ARC forbids explicit message send of 'dealloc'
+ [super dealloc];
+ ^ ~~~~~~~
+ 1 error generated.
+
+ Not sure why this didn't fail locally on my Mac Pro.
+
+ * API/tests/testapi.mm:
+ (-[TinyDOMNode dealloc]): Remove call to [super dealloc].
+
+2013-03-22 David Kilzer <ddkilzer@apple.com>
+
+ BUILD FIX (r146558): Call [super dealloc] from -[TinyDOMNode dealloc]
+ <http://webkit.org/b/112608>
+
+ Fixes the following build failure:
+
+ Source/JavaScriptCore/API/tests/testapi.mm:205:1: error: method possibly missing a [super dealloc] call [-Werror,-Wobjc-missing-super-calls]
+ }
+ ^
+ 1 error generated.
+
+ * API/tests/testapi.mm:
+ (-[TinyDOMNode dealloc]): Call [super dealloc].
+
+2013-03-22 Ryosuke Niwa <rniwa@webkit.org>
+
+ Leak bots erroneously report JSC::WatchpointSet as leaking
+ https://bugs.webkit.org/show_bug.cgi?id=107781
+
+ Reviewed by Filip Pizlo.
+
+ Since leaks doesn't support tagged pointers, avoid using it by flipping the bit flag to indicate
+ the entry is "fat". We set the flag when the entry is NOT fat; i.e. slim.
+
+ Replaced FatFlag by SlimFlag and initialized m_bits with this flag to indicate that the entry is
+ initially "slim".
+
+ * runtime/SymbolTable.cpp:
+ (JSC::SymbolTableEntry::copySlow): Don't set FatFlag since it has been replaced by SlimFlag.
+ (JSC::SymbolTableEntry::inflateSlow): Ditto.
+
+ * runtime/SymbolTable.h:
+ (JSC::SymbolTableEntry::Fast::Fast): Set SlimFlag by default.
+ (JSC::SymbolTableEntry::Fast::isNull): Ignore SlimFlag.
+ (JSC::SymbolTableEntry::Fast::isFat): An entry is fat when m_bits is not entirely zero and SlimFlag
+ is not set.
+
+ (JSC::SymbolTableEntry::SymbolTableEntry): Set SlimFlag by default.
+ (JSC::SymbolTableEntry::SymbolTableEntry::getFast): Set SlimFlag when creating Fast from a fat entry.
+ (JSC::SymbolTableEntry::isNull): Ignore SlimFlag.
+ (JSC::SymbolTableEntry::FatEntry::FatEntry): Strip SlimFlag.
+ (JSC::SymbolTableEntry::isFat): An entry is fat when m_bits is not entirely zero and SlimFlag is unset.
+ (JSC::SymbolTableEntry::fatEntry): Don't strip FatFlag as this flag doesn't exist anymore.
+ (JSC::SymbolTableEntry::pack): Preserve SlimFlag.
+
+ (JSC::SymbolTableIndexHashTraits): empty value is no longer zero so don't set emptyValueIsZero true.
+
+2013-03-21 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: Need a good way to preserve custom properties on JS wrappers
+ https://bugs.webkit.org/show_bug.cgi?id=112608
+
+ Reviewed by Geoffrey Garen.
+
+ Currently, we just use a weak map, which means that garbage collection can cause a wrapper to
+ disappear if it isn't directly exported to JavaScript.
+
+ The most straightforward and safe way (with respect to garbage collection and concurrency) is to have
+ clients add and remove their external references along with their owners. Effectively, the client is
+ recording the structure of the external object graph so that the garbage collector can make sure to
+ mark any wrappers that are reachable through either the JS object graph of the external Obj-C object
+ graph. By keeping these wrappers alive, this has the effect that custom properties on these wrappers
+ will also remain alive.
+
+ The rule for if an object needs to be tracked by the runtime (and therefore whether the client should report it) is as follows:
+ For a particular object, its references to its children should be added if:
+ 1. The child is referenced from JavaScript.
+ 2. The child contains references to other objects for which (1) or (2) are true.
+
+ * API/JSAPIWrapperObject.mm:
+ (JSAPIWrapperObjectHandleOwner::finalize):
+ (JSAPIWrapperObjectHandleOwner::isReachableFromOpaqueRoots): A wrapper object is kept alive only if its JSGlobalObject
+ is marked and its corresponding Objective-C object was added to the set of opaque roots.
+ (JSC::JSAPIWrapperObject::visitChildren): We now call out to scanExternalObjectGraph, which handles adding all Objective-C
+ objects to the set of opaque roots.
+ * API/JSAPIWrapperObject.h:
+ (JSAPIWrapperObject):
+ * API/JSContext.mm: Moved dealloc to its proper place in the main implementation.
+ (-[JSContext dealloc]):
+ * API/JSVirtualMachine.h:
+ * API/JSVirtualMachine.mm:
+ (-[JSVirtualMachine initWithContextGroupRef:]):
+ (-[JSVirtualMachine dealloc]):
+ (getInternalObjcObject): Helper funciton to get the Objective-C object out of JSManagedValues or JSValues if there is one.
+ (-[JSVirtualMachine addManagedReference:withOwner:]): Adds the Objective-C object to the set of objects
+ owned by the owner object in that particular virtual machine.
+ (-[JSVirtualMachine removeManagedReference:withOwner:]): Removes the relationship between the two objects.
+ (-[JSVirtualMachine externalObjectGraph]):
+ (scanExternalObjectGraph): Does a depth-first search of the external object graph in a particular virtual machine starting at
+ the specified root. Each new object it encounters it adds to the set of opaque roots. These opaque roots will keep their
+ corresponding wrapper objects alive if they have them.
+ * API/JSManagedReferenceInternal.h: Added.
+ * API/JSVirtualMachine.mm: Added the per-JSVirtualMachine map between objects and the objects they own, which is more formally
+ known as that virtual machine's external object graph.
+ * API/JSWrapperMap.mm:
+ (-[JSWrapperMap dealloc]): We were leaking this before :-(
+ (-[JSVirtualMachine initWithContextGroupRef:]):
+ (-[JSVirtualMachine dealloc]):
+ (-[JSVirtualMachine externalObjectGraph]):
+ * API/JSVirtualMachineInternal.h:
+ * API/tests/testapi.mm: Added two new tests using the TinyDOMNode class. The first tests that a custom property added to a wrapper
+ doesn't vanish after GC, even though that wrapper isn't directly accessible to the JS garbage collector but is accessible through
+ the external Objective-C object graph. The second test makes sure that adding an object to the external object graph with the same
+ owner doesn't cause any sort of problems.
+ (+[TinyDOMNode sharedVirtualMachine]):
+ (-[TinyDOMNode init]):
+ (-[TinyDOMNode dealloc]):
+ (-[TinyDOMNode appendChild:]):
+ (-[TinyDOMNode numberOfChildren]):
+ (-[TinyDOMNode childAtIndex:]):
+ (-[TinyDOMNode removeChildAtIndex:]):
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * heap/SlotVisitor.h:
+ (SlotVisitor):
+ * heap/SlotVisitorInlines.h:
+ (JSC::SlotVisitor::containsOpaqueRootTriState): Added a new method to SlotVisitor to allow scanExternalObjectGraph to have a
+ thread-safe view of opaque roots during parallel marking. The set of opaque roots available to any one SlotVisitor isn't guaranteed
+ to be 100% correct, but that just results in a small duplication of work in scanExternalObjectGraph. To indicate this change for
+ false negatives we return a TriState that's either true or mixed, but never false.
+
+2013-03-21 Mark Lam <mark.lam@apple.com>
+
+ Fix O(n^2) op_debug bytecode charPosition to column computation.
+ https://bugs.webkit.org/show_bug.cgi?id=112957.
+
+ Reviewed by Geoffrey Garen.
+
+ The previous algorithm does a linear reverse scan of the source string
+ to find the line start for any given char position. This results in a
+ O(n^2) algortithm when the source string has no line breaks.
+
+ The new algorithm computes a line start column table for a
+ SourceProvider on first use. This line start table is used to fix up
+ op_debug's charPosition operand into a column operand when an
+ UnlinkedCodeBlock is linked into a CodeBlock. The initialization of
+ the line start table is O(n), and the CodeBlock column fix up is
+ O(log(n)).
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dumpBytecode):
+ (JSC::CodeBlock::CodeBlock): - do column fix up.
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::debug): - no need to do column fixup anymore.
+ * interpreter/Interpreter.h:
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * llint/LLIntSlowPaths.cpp:
+ (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+ * parser/SourceProvider.cpp:
+ (JSC::SourceProvider::lineStarts):
+ (JSC::charPositionExtractor):
+ (JSC::SourceProvider::charPositionToColumnNumber):
+ - initialize line start column table if needed.
+ - look up line start for the given char position.
+ * parser/SourceProvider.h:
+
+2013-03-21 Filip Pizlo <fpizlo@apple.com>
+
+ JSC profiler should have an at-a-glance report of the success of DFG optimization
+ https://bugs.webkit.org/show_bug.cgi?id=112988
+
+ Reviewed by Geoffrey Garen.
+
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::handleCall):
+ (JSC::DFG::ByteCodeParser::handleGetById):
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ * profiler/ProfilerCompilation.cpp:
+ (JSC::Profiler::Compilation::Compilation):
+ (JSC::Profiler::Compilation::toJS):
+ * profiler/ProfilerCompilation.h:
+ (JSC::Profiler::Compilation::noticeInlinedGetById):
+ (JSC::Profiler::Compilation::noticeInlinedPutById):
+ (JSC::Profiler::Compilation::noticeInlinedCall):
+ (Compilation):
+ * runtime/CommonIdentifiers.h:
+
+2013-03-21 Mark Lam <mark.lam@apple.com>
+
+ Fix lexer charPosition computation when "rewind"ing the lexer.
+ https://bugs.webkit.org/show_bug.cgi?id=112952.
+
+ Reviewed by Michael Saboff.
+
+ Changed the Lexer to no longer keep a m_charPosition. Instead, we compute
+ currentCharPosition() from m_code and m_codeStartPlusOffset, where
+ m_codeStartPlusOffset is the SourceProvider m_codeStart + the SourceCode
+ start offset. This ensures that the charPosition is always in sync with
+ m_code.
+
+ * parser/Lexer.cpp:
+ (JSC::::setCode):
+ (JSC::::internalShift):
+ (JSC::::shift):
+ (JSC::::lex):
+ * parser/Lexer.h:
+ (JSC::Lexer::currentCharPosition):
+ (JSC::::lexExpectIdentifier):
+
+2013-03-21 Alberto Garcia <agarcia@igalia.com>
+
+ [BlackBerry] GCActivityCallback: replace JSLock with JSLockHolder
+ https://bugs.webkit.org/show_bug.cgi?id=112448
+
+ Reviewed by Xan Lopez.
+
+ This changed in r121381.
+
+ * runtime/GCActivityCallbackBlackBerry.cpp:
+ (JSC::DefaultGCActivityCallback::doWork):
+
+2013-03-21 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: wrapperClass holds a static JSClassRef, which causes JSGlobalObjects to leak
+ https://bugs.webkit.org/show_bug.cgi?id=112856
+
+ Reviewed by Geoffrey Garen.
+
+ Through a very convoluted path that involves the caching of prototypes on the JSClassRef, we can leak
+ JSGlobalObjects when inserting an Objective-C object into multiple independent JSContexts.
+
+ * API/JSAPIWrapperObject.cpp: Removed.
+ * API/JSAPIWrapperObject.h:
+ (JSAPIWrapperObject):
+ * API/JSAPIWrapperObject.mm: Copied from Source/JavaScriptCore/API/JSAPIWrapperObject.cpp. Made this an
+ Objective-C++ file so that we can call release on the wrappedObject. Also added a WeakHandleOwner for
+ JSAPIWrapperObjects. This will also be used in a future patch for https://bugs.webkit.org/show_bug.cgi?id=112608.
+ (JSAPIWrapperObjectHandleOwner):
+ (jsAPIWrapperObjectHandleOwner):
+ (JSAPIWrapperObjectHandleOwner::finalize): This finalize replaces the old finalize that was done through
+ the C API.
+ (JSC::JSAPIWrapperObject::finishCreation): Allocate the WeakImpl. Balanced in finalize.
+ (JSC::JSAPIWrapperObject::setWrappedObject): We now do the retain of the wrappedObject here rather than in random
+ places scattered around JSWrapperMap.mm
+ * API/JSObjectRef.cpp: Added some ifdefs for platforms that don't support the Obj-C API.
+ (JSObjectGetPrivate): Ditto.
+ (JSObjectSetPrivate): Ditto.
+ (JSObjectGetPrivateProperty): Ditto.
+ (JSObjectSetPrivateProperty): Ditto.
+ (JSObjectDeletePrivateProperty): Ditto.
+ * API/JSValueRef.cpp: Ditto.
+ (JSValueIsObjectOfClass): Ditto.
+ * API/JSWrapperMap.mm: Remove wrapperClass().
+ (objectWithCustomBrand): Change to no longer use a parent class, which was only used to give the ability to
+ finalize wrapper objects.
+ (-[JSObjCClassInfo initWithContext:forClass:superClassInfo:]): Change to no longer use wrapperClass().
+ (-[JSObjCClassInfo allocateConstructorAndPrototypeWithSuperClassInfo:]): Ditto.
+ (tryUnwrapObjcObject): We now check if the object inherits from JSAPIWrapperObject.
+ * API/tests/testapi.mm: Added a test that exports an Objective-C object to two different JSContexts and makes
+ sure that the first one is collected properly by using a weak JSManagedValue for the wrapper in the first JSContext.
+ * CMakeLists.txt: Build file modifications.
+ * GNUmakefile.list.am: Ditto.
+ * JavaScriptCore.gypi: Ditto.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: Ditto.
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters: Ditto.
+ * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
+ * runtime/JSGlobalObject.cpp: More ifdefs for unsupported platforms.
+ (JSC::JSGlobalObject::reset): Ditto.
+ (JSC::JSGlobalObject::visitChildren): Ditto.
+ * runtime/JSGlobalObject.h: Ditto.
+ (JSGlobalObject): Ditto.
+ (JSC::JSGlobalObject::objcCallbackFunctionStructure): Ditto.
+
+2013-03-21 Anton Muhin <antonm@chromium.org>
+
+ Unreviewed, rolling out r146483.
+ http://trac.webkit.org/changeset/146483
+ https://bugs.webkit.org/show_bug.cgi?id=111695
+
+ Breaks debug builds.
+
+ * bytecode/GlobalResolveInfo.h: Removed property svn:mergeinfo.
+
+2013-03-21 Gabor Rapcsanyi <rgabor@webkit.org>
+
+ Implement LLInt for CPU(ARM_TRADITIONAL)
+ https://bugs.webkit.org/show_bug.cgi?id=97589
+
+ Reviewed by Zoltan Herczeg.
+
+ Enable LLInt for ARMv5 and ARMv7 traditional as well.
+
+ * llint/LLIntOfflineAsmConfig.h:
+ * llint/LowLevelInterpreter.asm:
+ * llint/LowLevelInterpreter32_64.asm:
+ * offlineasm/arm.rb:
+ * offlineasm/backends.rb:
+ * offlineasm/instructions.rb:
+
+2013-03-20 Cosmin Truta <ctruta@blackberry.com>
+
+ [QNX][ARM] REGRESSION(r135330): Various failures in Octane
+ https://bugs.webkit.org/show_bug.cgi?id=112863
+
+ Reviewed by Yong Li.
+
+ This was fixed in http://trac.webkit.org/changeset/146396 on Linux only.
+ Enable this fix on QNX.
+
+ * assembler/ARMv7Assembler.h:
+ (ARMv7Assembler):
+ (JSC::ARMv7Assembler::replaceWithJump):
+ (JSC::ARMv7Assembler::maxJumpReplacementSize):
+ * assembler/MacroAssemblerARMv7.h:
+ (JSC::MacroAssemblerARMv7::revertJumpReplacementToBranchPtrWithPatch):
+
+2013-03-20 Filip Pizlo <fpizlo@apple.com>
+
+ Fix indentation of JSString.h
+
+ Rubber stamped by Mark Hahnenberg.
+
+ * runtime/JSString.h:
+
+2013-03-20 Filip Pizlo <fpizlo@apple.com>
+
+ "" + x where x is not a string should be optimized by the DFG to some manner of ToString conversion
+ https://bugs.webkit.org/show_bug.cgi?id=112845
+
+ Reviewed by Mark Hahnenberg.
+
+ I like to do "" + x. So I decided to make DFG recognize it, and related idioms.
+
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ (JSC::DFG::FixupPhase::fixupToPrimitive):
+ (FixupPhase):
+ (JSC::DFG::FixupPhase::fixupToString):
+ (JSC::DFG::FixupPhase::attemptToMakeFastStringAdd):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::resultOfToPrimitive):
+ (DFG):
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGPredictionPropagationPhase.h:
+ (DFG):
+
+2013-03-20 Zoltan Herczeg <zherczeg@webkit.org>
+
+ ARMv7 replaceWithJump ASSERT failure after r135330.
+ https://bugs.webkit.org/show_bug.cgi?id=103146
+
+ Reviewed by Filip Pizlo.
+
+ On Linux, the 24 bit distance range of jumps sometimes does not
+ enough to cover all targets addresses. This patch supports jumps
+ outside of this range using a mov/movt/bx 10 byte long sequence.
+
+ * assembler/ARMv7Assembler.h:
+ (ARMv7Assembler):
+ (JSC::ARMv7Assembler::revertJumpTo_movT3movtcmpT2):
+ (JSC::ARMv7Assembler::nopw):
+ (JSC::ARMv7Assembler::label):
+ (JSC::ARMv7Assembler::replaceWithJump):
+ (JSC::ARMv7Assembler::maxJumpReplacementSize):
+ * assembler/MacroAssemblerARMv7.h:
+ (JSC::MacroAssemblerARMv7::revertJumpReplacementToBranchPtrWithPatch):
+
+2013-03-20 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: Fix over-releasing in allocateConstructorAndPrototypeWithSuperClassInfo:
+ https://bugs.webkit.org/show_bug.cgi?id=112832
+
+ Reviewed by Geoffrey Garen.
+
+ If either the m_constructor or m_prototype (but not both) is collected, we will call
+ allocateConstructorAndPrototypeWithSuperClassInfo, which will create a new object to replace the one
+ that was collected, but at the end of the method we call release on both of them.
+ This is incorrect since we autorelease the JSValue in the case that the object doesn't need to be
+ reallocated. Thus we'll end up overreleasing later during the drain of the autorelease pool.
+
+ * API/JSWrapperMap.mm:
+ (objectWithCustomBrand): We no longer alloc here. We instead call the JSValue valueWithValue class method,
+ which autoreleases for us.
+ (-[JSObjCClassInfo allocateConstructorAndPrototypeWithSuperClassInfo:]): We no longer call release on the
+ constructor or prototype JSValues.
+ * API/tests/testapi.mm: Added a new test that crashes on ToT due to over-releasing.
+
+2013-03-19 Filip Pizlo <fpizlo@apple.com>
+
+ It's called "Hash Consing" not "Hash Consting"
+ https://bugs.webkit.org/show_bug.cgi?id=112768
+
+ Rubber stamped by Mark Hahnenberg.
+
+ See http://en.wikipedia.org/wiki/Hash_consing
+
+ * heap/GCThreadSharedData.cpp:
+ (JSC::GCThreadSharedData::GCThreadSharedData):
+ (JSC::GCThreadSharedData::reset):
+ * heap/GCThreadSharedData.h:
+ (GCThreadSharedData):
+ * heap/SlotVisitor.cpp:
+ (JSC::SlotVisitor::SlotVisitor):
+ (JSC::SlotVisitor::setup):
+ (JSC::SlotVisitor::reset):
+ (JSC::JSString::tryHashConsLock):
+ (JSC::JSString::releaseHashConsLock):
+ (JSC::JSString::shouldTryHashCons):
+ (JSC::SlotVisitor::internalAppend):
+ * heap/SlotVisitor.h:
+ (SlotVisitor):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSGlobalData.h:
+ (JSGlobalData):
+ (JSC::JSGlobalData::haveEnoughNewStringsToHashCons):
+ (JSC::JSGlobalData::resetNewStringsSinceLastHashCons):
+ * runtime/JSString.h:
+ (JSC::JSString::finishCreation):
+ (JSString):
+ (JSC::JSString::isHashConsSingleton):
+ (JSC::JSString::clearHashConsSingleton):
+ (JSC::JSString::setHashConsSingleton):
+
+2013-03-20 Filip Pizlo <fpizlo@apple.com>
+
+ DFG implementation of op_strcat should inline rope allocations
+ https://bugs.webkit.org/show_bug.cgi?id=112780
+
+ Reviewed by Oliver Hunt.
+
+ This gets rid of the StrCat node and adds a MakeRope node. The MakeRope node can
+ take either two or three operands, and allocates a rope string with either two or
+ three fibers. (The magic choice of three children for non-VarArg nodes happens to
+ match exactly with the magic choice of three fibers for rope strings.)
+
+ ValueAdd on KnownString is replaced with MakeRope with two children.
+
+ StrCat gets replaced by an appropriate sequence of MakeRope's.
+
+ MakeRope does not do the dynamic check to see if its children are empty strings.
+ This is replaced by a static check, instead. The downside is that we may use more
+ memory if the strings passed to MakeRope turn out to dynamically be empty. The
+ upside is that we do fewer checks in the cases where either the strings are not
+ empty, or where the strings are statically known to be empty. I suspect both of
+ those cases are more common, than the case where the string is dynamically empty.
+
+ This also results in some badness for X86. MakeRope needs six registers if it is
+ allocating a three-rope. We don't have six registers to spare on X86. Currently,
+ the code side-steps this problem by just never usign three-ropes in optimized
+ code on X86. All other architectures, including X86_64, don't have this problem.
+
+ This is a shocking speed-up. 9% progressions on both V8/splay and
+ SunSpider/date-format-xparb. 1% progression on V8v7 overall, and ~0.5% progression
+ on SunSpider. 2x speed-up on microbenchmarks that test op_strcat.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::executeEffects):
+ * dfg/DFGAdjacencyList.h:
+ (AdjacencyList):
+ (JSC::DFG::AdjacencyList::removeEdge):
+ * dfg/DFGArgumentsSimplificationPhase.cpp:
+ (JSC::DFG::ArgumentsSimplificationPhase::removeArgumentsReferencingPhantomChild):
+ * dfg/DFGBackwardsPropagationPhase.cpp:
+ (JSC::DFG::BackwardsPropagationPhase::propagate):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::putStructureStoreElimination):
+ (JSC::DFG::CSEPhase::eliminateIrrelevantPhantomChildren):
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ * dfg/DFGDCEPhase.cpp:
+ (JSC::DFG::DCEPhase::eliminateIrrelevantPhantomChildren):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ (JSC::DFG::FixupPhase::createToString):
+ (JSC::DFG::FixupPhase::attemptToForceStringArrayModeByToStringConversion):
+ (JSC::DFG::FixupPhase::convertStringAddUse):
+ (FixupPhase):
+ (JSC::DFG::FixupPhase::convertToMakeRope):
+ (JSC::DFG::FixupPhase::fixupMakeRope):
+ (JSC::DFG::FixupPhase::attemptToMakeFastStringAdd):
+ * dfg/DFGNodeType.h:
+ (DFG):
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGOperations.h:
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileAdd):
+ (JSC::DFG::SpeculativeJIT::compileMakeRope):
+ (DFG):
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::callOperation):
+ (SpeculativeJIT):
+ (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
+ (JSC::DFG::SpeculateCellOperand::~SpeculateCellOperand):
+ (JSC::DFG::SpeculateCellOperand::gpr):
+ (JSC::DFG::SpeculateCellOperand::use):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * runtime/JSString.h:
+ (JSRopeString):
+
+2013-03-20 Peter Gal <galpeter@inf.u-szeged.hu>
+
+ Implement and32 on MIPS platform
+ https://bugs.webkit.org/show_bug.cgi?id=112665
+
+ Reviewed by Zoltan Herczeg.
+
+ * assembler/MacroAssemblerMIPS.h:
+ (JSC::MacroAssemblerMIPS::and32): Added missing method.
+ (MacroAssemblerMIPS):
+
+2013-03-20 Mark Lam <mark.lam@apple.com>
+
+ Fix incorrect debugger column number value.
+ https://bugs.webkit.org/show_bug.cgi?id=112741.
+
+ Reviewed by Oliver Hunt.
+
+ 1. In lexer, parser, and debugger code, renamed column to charPosition.
+ 2. Convert the charPosition to the equivalent column number before
+ passing it to the debugger.
+ 3. Changed ScopeNodes to take both a startLocation and an endLocation.
+ This allows FunctionBodyNodes, ProgramNodes, and EvalNodess to emit
+ correct debug hooks with correct starting line and column numbers.
+ 4. Fixed the Lexer to not reset the charPosition (previously
+ columnNumber) in Lexer::lex().
+
+ * JavaScriptCore.order:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dumpBytecode):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitDebugHook):
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::BytecodeGenerator::emitExpressionInfo):
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::ArrayNode::toArgumentList):
+ (JSC::ConstStatementNode::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::ProgramNode::emitBytecode):
+ (JSC::EvalNode::emitBytecode):
+ (JSC::FunctionBodyNode::emitBytecode):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::debug):
+ - convert charPosition to column for the debugger.
+ * interpreter/Interpreter.h:
+ * jit/JITStubs.cpp:
+ (DEFINE_STUB_FUNCTION(void, op_debug)):
+ * llint/LLIntSlowPaths.cpp:
+ (LLINT_SLOW_PATH_DECL(slow_op_debug)):
+ * parser/ASTBuilder.h:
+ (JSC::ASTBuilder::createFunctionExpr):
+ (JSC::ASTBuilder::createFunctionBody):
+ (JSC::ASTBuilder::createGetterOrSetterProperty):
+ (JSC::ASTBuilder::createFuncDeclStatement):
+ (JSC::ASTBuilder::createBlockStatement):
+ (JSC::ASTBuilder::createExprStatement):
+ (JSC::ASTBuilder::createIfStatement):
+ (JSC::ASTBuilder::createForLoop):
+ (JSC::ASTBuilder::createForInLoop):
+ (JSC::ASTBuilder::createVarStatement):
+ (JSC::ASTBuilder::createReturnStatement):
+ (JSC::ASTBuilder::createBreakStatement):
+ (JSC::ASTBuilder::createContinueStatement):
+ (JSC::ASTBuilder::createTryStatement):
+ (JSC::ASTBuilder::createSwitchStatement):
+ (JSC::ASTBuilder::createWhileStatement):
+ (JSC::ASTBuilder::createDoWhileStatement):
+ (JSC::ASTBuilder::createWithStatement):
+ (JSC::ASTBuilder::createThrowStatement):
+ (JSC::ASTBuilder::createDebugger):
+ (JSC::ASTBuilder::createConstStatement):
+ * parser/Lexer.cpp:
+ (JSC::::setCode):
+ (JSC::::internalShift):
+ (JSC::::shift):
+ (JSC::::lex):
+ * parser/Lexer.h:
+ (JSC::Lexer::currentCharPosition):
+ (Lexer):
+ (JSC::::lexExpectIdentifier):
+ * parser/NodeConstructors.h:
+ (JSC::Node::Node):
+ * parser/Nodes.cpp:
+ (JSC::StatementNode::setLoc):
+ (JSC::ScopeNode::ScopeNode):
+ (JSC::ProgramNode::ProgramNode):
+ (JSC::ProgramNode::create):
+ (JSC::EvalNode::EvalNode):
+ (JSC::EvalNode::create):
+ (JSC::FunctionBodyNode::FunctionBodyNode):
+ (JSC::FunctionBodyNode::create):
+ * parser/Nodes.h:
+ (JSC::Node::charPosition):
+ (Node):
+ (StatementNode):
+ (JSC::StatementNode::lastLine):
+ (ScopeNode):
+ (JSC::ScopeNode::startLine):
+ (JSC::ScopeNode::startCharPosition):
+ (ProgramNode):
+ (EvalNode):
+ (FunctionBodyNode):
+ * parser/Parser.cpp:
+ (JSC::::Parser):
+ (JSC::::parseFunctionBody):
+ (JSC::::parseFunctionInfo):
+ * parser/Parser.h:
+ (JSC::::parse):
+ * parser/ParserTokens.h:
+ (JSC::JSTokenLocation::JSTokenLocation):
+ (JSTokenLocation):
+ * parser/SyntaxChecker.h:
+ (JSC::SyntaxChecker::createFunctionBody):
+
+2013-03-20 Csaba Osztrogonác <ossy@webkit.org>
+
+ REGRESSION(r146089): It broke 20 sputnik tests on ARM traditional and Thumb2
+ https://bugs.webkit.org/show_bug.cgi?id=112676
+
+ Rubber-stamped by Filip Pizlo.
+
+ Add one more EABI_32BIT_DUMMY_ARG to make DFG JIT ARM EABI compatible
+ again after r146089 similar to https://bugs.webkit.org/show_bug.cgi?id=84449
+
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::callOperation):
+
+2013-03-19 Michael Saboff <msaboff@apple.com>
+
+ Crash when loading http://www.jqchart.com/jquery/gauges/RadialGauge/LiveData
+ https://bugs.webkit.org/show_bug.cgi?id=112694
+
+ Reviewed by Filip Pizlo.
+
+ We were trying to convert an NewArray to a Phantom, but convertToPhantom doesn't handle
+ nodes with variable arguments. Added code to insert a Phantom node in front of all the
+ live children of a var args node. Added ASSERT not var args for convertToPhantom to
+ catch any other similar cases. Added a new convertToPhantomUnchecked() for converting
+ var arg nodes.
+
+ * dfg/DFGDCEPhase.cpp:
+ (JSC::DFG::DCEPhase::run):
+ * dfg/DFGNode.h:
+ (Node):
+ (JSC::DFG::Node::setOpAndDefaultNonExitFlags): Added ASSERT(!(m_flags & NodeHasVarArgs))
+ (JSC::DFG::Node::setOpAndDefaultNonExitFlagsUnchecked):
+ (JSC::DFG::Node::convertToPhantomUnchecked):
+
+2013-03-19 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Crash in SpeculativeJIT::fillSpeculateIntInternal<false> on http://bellard.org/jslinux
+ https://bugs.webkit.org/show_bug.cgi?id=112738
+
+ Reviewed by Filip Pizlo.
+
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixIntEdge): We shouldn't be killing this node because it could be
+ referenced by other people.
+
+2013-03-19 Oliver Hunt <oliver@apple.com>
+
+ RELEASE_ASSERT fires in exception handler lookup
+
+ RS=Geoff Garen.
+
+ Temporarily switch this RELEASE_ASSERT into a regular ASSERT
+ as currently this is producing fairly bad crashiness.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::handlerForBytecodeOffset):
+
+2013-03-18 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should optimize StringObject.length and StringOrStringObject.length
+ https://bugs.webkit.org/show_bug.cgi?id=112658
+
+ Reviewed by Mark Hahnenberg.
+
+ Implemented by injecting a ToString(StringObject:@a) or ToString(StringOrStringObject:@a) prior
+ to GetArrayLength with ArrayMode(Array::String) if @a is predicted StringObject or
+ StringOrStringObject.
+
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ (JSC::DFG::FixupPhase::createToString):
+ (FixupPhase):
+ (JSC::DFG::FixupPhase::attemptToForceStringArrayModeByToStringConversion):
+ (JSC::DFG::FixupPhase::convertStringAddUse):
+
+2013-03-19 Gabor Rapcsanyi <rgabor@webkit.org>
+
+ Implement and32 on ARMv7 and ARM traditional platforms
+ https://bugs.webkit.org/show_bug.cgi?id=112663
+
+ Reviewed by Zoltan Herczeg.
+
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::and32): Add missing method.
+ (MacroAssemblerARM):
+ * assembler/MacroAssemblerARMv7.h:
+ (JSC::MacroAssemblerARMv7::and32): Add missing method.
+ (MacroAssemblerARMv7):
+
+2013-03-18 Filip Pizlo <fpizlo@apple.com>
+
+ DFG ToString generic cases should work correctly
+ https://bugs.webkit.org/show_bug.cgi?id=112654
+ <rdar://problem/13447250>
+
+ Reviewed by Geoffrey Garen.
+
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileToStringOnCell):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2013-03-18 Michael Saboff <msaboff@apple.com>
+
+ Unreviewed build fix for 32 bit builds.
+
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2013-03-18 Michael Saboff <msaboff@apple.com>
+
+ EFL: Unsafe branch detected in compilePutByValForFloatTypedArray()
+ https://bugs.webkit.org/show_bug.cgi?id=112609
+
+ Reviewed by Geoffrey Garen.
+
+ Created local valueFPR and scratchFPR and filled them with valueOp.fpr() and scratch.fpr()
+ respectively so that if valueOp.fpr() causes a spill during allocation, it occurs before the
+ branch and also to follow convention. Added register allocation checks to FPRTemporary.
+ Cleaned up a couple of other places to follow the "AllocatVirtualRegType foo, get machine
+ reg from foo" pattern.
+
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::fprAllocate):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::convertToDouble):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2013-03-18 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should inline binary string concatenations (i.e. ValueAdd with string children)
+ https://bugs.webkit.org/show_bug.cgi?id=112599
+
+ Reviewed by Oliver Hunt.
+
+ This does as advertised: if you do x + y where x and y are strings, you'll get
+ a fast inlined JSRopeString allocation (along with whatever checks are necessary).
+ It also does good things if either x or y (or both) are StringObjects, or some
+ other thing like StringOrStringObject. It also lays the groundwork for making this
+ fast if either x or y are numbers, or some other reasonably-cheap-to-convert
+ value.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::executeEffects):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ (FixupPhase):
+ (JSC::DFG::FixupPhase::isStringObjectUse):
+ (JSC::DFG::FixupPhase::convertStringAddUse):
+ (JSC::DFG::FixupPhase::attemptToMakeFastStringAdd):
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGOperations.h:
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileAdd):
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::callOperation):
+ (SpeculativeJIT):
+ (JSC::DFG::SpeculativeJIT::emitAllocateJSCell):
+ (JSC::DFG::SpeculativeJIT::emitAllocateJSObject):
+ * runtime/JSString.h:
+ (JSC::JSString::offsetOfFlags):
+ (JSString):
+ (JSRopeString):
+ (JSC::JSRopeString::offsetOfFibers):
+
+2013-03-18 Filip Pizlo <fpizlo@apple.com>
+
+ JSC_NATIVE_FUNCTION() takes an identifier for the name and then uses #name, which is unsafe if name was already #define'd to something else
+ https://bugs.webkit.org/show_bug.cgi?id=112639
+
+ Reviewed by Michael Saboff.
+
+ Change it to take a string instead.
+
+ * runtime/JSObject.h:
+ (JSC):
+ * runtime/ObjectPrototype.cpp:
+ (JSC::ObjectPrototype::finishCreation):
+ * runtime/StringPrototype.cpp:
+ (JSC::StringPrototype::finishCreation):
+
+2013-03-18 Brent Fulgham <bfulgham@webkit.org>
+
+ [WinCairo] Get build working under VS2010.
+ https://bugs.webkit.org/show_bug.cgi?id=112604
+
+ Reviewed by Tim Horton.
+
+ * JavaScriptCore.vcxproj/testapi/testapi.vcxproj: Use CFLite-specific
+ build target (standard version links against CoreFoundation.lib
+ instead of CFLite.lib).
+ * JavaScriptCore.vcxproj/testapi/testapiCommonCFLite.props: Added.
+ * JavaScriptCore.vcxproj/testapi/testapiDebugCFLite.props: Added.
+ * JavaScriptCore.vcxproj/testapi/testapiReleaseCFLite.props: Added.
+
+2013-03-18 Roger Fong <roger_fong@apple.com>
+
+ AppleWin VS2010 Debug configuration build fix..
+
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+
+2013-03-18 Brent Fulgham <bfulgham@webkit.org>
+
+ [WinCairo] Get build working under VS2010.
+ https://bugs.webkit.org/show_bug.cgi?id=112604
+
+ Reviewed by Tim Horton.
+
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: Add build targets for
+ Debug_WinCairo and Release_WinCairo using CFLite.
+ * JavaScriptCore.vcxproj/JavaScriptCoreCFLite.props: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreDebugCFLite.props: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGenerator.vcxproj:
+ Add Debug_WinCairo and Release_WinCairo build targets to
+ make sure headers are copied to proper build folder.
+ * JavaScriptCore.vcxproj/JavaScriptCoreGenerated.vcxproj: Ditto.
+ * JavaScriptCore.vcxproj/JavaScriptCoreReleaseCFLite.props: Added.
+ * JavaScriptCore.vcxproj/LLInt/LLIntAssembly/LLIntAssembly.vcxproj:
+ Add Debug_WinCairo and Release_WinCairo build targets to
+ make sure headers are copied to proper build folder.
+ * JavaScriptCore.vcxproj/LLInt/LLIntDesiredOffsets/LLIntDesiredOffsets.vcxproj:
+ Ditto.
+ * JavaScriptCore.vcxproj/LLInt/LLIntOffsetsExtractor/LLIntOffsetsExtractor.vcxproj:
+ Ditto.
+ * JavaScriptCore.vcxproj/jsc/jsc.vcxproj: Ditto.
+ * JavaScriptCore.vcxproj/testRegExp/testRegExp.vcxproj: Ditto.
+ * JavaScriptCore.vcxproj/testapi/testapi.vcxproj: Ditto.
+
+2013-03-18 Michael Saboff <msaboff@apple.com>
+
+ Potentially unsafe register allocations in DFG code generation
+ https://bugs.webkit.org/show_bug.cgi?id=112477
+
+ Reviewed by Geoffrey Garen.
+
+ Moved allocation of temporary GPRs to be before any generated branches in the functions below.
+
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
+ (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
+ (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
+
+2013-03-15 Filip Pizlo <fpizlo@apple.com>
+
+ DFG string conversions and allocations should be inlined
+ https://bugs.webkit.org/show_bug.cgi?id=112376
+
+ Reviewed by Geoffrey Garen.
+
+ This turns new String(), String(), String.prototype.valueOf(), and
+ String.prototype.toString() into intrinsics. It gives the DFG the ability to handle
+ conversions from StringObject to JSString and vice-versa, and also gives it the
+ ability to handle cases where a variable may be either a StringObject or a JSString.
+ To do this, I added StringObject to value profiling (and removed the stale
+ distinction between Myarguments and Foreignarguments). I also cleaned up ToPrimitive
+ handling, using some of the new functionality but also taking advantage of the
+ existence of Identity(String:@a).
+
+ This is a 2% SunSpider speed-up. Also there are some speed-ups on V8v7 and Kraken.
+ On microbenchmarks that stress new String() this is a 14x speed-up.
+
+ * CMakeLists.txt:
+ * DerivedSources.make:
+ * DerivedSources.pri:
+ * GNUmakefile.list.am:
+ * bytecode/CodeBlock.h:
+ (CodeBlock):
+ (JSC::CodeBlock::hasExitSite):
+ (JSC):
+ * bytecode/DFGExitProfile.cpp:
+ (JSC::DFG::ExitProfile::hasExitSite):
+ (DFG):
+ * bytecode/DFGExitProfile.h:
+ (ExitProfile):
+ (JSC::DFG::ExitProfile::hasExitSite):
+ * bytecode/ExitKind.cpp:
+ (JSC::exitKindToString):
+ * bytecode/ExitKind.h:
+ * bytecode/SpeculatedType.cpp:
+ (JSC::dumpSpeculation):
+ (JSC::speculationToAbbreviatedString):
+ (JSC::speculationFromClassInfo):
+ * bytecode/SpeculatedType.h:
+ (JSC):
+ (JSC::isStringObjectSpeculation):
+ (JSC::isStringOrStringObjectSpeculation):
+ * create_hash_table:
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::executeEffects):
+ * dfg/DFGAbstractState.h:
+ (JSC::DFG::AbstractState::filterEdgeByUse):
+ * dfg/DFGByteCodeParser.cpp:
+ (ByteCodeParser):
+ (JSC::DFG::ByteCodeParser::handleCall):
+ (JSC::DFG::ByteCodeParser::emitArgumentPhantoms):
+ (DFG):
+ (JSC::DFG::ByteCodeParser::handleConstantInternalFunction):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::putStructureStoreElimination):
+ * dfg/DFGEdge.h:
+ (JSC::DFG::Edge::shift):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ (JSC::DFG::FixupPhase::isStringPrototypeMethodSane):
+ (FixupPhase):
+ (JSC::DFG::FixupPhase::canOptimizeStringObjectAccess):
+ (JSC::DFG::FixupPhase::observeUseKindOnNode):
+ * dfg/DFGGraph.h:
+ (JSC::DFG::Graph::hasGlobalExitSite):
+ (Graph):
+ (JSC::DFG::Graph::hasExitSite):
+ (JSC::DFG::Graph::clobbersWorld):
+ * dfg/DFGNode.h:
+ (JSC::DFG::Node::convertToToString):
+ (Node):
+ (JSC::DFG::Node::hasStructure):
+ (JSC::DFG::Node::shouldSpeculateStringObject):
+ (JSC::DFG::Node::shouldSpeculateStringOrStringObject):
+ * dfg/DFGNodeType.h:
+ (DFG):
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGOperations.h:
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileToStringOnCell):
+ (DFG):
+ (JSC::DFG::SpeculativeJIT::compileNewStringObject):
+ (JSC::DFG::SpeculativeJIT::speculateObject):
+ (JSC::DFG::SpeculativeJIT::speculateObjectOrOther):
+ (JSC::DFG::SpeculativeJIT::speculateString):
+ (JSC::DFG::SpeculativeJIT::speculateStringObject):
+ (JSC::DFG::SpeculativeJIT::speculateStringOrStringObject):
+ (JSC::DFG::SpeculativeJIT::speculate):
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::callOperation):
+ (SpeculativeJIT):
+ (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
+ (DFG):
+ (JSC::DFG::SpeculativeJIT::speculateStringObjectForStructure):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGUseKind.cpp:
+ (WTF::printInternal):
+ * dfg/DFGUseKind.h:
+ (JSC::DFG::typeFilterFor):
+ * interpreter/CallFrame.h:
+ (JSC::ExecState::regExpPrototypeTable):
+ * runtime/CommonIdentifiers.h:
+ * runtime/Intrinsic.h:
+ * runtime/JSDestructibleObject.h:
+ (JSDestructibleObject):
+ (JSC::JSDestructibleObject::classInfoOffset):
+ * runtime/JSGlobalData.cpp:
+ (JSC):
+ (JSC::JSGlobalData::JSGlobalData):
+ (JSC::JSGlobalData::~JSGlobalData):
+ * runtime/JSGlobalData.h:
+ (JSGlobalData):
+ * runtime/JSObject.cpp:
+ * runtime/JSObject.h:
+ (JSC):
+ * runtime/JSWrapperObject.h:
+ (JSC::JSWrapperObject::allocationSize):
+ (JSWrapperObject):
+ (JSC::JSWrapperObject::internalValueOffset):
+ (JSC::JSWrapperObject::internalValueCellOffset):
+ * runtime/StringPrototype.cpp:
+ (JSC):
+ (JSC::StringPrototype::finishCreation):
+ (JSC::StringPrototype::create):
+ * runtime/StringPrototype.h:
+ (StringPrototype):
+
+2013-03-18 Filip Pizlo <fpizlo@apple.com>
+
+ ObjectPrototype properties should be eagerly created rather than lazily via static tables
+ https://bugs.webkit.org/show_bug.cgi?id=112539
+
+ Reviewed by Oliver Hunt.
+
+ This is the first part of https://bugs.webkit.org/show_bug.cgi?id=112233. Rolling this
+ in first since it's the less-likely-to-be-broken part.
+
+ * CMakeLists.txt:
+ * DerivedSources.make:
+ * DerivedSources.pri:
+ * GNUmakefile.list.am:
+ * interpreter/CallFrame.h:
+ (JSC::ExecState::objectConstructorTable):
+ * runtime/CommonIdentifiers.h:
+ * runtime/JSGlobalData.cpp:
+ (JSC):
+ (JSC::JSGlobalData::JSGlobalData):
+ (JSC::JSGlobalData::~JSGlobalData):
+ * runtime/JSGlobalData.h:
+ (JSGlobalData):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::putDirectNativeFunction):
+ (JSC):
+ * runtime/JSObject.h:
+ (JSObject):
+ (JSC):
+ * runtime/Lookup.cpp:
+ (JSC::setUpStaticFunctionSlot):
+ * runtime/ObjectPrototype.cpp:
+ (JSC):
+ (JSC::ObjectPrototype::finishCreation):
+ (JSC::ObjectPrototype::create):
+ * runtime/ObjectPrototype.h:
+ (ObjectPrototype):
+
+2013-03-16 Pratik Solanki <psolanki@apple.com>
+
+ Disable High DPI Canvas on iOS
+ https://bugs.webkit.org/show_bug.cgi?id=112511
+
+ Reviewed by Joseph Pecoraro.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2013-03-15 Andreas Kling <akling@apple.com>
+
+ Don't also clone StructureRareData when cloning Structure.
+ <http://webkit.org/b/111672>
+
+ Reviewed by Mark Hahnenberg.
+
+ We were cloning a lot of StructureRareData with only the previousID pointer set since
+ the enumerationCache is not shared between clones.
+
+ Let the Structure copy constructor decide whether it wants to clone the rare data.
+ The decision is made by StructureRareData::needsCloning() and will currently always
+ return false, since StructureRareData only holds on to caches at present.
+ This may change in the future as more members are added to StructureRareData.
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::Structure):
+ (JSC::Structure::cloneRareDataFrom):
+ * runtime/StructureInlines.h:
+ (JSC::Structure::create):
+
+2013-03-15 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Roll out r145838
+ https://bugs.webkit.org/show_bug.cgi?id=112458
+
+ Unreviewed. Requested by Filip Pizlo.
+
+ * CMakeLists.txt:
+ * DerivedSources.make:
+ * DerivedSources.pri:
+ * GNUmakefile.list.am:
+ * dfg/DFGOperations.cpp:
+ * interpreter/CallFrame.h:
+ (JSC::ExecState::objectPrototypeTable):
+ * jit/JITStubs.cpp:
+ (JSC::getByVal):
+ * llint/LLIntSlowPaths.cpp:
+ (JSC::LLInt::getByVal):
+ * runtime/CommonIdentifiers.h:
+ * runtime/JSCell.cpp:
+ (JSC):
+ * runtime/JSCell.h:
+ (JSCell):
+ * runtime/JSCellInlines.h:
+ (JSC):
+ (JSC::JSCell::fastGetOwnProperty):
+ * runtime/JSGlobalData.cpp:
+ (JSC):
+ (JSC::JSGlobalData::JSGlobalData):
+ (JSC::JSGlobalData::~JSGlobalData):
+ * runtime/JSGlobalData.h:
+ (JSGlobalData):
+ * runtime/JSObject.cpp:
+ (JSC):
+ * runtime/JSObject.h:
+ (JSObject):
+ (JSC):
+ * runtime/Lookup.cpp:
+ (JSC::setUpStaticFunctionSlot):
+ * runtime/ObjectPrototype.cpp:
+ (JSC):
+ (JSC::ObjectPrototype::finishCreation):
+ (JSC::ObjectPrototype::getOwnPropertySlot):
+ (JSC::ObjectPrototype::getOwnPropertyDescriptor):
+ * runtime/ObjectPrototype.h:
+ (JSC::ObjectPrototype::create):
+ (ObjectPrototype):
+ * runtime/PropertyMapHashTable.h:
+ (JSC::PropertyTable::findWithString):
+ * runtime/Structure.h:
+ (Structure):
+ * runtime/StructureInlines.h:
+ (JSC::Structure::get):
+
+2013-03-15 Michael Saboff <msaboff@apple.com>
+
+ Cleanup of DFG and Baseline JIT debugging code
+ https://bugs.webkit.org/show_bug.cgi?id=111871
+
+ Reviewed by Geoffrey Garen.
+
+ Fixed various debug related issue in baseline and DFG JITs. See below.
+
+ * dfg/DFGRepatch.cpp:
+ (JSC::DFG::dfgLinkClosureCall): Used pointerDump() to handle when calleeCodeBlock is NULL.
+ * dfg/DFGScratchRegisterAllocator.h: Now use ScratchBuffer::activeLengthPtr() to get
+ pointer to scratch register length.
+ (JSC::DFG::ScratchRegisterAllocator::preserveUsedRegistersToScratchBuffer):
+ (JSC::DFG::ScratchRegisterAllocator::restoreUsedRegistersFromScratchBuffer):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::checkConsistency): Added missing case labels for DataFormatOSRMarker,
+ DataFormatDead, and DataFormatArguments and made them RELEASE_ASSERT_NOT_REACHED();
+ * jit/JITCall.cpp:
+ (JSC::JIT::privateCompileClosureCall): Used pointerDump() to handle when calleeCodeBlock is NULL.
+ * jit/JITCall32_64.cpp:
+ (JSC::JIT::privateCompileClosureCall): Used pointerDump() to handle when calleeCodeBlock is NULL.
+ * runtime/JSGlobalData.h:
+ (JSC::ScratchBuffer::ScratchBuffer): Fixed buffer allocation alignment to
+ be on a double boundary.
+ (JSC::ScratchBuffer::setActiveLength):
+ (JSC::ScratchBuffer::activeLength):
+ (JSC::ScratchBuffer::activeLengthPtr):
+
+2013-03-15 Michael Saboff <msaboff@apple.com>
+
+ Add runtime check for improper register allocations in DFG
+ https://bugs.webkit.org/show_bug.cgi?id=112380
+
+ Reviewed by Geoffrey Garen.
+
+ Added framework to check for register allocation within a branch source - target range. All register allocations
+ are saved using the offset in the code stream where the allocation occurred. Later when a jump is linked, the
+ currently saved register allocations are checked to make sure that they didn't occur in the range of code that was
+ jumped over. This protects against the case where an allocation could have spilled register contents to free up
+ a register and that spill only occurs on one path of a many through the code. A subsequent fill of the spilled
+ register may load garbage. See https://bugs.webkit.org/show_bug.cgi?id=111777 for one such bug.
+ This code is protected by the compile time check of #if ENABLE(DFG_REGISTER_ALLOCATION_VALIDATION).
+ The check is only done during the processing of SpeculativeJIT::compile(Node* node) and its callees.
+
+ * assembler/AbstractMacroAssembler.h:
+ (JSC::AbstractMacroAssembler::Jump::link): Invoke register allocation checks using source and target of link.
+ (JSC::AbstractMacroAssembler::Jump::linkTo): Invoke register allocation checks using source and target of link.
+ (AbstractMacroAssembler):
+ (RegisterAllocationOffset): New helper class to store the instruction stream offset and compare against a
+ jump range.
+ (JSC::AbstractMacroAssembler::RegisterAllocationOffset::RegisterAllocationOffset):
+ (JSC::AbstractMacroAssembler::RegisterAllocationOffset::check):
+ (JSC::AbstractMacroAssembler::addRegisterAllocationAtOffset):
+ (JSC::AbstractMacroAssembler::clearRegisterAllocationOffsets):
+ (JSC::AbstractMacroAssembler::checkRegisterAllocationAgainstBranchRange):
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::allocate):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2013-03-14 Oliver Hunt <oliver@apple.com>
+
+ REGRESSION(r145000): Crash loading arstechnica.com when Safari Web Inspector is open
+ https://bugs.webkit.org/show_bug.cgi?id=111868
+
+ Reviewed by Antti Koivisto.
+
+ Don't allow non-local property lookup when the debugger is enabled.
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::resolve):
+
+2013-03-11 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: Objective-C functions exposed to JavaScript have the wrong type (object instead of function)
+ https://bugs.webkit.org/show_bug.cgi?id=105892
+
+ Reviewed by Geoffrey Garen.
+
+ Changed ObjCCallbackFunction to subclass JSCallbackFunction which already has all of the machinery to call
+ functions using the C API. Since ObjCCallbackFunction is now a JSCell, we changed the old implementation of
+ ObjCCallbackFunction to be the internal implementation and keep track of all the proper data so that we
+ don't have to put all of that in the header, which will now be included from C++ files (e.g. JSGlobalObject.cpp).
+
+ * API/JSCallbackFunction.cpp: Change JSCallbackFunction to allow subclassing. Originally it was internally
+ passing its own Structure up the chain of constructors, but we now want to be able to pass other Structures as well.
+ (JSC::JSCallbackFunction::JSCallbackFunction):
+ (JSC::JSCallbackFunction::create):
+ * API/JSCallbackFunction.h:
+ (JSCallbackFunction):
+ * API/JSWrapperMap.mm: Changed interface to tryUnwrapBlock.
+ (tryUnwrapObjcObject):
+ * API/ObjCCallbackFunction.h:
+ (ObjCCallbackFunction): Moved into the JSC namespace, just like JSCallbackFunction.
+ (JSC::ObjCCallbackFunction::createStructure): Overridden so that the correct ClassInfo gets used since we have
+ a destructor.
+ (JSC::ObjCCallbackFunction::impl): Getter for the internal impl.
+ * API/ObjCCallbackFunction.mm:
+ (JSC::ObjCCallbackFunctionImpl::ObjCCallbackFunctionImpl): What used to be ObjCCallbackFunction is now
+ ObjCCallbackFunctionImpl. It handles the Objective-C specific parts of managing callback functions.
+ (JSC::ObjCCallbackFunctionImpl::~ObjCCallbackFunctionImpl):
+ (JSC::objCCallbackFunctionCallAsFunction): Same as the old one, but now it casts to ObjCCallbackFunction and grabs the impl
+ rather than using JSObjectGetPrivate.
+ (JSC::ObjCCallbackFunction::ObjCCallbackFunction): New bits to allow being part of the JSCell hierarchy.
+ (JSC::ObjCCallbackFunction::create):
+ (JSC::ObjCCallbackFunction::destroy):
+ (JSC::ObjCCallbackFunctionImpl::call): Handles the actual invocation, just like it used to.
+ (objCCallbackFunctionForInvocation):
+ (tryUnwrapBlock): Changed to check the ClassInfo for inheritance directly, rather than going through the C API call.
+ * API/tests/testapi.mm: Added new test to make sure that doing Function.prototype.toString.call(f) won't result in
+ an error when f is an Objective-C method or block underneath the covers.
+ * runtime/JSGlobalObject.cpp: Added new Structure for ObjCCallbackFunction.
+ (JSC::JSGlobalObject::reset):
+ (JSC::JSGlobalObject::visitChildren):
+ * runtime/JSGlobalObject.h:
+ (JSGlobalObject):
+ (JSC::JSGlobalObject::objcCallbackFunctionStructure):
+
+2013-03-14 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: Nested dictionaries are not converted properly in the Objective-C binding
+ https://bugs.webkit.org/show_bug.cgi?id=112377
+
+ Reviewed by Oliver Hunt.
+
+ Accidental reassignment of the root task in the container conversion logic was causing the last
+ array or dictionary processed to be returned in the case of nested containers.
+
+ * API/JSValue.mm:
+ (containerValueToObject):
+ * API/tests/testapi.mm:
+
+2013-03-13 Filip Pizlo <fpizlo@apple.com>
+
+ JSObject fast by-string access optimizations should work even on the prototype chain, and even when the result is undefined
+ https://bugs.webkit.org/show_bug.cgi?id=112233
+
+ Reviewed by Oliver Hunt.
+
+ Extended the existing fast access path for String keys to work over the entire prototype chain,
+ not just the self access case. This will fail as soon as it sees an object that intercepts
+ getOwnPropertySlot, so this patch also ensures that ObjectPrototype does not fall into that
+ category. This is accomplished by making ObjectPrototype eagerly reify all of its properties.
+ This is safe for ObjectPrototype because it's so common and we expect all of its properties to
+ be reified for any interesting programs anyway. A new idiom for adding native functions to
+ prototypes is introduced, which ought to work well for any other prototypes that we wish to do
+ this conversion for.
+
+ This is a >60% speed-up in the case that you frequently do by-string lookups that "miss", i.e.
+ they don't turn up anything.
+
+ * CMakeLists.txt:
+ * DerivedSources.make:
+ * DerivedSources.pri:
+ * GNUmakefile.list.am:
+ * dfg/DFGOperations.cpp:
+ * interpreter/CallFrame.h:
+ (JSC::ExecState::objectConstructorTable):
+ * jit/JITStubs.cpp:
+ (JSC::getByVal):
+ * llint/LLIntSlowPaths.cpp:
+ (JSC::LLInt::getByVal):
+ * runtime/CommonIdentifiers.h:
+ * runtime/JSCell.cpp:
+ (JSC::JSCell::getByStringSlow):
+ (JSC):
+ * runtime/JSCell.h:
+ (JSCell):
+ * runtime/JSCellInlines.h:
+ (JSC):
+ (JSC::JSCell::getByStringAndKey):
+ (JSC::JSCell::getByString):
+ * runtime/JSGlobalData.cpp:
+ (JSC):
+ (JSC::JSGlobalData::JSGlobalData):
+ (JSC::JSGlobalData::~JSGlobalData):
+ * runtime/JSGlobalData.h:
+ (JSGlobalData):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::putDirectNativeFunction):
+ (JSC):
+ * runtime/JSObject.h:
+ (JSObject):
+ (JSC):
+ * runtime/Lookup.cpp:
+ (JSC::setUpStaticFunctionSlot):
+ * runtime/ObjectPrototype.cpp:
+ (JSC):
+ (JSC::ObjectPrototype::finishCreation):
+ (JSC::ObjectPrototype::create):
+ * runtime/ObjectPrototype.h:
+ (ObjectPrototype):
+ * runtime/PropertyMapHashTable.h:
+ (JSC::PropertyTable::findWithString):
+ * runtime/Structure.h:
+ (Structure):
+ * runtime/StructureInlines.h:
+ (JSC::Structure::get):
+ (JSC):
+
+2013-03-13 Filip Pizlo <fpizlo@apple.com>
+
+ DFG bytecode parser is too aggressive about getting rid of GetLocals on captured variables
+ https://bugs.webkit.org/show_bug.cgi?id=112287
+ <rdar://problem/13342340>
+
+ Reviewed by Oliver Hunt.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dumpBytecode):
+ (JSC::CodeBlock::finalizeUnconditionally):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::getLocal):
+
+2013-03-13 Ryosuke Niwa <rniwa@webkit.org>
+
+ Threaded HTML Parser is missing feature define flags in all but Chromium port's build files
+ https://bugs.webkit.org/show_bug.cgi?id=112277
+
+ Reviewed by Adam Barth.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2013-03-13 Csaba Osztrogonác <ossy@webkit.org>
+
+ LLINT C loop warning fix for GCC
+ https://bugs.webkit.org/show_bug.cgi?id=112145
+
+ Reviewed by Filip Pizlo.
+
+ * llint/LowLevelInterpreter.cpp:
+ (JSC::CLoop::execute):
+
+2013-02-13 Simon Hausmann <simon.hausmann@digia.com>
+
+ Add support for convenient conversion from JSStringRef to QString
+ https://bugs.webkit.org/show_bug.cgi?id=109694
+
+ Reviewed by Allan Sandfeld Jensen.
+
+ Add JSStringCopyQString helper function that allows for the convenient
+ extraction of a QString out of a JSStringRef.
+
+ * API/JSStringRefQt.cpp: Added.
+ (JSStringCopyQString):
+ * API/JSStringRefQt.h: Added.
+ * API/OpaqueJSString.h:
+ (OpaqueJSString):
+ (OpaqueJSString::qString):
+ (OpaqueJSString::OpaqueJSString):
+ * Target.pri:
+
+2013-03-13 Peter Gal <galpeter@inf.u-szeged.hu>
+
+ Token 'not' is ignored in the offlineasm.
+ https://bugs.webkit.org/show_bug.cgi?id=111568
+
+ Reviewed by Filip Pizlo.
+
+ * offlineasm/parser.rb: Build the Not AST node if the 'not' token is found.
+
+2013-03-12 Tim Horton <timothy_horton@apple.com>
+
+ WTF uses macros for exports. Try to fix the Windows build. Unreviewed.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+
+2013-03-12 Filip Pizlo <fpizlo@apple.com>
+
+ Array.prototype.sort should at least try to be PTIME even when the array is in some bizarre mode
+ https://bugs.webkit.org/show_bug.cgi?id=112187
+ <rdar://problem/13393550>
+
+ Reviewed by Michael Saboff and Gavin Barraclough.
+
+ If we have an array-like object in crazy mode passed into Array.prototype.sort, and its length is large,
+ then first copy all elements into a separate, compact, un-holy array and sort that. Then copy back.
+ This means that sorting will be at worst O(n^2) in the actual number of things in the array, rather than
+ O(n^2) in the array's length.
+
+ * runtime/ArrayPrototype.cpp:
+ (JSC::attemptFastSort):
+ (JSC::performSlowSort):
+ (JSC):
+ (JSC::arrayProtoFuncSort):
+
+2013-03-12 Tim Horton <timothy_horton@apple.com>
+
+ Try to fix the Windows build.
+
+ Not reviewed.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+
+2013-03-12 Geoffrey Garen <ggaren@apple.com>
+
+ Try to fix the Windows build.
+
+ Not reviewed.
+
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+ Export a thing.
+
+2013-03-11 Oliver Hunt <oliver@apple.com>
+
+ Harden JSStringJoiner
+ https://bugs.webkit.org/show_bug.cgi?id=112093
+
+ Reviewed by Filip Pizlo.
+
+ Harden JSStringJoiner, make it use our CheckedArithmetic
+ class to simplify everything.
+
+ * runtime/JSStringJoiner.cpp:
+ (JSC::JSStringJoiner::build):
+ * runtime/JSStringJoiner.h:
+ (JSStringJoiner):
+ (JSC::JSStringJoiner::JSStringJoiner):
+ (JSC::JSStringJoiner::append):
+
+2013-03-12 Filip Pizlo <fpizlo@apple.com>
+
+ DFG generic array access cases should not be guarded by CheckStructure even of the profiling tells us that it could be
+ https://bugs.webkit.org/show_bug.cgi?id=112183
+
+ Reviewed by Oliver Hunt.
+
+ Slight speed-up on string-unpack-code.
+
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::findAndRemoveUnnecessaryStructureCheck):
+ (FixupPhase):
+ (JSC::DFG::FixupPhase::checkArray):
+ (JSC::DFG::FixupPhase::blessArrayOperation):
+
+2013-03-12 Gabor Rapcsanyi <rgabor@webkit.org>
+
+ https://bugs.webkit.org/show_bug.cgi?id=112141
+ LLInt CLoop backend misses Double2Ints() on 32bit architectures
+
+ Reviewed by Filip Pizlo.
+
+ Implement Double2Ints() in CLoop backend of LLInt on 32bit architectures.
+
+ * llint/LowLevelInterpreter.cpp:
+ (LLInt):
+ (JSC::LLInt::Double2Ints):
+ * offlineasm/cloop.rb:
+
+2013-03-12 Gabor Rapcsanyi <rgabor@webkit.org>
+
+ Making more sophisticated cache flush on ARM Linux platform
+ https://bugs.webkit.org/show_bug.cgi?id=111854
+
+ Reviewed by Zoltan Herczeg.
+
+ The cache flush on ARM Linux invalidates whole pages
+ instead of just the required area.
+
+ * assembler/ARMAssembler.h:
+ (ARMAssembler):
+ (JSC::ARMAssembler::linuxPageFlush):
+ (JSC::ARMAssembler::cacheFlush):
+ * assembler/ARMv7Assembler.h:
+ (ARMv7Assembler):
+ (JSC::ARMv7Assembler::linuxPageFlush):
+ (JSC::ARMv7Assembler::cacheFlush):
+
+2013-03-12 Gabor Rapcsanyi <rgabor@webkit.org>
+
+ Renaming the armv7.rb LLINT backend to arm.rb
+ https://bugs.webkit.org/show_bug.cgi?id=110565
+
+ Reviewed by Zoltan Herczeg.
+
+ This is the first step of a unified ARM backend for
+ all ARM 32 bit architectures in LLInt.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.gypi:
+ * LLIntOffsetsExtractor.pro:
+ * offlineasm/arm.rb: Copied from Source/JavaScriptCore/offlineasm/armv7.rb.
+ * offlineasm/armv7.rb: Removed.
+ * offlineasm/backends.rb:
+ * offlineasm/risc.rb:
+
+2013-03-12 Csaba Osztrogonác <ossy@webkit.org>
+
+ REGRESSION(r145482): It broke 33 jsc tests and zillion layout tests on all platform
+ https://bugs.webkit.org/show_bug.cgi?id=112112
+
+ Reviewed by Oliver Hunt.
+
+ Rolling out https://trac.webkit.org/changeset/145482 to unbreak the bots.
+
+ * runtime/JSStringJoiner.cpp:
+ (JSC::JSStringJoiner::build):
+ * runtime/JSStringJoiner.h:
+ (JSStringJoiner):
+ (JSC::JSStringJoiner::JSStringJoiner):
+ (JSC::JSStringJoiner::append):
+
+2013-03-12 Filip Pizlo <fpizlo@apple.com>
+
+ DFG prediction propagation phase should not rerun forward propagation if double voting has already converged
+ https://bugs.webkit.org/show_bug.cgi?id=111920
+
+ Reviewed by Oliver Hunt.
+
+ I don't know why we weren't exiting early after double voting if !m_changed.
+
+ This change also removes backwards propagation from the voting fixpoint, since at that
+ point short-circuiting loops is probably not particularly profitable. Profiling shows
+ that this reduces the time spent in prediction propagation even further.
+
+ This change appears to be a 1% SunSpider speed-up.
+
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::run):
+
+2013-03-11 Filip Pizlo <fpizlo@apple.com>
+
+ DFG overflow check elimination is too smart for its own good
+ https://bugs.webkit.org/show_bug.cgi?id=111832
+
+ Reviewed by Oliver Hunt and Gavin Barraclough.
+
+ Rolling this back in after fixing accidental misuse of JSValue. The code was doing value < someInt
+ rather than value.asInt32() < someInt. This "worked" when isWithinPowerOfTwo wasn't templatized.
+ It worked by always being false and always disabling the relvant optimization.
+
+ This improves overflow check elimination in three ways:
+
+ 1) It reduces the amount of time the compiler will spend doing it.
+
+ 2) It fixes bugs where overflow check elimination was overzealous. Precisely, for a binary operation
+ over @a and @b where both @a and @b will type check that their inputs (@a->children, @b->children)
+ are int32's and then perform a possibly-overflowing operation, we must be careful not to assume
+ that @a's non-int32 parts don't matter if at the point that @a runs we have as yet not proved that
+ @b->children are int32's and that hence @b might produce a large enough result that doubles would
+ start chopping low bits. The specific implication of this is that for a binary operation to not
+ propagate that it cares about non-int32 parts (NodeUsedAsNumber), we must prove that at least one
+ of the inputs is guaranteed to produce a result within 2^32 and that there won't be a tower of such
+ operations large enough to ultimately produce a double greater than 2^52 (roughly). We achieve the
+ latter by disabling this optimization for very large basic blocks. It's noteworthy that blocks that
+ large won't even make it into the DFG currently.
+
+ 3) It makes the overflow check elimination more precise for cases where the inputs to an Add or Sub
+ are the outputs of a bit-op. For example in (@a + (@b | 0)) | 0, we don't need to propagate
+ NodeUsedAsNumber to either @a or @b.
+
+ This is neutral on V8v7 and a slight speed-up on compile time benchmarks.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * dfg/DFGArrayMode.cpp:
+ (JSC::DFG::ArrayMode::refine):
+ * dfg/DFGBackwardsPropagationPhase.cpp: Added.
+ (DFG):
+ (BackwardsPropagationPhase):
+ (JSC::DFG::BackwardsPropagationPhase::BackwardsPropagationPhase):
+ (JSC::DFG::BackwardsPropagationPhase::run):
+ (JSC::DFG::BackwardsPropagationPhase::isNotNegZero):
+ (JSC::DFG::BackwardsPropagationPhase::isNotZero):
+ (JSC::DFG::BackwardsPropagationPhase::isWithinPowerOfTwoForConstant):
+ (JSC::DFG::BackwardsPropagationPhase::isWithinPowerOfTwoNonRecursive):
+ (JSC::DFG::BackwardsPropagationPhase::isWithinPowerOfTwo):
+ (JSC::DFG::BackwardsPropagationPhase::mergeDefaultFlags):
+ (JSC::DFG::BackwardsPropagationPhase::propagate):
+ (JSC::DFG::performBackwardsPropagation):
+ * dfg/DFGBackwardsPropagationPhase.h: Added.
+ (DFG):
+ * dfg/DFGCPSRethreadingPhase.cpp:
+ (JSC::DFG::CPSRethreadingPhase::run):
+ (JSC::DFG::CPSRethreadingPhase::clearIsLoadedFrom):
+ (CPSRethreadingPhase):
+ (JSC::DFG::CPSRethreadingPhase::canonicalizeGetLocalFor):
+ (JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocalFor):
+ * dfg/DFGDriver.cpp:
+ (JSC::DFG::compile):
+ * dfg/DFGGraph.cpp:
+ (JSC::DFG::Graph::dump):
+ * dfg/DFGNodeFlags.cpp:
+ (JSC::DFG::dumpNodeFlags):
+ (DFG):
+ * dfg/DFGNodeFlags.h:
+ (DFG):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (PredictionPropagationPhase):
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGUnificationPhase.cpp:
+ (JSC::DFG::UnificationPhase::run):
+ * dfg/DFGVariableAccessData.h:
+ (JSC::DFG::VariableAccessData::VariableAccessData):
+ (JSC::DFG::VariableAccessData::mergeIsLoadedFrom):
+ (VariableAccessData):
+ (JSC::DFG::VariableAccessData::setIsLoadedFrom):
+ (JSC::DFG::VariableAccessData::isLoadedFrom):
+
+2013-03-11 Oliver Hunt <oliver@apple.com>
+
+ Harden JSStringJoiner
+ https://bugs.webkit.org/show_bug.cgi?id=112093
+
+ Reviewed by Filip Pizlo.
+
+ Harden JSStringJoiner, make it use our CheckedArithmetic
+ class to simplify everything.
+
+ * runtime/JSStringJoiner.cpp:
+ (JSC::JSStringJoiner::build):
+ * runtime/JSStringJoiner.h:
+ (JSStringJoiner):
+ (JSC::JSStringJoiner::JSStringJoiner):
+ (JSC::JSStringJoiner::append):
+
+2013-03-11 Michael Saboff <msaboff@apple.com>
+
+ Crash beneath operationCreateInlinedArguments running fast/js/dfg-create-inlined-arguments-in-closure-inline.html (32-bit only)
+ https://bugs.webkit.org/show_bug.cgi?id=112067
+
+ Reviewed by Geoffrey Garen.
+
+ We weren't setting the tag in SetCallee. Therefore set it to CellTag.
+
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2013-03-11 Oliver Hunt <oliver@apple.com>
+
+ Make SegmentedVector Noncopyable
+ https://bugs.webkit.org/show_bug.cgi?id=112059
+
+ Reviewed by Geoffrey Garen.
+
+ Copying a SegmentedVector is very expensive, and really shouldn't
+ be necessary. So I've taken the one place where we currently copy
+ and replaced it with a regular Vector, and replaced the address
+ dependent logic with a indexing ref instead.
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::newLabelScope):
+ (JSC::BytecodeGenerator::emitComplexJumpScopes):
+ * bytecompiler/BytecodeGenerator.h:
+ (BytecodeGenerator):
+ * bytecompiler/LabelScope.h:
+ (JSC):
+ (JSC::LabelScopePtr::LabelScopePtr):
+ (LabelScopePtr):
+ (JSC::LabelScopePtr::operator=):
+ (JSC::LabelScopePtr::~LabelScopePtr):
+ (JSC::LabelScopePtr::operator*):
+ (JSC::LabelScopePtr::operator->):
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::DoWhileNode::emitBytecode):
+ (JSC::WhileNode::emitBytecode):
+ (JSC::ForNode::emitBytecode):
+ (JSC::ForInNode::emitBytecode):
+ (JSC::SwitchNode::emitBytecode):
+ (JSC::LabelNode::emitBytecode):
+
+2013-03-10 Andreas Kling <akling@apple.com>
+
+ SpeculativeJIT should use OwnPtr<SlowPathGenerator>.
+ <http://webkit.org/b/111942>
+
+ Reviewed by Anders Carlsson.
+
+ There's no need to include DFGSlowPathGenerator.h from the header as long as the destructor is out-of-line,
+ so let's use OwnPtr instead of raw pointers + deleteAllValues().
+
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::~SpeculativeJIT):
+ (JSC::DFG::SpeculativeJIT::addSlowPathGenerator):
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+
+2013-03-09 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r145299.
+ http://trac.webkit.org/changeset/145299
+ https://bugs.webkit.org/show_bug.cgi?id=111928
+
+ compilation failure with recent clang
+ (DFGBackwardsPropagationPhase.cpp:132:35: error: comparison of
+ constant 10 with expression of type 'bool' is always false)
+ (Requested by thorton on #webkit).
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * dfg/DFGArrayMode.cpp:
+ (JSC::DFG::ArrayMode::refine):
+ * dfg/DFGBackwardsPropagationPhase.cpp: Removed.
+ * dfg/DFGBackwardsPropagationPhase.h: Removed.
+ * dfg/DFGCPSRethreadingPhase.cpp:
+ (JSC::DFG::CPSRethreadingPhase::run):
+ (CPSRethreadingPhase):
+ (JSC::DFG::CPSRethreadingPhase::canonicalizeGetLocalFor):
+ (JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocalFor):
+ * dfg/DFGDriver.cpp:
+ (JSC::DFG::compile):
+ * dfg/DFGGraph.cpp:
+ (JSC::DFG::Graph::dump):
+ * dfg/DFGNodeFlags.cpp:
+ (JSC::DFG::nodeFlagsAsString):
+ (DFG):
+ * dfg/DFGNodeFlags.h:
+ (DFG):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::isNotNegZero):
+ (PredictionPropagationPhase):
+ (JSC::DFG::PredictionPropagationPhase::isNotZero):
+ (JSC::DFG::PredictionPropagationPhase::isWithinPowerOfTwoForConstant):
+ (JSC::DFG::PredictionPropagationPhase::isWithinPowerOfTwoNonRecursive):
+ (JSC::DFG::PredictionPropagationPhase::isWithinPowerOfTwo):
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ (JSC::DFG::PredictionPropagationPhase::mergeDefaultFlags):
+ * dfg/DFGUnificationPhase.cpp:
+ (JSC::DFG::UnificationPhase::run):
+ * dfg/DFGVariableAccessData.h:
+ (JSC::DFG::VariableAccessData::VariableAccessData):
+ (VariableAccessData):
+
+2013-03-08 Filip Pizlo <fpizlo@apple.com>
+
+ DFG overflow check elimination is too smart for its own good
+ https://bugs.webkit.org/show_bug.cgi?id=111832
+
+ Reviewed by Oliver Hunt and Gavin Barraclough.
+
+ This improves overflow check elimination in three ways:
+
+ 1) It reduces the amount of time the compiler will spend doing it.
+
+ 2) It fixes bugs where overflow check elimination was overzealous. Precisely, for a binary operation
+ over @a and @b where both @a and @b will type check that their inputs (@a->children, @b->children)
+ are int32's and then perform a possibly-overflowing operation, we must be careful not to assume
+ that @a's non-int32 parts don't matter if at the point that @a runs we have as yet not proved that
+ @b->children are int32's and that hence @b might produce a large enough result that doubles would
+ start chopping low bits. The specific implication of this is that for a binary operation to not
+ propagate that it cares about non-int32 parts (NodeUsedAsNumber), we must prove that at least one
+ of the inputs is guaranteed to produce a result within 2^32 and that there won't be a tower of such
+ operations large enough to ultimately produce a double greater than 2^52 (roughly). We achieve the
+ latter by disabling this optimization for very large basic blocks. It's noteworthy that blocks that
+ large won't even make it into the DFG currently.
+
+ 3) It makes the overflow check elimination more precise for cases where the inputs to an Add or Sub
+ are the outputs of a bit-op. For example in (@a + (@b | 0)) | 0, we don't need to propagate
+ NodeUsedAsNumber to either @a or @b.
+
+ This is neutral on V8v7 and a slight speed-up on compile time benchmarks.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * dfg/DFGArrayMode.cpp:
+ (JSC::DFG::ArrayMode::refine):
+ * dfg/DFGBackwardsPropagationPhase.cpp: Added.
+ (DFG):
+ (BackwardsPropagationPhase):
+ (JSC::DFG::BackwardsPropagationPhase::BackwardsPropagationPhase):
+ (JSC::DFG::BackwardsPropagationPhase::run):
+ (JSC::DFG::BackwardsPropagationPhase::isNotNegZero):
+ (JSC::DFG::BackwardsPropagationPhase::isNotZero):
+ (JSC::DFG::BackwardsPropagationPhase::isWithinPowerOfTwoForConstant):
+ (JSC::DFG::BackwardsPropagationPhase::isWithinPowerOfTwoNonRecursive):
+ (JSC::DFG::BackwardsPropagationPhase::isWithinPowerOfTwo):
+ (JSC::DFG::BackwardsPropagationPhase::mergeDefaultFlags):
+ (JSC::DFG::BackwardsPropagationPhase::propagate):
+ (JSC::DFG::performBackwardsPropagation):
+ * dfg/DFGBackwardsPropagationPhase.h: Added.
+ (DFG):
+ * dfg/DFGCPSRethreadingPhase.cpp:
+ (JSC::DFG::CPSRethreadingPhase::run):
+ (JSC::DFG::CPSRethreadingPhase::clearIsLoadedFrom):
+ (CPSRethreadingPhase):
+ (JSC::DFG::CPSRethreadingPhase::canonicalizeGetLocalFor):
+ (JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocalFor):
+ * dfg/DFGDriver.cpp:
+ (JSC::DFG::compile):
+ * dfg/DFGGraph.cpp:
+ (JSC::DFG::Graph::dump):
+ * dfg/DFGNodeFlags.cpp:
+ (JSC::DFG::dumpNodeFlags):
+ (DFG):
+ * dfg/DFGNodeFlags.h:
+ (DFG):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (PredictionPropagationPhase):
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGUnificationPhase.cpp:
+ (JSC::DFG::UnificationPhase::run):
+ * dfg/DFGVariableAccessData.h:
+ (JSC::DFG::VariableAccessData::VariableAccessData):
+ (JSC::DFG::VariableAccessData::mergeIsLoadedFrom):
+ (VariableAccessData):
+ (JSC::DFG::VariableAccessData::setIsLoadedFrom):
+ (JSC::DFG::VariableAccessData::isLoadedFrom):
+
+2013-03-08 Roger Fong <roger_fong@apple.com>
+
+ Makefile fixes.
+
+ * JavaScriptCore.vcxproj/JavaScriptCore.make:
+
+2013-03-08 Gabor Rapcsanyi <rgabor@webkit.org>
+
+ Cache flush problem on ARMv7 JSC
+ https://bugs.webkit.org/show_bug.cgi?id=111441
+
+ Reviewed by Zoltan Herczeg.
+
+ Not proper cache flush causing random crashes on ARMv7 Linux with V8 tests.
+ The problem is similar to https://bugs.webkit.org/show_bug.cgi?id=77712.
+ Change the cache fulsh mechanism similar to ARM traditinal and revert the
+ temporary fix.
+
+ * assembler/ARMv7Assembler.h:
+ (JSC::ARMv7Assembler::cacheFlush):
+
+2013-03-07 Geoffrey Garen <ggaren@apple.com>
+
+ REGRESSION (r143759): 40% JSBench regression, 20% Octane/closure regression, 40% Octane/jquery regression, 2% Octane regression
+ https://bugs.webkit.org/show_bug.cgi?id=111797
+
+ Reviewed by Oliver Hunt.
+
+ The bot's testing configuration stresses the cache's starting guess
+ of 1MB.
+
+ This patch removes any starting guess, and just uses wall clock time
+ to discover the initial working set size of an app, in code size.
+
+ * runtime/CodeCache.cpp:
+ (JSC::CodeCacheMap::pruneSlowCase): Update our timer as we go.
+
+ Also fixed a bug where pruning from 0 to 0 would hang -- that case is
+ a possibility now that we start with a capacity of 0.
+
+ * runtime/CodeCache.h:
+ (CodeCacheMap):
+ (JSC::CodeCacheMap::CodeCacheMap):
+ (JSC::CodeCacheMap::add):
+ (JSC::CodeCacheMap::prune): Don't prune if we're in the middle of
+ discovering the working set size of an app, in code size.
+
+2013-03-07 Michael Saboff <msaboff@apple.com>
+
+ Crash when updating predictions below JSC::arrayProtoFuncForEach on tuaw.com article
+ https://bugs.webkit.org/show_bug.cgi?id=111777
+
+ Reviewed by Filip Pizlo.
+
+ Moved register allocations to be above any generated control flow so that any
+ resulting spill would be visible to all subsequently generated code.
+
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2013-03-07 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should not get corrupted IR in the case of code that is dead, unreachable, and contains a chain of nodes that use each other in an untyped way
+ https://bugs.webkit.org/show_bug.cgi?id=111783
+
+ Reviewed by Mark Hahnenberg.
+
+ Unreachable code is not touched by CFA and so thinks that even untyped uses are checked.
+ But dead untyped uses don't need checks and hence don't need to be Phantom'd. The DCE knew
+ this in findTypeCheckRoot() but not in eliminateIrrelevantPhantomChildren(), leading to a
+ Phantom node that had another Phantom node as one of its kids.
+
+ * dfg/DFGDCEPhase.cpp:
+ (JSC::DFG::DCEPhase::eliminateIrrelevantPhantomChildren):
+
+2013-03-07 Filip Pizlo <fpizlo@apple.com>
+
+ The DFG fixpoint is not strictly profitable, and should be straight-lined
+ https://bugs.webkit.org/show_bug.cgi?id=111764
+
+ Reviewed by Oliver Hunt and Geoffrey Garen.
+
+ The DFG previously ran optimizations to fixpoint because there exists a circular dependency:
+
+ CSE depends on CFG simplification: CFG simplification merges blocks, and CSE is block-local.
+
+ CFG simplification depends on CFA and constant folding: constant folding reveals branches on
+ constants.
+
+ CFA depends on CSE: CSE reveals must-alias relationships by proving that two operations
+ always produce identical values.
+
+ Arguments simplification also depends on CSE, but it ought not depend on anything else.
+
+ Hence we get a cycle like: CFA -> folding -> CFG -> CSE -> CFA.
+
+ Note that before we had sparse conditional CFA, we also had CFA depending on CFG. This ought
+ not be the case anymore: CFG simplification should not by itself lead to better CFA results.
+
+ My guess is that the weakest link in this cycle is CFG -> CSE. CSE cuts both ways: if you
+ CSE too much then you increase register pressure. Hence it's not clear that you always want
+ to CSE after simplifying control flow. This leads to an order of optimization as follows:
+
+ CSE -> arguments -> CFA -> folding -> CFG
+
+ This is a 2.5% speed-up on SunSpider, a 4% speed-up on V8Spider, a possible 0.3% slow-down
+ on V8v7, nothing on Kraken, and 1.2% speed-up in the JSRegress geomean. I'll take a 2.5%
+ speed-up over a 0.3% V8v7 speed-up.
+
+ * dfg/DFGDriver.cpp:
+ (JSC::DFG::compile):
+
+2013-03-07 Roger Fong <roger_fong@apple.com>
+
+ Build fix for AppleWin VS2010.
+
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
+
+2013-03-05 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: Need a good way to reference event handlers without causing cycles
+ https://bugs.webkit.org/show_bug.cgi?id=111088
+
+ Reviewed by Geoffrey Garen.
+
+ JSManagedValue is like a special kind of weak value. When you create a JSManagedValue, you can
+ supply an Objective-C object as its "owner". As long as the Objective-C owner object remains
+ alive and its wrapper remains accessible to the JSC garbage collector (e.g. by being marked by
+ the global object), the reference to the JavaScript value is strong. As soon as the Objective-C
+ owner is deallocated or its wrapper becomes inaccessible to the garbage collector, the reference
+ becomes weak.
+
+ If you do not supply an owner or you use the weakValueWithValue: convenience class method, the
+ returned JSManagedValue behaves as a normal weak reference.
+
+ This new class allows clients to maintain references to JavaScript values in the Objective-C
+ heap without creating reference cycles/leaking memory.
+
+ * API/JSAPIWrapperObject.cpp: Added.
+ (JSC):
+ (JSC::::createStructure):
+ (JSC::JSAPIWrapperObject::JSAPIWrapperObject): This is a special JSObject for the Objective-C API that knows
+ for the purposes of garbage collection/marking that it wraps an opaque Objective-C object.
+ (JSC::JSAPIWrapperObject::visitChildren): We add the pointer to the wrapped Objective-C object to the set of
+ opaque roots so that the weak handle owner for JSManagedValues can find it later.
+ * API/JSAPIWrapperObject.h: Added.
+ (JSC):
+ (JSAPIWrapperObject):
+ (JSC::JSAPIWrapperObject::wrappedObject):
+ (JSC::JSAPIWrapperObject::setWrappedObject):
+ * API/JSBase.cpp:
+ (JSSynchronousGarbageCollect):
+ * API/JSBasePrivate.h:
+ * API/JSCallbackObject.cpp:
+ (JSC):
+ * API/JSCallbackObject.h:
+ (JSC::JSCallbackObject::destroy): Moved this to the header so that we don't get link errors with JSAPIWrapperObject.
+ * API/JSContext.mm:
+ (-[JSContext initWithVirtualMachine:]): We weren't adding manually allocated/initialized JSVirtualMachine objects to
+ the global cache of virtual machines. The init methods handle this now rather than contextWithGlobalContextRef, since
+ not everyone is guaranteed to use the latter.
+ (-[JSContext initWithGlobalContextRef:]):
+ (+[JSContext contextWithGlobalContextRef:]):
+ * API/JSManagedValue.h: Added.
+ * API/JSManagedValue.mm: Added.
+ (JSManagedValueHandleOwner):
+ (managedValueHandleOwner):
+ (+[JSManagedValue weakValueWithValue:]):
+ (+[JSManagedValue managedValueWithValue:owner:]):
+ (-[JSManagedValue init]): We explicitly call the ARC entrypoints to initialize/get the weak owner field since we don't
+ use ARC when building our framework.
+ (-[JSManagedValue initWithValue:]):
+ (-[JSManagedValue initWithValue:owner:]):
+ (-[JSManagedValue dealloc]):
+ (-[JSManagedValue value]):
+ (-[JSManagedValue weakOwner]):
+ (JSManagedValueHandleOwner::isReachableFromOpaqueRoots): If the Objective-C owner is still alive (i.e. loading the weak field
+ returns non-nil) and that value was added to the set of opaque roots by the wrapper for that Objective-C owner, then the the
+ JSObject to which the JSManagedObject refers is still alive.
+ * API/JSObjectRef.cpp: We have to add explicit checks for the JSAPIWrapperObject, just like the other types of JSCallbackObjects.
+ (JSObjectGetPrivate):
+ (JSObjectSetPrivate):
+ (JSObjectGetPrivateProperty):
+ (JSObjectSetPrivateProperty):
+ (JSObjectDeletePrivateProperty):
+ * API/JSValue.mm:
+ (objectToValueWithoutCopy):
+ * API/JSValueRef.cpp:
+ (JSValueIsObjectOfClass):
+ * API/JSVirtualMachine.mm:
+ (-[JSVirtualMachine initWithContextGroupRef:]):
+ (+[JSVirtualMachine virtualMachineWithContextGroupRef:]):
+ * API/JSWrapperMap.mm:
+ (wrapperFinalize):
+ (makeWrapper): This is our own internal version of JSObjectMake which creates JSAPIWrapperObjects, the Obj-C API
+ version of JSCallbackObjects.
+ (createObjectWithCustomBrand):
+ (-[JSObjCClassInfo wrapperForObject:]):
+ (tryUnwrapObjcObject):
+ * API/JavaScriptCore.h:
+ * API/tests/testapi.mm: Added new tests for the strong and weak uses of JSManagedValue in the context of an
+ onclick handler for an Objective-C object inserted into a JSContext.
+ (-[TextXYZ setWeakOnclick:]):
+ (-[TextXYZ setOnclick:]):
+ (-[TextXYZ weakOnclick]):
+ (-[TextXYZ onclick]):
+ (-[TextXYZ click]):
+ * CMakeLists.txt: Various build system additions.
+ * GNUmakefile.list.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/JSGlobalObject.cpp: Added the new canonical Structure for the JSAPIWrapperObject class.
+ (JSC::JSGlobalObject::reset):
+ (JSC):
+ (JSC::JSGlobalObject::visitChildren):
+ * runtime/JSGlobalObject.h:
+ (JSGlobalObject):
+ (JSC::JSGlobalObject::objcWrapperObjectStructure):
+
+2013-03-06 Filip Pizlo <fpizlo@apple.com>
+
+ ConvertThis should be turned into Identity based on predictions in Fixup, rather than based on proofs in ConstantFolding
+ https://bugs.webkit.org/show_bug.cgi?id=111674
+
+ Reviewed by Oliver Hunt.
+
+ This gets rid of the speculated forms of ConvertThis in the backend, and has Fixup
+ convert them to either Identity(Object:@child) if the child is predicted object, or
+ Phantom(Other:@child) ; WeakJSConstant(global this object) if it's predicted Other.
+
+ The goal of this is to ensure that the optimization fixpoint doesn't create
+ Identity's, since doing so requires a rerun of CSE. So far this isn't a speed-up
+ but I'm hoping this will be a step towards reducing the need to rerun the fixpoint
+ so as to ultimately reduce compile times.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::executeEffects):
+ * dfg/DFGAssemblyHelpers.h:
+ (AssemblyHelpers):
+ * dfg/DFGConstantFoldingPhase.cpp:
+ (JSC::DFG::ConstantFoldingPhase::foldConstants):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ (FixupPhase):
+ (JSC::DFG::FixupPhase::observeUseKindOnNode):
+ (JSC::DFG::FixupPhase::setUseKindAndUnboxIfProfitable):
+ * dfg/DFGGraph.h:
+ (JSC::DFG::Graph::globalThisObjectFor):
+ (Graph):
+ * dfg/DFGNode.h:
+ (Node):
+ (JSC::DFG::Node::convertToIdentity):
+ (JSC::DFG::Node::convertToWeakConstant):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2013-03-07 Peter Gal <galpeter@inf.u-szeged.hu>
+
+ Children method in LLINT AST Not class should return [@child]
+ https://bugs.webkit.org/show_bug.cgi?id=90740
+
+ Reviewed by Filip Pizlo.
+
+ * offlineasm/ast.rb: Fixed the return value of the children method in the Not AST class.
+
+2013-03-05 Oliver Hunt <oliver@apple.com>
+
+ Bring back eager resolution of function scoped variables
+ https://bugs.webkit.org/show_bug.cgi?id=111497
+
+ Reviewed by Geoffrey Garen.
+
+ This reverts the get/put_scoped_var part of the great non-local
+ variable resolution refactoring. This still leaves all the lazy
+ variable resolution logic as it's necessary for global property
+ resolution, and i don't want to make the patch bigger than it
+ already is.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dumpBytecode):
+ (JSC::CodeBlock::CodeBlock):
+ * bytecode/CodeBlock.h:
+ (CodeBlock):
+ * bytecode/Opcode.h:
+ (JSC):
+ (JSC::padOpcodeName):
+ * bytecode/UnlinkedCodeBlock.cpp:
+ (JSC::generateFunctionCodeBlock):
+ (JSC::UnlinkedFunctionExecutable::codeBlockFor):
+ (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
+ * bytecode/UnlinkedCodeBlock.h:
+ (JSC):
+ (UnlinkedFunctionExecutable):
+ (UnlinkedCodeBlock):
+ (JSC::UnlinkedCodeBlock::usesGlobalObject):
+ (JSC::UnlinkedCodeBlock::setGlobalObjectRegister):
+ (JSC::UnlinkedCodeBlock::globalObjectRegister):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::ResolveResult::checkValidity):
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ (JSC::BytecodeGenerator::emitLoadGlobalObject):
+ (JSC):
+ (JSC::BytecodeGenerator::resolve):
+ (JSC::BytecodeGenerator::resolveConstDecl):
+ (JSC::BytecodeGenerator::emitResolve):
+ (JSC::BytecodeGenerator::emitResolveBase):
+ (JSC::BytecodeGenerator::emitResolveBaseForPut):
+ (JSC::BytecodeGenerator::emitResolveWithBaseForPut):
+ (JSC::BytecodeGenerator::emitResolveWithThis):
+ (JSC::BytecodeGenerator::emitGetStaticVar):
+ (JSC::BytecodeGenerator::emitPutStaticVar):
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::ResolveResult::lexicalResolve):
+ (JSC::ResolveResult::isStatic):
+ (JSC::ResolveResult::depth):
+ (JSC::ResolveResult::index):
+ (ResolveResult):
+ (JSC::ResolveResult::ResolveResult):
+ (BytecodeGenerator):
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::ResolveNode::isPure):
+ (JSC::FunctionCallResolveNode::emitBytecode):
+ (JSC::PostfixNode::emitResolve):
+ (JSC::TypeOfResolveNode::emitBytecode):
+ (JSC::PrefixNode::emitResolve):
+ (JSC::ReadModifyResolveNode::emitBytecode):
+ (JSC::AssignResolveNode::emitBytecode):
+ (JSC::ConstDeclNode::emitCodeSingle):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ * dfg/DFGCapabilities.cpp:
+ (JSC::DFG::debugFail):
+ * dfg/DFGCapabilities.h:
+ (JSC::DFG::canCompileOpcode):
+ (JSC::DFG::canInlineOpcode):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ * jit/JIT.h:
+ (JIT):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_get_scoped_var):
+ (JSC):
+ (JSC::JIT::emit_op_put_scoped_var):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::emit_op_get_scoped_var):
+ (JSC):
+ (JSC::JIT::emit_op_put_scoped_var):
+ * llint/LowLevelInterpreter32_64.asm:
+ * llint/LowLevelInterpreter64.asm:
+ * runtime/CodeCache.cpp:
+ (JSC::CodeCache::getCodeBlock):
+ (JSC::CodeCache::getProgramCodeBlock):
+ (JSC::CodeCache::getEvalCodeBlock):
+ * runtime/CodeCache.h:
+ (JSC):
+ (CodeCache):
+ * runtime/Executable.cpp:
+ (JSC::EvalExecutable::compileInternal):
+ (JSC::FunctionExecutable::produceCodeBlockFor):
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::createEvalCodeBlock):
+ * runtime/JSGlobalObject.h:
+ (JSGlobalObject):
+ * runtime/Options.cpp:
+ (JSC::Options::initialize):
+
+2013-03-06 Filip Pizlo <fpizlo@apple.com>
+
+ Unreviewed, roll out http://trac.webkit.org/changeset/144989
+
+ I think we want the assertion that I removed.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::merge):
+ (JSC::DFG::AbstractState::mergeVariableBetweenBlocks):
+ * dfg/DFGAbstractState.h:
+ (AbstractState):
+
+2013-03-06 Filip Pizlo <fpizlo@apple.com>
+
+ DFG::AbstractState::merge() is still more complicated than it needs to be
+ https://bugs.webkit.org/show_bug.cgi?id=111619
+
+ Reviewed by Mark Hahnenberg.
+
+ This method is the one place where we still do some minimal amount of liveness pruning, but the style with
+ which it is written is awkward, and it makes an assertion about variablesAtTail that will be invalidated
+ by https://bugs.webkit.org/show_bug.cgi?id=111539.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::merge):
+ (JSC::DFG::AbstractState::mergeVariableBetweenBlocks):
+ * dfg/DFGAbstractState.h:
+ (AbstractState):
+
+2013-03-06 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should not run full CSE after the optimization fixpoint, since it really just wants store elimination
+ https://bugs.webkit.org/show_bug.cgi?id=111536
+
+ Reviewed by Oliver Hunt and Mark Hahnenberg.
+
+ The fixpoint will do aggressive load elimination and pure CSE. There's no need to do it after the fixpoint.
+ On the other hand, the fixpoint does not profit from doing store elimination (except for SetLocal/Flush).
+ Previously we had CSE do both, and had it avoid doing some store elimination during the fixpoint by querying
+ the fixpoint state. This changes CSE to be templated on mode - either NormalCSE or StoreElimination - so
+ that we explicitly put it into one of those modes depending on where we call it from. The goal is to reduce
+ time spent doing load elimination after the fixpoint, since that is just wasted cycles.
+
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::CSEPhase):
+ (JSC::DFG::CSEPhase::run):
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ (JSC::DFG::CSEPhase::performBlockCSE):
+ (JSC::DFG::performCSE):
+ (DFG):
+ (JSC::DFG::performStoreElimination):
+ * dfg/DFGCSEPhase.h:
+ (DFG):
+ * dfg/DFGDriver.cpp:
+ (JSC::DFG::compile):
+
+2013-03-06 Andreas Kling <akling@apple.com>
+
+ Pack Structure members better.
+ <http://webkit.org/b/111593>
+ <rdar://problem/13359200>
+
+ Reviewed by Mark Hahnenberg.
+
+ Shrink Structure by 8 bytes (now at 104 bytes) on 64-bit by packing the members better.
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::Structure):
+ * runtime/Structure.h:
+ (Structure):
+
+2013-03-06 Andreas Kling <akling@apple.com>
+
+ Unreviewed, fix Windows build after r144910.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+
+2013-03-05 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should not check if nodes are shouldGenerate prior to DCE
+ https://bugs.webkit.org/show_bug.cgi?id=111520
+
+ Reviewed by Geoffrey Garen.
+
+ All nodes are live before DCE. We don't need to check that they aren't, because they
+ definitely will be.
+
+ * dfg/DFGArgumentsSimplificationPhase.cpp:
+ (JSC::DFG::ArgumentsSimplificationPhase::run):
+ * dfg/DFGCFAPhase.cpp:
+ (JSC::DFG::CFAPhase::performBlockCFA):
+ * dfg/DFGCFGSimplificationPhase.cpp:
+ (JSC::DFG::CFGSimplificationPhase::keepOperandAlive):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::pureCSE):
+ (JSC::DFG::CSEPhase::int32ToDoubleCSE):
+ (JSC::DFG::CSEPhase::constantCSE):
+ (JSC::DFG::CSEPhase::weakConstantCSE):
+ (JSC::DFG::CSEPhase::getCalleeLoadElimination):
+ (JSC::DFG::CSEPhase::getArrayLengthElimination):
+ (JSC::DFG::CSEPhase::globalVarLoadElimination):
+ (JSC::DFG::CSEPhase::scopedVarLoadElimination):
+ (JSC::DFG::CSEPhase::globalVarWatchpointElimination):
+ (JSC::DFG::CSEPhase::globalVarStoreElimination):
+ (JSC::DFG::CSEPhase::scopedVarStoreElimination):
+ (JSC::DFG::CSEPhase::getByValLoadElimination):
+ (JSC::DFG::CSEPhase::checkStructureElimination):
+ (JSC::DFG::CSEPhase::structureTransitionWatchpointElimination):
+ (JSC::DFG::CSEPhase::putStructureStoreElimination):
+ (JSC::DFG::CSEPhase::getByOffsetLoadElimination):
+ (JSC::DFG::CSEPhase::putByOffsetStoreElimination):
+ (JSC::DFG::CSEPhase::getPropertyStorageLoadElimination):
+ (JSC::DFG::CSEPhase::checkArrayElimination):
+ (JSC::DFG::CSEPhase::getIndexedPropertyStorageLoadElimination):
+ (JSC::DFG::CSEPhase::getMyScopeLoadElimination):
+ (JSC::DFG::CSEPhase::getLocalLoadElimination):
+ (JSC::DFG::CSEPhase::setLocalStoreElimination):
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ (JSC::DFG::FixupPhase::fixupSetLocalsInBlock):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGStructureCheckHoistingPhase.cpp:
+ (JSC::DFG::StructureCheckHoistingPhase::run):
+
+2013-03-06 Csaba Osztrogonác <ossy@webkit.org>
+
+ Fix unused parameter warnings in ARM assembler
+ https://bugs.webkit.org/show_bug.cgi?id=111433
+
+ Reviewed by Kentaro Hara.
+
+ * assembler/ARMAssembler.h: Remove unreachable revertJump() after r143346.
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::moveIntsToDouble): Remove unused scratch parameter instead of UNUSED_PARAM.
+ (JSC::MacroAssemblerARM::branchConvertDoubleToInt32): Remove unused fpTemp parameter.
+ (JSC::MacroAssemblerARM::revertJumpReplacementToPatchableBranchPtrWithPatch): Remove unused parameters.
+
+2013-03-06 Andreas Kling <akling@apple.com>
+
+ Unused Structure property tables waste 14MB on Membuster.
+ <http://webkit.org/b/110854>
+ <rdar://problem/13292104>
+
+ Reviewed by Geoffrey Garen.
+
+ Turn PropertyTable into a GC object and have Structure drop unpinned tables when marking.
+ 14 MB progression on Membuster3.
+
+ This time it should stick; I've been through all the tests with COLLECT_ON_EVERY_ALLOCATION.
+ The issue with the last version was that Structure::m_offset could be used uninitialized
+ when re-materializing a previously GC'd property table, causing some sanity checks to fail.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+
+ Added PropertyTable.cpp.
+
+ * runtime/PropertyTable.cpp: Added.
+ (JSC::PropertyTable::create):
+ (JSC::PropertyTable::clone):
+ (JSC::PropertyTable::PropertyTable):
+ (JSC::PropertyTable::destroy):
+ (JSC::PropertyTable::~PropertyTable):
+ (JSC::PropertyTable::visitChildren):
+
+ Moved marking of property table values here from Structure::visitChildren().
+
+ * runtime/WriteBarrier.h:
+ (JSC::WriteBarrierBase::get):
+
+ Move m_cell to a local before using it multiple times. This avoids a multiple-access race when
+ Structure::checkOffsetConsistency() is used in assertions on the main thread while a marking thread
+ zaps the property table.
+
+ * runtime/Structure.h:
+ (JSC::Structure::materializePropertyMapIfNecessary):
+ (JSC::Structure::materializePropertyMapIfNecessaryForPinning):
+ * runtime/StructureInlines.h:
+ (JSC::Structure::propertyTable):
+
+ Added a getter for the Structure's PropertyTable that ASSERTs GC currently isn't active.
+ Because GC can zap an unpinned property table at any time, it's not entirely safe to access it.
+ Renamed the variable itself to m_propertyTableUnsafe to force call sites into explaining themselves.
+
+ (JSC::Structure::putWillGrowOutOfLineStorage):
+ (JSC::Structure::checkOffsetConsistency):
+
+ Moved these out of Structure.h to break header dependency cycle between Structure/PropertyTable.
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::visitChildren):
+
+ Null out m_propertyTable if the table is unpinned. This'll cause the table to get GC'd.
+
+ (JSC::Structure::takePropertyTableOrCloneIfPinned):
+
+ Added for setting up the property table in a new transition, this code is now shared between
+ addPropertyTransition() and nonPropertyTransition().
+
+ * runtime/JSGlobalData.h:
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+
+ Add a global propertyTableStructure.
+
+ * runtime/PropertyMapHashTable.h:
+ (PropertyTable):
+ (JSC::PropertyTable::createStructure):
+ (JSC::PropertyTable::copy):
+
+ Make PropertyTable a GC object.
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::dumpStatistics):
+ (JSC::Structure::materializePropertyMap):
+ (JSC::Structure::despecifyDictionaryFunction):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::changePrototypeTransition):
+ (JSC::Structure::despecifyFunctionTransition):
+ (JSC::Structure::attributeChangeTransition):
+ (JSC::Structure::toDictionaryTransition):
+ (JSC::Structure::sealTransition):
+ (JSC::Structure::freezeTransition):
+ (JSC::Structure::preventExtensionsTransition):
+ (JSC::Structure::nonPropertyTransition):
+ (JSC::Structure::isSealed):
+ (JSC::Structure::isFrozen):
+ (JSC::Structure::flattenDictionaryStructure):
+ (JSC::Structure::pin):
+ (JSC::Structure::copyPropertyTable):
+ (JSC::Structure::copyPropertyTableForPinning):
+ (JSC::Structure::get):
+ (JSC::Structure::despecifyFunction):
+ (JSC::Structure::despecifyAllFunctions):
+ (JSC::Structure::putSpecificValue):
+ (JSC::Structure::remove):
+ (JSC::Structure::createPropertyMap):
+ (JSC::Structure::getPropertyNamesFromStructure):
+ (JSC::Structure::checkConsistency):
+
+2013-03-05 Filip Pizlo <fpizlo@apple.com>
+
+ Get rid of the invert argument to SpeculativeJIT::jumpSlowForUnwantedArrayMode
+ https://bugs.webkit.org/show_bug.cgi?id=105624
+
+ Reviewed by Oliver Hunt.
+
+ All callers pass invert = false, which is the default value of the argument. So, get
+ rid of the argument and fold away all code that checks it.
+
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::jumpSlowForUnwantedArrayMode):
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+
+2013-03-05 Filip Pizlo <fpizlo@apple.com>
+
+ Unreviewed, fix an incorrect comment. The comment was a holdover from a work-in-progress version of this code.
+
+ * dfg/DFGDCEPhase.cpp:
+ (JSC::DFG::DCEPhase::run):
+
+2013-03-04 Filip Pizlo <fpizlo@apple.com>
+
+ DFG DCE might eliminate checks unsoundly
+ https://bugs.webkit.org/show_bug.cgi?id=109389
+
+ Reviewed by Oliver Hunt.
+
+ This gets rid of all eager reference counting, and does all dead code elimination
+ in one phase - the DCEPhase. This phase also sets up the node reference counts,
+ which are then used not just for DCE but also register allocation and stack slot
+ allocation.
+
+ Doing this required a number of surgical changes in places that previously relied
+ on always having liveness information. For example, the structure check hoisting
+ phase must now consult whether a VariableAccessData is profitable for unboxing to
+ make sure that it doesn't try to do hoisting on set SetLocals. The arguments
+ simplification phase employs its own light-weight liveness analysis. Both phases
+ previously just used reference counts.
+
+ The largest change is that now, dead nodes get turned into Phantoms. Those
+ Phantoms will retain those child edges that are not proven. This ensures that any
+ type checks performed by a dead node remain even after the node is killed. On the
+ other hand, this Phantom conversion means that we need special handling for
+ SetLocal. I decided to make the four forms of SetLocal explicit:
+
+ MovHint(@a, rK): Just indicates that node @a contains the value that would have
+ now been placed into virtual register rK. Does not actually cause @a to be
+ stored into rK. This would have previously been a dead SetLocal with @a
+ being live. MovHints are always dead.
+
+ ZombieHint(rK): Indicates that at this point, register rK will contain a dead
+ value and OSR should put Undefined into it. This would have previously been
+ a dead SetLocal with @a being dead also. ZombieHints are always dead.
+
+ MovHintAndCheck(@a, rK): Identical to MovHint except @a is also type checked,
+ according to whatever UseKind the edge to @a has. The type check is always a
+ forward exit. MovHintAndChecks are always live, since they are
+ NodeMustGenerate. Previously this would have been a dead SetLocal with a
+ live @a, and the check would have disappeared. This is one of the bugs that
+ this patch solves.
+
+ SetLocal(@a, rK): This still does exactly what it does now, if the SetLocal is
+ live.
+
+ Basically this patch makes it so that dead SetLocals eventually decay to MovHint,
+ ZombieHint, or MovHintAndCheck depending on the situation. If the child @a is
+ also dead, then you get a ZombieHint. If the child @a is live but the SetLocal
+ has a type check and @a's type hasn't been proven to have that type then you get
+ a MovHintAndCheck. Otherwise you get a MovHint.
+
+ This is performance neutral.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::executeEffects):
+ (JSC::DFG::AbstractState::mergeStateAtTail):
+ * dfg/DFGArgumentsSimplificationPhase.cpp:
+ (JSC::DFG::ArgumentsSimplificationPhase::run):
+ (ArgumentsSimplificationPhase):
+ (JSC::DFG::ArgumentsSimplificationPhase::removeArgumentsReferencingPhantomChild):
+ * dfg/DFGBasicBlock.h:
+ (BasicBlock):
+ * dfg/DFGBasicBlockInlines.h:
+ (DFG):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::addToGraph):
+ (JSC::DFG::ByteCodeParser::insertPhiNode):
+ (JSC::DFG::ByteCodeParser::emitFunctionChecks):
+ * dfg/DFGCFAPhase.cpp:
+ (JSC::DFG::CFAPhase::run):
+ * dfg/DFGCFGSimplificationPhase.cpp:
+ (JSC::DFG::CFGSimplificationPhase::run):
+ (JSC::DFG::CFGSimplificationPhase::keepOperandAlive):
+ * dfg/DFGCPSRethreadingPhase.cpp:
+ (JSC::DFG::CPSRethreadingPhase::run):
+ (JSC::DFG::CPSRethreadingPhase::addPhiSilently):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::eliminateIrrelevantPhantomChildren):
+ (JSC::DFG::CSEPhase::setReplacement):
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ * dfg/DFGCommon.cpp:
+ (WTF::printInternal):
+ (WTF):
+ * dfg/DFGCommon.h:
+ (WTF):
+ * dfg/DFGConstantFoldingPhase.cpp:
+ (JSC::DFG::ConstantFoldingPhase::foldConstants):
+ (JSC::DFG::ConstantFoldingPhase::addStructureTransitionCheck):
+ (JSC::DFG::ConstantFoldingPhase::paintUnreachableCode):
+ * dfg/DFGDCEPhase.cpp: Added.
+ (DFG):
+ (DCEPhase):
+ (JSC::DFG::DCEPhase::DCEPhase):
+ (JSC::DFG::DCEPhase::run):
+ (JSC::DFG::DCEPhase::findTypeCheckRoot):
+ (JSC::DFG::DCEPhase::countEdge):
+ (JSC::DFG::DCEPhase::eliminateIrrelevantPhantomChildren):
+ (JSC::DFG::performDCE):
+ * dfg/DFGDCEPhase.h: Added.
+ (DFG):
+ * dfg/DFGDriver.cpp:
+ (JSC::DFG::compile):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ (JSC::DFG::FixupPhase::checkArray):
+ (JSC::DFG::FixupPhase::blessArrayOperation):
+ (JSC::DFG::FixupPhase::fixIntEdge):
+ (JSC::DFG::FixupPhase::injectInt32ToDoubleNode):
+ (JSC::DFG::FixupPhase::truncateConstantToInt32):
+ * dfg/DFGGraph.cpp:
+ (JSC::DFG::Graph::Graph):
+ (JSC::DFG::Graph::dump):
+ (DFG):
+ * dfg/DFGGraph.h:
+ (JSC::DFG::Graph::changeChild):
+ (JSC::DFG::Graph::changeEdge):
+ (JSC::DFG::Graph::compareAndSwap):
+ (JSC::DFG::Graph::clearAndDerefChild):
+ (JSC::DFG::Graph::performSubstitution):
+ (JSC::DFG::Graph::performSubstitutionForEdge):
+ (Graph):
+ (JSC::DFG::Graph::substitute):
+ * dfg/DFGInsertionSet.h:
+ (InsertionSet):
+ * dfg/DFGNode.h:
+ (JSC::DFG::Node::Node):
+ (JSC::DFG::Node::convertToConstant):
+ (JSC::DFG::Node::convertToGetLocalUnlinked):
+ (JSC::DFG::Node::containsMovHint):
+ (Node):
+ (JSC::DFG::Node::hasVariableAccessData):
+ (JSC::DFG::Node::willHaveCodeGenOrOSR):
+ * dfg/DFGNodeType.h:
+ (DFG):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::convertLastOSRExitToForward):
+ (JSC::DFG::SpeculativeJIT::compileMovHint):
+ (JSC::DFG::SpeculativeJIT::compileMovHintAndCheck):
+ (DFG):
+ (JSC::DFG::SpeculativeJIT::compileInlineStart):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGStructureCheckHoistingPhase.cpp:
+ (JSC::DFG::StructureCheckHoistingPhase::run):
+ (JSC::DFG::StructureCheckHoistingPhase::shouldConsiderForHoisting):
+ (StructureCheckHoistingPhase):
+ * dfg/DFGValidate.cpp:
+ (JSC::DFG::Validate::validate):
+
+2013-03-05 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: JSValue should implement init and return nil in exceptional cases
+ https://bugs.webkit.org/show_bug.cgi?id=111487
+
+ Reviewed by Darin Adler.
+
+ * API/JSValue.mm:
+ (-[JSValue init]): We return nil here because there is no way to get the instance into a coherent state
+ without a JSContext.
+ (-[JSValue initWithValue:inContext:]): Similarly, we should also return nil here if either of the arguments is 0.
+
+2013-03-05 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r144708.
+ http://trac.webkit.org/changeset/144708
+ https://bugs.webkit.org/show_bug.cgi?id=111447
+
+ random assertion crashes in inspector tests on qt+mac bots
+ (Requested by kling on #webkit).
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSGlobalData.h:
+ (JSGlobalData):
+ * runtime/PropertyMapHashTable.h:
+ (PropertyTable):
+ (JSC::PropertyTable::PropertyTable):
+ (JSC):
+ (JSC::PropertyTable::~PropertyTable):
+ (JSC::PropertyTable::copy):
+ * runtime/PropertyTable.cpp: Removed.
+ * runtime/Structure.cpp:
+ (JSC::Structure::dumpStatistics):
+ (JSC::Structure::materializePropertyMap):
+ (JSC::Structure::despecifyDictionaryFunction):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::changePrototypeTransition):
+ (JSC::Structure::despecifyFunctionTransition):
+ (JSC::Structure::attributeChangeTransition):
+ (JSC::Structure::toDictionaryTransition):
+ (JSC::Structure::sealTransition):
+ (JSC::Structure::freezeTransition):
+ (JSC::Structure::preventExtensionsTransition):
+ (JSC::Structure::nonPropertyTransition):
+ (JSC::Structure::isSealed):
+ (JSC::Structure::isFrozen):
+ (JSC::Structure::flattenDictionaryStructure):
+ (JSC::Structure::pin):
+ (JSC::Structure::copyPropertyTable):
+ (JSC::Structure::copyPropertyTableForPinning):
+ (JSC::Structure::get):
+ (JSC::Structure::despecifyFunction):
+ (JSC::Structure::despecifyAllFunctions):
+ (JSC::Structure::putSpecificValue):
+ (JSC::Structure::remove):
+ (JSC::Structure::createPropertyMap):
+ (JSC::Structure::getPropertyNamesFromStructure):
+ (JSC::Structure::visitChildren):
+ (JSC::Structure::checkConsistency):
+ * runtime/Structure.h:
+ (JSC):
+ (JSC::Structure::putWillGrowOutOfLineStorage):
+ (JSC::Structure::materializePropertyMapIfNecessary):
+ (JSC::Structure::materializePropertyMapIfNecessaryForPinning):
+ (JSC::Structure::checkOffsetConsistency):
+ (Structure):
+ * runtime/StructureInlines.h:
+ (JSC::Structure::get):
+ * runtime/WriteBarrier.h:
+ (JSC::WriteBarrierBase::get):
+
+2013-03-05 David Kilzer <ddkilzer@apple.com>
+
+ BUILD FIX (r144698): Only enable SPEECH_SYNTHESIS for Mac
+ <http://webkit.org/b/106742>
+
+ Fixes the following build failures:
+
+ Undefined symbols for architecture i386:
+ "__ZTVN7WebCore25PlatformSpeechSynthesizerE", referenced from:
+ __ZN7WebCore25PlatformSpeechSynthesizerC2EPNS_31PlatformSpeechSynthesizerClientE in PlatformSpeechSynthesizer.o
+ NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
+ "__ZN7WebCore25PlatformSpeechSynthesizer19initializeVoiceListEv", referenced from:
+ __ZN7WebCore25PlatformSpeechSynthesizerC2EPNS_31PlatformSpeechSynthesizerClientE in PlatformSpeechSynthesizer.o
+ ld: symbol(s) not found for architecture i386
+
+ * Configurations/FeatureDefines.xcconfig:
+ - Fix definition of ENABLE_ENCRYPTED_MEDIA_V2_macosx to match
+ other FeatureDefines.xcconfig files.
+ - Only set ENABLE_SPEECH_SYNTHESIS for the macosx platform.
+
+2013-03-04 Andreas Kling <akling@apple.com>
+
+ Unused Structure property tables waste 14MB on Membuster.
+ <http://webkit.org/b/110854>
+ <rdar://problem/13292104>
+
+ Reviewed by Geoffrey Garen.
+
+ Turn PropertyTable into a GC object and have Structure drop unpinned tables when marking.
+ 14 MB progression on Membuster3.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+
+ Added PropertyTable.cpp.
+
+ * runtime/PropertyTable.cpp: Added.
+ (JSC::PropertyTable::create):
+ (JSC::PropertyTable::clone):
+ (JSC::PropertyTable::PropertyTable):
+ (JSC::PropertyTable::destroy):
+ (JSC::PropertyTable::~PropertyTable):
+ (JSC::PropertyTable::visitChildren):
+
+ Moved marking of property table values here from Structure::visitChildren().
+
+ * runtime/WriteBarrier.h:
+ (JSC::WriteBarrierBase::get):
+
+ Move m_cell to a local before using it multiple times. This avoids a multiple-access race when
+ Structure::checkOffsetConsistency() is used in assertions on the main thread while a marking thread
+ zaps the property table.
+
+ * runtime/Structure.h:
+ (JSC::Structure::materializePropertyMapIfNecessary):
+ (JSC::Structure::materializePropertyMapIfNecessaryForPinning):
+ * runtime/StructureInlines.h:
+ (JSC::Structure::propertyTable):
+
+ Added a getter for the Structure's PropertyTable that ASSERTs GC currently isn't active.
+ Because GC can zap an unpinned property table at any time, it's not entirely safe to access it.
+ Renamed the variable itself to m_propertyTableUnsafe to force call sites into explaining themselves.
+
+ (JSC::Structure::putWillGrowOutOfLineStorage):
+ (JSC::Structure::checkOffsetConsistency):
+
+ Moved these out of Structure.h to break header dependency cycle between Structure/PropertyTable.
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::visitChildren):
+
+ Null out m_propertyTable if the table is unpinned. This'll cause the table to get GC'd.
+
+ * runtime/JSGlobalData.h:
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+
+ Add a global propertyTableStructure.
+
+ * runtime/PropertyMapHashTable.h:
+ (PropertyTable):
+ (JSC::PropertyTable::createStructure):
+ (JSC::PropertyTable::copy):
+
+ Make PropertyTable a GC object.
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::dumpStatistics):
+ (JSC::Structure::materializePropertyMap):
+ (JSC::Structure::despecifyDictionaryFunction):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::changePrototypeTransition):
+ (JSC::Structure::despecifyFunctionTransition):
+ (JSC::Structure::attributeChangeTransition):
+ (JSC::Structure::toDictionaryTransition):
+ (JSC::Structure::sealTransition):
+ (JSC::Structure::freezeTransition):
+ (JSC::Structure::preventExtensionsTransition):
+ (JSC::Structure::nonPropertyTransition):
+ (JSC::Structure::isSealed):
+ (JSC::Structure::isFrozen):
+ (JSC::Structure::flattenDictionaryStructure):
+ (JSC::Structure::pin):
+ (JSC::Structure::copyPropertyTable):
+ (JSC::Structure::copyPropertyTableForPinning):
+ (JSC::Structure::get):
+ (JSC::Structure::despecifyFunction):
+ (JSC::Structure::despecifyAllFunctions):
+ (JSC::Structure::putSpecificValue):
+ (JSC::Structure::remove):
+ (JSC::Structure::createPropertyMap):
+ (JSC::Structure::getPropertyNamesFromStructure):
+ (JSC::Structure::checkConsistency):
+
+2013-03-04 Chris Fleizach <cfleizach@apple.com>
+
+ Support WebSpeech - Speech Synthesis
+ https://bugs.webkit.org/show_bug.cgi?id=106742
+
+ Reviewed by Simon Fraser.
+
+ Enable speech synthesis for the Mac.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2013-03-04 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Remove contextInternalContext from JSContextInternal.h
+ https://bugs.webkit.org/show_bug.cgi?id=111356
+
+ Reviewed by Geoffrey Garen.
+
+ We don't need it any more since we have globalContextRef in JSContext.
+
+ * API/JSContext.mm:
+ * API/JSContextInternal.h:
+ * API/JSValue.mm:
+ (+[JSValue valueWithBool:inContext:]):
+ (+[JSValue valueWithDouble:inContext:]):
+ (+[JSValue valueWithInt32:inContext:]):
+ (+[JSValue valueWithUInt32:inContext:]):
+ (+[JSValue valueWithNewObjectInContext:]):
+ (+[JSValue valueWithNewArrayInContext:]):
+ (+[JSValue valueWithNewRegularExpressionFromPattern:flags:inContext:]):
+ (+[JSValue valueWithNewErrorFromMessage:inContext:]):
+ (+[JSValue valueWithNullInContext:]):
+ (+[JSValue valueWithUndefinedInContext:]):
+ (-[JSValue toBool]):
+ (-[JSValue toDouble]):
+ (-[JSValue toNumber]):
+ (-[JSValue toString]):
+ (-[JSValue toDate]):
+ (-[JSValue toArray]):
+ (-[JSValue toDictionary]):
+ (-[JSValue valueForProperty:]):
+ (-[JSValue setValue:forProperty:]):
+ (-[JSValue deleteProperty:]):
+ (-[JSValue hasProperty:]):
+ (-[JSValue valueAtIndex:]):
+ (-[JSValue setValue:atIndex:]):
+ (-[JSValue isUndefined]):
+ (-[JSValue isNull]):
+ (-[JSValue isBoolean]):
+ (-[JSValue isNumber]):
+ (-[JSValue isString]):
+ (-[JSValue isObject]):
+ (-[JSValue isEqualToObject:]):
+ (-[JSValue isEqualWithTypeCoercionToObject:]):
+ (-[JSValue isInstanceOf:]):
+ (-[JSValue callWithArguments:]):
+ (-[JSValue constructWithArguments:]):
+ (-[JSValue invokeMethod:withArguments:]):
+ (valueToObject):
+ (objectToValueWithoutCopy):
+ (objectToValue):
+ (-[JSValue initWithValue:inContext:]):
+ (-[JSValue dealloc]):
+ (-[JSValue description]):
+ * API/JSWrapperMap.mm:
+ (createObjectWithCustomBrand):
+ (-[JSObjCClassInfo allocateConstructorAndPrototypeWithSuperClassInfo:]):
+ (-[JSObjCClassInfo wrapperForObject:]):
+ (-[JSWrapperMap jsWrapperForObject:]):
+ * API/ObjCCallbackFunction.mm:
+ (ObjCCallbackFunction::call):
+ (objCCallbackFunctionForInvocation):
+
+2013-03-04 Andreas Kling <akling@apple.com>
+
+ Add simple vector traits for JSC::Identifier.
+ <http://webkit.org/b/111323>
+
+ Reviewed by Geoffrey Garen.
+
+ Identifiers are really just Strings, giving them simple vector traits makes
+ Vector move them with memcpy() instead of churning the refcounts.
+
+ * runtime/Identifier.h:
+ (WTF):
+
+2013-03-04 Kunihiko Sakamoto <ksakamoto@chromium.org>
+
+ Add build flag for FontLoader
+ https://bugs.webkit.org/show_bug.cgi?id=111289
+
+ Reviewed by Benjamin Poulain.
+
+ Add ENABLE_FONT_LOAD_EVENTS build flag (disabled by default).
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2013-03-03 Andreas Kling <akling@apple.com>
+
+ Shrink JSC::HashTable entries.
+ <http://webkit.org/b/111275>
+ <rdar://problem/13333511>
+
+ Reviewed by Anders Carlsson.
+
+ Move the Intrinsic value out of the function-specific part of the union,
+ and store it next to m_attributes. Reduces the size of HashEntry by 8 bytes.
+
+ 990 kB progression on Membuster3. (PTUS: 797 kB)
+
+ * runtime/Lookup.h:
+ (JSC::HashEntry::initialize):
+ (JSC::HashEntry::intrinsic):
+ (HashEntry):
+
+2013-03-01 David Kilzer <ddkilzer@apple.com>
+
+ BUILD FIX: testapi should link to Foundation, not CoreFoundation
+
+ * JavaScriptCore.xcodeproj/project.pbxproj: Change testapi to
+ link to Foundation.framework instead of CoreFoundation.framework
+ since it uses NS types.
+
+2013-03-01 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: Passing JS functions to Objective-C callbacks causes JSValue to leak
+ https://bugs.webkit.org/show_bug.cgi?id=107836
+
+ Reviewed by Oliver Hunt.
+
+ We've decided to remove support for this feature from the API because there's no way to automatically manage
+ the memory for clients in a satisfactory manner. Clients can still pass JS functions to Objective-C methods,
+ but the methods must accept plain JSValues instead of Objective-C blocks.
+
+ We now ignore functions that are part of a protocol that inherits from JSExport that accept blocks as arguments.
+
+ * API/JSBlockAdaptor.h: Removed.
+ * API/JSBlockAdaptor.mm: Removed.
+ * API/ObjCCallbackFunction.mm:
+ (ArgumentTypeDelegate::typeBlock): Return nil to signal that we want to ignore this function when copying it
+ to the object from the protocol.
+ * API/tests/testapi.mm: Added a test to make sure that we ignore methods declared as part of a JSExport-ed protocol
+ that have block arguments.
+ (-[TestObject bogusCallback:]):
+ * JavaScriptCore.gypi: Updated build files.
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2013-03-01 Filip Pizlo <fpizlo@apple.com>
+
+ DFG Branch(LogicalNot) peephole should not try to optimize and work-around the case where LogicalNot may be otherwise live
+ https://bugs.webkit.org/show_bug.cgi?id=111209
+
+ Reviewed by Oliver Hunt.
+
+ Even if it is then everything will work just fine. It's not necessary to check the ref count here.
+
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+
+2013-03-01 Filip Pizlo <fpizlo@apple.com>
+
+ DFG CSE phase shouldn't rely on ref count of nodes, since it doesn't have to
+ https://bugs.webkit.org/show_bug.cgi?id=111205
+
+ Reviewed by Oliver Hunt.
+
+ I don't understand the intuition behind setLocalStoreElimination() validating that the SetLocal's ref count
+ is 1. I believe this is a hold-over from when setLocalStoreElimination() would match one SetLocal to another,
+ and then try to eliminate the first SetLocal. But that's not how it works now. Now, setLocalStoreElimination()
+ is actually Flush elimination: it eliminates any Flush that anchors a SetLocal if it proves that every path
+ from the SetLocal to the Flush is devoid of operations that may observe the local. It doesn't actually kill
+ the SetLocal itself: if the SetLocal is live because of other things (other Flushes or GetLocals in other
+ basic blocks), then the SetLocal will naturally still be alive because th Flush was only keeping the SetLocal
+ alive by one count rather than being solely responsible for its liveness.
+
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::setLocalStoreElimination):
+ (JSC::DFG::CSEPhase::eliminate):
+ (JSC::DFG::CSEPhase::performNodeCSE):
+
+2013-03-01 Filip Pizlo <fpizlo@apple.com>
+
+ Rename MovHint to MovHintEvent so I can create a NodeType called MovHint
+
+ Rubber stamped by Mark Hahnenberg.
+
+ This is similar to the SetLocal/SetLocalEvent naming scheme, where SetLocal is the
+ NodeType and SetLocalEvent is the VariableEventKind.
+
+ * dfg/DFGVariableEvent.cpp:
+ (JSC::DFG::VariableEvent::dump):
+ * dfg/DFGVariableEvent.h:
+ (JSC::DFG::VariableEvent::movHint):
+ (JSC::DFG::VariableEvent::id):
+ (JSC::DFG::VariableEvent::operand):
+ (VariableEvent):
+ * dfg/DFGVariableEventStream.cpp:
+ (JSC::DFG::VariableEventStream::reconstruct):
+
+2013-03-01 Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
+
+ [JSC] Fix sign comparison warning/error after r144340.
+ https://bugs.webkit.org/show_bug.cgi?id=111164
+
+ Reviewed by Mark Hahnenberg.
+
+ gcc (both 4.2.1 and 4.7.2) complain about comparing signed and
+ unsigned terms (clang accepts it just fine).
+
+ Work around that by casting the 1 to an uintptr_t as well.
+
+ * dfg/DFGEdge.h:
+ (JSC::DFG::Edge::makeWord):
+
+2013-02-28 Filip Pizlo <fpizlo@apple.com>
+
+ DFG CFA should not do liveness pruning
+ https://bugs.webkit.org/show_bug.cgi?id=111119
+
+ Reviewed by Mark Hahnenberg.
+
+ It adds complexity and probably buys nothing. Moreover, I'm transitioning to having
+ liveness only available at the bitter end of compilation, so this will stop working
+ after https://bugs.webkit.org/show_bug.cgi?id=109389 anyway.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::initialize):
+ (JSC::DFG::AbstractState::mergeStateAtTail):
+
+2013-02-28 Filip Pizlo <fpizlo@apple.com>
+
+ Don't try to emit profiling if you don't have the DFG JIT.
+
+ Rubber stamped by Mark Hahnenberg.
+
+ * jit/JIT.h:
+ (JSC::JIT::shouldEmitProfiling):
+
+2013-02-28 Filip Pizlo <fpizlo@apple.com>
+
+ DFG Phantom node should be honest about the fact that it can exit
+ https://bugs.webkit.org/show_bug.cgi?id=111115
+
+ Reviewed by Mark Hahnenberg.
+
+ The chances of this having cause serious issues are low, since most clients of the
+ NodeDoesNotExit flag run after CFA and CFA updates this properly. But one possible
+ case of badness is if the ByteCodeParser inserted a Phantom with a type check in
+ between a LogicalNot and a Branch; then that peephole optimization in Fixup might
+ go slightly wrong.
+
+ * dfg/DFGNodeType.h:
+ (DFG):
+
+2013-02-28 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Add casts in DFGGPRInfo.h to suppress warnings
+ https://bugs.webkit.org/show_bug.cgi?id=111104
+
+ Reviewed by Filip Pizlo.
+
+ With certain flags on, we get compiler warnings on ARM. We should do the proper casts to make these warnings go away.
+
+ * dfg/DFGGPRInfo.h:
+ (JSC::DFG::GPRInfo::toIndex):
+ (JSC::DFG::GPRInfo::debugName):
+
+2013-02-28 Filip Pizlo <fpizlo@apple.com>
+
+ It should be easy to determine if a DFG node exits forward or backward when doing type checks
+ https://bugs.webkit.org/show_bug.cgi?id=111102
+
+ Reviewed by Mark Hahnenberg.
+
+ This adds a NodeExitsForward flag, which tells you the exit directionality of
+ type checks performed by the node. Even if you convert the node to a Phantom
+ and use the Edge UseKind for type checks, you'll still get the same exit
+ directionality that the original node would have wanted.
+
+ * dfg/DFGArgumentsSimplificationPhase.cpp:
+ (JSC::DFG::ArgumentsSimplificationPhase::run):
+ * dfg/DFGArrayifySlowPathGenerator.h:
+ (JSC::DFG::ArrayifySlowPathGenerator::ArrayifySlowPathGenerator):
+ * dfg/DFGCFGSimplificationPhase.cpp:
+ (JSC::DFG::CFGSimplificationPhase::run):
+ (JSC::DFG::CFGSimplificationPhase::mergeBlocks):
+ * dfg/DFGCPSRethreadingPhase.cpp:
+ (JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocalFor):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::setReplacement):
+ (JSC::DFG::CSEPhase::eliminate):
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ * dfg/DFGConstantFoldingPhase.cpp:
+ (JSC::DFG::ConstantFoldingPhase::foldConstants):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::checkArray):
+ * dfg/DFGNode.h:
+ (Node):
+ (JSC::DFG::Node::setOpAndDefaultNonExitFlags):
+ (JSC::DFG::Node::convertToPhantom):
+ * dfg/DFGNodeFlags.cpp:
+ (JSC::DFG::nodeFlagsAsString):
+ * dfg/DFGNodeFlags.h:
+ (DFG):
+ * dfg/DFGNodeType.h:
+ (DFG):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::backwardSpeculationCheck):
+ (DFG):
+ (JSC::DFG::SpeculativeJIT::speculationCheck):
+ (JSC::DFG::SpeculativeJIT::speculationWatchpoint):
+ (JSC::DFG::SpeculativeJIT::forwardSpeculationCheck):
+ (JSC::DFG::SpeculativeJIT::backwardTypeCheck):
+ (JSC::DFG::SpeculativeJIT::typeCheck):
+ (JSC::DFG::SpeculativeJIT::forwardTypeCheck):
+ (JSC::DFG::SpeculativeJIT::fillStorage):
+ (JSC::DFG::SpeculativeJIT::compile):
+ (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
+ (JSC::DFG::SpeculativeJIT::compileValueToInt32):
+ (JSC::DFG::SpeculativeJIT::compileInt32ToDouble):
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+ (JSC::DFG::SpeculateIntegerOperand::SpeculateIntegerOperand):
+ (JSC::DFG::SpeculateIntegerOperand::gpr):
+ (SpeculateIntegerOperand):
+ (JSC::DFG::SpeculateDoubleOperand::SpeculateDoubleOperand):
+ (JSC::DFG::SpeculateDoubleOperand::fpr):
+ (SpeculateDoubleOperand):
+ (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
+ (JSC::DFG::SpeculateCellOperand::gpr):
+ (SpeculateCellOperand):
+ (JSC::DFG::SpeculateBooleanOperand::SpeculateBooleanOperand):
+ (JSC::DFG::SpeculateBooleanOperand::gpr):
+ (SpeculateBooleanOperand):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateInt):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntStrict):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateInt):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntStrict):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2013-02-28 Filip Pizlo <fpizlo@apple.com>
+
+ CodeBlock::valueProfile() has a bogus assertion
+ https://bugs.webkit.org/show_bug.cgi?id=111106
+ <rdar://problem/13131427>
+
+ Reviewed by Mark Hahnenberg.
+
+ This was just a bad assertion: m_bytecodeOffset == -1 means that the value profile is constructed but not initialized.
+ ValueProfile constructs itself in a safe way; you can call any method you want on a constructed but not initialized
+ ValueProfile. CodeBlock first constructs all ValueProfiles (by growing the ValueProfile vector) and then initializes
+ their m_bytecodeOffset later. This is necessary because the initialization is linking bytecode instructions to their
+ ValueProfiles, so at that point we don't want the ValueProfile vector to resize, which implies that we want all of
+ them to already be constructed. A GC can happen during this phase, and the GC may want to walk all ValueProfiles.
+ This is safe, but one of the ValueProfile getters (CodeBlock::valueProfile()) was asserting that any value profile
+ you get has had its m_bytecodeOffset initialized. This need not be the case and nothing will go wrong if it isn't.
+
+ The solution is to remove the assertion, which I believe was put there to ensure that my m_valueProfiles refactoring
+ a long time ago was sound: it used to be that a ValueProfile with m_bytecodeOffset == -1 was an argument profile; now
+ all argument profiles are in m_argumentValueProfiles instead. I think it's safe to say that this refactoring was done
+ soundly since it was a long time ago. So we should kill the assertion - I don't see an easy way to make the assertion
+ sound with respect to the GC-during-CodeBlock-construction issue, and I don't believe that the assertion is buying us
+ anything at this point.
+
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::valueProfile):
+
+2013-02-27 Filip Pizlo <fpizlo@apple.com>
+
+ DFG CFA should leave behind information in Edge that says if the Edge's type check is proven to succeed
+ https://bugs.webkit.org/show_bug.cgi?id=110840
+
+ Reviewed by Mark Hahnenberg.
+
+ This doesn't add any observable functionality to the compiler, yet. But it does give
+ every phase that runs after CFA the ability to know, in O(1) time, whether an edge
+ will need to execute a type check.
+
+ * dfg/DFGAbstractState.h:
+ (JSC::DFG::AbstractState::filterEdgeByUse):
+ (JSC::DFG::AbstractState::filterByType):
+ * dfg/DFGCommon.cpp:
+ (WTF):
+ (WTF::printInternal):
+ * dfg/DFGCommon.h:
+ (JSC::DFG::isProved):
+ (DFG):
+ (JSC::DFG::proofStatusForIsProved):
+ (WTF):
+ * dfg/DFGEdge.cpp:
+ (JSC::DFG::Edge::dump):
+ * dfg/DFGEdge.h:
+ (JSC::DFG::Edge::Edge):
+ (JSC::DFG::Edge::setNode):
+ (JSC::DFG::Edge::useKindUnchecked):
+ (JSC::DFG::Edge::setUseKind):
+ (Edge):
+ (JSC::DFG::Edge::proofStatusUnchecked):
+ (JSC::DFG::Edge::proofStatus):
+ (JSC::DFG::Edge::setProofStatus):
+ (JSC::DFG::Edge::isProved):
+ (JSC::DFG::Edge::needsCheck):
+ (JSC::DFG::Edge::shift):
+ (JSC::DFG::Edge::makeWord):
+
+2013-02-28 Simon Hausmann <simon.hausmann@digia.com>
+
+ [Qt][Mac] Fix massive parallel builds
+
+ Reviewed by Tor Arne Vestbø.
+
+ There exists a race condition that LLIntDesiredOffsets.h is written to
+ by two parllel instances of the ruby script. This patch ensures that similar to the output file,
+ the generated file is also prefixed according to the build configuration.
+
+ * LLIntOffsetsExtractor.pro:
+
+2013-02-27 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r144168.
+ http://trac.webkit.org/changeset/144168
+ https://bugs.webkit.org/show_bug.cgi?id=111019
+
+ It broke the build and tronical is unavailable (Requested by
+ Ossy_night on #webkit).
+
+ * LLIntOffsetsExtractor.pro:
+
+2013-02-26 Filip Pizlo <fpizlo@apple.com>
+
+ Disable some unsound DFG DCE
+ https://bugs.webkit.org/show_bug.cgi?id=110948
+
+ Reviewed by Michael Saboff.
+
+ DCE of bitops is not sound since the bitops might call some variant of valueOf.
+
+ This used to work right because ValueToInt32 was MustGenerate. From the DFG IR
+ standpoint it feels weird to make ValueToInt32 be MustGenerate since that node is
+ implemented entirely as a pure conversion. If we ever gave the DFG the ability to
+ do effectful bitops, we would most likely implement them as special nodes not
+ related to the ValueToInt32 and bitop nodes we have now.
+
+ This change is performance neutral.
+
+ * dfg/DFGNodeType.h:
+ (DFG):
+
+2013-02-27 Glenn Adams <glenn@skynav.com>
+
+ Add ENABLE_CSS3_TEXT_LINE_BREAK flag.
+ https://bugs.webkit.org/show_bug.cgi?id=110944
+
+ Reviewed by Dean Jackson.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2013-02-27 Julien Brianceau <jbrianceau@nds.com>
+
+ Fix build when DFG_JIT is not enabled
+ https://bugs.webkit.org/show_bug.cgi?id=110991
+
+ Reviewed by Csaba Osztrogonác.
+
+ * jit/JIT.h:
+ (JSC::JIT::canBeOptimizedOrInlined):
+
+2013-02-27 Simon Hausmann <simon.hausmann@digia.com>
+
+ [Qt][Mac] Fix massive parallel builds
+
+ Reviewed by Tor Arne Vestbø.
+
+ There exists a race condition that LLIntDesiredOffsets.h is written to
+ by two parllel instances of the ruby script. This patch ensures that similar to the output file,
+ the generated file is also prefixed according to the build configuration.
+
+ * LLIntOffsetsExtractor.pro:
+
+2013-02-26 Filip Pizlo <fpizlo@apple.com>
+
+ DFG OSR exit doesn't know which virtual register to use for the last result register for post_inc and post_dec
+ https://bugs.webkit.org/show_bug.cgi?id=109036
+ <rdar://problem/13292139>
+
+ Reviewed by Gavin Barraclough.
+
+ This was a two-fold problem:
+
+ 1) post_inc/dec has two results - the new value of the variable, and the old value of the variable. DFG OSR exit
+ assumed that the "last result" used for the Baseline JIT's register allocation would be the new value. It was
+ wrong in this assumption.
+
+ 2) The Baseline JIT knew to disable its last result optimization in cases where it might confuse the DFG. But it
+ was doing this only for code blocks that could be totally optimized, but not code blocks that could only be
+ optimized when inlined.
+
+ This patch introduces a more rigorous notion of when the Baseline JIT emits profiling, when it does extra work
+ to account for the possibility of OSR exit, and when it does extra work to account for the possibility of OSR
+ entry. These notions are called shouldEmitProfiling(), canBeOptimizedOrInlined(), and canBeOptimized(),
+ respectively.
+
+ This is performance-neutral and fixes the reported bug. It probably fixes other bugs as well, since previously
+ we for example weren't doing the more conservative implementation of op_mov in the Baseline JIT for code blocks
+ that could be inlined but not optimized. So, if such a code block OSR exited at just the right point, you'd get
+ symptoms similar to this bug.
+
+ * dfg/DFGCapabilities.h:
+ (JSC::DFG::canCompileOpcode):
+ * dfg/DFGCommon.h:
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompile):
+ * jit/JIT.h:
+ (JSC::JIT::compilePatchGetArrayLength):
+ (JSC::JIT::canBeOptimizedOrInlined):
+ (JIT):
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_post_inc):
+ (JSC::JIT::emit_op_post_dec):
+ * jit/JITArithmetic32_64.cpp:
+ (JSC::JIT::emit_op_post_inc):
+ (JSC::JIT::emit_op_post_dec):
+ * jit/JITCall.cpp:
+ (JSC::JIT::emit_op_call_put_result):
+ (JSC::JIT::compileOpCall):
+ * jit/JITCall32_64.cpp:
+ (JSC::JIT::compileOpCall):
+ * jit/JITInlines.h:
+ (JSC::JIT::emitArrayProfilingSite):
+ (JSC::JIT::map):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_mov):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::compileGetByIdHotPath):
+ (JSC::JIT::privateCompilePutByIdTransition):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::compileGetByIdHotPath):
+ (JSC::JIT::privateCompilePutByIdTransition):
+
+2013-02-26 Roger Fong <roger_fong@apple.com>
+
+ Unreviewed. AppleWin VS2010 build fix.
+
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+
+2013-02-25 Filip Pizlo <fpizlo@apple.com>
+
+ The DFG backend's and OSR's decision to unbox a variable should be based on whether it's used in a typed context
+ https://bugs.webkit.org/show_bug.cgi?id=110433
+
+ Reviewed by Oliver Hunt and Mark Hahnenberg.
+
+ This introduces the equivalent of a liveness analysis, except for type checking.
+ A variable is said to be "profitable for unboxing" (i.e. live at a type check)
+ if there exists a type check on a GetLocal of that variable, and the type check
+ is consistent with the variable's prediction. Variables that are not profitable
+ for unboxing aren't unboxed. Previously they would have been.
+
+ This is a slight speed-up on some things but mostly neutral.
+
+ * dfg/DFGArgumentPosition.h:
+ (JSC::DFG::ArgumentPosition::ArgumentPosition):
+ (JSC::DFG::ArgumentPosition::mergeShouldNeverUnbox):
+ (JSC::DFG::ArgumentPosition::mergeArgumentPredictionAwareness):
+ (JSC::DFG::ArgumentPosition::mergeArgumentUnboxingAwareness):
+ (ArgumentPosition):
+ (JSC::DFG::ArgumentPosition::isProfitableToUnbox):
+ (JSC::DFG::ArgumentPosition::shouldUseDoubleFormat):
+ * dfg/DFGCommon.h:
+ (JSC::DFG::checkAndSet):
+ (DFG):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::run):
+ (JSC::DFG::FixupPhase::fixupNode):
+ (JSC::DFG::FixupPhase::fixupSetLocalsInBlock):
+ (FixupPhase):
+ (JSC::DFG::FixupPhase::alwaysUnboxSimplePrimitives):
+ (JSC::DFG::FixupPhase::setUseKindAndUnboxIfProfitable):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
+ * dfg/DFGVariableAccessData.h:
+ (JSC::DFG::VariableAccessData::VariableAccessData):
+ (JSC::DFG::VariableAccessData::mergeIsCaptured):
+ (JSC::DFG::VariableAccessData::mergeIsProfitableToUnbox):
+ (VariableAccessData):
+ (JSC::DFG::VariableAccessData::isProfitableToUnbox):
+ (JSC::DFG::VariableAccessData::shouldUnboxIfPossible):
+ (JSC::DFG::VariableAccessData::mergeStructureCheckHoistingFailed):
+ (JSC::DFG::VariableAccessData::mergeIsArgumentsAlias):
+ (JSC::DFG::VariableAccessData::shouldUseDoubleFormat):
+ (JSC::DFG::VariableAccessData::mergeFlags):
+
+2013-02-26 Oliver Hunt <oliver@apple.com>
+
+ Fix windows build.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+
+2013-02-26 Oliver Hunt <oliver@apple.com>
+
+ Web Inspector: REGRESSION: [JSC] SourceProvider reuses IDs
+ https://bugs.webkit.org/show_bug.cgi?id=99674
+
+ Reviewed by Gavin Barraclough.
+
+ Simple incrementing counter for SourceProvider IDs. Uses a
+ lock to incrementing the counter so we don't increment reuse
+ counter values or reassign the ID for a given SourceProvider.
+
+ * parser/SourceProvider.cpp:
+ (JSC::SourceProvider::SourceProvider):
+ (JSC):
+ (JSC::SourceProvider::getID):
+ * parser/SourceProvider.h:
+ (JSC::SourceProvider::asID):
+ (SourceProvider):
+
+2013-02-26 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r144074.
+ http://trac.webkit.org/changeset/144074
+ https://bugs.webkit.org/show_bug.cgi?id=110897
+
+ Causing 20+ crashes on Mac (Requested by bradee-oh on
+ #webkit).
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSGlobalData.h:
+ (JSGlobalData):
+ * runtime/PropertyMapHashTable.h:
+ (PropertyTable):
+ (JSC::PropertyTable::PropertyTable):
+ (JSC):
+ (JSC::PropertyTable::~PropertyTable):
+ (JSC::PropertyTable::copy):
+ * runtime/PropertyTable.cpp: Removed.
+ * runtime/Structure.cpp:
+ (JSC::Structure::materializePropertyMap):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::changePrototypeTransition):
+ (JSC::Structure::despecifyFunctionTransition):
+ (JSC::Structure::attributeChangeTransition):
+ (JSC::Structure::toDictionaryTransition):
+ (JSC::Structure::preventExtensionsTransition):
+ (JSC::Structure::nonPropertyTransition):
+ (JSC::Structure::copyPropertyTable):
+ (JSC::Structure::copyPropertyTableForPinning):
+ (JSC::Structure::putSpecificValue):
+ (JSC::Structure::createPropertyMap):
+ (JSC::Structure::visitChildren):
+ * runtime/Structure.h:
+ (JSC):
+ (JSC::Structure::putWillGrowOutOfLineStorage):
+ (JSC::Structure::checkOffsetConsistency):
+ (Structure):
+ * runtime/StructureInlines.h:
+
+2013-02-26 Roger Fong <roger_fong@apple.com>
+
+ Unreviewed. AppleWin VS2010 build fix.
+
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorCommon.props:
+
+2013-02-26 Jer Noble <jer.noble@apple.com>
+
+ Unreviewed build fix; use correct macro for platform name in FeatureDefines.xcconfig.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2013-02-26 Michael Saboff <msaboff@apple.com>
+
+ Potential crash in YARR JIT generated code when building 64 bit
+ https://bugs.webkit.org/show_bug.cgi?id=110893
+
+ Reviewed by Gavin Barraclough.
+
+ The ABI doesn't define the behavior for the upper bits of a value that takes less than 64 bits.
+ Therefore, we zero extend both the count and length registers to assure that these unsigned values
+ don't have garbage upper bits.
+
+ * yarr/YarrJIT.cpp:
+ (JSC::Yarr::YarrGenerator::generateEnter):
+
+2013-02-26 Andreas Kling <akling@apple.com>
+
+ Unused Structure property tables waste 14MB on Membuster.
+ <http://webkit.org/b/110854>
+ <rdar://problem/13292104>
+
+ Reviewed by Filip Pizlo.
+
+ Turn PropertyTable into a GC object and have Structure drop unpinned tables when marking.
+ 14 MB progression on Membuster3.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+
+ Added PropertyTable.cpp.
+
+ * runtime/PropertyTable.cpp: Added.
+ (JSC::PropertyTable::create):
+ (JSC::PropertyTable::clone):
+ (JSC::PropertyTable::PropertyTable):
+ (JSC::PropertyTable::destroy):
+ (JSC::PropertyTable::~PropertyTable):
+ (JSC::PropertyTable::visitChildren):
+
+ Moved marking of property table values here from Structure::visitChildren().
+
+ * runtime/StructureInlines.h:
+ (JSC::Structure::putWillGrowOutOfLineStorage):
+ (JSC::Structure::checkOffsetConsistency):
+
+ Moved these to StructureInlines.h to break header dependency cycle between Structure/PropertyTable.
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::visitChildren):
+
+ Null out m_propertyTable if the table is unpinned. This'll cause the table to get GC'd.
+
+ (JSC::Structure::materializePropertyMap):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::changePrototypeTransition):
+ (JSC::Structure::despecifyFunctionTransition):
+ (JSC::Structure::attributeChangeTransition):
+ (JSC::Structure::toDictionaryTransition):
+ (JSC::Structure::preventExtensionsTransition):
+ (JSC::Structure::nonPropertyTransition):
+ (JSC::Structure::copyPropertyTable):
+ (JSC::Structure::copyPropertyTableForPinning):
+ (JSC::Structure::putSpecificValue):
+ (JSC::Structure::createPropertyMap):
+ * runtime/Structure.h:
+ (Structure):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSGlobalData.h:
+ (JSGlobalData):
+ * runtime/PropertyMapHashTable.h:
+ (PropertyTable):
+ (JSC::PropertyTable::createStructure):
+ (JSC::PropertyTable::copy):
+
+2013-02-26 Andreas Kling <akling@apple.com>
+
+ Unreviewed, rolling out r144054.
+ http://trac.webkit.org/changeset/144054
+ https://bugs.webkit.org/show_bug.cgi?id=110854
+
+ broke builds
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSGlobalData.h:
+ (JSGlobalData):
+ * runtime/PropertyMapHashTable.h:
+ (PropertyTable):
+ (JSC::PropertyTable::PropertyTable):
+ (JSC):
+ (JSC::PropertyTable::~PropertyTable):
+ (JSC::PropertyTable::copy):
+ * runtime/PropertyTable.cpp: Removed.
+ * runtime/Structure.cpp:
+ (JSC::Structure::materializePropertyMap):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::changePrototypeTransition):
+ (JSC::Structure::despecifyFunctionTransition):
+ (JSC::Structure::attributeChangeTransition):
+ (JSC::Structure::toDictionaryTransition):
+ (JSC::Structure::preventExtensionsTransition):
+ (JSC::Structure::nonPropertyTransition):
+ (JSC::Structure::copyPropertyTable):
+ (JSC::Structure::copyPropertyTableForPinning):
+ (JSC::Structure::putSpecificValue):
+ (JSC::Structure::createPropertyMap):
+ (JSC::Structure::visitChildren):
+ * runtime/Structure.h:
+ (JSC):
+ (JSC::Structure::putWillGrowOutOfLineStorage):
+ (JSC::Structure::checkOffsetConsistency):
+ (Structure):
+ * runtime/StructureInlines.h:
+
+2013-02-26 Andreas Kling <akling@apple.com>
+
+ Unused Structure property tables waste 14MB on Membuster.
+ <http://webkit.org/b/110854>
+ <rdar://problem/13292104>
+
+ Reviewed by Filip Pizlo.
+
+ Turn PropertyTable into a GC object and have Structure drop unpinned tables when marking.
+ 14 MB progression on Membuster3.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.gypi:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+
+ Added PropertyTable.cpp.
+
+ * runtime/PropertyTable.cpp: Added.
+ (JSC::PropertyTable::create):
+ (JSC::PropertyTable::clone):
+ (JSC::PropertyTable::PropertyTable):
+ (JSC::PropertyTable::destroy):
+ (JSC::PropertyTable::~PropertyTable):
+ (JSC::PropertyTable::visitChildren):
+
+ Moved marking of property table values here from Structure::visitChildren().
+
+ * runtime/StructureInlines.h:
+ (JSC::Structure::putWillGrowOutOfLineStorage):
+ (JSC::Structure::checkOffsetConsistency):
+
+ Moved these to StructureInlines.h to break header dependency cycle between Structure/PropertyTable.
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::visitChildren):
+
+ Null out m_propertyTable if the table is unpinned. This'll cause the table to get GC'd.
+
+ (JSC::Structure::materializePropertyMap):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::changePrototypeTransition):
+ (JSC::Structure::despecifyFunctionTransition):
+ (JSC::Structure::attributeChangeTransition):
+ (JSC::Structure::toDictionaryTransition):
+ (JSC::Structure::preventExtensionsTransition):
+ (JSC::Structure::nonPropertyTransition):
+ (JSC::Structure::copyPropertyTable):
+ (JSC::Structure::copyPropertyTableForPinning):
+ (JSC::Structure::putSpecificValue):
+ (JSC::Structure::createPropertyMap):
+ * runtime/Structure.h:
+ (Structure):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSGlobalData.h:
+ (JSGlobalData):
+ * runtime/PropertyMapHashTable.h:
+ (PropertyTable):
+ (JSC::PropertyTable::createStructure):
+ (JSC::PropertyTable::copy):
+
+2013-02-26 Jocelyn Turcotte <jocelyn.turcotte@digia.com>
+
+ Implement JIT on Windows 64 bits
+ https://bugs.webkit.org/show_bug.cgi?id=107965
+
+ Reviewed by Simon Hausmann.
+
+ 1. MSVC doesn't support inline assembly for 64 bits, implements the trampoline in a separate ASM file.
+
+ 2. Windows 64 bits has a different calling convention than other OSes following the AMD64 ABI.
+ Differences that we have to handle here:
+ - Registers passed parameters are RCX, RDX, R8 and R9 instead of RDI, RSI, RDX, RCX, R8 and R9
+ - RDI and RSI must be preserved by callee
+ - Only return values <= 8 bytes can be returned by register (RDX can't be used to return a second word)
+ - There is no red-zone after RIP on the stack, but instead 4 reserved words before it
+
+ * Target.pri:
+ * jit/JITStubs.cpp:
+ * jit/JITStubs.h:
+ (JSC):
+ (JITStackFrame):
+ (JSC::JITStackFrame::returnAddressSlot):
+ * jit/JITStubsMSVC64.asm: Added.
+ * jit/JSInterfaceJIT.h:
+ (JSInterfaceJIT):
+ * jit/ThunkGenerators.cpp:
+ (JSC::nativeForGenerator):
+ * yarr/YarrJIT.cpp:
+ (YarrGenerator):
+ (JSC::Yarr::YarrGenerator::generateEnter):
+ (JSC::Yarr::YarrGenerator::generateReturn):
+
+2013-02-26 Oliver Hunt <oliver@apple.com>
+
+ Kill another analyzer warning in javascriptcore
+ https://bugs.webkit.org/show_bug.cgi?id=110802
+
+ Reviewed by Benjamin Poulain.
+
+ Add null checks.
+
+ * profiler/LegacyProfiler.cpp:
+ (JSC::LegacyProfiler::startProfiling):
+ (JSC::LegacyProfiler::stopProfiling):
+
+2013-02-26 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r144004.
+ http://trac.webkit.org/changeset/144004
+ https://bugs.webkit.org/show_bug.cgi?id=110858
+
+ This iOS change is outdated (Requested by notbenjamin on
+ #webkit).
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::BytecodeGenerator::emitNode):
+ (JSC::BytecodeGenerator::emitNodeInConditionContext):
+ (BytecodeGenerator):
+ * parser/Parser.cpp:
+ (JSC::::Parser):
+ * parser/Parser.h:
+ (JSC::Parser::canRecurse):
+ (Parser):
+
+2013-02-25 Filip Pizlo <fpizlo@apple.com>
+
+ REGRESSION(r143654): some jquery test asserts on 32 bit debug build
+ https://bugs.webkit.org/show_bug.cgi?id=110756
+
+ Reviewed by Geoffrey Garen.
+
+ TypeOf does speculations manually, so it should mark its JSValueOperand as doing ManualOperandSpeculation.
+
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2013-02-25 Benjamin Poulain <bpoulain@apple.com>
+
+ [JSC] Upstream iOS Stack bound checking
+ https://bugs.webkit.org/show_bug.cgi?id=110813
+
+ Reviewed by Filip Pizlo.
+
+ On iOS, the StackBounds cannot be cached because the stack
+ can be in one of two threads (the web thread or the UI thread).
+
+ We simply always consider the current stack bound when testing
+ stack boundaries.
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::BytecodeGenerator::emitNode):
+ (JSC::BytecodeGenerator::emitNodeInConditionContext):
+ (BytecodeGenerator):
+ * parser/Parser.cpp:
+ (JSC::::Parser):
+ * parser/Parser.h:
+ (JSC::Parser::canRecurse):
+ (Parser):
+
+2013-02-25 Michael Saboff <msaboff@apple.com>
+
+ For JSVALUE32_64, maxOffsetRelativeToPatchedStorage() doesn't compute the maximum negative offset
+ https://bugs.webkit.org/show_bug.cgi?id=110828
+
+ Reviewed by Oliver Hunt.
+
+ * runtime/JSObject.h:
+ (JSC::maxOffsetRelativeToPatchedStorage): Only add the OBJECT_OFFSETOF(tag) for positive offsets.
+ That way this function will return the offset farthest from 0 needed to access either the payload
+ or tag.
+
+2013-02-25 Jeffrey Pfau <jpfau@apple.com>
+
+ Optionally partition cache to prevent using cache for tracking
+ https://bugs.webkit.org/show_bug.cgi?id=110269
+
+ Reviewed by Maciej Stachowiak.
+
+ * Configurations/FeatureDefines.xcconfig: Add defines for cache partitioning and public suffix list usage
+
+2013-02-25 Roger Fong <roger_fong@apple.com>
+
+ Unreviewed. VS2010 solution build fix.
+
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorCommon.props:
+
+2013-02-24 Filip Pizlo <fpizlo@apple.com>
+
+ DFG::Edge should have more bits for UseKind, and DFG::Allocator should be simpler
+ https://bugs.webkit.org/show_bug.cgi?id=110722
+
+ Reviewed by Oliver Hunt.
+
+ This rolls out the DFG::Allocator part of http://trac.webkit.org/changeset/143654,
+ and changes Edge to have more room for UseKinds and possibly other things.
+
+ This is performance-neutral on both 32-bit and 64-bit. It reduces the size of
+ DFG::Node on 64-bit (by virtue of getting rid of the 16-byte alignment of Node)
+ and increases it slightly on 32-bit (by 4 bytes total - 16-byte alignment led to
+ 80 bytes, but the base size of Node plus the 12 bytes of new m_encodedWords in
+ Edge gets 84 bytes). But, it will mean that we don't have to increase Node by
+ another 16 bytes if we ever want to add more UseKinds or other things to Edge.
+
+ * dfg/DFGAllocator.h:
+ (DFG):
+ (Allocator):
+ (JSC::DFG::Allocator::Region::headerSize):
+ (JSC::DFG::Allocator::Region::numberOfThingsPerRegion):
+ (JSC::DFG::Allocator::Region::data):
+ (JSC::DFG::Allocator::Region::isInThisRegion):
+ (JSC::DFG::::Allocator):
+ (JSC::DFG::::~Allocator):
+ (JSC::DFG::::allocate):
+ (JSC::DFG::::free):
+ (JSC::DFG::::freeAll):
+ (JSC::DFG::::reset):
+ (JSC::DFG::::indexOf):
+ (JSC::DFG::::allocatorOf):
+ (JSC::DFG::::bumpAllocate):
+ (JSC::DFG::::freeListAllocate):
+ (JSC::DFG::::allocateSlow):
+ (JSC::DFG::::freeRegionsStartingAt):
+ (JSC::DFG::::startBumpingIn):
+ * dfg/DFGEdge.h:
+ (JSC::DFG::Edge::Edge):
+ (Edge):
+ (JSC::DFG::Edge::node):
+ (JSC::DFG::Edge::setNode):
+ (JSC::DFG::Edge::useKindUnchecked):
+ (JSC::DFG::Edge::setUseKind):
+ (JSC::DFG::Edge::operator==):
+ (JSC::DFG::Edge::operator!=):
+ (JSC::DFG::Edge::makeWord):
+ * dfg/DFGNodeAllocator.h:
+ (DFG):
+
+2013-02-22 Filip Pizlo <fpizlo@apple.com>
+
+ The DFG special case checks for isCreatedThisArgument are fragile
+ https://bugs.webkit.org/show_bug.cgi?id=110535
+
+ Reviewed by Oliver Hunt.
+
+ There may be many situations in which we want to force a variable to never be
+ unboxed. Capturing is one such case, and the created this argument is another.
+ Previously all code that dealt with this issue had to query both scenarios.
+
+ Now DFG::VariableAccessData knows these things. You just have to ask
+ VariableAccessData for whether a variable should be unboxed. Anyone wishing to
+ force a variable to never be unboxed just tells VariableAccessData.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::initialize):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ (DFG):
+ * dfg/DFGCFGSimplificationPhase.cpp:
+ (CFGSimplificationPhase):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ * dfg/DFGGraph.h:
+ (Graph):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGUnificationPhase.cpp:
+ (JSC::DFG::UnificationPhase::run):
+ * dfg/DFGVariableAccessData.h:
+ (JSC::DFG::VariableAccessData::VariableAccessData):
+ (JSC::DFG::VariableAccessData::mergeIsCaptured):
+ (JSC::DFG::VariableAccessData::mergeShouldNeverUnbox):
+ (VariableAccessData):
+ (JSC::DFG::VariableAccessData::shouldNeverUnbox):
+ (JSC::DFG::VariableAccessData::shouldUnboxIfPossible):
+ (JSC::DFG::VariableAccessData::shouldUseDoubleFormat):
+ (JSC::DFG::VariableAccessData::tallyVotesForShouldUseDoubleFormat):
+
+2013-02-25 Geoffrey Garen <ggaren@apple.com>
+
+ Do one lookup per code cache insertion instead of two
+ https://bugs.webkit.org/show_bug.cgi?id=110674
+
+ Reviewed by Sam Weinig.
+
+ Deployed the idiomatic "add null value" trick to avoid a second hash
+ lookup when inserting an item.
+
+ * runtime/CodeCache.cpp:
+ (JSC::CodeCacheMap::pruneSlowCase): Factored this into a helper function
+ to improve clarity and get some code off the hot path.
+
+ (JSC::CodeCache::getCodeBlock):
+ (JSC::CodeCache::getFunctionExecutableFromGlobalCode): Use the add() API
+ to avoid two hash lookups. Be sure to remove items if parsing fails,
+ otherwise we'll leave nulls in the table. (I'm guessing that caching parse
+ errors is not a win.)
+
+ * runtime/CodeCache.h:
+ (JSC::SourceCodeValue::SourceCodeValue):
+ (CodeCacheMap):
+ (JSC::CodeCacheMap::add): Combined find() and set() into add().
+
+ (JSC::CodeCacheMap::remove):
+ (JSC::CodeCacheMap::age):
+ (JSC::CodeCacheMap::prune): Refactored to support above changes.
+
+2013-02-25 Carlos Garcia Campos <cgarcia@igalia.com>
+
+ [BlackBerry][ARM] Fix cast-align warnings in JavaScriptCore
+ https://bugs.webkit.org/show_bug.cgi?id=110738
+
+ Reviewed by Rob Buis.
+
+ Use reinterpret_cast_ptr instead of reinterpret_cast for
+ pointers.
+
+ * dfg/DFGOperations.cpp:
+ * heap/CopiedBlock.h:
+ (JSC::CopiedBlock::zeroFillWilderness):
+ * heap/WeakBlock.h:
+ (JSC::WeakBlock::asWeakImpl):
+ (JSC::WeakBlock::asFreeCell):
+ (JSC::WeakBlock::weakImpls):
+ * heap/WeakImpl.h:
+ (JSC::WeakImpl::asWeakImpl):
+ * interpreter/JSStack.cpp:
+ (JSC::JSStack::disableErrorStackReserve):
+ * interpreter/JSStack.h:
+ (JSC::JSStack::reservationEnd):
+ * runtime/ArrayStorage.h:
+ (JSC::ArrayStorage::from):
+ * runtime/Butterfly.h:
+ (JSC::Butterfly::indexingPayload):
+ * runtime/IndexingHeader.h:
+ (JSC::IndexingHeader::propertyStorage):
+ * runtime/JSActivation.h:
+ (JSC::JSActivation::tearOff):
+ (JSC::JSActivation::isTornOff):
+ (JSC::JSActivation::storage):
+
+2013-02-22 Filip Pizlo <fpizlo@apple.com>
+
+ DFG::SpeculativeJIT::speculateNumber() should just use SpeculateDoubleOperand instead of doing its own thing
+ https://bugs.webkit.org/show_bug.cgi?id=110659
+
+ Reviewed by Oliver Hunt and Mark Hahnenberg.
+
+ This simplifies the code, and also has the effect that if speculateNumber() is called
+ prior to someone actually using the number in a double context, then the number will
+ already be up-converted to double and ready to go.
+
+ Previously if this ever came up, the subsequent use would have to again branch to see
+ if the value is tagged as int or tagged as double.
+
+ On the other hand, if you ever did speculateNumber() and then used the value as a
+ JSValue, this will be a slow down now.
+
+ I suspect that the former (speculateNumber() and then use as number) is more likely
+ than the latter (speculateNumber() and then use as JSValue).
+
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::speculateNumber):
+
+2013-02-22 Filip Pizlo <fpizlo@apple.com>
+
+ DFG FixupPhase should have one common hook for knowing if a node is ever being speculated a certain way
+ https://bugs.webkit.org/show_bug.cgi?id=110650
+
+ Reviewed by Mark Hahnenberg.
+
+ Changes almost all calls to edge.setUseKind(kind) to be
+ setUseKindAndUnboxIfProfitable<kind>(edge). This will allow us to use the latter
+ as a hook for deciding which locals to unbox (webkit.org/b/110433).
+
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ (FixupPhase):
+ (JSC::DFG::FixupPhase::setUseKindAndUnboxIfProfitable):
+ (JSC::DFG::FixupPhase::fixIntEdge):
+ (JSC::DFG::FixupPhase::fixDoubleEdge):
+ (JSC::DFG::FixupPhase::attemptToMakeIntegerAdd):
+
+2013-02-22 Filip Pizlo <fpizlo@apple.com>
+
+ REGRESSION(r143654): some fast/js test crashes on 32 bit build
+ https://bugs.webkit.org/show_bug.cgi?id=110590
+
+ Reviewed by Mark Hahnenberg.
+
+ In compileValueToInt32, the refactoring in r143654 undid one of the fixes from
+ r143314 due to a merge goof.
+
+ In speculateNumber, we were simply forgetting to indicate that we need a
+ ManualOperandSpeculation on a JSValueOperand. ManualOperandSpeculation should
+ be passed whenever you will be performing the type checks yourself rather than
+ using the operand class to do it for you.
+
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileValueToInt32):
+ (JSC::DFG::SpeculativeJIT::speculateNumber):
+
+2013-02-22 Geoffrey Garen <ggaren@apple.com>
+
+ Not reviewed.
+
+ Fix the 32-bit build by using the right data type in more places.
+
+ * runtime/CodeCache.h:
+ (CodeCacheMap):
+
+2013-02-22 Geoffrey Garen <ggaren@apple.com>
+
+ Not reviewed.
+
+ Fix the 32-bit build by using the right data type.
+
+ * runtime/CodeCache.h:
+ (JSC::CodeCacheMap::find):
+
+2013-02-21 Geoffrey Garen <ggaren@apple.com>
+
+ Code cache size should adapt to workload
+ https://bugs.webkit.org/show_bug.cgi?id=110560
+
+ Reviewed by Antti Koivisto.
+
+ (*) 5% PLT arithmetic mean speedup
+ (*) 10% PLT geometric mean speedup
+ (*) 3.4X microbenchmark speedup
+ (*) Reduces initial cache capacity by 16X
+
+ * runtime/CodeCache.cpp:
+ (JSC::CodeCache::CodeCache): Updated for interface change.
+
+ * runtime/CodeCache.h:
+ (JSC::SourceCodeValue::SourceCodeValue):
+ (SourceCodeValue): Turned the cache value into a struct so it can track its age.
+
+ (CodeCacheMap):
+ (JSC::CodeCacheMap::CodeCacheMap):
+ (JSC::CodeCacheMap::find):
+ (JSC::CodeCacheMap::set):
+ (JSC::CodeCacheMap::clear):
+ (JSC::CodeCacheMap::pruneIfNeeded):
+ (CodeCache): Grow and shrink in response to usage.
+
+2013-02-21 Jessie Berlin <jberlin@apple.com>
+
+ Fix a typo that broke the 32 bit build.
+
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2013-02-21 Michael Saboff <msaboff@apple.com>
+
+ 25-30% regression in V8 RayTrace test in 32 bit builds with JIT disabled
+ https://bugs.webkit.org/show_bug.cgi?id=110539
+
+ Reviewed by Filip Pizlo.
+
+ Change the scale used to lookup pointers in JSGlobalObject::m_specialPointers to be 4 bytes for
+ the 32 bit version of the interpreter.
+
+ * llint/LowLevelInterpreter32_64.asm:
+
+2013-02-21 Roger Fong <roger_fong@apple.com>
+
+ Unreviewed. Add executable property to cmd file.
+ Required for executable files to maintain their executable permissions over svn.
+
+ * JavaScriptCore.vcxproj/copy-files.cmd: Added property svn:executable.
+
+2013-02-21 Filip Pizlo <fpizlo@apple.com>
+
+ Object allocation profiling will refuse to create objects with more than JSFinalObject::maxInlineCapacity() inline slots, but JSFunction::allocationProfile() asserts that the number of inline slots is always what it asked for
+ https://bugs.webkit.org/show_bug.cgi?id=110519
+ <rdar://problem/13218566>
+
+ Reviewed by Geoffrey Garen.
+
+ * runtime/JSFunction.h:
+ (JSC::JSFunction::allocationProfile):
+
+2013-02-21 Roger Fong <roger_fong@apple.com>
+
+ Unreviewed. Build fix for VS2010 WebKit solution.
+
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+
+2013-02-20 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should not change its mind about what type speculations a node does, by encoding the checks in the NodeType, UseKind, and ArrayMode
+ https://bugs.webkit.org/show_bug.cgi?id=109371
+
+ Reviewed by Oliver Hunt.
+
+ FixupPhase now locks in the speculations that each node will do. The DFG then
+ remembers those speculations, and doesn't change its mind about them even if the
+ graph is transformed - for example if a node's child is repointed to a different
+ node as part of CSE, CFG simplification, or folding. Each node ensures that it
+ executes the speculations promised by its edges. This is true even for Phantom
+ nodes.
+
+ This still leaves some craziness on the table for future work, like the
+ elimination of speculating SetLocal's due to CFG simplification
+ (webkit.org/b/109388) and elimination of nodes via DCE (webkit.org/b/109389).
+
+ In all, this allows for a huge simplification of the DFG. Instead of having to
+ execute the right speculation heuristic each time you want to decide what a node
+ does (for example Node::shouldSpeculateInteger(child1, child2) &&
+ node->canSpeculateInteger()), you just ask for the use kinds of its children
+ (typically node->binaryUseKind() == Int32Use). Because the use kinds are
+ discrete, you can often just switch over them. This makes many parts of the code
+ more clear than they were before.
+
+ Having UseKinds describe the speculations being performed also makes it far
+ easier to perform analyses that need to know what speculations are done. This is
+ so far only used to simplify large parts of the CFA.
+
+ To have a larger vocabulary of UseKinds, this also changes the node allocator to
+ be able to round up Node sizes to the nearest multiple of 16.
+
+ This appears to be neutral on benchmarks, except for some goofy speed-ups, like
+ 8% on Octane/box2d.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::startExecuting):
+ (DFG):
+ (JSC::DFG::AbstractState::executeEdges):
+ (JSC::DFG::AbstractState::verifyEdge):
+ (JSC::DFG::AbstractState::verifyEdges):
+ (JSC::DFG::AbstractState::executeEffects):
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGAbstractState.h:
+ (AbstractState):
+ (JSC::DFG::AbstractState::filterEdgeByUse):
+ (JSC::DFG::AbstractState::filterByType):
+ * dfg/DFGAbstractValue.h:
+ (JSC::DFG::AbstractValue::filter):
+ * dfg/DFGAdjacencyList.h:
+ (JSC::DFG::AdjacencyList::AdjacencyList):
+ (JSC::DFG::AdjacencyList::child):
+ (JSC::DFG::AdjacencyList::setChild):
+ (JSC::DFG::AdjacencyList::reset):
+ (JSC::DFG::AdjacencyList::firstChild):
+ (JSC::DFG::AdjacencyList::setFirstChild):
+ (JSC::DFG::AdjacencyList::numChildren):
+ (JSC::DFG::AdjacencyList::setNumChildren):
+ (AdjacencyList):
+ * dfg/DFGAllocator.h:
+ (DFG):
+ (Allocator):
+ (JSC::DFG::Allocator::cellSize):
+ (JSC::DFG::Allocator::Region::headerSize):
+ (JSC::DFG::Allocator::Region::numberOfThingsPerRegion):
+ (JSC::DFG::Allocator::Region::payloadSize):
+ (JSC::DFG::Allocator::Region::payloadBegin):
+ (JSC::DFG::Allocator::Region::payloadEnd):
+ (JSC::DFG::Allocator::Region::isInThisRegion):
+ (JSC::DFG::::Allocator):
+ (JSC::DFG::::~Allocator):
+ (JSC::DFG::::allocate):
+ (JSC::DFG::::free):
+ (JSC::DFG::::freeAll):
+ (JSC::DFG::::reset):
+ (JSC::DFG::::indexOf):
+ (JSC::DFG::::allocatorOf):
+ (JSC::DFG::::bumpAllocate):
+ (JSC::DFG::::freeListAllocate):
+ (JSC::DFG::::allocateSlow):
+ (JSC::DFG::::freeRegionsStartingAt):
+ (JSC::DFG::::startBumpingIn):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::addToGraph):
+ (JSC::DFG::ByteCodeParser::handleMinMax):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::setLocalStoreElimination):
+ (JSC::DFG::CSEPhase::eliminateIrrelevantPhantomChildren):
+ (JSC::DFG::CSEPhase::setReplacement):
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ * dfg/DFGCommon.h:
+ (DFG):
+ * dfg/DFGConstantFoldingPhase.cpp:
+ (JSC::DFG::ConstantFoldingPhase::foldConstants):
+ (JSC::DFG::ConstantFoldingPhase::addStructureTransitionCheck):
+ * dfg/DFGDriver.cpp:
+ (JSC::DFG::compile):
+ * dfg/DFGEdge.cpp:
+ (JSC::DFG::Edge::dump):
+ * dfg/DFGEdge.h:
+ (JSC::DFG::Edge::useKindUnchecked):
+ (JSC::DFG::Edge::useKind):
+ (JSC::DFG::Edge::shift):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::run):
+ (JSC::DFG::FixupPhase::fixupNode):
+ (JSC::DFG::FixupPhase::checkArray):
+ (JSC::DFG::FixupPhase::blessArrayOperation):
+ (JSC::DFG::FixupPhase::fixIntEdge):
+ (JSC::DFG::FixupPhase::fixDoubleEdge):
+ (JSC::DFG::FixupPhase::injectInt32ToDoubleNode):
+ (FixupPhase):
+ (JSC::DFG::FixupPhase::truncateConstantToInt32):
+ (JSC::DFG::FixupPhase::truncateConstantsIfNecessary):
+ (JSC::DFG::FixupPhase::attemptToMakeIntegerAdd):
+ * dfg/DFGGraph.cpp:
+ (DFG):
+ (JSC::DFG::Graph::refChildren):
+ (JSC::DFG::Graph::derefChildren):
+ * dfg/DFGGraph.h:
+ (JSC::DFG::Graph::ref):
+ (JSC::DFG::Graph::deref):
+ (JSC::DFG::Graph::performSubstitution):
+ (JSC::DFG::Graph::isPredictedNumerical):
+ (JSC::DFG::Graph::addImmediateShouldSpeculateInteger):
+ (DFG):
+ * dfg/DFGNode.h:
+ (JSC::DFG::Node::Node):
+ (JSC::DFG::Node::convertToGetByOffset):
+ (JSC::DFG::Node::convertToPutByOffset):
+ (JSC::DFG::Node::willHaveCodeGenOrOSR):
+ (JSC::DFG::Node::child1):
+ (JSC::DFG::Node::child2):
+ (JSC::DFG::Node::child3):
+ (JSC::DFG::Node::binaryUseKind):
+ (Node):
+ (JSC::DFG::Node::isBinaryUseKind):
+ * dfg/DFGNodeAllocator.h:
+ (DFG):
+ * dfg/DFGNodeFlags.cpp:
+ (JSC::DFG::nodeFlagsAsString):
+ * dfg/DFGNodeType.h:
+ (DFG):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::speculationCheck):
+ (DFG):
+ (JSC::DFG::SpeculativeJIT::speculationWatchpoint):
+ (JSC::DFG::SpeculativeJIT::forwardSpeculationCheck):
+ (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
+ (JSC::DFG::SpeculativeJIT::typeCheck):
+ (JSC::DFG::SpeculativeJIT::forwardTypeCheck):
+ (JSC::DFG::SpeculativeJIT::fillStorage):
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
+ (JSC::DFG::SpeculativeJIT::compile):
+ (JSC::DFG::SpeculativeJIT::compileDoublePutByVal):
+ (JSC::DFG::SpeculativeJIT::compileValueToInt32):
+ (JSC::DFG::SpeculativeJIT::compileInt32ToDouble):
+ (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
+ (JSC::DFG::SpeculativeJIT::compileInstanceOf):
+ (JSC::DFG::SpeculativeJIT::compileAdd):
+ (JSC::DFG::SpeculativeJIT::compileArithSub):
+ (JSC::DFG::SpeculativeJIT::compileArithNegate):
+ (JSC::DFG::SpeculativeJIT::compileArithMul):
+ (JSC::DFG::SpeculativeJIT::compileArithMod):
+ (JSC::DFG::SpeculativeJIT::compare):
+ (JSC::DFG::SpeculativeJIT::compileStrictEq):
+ (JSC::DFG::SpeculativeJIT::speculateInt32):
+ (JSC::DFG::SpeculativeJIT::speculateNumber):
+ (JSC::DFG::SpeculativeJIT::speculateRealNumber):
+ (JSC::DFG::SpeculativeJIT::speculateBoolean):
+ (JSC::DFG::SpeculativeJIT::speculateCell):
+ (JSC::DFG::SpeculativeJIT::speculateObject):
+ (JSC::DFG::SpeculativeJIT::speculateObjectOrOther):
+ (JSC::DFG::SpeculativeJIT::speculateString):
+ (JSC::DFG::SpeculativeJIT::speculateNotCell):
+ (JSC::DFG::SpeculativeJIT::speculateOther):
+ (JSC::DFG::SpeculativeJIT::speculate):
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+ (JSC::DFG::SpeculativeJIT::valueOfNumberConstant):
+ (JSC::DFG::SpeculativeJIT::needsTypeCheck):
+ (JSC::DFG::IntegerOperand::IntegerOperand):
+ (JSC::DFG::IntegerOperand::edge):
+ (IntegerOperand):
+ (JSC::DFG::IntegerOperand::node):
+ (JSC::DFG::IntegerOperand::gpr):
+ (JSC::DFG::IntegerOperand::use):
+ (JSC::DFG::JSValueOperand::JSValueOperand):
+ (JSValueOperand):
+ (JSC::DFG::JSValueOperand::edge):
+ (JSC::DFG::JSValueOperand::node):
+ (JSC::DFG::JSValueOperand::gpr):
+ (JSC::DFG::JSValueOperand::fill):
+ (JSC::DFG::JSValueOperand::use):
+ (JSC::DFG::StorageOperand::StorageOperand):
+ (JSC::DFG::StorageOperand::edge):
+ (StorageOperand):
+ (JSC::DFG::StorageOperand::node):
+ (JSC::DFG::StorageOperand::gpr):
+ (JSC::DFG::StorageOperand::use):
+ (JSC::DFG::SpeculateIntegerOperand::SpeculateIntegerOperand):
+ (SpeculateIntegerOperand):
+ (JSC::DFG::SpeculateIntegerOperand::edge):
+ (JSC::DFG::SpeculateIntegerOperand::node):
+ (JSC::DFG::SpeculateIntegerOperand::gpr):
+ (JSC::DFG::SpeculateIntegerOperand::use):
+ (JSC::DFG::SpeculateStrictInt32Operand::SpeculateStrictInt32Operand):
+ (SpeculateStrictInt32Operand):
+ (JSC::DFG::SpeculateStrictInt32Operand::edge):
+ (JSC::DFG::SpeculateStrictInt32Operand::node):
+ (JSC::DFG::SpeculateStrictInt32Operand::gpr):
+ (JSC::DFG::SpeculateStrictInt32Operand::use):
+ (JSC::DFG::SpeculateDoubleOperand::SpeculateDoubleOperand):
+ (SpeculateDoubleOperand):
+ (JSC::DFG::SpeculateDoubleOperand::edge):
+ (JSC::DFG::SpeculateDoubleOperand::node):
+ (JSC::DFG::SpeculateDoubleOperand::fpr):
+ (JSC::DFG::SpeculateDoubleOperand::use):
+ (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
+ (SpeculateCellOperand):
+ (JSC::DFG::SpeculateCellOperand::edge):
+ (JSC::DFG::SpeculateCellOperand::node):
+ (JSC::DFG::SpeculateCellOperand::gpr):
+ (JSC::DFG::SpeculateCellOperand::use):
+ (JSC::DFG::SpeculateBooleanOperand::SpeculateBooleanOperand):
+ (JSC::DFG::SpeculateBooleanOperand::edge):
+ (SpeculateBooleanOperand):
+ (JSC::DFG::SpeculateBooleanOperand::node):
+ (JSC::DFG::SpeculateBooleanOperand::gpr):
+ (JSC::DFG::SpeculateBooleanOperand::use):
+ (DFG):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::fillInteger):
+ (JSC::DFG::SpeculativeJIT::fillJSValue):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateInt):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntStrict):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
+ (JSC::DFG::SpeculativeJIT::compileObjectEquality):
+ (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
+ (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
+ (JSC::DFG::SpeculativeJIT::compileLogicalNot):
+ (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
+ (JSC::DFG::SpeculativeJIT::emitBranch):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::fillInteger):
+ (JSC::DFG::SpeculativeJIT::fillJSValue):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateInt):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntStrict):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
+ (JSC::DFG::SpeculativeJIT::compileObjectEquality):
+ (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
+ (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
+ (JSC::DFG::SpeculativeJIT::compileLogicalNot):
+ (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
+ (JSC::DFG::SpeculativeJIT::emitBranch):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGStructureCheckHoistingPhase.cpp:
+ (JSC::DFG::StructureCheckHoistingPhase::run):
+ * dfg/DFGUseKind.cpp: Added.
+ (WTF):
+ (WTF::printInternal):
+ * dfg/DFGUseKind.h: Added.
+ (DFG):
+ (JSC::DFG::typeFilterFor):
+ (JSC::DFG::isNumerical):
+ (WTF):
+ * dfg/DFGValidate.cpp:
+ (JSC::DFG::Validate::reportValidationContext):
+
+2013-02-20 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: Need a way to use the Objective-C JavaScript API with WebKit
+ https://bugs.webkit.org/show_bug.cgi?id=106059
+
+ Reviewed by Geoffrey Garen.
+
+ * API/JSBase.h: Renamed enable flag for API.
+ * API/JSBlockAdaptor.h: Using new flag.
+ * API/JSBlockAdaptor.mm: Ditto.
+ * API/JSContext.h: Add convenience C API conversion function for JSGlobalContextRef.
+ * API/JSContext.mm:
+ (-[JSContext JSGlobalContextRef]): Implementation of C API convenience function.
+ (-[JSContext initWithVirtualMachine:]): We don't use the m_apiData field any more.
+ (-[JSContext initWithGlobalContextRef:]): init method for allocating new JSContexts given a JSGlobalContextRef.
+ (-[JSContext dealloc]): No more m_apiData.
+ (-[JSContext wrapperForObjCObject:]): Renamed wrapperForObject.
+ (-[JSContext wrapperForJSObject:]): Fetches or allocates the JSValue for the specified JSValueRef in this JSContext.
+ (+[JSContext contextWithGlobalContextRef:]): Helper function to grab the lightweight JSContext wrapper for a given
+ JSGlobalContextRef from the global wrapper cache or allocate a new one if there isn't already one.
+ * API/JSContextInternal.h: New flag, new method declaration for initWithGlobalContextRef.
+ * API/JSExport.h: New flag.
+ * API/JSValue.h: New flag and new C API convenience method.
+ * API/JSValue.mm:
+ (-[JSValue JSValueRef]): Implementation of the C API convenience method.
+ (objectToValueWithoutCopy):
+ (+[JSValue valueWithValue:inContext:]): We now ask the JSContext for an Objective-C JSValue wrapper, which it can cache
+ in its internal JSWrapperMap.
+ * API/JSValueInternal.h:
+ * API/JSVirtualMachine.h:
+ * API/JSVirtualMachine.mm: Added global cache that maps JSContextGroupRef -> JSVirtualMachine lightweight wrappers.
+ (wrapperCacheLock):
+ (initWrapperCache):
+ (+[JSVMWrapperCache addWrapper:forJSContextGroupRef:]):
+ (+[JSVMWrapperCache wrapperForJSContextGroupRef:]):
+ (-[JSVirtualMachine init]):
+ (-[JSVirtualMachine initWithContextGroupRef:]):
+ (-[JSVirtualMachine dealloc]):
+ (+[JSVirtualMachine virtualMachineWithContextGroupRef:]):
+ (-[JSVirtualMachine contextForGlobalContextRef:]):
+ (-[JSVirtualMachine addContext:forGlobalContextRef:]):
+ * API/JSVirtualMachineInternal.h:
+ * API/JSWrapperMap.h:
+ * API/JSWrapperMap.mm:
+ (-[JSObjCClassInfo allocateConstructorAndPrototypeWithSuperClassInfo:]): We use the JSObjectSetPrototype C API call because
+ setting the __proto__ property causes all sorts of bad things to happen behind the scenes, which can cause crashes based on
+ when it gets called.
+ (-[JSWrapperMap initWithContext:]):
+ (-[JSWrapperMap jsWrapperForObject:]):
+ (-[JSWrapperMap objcWrapperForJSValueRef:]):
+ * API/JavaScriptCore.h:
+ * API/ObjCCallbackFunction.h:
+ * API/ObjCCallbackFunction.mm:
+ (ObjCCallbackFunction::ObjCCallbackFunction): We never actually should have retained the target in the case that we had a
+ block as a callback. Blocks are initially allocated on the stack and are only moved to the heap if we call their copy method.
+ Retaining the block on the stack was a bad idea because if that stack frame ever went away and we called the block later,
+ we'd crash and burn.
+ (ObjCCallbackFunction::setContext): We need a new setter for when the weak reference to a JSContext inside an ObjCCallbackFunction
+ disappears, we can allocate a new one in its place.
+ (ObjCCallbackFunction):
+ (objCCallbackFunctionCallAsFunction): Reset the callback's context if it's ever destroyed.
+ (objCCallbackFunctionForInvocation): Again, don't set the __proto__ property because it uses black magic that can cause us to crash
+ depending on when this is called.
+ (objCCallbackFunctionForBlock): Here is where we copy the block to the heap when we're first creating the callback object for it.
+ * API/tests/testapi.c:
+ (main):
+ * API/tests/testapi.mm: We're going to get rid of the automatic block conversion, since that is causing leaks. I changed it
+ here in this test just so that it wouldn't mask any other potential leaks. Also modified some of the tests since JSContexts are
+ just lightweight wrappers now, we're not guaranteed to get the same pointer back from the call to [JSValue context] as the one
+ that the value was created in.
+ (-[TestObject callback:]):
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData): No more m_apiData.
+ * runtime/JSGlobalData.h: Ditto.
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::JSGlobalObject): Ditto.
+ * runtime/JSGlobalObject.h:
+
+2013-02-19 Filip Pizlo <fpizlo@apple.com>
+
+ DFG::SpeculativeJIT::compileInt32ToDouble() has an unnecessary case for constant operands
+ https://bugs.webkit.org/show_bug.cgi?id=110309
+
+ Reviewed by Sam Weinig.
+
+ It used to be necessary, back when we didn't have constant folding. Now we have
+ constant folding. So we don't need it.
+
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileInt32ToDouble):
+
+2013-02-20 Filip Pizlo <fpizlo@apple.com>
+
+ DFG inlines Resolves that it doesn't know how to handle correctly
+ https://bugs.webkit.org/show_bug.cgi?id=110405
+
+ Reviewed by Geoffrey Garen.
+
+ Don't try to be clever: if there's a failing resolve, we can't inline it, period.
+
+ * dfg/DFGCapabilities.h:
+ (JSC::DFG::canInlineResolveOperations):
+ (JSC::DFG::canInlineOpcode):
+
+2013-02-20 Roger Fong <roger_fong@apple.com>
+
+ Get VS2010 Solution B&I ready.
+ <rdar://problem/1322988>
+
+ Rubberstamped by Timothy Horton.
+
+ Add Production configuration.
+ Add a JavaScriptCore submit solution with a DebugSuffix configuration.
+ Modify JavaScriptCore.make as necessary.
+
+ * JavaScriptCore.vcxproj/JavaScriptCore.make: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCore.sln: Removed.
+ * JavaScriptCore.vcxproj/JavaScriptCore.submit.sln: Copied from Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.sln.
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+ * JavaScriptCore.vcxproj/JavaScriptCoreCommon.props:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGenerator.vcxproj:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorCommon.props:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorPostBuild.cmd:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorPreBuild.cmd:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorProduction.props: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorRelease.props:
+ * JavaScriptCore.vcxproj/JavaScriptCoreGenerated.vcxproj:
+ * JavaScriptCore.vcxproj/JavaScriptCoreGenerated.vcxproj.filters:
+ * JavaScriptCore.vcxproj/JavaScriptCoreGeneratedProduction.props: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreGeneratedRelease.props:
+ * JavaScriptCore.vcxproj/JavaScriptCoreProduction.props: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreRelease.props:
+ * JavaScriptCore.vcxproj/LLInt/LLIntAssembly/LLIntAssembly.vcxproj:
+ * JavaScriptCore.vcxproj/LLInt/LLIntDesiredOffsets/LLIntDesiredOffsets.vcxproj:
+ * JavaScriptCore.vcxproj/LLInt/LLIntOffsetsExtractor/LLIntOffsetsExtractor.vcxproj:
+ * JavaScriptCore.vcxproj/LLInt/LLIntOffsetsExtractor/LLIntOffsetsExtractorCommon.props:
+ * JavaScriptCore.vcxproj/LLInt/LLIntOffsetsExtractor/LLIntOffsetsExtractorDebug.props:
+ * JavaScriptCore.vcxproj/LLInt/LLIntOffsetsExtractor/LLIntOffsetsExtractorProduction.props: Added.
+ * JavaScriptCore.vcxproj/LLInt/LLIntOffsetsExtractor/LLIntOffsetsExtractorRelease.props:
+ * JavaScriptCore.vcxproj/jsc/jsc.vcxproj:
+ * JavaScriptCore.vcxproj/jsc/jscCommon.props:
+ * JavaScriptCore.vcxproj/jsc/jscProduction.props: Added.
+ * JavaScriptCore.vcxproj/jsc/jscRelease.props:
+ * JavaScriptCore.vcxproj/testRegExp/testRegExp.vcxproj:
+ * JavaScriptCore.vcxproj/testRegExp/testRegExpCommon.props:
+ * JavaScriptCore.vcxproj/testRegExp/testRegExpProduction.props: Added.
+ * JavaScriptCore.vcxproj/testRegExp/testRegExpRelease.props:
+ * JavaScriptCore.vcxproj/testapi/testapi.vcxproj:
+ * JavaScriptCore.vcxproj/testapi/testapiCommon.props:
+ * JavaScriptCore.vcxproj/testapi/testapiProduction.props: Added.
+ * JavaScriptCore.vcxproj/testapi/testapiRelease.props:
+
+2013-02-19 Jer Noble <jer.noble@apple.com>
+
+ EME: Enable both ENCRYPTED_MEDIA and ENCRYPTED_MEDIA_V2 until clients transition to the new API.
+ https://bugs.webkit.org/show_bug.cgi?id=110284
+
+ Reviewed by Eric Carlson.
+
+ Re-enable the ENCRYPTED_MEDIA flag.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2013-02-20 Dirk Schulze <krit@webkit.org>
+
+ Enable CANVAS_PATH flag
+ https://bugs.webkit.org/show_bug.cgi?id=108508
+
+ Reviewed by Simon Fraser.
+
+ Enable CANVAS_PATH flag on trunk.
+
+ Existing tests cover the feature.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2013-02-19 Mark Rowe <mrowe@apple.com>
+
+ Unreviewed, uninteresting change to test a theory about bad dependency handling.
+
+ * API/JSStringRefCF.cpp:
+ (JSStringCreateWithCFString): Remove an unnecessary else clause.
+
+2013-02-19 Oliver Hunt <oliver@apple.com>
+
+ Silence some analyzer warnings
+ https://bugs.webkit.org/show_bug.cgi?id=110281
+
+ Reviewed by Mark Hahnenberg.
+
+ The static analyzer believes that callerCodeBlock can be null,
+ based on other code performing null tests. This should not
+ ever be the case, but we'll add RELEASE_ASSERTs to make it
+ obvious if we're ever wrong.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::getCallerInfo):
+
+2013-02-19 Oliver Hunt <oliver@apple.com>
+
+ Don't force everything to be blinded in debug builds
+ https://bugs.webkit.org/show_bug.cgi?id=110279
+
+ Reviewed by Mark Hahnenberg.
+
+ Switch to an explicit flag for indicating that we want
+ every constant to be blinded.
+
+ * assembler/MacroAssembler.h:
+ (JSC::MacroAssembler::shouldBlind):
+
+2013-02-19 Filip Pizlo <fpizlo@apple.com>
+
+ Fix indentation of Opcode.h
+
+ Rubber stamped by Mark Hahnenberg.
+
+ * bytecode/Opcode.h:
+
+2013-02-19 Filip Pizlo <fpizlo@apple.com>
+
+ Moved PolymorphicAccessStructureList into its own file.
+
+ Rubber stamped by Mark Hahnenberg.
+
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/Instruction.h:
+ (JSC):
+ * bytecode/PolymorphicAccessStructureList.h: Added.
+ (JSC):
+ (PolymorphicAccessStructureList):
+ (PolymorphicStubInfo):
+ (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::PolymorphicStubInfo):
+ (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set):
+ (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList):
+ (JSC::PolymorphicAccessStructureList::visitWeak):
+ * bytecode/StructureStubInfo.h:
+
+2013-02-19 Filip Pizlo <fpizlo@apple.com>
+
+ Fix indentation of Instruction.h
+
+ Rubber stamped by Mark Hahnenberg.
+
+ * bytecode/Instruction.h:
+
+2013-02-18 Geoffrey Garen <ggaren@apple.com>
+
+ Unreviewed, rolling in r143348.
+ http://trac.webkit.org/changeset/143348
+ https://bugs.webkit.org/show_bug.cgi?id=110242
+
+ The bug was that isEmptyValue() was returning true for the deleted value.
+ Fixed this and simplified things further by delegating to m_sourceCode
+ for both isNull() and isHashTableDeletedValue(), so they can't be out of
+ sync.
+
+ * runtime/CodeCache.cpp:
+ (JSC::CodeCache::getFunctionExecutableFromGlobalCode):
+ * runtime/CodeCache.h:
+ (JSC::SourceCodeKey::SourceCodeKey):
+ (JSC::SourceCodeKey::isHashTableDeletedValue):
+ (JSC::SourceCodeKey::hash):
+ (JSC::SourceCodeKey::length):
+ (JSC::SourceCodeKey::isNull):
+ (JSC::SourceCodeKey::operator==):
+ (SourceCodeKey):
+
+2013-02-15 Martin Robinson <mrobinson@igalia.com>
+
+ [GTK] Improve gyp build JavaScriptCore code generation
+ https://bugs.webkit.org/show_bug.cgi?id=109969
+
+ Reviewed by Dirk Pranke.
+
+ Switch away from using DerivedSources.make when building JavaScriptCore generated
+ sources. This bring a couple advantages, such as building the sources in parallel,
+ but requires us to list the generated sources more than once.
+
+ * JavaScriptCore.gyp/JavaScriptCoreGTK.gyp: Add rules for generating JavaScriptCore sources.
+ * JavaScriptCore.gyp/generate-derived-sources.sh: Added.
+ * JavaScriptCore.gyp/redirect-stdout.sh: Added.
+
+2013-02-19 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r143348.
+ http://trac.webkit.org/changeset/143348
+ https://bugs.webkit.org/show_bug.cgi?id=110242
+
+ "Caused a deleted value sentinel crash on the layout tests"
+ (Requested by ggaren on #webkit).
+
+ * runtime/CodeCache.cpp:
+ (JSC::CodeCache::getFunctionExecutableFromGlobalCode):
+ * runtime/CodeCache.h:
+ (JSC::SourceCodeKey::SourceCodeKey):
+ (JSC::SourceCodeKey::isHashTableDeletedValue):
+ (JSC::SourceCodeKey::hash):
+ (JSC::SourceCodeKey::length):
+ (JSC::SourceCodeKey::isNull):
+ (JSC::SourceCodeKey::operator==):
+ (SourceCodeKey):
+
+2013-02-19 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ HeapBlock::destroy should issue warning if result is unused
+ https://bugs.webkit.org/show_bug.cgi?id=110233
+
+ Reviewed by Oliver Hunt.
+
+ To enforce the fact that we need to return blocks to the BlockAllocator after calling destroy,
+ we should add WARN_UNUSED_RETURN to HeapBlock::destroy and any other destroy functions in its subclasses.
+
+ * heap/HeapBlock.h:
+
+2013-02-19 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ WeakSet::removeAllocator leaks WeakBlocks
+ https://bugs.webkit.org/show_bug.cgi?id=110228
+
+ Reviewed by Geoffrey Garen.
+
+ We need to return the WeakBlock to the BlockAllocator after the call to WeakBlock::destroy.
+
+ * heap/WeakSet.cpp:
+ (JSC::WeakSet::removeAllocator):
+
+2013-02-18 Geoffrey Garen <ggaren@apple.com>
+
+ Save space on keys in the CodeCache
+ https://bugs.webkit.org/show_bug.cgi?id=110179
+
+ Reviewed by Oliver Hunt.
+
+ Share the SourceProvider's string instead of making our own copy. This
+ chops off 16MB - 32MB from the CodeCache's memory footprint when full.
+ (It's 16MB when the strings are LChar, and 32MB when they're UChar.)
+
+ * runtime/CodeCache.cpp:
+ (JSC::CodeCache::getFunctionExecutableFromGlobalCode):
+ * runtime/CodeCache.h: Removed a defunct enum value.
+
+ (JSC::SourceCodeKey::SourceCodeKey):
+ (JSC::SourceCodeKey::isHashTableDeletedValue):
+ (SourceCodeKey):
+ (JSC::SourceCodeKey::hash):
+ (JSC::SourceCodeKey::length):
+ (JSC::SourceCodeKey::isNull):
+ (JSC::SourceCodeKey::string):
+ (JSC::SourceCodeKey::operator==): Store a SourceCode instead of a String
+ so we can share our string with our SourceProvider. Cache our hash so
+ we don't have to re-decode our string just to re-hash the table.
+
+2013-02-19 Zoltan Herczeg <zherczeg@webkit.org>
+
+ revertBranchPtrWithPatch is incorrect on ARM traditional
+ https://bugs.webkit.org/show_bug.cgi?id=110201
+
+ Reviewed by Oliver Hunt.
+
+ Revert two instructions back to their original value.
+
+ * assembler/ARMAssembler.h:
+ (JSC::ARMAssembler::revertBranchPtrWithPatch):
+ (ARMAssembler):
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::branchPtrWithPatch):
+ (JSC::MacroAssemblerARM::revertJumpReplacementToBranchPtrWithPatch):
+
+2013-02-19 Filip Pizlo <fpizlo@apple.com>
+
+ REGRESSION(r143241): It made 27 layout tests crash on 32 bit platforms
+ https://bugs.webkit.org/show_bug.cgi?id=110184
+
+ Reviewed by Zoltan Herczeg.
+
+ 32-bit backend was making all sorts of crazy assumptions, which happened to mostly
+ not break things prior to http://trac.webkit.org/changeset/143241. This brings the
+ 32-bit backend's type speculation fully into compliance with what the 64-bit
+ backend does.
+
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::checkGeneratedTypeForToInt32):
+ (JSC::DFG::SpeculativeJIT::compileValueToInt32):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
+
+2013-02-18 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Unreviewed build fix for Apple Windows. Second stage.
+ Add missed export statement.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+
+2013-02-18 Roger Fong <roger_fong@apple.com>
+
+ Unreviewed Windows build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+
+2013-02-18 Darin Adler <darin@apple.com>
+
+ Remove unneeded explicit function template arguments.
+ https://bugs.webkit.org/show_bug.cgi?id=110043
+
+ Reviewed by Ryosuke Niwa.
+
+ * runtime/Identifier.cpp:
+ (JSC::IdentifierASCIIStringTranslator::hash): Let the compiler deduce the type
+ when calling computeHashAndMaskTop8Bits.
+ (JSC::IdentifierLCharFromUCharTranslator::hash): Ditto.
+ * runtime/Identifier.h:
+ (JSC::IdentifierCharBufferTranslator::hash): Ditto.
+2013-02-18 Geoffrey Garen <ggaren@apple.com>
+
+ Shrank the SourceProvider cache
+ https://bugs.webkit.org/show_bug.cgi?id=110158
+
+ Reviewed by Oliver Hunt.
+
+ CodeCache is now our primary source cache, so a long-lived SourceProvider
+ cache is a waste. I measured this as a 10MB Membuster win; with more
+ precise instrumentation, Andreas estimated it as up to 30MB.
+
+ I didn't eliminate the SourceProvider cache because it's still useful
+ in speeding up uncached parsing of scripts with large nested functions
+ (i.e., all scripts).
+
+ * heap/Heap.cpp:
+ (JSC::Heap::collect): Discard all source provider caches after GC. This
+ is a convenient place to do so because it's reasonably soon after initial
+ parsing without being immediate.
+
+ * parser/Parser.cpp:
+ (JSC::::Parser): Updated for interface change: The heap now owns the
+ source provider cache, since most SourceProviders are not expected to
+ have one by default, and the heap is responsible for throwing them away.
+
+ (JSC::::parseInner): No need to update statistics on cache size, since
+ we're going to throw it away no matter what.
+
+ (JSC::::parseFunctionInfo): Reduced the minimum function size to 16. This
+ is a 27% win on a new parsing micro-benchmark I've added. Now that the
+ cache is temporary, we don't have to worry so much about its memory
+ footprint.
+
+ * parser/Parser.h:
+ (Parser): Updated for interface changes.
+
+ * parser/SourceProvider.cpp:
+ (JSC::SourceProvider::SourceProvider):
+ (JSC::SourceProvider::~SourceProvider):
+ * parser/SourceProvider.h:
+ (JSC):
+ (SourceProvider): SourceProvider doesn't own its cache anymore because
+ the cache is temporary.
+
+ * parser/SourceProviderCache.cpp:
+ (JSC::SourceProviderCache::clear):
+ (JSC::SourceProviderCache::add):
+ * parser/SourceProviderCache.h:
+ (JSC::SourceProviderCache::SourceProviderCache):
+ (SourceProviderCache):
+ * parser/SourceProviderCacheItem.h:
+ (SourceProviderCacheItem): No need to update statistics on cache size,
+ since we're going to throw it away no matter what.
+
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::addSourceProviderCache):
+ (JSC):
+ (JSC::JSGlobalData::clearSourceProviderCaches):
+ * runtime/JSGlobalData.h:
+ (JSC):
+ (JSGlobalData): Moved the cache here so it's easier to throw away.
+
+2013-02-18 Filip Pizlo <fpizlo@apple.com>
+
+ DFG backend Branch handling has duplicate code and dead code
+ https://bugs.webkit.org/show_bug.cgi?id=110162
+
+ Reviewed by Mark Hahnenberg.
+
+ Streamline the code, and make the 64 backend's optimizations make more sense
+ (i.e. not be dead code).
+
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::emitBranch):
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2013-02-18 Brent Fulgham <bfulgham@webkit.org>
+
+ [Windows] Unreviewed VS2010 build correction after r143273.
+
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: Add missing source
+ file SourceProvider.cpp.
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters: Ditto.
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in: Add missing exports.
+
+2013-02-18 Filip Pizlo <fpizlo@apple.com>
+
+ Structure::flattenDictionaryStructure should compute max offset in a manner that soundly handles the case where the property list becomes empty
+ https://bugs.webkit.org/show_bug.cgi?id=110155
+ <rdar://problem/13233773>
+
+ Reviewed by Mark Rowe.
+
+ This was a rookie mistake. It was doing:
+
+ for (blah) {
+ m_offset = foo // foo's monotonically increase in the loop
+ }
+
+ as a way of computing max offset for all of the properties. Except what if the loop doesn't
+ execute because there are no properties? Well, then, you're going to have a bogus m_offset.
+
+ The solution is to initialize m_offset at the top of the loop.
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::flattenDictionaryStructure):
+
+2013-02-18 Balazs Kilvady <kilvadyb@homejinni.com>
+
+ MIPS DFG implementation.
+ https://bugs.webkit.org/show_bug.cgi?id=101328
+
+ Reviewed by Oliver Hunt.
+
+ DFG implementation for MIPS.
+
+ * assembler/MIPSAssembler.h:
+ (JSC::MIPSAssembler::MIPSAssembler):
+ (JSC::MIPSAssembler::sllv):
+ (JSC::MIPSAssembler::movd):
+ (MIPSAssembler):
+ (JSC::MIPSAssembler::negd):
+ (JSC::MIPSAssembler::labelForWatchpoint):
+ (JSC::MIPSAssembler::label):
+ (JSC::MIPSAssembler::vmov):
+ (JSC::MIPSAssembler::linkDirectJump):
+ (JSC::MIPSAssembler::maxJumpReplacementSize):
+ (JSC::MIPSAssembler::revertJumpToMove):
+ (JSC::MIPSAssembler::replaceWithJump):
+ * assembler/MacroAssembler.h:
+ (MacroAssembler):
+ (JSC::MacroAssembler::poke):
+ * assembler/MacroAssemblerMIPS.h:
+ (JSC::MacroAssemblerMIPS::add32):
+ (MacroAssemblerMIPS):
+ (JSC::MacroAssemblerMIPS::and32):
+ (JSC::MacroAssemblerMIPS::lshift32):
+ (JSC::MacroAssemblerMIPS::mul32):
+ (JSC::MacroAssemblerMIPS::or32):
+ (JSC::MacroAssemblerMIPS::rshift32):
+ (JSC::MacroAssemblerMIPS::urshift32):
+ (JSC::MacroAssemblerMIPS::sub32):
+ (JSC::MacroAssemblerMIPS::xor32):
+ (JSC::MacroAssemblerMIPS::store32):
+ (JSC::MacroAssemblerMIPS::jump):
+ (JSC::MacroAssemblerMIPS::branchAdd32):
+ (JSC::MacroAssemblerMIPS::branchMul32):
+ (JSC::MacroAssemblerMIPS::branchSub32):
+ (JSC::MacroAssemblerMIPS::branchNeg32):
+ (JSC::MacroAssemblerMIPS::call):
+ (JSC::MacroAssemblerMIPS::loadDouble):
+ (JSC::MacroAssemblerMIPS::moveDouble):
+ (JSC::MacroAssemblerMIPS::swapDouble):
+ (JSC::MacroAssemblerMIPS::subDouble):
+ (JSC::MacroAssemblerMIPS::mulDouble):
+ (JSC::MacroAssemblerMIPS::divDouble):
+ (JSC::MacroAssemblerMIPS::negateDouble):
+ (JSC::MacroAssemblerMIPS::branchEqual):
+ (JSC::MacroAssemblerMIPS::branchNotEqual):
+ (JSC::MacroAssemblerMIPS::branchTruncateDoubleToInt32):
+ (JSC::MacroAssemblerMIPS::branchTruncateDoubleToUint32):
+ (JSC::MacroAssemblerMIPS::truncateDoubleToInt32):
+ (JSC::MacroAssemblerMIPS::truncateDoubleToUint32):
+ (JSC::MacroAssemblerMIPS::branchDoubleNonZero):
+ (JSC::MacroAssemblerMIPS::branchDoubleZeroOrNaN):
+ (JSC::MacroAssemblerMIPS::invert):
+ (JSC::MacroAssemblerMIPS::replaceWithJump):
+ (JSC::MacroAssemblerMIPS::maxJumpReplacementSize):
+ * dfg/DFGAssemblyHelpers.h:
+ (AssemblyHelpers):
+ (JSC::DFG::AssemblyHelpers::preserveReturnAddressAfterCall):
+ (JSC::DFG::AssemblyHelpers::restoreReturnAddressBeforeReturn):
+ (JSC::DFG::AssemblyHelpers::debugCall):
+ * dfg/DFGCCallHelpers.h:
+ (CCallHelpers):
+ (JSC::DFG::CCallHelpers::setupArguments):
+ (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
+ * dfg/DFGFPRInfo.h:
+ (DFG):
+ (FPRInfo):
+ (JSC::DFG::FPRInfo::toRegister):
+ (JSC::DFG::FPRInfo::toIndex):
+ (JSC::DFG::FPRInfo::debugName):
+ * dfg/DFGGPRInfo.h:
+ (DFG):
+ (GPRInfo):
+ (JSC::DFG::GPRInfo::toRegister):
+ (JSC::DFG::GPRInfo::toIndex):
+ (JSC::DFG::GPRInfo::debugName):
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+ * jit/JSInterfaceJIT.h:
+ (JSInterfaceJIT):
+ * runtime/JSGlobalData.h:
+ (JSC::ScratchBuffer::allocationSize):
+ (ScratchBuffer):
+
+2013-02-18 Filip Pizlo <fpizlo@apple.com>
+
+ DFG::SpeculativeJIT::isKnownXYZ methods should use CFA rather than other things
+ https://bugs.webkit.org/show_bug.cgi?id=110092
+
+ Reviewed by Geoffrey Garen.
+
+ These methods were previously using GenerationInfo and other things to try to
+ gain information that the CFA could give away for free, if you asked kindly
+ enough.
+
+ Also fixed CallLinkStatus's dump() method since it was making an invalid
+ assertion: we most certainly can have a status where the structure is non-null
+ and the executable is null, like if we're dealing with an InternalFunction.
+
+ Also removed calls to isKnownNotXYZ from fillSpeculateABC methods in 32_64. I
+ don't know why that was there. But it was causing asserts if the value was
+ empty - i.e. we had already exited unconditionally but we didn't know it. I
+ could have fixed this by introducing another form of isKnownNotXYZ which was
+ tolerant of empty values, but I didn't feel like fixing code that I knew to be
+ unnecessary. (More deeply, isKnownNotCell, for example, really asks: "do you
+ know that this value can never be a cell?" while some of the previous uses
+ wanted to ask: "do you know that this is a value that is not a cell?". The
+ former is "true" if the value is a contradiction [i.e. BOTTOM], while the
+ latter is "false" for contradictions, since contradictions are not values.)
+
+ * bytecode/CallLinkStatus.cpp:
+ (JSC::CallLinkStatus::dump):
+ * bytecode/CallLinkStatus.h:
+ (JSC::CallLinkStatus::CallLinkStatus):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (DFG):
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::isKnownInteger):
+ (JSC::DFG::SpeculativeJIT::isKnownCell):
+ (JSC::DFG::SpeculativeJIT::isKnownNotInteger):
+ (JSC::DFG::SpeculativeJIT::isKnownNotNumber):
+ (JSC::DFG::SpeculativeJIT::isKnownNotCell):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
+ * dfg/DFGStructureAbstractValue.h:
+ (JSC::DFG::StructureAbstractValue::dump):
+
+2013-02-17 Filip Pizlo <fpizlo@apple.com>
+
+ Get rid of DFG::DoubleOperand and simplify ValueToInt32
+ https://bugs.webkit.org/show_bug.cgi?id=110072
+
+ Reviewed by Geoffrey Garen.
+
+ ValueToInt32 had a side-effecting path, which was not OSR-friendly: an OSR after
+ the side-effect would lead to the side-effect re-executing. I got rid of that path
+ and replaced it with an optimization for the case where the input is speculated
+ number-or-other. This makes idioms like null|0 and true|0 work as expected, and
+ get optimized appropriately.
+
+ Also got rid of DoubleOperand. Replaced all remaining uses of it with
+ SpeculateDoubleOperand. Because the latter asserts that the Edge is a DoubleUse
+ edge and the remaining uses of DoubleOperand are all for untyped uses, I worked
+ around the assertion by setting the UseKind to DoubleUse by force. This is sound,
+ since all existing assertions for DoubleUse are actually asserting that we're not
+ converting a value to double unexpectedly. But all of these calls to
+ SpeculateDoubleOperand are when the operand is already known to be represented as
+ double, so there is no conversion.
+
+ This is neutral on benchmarks, except stanford-crypto-ccm, which speeds up a
+ little. Mostly, this is intended to delete a bunch of code. DoubleOperand was
+ equivalent to the replace-edge-with-DoubleUse trick that I'm using now, except it
+ involved a _lot_ more code.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ * dfg/DFGNodeType.h:
+ (DFG):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (DFG):
+ (JSC::DFG::SpeculativeJIT::compileValueToInt32):
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+ (DFG):
+ (FPRTemporary):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (DFG):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (DFG):
+
+2013-02-18 Ádám Kallai <kadam@inf.u-szeged.hu>
+
+ [Qt] Mountain Lion buildfix after r143147.
+
+ Reviewed by Csaba Osztrogonác.
+
+ * runtime/DateConstructor.cpp:
+
+2013-02-18 Zan Dobersek <zdobersek@igalia.com>
+
+ Stop placing std::isfinite and std::signbit inside the global scope
+ https://bugs.webkit.org/show_bug.cgi?id=109817
+
+ Reviewed by Darin Adler.
+
+ Prefix calls to the isfinite and signbit methods with std:: as the two
+ methods are no longer being imported into the global scope.
+
+ * assembler/MacroAssembler.h:
+ (JSC::MacroAssembler::shouldBlindDouble):
+ * offlineasm/cloop.rb:
+ * runtime/BigInteger.h:
+ (JSC::BigInteger::BigInteger):
+ * runtime/DateConstructor.cpp:
+ (JSC::constructDate):
+ * runtime/DatePrototype.cpp:
+ (JSC::fillStructuresUsingTimeArgs):
+ (JSC::fillStructuresUsingDateArgs):
+ (JSC::dateProtoFuncToISOString):
+ (JSC::dateProtoFuncSetYear):
+ * runtime/JSCJSValueInlines.h:
+ (JSC::JSValue::JSValue):
+ * runtime/JSGlobalObjectFunctions.cpp:
+ (JSC::globalFuncIsFinite):
+ * runtime/JSONObject.cpp:
+ (JSC::Stringifier::appendStringifiedValue):
+ * runtime/MathObject.cpp:
+ (JSC::mathProtoFuncMax): Also include an opportunistic style fix.
+ (JSC::mathProtoFuncMin): Ditto.
+ * runtime/NumberPrototype.cpp:
+ (JSC::toStringWithRadix):
+ (JSC::numberProtoFuncToExponential):
+ (JSC::numberProtoFuncToFixed):
+ (JSC::numberProtoFuncToPrecision):
+ (JSC::numberProtoFuncToString):
+ * runtime/Uint16WithFraction.h:
+ (JSC::Uint16WithFraction::Uint16WithFraction):
+
+2013-02-18 Ádám Kallai <kadam@inf.u-szeged.hu>
+
+ [Qt] Mountain Lion buildfix after r143147.
+
+ Reviewed by Csaba Osztrogonác.
+
+ * runtime/DateInstance.cpp:
+
+2013-02-18 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Unreviewed speculative build fix for Apple Win bots.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+
+2013-02-18 Filip Pizlo <fpizlo@apple.com>
+
+ Fix indentation of StructureStubInfo.h
+
+ Rubber stamped by Mark Hahnenberg.
+
+ * bytecode/StructureStubInfo.h:
+
+2013-02-18 Filip Pizlo <fpizlo@apple.com>
+
+ Fix indentation of JSGlobalObject.h and JSGlobalObjectFunctions.h
+
+ Rubber stamped by Mark Hahnenberg.
+
+ * runtime/JSGlobalObject.h:
+ * runtime/JSGlobalObjectFunctions.h:
+
+2013-02-18 Filip Pizlo <fpizlo@apple.com>
+
+ Fix indention of Operations.h
+
+ Rubber stamped by Mark Hahnenberg.
+
+ * runtime/Operations.h:
+
+2013-02-18 Filip Pizlo <fpizlo@apple.com>
+
+ Remove DFG::SpeculativeJIT::isKnownNumeric(), since it's not called from anywhere.
+
+ Rubber stamped by Andy Estes.
+
+ * dfg/DFGSpeculativeJIT.cpp:
+ (DFG):
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+
+2013-02-18 Filip Pizlo <fpizlo@apple.com>
+
+ Remove DFG::SpeculativeJIT::isStrictInt32(), since it's not called from anywhere.
+
+ Rubber stampted by Andy Estes.
+
+ * dfg/DFGSpeculativeJIT.cpp:
+ (DFG):
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+
+2013-02-18 Filip Pizlo <fpizlo@apple.com>
+
+ Remove dead code for ValueToNumber from the DFG.
+
+ Rubber stamped by Andy Estes.
+
+ We killed ValueToNumber at some point, but forgot to kill all of the backend support
+ for it.
+
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::handleMinMax):
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGOperations.h:
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ * dfg/DFGSpeculativeJIT64.cpp:
+
+2013-02-17 Csaba Osztrogonác <ossy@webkit.org>
+
+ Unreviewed buildfix for JSVALUE32_64 builds after r143147.
+
+ * jit/JIT.h:
+
+2013-02-17 Filip Pizlo <fpizlo@apple.com>
+
+ Move all Structure out-of-line inline methods to StructureInlines.h
+ https://bugs.webkit.org/show_bug.cgi?id=110024
+
+ Rubber stamped by Mark Hahnenberg and Sam Weinig.
+
+ This was supposed to be easy.
+
+ But, initially, there was a Structure inline method in CodeBlock.h, and moving that
+ into StructureInlines.h meant that Operations.h included CodeBlock.h. This would
+ cause WebCore build failures, because CodeBlock.h transitively included the JSC
+ parser (via many, many paths), and the JSC parser defines tokens using enumeration
+ elements that CSSGrammar.cpp (generated by bison) would #define. For example,
+ bison would give CSSGrammar.cpp a #define FUNCTION 123, and would do so before
+ including anything interesting. The JSC parser would have an enum that included
+ FUNCTION as an element. Hence the JSC parser included into CSSGrammar.cpp would have
+ a token element called FUNCTION declared in an enumeration, but FUNCTION was
+ #define'd to 123, leading to a parser error.
+
+ Wow.
+
+ So I removed all transitive include paths from CodeBlock.h to the JSC Parser. I
+ believe I was able to do so without out-of-lining anything interesting or performance
+ critical. This is probably a purely good thing to have done: it will be nice to be
+ able to make changes to the parser without having to compile the universe.
+
+ Of course, doing this caused a bunch of other things to not compile, since a bunch of
+ headers relied on things being implicitly included for them when they transitively
+ included the parser. I fixed a lot of that.
+
+ Finally, I ended up removing the method that depended on CodeBlock.h from
+ StructureInlines.h, and putting it in Structure.cpp. That might seem like all of this
+ was a waste of time, except that I suspect it was a worthwhile forcing function for
+ cleaning up a bunch of cruft.
+
+ * API/JSCallbackFunction.cpp:
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * bytecode/CodeBlock.h:
+ (JSC):
+ * bytecode/EvalCodeCache.h:
+ * bytecode/SamplingTool.h:
+ * bytecode/UnlinkedCodeBlock.cpp:
+ (JSC::UnlinkedFunctionExecutable::parameterCount):
+ (JSC):
+ * bytecode/UnlinkedCodeBlock.h:
+ (UnlinkedFunctionExecutable):
+ * bytecompiler/BytecodeGenerator.h:
+ * bytecompiler/Label.h:
+ (JSC):
+ * dfg/DFGByteCodeParser.cpp:
+ * dfg/DFGByteCodeParser.h:
+ * dfg/DFGFPRInfo.h:
+ * dfg/DFGRegisterBank.h:
+ * heap/HandleStack.cpp:
+ * jit/JITWriteBarrier.h:
+ * parser/Nodes.h:
+ (JSC):
+ * parser/Parser.h:
+ * parser/ParserError.h: Added.
+ (JSC):
+ (JSC::ParserError::ParserError):
+ (ParserError):
+ (JSC::ParserError::toErrorObject):
+ * parser/ParserModes.h:
+ * parser/SourceProvider.cpp: Added.
+ (JSC):
+ (JSC::SourceProvider::SourceProvider):
+ (JSC::SourceProvider::~SourceProvider):
+ * parser/SourceProvider.h:
+ (JSC):
+ (SourceProvider):
+ * runtime/ArrayPrototype.cpp:
+ * runtime/DatePrototype.cpp:
+ * runtime/Executable.h:
+ * runtime/JSGlobalObject.cpp:
+ * runtime/JSGlobalObject.h:
+ (JSC):
+ * runtime/Operations.h:
+ * runtime/Structure.cpp:
+ (JSC::Structure::prototypeForLookup):
+ (JSC):
+ * runtime/Structure.h:
+ (JSC):
+ * runtime/StructureInlines.h: Added.
+ (JSC):
+ (JSC::Structure::create):
+ (JSC::Structure::createStructure):
+ (JSC::Structure::get):
+ (JSC::Structure::masqueradesAsUndefined):
+ (JSC::SlotVisitor::internalAppend):
+ (JSC::Structure::transitivelyTransitionedFrom):
+ (JSC::Structure::setEnumerationCache):
+ (JSC::Structure::enumerationCache):
+ (JSC::Structure::prototypeForLookup):
+ (JSC::Structure::prototypeChain):
+ (JSC::Structure::isValid):
+ * runtime/StructureRareData.cpp:
+
+2013-02-17 Roger Fong <roger_fong@apple.com>
+
+ Unreviewed. Windows build fix.
+
+ * runtime/CodeCache.h:
+ (CodeCacheMap):
+
+2013-02-16 Geoffrey Garen <ggaren@apple.com>
+
+ Code cache should be explicit about what it caches
+ https://bugs.webkit.org/show_bug.cgi?id=110039
+
+ Reviewed by Oliver Hunt.
+
+ This patch makes the code cache more explicit in two ways:
+
+ (1) The cache caches top-level scripts. Any sub-functions executed as a
+ part of a script are cached with it and evicted with it.
+
+ This simplifies things by eliminating out-of-band sub-function tracking,
+ and fixes pathological cases where functions for live scripts would be
+ evicted in favor of functions for dead scripts, and/or high probability
+ functions executed early in script lifetime would be evicted in favor of
+ low probability functions executed late in script lifetime, due to LRU.
+
+ Statistical data from general browsing and PLT confirms that caching
+ functions independently of scripts is not profitable.
+
+ (2) The cache tracks script size, not script count.
+
+ This reduces the worst-case cache size by a factor of infinity.
+
+ Script size is a reasonable first-order estimate of in-memory footprint
+ for a cached script because there are no syntactic constructs that have
+ super-linear memory footprint.
+
+ * bytecode/UnlinkedCodeBlock.cpp:
+ (JSC::generateFunctionCodeBlock): Moved this function out of the cache
+ because it does not consult the cache, and is not managed by it.
+
+ (JSC::UnlinkedFunctionExecutable::visitChildren): Visit our code blocks
+ because they are strong references now, rather than weak, a la (1).
+
+ (JSC::UnlinkedFunctionExecutable::codeBlockFor): Updated for interface changes.
+
+ * bytecode/UnlinkedCodeBlock.h:
+ (UnlinkedFunctionExecutable):
+ (UnlinkedFunctionCodeBlock): Strong now, not weak, a la (1).
+
+ * runtime/CodeCache.cpp:
+ (JSC::CodeCache::CodeCache):
+ * runtime/CodeCache.h:
+ (JSC::SourceCodeKey::length):
+ (SourceCodeKey):
+ (CodeCacheMap):
+ (JSC::CodeCacheMap::CodeCacheMap):
+ (JSC::CodeCacheMap::find):
+ (JSC::CodeCacheMap::set):
+ (JSC::CodeCacheMap::clear):
+ (CodeCache):
+ (JSC::CodeCache::clear): Removed individual function tracking, due to (1).
+ Added explicit character counting, for (2).
+
+ You might think 16000000 characters is a lot. It is. But this patch
+ didn't establish that limit -- it just took the existing limit and
+ made it more visible. I intend to reduce the size of the cache in a
+ future patch.
+
+2013-02-16 Filip Pizlo <fpizlo@apple.com>
+
+ Remove support for bytecode comments, since it doesn't build, and hasn't been used in a while.
+ https://bugs.webkit.org/show_bug.cgi?id=110035
+
+ Rubber stamped by Andreas Kling.
+
+ There are other ways of achieving the same effect, like adding print statements to the bytecode generator.
+ The fact that this feature doesn't build and nobody noticed implies that it's probably not a popular
+ feature. As well, the amount of wiring that was required for it was quite big considering its relatively
+ modest utility.
+
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/CodeBlock.cpp:
+ (JSC):
+ (JSC::CodeBlock::dumpBytecode):
+ (JSC::CodeBlock::CodeBlock):
+ * bytecode/CodeBlock.h:
+ (CodeBlock):
+ * bytecode/Comment.h: Removed.
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ (JSC::BytecodeGenerator::emitOpcode):
+ (JSC):
+ * bytecompiler/BytecodeGenerator.h:
+ (BytecodeGenerator):
+ (JSC::BytecodeGenerator::symbolTable):
+
+2013-02-16 Brent Fulgham <bfulgham@webkit.org>
+
+ [Windows] Unreviewed Visual Studio 2010 build fix after r143117
+
+ * JavaScriptCore.vcxproj/LLInt/LLIntOffsetsExtractor/LLIntOffsetsExtractorDebug.props: Reference new path to property sheets.
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+ Build correction after new operator == added.
+
+2013-02-16 Filip Pizlo <fpizlo@apple.com>
+
+ Fix indentation of Structure.h
+
+ Rubber stamped by Mark Hahnenberg.
+
+ * runtime/Structure.h:
+
+2013-02-16 Christophe Dumez <ch.dumez@sisa.samsung.com>
+
+ Unreviewed build fix.
+
+ Export symbol for new CString operator== operator to fix Windows build.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+
+2013-02-15 Filip Pizlo <fpizlo@apple.com>
+
+ Structure should be more methodical about the relationship between m_offset and m_propertyTable
+ https://bugs.webkit.org/show_bug.cgi?id=109978
+
+ Reviewed by Mark Hahnenberg.
+
+ Allegedly, the previous relationship was that either m_propertyTable or m_offset
+ would be set, and if m_propertyTable was not set you could rebuild it. In reality,
+ we would sometimes "reset" both: some transitions wouldn't set m_offset, and other
+ transitions would clear the previous structure's m_propertyTable. So, in a
+ structure transition chain of A->B->C you could have:
+
+ A transitions to B: B doesn't copy m_offset but does copy m_propertyTable, because
+ that seemed like a good idea at the time (this was a common idiom in the code).
+ B transitions to C: C steals B's m_propertyTable, leaving B with neither a
+ m_propertyTable nor a m_offset.
+
+ Then we would ask for the size of the property storage of B and get the answer
+ "none". That's not good.
+
+ Now, there is a new relationship, which, hopefully, should fix things: m_offset is
+ always set and always refers to the maximum offset ever used by the property table.
+ From this, you can infer both the inline and out-of-line property size, and
+ capacity. This is accomplished by having PropertyTable::add() take a
+ PropertyOffset reference, which must be Structure::m_offset. It will update this
+ offset. As well, all transitions now copy m_offset. And we frequently assert
+ (using RELEASE_ASSERT) that the m_offset matches what m_propertyTable would tell
+ you. Hence if you ever modify the m_propertyTable, you'll also update the offset.
+ If you ever copy the property table, you'll also copy the offset. Life should be
+ good, I think.
+
+ * runtime/PropertyMapHashTable.h:
+ (JSC::PropertyTable::add):
+ * runtime/Structure.cpp:
+ (JSC::Structure::materializePropertyMap):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::removePropertyTransition):
+ (JSC::Structure::changePrototypeTransition):
+ (JSC::Structure::despecifyFunctionTransition):
+ (JSC::Structure::attributeChangeTransition):
+ (JSC::Structure::toDictionaryTransition):
+ (JSC::Structure::sealTransition):
+ (JSC::Structure::freezeTransition):
+ (JSC::Structure::preventExtensionsTransition):
+ (JSC::Structure::nonPropertyTransition):
+ (JSC::Structure::flattenDictionaryStructure):
+ (JSC::Structure::checkConsistency):
+ (JSC::Structure::putSpecificValue):
+ (JSC::Structure::createPropertyMap):
+ (JSC::PropertyTable::checkConsistency):
+ * runtime/Structure.h:
+ (JSC):
+ (JSC::Structure::putWillGrowOutOfLineStorage):
+ (JSC::Structure::outOfLineCapacity):
+ (JSC::Structure::outOfLineSize):
+ (JSC::Structure::isEmpty):
+ (JSC::Structure::materializePropertyMapIfNecessary):
+ (JSC::Structure::materializePropertyMapIfNecessaryForPinning):
+ (Structure):
+ (JSC::Structure::checkOffsetConsistency):
+
+2013-02-15 Martin Robinson <mrobinson@igalia.com>
+
+ [GTK] Spread the gyp build files throughout the tree
+ https://bugs.webkit.org/show_bug.cgi?id=109960
+
+ Reviewed by Dirk Pranke.
+
+ * JavaScriptCore.gyp/JavaScriptCoreGTK.gyp: Renamed from Source/WebKit/gtk/gyp/JavaScriptCore.gyp.
+ * JavaScriptCore.gyp/generate-derived-sources.sh: Renamed from Source/WebKit/gtk/gyp/generate-derived-sources.sh.
+
+2013-02-15 Filip Pizlo <fpizlo@apple.com>
+
+ DFG SpeculativeJIT64 should be more precise about when it's dealing with a cell (even though it probably doesn't matter)
+ https://bugs.webkit.org/show_bug.cgi?id=109625
+
+ Reviewed by Mark Hahnenberg.
+
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compileObjectEquality):
+ (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2013-02-15 Geoffrey Garen <ggaren@apple.com>
+
+ Merged the global function cache into the source code cache
+ https://bugs.webkit.org/show_bug.cgi?id=108660
+
+ Reviewed by Sam Weinig.
+
+ Responding to review comments by Darin Adler.
+
+ * runtime/CodeCache.h:
+ (JSC::SourceCodeKey::SourceCodeKey): Don't initialize m_name and m_flags
+ in the hash table deleted value because they're meaningless.
+
+2013-02-14 Filip Pizlo <fpizlo@apple.com>
+
+ DFG AbstractState should filter operands to NewArray more precisely
+ https://bugs.webkit.org/show_bug.cgi?id=109900
+
+ Reviewed by Mark Hahnenberg.
+
+ NewArray for primitive indexing types speculates that the inputs are the appropriate
+ primitives. Now, the CFA filters the abstract state accordingly, as well.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+
+2013-02-15 Andreas Kling <akling@apple.com>
+
+ Yarr: Use OwnPtr to make pattern/disjunction/character-class ownership clearer.
+ <http://webkit.org/b/109218>
+
+ Reviewed by Benjamin Poulain.
+
+ - Let classes that manage lifetime of other objects hold on to them with OwnPtr instead of raw pointers.
+ - Placed some strategic Vector::shrinkToFit(), ::reserveInitialCapacity() and ::swap().
+
+ 668 kB progression on Membuster3.
+
+ * yarr/YarrInterpreter.cpp:
+ (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternEnd):
+ (JSC::Yarr::ByteCompiler::emitDisjunction):
+ (ByteCompiler):
+ * yarr/YarrInterpreter.h:
+ (JSC::Yarr::BytecodePattern::BytecodePattern):
+ (BytecodePattern):
+ * yarr/YarrJIT.cpp:
+ (JSC::Yarr::YarrGenerator::opCompileParenthesesSubpattern):
+ (JSC::Yarr::YarrGenerator::opCompileParentheticalAssertion):
+ (JSC::Yarr::YarrGenerator::opCompileBody):
+ * yarr/YarrPattern.cpp:
+ (JSC::Yarr::CharacterClassConstructor::charClass):
+ (JSC::Yarr::YarrPatternConstructor::YarrPatternConstructor):
+ (JSC::Yarr::YarrPatternConstructor::reset):
+ (JSC::Yarr::YarrPatternConstructor::atomPatternCharacter):
+ (JSC::Yarr::YarrPatternConstructor::atomCharacterClassEnd):
+ (JSC::Yarr::YarrPatternConstructor::copyDisjunction):
+ (JSC::Yarr::YarrPatternConstructor::setupDisjunctionOffsets):
+ (JSC::Yarr::YarrPatternConstructor::checkForTerminalParentheses):
+ (JSC::Yarr::YarrPatternConstructor::optimizeBOL):
+ (JSC::Yarr::YarrPatternConstructor::containsCapturingTerms):
+ (JSC::Yarr::YarrPatternConstructor::optimizeDotStarWrappedExpressions):
+ * yarr/YarrPattern.h:
+ (JSC::Yarr::PatternDisjunction::addNewAlternative):
+ (PatternDisjunction):
+ (YarrPattern):
+ (JSC::Yarr::YarrPattern::reset):
+ (JSC::Yarr::YarrPattern::newlineCharacterClass):
+ (JSC::Yarr::YarrPattern::digitsCharacterClass):
+ (JSC::Yarr::YarrPattern::spacesCharacterClass):
+ (JSC::Yarr::YarrPattern::wordcharCharacterClass):
+ (JSC::Yarr::YarrPattern::nondigitsCharacterClass):
+ (JSC::Yarr::YarrPattern::nonspacesCharacterClass):
+ (JSC::Yarr::YarrPattern::nonwordcharCharacterClass):
+
+2013-02-14 Geoffrey Garen <ggaren@apple.com>
+
+ Merged the global function cache into the source code cache
+ https://bugs.webkit.org/show_bug.cgi?id=108660
+
+ Reviewed by Sam Weinig.
+
+ This has a few benefits:
+
+ (*) Saves a few kB by removing a second cache data structure.
+
+ (*) Reduces the worst case memory usage of the cache by 1.75X. (Heavy
+ use of 'new Function' and other techniques could cause us to fill
+ both root caches, and they didn't trade off against each other.)
+
+ (*) Paves the way for future improvements based on a non-trivial
+ cache key (for example, shrinkable pointer to the key string, and
+ more precise cache size accounting).
+
+ Also cleaned up the cache implementation and simplified it a bit.
+
+ * heap/Handle.h:
+ (HandleBase):
+ * heap/Strong.h:
+ (Strong): Build!
+
+ * runtime/CodeCache.cpp:
+ (JSC):
+ (JSC::CodeCache::getCodeBlock):
+ (JSC::CodeCache::generateFunctionCodeBlock):
+ (JSC::CodeCache::getFunctionExecutableFromGlobalCode):
+ (JSC::CodeCache::usedFunctionCode): Updated for three interface changes:
+
+ (*) SourceCodeKey is a class, not a pair.
+
+ (*) Table values are abstract pointers, since they can be executables
+ or code blocks. (In a future patch, I'd like to change this so we
+ always store only code blocks. But that's too much for one patch.)
+
+ (*) The cache function is named "set" because it always overwrites
+ unconditionally.
+
+ * runtime/CodeCache.h:
+ (CacheMap):
+ (JSC::CacheMap::find):
+ (JSC::CacheMap::set):
+ (JSC::CacheMap::clear): Added support for specifying hash traits, so we
+ can use a SourceCodeKey.
+
+ Removed side table and random number generator to save space and reduce
+ complexity. Hash tables are already random, so we don't need another source
+ of randomness.
+
+ (SourceCodeKey):
+ (JSC::SourceCodeKey::SourceCodeKey):
+ (JSC::SourceCodeKey::isHashTableDeletedValue):
+ (JSC::SourceCodeKey::hash):
+ (JSC::SourceCodeKey::isNull):
+ (JSC::SourceCodeKey::operator==):
+ (JSC::SourceCodeKeyHash::hash):
+ (JSC::SourceCodeKeyHash::equal):
+ (SourceCodeKeyHash):
+ (SourceCodeKeyHashTraits):
+ (JSC::SourceCodeKeyHashTraits::isEmptyValue): A SourceCodeKey is just a
+ fancy triplet: source code string; function name (or null, for non-functions);
+ and flags. Flags and function name distinguish between functions and programs
+ with identical code, so they can live in the same cache.
+
+ I chose to use the source code string as the primary hashing reference
+ because it's likely to be unique. We can use profiling to choose another
+ technique in future, if collisions between functions and programs prove
+ to be hot. I suspect they won't.
+
+ (JSC::CodeCache::clear):
+ (CodeCache): Removed the second cache.
+
+ * heap/Handle.h:
+ (HandleBase):
+ * heap/Strong.h:
+ (Strong):
+ * runtime/CodeCache.cpp:
+ (JSC):
+ (JSC::CodeCache::getCodeBlock):
+ (JSC::CodeCache::generateFunctionCodeBlock):
+ (JSC::CodeCache::getFunctionExecutableFromGlobalCode):
+ (JSC::CodeCache::usedFunctionCode):
+ * runtime/CodeCache.h:
+ (JSC):
+ (CacheMap):
+ (JSC::CacheMap::find):
+ (JSC::CacheMap::set):
+ (JSC::CacheMap::clear):
+ (SourceCodeKey):
+ (JSC::SourceCodeKey::SourceCodeKey):
+ (JSC::SourceCodeKey::isHashTableDeletedValue):
+ (JSC::SourceCodeKey::hash):
+ (JSC::SourceCodeKey::isNull):
+ (JSC::SourceCodeKey::operator==):
+ (JSC::SourceCodeKeyHash::hash):
+ (JSC::SourceCodeKeyHash::equal):
+ (SourceCodeKeyHash):
+ (SourceCodeKeyHashTraits):
+ (JSC::SourceCodeKeyHashTraits::isEmptyValue):
+ (JSC::CodeCache::clear):
+ (CodeCache):
+
+2013-02-14 Tony Chang <tony@chromium.org>
+
+ Unreviewed, set svn:eol-style native for .sln, .vcproj, and .vsprops files.
+ https://bugs.webkit.org/show_bug.cgi?id=96934
+
+ * JavaScriptCore.vcproj/JavaScriptCore.sln: Modified property svn:eol-style.
+ * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Modified property svn:eol-style.
+ * JavaScriptCore.vcproj/testRegExp/testRegExpCommon.vsprops: Added property svn:eol-style.
+ * JavaScriptCore.vcproj/testRegExp/testRegExpDebug.vsprops: Added property svn:eol-style.
+ * JavaScriptCore.vcproj/testRegExp/testRegExpDebugAll.vsprops: Added property svn:eol-style.
+ * JavaScriptCore.vcproj/testRegExp/testRegExpDebugCairoCFLite.vsprops: Added property svn:eol-style.
+ * JavaScriptCore.vcproj/testRegExp/testRegExpProduction.vsprops: Added property svn:eol-style.
+ * JavaScriptCore.vcproj/testRegExp/testRegExpRelease.vsprops: Added property svn:eol-style.
+ * JavaScriptCore.vcproj/testRegExp/testRegExpReleaseCairoCFLite.vsprops: Added property svn:eol-style.
+ * JavaScriptCore.vcproj/testRegExp/testRegExpReleasePGO.vsprops: Added property svn:eol-style.
+
+2013-02-14 Tony Chang <tony@chromium.org>
+
+ Unreviewed, set svn:eol-style CRLF for .sln files.
+
+ * JavaScriptCore.vcproj/JavaScriptCore.sln: Modified property svn:eol-style.
+ * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Modified property svn:eol-style.
+
+2013-02-14 David Kilzer <ddkilzer@apple.com>
+
+ [Mac] Clean up WARNING_CFLAGS
+ <http://webkit.org/b/109747>
+ <rdar://problem/13208373>
+
+ Reviewed by Mark Rowe.
+
+ * Configurations/Base.xcconfig: Use
+ GCC_WARN_64_TO_32_BIT_CONVERSION to enable and disable
+ -Wshorten-64-to-32 rather than WARNING_CFLAGS.
+
+ * JavaScriptCore.vcproj/JavaScriptCore.sln: Modified property svn:eol-style.
+ * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Modified property svn:eol-style.
+
+2013-02-13 Anders Carlsson <andersca@apple.com>
+
+ Better build fix.
+
+ * API/tests/testapi.c:
+ (assertEqualsAsNumber):
+ (main):
+
+2013-02-13 Roger Fong <roger_fong@apple.com>
+
+ Unreviewed. Build fix.
+
+ * API/tests/testapi.c:
+ (assertEqualsAsNumber):
+ (main):
+
+2013-02-13 Oliver Hunt <oliver@apple.com>
+
+ Yet another build fix
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::CodeBlock):
+
+2013-02-13 Zan Dobersek <zdobersek@igalia.com>
+
+ The 'global isinf/isnan' compiler quirk required when using clang with libstdc++
+ https://bugs.webkit.org/show_bug.cgi?id=109325
+
+ Reviewed by Anders Carlsson.
+
+ Prefix calls to the isinf and isnan methods with std::, declaring we want to use the
+ two methods as they're provided by the C++ standard library being used.
+
+ * API/JSValueRef.cpp:
+ (JSValueMakeNumber):
+ * JSCTypedArrayStubs.h:
+ (JSC):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitLoad):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::constantNaN):
+ * offlineasm/cloop.rb:
+ * runtime/DateConstructor.cpp:
+ (JSC::dateUTC): Also include an opportunistic style fix.
+ * runtime/DateInstance.cpp:
+ (JSC::DateInstance::calculateGregorianDateTime):
+ (JSC::DateInstance::calculateGregorianDateTimeUTC):
+ * runtime/DatePrototype.cpp:
+ (JSC::dateProtoFuncGetMilliSeconds):
+ (JSC::dateProtoFuncGetUTCMilliseconds):
+ (JSC::setNewValueFromTimeArgs):
+ (JSC::setNewValueFromDateArgs):
+ (JSC::dateProtoFuncSetYear):
+ * runtime/JSCJSValue.cpp:
+ (JSC::JSValue::toInteger):
+ * runtime/JSDateMath.cpp:
+ (JSC::getUTCOffset):
+ (JSC::parseDateFromNullTerminatedCharacters):
+ (JSC::parseDate):
+ * runtime/JSGlobalObjectFunctions.cpp:
+ (JSC::globalFuncIsNaN):
+ * runtime/MathObject.cpp:
+ (JSC::mathProtoFuncMax):
+ (JSC::mathProtoFuncMin):
+ (JSC::mathProtoFuncPow):
+ * runtime/PropertyDescriptor.cpp:
+ (JSC::sameValue):
+
+2013-02-13 Filip Pizlo <fpizlo@apple.com>
+
+ Change another use of (SpecCell & ~SpecString) to SpecObject.
+
+ Reviewed by Mark Hahnenberg.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+
+2013-02-13 Filip Pizlo <fpizlo@apple.com>
+
+ ForwardInt32ToDouble is not in DFG::MinifiedNode's list of relevant node types
+ https://bugs.webkit.org/show_bug.cgi?id=109726
+
+ Reviewed by Mark Hahnenberg.
+
+ If you add it to the list of relevant node types, you also need to make sure
+ it's listed as either hasChild or one of the other kinds. Otherwise you get
+ an assertion. This is causing test failures in run-javascriptcore-tests.
+
+ * dfg/DFGMinifiedNode.h:
+ (JSC::DFG::MinifiedNode::hasChild):
+
+2013-02-13 Oliver Hunt <oliver@apple.com>
+
+ Build fix.
+
+ Rearranged the code somewhat to reduce the number of
+ DFG related ifdefs.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::CodeBlock):
+
+2013-02-13 Filip Pizlo <fpizlo@apple.com>
+
+ ForwardInt32ToDouble is not in DFG::MinifiedNode's list of relevant node types
+ https://bugs.webkit.org/show_bug.cgi?id=109726
+
+ Reviewed by Gavin Barraclough.
+
+ This is asymptomatic because ForwardInt32ToDouble is only used in SetLocals, in
+ which case the value is already stored to the stack. Still, we should fix this.
+
+ * dfg/DFGMinifiedNode.h:
+ (JSC::DFG::belongsInMinifiedGraph):
+
+2013-02-12 Filip Pizlo <fpizlo@apple.com>
+
+ DFG LogicalNot/Branch peephole removal and inversion ignores the possibility of things exiting
+ https://bugs.webkit.org/show_bug.cgi?id=109489
+
+ Reviewed by Mark Hahnenberg.
+
+ If things can exit between the LogicalNot and the Branch then don't peephole.
+
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+
+2013-02-13 Oliver Hunt <oliver@apple.com>
+
+ Remove unnecessary indirection to non-local variable access operations
+ https://bugs.webkit.org/show_bug.cgi?id=109724
+
+ Reviewed by Filip Pizlo.
+
+ Linked bytecode now stores a direct pointer to the resolve operation
+ vectors, so the interpreter no longer needs a bunch of indirection to
+ to perform non-local lookup.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::CodeBlock):
+ * bytecode/CodeBlock.h:
+ (CodeBlock):
+ * bytecode/Instruction.h:
+ * dfg/DFGByteCodeParser.cpp:
+ (ByteCodeParser):
+ (InlineStackEntry):
+ (JSC::DFG::ByteCodeParser::parseResolveOperations):
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
+ * dfg/DFGCapabilities.h:
+ (JSC::DFG::canInlineOpcode):
+ * dfg/DFGGraph.h:
+ (ResolveGlobalData):
+ (ResolveOperationData):
+ (PutToBaseOperationData):
+ * dfg/DFGSpeculativeJIT.h:
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_put_to_base):
+ (JSC::JIT::emit_op_resolve):
+ (JSC::JIT::emitSlow_op_resolve):
+ (JSC::JIT::emit_op_resolve_base):
+ (JSC::JIT::emitSlow_op_resolve_base):
+ (JSC::JIT::emit_op_resolve_with_base):
+ (JSC::JIT::emitSlow_op_resolve_with_base):
+ (JSC::JIT::emit_op_resolve_with_this):
+ (JSC::JIT::emitSlow_op_resolve_with_this):
+ (JSC::JIT::emitSlow_op_put_to_base):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::emit_op_put_to_base):
+ * llint/LLIntSlowPaths.cpp:
+ (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+ * llint/LowLevelInterpreter.asm:
+
+2013-02-13 Zoltan Herczeg <zherczeg@webkit.org>
+
+ replaceWithJump should not decrease the offset by 1 on ARM traditional.
+ https://bugs.webkit.org/show_bug.cgi?id=109689
+
+ Reviewed by Oliver Hunt.
+
+ * assembler/ARMAssembler.h:
+ (JSC::ARMAssembler::replaceWithJump):
+
+2013-02-12 Joseph Pecoraro <pecoraro@apple.com>
+
+ [iOS] Enable PAGE_VISIBILITY_API
+ https://bugs.webkit.org/show_bug.cgi?id=109399
+
+ Reviewed by David Kilzer.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2013-02-12 Filip Pizlo <fpizlo@apple.com>
+
+ Renamed SpecObjectMask to SpecObject.
+
+ Rubber stamped by Mark Hahnenberg.
+
+ "SpecObjectMask" is a weird name considering that a bunch of the other speculated
+ types are also masks, but don't have "Mask" in the name.
+
+ * bytecode/SpeculatedType.h:
+ (JSC):
+ (JSC::isObjectSpeculation):
+ (JSC::isObjectOrOtherSpeculation):
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compileObjectEquality):
+ (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compileObjectEquality):
+ (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
+
+2013-02-12 Filip Pizlo <fpizlo@apple.com>
+
+ DFG CFA doesn't filter precisely enough for CompareStrictEq
+ https://bugs.webkit.org/show_bug.cgi?id=109618
+
+ Reviewed by Mark Hahnenberg.
+
+ The backend speculates object for this case, but the CFA was filtering on
+ (SpecCell & ~SpecString) | SpecOther.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+
+2013-02-12 Martin Robinson <mrobinson@igalia.com>
+
+ Fix the gyp build of JavaScriptCore.
+
+ * JavaScriptCore.gypi: Added some missing DFG files to the source list.
+
+2013-02-12 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r142387.
+ http://trac.webkit.org/changeset/142387
+ https://bugs.webkit.org/show_bug.cgi?id=109601
+
+ caused all layout and jscore tests on windows to fail
+ (Requested by kling on #webkit).
+
+ * bytecode/UnlinkedCodeBlock.cpp:
+ (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
+ * bytecode/UnlinkedCodeBlock.h:
+ (UnlinkedCodeBlock):
+
+2013-02-11 Filip Pizlo <fpizlo@apple.com>
+
+ DFG CompareEq optimization should be retuned
+ https://bugs.webkit.org/show_bug.cgi?id=109545
+
+ Reviewed by Mark Hahnenberg.
+
+ - Made the object-to-object equality case work again by hoisting the if statement
+ for it. Previously, object-to-object equality would be compiled as
+ object-to-object-or-other.
+
+ - Added AbstractState guards for most of the type checks that the object equality
+ code uses.
+
+ Looks like a hint of a speed-up on all of the things.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
+ (JSC::DFG::SpeculativeJIT::compare):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compileObjectEquality):
+ (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compileObjectEquality):
+ (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
+
+2013-02-12 Gabor Rapcsanyi <rgabor@webkit.org>
+
+ JSC asserting with long parameter list functions in debug mode on ARM traditional
+ https://bugs.webkit.org/show_bug.cgi?id=109565
+
+ Reviewed by Zoltan Herczeg.
+
+ Increase the value of sequenceGetByIdSlowCaseInstructionSpace to 80.
+
+ * jit/JIT.h:
+
+2013-02-11 Oliver Hunt <oliver@apple.com>
+
+ Make JSC API more NULL tolerant
+ https://bugs.webkit.org/show_bug.cgi?id=109515
+
+ Reviewed by Mark Hahnenberg.
+
+ We do so much marshalling for the C API these days anyway that a single null
+ check isn't a performance issue. Yet the existing "null is unsafe" behaviour
+ leads to crashes in embedding applications whenever there's an untested code
+ path, so it seems having defined behaviour is superior.
+
+ * API/APICast.h:
+ (toJS):
+ (toJSForGC):
+ * API/JSObjectRef.cpp:
+ (JSObjectIsFunction):
+ (JSObjectCallAsFunction):
+ (JSObjectIsConstructor):
+ (JSObjectCallAsConstructor):
+ * API/tests/testapi.c:
+ (main):
+
+2013-02-11 Filip Pizlo <fpizlo@apple.com>
+
+ Unreviewed, adding a FIXME to remind ourselves of a bug.
+ https://bugs.webkit.org/show_bug.cgi?id=109487
+
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant):
+
+2013-02-11 Filip Pizlo <fpizlo@apple.com>
+
+ Strange bug in DFG OSR in JSC
+ https://bugs.webkit.org/show_bug.cgi?id=109491
+
+ Reviewed by Mark Hahnenberg.
+
+ Int32ToDouble was being injected after a side-effecting operation and before a SetLocal. Anytime we
+ inject something just before a SetLocal we should be aware that the previous operation may have been
+ a side-effect associated with the current code origin. Hence, we should use a forward exit.
+ Int32ToDouble does not do forward exits by default.
+
+ This patch adds a forward-exiting form of Int32ToDouble, for use in SetLocal Int32ToDouble injections.
+ Changed the CSE and other things to treat these nodes identically, but for the exit strategy to be
+ distinct (Int32ToDouble -> backward, ForwardInt32ToDouble -> forward). The use of the NodeType for
+ signaling exit direction is not "great" but it's what we use in other places already (like
+ ForwardCheckStructure).
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::int32ToDoubleCSE):
+ (CSEPhase):
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ * dfg/DFGCommon.h:
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ (JSC::DFG::FixupPhase::fixDoubleEdge):
+ (JSC::DFG::FixupPhase::injectInt32ToDoubleNode):
+ * dfg/DFGNode.h:
+ (JSC::DFG::Node::willHaveCodeGenOrOSR):
+ * dfg/DFGNodeType.h:
+ (DFG):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::convertLastOSRExitToForward):
+ (JSC::DFG::SpeculativeJIT::compileInt32ToDouble):
+ * dfg/DFGSpeculativeJIT.h:
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGVariableEventStream.cpp:
+ (JSC::DFG::VariableEventStream::reconstruct):
+
+2013-02-11 Filip Pizlo <fpizlo@apple.com>
+
+ NonStringCell and Object are practically the same thing for the purpose of speculation
+ https://bugs.webkit.org/show_bug.cgi?id=109492
+
+ Reviewed by Mark Hahnenberg.
+
+ Removed isNonStringCellSpeculation, and made all callers use isObjectSpeculation.
+
+ Changed isNonStringCellOrOtherSpeculation to be isObjectOrOtherSpeculation.
+
+ I believe this is correct because even weird object types like JSNotAnObject end up
+ being "objects" from the standpoint of our typesystem. Anyway, the assumption that
+ "is cell but not a string" equates to "object" is an assumption that is already made
+ in other places in the system so there's little value in being paranoid about it.
+
+ * bytecode/SpeculatedType.h:
+ (JSC::isObjectSpeculation):
+ (JSC::isObjectOrOtherSpeculation):
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGNode.h:
+ (Node):
+ (JSC::DFG::Node::shouldSpeculateObjectOrOther):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
+ (JSC::DFG::SpeculativeJIT::compare):
+ (JSC::DFG::SpeculativeJIT::compileStrictEq):
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
+ (JSC::DFG::SpeculativeJIT::compileLogicalNot):
+ (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
+ (JSC::DFG::SpeculativeJIT::emitBranch):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
+ (JSC::DFG::SpeculativeJIT::compileLogicalNot):
+ (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
+ (JSC::DFG::SpeculativeJIT::emitBranch):
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2013-02-10 Filip Pizlo <fpizlo@apple.com>
+
+ DFG CompareEq(a, null) and CompareStrictEq(a, const) are unsound with respect to constant folding
+ https://bugs.webkit.org/show_bug.cgi?id=109387
+
+ Reviewed by Oliver Hunt and Mark Hahnenberg.
+
+ Lock in the decision to use a non-speculative constant comparison as early as possible
+ and don't let the CFA change it by folding constants. This might be a performance
+ penalty on some really weird code (FWIW, I haven't seen this on benchmarks), but on
+ the other hand it completely side-steps the unsoundness that the bug speaks of.
+
+ Rolling back in after adding 32-bit path.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::isConstantForCompareStrictEq):
+ (ByteCodeParser):
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ * dfg/DFGNodeType.h:
+ (DFG):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileStrictEq):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2013-02-10 Filip Pizlo <fpizlo@apple.com>
+
+ DFG TypeOf implementation should have its backend code aligned to what the CFA does
+ https://bugs.webkit.org/show_bug.cgi?id=109385
+
+ Reviewed by Sam Weinig.
+
+ The problem was that if we ended up trying to constant fold, but didn't succeed
+ because of prediction mismatches, then we would also fail to do filtration.
+
+ Rearranged the control flow in the CFA to fix that.
+
+ As far as I know, this is asymptomatic - it's sort of OK for the CFA to prove less
+ things, which is what the bug was.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+
+2013-02-11 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r142491.
+ http://trac.webkit.org/changeset/142491
+ https://bugs.webkit.org/show_bug.cgi?id=109470
+
+ broke the 32 bit build (Requested by jessieberlin on #webkit).
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ * dfg/DFGNodeType.h:
+ (DFG):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileStrictEq):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2013-02-10 Filip Pizlo <fpizlo@apple.com>
+
+ DFG CompareEq(a, null) and CompareStrictEq(a, const) are unsound with respect to constant folding
+ https://bugs.webkit.org/show_bug.cgi?id=109387
+
+ Reviewed by Oliver Hunt.
+
+ Lock in the decision to use a non-speculative constant comparison as early as possible
+ and don't let the CFA change it by folding constants. This might be a performance
+ penalty on some really weird code (FWIW, I haven't seen this on benchmarks), but on
+ the other hand it completely side-steps the unsoundness that the bug speaks of.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::isConstantForCompareStrictEq):
+ (ByteCodeParser):
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ * dfg/DFGNodeType.h:
+ (DFG):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileStrictEq):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2013-02-11 Csaba Osztrogonác <ossy@webkit.org>
+
+ Unreviewed fix after r13954 for !ENABLE(JIT) builds.
+
+ * llint/LowLevelInterpreter.cpp:
+
+2013-02-11 Gabor Rapcsanyi <rgabor@webkit.org>
+
+ JSC build failing with verbose debug mode
+ https://bugs.webkit.org/show_bug.cgi?id=109441
+
+ Reviewed by Darin Adler.
+
+ Fixing some verbose messages which caused build errors.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::mergeToSuccessors):
+ * dfg/DFGCFAPhase.cpp:
+ (JSC::DFG::CFAPhase::performBlockCFA):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::setReplacement):
+ (JSC::DFG::CSEPhase::eliminate):
+ * dfg/DFGPredictionInjectionPhase.cpp:
+ (JSC::DFG::PredictionInjectionPhase::run):
+
+2013-02-10 Martin Robinson <mrobinson@igalia.com>
+
+ Fix the GTK+ gyp build
+
+ * JavaScriptCore.gypi: Update the source list to accurately
+ reflect what's in the repository and remove the offsets extractor
+ from the list of JavaScriptCore files. It's only used to build
+ the extractor binary.
+
+2013-02-09 Andreas Kling <akling@apple.com>
+
+ Shrink-wrap UnlinkedCodeBlock members.
+ <http://webkit.org/b/109368>
+
+ Reviewed by Oliver Hunt.
+
+ Rearrange the members of UnlinkedCodeBlock to avoid unnecessary padding on 64-bit.
+ Knocks ~600 KB off of the Membuster3 peak.
+
+ * bytecode/UnlinkedCodeBlock.cpp:
+ (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
+ * bytecode/UnlinkedCodeBlock.h:
+ (UnlinkedCodeBlock):
+
+2013-02-08 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should allow phases to break Phi's and then have one phase to rebuild them
+ https://bugs.webkit.org/show_bug.cgi?id=108414
+
+ Reviewed by Mark Hahnenberg.
+
+ Introduces two new DFG forms: LoadStore and ThreadedCPS. These are described in
+ detail in DFGCommon.h.
+
+ Consequently, DFG phases no longer have to worry about preserving data flow
+ links between basic blocks. It is generally always safe to request that the
+ graph be dethreaded (Graph::dethread), which brings it into LoadStore form, where
+ the data flow is implicit. In this form, only liveness-at-head needs to be
+ preserved.
+
+ All of the machinery for "threading" the graph to introduce data flow between
+ blocks is now moved out of the bytecode parser and into the CPSRethreadingPhase.
+ All phases that previously did this maintenance themselves now just rely on
+ being able to dethread the graph. The one exception is the structure check
+ hoising phase, which operates over a threaded graph and preserves it, for the
+ sake of performance.
+
+ Also moved two other things into their own phases: unification (previously found
+ in the parser) and prediction injection (previously found in various places).
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * bytecode/Operands.h:
+ (Operands):
+ (JSC::Operands::sizeFor):
+ (JSC::Operands::atFor):
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ (JSC::DFG::AbstractState::mergeStateAtTail):
+ * dfg/DFGAllocator.h:
+ (JSC::DFG::::allocateSlow):
+ * dfg/DFGArgumentsSimplificationPhase.cpp:
+ (JSC::DFG::ArgumentsSimplificationPhase::run):
+ * dfg/DFGBasicBlockInlines.h:
+ (DFG):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::getLocal):
+ (JSC::DFG::ByteCodeParser::getArgument):
+ (JSC::DFG::ByteCodeParser::flushDirect):
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ (DFG):
+ (JSC::DFG::ByteCodeParser::parse):
+ * dfg/DFGCFGSimplificationPhase.cpp:
+ (JSC::DFG::CFGSimplificationPhase::run):
+ (JSC::DFG::CFGSimplificationPhase::killUnreachable):
+ (JSC::DFG::CFGSimplificationPhase::keepOperandAlive):
+ (CFGSimplificationPhase):
+ (JSC::DFG::CFGSimplificationPhase::fixJettisonedPredecessors):
+ (JSC::DFG::CFGSimplificationPhase::mergeBlocks):
+ * dfg/DFGCPSRethreadingPhase.cpp: Added.
+ (DFG):
+ (CPSRethreadingPhase):
+ (JSC::DFG::CPSRethreadingPhase::CPSRethreadingPhase):
+ (JSC::DFG::CPSRethreadingPhase::run):
+ (JSC::DFG::CPSRethreadingPhase::freeUnnecessaryNodes):
+ (JSC::DFG::CPSRethreadingPhase::clearVariablesAtHeadAndTail):
+ (JSC::DFG::CPSRethreadingPhase::addPhiSilently):
+ (JSC::DFG::CPSRethreadingPhase::addPhi):
+ (JSC::DFG::CPSRethreadingPhase::canonicalizeGetLocalFor):
+ (JSC::DFG::CPSRethreadingPhase::canonicalizeGetLocal):
+ (JSC::DFG::CPSRethreadingPhase::canonicalizeSetLocal):
+ (JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocalFor):
+ (JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocal):
+ (JSC::DFG::CPSRethreadingPhase::canonicalizeSetArgument):
+ (JSC::DFG::CPSRethreadingPhase::canonicalizeLocalsInBlock):
+ (JSC::DFG::CPSRethreadingPhase::canonicalizeLocalsInBlocks):
+ (JSC::DFG::CPSRethreadingPhase::propagatePhis):
+ (JSC::DFG::CPSRethreadingPhase::PhiStackEntry::PhiStackEntry):
+ (PhiStackEntry):
+ (JSC::DFG::CPSRethreadingPhase::phiStackFor):
+ (JSC::DFG::performCPSRethreading):
+ * dfg/DFGCPSRethreadingPhase.h: Added.
+ (DFG):
+ * dfg/DFGCSEPhase.cpp:
+ (CSEPhase):
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ * dfg/DFGCommon.cpp:
+ (WTF):
+ (WTF::printInternal):
+ * dfg/DFGCommon.h:
+ (JSC::DFG::logCompilationChanges):
+ (DFG):
+ (WTF):
+ * dfg/DFGConstantFoldingPhase.cpp:
+ (JSC::DFG::ConstantFoldingPhase::foldConstants):
+ * dfg/DFGDriver.cpp:
+ (JSC::DFG::compile):
+ * dfg/DFGGraph.cpp:
+ (JSC::DFG::Graph::Graph):
+ (JSC::DFG::Graph::dump):
+ (JSC::DFG::Graph::dethread):
+ (JSC::DFG::Graph::collectGarbage):
+ * dfg/DFGGraph.h:
+ (JSC::DFG::Graph::performSubstitution):
+ (Graph):
+ (JSC::DFG::Graph::performSubstitutionForEdge):
+ (JSC::DFG::Graph::convertToConstant):
+ * dfg/DFGNode.h:
+ (JSC::DFG::Node::convertToPhantomLocal):
+ (Node):
+ (JSC::DFG::Node::convertToGetLocal):
+ (JSC::DFG::Node::hasVariableAccessData):
+ * dfg/DFGNodeType.h:
+ (DFG):
+ * dfg/DFGPhase.cpp:
+ (JSC::DFG::Phase::beginPhase):
+ * dfg/DFGPhase.h:
+ (JSC::DFG::runAndLog):
+ * dfg/DFGPredictionInjectionPhase.cpp: Added.
+ (DFG):
+ (PredictionInjectionPhase):
+ (JSC::DFG::PredictionInjectionPhase::PredictionInjectionPhase):
+ (JSC::DFG::PredictionInjectionPhase::run):
+ (JSC::DFG::performPredictionInjection):
+ * dfg/DFGPredictionInjectionPhase.h: Added.
+ (DFG):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::run):
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGStructureCheckHoistingPhase.cpp:
+ (JSC::DFG::StructureCheckHoistingPhase::run):
+ * dfg/DFGUnificationPhase.cpp: Added.
+ (DFG):
+ (UnificationPhase):
+ (JSC::DFG::UnificationPhase::UnificationPhase):
+ (JSC::DFG::UnificationPhase::run):
+ (JSC::DFG::performUnification):
+ * dfg/DFGUnificationPhase.h: Added.
+ (DFG):
+ * dfg/DFGValidate.cpp:
+ (JSC::DFG::Validate::validate):
+ (JSC::DFG::Validate::dumpGraphIfAppropriate):
+ * dfg/DFGVirtualRegisterAllocationPhase.cpp:
+ (JSC::DFG::VirtualRegisterAllocationPhase::run):
+ * llint/LLIntSlowPaths.cpp:
+ (JSC::LLInt::setUpCall):
+ * runtime/JSCJSValue.cpp:
+ (JSC::JSValue::dump):
+ * runtime/JSString.h:
+ (JSString):
+ * runtime/Options.h:
+ (JSC):
+
+2013-02-08 Jer Noble <jer.noble@apple.com>
+
+ Bring WebKit up to speed with latest Encrypted Media spec.
+ https://bugs.webkit.org/show_bug.cgi?id=97037
+
+ Reviewed by Eric Carlson.
+
+ Define the ENABLE_ENCRYPTED_MEDIA_V2 setting.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2013-02-08 Gavin Barraclough <barraclough@apple.com>
+
+ Objective-C API for JavaScriptCore
+ https://bugs.webkit.org/show_bug.cgi?id=105889
+
+ Reviewed by Joseph Pecoraro
+
+ Following up on review comments, mostly typos.
+
+ * API/JSBlockAdaptor.h:
+ * API/JSBlockAdaptor.mm:
+ (-[JSBlockAdaptor blockFromValue:inContext:withException:]):
+ * API/JSContext.h:
+ * API/JSExport.h:
+ * API/JSValue.h:
+ * API/JSValue.mm:
+ * API/JSWrapperMap.mm:
+ (selectorToPropertyName):
+ (-[JSWrapperMap classInfoForClass:]):
+ (-[JSWrapperMap wrapperForObject:]):
+
+2013-02-08 Martin Robinson <mrobinson@igalia.com>
+
+ [GTK] Add an experimental gyp build
+ https://bugs.webkit.org/show_bug.cgi?id=109003
+
+ Reviewed by Gustavo Noronha Silva.
+
+ * JavaScriptCore.gypi: Update the list of source files to include those
+ necessary for the GTK+ build.
+
+2013-02-08 Andreas Kling <akling@apple.com>
+
+ JSC: Lower minimum PropertyTable size.
+ <http://webkit.org/b/109247>
+
+ Reviewed by Darin Adler.
+
+ Lower the minimum table size for PropertyTable from 16 to 8.
+ 3.32 MB progression on Membuster3 (a ~13% reduction in memory used by PropertyTables.)
+
+ * runtime/PropertyMapHashTable.h:
+ (PropertyTable):
+ (JSC::PropertyTable::sizeForCapacity):
+
+2013-02-07 Roger Fong <roger_fong@apple.com>
+
+ Unreviewed. More VS2010 WebKit solution touchups.
+ Make JavaScriptCoreExports.def.in be treated as a custom build file so that changes to it cause the exports to be rebuilt.
+
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGenerator.vcxproj:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGenerator.vcxproj.filters:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in:
+
+2013-02-07 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: testapi.mm should use ARC
+ https://bugs.webkit.org/show_bug.cgi?id=107838
+
+ Reviewed by Mark Rowe.
+
+ Removing the changes to the Xcode project file and moving the equivalent flags into
+ the ToolExecutable xcconfig file.
+
+ * Configurations/ToolExecutable.xcconfig:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2013-02-07 Brent Fulgham <bfulgham@webkit.org>
+
+ [Windows] Unreviewed Visual Studio 2010 build fixes after r142179.
+
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in: Correct changed symbols
+ * JavaScriptCore.vcxproj/JavaScriptCoreExports.def: Removed autogenerated file.
+
+2013-02-05 Filip Pizlo <fpizlo@apple.com>
+
+ DFG::ByteCodeParser should do surgical constant folding to reduce load on the optimization fixpoint
+ https://bugs.webkit.org/show_bug.cgi?id=109000
+
+ Reviewed by Oliver Hunt.
+
+ Previously our source parser's ASTBuilder did some surgical constant folding, but it
+ didn't cover some cases. It was particularly incapable of doing constant folding for
+ cases where we do some minimal loop peeling in the bytecode generator - since it
+ didn't "see" those constants prior to the peeling. Example:
+
+ for (var i = 0; i < 4; ++i)
+ things;
+
+ This will get peeled just a bit by the bytecode generator, so that the "i < 4" is
+ duplicated both at the top of the loop and the bottom. This means that we have a
+ constant comparison: "0 < 4", which the bytecode generator emits without any further
+ thought.
+
+ The DFG optimization fixpoint of course folds this and simplifies the CFG
+ accordingly, but this incurs a compile-time cost. The purpose of this change is to
+ do some surgical constant folding in the DFG's bytecode parser, so that such
+ constructs reduce load on the CFG simplifier and the optimization fixpoint. The goal
+ is not to cover all cases, since the DFG CFA and CFG simplifier have a powerful
+ sparse conditional constant propagation that we can always fall back on. Instead the
+ goal is to cover enough cases that for common small functions we don't have to
+ perform such transformations, thereby reducing compile times.
+
+ This also refactors m_inlineStackEntry->m_inlineCallFrame to be a handy method call
+ and also adds the notion of a TriState-based JSValue::pureToBoolean(). Both of these
+ things are used by the folder.
+
+ As well, care has been taken to make sure that the bytecode parser only does folding
+ that is statically provable, and that doesn't arise out of speculation. This means
+ we cannot fold on data flow that crosses inlining boundaries. On the other hand, the
+ folding that the bytecode parser uses doesn't require phantoming anything. Such is
+ the trade-off: for anything that we do need phantoming, we defer it to the
+ optimization fixpoint.
+
+ Slight SunSpider speed-up.
+
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::get):
+ (JSC::DFG::ByteCodeParser::getLocal):
+ (JSC::DFG::ByteCodeParser::setLocal):
+ (JSC::DFG::ByteCodeParser::flushDirect):
+ (JSC::DFG::ByteCodeParser::flushArgumentsAndCapturedVariables):
+ (JSC::DFG::ByteCodeParser::toInt32):
+ (ByteCodeParser):
+ (JSC::DFG::ByteCodeParser::inlineCallFrame):
+ (JSC::DFG::ByteCodeParser::currentCodeOrigin):
+ (JSC::DFG::ByteCodeParser::canFold):
+ (JSC::DFG::ByteCodeParser::handleInlining):
+ (JSC::DFG::ByteCodeParser::getScope):
+ (JSC::DFG::ByteCodeParser::parseResolveOperations):
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ (JSC::DFG::ByteCodeParser::parseCodeBlock):
+ * dfg/DFGNode.h:
+ (JSC::DFG::Node::isStronglyProvedConstantIn):
+ (Node):
+ * runtime/JSCJSValue.h:
+ * runtime/JSCJSValueInlines.h:
+ (JSC::JSValue::pureToBoolean):
+ (JSC):
+
+2013-02-07 Zoltan Herczeg <zherczeg@webkit.org>
+
+ Invalid code is generated for storing constants with baseindex addressing modes on ARM traditional.
+ https://bugs.webkit.org/show_bug.cgi?id=109050
+
+ Reviewed by Oliver Hunt.
+
+ The S! scratch register is reused, but it should contain the constant value.
+
+ * assembler/ARMAssembler.cpp:
+ (JSC::ARMAssembler::baseIndexTransfer32):
+ (JSC::ARMAssembler::baseIndexTransfer16):
+
+2013-02-07 Andras Becsi <andras.becsi@digia.com>
+
+ [Qt] Use GNU ar's thin archive format for intermediate static libs
+ https://bugs.webkit.org/show_bug.cgi?id=109052
+
+ Reviewed by Jocelyn Turcotte.
+
+ Adjust project files that used activeBuildConfig()
+ to use targetSubDir().
+
+ * JavaScriptCore.pri:
+ * LLIntOffsetsExtractor.pro:
+ * Target.pri:
+
+2013-02-06 Roger Fong <roger_fong@apple.com>
+
+ Unreviewed. Touchups to VS2010 WebKit solution.
+ Fix an export generator script, modify some property sheets, add resouce file.
+
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorDebug.props:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorPostBuild.cmd:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorRelease.props:
+ * JavaScriptCore.vcxproj/resource.h: Added.
+
+2013-02-06 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Web Inspector: Native Memory Instrumentation: assign class name to the heap graph node automatically
+ https://bugs.webkit.org/show_bug.cgi?id=107262
+
+ Reviewed by Yury Semikhatsky.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+
+2013-02-06 Mike West <mkwst@chromium.org>
+
+ Add an ENABLE_NOSNIFF feature flag.
+ https://bugs.webkit.org/show_bug.cgi?id=109029
+
+ Reviewed by Jochen Eisinger.
+
+ This new flag will control the behavior of 'X-Content-Type-Options: nosniff'
+ when processing script and other resource types.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2013-02-05 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ put_to_base should emit a Phantom for "value" across the ForceOSRExit
+ https://bugs.webkit.org/show_bug.cgi?id=108998
+
+ Reviewed by Oliver Hunt.
+
+ Otherwise, the OSR exit compiler could clobber it, which would lead to badness.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::tallyFrequentExitSites): Build fixes for when DFG debug logging is enabled.
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseBlock): Added extra Phantoms for the "value" field where needed.
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compile): Ditto.
+
+2013-02-05 Michael Saboff <msaboff@apple.com>
+
+ Crash at JSC::call when loading www.gap.com with JSVALUE32_64 Enabled
+ https://bugs.webkit.org/show_bug.cgi?id=108991
+
+ Reviewed by Oliver Hunt.
+
+ Changed the restoration from calleeGPR to nonArgGPR0 because the restoration of the return location
+ may step on calleeGPR is it happen to be nonArgGPR2.
+
+ * dfg/DFGRepatch.cpp:
+ (JSC::DFG::dfgLinkClosureCall):
+
+2013-02-05 Roger Fong <roger_fong@apple.com>
+
+ Add a JavaScriptCore Export Generator project.
+ https://bugs.webkit.org/show_bug.cgi?id=108971.
+
+ Reviewed by Brent Fulgham.
+
+ * JavaScriptCore.vcxproj/JavaScriptCore.sln:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
+ * JavaScriptCore.vcxproj/JavaScriptCoreCommon.props:
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGenerator.vcxproj: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGenerator.vcxproj.filters: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGenerator.vcxproj.user: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorBuildCmd.cmd: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorCommon.props: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorDebug.props: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorPostBuild.cmd: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorPreBuild.cmd: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExportGeneratorRelease.props: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreExportGenerator/JavaScriptCoreExports.def.in: Added.
+
+2013-02-04 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should have a precise view of jump targets
+ https://bugs.webkit.org/show_bug.cgi?id=108868
+
+ Reviewed by Oliver Hunt.
+
+ Previously, the DFG relied entirely on the CodeBlock's jump targets list for
+ determining when to break basic blocks. This worked great, except sometimes it
+ would be too conservative since the CodeBlock just says where the bytecode
+ generator inserted labels.
+
+ This change keeps the old jump target list in CodeBlock since it is still
+ valuable to the baseline JIT, but switches the DFG to use its own jump target
+ calculator. This ought to reduce pressure on the DFG simplifier, which would
+ previously do a lot of work to try to merge redundantly created basic blocks.
+ It appears to be a 1% progression on SunSpider.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * bytecode/PreciseJumpTargets.cpp: Added.
+ (JSC):
+ (JSC::addSimpleSwitchTargets):
+ (JSC::computePreciseJumpTargets):
+ * bytecode/PreciseJumpTargets.h: Added.
+ (JSC):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseCodeBlock):
+
+2013-02-01 Roger Fong <roger_fong@apple.com>
+
+ Make ConfigurationBuildDir include directories precede WebKitLibraries in JSC.
+ https://bugs.webkit.org/show_bug.cgi?id=108693.
+
+ Rubberstamped by Timothy Horton.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
+
+2013-02-04 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Structure::m_outOfLineCapacity is unnecessary
+ https://bugs.webkit.org/show_bug.cgi?id=108206
+
+ Reviewed by Darin Adler.
+
+ Simplifying the utility functions that we use since we don't need a
+ bunch of fancy templates for this one specific call site.
+
+ * runtime/Structure.h:
+ (JSC::Structure::outOfLineCapacity):
+
+2013-02-05 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: testapi.mm should use ARC
+ https://bugs.webkit.org/show_bug.cgi?id=107838
+
+ Reviewed by Oliver Hunt.
+
+ In ToT testapi.mm uses the Obj-C garbage collector, which hides a lot of our object lifetime bugs.
+ We should enable ARC, since that is what most of our clients will be using. We use Xcode project
+ settings to make sure we don't try to compile ARC on 32-bit.
+
+ * API/tests/testapi.mm:
+ (+[TestObject testObject]):
+ (testObjectiveCAPI):
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2013-02-05 Brent Fulgham <bfulgham@webkit.org>
+
+ [Windows] Unreviewed VS2010 Build Correction after r141651
+
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: Add missing
+ StructureRareData.h and StructureRareData.cpp files.
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters: Ditto.
+
+2013-02-05 Michael Saboff <msaboff@apple.com>
+
+ r141788 won't build due to not having all changes needed by Node* change
+ https://bugs.webkit.org/show_bug.cgi?id=108944
+
+ Reviewed by David Kilzer.
+
+ Fixed three instances of integerResult(..., m_compileIndex) to be integerResult(..., node).
+
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileSoftModulo):
+ (JSC::DFG::SpeculativeJIT::compileIntegerArithDivForARMv7s):
+
+2013-02-04 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r141809.
+ http://trac.webkit.org/changeset/141809
+ https://bugs.webkit.org/show_bug.cgi?id=108860
+
+ ARC isn't supported on 32-bit. (Requested by mhahnenberg on
+ #webkit).
+
+ * API/tests/testapi.mm:
+ (+[TestObject testObject]):
+ (testObjectiveCAPI):
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2013-02-04 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: testapi.mm should use ARC
+ https://bugs.webkit.org/show_bug.cgi?id=107838
+
+ Reviewed by Oliver Hunt.
+
+ In ToT testapi.mm uses the Obj-C garbage collector, which hides a lot of our object lifetime bugs.
+ We should enable ARC, since that is what most of our clients will be using.
+
+ * API/tests/testapi.mm:
+ (-[TestObject init]):
+ (-[TestObject dealloc]):
+ (+[TestObject testObject]):
+ (testObjectiveCAPI):
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2013-02-04 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: ObjCCallbackFunction should retain the target of its NSInvocation
+ https://bugs.webkit.org/show_bug.cgi?id=108843
+
+ Reviewed by Darin Adler.
+
+ Currently, ObjCCallbackFunction doesn't retain the target of its NSInvocation. It needs to do
+ this to prevent crashes when trying to invoke a callback later on.
+
+ * API/ObjCCallbackFunction.mm:
+ (ObjCCallbackFunction::ObjCCallbackFunction):
+ (ObjCCallbackFunction::~ObjCCallbackFunction):
+
+2013-02-04 Martin Robinson <mrobinson@igalia.com>
+
+ Fix GTK+ 'make dist' in preparation for the 1.11.5 release.
+
+ * GNUmakefile.list.am: Update the source lists.
+
+2013-02-04 Michael Saboff <msaboff@apple.com>
+
+ For ARMv7s use integer divide instruction for divide and modulo when possible
+ https://bugs.webkit.org/show_bug.cgi?id=108840
+
+ Reviewed in person by Filip Pizlo.
+
+ Added ARMv7s integer divide path for ArithDiv and ArithMod where operands and results are integer.
+ This is patterned after the similar code for X86. Also added modulo power of 2 optimization
+ that uses logical and. Added sdiv and udiv to the ARMv7 disassembler. Put all the changes
+ behind #if CPU(APPLE_ARMV7S).
+
+ * assembler/ARMv7Assembler.h:
+ (ARMv7Assembler):
+ (JSC::ARMv7Assembler::sdiv):
+ (JSC::ARMv7Assembler::udiv):
+ * dfg/DFGCommon.h:
+ (JSC::DFG::isARMv7s):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileSoftModulo):
+ (JSC::DFG::SpeculativeJIT::compileIntegerArithDivForARMv7s):
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2013-02-04 David Kilzer <ddkilzer@apple.com>
+
+ Check PrivateHeaders/JSBasePrivate.h for inappropriate macros
+ <http://webkit.org/b/108749>
+
+ Reviewed by Joseph Pecoraro.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj: Add
+ PrivateHeaders/JSBasePrivate.h to list of headers to check in
+ "Check for Inappropriate Macros in External Headers" build phase
+ script.
+
+2013-02-04 David Kilzer <ddkilzer@apple.com>
+
+ Remove duplicate entries from JavaScriptCore Xcode project
+
+ $ uniq Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj | diff -u - Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj | patch -p0 -R
+ patching file Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
+
+ * JavaScriptCore.xcodeproj/project.pbxproj: Remove duplicates.
+
+2013-02-04 David Kilzer <ddkilzer@apple.com>
+
+ Sort JavaScriptCore Xcode project file
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2013-02-03 David Kilzer <ddkilzer@apple.com>
+
+ Upstream ENABLE_PDFKIT_PLUGIN settting
+ <http://webkit.org/b/108792>
+
+ Reviewed by Tim Horton.
+
+ * Configurations/FeatureDefines.xcconfig: Disable PDFKIT_PLUGIN
+ on iOS since PDFKit is a Mac-only framework.
+
+2013-02-02 Andreas Kling <akling@apple.com>
+
+ Vector should consult allocator about ideal size when choosing capacity.
+ <http://webkit.org/b/108410>
+ <rdar://problem/13124002>
+
+ Reviewed by Benjamin Poulain.
+
+ Remove assertion about Vector capacity that won't hold anymore since capacity()
+ may not be what you passed to reserveCapacity().
+ Also export WTF::fastMallocGoodSize() for Windows builds.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::CodeBlock):
+
+2013-02-02 Patrick Gansterer <paroga@webkit.org>
+
+ [CMake] Adopt the WinCE port to new CMake
+ https://bugs.webkit.org/show_bug.cgi?id=108754
+
+ Reviewed by Laszlo Gombos.
+
+ * os-win32/WinMain.cpp: Removed.
+ * shell/PlatformWinCE.cmake: Removed.
+
+2013-02-02 Mark Rowe <mrowe@apple.com>
+
+ <http://webkit.org/b/108745> WTF shouldn't use a script build phase to detect the presence of headers when the compiler can do it for us
+
+ Reviewed by Sam Weinig.
+
+ * DerivedSources.make: Remove an obsolete Makefile rule. This should have been removed when the use
+ of the generated file moved to WTF.
+
+2013-02-02 David Kilzer <ddkilzer@apple.com>
+
+ Upstream iOS FeatureDefines
+ <http://webkit.org/b/108753>
+
+ Reviewed by Anders Carlsson.
+
+ * Configurations/FeatureDefines.xcconfig:
+ - ENABLE_DEVICE_ORIENTATION: Add iOS configurations.
+ - ENABLE_PLUGIN_PROXY_FOR_VIDEO: Ditto.
+ - FEATURE_DEFINES: Add ENABLE_PLUGIN_PROXY_FOR_VIDEO. Add
+ PLATFORM_NAME variant to reduce future merge conflicts.
+
+2013-02-01 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Structure::m_enumerationCache should be moved to StructureRareData
+ https://bugs.webkit.org/show_bug.cgi?id=108723
+
+ Reviewed by Oliver Hunt.
+
+ m_enumerationCache is only used by objects whose properties are iterated over, so not every Structure needs this
+ field and it can therefore be moved safely to StructureRareData to help with memory savings.
+
+ * runtime/JSPropertyNameIterator.h:
+ (JSPropertyNameIterator):
+ (JSC::Register::propertyNameIterator):
+ (JSC::StructureRareData::enumerationCache): Add to JSPropertyNameIterator.h so that it can see the correct type.
+ (JSC::StructureRareData::setEnumerationCache): Ditto.
+ * runtime/Structure.cpp:
+ (JSC::Structure::addPropertyWithoutTransition): Use the enumerationCache() getter rather than accessing the field.
+ (JSC::Structure::removePropertyWithoutTransition): Ditto.
+ (JSC::Structure::visitChildren): We no longer have to worry about marking the m_enumerationCache field.
+ * runtime/Structure.h:
+ (JSC::Structure::setEnumerationCache): Move the old accessors back since we don't have to have any knowledge of
+ the JSPropertyNameIterator type.
+ (JSC::Structure::enumerationCache): Ditto.
+ * runtime/StructureRareData.cpp:
+ (JSC::StructureRareData::visitChildren): Mark the new m_enumerationCache field.
+ * runtime/StructureRareData.h: Add new functions/fields.
+ (StructureRareData):
+
+2013-02-01 Roger Fong <roger_fong@apple.com>
+
+ Unreviewed. JavaScriptCore VS2010 project cleanup.
+
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
+ * JavaScriptCore.vcxproj/JavaScriptCoreCommon.props:
+ * JavaScriptCore.vcxproj/testRegExp/testRegExp.vcxproj:
+
+2013-02-01 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r141662.
+ http://trac.webkit.org/changeset/141662
+ https://bugs.webkit.org/show_bug.cgi?id=108738
+
+ it's an incorrect change since processPhiStack will
+ dereference dangling BasicBlock pointers (Requested by pizlo
+ on #webkit).
+
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parse):
+
+2013-02-01 Filip Pizlo <fpizlo@apple.com>
+
+ Eliminate dead blocks sooner in the DFG::ByteCodeParser to make clear that you don't need to hold onto them during Phi construction
+ https://bugs.webkit.org/show_bug.cgi?id=108717
+
+ Reviewed by Mark Hahnenberg.
+
+ I think this makes the code clearer. It doesn't change behavior.
+
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parse):
+
+2013-02-01 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Structure should have a StructureRareData field to save space
+ https://bugs.webkit.org/show_bug.cgi?id=108659
+
+ Reviewed by Oliver Hunt.
+
+ Many of the fields in Structure are used in a subset of all total Structures; however, all Structures must
+ pay the memory cost of those fields, regardless of whether they use them or not. Since we can have potentially
+ many Structures on a single page (e.g. bing.com creates ~1500 Structures), it would be profitable to
+ refactor Structure so that not every Structure has to pay the memory costs for these infrequently used fields.
+
+ To accomplish this, we can create a new StructureRareData class to house these seldom used fields which we
+ can allocate on demand whenever a Structure requires it. This StructureRareData can itself be a JSCell, and
+ can do all the marking of the fields for the Structure. The StructureRareData field will be part of a union
+ with m_previous to minimize overhead. We'll add a new field to JSTypeInfo to indicate that the Structure has
+ a StructureRareData field. During transitions, a Structure will clone its previous Structure's StructureRareData
+ if it has one. There could be some potential for optimizing this process, but the initial implementation will
+ be dumb since we'd be paying these overhead costs for each Structure anyways.
+
+ Initially we'll only put two fields in the StructureRareData to avoid a memory regression. Over time we'll
+ continue to move fields from Structure to StructureRareData. Optimistically, this could potentially reduce our
+ Structure memory footprint by up to around 75%. It could also clear the way for removing destructors from
+ Structures (and into StructureRareData).
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * dfg/DFGRepatch.cpp: Includes for linking purposes.
+ * jit/JITStubs.cpp:
+ * jsc.cpp:
+ * llint/LLIntSlowPaths.cpp:
+ * runtime/JSCellInlines.h: Added ifdef guards.
+ * runtime/JSGlobalData.cpp: New Structure for StructureRareData class.
+ (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSGlobalData.h:
+ (JSGlobalData):
+ * runtime/JSGlobalObject.h:
+ * runtime/JSTypeInfo.h: New flag to indicate whether or not a Structure has a StructureRareData field.
+ (JSC::TypeInfo::flags):
+ (JSC::TypeInfo::structureHasRareData):
+ * runtime/ObjectPrototype.cpp:
+ * runtime/Structure.cpp: We use a combined WriteBarrier<JSCell> field m_previousOrRareData to avoid compiler issues.
+ (JSC::Structure::dumpStatistics):
+ (JSC::Structure::Structure):
+ (JSC::Structure::materializePropertyMap):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::nonPropertyTransition):
+ (JSC::Structure::pin):
+ (JSC::Structure::allocateRareData): Handles allocating a brand new StructureRareData field.
+ (JSC::Structure::cloneRareDataFrom): Handles cloning a StructureRareData field from another. Used during Structure
+ transitions.
+ (JSC::Structure::visitChildren): We no longer have to worry about marking m_objectToStringValue.
+ * runtime/Structure.h:
+ (JSC::Structure::previousID): Checks the structureHasRareData flag to see where it should get the previous Structure.
+ (JSC::Structure::objectToStringValue): Reads the value from the StructureRareData. If it doesn't exist, returns 0.
+ (JSC::Structure::setObjectToStringValue): Ensures that we have a StructureRareData field, then forwards the function
+ call to it.
+ (JSC::Structure::materializePropertyMapIfNecessary):
+ (JSC::Structure::setPreviousID): Checks for StructureRareData and forwards if necessary.
+ (Structure):
+ (JSC::Structure::clearPreviousID): Ditto.
+ (JSC::Structure::create):
+ * runtime/StructureRareData.cpp: Added. All of the basic functionality of a JSCell with the fields that we've moved
+ from Structure and the functions required to access/modify those fields as Structure would have done.
+ (JSC):
+ (JSC::StructureRareData::createStructure):
+ (JSC::StructureRareData::create):
+ (JSC::StructureRareData::clone):
+ (JSC::StructureRareData::StructureRareData):
+ (JSC::StructureRareData::visitChildren):
+ * runtime/StructureRareData.h: Added.
+ (JSC):
+ (StructureRareData):
+ * runtime/StructureRareDataInlines.h: Added.
+ (JSC):
+ (JSC::StructureRareData::previousID):
+ (JSC::StructureRareData::setPreviousID):
+ (JSC::StructureRareData::clearPreviousID):
+ (JSC::Structure::previous): Handles the ugly casting to get the value of the right type of m_previousOrRareData.
+ (JSC::Structure::rareData): Ditto.
+ (JSC::StructureRareData::objectToStringValue):
+ (JSC::StructureRareData::setObjectToStringValue):
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * dfg/DFGRepatch.cpp:
+ * jit/JITStubs.cpp:
+ * jsc.cpp:
+ * llint/LLIntSlowPaths.cpp:
+ * runtime/JSCellInlines.h:
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSGlobalData.h:
+ (JSGlobalData):
+ * runtime/JSGlobalObject.h:
+ * runtime/JSTypeInfo.h:
+ (JSC):
+ (JSC::TypeInfo::flags):
+ (JSC::TypeInfo::structureHasRareData):
+ * runtime/ObjectPrototype.cpp:
+ * runtime/Structure.cpp:
+ (JSC::Structure::dumpStatistics):
+ (JSC::Structure::Structure):
+ (JSC::Structure::materializePropertyMap):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::nonPropertyTransition):
+ (JSC::Structure::pin):
+ (JSC::Structure::allocateRareData):
+ (JSC):
+ (JSC::Structure::cloneRareDataFrom):
+ (JSC::Structure::visitChildren):
+ * runtime/Structure.h:
+ (JSC::Structure::previousID):
+ (JSC::Structure::objectToStringValue):
+ (JSC::Structure::setObjectToStringValue):
+ (JSC::Structure::materializePropertyMapIfNecessary):
+ (JSC::Structure::setPreviousID):
+ (Structure):
+ (JSC::Structure::clearPreviousID):
+ (JSC::Structure::previous):
+ (JSC::Structure::rareData):
+ (JSC::Structure::create):
+ * runtime/StructureRareData.cpp: Added.
+ (JSC):
+ (JSC::StructureRareData::createStructure):
+ (JSC::StructureRareData::create):
+ (JSC::StructureRareData::clone):
+ (JSC::StructureRareData::StructureRareData):
+ (JSC::StructureRareData::visitChildren):
+ * runtime/StructureRareData.h: Added.
+ (JSC):
+ (StructureRareData):
+ * runtime/StructureRareDataInlines.h: Added.
+ (JSC):
+ (JSC::StructureRareData::previousID):
+ (JSC::StructureRareData::setPreviousID):
+ (JSC::StructureRareData::clearPreviousID):
+ (JSC::StructureRareData::objectToStringValue):
+ (JSC::StructureRareData::setObjectToStringValue):
+
+2013-02-01 Balazs Kilvady <kilvadyb@homejinni.com>
+
+ offlineasm BaseIndex handling is broken on ARM due to MIPS changes
+ https://bugs.webkit.org/show_bug.cgi?id=108261
+
+ Reviewed by Filip Pizlo.
+
+ offlineasm BaseIndex handling fix on MIPS.
+
+ * offlineasm/mips.rb:
+ * offlineasm/risc.rb:
+
+2013-02-01 Geoffrey Garen <ggaren@apple.com>
+
+ Removed an unused function: JSGlobalObject::createFunctionExecutableFromGlobalCode
+ https://bugs.webkit.org/show_bug.cgi?id=108657
+
+ Reviewed by Anders Carlsson.
+
+ * runtime/JSGlobalObject.cpp:
+ (JSC):
+ * runtime/JSGlobalObject.h:
+ (JSGlobalObject):
+
+2013-02-01 Geoffrey Garen <ggaren@apple.com>
+
+ Added TriState to WTF and started using it in one place
+ https://bugs.webkit.org/show_bug.cgi?id=108628
+
+ Reviewed by Beth Dakin.
+
+ * runtime/PrototypeMap.h:
+ (JSC::PrototypeMap::isPrototype): Use TriState instead of boolean. In
+ response to review feedback, this is an attempt to clarify that our
+ 'true' condition is actually just a 'maybe'.
+
+ * runtime/PrototypeMap.h:
+ (PrototypeMap):
+ (JSC::PrototypeMap::isPrototype):
+
+2013-02-01 Alexis Menard <alexis@webkit.org>
+
+ Enable unprefixed CSS transitions by default.
+ https://bugs.webkit.org/show_bug.cgi?id=108216
+
+ Reviewed by Dean Jackson.
+
+ Rename the flag CSS_TRANSFORMS_ANIMATIONS_TRANSITIONS_UNPREFIXED
+ to CSS_TRANSFORMS_ANIMATIONS_UNPREFIXED which will be used later to
+ guard the unprefixing work for CSS Transforms and animations.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2013-01-31 Filip Pizlo <fpizlo@apple.com>
+
+ DFG::CFGSimplificationPhase::keepOperandAlive() conflates liveness and availability
+ https://bugs.webkit.org/show_bug.cgi?id=108580
+
+ Reviewed by Oliver Hunt.
+
+ This is a harmless bug in that it only results in us keeping a bit too many things
+ for OSR. But it's worth fixing so that the code is consistent.
+
+ keepOperandAlive() is called when block A has a branch to blocks B and C, but the
+ A->B edge is proven to never be taken and we want to optimize the code to have A
+ unconditionally jump to C. In that case, for the purposes of OSR, we need to
+ preserve the knowledge that the state that B expected to be live incoming from A
+ ought still to be live up to the point of where the A->B,C branch used to be. The
+ way we keep things alive is by using the variablesAtTail of A (i.e., we use the
+ knowledge of in what manner A made state available to B and C). The way we choose
+ which state should be kept alive ought to be chosen by the variablesAtHead of B
+ (i.e. the things B says it needs from its predecessors, including A), except that
+ keepOperandAlive() was previously just using variablesAtTail of A for this
+ purpose.
+
+ The fix is to have keepOperandAlive() use both liveness and availability in its
+ logic. It should use liveness (i.e. B->variablesAtHead) to decide what to keep
+ alive, and it should use availability (i.e. A->variablesAtTail) to decide how to
+ keep it alive.
+
+ This might be a microscopic win on some programs, but it's mainly intended to be
+ a code clean-up so that I don't end up scratching my head in confusion the next
+ time I look at this code.
+
+ * dfg/DFGCFGSimplificationPhase.cpp:
+ (JSC::DFG::CFGSimplificationPhase::keepOperandAlive):
+ (JSC::DFG::CFGSimplificationPhase::jettisonBlock):
+ (JSC::DFG::CFGSimplificationPhase::mergeBlocks):
+
+2013-01-31 Geoffrey Garen <ggaren@apple.com>
+
+ REGRESSION (r141192): Crash beneath cti_op_get_by_id_generic @ discussions.apple.com
+ https://bugs.webkit.org/show_bug.cgi?id=108576
+
+ Reviewed by Filip Pizlo.
+
+ This was a long-standing bug. The DFG would destructively reuse a register
+ in op_convert_this, but:
+
+ * The bug only presented during speculation failure for type Other
+
+ * The bug presented by removing the low bits of a pointer, which
+ used to be harmless, since all objects were so aligned anyway.
+
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile): Don't reuse our this register as
+ our scratch register. The whole point of our scratch register is to
+ avoid destructively modifying our this register. I'm pretty sure this
+ was a copy-paste error.
+
+2013-01-31 Roger Fong <roger_fong@apple.com>
+
+ Unreviewed. Windows build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+
+2013-01-31 Jessie Berlin <jberlin@apple.com>
+
+ Rolling out r141407 because it is causing crashes under
+ WTF::TCMalloc_Central_FreeList::FetchFromSpans() in Release builds.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::CodeBlock):
+
+2013-01-31 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: JSContext exception property causes reference cycle
+ https://bugs.webkit.org/show_bug.cgi?id=107778
+
+ Reviewed by Darin Adler.
+
+ JSContext has a (retain) JSValue * exception property which, when non-null, creates a
+ reference cycle (since the JSValue * holds a strong reference back to the JSContext *).
+
+ * API/JSContext.mm: Instead of JSValue *, we now use a plain JSValueRef, which eliminates the reference cycle.
+ (-[JSContext initWithVirtualMachine:]):
+ (-[JSContext setException:]):
+ (-[JSContext exception]):
+
+2013-01-31 Roger Fong <roger_fong@apple.com>
+
+ Unreviewed build fix. Win7 port.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+
+2013-01-31 Joseph Pecoraro <pecoraro@apple.com>
+
+ Disable ENABLE_FULLSCREEN_API on iOS
+ https://bugs.webkit.org/show_bug.cgi?id=108250
+
+ Reviewed by Benjamin Poulain.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2013-01-31 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: Fix insertion of values greater than the max index allowed by the spec
+ https://bugs.webkit.org/show_bug.cgi?id=108264
+
+ Reviewed by Oliver Hunt.
+
+ Fixed a bug, added a test to the API tests, cleaned up some code.
+
+ * API/JSValue.h: Changed some of the documentation on setValue:atIndex: to indicate that
+ setting values at indices greater than UINT_MAX - 1 wont' affect the length of JS arrays.
+ * API/JSValue.mm:
+ (-[JSValue valueAtIndex:]): We weren't returning when we should have been.
+ (-[JSValue setValue:atIndex:]): Added a comment about why we do the early check for being larger than UINT_MAX.
+ (objectToValueWithoutCopy): Removed two redundant cases that were already checked previously.
+ * API/tests/testapi.mm:
+
+2013-01-30 Andreas Kling <akling@apple.com>
+
+ Vector should consult allocator about ideal size when choosing capacity.
+ <http://webkit.org/b/108410>
+ <rdar://problem/13124002>
+
+ Reviewed by Benjamin Poulain.
+
+ Remove assertion about Vector capacity that won't hold anymore since capacity()
+ may not be what you passed to reserveCapacity().
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::CodeBlock):
+
+2013-01-30 Filip Pizlo <fpizlo@apple.com>
+
+ DFG bytecode parser should have more assertions about the status of local accesses
+ https://bugs.webkit.org/show_bug.cgi?id=108417
+
+ Reviewed by Mark Hahnenberg.
+
+ Assert some things that we already know to be true, just to reassure ourselves that they are true.
+ This is meant as a prerequisite for https://bugs.webkit.org/show_bug.cgi?id=108414, which will
+ make these rules even stricter.
+
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::getLocal):
+ (JSC::DFG::ByteCodeParser::getArgument):
+
+2013-01-30 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: JSContext's dealloc causes ASSERT due to ordering of releases
+ https://bugs.webkit.org/show_bug.cgi?id=107978
+
+ Reviewed by Filip Pizlo.
+
+ We need to add the Identifier table save/restore in JSContextGroupRelease so that we
+ have the correct table if we end up destroying the JSGlobalData/Heap.
+
+ * API/JSContextRef.cpp:
+ (JSContextGroupRelease):
+
+2013-01-30 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: exceptionHandler needs to be released in JSContext dealloc
+ https://bugs.webkit.org/show_bug.cgi?id=108378
+
+ Reviewed by Filip Pizlo.
+
+ JSContext has a (copy) exceptionHandler property that it doesn't release in dealloc.
+ That sounds like the potential for a leak. It should be released.
+
+ * API/JSContext.mm:
+ (-[JSContext dealloc]):
+
+2013-01-30 Filip Pizlo <fpizlo@apple.com>
+
+ REGRESSION(140504): pure CSE no longer matches things, 10% regression on Kraken
+ https://bugs.webkit.org/show_bug.cgi?id=108366
+
+ Reviewed by Geoffrey Garen and Mark Hahnenberg.
+
+ This was a longstanding bug that was revealed by http://trac.webkit.org/changeset/140504.
+ Pure CSE requires that the Node::flags() that may affect the behavior of a node match,
+ when comparing a possibly redundant node to its possible replacement. It was doing this
+ by comparing Node::arithNodeFlags(), which as the name might appear to suggest, returns
+ just those flag bits that correspond to actual node behavior and not auxiliary things.
+ Unfortunately, Node::arithNodeFlags() wasn't actually masking off the irrelevant bits.
+ This worked prior to r140504 because CSE itself didn't mutate the flags, so there was a
+ very high probability that matching nodes would also have completely identical flag bits
+ (even the ones that aren't relevant to arithmetic behavior, like NodeDoesNotExit). But
+ r140504 moved one of CSE's side-tables (m_relevantToOSR) into a flag bit for quicker
+ access. These bits would be mutated as the CSE ran over a basic block, in such a way that
+ there was a very high probability that the possible replacement would already have the
+ bit set, while the redundant node did not have the bit set. Since Node::arithNodeFlags()
+ returned all of the bits, this would cause CSEPhase::pureCSE() to reject the match
+ almost every time.
+
+ The solution is to make Node::arithNodeFlags() do as its name suggests: only return those
+ flags that are relevant to arithmetic behavior. This patch introduces a new mask that
+ represents those bits, and includes NodeBehaviorMask and NodeBackPropMask, which are both
+ used for queries on Node::arithNodeFlags(), and both affect arithmetic code gen. None of
+ the other flags are relevant to Node::arithNodeFlags() since they either correspond to
+ information already conveyed by the opcode (like NodeResultMask, NodeMustGenerate,
+ NodeHasVarArgs, NodeClobbersWorld, NodeMightClobber) or information that doesn't affect
+ the result that the node will produce or any of the queries performed on the result of
+ Node::arithNodeFlags (NodeDoesNotExit and of course NodeRelevantToOSR).
+
+ This is a 10% speed-up on Kraken, undoing the regression from r140504.
+
+ * dfg/DFGNode.h:
+ (JSC::DFG::Node::arithNodeFlags):
+ * dfg/DFGNodeFlags.h:
+ (DFG):
+
+2013-01-29 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Structure::m_outOfLineCapacity is unnecessary
+ https://bugs.webkit.org/show_bug.cgi?id=108206
+
+ Reviewed by Geoffrey Garen.
+
+ We can calculate our out of line capacity by using the outOfLineSize and our knowledge about our resize policy.
+ According to GDB, this knocks Structures down from 136 bytes to 128 bytes (I'm guessing the extra bytes are from
+ better alignment of object fields), which puts Structures in a smaller size class. Woohoo! Looks neutral on our
+ benchmarks.
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::Structure):
+ (JSC):
+ (JSC::Structure::suggestedNewOutOfLineStorageCapacity):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::addPropertyWithoutTransition):
+ * runtime/Structure.h:
+ (Structure):
+ (JSC::Structure::outOfLineCapacity):
+ (JSC::Structure::totalStorageCapacity):
+
+2013-01-29 Geoffrey Garen <ggaren@apple.com>
+
+ Be a little more conservative about emitting table-based switches
+ https://bugs.webkit.org/show_bug.cgi?id=108292
+
+ Reviewed by Filip Pizlo.
+
+ Profiling shows we're using op_switch in cases where it's a regression.
+
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC):
+ (JSC::length):
+ (JSC::CaseBlockNode::tryTableSwitch):
+ (JSC::CaseBlockNode::emitBytecodeForBlock):
+ * parser/Nodes.h:
+ (CaseBlockNode):
+
+2013-01-29 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r140983.
+ http://trac.webkit.org/changeset/140983
+ https://bugs.webkit.org/show_bug.cgi?id=108277
+
+ Unfortunately, this API has one last client (Requested by
+ abarth on #webkit).
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2013-01-29 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: JSObjCClassInfo creates reference cycle with JSContext
+ https://bugs.webkit.org/show_bug.cgi?id=107839
+
+ Reviewed by Geoffrey Garen.
+
+ Fixing several ASSERTs that were incorrect along with some of the reallocation of m_prototype and
+ m_constructor that they were based on.
+
+ * API/JSWrapperMap.mm:
+ (-[JSObjCClassInfo allocateConstructorAndPrototypeWithSuperClassInfo:]): We now only allocate those
+ fields that are null (i.e. have been collected or have never been allocated to begin with).
+ (-[JSObjCClassInfo reallocateConstructorAndOrPrototype]): Renamed to better indicate that we're
+ reallocating one or both of the prototype/constructor combo.
+ (-[JSObjCClassInfo wrapperForObject:]): Call new reallocate function.
+ (-[JSObjCClassInfo constructor]): Ditto.
+
+2013-01-29 Geoffrey Garen <ggaren@apple.com>
+
+ Make precise size classes more precise
+ https://bugs.webkit.org/show_bug.cgi?id=108270
+
+ Reviewed by Mark Hahnenberg.
+
+ Size inference makes this profitable.
+
+ I chose 8 byte increments because JSString is 24 bytes. Otherwise, 16
+ byte increments might be better.
+
+ * heap/Heap.h:
+ (Heap): Removed firstAllocatorWithoutDestructors because it's unused now.
+
+ * heap/MarkedBlock.h:
+ (MarkedBlock): Updated constants.
+
+ * heap/MarkedSpace.h:
+ (MarkedSpace):
+ (JSC): Also reduced the maximum precise size class because my testing
+ has shown that the smaller size classes are much more common. This
+ offsets some of the size class explosion caused by reducing the precise
+ increment.
+
+ * llint/LLIntData.cpp:
+ (JSC::LLInt::Data::performAssertions): No need for this ASSERT anymore
+ because we don't rely on firstAllocatorWithoutDestructors anymore, since
+ we pick size classes dynamically now.
+
+2013-01-29 Oliver Hunt <oliver@apple.com>
+
+ Add some hardening to methodTable()
+ https://bugs.webkit.org/show_bug.cgi?id=108253
+
+ Reviewed by Mark Hahnenberg.
+
+ When accessing methodTable() we now always make sure that our
+ structure _could_ be valid. Added a separate method to get a
+ classes methodTable during destruction as it's not possible to
+ validate the structure at that point. This separation might
+ also make it possible to improve the performance of methodTable
+ access more generally in future.
+
+ * heap/MarkedBlock.cpp:
+ (JSC::MarkedBlock::callDestructor):
+ * runtime/JSCell.h:
+ (JSCell):
+ * runtime/JSCellInlines.h:
+ (JSC::JSCell::methodTableForDestruction):
+ (JSC):
+ (JSC::JSCell::methodTable):
+
+2013-01-29 Filip Pizlo <fpizlo@apple.com>
+
+ offlineasm BaseIndex handling is broken on ARM due to MIPS changes
+ https://bugs.webkit.org/show_bug.cgi?id=108261
+
+ Reviewed by Oliver Hunt.
+
+ Backends shouldn't override each other's methods. That's not cool.
+
+ * offlineasm/mips.rb:
+
+2013-01-29 Filip Pizlo <fpizlo@apple.com>
+
+ cloop.rb shouldn't use a method called 'dump' for code generation
+ https://bugs.webkit.org/show_bug.cgi?id=108251
+
+ Reviewed by Mark Hahnenberg.
+
+ Revert http://trac.webkit.org/changeset/141178 and rename 'dump' to 'clDump'.
+
+ Also made trivial build fixes for !ENABLE(JIT).
+
+ * offlineasm/cloop.rb:
+ * runtime/Executable.h:
+ (ExecutableBase):
+ (JSC::ExecutableBase::intrinsicFor):
+ * runtime/JSGlobalData.h:
+
+2013-01-29 Geoffrey Garen <ggaren@apple.com>
+
+ Removed GGC because it has been disabled for a long time
+ https://bugs.webkit.org/show_bug.cgi?id=108245
+
+ Reviewed by Filip Pizlo.
+
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * dfg/DFGRepatch.cpp:
+ (JSC::DFG::emitPutReplaceStub):
+ (JSC::DFG::emitPutTransitionStub):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::writeBarrier):
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * heap/CardSet.h: Removed.
+ * heap/Heap.cpp:
+ (JSC::Heap::markRoots):
+ (JSC::Heap::collect):
+ * heap/Heap.h:
+ (Heap):
+ (JSC::Heap::shouldCollect):
+ (JSC::Heap::isWriteBarrierEnabled):
+ (JSC):
+ (JSC::Heap::writeBarrier):
+ * heap/MarkedBlock.h:
+ (MarkedBlock):
+ (JSC):
+ * heap/MarkedSpace.cpp:
+ (JSC):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emitWriteBarrier):
+
+2013-01-29 Filip Pizlo <fpizlo@apple.com>
+
+ Remove redundant AST dump method from cloop.rb, since they are already defined in ast.rb
+ https://bugs.webkit.org/show_bug.cgi?id=108247
+
+ Reviewed by Oliver Hunt.
+
+ Makes offlineasm dumping easier to read and less likely to cause assertion failures.
+ Also fixes the strange situation where cloop.rb and ast.rb both defined dump methods,
+ but cloop.rb was winning.
+
+ * offlineasm/cloop.rb:
+
+2013-01-29 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: JSObjCClassInfo creates reference cycle with JSContext
+ https://bugs.webkit.org/show_bug.cgi?id=107839
+
+ Reviewed by Oliver Hunt.
+
+ JSContext has a JSWrapperMap, which has an NSMutableDictionary m_classMap, which has values that
+ are JSObjCClassInfo objects, which have strong references to two JSValue *'s, m_prototype and
+ m_constructor, which in turn have strong references to the JSContext, creating a reference cycle.
+ We should make m_prototype and m_constructor Weak<JSObject>. This gets rid of the strong reference
+ to the JSContext and also prevents clients from accidentally creating reference cycles by assigning
+ to the prototype of the constructor. If Weak<JSObject> fields are ever garbage collected, we will
+ reallocate them.
+
+ * API/JSContext.mm:
+ (-[JSContext wrapperMap]):
+ * API/JSContextInternal.h:
+ * API/JSWrapperMap.mm:
+ (-[JSObjCClassInfo initWithContext:forClass:superClassInfo:]):
+ (-[JSObjCClassInfo dealloc]):
+ (-[JSObjCClassInfo allocateConstructorAndPrototypeWithSuperClassInfo:]):
+ (-[JSObjCClassInfo allocateConstructorAndPrototype]):
+ (-[JSObjCClassInfo wrapperForObject:]):
+ (-[JSObjCClassInfo constructor]):
+
+2013-01-29 Oliver Hunt <oliver@apple.com>
+
+ REGRESSION (r140594): RELEASE_ASSERT_NOT_REACHED in JSC::Interpreter::execute
+ https://bugs.webkit.org/show_bug.cgi?id=108097
+
+ Reviewed by Geoffrey Garen.
+
+ LiteralParser was accepting a bogus 'var a.b = c' statement
+
+ * runtime/LiteralParser.cpp:
+ (JSC::::tryJSONPParse):
+
+2013-01-29 Oliver Hunt <oliver@apple.com>
+
+ Force debug builds to do bounds checks on contiguous property storage
+ https://bugs.webkit.org/show_bug.cgi?id=108212
+
+ Reviewed by Mark Hahnenberg.
+
+ Add a ContiguousData type that we use to represent contiguous property
+ storage. In release builds it is simply a pointer to the correct type,
+ but in debug builds it also carries the data length and performs bounds
+ checks. This means we don't have to add as many manual bounds assertions
+ when performing operations over contiguous data.
+
+ * dfg/DFGOperations.cpp:
+ * runtime/ArrayStorage.h:
+ (ArrayStorage):
+ (JSC::ArrayStorage::vector):
+ * runtime/Butterfly.h:
+ (JSC::ContiguousData::ContiguousData):
+ (ContiguousData):
+ (JSC::ContiguousData::operator[]):
+ (JSC::ContiguousData::data):
+ (JSC::ContiguousData::length):
+ (JSC):
+ (JSC::Butterfly::contiguousInt32):
+ (Butterfly):
+ (JSC::Butterfly::contiguousDouble):
+ (JSC::Butterfly::contiguous):
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::sortNumericVector):
+ (ContiguousTypeAccessor):
+ (JSC::ContiguousTypeAccessor::getAsValue):
+ (JSC::ContiguousTypeAccessor::setWithValue):
+ (JSC::ContiguousTypeAccessor::replaceDataReference):
+ (JSC):
+ (JSC::JSArray::sortCompactedVector):
+ (JSC::JSArray::sort):
+ (JSC::JSArray::fillArgList):
+ (JSC::JSArray::copyToArguments):
+ * runtime/JSArray.h:
+ (JSArray):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::copyButterfly):
+ (JSC::JSObject::visitButterfly):
+ (JSC::JSObject::createInitialInt32):
+ (JSC::JSObject::createInitialDouble):
+ (JSC::JSObject::createInitialContiguous):
+ (JSC::JSObject::convertUndecidedToInt32):
+ (JSC::JSObject::convertUndecidedToDouble):
+ (JSC::JSObject::convertUndecidedToContiguous):
+ (JSC::JSObject::convertInt32ToDouble):
+ (JSC::JSObject::convertInt32ToContiguous):
+ (JSC::JSObject::genericConvertDoubleToContiguous):
+ (JSC::JSObject::convertDoubleToContiguous):
+ (JSC::JSObject::rageConvertDoubleToContiguous):
+ (JSC::JSObject::ensureInt32Slow):
+ (JSC::JSObject::ensureDoubleSlow):
+ (JSC::JSObject::ensureContiguousSlow):
+ (JSC::JSObject::rageEnsureContiguousSlow):
+ (JSC::JSObject::ensureLengthSlow):
+ * runtime/JSObject.h:
+ (JSC::JSObject::ensureInt32):
+ (JSC::JSObject::ensureDouble):
+ (JSC::JSObject::ensureContiguous):
+ (JSC::JSObject::rageEnsureContiguous):
+ (JSObject):
+ (JSC::JSObject::indexingData):
+ (JSC::JSObject::currentIndexingData):
+
+2013-01-29 Brent Fulgham <bfulgham@webkit.org>
+
+ [Windows, WinCairo] Unreviewed build fix after r141050
+
+ * JavaScriptCore.vcxproj/JavaScriptCoreExports.def: Update symbols
+ to match JavaScriptCore.vcproj version.
+
+2013-01-29 Allan Sandfeld Jensen <allan.jensen@digia.com>
+
+ [Qt] Implement GCActivityCallback
+ https://bugs.webkit.org/show_bug.cgi?id=103998
+
+ Reviewed by Simon Hausmann.
+
+ Implements the activity triggered garbage collector.
+
+ * runtime/GCActivityCallback.cpp:
+ (JSC::DefaultGCActivityCallback::DefaultGCActivityCallback):
+ (JSC::DefaultGCActivityCallback::scheduleTimer):
+ (JSC::DefaultGCActivityCallback::cancelTimer):
+ * runtime/GCActivityCallback.h:
+ (GCActivityCallback):
+ (DefaultGCActivityCallback):
+
+2013-01-29 Mikhail Pozdnyakov <mikhail.pozdnyakov@intel.com>
+
+ Compilation warning in JSC
+ https://bugs.webkit.org/show_bug.cgi?id=108178
+
+ Reviewed by Kentaro Hara.
+
+ Fixed 'comparison between signed and unsigned integer' warning in JSC::Structure constructor.
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::Structure):
+
+2013-01-29 Jocelyn Turcotte <jocelyn.turcotte@digia.com>
+
+ [Qt] Fix the JSC build on Mac
+
+ Unreviewed, build fix.
+
+ * heap/HeapTimer.h:
+ Qt on Mac has USE(CF) true, and should use the CF HeapTimer in that case.
+
+2013-01-29 Allan Sandfeld Jensen <allan.jensen@digia.com>
+
+ [Qt] Implement IncrementalSweeper and HeapTimer
+ https://bugs.webkit.org/show_bug.cgi?id=103996
+
+ Reviewed by Simon Hausmann.
+
+ Implements the incremental sweeping garbage collection for the Qt platform.
+
+ * heap/HeapTimer.cpp:
+ (JSC::HeapTimer::HeapTimer):
+ (JSC::HeapTimer::~HeapTimer):
+ (JSC::HeapTimer::timerEvent):
+ (JSC::HeapTimer::synchronize):
+ (JSC::HeapTimer::invalidate):
+ (JSC::HeapTimer::didStartVMShutdown):
+ * heap/HeapTimer.h:
+ (HeapTimer):
+ * heap/IncrementalSweeper.cpp:
+ (JSC::IncrementalSweeper::IncrementalSweeper):
+ (JSC::IncrementalSweeper::scheduleTimer):
+ * heap/IncrementalSweeper.h:
+ (IncrementalSweeper):
+
+2013-01-28 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should not use a graph that is a vector, Nodes shouldn't move after allocation, and we should always refer to nodes by Node*
+ https://bugs.webkit.org/show_bug.cgi?id=106868
+
+ Reviewed by Oliver Hunt.
+
+ This adds a pool allocator for Nodes, and uses that instead of a Vector. Changes all
+ uses of Node& and NodeIndex to be simply Node*. Nodes no longer have an index except
+ for debugging (Node::index(), which is not guaranteed to be O(1)).
+
+ 1% speed-up on SunSpider, presumably because this improves compile times.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * bytecode/DataFormat.h:
+ (JSC::dataFormatToString):
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::initialize):
+ (JSC::DFG::AbstractState::booleanResult):
+ (JSC::DFG::AbstractState::execute):
+ (JSC::DFG::AbstractState::mergeStateAtTail):
+ (JSC::DFG::AbstractState::mergeToSuccessors):
+ (JSC::DFG::AbstractState::mergeVariableBetweenBlocks):
+ (JSC::DFG::AbstractState::dump):
+ * dfg/DFGAbstractState.h:
+ (DFG):
+ (JSC::DFG::AbstractState::forNode):
+ (AbstractState):
+ (JSC::DFG::AbstractState::speculateInt32Unary):
+ (JSC::DFG::AbstractState::speculateNumberUnary):
+ (JSC::DFG::AbstractState::speculateBooleanUnary):
+ (JSC::DFG::AbstractState::speculateInt32Binary):
+ (JSC::DFG::AbstractState::speculateNumberBinary):
+ (JSC::DFG::AbstractState::trySetConstant):
+ * dfg/DFGAbstractValue.h:
+ (AbstractValue):
+ * dfg/DFGAdjacencyList.h:
+ (JSC::DFG::AdjacencyList::AdjacencyList):
+ (JSC::DFG::AdjacencyList::initialize):
+ * dfg/DFGAllocator.h: Added.
+ (DFG):
+ (Allocator):
+ (JSC::DFG::Allocator::Region::size):
+ (JSC::DFG::Allocator::Region::headerSize):
+ (JSC::DFG::Allocator::Region::numberOfThingsPerRegion):
+ (JSC::DFG::Allocator::Region::data):
+ (JSC::DFG::Allocator::Region::isInThisRegion):
+ (JSC::DFG::Allocator::Region::regionFor):
+ (Region):
+ (JSC::DFG::::Allocator):
+ (JSC::DFG::::~Allocator):
+ (JSC::DFG::::allocate):
+ (JSC::DFG::::free):
+ (JSC::DFG::::freeAll):
+ (JSC::DFG::::reset):
+ (JSC::DFG::::indexOf):
+ (JSC::DFG::::allocatorOf):
+ (JSC::DFG::::bumpAllocate):
+ (JSC::DFG::::freeListAllocate):
+ (JSC::DFG::::allocateSlow):
+ (JSC::DFG::::freeRegionsStartingAt):
+ (JSC::DFG::::startBumpingIn):
+ * dfg/DFGArgumentsSimplificationPhase.cpp:
+ (JSC::DFG::ArgumentsSimplificationPhase::run):
+ (JSC::DFG::ArgumentsSimplificationPhase::observeBadArgumentsUse):
+ (JSC::DFG::ArgumentsSimplificationPhase::observeBadArgumentsUses):
+ (JSC::DFG::ArgumentsSimplificationPhase::observeProperArgumentsUse):
+ (JSC::DFG::ArgumentsSimplificationPhase::isOKToOptimize):
+ (JSC::DFG::ArgumentsSimplificationPhase::removeArgumentsReferencingPhantomChild):
+ * dfg/DFGArrayMode.cpp:
+ (JSC::DFG::ArrayMode::originalArrayStructure):
+ (JSC::DFG::ArrayMode::alreadyChecked):
+ * dfg/DFGArrayMode.h:
+ (ArrayMode):
+ * dfg/DFGArrayifySlowPathGenerator.h:
+ (JSC::DFG::ArrayifySlowPathGenerator::ArrayifySlowPathGenerator):
+ * dfg/DFGBasicBlock.h:
+ (JSC::DFG::BasicBlock::node):
+ (JSC::DFG::BasicBlock::isInPhis):
+ (JSC::DFG::BasicBlock::isInBlock):
+ (BasicBlock):
+ * dfg/DFGBasicBlockInlines.h:
+ (DFG):
+ * dfg/DFGByteCodeParser.cpp:
+ (ByteCodeParser):
+ (JSC::DFG::ByteCodeParser::getDirect):
+ (JSC::DFG::ByteCodeParser::get):
+ (JSC::DFG::ByteCodeParser::setDirect):
+ (JSC::DFG::ByteCodeParser::set):
+ (JSC::DFG::ByteCodeParser::setPair):
+ (JSC::DFG::ByteCodeParser::injectLazyOperandSpeculation):
+ (JSC::DFG::ByteCodeParser::getLocal):
+ (JSC::DFG::ByteCodeParser::setLocal):
+ (JSC::DFG::ByteCodeParser::getArgument):
+ (JSC::DFG::ByteCodeParser::setArgument):
+ (JSC::DFG::ByteCodeParser::flushDirect):
+ (JSC::DFG::ByteCodeParser::getToInt32):
+ (JSC::DFG::ByteCodeParser::toInt32):
+ (JSC::DFG::ByteCodeParser::getJSConstantForValue):
+ (JSC::DFG::ByteCodeParser::getJSConstant):
+ (JSC::DFG::ByteCodeParser::getCallee):
+ (JSC::DFG::ByteCodeParser::getThis):
+ (JSC::DFG::ByteCodeParser::setThis):
+ (JSC::DFG::ByteCodeParser::isJSConstant):
+ (JSC::DFG::ByteCodeParser::isInt32Constant):
+ (JSC::DFG::ByteCodeParser::valueOfJSConstant):
+ (JSC::DFG::ByteCodeParser::valueOfInt32Constant):
+ (JSC::DFG::ByteCodeParser::constantUndefined):
+ (JSC::DFG::ByteCodeParser::constantNull):
+ (JSC::DFG::ByteCodeParser::one):
+ (JSC::DFG::ByteCodeParser::constantNaN):
+ (JSC::DFG::ByteCodeParser::cellConstant):
+ (JSC::DFG::ByteCodeParser::addToGraph):
+ (JSC::DFG::ByteCodeParser::insertPhiNode):
+ (JSC::DFG::ByteCodeParser::addVarArgChild):
+ (JSC::DFG::ByteCodeParser::addCall):
+ (JSC::DFG::ByteCodeParser::addStructureTransitionCheck):
+ (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
+ (JSC::DFG::ByteCodeParser::getPrediction):
+ (JSC::DFG::ByteCodeParser::getArrayModeAndEmitChecks):
+ (JSC::DFG::ByteCodeParser::makeSafe):
+ (JSC::DFG::ByteCodeParser::makeDivSafe):
+ (JSC::DFG::ByteCodeParser::ConstantRecord::ConstantRecord):
+ (ConstantRecord):
+ (JSC::DFG::ByteCodeParser::PhiStackEntry::PhiStackEntry):
+ (PhiStackEntry):
+ (JSC::DFG::ByteCodeParser::handleCall):
+ (JSC::DFG::ByteCodeParser::emitFunctionChecks):
+ (JSC::DFG::ByteCodeParser::handleInlining):
+ (JSC::DFG::ByteCodeParser::setIntrinsicResult):
+ (JSC::DFG::ByteCodeParser::handleMinMax):
+ (JSC::DFG::ByteCodeParser::handleIntrinsic):
+ (JSC::DFG::ByteCodeParser::handleGetByOffset):
+ (JSC::DFG::ByteCodeParser::handleGetById):
+ (JSC::DFG::ByteCodeParser::getScope):
+ (JSC::DFG::ByteCodeParser::parseResolveOperations):
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ (JSC::DFG::ByteCodeParser::processPhiStack):
+ (JSC::DFG::ByteCodeParser::linkBlock):
+ (JSC::DFG::ByteCodeParser::parseCodeBlock):
+ (JSC::DFG::ByteCodeParser::parse):
+ * dfg/DFGCFAPhase.cpp:
+ (JSC::DFG::CFAPhase::performBlockCFA):
+ * dfg/DFGCFGSimplificationPhase.cpp:
+ (JSC::DFG::CFGSimplificationPhase::run):
+ (JSC::DFG::CFGSimplificationPhase::keepOperandAlive):
+ (JSC::DFG::CFGSimplificationPhase::fixPossibleGetLocal):
+ (JSC::DFG::CFGSimplificationPhase::fixPhis):
+ (JSC::DFG::CFGSimplificationPhase::removePotentiallyDeadPhiReference):
+ (JSC::DFG::CFGSimplificationPhase::OperandSubstitution::OperandSubstitution):
+ (JSC::DFG::CFGSimplificationPhase::OperandSubstitution::dump):
+ (OperandSubstitution):
+ (JSC::DFG::CFGSimplificationPhase::skipGetLocal):
+ (JSC::DFG::CFGSimplificationPhase::recordNewTarget):
+ (JSC::DFG::CFGSimplificationPhase::fixTailOperand):
+ (JSC::DFG::CFGSimplificationPhase::mergeBlocks):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::canonicalize):
+ (JSC::DFG::CSEPhase::endIndexForPureCSE):
+ (JSC::DFG::CSEPhase::pureCSE):
+ (JSC::DFG::CSEPhase::constantCSE):
+ (JSC::DFG::CSEPhase::weakConstantCSE):
+ (JSC::DFG::CSEPhase::getCalleeLoadElimination):
+ (JSC::DFG::CSEPhase::getArrayLengthElimination):
+ (JSC::DFG::CSEPhase::globalVarLoadElimination):
+ (JSC::DFG::CSEPhase::scopedVarLoadElimination):
+ (JSC::DFG::CSEPhase::globalVarWatchpointElimination):
+ (JSC::DFG::CSEPhase::globalVarStoreElimination):
+ (JSC::DFG::CSEPhase::scopedVarStoreElimination):
+ (JSC::DFG::CSEPhase::getByValLoadElimination):
+ (JSC::DFG::CSEPhase::checkFunctionElimination):
+ (JSC::DFG::CSEPhase::checkExecutableElimination):
+ (JSC::DFG::CSEPhase::checkStructureElimination):
+ (JSC::DFG::CSEPhase::structureTransitionWatchpointElimination):
+ (JSC::DFG::CSEPhase::putStructureStoreElimination):
+ (JSC::DFG::CSEPhase::getByOffsetLoadElimination):
+ (JSC::DFG::CSEPhase::putByOffsetStoreElimination):
+ (JSC::DFG::CSEPhase::getPropertyStorageLoadElimination):
+ (JSC::DFG::CSEPhase::checkArrayElimination):
+ (JSC::DFG::CSEPhase::getIndexedPropertyStorageLoadElimination):
+ (JSC::DFG::CSEPhase::getMyScopeLoadElimination):
+ (JSC::DFG::CSEPhase::getLocalLoadElimination):
+ (JSC::DFG::CSEPhase::setLocalStoreElimination):
+ (JSC::DFG::CSEPhase::performSubstitution):
+ (JSC::DFG::CSEPhase::eliminateIrrelevantPhantomChildren):
+ (JSC::DFG::CSEPhase::setReplacement):
+ (JSC::DFG::CSEPhase::eliminate):
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ (JSC::DFG::CSEPhase::performBlockCSE):
+ (CSEPhase):
+ * dfg/DFGCommon.cpp: Added.
+ (DFG):
+ (JSC::DFG::NodePointerTraits::dump):
+ * dfg/DFGCommon.h:
+ (DFG):
+ (JSC::DFG::NodePointerTraits::defaultValue):
+ (NodePointerTraits):
+ (JSC::DFG::verboseCompilationEnabled):
+ (JSC::DFG::shouldDumpGraphAtEachPhase):
+ (JSC::DFG::validationEnabled):
+ * dfg/DFGConstantFoldingPhase.cpp:
+ (JSC::DFG::ConstantFoldingPhase::foldConstants):
+ (JSC::DFG::ConstantFoldingPhase::isCapturedAtOrAfter):
+ (JSC::DFG::ConstantFoldingPhase::addStructureTransitionCheck):
+ (JSC::DFG::ConstantFoldingPhase::paintUnreachableCode):
+ * dfg/DFGDisassembler.cpp:
+ (JSC::DFG::Disassembler::Disassembler):
+ (JSC::DFG::Disassembler::createDumpList):
+ (JSC::DFG::Disassembler::dumpDisassembly):
+ * dfg/DFGDisassembler.h:
+ (JSC::DFG::Disassembler::setForNode):
+ (Disassembler):
+ * dfg/DFGDriver.cpp:
+ (JSC::DFG::compile):
+ * dfg/DFGEdge.cpp: Added.
+ (DFG):
+ (JSC::DFG::Edge::dump):
+ * dfg/DFGEdge.h:
+ (JSC::DFG::Edge::Edge):
+ (JSC::DFG::Edge::node):
+ (JSC::DFG::Edge::operator*):
+ (JSC::DFG::Edge::operator->):
+ (Edge):
+ (JSC::DFG::Edge::setNode):
+ (JSC::DFG::Edge::useKind):
+ (JSC::DFG::Edge::setUseKind):
+ (JSC::DFG::Edge::isSet):
+ (JSC::DFG::Edge::shift):
+ (JSC::DFG::Edge::makeWord):
+ (JSC::DFG::operator==):
+ (JSC::DFG::operator!=):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupBlock):
+ (JSC::DFG::FixupPhase::fixupNode):
+ (JSC::DFG::FixupPhase::checkArray):
+ (JSC::DFG::FixupPhase::blessArrayOperation):
+ (JSC::DFG::FixupPhase::fixIntEdge):
+ (JSC::DFG::FixupPhase::fixDoubleEdge):
+ (JSC::DFG::FixupPhase::injectInt32ToDoubleNode):
+ (FixupPhase):
+ * dfg/DFGGenerationInfo.h:
+ (JSC::DFG::GenerationInfo::GenerationInfo):
+ (JSC::DFG::GenerationInfo::initConstant):
+ (JSC::DFG::GenerationInfo::initInteger):
+ (JSC::DFG::GenerationInfo::initJSValue):
+ (JSC::DFG::GenerationInfo::initCell):
+ (JSC::DFG::GenerationInfo::initBoolean):
+ (JSC::DFG::GenerationInfo::initDouble):
+ (JSC::DFG::GenerationInfo::initStorage):
+ (GenerationInfo):
+ (JSC::DFG::GenerationInfo::node):
+ (JSC::DFG::GenerationInfo::noticeOSRBirth):
+ (JSC::DFG::GenerationInfo::use):
+ (JSC::DFG::GenerationInfo::appendFill):
+ (JSC::DFG::GenerationInfo::appendSpill):
+ * dfg/DFGGraph.cpp:
+ (JSC::DFG::Graph::Graph):
+ (JSC::DFG::Graph::~Graph):
+ (DFG):
+ (JSC::DFG::Graph::dumpCodeOrigin):
+ (JSC::DFG::Graph::amountOfNodeWhiteSpace):
+ (JSC::DFG::Graph::printNodeWhiteSpace):
+ (JSC::DFG::Graph::dump):
+ (JSC::DFG::Graph::dumpBlockHeader):
+ (JSC::DFG::Graph::refChildren):
+ (JSC::DFG::Graph::derefChildren):
+ (JSC::DFG::Graph::predictArgumentTypes):
+ (JSC::DFG::Graph::collectGarbage):
+ (JSC::DFG::Graph::determineReachability):
+ (JSC::DFG::Graph::resetExitStates):
+ * dfg/DFGGraph.h:
+ (Graph):
+ (JSC::DFG::Graph::ref):
+ (JSC::DFG::Graph::deref):
+ (JSC::DFG::Graph::changeChild):
+ (JSC::DFG::Graph::compareAndSwap):
+ (JSC::DFG::Graph::clearAndDerefChild):
+ (JSC::DFG::Graph::clearAndDerefChild1):
+ (JSC::DFG::Graph::clearAndDerefChild2):
+ (JSC::DFG::Graph::clearAndDerefChild3):
+ (JSC::DFG::Graph::convertToConstant):
+ (JSC::DFG::Graph::getJSConstantSpeculation):
+ (JSC::DFG::Graph::addSpeculationMode):
+ (JSC::DFG::Graph::valueAddSpeculationMode):
+ (JSC::DFG::Graph::arithAddSpeculationMode):
+ (JSC::DFG::Graph::addShouldSpeculateInteger):
+ (JSC::DFG::Graph::mulShouldSpeculateInteger):
+ (JSC::DFG::Graph::negateShouldSpeculateInteger):
+ (JSC::DFG::Graph::isConstant):
+ (JSC::DFG::Graph::isJSConstant):
+ (JSC::DFG::Graph::isInt32Constant):
+ (JSC::DFG::Graph::isDoubleConstant):
+ (JSC::DFG::Graph::isNumberConstant):
+ (JSC::DFG::Graph::isBooleanConstant):
+ (JSC::DFG::Graph::isCellConstant):
+ (JSC::DFG::Graph::isFunctionConstant):
+ (JSC::DFG::Graph::isInternalFunctionConstant):
+ (JSC::DFG::Graph::valueOfJSConstant):
+ (JSC::DFG::Graph::valueOfInt32Constant):
+ (JSC::DFG::Graph::valueOfNumberConstant):
+ (JSC::DFG::Graph::valueOfBooleanConstant):
+ (JSC::DFG::Graph::valueOfFunctionConstant):
+ (JSC::DFG::Graph::valueProfileFor):
+ (JSC::DFG::Graph::methodOfGettingAValueProfileFor):
+ (JSC::DFG::Graph::numSuccessors):
+ (JSC::DFG::Graph::successor):
+ (JSC::DFG::Graph::successorForCondition):
+ (JSC::DFG::Graph::isPredictedNumerical):
+ (JSC::DFG::Graph::byValIsPure):
+ (JSC::DFG::Graph::clobbersWorld):
+ (JSC::DFG::Graph::varArgNumChildren):
+ (JSC::DFG::Graph::numChildren):
+ (JSC::DFG::Graph::varArgChild):
+ (JSC::DFG::Graph::child):
+ (JSC::DFG::Graph::voteNode):
+ (JSC::DFG::Graph::voteChildren):
+ (JSC::DFG::Graph::substitute):
+ (JSC::DFG::Graph::substituteGetLocal):
+ (JSC::DFG::Graph::addImmediateShouldSpeculateInteger):
+ (JSC::DFG::Graph::mulImmediateShouldSpeculateInteger):
+ * dfg/DFGInsertionSet.h:
+ (JSC::DFG::Insertion::Insertion):
+ (JSC::DFG::Insertion::element):
+ (Insertion):
+ (JSC::DFG::InsertionSet::insert):
+ (InsertionSet):
+ * dfg/DFGJITCompiler.cpp:
+ * dfg/DFGJITCompiler.h:
+ (JSC::DFG::JITCompiler::setForNode):
+ (JSC::DFG::JITCompiler::addressOfDoubleConstant):
+ (JSC::DFG::JITCompiler::noticeOSREntry):
+ * dfg/DFGLongLivedState.cpp: Added.
+ (DFG):
+ (JSC::DFG::LongLivedState::LongLivedState):
+ (JSC::DFG::LongLivedState::~LongLivedState):
+ (JSC::DFG::LongLivedState::shrinkToFit):
+ * dfg/DFGLongLivedState.h: Added.
+ (DFG):
+ (LongLivedState):
+ * dfg/DFGMinifiedID.h:
+ (JSC::DFG::MinifiedID::MinifiedID):
+ (JSC::DFG::MinifiedID::node):
+ * dfg/DFGMinifiedNode.cpp:
+ (JSC::DFG::MinifiedNode::fromNode):
+ * dfg/DFGMinifiedNode.h:
+ (MinifiedNode):
+ * dfg/DFGNode.cpp: Added.
+ (DFG):
+ (JSC::DFG::Node::index):
+ (WTF):
+ (WTF::printInternal):
+ * dfg/DFGNode.h:
+ (DFG):
+ (JSC::DFG::Node::Node):
+ (Node):
+ (JSC::DFG::Node::convertToGetByOffset):
+ (JSC::DFG::Node::convertToPutByOffset):
+ (JSC::DFG::Node::ref):
+ (JSC::DFG::Node::shouldSpeculateInteger):
+ (JSC::DFG::Node::shouldSpeculateIntegerForArithmetic):
+ (JSC::DFG::Node::shouldSpeculateIntegerExpectingDefined):
+ (JSC::DFG::Node::shouldSpeculateDoubleForArithmetic):
+ (JSC::DFG::Node::shouldSpeculateNumber):
+ (JSC::DFG::Node::shouldSpeculateNumberExpectingDefined):
+ (JSC::DFG::Node::shouldSpeculateFinalObject):
+ (JSC::DFG::Node::shouldSpeculateArray):
+ (JSC::DFG::Node::dumpChildren):
+ (WTF):
+ * dfg/DFGNodeAllocator.h: Added.
+ (DFG):
+ (operator new ):
+ * dfg/DFGOSRExit.cpp:
+ (JSC::DFG::OSRExit::OSRExit):
+ * dfg/DFGOSRExit.h:
+ (OSRExit):
+ (SpeculationFailureDebugInfo):
+ * dfg/DFGOSRExitCompiler.cpp:
+ * dfg/DFGOSRExitCompiler32_64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGOSRExitCompiler64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGPhase.cpp:
+ (DFG):
+ (JSC::DFG::Phase::beginPhase):
+ (JSC::DFG::Phase::endPhase):
+ * dfg/DFGPhase.h:
+ (Phase):
+ (JSC::DFG::runAndLog):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::setPrediction):
+ (JSC::DFG::PredictionPropagationPhase::mergePrediction):
+ (JSC::DFG::PredictionPropagationPhase::isNotNegZero):
+ (JSC::DFG::PredictionPropagationPhase::isNotZero):
+ (JSC::DFG::PredictionPropagationPhase::isWithinPowerOfTwoForConstant):
+ (JSC::DFG::PredictionPropagationPhase::isWithinPowerOfTwoNonRecursive):
+ (JSC::DFG::PredictionPropagationPhase::isWithinPowerOfTwo):
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ (JSC::DFG::PredictionPropagationPhase::mergeDefaultFlags):
+ (JSC::DFG::PredictionPropagationPhase::propagateForward):
+ (JSC::DFG::PredictionPropagationPhase::propagateBackward):
+ (JSC::DFG::PredictionPropagationPhase::doDoubleVoting):
+ (PredictionPropagationPhase):
+ (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
+ * dfg/DFGScoreBoard.h:
+ (JSC::DFG::ScoreBoard::ScoreBoard):
+ (JSC::DFG::ScoreBoard::use):
+ (JSC::DFG::ScoreBoard::useIfHasResult):
+ (ScoreBoard):
+ * dfg/DFGSilentRegisterSavePlan.h:
+ (JSC::DFG::SilentRegisterSavePlan::SilentRegisterSavePlan):
+ (JSC::DFG::SilentRegisterSavePlan::node):
+ (SilentRegisterSavePlan):
+ * dfg/DFGSlowPathGenerator.h:
+ (JSC::DFG::SlowPathGenerator::SlowPathGenerator):
+ (JSC::DFG::SlowPathGenerator::generate):
+ (SlowPathGenerator):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
+ (JSC::DFG::SpeculativeJIT::speculationCheck):
+ (JSC::DFG::SpeculativeJIT::speculationWatchpoint):
+ (JSC::DFG::SpeculativeJIT::convertLastOSRExitToForward):
+ (JSC::DFG::SpeculativeJIT::forwardSpeculationCheck):
+ (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
+ (JSC::DFG::SpeculativeJIT::silentSavePlanForGPR):
+ (JSC::DFG::SpeculativeJIT::silentSavePlanForFPR):
+ (JSC::DFG::SpeculativeJIT::silentSpill):
+ (JSC::DFG::SpeculativeJIT::silentFill):
+ (JSC::DFG::SpeculativeJIT::checkArray):
+ (JSC::DFG::SpeculativeJIT::arrayify):
+ (JSC::DFG::SpeculativeJIT::fillStorage):
+ (JSC::DFG::SpeculativeJIT::useChildren):
+ (JSC::DFG::SpeculativeJIT::isStrictInt32):
+ (JSC::DFG::SpeculativeJIT::isKnownInteger):
+ (JSC::DFG::SpeculativeJIT::isKnownNumeric):
+ (JSC::DFG::SpeculativeJIT::isKnownCell):
+ (JSC::DFG::SpeculativeJIT::isKnownNotCell):
+ (JSC::DFG::SpeculativeJIT::isKnownNotInteger):
+ (JSC::DFG::SpeculativeJIT::isKnownNotNumber):
+ (JSC::DFG::SpeculativeJIT::writeBarrier):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeCompare):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeStrictEq):
+ (JSC::DFG::GPRTemporary::GPRTemporary):
+ (JSC::DFG::FPRTemporary::FPRTemporary):
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleDoubleBranch):
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
+ (JSC::DFG::SpeculativeJIT::noticeOSRBirth):
+ (JSC::DFG::SpeculativeJIT::compileMovHint):
+ (JSC::DFG::SpeculativeJIT::compile):
+ (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
+ (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
+ (JSC::DFG::SpeculativeJIT::compileDoublePutByVal):
+ (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt):
+ (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
+ (JSC::DFG::SpeculativeJIT::checkGeneratedTypeForToInt32):
+ (JSC::DFG::SpeculativeJIT::compileValueToInt32):
+ (JSC::DFG::SpeculativeJIT::compileUInt32ToNumber):
+ (JSC::DFG::SpeculativeJIT::compileDoubleAsInt32):
+ (JSC::DFG::SpeculativeJIT::compileInt32ToDouble):
+ (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
+ (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
+ (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
+ (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
+ (JSC::DFG::SpeculativeJIT::compileInstanceOfForObject):
+ (JSC::DFG::SpeculativeJIT::compileInstanceOf):
+ (JSC::DFG::SpeculativeJIT::compileSoftModulo):
+ (JSC::DFG::SpeculativeJIT::compileAdd):
+ (JSC::DFG::SpeculativeJIT::compileArithSub):
+ (JSC::DFG::SpeculativeJIT::compileArithNegate):
+ (JSC::DFG::SpeculativeJIT::compileArithMul):
+ (JSC::DFG::SpeculativeJIT::compileIntegerArithDivForX86):
+ (JSC::DFG::SpeculativeJIT::compileArithMod):
+ (JSC::DFG::SpeculativeJIT::compare):
+ (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant):
+ (JSC::DFG::SpeculativeJIT::compileStrictEq):
+ (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
+ (JSC::DFG::SpeculativeJIT::compileGetByValOnArguments):
+ (JSC::DFG::SpeculativeJIT::compileGetArgumentsLength):
+ (JSC::DFG::SpeculativeJIT::compileGetArrayLength):
+ (JSC::DFG::SpeculativeJIT::compileNewFunctionNoCheck):
+ (JSC::DFG::SpeculativeJIT::compileNewFunctionExpression):
+ (JSC::DFG::SpeculativeJIT::compileRegExpExec):
+ (JSC::DFG::SpeculativeJIT::compileAllocatePropertyStorage):
+ (JSC::DFG::SpeculativeJIT::compileReallocatePropertyStorage):
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+ (JSC::DFG::SpeculativeJIT::canReuse):
+ (JSC::DFG::SpeculativeJIT::isFilled):
+ (JSC::DFG::SpeculativeJIT::isFilledDouble):
+ (JSC::DFG::SpeculativeJIT::use):
+ (JSC::DFG::SpeculativeJIT::isConstant):
+ (JSC::DFG::SpeculativeJIT::isJSConstant):
+ (JSC::DFG::SpeculativeJIT::isInt32Constant):
+ (JSC::DFG::SpeculativeJIT::isDoubleConstant):
+ (JSC::DFG::SpeculativeJIT::isNumberConstant):
+ (JSC::DFG::SpeculativeJIT::isBooleanConstant):
+ (JSC::DFG::SpeculativeJIT::isFunctionConstant):
+ (JSC::DFG::SpeculativeJIT::valueOfInt32Constant):
+ (JSC::DFG::SpeculativeJIT::valueOfNumberConstant):
+ (JSC::DFG::SpeculativeJIT::valueOfNumberConstantAsInt32):
+ (JSC::DFG::SpeculativeJIT::addressOfDoubleConstant):
+ (JSC::DFG::SpeculativeJIT::valueOfJSConstant):
+ (JSC::DFG::SpeculativeJIT::valueOfBooleanConstant):
+ (JSC::DFG::SpeculativeJIT::valueOfFunctionConstant):
+ (JSC::DFG::SpeculativeJIT::isNullConstant):
+ (JSC::DFG::SpeculativeJIT::valueOfJSConstantAsImm64):
+ (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch):
+ (JSC::DFG::SpeculativeJIT::integerResult):
+ (JSC::DFG::SpeculativeJIT::noResult):
+ (JSC::DFG::SpeculativeJIT::cellResult):
+ (JSC::DFG::SpeculativeJIT::booleanResult):
+ (JSC::DFG::SpeculativeJIT::jsValueResult):
+ (JSC::DFG::SpeculativeJIT::storageResult):
+ (JSC::DFG::SpeculativeJIT::doubleResult):
+ (JSC::DFG::SpeculativeJIT::initConstantInfo):
+ (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheck):
+ (JSC::DFG::SpeculativeJIT::isInteger):
+ (JSC::DFG::SpeculativeJIT::temporaryRegisterForPutByVal):
+ (JSC::DFG::SpeculativeJIT::emitAllocateBasicStorage):
+ (JSC::DFG::SpeculativeJIT::setNodeForOperand):
+ (JSC::DFG::IntegerOperand::IntegerOperand):
+ (JSC::DFG::IntegerOperand::node):
+ (JSC::DFG::IntegerOperand::gpr):
+ (JSC::DFG::IntegerOperand::use):
+ (IntegerOperand):
+ (JSC::DFG::DoubleOperand::DoubleOperand):
+ (JSC::DFG::DoubleOperand::node):
+ (JSC::DFG::DoubleOperand::fpr):
+ (JSC::DFG::DoubleOperand::use):
+ (DoubleOperand):
+ (JSC::DFG::JSValueOperand::JSValueOperand):
+ (JSC::DFG::JSValueOperand::node):
+ (JSC::DFG::JSValueOperand::gpr):
+ (JSC::DFG::JSValueOperand::fill):
+ (JSC::DFG::JSValueOperand::use):
+ (JSValueOperand):
+ (JSC::DFG::StorageOperand::StorageOperand):
+ (JSC::DFG::StorageOperand::node):
+ (JSC::DFG::StorageOperand::gpr):
+ (JSC::DFG::StorageOperand::use):
+ (StorageOperand):
+ (JSC::DFG::SpeculateIntegerOperand::SpeculateIntegerOperand):
+ (JSC::DFG::SpeculateIntegerOperand::node):
+ (JSC::DFG::SpeculateIntegerOperand::gpr):
+ (JSC::DFG::SpeculateIntegerOperand::use):
+ (SpeculateIntegerOperand):
+ (JSC::DFG::SpeculateStrictInt32Operand::SpeculateStrictInt32Operand):
+ (JSC::DFG::SpeculateStrictInt32Operand::node):
+ (JSC::DFG::SpeculateStrictInt32Operand::gpr):
+ (JSC::DFG::SpeculateStrictInt32Operand::use):
+ (SpeculateStrictInt32Operand):
+ (JSC::DFG::SpeculateDoubleOperand::SpeculateDoubleOperand):
+ (JSC::DFG::SpeculateDoubleOperand::node):
+ (JSC::DFG::SpeculateDoubleOperand::fpr):
+ (JSC::DFG::SpeculateDoubleOperand::use):
+ (SpeculateDoubleOperand):
+ (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
+ (JSC::DFG::SpeculateCellOperand::node):
+ (JSC::DFG::SpeculateCellOperand::gpr):
+ (JSC::DFG::SpeculateCellOperand::use):
+ (SpeculateCellOperand):
+ (JSC::DFG::SpeculateBooleanOperand::SpeculateBooleanOperand):
+ (JSC::DFG::SpeculateBooleanOperand::node):
+ (JSC::DFG::SpeculateBooleanOperand::gpr):
+ (JSC::DFG::SpeculateBooleanOperand::use):
+ (SpeculateBooleanOperand):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::fillInteger):
+ (JSC::DFG::SpeculativeJIT::fillDouble):
+ (JSC::DFG::SpeculativeJIT::fillJSValue):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToNumber):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeUInt32ToNumber):
+ (JSC::DFG::SpeculativeJIT::cachedPutById):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
+ (JSC::DFG::SpeculativeJIT::emitCall):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateInt):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntStrict):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
+ (JSC::DFG::SpeculativeJIT::compileObjectEquality):
+ (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
+ (JSC::DFG::SpeculativeJIT::compileIntegerCompare):
+ (JSC::DFG::SpeculativeJIT::compileDoubleCompare):
+ (JSC::DFG::SpeculativeJIT::compileValueAdd):
+ (JSC::DFG::SpeculativeJIT::compileNonStringCellOrOtherLogicalNot):
+ (JSC::DFG::SpeculativeJIT::compileLogicalNot):
+ (JSC::DFG::SpeculativeJIT::emitNonStringCellOrOtherBranch):
+ (JSC::DFG::SpeculativeJIT::emitBranch):
+ (JSC::DFG::SpeculativeJIT::compileContiguousPutByVal):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::fillInteger):
+ (JSC::DFG::SpeculativeJIT::fillDouble):
+ (JSC::DFG::SpeculativeJIT::fillJSValue):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToNumber):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeUInt32ToNumber):
+ (JSC::DFG::SpeculativeJIT::cachedPutById):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
+ (JSC::DFG::SpeculativeJIT::emitCall):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateInt):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntStrict):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
+ (JSC::DFG::SpeculativeJIT::compileObjectEquality):
+ (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
+ (JSC::DFG::SpeculativeJIT::compileIntegerCompare):
+ (JSC::DFG::SpeculativeJIT::compileDoubleCompare):
+ (JSC::DFG::SpeculativeJIT::compileValueAdd):
+ (JSC::DFG::SpeculativeJIT::compileNonStringCellOrOtherLogicalNot):
+ (JSC::DFG::SpeculativeJIT::compileLogicalNot):
+ (JSC::DFG::SpeculativeJIT::emitNonStringCellOrOtherBranch):
+ (JSC::DFG::SpeculativeJIT::emitBranch):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGStructureAbstractValue.h:
+ (StructureAbstractValue):
+ * dfg/DFGStructureCheckHoistingPhase.cpp:
+ (JSC::DFG::StructureCheckHoistingPhase::run):
+ * dfg/DFGValidate.cpp:
+ (DFG):
+ (Validate):
+ (JSC::DFG::Validate::validate):
+ (JSC::DFG::Validate::reportValidationContext):
+ * dfg/DFGValidate.h:
+ * dfg/DFGValueSource.cpp:
+ (JSC::DFG::ValueSource::dump):
+ * dfg/DFGValueSource.h:
+ (JSC::DFG::ValueSource::ValueSource):
+ * dfg/DFGVirtualRegisterAllocationPhase.cpp:
+ (JSC::DFG::VirtualRegisterAllocationPhase::run):
+ * runtime/FunctionExecutableDump.cpp: Added.
+ (JSC):
+ (JSC::FunctionExecutableDump::dump):
+ * runtime/FunctionExecutableDump.h: Added.
+ (JSC):
+ (FunctionExecutableDump):
+ (JSC::FunctionExecutableDump::FunctionExecutableDump):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSGlobalData.h:
+ (JSC):
+ (DFG):
+ (JSGlobalData):
+ * runtime/Options.h:
+ (JSC):
+
+2013-01-28 Laszlo Gombos <l.gombos@samsung.com>
+
+ Collapse testing for a list of PLATFORM() into OS() and USE() tests
+ https://bugs.webkit.org/show_bug.cgi?id=108018
+
+ Reviewed by Eric Seidel.
+
+ No functional change as "OS(DARWIN) && USE(CF)" equals to the
+ following platforms: MAC, WX, QT and CHROMIUM. CHROMIUM
+ is not using JavaScriptCore.
+
+ * runtime/DatePrototype.cpp:
+ (JSC):
+
+2013-01-28 Geoffrey Garen <ggaren@apple.com>
+
+ Static size inference for JavaScript objects
+ https://bugs.webkit.org/show_bug.cgi?id=108093
+
+ Reviewed by Phil Pizlo.
+
+ * API/JSObjectRef.cpp:
+ * JavaScriptCore.order:
+ * JavaScriptCore.xcodeproj/project.pbxproj: Pay the tax man.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dumpBytecode): op_new_object and op_create_this now
+ have an extra inferredInlineCapacity argument. This is the statically
+ inferred inline capacity, just from analyzing source text. op_new_object
+ also gets a pointer to an allocation profile. (For op_create_this, the
+ profile is in the construtor function.)
+
+ (JSC::CodeBlock::CodeBlock): Link op_new_object.
+
+ (JSC::CodeBlock::stronglyVisitStrongReferences): Mark our profiles.
+
+ * bytecode/CodeBlock.h:
+ (CodeBlock): Removed some dead code. Added object allocation profiles.
+
+ * bytecode/Instruction.h:
+ (JSC): New union type, since an instruction operand may point to an
+ object allocation profile now.
+
+ * bytecode/ObjectAllocationProfile.h: Added.
+ (JSC):
+ (ObjectAllocationProfile):
+ (JSC::ObjectAllocationProfile::offsetOfAllocator):
+ (JSC::ObjectAllocationProfile::offsetOfStructure):
+ (JSC::ObjectAllocationProfile::ObjectAllocationProfile):
+ (JSC::ObjectAllocationProfile::isNull):
+ (JSC::ObjectAllocationProfile::initialize):
+ (JSC::ObjectAllocationProfile::structure):
+ (JSC::ObjectAllocationProfile::inlineCapacity):
+ (JSC::ObjectAllocationProfile::clear):
+ (JSC::ObjectAllocationProfile::visitAggregate):
+ (JSC::ObjectAllocationProfile::possibleDefaultPropertyCount): New class
+ for tracking a prediction about object allocation: structure, inline
+ capacity, allocator to use.
+
+ * bytecode/Opcode.h:
+ (JSC):
+ (JSC::padOpcodeName): Updated instruction sizes.
+
+ * bytecode/UnlinkedCodeBlock.cpp:
+ (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
+ * bytecode/UnlinkedCodeBlock.h:
+ (JSC):
+ (JSC::UnlinkedCodeBlock::addObjectAllocationProfile):
+ (JSC::UnlinkedCodeBlock::numberOfObjectAllocationProfiles):
+ (UnlinkedCodeBlock): Unlinked support for allocation profiles.
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::generate): Kill all remaining analyses at the
+ end of codegen, since this is our last opportunity.
+
+ (JSC::BytecodeGenerator::BytecodeGenerator): Added a static property
+ analyzer to bytecode generation. It tracks initializing assignments and
+ makes a guess about how many will happen.
+
+ (JSC::BytecodeGenerator::newObjectAllocationProfile):
+ (JSC):
+ (JSC::BytecodeGenerator::emitProfiledOpcode):
+ (JSC::BytecodeGenerator::emitMove):
+ (JSC::BytecodeGenerator::emitResolve):
+ (JSC::BytecodeGenerator::emitResolveBase):
+ (JSC::BytecodeGenerator::emitResolveBaseForPut):
+ (JSC::BytecodeGenerator::emitResolveWithBaseForPut):
+ (JSC::BytecodeGenerator::emitResolveWithThis):
+ (JSC::BytecodeGenerator::emitGetById):
+ (JSC::BytecodeGenerator::emitPutById):
+ (JSC::BytecodeGenerator::emitDirectPutById):
+ (JSC::BytecodeGenerator::emitPutGetterSetter):
+ (JSC::BytecodeGenerator::emitGetArgumentByVal):
+ (JSC::BytecodeGenerator::emitGetByVal): Added hooks to the static property
+ analyzer, so it can observe allocations and stores.
+
+ (JSC::BytecodeGenerator::emitCreateThis): Factored this into a helper
+ function because it was a significant amount of logic, and I wanted to
+ add to it.
+
+ (JSC::BytecodeGenerator::emitNewObject):
+ (JSC::BytecodeGenerator::emitExpectedFunctionSnippet):
+ (JSC::BytecodeGenerator::emitCall):
+ (JSC::BytecodeGenerator::emitCallVarargs):
+ (JSC::BytecodeGenerator::emitConstruct): Added a hook to profiled opcodes
+ to track their stores, in case a store kills a profiled allocation. Since
+ profiled opcodes are basically the only interesting stores we do, this
+ is a convenient place to notice any store that might kill an allocation.
+
+ * bytecompiler/BytecodeGenerator.h:
+ (BytecodeGenerator): As above.
+
+ * bytecompiler/StaticPropertyAnalysis.h: Added.
+ (JSC):
+ (StaticPropertyAnalysis):
+ (JSC::StaticPropertyAnalysis::create):
+ (JSC::StaticPropertyAnalysis::addPropertyIndex):
+ (JSC::StaticPropertyAnalysis::record):
+ (JSC::StaticPropertyAnalysis::propertyIndexCount):
+ (JSC::StaticPropertyAnalysis::StaticPropertyAnalysis): Simple helper
+ class for tracking allocations and stores.
+
+ * bytecompiler/StaticPropertyAnalyzer.h: Added.
+ (StaticPropertyAnalyzer):
+ (JSC::StaticPropertyAnalyzer::StaticPropertyAnalyzer):
+ (JSC::StaticPropertyAnalyzer::createThis):
+ (JSC::StaticPropertyAnalyzer::newObject):
+ (JSC::StaticPropertyAnalyzer::putById):
+ (JSC::StaticPropertyAnalyzer::mov):
+ (JSC::StaticPropertyAnalyzer::kill): Helper class for observing allocations
+ and stores and making an inline capacity guess. The heuristics here are
+ intentionally minimal because we don't want this one class to try to
+ re-create something like a DFG or a runtime analysis. If we discover that
+ we need those kinds of analyses, we should just replace this class with
+ something else.
+
+ This class tracks multiple registers that alias the same object -- that
+ happens a lot, when moving locals into temporary registers -- but it
+ doesn't track control flow or multiple objects that alias the same register.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute): Updated for rename.
+
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseBlock): Updated for inline capacity and
+ allocation profile.
+
+ * dfg/DFGNode.h:
+ (JSC::DFG::Node::hasInlineCapacity):
+ (Node):
+ (JSC::DFG::Node::inlineCapacity):
+ (JSC::DFG::Node::hasFunction): Give the graph a good way to represent
+ inline capacity for an allocation.
+
+ * dfg/DFGNodeType.h:
+ (DFG): Updated for rename.
+
+ * dfg/DFGOperations.cpp: Updated for interface change.
+
+ * dfg/DFGOperations.h: We pass the inline capacity to the slow case as
+ an argument. This is the simplest way, since it's stored as a bytecode operand.
+
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate): Updated for rename.
+
+ * dfg/DFGRepatch.cpp:
+ (JSC::DFG::tryCacheGetByID): Fixed a horrible off-by-one-half bug that only
+ appears when doing an inline cached load for property number 64 on a 32-bit
+ system. In JSVALUE32_64 land, "offsetRelativeToPatchedStorage" is the
+ offset of the 64bit JSValue -- but we'll actually issue two loads, one for
+ the payload at that offset, and one for the tag at that offset + 4. We need
+ to ensure that both loads have a compact representation, or we'll corrupt
+ the instruction stream.
+
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::emitAllocateJSArray):
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::callOperation):
+ (JSC::DFG::SpeculativeJIT::emitAllocateBasicStorage):
+ (SpeculativeJIT):
+ (JSC::DFG::SpeculativeJIT::emitAllocateJSObject):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile): Lots of refactoring to support
+ passing an allocator to our allocation function, and/or passing a Structure
+ as a register instead of an immediate.
+
+ * heap/MarkedAllocator.h:
+ (DFG):
+ (MarkedAllocator):
+ (JSC::MarkedAllocator::offsetOfFreeListHead): Added an accessor to simplify
+ JIT code generation of allocation from an arbitrary allocator.
+
+ * jit/JIT.h:
+ (JSC):
+ * jit/JITInlines.h:
+ (JSC):
+ (JSC::JIT::emitAllocateJSObject):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_new_object):
+ (JSC::JIT::emitSlow_op_new_object):
+ (JSC::JIT::emit_op_create_this):
+ (JSC::JIT::emitSlow_op_create_this):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::emit_op_new_object):
+ (JSC::JIT::emitSlow_op_new_object):
+ (JSC::JIT::emit_op_create_this):
+ (JSC::JIT::emitSlow_op_create_this): Same refactoring as done for the DFG.
+
+ * jit/JITStubs.cpp:
+ (JSC::tryCacheGetByID): Fixed the same bug mentioned above.
+
+ (JSC::DEFINE_STUB_FUNCTION): Updated for interface changes.
+
+ * llint/LLIntData.cpp:
+ (JSC::LLInt::Data::performAssertions): Updated for interface changes.
+
+ * llint/LLIntSlowPaths.cpp:
+ (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+ * llint/LowLevelInterpreter.asm:
+ * llint/LowLevelInterpreter32_64.asm:
+ * llint/LowLevelInterpreter64.asm: Same refactoring as for the JITs.
+
+ * profiler/ProfilerBytecode.cpp:
+ * profiler/ProfilerBytecodes.cpp:
+ * profiler/ProfilerCompilation.cpp:
+ * profiler/ProfilerCompiledBytecode.cpp:
+ * profiler/ProfilerDatabase.cpp:
+ * profiler/ProfilerOSRExit.cpp:
+ * profiler/ProfilerOrigin.cpp:
+ * profiler/ProfilerProfiledBytecodes.cpp: Include ObjectConstructor.h
+ because that's where createEmptyObject() lives now.
+
+ * runtime/Executable.h:
+ (JSC::JSFunction::JSFunction): Updated for rename.
+
+ * runtime/JSCellInlines.h:
+ (JSC::allocateCell): Updated to match the allocator selection code in
+ the JIT, so it's clearer that both are correct.
+
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::JSFunction):
+ (JSC::JSFunction::createAllocationProfile):
+ (JSC::JSFunction::visitChildren):
+ (JSC::JSFunction::getOwnPropertySlot):
+ (JSC::JSFunction::put):
+ (JSC::JSFunction::defineOwnProperty):
+ (JSC::JSFunction::getConstructData):
+ * runtime/JSFunction.h:
+ (JSC::JSFunction::offsetOfScopeChain):
+ (JSC::JSFunction::offsetOfExecutable):
+ (JSC::JSFunction::offsetOfAllocationProfile):
+ (JSC::JSFunction::allocationProfile):
+ (JSFunction):
+ (JSC::JSFunction::tryGetAllocationProfile):
+ (JSC::JSFunction::addAllocationProfileWatchpoint): Changed inheritorID
+ data member to be an ObjectAllocationProfile, which includes a pointer
+ to the desired allocator. This simplifies JIT code, since we don't have
+ to compute the allocator on the fly. I verified by code inspection that
+ JSFunction is still only 64 bytes.
+
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::reset):
+ (JSC::JSGlobalObject::visitChildren):
+ * runtime/JSGlobalObject.h:
+ (JSGlobalObject):
+ (JSC::JSGlobalObject::dateStructure): No direct pointer to the empty
+ object structure anymore, because now clients need to specify how much
+ inline capacity they want.
+
+ * runtime/JSONObject.cpp:
+ * runtime/JSObject.h:
+ (JSC):
+ (JSFinalObject):
+ (JSC::JSFinalObject::defaultInlineCapacity):
+ (JSC::JSFinalObject::maxInlineCapacity):
+ (JSC::JSFinalObject::createStructure): A little refactoring to try to
+ clarify where some of these constants derive from.
+
+ (JSC::maxOffsetRelativeToPatchedStorage): Used for bug fix, above.
+
+ * runtime/JSProxy.cpp:
+ (JSC::JSProxy::setTarget): Ugly, but effective.
+
+ * runtime/LiteralParser.cpp:
+ * runtime/ObjectConstructor.cpp:
+ (JSC::constructObject):
+ (JSC::constructWithObjectConstructor):
+ (JSC::callObjectConstructor):
+ (JSC::objectConstructorCreate): Updated for interface changes.
+
+ * runtime/ObjectConstructor.h:
+ (JSC::constructEmptyObject): Clarified your options for how to allocate
+ an empty object, to emphasize what things can actually vary.
+
+ * runtime/PropertyOffset.h: These constants have moved because they're
+ really higher level concepts to do with the layout of objects and the
+ collector. PropertyOffset is just an abstract number line, independent
+ of those things.
+
+ * runtime/PrototypeMap.cpp:
+ (JSC::PrototypeMap::emptyObjectStructureForPrototype):
+ (JSC::PrototypeMap::clearEmptyObjectStructureForPrototype):
+ * runtime/PrototypeMap.h:
+ (PrototypeMap): The map key is now a pair of prototype and inline capacity,
+ since Structure encodes inline capacity.
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::Structure):
+ (JSC::Structure::materializePropertyMap):
+ (JSC::Structure::addPropertyTransition):
+ (JSC::Structure::nonPropertyTransition):
+ (JSC::Structure::copyPropertyTableForPinning):
+ * runtime/Structure.h:
+ (Structure):
+ (JSC::Structure::totalStorageSize):
+ (JSC::Structure::transitionCount):
+ (JSC::Structure::create): Fixed a nasty refactoring bug that only shows
+ up after enabling variable-sized inline capacities: we were passing our
+ type info where our inline capacity was expected. The compiler didn't
+ notice because both have type int :(.
+
+2013-01-28 Oliver Hunt <oliver@apple.com>
+
+ Add more assertions to the property storage use in arrays
+ https://bugs.webkit.org/show_bug.cgi?id=107728
+
+ Reviewed by Filip Pizlo.
+
+ Add a bunch of assertions to array and object butterfly
+ usage. This should make debugging somewhat easier.
+
+ I also converted a couple of assertions to release asserts
+ as they were so low cost it seemed a sensible thing to do.
+
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::sortVector):
+ (JSC::JSArray::compactForSorting):
+ * runtime/JSObject.h:
+ (JSC::JSObject::getHolyIndexQuickly):
+
+2013-01-28 Adam Barth <abarth@webkit.org>
+
+ Remove webkitNotifications.createHTMLNotification
+ https://bugs.webkit.org/show_bug.cgi?id=107598
+
+ Reviewed by Benjamin Poulain.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2013-01-28 Michael Saboff <msaboff@apple.com>
+
+ Cleanup ARM version of debugName() in DFGFPRInfo.h
+ https://bugs.webkit.org/show_bug.cgi?id=108090
+
+ Reviewed by David Kilzer.
+
+ Fixed debugName() so it will compile by adding static_cast<int> and missing commas.
+
+ * dfg/DFGFPRInfo.h:
+ (JSC::DFG::FPRInfo::debugName):
+
+2013-01-27 Andreas Kling <akling@apple.com>
+
+ JSC: FunctionParameters are memory hungry.
+ <http://webkit.org/b/108033>
+ <rdar://problem/13094803>
+
+ Reviewed by Sam Weinig.
+
+ Instead of inheriting from Vector<Identifier>, make FunctionParameters a simple fixed-size array
+ with a custom-allocating create() function. Removes one step of indirection and cuts memory usage
+ roughly in half.
+
+ 2.73 MB progression on Membuster3.
+
+ * bytecode/UnlinkedCodeBlock.cpp:
+ (JSC::UnlinkedFunctionExecutable::paramString):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ * parser/Nodes.cpp:
+ (JSC::FunctionParameters::create):
+ (JSC::FunctionParameters::FunctionParameters):
+ (JSC::FunctionParameters::~FunctionParameters):
+ * parser/Nodes.h:
+ (FunctionParameters):
+ (JSC::FunctionParameters::size):
+ (JSC::FunctionParameters::at):
+ (JSC::FunctionParameters::identifiers):
+
+2013-01-27 Andreas Kling <akling@apple.com>
+
+ JSC: SourceProviderCache is memory hungry.
+ <http://webkit.org/b/108029>
+ <rdar://problem/13094806>
+
+ Reviewed by Sam Weinig.
+
+ Use fixed-size arrays for SourceProviderCacheItem's lists of captured variables.
+ Since the lists never change after the object is created, there's no need to keep them in Vectors
+ and we can instead create the whole cache item in a single allocation.
+
+ 13.37 MB progression on Membuster3.
+
+ * parser/Parser.cpp:
+ (JSC::::parseFunctionInfo):
+ * parser/Parser.h:
+ (JSC::Scope::copyCapturedVariablesToVector):
+ (JSC::Scope::fillParametersForSourceProviderCache):
+ (JSC::Scope::restoreFromSourceProviderCache):
+ * parser/SourceProviderCacheItem.h:
+ (SourceProviderCacheItemCreationParameters):
+ (SourceProviderCacheItem):
+ (JSC::SourceProviderCacheItem::approximateByteSize):
+ (JSC::SourceProviderCacheItem::usedVariables):
+ (JSC::SourceProviderCacheItem::writtenVariables):
+ (JSC::SourceProviderCacheItem::~SourceProviderCacheItem):
+ (JSC::SourceProviderCacheItem::create):
+ (JSC::SourceProviderCacheItem::SourceProviderCacheItem):
+
+2013-01-27 Zoltan Arvai <zarvai@inf.u-szeged.hu>
+
+ Fixing atomicIncrement implementation for Windows by dropping support before XP SP2.
+ https://bugs.webkit.org/show_bug.cgi?id=106740
+
+ Reviewed by Benjamin Poulain.
+
+ * config.h:
+
+2013-01-25 Filip Pizlo <fpizlo@apple.com>
+
+ DFG variable event stream shouldn't use NodeIndex
+ https://bugs.webkit.org/show_bug.cgi?id=107996
+
+ Reviewed by Oliver Hunt.
+
+ Introduce the notion of a DFG::MinifiedID, which is just a unique ID of a DFG Node.
+ Internally it currently uses a NodeIndex, but we could change this without having
+ to recode all of the users of MinifiedID. This effectively decouples the OSR exit
+ compiler's way of identifying nodes from the speculative JIT's way of identifying
+ nodes, and should make it easier to make changes to the speculative JIT's internals
+ in the future.
+
+ Also changed variable event stream logging to exclude information about births and
+ deaths of constants, since the OSR exit compiler never cares about which register
+ holds a constant; if a value is constant then the OSR exit compiler can reify it.
+
+ Also changed the variable event stream's value recovery computation to use a
+ HashMap keyed by MinifiedID rather than a Vector indexed by NodeIndex.
+
+ This appears to be performance-neutral. It's primarily meant as a small step
+ towards https://bugs.webkit.org/show_bug.cgi?id=106868.
+
+ * GNUmakefile.list.am:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * dfg/DFGGenerationInfo.h:
+ (JSC::DFG::GenerationInfo::GenerationInfo):
+ (JSC::DFG::GenerationInfo::initConstant):
+ (JSC::DFG::GenerationInfo::initInteger):
+ (JSC::DFG::GenerationInfo::initJSValue):
+ (JSC::DFG::GenerationInfo::initCell):
+ (JSC::DFG::GenerationInfo::initBoolean):
+ (JSC::DFG::GenerationInfo::initDouble):
+ (JSC::DFG::GenerationInfo::initStorage):
+ (JSC::DFG::GenerationInfo::noticeOSRBirth):
+ (JSC::DFG::GenerationInfo::use):
+ (JSC::DFG::GenerationInfo::appendFill):
+ (JSC::DFG::GenerationInfo::appendSpill):
+ (GenerationInfo):
+ * dfg/DFGJITCompiler.cpp:
+ (JSC::DFG::JITCompiler::link):
+ * dfg/DFGMinifiedGraph.h:
+ (JSC::DFG::MinifiedGraph::at):
+ (MinifiedGraph):
+ * dfg/DFGMinifiedID.h: Added.
+ (DFG):
+ (MinifiedID):
+ (JSC::DFG::MinifiedID::MinifiedID):
+ (JSC::DFG::MinifiedID::operator!):
+ (JSC::DFG::MinifiedID::nodeIndex):
+ (JSC::DFG::MinifiedID::operator==):
+ (JSC::DFG::MinifiedID::operator!=):
+ (JSC::DFG::MinifiedID::operator<):
+ (JSC::DFG::MinifiedID::operator>):
+ (JSC::DFG::MinifiedID::operator<=):
+ (JSC::DFG::MinifiedID::operator>=):
+ (JSC::DFG::MinifiedID::hash):
+ (JSC::DFG::MinifiedID::dump):
+ (JSC::DFG::MinifiedID::isHashTableDeletedValue):
+ (JSC::DFG::MinifiedID::invalidID):
+ (JSC::DFG::MinifiedID::otherInvalidID):
+ (JSC::DFG::MinifiedID::fromBits):
+ (JSC::DFG::MinifiedIDHash::hash):
+ (JSC::DFG::MinifiedIDHash::equal):
+ (MinifiedIDHash):
+ (WTF):
+ * dfg/DFGMinifiedNode.cpp:
+ (JSC::DFG::MinifiedNode::fromNode):
+ * dfg/DFGMinifiedNode.h:
+ (JSC::DFG::MinifiedNode::id):
+ (JSC::DFG::MinifiedNode::child1):
+ (JSC::DFG::MinifiedNode::getID):
+ (JSC::DFG::MinifiedNode::compareByNodeIndex):
+ (MinifiedNode):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileMovHint):
+ (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::setNodeIndexForOperand):
+ * dfg/DFGValueSource.cpp:
+ (JSC::DFG::ValueSource::dump):
+ * dfg/DFGValueSource.h:
+ (JSC::DFG::ValueSource::ValueSource):
+ (JSC::DFG::ValueSource::isSet):
+ (JSC::DFG::ValueSource::kind):
+ (JSC::DFG::ValueSource::id):
+ (ValueSource):
+ (JSC::DFG::ValueSource::idFromKind):
+ (JSC::DFG::ValueSource::kindFromID):
+ * dfg/DFGVariableEvent.cpp:
+ (JSC::DFG::VariableEvent::dump):
+ (JSC::DFG::VariableEvent::dumpFillInfo):
+ (JSC::DFG::VariableEvent::dumpSpillInfo):
+ * dfg/DFGVariableEvent.h:
+ (JSC::DFG::VariableEvent::fillGPR):
+ (JSC::DFG::VariableEvent::fillPair):
+ (JSC::DFG::VariableEvent::fillFPR):
+ (JSC::DFG::VariableEvent::spill):
+ (JSC::DFG::VariableEvent::death):
+ (JSC::DFG::VariableEvent::movHint):
+ (JSC::DFG::VariableEvent::id):
+ (VariableEvent):
+ * dfg/DFGVariableEventStream.cpp:
+ (DFG):
+ (JSC::DFG::VariableEventStream::tryToSetConstantRecovery):
+ (JSC::DFG::VariableEventStream::reconstruct):
+ * dfg/DFGVariableEventStream.h:
+ (VariableEventStream):
+
+2013-01-25 Roger Fong <roger_fong@apple.com>
+
+ Unreviewed. Rename LLInt projects folder and make appropriate changes to solutions.
+
+ * JavaScriptCore.vcxproj/JavaScriptCore.sln:
+ * JavaScriptCore.vcxproj/LLInt: Copied from JavaScriptCore.vcxproj/LLInt.vcproj.
+ * JavaScriptCore.vcxproj/LLInt.vcproj: Removed.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntAssembly: Removed.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntAssembly/LLIntAssembly.make: Removed.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntAssembly/LLIntAssembly.vcxproj: Removed.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntAssembly/LLIntAssembly.vcxproj.user: Removed.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntAssembly/build-LLIntAssembly.sh: Removed.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntDesiredOffsets: Removed.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntDesiredOffsets/LLIntDesiredOffsets.make: Removed.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntDesiredOffsets/LLIntDesiredOffsets.vcxproj: Removed.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntDesiredOffsets/LLIntDesiredOffsets.vcxproj.user: Removed.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntDesiredOffsets/build-LLIntDesiredOffsets.sh: Removed.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntOffsetsExtractor: Removed.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractor.vcxproj: Removed.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractor.vcxproj.user: Removed.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractorCommon.props: Removed.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractorDebug.props: Removed.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractorRelease.props: Removed.
+
+2013-01-24 Roger Fong <roger_fong@apple.com>
+
+ VS2010 JavascriptCore: Clean up property sheets, add a JSC solution, add testRegExp and testAPI projects.
+ https://bugs.webkit.org/show_bug.cgi?id=106987
+
+ Reviewed by Brent Fulgham.
+
+ * JavaScriptCore.vcxproj/JavaScriptCore.sln: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreCF.props:
+ * JavaScriptCore.vcxproj/JavaScriptCoreCommon.props:
+ * JavaScriptCore.vcxproj/JavaScriptCorePreLink.cmd:
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractorCommon.props:
+ * JavaScriptCore.vcxproj/jsc/jscCommon.props:
+ * JavaScriptCore.vcxproj/jsc/jscDebug.props:
+ * JavaScriptCore.vcxproj/jsc/jscPostBuild.cmd:
+ * JavaScriptCore.vcxproj/jsc/jscPreLink.cmd:
+ * JavaScriptCore.vcxproj/testRegExp: Added.
+ * JavaScriptCore.vcxproj/testRegExp/testRegExp.vcxproj: Added.
+ * JavaScriptCore.vcxproj/testRegExp/testRegExp.vcxproj.filters: Added.
+ * JavaScriptCore.vcxproj/testRegExp/testRegExp.vcxproj.user: Added.
+ * JavaScriptCore.vcxproj/testRegExp/testRegExpCommon.props: Added.
+ * JavaScriptCore.vcxproj/testRegExp/testRegExpDebug.props: Added.
+ * JavaScriptCore.vcxproj/testRegExp/testRegExpPostBuild.cmd: Added.
+ * JavaScriptCore.vcxproj/testRegExp/testRegExpPreBuild.cmd: Added.
+ * JavaScriptCore.vcxproj/testRegExp/testRegExpPreLink.cmd: Added.
+ * JavaScriptCore.vcxproj/testRegExp/testRegExpRelease.props: Added.
+ * JavaScriptCore.vcxproj/testapi: Added.
+ * JavaScriptCore.vcxproj/testapi/testapi.vcxproj: Added.
+ * JavaScriptCore.vcxproj/testapi/testapi.vcxproj.filters: Added.
+ * JavaScriptCore.vcxproj/testapi/testapi.vcxproj.user: Added.
+ * JavaScriptCore.vcxproj/testapi/testapiCommon.props: Added.
+ * JavaScriptCore.vcxproj/testapi/testapiDebug.props: Added.
+ * JavaScriptCore.vcxproj/testapi/testapiPostBuild.cmd: Added.
+ * JavaScriptCore.vcxproj/testapi/testapiPreBuild.cmd: Added.
+ * JavaScriptCore.vcxproj/testapi/testapiPreLink.cmd: Added.
+ * JavaScriptCore.vcxproj/testapi/testapiRelease.props: Added.
+
+2013-01-24 Roger Fong <roger_fong@apple.com>
+
+ Unreviewed. Windows build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+
+2013-01-24 Filip Pizlo <fpizlo@apple.com>
+
+ DFG::JITCompiler::getSpeculation() methods are badly named and superfluous
+ https://bugs.webkit.org/show_bug.cgi?id=107860
+
+ Reviewed by Mark Hahnenberg.
+
+ * dfg/DFGJITCompiler.h:
+ (JITCompiler):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compileLogicalNot):
+ (JSC::DFG::SpeculativeJIT::emitBranch):
+
+2013-01-24 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: Rename JSValue.h/APIJSValue.h to JSCJSValue.h/JSValue.h
+ https://bugs.webkit.org/show_bug.cgi?id=107327
+
+ Reviewed by Filip Pizlo.
+
+ We're renaming these two files, so we have to replace the names everywhere.
+
+ * API/APICast.h:
+ * API/APIJSValue.h: Removed.
+ * API/JSBlockAdaptor.mm:
+ * API/JSStringRefCF.cpp:
+ * API/JSValue.h: Copied from Source/JavaScriptCore/API/APIJSValue.h.
+ * API/JSValue.mm:
+ * API/JSValueInternal.h:
+ * API/JSValueRef.cpp:
+ * API/JSWeakObjectMapRefPrivate.cpp:
+ * API/JavaScriptCore.h:
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * bytecode/CallLinkStatus.h:
+ * bytecode/CodeBlock.cpp:
+ * bytecode/MethodOfGettingAValueProfile.h:
+ * bytecode/ResolveGlobalStatus.cpp:
+ * bytecode/ResolveGlobalStatus.h:
+ * bytecode/SpeculatedType.h:
+ * bytecode/ValueRecovery.h:
+ * dfg/DFGByteCodeParser.cpp:
+ * dfg/DFGJITCompiler.cpp:
+ * dfg/DFGNode.h:
+ * dfg/DFGSpeculativeJIT.cpp:
+ * dfg/DFGSpeculativeJIT64.cpp:
+ * heap/CopiedBlock.h:
+ * heap/HandleStack.cpp:
+ * heap/HandleTypes.h:
+ * heap/WeakImpl.h:
+ * interpreter/Interpreter.h:
+ * interpreter/Register.h:
+ * interpreter/VMInspector.h:
+ * jit/HostCallReturnValue.cpp:
+ * jit/HostCallReturnValue.h:
+ * jit/JITCode.h:
+ * jit/JITExceptions.cpp:
+ * jit/JITExceptions.h:
+ * jit/JSInterfaceJIT.h:
+ * llint/LLIntCLoop.h:
+ * llint/LLIntData.h:
+ * llint/LLIntSlowPaths.cpp:
+ * profiler/ProfilerBytecode.h:
+ * profiler/ProfilerBytecodeSequence.h:
+ * profiler/ProfilerBytecodes.h:
+ * profiler/ProfilerCompilation.h:
+ * profiler/ProfilerCompiledBytecode.h:
+ * profiler/ProfilerDatabase.h:
+ * profiler/ProfilerOSRExit.h:
+ * profiler/ProfilerOSRExitSite.h:
+ * profiler/ProfilerOrigin.h:
+ * profiler/ProfilerOriginStack.h:
+ * runtime/ArgList.cpp:
+ * runtime/CachedTranscendentalFunction.h:
+ * runtime/CallData.h:
+ * runtime/Completion.h:
+ * runtime/ConstructData.h:
+ * runtime/DateConstructor.cpp:
+ * runtime/DateInstance.cpp:
+ * runtime/DatePrototype.cpp:
+ * runtime/JSAPIValueWrapper.h:
+ * runtime/JSCJSValue.cpp: Copied from Source/JavaScriptCore/runtime/JSValue.cpp.
+ * runtime/JSCJSValue.h: Copied from Source/JavaScriptCore/runtime/JSValue.h.
+ (JSValue):
+ * runtime/JSCJSValueInlines.h: Copied from Source/JavaScriptCore/runtime/JSValueInlines.h.
+ * runtime/JSGlobalData.h:
+ * runtime/JSGlobalObject.cpp:
+ * runtime/JSGlobalObjectFunctions.h:
+ * runtime/JSStringJoiner.h:
+ * runtime/JSValue.cpp: Removed.
+ * runtime/JSValue.h: Removed.
+ * runtime/JSValueInlines.h: Removed.
+ * runtime/LiteralParser.h:
+ * runtime/Operations.h:
+ * runtime/PropertyDescriptor.h:
+ * runtime/PropertySlot.h:
+ * runtime/Protect.h:
+ * runtime/RegExpPrototype.cpp:
+ * runtime/Structure.h:
+
+2013-01-23 Oliver Hunt <oliver@apple.com>
+
+ Harden JSC a bit with RELEASE_ASSERT
+ https://bugs.webkit.org/show_bug.cgi?id=107766
+
+ Reviewed by Mark Hahnenberg.
+
+ Went through and replaced a pile of ASSERTs that were covering
+ significantly important details (bounds checks, etc) where
+ having the checks did not impact release performance in any
+ measurable way.
+
+ * API/JSContextRef.cpp:
+ (JSContextCreateBacktrace):
+ * assembler/MacroAssembler.h:
+ (JSC::MacroAssembler::branchAdd32):
+ (JSC::MacroAssembler::branchMul32):
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dumpBytecode):
+ (JSC::CodeBlock::handlerForBytecodeOffset):
+ (JSC::CodeBlock::lineNumberForBytecodeOffset):
+ (JSC::CodeBlock::bytecodeOffset):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::bytecodeOffsetForCallAtIndex):
+ (JSC::CodeBlock::bytecodeOffset):
+ (JSC::CodeBlock::exceptionHandler):
+ (JSC::CodeBlock::codeOrigin):
+ (JSC::CodeBlock::immediateSwitchJumpTable):
+ (JSC::CodeBlock::characterSwitchJumpTable):
+ (JSC::CodeBlock::stringSwitchJumpTable):
+ (JSC::CodeBlock::setIdentifiers):
+ (JSC::baselineCodeBlockForInlineCallFrame):
+ (JSC::ExecState::uncheckedR):
+ * bytecode/CodeOrigin.cpp:
+ (JSC::CodeOrigin::inlineStack):
+ * bytecode/CodeOrigin.h:
+ (JSC::CodeOrigin::CodeOrigin):
+ * dfg/DFGCSEPhase.cpp:
+ * dfg/DFGOSRExit.cpp:
+ * dfg/DFGScratchRegisterAllocator.h:
+ (JSC::DFG::ScratchRegisterAllocator::preserveUsedRegistersToScratchBuffer):
+ (JSC::DFG::ScratchRegisterAllocator::restoreUsedRegistersFromScratchBuffer):
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::allocate):
+ (JSC::DFG::SpeculativeJIT::spill):
+ (JSC::DFG::SpeculativeJIT::integerResult):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::fillInteger):
+ (JSC::DFG::SpeculativeJIT::fillDouble):
+ (JSC::DFG::SpeculativeJIT::fillJSValue):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
+ (JSC::DFG::SpeculativeJIT::emitCall):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntStrict):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGValueSource.h:
+ (JSC::DFG::dataFormatToValueSourceKind):
+ (JSC::DFG::ValueSource::ValueSource):
+ * dfg/DFGVirtualRegisterAllocationPhase.cpp:
+ * heap/BlockAllocator.cpp:
+ (JSC::BlockAllocator::BlockAllocator):
+ (JSC::BlockAllocator::releaseFreeRegions):
+ (JSC::BlockAllocator::blockFreeingThreadMain):
+ * heap/Heap.cpp:
+ (JSC::Heap::lastChanceToFinalize):
+ (JSC::Heap::collect):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::throwException):
+ (JSC::Interpreter::execute):
+ * jit/GCAwareJITStubRoutine.cpp:
+ (JSC::GCAwareJITStubRoutine::observeZeroRefCount):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ (JSC::JIT::privateCompileSlowCases):
+ * jit/JITExceptions.cpp:
+ (JSC::genericThrow):
+ * jit/JITInlines.h:
+ (JSC::JIT::emitLoad):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_end):
+ (JSC::JIT::emit_resolve_operations):
+ * jit/JITStubRoutine.cpp:
+ (JSC::JITStubRoutine::observeZeroRefCount):
+ * jit/JITStubs.cpp:
+ (JSC::returnToThrowTrampoline):
+ * runtime/Arguments.cpp:
+ (JSC::Arguments::getOwnPropertySlot):
+ (JSC::Arguments::getOwnPropertyDescriptor):
+ (JSC::Arguments::deleteProperty):
+ (JSC::Arguments::defineOwnProperty):
+ (JSC::Arguments::didTearOffActivation):
+ * runtime/ArrayPrototype.cpp:
+ (JSC::shift):
+ (JSC::unshift):
+ (JSC::arrayProtoFuncLastIndexOf):
+ * runtime/ButterflyInlines.h:
+ (JSC::Butterfly::growPropertyStorage):
+ * runtime/CodeCache.cpp:
+ (JSC::CodeCache::getFunctionExecutableFromGlobalCode):
+ * runtime/CodeCache.h:
+ (JSC::CacheMap::add):
+ * runtime/Completion.cpp:
+ (JSC::checkSyntax):
+ (JSC::evaluate):
+ * runtime/Executable.cpp:
+ (JSC::FunctionExecutable::FunctionExecutable):
+ (JSC::EvalExecutable::unlinkCalls):
+ (JSC::ProgramExecutable::compileOptimized):
+ (JSC::ProgramExecutable::unlinkCalls):
+ (JSC::ProgramExecutable::initializeGlobalProperties):
+ (JSC::FunctionExecutable::baselineCodeBlockFor):
+ (JSC::FunctionExecutable::compileOptimizedForCall):
+ (JSC::FunctionExecutable::compileOptimizedForConstruct):
+ (JSC::FunctionExecutable::compileForCallInternal):
+ (JSC::FunctionExecutable::compileForConstructInternal):
+ (JSC::FunctionExecutable::unlinkCalls):
+ (JSC::NativeExecutable::hashFor):
+ * runtime/Executable.h:
+ (JSC::EvalExecutable::compile):
+ (JSC::ProgramExecutable::compile):
+ (JSC::FunctionExecutable::compileForCall):
+ (JSC::FunctionExecutable::compileForConstruct):
+ * runtime/IndexingHeader.h:
+ (JSC::IndexingHeader::setVectorLength):
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::pop):
+ (JSC::JSArray::shiftCountWithArrayStorage):
+ (JSC::JSArray::shiftCountWithAnyIndexingType):
+ (JSC::JSArray::unshiftCountWithArrayStorage):
+ * runtime/JSGlobalObjectFunctions.cpp:
+ (JSC::jsStrDecimalLiteral):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::copyButterfly):
+ (JSC::JSObject::defineOwnIndexedProperty):
+ (JSC::JSObject::putByIndexBeyondVectorLengthWithoutAttributes):
+ * runtime/JSString.cpp:
+ (JSC::JSRopeString::getIndexSlowCase):
+ * yarr/YarrInterpreter.cpp:
+ (JSC::Yarr::Interpreter::popParenthesesDisjunctionContext):
+
+2013-01-23 Filip Pizlo <fpizlo@apple.com>
+
+ Constant folding an access to an uncaptured variable that is captured later in the same basic block shouldn't lead to assertion failures
+ https://bugs.webkit.org/show_bug.cgi?id=107750
+ <rdar://problem/12387265>
+
+ Reviewed by Mark Hahnenberg.
+
+ The point of this assertion was that if there is no variable capturing going on, then there should only be one GetLocal
+ for the variable anywhere in the basic block. But if there is some capturing, then we'll have an unbounded number of
+ GetLocals. The assertion was too imprecise for the latter case. I want to keep this assertion, so I introduced a
+ checker that verifies this precisely: if there are any captured accesses to the variable anywhere at or after the
+ GetLocal we are eliminating, then we allow redundant GetLocals.
+
+ * dfg/DFGConstantFoldingPhase.cpp:
+ (JSC::DFG::ConstantFoldingPhase::foldConstants):
+ (ConstantFoldingPhase):
+ (JSC::DFG::ConstantFoldingPhase::isCapturedAtOrAfter):
+
+2013-01-23 Oliver Hunt <oliver@apple.com>
+
+ Replace ASSERT_NOT_REACHED with RELEASE_ASSERT_NOT_REACHED in JSC
+ https://bugs.webkit.org/show_bug.cgi?id=107736
+
+ Reviewed by Mark Hahnenberg.
+
+ Mechanical change with no performance impact.
+
+ * API/JSBlockAdaptor.mm:
+ (BlockArgumentTypeDelegate::typeVoid):
+ * API/JSCallbackObjectFunctions.h:
+ (JSC::::construct):
+ (JSC::::call):
+ * API/JSScriptRef.cpp:
+ * API/ObjCCallbackFunction.mm:
+ (ArgumentTypeDelegate::typeVoid):
+ * assembler/ARMv7Assembler.h:
+ (JSC::ARMv7Assembler::link):
+ (JSC::ARMv7Assembler::replaceWithLoad):
+ (JSC::ARMv7Assembler::replaceWithAddressComputation):
+ * assembler/MacroAssembler.h:
+ (JSC::MacroAssembler::invert):
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::countLeadingZeros32):
+ (JSC::MacroAssemblerARM::divDouble):
+ * assembler/MacroAssemblerMIPS.h:
+ (JSC::MacroAssemblerMIPS::absDouble):
+ (JSC::MacroAssemblerMIPS::replaceWithJump):
+ (JSC::MacroAssemblerMIPS::maxJumpReplacementSize):
+ * assembler/MacroAssemblerSH4.h:
+ (JSC::MacroAssemblerSH4::absDouble):
+ (JSC::MacroAssemblerSH4::replaceWithJump):
+ (JSC::MacroAssemblerSH4::maxJumpReplacementSize):
+ * assembler/SH4Assembler.h:
+ (JSC::SH4Assembler::shllImm8r):
+ (JSC::SH4Assembler::shlrImm8r):
+ (JSC::SH4Assembler::cmplRegReg):
+ (JSC::SH4Assembler::branch):
+ * assembler/X86Assembler.h:
+ (JSC::X86Assembler::replaceWithLoad):
+ (JSC::X86Assembler::replaceWithAddressComputation):
+ * bytecode/CallLinkInfo.cpp:
+ (JSC::CallLinkInfo::unlink):
+ * bytecode/CodeBlock.cpp:
+ (JSC::debugHookName):
+ (JSC::CodeBlock::printGetByIdOp):
+ (JSC::CodeBlock::printGetByIdCacheStatus):
+ (JSC::CodeBlock::visitAggregate):
+ (JSC::CodeBlock::finalizeUnconditionally):
+ (JSC::CodeBlock::usesOpcode):
+ * bytecode/DataFormat.h:
+ (JSC::needDataFormatConversion):
+ * bytecode/ExitKind.cpp:
+ (JSC::exitKindToString):
+ (JSC::exitKindIsCountable):
+ * bytecode/MethodOfGettingAValueProfile.cpp:
+ (JSC::MethodOfGettingAValueProfile::getSpecFailBucket):
+ * bytecode/Opcode.h:
+ (JSC::opcodeLength):
+ * bytecode/PolymorphicPutByIdList.cpp:
+ (JSC::PutByIdAccess::fromStructureStubInfo):
+ (JSC::PutByIdAccess::visitWeak):
+ * bytecode/StructureStubInfo.cpp:
+ (JSC::StructureStubInfo::deref):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::ResolveResult::checkValidity):
+ (JSC::BytecodeGenerator::emitGetLocalVar):
+ (JSC::BytecodeGenerator::beginSwitch):
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::BinaryOpNode::emitBytecode):
+ (JSC::emitReadModifyAssignment):
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ (JSC::DFG::AbstractState::mergeStateAtTail):
+ (JSC::DFG::AbstractState::mergeToSuccessors):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::makeSafe):
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ * dfg/DFGCFGSimplificationPhase.cpp:
+ (JSC::DFG::CFGSimplificationPhase::fixPossibleGetLocal):
+ (JSC::DFG::CFGSimplificationPhase::fixTailOperand):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::setLocalStoreElimination):
+ * dfg/DFGCapabilities.cpp:
+ (JSC::DFG::canHandleOpcodes):
+ * dfg/DFGCommon.h:
+ (JSC::DFG::useKindToString):
+ * dfg/DFGDoubleFormatState.h:
+ (JSC::DFG::mergeDoubleFormatStates):
+ (JSC::DFG::doubleFormatStateToString):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::blessArrayOperation):
+ * dfg/DFGGraph.h:
+ (JSC::DFG::Graph::clobbersWorld):
+ * dfg/DFGNode.h:
+ (JSC::DFG::Node::valueOfJSConstant):
+ (JSC::DFG::Node::successor):
+ * dfg/DFGNodeFlags.cpp:
+ (JSC::DFG::nodeFlagsAsString):
+ * dfg/DFGNodeType.h:
+ (JSC::DFG::defaultFlags):
+ * dfg/DFGRepatch.h:
+ (JSC::DFG::dfgResetGetByID):
+ (JSC::DFG::dfgResetPutByID):
+ * dfg/DFGSlowPathGenerator.h:
+ (JSC::DFG::SlowPathGenerator::call):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::silentSavePlanForGPR):
+ (JSC::DFG::SpeculativeJIT::silentSpill):
+ (JSC::DFG::SpeculativeJIT::silentFill):
+ (JSC::DFG::SpeculativeJIT::checkArray):
+ (JSC::DFG::SpeculativeJIT::checkGeneratedTypeForToInt32):
+ (JSC::DFG::SpeculativeJIT::compileValueToInt32):
+ (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
+ (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::bitOp):
+ (JSC::DFG::SpeculativeJIT::shiftOp):
+ (JSC::DFG::SpeculativeJIT::integerResult):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::fillInteger):
+ (JSC::DFG::SpeculativeJIT::fillDouble):
+ (JSC::DFG::SpeculativeJIT::fillJSValue):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::fillInteger):
+ (JSC::DFG::SpeculativeJIT::fillDouble):
+ (JSC::DFG::SpeculativeJIT::fillJSValue):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGStructureCheckHoistingPhase.cpp:
+ (JSC::DFG::StructureCheckHoistingPhase::run):
+ * dfg/DFGValueSource.h:
+ (JSC::DFG::ValueSource::valueRecovery):
+ * dfg/DFGVariableEvent.cpp:
+ (JSC::DFG::VariableEvent::dump):
+ * dfg/DFGVariableEventStream.cpp:
+ (JSC::DFG::VariableEventStream::reconstruct):
+ * heap/BlockAllocator.h:
+ (JSC::BlockAllocator::regionSetFor):
+ * heap/GCThread.cpp:
+ (JSC::GCThread::gcThreadMain):
+ * heap/MarkedBlock.cpp:
+ (JSC::MarkedBlock::sweepHelper):
+ * heap/MarkedBlock.h:
+ (JSC::MarkedBlock::isLive):
+ * interpreter/CallFrame.h:
+ (JSC::ExecState::inlineCallFrame):
+ * interpreter/Interpreter.cpp:
+ (JSC::getCallerInfo):
+ (JSC::getStackFrameCodeType):
+ (JSC::Interpreter::execute):
+ * jit/ExecutableAllocatorFixedVMPool.cpp:
+ (JSC::FixedVMPoolExecutableAllocator::notifyPageIsFree):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ (JSC::JIT::privateCompileSlowCases):
+ (JSC::JIT::privateCompile):
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emitSlow_op_mod):
+ * jit/JITArithmetic32_64.cpp:
+ (JSC::JIT::emitBinaryDoubleOp):
+ (JSC::JIT::emitSlow_op_mod):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::isDirectPutById):
+ * jit/JITStubs.cpp:
+ (JSC::getPolymorphicAccessStructureListSlot):
+ (JSC::DEFINE_STUB_FUNCTION):
+ * llint/LLIntSlowPaths.cpp:
+ (JSC::LLInt::jitCompileAndSetHeuristics):
+ * parser/Lexer.cpp:
+ (JSC::::lex):
+ * parser/Nodes.h:
+ (JSC::ExpressionNode::emitBytecodeInConditionContext):
+ * parser/Parser.h:
+ (JSC::Parser::getTokenName):
+ (JSC::Parser::updateErrorMessageSpecialCase):
+ * parser/SyntaxChecker.h:
+ (JSC::SyntaxChecker::operatorStackPop):
+ * runtime/Arguments.cpp:
+ (JSC::Arguments::tearOffForInlineCallFrame):
+ * runtime/DatePrototype.cpp:
+ (JSC::formatLocaleDate):
+ * runtime/Executable.cpp:
+ (JSC::samplingDescription):
+ * runtime/Executable.h:
+ (JSC::ScriptExecutable::unlinkCalls):
+ * runtime/Identifier.cpp:
+ (JSC):
+ * runtime/InternalFunction.cpp:
+ (JSC::InternalFunction::getCallData):
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::push):
+ (JSC::JSArray::sort):
+ * runtime/JSCell.cpp:
+ (JSC::JSCell::defaultValue):
+ (JSC::JSCell::getOwnPropertyNames):
+ (JSC::JSCell::getOwnNonIndexPropertyNames):
+ (JSC::JSCell::className):
+ (JSC::JSCell::getPropertyNames):
+ (JSC::JSCell::customHasInstance):
+ (JSC::JSCell::putDirectVirtual):
+ (JSC::JSCell::defineOwnProperty):
+ (JSC::JSCell::getOwnPropertyDescriptor):
+ * runtime/JSCell.h:
+ (JSCell):
+ * runtime/JSNameScope.cpp:
+ (JSC::JSNameScope::put):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::getOwnPropertySlotByIndex):
+ (JSC::JSObject::putByIndex):
+ (JSC::JSObject::ensureArrayStorageSlow):
+ (JSC::JSObject::deletePropertyByIndex):
+ (JSC::JSObject::getOwnPropertyNames):
+ (JSC::JSObject::putByIndexBeyondVectorLength):
+ (JSC::JSObject::putDirectIndexBeyondVectorLength):
+ (JSC::JSObject::getOwnPropertyDescriptor):
+ * runtime/JSObject.h:
+ (JSC::JSObject::canGetIndexQuickly):
+ (JSC::JSObject::getIndexQuickly):
+ (JSC::JSObject::tryGetIndexQuickly):
+ (JSC::JSObject::canSetIndexQuickly):
+ (JSC::JSObject::canSetIndexQuicklyForPutDirect):
+ (JSC::JSObject::setIndexQuickly):
+ (JSC::JSObject::initializeIndex):
+ (JSC::JSObject::hasSparseMap):
+ (JSC::JSObject::inSparseIndexingMode):
+ * runtime/JSScope.cpp:
+ (JSC::JSScope::isDynamicScope):
+ * runtime/JSSymbolTableObject.cpp:
+ (JSC::JSSymbolTableObject::putDirectVirtual):
+ * runtime/JSSymbolTableObject.h:
+ (JSSymbolTableObject):
+ * runtime/LiteralParser.cpp:
+ (JSC::::parse):
+ * runtime/RegExp.cpp:
+ (JSC::RegExp::compile):
+ (JSC::RegExp::compileMatchOnly):
+ * runtime/StructureTransitionTable.h:
+ (JSC::newIndexingType):
+ * tools/CodeProfile.cpp:
+ (JSC::CodeProfile::sample):
+ * yarr/YarrCanonicalizeUCS2.h:
+ (JSC::Yarr::getCanonicalPair):
+ (JSC::Yarr::areCanonicallyEquivalent):
+ * yarr/YarrInterpreter.cpp:
+ (JSC::Yarr::Interpreter::matchCharacterClass):
+ (JSC::Yarr::Interpreter::matchBackReference):
+ (JSC::Yarr::Interpreter::backtrackParenthesesTerminalEnd):
+ (JSC::Yarr::Interpreter::matchParentheses):
+ (JSC::Yarr::Interpreter::backtrackParentheses):
+ (JSC::Yarr::Interpreter::matchDisjunction):
+ * yarr/YarrJIT.cpp:
+ (JSC::Yarr::YarrGenerator::generateTerm):
+ (JSC::Yarr::YarrGenerator::backtrackTerm):
+ * yarr/YarrParser.h:
+ (JSC::Yarr::Parser::CharacterClassParserDelegate::assertionWordBoundary):
+ (JSC::Yarr::Parser::CharacterClassParserDelegate::atomBackReference):
+ * yarr/YarrPattern.cpp:
+ (JSC::Yarr::YarrPatternConstructor::atomCharacterClassBuiltIn):
+
+2013-01-23 Tony Chang <tony@chromium.org>
+
+ Unreviewed, set svn:eol-style to CRLF on Windows .sln files.
+
+ * JavaScriptCore.vcproj/JavaScriptCore.sln: Modified property svn:eol-style.
+ * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Modified property svn:eol-style.
+
+2013-01-23 Oliver Hunt <oliver@apple.com>
+
+ Replace numerous manual CRASH's in JSC with RELEASE_ASSERT
+ https://bugs.webkit.org/show_bug.cgi?id=107726
+
+ Reviewed by Filip Pizlo.
+
+ Fairly manual change from if (foo) CRASH(); to RELEASE_ASSERT(!foo);
+
+ * assembler/MacroAssembler.h:
+ (JSC::MacroAssembler::branchAdd32):
+ (JSC::MacroAssembler::branchMul32):
+ * bytecode/CodeBlockHash.cpp:
+ (JSC::CodeBlockHash::CodeBlockHash):
+ * heap/BlockAllocator.h:
+ (JSC::Region::create):
+ (JSC::Region::createCustomSize):
+ * heap/GCAssertions.h:
+ * heap/HandleSet.cpp:
+ (JSC::HandleSet::visitStrongHandles):
+ (JSC::HandleSet::writeBarrier):
+ * heap/HandleSet.h:
+ (JSC::HandleSet::allocate):
+ * heap/Heap.cpp:
+ (JSC::Heap::collect):
+ * heap/SlotVisitor.cpp:
+ (JSC::SlotVisitor::validate):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::execute):
+ * jit/ExecutableAllocator.cpp:
+ (JSC::DemandExecutableAllocator::allocateNewSpace):
+ (JSC::ExecutableAllocator::allocate):
+ * jit/ExecutableAllocator.h:
+ (JSC::roundUpAllocationSize):
+ * jit/ExecutableAllocatorFixedVMPool.cpp:
+ (JSC::FixedVMPoolExecutableAllocator::FixedVMPoolExecutableAllocator):
+ (JSC::ExecutableAllocator::allocate):
+ * runtime/ButterflyInlines.h:
+ (JSC::Butterfly::createUninitialized):
+ * runtime/Completion.cpp:
+ (JSC::evaluate):
+ * runtime/JSArray.h:
+ (JSC::constructArray):
+ * runtime/JSGlobalObject.cpp:
+ (JSC::slowValidateCell):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::enterDictionaryIndexingModeWhenArrayStorageAlreadyExists):
+ (JSC::JSObject::createArrayStorage):
+ * tools/TieredMMapArray.h:
+ (JSC::TieredMMapArray::append):
+ * yarr/YarrInterpreter.cpp:
+ (JSC::Yarr::Interpreter::allocDisjunctionContext):
+ (JSC::Yarr::Interpreter::allocParenthesesDisjunctionContext):
+ (JSC::Yarr::Interpreter::InputStream::readChecked):
+ (JSC::Yarr::Interpreter::InputStream::uncheckInput):
+ (JSC::Yarr::Interpreter::InputStream::atEnd):
+ (JSC::Yarr::Interpreter::interpret):
+
+2013-01-22 Filip Pizlo <fpizlo@apple.com>
+
+ Convert CSE phase to not rely too much on NodeIndex
+ https://bugs.webkit.org/show_bug.cgi?id=107616
+
+ Reviewed by Geoffrey Garen.
+
+ - Instead of looping over the graph (which assumes that you can simply loop over all
+ nodes without considering blocks first) to reset node.replacement, do that in the
+ loop that sets up relevantToOSR, just before running CSE on the block.
+
+ - Instead of having a relevantToOSR bitvector indexed by NodeIndex, made
+ NodeRelevantToOSR be a NodeFlag. We had exactly one bit left in NodeFlags, so I did
+ some reshuffling to fit it in.
+
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::CSEPhase):
+ (JSC::DFG::CSEPhase::eliminateIrrelevantPhantomChildren):
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ (JSC::DFG::CSEPhase::performBlockCSE):
+ (CSEPhase):
+ * dfg/DFGNodeFlags.h:
+ (DFG):
+ * dfg/DFGNodeType.h:
+ (DFG):
+
+2013-01-21 Kentaro Hara <haraken@chromium.org>
+
+ Implement UIEvent constructor
+ https://bugs.webkit.org/show_bug.cgi?id=107430
+
+ Reviewed by Adam Barth.
+
+ Editor's draft: https://dvcs.w3.org/hg/d4e/raw-file/tip/source_respec.htm
+
+ UIEvent constructor is implemented under a DOM4_EVENTS_CONSTRUCTOR flag,
+ which is enabled on Safari and Chromium for now.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2013-01-22 Roger Fong <roger_fong@apple.com>
+
+ Unreviewed VS2010 build fix following r140259.
+
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj:
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters:
+
+2013-01-22 Roger Fong <roger_fong@apple.com>
+
+ JavaScriptCore property sheets, project files and modified build scripts.
+ https://bugs.webkit.org/show_bug.cgi?id=106987
+
+ Reviewed by Brent Fulgham.
+
+ * JavaScriptCore.vcxproj: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCore.resources: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCore.resources/Info.plist: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.filters: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCore.vcxproj.user: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreCF.props: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreCommon.props: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreDebug.props: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreExports.def: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreGenerated.make: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreGenerated.vcxproj: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreGenerated.vcxproj.filters: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreGenerated.vcxproj.user: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreGeneratedCommon.props: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreGeneratedDebug.props: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreGeneratedRelease.props: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCorePostBuild.cmd: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCorePreBuild.cmd: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCorePreLink.cmd: Added.
+ * JavaScriptCore.vcxproj/JavaScriptCoreRelease.props: Added.
+ * JavaScriptCore.vcxproj/LLInt.vcproj: Added.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntAssembly: Added.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntAssembly/LLIntAssembly.make: Added.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntAssembly/LLIntAssembly.vcxproj: Added.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntAssembly/LLIntAssembly.vcxproj.user: Added.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntAssembly/build-LLIntAssembly.sh: Added.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntDesiredOffsets: Added.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntDesiredOffsets/LLIntDesiredOffsets.make: Added.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntDesiredOffsets/LLIntDesiredOffsets.vcxproj: Added.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntDesiredOffsets/LLIntDesiredOffsets.vcxproj.user: Added.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntDesiredOffsets/build-LLIntDesiredOffsets.sh: Added.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntOffsetsExtractor: Added.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractor.vcxproj: Added.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractor.vcxproj.user: Added.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractorCommon.props: Added.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractorDebug.props: Added.
+ * JavaScriptCore.vcxproj/LLInt.vcproj/LLIntOffsetsExtractor/LLIntOffsetsExtractorRelease.props: Added.
+ * JavaScriptCore.vcxproj/build-generated-files.sh: Added.
+ * JavaScriptCore.vcxproj/copy-files.cmd: Added.
+ * JavaScriptCore.vcxproj/jsc: Added.
+ * JavaScriptCore.vcxproj/jsc/jsc.vcxproj: Added.
+ * JavaScriptCore.vcxproj/jsc/jsc.vcxproj.filters: Added.
+ * JavaScriptCore.vcxproj/jsc/jsc.vcxproj.user: Added.
+ * JavaScriptCore.vcxproj/jsc/jscCommon.props: Added.
+ * JavaScriptCore.vcxproj/jsc/jscDebug.props: Added.
+ * JavaScriptCore.vcxproj/jsc/jscPostBuild.cmd: Added.
+ * JavaScriptCore.vcxproj/jsc/jscPreBuild.cmd: Added.
+ * JavaScriptCore.vcxproj/jsc/jscPreLink.cmd: Added.
+ * JavaScriptCore.vcxproj/jsc/jscRelease.props: Added.
+ * config.h:
+
+2013-01-22 Joseph Pecoraro <pecoraro@apple.com>
+
+ [Mac] Enable Page Visibility (PAGE_VISIBILITY_API)
+ https://bugs.webkit.org/show_bug.cgi?id=107230
+
+ Reviewed by David Kilzer.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2013-01-22 Tobias Netzel <tobias.netzel@googlemail.com>
+
+ Yarr JIT isn't big endian compatible
+ https://bugs.webkit.org/show_bug.cgi?id=102897
+
+ Reviewed by Oliver Hunt.
+
+ This patch was tested in the current mozilla codebase only and has passed the regexp tests there.
+
+ * yarr/YarrJIT.cpp:
+ (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
+
+2013-01-22 David Kilzer <ddkilzer@apple.com>
+
+ Fix DateMath.cpp to compile with -Wshorten-64-to-32
+ <http://webkit.org/b/107503>
+
+ Reviewed by Darin Adler.
+
+ * runtime/JSDateMath.cpp:
+ (JSC::parseDateFromNullTerminatedCharacters): Remove unneeded
+ static_cast<int>().
+
+2013-01-22 Tim Horton <timothy_horton@apple.com>
+
+ PDFPlugin: Build PDFPlugin everywhere, enable at runtime
+ https://bugs.webkit.org/show_bug.cgi?id=107117
+
+ Reviewed by Alexey Proskuryakov.
+
+ Since PDFLayerController SPI is all forward-declared, the plugin should build
+ on all Mac platforms, and can be enabled at runtime.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2013-01-21 Justin Schuh <jschuh@chromium.org>
+
+ [CHROMIUM] Suppress c4267 build warnings for Win64 targets
+ https://bugs.webkit.org/show_bug.cgi?id=107499
+
+ Reviewed by Abhishek Arya.
+
+ * JavaScriptCore.gyp/JavaScriptCore.gyp:
+
+2013-01-21 Dirk Schulze <dschulze@adobe.com>
+
+ Add build flag for Canvas's Path object (disabled by default)
+ https://bugs.webkit.org/show_bug.cgi?id=107473
+
+ Reviewed by Dean Jackson.
+
+ Add CANVAS_PATH build flag to build systems.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2013-01-20 Geoffrey Garen <ggaren@apple.com>
+
+ Weak GC maps should be easier to use
+ https://bugs.webkit.org/show_bug.cgi?id=107312
+
+ Reviewed by Sam Weinig.
+
+ Follow-up fix.
+
+ * runtime/PrototypeMap.cpp:
+ (JSC::PrototypeMap::emptyObjectStructureForPrototype): Restored this
+ ASSERT, which was disabled because of a bug in WeakGCMap.
+
+ * runtime/WeakGCMap.h:
+ (JSC::WeakGCMap::add): We can't pass our passed-in value to add() because
+ a PassWeak() clears itself when passed to another function. So, we pass
+ nullptr instead, and fix things up afterwards.
+
+2013-01-20 Geoffrey Garen <ggaren@apple.com>
+
+ Unreviewed.
+
+ Temporarily disabling this ASSERT to get the bots green
+ while I investigate a fix.
+
+ * runtime/PrototypeMap.cpp:
+ (JSC::PrototypeMap::emptyObjectStructureForPrototype):
+
+2013-01-20 Filip Pizlo <fpizlo@apple.com>
+
+ Inserting a node into the DFG graph should not require five lines of code
+ https://bugs.webkit.org/show_bug.cgi?id=107381
+
+ Reviewed by Sam Weinig.
+
+ This adds fairly comprehensive support for inserting a node into a DFG graph in one
+ method call. A common example of this is:
+
+ m_insertionSet.insertNode(indexInBlock, DontRefChildren, DontRefNode, SpecNone, ForceOSRExit, codeOrigin);
+
+ The arguments to insert() specify what reference counting you need to have happen
+ (RefChildren => recursively refs all children, RefNode => non-recursively refs the node
+ that was created), the prediction to set (SpecNone is a common default), followed by
+ the arguments to the Node() constructor. InsertionSet::insertNode() and similar methods
+ (Graph::addNode() and BasicBlock::appendNode()) all use a common variadic template
+ function macro from DFGVariadicFunction.h. Also, all of these methods will automatically
+ non-recursively ref() the node being created if the flags say NodeMustGenerate.
+
+ In all, this new mechanism retains the flexibility of the old approach (you get to
+ manage ref counts yourself, albeit in less code) while ensuring that most code that adds
+ nodes to the graph now needs less code to do it.
+
+ In the future, we should revisit the reference counting methodology in the DFG: we could
+ do like most compilers and get rid of it entirely, or we could make it automatic. This
+ patch doesn't attempt to make any such major changes, and only seeks to simplify the
+ technique we were already using (manual ref counting).
+
+ * GNUmakefile.list.am:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/Operands.h:
+ (JSC::dumpOperands):
+ * dfg/DFGAdjacencyList.h:
+ (AdjacencyList):
+ (JSC::DFG::AdjacencyList::kind):
+ * dfg/DFGArgumentsSimplificationPhase.cpp:
+ (JSC::DFG::ArgumentsSimplificationPhase::run):
+ * dfg/DFGBasicBlock.h:
+ (DFG):
+ (BasicBlock):
+ * dfg/DFGBasicBlockInlines.h: Added.
+ (DFG):
+ * dfg/DFGCFGSimplificationPhase.cpp:
+ (JSC::DFG::CFGSimplificationPhase::run):
+ (JSC::DFG::CFGSimplificationPhase::keepOperandAlive):
+ * dfg/DFGCommon.h:
+ * dfg/DFGConstantFoldingPhase.cpp:
+ (JSC::DFG::ConstantFoldingPhase::ConstantFoldingPhase):
+ (JSC::DFG::ConstantFoldingPhase::foldConstants):
+ (JSC::DFG::ConstantFoldingPhase::addStructureTransitionCheck):
+ (JSC::DFG::ConstantFoldingPhase::paintUnreachableCode):
+ (ConstantFoldingPhase):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::FixupPhase):
+ (JSC::DFG::FixupPhase::fixupBlock):
+ (JSC::DFG::FixupPhase::fixupNode):
+ (FixupPhase):
+ (JSC::DFG::FixupPhase::checkArray):
+ (JSC::DFG::FixupPhase::blessArrayOperation):
+ (JSC::DFG::FixupPhase::injectInt32ToDoubleNode):
+ * dfg/DFGGraph.h:
+ (JSC::DFG::Graph::ref):
+ (Graph):
+ * dfg/DFGInsertionSet.h:
+ (DFG):
+ (JSC::DFG::Insertion::Insertion):
+ (JSC::DFG::Insertion::element):
+ (Insertion):
+ (JSC::DFG::InsertionSet::InsertionSet):
+ (JSC::DFG::InsertionSet::insert):
+ (InsertionSet):
+ (JSC::DFG::InsertionSet::execute):
+ * dfg/DFGNode.h:
+ (JSC::DFG::Node::Node):
+ (Node):
+ * dfg/DFGStructureCheckHoistingPhase.cpp:
+ (JSC::DFG::StructureCheckHoistingPhase::run):
+ * dfg/DFGVariadicFunction.h: Added.
+
+2013-01-19 Geoffrey Garen <ggaren@apple.com>
+
+ Track inheritance structures in a side table, instead of using a private
+ name in each prototype
+ https://bugs.webkit.org/show_bug.cgi?id=107378
+
+ Reviewed by Sam Weinig and Phil Pizlo.
+
+ This is a step toward object size inference.
+
+ Using a side table frees us to use a more complex key (a pair of
+ prototype and expected inline capacity).
+
+ It also avoids ruining inline caches for prototypes. (Adding a new private
+ name for a new inline capacity would change the prototype's structure,
+ possibly firing watchpoints, making inline caches go polymorphic, and
+ generally causing us to have a bad time.)
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri: Buildage.
+
+ * runtime/ArrayPrototype.cpp:
+ (JSC::ArrayPrototype::finishCreation): Updated to use new side table API.
+
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::cacheInheritorID): Updated to use new side table API.
+
+ (JSC::JSFunction::visitChildren): Fixed a long-standing bug where JSFunction
+ forgot to visit one of its data members (m_cachedInheritorID). This
+ wasn't a user-visible problem before because JSFunction would always
+ visit its .prototype property, which visited its m_cachedInheritorID.
+ But now, function.prototype only weakly owns function.m_cachedInheritorID.
+
+ * runtime/JSGlobalData.h:
+ (JSGlobalData): Added the map, taking care to make sure that its
+ destructor would run after the heap destructor.
+
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::reset): Updated to use new side table API.
+
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::notifyPresenceOfIndexedAccessors):
+ (JSC::JSObject::setPrototype):
+ * runtime/JSObject.h:
+ (JSObject): Updated to use new side table API, and removed lots of code
+ that used to manage the per-object private name.
+
+ * runtime/JSProxy.cpp:
+ (JSC::JSProxy::setTarget):
+ * runtime/ObjectConstructor.cpp:
+ (JSC::objectConstructorCreate):
+ * runtime/ObjectPrototype.cpp:
+ (JSC::ObjectPrototype::finishCreation): Updated to use new side table API.
+
+ * runtime/PrototypeMap.cpp: Added.
+ (JSC):
+ (JSC::PrototypeMap::addPrototype):
+ (JSC::PrototypeMap::emptyObjectStructureForPrototype):
+ * runtime/PrototypeMap.h: Added.
+ (PrototypeMap):
+ (JSC::PrototypeMap::isPrototype):
+ (JSC::PrototypeMap::clearEmptyObjectStructureForPrototype): New side table.
+ This is a simple weak map, mapping an object to the structure you should
+ use when inheriting from that object. (In future, inline capacity will
+ be a part of the mapping.)
+
+ I used two maps to preserve existing behavior that allowed us to speculate
+ about an object becoming a prototype, even if it wasn't one at the moment.
+ However, I suspect that behavior can be removed without harm.
+
+ * runtime/WeakGCMap.h:
+ (JSC::WeakGCMap::contains):
+ (WeakGCMap): I would rate myself a 6 / 10 in C++.
+
+2013-01-18 Dan Bernstein <mitz@apple.com>
+
+ Removed duplicate references to two headers in the project files.
+
+ Rubber-stamped by Mark Rowe.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2013-01-18 Michael Saboff <msaboff@apple.com>
+
+ Unreviewed build fix for building JSC with DFG_ENABLE_DEBUG_PROPAGATION_VERBOSE enabled in DFGCommon.h.
+ Fixes the case where the argument node in fixupNode is freed due to the Vector storage being reallocated.
+
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+
+2013-01-18 Michael Saboff <msaboff@apple.com>
+
+ Unreviewed build fix for release builds when DFG_ENABLE_DEBUG_PROPAGATION_VERBOSE is set to 1 in DFGCommon.h.
+
+ * dfg/DFGCFAPhase.cpp: Added #include "Operations.h"
+
+2013-01-18 Michael Saboff <msaboff@apple.com>
+
+ Change set r140201 broke editing/selection/move-by-word-visually-multi-line.html
+ https://bugs.webkit.org/show_bug.cgi?id=107340
+
+ Reviewed by Filip Pizlo.
+
+ Due to the change landed in r140201, more nodes might end up
+ generating Int32ToDouble nodes. Therefore, changed the JSVALUE64
+ constant path of compileInt32ToDouble() to use the more
+ restrictive isInt32Constant() check on the input. This check was
+ the same as the existing ASSERT() so the ASSERT was eliminated.
+
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileInt32ToDouble):
+
+2013-01-18 Viatcheslav Ostapenko <sl.ostapenko@samsung.com>
+
+ Weak GC maps should be easier to use
+ https://bugs.webkit.org/show_bug.cgi?id=107312
+
+ Reviewed by Ryosuke Niwa.
+
+ Build fix for linux platforms after r140194.
+
+ * runtime/WeakGCMap.h:
+ (WeakGCMap):
+
+2013-01-18 Michael Saboff <msaboff@apple.com>
+
+ Harden ArithDiv of integers fix-up by inserting Int32ToDouble node directly
+ https://bugs.webkit.org/show_bug.cgi?id=107321
+
+ Reviewed by Filip Pizlo.
+
+ Split out the Int32ToDouble node insertion from fixDoubleEdge() and used it directly when we're fixing up
+ an ArithDiv node with integer inputs and output for platforms that don't have integer division.
+ Since we are checking that our inputs should be ints, we can just insert the Int32ToDouble node
+ without any further checks.
+
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ (JSC::DFG::FixupPhase::fixDoubleEdge):
+ (FixupPhase):
+ (JSC::DFG::FixupPhase::injectInt32ToDoubleNode):
+
+2013-01-18 Michael Saboff <msaboff@apple.com>
+
+ Fix up of ArithDiv nodes for non-x86 CPUs is broken
+ https://bugs.webkit.org/show_bug.cgi?id=107309
+
+ Reviewed by Filip Pizlo.
+
+ Changed the logic so that we insert an Int32ToDouble node when the existing edge is not SpecDouble.
+
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixDoubleEdge):
+
+2013-01-18 Dan Bernstein <mitz@apple.com>
+
+ Tried to fix the build after r140194.
+
+ * API/JSWrapperMap.mm:
+ (-[JSWrapperMap wrapperForObject:]):
+
+2013-01-18 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: Update documentation for JSValue and JSContext
+ https://bugs.webkit.org/show_bug.cgi?id=107313
+
+ Reviewed by Geoffrey Garen.
+
+ After changing the semantics of object lifetime we need to update the API documentation to reflect the new semantics.
+
+ * API/APIJSValue.h:
+ * API/JSContext.h:
+
+2013-01-18 Balazs Kilvady <kilvadyb@homejinni.com>
+
+ r134080 causes heap problem on linux systems where PAGESIZE != 4096
+ https://bugs.webkit.org/show_bug.cgi?id=102828
+
+ Reviewed by Mark Hahnenberg.
+
+ Make MarkStackSegment::blockSize as the capacity of segments of a MarkStackArray.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def:
+ * heap/MarkStack.cpp:
+ (JSC):
+ (JSC::MarkStackArray::MarkStackArray):
+ (JSC::MarkStackArray::expand):
+ (JSC::MarkStackArray::donateSomeCellsTo):
+ (JSC::MarkStackArray::stealSomeCellsFrom):
+ * heap/MarkStack.h:
+ (JSC::MarkStackSegment::data):
+ (CapacityFromSize):
+ (MarkStackArray):
+ * heap/MarkStackInlines.h:
+ (JSC::MarkStackArray::setTopForFullSegment):
+ (JSC::MarkStackArray::append):
+ (JSC::MarkStackArray::isEmpty):
+ (JSC::MarkStackArray::size):
+ * runtime/Options.h:
+ (JSC):
+
+2013-01-18 Geoffrey Garen <ggaren@apple.com>
+
+ Weak GC maps should be easier to use
+ https://bugs.webkit.org/show_bug.cgi?id=107312
+
+ Reviewed by Sam Weinig.
+
+ This patch changes WeakGCMap to not use a WeakImpl finalizer to remove
+ items from the map, and to instead have the map automatically remove
+ stale items itself upon insertion. This has a few advantages:
+
+ (1) WeakGCMap is now compatible with all the specializations you would
+ use for HashMap.
+
+ (2) There's no need for clients to write special finalization munging
+ functions.
+
+ (3) Clients can specify custom value finalizers if they like.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def: Def!
+
+ * API/JSWeakObjectMapRefPrivate.cpp: Setter no longer requires a global
+ data, since we've reduced interdependency.
+
+ * heap/Handle.h: No more need to forward declare, since we've reduced
+ interdependency.
+
+ * heap/Weak.h:
+ (Weak): Use explicit so we can assign directly to a weak map iterator
+ without ambiguity between Weak<T> and PassWeak<T>.
+
+ * runtime/Structure.cpp:
+ (JSC::StructureTransitionTable::add): See above.
+
+ * runtime/Structure.h:
+ (JSC):
+ * runtime/StructureTransitionTable.h:
+ (StructureTransitionTable): Bad code goes away, programmer happy.
+
+ * runtime/WeakGCMap.h:
+ (JSC):
+ (WeakGCMap):
+ (JSC::WeakGCMap::WeakGCMap):
+ (JSC::WeakGCMap::set):
+ (JSC::WeakGCMap::add):
+ (JSC::WeakGCMap::find):
+ (JSC::WeakGCMap::contains):
+ (JSC::WeakGCMap::gcMap):
+ (JSC::WeakGCMap::gcMapIfNeeded): Inherit from HashMap and override any
+ function that might observe a Weak<T> that has died, just enough to
+ make such items appear as if they are not in the table.
+
+2013-01-18 Michael Saboff <msaboff@apple.com>
+
+ Refactor isPowerOf2() and add getLSBSet()
+ https://bugs.webkit.org/show_bug.cgi?id=107306
+
+ Reviewed by Filip Pizlo.
+
+ Moved implementation of isPowerOf2() to new hasOneBitSet() in wtf/MathExtras.h.
+
+ * runtime/PropertyMapHashTable.h:
+ (JSC::isPowerOf2):
+
+2013-01-17 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: Clean up JSValue.mm
+ https://bugs.webkit.org/show_bug.cgi?id=107163
+
+ Reviewed by Darin Adler.
+
+ m_context is no longer weak, so there is now a lot of dead code in in JSValue.mm, and a wasted message send
+ on every API call. In the head of just about every method in JSValue.mm we're doing:
+
+ JSContext *context = [self context];
+ if (!context)
+ return nil;
+
+ This is getting a retained copy of the context, which is no longer necessary now m_context is no longer weak.
+ We can just delete all these lines from all functions doing this, and where they were referring to the local
+ variable 'context', instead we can just access m_context directly.
+
+ Since we're already going to be modifying most of JSValue.mm, we'll also do the following:
+
+ 1) context @property is no longer weak – the context property is declared as:
+
+ @property(readonly, weak) JSContext *context;
+
+ This is really only informative (since we're not presently synthesizing the ivar), but it is now misleading.
+ We should change it to:
+
+ @property(readonly, retain) JSContext *context;
+
+ 2) the JSContext ivar and accessor can be automatically generated. Since we're no longer doing anything
+ special with m_context, we can just let the compiler handle the ivar for us. We'll delete:
+
+ JSContext *m_context;
+
+ and:
+
+ - (JSContext *)context
+ {
+ return m_context;
+
+ }
+
+ and find&replace "m_context" to "_context" in JSValue.mm.
+
+ * API/APIJSValue.h:
+ * API/JSValue.mm:
+ (-[JSValue toObject]):
+ (-[JSValue toBool]):
+ (-[JSValue toDouble]):
+ (-[JSValue toNumber]):
+ (-[JSValue toString]):
+ (-[JSValue toDate]):
+ (-[JSValue toArray]):
+ (-[JSValue toDictionary]):
+ (-[JSValue valueForProperty:]):
+ (-[JSValue setValue:forProperty:]):
+ (-[JSValue deleteProperty:]):
+ (-[JSValue hasProperty:]):
+ (-[JSValue defineProperty:descriptor:]):
+ (-[JSValue valueAtIndex:]):
+ (-[JSValue setValue:atIndex:]):
+ (-[JSValue isUndefined]):
+ (-[JSValue isNull]):
+ (-[JSValue isBoolean]):
+ (-[JSValue isNumber]):
+ (-[JSValue isString]):
+ (-[JSValue isObject]):
+ (-[JSValue isEqualToObject:]):
+ (-[JSValue isEqualWithTypeCoercionToObject:]):
+ (-[JSValue isInstanceOf:]):
+ (-[JSValue callWithArguments:]):
+ (-[JSValue constructWithArguments:]):
+ (-[JSValue invokeMethod:withArguments:]):
+ (-[JSValue objectForKeyedSubscript:]):
+ (-[JSValue setObject:forKeyedSubscript:]):
+ (-[JSValue initWithValue:inContext:]):
+ (-[JSValue dealloc]):
+ (-[JSValue description]):
+
+2013-01-17 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C API: Clean up JSValue
+ https://bugs.webkit.org/show_bug.cgi?id=107156
+
+ Reviewed by Oliver Hunt.
+
+ JSContext m_protectCounts, protect, unprotect are all now unnecessary overhead, and should all be removed.
+ These exist to handle the context going away before the value does; the context needs to be able to unprotect
+ values early. Since the value is now keeping the context alive there is no longer any danger of this happening;
+ instead we should just protect/unprotect the value in JSValue's init/dealloc methods.
+
+ * API/JSContext.mm:
+ (-[JSContext dealloc]):
+ * API/JSContextInternal.h:
+ * API/JSValue.mm:
+ (-[JSValue initWithValue:inContext:]):
+ (-[JSValue dealloc]):
+
+2013-01-17 Filip Pizlo <fpizlo@apple.com>
+
+ DFG Node::ref() and Node::deref() should not return bool, and should have postfixRef variants
+ https://bugs.webkit.org/show_bug.cgi?id=107147
+
+ Reviewed by Mark Hahnenberg.
+
+ This small refactoring will enable a world where ref() returns Node*, which is useful for
+ https://bugs.webkit.org/show_bug.cgi?id=106868. Also, while this refactoring does lead to
+ slightly less terse code, it's also slightly more self-explanatory. I could never quite
+ remember what the meaning of the bool return from ref() and deref() was.
+
+ * dfg/DFGGraph.cpp:
+ (JSC::DFG::Graph::collectGarbage):
+ * dfg/DFGGraph.h:
+ (JSC::DFG::Graph::ref):
+ (JSC::DFG::Graph::deref):
+ * dfg/DFGNode.h:
+ (JSC::DFG::Node::ref):
+ (Node):
+ (JSC::DFG::Node::postfixRef):
+ (JSC::DFG::Node::deref):
+ (JSC::DFG::Node::postfixDeref):
+
+2013-01-17 Alexey Proskuryakov <ap@apple.com>
+
+ Added svn:ignore=*.pyc, so that ud_opcode.pyc and ud_optable.pyc don't show up
+ in svn stat.
+
+ * disassembler/udis86: Added property svn:ignore.
+
+2013-01-16 Filip Pizlo <fpizlo@apple.com>
+
+ DFG 32_64 backend doesn't check for hasArrayStorage() in NewArrayWithSize
+ https://bugs.webkit.org/show_bug.cgi?id=107081
+
+ Reviewed by Michael Saboff.
+
+ This bug led to the 32_64 backend emitting contiguous allocation code to allocate
+ ArrayStorage arrays. This then led to all manner of heap corruption, since
+ subsequent array accesses would be accessing the contiguous array "as if" it was
+ an arraystorage array.
+
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2013-01-16 Jonathan Liu <net147@gmail.com>
+
+ Add missing sys/mman.h include on Mac
+ https://bugs.webkit.org/show_bug.cgi?id=98089
+
+ Reviewed by Darin Adler.
+
+ The madvise function and MADV_FREE constant require sys/mman.h.
+
+ * jit/ExecutableAllocatorFixedVMPool.cpp:
+
+2013-01-15 Michael Saboff <msaboff@apple.com>
+
+ DFG X86: division in the used-as-int case doesn't correctly check for -2^31/-1
+ https://bugs.webkit.org/show_bug.cgi?id=106978
+
+ Reviewed by Filip Pizlo.
+
+ Changed the numerator equal to -2^31 check to just return if we expect an integer
+ result, since the check is after we have determined that the denominator is -1.
+ The int result of -2^31 / -1 is -2^31, so just return the numerator as the result.
+
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileIntegerArithDivForX86):
+
+2013-01-15 Levi Weintraub <leviw@chromium.org>
+
+ Unreviewed, rolling out r139792.
+ http://trac.webkit.org/changeset/139792
+ https://bugs.webkit.org/show_bug.cgi?id=106970
+
+ Broke the windows build.
+
+ * bytecode/GlobalResolveInfo.h: Removed property svn:mergeinfo.
+
+2013-01-15 Pratik Solanki <psolanki@apple.com>
+
+ Use MADV_FREE_REUSABLE to return JIT memory to OS
+ https://bugs.webkit.org/show_bug.cgi?id=106830
+ <rdar://problem/11437701>
+
+ Reviewed by Geoffrey Garen.
+
+ Use MADV_FREE_REUSABLE to return JIT memory on OSes that have the underlying madvise bug
+ fixed.
+
+ * jit/ExecutableAllocatorFixedVMPool.cpp:
+ (JSC::FixedVMPoolExecutableAllocator::notifyPageIsFree):
+
+2013-01-15 Levi Weintraub <leviw@chromium.org>
+
+ Unreviewed, rolling out r139790.
+ http://trac.webkit.org/changeset/139790
+ https://bugs.webkit.org/show_bug.cgi?id=106948
+
+ The patch is failing its own test.
+
+ * bytecode/GlobalResolveInfo.h: Removed property svn:mergeinfo.
+
+2013-01-15 Zan Dobersek <zandobersek@gmail.com>
+
+ [Autotools] Unify JavaScriptCore sources list, regardless of target OS
+ https://bugs.webkit.org/show_bug.cgi?id=106007
+
+ Reviewed by Gustavo Noronha Silva.
+
+ Include the Source/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp target
+ in the general sources list as it is guarded by the ENABLE_EXECUTABLE_ALLOCATOR_FIXED
+ feature define. This define is only used on 64-bit architecture and indirectly depends
+ on enabling either JIT or YARR JIT feature. Both of these defines are disabled on
+ Windows OS when using 64-bit architecture so there's no need to add this target to
+ sources only when the target OS is Windows.
+
+ * GNUmakefile.list.am:
+
+2013-01-11 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should not forget that it had proved something to be a constant during a merge just because it's merging against the empty value
+ https://bugs.webkit.org/show_bug.cgi?id=106727
+
+ Reviewed by Oliver Hunt.
+
+ The problem was this statement:
+
+ if (m_value != other.m_value)
+ m_value = JSValue();
+
+ This is well-intentioned, in the sense that if we want our abstract value (i.e. this) to become the superset of the other
+ abstract value, and the two abstract values have proven different constants, then our abstract value should rescind its
+ claim that it has been proven to be constant. But this misses the special case that if the other abstract value is
+ completely clear (meaning that it wishes to contribute zero information and so the superset operation shouldn't change
+ this), it will have a clear m_value. So, the code prior to this patch would rescind the constant proof even though it
+ didn't have to.
+
+ This comes up rarely and I don't believe it will be a performance win, but it is good to have the CFA been consistently
+ precise as often as possible.
+
+ * dfg/DFGAbstractValue.h:
+ (JSC::DFG::AbstractValue::merge):
+
+2013-01-11 Filip Pizlo <fpizlo@apple.com>
+
+ Python implementation reports "MemoryError" instead of doing things
+ https://bugs.webkit.org/show_bug.cgi?id=106690
+
+ Reviewed by Oliver Hunt.
+
+ The bug was that the CFA was assuming that a variable is dead at the end of a basic block and hence doesn't need to
+ be merged to the next block if the last mention of the variable was dead. This is almost correct, except that it
+ doesn't work if the last mention is a GetLocal - the GetLocal itself may be dead, but that doesn't mean that the
+ variable is dead - it may still be live. The appropriate thing to do is to look at the GetLocal's Phi. If the
+ variable is used in the next block then the next block will have a reference to the last mention in our block unless
+ that last mention is a GetLocal, in which case it will link to the Phi. Doing it this way captures everything that
+ the CFA wants: if the last use is a live GetLocal then the CFA needs to consider the GetLocal itself for possible
+ refinements to the proof of the value in the variable, but if the GetLocal is dead, then this must mean that the
+ variable is not mentioned in the block but may still be "passed through" it, which is what the Phi will tell us.
+ Note that it is not possible for the GetLocal to refer to anything other than a Phi, and it is also not possible
+ for the last mention of a variable to be a dead GetLocal while there are other mentions that aren't dead - if
+ there had been SetLocals or GetLocals prior to the dead one then the dead one wouldn't have been emitted by the
+ parser.
+
+ This also fixes a similar bug in the handling of captured variables. If a variable is captured, then it doesn't
+ matter if the last mention is dead, or not. Either way, we already know that a captured variable will be live in
+ the next block, so we must merge it no matter what.
+
+ Finally, this change makes the output of Operands dumping a bit more verbose: it now prints the variable name next
+ to each variable's dump. I've often found the lack of this information confusing particularly for operand dumps
+ that involve a lot of variables.
+
+ * bytecode/Operands.h:
+ (JSC::dumpOperands):
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::mergeStateAtTail):
+
+2013-01-14 Roger Fong <roger_fong@apple.com>
+
+ Unreviewed. Fix vcproj file. Missing file tag after http://trac.webkit.org/changeset/139541.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+
+2013-01-13 Filip Pizlo <fpizlo@apple.com>
+
+ DFG phases that store per-node information should store it in Node itself rather than using a secondary vector
+ https://bugs.webkit.org/show_bug.cgi?id=106753
+
+ Reviewed by Geoffrey Garen.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::AbstractState):
+ (JSC::DFG::AbstractState::beginBasicBlock):
+ (JSC::DFG::AbstractState::dump):
+ * dfg/DFGAbstractState.h:
+ (JSC::DFG::AbstractState::forNode):
+ (AbstractState):
+ * dfg/DFGCFGSimplificationPhase.cpp:
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::CSEPhase):
+ (JSC::DFG::CSEPhase::performSubstitution):
+ (JSC::DFG::CSEPhase::setReplacement):
+ (CSEPhase):
+ * dfg/DFGNode.h:
+ (Node):
+
+2013-01-12 Tim Horton <timothy_horton@apple.com>
+
+ Unreviewed build fix.
+
+ * API/JSBlockAdaptor.mm:
+ * API/JSContext.mm:
+ * API/JSValue.mm:
+
+2013-01-12 Csaba Osztrogonác <ossy@webkit.org>
+
+ Unreviewed 64 bit buildfix after r139496.
+
+ * dfg/DFGOperations.cpp:
+
+2013-01-11 Filip Pizlo <fpizlo@apple.com>
+
+ Unreviewed, speculative build fix.
+
+ * API/JSWrapperMap.mm:
+
+2013-01-10 Filip Pizlo <fpizlo@apple.com>
+
+ JITThunks should not compile only because of luck
+ https://bugs.webkit.org/show_bug.cgi?id=105696
+
+ Rubber stamped by Sam Weinig and Geoffrey Garen.
+
+ This patch was supposed to just move JITThunks into its own file. But then I
+ realized that there is a horrible circular dependency chain between JSCell,
+ JSGlobalData, CallFrame, and Weak, which only works because of magical include
+ order in JITStubs.h, and the fact that JSGlobalData.h includes JITStubs.h
+ before it includes JSCell or JSValue.
+
+ I first tried to just get JITThunks.h to just magically do the same pointless
+ includes that JITStubs.h had, but then I decided to actually fix the underflying
+ problem, which was that JSCell needed CallFrame, CallFrame needed JSGlobalData,
+ JSGlobalData needed JITThunks, JITThunks needed Weak, and Weak needed JSCell.
+ Now, all of JSCell's outgoing dependencies are placed in JSCellInlines.h. This
+ also gave me an opportunity to move JSValue inline methods from JSCell.h into
+ JSValueInlines.h. But to make this really work, I needed to remove includes of
+ *Inlines.h from other headers (CodeBlock.h for example included JSValueInlines.h,
+ which defeats the whole entire purpose of having an Inlines.h file), and I needed
+ to add includes of *Inlines.h into a bunch of .cpp files. I did this mostly by
+ having .cpp files include Operations.h. In future, if you're adding a .cpp file
+ to JSC, you'll almost certainly have to include Operations.h unless you enjoy
+ link errors.
+
+ * API/JSBase.cpp:
+ * API/JSCallbackConstructor.cpp:
+ * API/JSCallbackFunction.cpp:
+ * API/JSCallbackObject.cpp:
+ * API/JSClassRef.cpp:
+ * API/JSContextRef.cpp:
+ * API/JSObjectRef.cpp:
+ * API/JSScriptRef.cpp:
+ * API/JSWeakObjectMapRefPrivate.cpp:
+ * JSCTypedArrayStubs.h:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/ArrayAllocationProfile.cpp:
+ * bytecode/CodeBlock.cpp:
+ * bytecode/GetByIdStatus.cpp:
+ * bytecode/LazyOperandValueProfile.cpp:
+ * bytecode/ResolveGlobalStatus.cpp:
+ * bytecode/SpeculatedType.cpp:
+ * bytecode/UnlinkedCodeBlock.cpp:
+ * bytecompiler/BytecodeGenerator.cpp:
+ * debugger/Debugger.cpp:
+ * debugger/DebuggerActivation.cpp:
+ * debugger/DebuggerCallFrame.cpp:
+ * dfg/DFGArgumentsSimplificationPhase.cpp:
+ * dfg/DFGArrayMode.cpp:
+ * dfg/DFGByteCodeParser.cpp:
+ * dfg/DFGConstantFoldingPhase.cpp:
+ * dfg/DFGDriver.cpp:
+ * dfg/DFGFixupPhase.cpp:
+ * dfg/DFGGraph.cpp:
+ * dfg/DFGJITCompiler.cpp:
+ * dfg/DFGOSREntry.cpp:
+ * dfg/DFGOSRExitCompiler.cpp:
+ * dfg/DFGOSRExitCompiler32_64.cpp:
+ * dfg/DFGOSRExitCompiler64.cpp:
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::silentSavePlanForGPR):
+ (DFG):
+ (JSC::DFG::SpeculativeJIT::silentSavePlanForFPR):
+ (JSC::DFG::SpeculativeJIT::silentSpill):
+ (JSC::DFG::SpeculativeJIT::silentFill):
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ * dfg/DFGSpeculativeJIT64.cpp:
+ * dfg/DFGStructureCheckHoistingPhase.cpp:
+ * dfg/DFGVariableEventStream.cpp:
+ * heap/CopiedBlock.h:
+ * heap/CopiedSpace.cpp:
+ * heap/HandleSet.cpp:
+ * heap/Heap.cpp:
+ * heap/HeapStatistics.cpp:
+ * heap/SlotVisitor.cpp:
+ * heap/WeakBlock.cpp:
+ * interpreter/CallFrame.cpp:
+ * interpreter/CallFrame.h:
+ * jit/ClosureCallStubRoutine.cpp:
+ * jit/GCAwareJITStubRoutine.cpp:
+ * jit/JIT.cpp:
+ * jit/JITArithmetic.cpp:
+ * jit/JITArithmetic32_64.cpp:
+ * jit/JITCall.cpp:
+ * jit/JITCall32_64.cpp:
+ * jit/JITCode.h:
+ * jit/JITExceptions.cpp:
+ * jit/JITStubs.h:
+ * jit/JITThunks.h:
+ * jsc.cpp:
+ * llint/LLIntExceptions.cpp:
+ * profiler/LegacyProfiler.cpp:
+ * profiler/ProfileGenerator.cpp:
+ * profiler/ProfilerBytecode.cpp:
+ * profiler/ProfilerBytecodeSequence.cpp:
+ * profiler/ProfilerBytecodes.cpp:
+ * profiler/ProfilerCompilation.cpp:
+ * profiler/ProfilerCompiledBytecode.cpp:
+ * profiler/ProfilerDatabase.cpp:
+ * profiler/ProfilerOSRExit.cpp:
+ * profiler/ProfilerOSRExitSite.cpp:
+ * profiler/ProfilerOrigin.cpp:
+ * profiler/ProfilerOriginStack.cpp:
+ * profiler/ProfilerProfiledBytecodes.cpp:
+ * runtime/ArgList.cpp:
+ * runtime/Arguments.cpp:
+ * runtime/ArrayConstructor.cpp:
+ * runtime/BooleanConstructor.cpp:
+ * runtime/BooleanObject.cpp:
+ * runtime/BooleanPrototype.cpp:
+ * runtime/CallData.cpp:
+ * runtime/CodeCache.cpp:
+ * runtime/Completion.cpp:
+ * runtime/ConstructData.cpp:
+ * runtime/DateConstructor.cpp:
+ * runtime/DateInstance.cpp:
+ * runtime/DatePrototype.cpp:
+ * runtime/Error.cpp:
+ * runtime/ErrorConstructor.cpp:
+ * runtime/ErrorInstance.cpp:
+ * runtime/ErrorPrototype.cpp:
+ * runtime/ExceptionHelpers.cpp:
+ * runtime/Executable.cpp:
+ * runtime/FunctionConstructor.cpp:
+ * runtime/FunctionPrototype.cpp:
+ * runtime/GetterSetter.cpp:
+ * runtime/Identifier.cpp:
+ * runtime/InternalFunction.cpp:
+ * runtime/JSActivation.cpp:
+ * runtime/JSBoundFunction.cpp:
+ * runtime/JSCell.cpp:
+ * runtime/JSCell.h:
+ (JSC):
+ * runtime/JSCellInlines.h: Added.
+ (JSC):
+ (JSC::JSCell::JSCell):
+ (JSC::JSCell::finishCreation):
+ (JSC::JSCell::structure):
+ (JSC::JSCell::visitChildren):
+ (JSC::allocateCell):
+ (JSC::isZapped):
+ (JSC::JSCell::isObject):
+ (JSC::JSCell::isString):
+ (JSC::JSCell::isGetterSetter):
+ (JSC::JSCell::isProxy):
+ (JSC::JSCell::isAPIValueWrapper):
+ (JSC::JSCell::setStructure):
+ (JSC::JSCell::methodTable):
+ (JSC::JSCell::inherits):
+ (JSC::JSCell::fastGetOwnPropertySlot):
+ (JSC::JSCell::fastGetOwnProperty):
+ (JSC::JSCell::toBoolean):
+ * runtime/JSDateMath.cpp:
+ * runtime/JSFunction.cpp:
+ * runtime/JSFunction.h:
+ (JSC):
+ * runtime/JSGlobalData.h:
+ (JSC):
+ (JSGlobalData):
+ * runtime/JSGlobalObject.cpp:
+ * runtime/JSGlobalObjectFunctions.cpp:
+ * runtime/JSLock.cpp:
+ * runtime/JSNameScope.cpp:
+ * runtime/JSNotAnObject.cpp:
+ * runtime/JSONObject.cpp:
+ * runtime/JSObject.h:
+ (JSC):
+ * runtime/JSProxy.cpp:
+ * runtime/JSScope.cpp:
+ * runtime/JSSegmentedVariableObject.cpp:
+ * runtime/JSString.h:
+ (JSC):
+ * runtime/JSStringJoiner.cpp:
+ * runtime/JSSymbolTableObject.cpp:
+ * runtime/JSValue.cpp:
+ * runtime/JSValueInlines.h:
+ (JSC::JSValue::toInt32):
+ (JSC::JSValue::toUInt32):
+ (JSC):
+ (JSC::JSValue::isUInt32):
+ (JSC::JSValue::asUInt32):
+ (JSC::JSValue::asNumber):
+ (JSC::jsNaN):
+ (JSC::JSValue::JSValue):
+ (JSC::JSValue::encode):
+ (JSC::JSValue::decode):
+ (JSC::JSValue::operator bool):
+ (JSC::JSValue::operator==):
+ (JSC::JSValue::operator!=):
+ (JSC::JSValue::isEmpty):
+ (JSC::JSValue::isUndefined):
+ (JSC::JSValue::isNull):
+ (JSC::JSValue::isUndefinedOrNull):
+ (JSC::JSValue::isCell):
+ (JSC::JSValue::isInt32):
+ (JSC::JSValue::isDouble):
+ (JSC::JSValue::isTrue):
+ (JSC::JSValue::isFalse):
+ (JSC::JSValue::tag):
+ (JSC::JSValue::payload):
+ (JSC::JSValue::asInt32):
+ (JSC::JSValue::asDouble):
+ (JSC::JSValue::asCell):
+ (JSC::JSValue::isNumber):
+ (JSC::JSValue::isBoolean):
+ (JSC::JSValue::asBoolean):
+ (JSC::reinterpretDoubleToInt64):
+ (JSC::reinterpretInt64ToDouble):
+ (JSC::JSValue::isString):
+ (JSC::JSValue::isPrimitive):
+ (JSC::JSValue::isGetterSetter):
+ (JSC::JSValue::isObject):
+ (JSC::JSValue::getString):
+ (JSC::::getString):
+ (JSC::JSValue::getObject):
+ (JSC::JSValue::getUInt32):
+ (JSC::JSValue::toPrimitive):
+ (JSC::JSValue::getPrimitiveNumber):
+ (JSC::JSValue::toNumber):
+ (JSC::JSValue::toObject):
+ (JSC::JSValue::isFunction):
+ (JSC::JSValue::inherits):
+ (JSC::JSValue::toThisObject):
+ (JSC::JSValue::get):
+ (JSC::JSValue::put):
+ (JSC::JSValue::putByIndex):
+ (JSC::JSValue::structureOrUndefined):
+ (JSC::JSValue::equal):
+ (JSC::JSValue::equalSlowCaseInline):
+ (JSC::JSValue::strictEqualSlowCaseInline):
+ (JSC::JSValue::strictEqual):
+ * runtime/JSVariableObject.cpp:
+ * runtime/JSWithScope.cpp:
+ * runtime/JSWrapperObject.cpp:
+ * runtime/LiteralParser.cpp:
+ * runtime/Lookup.cpp:
+ * runtime/NameConstructor.cpp:
+ * runtime/NameInstance.cpp:
+ * runtime/NamePrototype.cpp:
+ * runtime/NativeErrorConstructor.cpp:
+ * runtime/NativeErrorPrototype.cpp:
+ * runtime/NumberConstructor.cpp:
+ * runtime/NumberObject.cpp:
+ * runtime/ObjectConstructor.cpp:
+ * runtime/ObjectPrototype.cpp:
+ * runtime/Operations.h:
+ (JSC):
+ * runtime/PropertySlot.cpp:
+ * runtime/RegExp.cpp:
+ * runtime/RegExpCache.cpp:
+ * runtime/RegExpCachedResult.cpp:
+ * runtime/RegExpConstructor.cpp:
+ * runtime/RegExpMatchesArray.cpp:
+ * runtime/RegExpObject.cpp:
+ * runtime/RegExpPrototype.cpp:
+ * runtime/SmallStrings.cpp:
+ * runtime/SparseArrayValueMap.cpp:
+ * runtime/StrictEvalActivation.cpp:
+ * runtime/StringConstructor.cpp:
+ * runtime/StringObject.cpp:
+ * runtime/StringRecursionChecker.cpp:
+ * runtime/Structure.h:
+ (JSC):
+ * runtime/StructureChain.cpp:
+ * runtime/TimeoutChecker.cpp:
+ * testRegExp.cpp:
+
+2013-01-11 Filip Pizlo <fpizlo@apple.com>
+
+ If you use Phantom to force something to be live across an OSR exit, you should put it after the OSR exit
+ https://bugs.webkit.org/show_bug.cgi?id=106724
+
+ Reviewed by Oliver Hunt.
+
+ In cases where we were getting it wrong, I think it was benign because we would either already have an
+ OSR exit prior to there, or the operand would be a constant. But still, it's good to get this right.
+
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseBlock):
+
+2013-01-11 Filip Pizlo <fpizlo@apple.com>
+
+ Phantom(GetLocal) should be treated as relevant to OSR
+ https://bugs.webkit.org/show_bug.cgi?id=106715
+
+ Reviewed by Mark Hahnenberg.
+
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::performBlockCSE):
+
+2013-01-11 Pratik Solanki <psolanki@apple.com>
+
+ Fix function name typo ProgramExecutable::initalizeGlobalProperties()
+ https://bugs.webkit.org/show_bug.cgi?id=106701
+
+ Reviewed by Geoffrey Garen.
+
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::execute):
+ * runtime/Executable.cpp:
+ (JSC::ProgramExecutable::initializeGlobalProperties):
+ * runtime/Executable.h:
+
+2013-01-11 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ testapi is failing with a block-related error in the Objc API
+ https://bugs.webkit.org/show_bug.cgi?id=106055
+
+ Reviewed by Filip Pizlo.
+
+ Same bug as in testapi.mm. We need to actually call the static block, rather than casting the block to a bool.
+
+ * API/ObjCCallbackFunction.mm:
+ (blockSignatureContainsClass):
+
+2013-01-11 Filip Pizlo <fpizlo@apple.com>
+
+ Add a run-time option to print bytecode at DFG compile time
+ https://bugs.webkit.org/show_bug.cgi?id=106704
+
+ Reviewed by Mark Hahnenberg.
+
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseCodeBlock):
+ * runtime/Options.h:
+ (JSC):
+
+2013-01-11 Filip Pizlo <fpizlo@apple.com>
+
+ It should be possible to enable verbose printing of each OSR exit at run-time (rather than compile-time) and it should print register state
+ https://bugs.webkit.org/show_bug.cgi?id=106700
+
+ Reviewed by Mark Hahnenberg.
+
+ * dfg/DFGAssemblyHelpers.h:
+ (DFG):
+ (JSC::DFG::AssemblyHelpers::debugCall):
+ * dfg/DFGCommon.h:
+ * dfg/DFGOSRExit.h:
+ (DFG):
+ * dfg/DFGOSRExitCompiler32_64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGOSRExitCompiler64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGOperations.h:
+ * runtime/Options.h:
+ (JSC):
+
+2013-01-11 Geoffrey Garen <ggaren@apple.com>
+
+ Removed getDirectLocation and offsetForLocation and all their uses
+ https://bugs.webkit.org/show_bug.cgi?id=106692
+
+ Reviewed by Filip Pizlo.
+
+ getDirectLocation() and its associated offsetForLocation() relied on
+ detailed knowledge of the rules of PropertyOffset, JSObject, and
+ Structure, which is a hard thing to reverse-engineer reliably. Luckily,
+ it wasn't needed, and all clients either wanted a true value or a
+ PropertyOffset. So, I refactored accordingly.
+
+ * dfg/DFGOperations.cpp: Renamed putDirectOffset to putDirect, to clarify
+ that we are not putting an offset.
+
+ * runtime/JSActivation.cpp:
+ (JSC::JSActivation::getOwnPropertySlot): Get a value instead of a value
+ pointer, since we never wanted a pointer to begin with.
+
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::getOwnPropertySlot): Use a PropertyOffset instead of a pointer,
+ so we don't have to reverse-engineer the offset from the pointer.
+
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::put):
+ (JSC::JSObject::resetInheritorID):
+ (JSC::JSObject::inheritorID):
+ (JSC::JSObject::removeDirect):
+ (JSC::JSObject::fillGetterPropertySlot):
+ (JSC::JSObject::getOwnPropertyDescriptor): Renamed getDirectOffset and
+ putDirectOffset, as explaind above. We want to use the name "getDirectOffset"
+ for when the thing you're getting is the offset.
+
+ * runtime/JSObject.h:
+ (JSC::JSObject::getDirect):
+ (JSC::JSObject::getDirectOffset): Changed getDirectLocation to getDirectOffset,
+ since clients really wants PropertyOffsets and not locations.
+
+ (JSObject::offsetForLocation): Removed this function because it was hard
+ to get right.
+
+ (JSC::JSObject::putDirect):
+ (JSC::JSObject::putDirectUndefined):
+ (JSC::JSObject::inlineGetOwnPropertySlot):
+ (JSC::JSObject::putDirectInternal):
+ (JSC::JSObject::putDirectWithoutTransition):
+ * runtime/JSScope.cpp:
+ (JSC::executeResolveOperations):
+ (JSC::JSScope::resolvePut):
+ * runtime/JSValue.cpp:
+ (JSC::JSValue::putToPrimitive): Updated for renames.
+
+ * runtime/Lookup.cpp:
+ (JSC::setUpStaticFunctionSlot): Use a PropertyOffset instead of a pointer,
+ so we don't have to reverse-engineer the offset from the pointer.
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::flattenDictionaryStructure): Updated for renames.
+
+2013-01-11 Geoffrey Garen <ggaren@apple.com>
+
+ Removed an unused version of getDirectLocation
+ https://bugs.webkit.org/show_bug.cgi?id=106691
+
+ Reviewed by Gavin Barraclough.
+
+ getDirectLocation is a weird operation. Removing the unused version is
+ the easy part.
+
+ * runtime/JSObject.h:
+ (JSObject):
+
+2013-01-11 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Objective-C objects that are passed to JavaScript leak (until the JSContext is destroyed)
+ https://bugs.webkit.org/show_bug.cgi?id=106056
+
+ Reviewed by Darin Adler.
+
+ * API/APIJSValue.h:
+ * API/JSValue.mm: Make the reference to the JSContext strong.
+ (-[JSValue context]):
+ (-[JSValue initWithValue:inContext:]):
+ (-[JSValue dealloc]):
+ * API/JSWrapperMap.mm: Make the reference back from wrappers to Obj-C objects weak instead of strong.
+ Also add an explicit WeakGCMap in the JSWrapperMap rather than using Obj-C associated object API which
+ was causing memory leaks.
+ (wrapperClass):
+ (-[JSObjCClassInfo wrapperForObject:]):
+ (-[JSWrapperMap initWithContext:]):
+ (-[JSWrapperMap dealloc]):
+ (-[JSWrapperMap wrapperForObject:]):
+
+2013-01-11 Geoffrey Garen <ggaren@apple.com>
+
+ Fixed some bogus PropertyOffset ASSERTs
+ https://bugs.webkit.org/show_bug.cgi?id=106686
+
+ Reviewed by Gavin Barraclough.
+
+ The ASSERTs were passing a JSType instead of an inlineCapacity, due to
+ an incomplete refactoring.
+
+ The compiler didn't catch this because both types are int underneath.
+
+ * runtime/JSObject.h:
+ (JSC::JSObject::getDirect):
+ (JSC::JSObject::getDirectLocation):
+ (JSC::JSObject::offsetForLocation):
+ * runtime/Structure.cpp:
+ (JSC::Structure::addPropertyTransitionToExistingStructure): Validate against
+ our inline capacity, as we intended.
+
+2013-01-11 Geoffrey Garen <ggaren@apple.com>
+
+ Rename propertyOffsetFor => offsetForPropertyNumber
+ https://bugs.webkit.org/show_bug.cgi?id=106685
+
+ Reviewed by Gavin Barraclough.
+
+ Since the argument is just a typedef and not an object, I wanted to clarify the meaning.
+
+ * runtime/PropertyMapHashTable.h:
+ (JSC::PropertyTable::nextOffset): Updated for rename.
+
+ * runtime/PropertyOffset.h:
+ (JSC::offsetForPropertyNumber): Renamed. Also changed some PropertyOffset variables
+ to plain ints, because they're not actually on the PropertyOffsets number line.
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::flattenDictionaryStructure):
+ * runtime/Structure.h:
+ (JSC::Structure::lastValidOffset): Updated for rename.
+
+2013-01-10 Zan Dobersek <zandobersek@gmail.com>
+
+ Remove the ENABLE_ANIMATION_API feature define occurences
+ https://bugs.webkit.org/show_bug.cgi?id=106544
+
+ Reviewed by Simon Fraser.
+
+ The Animation API code was removed in r137243. The ENABLE_ANIMATION_API
+ feature define handling still lingers in various build systems and configurations
+ but is of no use, so it should be removed.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2013-01-09 Roger Fong <roger_fong@apple.com>
+
+ Unreviewed. Just move the JavaScriptCore exports file around in the vcproj to make things clearer.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+
+2013-01-09 Filip Pizlo <fpizlo@apple.com>
+
+ Dont use a node reference after appending to the graph.
+ https://bugs.webkit.org/show_bug.cgi?id=103305
+ <rdar://problem/12753096>
+
+ Reviewed by Mark Hahnenberg.
+
+ * dfg/DFGArgumentsSimplificationPhase.cpp:
+ (JSC::DFG::ArgumentsSimplificationPhase::run):
+
+2013-01-09 Roger Fong <roger_fong@apple.com>
+
+ Rename export files to make them more easily findable.
+ https://bugs.webkit.org/show_bug.cgi?id=98695.
+
+ Reviewed by Timothy Horton.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Removed.
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreExports.def: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def.
+
+2013-01-09 Carlos Garcia Campos <cgarcia@igalia.com>
+
+ Unreviewed. Fix make distcheck.
+
+ * GNUmakefile.list.am: Add mips.rb to offlineasm_nosources.
+
+2013-01-08 Oliver Hunt <oliver@apple.com>
+
+ Support op_typeof in the DFG
+ https://bugs.webkit.org/show_bug.cgi?id=98898
+
+ Reviewed by Filip Pizlo.
+
+ Adds a TypeOf node to the DFG to support op_typeof.
+
+ To avoid adding too much GC horror, this also makes the
+ common strings portion of the SmallString cache strongly
+ referenced.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ We try to determine the result early here, and substitute in a constant.
+ Otherwise we leave the node intact, and set the result type to SpecString.
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ Parse op_typeof
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ TypeOf nodes can be subjected to pure CSE
+ * dfg/DFGCapabilities.h:
+ (JSC::DFG::canCompileOpcode):
+ We can handle typeof.
+ * dfg/DFGNodeType.h:
+ (DFG):
+ Define the node.
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGOperations.h:
+ Add operationTypeOf to support the non-trivial cases.
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ Actual codegen
+ * runtime/Operations.cpp:
+ (JSC::jsTypeStringForValue):
+ (JSC):
+ * runtime/Operations.h:
+ (JSC):
+ Some refactoring to allow us to get the type string for an
+ object without needing a callframe.
+
+
+2013-01-08 Filip Pizlo <fpizlo@apple.com>
+
+ DFG shouldn't treat the 'this' argument as being captured if a code block uses arguments
+ https://bugs.webkit.org/show_bug.cgi?id=106398
+ <rdar://problem/12439776>
+
+ Reviewed by Mark Hahnenberg.
+
+ This is a possible optimization for inlined calls, and fixes crashes for inlined constructors, in the case
+ that the inlined code used arguments. The problem was that assuming that 'this' was captured implies the
+ assumption that it was initialized by the caller, which is wrong for constructors and this.
+
+ Also added a pretty essential DFG IR validation rule: we shouldn't have any live locals at the top of the
+ root block. This helps to catch this bug: our assumption that 'this' was captured in an inlined constructor
+ that used arguments led to liveness for the temporary that would have held 'this' in the caller being
+ propagated all the way up to the entrypoint of the function.
+
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::isCaptured):
+ * dfg/DFGValidate.cpp:
+ (JSC::DFG::Validate::validate):
+ (JSC::DFG::Validate::reportValidationContext):
+ (Validate):
+ (JSC::DFG::Validate::dumpGraphIfAppropriate):
+
+2013-01-08 Filip Pizlo <fpizlo@apple.com>
+
+ REGRESSION (r138921): Crash in JSC::Arguments::create
+ https://bugs.webkit.org/show_bug.cgi?id=106329
+ <rdar://problem/12974196>
+
+ Reviewed by Mark Hahnenberg.
+
+ Arguments::finishCreation() that takes an InlineCallFrame* needs to understand that the callee can
+ be unset, indicating that the callee needs to be loaded from the true call frame. This adds a
+ method to InlineCallFrame to do just that.
+
+ * bytecode/CodeOrigin.cpp:
+ (JSC::InlineCallFrame::calleeForCallFrame):
+ * bytecode/CodeOrigin.h:
+ (InlineCallFrame):
+ * runtime/Arguments.h:
+ (JSC::Arguments::finishCreation):
+
+2013-01-08 Filip Pizlo <fpizlo@apple.com>
+
+ DFG initrinsic handling should ensure that we backwards propagate the fact that all operands may escape
+ https://bugs.webkit.org/show_bug.cgi?id=106365
+
+ Reviewed by Mark Hahnenberg.
+
+ Use the fact that Phantom means that things escaped, and just insert Phantoms for all
+ of the operands.
+
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::handleCall):
+
+2013-01-08 Filip Pizlo <fpizlo@apple.com>
+
+ If array allocation profiling causes a new_array to allocate double arrays, then the holes should end up being correctly initialized
+ https://bugs.webkit.org/show_bug.cgi?id=106363
+
+ Reviewed by Mark Hahnenberg.
+
+ * runtime/JSArray.h:
+ (JSC::JSArray::tryCreateUninitialized):
+
+2013-01-07 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should backwards-propagate NodeUsedAsValue for Phantom
+ https://bugs.webkit.org/show_bug.cgi?id=106299
+
+ Reviewed by Mark Hahnenberg.
+
+ This is currently benign because Phantom is only inserted by the bytecode parser for
+ things that already happen to be used in contexts that backwards propagate
+ NodeUsedAsValue. But that doesn't change the fact that the semantics of Phantom are
+ that the value can be arbitrarily used by the baseline JIT.
+
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+
+2013-01-07 Filip Pizlo <fpizlo@apple.com>
+
+ Rationalize closure call heuristics and profiling
+ https://bugs.webkit.org/show_bug.cgi?id=106270
+
+ Reviewed by Oliver Hunt.
+
+ Did a number of things:
+
+ - CallLinkInfo now remembers if it was ever a closure call, and CallLinkStatus uses
+ this. Reduces the likelihood that we will inline a closure call as if it was a
+ normal call.
+
+ - Made InlineCallFrame print inferred function names, and refactored
+ CodeBlock::inferredName() to better use FunctionExecutable's API.
+
+ - Made bytecode dumping print frequent exit sites that led to recompilation.
+
+ - Made bytecode dumping for op_call and op_construct print what the CallLinkStatus
+ saw.
+
+ * bytecode/CallLinkInfo.h:
+ (JSC::CallLinkInfo::CallLinkInfo):
+ (CallLinkInfo):
+ * bytecode/CallLinkStatus.cpp:
+ (JSC::CallLinkStatus::computeFor):
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::inferredName):
+ (JSC::CodeBlock::dumpBytecodeCommentAndNewLine):
+ (JSC::CodeBlock::printCallOp):
+ * bytecode/CodeOrigin.cpp:
+ (JSC::CodeOrigin::dump):
+ (JSC::InlineCallFrame::inferredName):
+ (JSC):
+ (JSC::InlineCallFrame::dumpBriefFunctionInformation):
+ (JSC::InlineCallFrame::dump):
+ * bytecode/CodeOrigin.h:
+ (InlineCallFrame):
+ * bytecode/DFGExitProfile.cpp:
+ (JSC::DFG::ExitProfile::exitSitesFor):
+ (DFG):
+ * bytecode/DFGExitProfile.h:
+ (ExitProfile):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+
+2013-01-07 Ryosuke Niwa <rniwa@webkit.org>
+
+ Sorted the xcodeproj file.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2013-01-07 Filip Pizlo <fpizlo@apple.com>
+
+ Unreviewed, it should be possible to build JSC on ARM.
+
+ * API/JSBase.h:
+ * jit/JITStubs.cpp:
+ (JSC::performPlatformSpecificJITAssertions):
+ (JSC):
+ * jit/JITStubs.h:
+ (JSC):
+ * jit/JITThunks.cpp:
+ (JSC::JITThunks::JITThunks):
+ * jit/JITThunks.h:
+ (JITThunks):
+ * offlineasm/armv7.rb:
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+
+2013-01-07 Balazs Kilvady <kilvadyb@homejinni.com>
+
+ MIPS LLInt implementation.
+ https://bugs.webkit.org/show_bug.cgi?id=99706
+
+ Reviewed by Filip Pizlo.
+
+ LLInt implementation for MIPS.
+
+ * assembler/MacroAssemblerMIPS.h:
+ (JSC::MacroAssemblerMIPS::jump):
+ * dfg/DFGOperations.cpp:
+ (JSC):
+ * jit/JITStubs.cpp:
+ (JSC):
+ * jit/JITStubs.h:
+ (JITStackFrame):
+ * llint/LLIntOfflineAsmConfig.h:
+ * llint/LowLevelInterpreter.asm:
+ * llint/LowLevelInterpreter32_64.asm:
+ * offlineasm/backends.rb:
+ * offlineasm/instructions.rb:
+ * offlineasm/mips.rb: Added.
+
+2013-01-07 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ testapi is failing with a block-related error in the Objc API
+ https://bugs.webkit.org/show_bug.cgi?id=106055
+
+ Reviewed by Geoffrey Garen.
+
+ Casting a block to a bool will always return true, which isn't the behavior that is intended here.
+ Instead we need to call the block, but C semantics don't allow this, so we need to change
+ testapi.m to be Objective-C++ and therefore testapi.mm.
+
+ * API/tests/testapi.m: Removed.
+ * API/tests/testapi.mm: Copied from Source/JavaScriptCore/API/tests/testapi.m.
+ (blockSignatureContainsClass):
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2013-01-06 Filip Pizlo <fpizlo@apple.com>
+
+ Simplify slow case profiling
+ https://bugs.webkit.org/show_bug.cgi?id=106208
+
+ Reviewed by Mark Rowe.
+
+ Removing the minimum execution ratio portion of slow case profiling, which allows
+ the removal of a field from CodeBlock. This appears to be performance neutral,
+ implying that the complexity incurred by the previous heuristic was purely
+ harmful: it made the code more complicated, and it made CodeBlock larger, without
+ resulting in any measurable benefits.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::CodeBlock):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::likelyToTakeSlowCase):
+ (JSC::CodeBlock::couldTakeSlowCase):
+ (JSC::CodeBlock::likelyToTakeSpecialFastCase):
+ (JSC::CodeBlock::couldTakeSpecialFastCase):
+ (JSC::CodeBlock::likelyToTakeDeepestSlowCase):
+ (JSC::CodeBlock::likelyToTakeAnySlowCase):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompile):
+ * runtime/Options.h:
+
+2013-01-05 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should inline closure calls
+ https://bugs.webkit.org/show_bug.cgi?id=106067
+
+ Reviewed by Gavin Barraclough.
+
+ This adds initial support for inlining closure calls to the DFG. A call is considered
+ to be a closure call when the JSFunction* varies, but always has the same executable.
+ We already have closure call inline caching in both JITs, which works by checking that
+ the callee has an expected structure (as a cheap way of detecting that it is in fact
+ a JSFunction) and an expected executable. Closure call inlining uses profiling data
+ aggregated by CallLinkStatus to decide when to specialize the call to the particular
+ structure/executable, and inline the call rather than emitting a call sequence. When
+ we choose to do a closure inline rather than an ordinary inline, a number of things
+ change about how inlining is performed:
+
+ - The inline is guarded by a CheckStructure/CheckExecutable rather than a
+ CheckFunction.
+
+ - Instead of propagating a constant value for the scope, we emit GetMyScope every time
+ that the scope is needed, which loads the scope from a local variable. We do similar
+ things for the callee.
+
+ - The prologue of the inlined code includes SetMyScope and SetCallee nodes to eagerly
+ plant the scope and callee into the "true call frame", i.e. the place on the stack
+ where the call frame would have been if the call had been actually performed. This
+ allows GetMyScope/GetCallee to work as they would if the code wasn't inlined. It
+ also allows for trivial handling of scope and callee for call frame reconstruction
+ upon stack introspection and during OSR.
+
+ - A new node called GetScope is introduced, which just gets the scope of a function.
+ This node has the expected CSE support. This allows for the
+ SetMyScope(GetScope(@function)) sequence to set up the scope in the true call frame.
+
+ - GetMyScope/GetCallee CSE can match against SetMyScope/SetCallee, which means that
+ the GetMyScope/GetCallee nodes emitted during parsing are often removed during CSE,
+ if we can prove that it is safe to do so.
+
+ - Inlining heuristics are adjusted to grok the cost of inlining a closure. We are
+ less likely to inline a closure call than we are to inline a normal call, since we
+ end up emitting more code for closures due to CheckStructure, CheckExecutable,
+ GetScope, SetMyScope, and SetCallee.
+
+ Additionally, I've fixed the VariableEventStream to ensure that we don't attempt to
+ plant Undefined into the true call frames. This was previously a harmless oversight,
+ but it becomes quite bad if OSR is relying on the scope/callee already having been
+ set and not subsequently clobbered by the OSR itself.
+
+ This is a ~60% speed-up on programs that frequently make calls to closures. It's
+ neutral on V8v7 and other major benchmark suites.
+
+ The lack of a definite speed-up is likely due the fact that closure inlining currently
+ does not do any cardinality [1] optimizations. We don't observe when a closure was
+ constructed within its caller, and so used the scope from its caller; and furthermore
+ we have no facility to detect when the scope is single. All scoped variable accesses
+ are assumed to be multiple instead. A subsequent step will be to ensure that closure
+ call inlining will be single and loving it.
+
+ [1] Single and loving it: Must-alias analysis for higher-order languages. Suresh
+ Jagannathan, Peter Thiemann, Stephen Weeks, and Andrew Wright. In POPL '98.
+
+ * bytecode/CallLinkStatus.cpp:
+ (JSC::CallLinkStatus::dump):
+ * bytecode/CallLinkStatus.h:
+ (JSC::CallLinkStatus::isClosureCall):
+ (CallLinkStatus):
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::globalObjectFor):
+ (JSC):
+ * bytecode/CodeBlock.h:
+ (CodeBlock):
+ * bytecode/CodeOrigin.cpp:
+ (JSC::InlineCallFrame::dump):
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGByteCodeParser.cpp:
+ (ByteCodeParser):
+ (JSC::DFG::ByteCodeParser::handleCall):
+ (JSC::DFG::ByteCodeParser::emitFunctionChecks):
+ (JSC::DFG::ByteCodeParser::handleInlining):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::pureCSE):
+ (CSEPhase):
+ (JSC::DFG::CSEPhase::getCalleeLoadElimination):
+ (JSC::DFG::CSEPhase::checkExecutableElimination):
+ (JSC::DFG::CSEPhase::getMyScopeLoadElimination):
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ * dfg/DFGCapabilities.cpp:
+ (JSC::DFG::mightInlineFunctionForClosureCall):
+ * dfg/DFGCapabilities.h:
+ (DFG):
+ (JSC::DFG::mightInlineFunctionForClosureCall):
+ (JSC::DFG::canInlineFunctionForClosureCall):
+ (JSC::DFG::canInlineFunctionFor):
+ * dfg/DFGNode.h:
+ (Node):
+ (JSC::DFG::Node::hasExecutable):
+ (JSC::DFG::Node::executable):
+ * dfg/DFGNodeType.h:
+ (DFG):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGVariableEventStream.cpp:
+ (JSC::DFG::VariableEventStream::reconstruct):
+ * runtime/Options.h:
+ (JSC):
+
+2013-01-05 Filip Pizlo <fpizlo@apple.com>
+
+ Data flow paths that carry non-numbers, non-undefined, non-null values should not cause subtractions and arithmetic additions (i.e. ++) to speculate double
+ https://bugs.webkit.org/show_bug.cgi?id=106190
+
+ Reviewed by Sam Weinig.
+
+ The problem is that the DFG logic for deciding when to speculate integer was
+ confusing the special case of ValueAdd (where non-numeric values should cause us
+ to not speculate integer, because we want to fall off into the generic case) with
+ the more normal case of ArithAdd and ArithSub (where we want to speculate integer
+ unless we have evidence that the operands are doubles, since the DFG doesn't have
+ generic handling of non-numeric arithmetic). Prior to this change doing a - b where
+ either a or b were possibly non-numeric would always force the subtraction to be
+ done using doubles.
+
+ * dfg/DFGGraph.h:
+ (JSC::DFG::Graph::addSpeculationMode):
+ (Graph):
+ (JSC::DFG::Graph::valueAddSpeculationMode):
+ (JSC::DFG::Graph::arithAddSpeculationMode):
+ (JSC::DFG::Graph::addImmediateShouldSpeculateInteger):
+
+2013-01-04 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should trust array profiling over value profiling
+ https://bugs.webkit.org/show_bug.cgi?id=106155
+
+ Reviewed by Gavin Barraclough.
+
+ The real problem is that prediction propagation is not flow-sensitive. We had code
+ like:
+
+ var a = (some load from memory); // returns either an array or false
+ if (a)
+ a[i] = v;
+
+ Because 'a' could be 'false', we were emitting a fully generic unoptimized PutByVal.
+ This patch changes ArrayMode to ignore the type of the base of an array access, if
+ array profiling tells us that the array access can be optimized.
+
+ In the future, we could probably make this work even better with some flow
+ sensitivity in the prediction propagator, but I also tend to think that this is a
+ more robust overall solution. If we ever did want to support array accesses on
+ array-or-false then we should change the array profiler to be able to tell us that
+ this is what is going on.
+
+ 3.7% speed-up on V8/earley.
+
+ * dfg/DFGArrayMode.cpp:
+ (JSC::DFG::ArrayMode::refine):
+
+2013-01-04 Filip Pizlo <fpizlo@apple.com>
+
+ Rationalize exit site profiling for calls
+ https://bugs.webkit.org/show_bug.cgi?id=106150
+
+ Reviewed by Sam Weinig.
+
+ This adds two new exit kinds for calls: BadFunction and BadExecutable. The latter is not used
+ yet, but is already integrated with profiling. CheckFunction uses a BadFunction speculation
+ instead of BadCache, now. This allows CallLinkStatus to turn itself into a closure call status
+ if we had a BadFunction exit site but the CallLinkInfo told us to use a non-closure call. This
+ might happen if we had call unlinking that led to information loss along the way.
+
+ No performance impact. This is meant as another step towards inlining closure calls.
+
+ * bytecode/CallLinkStatus.cpp:
+ * bytecode/CallLinkStatus.h:
+ (JSC::CallLinkStatus::setIsProved):
+ (JSC::CallLinkStatus::setHasBadFunctionExitSite):
+ (CallLinkStatus):
+ (JSC::CallLinkStatus::setHasBadCacheExitSite):
+ (JSC::CallLinkStatus::setHasBadExecutableExitSite):
+ * bytecode/ExitKind.cpp:
+ (JSC::exitKindToString):
+ * bytecode/ExitKind.h:
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::handleCall):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2013-01-03 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should not elide CheckStructure if it's needed to perform a cell check
+ https://bugs.webkit.org/show_bug.cgi?id=106074
+
+ Reviewed by Ryosuke Niwa.
+
+ The problem here was that the constant folding phase was misinterpreting the meaning of the sets
+ in DFG::AbstractValue. AbstractValue describes a constraint on the values that a variable (i.e.
+ a DFG Node, or a virtual register, i.e. local or argument) may have. It does so by containing
+ four sets: the set of JSValues (either empty, the singleton set containing one JSValue, or the
+ set of all JSValues); the set of "current known" structures, i.e. the set of structures that you
+ already know that this value may have right now (also either empty, the singleton set, or the set
+ of all structures); the set of "future possible" structures, i.e. the set of structures that this
+ value could have in the future if none of the structure transition watchpoints for those
+ structures had fired (also empty, singleton, or all); and the set of types, which is a
+ SpeculatedType bitmask. The correct way to interpret the sets is to think of the AbstractValue as
+ the intersection of these three sets of values:
+
+ - The set of JSValues that have a type that belongs to the m_type set.
+ - If m_value is not the empty value then: the set of all JSValues that are == m_value;
+ else: the set of all JSValues.
+ where '==' is as defined by JSValue::operator==.
+ - Union of { the set of all cells that have a structure that belongs to m_currentKnownStructure }
+ and { the set of all JSValues that are not cells }.
+
+ You can then further intersect this set with the following set, if you guard the code with
+ watchpoints on all structures in the m_futurePossibleStructure:
+
+ - Union of { the set of all cells that have a structure that belongs to m_futurePossibleStructure }
+ and { the set of all JSValues that are not cells }.
+
+ One way to think of this is that m_currentKnownStructure is filtered by m_futurePossibleStructure
+ (i.e. is set to the intersection of m_currentKnownStructure and m_futurePossibleStructure), if the
+ code for which you're doing this is always preceded by watchpoints on all structures in
+ m_futurePossibleStructure, and is always before any side-effects that could change the structures
+ of objects.
+
+ The incorrect optimization related to CheckStructure. CheckStructure checks that the value is a
+ cell, and that it has a particular structure. It was incorrectly assuming that you could eliminate
+ the CheckStructure, if m_currentKnownStructure contained the structure that CheckStructure was
+ checking. But this is not the case, since m_currentKnownStructure does not prove that the value is
+ a cell with a particular structure; it only proves that if the value was a cell then it would have
+ a particular structure. Hence, to eliminate CheckStructure, it is also necessary to check that
+ AbstractValue::m_type contains only cells (i.e. isCellSpeculation(m_type) == true).
+
+ It wasn't doing that, and this changes makes sure that it does do that.
+
+ * dfg/DFGConstantFoldingPhase.cpp:
+ (JSC::DFG::ConstantFoldingPhase::foldConstants):
+
+2013-01-04 Adam Klein <adamk@chromium.org>
+
+ Remove ENABLE_MUTATION_OBSERVERS #define
+ https://bugs.webkit.org/show_bug.cgi?id=105459
+
+ Reviewed by Ryosuke Niwa.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2013-01-03 Filip Pizlo <fpizlo@apple.com>
+
+ DFG::ByteCodeCache serves little or no purpose ever since we decided to keep bytecode around permanently
+ https://bugs.webkit.org/show_bug.cgi?id=106058
+
+ Reviewed by Michael Saboff.
+
+ All baseline code blocks now always have bytecode, so the bytecode cache's ability to minimize the
+ number of times that the DFG produces bytecode sequences for code blocks is superfluous.
+
+ * GNUmakefile.list.am:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * dfg/DFGByteCodeCache.h: Removed.
+ * dfg/DFGByteCodeParser.cpp:
+ (ByteCodeParser):
+ (JSC::DFG::ByteCodeParser::handleInlining):
+ * runtime/Executable.cpp:
+ (JSC):
+ * runtime/Executable.h:
+ (FunctionExecutable):
+
+2013-01-03 Filip Pizlo <fpizlo@apple.com>
+
+ Unreviewed, fix build for DFG JIT disabled.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dumpValueProfiling):
+ (JSC::CodeBlock::dumpArrayProfiling):
+ * runtime/Executable.cpp:
+ (JSC):
+ (JSC::ExecutableBase::intrinsic):
+
+2013-01-03 Filip Pizlo <fpizlo@apple.com>
+
+ CallLinkStatus should be aware of closure calls, and the DFG bytecode parser should use that as its sole internal notion of how to optimize calls
+ https://bugs.webkit.org/show_bug.cgi?id=106027
+
+ Reviewed by Mark Hahnenberg.
+
+ Previously, the DFG bytecode parser had its own internal notion of exactly what CallLinkStatus was
+ meant to do, in the form of a CallType, expectedFunction, intrinsic, etc. This change makes CallLinkStatus
+ smart enough to do all of that, and also gives it the ability to understand closure calls.
+
+ * bytecode/CallLinkStatus.cpp:
+ (JSC::CallLinkStatus::CallLinkStatus):
+ (JSC):
+ (JSC::CallLinkStatus::function):
+ (JSC::CallLinkStatus::internalFunction):
+ (JSC::CallLinkStatus::intrinsicFor):
+ (JSC::CallLinkStatus::setIsProved):
+ (JSC::CallLinkStatus::computeFromLLInt):
+ (JSC::CallLinkStatus::computeFor):
+ (JSC::CallLinkStatus::dump):
+ * bytecode/CallLinkStatus.h:
+ (JSC):
+ (JSC::CallLinkStatus::CallLinkStatus):
+ (CallLinkStatus):
+ (JSC::CallLinkStatus::takesSlowPath):
+ (JSC::CallLinkStatus::isSet):
+ (JSC::CallLinkStatus::isClosureCall):
+ (JSC::CallLinkStatus::callTarget):
+ (JSC::CallLinkStatus::executable):
+ (JSC::CallLinkStatus::structure):
+ (JSC::CallLinkStatus::isProved):
+ (JSC::CallLinkStatus::canOptimize):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::handleCall):
+ * dfg/DFGGraph.h:
+ (JSC::DFG::Graph::valueOfFunctionConstant):
+
+2013-01-02 Simon Hausmann <simon.hausmann@digia.com>
+
+ [MinGW-w64] Centralize workaround for pow() implementation
+ https://bugs.webkit.org/show_bug.cgi?id=105925
+
+ Reviewed by Sam Weinig.
+
+ As suggested by Sam, move the MinGW-w64 workaround into MathExtras.h
+ away from the JSC usage.
+
+ * runtime/MathObject.cpp:
+ (JSC::mathPow):
+
+2013-01-02 Gavin Barraclough <barraclough@apple.com>
+
+ Objective-C API for JavaScriptCore
+ https://bugs.webkit.org/show_bug.cgi?id=105889
+
+ Reviewed by Geoff Garen.
+
+ Fixes for more issues raised by Darin.
+
+ * API/JSBlockAdaptor.mm:
+ (BlockArgument):
+ (BlockArgumentStruct::BlockArgumentStruct):
+ (BlockArgumentTypeDelegate::typeStruct):
+ (BlockResult):
+ (BlockResultStruct::BlockResultStruct):
+ (buildBlockSignature):
+ (-[JSBlockAdaptor initWithBlockSignatureFromProtocol:]):
+ (-[JSBlockAdaptor blockFromValue:inContext:withException:]):
+ - fix * position for Objective-C types
+ * API/JSContext.h:
+ - fix * position for Objective-C types
+ * API/JSContext.mm:
+ (-[JSContext initWithVirtualMachine:]):
+ (-[JSContext virtualMachine]):
+ (contextInternalContext):
+ - fix * position for Objective-C types
+ (-[JSContext dealloc]):
+ (-[JSContext protect:]):
+ (-[JSContext unprotect:]):
+ - HashMap<JSValueRef, size_t> -> HashCountedSet<JSValueRef>
+ * API/JSContextInternal.h:
+ (WeakContextRef):
+ - fix * position for Objective-C types
+ * API/JSValue.mm:
+ (valueToString):
+ - fix * position for Objective-C types
+ (isNSBoolean):
+ - Added helper to check for booleans.
+ (objectToValueWithoutCopy):
+ - Added contextRef
+ - fix * position for Objective-C types
+ - Remove @YES, @NO literal usage, use isNSBoolean instead
+ (objectToValue):
+ - Added contextRef
+ (+[JSValue valueWithValue:inContext:]):
+ (-[JSValue initWithValue:inContext:]):
+ - fix * position for Objective-C types
+ (createStructHandlerMap):
+ (handerForStructTag):
+ - getStructTagHandler -> handerForStructTag
+ - Split out createStructHandlerMap
+ - strncmp -> memcmp
+ - String(type).impl() -> StringImpl::create(type)
+ (+[JSValue selectorForStructToValue:]):
+ (+[JSValue selectorForValueToStruct:]):
+ - getStructTagHandler -> handerForStructTag
+ (typeToValueInvocationFor):
+ (valueToTypeInvocationFor):
+ - fix * position for Objective-C types
+ * API/JSValueInternal.h:
+ - fix * position for Objective-C types
+ * API/JSVirtualMachineInternal.h:
+ - fix * position for Objective-C types
+ * API/JSWrapperMap.h:
+ - fix * position for Objective-C types
+ * API/JSWrapperMap.mm:
+ (selectorToPropertyName):
+ (createObjectWithCustomBrand):
+ (createRenameMap):
+ (putNonEnumerable):
+ (copyMethodsToObject):
+ (copyPrototypeProperties):
+ (-[JSObjCClassInfo initWithContext:forClass:superClassInfo:]):
+ (-[JSWrapperMap initWithContext:]):
+ (-[JSWrapperMap wrapperForObject:]):
+ (getJSExportProtocol):
+ - fix * position for Objective-C types
+ * API/ObjCCallbackFunction.h:
+ - fix * position for Objective-C types
+ * API/ObjCCallbackFunction.mm:
+ (CallbackArgument):
+ (CallbackArgumentStruct::CallbackArgumentStruct):
+ - fix * position for Objective-C types
+ (CallbackArgumentBlockCallback::createAdoptingJSBlockAdaptor):
+ - Added to make adopt explicit
+ (CallbackArgumentBlockCallback):
+ (CallbackArgumentBlockCallback::CallbackArgumentBlockCallback):
+ (ArgumentTypeDelegate::typeBlock):
+ - Call createAdoptingJSBlockAdaptor
+ (ArgumentTypeDelegate::typeStruct):
+ (CallbackResult):
+ (CallbackResultStruct::CallbackResultStruct):
+ (ResultTypeDelegate::typeStruct):
+ (ObjCCallbackFunction::ObjCCallbackFunction):
+ (ObjCCallbackFunction::context):
+ (objCCallbackFunctionForInvocation):
+ (objCCallbackFunctionForMethod):
+ (objCCallbackFunctionForBlock):
+ - fix * position for Objective-C types
+ * API/ObjcRuntimeExtras.h:
+ (protocolImplementsProtocol):
+ (forEachProtocolImplementingProtocol):
+ (forEachMethodInProtocol):
+ (forEachPropertyInProtocol):
+ - fix * position for Objective-C types
+ * API/tests/testapi.m:
+ (-[TestObject testArgumentTypesWithInt:double:boolean:string:number:array:dictionary:]):
+ (testObjectiveCAPI):
+ - fix * position for Objective-C types
+
+2013-01-02 Geoffrey Garen <ggaren@apple.com>
+
+ Some renaming in the CodeCache
+ https://bugs.webkit.org/show_bug.cgi?id=105966
+
+ Reviewed by Gavin Barraclough.
+
+ CodeBlockKey => SourceCodeKey because the key is not a CodeBlock.
+
+ m_recentlyUsedFunctionCode => m_recentlyUsedFunctions to match other names.
+
+ GlobalFunctionKey => FunctionKey because the key is not unique to globalness.
+
+ m_cachedGlobalFunctions => m_globalFunctions because "cached" is redundant
+ for data members in an object called "CodeCache".
+
+ kMaxRootCodeBlockEntries => kMaxRootEntries because there are no non-CodeBlock
+ entries in a CodeBlock cache.
+
+ kMaxFunctionCodeBlocks => kMaxChildFunctionEntries to clarify that this
+ number models a parent-child relationship.
+
+ Also removed the initial "k" from enum constants. That's an interesting
+ style for calling out constants, but it's not the WebKit style.
+
+ Finally, a behavior change: Use MaxRootEntries for the limit on global
+ functions, and not MaxChildFunctionEntries. Previously, there was an
+ unused constant that seemed to have been intended for this purpose.
+
+ * runtime/CodeCache.cpp:
+ (JSC::CodeCache::makeSourceCodeKey):
+ (JSC::CodeCache::getCodeBlock):
+ (JSC::CodeCache::generateFunctionCodeBlock):
+ (JSC::CodeCache::makeFunctionKey):
+ (JSC::CodeCache::getFunctionExecutableFromGlobalCode):
+ (JSC::CodeCache::usedFunctionCode):
+ * runtime/CodeCache.h:
+ (JSC::CodeCache::clear):
+
+2013-01-02 Filip Pizlo <fpizlo@apple.com>
+
+ DFG inlining machinery should be robust against the inline callee varying while the executable stays the same
+ https://bugs.webkit.org/show_bug.cgi?id=105953
+
+ Reviewed by Mark Hahnenberg.
+
+ This institutes the policy that if InlineCallFrame::callee is null, then the callee and scope have already
+ been stored into the true call frame (i.e. the place where the call frame of the inlined call would have
+ been) and so any attempt to access the callee or scope should do a load instead of assuming that the value
+ is constant. This wires the changes through the bytecode parser, the stack scanning logic, and the compiler
+ optimization phases and backends.
+
+ * bytecode/CodeOrigin.cpp:
+ (JSC::InlineCallFrame::dump):
+ * bytecode/CodeOrigin.h:
+ (CodeOrigin):
+ (InlineCallFrame):
+ (JSC::InlineCallFrame::isClosureCall):
+ (JSC::CodeOrigin::stackOffset):
+ (JSC):
+ * dfg/DFGAssemblyHelpers.h:
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::get):
+ (InlineStackEntry):
+ (JSC::DFG::ByteCodeParser::getScope):
+ (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
+ * dfg/DFGCSEPhase.cpp:
+ (CSEPhase):
+ (JSC::DFG::CSEPhase::genericPureCSE):
+ (JSC::DFG::CSEPhase::pureCSE):
+ (JSC::DFG::CSEPhase::pureCSERequiringSameInlineCallFrame):
+ (JSC::DFG::CSEPhase::getMyScopeLoadElimination):
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ * dfg/DFGOSRExitCompiler32_64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGOSRExitCompiler64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * interpreter/CallFrame.cpp:
+ (JSC::CallFrame::trueCallFrame):
+
+2013-01-02 Gavin Barraclough <barraclough@apple.com>
+
+ Objective-C API for JavaScriptCore
+ https://bugs.webkit.org/show_bug.cgi?id=105889
+
+ Reviewed by Geoff Garen.
+
+ Fixes for a number of issues raised by Darin.
+
+ * API/APIJSValue.h:
+ - Fix typos in comment
+ - Add newline before NS_CLASS_AVAILABLE(10_9, NA)
+ - cls -> expectedClass
+ - key type for -setObject:forKeyedSubscript: is now NSObject <NSCopying> *
+ * API/JSBase.h:
+ - JS_OBJC_API_ENABLED no longer implies __OBJC__
+ * API/JSBlockAdaptor.mm:
+ (BlockArgumentStruct::BlockArgumentStruct):
+ (BlockArgumentStruct):
+ - mark virtual functions as virtual, override, and private
+ - refactor out buffer allocation for struct types
+ (BlockArgumentTypeDelegate::typeVoid):
+ (BlockArgumentTypeDelegate::typeBlock):
+ (BlockArgumentTypeDelegate::typeStruct):
+ - return nil -> return 0
+ (BlockResultStruct::BlockResultStruct):
+ (BlockResultStruct):
+ - mark virtual functions as virtual, override, and private
+ - refactor out buffer allocation for struct types
+ (buildBlockSignature):
+ - %lu is not an appropriate format specifier for NSInteger
+ (-[JSBlockAdaptor initWithBlockSignatureFromProtocol:]):
+ - nil check [super init]
+ (-[JSBlockAdaptor blockMatchesSignature:]):
+ (-[JSBlockAdaptor blockFromValue:inContext:withException:]):
+ - ctx -> contextRef
+ * API/JSContext.h:
+ - Fix typos in comment
+ - Add newline before NS_CLASS_AVAILABLE(10_9, NA)
+ - key type for -setObject:forKeyedSubscript: is now NSObject <NSCopying> *
+ * API/JSContext.mm:
+ (-[JSContext initWithVirtualMachine:]):
+ - nil check [super init]
+ (+[JSContext currentArguments]):
+ - args -> argumentArray
+ (-[JSContext setObject:forKeyedSubscript:]):
+ - key type for -setObject:forKeyedSubscript: is now NSObject <NSCopying> *
+ (-[JSContext dealloc]):
+ (-[JSContext protect:]):
+ (-[JSContext unprotect:]):
+ - m_protected -> m_protectCounts
+ * API/JSValue.mm:
+ (-[JSValue toObjectOfClass:]):
+ - cls -> expectedClass
+ (-[JSValue toBool]):
+ (-[JSValue deleteProperty:]):
+ (-[JSValue hasProperty:]):
+ (-[JSValue isUndefined]):
+ (-[JSValue isNull]):
+ (-[JSValue isBoolean]):
+ (-[JSValue isNumber]):
+ (-[JSValue isString]):
+ (-[JSValue isObject]):
+ (-[JSValue isEqualToObject:]):
+ (-[JSValue isEqualWithTypeCoercionToObject:]):
+ (-[JSValue isInstanceOf:]):
+ - removed ? YES : NO
+ (-[JSValue callWithArguments:]):
+ (-[JSValue constructWithArguments:]):
+ (-[JSValue invokeMethod:withArguments:]):
+ - args -> argumentArray
+ (+[JSValue valueWithPoint:inContext:]):
+ (+[JSValue valueWithRange:inContext:]):
+ (+[JSValue valueWithRect:inContext:]):
+ (+[JSValue valueWithSize:inContext:]):
+ - [NSNumber numberWithFloat:] -> @()
+ (-[JSValue objectForKeyedSubscript:]):
+ (-[JSValue setObject:forKeyedSubscript:]):
+ - key type for -setObject:forKeyedSubscript: is now NSObject <NSCopying> *
+ (JSContainerConvertor):
+ (JSContainerConvertor::isWorkListEmpty):
+ (JSContainerConvertor::convert):
+ (ObjcContainerConvertor):
+ (ObjcContainerConvertor::isWorkListEmpty):
+ - remove WTF::
+ - isWorkListEmpty is const
+ (objectToValue):
+ - use fast enumeration
+ (-[JSValue initWithValue:inContext:]):
+ - nil check [super init]
+ (getStructTagHandler):
+ - m_structHandlers -> structHandlers
+ * API/JSVirtualMachine.h:
+ - Add newline before NS_CLASS_AVAILABLE(10_9, NA)
+ * API/JSVirtualMachine.mm:
+ (-[JSVirtualMachine init]):
+ - nil check [super init]
+ * API/JSWrapperMap.mm:
+ (selectorToPropertyName):
+ (copyPrototypeProperties):
+ - remove WTF::
+ - use static_cast
+ (-[JSObjCClassInfo initWithContext:forClass:superClassInfo:]):
+ (-[JSWrapperMap initWithContext:]):
+ - nil check [super init]
+ (-[JSWrapperMap wrapperForObject:]):
+ (tryUnwrapObjcObject):
+ - enable ASSERT
+ (getJSExportProtocol):
+ (getNSBlockClass):
+ - remove if check on initializing static
+ * API/JavaScriptCore.h:
+ - JS_OBJC_API_ENABLED no longer implies __OBJC__
+ * API/ObjCCallbackFunction.mm:
+ (CallbackArgumentOfClass):
+ (CallbackArgumentOfClass::~CallbackArgumentOfClass):
+ (CallbackArgumentStruct::CallbackArgumentStruct):
+ (CallbackArgumentStruct):
+ (CallbackArgumentBlockCallback):
+ - mark virtual functions as virtual, override, and private
+ - refactor out buffer allocation for struct types
+ (ArgumentTypeDelegate::typeVoid):
+ (ArgumentTypeDelegate::typeOfClass):
+ (ArgumentTypeDelegate::typeStruct):
+ - return nil -> return 0
+ (CallbackResultStruct::CallbackResultStruct):
+ (CallbackResultStruct):
+ - mark virtual functions as virtual, override, and private
+ - refactor out buffer allocation for struct types
+ (ResultTypeDelegate::typeStruct):
+ - return nil -> return 0
+ (ObjCCallbackFunction):
+ - remove WTF::
+ (objCCallbackFunctionFinalize):
+ - use static_cast
+ (objCCallbackFunctionCallAsFunction):
+ - Fix typos in comment
+ (createObjCCallbackFunctionClass):
+ (objCCallbackFunctionClass):
+ - Split out createObjCCallbackFunctionClass from objCCallbackFunctionClass
+ (ObjCCallbackFunction::call):
+ - ctx -> contextRef
+ (blockSignatureContainsClass):
+ - Remove tri-state enum.
+ (skipNumber):
+ - isdigit -> isASCIIDigit
+ (objCCallbackFunctionForInvocation):
+ - clean up & comment blockSignatureContainsClass() usage
+ (tryUnwrapBlock):
+ - use static_cast
+ * API/ObjcRuntimeExtras.h:
+ (forEachProtocolImplementingProtocol):
+ (forEachMethodInClass):
+ (forEachMethodInProtocol):
+ (forEachPropertyInProtocol):
+ - Remove WTF::
+ - Remove if (count) checks
+ (skipPair):
+ - NSUInteger -> size_t
+ (StringRange):
+ (StringRange::operator const char*):
+ (StringRange::get):
+ (StructBuffer):
+ (StructBuffer::StructBuffer):
+ (StructBuffer::~StructBuffer):
+ (StructBuffer::operator void*):
+ - Added helper for creating an aligned buffer, used by struct conversion invocations.
+ (parseObjCType):
+ - *(position++) -> *position++
+ * API/tests/testapi.c:
+ - PLATFORM(MAC) -> JS_OBJC_API_ENABLED
+ * API/tests/testapi.m:
+ (blockSignatureContainsClass):
+ - Remove tri-state enum.
+ (testObjectiveCAPI):
+ - Added more result type checks.
+
+2013-01-02 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should not use the InlineCallFrame's callee when it could have used the executable istead
+ https://bugs.webkit.org/show_bug.cgi?id=105947
+
+ Reviewed by Mark Hahnenberg.
+
+ We shouldn't use the callee to get the executable when we have the executable already. Not only
+ does this make the logic more clear, but it also allows for a world where the executable is known
+ but the callee isn't.
+
+ * dfg/DFGAssemblyHelpers.h:
+ (JSC::DFG::AssemblyHelpers::strictModeFor):
+
+2013-01-02 Filip Pizlo <fpizlo@apple.com>
+
+ DFG inliner should not use the callee's bytecode variable for resolving references to the callee in inlined code
+ https://bugs.webkit.org/show_bug.cgi?id=105938
+
+ Reviewed by Mark Hahnenberg.
+
+ This simplifies a bunch of code for referring to the callee. It also ought to simplify how we do
+ closure call inlining: for inlined closure call frames we will simply require that the callee is
+ already stashed on the stack in the Callee slot in the inline call frame header.
+
+ * dfg/DFGByteCodeParser.cpp:
+ (ByteCodeParser):
+ (JSC::DFG::ByteCodeParser::getDirect):
+ (JSC::DFG::ByteCodeParser::get):
+ (InlineStackEntry):
+ (JSC::DFG::ByteCodeParser::InlineStackEntry::remapOperand):
+ (JSC::DFG::ByteCodeParser::handleCall):
+ (JSC::DFG::ByteCodeParser::handleInlining):
+ (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
+ (JSC::DFG::ByteCodeParser::parse):
+
+2013-01-02 Ryosuke Niwa <rniwa@webkit.org>
+
+ Another Windows port build fix attempt. Try not exporting this symbol from JSC
+ since it's also compiled in WebCore.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2013-01-02 Csaba Osztrogonác <ossy@webkit.org>
+
+ One more unreviewed buildfix after r138609.
+
+ * jit/JITCall.cpp: Add a missing include.
+
+2013-01-02 Csaba Osztrogonác <ossy@webkit.org>
+
+ Unreviewed buildfix after r138609.
+
+ * jit/JITCall32_64.cpp: Add a missing include.
+
+2013-01-01 Filip Pizlo <fpizlo@apple.com>
+
+ Baseline JIT should have closure call caching
+ https://bugs.webkit.org/show_bug.cgi?id=105900
+
+ Reviewed by Gavin Barraclough.
+
+ This is not a speed-up by itself, but is meant to allow the DFG inliner to
+ accurately discern between closure calls and non-closure calls, so that it can
+ do closure call inlining in the future.
+
+ * bytecode/CallLinkStatus.cpp:
+ (JSC::CallLinkStatus::computeFromLLInt):
+ (JSC::CallLinkStatus::computeFor):
+ * bytecode/CallLinkStatus.h:
+ (JSC::CallLinkStatus::CallLinkStatus):
+ (JSC::CallLinkStatus::isClosureCall):
+ (CallLinkStatus):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::handleCall):
+ * jit/JIT.cpp:
+ (JSC::JIT::linkFor):
+ (JSC::JIT::linkSlowCall):
+ * jit/JIT.h:
+ (JSC::JIT::compileClosureCall):
+ * jit/JITCall.cpp:
+ (JSC::JIT::privateCompileClosureCall):
+ * jit/JITCall32_64.cpp:
+ (JSC::JIT::privateCompileClosureCall):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jit/JITStubs.h:
+ * jit/ThunkGenerators.cpp:
+ (JSC::linkClosureCallGenerator):
+ * jit/ThunkGenerators.h:
+
+2013-01-01 Dan Bernstein <mitz@apple.com>
+
+ <rdar://problem/12942239> Update copyright strings
+
+ Reviewed by Sam Weinig.
+
+ * Info.plist:
+
+2012-12-31 Gavin Barraclough <barraclough@apple.com>
+
+ Objective-C API for JavaScriptCore
+ https://bugs.webkit.org/show_bug.cgi?id=105889
+
+ Reviewed by Filip Pizlo.
+
+ For a detailed description of the API implemented here, see:
+ JSContext.h
+ APIJSValue.h
+ JSVirtualMachine.h
+ JSExport.h
+ Still to do -
+ (1) Shoud rename APIJSValue.h -> JSValue.h (but we'll have to rename JSValue.h first).
+ (2) Numerous FIXMEs, all with separate bugs filed.
+
+ * API/APIJSValue.h: Added.
+ - this Objective-C class is used to reference a JavaScript object.
+ * API/JSBase.h:
+ - added JS_OBJC_API_ENABLED macro to control ObjC API support.
+ * API/JSBlockAdaptor.h: Added.
+ - this Objective-C class is used in creating a special NSBlock proxying a JavaScript function.
+ * API/JSBlockAdaptor.mm: Added.
+ (BlockArgument):
+ (BlockArgument::~BlockArgument):
+ (BlockArgumentBoolean):
+ (BlockArgumentBoolean::get):
+ (BlockArgumentNumeric):
+ (BlockArgumentNumeric::get):
+ (BlockArgumentId):
+ (BlockArgumentId::get):
+ (BlockArgumentStruct):
+ (BlockArgumentStruct::BlockArgumentStruct):
+ (BlockArgumentStruct::~BlockArgumentStruct):
+ (BlockArgumentStruct::get):
+ - decoded arguent type information of a JSBlockAdaptor.
+ (BlockArgumentTypeDelegate):
+ (BlockArgumentTypeDelegate::typeInteger):
+ (BlockArgumentTypeDelegate::typeDouble):
+ (BlockArgumentTypeDelegate::typeBool):
+ (BlockArgumentTypeDelegate::typeVoid):
+ (BlockArgumentTypeDelegate::typeId):
+ (BlockArgumentTypeDelegate::typeOfClass):
+ (BlockArgumentTypeDelegate::typeBlock):
+ (BlockArgumentTypeDelegate::typeStruct):
+ - delegate for use in conjunction with parseObjCType.
+ (BlockResult):
+ (BlockResult::~BlockResult):
+ (BlockResultVoid):
+ (BlockResultVoid::set):
+ (BlockResultInteger):
+ (BlockResultInteger::set):
+ (BlockResultDouble):
+ (BlockResultDouble::set):
+ (BlockResultBoolean):
+ (BlockResultBoolean::set):
+ (BlockResultStruct):
+ (BlockResultStruct::BlockResultStruct):
+ (BlockResultStruct::~BlockResultStruct):
+ (BlockResultStruct::set):
+ - decoded result type information of a JSBlockAdaptor.
+ (buildBlockSignature):
+ - partial step in constructing a signature with stack offset information from one without.
+ (-[JSBlockAdaptor initWithBlockSignatureFromProtocol:]):
+ - constructor.
+ (-[JSBlockAdaptor blockMatchesSignature:]):
+ - check whether signature strings match, where only one contains stack frame offsets.
+ (-[JSBlockAdaptor blockFromValue:inContext:withException:]):
+ - use the adaptor to create a special forwarding block.
+ * API/JSCallbackObjectFunctions.h:
+ (JSC::::inherits):
+ - add missing braces to multiline for statement.
+ * API/JSContext.h: Added.
+ - this Objective-C class is used to reference a JavaScript context.
+ * API/JSContext.mm: Added.
+ (-[JSContext init]):
+ - constructor.
+ (-[JSContext initWithVirtualMachine:]):
+ - construct in a given VM (JSGlobalData).
+ (-[JSContext evaluateScript:]):
+ (-[JSContext globalObject]):
+ - evaluate a script, global object accessor.
+ (+[JSContext currentContext]):
+ (+[JSContext currentThis]):
+ (+[JSContext currentArguments]):
+ - These methods obtain context, this, arguments from within a callback.
+ (-[JSContext virtualMachine]):
+ - implementation for .virtualMachine property.
+ (-[JSContext objectForKeyedSubscript:]):
+ (-[JSContext setObject:forKeyedSubscript:]):
+ - support for subscript property access.
+ (contextInternalContext):
+ - internal accessor to m_context.
+ (-[JSContext dealloc]):
+ - desctructor.
+ (-[JSContext notifyException:]):
+ (-[JSContext valueFromNotifyException:]):
+ (-[JSContext boolFromNotifyException:]):
+ - internal method to record an exception was thrown.
+ (-[JSContext beginCallbackWithData:thisValue:argumentCount:arguments:]):
+ (-[JSContext endCallbackWithData:]):
+ - internal methods to push/pop a callback record.
+ (-[JSContext protect:]):
+ (-[JSContext unprotect:]):
+ - internal methods to add a value to a protect set (used to protect the internal property of JSValue).
+ (-[JSContext wrapperForObject:]):
+ - internal method to create a wrapper object.
+ (WeakContextRef::WeakContextRef):
+ (WeakContextRef::~WeakContextRef):
+ (WeakContextRef::get):
+ (WeakContextRef::set):
+ - Helper class to implement a weak reference to a JSContext.
+ * API/JSContextInternal.h: Added.
+ (CallbackData):
+ (WeakContextRef):
+ - see API/JSContext.mm for description of internal methods.
+ * API/JSExport.h: Added.
+ - Provides JSExport protocol & JSExportAs macro.
+ * API/JSValue.mm: Added.
+ (+[JSValue valueWithObject:inContext:]):
+ (+[JSValue valueWithBool:inContext:]):
+ (+[JSValue valueWithDouble:inContext:]):
+ (+[JSValue valueWithInt32:inContext:]):
+ (+[JSValue valueWithUInt32:inContext:]):
+ (+[JSValue valueWithNewObjectInContext:]):
+ (+[JSValue valueWithNewArrayInContext:]):
+ (+[JSValue valueWithNewRegularExpressionFromPattern:flags:inContext:]):
+ (+[JSValue valueWithNewErrorFromMessage:inContext:]):
+ (+[JSValue valueWithNullInContext:]):
+ (+[JSValue valueWithUndefinedInContext:]):
+ - Constructors.
+ (-[JSValue toObject]):
+ (-[JSValue toObjectOfClass:]):
+ (-[JSValue toBool]):
+ (-[JSValue toDouble]):
+ (-[JSValue toInt32]):
+ (-[JSValue toUInt32]):
+ (-[JSValue toNumber]):
+ (-[JSValue toString]):
+ (-[JSValue toDate]):
+ (-[JSValue toArray]):
+ (-[JSValue toDictionary]):
+ - Conversion to Objective-C types.
+ (-[JSValue valueForProperty:]):
+ (-[JSValue setValue:forProperty:]):
+ (-[JSValue deleteProperty:]):
+ (-[JSValue hasProperty:]):
+ (-[JSValue defineProperty:descriptor:]):
+ - Property access by property name.
+ (-[JSValue valueAtIndex:]):
+ (-[JSValue setValue:atIndex:]):
+ - Property access by index.
+ (-[JSValue isUndefined]):
+ (-[JSValue isNull]):
+ (-[JSValue isBoolean]):
+ (-[JSValue isNumber]):
+ (-[JSValue isString]):
+ (-[JSValue isObject]):
+ - Test JavaScript type.
+ (-[JSValue isEqualToObject:]):
+ (-[JSValue isEqualWithTypeCoercionToObject:]):
+ (-[JSValue isInstanceOf:]):
+ - ===, ==, instanceof operators.
+ (-[JSValue callWithArguments:]):
+ (-[JSValue constructWithArguments:]):
+ (-[JSValue invokeMethod:withArguments:]):
+ - Call & construct.
+ (-[JSValue context]):
+ - implementation for .context property.
+ (-[JSValue toPoint]):
+ (-[JSValue toRange]):
+ (-[JSValue toRect]):
+ (-[JSValue toSize]):
+ (+[JSValue valueWithPoint:inContext:]):
+ (+[JSValue valueWithRange:inContext:]):
+ (+[JSValue valueWithRect:inContext:]):
+ (+[JSValue valueWithSize:inContext:]):
+ - Support for NS struct types.
+ (-[JSValue objectForKeyedSubscript:]):
+ (-[JSValue objectAtIndexedSubscript:]):
+ (-[JSValue setObject:forKeyedSubscript:]):
+ (-[JSValue setObject:atIndexedSubscript:]):
+ - support for subscript property access.
+ (isDate):
+ (isArray):
+ - internal helper functions to check for instances of JS Date, Array types.
+ (JSContainerConvertor):
+ (Task):
+ (JSContainerConvertor::JSContainerConvertor):
+ (JSContainerConvertor::isWorkListEmpty):
+ (JSContainerConvertor::convert):
+ (JSContainerConvertor::add):
+ (JSContainerConvertor::take):
+ - helper class for tracking state while converting to Array/Dictionary objects.
+ (valueToObjectWithoutCopy):
+ (containerValueToObject):
+ (valueToObject):
+ (valueToNumber):
+ (valueToString):
+ (valueToDate):
+ (valueToArray):
+ (valueToDictionary):
+ - function for converting JavaScript values to Objective-C objects.
+ (ObjcContainerConvertor):
+ (ObjcContainerConvertor::ObjcContainerConvertor):
+ (ObjcContainerConvertor::isWorkListEmpty):
+ (ObjcContainerConvertor::convert):
+ (ObjcContainerConvertor::add):
+ (ObjcContainerConvertor::take):
+ - helper class for tracking state while converting to Array/Dictionary values.
+ (objectToValueWithoutCopy):
+ (objectToValue):
+ (valueInternalValue):
+ - function for converting Objective-C objects to JavaScript values.
+ (+[JSValue valueWithValue:inContext:]):
+ (-[JSValue initWithValue:inContext:]):
+ - internal constructors.
+ (StructTagHandler):
+ (getStructTagHandler):
+ (+[JSValue selectorForStructToValue:]):
+ (+[JSValue selectorForValueToStruct:]):
+ - methods to tracking struct types that support conversion to/from JSValue.
+ (-[JSValue dealloc]):
+ - destructor.
+ (-[JSValue description]):
+ - Objective-C to-NSString conversion.
+ (typeToValueInvocationFor):
+ (valueToTypeInvocationFor):
+ - create invocation objects for conversion to/from JSValue.
+ * API/JSValueInternal.h: Added.
+ - see API/JSValue.mm for description of internal methods.
+ * API/JSVirtualMachine.h: Added.
+ - this Objective-C class is used to reference a JavaScript virtual machine (JSGlobalData).
+ * API/JSVirtualMachine.mm: Added.
+ (-[JSVirtualMachine init]):
+ (-[JSVirtualMachine dealloc]):
+ - constructor & destructor.
+ (getGroupFromVirtualMachine):
+ - internal accessor for m_group property.
+ * API/JSVirtualMachineInternal.h: Added.
+ - see API/JSVirtualMachine.mm for description of internal methods.
+ * API/JSWrapperMap.h: Added.
+ * API/JSWrapperMap.mm: Added.
+ (wrapperClass):
+ - singleton root for detction (& unwrapping) of wrapper objects.
+ (selectorToPropertyName):
+ - default selector to property name conversion.
+ (createObjectWithCustomBrand):
+ - creates a JSObject with a custom NativeBrand (class name).
+ (createRenameMap):
+ - parse @optional properties of a JSExport protocol.
+ (putNonEnumerable):
+ - property put with enumerable=false.
+ (copyMethodsToObject):
+ - iterate methods in a protocol; add functions to a JSObject.
+ (parsePropertyAttributes):
+ - examine protocol property metadata.
+ (makeSetterName):
+ - "foo" -> "setFoo"
+ (copyPrototypeProperties):
+ - create properties on a Protocol object reflecting the instance methods & properties of a protocol.
+ (-[JSObjCClassInfo initWithContext:forClass:superClassInfo:]):
+ (-[JSObjCClassInfo dealloc]):
+ (-[JSObjCClassInfo wrapperForObject:]):
+ (-[JSObjCClassInfo constructor]):
+ - cache the Protocol/Constructor objects for an Objective-C type.
+ (-[JSWrapperMap initWithContext:]):
+ (-[JSWrapperMap dealloc]):
+ - constructor & desctructor.
+ (-[JSWrapperMap classInfoForClass:]):
+ - maps Class -> JSObjCClassInfo.
+ (-[JSWrapperMap wrapperForObject:]):
+ - cretae or retrieve a cached wrapper value for an object.
+ (tryUnwrapObjcObject):
+ - check whether a value is a wrapper object; unwrap if so.
+ * API/JavaScriptCore.h:
+ - Added includes for new API headers.
+ * API/ObjCCallbackFunction.h: Added.
+ - this class is used to wrap Objective-C instance methods, class methods & blocks as JSFunction objects.
+ * API/ObjCCallbackFunction.mm: Added.
+ (CallbackArgument):
+ (CallbackArgument::~CallbackArgument):
+ (CallbackArgumentBoolean):
+ (CallbackArgumentBoolean::set):
+ (CallbackArgumentInteger):
+ (CallbackArgumentInteger::set):
+ (CallbackArgumentDouble):
+ (CallbackArgumentDouble::set):
+ (CallbackArgumentJSValue):
+ (CallbackArgumentJSValue::set):
+ (CallbackArgumentId):
+ (CallbackArgumentId::set):
+ (CallbackArgumentOfClass):
+ (CallbackArgumentOfClass::CallbackArgumentOfClass):
+ (CallbackArgumentOfClass::~CallbackArgumentOfClass):
+ (CallbackArgumentOfClass::set):
+ (CallbackArgumentNSNumber):
+ (CallbackArgumentNSNumber::set):
+ (CallbackArgumentNSString):
+ (CallbackArgumentNSString::set):
+ (CallbackArgumentNSDate):
+ (CallbackArgumentNSDate::set):
+ (CallbackArgumentNSArray):
+ (CallbackArgumentNSArray::set):
+ (CallbackArgumentNSDictionary):
+ (CallbackArgumentNSDictionary::set):
+ (CallbackArgumentStruct):
+ (CallbackArgumentStruct::CallbackArgumentStruct):
+ (CallbackArgumentStruct::~CallbackArgumentStruct):
+ (CallbackArgumentStruct::set):
+ (CallbackArgumentBlockCallback):
+ (CallbackArgumentBlockCallback::CallbackArgumentBlockCallback):
+ (CallbackArgumentBlockCallback::~CallbackArgumentBlockCallback):
+ (CallbackArgumentBlockCallback::set):
+ - decoded arguent type information of a ObjCCallbackFunction.
+ (ArgumentTypeDelegate):
+ (ArgumentTypeDelegate::typeInteger):
+ (ArgumentTypeDelegate::typeDouble):
+ (ArgumentTypeDelegate::typeBool):
+ (ArgumentTypeDelegate::typeVoid):
+ (ArgumentTypeDelegate::typeId):
+ (ArgumentTypeDelegate::typeOfClass):
+ (ArgumentTypeDelegate::typeBlock):
+ (ArgumentTypeDelegate::typeStruct):
+ - delegate for use in conjunction with parseObjCType.
+ (CallbackResult):
+ (CallbackResult::~CallbackResult):
+ (CallbackResultVoid):
+ (CallbackResultVoid::get):
+ (CallbackResultId):
+ (CallbackResultId::get):
+ (CallbackResultNumeric):
+ (CallbackResultNumeric::get):
+ (CallbackResultBoolean):
+ (CallbackResultBoolean::get):
+ (CallbackResultStruct):
+ (CallbackResultStruct::CallbackResultStruct):
+ (CallbackResultStruct::~CallbackResultStruct):
+ (CallbackResultStruct::get):
+ - decoded result type information of a ObjCCallbackFunction.
+ (ResultTypeDelegate):
+ (ResultTypeDelegate::typeInteger):
+ (ResultTypeDelegate::typeDouble):
+ (ResultTypeDelegate::typeBool):
+ (ResultTypeDelegate::typeVoid):
+ (ResultTypeDelegate::typeId):
+ (ResultTypeDelegate::typeOfClass):
+ (ResultTypeDelegate::typeBlock):
+ (ResultTypeDelegate::typeStruct):
+ - delegate for use in conjunction with parseObjCType.
+ (ObjCCallbackFunction):
+ (ObjCCallbackFunction::ObjCCallbackFunction):
+ (ObjCCallbackFunction::~ObjCCallbackFunction):
+ - constructor & destructor.
+ (ObjCCallbackFunction::context):
+ - accessor.
+ (ObjCCallbackFunction::wrappedBlock):
+ - attemmpt to unwrap a block object.
+ (objCCallbackFunctionFinalize):
+ (objCCallbackFunctionCallAsFunction):
+ (objCCallbackFunctionClass):
+ - JSClassRef used to represent ObjCCallbackFunction objects.
+ (ObjCCallbackFunction::call):
+ (blockSignatureContainsClass):
+ - helper function to determine if we're running on a recent Clang.
+ (skipNumber):
+ - helper used in parsing signature strings.
+ (objCCallbackFunctionForInvocation):
+ (objCCallbackFunctionForMethod):
+ (objCCallbackFunctionForBlock):
+ - functions to try to create ObjCCallbackFunction instances for methods/blocks.
+ (tryUnwrapBlock):
+ - attemmpt to unwrap a block object.
+ * API/ObjcRuntimeExtras.h: Added.
+ (protocolImplementsProtocol):
+ (forEachProtocolImplementingProtocol):
+ (forEachMethodInClass):
+ (forEachMethodInProtocol):
+ (forEachPropertyInProtocol):
+ - functions used in reflecting on Objective-C types.
+ (skipPair):
+ - parsing helper used by parseObjCType, scans for matching parentheses.
+ (StringRange):
+ (StringRange::StringRange):
+ (StringRange::~StringRange):
+ (StringRange::operator const char*):
+ (StringRange::get):
+ - Helper class - create a c string copy of a range of an existing string.
+ (parseObjCType):
+ - function to parse Objective-C type strings, makes callbacks to a deleagte.
+ * API/tests/testapi.c:
+ (main):
+ - added call to testObjectiveCAPI (in testapi.m).
+ * API/tests/testapi.m: Added.
+ (+[ParentObject parentTest]):
+ (+[TestObject testObject]):
+ (+[TestObject classTest]):
+ (-[TestObject getString]):
+ (-[TestObject testArgumentTypesWithInt:double:boolean:string:number:array:dictionary:]):
+ (-[TestObject callback:]):
+ (-[TextXYZ test:]):
+ - test object, used in various test vases.
+ (checkResult):
+ - helper function.
+ (blockSignatureContainsClass):
+ - helper function to determine if we're running on a recent Clang.
+ (testObjectiveCAPI):
+ - new test cases.
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ - added new files.
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSGlobalData.h:
+ (JSGlobalData):
+ - added m_apiData - provide convenient storage for use by the API.
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::JSGlobalObject):
+ * runtime/JSGlobalObject.h:
+ (JSGlobalObject):
+ - added m_apiData - provide convenient storage for use by the API.
+
+2012-12-27 Csaba Osztrogonác <ossy@webkit.org>
+
+ One more unreviwed holiday MIPS and SH4 buildfixes after r138516.
+
+ * jit/ThunkGenerators.cpp:
+
+2012-12-27 Csaba Osztrogonác <ossy@webkit.org>
+
+ Unreviwed holiday ARM and SH4 buildfixes after r138516.
+
+ * jit/ThunkGenerators.cpp:
+ (JSC::nativeForGenerator):
+
+2012-12-26 Filip Pizlo <fpizlo@apple.com>
+
+ All JIT stubs should go through the getCTIStub API
+ https://bugs.webkit.org/show_bug.cgi?id=105750
+
+ Reviewed by Sam Weinig.
+
+ Previously JITThunks had two sets of thunks: one static set stored in a struct,
+ which was filled by JIT::privateCompileCTITrampolines, and another set stored in
+ a HashMap. Moreover, the code to generate the code for the CTI trampoline struct
+ had loads of copy-paste between JSVALUE32_64 and JSVALUE64, and was total
+ unmodular with respect to calls versus constructors, among other things.
+
+ This changeset removes this struct and rationalizes the code that generates those
+ thunks. All of thunks are now generated through the getCTIStub HashMap API. All
+ thunks for the baseline JIT now use the JSInterfaceJIT and have their codegen
+ located in ThunkGenerators.cpp. All thunks now share as much code as possible -
+ it turns out that they are almost 100% identical between 32_64 and 64, so that
+ works out great. A bunch of call vs. construct duplication was eliminated. And,
+ most of the call link versus virtual call duplication was also eliminated.
+
+ This does not change behavior but it does make it easier to add more thunks in
+ the future.
+
+ * bytecode/CallLinkInfo.cpp:
+ (JSC::CallLinkInfo::unlink):
+ * jit/JIT.cpp:
+ (JSC::JIT::linkFor):
+ * jit/JIT.h:
+ (JIT):
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileCallEvalSlowCase):
+ (JSC::JIT::compileOpCallSlowCase):
+ * jit/JITCall32_64.cpp:
+ (JSC::JIT::compileCallEvalSlowCase):
+ (JSC::JIT::compileOpCallSlowCase):
+ * jit/JITInlines.h:
+ (JSC):
+ * jit/JITOpcodes.cpp:
+ (JSC):
+ (JSC::JIT::privateCompileCTINativeCall):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC):
+ * jit/JITStubs.cpp:
+ (JSC::tryCacheGetByID):
+ * jit/JITThunks.cpp:
+ (JSC::JITThunks::JITThunks):
+ (JSC::JITThunks::ctiNativeCall):
+ (JSC::JITThunks::ctiNativeConstruct):
+ (JSC):
+ (JSC::JITThunks::hostFunctionStub):
+ * jit/JITThunks.h:
+ (JSC):
+ (JITThunks):
+ * jit/JSInterfaceJIT.h:
+ (JSInterfaceJIT):
+ (JSC::JSInterfaceJIT::emitJumpIfNotJSCell):
+ (JSC):
+ (JSC::JSInterfaceJIT::emitFastArithIntToImmNoCheck):
+ (JSC::JSInterfaceJIT::emitJumpIfNotType):
+ (JSC::JSInterfaceJIT::emitGetFromCallFrameHeaderPtr):
+ (JSC::JSInterfaceJIT::emitPutToCallFrameHeader):
+ (JSC::JSInterfaceJIT::emitPutImmediateToCallFrameHeader):
+ (JSC::JSInterfaceJIT::emitPutCellToCallFrameHeader):
+ (JSC::JSInterfaceJIT::preserveReturnAddressAfterCall):
+ (JSC::JSInterfaceJIT::restoreReturnAddressBeforeReturn):
+ (JSC::JSInterfaceJIT::restoreArgumentReference):
+ * jit/ThunkGenerators.cpp:
+ (JSC::generateSlowCaseFor):
+ (JSC):
+ (JSC::linkForGenerator):
+ (JSC::linkCallGenerator):
+ (JSC::linkConstructGenerator):
+ (JSC::virtualForGenerator):
+ (JSC::virtualCallGenerator):
+ (JSC::virtualConstructGenerator):
+ (JSC::stringLengthTrampolineGenerator):
+ (JSC::nativeForGenerator):
+ (JSC::nativeCallGenerator):
+ (JSC::nativeConstructGenerator):
+ (JSC::charCodeAtThunkGenerator):
+ (JSC::charAtThunkGenerator):
+ (JSC::fromCharCodeThunkGenerator):
+ (JSC::sqrtThunkGenerator):
+ (JSC::floorThunkGenerator):
+ (JSC::ceilThunkGenerator):
+ (JSC::roundThunkGenerator):
+ (JSC::expThunkGenerator):
+ (JSC::logThunkGenerator):
+ (JSC::absThunkGenerator):
+ (JSC::powThunkGenerator):
+ * jit/ThunkGenerators.h:
+ (JSC):
+ * runtime/Executable.h:
+ (NativeExecutable):
+ (JSC::NativeExecutable::nativeFunctionFor):
+ (JSC::NativeExecutable::offsetOfNativeFunctionFor):
+
+2012-12-25 Gyuyoung Kim <gyuyoung.kim@samsung.com>
+
+ [CMAKE] Remove header files in JavaScriptCore/CMakeLists.txt
+ https://bugs.webkit.org/show_bug.cgi?id=105753
+
+ Reviewed by Laszlo Gombos.
+
+ * CMakeLists.txt: Remove header files in source list.
+
+2012-12-25 Filip Pizlo <fpizlo@apple.com>
+
+ JITThunks should be in its own file
+ https://bugs.webkit.org/show_bug.cgi?id=105744
+
+ Rubber stamped by Sam Weinig.
+
+ Moved JITThunks into its own file and removed some static methods from it
+ that were not related to what JITThunks currently does. Performed various
+ pagan rituals to get it to build - apparently there is a circular dependency
+ between JSCell, Weak, and JITThunks, which magically resolves itself if you
+ make sure to first include Register.h. Making it so that fewer pagan rituals
+ need to be performed if this code changes in the future is covered by
+ https://bugs.webkit.org/show_bug.cgi?id=105696.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * jit/JITStubs.cpp:
+ (JSC::tryCachePutByID):
+ (JSC::tryCacheGetByID):
+ * jit/JITStubs.h:
+ (JSC::JITStackFrame::returnAddressSlot):
+ (JSC::returnAddressIsInCtiTrampoline):
+ * jit/JITThunks.cpp: Added.
+ (JSC::JITThunks::JITThunks):
+ (JSC::JITThunks::~JITThunks):
+ (JSC::JITThunks::ctiStub):
+ (JSC::JITThunks::hostFunctionStub):
+ (JSC::JITThunks::clearHostFunctionStubs):
+ * jit/JITThunks.h: Added.
+ (JSC::JITThunks::ctiStringLengthTrampoline):
+ (JSC::JITThunks::ctiVirtualCallLink):
+ (JSC::JITThunks::ctiVirtualConstructLink):
+ (JSC::JITThunks::ctiVirtualCall):
+ (JSC::JITThunks::ctiVirtualConstruct):
+ (JSC::JITThunks::ctiNativeCall):
+ (JSC::JITThunks::ctiNativeConstruct):
+ * jit/ThunkGenerator.h: Added.
+ * jit/ThunkGenerators.cpp:
+ * jit/ThunkGenerators.h:
+ * runtime/JSGlobalData.h:
+
+2012-12-25 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Unreviewed follow-up for r138455.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2012-12-24 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Unreviewed compilation fix for r138452.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2012-12-24 Laszlo Gombos <l.gombos@samsung.com>
+
+ Remove wtf/Platform.h includes from {c|cpp} files
+ https://bugs.webkit.org/show_bug.cgi?id=105678
+
+ Reviewed by Kentaro Hara.
+
+ Remove wtf/Platform.h from the include list as it is already
+ included in config.h.
+
+ * disassembler/udis86/udis86.c:
+ * disassembler/udis86/udis86_decode.c:
+ * disassembler/udis86/udis86_input.c:
+ * disassembler/udis86/udis86_itab_holder.c:
+ * disassembler/udis86/udis86_syn-att.c:
+ * disassembler/udis86/udis86_syn-intel.c:
+ * disassembler/udis86/udis86_syn.c:
+ * heap/VTableSpectrum.cpp:
+
+2012-12-21 Filip Pizlo <fpizlo@apple.com>
+
+ DFG Arrayify slow path should be out-of-line
+ https://bugs.webkit.org/show_bug.cgi?id=105400
+
+ Reviewed by Gavin Barraclough.
+
+ The interesting bit of this change is allowing out-of-line slow path generators
+ to emit speculation checks. This is accomplished by having a version of
+ speculationCheck() that returns a jump placeholder instead of taking a jump (or
+ jump list) as an argument. You can then fill in that jump placeholder at a
+ later time, so long as you do it before OSR exit linking. Slow path generators
+ run before linking, so that just naturally ends up working.
+
+ This isn't really a big win, but we know that out-of-lining slow paths is
+ generally a good thing to do, so it's fair to assume that this is a move in the
+ right direction.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * dfg/DFGArrayifySlowPathGenerator.h: Added.
+ (DFG):
+ (ArrayifySlowPathGenerator):
+ (JSC::DFG::ArrayifySlowPathGenerator::ArrayifySlowPathGenerator):
+ (JSC::DFG::ArrayifySlowPathGenerator::generateInternal):
+ * dfg/DFGOSRExitJumpPlaceholder.cpp: Added.
+ (DFG):
+ (JSC::DFG::OSRExitJumpPlaceholder::fill):
+ * dfg/DFGOSRExitJumpPlaceholder.h: Added.
+ (DFG):
+ (OSRExitJumpPlaceholder):
+ (JSC::DFG::OSRExitJumpPlaceholder::OSRExitJumpPlaceholder):
+ (JSC::DFG::OSRExitJumpPlaceholder::operator!):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::speculationCheck):
+ (DFG):
+ (JSC::DFG::SpeculativeJIT::arrayify):
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+
+2012-12-20 Oliver Hunt <oliver@apple.com>
+
+ Finally found the problem. Using the wrong JSContextGroup.
+
+ * API/tests/testapi.c:
+ (main):
+
+2012-12-20 Oliver Hunt <oliver@apple.com>
+
+ Try to convince bots to be happy with testapi.
+
+ * API/JSScriptRefPrivate.h:
+
+2012-12-20 Michael Saboff <msaboff@apple.com>
+
+ JIT: Change uninitialized pointer value -1 to constant
+ https://bugs.webkit.org/show_bug.cgi?id=105576
+
+ Rubber stamped by Gavin Barraclough.
+
+ Changed the use of -1 as a pointer value in the JITs to be the constant unusedPointer defined in the
+ new file jit/UnusedPointer.h. Made it's value 0xd1e7beef, which is a bad pointer on most architectures
+ because it is odd, and to distinguish it from other common values.
+
+ * GNUmakefile.list.am:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * dfg/DFGRepatch.cpp:
+ (JSC::DFG::dfgResetGetByID):
+ (JSC::DFG::dfgResetPutByID):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::cachedGetById):
+ (JSC::DFG::SpeculativeJIT::cachedPutById):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::cachedGetById):
+ (JSC::DFG::SpeculativeJIT::cachedPutById):
+ * jit/JIT.h:
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::resetPatchGetById):
+ (JSC::JIT::resetPatchPutById):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::resetPatchGetById):
+ (JSC::JIT::resetPatchPutById):
+ * jit/JITWriteBarrier.h:
+ (JSC::JITWriteBarrierBase::clearToUnusedPointer):
+ (JSC::JITWriteBarrierBase::get):
+ * jit/UnusedPointer.h: Added.
+
+2012-12-20 Filip Pizlo <fpizlo@apple.com>
+
+ DFG shouldn't emit CheckStructure on array accesses if exit profiling tells it not to
+ https://bugs.webkit.org/show_bug.cgi?id=105577
+
+ Reviewed by Mark Hahnenberg.
+
+ I don't know why this wasn't there from the beginning.
+
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::getArrayModeAndEmitChecks):
+
+2012-12-19 Filip Pizlo <fpizlo@apple.com>
+
+ DFG speculation checks that take JumpList should consolidate OSRExits
+ https://bugs.webkit.org/show_bug.cgi?id=105401
+
+ Reviewed by Oliver Hunt.
+
+ Change OSRExitCompilationInfo to always contain a JumpList, and change JumpList
+ to be more compact. This way, a speculationCheck that takes a JumpList only has
+ to emit one OSRExit structure, and one OSRExit landing pad.
+
+ The downside is that we get less precise information about *where* we exited
+ from. So, this also includes changes to the profiler to be more relaxed about
+ what an ExitSite is.
+
+ * assembler/AbstractMacroAssembler.h:
+ (JumpList):
+ * dfg/DFGJITCompiler.cpp:
+ (JSC::DFG::JITCompiler::linkOSRExits):
+ (JSC::DFG::JITCompiler::link):
+ * dfg/DFGJITCompiler.h:
+ (DFG):
+ (JSC::DFG::JITCompiler::appendExitInfo):
+ (JITCompiler):
+ * dfg/DFGOSRExitCompilationInfo.h:
+ (OSRExitCompilationInfo):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::speculationCheck):
+ (JSC::DFG::SpeculativeJIT::speculationWatchpoint):
+ (JSC::DFG::SpeculativeJIT::forwardSpeculationCheck):
+ * profiler/ProfilerCompilation.cpp:
+ (JSC::Profiler::Compilation::addOSRExitSite):
+ * profiler/ProfilerCompilation.h:
+ (Compilation):
+ * profiler/ProfilerOSRExitSite.cpp:
+ (JSC::Profiler::OSRExitSite::toJS):
+ * profiler/ProfilerOSRExitSite.h:
+ (JSC::Profiler::OSRExitSite::OSRExitSite):
+ (JSC::Profiler::OSRExitSite::codeAddress):
+ (OSRExitSite):
+
+2012-12-19 Oliver Hunt <oliver@apple.com>
+
+ Fix some incorrect tests in testapi.c
+
+ Reviewed by Simon Fraser.
+
+ * API/tests/testapi.c:
+ (main):
+
+2012-12-19 Filip Pizlo <fpizlo@apple.com>
+
+ JSObject::ensure<IndexingType> should gracefully handle InterceptsGetOwn..., and should never be called when the 'this' is not an object
+ https://bugs.webkit.org/show_bug.cgi?id=105468
+
+ Reviewed by Mark Hahnenberg, Oliver Hunt, and Gavin Barraclough.
+
+ Changed JSObject::ensure<IndexingType> methods to gracefully handle
+ InterceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero. Most of them handle it by returning
+ null as a result of indexingShouldBeSparse() returning true, while ensureArrayStorage handles it
+ by entering dictionary indexing mode, which forces the object to behave correctly even if there
+ is proxying or weird prototype stuff going on.
+
+ Changed DFGOperations entrypoints to reject non-objects, so that JSObject doesn't have to deal
+ with pretending to be JSString. In particular, this would go wrong in the ArrayStorage case
+ since we'd try to resize a butterfly on a JSString, but JSString has something other than
+ m_butterfly at that offset.
+
+ Finally, removed all InterceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero from JIT code
+ since those are now redundant.
+
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGOperations.h:
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::arrayify):
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::callOperation):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::enterDictionaryIndexingMode):
+ (JSC::JSObject::ensureInt32Slow):
+ (JSC::JSObject::ensureDoubleSlow):
+ (JSC::JSObject::ensureContiguousSlow):
+ (JSC::JSObject::ensureArrayStorageSlow):
+ (JSC):
+ (JSC::JSObject::putByIndexBeyondVectorLengthWithoutAttributes):
+ * runtime/JSObject.h:
+ (JSObject):
+
+2012-12-19 Oliver Hunt <oliver@apple.com>
+
+ Tidy up JSScriptRef API
+ https://bugs.webkit.org/show_bug.cgi?id=105470
+
+ Reviewed by Anders Carlsson.
+
+ People found the API's use of a context confusing, so we'll switch to a JSContextGroup based
+ API, and drop a number of the unnecessary uses of contexts.
+
+ * API/JSScriptRef.cpp:
+ (OpaqueJSScript::globalData):
+ (parseScript):
+ * API/JSScriptRefPrivate.h:
+ * API/tests/testapi.c:
+ (main):
+
+2012-12-19 Alexis Menard <alexis@webkit.org>
+
+ Implement CSS parsing for CSS transitions unprefixed.
+ https://bugs.webkit.org/show_bug.cgi?id=104804
+
+ Reviewed by Dean Jackson.
+
+ Add a new flag ENABLE_CSS_TRANSFORMS_ANIMATIONS_TRANSITIONS_UNPREFIXED
+ to cover the work of unprefixing Transforms, Animations and
+ Transitions. It will let the possibility of each ports to turn it off
+ in their release branches until we're confident that these CSS
+ properties are ready to be unprefixed.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2012-12-18 Filip Pizlo <fpizlo@apple.com>
+
+ Proxies should set InterceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero
+ https://bugs.webkit.org/show_bug.cgi?id=105379
+
+ Reviewed by Gavin Barraclough.
+
+ Forgetting to set this flag led to the DFG trying to ensure array storage on a proxy. I've
+ now hardened the code with a release assertion as well as fixing the bug. A release assertion
+ is appropriate here since this is slow-path code.
+
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::enterDictionaryIndexingMode):
+ (JSC::JSObject::ensureInt32Slow):
+ (JSC::JSObject::ensureDoubleSlow):
+ (JSC::JSObject::ensureContiguousSlow):
+ (JSC::JSObject::ensureArrayStorageSlowNoCheck):
+ (JSC::JSObject::ensureArrayStorageSlow):
+ (JSC):
+ (JSC::JSObject::putByIndexBeyondVectorLengthWithoutAttributes):
+ * runtime/JSObject.h:
+ (JSObject):
+ * runtime/JSProxy.h:
+ (JSProxy):
+
+2012-12-18 Oliver Hunt <oliver@apple.com>
+
+ Add a JSScriptRef API to JSC so that we can allow API users to avoid the full cost of reparsing everytime the execute a script.
+ https://bugs.webkit.org/show_bug.cgi?id=105340
+
+ Reviewed by Gavin Barraclough.
+
+ This patch adds a (currently private) API to allow users of the JSC API to create a JSScript object
+ that references a reusable version of the script that they wish to evaluate. This can help us avoid
+ numeorus copies that are otherwise induced by our existing API and gives us an opaque object that we
+ can hang various caches off. Currently this is simply a simple SourceProvider, but in future we may
+ be able to add more caching without requiring new/replacement APIs.
+
+ * API/JSScriptRef.cpp: Added.
+ * API/JSScriptRefPrivate.h: Added.
+ * API/tests/testapi.c:
+ Add tests for new APIs.
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2012-12-18 Filip Pizlo <fpizlo@apple.com>
+
+ DFG::SpeculativeJIT::jumpSlowForUnwantedArrayMode incorrectly checks for non-array array storage when it should be checking for array array storage
+ https://bugs.webkit.org/show_bug.cgi?id=105365
+
+ Reviewed by Mark Hahnenberg.
+
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::jumpSlowForUnwantedArrayMode):
+
+2012-12-18 Filip Pizlo <fpizlo@apple.com>
+
+ SunSpider/date-format-tofte shouldn't compile each of the tiny worthless eval's only to OSR exit in the prologue every time
+ https://bugs.webkit.org/show_bug.cgi?id=105335
+
+ Reviewed by Geoffrey Garen.
+
+ The first thing I did was restructure the logic of canInlineResolveOperations(),
+ because I didn't understand it. This was relevant because the OSR exits are
+ caused by a resolve that the DFG cannot handle.
+
+ I was then going to make it so that we didn't compile the resolve at all, but
+ realized that this would not be the best fix: it didn't seem sensible to me to
+ be optimizing these evals after only 60 invocations. Evals should have a higher
+ threshold, since they often contain code for which the baseline JIT does a
+ pretty good job already (if all you've got is a single heap access or a single
+ hard-to-inline call, then the baseline JIT has got you covered), and typically
+ if we see one eval code block we expect to see more (from the same eval site):
+ so our typical low threshold could lead to a *lot* of compilation. As such, the
+ main effect of this patch is to introduce an evalThresholdMultiplier, which is
+ now set to 10.
+
+ This is a ~5% speed-up on data-format-tofte. No regressions anywhere as far as
+ I can see.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::codeTypeThresholdMultiplier):
+ (JSC):
+ (JSC::CodeBlock::optimizationThresholdScalingFactor):
+ (JSC::CodeBlock::exitCountThresholdForReoptimization):
+ (JSC::CodeBlock::exitCountThresholdForReoptimizationFromLoop):
+ * bytecode/CodeBlock.h:
+ (CodeBlock):
+ * dfg/DFGCapabilities.h:
+ (JSC::DFG::canInlineResolveOperations):
+ * dfg/DFGOSRExitCompiler.cpp:
+ * runtime/Options.h:
+ (JSC):
+
+2012-12-18 Filip Pizlo <fpizlo@apple.com>
+
+ Convert indexingTypeToString to IndexingTypeDump
+ https://bugs.webkit.org/show_bug.cgi?id=105351
+
+ Reviewed by Mark Hahnenberg.
+
+ This gets rid of another case of static char buffer[thingy].
+
+ * dfg/DFGGraph.cpp:
+ (JSC::DFG::Graph::dump):
+ * runtime/IndexingType.cpp:
+ (JSC::dumpIndexingType):
+ * runtime/IndexingType.h:
+ (JSC):
+ * runtime/JSValue.cpp:
+ (JSC::JSValue::dump):
+
+2012-12-18 Beth Dakin <bdakin@apple.com>
+
+ https://bugs.webkit.org/show_bug.cgi?id=102579
+ [mac] Enable scaled cursors
+
+ Reviewed by Dean Jackson.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2012-12-18 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Restrictions on oversize CopiedBlock allocations should be relaxed
+ https://bugs.webkit.org/show_bug.cgi?id=105339
+
+ Reviewed by Filip Pizlo.
+
+ Currently the DFG has a single branch in the inline allocation path for property/array storage where
+ it checks to see if the number of bytes requested will fit in the current block. This does not match
+ what the C++ allocation path does; it checks if the requested number of bytes is oversize, and then
+ if it's not, it tries to fit it in the current block. The garbage collector assumes that ALL allocations
+ that are greater than 16KB are in oversize blocks. Therefore, this mismatch can lead to crashes when
+ the collector tries to perform some operation on a CopiedBlock.
+
+ To avoid adding an extra branch to the inline allocation path in the JIT, we should make it so that
+ oversize blocks are allocated on the same alignment boundaries so that there is a single mask to find
+ the block header of any CopiedBlock (rather than two, one for normal and one for oversize blocks), and
+ we should figure out if a block is oversize by some other method than just whatever the JSObject says
+ it is. One way we could record this info Region of the block, since we allocate a one-off Region for
+ oversize blocks.
+
+ * heap/BlockAllocator.h:
+ (JSC::Region::isCustomSize):
+ (Region):
+ (JSC::Region::createCustomSize):
+ (JSC::Region::Region):
+ (JSC::BlockAllocator::deallocateCustomSize):
+ * heap/CopiedBlock.h:
+ (CopiedBlock):
+ (JSC::CopiedBlock::isOversize):
+ (JSC):
+ * heap/CopiedSpace.cpp:
+ (JSC::CopiedSpace::tryAllocateOversize):
+ (JSC::CopiedSpace::tryReallocate):
+ (JSC::CopiedSpace::tryReallocateOversize):
+ * heap/CopiedSpace.h:
+ (CopiedSpace):
+ * heap/CopiedSpaceInlines.h:
+ (JSC::CopiedSpace::contains):
+ (JSC::CopiedSpace::tryAllocate):
+ (JSC):
+ * heap/CopyVisitor.h:
+ (CopyVisitor):
+ * heap/CopyVisitorInlines.h:
+ (JSC::CopyVisitor::checkIfShouldCopy):
+ (JSC::CopyVisitor::didCopy):
+ * heap/SlotVisitorInlines.h:
+ (JSC::SlotVisitor::copyLater):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::copyButterfly):
+
+2012-12-18 Joseph Pecoraro <pecoraro@apple.com>
+
+ [Mac] Add Build Phase to Check Headers for Inappropriate Macros (Platform.h macros)
+ https://bugs.webkit.org/show_bug.cgi?id=104279
+
+ Reviewed by David Kilzer.
+
+ Add a build phase to check the public JavaScriptCore headers for
+ inappropriate macros.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2012-12-18 Michael Saboff <msaboff@apple.com>
+
+ [Qt] Fix the ARMv7 build after r137976
+ https://bugs.webkit.org/show_bug.cgi?id=105270
+
+ Reviewed by Csaba Osztrogonác.
+
+ Add default value for Jump parameter to fix build.
+
+ * assembler/AbstractMacroAssembler.h:
+ (JSC::AbstractMacroAssembler::Jump::Jump):
+
+2012-12-17 Geoffrey Garen <ggaren@apple.com>
+
+ Constant fold !{number} in the parser
+ https://bugs.webkit.org/show_bug.cgi?id=105232
+
+ Reviewed by Filip Pizlo.
+
+ Typically, we wait for hot execution and constant fold in the DFG.
+ However, !0 and !1 are common enough in minifiers that it can be good
+ to get them out of the way early, for faster/smaller parsing and startup.
+
+ * parser/ASTBuilder.h:
+ (JSC::ASTBuilder::createLogicalNot): !{literal} is super simple, especially
+ since there's no literal form of NaN or Inf.
+
+2012-12-17 Filip Pizlo <fpizlo@apple.com>
+
+ DFG is too aggressive eliding overflow checks for additions involving large constants
+ https://bugs.webkit.org/show_bug.cgi?id=105239
+
+ Reviewed by Gavin Barraclough.
+
+ If we elide overflow checks on an addition (or subtraction) involving a larger-than-2^32 immediate,
+ then make sure that the non-constant child of the addition knows that he's got to do an overflow
+ check, by flowing the UsedAsNumber property at him.
+
+ * dfg/DFGGraph.h:
+ (JSC::DFG::Graph::addSpeculationMode):
+ (Graph):
+ (JSC::DFG::Graph::addShouldSpeculateInteger):
+ (JSC::DFG::Graph::addImmediateShouldSpeculateInteger):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+
+2012-12-17 Michael Saboff <msaboff@apple.com>
+
+ DFG: Refactor DFGCorrectableJumpPoint to reduce size of OSRExit data
+ https://bugs.webkit.org/show_bug.cgi?id=105237
+
+ Reviewed by Filip Pizlo.
+
+ Replaced DFGCorrectableJumpPoint with OSRExitCompilationInfo which is used and kept alive only while we are
+ compiling in the DFG. Moved the patchable branch offset directly into OSRExit.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * assembler/AbstractMacroAssembler.h:
+ * dfg/DFGCorrectableJumpPoint.cpp: Removed.
+ * dfg/DFGCorrectableJumpPoint.h: Removed.
+ * dfg/DFGJITCompiler.cpp:
+ (JSC::DFG::JITCompiler::linkOSRExits):
+ (JSC::DFG::JITCompiler::link):
+ * dfg/DFGJITCompiler.h:
+ (JSC::DFG::JITCompiler::appendExitJump):
+ (JITCompiler):
+ * dfg/DFGOSRExit.cpp:
+ (JSC::DFG::OSRExit::OSRExit):
+ (JSC::DFG::OSRExit::setPatchableCodeOffset):
+ (JSC::DFG::OSRExit::getPatchableCodeOffsetAsJump):
+ (JSC::DFG::OSRExit::codeLocationForRepatch):
+ (JSC::DFG::OSRExit::correctJump):
+ * dfg/DFGOSRExit.h:
+ (OSRExit):
+ * dfg/DFGOSRExitCompilationInfo.h: Added.
+ (OSRExitCompilationInfo):
+ (JSC::DFG::OSRExitCompilationInfo::OSRExitCompilationInfo):
+ (JSC::DFG::OSRExitCompilationInfo::failureJump):
+ * dfg/DFGOSRExitCompiler.cpp:
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::speculationCheck):
+ (JSC::DFG::SpeculativeJIT::speculationWatchpoint):
+
+2012-12-17 Filip Pizlo <fpizlo@apple.com>
+
+ DFG is too aggressive with eliding overflow checks in loops
+ https://bugs.webkit.org/show_bug.cgi?id=105226
+
+ Reviewed by Mark Hahnenberg and Oliver Hunt.
+
+ If we see a variable's live range cross basic block boundaries, conservatively assume that it may
+ be part of a data-flow back-edge, and as a result, we may have entirely integer operations that
+ could lead to the creation of an integer that is out of range of 2^52 (the significand of a double
+ float). This does not seem to regress any of the benchmarks we care about, and it fixes the bug.
+
+ In future we may want to actually look at whether or not there was a data-flow back-edge instead
+ of being super conservative about it. But we have no evidence, yet, that this would help us on
+ real code.
+
+ * dfg/DFGNodeFlags.h:
+ (DFG):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+
+2012-12-17 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Butterfly::growArrayRight shouldn't be called on null Butterfly objects
+ https://bugs.webkit.org/show_bug.cgi?id=105221
+
+ Reviewed by Filip Pizlo.
+
+ Currently we depend upon the fact that Butterfly::growArrayRight works with null Butterfly
+ objects purely by coincidence. We should add a new static function that null checks the old
+ Butterfly object and creates a new one if it's null, or calls growArrayRight if it isn't for
+ use in the couple of places in JSObject that expect such behavior to work.
+
+ * runtime/Butterfly.h:
+ (Butterfly):
+ * runtime/ButterflyInlines.h:
+ (JSC::Butterfly::createOrGrowArrayRight):
+ (JSC):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::createInitialIndexedStorage):
+ (JSC::JSObject::createArrayStorage):
+
+2012-12-17 Filip Pizlo <fpizlo@apple.com>
+
+ javascript integer overflow
+ https://bugs.webkit.org/show_bug.cgi?id=104967
+
+ Reviewed by Mark Hahnenberg.
+
+ Fix PutScopedVar backward flow.
+
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+
+2012-12-16 Filip Pizlo <fpizlo@apple.com>
+
+ Rationalize array profiling for out-of-bounds and hole cases
+ https://bugs.webkit.org/show_bug.cgi?id=105139
+
+ Reviewed by Geoffrey Garen.
+
+ This makes ArrayProfile track whether or not we had out-of-bounds, which allows
+ for more precise decision-making in the DFG.
+
+ Also cleaned up ExitKinds for out-of-bounds and hole cases to make it easier to
+ look at them in the profiler.
+
+ Slight speed-up (5-8%) on SunSpider/crypto-md5.
+
+ * bytecode/ArrayProfile.cpp:
+ (JSC::ArrayProfile::computeUpdatedPrediction):
+ (JSC::ArrayProfile::briefDescription):
+ * bytecode/ArrayProfile.h:
+ (JSC::ArrayProfile::ArrayProfile):
+ (JSC::ArrayProfile::addressOfOutOfBounds):
+ (JSC::ArrayProfile::expectedStructure):
+ (JSC::ArrayProfile::structureIsPolymorphic):
+ (JSC::ArrayProfile::outOfBounds):
+ (JSC::ArrayProfile::polymorphicStructure):
+ * bytecode/CodeBlock.cpp:
+ (JSC::dumpChain):
+ * bytecode/ExitKind.cpp:
+ (JSC::exitKindToString):
+ (JSC::exitKindIsCountable):
+ * bytecode/ExitKind.h:
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::getArrayModeAndEmitChecks):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileDoublePutByVal):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compileContiguousPutByVal):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * jit/JIT.h:
+ * jit/JITInlines.h:
+ (JSC::JIT::emitArrayProfileOutOfBoundsSpecialCase):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emitSlow_op_get_by_val):
+ (JSC::JIT::emitSlow_op_put_by_val):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::emitSlow_op_get_by_val):
+ (JSC::JIT::emitSlow_op_put_by_val):
+ * llint/LowLevelInterpreter32_64.asm:
+ * llint/LowLevelInterpreter64.asm:
+
+2012-12-17 Balazs Kilvady <kilvadyb@homejinni.com>
+
+ Implement add64 for MIPS assembler after r136601
+ https://bugs.webkit.org/show_bug.cgi?id=104106
+
+ Reviewed by Zoltan Herczeg.
+
+ Added add64 function to MacroAssebler of MIPS.
+
+ * assembler/MacroAssemblerMIPS.h:
+ (JSC::MacroAssemblerMIPS::add32):
+ (JSC::MacroAssemblerMIPS::add64):
+ (MacroAssemblerMIPS):
+
+2012-12-17 Jonathan Liu <net147@gmail.com>
+
+ Fix Math.pow implementation with MinGW-w64
+ https://bugs.webkit.org/show_bug.cgi?id=105087
+
+ Reviewed by Simon Hausmann.
+
+ The MinGW-w64 runtime has different behaviour for pow()
+ compared to other C runtimes. This results in the following
+ test262 tests failing with the latest MinGW-w64 runtime:
+ - S15.8.2.13_A14
+ - S15.8.2.13_A16
+ - S15.8.2.13_A20
+ - S15.8.2.13_A22
+
+ Handle the special cases that are different with MinGW-w64.
+
+ * runtime/MathObject.cpp:
+ (JSC::mathPow):
+
+2012-12-16 Filip Pizlo <fpizlo@apple.com>
+
+ Bytecode dumping should show rare case profiles
+ https://bugs.webkit.org/show_bug.cgi?id=105133
+
+ Reviewed by Geoffrey Garen.
+
+ Refactored the dumper to call dumpBytecodeCommandAndNewLine in just one place,
+ rather than in all of the places. Changed the rare case profile getters to use
+ tryBinarySearch rather than binarySearch, so that they can be used speculatively
+ even if you don't know that the bytecode has rare case profiles. This actually
+ increases our assertion level, since it means that in release builds we will get
+ null and crash rather than getting some random adjacent profile. And then this
+ adds some printing of the rare case profiles.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::printUnaryOp):
+ (JSC::CodeBlock::printBinaryOp):
+ (JSC::CodeBlock::printConditionalJump):
+ (JSC::CodeBlock::printCallOp):
+ (JSC::CodeBlock::printPutByIdOp):
+ (JSC::CodeBlock::beginDumpProfiling):
+ (JSC):
+ (JSC::CodeBlock::dumpValueProfiling):
+ (JSC::CodeBlock::dumpArrayProfiling):
+ (JSC::CodeBlock::dumpRareCaseProfile):
+ (JSC::CodeBlock::dumpBytecode):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::rareCaseProfileForBytecodeOffset):
+ (JSC::CodeBlock::specialFastCaseProfileForBytecodeOffset):
+
+2012-12-13 Filip Pizlo <fpizlo@apple.com>
+
+ Attempt to rationalize and simplify WTF::binarySearch
+ https://bugs.webkit.org/show_bug.cgi?id=104890
+
+ Reviewed by Maciej Stachowiak.
+
+ Switch to using the new binarySearch() API. No change in behavior.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::bytecodeOffset):
+ (JSC::CodeBlock::codeOriginForReturn):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::getStubInfo):
+ (JSC::CodeBlock::getByValInfo):
+ (JSC::CodeBlock::getCallLinkInfo):
+ (JSC::CodeBlock::dfgOSREntryDataForBytecodeIndex):
+ (JSC::CodeBlock::valueProfileForBytecodeOffset):
+ (JSC::CodeBlock::rareCaseProfileForBytecodeOffset):
+ (JSC::CodeBlock::specialFastCaseProfileForBytecodeOffset):
+ * dfg/DFGGraph.h:
+ (JSC::DFG::Graph::blockIndexForBytecodeOffset):
+ * dfg/DFGMinifiedGraph.h:
+ (JSC::DFG::MinifiedGraph::at):
+ * dfg/DFGOSRExitCompiler32_64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGOSRExitCompiler64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * llint/LLIntSlowPaths.cpp:
+ (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+ * profiler/ProfilerBytecodeSequence.cpp:
+ (JSC::Profiler::BytecodeSequence::indexForBytecodeIndex):
+
+2012-12-13 Filip Pizlo <fpizlo@apple.com>
+
+ Don't assert that flags <= 0x3ff in JSTypeInfo
+ https://bugs.webkit.org/show_bug.cgi?id=104988
+
+ Reviewed by Sam Weinig.
+
+ This assertion doesn't accomplish anything other than crashes.
+
+ * runtime/JSTypeInfo.h:
+ (JSC::TypeInfo::TypeInfo):
+
+2012-12-13 Filip Pizlo <fpizlo@apple.com>
+
+ Named lookups on HTML documents produce inconsistent results in JavaScriptCore bindings
+ https://bugs.webkit.org/show_bug.cgi?id=104623
+
+ Reviewed by Geoffrey Garen.
+
+ Add the notion of objects that HasImpureGetOwnPropertySlot, and use that to inhibit prototype chain caching
+ in some cases. This appears to be perf-neutral on benchmarks that we track.
+
+ * dfg/DFGRepatch.cpp:
+ (JSC::DFG::tryCacheGetByID):
+ (JSC::DFG::tryBuildGetByIDProtoList):
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::tryCacheGetByID):
+ (JSC::DEFINE_STUB_FUNCTION):
+ * runtime/JSTypeInfo.h:
+ (JSC):
+ (JSC::TypeInfo::hasImpureGetOwnPropertySlot):
+ * runtime/Operations.h:
+ (JSC::normalizePrototypeChainForChainAccess):
+
+2012-12-13 Filip Pizlo <fpizlo@apple.com>
+
+ Unreviewed, roll out http://trac.webkit.org/changeset/137683.
+ It broke gmail.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::putStructureStoreElimination):
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ * dfg/DFGCapabilities.h:
+ (JSC::DFG::canCompileOpcode):
+ * dfg/DFGNodeType.h:
+ (DFG):
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGOperations.h:
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * runtime/Operations.cpp:
+ (JSC::jsTypeStringForValue):
+ (JSC):
+ * runtime/Operations.h:
+ (JSC):
+
+2012-13-11 Oliver Hunt <oliver@apple.com>
+
+ Support op_typeof in the DFG
+ https://bugs.webkit.org/show_bug.cgi?id=98898
+
+ Reviewed by Filip Pizlo.
+
+ Adds a TypeOf node to the DFG to support op_typeof.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ We try to determine the result early here, and substitute in a constant.
+ Otherwise we leave the node intact, and set the result type to SpecString.
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ Parse op_typeof
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ TypeOf nodes can be subjected to pure CSE
+ * dfg/DFGCapabilities.h:
+ (JSC::DFG::canCompileOpcode):
+ We can handle typeof.
+ * dfg/DFGNodeType.h:
+ (DFG):
+ Define the node.
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGOperations.h:
+ Add operationTypeOf to support the non-trivial cases.
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ Actual codegen
+ * runtime/Operations.cpp:
+ (JSC::jsTypeStringForValue):
+ (JSC):
+ * runtime/Operations.h:
+ (JSC):
+ Some refactoring to allow us to get the type string for an
+ object without needing a callframe.
+
+2012-12-12 Filip Pizlo <fpizlo@apple.com>
+
+ OSR exit compiler should emit code for resetting the execution counter that matches the logic of ExecutionCounter.cpp
+ https://bugs.webkit.org/show_bug.cgi?id=104791
+
+ Reviewed by Oliver Hunt.
+
+ The OSR exit compiler wants to make it so that every OSR exit does the equivalent
+ of:
+
+ codeBlock->m_jitExecuteCounter.setNewThreshold(
+ codeBlock->counterValueForOptimizeAfterLongWarmUp());
+
+ This logically involves:
+
+ - Resetting the counter to zero.
+ - Setting m_activeThreshold to counterValueForOptimizeAfterLongWarmUp().
+ - Figuring out the scaled threshold, subtracting the count so far (which is zero,
+ so this part is a no-op), and clipping (ExecuteCounter::clippedThreshold()).
+ - Setting m_counter to the negated clipped threshold.
+ - Setting m_totalCount to the previous count so far (which is zero) plus the
+ clipped threshold.
+
+ Because of the reset, which sets the count-so-far to zero, this amounts to:
+
+ - Setting m_activeThreshold to counterValueForOptimizeAfterLongWarmUp().
+ - Figuring out the clipped scaled threshold.
+ - Setting m_counter to the negated clipped scaled threshold.
+ - Setting m_totalCount to the (positive) clipped scaled threshold.
+
+ The code was previously not doing this, but now is. This is performance neutral.
+ The only change in behavior over what the code was previously doing (setting the
+ m_counter to the negated scaled threshold, without clipping, and then setting
+ the m_totalCount to the clipped scaled threshold) is that this will respond more
+ gracefully under memory pressure and will ensure that we get more value profile
+ LUBing before triggering recompilation. More LUBing is almost always a good
+ thing.
+
+ * dfg/DFGOSRExitCompiler.cpp:
+ (JSC::DFG::OSRExitCompiler::handleExitCounts):
+
+2012-12-12 Ilya Tikhonovsky <loislo@chromium.org>
+
+ Web Inspector: Native Memory Instrumentation: remove fake root MemoryObjectInfo.
+ https://bugs.webkit.org/show_bug.cgi?id=104796
+
+ Reviewed by Yury Semikhatsky.
+
+ It was not a good idea to introduce a fake root MemoryObjectInfo.
+ It makes a problem when we visit an object without its own MemoryObjectType.
+
+ Example: RenderBox has a global pointer to a hash map.
+ HashMap doesn't have its own object type because it is a generic container.
+ It will inherit object type from the fake root memory object info.
+ The same could happen for another container in another class with other MemoryObjectType.
+
+ This fact forces me to create custom process method for root objects
+ because they need to have their own MemoryObjectInfo with customisable memory object type.
+
+ Drive by fix: InstrumentedPointer* was replaced with Wrapper* because actually it is using
+ for instrumented and not instrumented object classes.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2012-12-11 Gabor Ballabas <gaborb@inf.u-szeged.hu>
+
+ Implement add64 for ARM traditional assembler after r136601
+ https://bugs.webkit.org/show_bug.cgi?id=104103
+
+ Reviewed by Zoltan Herczeg.
+
+ Implement add64 function for ARM traditional macroassembler.
+
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::add64):
+ (MacroAssemblerARM):
+
+2012-12-11 Filip Pizlo <fpizlo@apple.com>
+
+ Unreviewed. Fix build with DFG_ENABLE(DEBUG_PROPAGATION_VERBOSE).
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::tallyFrequentExitSites):
+
+2012-12-11 Filip Pizlo <fpizlo@apple.com>
+
+ Profiler should show bytecode dumps as they would have been visible to the JITs, including the profiling data that the JITs would see
+ https://bugs.webkit.org/show_bug.cgi?id=104647
+
+ Reviewed by Oliver Hunt.
+
+ Adds more profiling data to bytecode dumps, and adds the ability to do a secondary
+ bytecode dump for each JIT compilation of a code block. This is relevant because both
+ the bytecodes, and the profiling data, may change after some number of executions.
+
+ Also fixes some random dumping code to use PrintStream& rather than
+ static const char[thingy].
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * bytecode/ArrayProfile.cpp:
+ (JSC::dumpArrayModes):
+ (JSC::ArrayProfile::briefDescription):
+ * bytecode/ArrayProfile.h:
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::printGetByIdOp):
+ (JSC::CodeBlock::printGetByIdCacheStatus):
+ (JSC::CodeBlock::printCallOp):
+ (JSC::CodeBlock::dumpValueProfiling):
+ (JSC::CodeBlock::dumpArrayProfiling):
+ (JSC::CodeBlock::dumpBytecode):
+ * bytecode/CodeBlock.h:
+ * bytecode/ValueProfile.h:
+ (JSC::ValueProfileBase::briefDescription):
+ * dfg/DFGAbstractValue.h:
+ (JSC::DFG::AbstractValue::dump):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseCodeBlock):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompile):
+ * profiler/ProfilerBytecodeSequence.cpp: Added.
+ (JSC::Profiler::BytecodeSequence::BytecodeSequence):
+ (JSC::Profiler::BytecodeSequence::~BytecodeSequence):
+ (JSC::Profiler::BytecodeSequence::indexForBytecodeIndex):
+ (JSC::Profiler::BytecodeSequence::forBytecodeIndex):
+ (JSC::Profiler::BytecodeSequence::addSequenceProperties):
+ * profiler/ProfilerBytecodeSequence.h: Added.
+ (JSC::Profiler::BytecodeSequence::size):
+ (JSC::Profiler::BytecodeSequence::at):
+ * profiler/ProfilerBytecodes.cpp:
+ (JSC::Profiler::Bytecodes::Bytecodes):
+ (JSC::Profiler::Bytecodes::toJS):
+ * profiler/ProfilerBytecodes.h:
+ (JSC::Profiler::Bytecodes::instructionCount):
+ * profiler/ProfilerCompilation.cpp:
+ (JSC::Profiler::Compilation::addProfiledBytecodes):
+ (JSC::Profiler::Compilation::toJS):
+ * profiler/ProfilerCompilation.h:
+ (JSC::Profiler::Compilation::profiledBytecodesSize):
+ (JSC::Profiler::Compilation::profiledBytecodesAt):
+ * profiler/ProfilerDatabase.cpp:
+ (JSC::Profiler::Database::ensureBytecodesFor):
+ * profiler/ProfilerDatabase.h:
+ * profiler/ProfilerProfiledBytecodes.cpp: Added.
+ (JSC::Profiler::ProfiledBytecodes::ProfiledBytecodes):
+ (JSC::Profiler::ProfiledBytecodes::~ProfiledBytecodes):
+ (JSC::Profiler::ProfiledBytecodes::toJS):
+ * profiler/ProfilerProfiledBytecodes.h: Added.
+ (JSC::Profiler::ProfiledBytecodes::bytecodes):
+ * runtime/CommonIdentifiers.h:
+
+2012-12-11 Oswald Buddenhagen <oswald.buddenhagen@digia.com>
+
+ [Qt] delete dead include paths
+
+ Reviewed by Simon Hausmann.
+
+ followup to https://bugs.webkit.org/show_bug.cgi?id=93446
+
+ * JavaScriptCore.pri:
+
+2012-12-11 Julien BRIANCEAU <jbrianceau@nds.com>
+
+ Implement add64 for SH4 assembler to fix build after r136601
+ https://bugs.webkit.org/show_bug.cgi?id=104377
+
+ Reviewed by Zoltan Herczeg.
+
+ * assembler/MacroAssemblerSH4.h:
+ (JSC::MacroAssemblerSH4::add64):
+ (MacroAssemblerSH4):
+
+2012-12-10 Yury Semikhatsky <yurys@chromium.org>
+
+ Memory instrumentation: make sure each edge is reported only once
+ https://bugs.webkit.org/show_bug.cgi?id=104630
+
+ Reviewed by Pavel Feldman.
+
+ Changed exported symbols for MemoryInstrumentation.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2012-12-10 Filip Pizlo <fpizlo@apple.com>
+
+ Don't OSR exit just because a string is a rope
+ https://bugs.webkit.org/show_bug.cgi?id=104621
+
+ Reviewed by Michael Saboff.
+
+ Slight SunSpider speed-up at around the 0.7% level. This patch does the obvious
+ thing of calling a slow path to resolve ropes rather than OSR exiting if the
+ string is a rope.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGArrayMode.h:
+ (JSC::DFG::ArrayMode::getIndexedPropertyStorageMayTriggerGC):
+ (ArrayMode):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::putStructureStoreElimination):
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGOperations.h:
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::callOperation):
+
+2012-12-10 Gustavo Noronha Silva <gns@gnome.org>
+
+ Unreviewed distcheck fix.
+
+ * GNUmakefile.list.am:
+
+2012-12-10 Filip Pizlo <fpizlo@apple.com>
+
+ JSC profiling and debug dump code should use inferred names when possible
+ https://bugs.webkit.org/show_bug.cgi?id=104519
+
+ Reviewed by Oliver Hunt.
+
+ This does as advertised: the profiler now knows the inferred name of all code blocks,
+ and all uses of CodeBlock::dump() dump it along with the hash.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::inferredName):
+ (JSC::CodeBlock::dumpAssumingJITType):
+ * bytecode/CodeBlock.h:
+ * profiler/ProfilerBytecodes.cpp:
+ (JSC::Profiler::Bytecodes::Bytecodes):
+ (JSC::Profiler::Bytecodes::toJS):
+ * profiler/ProfilerBytecodes.h:
+ (JSC::Profiler::Bytecodes::inferredName):
+ * profiler/ProfilerDatabase.cpp:
+ (JSC::Profiler::Database::addBytecodes):
+ (JSC::Profiler::Database::ensureBytecodesFor):
+ * profiler/ProfilerDatabase.h:
+ * runtime/CommonIdentifiers.h:
+
+2012-12-09 Filip Pizlo <fpizlo@apple.com>
+
+ Profiler should say things about OSR exits
+ https://bugs.webkit.org/show_bug.cgi?id=104497
+
+ Reviewed by Oliver Hunt.
+
+ This adds support for profiling OSR exits. For each exit that is taken, the profiler
+ records the machine code address that the exit occurred on, the exit kind, the origin
+ stack, and the number of times that it happened.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * assembler/AbstractMacroAssembler.h:
+ (Jump):
+ (JSC::AbstractMacroAssembler::Jump::label):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::saveCompilation):
+ (CodeBlock):
+ (JSC::CodeBlock::compilation):
+ (DFGData):
+ * bytecode/DFGExitProfile.h:
+ (DFG):
+ * bytecode/ExitKind.cpp: Added.
+ (JSC):
+ (JSC::exitKindToString):
+ (JSC::exitKindIsCountable):
+ (WTF):
+ (WTF::printInternal):
+ * bytecode/ExitKind.h: Added.
+ (JSC):
+ (WTF):
+ * dfg/DFGGraph.h:
+ (Graph):
+ * dfg/DFGJITCompiler.cpp:
+ (JSC::DFG::JITCompiler::linkOSRExits):
+ (JSC::DFG::JITCompiler::link):
+ (JSC::DFG::JITCompiler::compile):
+ (JSC::DFG::JITCompiler::compileFunction):
+ * dfg/DFGJITCompiler.h:
+ (JITCompiler):
+ * dfg/DFGOSRExitCompiler.cpp:
+ * jit/JIT.cpp:
+ (JSC::JIT::JIT):
+ (JSC::JIT::privateCompile):
+ * jit/JIT.h:
+ (JIT):
+ * jit/JumpReplacementWatchpoint.h:
+ (JSC::JumpReplacementWatchpoint::sourceLabel):
+ (JumpReplacementWatchpoint):
+ * profiler/ProfilerCompilation.cpp:
+ (JSC::Profiler::Compilation::addOSRExitSite):
+ (Profiler):
+ (JSC::Profiler::Compilation::addOSRExit):
+ (JSC::Profiler::Compilation::toJS):
+ * profiler/ProfilerCompilation.h:
+ (Compilation):
+ * profiler/ProfilerDatabase.cpp:
+ (JSC::Profiler::Database::newCompilation):
+ * profiler/ProfilerDatabase.h:
+ (Database):
+ * profiler/ProfilerOSRExit.cpp: Added.
+ (Profiler):
+ (JSC::Profiler::OSRExit::OSRExit):
+ (JSC::Profiler::OSRExit::~OSRExit):
+ (JSC::Profiler::OSRExit::toJS):
+ * profiler/ProfilerOSRExit.h: Added.
+ (Profiler):
+ (OSRExit):
+ (JSC::Profiler::OSRExit::id):
+ (JSC::Profiler::OSRExit::origin):
+ (JSC::Profiler::OSRExit::exitKind):
+ (JSC::Profiler::OSRExit::isWatchpoint):
+ (JSC::Profiler::OSRExit::counterAddress):
+ (JSC::Profiler::OSRExit::count):
+ * profiler/ProfilerOSRExitSite.cpp: Added.
+ (Profiler):
+ (JSC::Profiler::OSRExitSite::toJS):
+ * profiler/ProfilerOSRExitSite.h: Added.
+ (Profiler):
+ (OSRExitSite):
+ (JSC::Profiler::OSRExitSite::OSRExitSite):
+ (JSC::Profiler::OSRExitSite::codeAddress):
+ * runtime/CommonIdentifiers.h:
+
+2012-12-10 Alexis Menard <alexis@webkit.org>
+
+ [CSS3 Backgrounds and Borders] Remove CSS3_BACKGROUND feature flag.
+ https://bugs.webkit.org/show_bug.cgi?id=104539
+
+ Reviewed by Antonio Gomes.
+
+ As discussed on webkit-dev it is not needed to keep this feature flag
+ as support for <position> type is a small feature that is already
+ implemented by three other UAs. It was useful while landing this
+ feature as partial bits were landed one after one.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2012-12-09 Filip Pizlo <fpizlo@apple.com>
+
+ DFG ArrayPush/Pop should not pass their second child as the index for blessArrayOperation()
+ https://bugs.webkit.org/show_bug.cgi?id=104500
+
+ Reviewed by Oliver Hunt.
+
+ Slight across-the-board speed-up.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+
+2012-12-08 Filip Pizlo <fpizlo@apple.com>
+
+ JSC should scale the optimization threshold for a code block according to the cost of compiling it
+ https://bugs.webkit.org/show_bug.cgi?id=104406
+
+ Reviewed by Oliver Hunt.
+
+ We've long known that we want to scale the execution count threshold needed for the DFG
+ to kick in to scale according to some estimate of the cost of compiling that code block.
+ This institutes a relationship like this:
+
+ threshold = thresholdSetting * (a * sqrt(instructionCount + b) + abs(c * instructionCount) + d
+
+ Where a, b, c, d are coefficients derived from fitting the above expression to various
+ data points, which I chose based on looking at one benchmark (3d-cube) and from my
+ own intuitions.
+
+ Making this work well also required changing the thresholdForOptimizeAfterLongWarmUp
+ from 5000 to 1000.
+
+ This is a >1% speed-up on SunSpider, a >3% speed-up on V8Spider, ~1% speed-up on V8v7,
+ neutral on Octane, and neutral on Kraken.
+
+ I also out-of-lined a bunch of methods related to these heuristics, because I couldn't
+ stand having them defined in the header anymore. I also made improvements to debugging
+ code because I needed it for tuning this change.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::sourceCodeForTools):
+ (JSC::CodeBlock::sourceCodeOnOneLine):
+ (JSC::CodeBlock::dumpBytecode):
+ (JSC::CodeBlock::CodeBlock):
+ (JSC::CodeBlock::reoptimizationRetryCounter):
+ (JSC::CodeBlock::countReoptimization):
+ (JSC::CodeBlock::optimizationThresholdScalingFactor):
+ (JSC::clipThreshold):
+ (JSC::CodeBlock::counterValueForOptimizeAfterWarmUp):
+ (JSC::CodeBlock::counterValueForOptimizeAfterLongWarmUp):
+ (JSC::CodeBlock::counterValueForOptimizeSoon):
+ (JSC::CodeBlock::checkIfOptimizationThresholdReached):
+ (JSC::CodeBlock::optimizeNextInvocation):
+ (JSC::CodeBlock::dontOptimizeAnytimeSoon):
+ (JSC::CodeBlock::optimizeAfterWarmUp):
+ (JSC::CodeBlock::optimizeAfterLongWarmUp):
+ (JSC::CodeBlock::optimizeSoon):
+ (JSC::CodeBlock::adjustedExitCountThreshold):
+ (JSC::CodeBlock::exitCountThresholdForReoptimization):
+ (JSC::CodeBlock::exitCountThresholdForReoptimizationFromLoop):
+ (JSC::CodeBlock::shouldReoptimizeNow):
+ (JSC::CodeBlock::shouldReoptimizeFromLoopNow):
+ * bytecode/CodeBlock.h:
+ * bytecode/ExecutionCounter.cpp:
+ (JSC::ExecutionCounter::hasCrossedThreshold):
+ * bytecode/ReduceWhitespace.cpp: Added.
+ (JSC::reduceWhitespace):
+ * bytecode/ReduceWhitespace.h: Added.
+ * dfg/DFGCapabilities.cpp:
+ (JSC::DFG::mightCompileEval):
+ (JSC::DFG::mightCompileProgram):
+ (JSC::DFG::mightCompileFunctionForCall):
+ (JSC::DFG::mightCompileFunctionForConstruct):
+ (JSC::DFG::mightInlineFunctionForCall):
+ (JSC::DFG::mightInlineFunctionForConstruct):
+ * dfg/DFGCapabilities.h:
+ * dfg/DFGDisassembler.cpp:
+ (JSC::DFG::Disassembler::dumpHeader):
+ * dfg/DFGOSREntry.cpp:
+ (JSC::DFG::prepareOSREntry):
+ * jit/JITDisassembler.cpp:
+ (JSC::JITDisassembler::dumpHeader):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * llint/LLIntSlowPaths.cpp:
+ (JSC::LLInt::entryOSR):
+ (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+ * profiler/ProfilerDatabase.cpp:
+ (JSC::Profiler::Database::ensureBytecodesFor):
+ * runtime/Options.h:
+
+2012-12-07 Jonathan Liu <net147@gmail.com>
+
+ Add missing forward declaration for JSC::ArrayAllocationProfile
+ https://bugs.webkit.org/show_bug.cgi?id=104425
+
+ Reviewed by Kentaro Hara.
+
+ The header for the JSC::ArrayConstructor class is missing a forward
+ declaration for the JSC::ArrayAllocationProfile class which causes
+ compilation to fail when compiling with MinGW-w64.
+
+ * runtime/ArrayConstructor.h:
+ (JSC):
+
+2012-12-07 Jonathan Liu <net147@gmail.com>
+
+ Add missing const qualifier to JSC::CodeBlock::getJITType()
+ https://bugs.webkit.org/show_bug.cgi?id=104424
+
+ Reviewed by Laszlo Gombos.
+
+ JSC::CodeBlock::getJITType() has the const qualifier when JIT is
+ enabled but is missing the const qualifier when JIT is disabled.
+
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::getJITType):
+
+2012-12-07 Oliver Hunt <oliver@apple.com>
+
+ Make function code cache proportional to main codeblock cache
+ https://bugs.webkit.org/show_bug.cgi?id=104420
+
+ Reviewed by Geoffrey Garen.
+
+ Makes the constants determining the recently used function cache proportional
+ to the number of root codeblocks in the cache. Also renames the constants to
+ make them more clear.
+
+ * runtime/CodeCache.h:
+
+2012-12-06 Filip Pizlo <fpizlo@apple.com>
+
+ Strange results calculating a square root in a loop
+ https://bugs.webkit.org/show_bug.cgi?id=104247
+ <rdar://problem/12826880>
+
+ Reviewed by Oliver Hunt.
+
+ Fixed the CFG simplification phase to ignore dead GetLocals in the first of the blocks
+ under the merge. This fixes the assertion, and is also cleaner: our general rule is
+ to not "revive" things that we've already proved to be dead.
+
+ Also fixed some rotted debug code.
+
+ * dfg/DFGCFGSimplificationPhase.cpp:
+ (JSC::DFG::CFGSimplificationPhase::fixPossibleGetLocal):
+ * dfg/DFGStructureCheckHoistingPhase.cpp:
+ (JSC::DFG::StructureCheckHoistingPhase::run):
+
+2012-12-07 Geoffrey Garen <ggaren@apple.com>
+
+ Crash in JSC::Bindings::RootObject::globalObject() sync'ing notes in Evernote
+ https://bugs.webkit.org/show_bug.cgi?id=104321
+ <rdar://problem/12770497>
+
+ Reviewed by Sam Weinig.
+
+ Work around a JSValueUnprotect(NULL) in Evernote.
+
+ * API/JSValueRef.cpp:
+ (evernoteHackNeeded):
+ (JSValueUnprotect):
+
+2012-12-06 Filip Pizlo <fpizlo@apple.com>
+
+ Incorrect inequality for checking whether a statement is within bounds of a handler
+ https://bugs.webkit.org/show_bug.cgi?id=104313
+ <rdar://problem/12808934>
+
+ Reviewed by Geoffrey Garen.
+
+ The most relevant change is in handlerForBytecodeOffset(), which fixes the inequality
+ used for checking whether a handler is pertinent to the current instruction. '<' is
+ correct, but '<=' isn't, since the 'end' is not inclusive.
+
+ Also found, and addressed, a benign goof in how the finally inliner works: sometimes
+ we will have end > start. This falls out naturally from how the inliner works and how
+ we pop scopes in the bytecompiler, but it's sufficiently surprising that, to avoid any
+ future confusion, I added a comment and some code to prune those handlers out. Because
+ of how the handler resolution works, these handlers would have been skipped anyway.
+
+ Also made various fixes to debugging code, which was necessary for tracking this down.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dumpBytecode):
+ (JSC::CodeBlock::handlerForBytecodeOffset):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::generate):
+ * bytecompiler/Label.h:
+ (JSC::Label::bind):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::throwException):
+ * llint/LLIntExceptions.cpp:
+ (JSC::LLInt::interpreterThrowInCaller):
+ (JSC::LLInt::returnToThrow):
+ (JSC::LLInt::callToThrow):
+ * llint/LLIntSlowPaths.cpp:
+ (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+ (JSC::LLInt::handleHostCall):
+
+2012-12-06 Rick Byers <rbyers@chromium.org>
+
+ CSS cursor property should support webkit-image-set
+ https://bugs.webkit.org/show_bug.cgi?id=99493
+
+ Reviewed by Beth Dakin.
+
+ Add ENABLE_MOUSE_CURSOR_SCALE (disabled by default)
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2012-12-06 Laszlo Gombos <l.gombos@samsung.com>
+
+ [CMake] Consolidate list of files to build for JavaScriptCore
+ https://bugs.webkit.org/show_bug.cgi?id=104287
+
+ Reviewed by Gyuyoung Kim.
+
+ Add MemoryStatistics.cpp and ExecutableAllocator.cpp to the common
+ list of files and remove them from the port specific lists.
+
+ * CMakeLists.txt:
+ * PlatformBlackBerry.cmake:
+ * PlatformEfl.cmake:
+ * PlatformWinCE.cmake:
+
+2012-12-06 Oliver Hunt <oliver@apple.com>
+
+ Tell heap that we've released all the compiled code.
+
+ Reviewed by Geoff Garen.
+
+ When we discard compiled code, inform the heap that we've
+ released an entire object graph. This informs the heap that
+ it might want to perform a GC soon.
+
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::discardAllCode):
+
+2012-12-06 Laszlo Gombos <l.gombos@samsung.com>
+
+ [EFL] Remove ENABLE_GLIB_SUPPORT CMake variable
+ https://bugs.webkit.org/show_bug.cgi?id=104278
+
+ Reviewed by Brent Fulgham.
+
+ The conditional is not required as it is always set for EFL.
+
+ * PlatformEfl.cmake:
+
+2012-12-06 Oliver Hunt <oliver@apple.com>
+
+ Build fix, last patch rolled out logic that is now needed on ToT.
+
+ * parser/ASTBuilder.h:
+ (ASTBuilder):
+ (JSC::ASTBuilder::setFunctionStart):
+ * parser/Nodes.h:
+ (JSC::FunctionBodyNode::setFunctionStart):
+ (JSC::FunctionBodyNode::functionStart):
+ (FunctionBodyNode):
+ * parser/Parser.cpp:
+ (JSC::::parseFunctionInfo):
+ * parser/SyntaxChecker.h:
+ (JSC::SyntaxChecker::setFunctionStart):
+
+2012-12-05 Oliver Hunt <oliver@apple.com>
+
+ Remove harmful string->function cache
+ https://bugs.webkit.org/show_bug.cgi?id=104193
+
+ Reviewed by Alexey Proskuryakov.
+
+ Remove the string->function code cache that turned out to actually
+ be quite harmful.
+
+ * runtime/CodeCache.cpp:
+ (JSC::CodeCache::getFunctionCodeBlock):
+ * runtime/CodeCache.h:
+ (JSC::CodeCache::clear):
+
+2012-12-05 Halton Huo <halton.huo@intel.com>
+
+ [CMake] Unify coding style for CMake files
+ https://bugs.webkit.org/show_bug.cgi?id=103605
+
+ Reviewed by Laszlo Gombos.
+
+ Update cmake files(.cmake, CMakeLists.txt) with following style rules:
+ 1. Indentation
+ 1.1 Use spaces, not tabs.
+ 1.2 Four spaces as indent.
+ 2. Spacing
+ 2.1 Place one space between control statements and their parentheses.
+ For eg, if (), else (), elseif (), endif (), foreach (),
+ endforeach (), while (), endwhile (), break ().
+ 2.2 Do not place spaces between function and macro statements and
+ their parentheses. For eg, macro(), endmacro(), function(),
+ endfunction().
+ 2.3 Do not place spaces between a command or function or macro and its
+ parentheses, or between a parenthesis and its content. For eg,
+ message("testing") not message( "testing") or message ("testing" )
+ 2.4 No space at line ending.
+ 3. Lowercase when call commands macros and functions. For eg,
+ add_executable() not ADD_EXECUTABLE(), set() not SET().
+
+ * CMakeLists.txt:
+ * PlatformBlackBerry.cmake:
+ * PlatformEfl.cmake:
+ * PlatformWinCE.cmake:
+ * shell/CMakeLists.txt:
+ * shell/PlatformBlackBerry.cmake:
+ * shell/PlatformEfl.cmake:
+ * shell/PlatformWinCE.cmake:
+
+2012-12-05 Oliver Hunt <oliver@apple.com>
+
+ Empty parse cache when receiving a low memory warning
+ https://bugs.webkit.org/show_bug.cgi?id=104161
+
+ Reviewed by Filip Pizlo.
+
+ This adds a function to the globaldata to empty all code related data
+ structures (code in the heap and the code cache).
+ It also adds a function to allow the CodeCache to actually be cleared
+ at all.
+
+ * runtime/CodeCache.h:
+ (CacheMap):
+ (JSC::CacheMap::clear):
+ (JSC::CodeCache::clear):
+ (CodeCache):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::discardAllCode):
+ (JSC):
+ * runtime/JSGlobalData.h:
+ (JSGlobalData):
+
+2012-12-05 Filip Pizlo <fpizlo@apple.com>
+
+ JSC profiler should not count executions of op_call_put_result because doing so changes DFG codegen
+ https://bugs.webkit.org/show_bug.cgi?id=104102
+
+ Reviewed by Oliver Hunt.
+
+ This removes op_call_put_result from profiling, since profiling it has an effect on
+ codegen. This fix enables all of SunSpider, V8, and Kraken to be profiled with the
+ new profiler.
+
+ To make this all fit together, the profiler now also reports in its output the exact
+ bytecode opcode name for each instruction (in addition to the stringified dump of that
+ bytecode), so that tools that grok the output can take note of op_call_put_result and
+ work around the fact that it has no counts.
+
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ (JSC::DFG::ByteCodeParser::parseCodeBlock):
+ * dfg/DFGDriver.cpp:
+ (JSC::DFG::compile):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ * profiler/ProfilerBytecode.cpp:
+ (JSC::Profiler::Bytecode::toJS):
+ * profiler/ProfilerBytecode.h:
+ (JSC::Profiler::Bytecode::Bytecode):
+ (JSC::Profiler::Bytecode::opcodeID):
+ (Bytecode):
+ * profiler/ProfilerDatabase.cpp:
+ (JSC::Profiler::Database::ensureBytecodesFor):
+ * runtime/CommonIdentifiers.h:
+
+2012-12-04 Filip Pizlo <fpizlo@apple.com>
+
+ display-profiler-output should be able to show source code
+ https://bugs.webkit.org/show_bug.cgi?id=104073
+
+ Reviewed by Oliver Hunt.
+
+ Modify the profiler database to store source code. For functions, we store the
+ function including the function signature.
+
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::unlinkedCodeBlock):
+ (CodeBlock):
+ * profiler/ProfilerBytecodes.cpp:
+ (JSC::Profiler::Bytecodes::Bytecodes):
+ (JSC::Profiler::Bytecodes::toJS):
+ * profiler/ProfilerBytecodes.h:
+ (Bytecodes):
+ (JSC::Profiler::Bytecodes::sourceCode):
+ * profiler/ProfilerDatabase.cpp:
+ (JSC::Profiler::Database::addBytecodes):
+ (JSC::Profiler::Database::ensureBytecodesFor):
+ * profiler/ProfilerDatabase.h:
+ (Database):
+ * runtime/CommonIdentifiers.h:
+ * runtime/Executable.h:
+ (FunctionExecutable):
+ (JSC::FunctionExecutable::unlinkedExecutable):
+
+2012-12-02 Filip Pizlo <fpizlo@apple.com>
+
+ JSC should be able to report profiling data associated with the IR dumps and disassembly
+ https://bugs.webkit.org/show_bug.cgi?id=102999
+
+ Reviewed by Gavin Barraclough.
+
+ Added a new profiler to JSC. It's simply called "Profiler" in anticipation of it
+ ultimately replacing the previous profiling infrastructure. This profiler counts the
+ number of times that a bytecode executes in various engines, and will record both the
+ counts and all disassembly and bytecode dumps, into a database that can be at any
+ time turned into either a JS object using any global object or global data of your
+ choice, or can be turned into a JSON string, or saved to a file.
+
+ Currently the only use of this is the new '-p <file>' flag to the jsc command-line.
+
+ The profiler is always compiled in and normally incurs no execution time cost, but is
+ only activated when you create a Profiler::Database and install it in
+ JSGlobalData::m_perBytecodeProfiler. From that point on, all code blocks will be
+ compiled along with disassembly and bytecode dumps stored into the Profiler::Database,
+ and all code blocks will have execution counts, which are also stored in the database.
+ The database will continue to keep information about code blocks alive even after they
+ are otherwise GC'd.
+
+ This currently still has some glitches, like the fact that it only counts executions
+ in the JITs. Doing execution counting in the LLInt might require a bit of a rethink
+ about how the counting is expressed - currently it is implicit in bytecode, so there
+ is no easy way to "turn it on" in the LLInt. Also, right now there is no information
+ recorded about OSR exits or out-of-line stubs. But, even so, it's quite cool, and
+ gives you a peek into what JSC is doing that would otherwise not be possible.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::~CodeBlock):
+ * bytecode/CodeBlock.h:
+ (CodeBlock):
+ (JSC::CodeBlock::baselineVersion):
+ * bytecode/CodeOrigin.cpp:
+ (JSC::InlineCallFrame::baselineCodeBlock):
+ (JSC):
+ * bytecode/CodeOrigin.h:
+ (InlineCallFrame):
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ * dfg/DFGDisassembler.cpp:
+ (JSC::DFG::Disassembler::dump):
+ (DFG):
+ (JSC::DFG::Disassembler::reportToProfiler):
+ (JSC::DFG::Disassembler::dumpHeader):
+ (JSC::DFG::Disassembler::append):
+ (JSC::DFG::Disassembler::createDumpList):
+ * dfg/DFGDisassembler.h:
+ (Disassembler):
+ (JSC::DFG::Disassembler::DumpedOp::DumpedOp):
+ (DumpedOp):
+ * dfg/DFGGraph.cpp:
+ (JSC::DFG::Graph::Graph):
+ (JSC::DFG::Graph::dumpCodeOrigin):
+ (JSC::DFG::Graph::dump):
+ * dfg/DFGGraph.h:
+ (Graph):
+ * dfg/DFGJITCompiler.cpp:
+ (JSC::DFG::JITCompiler::JITCompiler):
+ (JSC::DFG::JITCompiler::compile):
+ (JSC::DFG::JITCompiler::compileFunction):
+ * dfg/DFGNode.h:
+ (Node):
+ (JSC::DFG::Node::hasExecutionCounter):
+ (JSC::DFG::Node::executionCounter):
+ * dfg/DFGNodeType.h:
+ (DFG):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * jit/JIT.cpp:
+ (JSC::JIT::JIT):
+ (JSC::JIT::privateCompileMainPass):
+ (JSC::JIT::privateCompile):
+ * jit/JIT.h:
+ (JIT):
+ * jit/JITDisassembler.cpp:
+ (JSC::JITDisassembler::dump):
+ (JSC::JITDisassembler::reportToProfiler):
+ (JSC):
+ (JSC::JITDisassembler::dumpHeader):
+ (JSC::JITDisassembler::firstSlowLabel):
+ (JSC::JITDisassembler::dumpVectorForInstructions):
+ (JSC::JITDisassembler::dumpForInstructions):
+ (JSC::JITDisassembler::reportInstructions):
+ * jit/JITDisassembler.h:
+ (JITDisassembler):
+ (DumpedOp):
+ * jsc.cpp:
+ (CommandLine::CommandLine):
+ (CommandLine):
+ (printUsageStatement):
+ (CommandLine::parseArguments):
+ (jscmain):
+ * profiler/ProfilerBytecode.cpp: Added.
+ (Profiler):
+ (JSC::Profiler::Bytecode::toJS):
+ * profiler/ProfilerBytecode.h: Added.
+ (Profiler):
+ (Bytecode):
+ (JSC::Profiler::Bytecode::Bytecode):
+ (JSC::Profiler::Bytecode::bytecodeIndex):
+ (JSC::Profiler::Bytecode::description):
+ (JSC::Profiler::getBytecodeIndexForBytecode):
+ * profiler/ProfilerBytecodes.cpp: Added.
+ (Profiler):
+ (JSC::Profiler::Bytecodes::Bytecodes):
+ (JSC::Profiler::Bytecodes::~Bytecodes):
+ (JSC::Profiler::Bytecodes::indexForBytecodeIndex):
+ (JSC::Profiler::Bytecodes::forBytecodeIndex):
+ (JSC::Profiler::Bytecodes::dump):
+ (JSC::Profiler::Bytecodes::toJS):
+ * profiler/ProfilerBytecodes.h: Added.
+ (Profiler):
+ (Bytecodes):
+ (JSC::Profiler::Bytecodes::append):
+ (JSC::Profiler::Bytecodes::id):
+ (JSC::Profiler::Bytecodes::hash):
+ (JSC::Profiler::Bytecodes::size):
+ (JSC::Profiler::Bytecodes::at):
+ * profiler/ProfilerCompilation.cpp: Added.
+ (Profiler):
+ (JSC::Profiler::Compilation::Compilation):
+ (JSC::Profiler::Compilation::~Compilation):
+ (JSC::Profiler::Compilation::addDescription):
+ (JSC::Profiler::Compilation::executionCounterFor):
+ (JSC::Profiler::Compilation::toJS):
+ * profiler/ProfilerCompilation.h: Added.
+ (Profiler):
+ (Compilation):
+ (JSC::Profiler::Compilation::bytecodes):
+ (JSC::Profiler::Compilation::kind):
+ * profiler/ProfilerCompilationKind.cpp: Added.
+ (WTF):
+ (WTF::printInternal):
+ * profiler/ProfilerCompilationKind.h: Added.
+ (Profiler):
+ (WTF):
+ * profiler/ProfilerCompiledBytecode.cpp: Added.
+ (Profiler):
+ (JSC::Profiler::CompiledBytecode::CompiledBytecode):
+ (JSC::Profiler::CompiledBytecode::~CompiledBytecode):
+ (JSC::Profiler::CompiledBytecode::toJS):
+ * profiler/ProfilerCompiledBytecode.h: Added.
+ (Profiler):
+ (CompiledBytecode):
+ (JSC::Profiler::CompiledBytecode::originStack):
+ (JSC::Profiler::CompiledBytecode::description):
+ * profiler/ProfilerDatabase.cpp: Added.
+ (Profiler):
+ (JSC::Profiler::Database::Database):
+ (JSC::Profiler::Database::~Database):
+ (JSC::Profiler::Database::addBytecodes):
+ (JSC::Profiler::Database::ensureBytecodesFor):
+ (JSC::Profiler::Database::notifyDestruction):
+ (JSC::Profiler::Database::newCompilation):
+ (JSC::Profiler::Database::toJS):
+ (JSC::Profiler::Database::toJSON):
+ (JSC::Profiler::Database::save):
+ * profiler/ProfilerDatabase.h: Added.
+ (Profiler):
+ (Database):
+ * profiler/ProfilerExecutionCounter.h: Added.
+ (Profiler):
+ (ExecutionCounter):
+ (JSC::Profiler::ExecutionCounter::ExecutionCounter):
+ (JSC::Profiler::ExecutionCounter::address):
+ (JSC::Profiler::ExecutionCounter::count):
+ * profiler/ProfilerOrigin.cpp: Added.
+ (Profiler):
+ (JSC::Profiler::Origin::Origin):
+ (JSC::Profiler::Origin::dump):
+ (JSC::Profiler::Origin::toJS):
+ * profiler/ProfilerOrigin.h: Added.
+ (JSC):
+ (Profiler):
+ (Origin):
+ (JSC::Profiler::Origin::Origin):
+ (JSC::Profiler::Origin::operator!):
+ (JSC::Profiler::Origin::bytecodes):
+ (JSC::Profiler::Origin::bytecodeIndex):
+ (JSC::Profiler::Origin::operator!=):
+ (JSC::Profiler::Origin::operator==):
+ (JSC::Profiler::Origin::hash):
+ (JSC::Profiler::Origin::isHashTableDeletedValue):
+ (JSC::Profiler::OriginHash::hash):
+ (JSC::Profiler::OriginHash::equal):
+ (OriginHash):
+ (WTF):
+ * profiler/ProfilerOriginStack.cpp: Added.
+ (Profiler):
+ (JSC::Profiler::OriginStack::OriginStack):
+ (JSC::Profiler::OriginStack::~OriginStack):
+ (JSC::Profiler::OriginStack::append):
+ (JSC::Profiler::OriginStack::operator==):
+ (JSC::Profiler::OriginStack::hash):
+ (JSC::Profiler::OriginStack::dump):
+ (JSC::Profiler::OriginStack::toJS):
+ * profiler/ProfilerOriginStack.h: Added.
+ (JSC):
+ (Profiler):
+ (OriginStack):
+ (JSC::Profiler::OriginStack::OriginStack):
+ (JSC::Profiler::OriginStack::operator!):
+ (JSC::Profiler::OriginStack::size):
+ (JSC::Profiler::OriginStack::fromBottom):
+ (JSC::Profiler::OriginStack::fromTop):
+ (JSC::Profiler::OriginStack::isHashTableDeletedValue):
+ (JSC::Profiler::OriginStackHash::hash):
+ (JSC::Profiler::OriginStackHash::equal):
+ (OriginStackHash):
+ (WTF):
+ * runtime/CommonIdentifiers.h:
+ * runtime/ExecutionHarness.h:
+ (JSC::prepareForExecution):
+ (JSC::prepareFunctionForExecution):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ (JSC::JSGlobalData::~JSGlobalData):
+ * runtime/JSGlobalData.h:
+ (JSGlobalData):
+ * runtime/Options.h:
+ (JSC):
+
+2012-12-04 Filip Pizlo <fpizlo@apple.com>
+
+ Rename Profiler to LegacyProfiler
+ https://bugs.webkit.org/show_bug.cgi?id=104031
+
+ Rubber stamped by Mark Hahnenberg
+
+ Make room in the namespace for https://bugs.webkit.org/show_bug.cgi?id=102999.
+
+ * API/JSProfilerPrivate.cpp:
+ (JSStartProfiling):
+ (JSEndProfiling):
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::throwException):
+ (JSC::Interpreter::execute):
+ (JSC::Interpreter::executeCall):
+ (JSC::Interpreter::executeConstruct):
+ * jit/JIT.h:
+ * jit/JITCode.h:
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jit/JITStubs.h:
+ (JSC):
+ * llint/LLIntSlowPaths.cpp:
+ (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+ * profiler/LegacyProfiler.cpp: Added.
+ (JSC):
+ (JSC::LegacyProfiler::profiler):
+ (JSC::LegacyProfiler::startProfiling):
+ (JSC::LegacyProfiler::stopProfiling):
+ (JSC::dispatchFunctionToProfiles):
+ (JSC::LegacyProfiler::willExecute):
+ (JSC::LegacyProfiler::didExecute):
+ (JSC::LegacyProfiler::exceptionUnwind):
+ (JSC::LegacyProfiler::createCallIdentifier):
+ (JSC::createCallIdentifierFromFunctionImp):
+ * profiler/LegacyProfiler.h: Added.
+ (JSC):
+ (LegacyProfiler):
+ (JSC::LegacyProfiler::currentProfiles):
+ * profiler/ProfileGenerator.cpp:
+ (JSC::ProfileGenerator::addParentForConsoleStart):
+ * profiler/ProfileNode.cpp:
+ * profiler/Profiler.cpp: Removed.
+ * profiler/Profiler.h: Removed.
+ * runtime/JSGlobalData.h:
+ (JSC):
+ (JSC::JSGlobalData::enabledProfiler):
+ (JSGlobalData):
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::~JSGlobalObject):
+
+2012-12-03 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should inline code blocks that use scoped variable access
+ https://bugs.webkit.org/show_bug.cgi?id=103974
+
+ Reviewed by Oliver Hunt.
+
+ This mostly just turns on something we could have done all along, but also adds a few key
+ necessities to make this right:
+
+ 1) Constant folding of SkipScope, since if we inline with a known JSFunction* then the
+ scope is constant.
+
+ 2) Interference analysis for GetLocal<->PutScopedVar and SetLocal<->GetScopedVar.
+
+ This is not meant to be a speed-up on major benchmarks since we don't yet inline most
+ closure calls for entirely unrelated reasons. But on toy programs it can be >2x faster.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::getScope):
+ (JSC::DFG::ByteCodeParser::parseResolveOperations):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::scopedVarLoadElimination):
+ (JSC::DFG::CSEPhase::scopedVarStoreElimination):
+ (JSC::DFG::CSEPhase::getLocalLoadElimination):
+ (JSC::DFG::CSEPhase::setLocalStoreElimination):
+ * dfg/DFGCapabilities.h:
+ (JSC::DFG::canInlineResolveOperations):
+
+2012-12-03 Filip Pizlo <fpizlo@apple.com>
+
+ Replace JSValue::description() with JSValue::dump(PrintStream&)
+ https://bugs.webkit.org/show_bug.cgi?id=103866
+
+ Reviewed by Darin Adler.
+
+ JSValue now has a dump() method. Anywhere that you would have wanted to use
+ description(), you can either do toCString(value).data(), or if the callee
+ is a print()/dataLog() method then you just pass the value directly.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * bytecode/CodeBlock.cpp:
+ (JSC::valueToSourceString):
+ (JSC::CodeBlock::finalizeUnconditionally):
+ * bytecode/ValueProfile.h:
+ (JSC::ValueProfileBase::dump):
+ * bytecode/ValueRecovery.h:
+ (JSC::ValueRecovery::dump):
+ * dfg/DFGAbstractValue.h:
+ (JSC::DFG::AbstractValue::dump):
+ * dfg/DFGGraph.cpp:
+ (JSC::DFG::Graph::dump):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::dumpRegisters):
+ * jsc.cpp:
+ (functionDescribe):
+ * llint/LLIntSlowPaths.cpp:
+ (JSC::LLInt::llint_trace_value):
+ * runtime/JSValue.cpp:
+ (JSC::JSValue::dump):
+ * runtime/JSValue.h:
+
+2012-12-04 Filip Pizlo <fpizlo@apple.com>
+
+ jsc command line tool's support for typed arrays should be robust against array buffer allocation errors
+ https://bugs.webkit.org/show_bug.cgi?id=104020
+ <rdar://problem/12802478>
+
+ Reviewed by Mark Hahnenberg.
+
+ Check for null buffers, since that's what typed array allocators are supposed to do. WebCore does it,
+ and that is indeed the contract of ArrayBuffer and TypedArrayBase.
+
+ * JSCTypedArrayStubs.h:
+ (JSC):
+
+2012-12-03 Peter Rybin <prybin@chromium.org>
+
+ Web Inspector: make ASSERTION FAILED: foundPropertiesCount == object->size() more useful
+ https://bugs.webkit.org/show_bug.cgi?id=103254
+
+ Reviewed by Pavel Feldman.
+
+ Missing symbol WTFReportFatalError is added to the linker list.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2012-12-03 Alexis Menard <alexis@webkit.org>
+
+ [Mac] Enable CSS3 background-position offset by default.
+ https://bugs.webkit.org/show_bug.cgi?id=103905
+
+ Reviewed by Simon Fraser.
+
+ Turn the flag on by default.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2012-12-02 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should trigger rage conversion from double to contiguous if it sees a GetByVal on Double being used in an integer context
+ https://bugs.webkit.org/show_bug.cgi?id=103858
+
+ Reviewed by Gavin Barraclough.
+
+ A rage conversion from double to contiguous is one where you try to convert each
+ double to an int32.
+
+ This is probably not the last we'll hear of rage conversion from double to contiguous.
+ It may be better to do this right during parsing, which will result in fewer cases of
+ Arrayification. But even so, this looks like a straight win already - 1% speed-up on
+ Kraken, no major regression anywhere else.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGArrayMode.cpp:
+ (JSC::DFG::ArrayMode::refine):
+ (JSC::DFG::arrayConversionToString):
+ (JSC::DFG::ArrayMode::dump):
+ (WTF):
+ (WTF::printInternal):
+ * dfg/DFGArrayMode.h:
+ (JSC::DFG::ArrayMode::withConversion):
+ (ArrayMode):
+ (JSC::DFG::ArrayMode::doesConversion):
+ (WTF):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupBlock):
+ (JSC::DFG::FixupPhase::fixupNode):
+ (JSC::DFG::FixupPhase::checkArray):
+ (FixupPhase):
+ * dfg/DFGGraph.cpp:
+ (JSC::DFG::Graph::dump):
+ * dfg/DFGNodeFlags.h:
+ (DFG):
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGOperations.h:
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::arrayify):
+ * dfg/DFGStructureCheckHoistingPhase.cpp:
+ (JSC::DFG::StructureCheckHoistingPhase::run):
+ * runtime/JSObject.cpp:
+ (JSC):
+ (JSC::JSObject::genericConvertDoubleToContiguous):
+ (JSC::JSObject::convertDoubleToContiguous):
+ (JSC::JSObject::rageConvertDoubleToContiguous):
+ (JSC::JSObject::ensureContiguousSlow):
+ (JSC::JSObject::rageEnsureContiguousSlow):
+ * runtime/JSObject.h:
+ (JSObject):
+ (JSC::JSObject::rageEnsureContiguous):
+
+2012-12-02 Filip Pizlo <fpizlo@apple.com>
+
+ DFG CSE should not keep alive things that aren't relevant to OSR
+ https://bugs.webkit.org/show_bug.cgi?id=103849
+
+ Reviewed by Oliver Hunt.
+
+ Most Phantom nodes are inserted by CSE, and by default have the same children as the
+ node that CSE had eliminated. This change makes CSE inspect all Phantom nodes (both
+ those it creates and those that were created by other phases) to see if they have
+ children that are redundant - i.e. children that are not interesting to OSR, which
+ is the only reason why Phantoms exist in the first place. Being relevant to OSR is
+ defined as one of: (1) you're a Phi, (2) you're a SetLocal, (3) somewhere between
+ your definition and the Phantom there was a SetLocal that referred to you.
+
+ This is a slight speed-up in a few places.
+
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::CSEPhase):
+ (JSC::DFG::CSEPhase::run):
+ (JSC::DFG::CSEPhase::performSubstitution):
+ (CSEPhase):
+ (JSC::DFG::CSEPhase::eliminateIrrelevantPhantomChildren):
+ (JSC::DFG::CSEPhase::setReplacement):
+ (JSC::DFG::CSEPhase::eliminate):
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ (JSC::DFG::CSEPhase::performBlockCSE):
+
+2012-12-02 Filip Pizlo <fpizlo@apple.com>
+
+ It should be possible to build and run with DFG_ENABLE(PROPAGATION_VERBOSE)
+ https://bugs.webkit.org/show_bug.cgi?id=103848
+
+ Reviewed by Sam Weinig.
+
+ Fix random dataLog() and print() statements.
+
+ * dfg/DFGArgumentsSimplificationPhase.cpp:
+ (JSC::DFG::ArgumentsSimplificationPhase::run):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseCodeBlock):
+ * dfg/DFGGraph.cpp:
+ (JSC::DFG::Graph::dumpBlockHeader):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGStructureCheckHoistingPhase.cpp:
+ (JSC::DFG::StructureCheckHoistingPhase::run):
+
+2012-12-01 Filip Pizlo <fpizlo@apple.com>
+
+ CodeBlock should be able to dump bytecode to something other than WTF::dataFile()
+ https://bugs.webkit.org/show_bug.cgi?id=103832
+
+ Reviewed by Oliver Hunt.
+
+ Add a PrintStream& argument to all of the CodeBlock bytecode dumping methods.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dumpBytecodeCommentAndNewLine):
+ (JSC::CodeBlock::printUnaryOp):
+ (JSC::CodeBlock::printBinaryOp):
+ (JSC::CodeBlock::printConditionalJump):
+ (JSC::CodeBlock::printGetByIdOp):
+ (JSC::dumpStructure):
+ (JSC::dumpChain):
+ (JSC::CodeBlock::printGetByIdCacheStatus):
+ (JSC::CodeBlock::printCallOp):
+ (JSC::CodeBlock::printPutByIdOp):
+ (JSC::CodeBlock::printStructure):
+ (JSC::CodeBlock::printStructures):
+ (JSC::CodeBlock::dumpBytecode):
+ * bytecode/CodeBlock.h:
+ (CodeBlock):
+ * jit/JITDisassembler.cpp:
+ (JSC::JITDisassembler::dumpForInstructions):
+
+2012-11-30 Pierre Rossi <pierre.rossi@gmail.com>
+
+ [Qt] Unreviewed speculative Mac build fix after r136232
+
+ Update the include path so that LLIntAssembly.h is picked up.
+ The bot didn't break until later when a clean build was triggered.
+
+ * JavaScriptCore.pri:
+
+2012-11-30 Oliver Hunt <oliver@apple.com>
+
+ Optimise more cases of op_typeof
+ https://bugs.webkit.org/show_bug.cgi?id=103783
+
+ Reviewed by Mark Hahnenberg.
+
+ Increase our coverage of typeof based typechecks by
+ making sure that the codegenerators always uses
+ consistent operand ordering when feeding typeof operations
+ into equality operations.
+
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::BinaryOpNode::emitBytecode):
+ (JSC::EqualNode::emitBytecode):
+ (JSC::StrictEqualNode::emitBytecode):
+
+2012-11-30 Filip Pizlo <fpizlo@apple.com>
+
+ Rationalize and clean up DFG handling of scoped accesses
+ https://bugs.webkit.org/show_bug.cgi?id=103715
+
+ Reviewed by Oliver Hunt.
+
+ Previously, we had a GetScope node that specified the depth to which you wanted
+ to travel to get a JSScope, and the backend implementation of the node would
+ perform all of the necessary footwork, including potentially skipping the top
+ scope if necessary, and doing however many loads were needed. But there were
+ strange things. First, if you had accesses at different scope depths, then the
+ loads to get to the common depth could not be CSE'd - CSE would match only
+ GetScope's that had identical depth. Second, GetScope would be emitted even if
+ we already had the scope, for example in put_to_base. And finally, even though
+ the ResolveOperations could tell us whether or not we had to skip the top scope,
+ the backend would recompute this information itself, often pessimistically.
+
+ This eliminates GetScope and replaces it with the following:
+
+ GetMyScope: just get the JSScope from the call frame header. This will forever
+ mean getting the JSScope associated with the machine call frame; it will not
+ mean getting the scope of an inlined function. Or at least that's the intent.
+
+ SkipTopScope: check if there is an activation, and if so, skip a scope. This
+ takes a scope as a child and returns a scope.
+
+ SkipScope: skip one scope level.
+
+ The bytecode parser now emits the right combination of the above, and
+ potentially emits multiple SkipScope's, based on the ResolveOperations.
+
+ This change also includes some fixups to debug logging. We now always print
+ the ExecutableBase* in addition to the CodeBlock* in the CodeBlock's dump,
+ and we are now more verbose when dumping CodeOrigins and InlineCallFrames.
+
+ This is performance-neutral. It's just meant to be a clean-up.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dumpAssumingJITType):
+ * bytecode/CodeOrigin.cpp:
+ (JSC::CodeOrigin::inlineStack):
+ (JSC::CodeOrigin::dump):
+ (JSC):
+ (JSC::InlineCallFrame::dump):
+ * bytecode/CodeOrigin.h:
+ (CodeOrigin):
+ (InlineCallFrame):
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGByteCodeParser.cpp:
+ (ByteCodeParser):
+ (JSC::DFG::ByteCodeParser::getScope):
+ (DFG):
+ (JSC::DFG::ByteCodeParser::parseResolveOperations):
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::scopedVarLoadElimination):
+ (JSC::DFG::CSEPhase::scopedVarStoreElimination):
+ (JSC::DFG::CSEPhase::getMyScopeLoadElimination):
+ (JSC::DFG::CSEPhase::setLocalStoreElimination):
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ * dfg/DFGDisassembler.cpp:
+ (JSC::DFG::Disassembler::dump):
+ * dfg/DFGGraph.cpp:
+ (JSC::DFG::Graph::dumpCodeOrigin):
+ (JSC::DFG::Graph::dumpBlockHeader):
+ * dfg/DFGNode.h:
+ (Node):
+ * dfg/DFGNodeType.h:
+ (DFG):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * jit/JITDisassembler.cpp:
+ (JSC::JITDisassembler::dump):
+
+2012-11-30 Oliver Hunt <oliver@apple.com>
+
+ Add direct string->function code cache
+ https://bugs.webkit.org/show_bug.cgi?id=103764
+
+ Reviewed by Michael Saboff.
+
+ A fairly logically simple patch. We now track the start of the
+ unique portion of a functions body, and use that as our key for
+ unlinked function code. This allows us to cache identical code
+ in different contexts, leading to a small but consistent improvement
+ on the benchmarks we track.
+
+ * bytecode/UnlinkedCodeBlock.cpp:
+ (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
+ * bytecode/UnlinkedCodeBlock.h:
+ (JSC::UnlinkedFunctionExecutable::functionStartOffset):
+ (UnlinkedFunctionExecutable):
+ * parser/ASTBuilder.h:
+ (ASTBuilder):
+ (JSC::ASTBuilder::setFunctionStart):
+ * parser/Nodes.cpp:
+ * parser/Nodes.h:
+ (JSC::FunctionBodyNode::setFunctionStart):
+ (JSC::FunctionBodyNode::functionStart):
+ (FunctionBodyNode):
+ * parser/Parser.cpp:
+ (JSC::::parseFunctionInfo):
+ * parser/Parser.h:
+ (JSC::Parser::findCachedFunctionInfo):
+ * parser/SyntaxChecker.h:
+ (JSC::SyntaxChecker::setFunctionStart):
+ * runtime/CodeCache.cpp:
+ (JSC::CodeCache::generateFunctionCodeBlock):
+ (JSC::CodeCache::getFunctionCodeBlock):
+ (JSC::CodeCache::usedFunctionCode):
+ * runtime/CodeCache.h:
+
+2012-11-30 Allan Sandfeld Jensen <allan.jensen@digia.com>
+
+ Crash in conversion of empty OpaqueJSString to Identifier
+ https://bugs.webkit.org/show_bug.cgi?id=101867
+
+ Reviewed by Michael Saboff.
+
+ The constructor call used for both null and empty OpaqueJSStrings results
+ in an assertion voilation and crash. This patch instead uses the Identifier
+ constructors which are specifically for null and empty Identifier.
+
+ * API/OpaqueJSString.cpp:
+ (OpaqueJSString::identifier):
+
+2012-11-30 Tor Arne Vestbø <tor.arne.vestbo@digia.com>
+
+ [Qt] Place the LLIntOffsetsExtractor binaries in debug/release subdirs on Mac
+
+ Otherwise we'll end up using the same LLIntAssembly.h for both build
+ configs of JavaScriptCore -- one of them which will be for the wrong
+ config.
+
+ Reviewed by Simon Hausmann.
+
+ * LLIntOffsetsExtractor.pro:
+
+2012-11-30 Julien BRIANCEAU <jbrianceau@nds.com>
+
+ [sh4] Fix compilation warnings in JavaScriptCore JIT for sh4 arch
+ https://bugs.webkit.org/show_bug.cgi?id=103378
+
+ Reviewed by Filip Pizlo.
+
+ * assembler/MacroAssemblerSH4.h:
+ (JSC::MacroAssemblerSH4::branchTest32):
+ (JSC::MacroAssemblerSH4::branchAdd32):
+ (JSC::MacroAssemblerSH4::branchMul32):
+ (JSC::MacroAssemblerSH4::branchSub32):
+ (JSC::MacroAssemblerSH4::branchOr32):
+
+2012-11-29 Rafael Weinstein <rafaelw@chromium.org>
+
+ [HTMLTemplateElement] Add feature flag
+ https://bugs.webkit.org/show_bug.cgi?id=103694
+
+ Reviewed by Adam Barth.
+
+ This flag will guard the implementation of the HTMLTemplateElement.
+ http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/index.html
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2012-11-29 Filip Pizlo <fpizlo@apple.com>
+
+ It should be easy to find code blocks in debug dumps
+ https://bugs.webkit.org/show_bug.cgi?id=103623
+
+ Reviewed by Goeffrey Garen.
+
+ This gives CodeBlock a relatively strong, but also relatively compact, hash. We compute
+ it lazily so that it only impacts run-time when debug support is enabled. We stringify
+ it smartly so that it's short and easy to type. We base it on the source code so that
+ the optimization level is irrelevant. And, we use SHA1 since it's already in our code
+ base. Now, when a piece of code wants to print some debugging to say that it's operating
+ on some code block, it can use this CodeBlockHash instead of memory addresses.
+
+ This also takes CodeBlock debugging into the new world of print() and dataLog(). In
+ particular, CodeBlock::dump() corresponds to the thing you want printed if you do:
+
+ dataLog("I heart ", *myCodeBlock);
+
+ Probably, you want to just print some identifying information at this point rather than
+ the full bytecode dump. So, the existing CodeBlock::dump() has been renamed to
+ CodeBlock::dumpBytecode(), and CodeBlock::dump() now prints the CodeBlockHash plus just
+ a few little tidbits.
+
+ Here's an example of CodeBlock::dump() output:
+
+ EkILzr:[0x103883a00, BaselineFunctionCall]
+
+ EkILzr is the CodeBlockHash. 0x103883a00 is the CodeBlock's address in memory. The other
+ part is self-explanatory.
+
+ Finally, this new notion of CodeBlockHash is available for other purposes like bisecting
+ breakage. As such CodeBlockHash has all of the comparison operator overloads. When
+ bisecting in DFGDriver.cpp, you can now say things like:
+
+ if (codeBlock->hash() < CodeBlockHash("CAAAAA"))
+ return false;
+
+ And yes, CAAAAA is near the median hash, and the largest one is smaller than E99999. Such
+ is life when you use base 62 to encode a 32-bit number.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * bytecode/CallLinkInfo.h:
+ (CallLinkInfo):
+ (JSC::CallLinkInfo::specializationKind):
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::hash):
+ (JSC):
+ (JSC::CodeBlock::dumpAssumingJITType):
+ (JSC::CodeBlock::dump):
+ (JSC::CodeBlock::dumpBytecode):
+ (JSC::CodeBlock::CodeBlock):
+ (JSC::CodeBlock::finalizeUnconditionally):
+ (JSC::CodeBlock::resetStubInternal):
+ (JSC::CodeBlock::reoptimize):
+ (JSC::ProgramCodeBlock::jettison):
+ (JSC::EvalCodeBlock::jettison):
+ (JSC::FunctionCodeBlock::jettison):
+ (JSC::CodeBlock::shouldOptimizeNow):
+ (JSC::CodeBlock::tallyFrequentExitSites):
+ (JSC::CodeBlock::dumpValueProfiles):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::specializationKind):
+ (CodeBlock):
+ (JSC::CodeBlock::getJITType):
+ * bytecode/CodeBlockHash.cpp: Added.
+ (JSC):
+ (JSC::CodeBlockHash::CodeBlockHash):
+ (JSC::CodeBlockHash::dump):
+ * bytecode/CodeBlockHash.h: Added.
+ (JSC):
+ (CodeBlockHash):
+ (JSC::CodeBlockHash::CodeBlockHash):
+ (JSC::CodeBlockHash::hash):
+ (JSC::CodeBlockHash::operator==):
+ (JSC::CodeBlockHash::operator!=):
+ (JSC::CodeBlockHash::operator<):
+ (JSC::CodeBlockHash::operator>):
+ (JSC::CodeBlockHash::operator<=):
+ (JSC::CodeBlockHash::operator>=):
+ * bytecode/CodeBlockWithJITType.h: Added.
+ (JSC):
+ (CodeBlockWithJITType):
+ (JSC::CodeBlockWithJITType::CodeBlockWithJITType):
+ (JSC::CodeBlockWithJITType::dump):
+ * bytecode/CodeOrigin.cpp: Added.
+ (JSC):
+ (JSC::CodeOrigin::inlineDepthForCallFrame):
+ (JSC::CodeOrigin::inlineDepth):
+ (JSC::CodeOrigin::inlineStack):
+ (JSC::InlineCallFrame::hash):
+ * bytecode/CodeOrigin.h:
+ (InlineCallFrame):
+ (JSC::InlineCallFrame::specializationKind):
+ (JSC):
+ * bytecode/CodeType.cpp: Added.
+ (WTF):
+ (WTF::printInternal):
+ * bytecode/CodeType.h:
+ (WTF):
+ * bytecode/ExecutionCounter.cpp:
+ (JSC::ExecutionCounter::dump):
+ * bytecode/ExecutionCounter.h:
+ (ExecutionCounter):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseCodeBlock):
+ * dfg/DFGDisassembler.cpp:
+ (JSC::DFG::Disassembler::dump):
+ * dfg/DFGGraph.cpp:
+ (JSC::DFG::Graph::dumpCodeOrigin):
+ * dfg/DFGOSRExitCompiler.cpp:
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGRepatch.cpp:
+ (JSC::DFG::generateProtoChainAccessStub):
+ (JSC::DFG::tryCacheGetByID):
+ (JSC::DFG::tryBuildGetByIDList):
+ (JSC::DFG::emitPutReplaceStub):
+ (JSC::DFG::emitPutTransitionStub):
+ (JSC::DFG::dfgLinkClosureCall):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::dumpCallFrame):
+ * jit/JITCode.cpp: Added.
+ (WTF):
+ (WTF::printInternal):
+ * jit/JITCode.h:
+ (JSC::JITCode::jitType):
+ (WTF):
+ * jit/JITDisassembler.cpp:
+ (JSC::JITDisassembler::dump):
+ (JSC::JITDisassembler::dumpForInstructions):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::privateCompilePutByIdTransition):
+ (JSC::JIT::privateCompilePatchGetArrayLength):
+ (JSC::JIT::privateCompileGetByIdProto):
+ (JSC::JIT::privateCompileGetByIdSelfList):
+ (JSC::JIT::privateCompileGetByIdProtoList):
+ (JSC::JIT::privateCompileGetByIdChainList):
+ (JSC::JIT::privateCompileGetByIdChain):
+ (JSC::JIT::privateCompileGetByVal):
+ (JSC::JIT::privateCompilePutByVal):
+ * jit/JITPropertyAccess32_64.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::DEFINE_STUB_FUNCTION):
+ * runtime/CodeSpecializationKind.cpp: Added.
+ (WTF):
+ (WTF::printInternal):
+ * runtime/CodeSpecializationKind.h:
+ (JSC::specializationFromIsCall):
+ (JSC):
+ (JSC::specializationFromIsConstruct):
+ (WTF):
+ * runtime/Executable.cpp:
+ (JSC::ExecutableBase::hashFor):
+ (JSC):
+ (JSC::NativeExecutable::hashFor):
+ (JSC::ScriptExecutable::hashFor):
+ * runtime/Executable.h:
+ (ExecutableBase):
+ (NativeExecutable):
+ (ScriptExecutable):
+ (JSC::ScriptExecutable::source):
+
+2012-11-29 Michael Saboff <msaboff@apple.com>
+
+ Speculative Windows build fix after r136086.
+
+ Unreviewed build fix.
+
+ Suspect that ?setDumpsGeneratedCode@BytecodeGenerator@JSC@@SAX_N@Z needs to be removed from Windows
+ export list since the symbol was removed in r136086.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2012-11-28 Filip Pizlo <fpizlo@apple.com>
+
+ SpeculatedType dumping should not use the static char buffer[thingy] idiom
+ https://bugs.webkit.org/show_bug.cgi?id=103584
+
+ Reviewed by Michael Saboff.
+
+ Changed SpeculatedType to be "dumpable" by saying things like:
+
+ dataLog("thingy = ", SpeculationDump(thingy))
+
+ Removed the old stringification functions, and changed all code that referred to them
+ to use the new dataLog()/print() style.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * bytecode/SpeculatedType.cpp:
+ (JSC::dumpSpeculation):
+ (JSC::speculationToAbbreviatedString):
+ (JSC::dumpSpeculationAbbreviated):
+ * bytecode/SpeculatedType.h:
+ * bytecode/ValueProfile.h:
+ (JSC::ValueProfileBase::dump):
+ * bytecode/VirtualRegister.h:
+ (WTF::printInternal):
+ * dfg/DFGAbstractValue.h:
+ (JSC::DFG::AbstractValue::dump):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::injectLazyOperandSpeculation):
+ (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
+ * dfg/DFGGraph.cpp:
+ (JSC::DFG::Graph::dump):
+ (JSC::DFG::Graph::predictArgumentTypes):
+ * dfg/DFGGraph.h:
+ (Graph):
+ * dfg/DFGStructureAbstractValue.h:
+ * dfg/DFGVariableAccessDataDump.cpp: Added.
+ (JSC::DFG::VariableAccessDataDump::VariableAccessDataDump):
+ (JSC::DFG::VariableAccessDataDump::dump):
+ * dfg/DFGVariableAccessDataDump.h: Added.
+ (VariableAccessDataDump):
+
+2012-11-28 Michael Saboff <msaboff@apple.com>
+
+ Change Bytecompiler s_dumpsGeneratedCode to an Options value
+ https://bugs.webkit.org/show_bug.cgi?id=103588
+
+ Reviewed by Filip Pizlo.
+
+ Moved the control of dumping bytecodes to Options::dumpGeneratedBytecodes.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::CodeBlock):
+ * bytecompiler/BytecodeGenerator.cpp:
+ * bytecompiler/BytecodeGenerator.h:
+ * jsc.cpp:
+ (runWithScripts):
+ * runtime/Options.h:
+
+2012-11-28 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Copying phase should use work lists
+ https://bugs.webkit.org/show_bug.cgi?id=101390
+
+ Reviewed by Filip Pizlo.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * heap/BlockAllocator.cpp:
+ (JSC::BlockAllocator::BlockAllocator):
+ * heap/BlockAllocator.h: New RegionSet for CopyWorkListSegments.
+ (BlockAllocator):
+ (JSC::CopyWorkListSegment):
+ * heap/CopiedBlock.h: Added a per-block CopyWorkList to keep track of the JSCells that need to be revisited during the copying
+ phase to copy their backing stores.
+ (CopiedBlock):
+ (JSC::CopiedBlock::CopiedBlock):
+ (JSC::CopiedBlock::didSurviveGC):
+ (JSC::CopiedBlock::didEvacuateBytes): There is now a one-to-one relationship between GCThreads and the CopiedBlocks they're
+ responsible for evacuating, we no longer need any of that fancy compare and swap stuff.
+ (JSC::CopiedBlock::pin):
+ (JSC::CopiedBlock::hasWorkList):
+ (JSC::CopiedBlock::workList):
+ * heap/CopiedBlockInlines.h: Added.
+ (JSC::CopiedBlock::reportLiveBytes): Since we now have to grab a SpinLock to perform operations on the CopyWorkList during marking,
+ we don't need to do any of that fancy compare and swap stuff we were doing for tracking live bytes.
+ * heap/CopiedSpace.h:
+ (CopiedSpace):
+ * heap/CopiedSpaceInlines.h:
+ (JSC::CopiedSpace::pin):
+ * heap/CopyVisitor.cpp:
+ (JSC::CopyVisitor::copyFromShared): We now iterate over a range of CopiedBlocks rather than MarkedBlocks and revisit the cells in those
+ blocks' CopyWorkLists.
+ * heap/CopyVisitor.h:
+ (CopyVisitor):
+ * heap/CopyVisitorInlines.h:
+ (JSC::CopyVisitor::visitCell): The function responsible for calling the correct copyBackingStore() function for each JSCell from
+ a CopiedBlock's CopyWorkList.
+ (JSC::CopyVisitor::didCopy): We no longer need to check if the block is empty here because we know exactly when we're done
+ evacuating a CopiedBlock, which is when we've gone through all of the CopiedBlock's CopyWorkList.
+ * heap/CopyWorkList.h: Added.
+ (CopyWorkListSegment): Individual chunk of a CopyWorkList that is allocated from the BlockAllocator.
+ (JSC::CopyWorkListSegment::create):
+ (JSC::CopyWorkListSegment::size):
+ (JSC::CopyWorkListSegment::isFull):
+ (JSC::CopyWorkListSegment::get):
+ (JSC::CopyWorkListSegment::append):
+ (JSC::CopyWorkListSegment::CopyWorkListSegment):
+ (JSC::CopyWorkListSegment::data):
+ (JSC::CopyWorkListSegment::endOfBlock):
+ (CopyWorkListIterator): Responsible for giving CopyVisitors a contiguous notion of access across the separate CopyWorkListSegments
+ that make up each CopyWorkList.
+ (JSC::CopyWorkListIterator::get):
+ (JSC::CopyWorkListIterator::operator*):
+ (JSC::CopyWorkListIterator::operator->):
+ (JSC::CopyWorkListIterator::operator++):
+ (JSC::CopyWorkListIterator::operator==):
+ (JSC::CopyWorkListIterator::operator!=):
+ (JSC::CopyWorkListIterator::CopyWorkListIterator):
+ (CopyWorkList): Data structure that keeps track of the JSCells that need copying in a particular CopiedBlock.
+ (JSC::CopyWorkList::CopyWorkList):
+ (JSC::CopyWorkList::~CopyWorkList):
+ (JSC::CopyWorkList::append):
+ (JSC::CopyWorkList::begin):
+ (JSC::CopyWorkList::end):
+ * heap/GCThreadSharedData.cpp:
+ (JSC::GCThreadSharedData::GCThreadSharedData): We no longer use the m_blockSnapshot from the Heap during the copying phase.
+ (JSC::GCThreadSharedData::didStartCopying): We now copy the set of all blocks in the CopiedSpace to a separate vector for
+ iterating over during the copying phase since the set stored in the CopiedSpace will change as blocks are evacuated and
+ recycled throughout the copying phase.
+ * heap/GCThreadSharedData.h:
+ (GCThreadSharedData):
+ * heap/Heap.h:
+ (Heap):
+ * heap/SlotVisitor.h: We now need to know the object who is being marked that has a backing store so that we can store it
+ in a CopyWorkList to revisit later during the copying phase.
+ * heap/SlotVisitorInlines.h:
+ (JSC::SlotVisitor::copyLater):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::visitButterfly):
+
+2012-11-28 Filip Pizlo <fpizlo@apple.com>
+
+ Disassembly methods should be able to disassemble to any PrintStream& rather than always using WTF::dataFile()
+ https://bugs.webkit.org/show_bug.cgi?id=103492
+
+ Reviewed by Mark Hahnenberg.
+
+ Switched disassembly code to use PrintStream&, and to use print() rather than printf().
+
+ * dfg/DFGDisassembler.cpp:
+ (JSC::DFG::Disassembler::dump):
+ (DFG):
+ (JSC::DFG::Disassembler::dumpDisassembly):
+ * dfg/DFGDisassembler.h:
+ (Disassembler):
+ * dfg/DFGGraph.cpp:
+ (JSC::DFG::printWhiteSpace):
+ (JSC::DFG::Graph::dumpCodeOrigin):
+ (JSC::DFG::Graph::printNodeWhiteSpace):
+ (JSC::DFG::Graph::dump):
+ (DFG):
+ (JSC::DFG::Graph::dumpBlockHeader):
+ * dfg/DFGGraph.h:
+ (Graph):
+ * jit/JITDisassembler.cpp:
+ (JSC::JITDisassembler::dump):
+ (JSC::JITDisassembler::dumpForInstructions):
+ (JSC::JITDisassembler::dumpDisassembly):
+ * jit/JITDisassembler.h:
+ (JITDisassembler):
+
+2012-11-28 Filip Pizlo <fpizlo@apple.com>
+
+ It should be possible to say dataLog("count = ", count, "\n") instead of dataLogF("count = %d\n", count)
+ https://bugs.webkit.org/show_bug.cgi?id=103009
+
+ Reviewed by Michael Saboff.
+
+ Instead of converting all of JSC to use the new dataLog()/print() methods, I just changed
+ one place: dumping of abstract values. This is mainly just to ensure that the code I
+ added to WTF is actually doing things.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ * dfg/DFGAbstractValue.h:
+ (JSC::DFG::AbstractValue::dump):
+ (WTF):
+ (WTF::printInternal):
+ * dfg/DFGStructureAbstractValue.h:
+ (JSC::DFG::StructureAbstractValue::dump):
+ (WTF):
+ (WTF::printInternal):
+
+2012-11-28 Oliver Hunt <oliver@apple.com>
+
+ Make source cache include more information about the function extent.
+ https://bugs.webkit.org/show_bug.cgi?id=103552
+
+ Reviewed by Gavin Barraclough.
+
+ Add a bit more information to the source cache.
+
+ * parser/Parser.cpp:
+ (JSC::::parseFunctionInfo):
+ Store the function start offset
+ * parser/SourceProviderCacheItem.h:
+ (JSC::SourceProviderCacheItem::SourceProviderCacheItem):
+ (SourceProviderCacheItem):
+ Add additional field for the start of the real function string, and re-arrange
+ fields to avoid growing the struct.
+
+2012-11-27 Filip Pizlo <fpizlo@apple.com>
+
+ Convert some remaining uses of FILE* to PrintStream&.
+
+ Rubber stamped by Mark Hahnenberg.
+
+ * bytecode/ValueProfile.h:
+ (JSC::ValueProfileBase::dump):
+ * bytecode/ValueRecovery.h:
+ (JSC::ValueRecovery::dump):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseCodeBlock):
+ * dfg/DFGNode.h:
+ (JSC::DFG::Node::dumpChildren):
+
+2012-11-27 Filip Pizlo <fpizlo@apple.com>
+
+ Fix indentation in JSValue.h
+
+ Rubber stamped by Mark Hahnenberg.
+
+ * runtime/JSValue.h:
+
+2012-11-26 Filip Pizlo <fpizlo@apple.com>
+
+ DFG SetLocal should use forwardSpeculationCheck instead of its own half-baked version of same
+ https://bugs.webkit.org/show_bug.cgi?id=103353
+
+ Reviewed by Oliver Hunt and Gavin Barraclough.
+
+ Made it possible to use forward speculations for most of the operand classes. Changed the conditional
+ direction parameter from being 'bool isForward' to an enum (SpeculationDirection). Changed SetLocal
+ to use forward speculations and got rid of its half-baked version of same.
+
+ Also added the ability to force the DFG's disassembler to dump all nodes, even ones that are dead.
+
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ * dfg/DFGDisassembler.cpp:
+ (JSC::DFG::Disassembler::dump):
+ * dfg/DFGDriver.cpp:
+ (JSC::DFG::compile):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::speculationCheck):
+ (DFG):
+ (JSC::DFG::SpeculativeJIT::convertLastOSRExitToForward):
+ (JSC::DFG::SpeculativeJIT::speculationWatchpoint):
+ (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
+ (JSC::DFG::SpeculativeJIT::fillStorage):
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+ (JSC::DFG::SpeculateIntegerOperand::SpeculateIntegerOperand):
+ (JSC::DFG::SpeculateIntegerOperand::gpr):
+ (SpeculateIntegerOperand):
+ (JSC::DFG::SpeculateDoubleOperand::SpeculateDoubleOperand):
+ (JSC::DFG::SpeculateDoubleOperand::fpr):
+ (SpeculateDoubleOperand):
+ (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
+ (JSC::DFG::SpeculateCellOperand::gpr):
+ (SpeculateCellOperand):
+ (JSC::DFG::SpeculateBooleanOperand::SpeculateBooleanOperand):
+ (JSC::DFG::SpeculateBooleanOperand::gpr):
+ (SpeculateBooleanOperand):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateInt):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntStrict):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateInt):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntStrict):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * runtime/Options.h:
+ (JSC):
+
+2012-11-26 Daniel Bates <dbates@webkit.org>
+
+ Substitute "allSeparators8Bit" for "allSeperators8Bit" in JSC::jsSpliceSubstringsWithSeparators()
+ <https://bugs.webkit.org/show_bug.cgi?id=103303>
+
+ Reviewed by Simon Fraser.
+
+ Fix misspelled word, "Seperators" [sic], in a local variable name in JSC::jsSpliceSubstringsWithSeparators().
+
+ * runtime/StringPrototype.cpp:
+ (JSC::jsSpliceSubstringsWithSeparators):
+
+2012-11-26 Daniel Bates <dbates@webkit.org>
+
+ JavaScript fails to handle String.replace() with large replacement string
+ https://bugs.webkit.org/show_bug.cgi?id=102956
+ <rdar://problem/12738012>
+
+ Reviewed by Oliver Hunt.
+
+ Fix an issue where we didn't check for overflow when computing the length
+ of the result of String.replace() with a large replacement string.
+
+ * runtime/StringPrototype.cpp:
+ (JSC::jsSpliceSubstringsWithSeparators):
+
+2012-11-26 Zeno Albisser <zeno@webkit.org>
+
+ [Qt] Fix the LLInt build on Mac
+ https://bugs.webkit.org/show_bug.cgi?id=97587
+
+ Reviewed by Simon Hausmann.
+
+ * DerivedSources.pri:
+ * JavaScriptCore.pro:
+
+2012-11-26 Oliver Hunt <oliver@apple.com>
+
+ 32-bit build fix. Move the method decalration outside of the X86_64 only section.
+
+ * assembler/MacroAssembler.h:
+ (MacroAssembler):
+ (JSC::MacroAssembler::shouldConsiderBlinding):
+
+2012-11-26 Oliver Hunt <oliver@apple.com>
+
+ Don't blind all the things.
+ https://bugs.webkit.org/show_bug.cgi?id=102572
+
+ Reviewed by Gavin Barraclough.
+
+ No longer blind all the constants in the instruction stream. We use a
+ simple non-deterministic filter to avoid blinding everything. Also modified
+ the basic integer blinding logic to avoid blinding small negative values.
+
+ * assembler/MacroAssembler.h:
+ (MacroAssembler):
+ (JSC::MacroAssembler::shouldConsiderBlinding):
+ (JSC::MacroAssembler::shouldBlind):
+
+2012-11-26 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ JSObject::copyButterfly doesn't handle undecided indexing types correctly
+ https://bugs.webkit.org/show_bug.cgi?id=102573
+
+ Reviewed by Filip Pizlo.
+
+ We don't do any copying into the newly allocated vector and we don't zero-initialize CopiedBlocks
+ during the copying phase, so we end up with uninitialized memory in arrays which have undecided indexing
+ types. We should just do the actual memcpy from the old block to the new one.
+
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::copyButterfly): Just do the same thing that we do for other contiguous indexing types.
+
+2012-11-26 Julien BRIANCEAU <jbrianceau@nds.com>
+
+ [sh4] JavaScriptCore JIT build is broken since r135330
+ Add missing implementation for sh4 arch.
+ https://bugs.webkit.org/show_bug.cgi?id=103145
+
+ Reviewed by Oliver Hunt.
+
+ * assembler/MacroAssemblerSH4.h:
+ (JSC::MacroAssemblerSH4::canJumpReplacePatchableBranchPtrWithPatch):
+ (MacroAssemblerSH4):
+ (JSC::MacroAssemblerSH4::startOfBranchPtrWithPatchOnRegister):
+ (JSC::MacroAssemblerSH4::revertJumpReplacementToBranchPtrWithPatch):
+ (JSC::MacroAssemblerSH4::startOfPatchableBranchPtrWithPatchOnAddress):
+ (JSC::MacroAssemblerSH4::revertJumpReplacementToPatchableBranchPtrWithPatch):
+ * assembler/SH4Assembler.h:
+ (JSC::SH4Assembler::revertJump):
+ (SH4Assembler):
+ (JSC::SH4Assembler::printInstr):
+
+2012-11-26 Yuqiang Xian <yuqiang.xian@intel.com>
+
+ Use load64 instead of loadPtr to load a JSValue on JSVALUE64 platforms
+ https://bugs.webkit.org/show_bug.cgi?id=100909
+
+ Reviewed by Brent Fulgham.
+
+ This is a (trivial) fix after r132701.
+
+ * dfg/DFGOSRExitCompiler64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+
+2012-11-26 Gabor Ballabas <gaborb@inf.u-szeged.hu>
+
+ [Qt][ARM] REGRESSION(r130826): It made 33 JSC test and 466 layout tests crash
+ https://bugs.webkit.org/show_bug.cgi?id=98857
+
+ Reviewed by Zoltan Herczeg.
+
+ Implement a new version of patchableBranch32 to fix crashing JSC
+ tests.
+
+ * assembler/MacroAssembler.h:
+ (MacroAssembler):
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::patchableBranch32):
+ (MacroAssemblerARM):
+
+2012-11-21 Filip Pizlo <fpizlo@apple.com>
+
+ Any function that can log things should be able to easily log them to a memory buffer as well
+ https://bugs.webkit.org/show_bug.cgi?id=103000
+
+ Reviewed by Sam Weinig.
+
+ Change all users of WTF::dataFile() to expect a PrintStream& rather than a FILE*.
+
+ * bytecode/Operands.h:
+ (JSC::OperandValueTraits::dump):
+ (JSC::dumpOperands):
+ (JSC):
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::dump):
+ * dfg/DFGAbstractState.h:
+ (AbstractState):
+ * dfg/DFGAbstractValue.h:
+ (JSC::DFG::AbstractValue::dump):
+ * dfg/DFGCommon.h:
+ (JSC::DFG::NodeIndexTraits::dump):
+ * dfg/DFGStructureAbstractValue.h:
+ (JSC::DFG::StructureAbstractValue::dump):
+ * dfg/DFGVariableEvent.cpp:
+ (JSC::DFG::VariableEvent::dump):
+ (JSC::DFG::VariableEvent::dumpFillInfo):
+ (JSC::DFG::VariableEvent::dumpSpillInfo):
+ * dfg/DFGVariableEvent.h:
+ (VariableEvent):
+ * disassembler/Disassembler.h:
+ (JSC):
+ (JSC::tryToDisassemble):
+ * disassembler/UDis86Disassembler.cpp:
+ (JSC::tryToDisassemble):
+
+2012-11-23 Alexis Menard <alexis@webkit.org>
+
+ [CSS3 Backgrounds and Borders] Implement new CSS3 background-position parsing.
+ https://bugs.webkit.org/show_bug.cgi?id=102104
+
+ Reviewed by Julien Chaffraix.
+
+ Protect the new feature behind a feature flag.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2012-11-23 Gabor Ballabas <gaborb@inf.u-szeged.hu>
+
+ Fix the ARM traditional build after r135330
+ https://bugs.webkit.org/show_bug.cgi?id=102871
+
+ Reviewed by Zoltan Herczeg.
+
+ Added missing functionality to traditional ARM architecture.
+
+ * assembler/ARMAssembler.h:
+ (JSC::ARMAssembler::revertJump):
+ (ARMAssembler):
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::startOfPatchableBranchPtrWithPatchOnAddress):
+ (JSC::MacroAssemblerARM::startOfBranchPtrWithPatchOnRegister):
+ (MacroAssemblerARM):
+ (JSC::MacroAssemblerARM::revertJumpReplacementToBranchPtrWithPatch):
+
+2012-11-16 Yury Semikhatsky <yurys@chromium.org>
+
+ Memory instrumentation: extract MemoryObjectInfo declaration into a separate file
+ https://bugs.webkit.org/show_bug.cgi?id=102510
+
+ Reviewed by Pavel Feldman.
+
+ Added new symbols for the methods that have moved into .../wtf/MemoryInstrumentation.cpp
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2012-11-23 Julien BRIANCEAU <jbrianceau@nds.com>
+
+ [sh4] JavaScriptCore JIT build is broken since r130839
+ Add missing implementation for sh4 arch.
+ https://bugs.webkit.org/show_bug.cgi?id=101479
+
+ Reviewed by Filip Pizlo.
+
+ * assembler/MacroAssemblerSH4.h:
+ (JSC::MacroAssemblerSH4::load8Signed):
+ (MacroAssemblerSH4):
+ (JSC::MacroAssemblerSH4::load16Signed):
+ (JSC::MacroAssemblerSH4::store8):
+ (JSC::MacroAssemblerSH4::store16):
+ (JSC::MacroAssemblerSH4::moveDoubleToInts):
+ (JSC::MacroAssemblerSH4::moveIntsToDouble):
+ (JSC::MacroAssemblerSH4::loadFloat):
+ (JSC::MacroAssemblerSH4::loadDouble):
+ (JSC::MacroAssemblerSH4::storeFloat):
+ (JSC::MacroAssemblerSH4::storeDouble):
+ (JSC::MacroAssemblerSH4::addDouble):
+ (JSC::MacroAssemblerSH4::convertFloatToDouble):
+ (JSC::MacroAssemblerSH4::convertDoubleToFloat):
+ (JSC::MacroAssemblerSH4::urshift32):
+ * assembler/SH4Assembler.h:
+ (JSC::SH4Assembler::sublRegReg):
+ (JSC::SH4Assembler::subvlRegReg):
+ (JSC::SH4Assembler::floatfpulfrn):
+ (JSC::SH4Assembler::fldsfpul):
+ (JSC::SH4Assembler::fstsfpul):
+ (JSC::SH4Assembler::dcnvsd):
+ (SH4Assembler):
+ (JSC::SH4Assembler::movbRegMem):
+ (JSC::SH4Assembler::sizeOfConstantPool):
+ (JSC::SH4Assembler::linkJump):
+ (JSC::SH4Assembler::printInstr):
+ (JSC::SH4Assembler::printBlockInstr):
+
+2012-11-22 Balazs Kilvady <kilvadyb@homejinni.com>
+
+ Fix the MIPS build after r135330
+ https://bugs.webkit.org/show_bug.cgi?id=102872
+
+ Reviewed by Gavin Barraclough.
+
+ Revert/replace functions added to MIPS port.
+
+ * assembler/MIPSAssembler.h:
+ (JSC::MIPSAssembler::revertJumpToMove):
+ (MIPSAssembler):
+ (JSC::MIPSAssembler::replaceWithJump):
+ * assembler/MacroAssemblerMIPS.h:
+ (MacroAssemblerMIPS):
+ (JSC::MacroAssemblerMIPS::startOfBranchPtrWithPatchOnRegister):
+ (JSC::MacroAssemblerMIPS::revertJumpReplacementToBranchPtrWithPatch):
+ (JSC::MacroAssemblerMIPS::startOfPatchableBranchPtrWithPatchOnAddress):
+
+2012-11-21 Filip Pizlo <fpizlo@apple.com>
+
+ Rename dataLog() and dataLogV() to dataLogF() and dataLogFV()
+ https://bugs.webkit.org/show_bug.cgi?id=103001
+
+ Rubber stamped by Dan Bernstein.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * assembler/LinkBuffer.cpp:
+ (JSC::LinkBuffer::finalizeCodeWithDisassembly):
+ (JSC::LinkBuffer::dumpLinkStatistics):
+ (JSC::LinkBuffer::dumpCode):
+ * assembler/LinkBuffer.h:
+ (JSC):
+ * assembler/SH4Assembler.h:
+ (JSC::SH4Assembler::vprintfStdoutInstr):
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dumpBytecodeCommentAndNewLine):
+ (JSC::CodeBlock::printUnaryOp):
+ (JSC::CodeBlock::printBinaryOp):
+ (JSC::CodeBlock::printConditionalJump):
+ (JSC::CodeBlock::printGetByIdOp):
+ (JSC::dumpStructure):
+ (JSC::dumpChain):
+ (JSC::CodeBlock::printGetByIdCacheStatus):
+ (JSC::CodeBlock::printCallOp):
+ (JSC::CodeBlock::printPutByIdOp):
+ (JSC::CodeBlock::printStructure):
+ (JSC::CodeBlock::printStructures):
+ (JSC::CodeBlock::dump):
+ (JSC::CodeBlock::dumpStatistics):
+ (JSC::CodeBlock::finalizeUnconditionally):
+ (JSC::CodeBlock::resetStubInternal):
+ (JSC::CodeBlock::reoptimize):
+ (JSC::ProgramCodeBlock::jettison):
+ (JSC::EvalCodeBlock::jettison):
+ (JSC::FunctionCodeBlock::jettison):
+ (JSC::CodeBlock::shouldOptimizeNow):
+ (JSC::CodeBlock::tallyFrequentExitSites):
+ (JSC::CodeBlock::dumpValueProfiles):
+ * bytecode/Opcode.cpp:
+ (JSC::OpcodeStats::~OpcodeStats):
+ * bytecode/SamplingTool.cpp:
+ (JSC::SamplingFlags::stop):
+ (JSC::SamplingRegion::dumpInternal):
+ (JSC::SamplingTool::dump):
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::initialize):
+ (JSC::DFG::AbstractState::endBasicBlock):
+ (JSC::DFG::AbstractState::mergeStateAtTail):
+ (JSC::DFG::AbstractState::mergeToSuccessors):
+ * dfg/DFGAbstractValue.h:
+ (JSC::DFG::AbstractValue::dump):
+ * dfg/DFGArgumentsSimplificationPhase.cpp:
+ (JSC::DFG::ArgumentsSimplificationPhase::run):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::injectLazyOperandSpeculation):
+ (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
+ (JSC::DFG::ByteCodeParser::getArrayModeAndEmitChecks):
+ (JSC::DFG::ByteCodeParser::makeSafe):
+ (JSC::DFG::ByteCodeParser::makeDivSafe):
+ (JSC::DFG::ByteCodeParser::handleCall):
+ (JSC::DFG::ByteCodeParser::handleInlining):
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ (JSC::DFG::ByteCodeParser::processPhiStack):
+ (JSC::DFG::ByteCodeParser::linkBlock):
+ (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
+ (JSC::DFG::ByteCodeParser::parseCodeBlock):
+ (JSC::DFG::ByteCodeParser::parse):
+ * dfg/DFGCFAPhase.cpp:
+ (JSC::DFG::CFAPhase::performBlockCFA):
+ (JSC::DFG::CFAPhase::performForwardCFA):
+ * dfg/DFGCFGSimplificationPhase.cpp:
+ (JSC::DFG::CFGSimplificationPhase::run):
+ (JSC::DFG::CFGSimplificationPhase::fixPossibleGetLocal):
+ (JSC::DFG::CFGSimplificationPhase::fixPhis):
+ (JSC::DFG::CFGSimplificationPhase::fixJettisonedPredecessors):
+ (JSC::DFG::CFGSimplificationPhase::removePotentiallyDeadPhiReference):
+ (JSC::DFG::CFGSimplificationPhase::mergeBlocks):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::endIndexForPureCSE):
+ (JSC::DFG::CSEPhase::setReplacement):
+ (JSC::DFG::CSEPhase::eliminate):
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ * dfg/DFGCapabilities.cpp:
+ (JSC::DFG::debugFail):
+ * dfg/DFGConstantFoldingPhase.cpp:
+ (JSC::DFG::ConstantFoldingPhase::foldConstants):
+ (JSC::DFG::ConstantFoldingPhase::paintUnreachableCode):
+ * dfg/DFGDisassembler.cpp:
+ (JSC::DFG::Disassembler::dump):
+ * dfg/DFGDriver.cpp:
+ (JSC::DFG::compile):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ (JSC::DFG::FixupPhase::fixDoubleEdge):
+ * dfg/DFGGraph.cpp:
+ (JSC::DFG::printWhiteSpace):
+ (JSC::DFG::Graph::dumpCodeOrigin):
+ (JSC::DFG::Graph::dump):
+ (JSC::DFG::Graph::dumpBlockHeader):
+ (JSC::DFG::Graph::predictArgumentTypes):
+ * dfg/DFGJITCompiler.cpp:
+ (JSC::DFG::JITCompiler::link):
+ * dfg/DFGOSREntry.cpp:
+ (JSC::DFG::prepareOSREntry):
+ * dfg/DFGOSRExitCompiler.cpp:
+ * dfg/DFGOSRExitCompiler32_64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGOSRExitCompiler64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGPhase.cpp:
+ (JSC::DFG::Phase::beginPhase):
+ * dfg/DFGPhase.h:
+ (JSC::DFG::runAndLog):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ (JSC::DFG::PredictionPropagationPhase::propagateForward):
+ (JSC::DFG::PredictionPropagationPhase::propagateBackward):
+ (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
+ * dfg/DFGRegisterBank.h:
+ (JSC::DFG::RegisterBank::dump):
+ * dfg/DFGScoreBoard.h:
+ (JSC::DFG::ScoreBoard::use):
+ (JSC::DFG::ScoreBoard::dump):
+ * dfg/DFGSlowPathGenerator.h:
+ (JSC::DFG::SlowPathGenerator::generate):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
+ (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecutionWithConditionalDirection):
+ (JSC::DFG::SpeculativeJIT::runSlowPathGenerators):
+ (JSC::DFG::SpeculativeJIT::dump):
+ (JSC::DFG::SpeculativeJIT::checkConsistency):
+ (JSC::DFG::SpeculativeJIT::compile):
+ (JSC::DFG::SpeculativeJIT::checkGeneratedTypeForToInt32):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
+ * dfg/DFGStructureCheckHoistingPhase.cpp:
+ (JSC::DFG::StructureCheckHoistingPhase::run):
+ * dfg/DFGValidate.cpp:
+ (Validate):
+ (JSC::DFG::Validate::reportValidationContext):
+ (JSC::DFG::Validate::dumpData):
+ (JSC::DFG::Validate::dumpGraphIfAppropriate):
+ * dfg/DFGVariableEventStream.cpp:
+ (JSC::DFG::VariableEventStream::logEvent):
+ (JSC::DFG::VariableEventStream::reconstruct):
+ * dfg/DFGVirtualRegisterAllocationPhase.cpp:
+ (JSC::DFG::VirtualRegisterAllocationPhase::run):
+ * heap/Heap.cpp:
+ * heap/HeapStatistics.cpp:
+ (JSC::HeapStatistics::logStatistics):
+ (JSC::HeapStatistics::showObjectStatistics):
+ * heap/MarkStack.h:
+ * heap/MarkedBlock.h:
+ * heap/SlotVisitor.cpp:
+ (JSC::SlotVisitor::validate):
+ * interpreter/CallFrame.cpp:
+ (JSC::CallFrame::dumpCaller):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::dumpRegisters):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ (JSC::JIT::privateCompileSlowCases):
+ (JSC::JIT::privateCompile):
+ * jit/JITDisassembler.cpp:
+ (JSC::JITDisassembler::dump):
+ (JSC::JITDisassembler::dumpForInstructions):
+ * jit/JITStubRoutine.h:
+ (JSC):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jit/JumpReplacementWatchpoint.cpp:
+ (JSC::JumpReplacementWatchpoint::fireInternal):
+ * llint/LLIntExceptions.cpp:
+ (JSC::LLInt::interpreterThrowInCaller):
+ (JSC::LLInt::returnToThrow):
+ (JSC::LLInt::callToThrow):
+ * llint/LLIntSlowPaths.cpp:
+ (JSC::LLInt::llint_trace_operand):
+ (JSC::LLInt::llint_trace_value):
+ (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+ (JSC::LLInt::traceFunctionPrologue):
+ (JSC::LLInt::jitCompileAndSetHeuristics):
+ (JSC::LLInt::entryOSR):
+ (JSC::LLInt::handleHostCall):
+ (JSC::LLInt::setUpCall):
+ * profiler/Profile.cpp:
+ (JSC::Profile::debugPrintData):
+ (JSC::Profile::debugPrintDataSampleStyle):
+ * profiler/ProfileNode.cpp:
+ (JSC::ProfileNode::debugPrintData):
+ (JSC::ProfileNode::debugPrintDataSampleStyle):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::dumpRegExpTrace):
+ * runtime/RegExp.cpp:
+ (JSC::RegExp::matchCompareWithInterpreter):
+ * runtime/SamplingCounter.cpp:
+ (JSC::AbstractSamplingCounter::dump):
+ * runtime/Structure.cpp:
+ (JSC::Structure::dumpStatistics):
+ (JSC::PropertyMapStatisticsExitLogger::~PropertyMapStatisticsExitLogger):
+ * tools/CodeProfile.cpp:
+ (JSC::CodeProfile::report):
+ * tools/ProfileTreeNode.h:
+ (JSC::ProfileTreeNode::dumpInternal):
+ * yarr/YarrInterpreter.cpp:
+ (JSC::Yarr::ByteCompiler::dumpDisjunction):
+
+2012-11-21 Filip Pizlo <fpizlo@apple.com>
+
+ It should be possible to say disassemble(stuff) instead of having to say if (!tryToDisassemble(stuff)) dataLog("I failed")
+ https://bugs.webkit.org/show_bug.cgi?id=103010
+
+ Reviewed by Anders Carlsson.
+
+ You can still say tryToDisassemble(), which will tell you if it failed; you can then
+ decide what to do instead. But it's better to say disassemble(), which will just print
+ the instruction ranges if tryToDisassemble() failed. This is particularly appropriate
+ since that's what all previous users of tryToDisassemble() would have done in some
+ form or another.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * assembler/LinkBuffer.cpp:
+ (JSC::LinkBuffer::finalizeCodeWithDisassembly):
+ * dfg/DFGDisassembler.cpp:
+ (JSC::DFG::Disassembler::dumpDisassembly):
+ * disassembler/Disassembler.cpp: Added.
+ (JSC):
+ (JSC::disassemble):
+ * disassembler/Disassembler.h:
+ (JSC):
+ * jit/JITDisassembler.cpp:
+ (JSC::JITDisassembler::dumpDisassembly):
+
+2012-11-21 Filip Pizlo <fpizlo@apple.com>
+
+ dumpOperands() claims that it needs a non-const Operands& when that is completely false
+ https://bugs.webkit.org/show_bug.cgi?id=103005
+
+ Reviewed by Eric Carlson.
+
+ * bytecode/Operands.h:
+ (JSC::dumpOperands):
+ (JSC):
+
+2012-11-20 Filip Pizlo <fpizlo@apple.com>
+
+ Baseline JIT's disassembly should be just as pretty as the DFG's
+ https://bugs.webkit.org/show_bug.cgi?id=102873
+
+ Reviewed by Sam Weinig.
+
+ Integrated the CodeBlock's bytecode dumper with the JIT's disassembler. Also fixed
+ some type goof-ups (instructions are not in a Vector<Instruction> so using a Vector
+ iterator makes no sense) and stream-lined some things (you don't actually need a
+ full-fledged ExecState* to dump bytecode).
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::printUnaryOp):
+ (JSC::CodeBlock::printBinaryOp):
+ (JSC::CodeBlock::printConditionalJump):
+ (JSC::CodeBlock::printGetByIdOp):
+ (JSC::CodeBlock::printCallOp):
+ (JSC::CodeBlock::printPutByIdOp):
+ (JSC::CodeBlock::dump):
+ (JSC):
+ (JSC::CodeBlock::CodeBlock):
+ * bytecode/CodeBlock.h:
+ (CodeBlock):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::dumpCallFrame):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ (JSC::JIT::privateCompileSlowCases):
+ (JSC::JIT::privateCompile):
+ * jit/JIT.h:
+ (JIT):
+ * jit/JITDisassembler.cpp: Added.
+ (JSC):
+ (JSC::JITDisassembler::JITDisassembler):
+ (JSC::JITDisassembler::~JITDisassembler):
+ (JSC::JITDisassembler::dump):
+ (JSC::JITDisassembler::dumpForInstructions):
+ (JSC::JITDisassembler::dumpDisassembly):
+ * jit/JITDisassembler.h: Added.
+ (JSC):
+ (JITDisassembler):
+ (JSC::JITDisassembler::setStartOfCode):
+ (JSC::JITDisassembler::setForBytecodeMainPath):
+ (JSC::JITDisassembler::setForBytecodeSlowPath):
+ (JSC::JITDisassembler::setEndOfSlowPath):
+ (JSC::JITDisassembler::setEndOfCode):
+
+2012-11-21 Daniel Bates <dbates@webkit.org>
+
+ JavaScript fails to concatenate large strings
+ <https://bugs.webkit.org/show_bug.cgi?id=102963>
+
+ Reviewed by Michael Saboff.
+
+ Fixes an issue where we inadvertently didn't check the length of
+ a JavaScript string for overflow.
+
+ * runtime/Operations.h:
+ (JSC::jsString):
+ (JSC::jsStringFromArguments):
+
+2012-11-20 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should be able to cache closure calls (part 2/2)
+ https://bugs.webkit.org/show_bug.cgi?id=102662
+
+ Reviewed by Gavin Barraclough.
+
+ Added caching of calls where the JSFunction* varies, but the Structure* and ExecutableBase*
+ stay the same. This is accomplished by replacing the branch that compares against a constant
+ JSFunction* with a jump to a closure call stub. The closure call stub contains a fast path,
+ and jumps slow directly to the virtual call thunk.
+
+ Looks like a 1% win on V8v7.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * bytecode/CallLinkInfo.cpp:
+ (JSC::CallLinkInfo::unlink):
+ * bytecode/CallLinkInfo.h:
+ (CallLinkInfo):
+ (JSC::CallLinkInfo::isLinked):
+ (JSC::getCallLinkInfoBytecodeIndex):
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::finalizeUnconditionally):
+ (JSC):
+ (JSC::CodeBlock::findClosureCallForReturnPC):
+ (JSC::CodeBlock::bytecodeOffset):
+ (JSC::CodeBlock::codeOriginForReturn):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::getCallLinkInfo):
+ (CodeBlock):
+ (JSC::CodeBlock::isIncomingCallAlreadyLinked):
+ * dfg/DFGJITCompiler.cpp:
+ (JSC::DFG::JITCompiler::link):
+ * dfg/DFGJITCompiler.h:
+ (JSC::DFG::JITCompiler::addJSCall):
+ (JSC::DFG::JITCompiler::JSCallRecord::JSCallRecord):
+ (JSCallRecord):
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGOperations.h:
+ * dfg/DFGRepatch.cpp:
+ (JSC::DFG::linkSlowFor):
+ (DFG):
+ (JSC::DFG::dfgLinkFor):
+ (JSC::DFG::dfgLinkSlowFor):
+ (JSC::DFG::dfgLinkClosureCall):
+ * dfg/DFGRepatch.h:
+ (DFG):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::emitCall):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::emitCall):
+ * dfg/DFGThunks.cpp:
+ (DFG):
+ (JSC::DFG::linkClosureCallThunkGenerator):
+ * dfg/DFGThunks.h:
+ (DFG):
+ * heap/Heap.h:
+ (Heap):
+ (JSC::Heap::jitStubRoutines):
+ * heap/JITStubRoutineSet.h:
+ (JSC::JITStubRoutineSet::size):
+ (JSC::JITStubRoutineSet::at):
+ (JITStubRoutineSet):
+ * jit/ClosureCallStubRoutine.cpp: Added.
+ (JSC):
+ (JSC::ClosureCallStubRoutine::ClosureCallStubRoutine):
+ (JSC::ClosureCallStubRoutine::~ClosureCallStubRoutine):
+ (JSC::ClosureCallStubRoutine::markRequiredObjectsInternal):
+ * jit/ClosureCallStubRoutine.h: Added.
+ (JSC):
+ (ClosureCallStubRoutine):
+ (JSC::ClosureCallStubRoutine::structure):
+ (JSC::ClosureCallStubRoutine::executable):
+ (JSC::ClosureCallStubRoutine::codeOrigin):
+ * jit/GCAwareJITStubRoutine.cpp:
+ (JSC::GCAwareJITStubRoutine::GCAwareJITStubRoutine):
+ * jit/GCAwareJITStubRoutine.h:
+ (GCAwareJITStubRoutine):
+ (JSC::GCAwareJITStubRoutine::isClosureCall):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompile):
+
+2012-11-20 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should be able to cache closure calls (part 1/2)
+ https://bugs.webkit.org/show_bug.cgi?id=102662
+
+ Reviewed by Gavin Barraclough.
+
+ Add ability to revert a jump replacement back to
+ branchPtrWithPatch(Condition, RegisterID, TrustedImmPtr). This is meant to be
+ a mandatory piece of functionality for all assemblers. I also renamed some of
+ the functions for reverting jump replacements back to
+ patchableBranchPtrWithPatch(Condition, Address, TrustedImmPtr), so as to avoid
+ confusion.
+
+ * assembler/ARMv7Assembler.h:
+ (JSC::ARMv7Assembler::BadReg):
+ (ARMv7Assembler):
+ (JSC::ARMv7Assembler::revertJumpTo_movT3):
+ * assembler/LinkBuffer.h:
+ (JSC):
+ * assembler/MacroAssemblerARMv7.h:
+ (JSC::MacroAssemblerARMv7::startOfBranchPtrWithPatchOnRegister):
+ (MacroAssemblerARMv7):
+ (JSC::MacroAssemblerARMv7::revertJumpReplacementToBranchPtrWithPatch):
+ (JSC::MacroAssemblerARMv7::startOfPatchableBranchPtrWithPatchOnAddress):
+ * assembler/MacroAssemblerX86.h:
+ (JSC::MacroAssemblerX86::startOfBranchPtrWithPatchOnRegister):
+ (MacroAssemblerX86):
+ (JSC::MacroAssemblerX86::startOfPatchableBranchPtrWithPatchOnAddress):
+ (JSC::MacroAssemblerX86::revertJumpReplacementToBranchPtrWithPatch):
+ * assembler/MacroAssemblerX86_64.h:
+ (JSC::MacroAssemblerX86_64::startOfBranchPtrWithPatchOnRegister):
+ (JSC::MacroAssemblerX86_64::startOfPatchableBranchPtrWithPatchOnAddress):
+ (MacroAssemblerX86_64):
+ (JSC::MacroAssemblerX86_64::revertJumpReplacementToBranchPtrWithPatch):
+ * assembler/RepatchBuffer.h:
+ (JSC::RepatchBuffer::startOfBranchPtrWithPatchOnRegister):
+ (RepatchBuffer):
+ (JSC::RepatchBuffer::startOfPatchableBranchPtrWithPatchOnAddress):
+ (JSC::RepatchBuffer::revertJumpReplacementToBranchPtrWithPatch):
+ * assembler/X86Assembler.h:
+ (JSC::X86Assembler::revertJumpTo_cmpl_ir_force32):
+ (X86Assembler):
+ * dfg/DFGRepatch.cpp:
+ (JSC::DFG::replaceWithJump):
+ (JSC::DFG::dfgResetGetByID):
+ (JSC::DFG::dfgResetPutByID):
+
+2012-11-20 Yong Li <yoli@rim.com>
+
+ [ARMv7] Neither linkCall() nor linkPointer() should flush code.
+ https://bugs.webkit.org/show_bug.cgi?id=99213
+
+ Reviewed by George Staikos.
+
+ LinkBuffer doesn't need to flush code during linking. It will
+ eventually flush the whole executable. Fixing this gives >%5
+ sunspider boost (on QNX).
+
+ Also make replaceWithLoad() and replaceWithAddressComputation() flush
+ only when necessary.
+
+ * assembler/ARMv7Assembler.h:
+ (JSC::ARMv7Assembler::linkCall):
+ (JSC::ARMv7Assembler::linkPointer):
+ (JSC::ARMv7Assembler::relinkCall):
+ (JSC::ARMv7Assembler::repatchInt32):
+ (JSC::ARMv7Assembler::repatchPointer):
+ (JSC::ARMv7Assembler::replaceWithLoad): Flush only after it did write.
+ (JSC::ARMv7Assembler::replaceWithAddressComputation): Flush only after it did write.
+ (JSC::ARMv7Assembler::setInt32):
+ (JSC::ARMv7Assembler::setPointer):
+
+2012-11-19 Filip Pizlo <fpizlo@apple.com>
+
+ Remove support for ARMv7 errata from the jump code
+ https://bugs.webkit.org/show_bug.cgi?id=102759
+
+ Reviewed by Oliver Hunt.
+
+ The jump replacement code was wrong to begin with since it wasn't doing
+ a cache flush on the inserted padding. And, to my knowledge, we don't need
+ this anymore, so this patch removes all errata code from the ARMv7 port.
+
+ * assembler/ARMv7Assembler.h:
+ (JSC::ARMv7Assembler::computeJumpType):
+ (JSC::ARMv7Assembler::replaceWithJump):
+ (JSC::ARMv7Assembler::maxJumpReplacementSize):
+ (JSC::ARMv7Assembler::canBeJumpT3):
+ (JSC::ARMv7Assembler::canBeJumpT4):
+
+2012-11-19 Patrick Gansterer <paroga@webkit.org>
+
+ [CMake] Create JavaScriptCore ForwardingHeaders
+ https://bugs.webkit.org/show_bug.cgi?id=92665
+
+ Reviewed by Brent Fulgham.
+
+ When using CMake to build the Windows port, we need
+ to generate the forwarding headers with it too.
+
+ * CMakeLists.txt:
+
+2012-11-19 Kihong Kwon <kihong.kwon@samsung.com>
+
+ Add PROXIMITY_EVENTS feature
+ https://bugs.webkit.org/show_bug.cgi?id=102658
+
+ Reviewed by Kentaro Hara.
+
+ Add PROXIMITY_EVENTS feature to xcode project for JavaScriptCore.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2012-11-18 Dan Bernstein <mitz@apple.com>
+
+ Try to fix the DFG build after r135099.
+
+ * dfg/DFGCommon.h:
+ (JSC::DFG::shouldShowDisassembly):
+
+2012-11-18 Filip Pizlo <fpizlo@apple.com>
+
+ Unreviewed, build fix for !ENABLE(DFG_JIT).
+
+ * dfg/DFGCommon.h:
+ (JSC::DFG::shouldShowDisassembly):
+ (DFG):
+
+2012-11-18 Filip Pizlo <fpizlo@apple.com>
+
+ JSC should have more logging in structure-related code
+ https://bugs.webkit.org/show_bug.cgi?id=102630
+
+ Reviewed by Simon Fraser.
+
+ - JSValue::description() now tells you if something is a structure, and if so,
+ what kind of structure it is.
+
+ - Jettisoning logic now tells you why things are being jettisoned.
+
+ - It's now possible to turn off GC-triggered jettisoning entirely.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::finalizeUnconditionally):
+ (JSC::CodeBlock::reoptimize):
+ (JSC::ProgramCodeBlock::jettison):
+ (JSC::EvalCodeBlock::jettison):
+ (JSC::FunctionCodeBlock::jettison):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::shouldImmediatelyAssumeLivenessDuringScan):
+ * runtime/JSValue.cpp:
+ (JSC::JSValue::description):
+ * runtime/Options.h:
+ (JSC):
+
+2012-11-18 Filip Pizlo <fpizlo@apple.com>
+
+ DFG constant folding phase should say 'changed = true' whenever it changes the graph
+ https://bugs.webkit.org/show_bug.cgi?id=102550
+
+ Rubber stamped by Mark Hahnenberg.
+
+ * dfg/DFGConstantFoldingPhase.cpp:
+ (JSC::DFG::ConstantFoldingPhase::foldConstants):
+
+2012-11-17 Elliott Sprehn <esprehn@chromium.org>
+
+ Expose JSObject removeDirect and PrivateName to WebCore
+ https://bugs.webkit.org/show_bug.cgi?id=102546
+
+ Reviewed by Geoffrey Garen.
+
+ Export removeDirect for use in WebCore so JSDependentRetained works.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2012-11-16 Filip Pizlo <fpizlo@apple.com>
+
+ Given a PutById or GetById with a proven structure, the DFG should be able to emit a PutByOffset or GetByOffset instead
+ https://bugs.webkit.org/show_bug.cgi?id=102327
+
+ Reviewed by Mark Hahnenberg.
+
+ If the profiler tells us that a GetById or PutById may be polymorphic but our
+ control flow analysis proves that it isn't, we should trust the control flow
+ analysis over the profiler. This arises in cases where GetById or PutById were
+ inlined: the inlined function may have been called from other places that led
+ to polymorphism, but in the current inlined context, there is no polymorphism.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ * bytecode/GetByIdStatus.cpp:
+ (JSC::GetByIdStatus::computeFor):
+ (JSC):
+ * bytecode/GetByIdStatus.h:
+ (JSC::GetByIdStatus::GetByIdStatus):
+ (GetByIdStatus):
+ * bytecode/PutByIdStatus.cpp:
+ (JSC::PutByIdStatus::computeFor):
+ (JSC):
+ * bytecode/PutByIdStatus.h:
+ (JSC):
+ (JSC::PutByIdStatus::PutByIdStatus):
+ (PutByIdStatus):
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGAbstractValue.h:
+ (JSC::DFG::AbstractValue::bestProvenStructure):
+ (AbstractValue):
+ * dfg/DFGConstantFoldingPhase.cpp:
+ (JSC::DFG::ConstantFoldingPhase::foldConstants):
+ (JSC::DFG::ConstantFoldingPhase::addStructureTransitionCheck):
+ (ConstantFoldingPhase):
+ * dfg/DFGNode.h:
+ (JSC::DFG::Node::convertToGetByOffset):
+ (Node):
+ (JSC::DFG::Node::convertToPutByOffset):
+ (JSC::DFG::Node::hasStorageResult):
+ * runtime/JSGlobalObject.h:
+ (JSC::Structure::prototypeChain):
+ (JSC):
+ (JSC::Structure::isValid):
+ * runtime/Operations.h:
+ (JSC::isPrototypeChainNormalized):
+ (JSC):
+ * runtime/Structure.h:
+ (Structure):
+ (JSC::Structure::transitionDidInvolveSpecificValue):
+
+2012-11-16 Tony Chang <tony@chromium.org>
+
+ Remove ENABLE_CSS_HIERARCHIES since it's no longer in use
+ https://bugs.webkit.org/show_bug.cgi?id=102554
+
+ Reviewed by Andreas Kling.
+
+ As mentioned in https://bugs.webkit.org/show_bug.cgi?id=79939#c41 ,
+ we're going to revist this feature once additional vendor support is
+ achieved.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2012-11-16 Patrick Gansterer <paroga@webkit.org>
+
+ Build fix for WinCE after r133688.
+
+ Use numeric_limits<uint32_t>::max() instead of UINT32_MAX.
+
+ * runtime/CodeCache.h:
+ (JSC::CacheMap::CacheMap):
+
+2012-11-15 Filip Pizlo <fpizlo@apple.com>
+
+ ClassInfo.h should have correct indentation.
+
+ Rubber stamped by Mark Hahnenberg.
+
+ ClassInfo.h had some true creativity in its use of whitespace. Some things within
+ the namespace were indented four spaces and others where not. One #define had its
+ contents indented four spaces, while another didn't. I applied the following rule:
+
+ - Non-macro things in the namespace should not be indented (that's our current
+ accepted practice).
+
+ - Macros should never be indented but if they are multi-line then their subsequent
+ bodies should be indented four spaces. I believe that is consistent with what we
+ do elsewhere.
+
+ * runtime/ClassInfo.h:
+ (JSC):
+ (MethodTable):
+ (ClassInfo):
+ (JSC::ClassInfo::propHashTable):
+ (JSC::ClassInfo::isSubClassOf):
+ (JSC::ClassInfo::hasStaticProperties):
+
+2012-11-15 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should copy propagate trivially no-op ConvertThis
+ https://bugs.webkit.org/show_bug.cgi?id=102445
+
+ Reviewed by Oliver Hunt.
+
+ Copy propagation is always a good thing, since it reveals must-alias relationships
+ to the CFA and CSE. This accomplishes copy propagation for ConvertThis by first
+ converting it to an Identity node (which is done by the constant folder since it
+ has access to CFA results) and then performing substitution of references to
+ Identity with references to Identity's child in the CSE.
+
+ I'm not aiming for a big speed-up here; I just think that this will be useful for
+ the work on https://bugs.webkit.org/show_bug.cgi?id=102327.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ * dfg/DFGConstantFoldingPhase.cpp:
+ (JSC::DFG::ConstantFoldingPhase::foldConstants):
+ * dfg/DFGNodeType.h:
+ (DFG):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2012-11-15 Filip Pizlo <fpizlo@apple.com>
+
+ CallData.h should have correct indentation.
+
+ Rubber stamped by Mark Hahneberg.
+
+ * runtime/CallData.h:
+ (JSC):
+
+2012-11-15 Filip Pizlo <fpizlo@apple.com>
+
+ Remove methodCallDummy since it is not used anymore.
+
+ Rubber stamped by Mark Hahnenberg.
+
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::reset):
+ (JSC):
+ (JSC::JSGlobalObject::visitChildren):
+ * runtime/JSGlobalObject.h:
+ (JSGlobalObject):
+
+2012-11-14 Filip Pizlo <fpizlo@apple.com>
+
+ Structure should be able to easily tell if the prototype chain might intercept a store
+ https://bugs.webkit.org/show_bug.cgi?id=102326
+
+ Reviewed by Geoffrey Garen.
+
+ This improves our ability to reason about the correctness of the more optimized
+ prototype chain walk in JSObject::put(), while also making it straight forward to
+ check if the prototype chain will do strange things to a property store by just
+ looking at the structure.
+
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::put):
+ * runtime/Structure.cpp:
+ (JSC::Structure::prototypeChainMayInterceptStoreTo):
+ (JSC):
+ * runtime/Structure.h:
+ (Structure):
+
+2012-11-15 Thiago Marcos P. Santos <thiago.santos@intel.com>
+
+ [CMake] Do not regenerate LLIntAssembly.h on every incremental build
+ https://bugs.webkit.org/show_bug.cgi?id=102248
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Update LLIntAssembly.h's mtime after running asm.rb to make the build
+ system dependency tracking consistent.
+
+ * CMakeLists.txt:
+
+2012-11-15 Thiago Marcos P. Santos <thiago.santos@intel.com>
+
+ Fix compiler warnings about signed/unsigned comparison on i386
+ https://bugs.webkit.org/show_bug.cgi?id=102249
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Add casting to unsigned to shut up gcc warnings. Build was broken on
+ JSVALUE32_64 ports compiling with -Werror.
+
+ * llint/LLIntData.cpp:
+ (JSC::LLInt::Data::performAssertions):
+
+2012-11-14 Brent Fulgham <bfulgham@webkit.org>
+
+ [Windows, WinCairo] Unreviewed build fix.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ Missed one of the exports that was part of the WebKit2.def.
+
+2012-11-14 Brent Fulgham <bfulgham@webkit.org>
+
+ [Windows, WinCairo] Correct build failure.
+ https://bugs.webkit.org/show_bug.cgi?id=102302
+
+ WebCore symbols were mistakenly added to the JavaScriptCore
+ library definition file.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Remove
+ WebCore symbols that were incorrectly added to the export file.
+
+2012-11-14 Mark Lam <mark.lam@apple.com>
+
+ Change JSEventListener::m_jsFunction to be a weak ref.
+ https://bugs.webkit.org/show_bug.cgi?id=101989.
+
+ Reviewed by Geoffrey Garen.
+
+ Added infrastructure for scanning weak ref slots.
+
+ * heap/SlotVisitor.cpp: Added #include "SlotVisitorInlines.h".
+ * heap/SlotVisitor.h:
+ (SlotVisitor): Added SlotVisitor::appendUnbarrieredWeak().
+ * heap/SlotVisitorInlines.h: Added #include "Weak.h".
+ (JSC::SlotVisitor::appendUnbarrieredWeak): Added.
+ * heap/Weak.h:
+ (JSC::operator==): Added operator==() for Weak.
+ * runtime/JSCell.h: Removed #include "SlotVisitorInlines.h".
+ * runtime/JSObject.h: Added #include "SlotVisitorInlines.h".
+
+2012-11-14 Filip Pizlo <fpizlo@apple.com>
+
+ Read-only properties created with putDirect() should tell the structure that there are read-only properties
+ https://bugs.webkit.org/show_bug.cgi?id=102292
+
+ Reviewed by Gavin Barraclough.
+
+ This mostly affects things like function.length.
+
+ * runtime/JSObject.h:
+ (JSC::JSObject::putDirectInternal):
+
+2012-11-13 Filip Pizlo <fpizlo@apple.com>
+
+ Don't access Node& after adding nodes to the graph.
+ https://bugs.webkit.org/show_bug.cgi?id=102005
+
+ Reviewed by Oliver Hunt.
+
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+
+2012-11-14 Valery Ignatyev <valery.ignatyev@ispras.ru>
+
+ Replace (typeof(x) != <"object", "undefined", ...>) with
+ !(typeof(x) == <"object",..>). Later is_object, is_<...> bytecode operation
+ will be used.
+
+ https://bugs.webkit.org/show_bug.cgi?id=98893
+
+ Reviewed by Filip Pizlo.
+
+ This eliminates expensive typeof implementation and
+ allows to use DFG optimizations, which doesn't support 'typeof'.
+
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::BinaryOpNode::emitBytecode):
+
+2012-11-14 Peter Gal <galpeter@inf.u-szeged.hu>
+
+ [Qt][ARM]REGRESSION(r133985): It broke the build
+ https://bugs.webkit.org/show_bug.cgi?id=101740
+
+ Reviewed by Csaba Osztrogonác.
+
+ Changed the emitGenericContiguousPutByVal to accept the additional IndexingType argument.
+ This information was passed as a template parameter.
+
+ * jit/JIT.h:
+ (JSC::JIT::emitInt32PutByVal):
+ (JSC::JIT::emitDoublePutByVal):
+ (JSC::JIT::emitContiguousPutByVal):
+ (JIT):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emitGenericContiguousPutByVal):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::emitGenericContiguousPutByVal):
+
+2012-11-14 Peter Gal <galpeter@inf.u-szeged.hu>
+
+ Fix the MIPS build after r134332
+ https://bugs.webkit.org/show_bug.cgi?id=102227
+
+ Reviewed by Csaba Osztrogonác.
+
+ Added missing methods for the MacroAssemblerMIPS, based on the MacroAssemblerARMv7.
+
+ * assembler/MacroAssemblerMIPS.h:
+ (JSC::MacroAssemblerMIPS::canJumpReplacePatchableBranchPtrWithPatch):
+ (MacroAssemblerMIPS):
+ (JSC::MacroAssemblerMIPS::startOfPatchableBranchPtrWithPatch):
+ (JSC::MacroAssemblerMIPS::revertJumpReplacementToPatchableBranchPtrWithPatch):
+
+2012-11-14 Peter Gal <galpeter@inf.u-szeged.hu>
+
+ Fix the [-Wreturn-type] warning in JavaScriptCore/assembler/MacroAssemblerARM.h
+ https://bugs.webkit.org/show_bug.cgi?id=102206
+
+ Reviewed by Csaba Osztrogonác.
+
+ Add a return value for the function to suppress the warning.
+
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::startOfPatchableBranchPtrWithPatch):
+
+2012-11-14 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r134599.
+ http://trac.webkit.org/changeset/134599
+ https://bugs.webkit.org/show_bug.cgi?id=102225
+
+ It broke the 32 bit EFL build (Requested by Ossy on #webkit).
+
+ * jit/JITPropertyAccess.cpp:
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC):
+ (JSC::JIT::emitGenericContiguousPutByVal):
+
+2012-11-14 Balazs Kilvady <kilvadyb@homejinni.com>
+
+ [Qt][ARM]REGRESSION(r133985): It broke the build
+ https://bugs.webkit.org/show_bug.cgi?id=101740
+
+ Reviewed by Csaba Osztrogonác.
+
+ Template function body moved to fix VALUE_PROFILER disabled case.
+
+ * jit/JITPropertyAccess.cpp:
+ (JSC):
+ (JSC::JIT::emitGenericContiguousPutByVal):
+ * jit/JITPropertyAccess32_64.cpp:
+
+2012-11-13 Filip Pizlo <fpizlo@apple.com>
+
+ DFG CreateThis should be able to statically account for the structure of the object it creates, if profiling indicates that this structure is always the same
+ https://bugs.webkit.org/show_bug.cgi?id=102017
+
+ Reviewed by Geoffrey Garen.
+
+ This adds a watchpoint in JSFunction on the cached inheritor ID. It also changes
+ NewObject to take a structure as an operand (previously it implicitly used the owning
+ global object's empty object structure). Any GetCallee where the callee is predictable
+ is turned into a CheckFunction + WeakJSConstant, and any CreateThis on a WeakJSConstant
+ where the inheritor ID watchpoint is still valid is turned into an InheritorIDWatchpoint
+ followed by a NewObject. NewObject already accounts for the structure it uses for object
+ creation in the CFA.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::checkFunctionElimination):
+ * dfg/DFGGraph.cpp:
+ (JSC::DFG::Graph::dump):
+ * dfg/DFGNode.h:
+ (JSC::DFG::Node::hasFunction):
+ (JSC::DFG::Node::function):
+ (JSC::DFG::Node::hasStructure):
+ * dfg/DFGNodeType.h:
+ (DFG):
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGOperations.h:
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::callOperation):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * runtime/Executable.h:
+ (JSC::JSFunction::JSFunction):
+ * runtime/JSBoundFunction.cpp:
+ (JSC):
+ * runtime/JSFunction.cpp:
+ (JSC::JSFunction::JSFunction):
+ (JSC::JSFunction::put):
+ (JSC::JSFunction::defineOwnProperty):
+ * runtime/JSFunction.h:
+ (JSC::JSFunction::tryGetKnownInheritorID):
+ (JSFunction):
+ (JSC::JSFunction::addInheritorIDWatchpoint):
+
+2012-11-13 Filip Pizlo <fpizlo@apple.com>
+
+ JSFunction and its descendants should be destructible
+ https://bugs.webkit.org/show_bug.cgi?id=102062
+
+ Reviewed by Mark Hahnenberg.
+
+ This will make it easy to place an InlineWatchpointSet inside JSFunction. In the
+ future, we could make JSFunction non-destructible again by making a version of
+ WatchpointSet that is entirely GC'd, but this seems like overkill for now.
+
+ This is performance-neutral.
+
+ * runtime/JSBoundFunction.cpp:
+ (JSC::JSBoundFunction::destroy):
+ (JSC):
+ * runtime/JSBoundFunction.h:
+ (JSBoundFunction):
+ * runtime/JSFunction.cpp:
+ (JSC):
+ (JSC::JSFunction::destroy):
+ * runtime/JSFunction.h:
+ (JSFunction):
+
+2012-11-13 Cosmin Truta <ctruta@rim.com>
+
+ Uninitialized fields in class JSLock
+ https://bugs.webkit.org/show_bug.cgi?id=101695
+
+ Reviewed by Mark Hahnenberg.
+
+ Initialize JSLock::m_ownerThread and JSLock::m_lockDropDepth.
+
+ * runtime/JSLock.cpp:
+ (JSC::JSLock::JSLock):
+
+2012-11-13 Peter Gal <galpeter@inf.u-szeged.hu>
+
+ Fix the ARM traditional build after r134332
+ https://bugs.webkit.org/show_bug.cgi?id=102044
+
+ Reviewed by Zoltan Herczeg.
+
+ Added missing methods for the MacroAssemblerARM, based on the MacroAssemblerARMv7.
+
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::canJumpReplacePatchableBranchPtrWithPatch):
+ (MacroAssemblerARM):
+ (JSC::MacroAssemblerARM::startOfPatchableBranchPtrWithPatch):
+ (JSC::MacroAssemblerARM::revertJumpReplacementToPatchableBranchPtrWithPatch):
+
+2012-11-12 Filip Pizlo <fpizlo@apple.com>
+
+ op_get_callee should have value profiling
+ https://bugs.webkit.org/show_bug.cgi?id=102047
+
+ Reviewed by Sam Weinig.
+
+ This will allow us to detect if the callee is always the same, which is probably
+ the common case for a lot of constructors.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::CodeBlock):
+ * bytecode/Opcode.h:
+ (JSC):
+ (JSC::padOpcodeName):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_get_callee):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::emit_op_get_callee):
+ * llint/LowLevelInterpreter32_64.asm:
+ * llint/LowLevelInterpreter64.asm:
+
+2012-11-12 Filip Pizlo <fpizlo@apple.com>
+
+ The act of getting the callee during 'this' construction should be explicit in bytecode
+ https://bugs.webkit.org/show_bug.cgi?id=102016
+
+ Reviewed by Michael Saboff.
+
+ This is mostly a rollout of http://trac.webkit.org/changeset/116673, but also includes
+ changes to have create_this use the result of get_callee.
+
+ No performance or behavioral impact. This is just meant to allow us to profile
+ get_callee in the future.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ * bytecode/Opcode.h:
+ (JSC):
+ (JSC::padOpcodeName):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ * dfg/DFGCapabilities.h:
+ (JSC::DFG::canCompileOpcode):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ * jit/JIT.h:
+ (JIT):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_get_callee):
+ (JSC):
+ (JSC::JIT::emit_op_create_this):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::emit_op_get_callee):
+ (JSC):
+ (JSC::JIT::emit_op_create_this):
+ * llint/LLIntSlowPaths.cpp:
+ (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+ * llint/LowLevelInterpreter32_64.asm:
+ * llint/LowLevelInterpreter64.asm:
+
+2012-11-12 Filip Pizlo <fpizlo@apple.com>
+
+ Unreviewed, fix ARMv7 build.
+
+ * assembler/MacroAssemblerARMv7.h:
+ (JSC::MacroAssemblerARMv7::startOfPatchableBranchPtrWithPatch):
+ (JSC::MacroAssemblerARMv7::revertJumpReplacementToPatchableBranchPtrWithPatch):
+
+2012-11-12 Filip Pizlo <fpizlo@apple.com>
+
+ Patching of jumps to stubs should use jump replacement rather than branch destination overwrite
+ https://bugs.webkit.org/show_bug.cgi?id=101909
+
+ Reviewed by Geoffrey Garen.
+
+ This saves a few instructions in inline cases, on those architectures where it is
+ easy to figure out where to put the jump replacement. Sub-1% speed-up across the
+ board.
+
+ * assembler/MacroAssemblerARMv7.h:
+ (MacroAssemblerARMv7):
+ (JSC::MacroAssemblerARMv7::canJumpReplacePatchableBranchPtrWithPatch):
+ (JSC::MacroAssemblerARMv7::startOfPatchableBranchPtrWithPatch):
+ (JSC::MacroAssemblerARMv7::revertJumpReplacementToPatchableBranchPtrWithPatch):
+ * assembler/MacroAssemblerX86.h:
+ (JSC::MacroAssemblerX86::canJumpReplacePatchableBranchPtrWithPatch):
+ (MacroAssemblerX86):
+ (JSC::MacroAssemblerX86::startOfPatchableBranchPtrWithPatch):
+ (JSC::MacroAssemblerX86::revertJumpReplacementToPatchableBranchPtrWithPatch):
+ * assembler/MacroAssemblerX86_64.h:
+ (JSC::MacroAssemblerX86_64::canJumpReplacePatchableBranchPtrWithPatch):
+ (MacroAssemblerX86_64):
+ (JSC::MacroAssemblerX86_64::startOfPatchableBranchPtrWithPatch):
+ (JSC::MacroAssemblerX86_64::revertJumpReplacementToPatchableBranchPtrWithPatch):
+ * assembler/RepatchBuffer.h:
+ (JSC::RepatchBuffer::startOfPatchableBranchPtrWithPatch):
+ (RepatchBuffer):
+ (JSC::RepatchBuffer::replaceWithJump):
+ (JSC::RepatchBuffer::revertJumpReplacementToPatchableBranchPtrWithPatch):
+ * assembler/X86Assembler.h:
+ (X86Assembler):
+ (JSC::X86Assembler::revertJumpTo_movq_i64r):
+ (JSC::X86Assembler::revertJumpTo_cmpl_im_force32):
+ (X86InstructionFormatter):
+ * bytecode/StructureStubInfo.h:
+ * dfg/DFGRepatch.cpp:
+ (JSC::DFG::replaceWithJump):
+ (DFG):
+ (JSC::DFG::tryCacheGetByID):
+ (JSC::DFG::tryBuildGetByIDList):
+ (JSC::DFG::tryBuildGetByIDProtoList):
+ (JSC::DFG::tryCachePutByID):
+ (JSC::DFG::dfgResetGetByID):
+ (JSC::DFG::dfgResetPutByID):
+
+2012-11-11 Filip Pizlo <fpizlo@apple.com>
+
+ DFG ArithMul overflow check elimination is too aggressive
+ https://bugs.webkit.org/show_bug.cgi?id=101871
+
+ Reviewed by Oliver Hunt.
+
+ The code was ignoring the fact that ((a * b) | 0) == (((a | 0) * (b | 0)) | 0)
+ only holds if a * b < 2^53. So, I changed it to only enable the optimization
+ when a < 2^22 and b is an int32 (and vice versa), using a super trivial peephole
+ analysis to prove the inequality. I considered writing an epic forward flow
+ formulation that tracks the ranges of integer values but then I thought better
+ of it.
+
+ This also rewires the ArithMul integer speculation logic. Previously, we would
+ assume that an ArithMul was only UsedAsNumber if it escaped, and separately we
+ would decide whether to speculate integer based on a proof of the <2^22
+ inequality. Now, we treat the double rounding behavior of ArithMul as if the
+ result was UsedAsNumber even if it did not escape. Then we try to prove that
+ double rounding cannot happen by attemping to prove that a < 2^22. This then
+ feeds back into the decision of whether or not to speculate integer (if we fail
+ to prove a < 2^22 then we're UsedAsNumber, and if we're also MayOverflow then
+ that forces double speculation).
+
+ No performance impact. It just fixes a bug.
+
+ * dfg/DFGGraph.h:
+ (JSC::DFG::Graph::mulShouldSpeculateInteger):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (PredictionPropagationPhase):
+ (JSC::DFG::PredictionPropagationPhase::isWithinPowerOfTwoForConstant):
+ (JSC::DFG::PredictionPropagationPhase::isWithinPowerOfTwoNonRecursive):
+ (JSC::DFG::PredictionPropagationPhase::isWithinPowerOfTwo):
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+
+2012-11-11 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should not emit function checks if we've already proved that the operand is that exact function
+ https://bugs.webkit.org/show_bug.cgi?id=101885
+
+ Reviewed by Oliver Hunt.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGAbstractValue.h:
+ (JSC::DFG::AbstractValue::filterByValue):
+ (AbstractValue):
+ * dfg/DFGConstantFoldingPhase.cpp:
+ (JSC::DFG::ConstantFoldingPhase::foldConstants):
+
+2012-11-12 Kentaro Hara <haraken@chromium.org>
+
+ [V8][JSC] ScriptProfileNode::callUID needs not to be [Custom]
+ https://bugs.webkit.org/show_bug.cgi?id=101892
+
+ Reviewed by Adam Barth.
+
+ Added callUID(), which enables us to kill custom bindings for ScriptProfileNode::callUID.
+
+ * profiler/ProfileNode.h:
+ (JSC::ProfileNode::callUID):
+
+2012-11-12 Carlos Garcia Campos <cgarcia@igalia.com>
+
+ Unreviewed. Fix make distcheck.
+
+ * GNUmakefile.list.am: Add missing header.
+
+2012-11-11 Michael Pruett <michael@68k.org>
+
+ Fix assertion failure in JSObject::tryGetIndexQuickly()
+ https://bugs.webkit.org/show_bug.cgi?id=101869
+
+ Reviewed by Filip Pizlo.
+
+ Currently JSObject::tryGetIndexQuickly() triggers an assertion
+ failure when the object has an undecided indexing type. This
+ case should be treated the same as a blank indexing type.
+
+ * runtime/JSObject.h:
+ (JSC::JSObject::tryGetIndexQuickly):
+
+2012-11-11 Filip Pizlo <fpizlo@apple.com>
+
+ DFG register allocation should be greedy rather than round-robin
+ https://bugs.webkit.org/show_bug.cgi?id=101870
+
+ Reviewed by Geoffrey Garen.
+
+ This simplifies the code, reduces some code duplication, and shows some slight
+ performance improvements in a few places, likely due to the fact that lower-numered
+ registers also typically have smaller encodings.
+
+ * dfg/DFGRegisterBank.h:
+ (JSC::DFG::RegisterBank::RegisterBank):
+ (JSC::DFG::RegisterBank::tryAllocate):
+ (JSC::DFG::RegisterBank::allocate):
+ (JSC::DFG::RegisterBank::allocateInternal):
+ (RegisterBank):
+
+2012-11-11 Kenichi Ishibashi <bashi@chromium.org>
+
+ WTFString::utf8() should have a mode of conversion to use replacement character
+ https://bugs.webkit.org/show_bug.cgi?id=101678
+
+ Reviewed by Alexey Proskuryakov.
+
+ Follow the change on String::utf8()
+
+ * runtime/JSGlobalObjectFunctions.cpp:
+ (JSC::encode): Pass String::StrictConversion instead of true to String::utf8().
+
+2012-11-10 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should optimize out the NaN check on loads from double arrays if the array prototype chain is having a great time
+ https://bugs.webkit.org/show_bug.cgi?id=101718
+
+ Reviewed by Geoffrey Garen.
+
+ If we're reading from a JSArray in double mode, where the array's structure is
+ primordial (all aspects of the structure are unchanged except for indexing type),
+ and the result of the load is used in arithmetic that is known to not distinguish
+ between NaN and undefined, then we should not emit a NaN check. Looks like a 5%
+ win on navier-stokes.
+
+ Also fixed an OpInfo initialization goof for String ops that was revealed by this
+ change.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGArrayMode.cpp:
+ (JSC::DFG::arraySpeculationToString):
+ * dfg/DFGArrayMode.h:
+ (JSC::DFG::ArrayMode::isSaneChain):
+ (ArrayMode):
+ (JSC::DFG::ArrayMode::isInBounds):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::handleIntrinsic):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ * dfg/DFGNodeFlags.cpp:
+ (JSC::DFG::nodeFlagsAsString):
+ * dfg/DFGNodeFlags.h:
+ (DFG):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::arrayPrototypeChainIsSane):
+ (JSC):
+ * runtime/JSGlobalObject.h:
+ (JSGlobalObject):
+
+2012-11-10 Filip Pizlo <fpizlo@apple.com>
+
+ DFG constant folding and CFG simplification should be smart enough to know that if a logical op's operand is proven to have a non-masquerading structure then it always evaluates to true
+ https://bugs.webkit.org/show_bug.cgi?id=101511
+
+ Reviewed by Geoffrey Garen.
+
+ This is the second attempt at this patch, which fixes the !"" case.
+
+ To make life easier, this moves BranchDirection into BasicBlock so that after
+ running the CFA, we always know, for each block, what direction the CFA
+ proved. CFG simplification now both uses and preserves cfaBranchDirection in
+ its transformations.
+
+ Also made both LogicalNot and Branch check whether the operand is a known cell
+ with a known structure, and if so, made them do the appropriate folding.
+
+ 5% speed-up on V8/raytrace because it makes raytrace's own null checks
+ evaporate (i.e. idioms like 'if (!x) throw "unhappiness"') thanks to the fact
+ that we were already doing structure check hoisting.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::endBasicBlock):
+ (JSC::DFG::AbstractState::execute):
+ (JSC::DFG::AbstractState::mergeToSuccessors):
+ * dfg/DFGAbstractState.h:
+ (AbstractState):
+ * dfg/DFGBasicBlock.h:
+ (JSC::DFG::BasicBlock::BasicBlock):
+ (BasicBlock):
+ * dfg/DFGBranchDirection.h: Added.
+ (DFG):
+ (JSC::DFG::branchDirectionToString):
+ (JSC::DFG::isKnownDirection):
+ (JSC::DFG::branchCondition):
+ * dfg/DFGCFGSimplificationPhase.cpp:
+ (JSC::DFG::CFGSimplificationPhase::run):
+ (JSC::DFG::CFGSimplificationPhase::mergeBlocks):
+
+2012-11-10 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r133971.
+ http://trac.webkit.org/changeset/133971
+ https://bugs.webkit.org/show_bug.cgi?id=101839
+
+ Causes WebProcess to hang at 100% on www.apple.com (Requested
+ by kling on #webkit).
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::endBasicBlock):
+ (JSC::DFG::AbstractState::execute):
+ (JSC::DFG::AbstractState::mergeToSuccessors):
+ * dfg/DFGAbstractState.h:
+ (JSC::DFG::AbstractState::branchDirectionToString):
+ (AbstractState):
+ * dfg/DFGBasicBlock.h:
+ (JSC::DFG::BasicBlock::BasicBlock):
+ (BasicBlock):
+ * dfg/DFGBranchDirection.h: Removed.
+ * dfg/DFGCFGSimplificationPhase.cpp:
+ (JSC::DFG::CFGSimplificationPhase::run):
+ (JSC::DFG::CFGSimplificationPhase::mergeBlocks):
+
+2012-11-09 Filip Pizlo <fpizlo@apple.com>
+
+ If the DFG ArrayMode says that an access is on an OriginalArray, then the checks should always enforce this
+ https://bugs.webkit.org/show_bug.cgi?id=101720
+
+ Reviewed by Mark Hahnenberg.
+
+ Previously, "original" arrays was just a hint that we could find the structure
+ of the array if we needed to even if the array profile didn't have it due to
+ polymorphism. Now, "original" arrays are a property that is actually checked:
+ if an array access has ArrayMode::arrayClass() == Array::OriginalArray, then we
+ can be sure that the code performing the access is dealing with not just a
+ JSArray, but a JSArray that has no named properties, no indexed accessors, and
+ the ArrayPrototype as its prototype. This will be useful for optimizations that
+ are being done as part of https://bugs.webkit.org/show_bug.cgi?id=101720.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGArrayMode.cpp:
+ (JSC::DFG::ArrayMode::originalArrayStructure):
+ (DFG):
+ (JSC::DFG::ArrayMode::alreadyChecked):
+ * dfg/DFGArrayMode.h:
+ (JSC):
+ (DFG):
+ (JSC::DFG::ArrayMode::withProfile):
+ (ArrayMode):
+ (JSC::DFG::ArrayMode::benefitsFromOriginalArray):
+ * dfg/DFGConstantFoldingPhase.cpp:
+ (JSC::DFG::ConstantFoldingPhase::foldConstants):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::checkArray):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::jumpSlowForUnwantedArrayMode):
+ (JSC::DFG::SpeculativeJIT::checkArray):
+ (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
+ (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
+ (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
+ (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
+ (JSC::DFG::SpeculativeJIT::compileGetByValOnArguments):
+ (JSC::DFG::SpeculativeJIT::compileGetArgumentsLength):
+
+2012-11-09 Filip Pizlo <fpizlo@apple.com>
+
+ Fix indentation of BooleanPrototype.h
+
+ Rubber stamped by Mark Hahnenberg.
+
+ * runtime/BooleanPrototype.h:
+
+2012-11-09 Filip Pizlo <fpizlo@apple.com>
+
+ Fix indentation of BooleanObject.h
+
+ Rubber stamped by Mark Hahnenberg.
+
+ * runtime/BooleanObject.h:
+
+2012-11-09 Filip Pizlo <fpizlo@apple.com>
+
+ Fix indentation of BooleanConstructor.h
+
+ Rubber stamped by Mark Hahnenberg.
+
+ * runtime/BooleanConstructor.h:
+
+2012-11-09 Filip Pizlo <fpizlo@apple.com>
+
+ Fix indentation of BatchedTransitionOptimizer.h
+
+ Rubber stamped by Mark Hahnenberg.
+
+ * runtime/BatchedTransitionOptimizer.h:
+
+2012-11-09 Oliver Hunt <oliver@apple.com>
+
+ So Thingy probably isn't the best name for a class, so
+ renamed to CacheMap.
+
+ RS=Geoff
+
+ * runtime/CodeCache.h:
+ (JSC::CacheMap::CacheMap):
+
+2012-11-09 Filip Pizlo <fpizlo@apple.com>
+
+ ArrayPrototype should start out with a blank indexing type
+ https://bugs.webkit.org/show_bug.cgi?id=101719
+
+ Reviewed by Mark Hahnenberg.
+
+ This allows us to track if the array prototype ever ends up with indexed
+ properties.
+
+ * runtime/ArrayPrototype.cpp:
+ (JSC::ArrayPrototype::create):
+ (JSC::ArrayPrototype::ArrayPrototype):
+ * runtime/ArrayPrototype.h:
+ (ArrayPrototype):
+ (JSC::ArrayPrototype::createStructure):
+
+2012-11-08 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ MarkStackArray should use the BlockAllocator instead of the MarkStackSegmentAllocator
+ https://bugs.webkit.org/show_bug.cgi?id=101642
+
+ Reviewed by Filip Pizlo.
+
+ MarkStackSegmentAllocator is like a miniature version of the BlockAllocator. Now that the BlockAllocator has support
+ for a variety of block sizes, we should get rid of the MarkStackSegmentAllocator in favor of the BlockAllocator.
+
+ * heap/BlockAllocator.h: Add new specializations of regionSetFor for the new MarkStackSegments.
+ (JSC):
+ (JSC::MarkStackSegment):
+ * heap/GCThreadSharedData.cpp:
+ (JSC::GCThreadSharedData::GCThreadSharedData):
+ (JSC::GCThreadSharedData::reset):
+ * heap/GCThreadSharedData.h:
+ (GCThreadSharedData):
+ * heap/MarkStack.cpp:
+ (JSC::MarkStackArray::MarkStackArray): We now have a doubly linked list of MarkStackSegments, so we need to refactor
+ all the places that used the old custom tail/previous logic.
+ (JSC::MarkStackArray::~MarkStackArray):
+ (JSC::MarkStackArray::expand):
+ (JSC::MarkStackArray::refill):
+ (JSC::MarkStackArray::donateSomeCellsTo): Refactor to use the new linked list.
+ (JSC::MarkStackArray::stealSomeCellsFrom): Ditto.
+ * heap/MarkStack.h:
+ (JSC):
+ (MarkStackSegment):
+ (JSC::MarkStackSegment::MarkStackSegment):
+ (JSC::MarkStackSegment::sizeFromCapacity):
+ (MarkStackArray):
+ * heap/MarkStackInlines.h:
+ (JSC::MarkStackSegment::create):
+ (JSC):
+ (JSC::MarkStackArray::postIncTop):
+ (JSC::MarkStackArray::preDecTop):
+ (JSC::MarkStackArray::setTopForFullSegment):
+ (JSC::MarkStackArray::setTopForEmptySegment):
+ (JSC::MarkStackArray::top):
+ (JSC::MarkStackArray::validatePrevious):
+ (JSC::MarkStackArray::append):
+ (JSC::MarkStackArray::removeLast):
+ (JSC::MarkStackArray::isEmpty):
+ (JSC::MarkStackArray::size):
+ * heap/SlotVisitor.cpp:
+ (JSC::SlotVisitor::SlotVisitor):
+
+2012-11-09 Gabor Ballabas <gaborb@inf.u-szeged.hu>
+
+ [Qt] r133953 broke the ARM_TRADITIONAL build
+ https://bugs.webkit.org/show_bug.cgi?id=101706
+
+ Reviewed by Csaba Osztrogonác.
+
+ Fix for both hardfp and softfp.
+
+ * dfg/DFGCCallHelpers.h:
+ (CCallHelpers):
+ (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
+
+2012-11-09 Sheriff Bot <webkit.review.bot@gmail.com>
+
+ Unreviewed, rolling out r134051.
+ http://trac.webkit.org/changeset/134051
+ https://bugs.webkit.org/show_bug.cgi?id=101757
+
+ It didn't fix the build (Requested by Ossy on #webkit).
+
+ * dfg/DFGCCallHelpers.h:
+ (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
+
+2012-11-09 Gabor Ballabas <gaborb@inf.u-szeged.hu>
+
+ [Qt] r133953 broke the ARM_TRADITIONAL build
+ https://bugs.webkit.org/show_bug.cgi?id=101706
+
+ Reviewed by Csaba Osztrogonác.
+
+ Fix the ARM_TRADITIONAL build after r133953
+
+ * dfg/DFGCCallHelpers.h:
+ (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
+ (CCallHelpers):
+
+2012-11-09 Csaba Osztrogonác <ossy@webkit.org>
+
+ [Qt] Fix the LLINT build from ARMv7 platform
+ https://bugs.webkit.org/show_bug.cgi?id=101712
+
+ Reviewed by Simon Hausmann.
+
+ Enable generating of LLIntAssembly.h on ARM platforms.
+
+ * DerivedSources.pri:
+ * JavaScriptCore.pro:
+
+2012-11-08 Filip Pizlo <fpizlo@apple.com>
+
+ ArrayPrototype.h should have correct indentation
+
+ Rubber stamped by Sam Weinig.
+
+ * runtime/ArrayPrototype.h:
+
+2012-11-08 Mark Lam <mark.lam@apple.com>
+
+ Renamed ...InlineMethods.h files to ...Inlines.h.
+ https://bugs.webkit.org/show_bug.cgi?id=101145.
+
+ Reviewed by Geoffrey Garen.
+
+ This is only a refactoring effort to rename the files. There are no
+ functionality changes.
+
+ * API/JSObjectRef.cpp:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/CodeBlock.cpp:
+ * dfg/DFGOperations.cpp:
+ * heap/ConservativeRoots.cpp:
+ * heap/CopiedBlock.h:
+ * heap/CopiedSpace.cpp:
+ * heap/CopiedSpaceInlineMethods.h: Removed.
+ * heap/CopiedSpaceInlines.h: Copied from Source/JavaScriptCore/heap/CopiedSpaceInlineMethods.h.
+ * heap/CopyVisitor.cpp:
+ * heap/CopyVisitorInlineMethods.h: Removed.
+ * heap/CopyVisitorInlines.h: Copied from Source/JavaScriptCore/heap/CopyVisitorInlineMethods.h.
+ * heap/GCThread.cpp:
+ * heap/GCThreadSharedData.cpp:
+ * heap/HandleStack.cpp:
+ * heap/Heap.cpp:
+ * heap/HeapRootVisitor.h:
+ * heap/MarkStack.cpp:
+ * heap/MarkStackInlineMethods.h: Removed.
+ * heap/MarkStackInlines.h: Copied from Source/JavaScriptCore/heap/MarkStackInlineMethods.h.
+ * heap/SlotVisitor.cpp:
+ * heap/SlotVisitor.h:
+ * heap/SlotVisitorInlineMethods.h: Removed.
+ * heap/SlotVisitorInlines.h: Copied from Source/JavaScriptCore/heap/SlotVisitorInlineMethods.h.
+ * jit/HostCallReturnValue.cpp:
+ * jit/JIT.cpp:
+ * jit/JITArithmetic.cpp:
+ * jit/JITArithmetic32_64.cpp:
+ * jit/JITCall.cpp:
+ * jit/JITCall32_64.cpp:
+ * jit/JITInlineMethods.h: Removed.
+ * jit/JITInlines.h: Copied from Source/JavaScriptCore/jit/JITInlineMethods.h.
+ * jit/JITOpcodes.cpp:
+ * jit/JITOpcodes32_64.cpp:
+ * jit/JITPropertyAccess.cpp:
+ * jit/JITPropertyAccess32_64.cpp:
+ * jsc.cpp:
+ * runtime/ArrayConstructor.cpp:
+ * runtime/ArrayPrototype.cpp:
+ * runtime/ButterflyInlineMethods.h: Removed.
+ * runtime/ButterflyInlines.h: Copied from Source/JavaScriptCore/runtime/ButterflyInlineMethods.h.
+ * runtime/IndexingHeaderInlineMethods.h: Removed.
+ * runtime/IndexingHeaderInlines.h: Copied from Source/JavaScriptCore/runtime/IndexingHeaderInlineMethods.h.
+ * runtime/JSActivation.h:
+ * runtime/JSArray.cpp:
+ * runtime/JSArray.h:
+ * runtime/JSCell.h:
+ * runtime/JSObject.cpp:
+ * runtime/JSValueInlineMethods.h: Removed.
+ * runtime/JSValueInlines.h: Copied from Source/JavaScriptCore/runtime/JSValueInlineMethods.h.
+ * runtime/LiteralParser.cpp:
+ * runtime/ObjectConstructor.cpp:
+ * runtime/Operations.h:
+ * runtime/RegExpMatchesArray.cpp:
+ * runtime/RegExpObject.cpp:
+ * runtime/StringPrototype.cpp:
+
+2012-11-08 Filip Pizlo <fpizlo@apple.com>
+
+ ArrayConstructor.h should have correct indentation
+
+ Rubber stamped by Sam Weinig.
+
+ * runtime/ArrayConstructor.h:
+
+2012-11-08 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should know that int == null is always false
+ https://bugs.webkit.org/show_bug.cgi?id=101665
+
+ Reviewed by Oliver Hunt.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+
+2012-11-08 Filip Pizlo <fpizlo@apple.com>
+
+ Arguments.h should have correct indentation
+
+ Rubber stamped by Sam Weinig.
+
+ * runtime/Arguments.h:
+
+2012-11-08 Filip Pizlo <fpizlo@apple.com>
+
+ It should be possible to JIT compile get_by_vals and put_by_vals even if the DFG is disabled.
+
+ Reviewed by Oliver Hunt.
+
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::chooseArrayMode):
+
+2012-11-08 Filip Pizlo <fpizlo@apple.com>
+
+ op_call should have LLInt call link info even if the DFG is disabled
+ https://bugs.webkit.org/show_bug.cgi?id=101672
+
+ Reviewed by Oliver Hunt.
+
+ Get rid of the evil uses of fall-through.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::CodeBlock):
+
+2012-11-08 Oliver Hunt <oliver@apple.com>
+
+ Improve effectiveness of function-level caching
+ https://bugs.webkit.org/show_bug.cgi?id=101667
+
+ Reviewed by Filip Pizlo.
+
+ Added a random-eviction based cache for unlinked functions, and switch
+ UnlinkedFunctionExecutable's code references to Weak<>, thereby letting
+ us remove the explicit UnlinkedFunctionExecutable::clearCode() calls that
+ were being triggered by GC.
+
+ Refactored the random eviction part of the CodeCache into a separate data
+ structure so that I didn't have to duplicate the code again, and then used
+ that for the new function cache.
+
+ * bytecode/UnlinkedCodeBlock.cpp:
+ (JSC::UnlinkedFunctionExecutable::visitChildren):
+ (JSC::UnlinkedFunctionExecutable::codeBlockFor):
+ * bytecode/UnlinkedCodeBlock.h:
+ (JSC::UnlinkedFunctionExecutable::clearCodeForRecompilation):
+ (UnlinkedFunctionExecutable):
+ * debugger/Debugger.cpp:
+ * runtime/CodeCache.cpp:
+ (JSC::CodeCache::getCodeBlock):
+ (JSC::CodeCache::generateFunctionCodeBlock):
+ (JSC::CodeCache::getFunctionExecutableFromGlobalCode):
+ (JSC::CodeCache::usedFunctionCode):
+ (JSC):
+ * runtime/Executable.cpp:
+ (JSC::FunctionExecutable::clearUnlinkedCodeForRecompilationIfNotCompiling):
+ (JSC::FunctionExecutable::clearCode):
+ * runtime/Executable.h:
+ (FunctionExecutable):
+
+2012-11-07 Filip Pizlo <fpizlo@apple.com>
+
+ DFG constant folding and CFG simplification should be smart enough to know that if a logical op's operand is proven to have a non-masquerading structure then it always evaluates to true
+ https://bugs.webkit.org/show_bug.cgi?id=101511
+
+ Reviewed by Oliver Hunt.
+
+ To make life easier, this moves BranchDirection into BasicBlock so that after
+ running the CFA, we always know, for each block, what direction the CFA
+ proved. CFG simplification now both uses and preserves cfaBranchDirection in
+ its transformations.
+
+ Also made both LogicalNot and Branch check whether the operand is a known cell
+ with a known structure, and if so, made them do the appropriate folding.
+
+ 5% speed-up on V8/raytrace because it makes raytrace's own null checks
+ evaporate (i.e. idioms like 'if (!x) throw "unhappiness"') thanks to the fact
+ that we were already doing structure check hoisting.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::endBasicBlock):
+ (JSC::DFG::AbstractState::execute):
+ (JSC::DFG::AbstractState::mergeToSuccessors):
+ * dfg/DFGAbstractState.h:
+ (AbstractState):
+ * dfg/DFGBasicBlock.h:
+ (JSC::DFG::BasicBlock::BasicBlock):
+ (BasicBlock):
+ * dfg/DFGBranchDirection.h: Added.
+ (DFG):
+ (JSC::DFG::branchDirectionToString):
+ (JSC::DFG::isKnownDirection):
+ (JSC::DFG::branchCondition):
+ * dfg/DFGCFGSimplificationPhase.cpp:
+ (JSC::DFG::CFGSimplificationPhase::run):
+ (JSC::DFG::CFGSimplificationPhase::mergeBlocks):
+
+2012-11-08 Christophe Dumez <christophe.dumez@intel.com>
+
+ [JSC] HTML extensions to String.prototype should escape " as &quot; in argument values
+ https://bugs.webkit.org/show_bug.cgi?id=90667
+
+ Reviewed by Benjamin Poulain.
+
+ Escape quotation mark as &quot; in argument values to:
+ - String.prototype.anchor(name)
+ - String.prototype.fontcolor(color)
+ - String.prototype.fontsize(size)
+ - String.prototype.link(href)
+
+ This behavior matches Chromium/V8 and Firefox/Spidermonkey
+ implementations and is requited by:
+ http://mathias.html5.org/specs/javascript/#escapeattributevalue
+
+ This also fixes a potential security risk (XSS vector).
+
+ * runtime/StringPrototype.cpp:
+ (JSC::stringProtoFuncFontcolor):
+ (JSC::stringProtoFuncFontsize):
+ (JSC::stringProtoFuncAnchor):
+ (JSC::stringProtoFuncLink):
+
+2012-11-08 Anders Carlsson <andersca@apple.com>
+
+ HeapStatistics::s_pauseTimeStarts and s_pauseTimeEnds should be Vectors
+ https://bugs.webkit.org/show_bug.cgi?id=101651
+
+ Reviewed by Andreas Kling.
+
+ HeapStatistics uses Deques when Vectors would work just as good.
+
+ * heap/HeapStatistics.cpp:
+ * heap/HeapStatistics.h:
+ (HeapStatistics):
+
+2012-11-07 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should not assume that something is a double just because it might be undefined
+ https://bugs.webkit.org/show_bug.cgi?id=101438
+
+ Reviewed by Oliver Hunt.
+
+ This changes all non-bitop arithmetic to (a) statically expect that variables are
+ defined prior to use in arithmetic and (b) not fall off into double paths just
+ because a value may not be a number. This is accomplished with two new notions of
+ speculation:
+
+ shouldSpeculateIntegerExpectingDefined: Should we speculate that the value is an
+ integer if we ignore undefined (i.e. SpecOther) predictions?
+
+ shouldSpeculateIntegerForArithmetic: Should we speculate that the value is an
+ integer if we ignore non-numeric predictions?
+
+ This is a ~2x speed-up on programs that seem to our prediction propagator to have
+ paths in which otherwise numeric variables are undefined.
+
+ * bytecode/SpeculatedType.h:
+ (JSC::isInt32SpeculationForArithmetic):
+ (JSC):
+ (JSC::isInt32SpeculationExpectingDefined):
+ (JSC::isDoubleSpeculationForArithmetic):
+ (JSC::isNumberSpeculationExpectingDefined):
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ * dfg/DFGGraph.h:
+ (JSC::DFG::Graph::addShouldSpeculateInteger):
+ (JSC::DFG::Graph::mulShouldSpeculateInteger):
+ (JSC::DFG::Graph::negateShouldSpeculateInteger):
+ (JSC::DFG::Graph::addImmediateShouldSpeculateInteger):
+ (JSC::DFG::Graph::mulImmediateShouldSpeculateInteger):
+ * dfg/DFGNode.h:
+ (JSC::DFG::Node::shouldSpeculateIntegerForArithmetic):
+ (Node):
+ (JSC::DFG::Node::shouldSpeculateIntegerExpectingDefined):
+ (JSC::DFG::Node::shouldSpeculateDoubleForArithmetic):
+ (JSC::DFG::Node::shouldSpeculateNumberExpectingDefined):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileAdd):
+ (JSC::DFG::SpeculativeJIT::compileArithMod):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_div):
+
+2012-11-06 Filip Pizlo <fpizlo@apple.com>
+
+ JSC should infer when indexed storage contains only integers or doubles
+ https://bugs.webkit.org/show_bug.cgi?id=98606
+
+ Reviewed by Oliver Hunt.
+
+ This adds two new indexing types: int32 and double. It also adds array allocation profiling,
+ which allows array allocations to converge to allocating arrays using those types to which
+ those arrays would have been converted.
+
+ 20% speed-up on navier-stokes. 40% speed-up on various Kraken DSP tests. Some slow-downs too,
+ but a performance win overall on all benchmarks we track.
+
+ * API/JSObjectRef.cpp:
+ (JSObjectMakeArray):
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * assembler/AbstractMacroAssembler.h:
+ (JumpList):
+ (JSC::AbstractMacroAssembler::JumpList::JumpList):
+ * assembler/MacroAssemblerX86Common.h:
+ (JSC::MacroAssemblerX86Common::branchDouble):
+ * assembler/X86Assembler.h:
+ (JSC::X86Assembler::jnp):
+ (X86Assembler):
+ (JSC::X86Assembler::X86InstructionFormatter::emitRex):
+ * bytecode/ArrayAllocationProfile.cpp: Added.
+ (JSC):
+ (JSC::ArrayAllocationProfile::updateIndexingType):
+ * bytecode/ArrayAllocationProfile.h: Added.
+ (JSC):
+ (ArrayAllocationProfile):
+ (JSC::ArrayAllocationProfile::ArrayAllocationProfile):
+ (JSC::ArrayAllocationProfile::selectIndexingType):
+ (JSC::ArrayAllocationProfile::updateLastAllocation):
+ (JSC::ArrayAllocationProfile::selectIndexingTypeFor):
+ (JSC::ArrayAllocationProfile::updateLastAllocationFor):
+ * bytecode/ArrayProfile.cpp:
+ (JSC::ArrayProfile::updatedObservedArrayModes):
+ (JSC):
+ * bytecode/ArrayProfile.h:
+ (JSC):
+ (JSC::arrayModesInclude):
+ (JSC::shouldUseSlowPutArrayStorage):
+ (JSC::shouldUseFastArrayStorage):
+ (JSC::shouldUseContiguous):
+ (JSC::shouldUseDouble):
+ (JSC::shouldUseInt32):
+ (ArrayProfile):
+ * bytecode/ByValInfo.h:
+ (JSC::isOptimizableIndexingType):
+ (JSC::jitArrayModeForIndexingType):
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ (JSC::CodeBlock::CodeBlock):
+ (JSC::CodeBlock::updateAllPredictionsAndCountLiveness):
+ (JSC):
+ (JSC::CodeBlock::updateAllValueProfilePredictions):
+ (JSC::CodeBlock::updateAllArrayPredictions):
+ (JSC::CodeBlock::updateAllPredictions):
+ (JSC::CodeBlock::shouldOptimizeNow):
+ * bytecode/CodeBlock.h:
+ (CodeBlock):
+ (JSC::CodeBlock::numberOfArrayAllocationProfiles):
+ (JSC::CodeBlock::addArrayAllocationProfile):
+ (JSC::CodeBlock::updateAllValueProfilePredictions):
+ (JSC::CodeBlock::updateAllArrayPredictions):
+ * bytecode/DFGExitProfile.h:
+ (JSC::DFG::exitKindToString):
+ * bytecode/Instruction.h:
+ (JSC):
+ (JSC::Instruction::Instruction):
+ * bytecode/Opcode.h:
+ (JSC):
+ (JSC::padOpcodeName):
+ * bytecode/SpeculatedType.h:
+ (JSC):
+ (JSC::isRealNumberSpeculation):
+ * bytecode/UnlinkedCodeBlock.cpp:
+ (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
+ * bytecode/UnlinkedCodeBlock.h:
+ (JSC):
+ (JSC::UnlinkedCodeBlock::addArrayAllocationProfile):
+ (JSC::UnlinkedCodeBlock::numberOfArrayAllocationProfiles):
+ (UnlinkedCodeBlock):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::newArrayAllocationProfile):
+ (JSC):
+ (JSC::BytecodeGenerator::emitNewArray):
+ (JSC::BytecodeGenerator::emitExpectedFunctionSnippet):
+ * bytecompiler/BytecodeGenerator.h:
+ (BytecodeGenerator):
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGArrayMode.cpp:
+ (JSC::DFG::ArrayMode::fromObserved):
+ (JSC::DFG::ArrayMode::refine):
+ (DFG):
+ (JSC::DFG::ArrayMode::alreadyChecked):
+ (JSC::DFG::arrayTypeToString):
+ * dfg/DFGArrayMode.h:
+ (JSC::DFG::ArrayMode::withType):
+ (ArrayMode):
+ (JSC::DFG::ArrayMode::withTypeAndConversion):
+ (JSC::DFG::ArrayMode::usesButterfly):
+ (JSC::DFG::ArrayMode::isSpecific):
+ (JSC::DFG::ArrayMode::supportsLength):
+ (JSC::DFG::ArrayMode::arrayModesThatPassFiltering):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::getArrayMode):
+ (ByteCodeParser):
+ (JSC::DFG::ByteCodeParser::handleIntrinsic):
+ (JSC::DFG::ByteCodeParser::handleConstantInternalFunction):
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ * dfg/DFGCCallHelpers.h:
+ (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
+ (CCallHelpers):
+ * dfg/DFGCallArrayAllocatorSlowPathGenerator.h:
+ (JSC::DFG::CallArrayAllocatorSlowPathGenerator::generateInternal):
+ (JSC::DFG::CallArrayAllocatorWithVariableSizeSlowPathGenerator::generateInternal):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ (JSC::DFG::FixupPhase::checkArray):
+ * dfg/DFGGraph.cpp:
+ (JSC::DFG::Graph::dump):
+ * dfg/DFGGraph.h:
+ (JSC::DFG::Graph::byValIsPure):
+ * dfg/DFGNode.h:
+ (NewArrayBufferData):
+ (JSC::DFG::Node::hasIndexingType):
+ (Node):
+ (JSC::DFG::Node::indexingType):
+ (JSC::DFG::Node::setIndexingType):
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGOperations.h:
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::emitAllocateJSArray):
+ (JSC::DFG::SpeculativeJIT::jumpSlowForUnwantedArrayMode):
+ (DFG):
+ (JSC::DFG::SpeculativeJIT::checkArray):
+ (JSC::DFG::SpeculativeJIT::arrayify):
+ (JSC::DFG::SpeculativeJIT::compileDoublePutByVal):
+ (JSC::DFG::SpeculativeJIT::compileGetArrayLength):
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::callOperation):
+ (SpeculativeJIT):
+ (SpeculateIntegerOperand):
+ (JSC::DFG::SpeculateIntegerOperand::use):
+ (SpeculateDoubleOperand):
+ (JSC::DFG::SpeculateDoubleOperand::use):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (DFG):
+ (JSC::DFG::SpeculativeJIT::compileContiguousPutByVal):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * jit/JIT.h:
+ (JSC::JIT::emitInt32GetByVal):
+ (JIT):
+ (JSC::JIT::emitInt32PutByVal):
+ (JSC::JIT::emitDoublePutByVal):
+ (JSC::JIT::emitContiguousPutByVal):
+ * jit/JITExceptions.cpp:
+ (JSC::genericThrow):
+ * jit/JITInlineMethods.h:
+ (JSC::arrayProfileSaw):
+ (JSC::JIT::chooseArrayMode):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_new_array):
+ (JSC::JIT::emit_op_new_array_with_size):
+ (JSC::JIT::emit_op_new_array_buffer):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_get_by_val):
+ (JSC::JIT::emitDoubleGetByVal):
+ (JSC):
+ (JSC::JIT::emitContiguousGetByVal):
+ (JSC::JIT::emit_op_put_by_val):
+ (JSC::JIT::emitGenericContiguousPutByVal):
+ (JSC::JIT::emitSlow_op_put_by_val):
+ (JSC::JIT::privateCompileGetByVal):
+ (JSC::JIT::privateCompilePutByVal):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::emit_op_get_by_val):
+ (JSC::JIT::emitContiguousGetByVal):
+ (JSC::JIT::emitDoubleGetByVal):
+ (JSC):
+ (JSC::JIT::emit_op_put_by_val):
+ (JSC::JIT::emitGenericContiguousPutByVal):
+ (JSC::JIT::emitSlow_op_put_by_val):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jit/JITStubs.h:
+ (JSC):
+ * jsc.cpp:
+ (GlobalObject::finishCreation):
+ * llint/LLIntSlowPaths.cpp:
+ (JSC::LLInt::jitCompileAndSetHeuristics):
+ (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+ * llint/LowLevelInterpreter.asm:
+ * llint/LowLevelInterpreter32_64.asm:
+ * llint/LowLevelInterpreter64.asm:
+ * offlineasm/x86.rb:
+ * runtime/ArrayConstructor.cpp:
+ (JSC::constructArrayWithSizeQuirk):
+ * runtime/ArrayConstructor.h:
+ (JSC):
+ * runtime/ArrayPrototype.cpp:
+ (JSC::arrayProtoFuncConcat):
+ (JSC::arrayProtoFuncSlice):
+ (JSC::arrayProtoFuncSplice):
+ (JSC::arrayProtoFuncFilter):
+ (JSC::arrayProtoFuncMap):
+ * runtime/Butterfly.h:
+ (JSC::Butterfly::contiguousInt32):
+ (JSC::Butterfly::contiguousDouble):
+ (JSC::Butterfly::fromContiguous):
+ * runtime/ButterflyInlineMethods.h:
+ (JSC::Butterfly::createUninitializedDuringCollection):
+ * runtime/FunctionPrototype.cpp:
+ (JSC::functionProtoFuncBind):
+ * runtime/IndexingHeaderInlineMethods.h:
+ (JSC::IndexingHeader::indexingPayloadSizeInBytes):
+ * runtime/IndexingType.cpp:
+ (JSC::leastUpperBoundOfIndexingTypes):
+ (JSC):
+ (JSC::leastUpperBoundOfIndexingTypeAndType):
+ (JSC::leastUpperBoundOfIndexingTypeAndValue):
+ (JSC::indexingTypeToString):
+ * runtime/IndexingType.h:
+ (JSC):
+ (JSC::hasUndecided):
+ (JSC::hasInt32):
+ (JSC::hasDouble):
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::setLength):
+ (JSC::JSArray::pop):
+ (JSC::JSArray::push):
+ (JSC::JSArray::shiftCountWithAnyIndexingType):
+ (JSC::JSArray::unshiftCountWithAnyIndexingType):
+ (JSC::compareNumbersForQSortWithInt32):
+ (JSC):
+ (JSC::compareNumbersForQSortWithDouble):
+ (JSC::JSArray::sortNumericVector):
+ (JSC::JSArray::sortNumeric):
+ (JSC::JSArray::sortCompactedVector):
+ (JSC::JSArray::sort):
+ (JSC::JSArray::sortVector):
+ (JSC::JSArray::fillArgList):
+ (JSC::JSArray::copyToArguments):
+ (JSC::JSArray::compactForSorting):
+ * runtime/JSArray.h:
+ (JSArray):
+ (JSC::createContiguousArrayButterfly):
+ (JSC::JSArray::create):
+ (JSC::JSArray::tryCreateUninitialized):
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::reset):
+ (JSC):
+ (JSC::JSGlobalObject::haveABadTime):
+ (JSC::JSGlobalObject::visitChildren):
+ * runtime/JSGlobalObject.h:
+ (JSGlobalObject):
+ (JSC::JSGlobalObject::originalArrayStructureForIndexingType):
+ (JSC::JSGlobalObject::arrayStructureForIndexingTypeDuringAllocation):
+ (JSC::JSGlobalObject::arrayStructureForProfileDuringAllocation):
+ (JSC::JSGlobalObject::isOriginalArrayStructure):
+ (JSC::constructEmptyArray):
+ (JSC::constructArray):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::copyButterfly):
+ (JSC::JSObject::getOwnPropertySlotByIndex):
+ (JSC::JSObject::putByIndex):
+ (JSC::JSObject::enterDictionaryIndexingMode):
+ (JSC::JSObject::createInitialIndexedStorage):
+ (JSC):
+ (JSC::JSObject::createInitialUndecided):
+ (JSC::JSObject::createInitialInt32):
+ (JSC::JSObject::createInitialDouble):
+ (JSC::JSObject::createInitialContiguous):
+ (JSC::JSObject::convertUndecidedToInt32):
+ (JSC::JSObject::convertUndecidedToDouble):
+ (JSC::JSObject::convertUndecidedToContiguous):
+ (JSC::JSObject::constructConvertedArrayStorageWithoutCopyingElements):
+ (JSC::JSObject::convertUndecidedToArrayStorage):
+ (JSC::JSObject::convertInt32ToDouble):
+ (JSC::JSObject::convertInt32ToContiguous):
+ (JSC::JSObject::convertInt32ToArrayStorage):
+ (JSC::JSObject::convertDoubleToContiguous):
+ (JSC::JSObject::convertDoubleToArrayStorage):
+ (JSC::JSObject::convertContiguousToArrayStorage):
+ (JSC::JSObject::convertUndecidedForValue):
+ (JSC::JSObject::convertInt32ForValue):
+ (JSC::JSObject::setIndexQuicklyToUndecided):
+ (JSC::JSObject::convertInt32ToDoubleOrContiguousWhilePerformingSetIndex):
+ (JSC::JSObject::convertDoubleToContiguousWhilePerformingSetIndex):
+ (JSC::JSObject::ensureInt32Slow):
+ (JSC::JSObject::ensureDoubleSlow):
+ (JSC::JSObject::ensureContiguousSlow):
+ (JSC::JSObject::ensureArrayStorageSlow):
+ (JSC::JSObject::ensureArrayStorageExistsAndEnterDictionaryIndexingMode):
+ (JSC::JSObject::switchToSlowPutArrayStorage):
+ (JSC::JSObject::deletePropertyByIndex):
+ (JSC::JSObject::getOwnPropertyNames):
+ (JSC::JSObject::putByIndexBeyondVectorLengthWithoutAttributes):
+ (JSC::JSObject::putByIndexBeyondVectorLength):
+ (JSC::JSObject::putDirectIndexBeyondVectorLength):
+ (JSC::JSObject::getNewVectorLength):
+ (JSC::JSObject::countElements):
+ (JSC::JSObject::ensureLengthSlow):
+ (JSC::JSObject::getOwnPropertyDescriptor):
+ * runtime/JSObject.h:
+ (JSC::JSObject::getArrayLength):
+ (JSC::JSObject::getVectorLength):
+ (JSC::JSObject::canGetIndexQuickly):
+ (JSC::JSObject::getIndexQuickly):
+ (JSC::JSObject::tryGetIndexQuickly):
+ (JSC::JSObject::canSetIndexQuickly):
+ (JSC::JSObject::canSetIndexQuicklyForPutDirect):
+ (JSC::JSObject::setIndexQuickly):
+ (JSC::JSObject::initializeIndex):
+ (JSC::JSObject::hasSparseMap):
+ (JSC::JSObject::inSparseIndexingMode):
+ (JSObject):
+ (JSC::JSObject::ensureInt32):
+ (JSC::JSObject::ensureDouble):
+ (JSC::JSObject::ensureLength):
+ (JSC::JSObject::indexingData):
+ (JSC::JSObject::currentIndexingData):
+ (JSC::JSObject::getHolyIndexQuickly):
+ (JSC::JSObject::relevantLength):
+ (JSC::JSObject::currentRelevantLength):
+ * runtime/JSValue.cpp:
+ (JSC::JSValue::description):
+ * runtime/LiteralParser.cpp:
+ (JSC::::parse):
+ * runtime/ObjectConstructor.cpp:
+ (JSC::objectConstructorGetOwnPropertyNames):
+ (JSC::objectConstructorKeys):
+ * runtime/StringPrototype.cpp:
+ (JSC::stringProtoFuncMatch):
+ (JSC::stringProtoFuncSplit):
+ * runtime/Structure.cpp:
+ (JSC::Structure::nonPropertyTransition):
+ * runtime/StructureTransitionTable.h:
+ (JSC::newIndexingType):
+
+2012-11-08 Balazs Kilvady <kilvadyb@homejinni.com>
+
+ ASSERT problem on MIPS
+ https://bugs.webkit.org/show_bug.cgi?id=100589
+
+ Reviewed by Oliver Hunt.
+
+ ASSERT fix for MIPS arch.
+
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_resolve_operations):
+
+2012-11-08 Michael Saboff <msaboff@apple.com>
+
+ OpaqueJSClassContextData() should use StringImpl::isolatedCopy() to make string copies
+ https://bugs.webkit.org/show_bug.cgi?id=101507
+
+ Reviewed by Andreas Kling.
+
+ Changed to use isolatedCopy() for key Strings.
+
+ * API/JSClassRef.cpp:
+ (OpaqueJSClassContextData::OpaqueJSClassContextData):
+
+2012-11-07 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ WeakBlocks should be HeapBlocks
+ https://bugs.webkit.org/show_bug.cgi?id=101411
+
+ Reviewed by Oliver Hunt.
+
+ Currently WeakBlocks use fastMalloc memory. They are very similar to the other HeapBlocks, however,
+ so we should change them to being allocated with the BlockAllocator.
+
+ * heap/BlockAllocator.cpp:
+ (JSC::BlockAllocator::BlockAllocator):
+ * heap/BlockAllocator.h: Added a new RegionSet for WeakBlocks.
+ (JSC):
+ (BlockAllocator):
+ (JSC::WeakBlock):
+ * heap/Heap.h: Friended WeakSet to allow access to the BlockAllocator.
+ (Heap):
+ * heap/WeakBlock.cpp:
+ (JSC::WeakBlock::create): Refactored to use HeapBlocks rather than fastMalloc.
+ (JSC::WeakBlock::WeakBlock):
+ * heap/WeakBlock.h: Changed the WeakBlock size to 4 KB so that it divides evenly into the Region size.
+ (JSC):
+ (WeakBlock):
+ * heap/WeakSet.cpp:
+ (JSC::WeakSet::~WeakSet):
+ (JSC::WeakSet::addAllocator):
+
+2012-11-07 Filip Pizlo <fpizlo@apple.com>
+
+ Indentation of ArgList.h is wrong
+ https://bugs.webkit.org/show_bug.cgi?id=101441
+
+ Reviewed by Andreas Kling.
+
+ Just unindented by 4 spaces.
+
+ * runtime/ArgList.h:
+
+2012-11-07 Gabor Ballabas <gaborb@inf.u-szeged.hu>
+
+ [Qt][ARM] REGRESSION(r133688): It made all JSC and layout tests crash on ARM traditional platform
+ https://bugs.webkit.org/show_bug.cgi?id=101465
+
+ Reviewed by Oliver Hunt.
+
+ Fix failing javascriptcore tests on ARM after r133688
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::CodeBlock):
+
+2012-11-06 Oliver Hunt <oliver@apple.com>
+
+ Reduce parser overhead in JSC
+ https://bugs.webkit.org/show_bug.cgi?id=101127
+
+ Reviewed by Filip Pizlo.
+
+ An exciting journey into the world of architecture in which our hero
+ adds yet another layer to JSC codegeneration.
+
+ This patch adds a marginally more compact form of bytecode that is
+ free from any data specific to a given execution context, and that
+ does store any data structures necessary for execution. To actually
+ execute this UnlinkedBytecode we still need to instantiate a real
+ CodeBlock, but this is a much faster linear time operation than any
+ of the earlier parsing or code generation passes.
+
+ As the unlinked code is context free we can then simply use a cache
+ from source to unlinked code mapping to completely avoid all of the
+ old parser overhead. The cache is currently very simple and memory
+ heavy, using the complete source text as a key (rather than SourceCode
+ or equivalent), and a random eviction policy.
+
+ This seems to produce a substantial win when loading identical content
+ in different contexts.
+
+ * API/tests/testapi.c:
+ (main):
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/CodeBlock.cpp:
+ * bytecode/CodeBlock.h:
+ Moved a number of fields, and a bunch of logic to UnlinkedCodeBlock.h/cpp
+ * bytecode/Opcode.h:
+ Added a global const init no op instruction needed to get correct
+ behaviour without any associated semantics.
+ * bytecode/UnlinkedCodeBlock.cpp: Added.
+ * bytecode/UnlinkedCodeBlock.h: Added.
+ A fairly shallow, GC allocated version of the old CodeBlock
+ classes with a 32bit instruction size, and just metadata
+ size tracking.
+ * bytecompiler/BytecodeGenerator.cpp:
+ * bytecompiler/BytecodeGenerator.h:
+ Replace direct access to m_symbolTable with access through
+ symbolTable(). ProgramCode no longer has a symbol table at
+ all so some previously unconditional (and pointless) uses
+ of symbolTable get null checks.
+ A few other changes to deal with type changes due to us generating
+ unlinked code (eg. pointer free, so profile indices rather than
+ pointers).
+ * dfg/DFGByteCodeParser.cpp:
+ * dfg/DFGCapabilities.h:
+ Support global_init_nop
+ * interpreter/Interpreter.cpp:
+ Now get the ProgramExecutable to initialise new global properties
+ before starting execution.
+ * jit/JIT.cpp:
+ * jit/JITDriver.h:
+ * jit/JITStubs.cpp:
+ * llint/LLIntData.cpp:
+ * llint/LLIntSlowPaths.cpp:
+ * llint/LowLevelInterpreter.asm:
+ * llint/LowLevelInterpreter32_64.asm:
+ * llint/LowLevelInterpreter64.asm:
+ Adding init_global_const_nop everywhere else
+ * parser/Parser.h:
+ * parser/ParserModes.h: Added.
+ * parser/ParserTokens.h:
+ Parser no longer needs a global object or callframe to function
+ * runtime/CodeCache.cpp: Added.
+ * runtime/CodeCache.h: Added.
+ A simple, random eviction, Source->UnlinkedCode cache
+ * runtime/Executable.cpp:
+ * runtime/Executable.h:
+ Executables now reference their unlinked counterparts, and
+ request code specifically for the target global object.
+ * runtime/JSGlobalData.cpp:
+ * runtime/JSGlobalData.h:
+ GlobalData now owns a CodeCache and a set of new structures
+ for the unlinked code types.
+ * runtime/JSGlobalObject.cpp:
+ * runtime/JSGlobalObject.h:
+ Utility functions used by executables to perform compilation
+
+ * runtime/JSType.h:
+ Add new JSTypes for unlinked code
+
+2012-11-06 Michael Saboff <msaboff@apple.com>
+
+ JSStringCreateWithCFString() Should create an 8 bit String if possible
+ https://bugs.webkit.org/show_bug.cgi?id=101104
+
+ Reviewed by Darin Adler.
+
+ Try converting the CFString to an 8 bit string using CFStringGetBytes(...,
+ kCFStringEncodingISOLatin1, ...) and return the 8 bit string if successful.
+ If not proceed with 16 bit conversion.
+
+ * API/JSStringRefCF.cpp:
+ (JSStringCreateWithCFString):
+
+2012-11-06 Oliver Hunt <oliver@apple.com>
+
+ Reduce direct m_symbolTable usage in CodeBlock
+ https://bugs.webkit.org/show_bug.cgi?id=101391
+
+ Reviewed by Sam Weinig.
+
+ Simple refactoring.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ (JSC::CodeBlock::dumpStatistics):
+ (JSC::CodeBlock::nameForRegister):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::isCaptured):
+
+2012-11-06 Michael Saboff <msaboff@apple.com>
+
+ Lexer::scanRegExp, create 8 bit pattern and flag Identifiers from 16 bit source when possible
+ https://bugs.webkit.org/show_bug.cgi?id=101013
+
+ Reviewed by Darin Adler.
+
+ Changed scanRegExp so that it will create 8 bit identifiers from 8 bit sources and from 16 bit sources
+ whan all the characters are 8 bit. Using two templated helpers, the "is all 8 bit" check is only performed
+ on 16 bit sources. The first helper is orCharacter() that will accumulate the or value of all characters
+ only for 16 bit sources. Replaced the helper Lexer::makeIdentifierSameType() with Lexer::makeRightSizedIdentifier().
+
+ * parser/Lexer.cpp:
+ (JSC::orCharacter<LChar>): Explicit template that serves as a placeholder.
+ (JSC::orCharacter<UChar>): Explicit template that actually or accumulates characters.
+ (JSC::Lexer::scanRegExp):
+ * parser/Lexer.h:
+ (Lexer):
+ (JSC::Lexer::makeRightSizedIdentifier<LChar>): New template that always creates an 8 bit Identifier.
+ (JSC::Lexer::makeRightSizedIdentifier<UChar>): New template that creates an 8 bit Identifier for 8 bit
+ data in a 16 bit source.
+
+2012-11-06 Filip Pizlo <fpizlo@apple.com>
+
+ Indentation of JSCell.h is wrong
+ https://bugs.webkit.org/show_bug.cgi?id=101379
+
+ Rubber stamped by Alexey Proskuryakov.
+
+ Just removed four spaces on a bunch of lines.
+
+ * runtime/JSCell.h:
+
+2012-11-05 Filip Pizlo <fpizlo@apple.com>
+
+ Indentation of JSObject.h is wrong
+ https://bugs.webkit.org/show_bug.cgi?id=101313
+
+ Rubber stamped by Alexey Proskuryakov.
+
+ Just unindented code, since namespace bodies shouldn't be indented.
+
+ * runtime/JSObject.h:
+
+2012-11-05 Filip Pizlo <fpizlo@apple.com>
+
+ Indentation of JSArray.h is wrong
+ https://bugs.webkit.org/show_bug.cgi?id=101314
+
+ Rubber stamped by Alexey Proskuryakov.
+
+ Just removing the indentation inside the namespace body.
+
+ * runtime/JSArray.h:
+
+2012-11-05 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should not fall down to patchable GetById just because a prototype had things added to it
+ https://bugs.webkit.org/show_bug.cgi?id=101299
+
+ Reviewed by Geoffrey Garen.
+
+ This looks like a slight win on V8v7 and SunSpider.
+
+ * bytecode/DFGExitProfile.h:
+ (JSC::DFG::exitKindToString):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2012-11-05 Filip Pizlo <fpizlo@apple.com>
+
+ Get rid of method_check
+ https://bugs.webkit.org/show_bug.cgi?id=101147
+
+ Reviewed by Geoffrey Garen.
+
+ op_method_check no longer buys us anything, since get_by_id proto caching
+ gives just as much profiling information and the DFG inlines monomorphic
+ proto accesses anyway.
+
+ This also has the potential for a speed-up since it makes parsing of
+ profiling data easier. No longer do we have to deal with the confusion of
+ the get_by_id portion of a method_check appearing monomorphic even though
+ we're really dealing with a bimorphic access (method_check specializes for
+ one case and get_by_id for another).
+
+ This looks like a 1% speed-up on both SunSpider and V8v7.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::printGetByIdCacheStatus):
+ (JSC::CodeBlock::dump):
+ (JSC::CodeBlock::finalizeUnconditionally):
+ (JSC::CodeBlock::shrinkToFit):
+ (JSC::CodeBlock::unlinkCalls):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::getCallLinkInfo):
+ (JSC::CodeBlock::callLinkInfo):
+ (CodeBlock):
+ * bytecode/GetByIdStatus.cpp:
+ (JSC::GetByIdStatus::computeFromLLInt):
+ * bytecode/MethodCallLinkInfo.cpp: Removed.
+ * bytecode/MethodCallLinkInfo.h: Removed.
+ * bytecode/MethodCallLinkStatus.cpp: Removed.
+ * bytecode/MethodCallLinkStatus.h: Removed.
+ * bytecode/Opcode.h:
+ (JSC):
+ (JSC::padOpcodeName):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC):
+ * bytecompiler/BytecodeGenerator.h:
+ (BytecodeGenerator):
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::FunctionCallDotNode::emitBytecode):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ * dfg/DFGCapabilities.h:
+ (JSC::DFG::canCompileOpcode):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ (JSC::JIT::privateCompileSlowCases):
+ (JSC::PropertyStubCompilationInfo::copyToStubInfo):
+ (JSC::JIT::privateCompile):
+ * jit/JIT.h:
+ (JSC::PropertyStubCompilationInfo::slowCaseInfo):
+ (PropertyStubCompilationInfo):
+ (JSC):
+ (JIT):
+ * jit/JITPropertyAccess.cpp:
+ (JSC):
+ (JSC::JIT::emitSlow_op_get_by_id):
+ (JSC::JIT::compileGetByIdSlowCase):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC):
+ (JSC::JIT::compileGetByIdSlowCase):
+ * jit/JITStubs.cpp:
+ (JSC):
+ * jit/JITStubs.h:
+ * llint/LowLevelInterpreter.asm:
+
+2012-11-05 Yuqiang Xian <yuqiang.xian@intel.com>
+
+ Refactor LLInt64 to distinguish the pointer operations from the 64-bit integer operations
+ https://bugs.webkit.org/show_bug.cgi?id=100321
+
+ Reviewed by Filip Pizlo.
+
+ We have refactored the MacroAssembler and JIT compilers to distinguish
+ the pointer operations from the 64-bit integer operations (see bug #99154).
+ Now we want to do the similar work for LLInt, and the goal is same as
+ the one mentioned in 99154.
+
+ This is the second part of the modification: in the low level interpreter,
+ changing the operations on 64-bit integers to use the "<foo>q" instructions.
+ This also removes some unused/meaningless "<foo>p" instructions.
+
+ * llint/LowLevelInterpreter.asm:
+ * llint/LowLevelInterpreter.cpp:
+ (JSC::CLoop::execute):
+ * llint/LowLevelInterpreter64.asm:
+ * offlineasm/armv7.rb:
+ * offlineasm/cloop.rb:
+ * offlineasm/instructions.rb:
+ * offlineasm/x86.rb:
+
+2012-11-05 Filip Pizlo <fpizlo@apple.com>
+
+ Prototype chain caching should check that the path from the base object to the slot base involves prototype hops only
+ https://bugs.webkit.org/show_bug.cgi?id=101276
+
+ Reviewed by Gavin Barraclough.
+
+ Changed normalizePrototypeChain() to report an invalid prototype chain if any object is a proxy.
+ This catches cases where our prototype chain checks would have been insufficient to guard against
+ newly introduced properties, despecialized properties, or deleted properties in the chain of
+ objects involved in the access.
+
+ * dfg/DFGRepatch.cpp:
+ (JSC::DFG::tryCacheGetByID):
+ (JSC::DFG::tryBuildGetByIDProtoList):
+ (JSC::DFG::tryCachePutByID):
+ (JSC::DFG::tryBuildPutByIdList):
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::tryCachePutByID):
+ (JSC::JITThunks::tryCacheGetByID):
+ (JSC::DEFINE_STUB_FUNCTION):
+ * llint/LLIntSlowPaths.cpp:
+ (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+ * runtime/Operations.h:
+ (JSC):
+ (JSC::normalizePrototypeChain):
+
+2012-11-05 Dima Gorbik <dgorbik@apple.com>
+
+ Back out controversial changes from Bug 98665.
+ https://bugs.webkit.org/show_bug.cgi?id=101244
+
+ Reviewed by David Kilzer.
+
+ Backing out changes from Bug 98665 until further discussions take place on rules for including Platform.h in Assertions.h.
+
+ * API/tests/minidom.c:
+ * API/tests/testapi.c:
+
+2012-11-04 Filip Pizlo <fpizlo@apple.com>
+
+ Reduce the verbosity of referring to QNaN in JavaScriptCore
+ https://bugs.webkit.org/show_bug.cgi?id=101174
+
+ Reviewed by Geoffrey Garen.
+
+ Introduces a #define QNaN in JSValue.h, and replaces all previous uses of
+ std::numeric_limits<double>::quiet_NaN() with QNaN.
+
+ * API/JSValueRef.cpp:
+ (JSValueMakeNumber):
+ (JSValueToNumber):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emitFloatTypedArrayGetByVal):
+ * runtime/CachedTranscendentalFunction.h:
+ (JSC::CachedTranscendentalFunction::initialize):
+ * runtime/DateConstructor.cpp:
+ (JSC::constructDate):
+ * runtime/DateInstanceCache.h:
+ (JSC::DateInstanceData::DateInstanceData):
+ (JSC::DateInstanceCache::reset):
+ * runtime/ExceptionHelpers.cpp:
+ (JSC::InterruptedExecutionError::defaultValue):
+ (JSC::TerminatedExecutionError::defaultValue):
+ * runtime/JSCell.h:
+ (JSC::JSValue::getPrimitiveNumber):
+ * runtime/JSDateMath.cpp:
+ (JSC::parseDateFromNullTerminatedCharacters):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ (JSC::JSGlobalData::resetDateCache):
+ * runtime/JSGlobalObjectFunctions.cpp:
+ (JSC::parseInt):
+ (JSC::jsStrDecimalLiteral):
+ (JSC::toDouble):
+ (JSC::jsToNumber):
+ (JSC::parseFloat):
+ * runtime/JSValue.cpp:
+ (JSC::JSValue::toNumberSlowCase):
+ * runtime/JSValue.h:
+ (JSC):
+ * runtime/JSValueInlineMethods.h:
+ (JSC::jsNaN):
+ * runtime/MathObject.cpp:
+ (JSC::mathProtoFuncMax):
+ (JSC::mathProtoFuncMin):
+
+2012-11-03 Filip Pizlo <fpizlo@apple.com>
+
+ Baseline JIT should use structure watchpoints whenever possible
+ https://bugs.webkit.org/show_bug.cgi?id=101146
+
+ Reviewed by Sam Weinig.
+
+ No speed-up yet except on toy programs. I think that it will start to show
+ speed-ups with https://bugs.webkit.org/show_bug.cgi?id=101147, which this is
+ a step towards.
+
+ * jit/JIT.h:
+ (JIT):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::privateCompilePutByIdTransition):
+ (JSC::JIT::privateCompileGetByIdProto):
+ (JSC::JIT::privateCompileGetByIdProtoList):
+ (JSC::JIT::privateCompileGetByIdChainList):
+ (JSC::JIT::privateCompileGetByIdChain):
+ (JSC::JIT::addStructureTransitionCheck):
+ (JSC):
+ (JSC::JIT::testPrototype):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::privateCompilePutByIdTransition):
+ (JSC::JIT::privateCompileGetByIdProto):
+ (JSC::JIT::privateCompileGetByIdProtoList):
+ (JSC::JIT::privateCompileGetByIdChainList):
+ (JSC::JIT::privateCompileGetByIdChain):
+
+2012-11-04 Csaba Osztrogonác <ossy@webkit.org>
+
+ [Qt] udis86_itab.c is always regenerated
+ https://bugs.webkit.org/show_bug.cgi?id=100756
+
+ Reviewed by Simon Hausmann.
+
+ * DerivedSources.pri: Generate sources to the generated directory.
+ * disassembler/udis86/differences.txt:
+ * disassembler/udis86/itab.py: Add --outputDir option.
+ (UdItabGenerator.__init__):
+ (genItabH):
+ (genItabC):
+ (main):
+
+2012-11-02 Filip Pizlo <fpizlo@apple.com>
+
+ LLInt 32-bit put_by_val ArrayStorage case should use the right register (t3, not t2) for the index in the publicLength updating path
+ https://bugs.webkit.org/show_bug.cgi?id=101118
+
+ Reviewed by Gavin Barraclough.
+
+ * llint/LowLevelInterpreter32_64.asm:
+
+2012-11-02 Filip Pizlo <fpizlo@apple.com>
+
+ DFG::Node::converToStructureTransitionWatchpoint should take kindly to ArrayifyToStructure
+ https://bugs.webkit.org/show_bug.cgi?id=101117
+
+ Reviewed by Gavin Barraclough.
+
+ We have logic to convert ArrayifyToStructure to StructureTransitionWatchpoint, which is awesome, except
+ that previously convertToStructureTransitionWatchpoint was (a) asserting that it never saw an
+ ArrayifyToStructure and (b) would incorrectly create a ForwardStructureTransitionWatchpoint if it did.
+
+ * dfg/DFGNode.h:
+ (JSC::DFG::Node::convertToStructureTransitionWatchpoint):
+
+2012-11-02 Filip Pizlo <fpizlo@apple.com>
+
+ DFG::SpeculativeJIT::typedArrayDescriptor should use the Float64Array descriptor for Float64Arrays
+ https://bugs.webkit.org/show_bug.cgi?id=101114
+
+ Reviewed by Gavin Barraclough.
+
+ As in https://bugs.webkit.org/show_bug.cgi?id=101112, this was only wrong when Float64Array descriptors
+ hadn't been initialized yet. That happens rarely, but when it does happen, we would crash.
+
+ This would also become much more wrong if we ever put type size info (num bytes, etc) in the descriptor
+ and used that directly. So it's good to fix it.
+
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::typedArrayDescriptor):
+
+2012-11-02 Filip Pizlo <fpizlo@apple.com>
+
+ JIT::privateCompileGetByVal should use the uint8ClampedArrayDescriptor for compiling accesses to Uint8ClampedArrays
+ https://bugs.webkit.org/show_bug.cgi?id=101112
+
+ Reviewed by Gavin Barraclough.
+
+ The only reason why the code was wrong to use uint8ArrayDescriptor instead is that if we're just using
+ Uint8ClampedArrays then the descriptor for Uint8Array may not have been initialized.
+
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::privateCompileGetByVal):
+
+2012-11-02 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ MarkedBlocks should use something other than the mark bits to indicate liveness for newly allocated objects
+ https://bugs.webkit.org/show_bug.cgi?id=100877
+
+ Reviewed by Filip Pizlo.
+
+ Currently when we canonicalize cell liveness data in MarkedBlocks, we set the mark bit for every cell in the
+ block except for those in the free list. This allows us to consider objects that were allocated since the
+ previous collection to be considered live until they have a chance to be properly marked by the collector.
+
+ If we want to use the mark bits to signify other types of information, e.g. using sticky mark bits for generational
+ collection, we will have to keep track of newly allocated objects in a different fashion when we canonicalize cell liveness.
+
+ One method would be to allocate a separate set of bits while canonicalizing liveness data. These bits would
+ track the newly allocated objects in the block separately from those objects who had already been marked. We would
+ then check these bits, along with the mark bits, when determining liveness.
+
+ * heap/Heap.h:
+ (Heap):
+ (JSC::Heap::isLive): We now check for the presence of the newlyAllocated Bitmap.
+ (JSC):
+ * heap/MarkedBlock.cpp:
+ (JSC::MarkedBlock::specializedSweep): We clear the newlyAllocated Bitmap if we're creating a free list. This
+ will happen if we canonicalize liveness data for some other reason than collection (e.g. forEachCell) and
+ then start allocating again.
+ (JSC::SetNewlyAllocatedFunctor::SetNewlyAllocatedFunctor):
+ (SetNewlyAllocatedFunctor):
+ (JSC::SetNewlyAllocatedFunctor::operator()): We set the newlyAllocated bits for all the objects
+ that aren't already marked. We undo the bits for the objects in the free list later in canonicalizeCellLivenessData.
+ (JSC::MarkedBlock::canonicalizeCellLivenessData): We should never have a FreeListed block with a newlyAllocated Bitmap.
+ We allocate the new Bitmap, set the bits for all the objects that aren't already marked, and then unset all of the
+ bits for the items currently in the FreeList.
+ * heap/MarkedBlock.h:
+ (JSC::MarkedBlock::clearMarks): We clear the newlyAllocated bitmap if it exists because at this point we don't need it
+ any more.
+ (JSC::MarkedBlock::isEmpty): If we have some objects that are newlyAllocated, we are not empty.
+ (JSC::MarkedBlock::isNewlyAllocated):
+ (JSC):
+ (JSC::MarkedBlock::setNewlyAllocated):
+ (JSC::MarkedBlock::clearNewlyAllocated):
+ (JSC::MarkedBlock::isLive): We now check the newlyAllocated Bitmap, if it exists, when determining liveness of a cell in
+ a block that is Marked.
+ * heap/WeakBlock.cpp:
+ (JSC::WeakBlock::visit): We need to make sure we don't finalize objects that are in the newlyAllocated Bitmap.
+ (JSC::WeakBlock::reap): Ditto.
+
+2012-11-02 Filip Pizlo <fpizlo@apple.com>
+
+ JIT::privateCompileGetByVal should use MacroAssemblerCodePtr::createFromExecutableAddress like JIT::privateCompilePutByVal
+ https://bugs.webkit.org/show_bug.cgi?id=101109
+
+ Reviewed by Gavin Barraclough.
+
+ This fixes crashes on ARMv7 resulting from the return address already being tagged with the THUMB2 bit.
+
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::privateCompileGetByVal):
+
+2012-11-02 Simon Fraser <simon.fraser@apple.com>
+
+ Enable SUBPIXEL_LAYOUT on Mac
+ https://bugs.webkit.org/show_bug.cgi?id=101076
+
+ Reviewed by Dave Hyatt.
+
+ Define ENABLE_SUBPIXEL_LAYOUT and include it in FEATURE_DEFINES.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2012-11-02 Michael Saboff <msaboff@apple.com>
+
+ RegExp.prototype.toString Should Produce an 8 bit JSString if possible.
+ https://bugs.webkit.org/show_bug.cgi?id=101003
+
+ Reviewed by Geoffrey Garen.
+
+ Took the logic of regExpObjectSource() and created two templated helpers that uses the
+ source character type when appending to the StringBuilder.
+
+ * runtime/RegExpObject.cpp:
+ (JSC::appendLineTerminatorEscape): Checks line terminate type to come up with escaped version.
+ (JSC::regExpObjectSourceInternal): Templated version of original.
+ (JSC::regExpObjectSource): Wrapper function.
+
+2012-11-02 Adam Barth <abarth@webkit.org>
+
+ ENABLE(UNDO_MANAGER) is disabled everywhere and is not under active development
+ https://bugs.webkit.org/show_bug.cgi?id=100711
+
+ Reviewed by Eric Seidel.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2012-11-02 Simon Hausmann <simon.hausmann@digia.com>
+
+ [Qt] Fix build on Windows when Qt is configured with -release
+ https://bugs.webkit.org/show_bug.cgi?id=101041
+
+ Reviewed by Jocelyn Turcotte.
+
+ When Qt is configured with -debug or -release, the release/debug build of for example
+ QtCore is not available by default. For LLIntExtractor we always need to build debug
+ _and_ release versions, but we do not actually need any Qt libraries nor qtmain(d).lib.
+ Therefore we can disable all these features but need to keep $$QT.core.includes in the
+ INCLUDEPATH for some defines from qglobal.h.
+
+ * LLIntOffsetsExtractor.pro:
+
+2012-11-01 Mark Lam <mark.lam@apple.com>
+
+ A llint workaround for a toolchain issue.
+ https://bugs.webkit.org/show_bug.cgi?id=101012.
+
+ Reviewed by Michael Saboff.
+
+ * llint/LowLevelInterpreter.asm:
+ - use a local label to workaround the toolchain issue with undeclared
+ global labels.
+
+2012-11-01 Oliver Hunt <oliver@apple.com>
+
+ Remove GlobalObject constant register that is typically unused
+ https://bugs.webkit.org/show_bug.cgi?id=101005
+
+ Reviewed by Geoffrey Garen.
+
+ The GlobalObject constant register is frequently allocated even when it
+ is not used, it is also getting in the way of some other optimisations.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::CodeBlock):
+ * bytecode/CodeBlock.h:
+ (CodeBlock):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseResolveOperations):
+
+2012-10-31 Filip Pizlo <fpizlo@apple.com>
+
+ DFG optimized string access code should be enabled
+ https://bugs.webkit.org/show_bug.cgi?id=100825
+
+ Reviewed by Oliver Hunt.
+
+ - Removes prediction checks from the parser.
+
+ - Fixes the handling of array mode refinement for strings. I.e. we don't do
+ any refinement - we already know it's going to be a string. We could
+ revisit this in the future, but for now the DFG lacks the ability to
+ handle any array modes other than Array::String for string intrinsics, so
+ this is as good as it gets.
+
+ - Removes uses of isBlahSpeculation for checking if a mode is already
+ checked. isBlahSpeculation implicitly checks if the SpeculatedType is not
+ BOTTOM ("empty"), which breaks for checking if a mode is already checked
+ since a mode may already be "checked" in the sense that we've proven that
+ the code is unreachable.
+
+ ~1% speed-up on V8v7, mostly from a speed-up on crypto, which uses string
+ intrinsics in one of the hot functions.
+
+ * bytecode/SpeculatedType.h:
+ (JSC::speculationChecked):
+ (JSC):
+ * dfg/DFGArrayMode.cpp:
+ (JSC::DFG::ArrayMode::alreadyChecked):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::handleIntrinsic):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt):
+
+2012-10-31 Filip Pizlo <fpizlo@apple.com>
+
+ Sparse array size threshold should be increased to 100000
+ https://bugs.webkit.org/show_bug.cgi?id=100827
+
+ Reviewed by Oliver Hunt.
+
+ This enables the use of contiguous arrays in programs that previously
+ couldn't use them. And I so far can't see any examples of this being
+ a downside. To the extent that there is a downside, it ought to be
+ addressed by GC: https://bugs.webkit.org/show_bug.cgi?id=100828
+
+ * runtime/ArrayConventions.h:
+ (JSC):
+
+2012-10-31 Mark Lam <mark.lam@apple.com>
+
+ C++ llint 64-bit backend needs to zero extend results of int32 operations.
+ https://bugs.webkit.org/show_bug.cgi?id=100899.
+
+ Reviewed by Filip Pizlo.
+
+ llint asm instructions ending in "i" for a 64-bit machine expects the
+ high 32-bit of registers to be zero'ed out when a 32-bit instruction
+ writes into a register. Fixed the C++ llint to honor this.
+
+ Fixed the index register used in BaseIndex addressing to be of size
+ intptr_t as expected.
+
+ Updated CLoopRegister to handle different endiannesss configurations.
+
+ * llint/LowLevelInterpreter.cpp:
+ (JSC::CLoopRegister::clearHighWord):
+ - new method to clear the high 32-bit of a 64-bit register.
+ It's a no-op for the 32-bit build.
+ (CLoopRegister):
+ - CLoopRegister now takes care of packing and byte endianness order.
+ (JSC::CLoop::execute): - Added an assert.
+ * offlineasm/cloop.rb:
+ - Add calls to clearHighWord() wherever needed.
+
+2012-10-31 Mark Lam <mark.lam@apple.com>
+
+ A JSC printf (support for %J+s and %b).
+ https://bugs.webkit.org/show_bug.cgi?id=100566.
+
+ Reviewed by Michael Saboff.
+
+ Added VMInspector::printf(), fprintf(), sprintf(), and snprintf().
+ - %b prints ints as boolean TRUE (non-zero) or FALSE (zero).
+ - %Js prints a WTF::String* like a %s prints a char*.
+ Also works for 16bit WTF::Strings (prints wchar_t* using %S).
+ - '+' is a modifier meaning 'use verbose mode', and %J+s is an example
+ of its use.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * interpreter/VMInspector.cpp:
+ (FormatPrinter):
+ (JSC::FormatPrinter::~FormatPrinter):
+ (JSC::FormatPrinter::print):
+ (JSC::FormatPrinter::printArg):
+ (JSC::FormatPrinter::printWTFString):
+ (JSC::FileFormatPrinter::FileFormatPrinter):
+ (JSC::FileFormatPrinter::printArg):
+ (JSC::StringFormatPrinter::StringFormatPrinter):
+ (JSC::StringFormatPrinter::printArg):
+ (JSC::StringNFormatPrinter::StringNFormatPrinter):
+ (JSC::StringNFormatPrinter::printArg):
+ (JSC::VMInspector::fprintf):
+ (JSC::VMInspector::printf):
+ (JSC::VMInspector::sprintf):
+ (JSC::VMInspector::snprintf):
+ * interpreter/VMInspector.h:
+ (VMInspector):
+
+2012-10-31 Mark Lam <mark.lam@apple.com>
+
+ 64-bit llint PC offset can be negative: using an unsigned shift is a bug.
+ https://bugs.webkit.org/show_bug.cgi?id=100896.
+
+ Reviewed by Filip Pizlo.
+
+ Fixed the PC offset divisions in the 64-bit llint asm to use rshift instead of urshift.
+
+ * llint/LowLevelInterpreter64.asm:
+
+2012-10-30 Yuqiang Xian <yuqiang.xian@intel.com>
+
+ glsl-function-atan.html WebGL conformance test fails after https://bugs.webkit.org/show_bug.cgi?id=99154
+ https://bugs.webkit.org/show_bug.cgi?id=100789
+
+ Reviewed by Filip Pizlo.
+
+ We accidently missed a bitwise double to int64 conversion.
+
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::silentFill):
+
+2012-10-30 Joseph Pecoraro <pecoraro@apple.com>
+
+ [Mac] Sync up FeatureDefine Configuration Files
+ https://bugs.webkit.org/show_bug.cgi?id=100171
+
+ Reviewed by David Kilzer.
+
+ Follow up to better coordinate with iOS feature defines. Make:
+
+ - ENABLE_FILTERS always on
+ - ENABLE_INPUT_* iphonesimulator values point to the iphoneos values
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2012-10-30 Joseph Pecoraro <pecoraro@apple.com>
+
+ [Mac] Sync up FeatureDefine Configuration Files
+ https://bugs.webkit.org/show_bug.cgi?id=100171
+
+ Reviewed by David Kilzer.
+
+ Ensure an identical FeatureDefine files across all projects. Changes:
+
+ - ENABLE_CSS_BOX_DECORATION_BREAK should be in all
+ - ENABLE_PDFKIT_PLUGIN should be in all
+ - ENABLE_RESOLUTION_MEDIA_QUERY should be in all
+ - ENABLE_ENCRYPTED_MEDIA should be in all
+ - ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING with corrected value
+ - Some alphabetical ordering cleanup
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2012-10-30 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Arrays can change IndexingType in the middle of sorting
+ https://bugs.webkit.org/show_bug.cgi?id=100773
+
+ Reviewed by Filip Pizlo.
+
+ Instead of giving up, we just fetch the appropriate vector based on the current
+ IndexingType of the array.
+
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::sortVector):
+ * runtime/JSObject.h:
+ (JSObject):
+ (JSC::JSObject::currentIndexingData):
+ (JSC::JSObject::currentRelevantLength):
+
+2012-10-29 Anders Carlsson <andersca@apple.com>
+
+ Build WebKit as C++11 on Mac
+ https://bugs.webkit.org/show_bug.cgi?id=100720
+
+ Reviewed by Daniel Bates.
+
+ * Configurations/Base.xcconfig:
+ Add CLANG_CXX_LANGUAGE_STANDARD=gnu++0x.
+
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::generate):
+ (JSC::BytecodeGenerator::pushFinallyContext):
+ (JSC::BytecodeGenerator::beginSwitch):
+ * llint/LLIntOffsetsExtractor.cpp:
+ * runtime/Identifier.cpp:
+ (JSC::Identifier::add8):
+ * runtime/Identifier.h:
+ (JSC::Identifier::add):
+ * runtime/JSONObject.cpp:
+ (JSC::appendStringToStringBuilder):
+ * runtime/StringPrototype.cpp:
+ (JSC::replaceUsingStringSearch):
+ Add static_casts to prevent implicit type conversions in non-constant initializer lists.
+
+2012-10-28 Mark Rowe <mrowe@apple.com>
+
+ Simplify Xcode configuration settings that used to vary between OS versions.
+
+ Reviewed by Dan Bernstein.
+
+ * Configurations/Base.xcconfig:
+ * Configurations/DebugRelease.xcconfig:
+ * Configurations/JavaScriptCore.xcconfig:
+
+2012-10-28 Mark Rowe <mrowe@apple.com>
+
+ Remove references to unsupported OS and Xcode versions.
+
+ Reviewed by Anders Carlsson.
+
+ * Configurations/Base.xcconfig:
+ * Configurations/CompilerVersion.xcconfig: Removed.
+ * Configurations/DebugRelease.xcconfig:
+ * Configurations/Version.xcconfig:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2012-10-29 Michael Saboff <msaboff@apple.com>
+
+ Non-special escape character sequences cause JSC::Lexer::parseString to create 16 bit strings
+ https://bugs.webkit.org/show_bug.cgi?id=100576
+
+ Reviewed by Darin Adler.
+
+ Changed singleEscape() processing to be based on a lookup of a static table. The table
+ covers ASCII characters SPACE through DEL. If a character can be a single character escape,
+ then the table provides the non-zero result of that escape. Updated the result of
+ singleEscape to be an LChar to make the table as small as possible.
+ Added a new test fast/js/normal-character-escapes-in-string-literals.html to validated
+ the behavior.
+
+ * parser/Lexer.cpp:
+ (JSC::singleEscape):
+ (JSC::Lexer::parseString):
+ (JSC::Lexer::parseStringSlowCase):
+
+2012-10-29 Enrica Casucci <enrica@apple.com>
+
+ Add ENABLE_USERSELECT_ALL feature flag.
+ https://bugs.webkit.org/show_bug.cgi?id=100559
+
+ Reviewed by Eric Seidel.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2012-10-28 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should be able to emit effectful structure checks
+ https://bugs.webkit.org/show_bug.cgi?id=99260
+
+ Reviewed by Oliver Hunt.
+
+ This change allows us to find out if an array access that has gone polymorphic
+ is operating over known structures - i.e. the primordial array structures of the
+ global object that the code block containing the array access belongs to. We
+ term this state "OriginalArray" for short. The fact that the access has gone
+ polymorphic means that the array profile will not be able to report the set of
+ structures it had seen - but if it can tell us that all of the structures were
+ primordial then it just so happens that we can deduce what the structure set
+ would have been by just querying the code block's global object. This allows us
+ to emit an ArrayifyToStructure instead of an Arrayify if we find that we need to
+ do conversions. The fast path of an ArrayifyToStructure is exactly like the fast
+ path of a CheckStructure and is mostly subject to the same optimizations. It
+ also burns one fewer registers.
+
+ Essentially the notion of OriginalArray is a super cheap way of getting the
+ array profile to tell us a structure set instead of a singleton structure.
+ Currently, the array profile can only tell us the structure seen at an array
+ access if there was exactly one structure. If there were multiple structures, it
+ won't tell us anything other than the array modes and other auxiliary profiling
+ data (whether there were stores to holes, for example). With OriginalArray, we
+ cheaply get a structure set if all of the structures were primordial for the
+ code block's global object, since in that case the array mode set (ArrayModes)
+ can directly tell us the structure set. In the future, we might consider adding
+ complete structure sets to the array profiles, but I suspect that we would hit
+ diminishing returns if we did so - it would only help if we have array accesses
+ that are both polymorphic and are cross-global-object accesses (rare) or if the
+ arrays had named properties or other structure transitions that are unrelated to
+ indexing type (also rare).
+
+ This also does away with Arrayify (and the new ArrayifyToStructure) returning
+ the butterfly pointer. This turns out to be faster and easier to CSE.
+
+ And, this also changes constant folding to be able to eliminate CheckStructure,
+ ForwardCheckStructure, and ArrayifyToStructure in addition to being able to
+ transform them into structure transition watchpoints. This is great for
+ ArrayifyToStructure because then CSE and CFA know that there is no side effect.
+ Converting CheckStructure and ForwardCheckStructure to also behave this way is
+ just a matter of elegance.
+
+ This has no performance impact right now. It's intended to alleviate some of the
+ regressions seen in the early implementation of
+ https://bugs.webkit.org/show_bug.cgi?id=98606.
+
+ * bytecode/ArrayProfile.cpp:
+ (JSC::ArrayProfile::computeUpdatedPrediction):
+ * bytecode/ArrayProfile.h:
+ (JSC):
+ (JSC::ArrayProfile::ArrayProfile):
+ (ArrayProfile):
+ (JSC::ArrayProfile::usesOriginalArrayStructures):
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::updateAllPredictionsAndCountLiveness):
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGArrayMode.cpp:
+ (JSC::DFG::ArrayMode::fromObserved):
+ (JSC::DFG::ArrayMode::alreadyChecked):
+ (JSC::DFG::arrayClassToString):
+ * dfg/DFGArrayMode.h:
+ (JSC::DFG::ArrayMode::withProfile):
+ (JSC::DFG::ArrayMode::isJSArray):
+ (ArrayMode):
+ (JSC::DFG::ArrayMode::isJSArrayWithOriginalStructure):
+ (JSC::DFG::ArrayMode::supportsLength):
+ (JSC::DFG::ArrayMode::arrayModesWithIndexingShape):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::getArrayMode):
+ (JSC::DFG::ByteCodeParser::getArrayModeAndEmitChecks):
+ (JSC::DFG::ByteCodeParser::handleGetByOffset):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::checkStructureElimination):
+ (JSC::DFG::CSEPhase::structureTransitionWatchpointElimination):
+ (JSC::DFG::CSEPhase::getPropertyStorageLoadElimination):
+ (JSC::DFG::CSEPhase::checkArrayElimination):
+ (JSC::DFG::CSEPhase::getScopeRegistersLoadElimination):
+ * dfg/DFGConstantFoldingPhase.cpp:
+ (JSC::DFG::ConstantFoldingPhase::foldConstants):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ (JSC::DFG::FixupPhase::checkArray):
+ * dfg/DFGNode.h:
+ (JSC::DFG::Node::hasStructure):
+ (JSC::DFG::Node::hasArrayMode):
+ (JSC::DFG::Node::arrayMode):
+ * dfg/DFGNodeType.h:
+ (DFG):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::jumpSlowForUnwantedArrayMode):
+ (JSC::DFG::SpeculativeJIT::arrayify):
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * runtime/JSGlobalObject.h:
+ (JSC::JSGlobalObject::isOriginalArrayStructure):
+ * runtime/Structure.cpp:
+ (JSC::Structure::nonPropertyTransition):
+
+2012-10-28 Filip Pizlo <fpizlo@apple.com>
+
+ There should not be blind spots in array length array profiling
+ https://bugs.webkit.org/show_bug.cgi?id=100620
+
+ Reviewed by Oliver Hunt.
+
+ I don't think this has any performance impact. But it's good to not have random
+ programs occasionally emit a GetById for array length accesses.
+
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::compileGetByIdHotPath):
+ (JSC::JIT::privateCompilePatchGetArrayLength):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::compileGetByIdHotPath):
+ (JSC::JIT::privateCompilePatchGetArrayLength):
+
+2012-10-28 Filip Pizlo <fpizlo@apple.com>
+
+ Unreviewed, make always-true enum-to-int comparisons use casts.
+
+ * dfg/DFGFPRInfo.h:
+ (JSC::DFG::FPRInfo::debugName):
+ * dfg/DFGGPRInfo.h:
+ (JSC::DFG::JSValueSource::tagGPR):
+ (JSC::DFG::GPRInfo::toIndex):
+ (JSC::DFG::GPRInfo::debugName):
+ * runtime/JSTypeInfo.h:
+ (JSC::TypeInfo::TypeInfo):
+
+2012-10-27 Filip Pizlo <fpizlo@apple.com>
+
+ OSR exit compilation should defend against argument recoveries from code blocks that are no longer on the inline stack
+ https://bugs.webkit.org/show_bug.cgi?id=100601
+
+ Reviewed by Oliver Hunt.
+
+ This happened to me while I was fixing bugs for https://bugs.webkit.org/show_bug.cgi?id=100599.
+ I'm not sure how to reproduce this.
+
+ * dfg/DFGAssemblyHelpers.h:
+ (JSC::DFG::AssemblyHelpers::baselineCodeBlockFor):
+ (AssemblyHelpers):
+ * dfg/DFGOSRExitCompiler32_64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGOSRExitCompiler64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+
+2012-10-27 Filip Pizlo <fpizlo@apple.com>
+
+ DFG::Array::Mode needs to be cleaned up
+ https://bugs.webkit.org/show_bug.cgi?id=100599
+
+ Reviewed by Oliver Hunt.
+
+ Turn the previous massive Array::Mode enum into a class that contains four
+ fields, the type, whether it's a JSArray, the level of speculation, and the
+ kind of conversion to perform.
+
+ No performance or behavioral change.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGArgumentsSimplificationPhase.cpp:
+ (JSC::DFG::ArgumentsSimplificationPhase::run):
+ * dfg/DFGArrayMode.cpp:
+ (JSC::DFG::ArrayMode::fromObserved):
+ (JSC::DFG::ArrayMode::refine):
+ (JSC::DFG::ArrayMode::alreadyChecked):
+ (JSC::DFG::arrayTypeToString):
+ (JSC::DFG::arrayClassToString):
+ (DFG):
+ (JSC::DFG::arraySpeculationToString):
+ (JSC::DFG::arrayConversionToString):
+ (JSC::DFG::ArrayMode::toString):
+ * dfg/DFGArrayMode.h:
+ (DFG):
+ (ArrayMode):
+ (JSC::DFG::ArrayMode::ArrayMode):
+ (JSC::DFG::ArrayMode::type):
+ (JSC::DFG::ArrayMode::arrayClass):
+ (JSC::DFG::ArrayMode::speculation):
+ (JSC::DFG::ArrayMode::conversion):
+ (JSC::DFG::ArrayMode::asWord):
+ (JSC::DFG::ArrayMode::fromWord):
+ (JSC::DFG::ArrayMode::withSpeculation):
+ (JSC::DFG::ArrayMode::usesButterfly):
+ (JSC::DFG::ArrayMode::isJSArray):
+ (JSC::DFG::ArrayMode::isInBounds):
+ (JSC::DFG::ArrayMode::mayStoreToHole):
+ (JSC::DFG::ArrayMode::isOutOfBounds):
+ (JSC::DFG::ArrayMode::isSlowPut):
+ (JSC::DFG::ArrayMode::canCSEStorage):
+ (JSC::DFG::ArrayMode::lengthNeedsStorage):
+ (JSC::DFG::ArrayMode::modeForPut):
+ (JSC::DFG::ArrayMode::isSpecific):
+ (JSC::DFG::ArrayMode::supportsLength):
+ (JSC::DFG::ArrayMode::benefitsFromStructureCheck):
+ (JSC::DFG::ArrayMode::doesConversion):
+ (JSC::DFG::ArrayMode::arrayModesThatPassFiltering):
+ (JSC::DFG::ArrayMode::operator==):
+ (JSC::DFG::ArrayMode::operator!=):
+ (JSC::DFG::ArrayMode::arrayModesWithIndexingShape):
+ (JSC::DFG::canCSEStorage):
+ (JSC::DFG::lengthNeedsStorage):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::getArrayMode):
+ (JSC::DFG::ByteCodeParser::getArrayModeAndEmitChecks):
+ (JSC::DFG::ByteCodeParser::handleIntrinsic):
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::getArrayLengthElimination):
+ (JSC::DFG::CSEPhase::checkArrayElimination):
+ (JSC::DFG::CSEPhase::getIndexedPropertyStorageLoadElimination):
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ * dfg/DFGConstantFoldingPhase.cpp:
+ (JSC::DFG::ConstantFoldingPhase::foldConstants):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ (JSC::DFG::FixupPhase::checkArray):
+ (JSC::DFG::FixupPhase::blessArrayOperation):
+ * dfg/DFGGraph.cpp:
+ (JSC::DFG::Graph::dump):
+ * dfg/DFGGraph.h:
+ (JSC::DFG::Graph::byValIsPure):
+ * dfg/DFGNode.h:
+ (JSC::DFG::Node::arrayMode):
+ (JSC::DFG::Node::setArrayMode):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::typedArrayDescriptor):
+ (JSC::DFG::SpeculativeJIT::jumpSlowForUnwantedArrayMode):
+ (JSC::DFG::SpeculativeJIT::checkArray):
+ (JSC::DFG::SpeculativeJIT::arrayify):
+ (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
+ (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
+ (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
+ (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
+ (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
+ (JSC::DFG::SpeculativeJIT::compileGetByValOnArguments):
+ (JSC::DFG::SpeculativeJIT::compileGetArgumentsLength):
+ (JSC::DFG::SpeculativeJIT::compileGetArrayLength):
+ (JSC::DFG::SpeculativeJIT::temporaryRegisterForPutByVal):
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::putByValWillNeedExtraRegister):
+ (SpeculativeJIT):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2012-10-27 Dan Bernstein <mitz@apple.com>
+
+ REAL_PLATFORM_NAME build setting is no longer needed
+ https://bugs.webkit.org/show_bug.cgi?id=100587
+
+ Reviewed by Mark Rowe.
+
+ Removed the definition of REAL_PLATFORM_NAME and replaced references to it with references
+ to PLATFORM_NAME.
+
+ * Configurations/Base.xcconfig:
+ * Configurations/CompilerVersion.xcconfig:
+ * Configurations/DebugRelease.xcconfig:
+ * Configurations/FeatureDefines.xcconfig:
+ * Configurations/JSC.xcconfig:
+ * Configurations/JavaScriptCore.xcconfig:
+ * Configurations/ToolExecutable.xcconfig:
+
+2012-10-25 Filip Pizlo <fpizlo@apple.com>
+
+ Forward OSR calculation is wrong in the presence of multiple SetLocals, or a mix of SetLocals and Phantoms
+ https://bugs.webkit.org/show_bug.cgi?id=100461
+
+ Reviewed by Oliver Hunt and Gavin Barraclough.
+
+ This does a couple of things. First, it removes the part of the change in r131822 that made the forward
+ OSR exit calculator capable of handling multiple SetLocals. That change was wrong, because it would
+ blindly assume that all SetLocals had the same ValueRecovery, and would ignore the possibility that if
+ there is no value recovery then a ForwardCheckStructure on the first SetLocal would not know how to
+ recover the state associated with the second SetLocal. Then, it introduces the invariant that any bytecode
+ op that decomposes into multiple SetLocals must first emit dead SetLocals as hints and then emit a second
+ set of SetLocals to actually do the setting of the locals. This means that if a ForwardCheckStructure (or
+ any other hoisted forward speculation) is inserted, it will always be inserted on the second set of
+ SetLocals (since hoisting only touches the live ones), at which point OSR will already know about the
+ mov hints implied by the first set of (dead) SetLocals. This gives us the behavior we wanted, namely, that
+ a ForwardCheckStructure applied to a variant set by a resolve_with_base-like operation can correctly do a
+ forward exit while also ensuring that prior to exiting we set the appropriate locals.
+
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ * dfg/DFGOSRExit.cpp:
+ (JSC::DFG::OSRExit::OSRExit):
+ * dfg/DFGOSRExit.h:
+ (OSRExit):
+ * dfg/DFGOSRExitCompiler.cpp:
+ * dfg/DFGOSRExitCompiler32_64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGOSRExitCompiler64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::convertLastOSRExitToForward):
+
+2012-10-26 Simon Hausmann <simon.hausmann@digia.com>
+
+ [Qt] Fix the LLInt build on Windows
+ https://bugs.webkit.org/show_bug.cgi?id=97648
+
+ Reviewed by Tor Arne Vestbø.
+
+ The main change for the port on Windows is changing the way offsets are extracted
+ and the LLIntAssembly.h is generated to accomodate release and debug configurations.
+
+ Firstly the LLIntOffsetsExtractor binary is now built as-is (no DESTDIR set) and
+ placed into debug\LLIntOffsetsExtractor.exe and release\LLIntOffsetsExtractor.exe
+ on Windows debug_and_release builds. On other patforms it remainds in the regular
+ out directory.
+
+ Secondly the LLIntAssembly.h files must be different for different build types,
+ so the LLIntAssembly.h generator in DerivedSources.pri operates no on the extractor
+ binary files as input. Using a simple exists() check we verify the presence of either
+ a regular, a debug\LLIntOffsetsExtractor and a release\LLIntOffsetsExtractor binary
+ and process all of them. The resulting assembly files consequently end up in
+ generated\debug\LLIntAssembly.h and generated\release\LLIntAssembly.h.
+
+ In Target.pri we have to also make sure that those directories are in the include
+ path according to the release or debug configuration.
+
+ Lastly a small tweak - swapping WTF.pri and JSC.pri inclusions - in the
+ LLIntOffsetsExtractor build was needed to make sure that we include
+ JavaScriptCore/config.h instead of WTF/config.h, required to fix the
+ build issues originally pasted in bug #97648.
+
+ * DerivedSources.pri:
+ * JavaScriptCore.pro:
+ * LLIntOffsetsExtractor.pro:
+ * Target.pri:
+
+2012-10-26 Gabor Ballabas <gaborb@inf.u-szeged.hu>
+
+ [Qt] Enable JSC's disassembler on x86, x86_64 Linux
+ https://bugs.webkit.org/show_bug.cgi?id=100386
+
+ Reviewed by Simon Hausmann.
+
+ It works fine on Linux x86, x86_64 just needs to be enabled in the
+ QtWebKit build system.
+
+ * DerivedSources.pri:
+ * JavaScriptCore.pri:
+ * Target.pri:
+
+2012-10-26 Thiago Marcos P. Santos <thiago.santos@intel.com>
+
+ Add feature flags for CSS Device Adaptation
+ https://bugs.webkit.org/show_bug.cgi?id=95960
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2012-10-26 Simon Hausmann <simon.hausmann@digia.com>
+
+ [WIN] Make LLInt offsets extractor work on Windows
+ https://bugs.webkit.org/show_bug.cgi?id=100369
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Open the input file explicitly in binary mode to prevent ruby/Windows from thinking that
+ it's a text mode file that needs even new line conversions. The binary mode parameter is
+ ignored on other platforms.
+
+ * offlineasm/offsets.rb:
+
+2012-10-25 Michael Saboff <msaboff@apple.com>
+
+ SymbolTableIndexHashTraits::needsDestruction should be set to true
+ https://bugs.webkit.org/show_bug.cgi?id=100437
+
+ Reviewed by Mark Hahnenberg.
+
+ For correctness, set SymbolTableIndexHashTraits::needsDestruction to true since SymbolTableEntry's do
+ need to have their destructor called due to the possibility of rare data.
+
+ * runtime/SymbolTable.h:
+ (SymbolTableIndexHashTraits):
+
+2012-10-25 Filip Pizlo <fpizlo@apple.com>
+
+ DFG Arrayify elimination should replace it with GetButterfly rather than Phantom
+ https://bugs.webkit.org/show_bug.cgi?id=100441
+
+ Reviewed by Oliver Hunt and Gavin Barraclough.
+
+ Made array profiler's to-string helper behave correctly.
+
+ Made Arrayify elimination do the right thing (convert to GetButterfly).
+
+ Made CFA's interference analysis track clobbered array modes correctly, mostly by
+ simplifying the machinery.
+
+ * bytecode/ArrayProfile.cpp:
+ (JSC::arrayModesToString):
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGAbstractValue.h:
+ (JSC::DFG::AbstractValue::clobberArrayModes):
+ (AbstractValue):
+ * dfg/DFGConstantFoldingPhase.cpp:
+ (JSC::DFG::ConstantFoldingPhase::foldConstants):
+
+2012-10-25 Filip Pizlo <fpizlo@apple.com>
+
+ REGRESSION (r131793-r131826): Crash going to wikifonia.org
+ https://bugs.webkit.org/show_bug.cgi?id=100281
+
+ Reviewed by Oliver Hunt.
+
+ Restore something that got lost in the resolve refactoring: the ability to give up on life if
+ we see a resolve of 'arguments'.
+
+ * runtime/JSScope.cpp:
+ (JSC::JSScope::resolveContainingScopeInternal):
+
+2012-10-25 Dominik Röttsches <dominik.rottsches@intel.com>
+
+ Conditionalize XHR timeout support
+ https://bugs.webkit.org/show_bug.cgi?id=100356
+
+ Reviewed by Adam Barth.
+
+ Adding XHR_TIMEOUT feature to conditionalize this on ports without network backend support.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2012-10-25 Michael Saboff <msaboff@apple.com>
+
+ REGRESSION (r131836): failures in list styles tests on EFL, GTK
+ https://bugs.webkit.org/show_bug.cgi?id=99824
+
+ Reviewed by Oliver Hunt.
+
+ Saved start of string since it is modified by call convertUTF8ToUTF16().
+
+ * API/JSStringRef.cpp:
+ (JSStringCreateWithUTF8CString):
+
+2012-10-24 Filip Pizlo <fpizlo@apple.com>
+
+ DFG NewArrayBuffer node should keep its data in a structure on the side to free up one of the opInfos
+ https://bugs.webkit.org/show_bug.cgi?id=100328
+
+ Reviewed by Oliver Hunt.
+
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ * dfg/DFGGraph.h:
+ (Graph):
+ * dfg/DFGNode.h:
+ (NewArrayBufferData):
+ (DFG):
+ (JSC::DFG::Node::newArrayBufferData):
+ (Node):
+ (JSC::DFG::Node::startConstant):
+ (JSC::DFG::Node::numConstants):
+
+2012-10-25 Mark Lam <mark.lam@apple.com>
+
+ Update the C++ llint to work with the latest op_resolve... changes.
+ https://bugs.webkit.org/show_bug.cgi?id=100345.
+
+ Reviewed by Oliver Hunt.
+
+ * llint/LowLevelInterpreter.cpp:
+ (JSC::CLoop::execute):
+ - emit opcode name as label when not using COMPUTED_GOTOs. The new op_resolve
+ opcodes have jumps to these labels.
+ - declare all opcode labels as UNUSED_LABEL()s to keep the compiler happy
+ for opcodes that are not referenced by anyone.
+ * offlineasm/asm.rb:
+ - strip llint_ prefix from opcode names used as labels.
+
+2012-10-24 Yuqiang Xian <yuqiang.xian@intel.com>
+
+ Refactor LLInt64 to distinguish the pointer operations from the 64-bit integer operations
+ https://bugs.webkit.org/show_bug.cgi?id=100321
+
+ Reviewed by Filip Pizlo.
+
+ We have refactored the MacroAssembler and JIT compilers to distinguish
+ the pointer operations from the 64-bit integer operations (see bug #99154).
+ Now we want to do the similar work for LLInt, and the goal is same as
+ the one mentioned in 99154.
+
+ This is the first part of the modification: in the offline assembler,
+ adding the support of the "<foo>q" instructions which will be used for
+ 64-bit integer operations.
+
+ * llint/LowLevelInterpreter.cpp:
+ (JSC::CLoop::execute):
+ * offlineasm/cloop.rb:
+ * offlineasm/instructions.rb:
+ * offlineasm/x86.rb:
+
+2012-10-24 Filip Pizlo <fpizlo@apple.com>
+
+ DFG compileBlahBlahByVal methods for Contiguous and ArrayStorage have only one caller and should be removed
+ https://bugs.webkit.org/show_bug.cgi?id=100311
+
+ Reviewed by Mark Hahnenberg.
+
+ Just trying to simplify things before I make them more complicated again.
+
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+ (JSC::DFG::SpeculativeJIT::temporaryRegisterForPutByVal):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (DFG):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (DFG):
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2012-10-23 Andreas Kling <kling@webkit.org>
+
+ CodeBlock: Give m_putToBaseOperations an inline capacity.
+ <http://webkit.org/b/100190>
+ <rdar://problem/12562466>
+
+ Reviewed by Oliver Hunt.
+
+ Since the CodeBlock constructor always inserts a single PutToBaseOperation, but there's no
+ guarantee that more will follow, give the m_putToBaseOperations vector an inline capacity of 1.
+ There are 4009 of these Vectors on Membuster3, and only 126 of them have more than a single entry.
+
+ This change yields a 1.90MB reduction in memory usage.
+
+ * bytecode/CodeBlock.h:
+ (CodeBlock):
+
+2012-10-23 Christophe Dumez <christophe.dumez@intel.com>
+
+ Regression(r132143): Assertion hit in JSC::Interpreter::StackPolicy::StackPolicy(JSC::Interpreter&, const WTF::StackBounds&)
+ https://bugs.webkit.org/show_bug.cgi?id=100109
+
+ Reviewed by Oliver Hunt.
+
+ Fix possible integer overflow in StackPolicy constructor by
+ using size_t type instead of int for stack sizes. The value
+ returned by StackBounds::size() is of type size_t but was
+ assigned to an int, which may overflow.
+
+ * interpreter/Interpreter.cpp:
+ (JSC):
+ (JSC::Interpreter::StackPolicy::StackPolicy):
+
+2012-10-23 Carlos Garcia Campos <cgarcia@igalia.com>
+
+ Unreviewed. Fix make distcheck.
+
+ * GNUmakefile.list.am: Add missing header file.
+
+2012-10-23 Mark Lam <mark.lam@apple.com>
+
+ Make topCallFrame reliable.
+ https://bugs.webkit.org/show_bug.cgi?id=98928.
+
+ Reviewed by Geoffrey Garen.
+
+ - VM entry points and the GC now uses topCallFrame.
+ - The callerFrame value in CallFrames are now always the previous
+ frame on the stack, except for the first frame which has a
+ callerFrame of 0 (not counting the HostCallFrameFlag).
+ Hence, we can now traverse every frame on the stack all the way
+ back to the first frame.
+ - GlobalExec's will no longer be used as the callerFrame values in
+ call frames.
+ - Added fences and traps for debugging the JSStack in debug builds.
+
+ * bytecode/SamplingTool.h:
+ (SamplingTool):
+ (JSC::SamplingTool::CallRecord::CallRecord):
+ * dfg/DFGOperations.cpp:
+ - Fixed 2 DFG helper functions to flush topCallFrame as expected.
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::prepareForExternalCall):
+ * interpreter/CallFrame.h:
+ (JSC::ExecState::callerFrameNoFlags):
+ (ExecState):
+ (JSC::ExecState::argIndexForRegister):
+ (JSC::ExecState::getArgumentUnsafe):
+ * interpreter/CallFrameClosure.h:
+ (CallFrameClosure):
+ * interpreter/Interpreter.cpp:
+ (JSC):
+ (JSC::eval):
+ (JSC::Interpreter::Interpreter):
+ (JSC::Interpreter::throwException):
+ (JSC::Interpreter::execute):
+ (JSC::Interpreter::executeCall):
+ (JSC::Interpreter::executeConstruct):
+ (JSC::Interpreter::prepareForRepeatCall):
+ (JSC::Interpreter::endRepeatCall):
+ * interpreter/Interpreter.h:
+ (JSC):
+ (Interpreter):
+ * interpreter/JSStack.cpp:
+ (JSC::JSStack::JSStack):
+ (JSC::JSStack::gatherConservativeRoots):
+ (JSC::JSStack::disableErrorStackReserve):
+ * interpreter/JSStack.h:
+ (JSC):
+ (JSStack):
+ (JSC::JSStack::installFence):
+ (JSC::JSStack::validateFence):
+ (JSC::JSStack::installTrapsAfterFrame):
+ * interpreter/JSStackInlines.h: Added.
+ (JSC):
+ (JSC::JSStack::getTopOfFrame):
+ (JSC::JSStack::getTopOfStack):
+ (JSC::JSStack::getStartOfFrame):
+ (JSC::JSStack::pushFrame):
+ (JSC::JSStack::popFrame):
+ (JSC::JSStack::generateFenceValue):
+ (JSC::JSStack::installFence):
+ (JSC::JSStack::validateFence):
+ (JSC::JSStack::installTrapsAfterFrame):
+ * jit/JITStubs.cpp:
+ (JSC::jitCompileFor):
+ (JSC::lazyLinkFor):
+ - Set frame->codeBlock to 0 for both the above because they are called
+ with partially intitialized frames (cb uninitialized), but may
+ trigger a GC.
+ (JSC::DEFINE_STUB_FUNCTION):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+
+2012-10-22 Filip Pizlo <fpizlo@apple.com>
+
+ DFG::Array::Undecided should be called DFG::Array::SelectUsingPredictions
+ https://bugs.webkit.org/show_bug.cgi?id=100052
+
+ Reviewed by Oliver Hunt.
+
+ No functional change, just renaming. It's a clearer name that more accurately
+ reflects the meaning, and it eliminates the namespace confusion that will happen
+ with the Undecided indexing type in https://bugs.webkit.org/show_bug.cgi?id=98606
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGArrayMode.cpp:
+ (JSC::DFG::fromObserved):
+ (JSC::DFG::refineArrayMode):
+ (JSC::DFG::modeAlreadyChecked):
+ (JSC::DFG::modeToString):
+ * dfg/DFGArrayMode.h:
+ (JSC::DFG::canCSEStorage):
+ (JSC::DFG::modeIsSpecific):
+ (JSC::DFG::modeSupportsLength):
+ (JSC::DFG::benefitsFromStructureCheck):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ (JSC::DFG::FixupPhase::blessArrayOperation):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::arrayify):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2012-10-22 Mark Lam <mark.lam@apple.com>
+
+ Change stack recursion checks to be based on stack availability.
+ https://bugs.webkit.org/show_bug.cgi?id=99872.
+
+ Reviewed by Filip Pizlo and Geoffrey Garen.
+
+ - Remove m_reentryDepth, ThreadStackType which are now obsolete.
+ - Replaced the reentryDepth checks with a StackBounds check.
+ - Added the Interpreter::StackPolicy class to compute a reasonable
+ stack capacity requirement given the native stack that the
+ interpreter is executing on at that time.
+ - Reserved an amount of JSStack space for the use of error handling
+ and enable its use (using Interpreter::ErrorHandlingMode) when
+ we're about to throw or report an exception.
+ - Interpreter::StackPolicy also allows more native stack space
+ to be used when in ErrorHandlingMode. This is needed in the case
+ of native stack overflows.
+ - Fixed the parser so that it throws a StackOverflowError instead of
+ a SyntaxError when it encounters a stack overflow.
+
+ * API/JSContextRef.cpp:
+ (JSContextGroupCreate):
+ (JSGlobalContextCreateInGroup):
+ * JavaScriptCore.order:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::ErrorHandlingMode::ErrorHandlingMode):
+ (JSC):
+ (JSC::Interpreter::ErrorHandlingMode::~ErrorHandlingMode):
+ (JSC::Interpreter::StackPolicy::StackPolicy):
+ (JSC::Interpreter::Interpreter):
+ (JSC::Interpreter::execute):
+ (JSC::Interpreter::executeCall):
+ (JSC::Interpreter::executeConstruct):
+ (JSC::Interpreter::prepareForRepeatCall):
+ * interpreter/Interpreter.h:
+ (JSC):
+ (Interpreter):
+ (ErrorHandlingMode):
+ (StackPolicy):
+ (JSC::Interpreter::StackPolicy::requiredCapacity):
+ * interpreter/JSStack.cpp:
+ (JSC):
+ (JSC::JSStack::JSStack):
+ (JSC::JSStack::growSlowCase):
+ (JSC::JSStack::enableErrorStackReserve):
+ (JSC::JSStack::disableErrorStackReserve):
+ * interpreter/JSStack.h:
+ (JSStack):
+ (JSC::JSStack::reservationEnd):
+ (JSC):
+ * jsc.cpp:
+ (jscmain):
+ * parser/Parser.cpp:
+ (JSC::::Parser):
+ * parser/Parser.h:
+ (Parser):
+ (JSC::::parse):
+ * runtime/ExceptionHelpers.cpp:
+ (JSC::throwStackOverflowError):
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ (JSC::JSGlobalData::createContextGroup):
+ (JSC::JSGlobalData::create):
+ (JSC::JSGlobalData::createLeaked):
+ (JSC::JSGlobalData::sharedInstance):
+ * runtime/JSGlobalData.h:
+ (JSC):
+ (JSGlobalData):
+ * runtime/StringRecursionChecker.h:
+ (JSC::StringRecursionChecker::performCheck):
+ * testRegExp.cpp:
+ (realMain):
+
+2012-10-20 Martin Robinson <mrobinson@igalia.com>
+
+ Fix 'make dist' for the GTK+ port
+
+ * GNUmakefile.list.am: Add missing files to the source list.
+
+2012-10-21 Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
+
+ [CMake][JSC] Depend on risc.rb to decide when to run the LLInt scripts.
+ https://bugs.webkit.org/show_bug.cgi?id=99917
+
+ Reviewed by Geoffrey Garen.
+
+ Depend on the newly-added risc.rb to make sure we always run the
+ LLInt scripts when one of them changes.
+
+ * CMakeLists.txt:
+
+2012-10-20 Filip Pizlo <fpizlo@apple.com>
+
+ LLInt backends of non-ARM RISC platforms should be able to share code with the existing ARMv7 backend
+ https://bugs.webkit.org/show_bug.cgi?id=99745
+
+ Reviewed by Geoffrey Garen.
+
+ This moves all of the things in armv7.rb that I thought are generally useful out
+ into risc.rb. It also separates some phases (branch ops is separated into one
+ phase that does sensible things, and another that does things that are painfully
+ ARM-specific), and removes ARM assumptions from others by using a callback to
+ drive exactly what lowering must happen. The goal here is to minimize the future
+ maintenance burden of LLInt by ensuring that the various platforms share as much
+ lowering code as possible.
+
+ * offlineasm/armv7.rb:
+ * offlineasm/risc.rb: Added.
+
+2012-10-19 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should have some facility for recognizing redundant CheckArrays and Arrayifies
+ https://bugs.webkit.org/show_bug.cgi?id=99287
+
+ Reviewed by Mark Hahnenberg.
+
+ Adds reasoning about indexing type sets (i.e. ArrayModes) to AbstractValue, which
+ then enables us to fold away CheckArray's and Arrayify's that are redundant.
+
+ * bytecode/ArrayProfile.cpp:
+ (JSC::arrayModesToString):
+ (JSC):
+ * bytecode/ArrayProfile.h:
+ (JSC):
+ (JSC::mergeArrayModes):
+ (JSC::arrayModesAlreadyChecked):
+ * bytecode/StructureSet.h:
+ (JSC::StructureSet::arrayModesFromStructures):
+ (StructureSet):
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGAbstractValue.h:
+ (JSC::DFG::AbstractValue::AbstractValue):
+ (JSC::DFG::AbstractValue::clear):
+ (JSC::DFG::AbstractValue::isClear):
+ (JSC::DFG::AbstractValue::makeTop):
+ (JSC::DFG::AbstractValue::clobberStructures):
+ (AbstractValue):
+ (JSC::DFG::AbstractValue::setMostSpecific):
+ (JSC::DFG::AbstractValue::set):
+ (JSC::DFG::AbstractValue::operator==):
+ (JSC::DFG::AbstractValue::merge):
+ (JSC::DFG::AbstractValue::filter):
+ (JSC::DFG::AbstractValue::filterArrayModes):
+ (JSC::DFG::AbstractValue::validate):
+ (JSC::DFG::AbstractValue::checkConsistency):
+ (JSC::DFG::AbstractValue::dump):
+ (JSC::DFG::AbstractValue::clobberArrayModes):
+ (JSC::DFG::AbstractValue::clobberArrayModesSlow):
+ (JSC::DFG::AbstractValue::setFuturePossibleStructure):
+ (JSC::DFG::AbstractValue::filterFuturePossibleStructure):
+ * dfg/DFGArrayMode.cpp:
+ (JSC::DFG::modeAlreadyChecked):
+ * dfg/DFGArrayMode.h:
+ (JSC::DFG::arrayModesFor):
+ (DFG):
+ * dfg/DFGConstantFoldingPhase.cpp:
+ (JSC::DFG::ConstantFoldingPhase::foldConstants):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::arrayify):
+
+2012-10-19 Filip Pizlo <fpizlo@apple.com>
+
+ Baseline JIT should not inline array allocations, to make them easier to instrument
+ https://bugs.webkit.org/show_bug.cgi?id=99905
+
+ Reviewed by Mark Hahnenberg.
+
+ This will make it easier to instrument array allocations for the purposes of profiling.
+ It also allows us to kill off a bunch of code. And, this doesn't appear to hurt
+ performance at all. That's expected because these days any hot allocation will end up
+ in the DFG JIT, which does inline these allocations.
+
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileSlowCases):
+ * jit/JIT.h:
+ (JIT):
+ * jit/JITInlineMethods.h:
+ (JSC):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_new_array):
+
+2012-10-19 Oliver Hunt <oliver@apple.com>
+
+ Fix some of the regression cause by the non-local variable reworking
+ https://bugs.webkit.org/show_bug.cgi?id=99896
+
+ Reviewed by Filip Pizlo.
+
+ The non0local variable reworking led to some of the optimisations performed by
+ the bytecode generator being dropped. This in turn put more pressure on the DFG
+ optimisations. This exposed a short coming in our double speculation propogation.
+ Now we try to distinguish between places where we should SpecDoubleReal vs generic
+ SpecDouble.
+
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (PredictionPropagationPhase):
+ (JSC::DFG::PredictionPropagationPhase::speculatedDoubleTypeForPrediction):
+ (JSC::DFG::PredictionPropagationPhase::speculatedDoubleTypeForPredictions):
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+
+2012-10-19 Michael Saboff <msaboff@apple.com>
+
+ Lexer should create 8 bit Identifiers for RegularExpressions and ASCII identifiers
+ https://bugs.webkit.org/show_bug.cgi?id=99855
+
+ Reviewed by Filip Pizlo.
+
+ Added makeIdentifier helpers that will always make an 8 bit Identifier or make an
+ Identifier that is the same size as the template parameter. Used the first in the fast
+ path when looking for a JS identifier and the second when scanning regular expressions.
+
+ * parser/Lexer.cpp:
+ (JSC::::scanRegExp):
+ * parser/Lexer.h:
+ (Lexer):
+ (JSC::::makeIdentifierSameType):
+ (JSC::::makeLCharIdentifier):
+ (JSC::::lexExpectIdentifier):
+
+2012-10-19 Mark Lam <mark.lam@apple.com>
+
+ Added WTF::StackStats mechanism.
+ https://bugs.webkit.org/show_bug.cgi?id=99805.
+
+ Reviewed by Geoffrey Garen.
+
+ Added StackStats checkpoints and probes.
+
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::BytecodeGenerator::emitNode):
+ (JSC::BytecodeGenerator::emitNodeInConditionContext):
+ * heap/SlotVisitor.cpp:
+ (JSC::SlotVisitor::append):
+ (JSC::visitChildren):
+ (JSC::SlotVisitor::donateKnownParallel):
+ (JSC::SlotVisitor::drain):
+ (JSC::SlotVisitor::drainFromShared):
+ (JSC::SlotVisitor::mergeOpaqueRoots):
+ (JSC::SlotVisitor::internalAppend):
+ (JSC::SlotVisitor::harvestWeakReferences):
+ (JSC::SlotVisitor::finalizeUnconditionalFinalizers):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::execute):
+ (JSC::Interpreter::executeCall):
+ (JSC::Interpreter::executeConstruct):
+ (JSC::Interpreter::prepareForRepeatCall):
+ * parser/Parser.h:
+ (JSC::Parser::canRecurse):
+ * runtime/StringRecursionChecker.h:
+ (StringRecursionChecker):
+
+2012-10-19 Oliver Hunt <oliver@apple.com>
+
+ REGRESSION(r131822): It made 500+ tests crash on 32 bit platforms
+ https://bugs.webkit.org/show_bug.cgi?id=99814
+
+ Reviewed by Filip Pizlo.
+
+ Call the correct macro in 32bit.
+
+ * llint/LowLevelInterpreter.asm:
+
+2012-10-19 Dongwoo Joshua Im <dw.im@samsung.com>
+
+ Rename ENABLE_CSS3_TEXT_DECORATION to ENABLE_CSS3_TEXT
+ https://bugs.webkit.org/show_bug.cgi?id=99804
+
+ Reviewed by Julien Chaffraix.
+
+ CSS3 text related properties will be implemented under this flag,
+ including text decoration, text-align-last, and text-justify.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2012-10-18 Anders Carlsson <andersca@apple.com>
+
+ Clean up RegExpKey
+ https://bugs.webkit.org/show_bug.cgi?id=99798
+
+ Reviewed by Darin Adler.
+
+ RegExpHash doesn't need to be a class template specialization when the class template is specialized
+ for JSC::RegExpKey only. Make it a nested class of RegExp instead. Also, make operator== a friend function
+ so Hash::equal can see it.
+
+ * runtime/RegExpKey.h:
+ (JSC::RegExpKey::RegExpKey):
+ (JSC::RegExpKey::operator==):
+ (RegExpKey):
+ (JSC::RegExpKey::Hash::hash):
+ (JSC::RegExpKey::Hash::equal):
+ (Hash):
+
+2012-10-19 Mark Lam <mark.lam@apple.com>
+
+ Bot greening: Follow up to r131877 to fix the Windows build.
+ https://bugs.webkit.org/show_bug.cgi?id=99739.
+
+ Not reviewed.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2012-10-19 Mark Lam <mark.lam@apple.com>
+
+ Bot greening: Attempt to fix broken Window build after r131836.
+ https://bugs.webkit.org/show_bug.cgi?id=99739.
+
+ Not reviewed.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2012-10-19 Yuqiang Xian <yuqiang.xian@intel.com>
+
+ Unreviewed fix after r131868.
+
+ On JSVALUE64 platforms, JSValue constants can be Imm64 instead of ImmPtr for JIT compilers.
+
+ * dfg/DFGOSRExitCompiler64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+
+2012-10-18 Filip Pizlo <fpizlo@apple.com>
+
+ Baseline array profiling should be less accurate, and DFG OSR exit should update array profiles on CheckArray and CheckStructure failure
+ https://bugs.webkit.org/show_bug.cgi?id=99261
+
+ Reviewed by Oliver Hunt.
+
+ This makes array profiling stochastic, like value profiling. The point is to avoid
+ noticing one-off indexing types that we'll never see again, but instead to:
+
+ Notice the big ones: We want the DFG to compile based on the things that happen with
+ high probability. So, this change makes array profiling do like value profiling and
+ only notice a random subsampling of indexing types that flowed through an array
+ access. Prior to this patch array profiles noticed all indexing types and weighted
+ them identically.
+
+ Bias the recent: Often an array access will see awkward indexing types during the
+ first handful of executions because of artifacts of program startup. So, we want to
+ bias towards the indexing types that we saw most recently. With this change, array
+ profiling does like value profiling and usually tells use a random sampling that
+ is biased to what happened recently.
+
+ Have a backup plan: The above two things don't work by themselves because our
+ randomness is not that random (nor do we care enough to make it more random), and
+ because some procedures will have a <1/10 probability event that we must handle
+ without bailing because it dominates a hot loop. So, like value profiling, this
+ patch makes array profiling use OSR exits to tell us why we are bailing out, so
+ that we don't make the same mistake again in the future.
+
+ This change also makes the way that the 32-bit OSR exit compiler snatches scratch
+ registers more uniform. We don't need a scratch buffer when we can push and pop.
+
+ * bytecode/DFGExitProfile.h:
+ * dfg/DFGOSRExitCompiler32_64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGOSRExitCompiler64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::checkArray):
+ (JSC::DFG::SpeculativeJIT::arrayify):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::emitArrayProfilingSite):
+ * llint/LowLevelInterpreter.asm:
+
+2012-10-18 Yuqiang Xian <yuqiang.xian@intel.com>
+
+ [Qt] REGRESSION(r131858): It broke the ARM build
+ https://bugs.webkit.org/show_bug.cgi?id=99809
+
+ Reviewed by Csaba Osztrogonác.
+
+ * dfg/DFGCCallHelpers.h:
+ (CCallHelpers):
+ (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
+
+2012-10-18 Yuqiang Xian <yuqiang.xian@intel.com>
+
+ Refactor MacroAssembler interfaces to differentiate the pointer operands from the 64-bit integer operands
+ https://bugs.webkit.org/show_bug.cgi?id=99154
+
+ Reviewed by Gavin Barraclough.
+
+ In current JavaScriptCore implementation for JSVALUE64 platform (i.e.,
+ the X64 platform), we assume that the JSValue size is same to the
+ pointer size, and thus EncodedJSValue is simply type defined as a
+ "void*". In the JIT compiler, we also take this assumption and invoke
+ the same macro assembler interfaces for both JSValue and pointer
+ operands. We need to differentiate the operations on pointers from the
+ operations on JSValues, and let them invoking different macro
+ assembler interfaces. For example, we now use the interface of
+ "loadPtr" to load either a pointer or a JSValue, and we need to switch
+ to using "loadPtr" to load a pointer and some new "load64" interface
+ to load a JSValue. This would help us supporting other JSVALUE64
+ platforms where pointer size is not necessarily 64-bits, for example
+ x32 (bug #99153).
+
+ The major modification I made is to introduce the "*64" interfaces in
+ the MacroAssembler for those operations on JSValues, keep the "*Ptr"
+ interfaces for those operations on real pointers, and go through all
+ the JIT compiler code to correct the usage.
+
+ This is the second part of the work, i.e, to correct the usage of the
+ new MacroAssembler interfaces in the JIT compilers, which also means
+ that now EncodedJSValue is defined as a 64-bit integer, and the "*64"
+ interfaces are used for it.
+
+ * assembler/MacroAssembler.h: JSValue immediates should be in Imm64 instead of ImmPtr.
+ (MacroAssembler):
+ (JSC::MacroAssembler::shouldBlind):
+ * dfg/DFGAssemblyHelpers.cpp: Correct the JIT compilers usage of the new interfaces.
+ (JSC::DFG::AssemblyHelpers::jitAssertIsInt32):
+ (JSC::DFG::AssemblyHelpers::jitAssertIsJSInt32):
+ (JSC::DFG::AssemblyHelpers::jitAssertIsJSNumber):
+ (JSC::DFG::AssemblyHelpers::jitAssertIsJSDouble):
+ (JSC::DFG::AssemblyHelpers::jitAssertIsCell):
+ * dfg/DFGAssemblyHelpers.h:
+ (JSC::DFG::AssemblyHelpers::emitPutToCallFrameHeader):
+ (JSC::DFG::AssemblyHelpers::branchIfNotCell):
+ (JSC::DFG::AssemblyHelpers::debugCall):
+ (JSC::DFG::AssemblyHelpers::boxDouble):
+ (JSC::DFG::AssemblyHelpers::unboxDouble):
+ (JSC::DFG::AssemblyHelpers::emitExceptionCheck):
+ * dfg/DFGCCallHelpers.h:
+ (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
+ (CCallHelpers):
+ * dfg/DFGOSRExitCompiler64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGRepatch.cpp:
+ (JSC::DFG::generateProtoChainAccessStub):
+ (JSC::DFG::tryCacheGetByID):
+ (JSC::DFG::tryBuildGetByIDList):
+ (JSC::DFG::emitPutReplaceStub):
+ (JSC::DFG::emitPutTransitionStub):
+ * dfg/DFGScratchRegisterAllocator.h:
+ (JSC::DFG::ScratchRegisterAllocator::preserveUsedRegistersToScratchBuffer):
+ (JSC::DFG::ScratchRegisterAllocator::restoreUsedRegistersFromScratchBuffer):
+ * dfg/DFGSilentRegisterSavePlan.h:
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
+ (JSC::DFG::SpeculativeJIT::compileValueToInt32):
+ (JSC::DFG::SpeculativeJIT::compileInt32ToDouble):
+ (JSC::DFG::SpeculativeJIT::compileInstanceOfForObject):
+ (JSC::DFG::SpeculativeJIT::compileInstanceOf):
+ (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant):
+ (JSC::DFG::SpeculativeJIT::compileGetByValOnArguments):
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+ (JSC::DFG::SpeculativeJIT::silentSavePlanForGPR):
+ (JSC::DFG::SpeculativeJIT::silentSpill):
+ (JSC::DFG::SpeculativeJIT::silentFill):
+ (JSC::DFG::SpeculativeJIT::spill):
+ (JSC::DFG::SpeculativeJIT::valueOfJSConstantAsImm64):
+ (JSC::DFG::SpeculativeJIT::callOperation):
+ (JSC::DFG::SpeculativeJIT::branch64):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::fillInteger):
+ (JSC::DFG::SpeculativeJIT::fillDouble):
+ (JSC::DFG::SpeculativeJIT::fillJSValue):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToNumber):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeUInt32ToNumber):
+ (JSC::DFG::SpeculativeJIT::cachedGetById):
+ (JSC::DFG::SpeculativeJIT::cachedPutById):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
+ (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
+ (JSC::DFG::SpeculativeJIT::emitCall):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
+ (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
+ (JSC::DFG::SpeculativeJIT::convertToDouble):
+ (JSC::DFG::SpeculativeJIT::compileObjectEquality):
+ (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
+ (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
+ (JSC::DFG::SpeculativeJIT::compileDoubleCompare):
+ (JSC::DFG::SpeculativeJIT::compileNonStringCellOrOtherLogicalNot):
+ (JSC::DFG::SpeculativeJIT::compileLogicalNot):
+ (JSC::DFG::SpeculativeJIT::emitNonStringCellOrOtherBranch):
+ (JSC::DFG::SpeculativeJIT::emitBranch):
+ (JSC::DFG::SpeculativeJIT::compileContiguousGetByVal):
+ (JSC::DFG::SpeculativeJIT::compileArrayStorageGetByVal):
+ (JSC::DFG::SpeculativeJIT::compileContiguousPutByVal):
+ (JSC::DFG::SpeculativeJIT::compileArrayStoragePutByVal):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGThunks.cpp:
+ (JSC::DFG::osrExitGenerationThunkGenerator):
+ (JSC::DFG::throwExceptionFromCallSlowPathGenerator):
+ (JSC::DFG::slowPathFor):
+ (JSC::DFG::virtualForThunkGenerator):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::dumpRegisters):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompile):
+ * jit/JIT.h:
+ (JIT):
+ * jit/JITArithmetic.cpp:
+ (JSC::JIT::emit_op_negate):
+ (JSC::JIT::emitSlow_op_negate):
+ (JSC::JIT::emit_op_rshift):
+ (JSC::JIT::emitSlow_op_urshift):
+ (JSC::JIT::emit_compareAndJumpSlow):
+ (JSC::JIT::emit_op_bitand):
+ (JSC::JIT::compileBinaryArithOpSlowCase):
+ (JSC::JIT::emit_op_div):
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileLoadVarargs):
+ (JSC::JIT::compileCallEval):
+ (JSC::JIT::compileCallEvalSlowCase):
+ (JSC::JIT::compileOpCall):
+ * jit/JITInlineMethods.h: Have some clean-up work as well.
+ (JSC):
+ (JSC::JIT::emitPutCellToCallFrameHeader):
+ (JSC::JIT::emitPutIntToCallFrameHeader):
+ (JSC::JIT::emitPutToCallFrameHeader):
+ (JSC::JIT::emitGetFromCallFrameHeader32):
+ (JSC::JIT::emitGetFromCallFrameHeader64):
+ (JSC::JIT::emitAllocateJSArray):
+ (JSC::JIT::emitValueProfilingSite):
+ (JSC::JIT::emitGetJITStubArg):
+ (JSC::JIT::emitGetVirtualRegister):
+ (JSC::JIT::emitPutVirtualRegister):
+ (JSC::JIT::emitInitRegister):
+ (JSC::JIT::emitJumpIfJSCell):
+ (JSC::JIT::emitJumpIfBothJSCells):
+ (JSC::JIT::emitJumpIfNotJSCell):
+ (JSC::JIT::emitLoadInt32ToDouble):
+ (JSC::JIT::emitJumpIfImmediateInteger):
+ (JSC::JIT::emitJumpIfNotImmediateInteger):
+ (JSC::JIT::emitJumpIfNotImmediateIntegers):
+ (JSC::JIT::emitFastArithReTagImmediate):
+ (JSC::JIT::emitFastArithIntToImmNoCheck):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::privateCompileCTINativeCall):
+ (JSC::JIT::emit_op_mov):
+ (JSC::JIT::emit_op_instanceof):
+ (JSC::JIT::emit_op_is_undefined):
+ (JSC::JIT::emit_op_is_boolean):
+ (JSC::JIT::emit_op_is_number):
+ (JSC::JIT::emit_op_tear_off_activation):
+ (JSC::JIT::emit_op_not):
+ (JSC::JIT::emit_op_jfalse):
+ (JSC::JIT::emit_op_jeq_null):
+ (JSC::JIT::emit_op_jneq_null):
+ (JSC::JIT::emit_op_jtrue):
+ (JSC::JIT::emit_op_bitxor):
+ (JSC::JIT::emit_op_bitor):
+ (JSC::JIT::emit_op_get_pnames):
+ (JSC::JIT::emit_op_next_pname):
+ (JSC::JIT::compileOpStrictEq):
+ (JSC::JIT::emit_op_catch):
+ (JSC::JIT::emit_op_throw_static_error):
+ (JSC::JIT::emit_op_eq_null):
+ (JSC::JIT::emit_op_neq_null):
+ (JSC::JIT::emit_op_create_activation):
+ (JSC::JIT::emit_op_create_arguments):
+ (JSC::JIT::emit_op_init_lazy_reg):
+ (JSC::JIT::emitSlow_op_convert_this):
+ (JSC::JIT::emitSlow_op_not):
+ (JSC::JIT::emit_op_get_argument_by_val):
+ (JSC::JIT::emit_op_put_to_base):
+ (JSC::JIT::emit_resolve_operations):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_get_by_val):
+ (JSC::JIT::emitContiguousGetByVal):
+ (JSC::JIT::emitArrayStorageGetByVal):
+ (JSC::JIT::emitSlow_op_get_by_val):
+ (JSC::JIT::compileGetDirectOffset):
+ (JSC::JIT::emit_op_get_by_pname):
+ (JSC::JIT::emitContiguousPutByVal):
+ (JSC::JIT::emitArrayStoragePutByVal):
+ (JSC::JIT::compileGetByIdHotPath):
+ (JSC::JIT::emit_op_put_by_id):
+ (JSC::JIT::compilePutDirectOffset):
+ (JSC::JIT::emit_op_init_global_const):
+ (JSC::JIT::emit_op_init_global_const_check):
+ (JSC::JIT::emitIntTypedArrayGetByVal):
+ (JSC::JIT::emitFloatTypedArrayGetByVal):
+ (JSC::JIT::emitFloatTypedArrayPutByVal):
+ * jit/JITStubCall.h:
+ (JITStubCall):
+ (JSC::JITStubCall::JITStubCall):
+ (JSC::JITStubCall::addArgument):
+ (JSC::JITStubCall::call):
+ (JSC::JITStubCall::callWithValueProfiling):
+ * jit/JSInterfaceJIT.h:
+ (JSC::JSInterfaceJIT::emitJumpIfImmediateNumber):
+ (JSC::JSInterfaceJIT::emitJumpIfNotImmediateNumber):
+ (JSC::JSInterfaceJIT::emitLoadJSCell):
+ (JSC::JSInterfaceJIT::emitLoadInt32):
+ (JSC::JSInterfaceJIT::emitLoadDouble):
+ * jit/SpecializedThunkJIT.h:
+ (JSC::SpecializedThunkJIT::returnDouble):
+ (JSC::SpecializedThunkJIT::tagReturnAsInt32):
+ * runtime/JSValue.cpp:
+ (JSC::JSValue::description):
+ * runtime/JSValue.h: Define JSVALUE64 EncodedJSValue as int64_t, which is also unified with JSVALUE32_64.
+ (JSC):
+ * runtime/JSValueInlineMethods.h: New implementation of some JSValue methods to make them more conformant
+ with the new rule that "JSValue is a 64-bit integer rather than a pointer" for JSVALUE64 platforms.
+ (JSC):
+ (JSC::JSValue::JSValue):
+ (JSC::JSValue::operator bool):
+ (JSC::JSValue::operator==):
+ (JSC::JSValue::operator!=):
+ (JSC::reinterpretDoubleToInt64):
+ (JSC::reinterpretInt64ToDouble):
+ (JSC::JSValue::asDouble):
+
+2012-10-18 Michael Saboff <msaboff@apple.com>
+
+ convertUTF8ToUTF16() Should Check for ASCII Input
+ ihttps://bugs.webkit.org/show_bug.cgi?id=99739
+
+ Reviewed by Geoffrey Garen.
+
+ Using the updated convertUTF8ToUTF16() , we can determine if is makes more sense to
+ create a string using the 8 bit source. Added a new OpaqueJSString::create(LChar*, unsigned).
+ Had to add a cast n JSStringCreateWithCFString to differentiate which create() to call.
+
+ * API/JSStringRef.cpp:
+ (JSStringCreateWithUTF8CString):
+ * API/JSStringRefCF.cpp:
+ (JSStringCreateWithCFString):
+ * API/OpaqueJSString.h:
+ (OpaqueJSString::create):
+ (OpaqueJSString):
+ (OpaqueJSString::OpaqueJSString):
+
+2012-10-18 Oliver Hunt <oliver@apple.com>
+
+ Unbreak jsc tests. Last minute "clever"-ness is clearly just not
+ a good plan.
+
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseBlock):
+
+2012-10-18 Oliver Hunt <oliver@apple.com>
+
+ Bytecode should not have responsibility for determining how to perform non-local resolves
+ https://bugs.webkit.org/show_bug.cgi?id=99349
+
+ Reviewed by Gavin Barraclough.
+
+ This patch removes lexical analysis from the bytecode generation. This allows
+ us to delay lookup of a non-local variables until the lookup is actually necessary,
+ and simplifies a lot of the resolve logic in BytecodeGenerator.
+
+ Once a lookup is performed we cache the lookup information in a set of out-of-line
+ buffers in CodeBlock. This allows subsequent lookups to avoid unnecessary hashing,
+ etc, and allows the respective JITs to recreated optimal lookup code.
+
+ This is currently still a performance regression in LLInt, but most of the remaining
+ regression is caused by a lot of indirection that I'll remove in future work, as well
+ as some work necessary to allow LLInt to perform in line instruction repatching.
+ We will also want to improve the behaviour of the baseline JIT for some of the lookup
+ operations, however this patch was getting quite large already so I'm landing it now
+ that we've reached the bar of "performance-neutral".
+
+ Basic browsing seems to work.
+
+ * GNUmakefile.list.am:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::printStructures):
+ (JSC::CodeBlock::dump):
+ (JSC::CodeBlock::CodeBlock):
+ (JSC::CodeBlock::visitStructures):
+ (JSC):
+ (JSC::CodeBlock::finalizeUnconditionally):
+ (JSC::CodeBlock::shrinkToFit):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::addResolve):
+ (JSC::CodeBlock::addPutToBase):
+ (CodeBlock):
+ (JSC::CodeBlock::resolveOperations):
+ (JSC::CodeBlock::putToBaseOperation):
+ (JSC::CodeBlock::numberOfResolveOperations):
+ (JSC::CodeBlock::numberOfPutToBaseOperations):
+ (JSC::CodeBlock::addPropertyAccessInstruction):
+ (JSC::CodeBlock::globalObjectConstant):
+ (JSC::CodeBlock::setGlobalObjectConstant):
+ * bytecode/Opcode.h:
+ (JSC):
+ (JSC::padOpcodeName):
+ * bytecode/ResolveGlobalStatus.cpp:
+ (JSC::computeForStructure):
+ (JSC::ResolveGlobalStatus::computeFor):
+ * bytecode/ResolveGlobalStatus.h:
+ (JSC):
+ (ResolveGlobalStatus):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::ResolveResult::checkValidity):
+ (JSC):
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ (JSC::BytecodeGenerator::resolve):
+ (JSC::BytecodeGenerator::resolveConstDecl):
+ (JSC::BytecodeGenerator::shouldAvoidResolveGlobal):
+ (JSC::BytecodeGenerator::emitResolve):
+ (JSC::BytecodeGenerator::emitResolveBase):
+ (JSC::BytecodeGenerator::emitResolveBaseForPut):
+ (JSC::BytecodeGenerator::emitResolveWithBaseForPut):
+ (JSC::BytecodeGenerator::emitResolveWithThis):
+ (JSC::BytecodeGenerator::emitGetLocalVar):
+ (JSC::BytecodeGenerator::emitInitGlobalConst):
+ (JSC::BytecodeGenerator::emitPutToBase):
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::ResolveResult::registerResolve):
+ (JSC::ResolveResult::dynamicResolve):
+ (ResolveResult):
+ (JSC::ResolveResult::ResolveResult):
+ (JSC):
+ (NonlocalResolveInfo):
+ (JSC::NonlocalResolveInfo::NonlocalResolveInfo):
+ (JSC::NonlocalResolveInfo::~NonlocalResolveInfo):
+ (JSC::NonlocalResolveInfo::resolved):
+ (JSC::NonlocalResolveInfo::put):
+ (BytecodeGenerator):
+ (JSC::BytecodeGenerator::getResolveOperations):
+ (JSC::BytecodeGenerator::getResolveWithThisOperations):
+ (JSC::BytecodeGenerator::getResolveBaseOperations):
+ (JSC::BytecodeGenerator::getResolveBaseForPutOperations):
+ (JSC::BytecodeGenerator::getResolveWithBaseForPutOperations):
+ (JSC::BytecodeGenerator::getPutToBaseOperation):
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::ResolveNode::isPure):
+ (JSC::FunctionCallResolveNode::emitBytecode):
+ (JSC::PostfixNode::emitResolve):
+ (JSC::PrefixNode::emitResolve):
+ (JSC::ReadModifyResolveNode::emitBytecode):
+ (JSC::AssignResolveNode::emitBytecode):
+ (JSC::ConstDeclNode::emitCodeSingle):
+ (JSC::ForInNode::emitBytecode):
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGByteCodeParser.cpp:
+ (ByteCodeParser):
+ (InlineStackEntry):
+ (JSC::DFG::ByteCodeParser::handleGetByOffset):
+ (DFG):
+ (JSC::DFG::ByteCodeParser::parseResolveOperations):
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
+ * dfg/DFGCapabilities.h:
+ (JSC::DFG::canInlineResolveOperations):
+ (DFG):
+ (JSC::DFG::canCompileOpcode):
+ (JSC::DFG::canInlineOpcode):
+ * dfg/DFGGraph.h:
+ (ResolveGlobalData):
+ (ResolveOperationData):
+ (DFG):
+ (PutToBaseOperationData):
+ (Graph):
+ * dfg/DFGNode.h:
+ (JSC::DFG::Node::hasIdentifier):
+ (JSC::DFG::Node::resolveOperationsDataIndex):
+ (Node):
+ * dfg/DFGNodeType.h:
+ (DFG):
+ * dfg/DFGOSRExit.cpp:
+ (JSC::DFG::OSRExit::OSRExit):
+ * dfg/DFGOSRExit.h:
+ (OSRExit):
+ * dfg/DFGOSRExitCompiler.cpp:
+ * dfg/DFGOSRExitCompiler32_64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGOSRExitCompiler64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGOperations.h:
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGRepatch.cpp:
+ (JSC::DFG::tryCacheGetByID):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::convertLastOSRExitToForward):
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::resolveOperations):
+ (SpeculativeJIT):
+ (JSC::DFG::SpeculativeJIT::putToBaseOperation):
+ (JSC::DFG::SpeculativeJIT::callOperation):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGStructureCheckHoistingPhase.cpp:
+ (JSC::DFG::StructureCheckHoistingPhase::run):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ (JSC::JIT::privateCompileSlowCases):
+ * jit/JIT.h:
+ (JIT):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_put_to_base):
+ (JSC):
+ (JSC::JIT::emit_resolve_operations):
+ (JSC::JIT::emitSlow_link_resolve_operations):
+ (JSC::JIT::emit_op_resolve):
+ (JSC::JIT::emitSlow_op_resolve):
+ (JSC::JIT::emit_op_resolve_base):
+ (JSC::JIT::emitSlow_op_resolve_base):
+ (JSC::JIT::emit_op_resolve_with_base):
+ (JSC::JIT::emitSlow_op_resolve_with_base):
+ (JSC::JIT::emit_op_resolve_with_this):
+ (JSC::JIT::emitSlow_op_resolve_with_this):
+ (JSC::JIT::emitSlow_op_put_to_base):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::emit_op_put_to_base):
+ (JSC):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_init_global_const):
+ (JSC::JIT::emit_op_init_global_const_check):
+ (JSC::JIT::emitSlow_op_init_global_const_check):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::emit_op_init_global_const):
+ (JSC::JIT::emit_op_init_global_const_check):
+ (JSC::JIT::emitSlow_op_init_global_const_check):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ (JSC):
+ * jit/JITStubs.h:
+ * llint/LLIntSlowPaths.cpp:
+ (LLInt):
+ (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+ * llint/LLIntSlowPaths.h:
+ (LLInt):
+ * llint/LowLevelInterpreter.asm:
+ * llint/LowLevelInterpreter32_64.asm:
+ * llint/LowLevelInterpreter64.asm:
+ * runtime/JSScope.cpp:
+ (JSC::LookupResult::base):
+ (JSC::LookupResult::value):
+ (JSC::LookupResult::setBase):
+ (JSC::LookupResult::setValue):
+ (LookupResult):
+ (JSC):
+ (JSC::setPutPropertyAccessOffset):
+ (JSC::executeResolveOperations):
+ (JSC::JSScope::resolveContainingScopeInternal):
+ (JSC::JSScope::resolveContainingScope):
+ (JSC::JSScope::resolve):
+ (JSC::JSScope::resolveBase):
+ (JSC::JSScope::resolveWithBase):
+ (JSC::JSScope::resolveWithThis):
+ (JSC::JSScope::resolvePut):
+ (JSC::JSScope::resolveGlobal):
+ * runtime/JSScope.h:
+ (JSScope):
+ * runtime/JSVariableObject.cpp:
+ (JSC):
+ * runtime/JSVariableObject.h:
+ (JSVariableObject):
+ * runtime/Structure.h:
+ (JSC::Structure::propertyAccessesAreCacheable):
+ (Structure):
+
+2012-10-18 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Live oversize copied blocks should count toward overall heap fragmentation
+ https://bugs.webkit.org/show_bug.cgi?id=99548
+
+ Reviewed by Filip Pizlo.
+
+ The CopiedSpace uses overall heap fragmentation to determine whether or not it should do any copying.
+ Currently it doesn't include live oversize CopiedBlocks in the calculation, but it should. We should
+ treat them as 100% utilized, since running a copying phase won't be able to free/compact any of their
+ memory. We can also free any dead oversize CopiedBlocks while we're iterating over them, rather than
+ iterating over them again at the end of the copying phase.
+
+ * heap/CopiedSpace.cpp:
+ (JSC::CopiedSpace::doneFillingBlock):
+ (JSC::CopiedSpace::startedCopying):
+ (JSC::CopiedSpace::doneCopying): Also removed a branch when iterating over from-space at the end of
+ copying. Since we eagerly recycle blocks as soon as they're fully evacuated, we should see no
+ unpinned blocks in from-space at the end of copying.
+ * heap/CopiedSpaceInlineMethods.h:
+ (JSC::CopiedSpace::recycleBorrowedBlock):
+ * heap/CopyVisitorInlineMethods.h:
+ (JSC::CopyVisitor::checkIfShouldCopy):
+
+2012-10-18 Roger Fong <roger_fong@apple.com>
+
+ Unreviewed. Build fix after r131701 and r131777.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2012-10-18 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Race condition between GCThread and main thread during copying phase
+ https://bugs.webkit.org/show_bug.cgi?id=99641
+
+ Reviewed by Filip Pizlo.
+
+ When a GCThread returns from copyFromShared(), it then calls doneCopying(), which returns
+ its borrowed CopiedBlock to the CopiedSpace. This final block allows the CopiedSpace to
+ continue and finish the cleanup of the copying phase. However, the GCThread can loop back
+ around, see that m_currentPhase is still "Copy", and try to go through the copying phase again.
+ This can cause all sorts of issues. To fix this, we should add a cyclic barrier to GCThread::waitForNextPhase().
+
+ * heap/GCThread.cpp:
+ (JSC::GCThread::waitForNextPhase): All GCThreads will wait when they finish one iteration until the main thread
+ notifies them to move down to the second while loop, where they wait for the next GCPhase to start. They also
+ decrement the m_numberOfActiveGCThreads counter as they begin to wait for the next phase and increment it as
+ they enter the next phase. This allows the main thread to wait in endCurrentPhase() until all the threads have
+ finished the current phase and are waiting on the next phase to begin. Without the counter, there would be
+ no way to ensure that every thread was available for each GCPhase.
+ (JSC::GCThread::gcThreadMain): We now use the m_phaseLock to synchronize with the main thread when we're being created.
+ * heap/GCThreadSharedData.cpp:
+ (JSC::GCThreadSharedData::GCThreadSharedData): As we create each GCThread, we increment the m_numberOfActiveGCThreads
+ counter. When we are done creating the threads, we wait until they're all waiting for the next GCPhase. This prevents
+ us from leaving some GCThreads behind during the first GCPhase, which could hurt us on our very short-running
+ benchmarks (e.g. SunSpider).
+ (JSC::GCThreadSharedData::~GCThreadSharedData):
+ (JSC::GCThreadSharedData::startNextPhase): We atomically swap the two flags, m_gcThreadsShouldWait and m_currentPhase,
+ so that if the threads finish very quickly, they will wait until the main thread is ready to end the current phase.
+ (JSC::GCThreadSharedData::endCurrentPhase): Here atomically we swap the two flags again to allow the threads to
+ advance to waiting on the next GCPhase. We wait until all of the GCThreads have settled into the second wait loop
+ before allowing the main thread to continue. This prevents us from leaving one of the GCThreads stuck in the first
+ wait loop if we were to call startNextPhase() before it had time to wake up and move on to the second wait loop.
+ (JSC):
+ (JSC::GCThreadSharedData::didStartMarking): We now use startNextPhase() to properly swap the flags.
+ (JSC::GCThreadSharedData::didFinishMarking): Ditto for endCurrentPhase().
+ (JSC::GCThreadSharedData::didStartCopying): Ditto.
+ (JSC::GCThreadSharedData::didFinishCopying): Ditto.
+ * heap/GCThreadSharedData.h:
+ (GCThreadSharedData):
+ * heap/Heap.cpp:
+ (JSC::Heap::copyBackingStores): No reason to use the extra reference.
+
+2012-10-18 Pablo Flouret <pablof@motorola.com>
+
+ Implement css3-conditional's @supports rule
+ https://bugs.webkit.org/show_bug.cgi?id=86146
+
+ Reviewed by Antti Koivisto.
+
+ * Configurations/FeatureDefines.xcconfig:
+ Add an ENABLE_CSS3_CONDITIONAL_RULES flag.
+
+2012-10-18 Michael Saboff <msaboff@apple.com>
+
+ Make conversion between JSStringRef and WKStringRef work without character size conversions
+ https://bugs.webkit.org/show_bug.cgi?id=99727
+
+ Reviewed by Anders Carlsson.
+
+ Export the string() method for use in WebKit.
+
+ * API/OpaqueJSString.h:
+ (OpaqueJSString::string):
+
+2012-10-18 Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
+
+ [CMake] Avoid unnecessarily running the LLInt generation commands.
+ https://bugs.webkit.org/show_bug.cgi?id=99708
+
+ Reviewed by Rob Buis.
+
+ As described in the comments in the change itself, in some cases
+ the Ruby generation scripts used when LLInt is on would each be
+ run twice in every build even if nothing had changed.
+
+ Fix that by not setting the OBJECT_DEPENDS property of some source
+ files to depend on the generated headers; instead, they are now
+ just part of the final binaries/libraries which use them.
+
+ * CMakeLists.txt:
+
+2012-10-17 Zoltan Horvath <zoltan@webkit.org>
+
+ Remove the JSHeap memory measurement of the PageLoad performacetests since it creates bogus JSGlobalDatas
+ https://bugs.webkit.org/show_bug.cgi?id=99609
+
+ Reviewed by Ryosuke Niwa.
+
+ Remove the implementation since it creates bogus JSGlobalDatas in the layout tests.
+
+ * heap/HeapStatistics.cpp:
+ (JSC):
+ * heap/HeapStatistics.h:
+ (HeapStatistics):
+
+2012-10-17 Sam Weinig <sam@webkit.org>
+
+ Attempt to fix the build.
+
+ * bytecode/GlobalResolveInfo.h: Copied from bytecode/GlobalResolveInfo.h.
+
+2012-10-17 Filip Pizlo <fpizlo@apple.com>
+
+ REGRESSION (r130826 or r130828): Twitter top bar is dysfunctional
+ https://bugs.webkit.org/show_bug.cgi?id=99577
+ <rdar://problem/12518883>
+
+ Reviewed by Mark Hahnenberg.
+
+ It turns out that it's a good idea to maintain the invariants of your object model, such as that
+ elements past publicLength should have the hole value.
+
+ * dfg/DFGGraph.cpp:
+ (JSC::DFG::Graph::dump):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2012-10-17 Anders Carlsson <andersca@apple.com>
+
+ Clean up Vector.h
+ https://bugs.webkit.org/show_bug.cgi?id=99622
+
+ Reviewed by Benjamin Poulain.
+
+ Fix fallout from removing std::max and std::min using declarations.
+
+ * runtime/StringPrototype.cpp:
+ (JSC::jsSpliceSubstrings):
+ (JSC::jsSpliceSubstringsWithSeparators):
+ (JSC::stringProtoFuncIndexOf):
+ * yarr/YarrPattern.cpp:
+ (JSC::Yarr::YarrPatternConstructor::setupDisjunctionOffsets):
+
+2012-10-17 Oliver Hunt <oliver@apple.com>
+
+ Committing new files is so overrated.
+
+ * bytecode/ResolveOperation.h: Added.
+ (JSC):
+ (JSC::ResolveOperation::getAndReturnScopedVar):
+ (JSC::ResolveOperation::checkForDynamicEntriesBeforeGlobalScope):
+ (ResolveOperation):
+ (JSC::ResolveOperation::getAndReturnGlobalVar):
+ (JSC::ResolveOperation::getAndReturnGlobalProperty):
+ (JSC::ResolveOperation::resolveFail):
+ (JSC::ResolveOperation::skipTopScopeNode):
+ (JSC::ResolveOperation::skipScopes):
+ (JSC::ResolveOperation::returnGlobalObjectAsBase):
+ (JSC::ResolveOperation::setBaseToGlobal):
+ (JSC::ResolveOperation::setBaseToUndefined):
+ (JSC::ResolveOperation::setBaseToScope):
+ (JSC::ResolveOperation::returnScopeAsBase):
+ (JSC::PutToBaseOperation::PutToBaseOperation):
+
+2012-10-17 Michael Saboff <msaboff@apple.com>
+
+ StringPrototype::jsSpliceSubstringsWithSeparators() doesn't optimally handle 8 bit strings
+ https://bugs.webkit.org/show_bug.cgi?id=99230
+
+ Reviewed by Geoffrey Garen.
+
+ Added code to select characters8() or characters16() on the not all 8 bit path for both the
+ processing of the source and the separators.
+
+ * runtime/StringPrototype.cpp:
+ (JSC::jsSpliceSubstringsWithSeparators):
+
+2012-10-17 Filip Pizlo <fpizlo@apple.com>
+
+ Array and object allocations via 'new Object' or 'new Array' should be inlined in bytecode to allow allocation site profiling
+ https://bugs.webkit.org/show_bug.cgi?id=99557
+
+ Reviewed by Geoffrey Garen.
+
+ Removed an inaccurate and misleading comment as per Geoff's review. (I forgot
+ to make this change as part of http://trac.webkit.org/changeset/131644).
+
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::FunctionCallResolveNode::emitBytecode):
+
+2012-10-17 Oliver Hunt <oliver@apple.com>
+
+ Bytecode should not have responsibility for determining how to perform non-local resolves
+ https://bugs.webkit.org/show_bug.cgi?id=99349
+
+ Reviewed by Gavin Barraclough.
+
+ This patch removes lexical analysis from the bytecode generation. This allows
+ us to delay lookup of a non-local variables until the lookup is actually necessary,
+ and simplifies a lot of the resolve logic in BytecodeGenerator.
+
+ Once a lookup is performed we cache the lookup information in a set of out-of-line
+ buffers in CodeBlock. This allows subsequent lookups to avoid unnecessary hashing,
+ etc, and allows the respective JITs to recreated optimal lookup code.
+
+ This is currently still a performance regression in LLInt, but most of the remaining
+ regression is caused by a lot of indirection that I'll remove in future work, as well
+ as some work necessary to allow LLInt to perform in line instruction repatching.
+ We will also want to improve the behaviour of the baseline JIT for some of the lookup
+ operations, however this patch was getting quite large already so I'm landing it now
+ that we've reached the bar of "performance-neutral".
+
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::printStructures):
+ (JSC::CodeBlock::dump):
+ (JSC::CodeBlock::CodeBlock):
+ (JSC::CodeBlock::visitStructures):
+ (JSC):
+ (JSC::CodeBlock::finalizeUnconditionally):
+ (JSC::CodeBlock::shrinkToFit):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::addResolve):
+ (JSC::CodeBlock::addPutToBase):
+ (CodeBlock):
+ (JSC::CodeBlock::resolveOperations):
+ (JSC::CodeBlock::putToBaseOperation):
+ (JSC::CodeBlock::numberOfResolveOperations):
+ (JSC::CodeBlock::numberOfPutToBaseOperations):
+ (JSC::CodeBlock::addPropertyAccessInstruction):
+ (JSC::CodeBlock::globalObjectConstant):
+ (JSC::CodeBlock::setGlobalObjectConstant):
+ * bytecode/GlobalResolveInfo.h: Removed.
+ * bytecode/Opcode.h:
+ (JSC):
+ (JSC::padOpcodeName):
+ * bytecode/ResolveGlobalStatus.cpp:
+ (JSC::computeForStructure):
+ (JSC::ResolveGlobalStatus::computeFor):
+ * bytecode/ResolveGlobalStatus.h:
+ (JSC):
+ (ResolveGlobalStatus):
+ * bytecode/ResolveOperation.h: Added.
+ The new types and logic we use to perform the cached lookups.
+ (JSC):
+ (ResolveOperation):
+ (JSC::ResolveOperation::getAndReturnScopedVar):
+ (JSC::ResolveOperation::checkForDynamicEntriesBeforeGlobalScope):
+ (JSC::ResolveOperation::getAndReturnGlobalVar):
+ (JSC::ResolveOperation::getAndReturnGlobalProperty):
+ (JSC::ResolveOperation::resolveFail):
+ (JSC::ResolveOperation::skipTopScopeNode):
+ (JSC::ResolveOperation::skipScopes):
+ (JSC::ResolveOperation::returnGlobalObjectAsBase):
+ (JSC::ResolveOperation::setBaseToGlobal):
+ (JSC::ResolveOperation::setBaseToUndefined):
+ (JSC::ResolveOperation::setBaseToScope):
+ (JSC::ResolveOperation::returnScopeAsBase):
+ (JSC::PutToBaseOperation::PutToBaseOperation):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::ResolveResult::checkValidity):
+ (JSC):
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ (JSC::BytecodeGenerator::resolve):
+ (JSC::BytecodeGenerator::resolveConstDecl):
+ (JSC::BytecodeGenerator::shouldAvoidResolveGlobal):
+ (JSC::BytecodeGenerator::emitResolve):
+ (JSC::BytecodeGenerator::emitResolveBase):
+ (JSC::BytecodeGenerator::emitResolveBaseForPut):
+ (JSC::BytecodeGenerator::emitResolveWithBaseForPut):
+ (JSC::BytecodeGenerator::emitResolveWithThis):
+ (JSC::BytecodeGenerator::emitGetLocalVar):
+ (JSC::BytecodeGenerator::emitInitGlobalConst):
+ (JSC::BytecodeGenerator::emitPutToBase):
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::ResolveResult::registerResolve):
+ (JSC::ResolveResult::dynamicResolve):
+ (ResolveResult):
+ (JSC::ResolveResult::ResolveResult):
+ (JSC):
+ (NonlocalResolveInfo):
+ (JSC::NonlocalResolveInfo::NonlocalResolveInfo):
+ (JSC::NonlocalResolveInfo::~NonlocalResolveInfo):
+ (JSC::NonlocalResolveInfo::resolved):
+ (JSC::NonlocalResolveInfo::put):
+ (BytecodeGenerator):
+ (JSC::BytecodeGenerator::getResolveOperations):
+ (JSC::BytecodeGenerator::getResolveWithThisOperations):
+ (JSC::BytecodeGenerator::getResolveBaseOperations):
+ (JSC::BytecodeGenerator::getResolveBaseForPutOperations):
+ (JSC::BytecodeGenerator::getResolveWithBaseForPutOperations):
+ (JSC::BytecodeGenerator::getPutToBaseOperation):
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::ResolveNode::isPure):
+ (JSC::FunctionCallResolveNode::emitBytecode):
+ (JSC::PostfixNode::emitResolve):
+ (JSC::PrefixNode::emitResolve):
+ (JSC::ReadModifyResolveNode::emitBytecode):
+ (JSC::AssignResolveNode::emitBytecode):
+ (JSC::ConstDeclNode::emitCodeSingle):
+ (JSC::ForInNode::emitBytecode):
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGByteCodeParser.cpp:
+ (ByteCodeParser):
+ (InlineStackEntry):
+ (JSC::DFG::ByteCodeParser::handleGetByOffset):
+ (DFG):
+ (JSC::DFG::ByteCodeParser::parseResolveOperations):
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
+ * dfg/DFGCapabilities.h:
+ (JSC::DFG::canCompileResolveOperations):
+ (DFG):
+ (JSC::DFG::canCompilePutToBaseOperation):
+ (JSC::DFG::canCompileOpcode):
+ (JSC::DFG::canInlineOpcode):
+ * dfg/DFGGraph.h:
+ (ResolveGlobalData):
+ (ResolveOperationData):
+ (DFG):
+ (PutToBaseOperationData):
+ (Graph):
+ * dfg/DFGNode.h:
+ (JSC::DFG::Node::hasIdentifier):
+ (JSC::DFG::Node::resolveOperationsDataIndex):
+ (Node):
+ * dfg/DFGNodeType.h:
+ (DFG):
+ * dfg/DFGOSRExit.cpp:
+ (JSC::DFG::OSRExit::OSRExit):
+ * dfg/DFGOSRExit.h:
+ (OSRExit):
+ * dfg/DFGOSRExitCompiler.cpp:
+ * dfg/DFGOSRExitCompiler32_64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGOSRExitCompiler64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGOperations.h:
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGRepatch.cpp:
+ (JSC::DFG::tryCacheGetByID):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::convertLastOSRExitToForward):
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::resolveOperations):
+ (SpeculativeJIT):
+ (JSC::DFG::SpeculativeJIT::putToBaseOperation):
+ (JSC::DFG::SpeculativeJIT::callOperation):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGStructureCheckHoistingPhase.cpp:
+ (JSC::DFG::StructureCheckHoistingPhase::run):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ (JSC::JIT::privateCompileSlowCases):
+ * jit/JIT.h:
+ (JIT):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_put_to_base):
+ (JSC):
+ (JSC::JIT::emit_resolve_operations):
+ (JSC::JIT::emitSlow_link_resolve_operations):
+ (JSC::JIT::emit_op_resolve):
+ (JSC::JIT::emitSlow_op_resolve):
+ (JSC::JIT::emit_op_resolve_base):
+ (JSC::JIT::emitSlow_op_resolve_base):
+ (JSC::JIT::emit_op_resolve_with_base):
+ (JSC::JIT::emitSlow_op_resolve_with_base):
+ (JSC::JIT::emit_op_resolve_with_this):
+ (JSC::JIT::emitSlow_op_resolve_with_this):
+ (JSC::JIT::emitSlow_op_put_to_base):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::emit_op_put_to_base):
+ (JSC):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_init_global_const):
+ (JSC::JIT::emit_op_init_global_const_check):
+ (JSC::JIT::emitSlow_op_init_global_const_check):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::emit_op_init_global_const):
+ (JSC::JIT::emit_op_init_global_const_check):
+ (JSC::JIT::emitSlow_op_init_global_const_check):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ (JSC):
+ * jit/JITStubs.h:
+ * llint/LLIntSlowPaths.cpp:
+ (LLInt):
+ (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+ * llint/LLIntSlowPaths.h:
+ (LLInt):
+ * llint/LowLevelInterpreter.asm:
+ * llint/LowLevelInterpreter32_64.asm:
+ * llint/LowLevelInterpreter64.asm:
+ * runtime/JSScope.cpp:
+ (JSC::LookupResult::base):
+ (JSC::LookupResult::value):
+ (JSC::LookupResult::setBase):
+ (JSC::LookupResult::setValue):
+ (LookupResult):
+ (JSC):
+ (JSC::setPutPropertyAccessOffset):
+ (JSC::executeResolveOperations):
+ (JSC::JSScope::resolveContainingScopeInternal):
+ (JSC::JSScope::resolveContainingScope):
+ (JSC::JSScope::resolve):
+ (JSC::JSScope::resolveBase):
+ (JSC::JSScope::resolveWithBase):
+ (JSC::JSScope::resolveWithThis):
+ (JSC::JSScope::resolvePut):
+ (JSC::JSScope::resolveGlobal):
+ * runtime/JSScope.h:
+ (JSScope):
+ * runtime/JSVariableObject.cpp:
+ (JSC):
+ * runtime/JSVariableObject.h:
+ (JSVariableObject):
+ * runtime/Structure.h:
+ (JSC::Structure::propertyAccessesAreCacheable):
+ (Structure):
+
+2012-10-17 Filip Pizlo <fpizlo@apple.com>
+
+ Array and object allocations via 'new Object' or 'new Array' should be inlined in bytecode to allow allocation site profiling
+ https://bugs.webkit.org/show_bug.cgi?id=99557
+
+ Reviewed by Geoffrey Garen.
+
+ This uses the old jneq_ptr trick to allow for the bytecode to "see" that the
+ operation in question is what we almost certainly know it to be.
+
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ * bytecode/Opcode.h:
+ (JSC):
+ (JSC::padOpcodeName):
+ * bytecode/SpecialPointer.h:
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::emitCall):
+ (JSC::BytecodeGenerator::emitCallEval):
+ (JSC::BytecodeGenerator::expectedFunctionForIdentifier):
+ (JSC):
+ (JSC::BytecodeGenerator::emitExpectedFunctionSnippet):
+ (JSC::BytecodeGenerator::emitConstruct):
+ * bytecompiler/BytecodeGenerator.h:
+ (BytecodeGenerator):
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::NewExprNode::emitBytecode):
+ (JSC::FunctionCallValueNode::emitBytecode):
+ (JSC::FunctionCallResolveNode::emitBytecode):
+ (JSC::FunctionCallBracketNode::emitBytecode):
+ (JSC::FunctionCallDotNode::emitBytecode):
+ (JSC::CallFunctionCallDotNode::emitBytecode):
+ (JSC::ApplyFunctionCallDotNode::emitBytecode):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ * dfg/DFGCapabilities.h:
+ (JSC::DFG::canCompileOpcode):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ * jit/JIT.h:
+ (JIT):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_new_array_with_size):
+ (JSC):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ (JSC):
+ * jit/JITStubs.h:
+ * llint/LLIntSlowPaths.cpp:
+ (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+ (LLInt):
+ * llint/LLIntSlowPaths.h:
+ (LLInt):
+ * llint/LowLevelInterpreter.asm:
+ * runtime/ArrayConstructor.cpp:
+ (JSC::constructArrayWithSizeQuirk):
+ (JSC):
+ * runtime/ArrayConstructor.h:
+ (JSC):
+ * runtime/CommonIdentifiers.h:
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::reset):
+ (JSC):
+
+2012-10-17 Filip Pizlo <fpizlo@apple.com>
+
+ JIT op_get_by_pname should call cti_get_by_val_generic and not cti_get_by_val
+ https://bugs.webkit.org/show_bug.cgi?id=99631
+ <rdar://problem/12483221>
+
+ Reviewed by Mark Hahnenberg.
+
+ cti_get_by_val assumes that the return address has patching metadata associated with it, which won't
+ be true for op_get_by_pname. cti_get_by_val_generic makes no such assumptions.
+
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emitSlow_op_get_by_pname):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::emitSlow_op_get_by_pname):
+
+2012-10-17 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Block freeing thread should sleep indefinitely when there's no work to do
+ https://bugs.webkit.org/show_bug.cgi?id=98084
+
+ Reviewed by Geoffrey Garen.
+
+ r130212 didn't fully fix the problem.
+
+ * heap/BlockAllocator.cpp:
+ (JSC::BlockAllocator::blockFreeingThreadMain): We would just continue to the next iteration if
+ we found that we had zero blocks to copy. We should move the indefinite wait up to where that
+ check is done so that we properly detect the "no more blocks to copy, wait for more" condition.
+
+2012-10-16 Csaba Osztrogonác <ossy@webkit.org>
+
+ Unreviewed, rolling out r131516 and r131550.
+ http://trac.webkit.org/changeset/131516
+ http://trac.webkit.org/changeset/131550
+ https://bugs.webkit.org/show_bug.cgi?id=99349
+
+ It caused zillion different problem on different platforms
+
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/CodeBlock.cpp:
+ (JSC):
+ (JSC::isGlobalResolve):
+ (JSC::instructionOffsetForNth):
+ (JSC::printGlobalResolveInfo):
+ (JSC::CodeBlock::printStructures):
+ (JSC::CodeBlock::dump):
+ (JSC::CodeBlock::CodeBlock):
+ (JSC::CodeBlock::visitStructures):
+ (JSC::CodeBlock::finalizeUnconditionally):
+ (JSC::CodeBlock::hasGlobalResolveInfoAtBytecodeOffset):
+ (JSC::CodeBlock::globalResolveInfoForBytecodeOffset):
+ (JSC::CodeBlock::shrinkToFit):
+ * bytecode/CodeBlock.h:
+ (CodeBlock):
+ (JSC::CodeBlock::addGlobalResolveInstruction):
+ (JSC::CodeBlock::addGlobalResolveInfo):
+ (JSC::CodeBlock::globalResolveInfo):
+ (JSC::CodeBlock::numberOfGlobalResolveInfos):
+ (JSC::CodeBlock::globalResolveInfoCount):
+ * bytecode/GlobalResolveInfo.h: Copied from Source/JavaScriptCore/bytecode/ResolveGlobalStatus.cpp.
+ (JSC):
+ (JSC::GlobalResolveInfo::GlobalResolveInfo):
+ (GlobalResolveInfo):
+ (JSC::getGlobalResolveInfoBytecodeOffset):
+ * bytecode/Opcode.h:
+ (JSC):
+ (JSC::padOpcodeName):
+ * bytecode/ResolveGlobalStatus.cpp:
+ (JSC):
+ (JSC::computeForStructure):
+ (JSC::computeForLLInt):
+ (JSC::ResolveGlobalStatus::computeFor):
+ * bytecode/ResolveGlobalStatus.h:
+ (JSC):
+ (ResolveGlobalStatus):
+ * bytecode/ResolveOperation.h: Removed.
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::ResolveResult::checkValidity):
+ (JSC::ResolveResult::registerPointer):
+ (JSC):
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ (JSC::BytecodeGenerator::resolve):
+ (JSC::BytecodeGenerator::resolveConstDecl):
+ (JSC::BytecodeGenerator::shouldAvoidResolveGlobal):
+ (JSC::BytecodeGenerator::emitResolve):
+ (JSC::BytecodeGenerator::emitResolveBase):
+ (JSC::BytecodeGenerator::emitResolveBaseForPut):
+ (JSC::BytecodeGenerator::emitResolveWithBase):
+ (JSC::BytecodeGenerator::emitResolveWithThis):
+ (JSC::BytecodeGenerator::emitGetStaticVar):
+ (JSC::BytecodeGenerator::emitInitGlobalConst):
+ (JSC::BytecodeGenerator::emitPutStaticVar):
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::ResolveResult::registerResolve):
+ (JSC::ResolveResult::dynamicResolve):
+ (JSC::ResolveResult::lexicalResolve):
+ (JSC::ResolveResult::indexedGlobalResolve):
+ (JSC::ResolveResult::dynamicIndexedGlobalResolve):
+ (JSC::ResolveResult::globalResolve):
+ (JSC::ResolveResult::dynamicGlobalResolve):
+ (JSC::ResolveResult::type):
+ (JSC::ResolveResult::index):
+ (JSC::ResolveResult::depth):
+ (JSC::ResolveResult::globalObject):
+ (ResolveResult):
+ (JSC::ResolveResult::isStatic):
+ (JSC::ResolveResult::isIndexed):
+ (JSC::ResolveResult::isScoped):
+ (JSC::ResolveResult::isGlobal):
+ (JSC::ResolveResult::ResolveResult):
+ (BytecodeGenerator):
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::ResolveNode::isPure):
+ (JSC::FunctionCallResolveNode::emitBytecode):
+ (JSC::PostfixNode::emitResolve):
+ (JSC::PrefixNode::emitResolve):
+ (JSC::ReadModifyResolveNode::emitBytecode):
+ (JSC::AssignResolveNode::emitBytecode):
+ (JSC::ConstDeclNode::emitCodeSingle):
+ (JSC::ForInNode::emitBytecode):
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGByteCodeParser.cpp:
+ (ByteCodeParser):
+ (InlineStackEntry):
+ (JSC::DFG::ByteCodeParser::handleGetByOffset):
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
+ * dfg/DFGCapabilities.h:
+ (JSC::DFG::canCompileOpcode):
+ (JSC::DFG::canInlineOpcode):
+ * dfg/DFGGraph.h:
+ (ResolveGlobalData):
+ (DFG):
+ (Graph):
+ * dfg/DFGNode.h:
+ (JSC::DFG::Node::hasIdentifier):
+ * dfg/DFGNodeType.h:
+ (DFG):
+ * dfg/DFGOSRExit.cpp:
+ (JSC::DFG::OSRExit::OSRExit):
+ * dfg/DFGOSRExit.h:
+ (OSRExit):
+ * dfg/DFGOSRExitCompiler.cpp:
+ * dfg/DFGOSRExitCompiler32_64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGOSRExitCompiler64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGOperations.h:
+ (JSC):
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGRepatch.cpp:
+ (JSC::DFG::tryCacheGetByID):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::convertLastOSRExitToForward):
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::callOperation):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGStructureCheckHoistingPhase.cpp:
+ (JSC::DFG::StructureCheckHoistingPhase::run):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ (JSC::JIT::privateCompileSlowCases):
+ * jit/JIT.h:
+ (JIT):
+ (JSC::JIT::emit_op_get_global_var_watchable):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_resolve):
+ (JSC):
+ (JSC::JIT::emit_op_resolve_base):
+ (JSC::JIT::emit_op_resolve_skip):
+ (JSC::JIT::emit_op_resolve_global):
+ (JSC::JIT::emitSlow_op_resolve_global):
+ (JSC::JIT::emit_op_resolve_with_base):
+ (JSC::JIT::emit_op_resolve_with_this):
+ (JSC::JIT::emit_op_resolve_global_dynamic):
+ (JSC::JIT::emitSlow_op_resolve_global_dynamic):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::emit_op_resolve):
+ (JSC):
+ (JSC::JIT::emit_op_resolve_base):
+ (JSC::JIT::emit_op_resolve_skip):
+ (JSC::JIT::emit_op_resolve_global):
+ (JSC::JIT::emitSlow_op_resolve_global):
+ (JSC::JIT::emit_op_resolve_with_base):
+ (JSC::JIT::emit_op_resolve_with_this):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_get_scoped_var):
+ (JSC):
+ (JSC::JIT::emit_op_put_scoped_var):
+ (JSC::JIT::emit_op_get_global_var):
+ (JSC::JIT::emit_op_put_global_var):
+ (JSC::JIT::emit_op_put_global_var_check):
+ (JSC::JIT::emitSlow_op_put_global_var_check):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::emit_op_get_scoped_var):
+ (JSC):
+ (JSC::JIT::emit_op_put_scoped_var):
+ (JSC::JIT::emit_op_get_global_var):
+ (JSC::JIT::emit_op_put_global_var):
+ (JSC::JIT::emit_op_put_global_var_check):
+ (JSC::JIT::emitSlow_op_put_global_var_check):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ (JSC):
+ * jit/JITStubs.h:
+ * llint/LLIntSlowPaths.cpp:
+ (LLInt):
+ (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+ * llint/LLIntSlowPaths.h:
+ (LLInt):
+ * llint/LowLevelInterpreter.asm:
+ * llint/LowLevelInterpreter32_64.asm:
+ * llint/LowLevelInterpreter64.asm:
+ * runtime/JSScope.cpp:
+ (JSC::JSScope::resolve):
+ (JSC::JSScope::resolveSkip):
+ (JSC::JSScope::resolveGlobal):
+ (JSC::JSScope::resolveGlobalDynamic):
+ (JSC::JSScope::resolveBase):
+ (JSC::JSScope::resolveWithBase):
+ (JSC::JSScope::resolveWithThis):
+ * runtime/JSScope.h:
+ (JSScope):
+ * runtime/JSVariableObject.cpp:
+ * runtime/JSVariableObject.h:
+ * runtime/Structure.h:
+
+2012-10-16 Dongwoo Joshua Im <dw.im@samsung.com>
+
+ [GTK] Fix build break - ResolveOperations.h is not in WebKit.
+ https://bugs.webkit.org/show_bug.cgi?id=99538
+
+ Unreviewed build fix.
+
+ There are some files including ResolveOperations.h which is not exist at all.
+
+ * GNUmakefile.list.am: s/ResolveOperations.h/ResolveOperation.h/
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: s/ResolveOperations.h/ResolveOperation.h/
+
+2012-10-16 Jian Li <jianli@chromium.org>
+
+ Rename feature define ENABLE_WIDGET_REGION to ENABLE_DRAGGBALE_REGION
+ https://bugs.webkit.org/show_bug.cgi?id=98975
+
+ Reviewed by Adam Barth.
+
+ Renaming is needed to better match with the draggable region code.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2012-10-15 Oliver Hunt <oliver@apple.com>
+
+ Bytecode should not have responsibility for determining how to perform non-local resolves
+ https://bugs.webkit.org/show_bug.cgi?id=99349
+
+ Reviewed by Gavin Barraclough.
+
+ This patch removes lexical analysis from the bytecode generation. This allows
+ us to delay lookup of a non-local variables until the lookup is actually necessary,
+ and simplifies a lot of the resolve logic in BytecodeGenerator.
+
+ Once a lookup is performed we cache the lookup information in a set of out-of-line
+ buffers in CodeBlock. This allows subsequent lookups to avoid unnecessary hashing,
+ etc, and allows the respective JITs to recreated optimal lookup code.
+
+ This is currently still a performance regression in LLInt, but most of the remaining
+ regression is caused by a lot of indirection that I'll remove in future work, as well
+ as some work necessary to allow LLInt to perform in line instruction repatching.
+ We will also want to improve the behaviour of the baseline JIT for some of the lookup
+ operations, however this patch was getting quite large already so I'm landing it now
+ that we've reached the bar of "performance-neutral".
+
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::printStructures):
+ (JSC::CodeBlock::dump):
+ (JSC::CodeBlock::CodeBlock):
+ (JSC::CodeBlock::visitStructures):
+ (JSC):
+ (JSC::CodeBlock::finalizeUnconditionally):
+ (JSC::CodeBlock::shrinkToFit):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::addResolve):
+ (JSC::CodeBlock::addPutToBase):
+ (CodeBlock):
+ (JSC::CodeBlock::resolveOperations):
+ (JSC::CodeBlock::putToBaseOperation):
+ (JSC::CodeBlock::numberOfResolveOperations):
+ (JSC::CodeBlock::numberOfPutToBaseOperations):
+ (JSC::CodeBlock::addPropertyAccessInstruction):
+ (JSC::CodeBlock::globalObjectConstant):
+ (JSC::CodeBlock::setGlobalObjectConstant):
+ * bytecode/GlobalResolveInfo.h: Removed.
+ * bytecode/Opcode.h:
+ (JSC):
+ (JSC::padOpcodeName):
+ * bytecode/ResolveGlobalStatus.cpp:
+ (JSC::computeForStructure):
+ (JSC::ResolveGlobalStatus::computeFor):
+ * bytecode/ResolveGlobalStatus.h:
+ (JSC):
+ (ResolveGlobalStatus):
+ * bytecode/ResolveOperation.h: Added.
+ The new types and logic we use to perform the cached lookups.
+ (JSC):
+ (ResolveOperation):
+ (JSC::ResolveOperation::getAndReturnScopedVar):
+ (JSC::ResolveOperation::checkForDynamicEntriesBeforeGlobalScope):
+ (JSC::ResolveOperation::getAndReturnGlobalVar):
+ (JSC::ResolveOperation::getAndReturnGlobalProperty):
+ (JSC::ResolveOperation::resolveFail):
+ (JSC::ResolveOperation::skipTopScopeNode):
+ (JSC::ResolveOperation::skipScopes):
+ (JSC::ResolveOperation::returnGlobalObjectAsBase):
+ (JSC::ResolveOperation::setBaseToGlobal):
+ (JSC::ResolveOperation::setBaseToUndefined):
+ (JSC::ResolveOperation::setBaseToScope):
+ (JSC::ResolveOperation::returnScopeAsBase):
+ (JSC::PutToBaseOperation::PutToBaseOperation):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::ResolveResult::checkValidity):
+ (JSC):
+ (JSC::BytecodeGenerator::BytecodeGenerator):
+ (JSC::BytecodeGenerator::resolve):
+ (JSC::BytecodeGenerator::resolveConstDecl):
+ (JSC::BytecodeGenerator::shouldAvoidResolveGlobal):
+ (JSC::BytecodeGenerator::emitResolve):
+ (JSC::BytecodeGenerator::emitResolveBase):
+ (JSC::BytecodeGenerator::emitResolveBaseForPut):
+ (JSC::BytecodeGenerator::emitResolveWithBaseForPut):
+ (JSC::BytecodeGenerator::emitResolveWithThis):
+ (JSC::BytecodeGenerator::emitGetLocalVar):
+ (JSC::BytecodeGenerator::emitInitGlobalConst):
+ (JSC::BytecodeGenerator::emitPutToBase):
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::ResolveResult::registerResolve):
+ (JSC::ResolveResult::dynamicResolve):
+ (ResolveResult):
+ (JSC::ResolveResult::ResolveResult):
+ (JSC):
+ (NonlocalResolveInfo):
+ (JSC::NonlocalResolveInfo::NonlocalResolveInfo):
+ (JSC::NonlocalResolveInfo::~NonlocalResolveInfo):
+ (JSC::NonlocalResolveInfo::resolved):
+ (JSC::NonlocalResolveInfo::put):
+ (BytecodeGenerator):
+ (JSC::BytecodeGenerator::getResolveOperations):
+ (JSC::BytecodeGenerator::getResolveWithThisOperations):
+ (JSC::BytecodeGenerator::getResolveBaseOperations):
+ (JSC::BytecodeGenerator::getResolveBaseForPutOperations):
+ (JSC::BytecodeGenerator::getResolveWithBaseForPutOperations):
+ (JSC::BytecodeGenerator::getPutToBaseOperation):
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::ResolveNode::isPure):
+ (JSC::FunctionCallResolveNode::emitBytecode):
+ (JSC::PostfixNode::emitResolve):
+ (JSC::PrefixNode::emitResolve):
+ (JSC::ReadModifyResolveNode::emitBytecode):
+ (JSC::AssignResolveNode::emitBytecode):
+ (JSC::ConstDeclNode::emitCodeSingle):
+ (JSC::ForInNode::emitBytecode):
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGByteCodeParser.cpp:
+ (ByteCodeParser):
+ (InlineStackEntry):
+ (JSC::DFG::ByteCodeParser::handleGetByOffset):
+ (DFG):
+ (JSC::DFG::ByteCodeParser::parseResolveOperations):
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
+ * dfg/DFGCapabilities.h:
+ (JSC::DFG::canCompileResolveOperations):
+ (DFG):
+ (JSC::DFG::canCompilePutToBaseOperation):
+ (JSC::DFG::canCompileOpcode):
+ (JSC::DFG::canInlineOpcode):
+ * dfg/DFGGraph.h:
+ (ResolveGlobalData):
+ (ResolveOperationData):
+ (DFG):
+ (PutToBaseOperationData):
+ (Graph):
+ * dfg/DFGNode.h:
+ (JSC::DFG::Node::hasIdentifier):
+ (JSC::DFG::Node::resolveOperationsDataIndex):
+ (Node):
+ * dfg/DFGNodeType.h:
+ (DFG):
+ * dfg/DFGOSRExit.cpp:
+ (JSC::DFG::OSRExit::OSRExit):
+ * dfg/DFGOSRExit.h:
+ (OSRExit):
+ * dfg/DFGOSRExitCompiler.cpp:
+ * dfg/DFGOSRExitCompiler32_64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGOSRExitCompiler64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGOperations.h:
+ * dfg/DFGPredictionPropagationPhase.cpp:
+ (JSC::DFG::PredictionPropagationPhase::propagate):
+ * dfg/DFGRepatch.cpp:
+ (JSC::DFG::tryCacheGetByID):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::convertLastOSRExitToForward):
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::resolveOperations):
+ (SpeculativeJIT):
+ (JSC::DFG::SpeculativeJIT::putToBaseOperation):
+ (JSC::DFG::SpeculativeJIT::callOperation):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGStructureCheckHoistingPhase.cpp:
+ (JSC::DFG::StructureCheckHoistingPhase::run):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileMainPass):
+ (JSC::JIT::privateCompileSlowCases):
+ * jit/JIT.h:
+ (JIT):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emit_op_put_to_base):
+ (JSC):
+ (JSC::JIT::emit_resolve_operations):
+ (JSC::JIT::emitSlow_link_resolve_operations):
+ (JSC::JIT::emit_op_resolve):
+ (JSC::JIT::emitSlow_op_resolve):
+ (JSC::JIT::emit_op_resolve_base):
+ (JSC::JIT::emitSlow_op_resolve_base):
+ (JSC::JIT::emit_op_resolve_with_base):
+ (JSC::JIT::emitSlow_op_resolve_with_base):
+ (JSC::JIT::emit_op_resolve_with_this):
+ (JSC::JIT::emitSlow_op_resolve_with_this):
+ (JSC::JIT::emitSlow_op_put_to_base):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::emit_op_put_to_base):
+ (JSC):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_init_global_const):
+ (JSC::JIT::emit_op_init_global_const_check):
+ (JSC::JIT::emitSlow_op_init_global_const_check):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::emit_op_init_global_const):
+ (JSC::JIT::emit_op_init_global_const_check):
+ (JSC::JIT::emitSlow_op_init_global_const_check):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ (JSC):
+ * jit/JITStubs.h:
+ * llint/LLIntSlowPaths.cpp:
+ (LLInt):
+ (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+ * llint/LLIntSlowPaths.h:
+ (LLInt):
+ * llint/LowLevelInterpreter.asm:
+ * llint/LowLevelInterpreter32_64.asm:
+ * llint/LowLevelInterpreter64.asm:
+ * runtime/JSScope.cpp:
+ (JSC::LookupResult::base):
+ (JSC::LookupResult::value):
+ (JSC::LookupResult::setBase):
+ (JSC::LookupResult::setValue):
+ (LookupResult):
+ (JSC):
+ (JSC::setPutPropertyAccessOffset):
+ (JSC::executeResolveOperations):
+ (JSC::JSScope::resolveContainingScopeInternal):
+ (JSC::JSScope::resolveContainingScope):
+ (JSC::JSScope::resolve):
+ (JSC::JSScope::resolveBase):
+ (JSC::JSScope::resolveWithBase):
+ (JSC::JSScope::resolveWithThis):
+ (JSC::JSScope::resolvePut):
+ (JSC::JSScope::resolveGlobal):
+ * runtime/JSScope.h:
+ (JSScope):
+ * runtime/JSVariableObject.cpp:
+ (JSC):
+ * runtime/JSVariableObject.h:
+ (JSVariableObject):
+ * runtime/Structure.h:
+ (JSC::Structure::propertyAccessesAreCacheable):
+ (Structure):
+
+2012-10-16 Filip Pizlo <fpizlo@apple.com>
+
+ Accidental switch fall-through in DFG::FixupPhase
+ https://bugs.webkit.org/show_bug.cgi?id=96956
+ <rdar://problem/12313242>
+
+ Reviewed by Mark Hahnenberg.
+
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+
+2012-10-16 Filip Pizlo <fpizlo@apple.com>
+
+ GetScopedVar CSE matches dead GetScopedVar's leading to IR corruption
+ https://bugs.webkit.org/show_bug.cgi?id=99470
+ <rdar://problem/12363698>
+
+ Reviewed by Mark Hahnenberg.
+
+ All it takes is to follow the "if (!shouldGenerate) continue" idiom and everything will be OK.
+
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::globalVarLoadElimination):
+ (JSC::DFG::CSEPhase::scopedVarLoadElimination):
+ (JSC::DFG::CSEPhase::globalVarWatchpointElimination):
+ (JSC::DFG::CSEPhase::getByValLoadElimination):
+ (JSC::DFG::CSEPhase::checkStructureElimination):
+ (JSC::DFG::CSEPhase::structureTransitionWatchpointElimination):
+ (JSC::DFG::CSEPhase::getByOffsetLoadElimination):
+
+2012-10-16 Dima Gorbik <dgorbik@apple.com>
+
+ Remove Platform.h include from the header files.
+ https://bugs.webkit.org/show_bug.cgi?id=98665
+
+ Reviewed by Eric Seidel.
+
+ We don't want other clients that include WebKit headers to know about Platform.h.
+
+ * API/tests/minidom.c:
+ * API/tests/testapi.c:
+
+2012-10-16 Balazs Kilvady <kilvadyb@homejinni.com>
+
+ Add missing MIPS functions to assembler.
+ https://bugs.webkit.org/show_bug.cgi?id=98856
+
+ Reviewed by Oliver Hunt.
+
+ Implement missing functions in MacroAssemblerMIPS and MIPSAssembler.
+
+ * assembler/MIPSAssembler.h:
+ (JSC::MIPSAssembler::lb):
+ (MIPSAssembler):
+ (JSC::MIPSAssembler::lh):
+ (JSC::MIPSAssembler::cvtds):
+ (JSC::MIPSAssembler::cvtsd):
+ (JSC::MIPSAssembler::vmov):
+ * assembler/MacroAssemblerMIPS.h:
+ (MacroAssemblerMIPS):
+ (JSC::MacroAssemblerMIPS::load8Signed):
+ (JSC::MacroAssemblerMIPS::load16Signed):
+ (JSC::MacroAssemblerMIPS::moveDoubleToInts):
+ (JSC::MacroAssemblerMIPS::moveIntsToDouble):
+ (JSC::MacroAssemblerMIPS::loadFloat):
+ (JSC::MacroAssemblerMIPS::loadDouble):
+ (JSC::MacroAssemblerMIPS::storeFloat):
+ (JSC::MacroAssemblerMIPS::storeDouble):
+ (JSC::MacroAssemblerMIPS::addDouble):
+ (JSC::MacroAssemblerMIPS::convertFloatToDouble):
+ (JSC::MacroAssemblerMIPS::convertDoubleToFloat):
+
+2012-10-16 Balazs Kilvady <kilvadyb@homejinni.com>
+
+ MIPS assembler coding-style fix.
+ https://bugs.webkit.org/show_bug.cgi?id=99359
+
+ Reviewed by Oliver Hunt.
+
+ Coding style fix of existing MIPS assembler header files.
+
+ * assembler/MIPSAssembler.h:
+ (JSC::MIPSAssembler::addiu):
+ (JSC::MIPSAssembler::addu):
+ (JSC::MIPSAssembler::subu):
+ (JSC::MIPSAssembler::mul):
+ (JSC::MIPSAssembler::andInsn):
+ (JSC::MIPSAssembler::andi):
+ (JSC::MIPSAssembler::nor):
+ (JSC::MIPSAssembler::orInsn):
+ (JSC::MIPSAssembler::ori):
+ (JSC::MIPSAssembler::xorInsn):
+ (JSC::MIPSAssembler::xori):
+ (JSC::MIPSAssembler::slt):
+ (JSC::MIPSAssembler::sltu):
+ (JSC::MIPSAssembler::sltiu):
+ (JSC::MIPSAssembler::sll):
+ (JSC::MIPSAssembler::sllv):
+ (JSC::MIPSAssembler::sra):
+ (JSC::MIPSAssembler::srav):
+ (JSC::MIPSAssembler::srl):
+ (JSC::MIPSAssembler::srlv):
+ (JSC::MIPSAssembler::lbu):
+ (JSC::MIPSAssembler::lw):
+ (JSC::MIPSAssembler::lwl):
+ (JSC::MIPSAssembler::lwr):
+ (JSC::MIPSAssembler::lhu):
+ (JSC::MIPSAssembler::sb):
+ (JSC::MIPSAssembler::sh):
+ (JSC::MIPSAssembler::sw):
+ (JSC::MIPSAssembler::addd):
+ (JSC::MIPSAssembler::subd):
+ (JSC::MIPSAssembler::muld):
+ (JSC::MIPSAssembler::divd):
+ (JSC::MIPSAssembler::lwc1):
+ (JSC::MIPSAssembler::ldc1):
+ (JSC::MIPSAssembler::swc1):
+ (JSC::MIPSAssembler::sdc1):
+ (MIPSAssembler):
+ (JSC::MIPSAssembler::relocateJumps):
+ (JSC::MIPSAssembler::linkWithOffset):
+ * assembler/MacroAssemblerMIPS.h:
+ (JSC::MacroAssemblerMIPS::add32):
+ (JSC::MacroAssemblerMIPS::and32):
+ (JSC::MacroAssemblerMIPS::sub32):
+ (MacroAssemblerMIPS):
+ (JSC::MacroAssemblerMIPS::load8):
+ (JSC::MacroAssemblerMIPS::load32):
+ (JSC::MacroAssemblerMIPS::load32WithUnalignedHalfWords):
+ (JSC::MacroAssemblerMIPS::load16):
+ (JSC::MacroAssemblerMIPS::store8):
+ (JSC::MacroAssemblerMIPS::store16):
+ (JSC::MacroAssemblerMIPS::store32):
+ (JSC::MacroAssemblerMIPS::nearCall):
+ (JSC::MacroAssemblerMIPS::test8):
+ (JSC::MacroAssemblerMIPS::test32):
+
+2012-10-16 Yuqiang Xian <yuqiang.xian@intel.com>
+
+ Refactor MacroAssembler interfaces to differentiate the pointer operands from the 64-bit integer operands
+ https://bugs.webkit.org/show_bug.cgi?id=99154
+
+ Reviewed by Gavin Barraclough.
+
+ In current JavaScriptCore implementation for JSVALUE64 platform (i.e.,
+ the X64 platform), we assume that the JSValue size is same to the
+ pointer size, and thus EncodedJSValue is simply type defined as a
+ "void*". In the JIT compiler, we also take this assumption and invoke
+ the same macro assembler interfaces for both JSValue and pointer
+ operands. We need to differentiate the operations on pointers from the
+ operations on JSValues, and let them invoking different macro
+ assembler interfaces. For example, we now use the interface of
+ "loadPtr" to load either a pointer or a JSValue, and we need to switch
+ to using "loadPtr" to load a pointer and some new "load64" interface
+ to load a JSValue. This would help us supporting other JSVALUE64
+ platforms where pointer size is not necessarily 64-bits, for example
+ x32 (bug #99153).
+
+ The major modification I made is to introduce the "*64" interfaces in
+ the MacroAssembler for those operations on JSValues, keep the "*Ptr"
+ interfaces for those operations on real pointers, and go through all
+ the JIT compiler code to correct the usage.
+
+ This is the first part of the work, i.e, to add the *64 interfaces to
+ the MacroAssembler.
+
+ * assembler/AbstractMacroAssembler.h: Add the Imm64 interfaces.
+ (AbstractMacroAssembler):
+ (JSC::AbstractMacroAssembler::TrustedImm64::TrustedImm64):
+ (TrustedImm64):
+ (JSC::AbstractMacroAssembler::Imm64::Imm64):
+ (Imm64):
+ (JSC::AbstractMacroAssembler::Imm64::asTrustedImm64):
+ * assembler/MacroAssembler.h: map <foo>Ptr methods to <foo>64 for X86_64.
+ (MacroAssembler):
+ (JSC::MacroAssembler::peek64):
+ (JSC::MacroAssembler::poke):
+ (JSC::MacroAssembler::poke64):
+ (JSC::MacroAssembler::addPtr):
+ (JSC::MacroAssembler::andPtr):
+ (JSC::MacroAssembler::negPtr):
+ (JSC::MacroAssembler::orPtr):
+ (JSC::MacroAssembler::rotateRightPtr):
+ (JSC::MacroAssembler::subPtr):
+ (JSC::MacroAssembler::xorPtr):
+ (JSC::MacroAssembler::loadPtr):
+ (JSC::MacroAssembler::loadPtrWithAddressOffsetPatch):
+ (JSC::MacroAssembler::loadPtrWithCompactAddressOffsetPatch):
+ (JSC::MacroAssembler::storePtr):
+ (JSC::MacroAssembler::storePtrWithAddressOffsetPatch):
+ (JSC::MacroAssembler::movePtrToDouble):
+ (JSC::MacroAssembler::moveDoubleToPtr):
+ (JSC::MacroAssembler::comparePtr):
+ (JSC::MacroAssembler::testPtr):
+ (JSC::MacroAssembler::branchPtr):
+ (JSC::MacroAssembler::branchTestPtr):
+ (JSC::MacroAssembler::branchAddPtr):
+ (JSC::MacroAssembler::branchSubPtr):
+ (JSC::MacroAssembler::shouldBlindDouble):
+ (JSC::MacroAssembler::shouldBlind):
+ (JSC::MacroAssembler::RotatedImm64::RotatedImm64):
+ (RotatedImm64):
+ (JSC::MacroAssembler::rotationBlindConstant):
+ (JSC::MacroAssembler::loadRotationBlindedConstant):
+ (JSC::MacroAssembler::move):
+ (JSC::MacroAssembler::and64):
+ (JSC::MacroAssembler::store64):
+ * assembler/MacroAssemblerX86Common.h:
+ (JSC::MacroAssemblerX86Common::shouldBlindForSpecificArch):
+ (MacroAssemblerX86Common):
+ (JSC::MacroAssemblerX86Common::move):
+ * assembler/MacroAssemblerX86_64.h: Add the <foo>64 methods for X86_64.
+ (JSC::MacroAssemblerX86_64::branchAdd32):
+ (JSC::MacroAssemblerX86_64::add64):
+ (MacroAssemblerX86_64):
+ (JSC::MacroAssemblerX86_64::and64):
+ (JSC::MacroAssemblerX86_64::neg64):
+ (JSC::MacroAssemblerX86_64::or64):
+ (JSC::MacroAssemblerX86_64::rotateRight64):
+ (JSC::MacroAssemblerX86_64::sub64):
+ (JSC::MacroAssemblerX86_64::xor64):
+ (JSC::MacroAssemblerX86_64::load64):
+ (JSC::MacroAssemblerX86_64::load64WithAddressOffsetPatch):
+ (JSC::MacroAssemblerX86_64::load64WithCompactAddressOffsetPatch):
+ (JSC::MacroAssemblerX86_64::store64):
+ (JSC::MacroAssemblerX86_64::store64WithAddressOffsetPatch):
+ (JSC::MacroAssemblerX86_64::move64ToDouble):
+ (JSC::MacroAssemblerX86_64::moveDoubleTo64):
+ (JSC::MacroAssemblerX86_64::compare64):
+ (JSC::MacroAssemblerX86_64::branch64):
+ (JSC::MacroAssemblerX86_64::branchTest64):
+ (JSC::MacroAssemblerX86_64::test64):
+ (JSC::MacroAssemblerX86_64::branchAdd64):
+ (JSC::MacroAssemblerX86_64::branchSub64):
+ (JSC::MacroAssemblerX86_64::branchPtrWithPatch):
+ (JSC::MacroAssemblerX86_64::storePtrWithPatch):
+
+2012-10-15 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Make CopiedSpace and MarkedSpace regions independent
+ https://bugs.webkit.org/show_bug.cgi?id=99222
+
+ Reviewed by Filip Pizlo.
+
+ Right now CopiedSpace and MarkedSpace have the same block size and share the same regions,
+ but there's no reason that they can't have different block sizes while still sharing the
+ same underlying regions. We should factor the two "used" lists of regions apart so that
+ MarkedBlocks and CopiedBlocks can be different sizes. Regions will still be a uniform size
+ so that when they become empty they may be shared between the CopiedSpace and the MarkedSpace,
+ since benchmarks indicate that sharing is a boon for performance.
+
+ * heap/BlockAllocator.cpp:
+ (JSC::BlockAllocator::BlockAllocator):
+ * heap/BlockAllocator.h:
+ (JSC):
+ (Region):
+ (JSC::Region::create): We now have a fixed size for Regions so that empty regions can continue to
+ be shared between the MarkedSpace and CopiedSpace. Once they are used for a specific type of block,
+ however, they can only be used for that type of block until they become empty again.
+ (JSC::Region::createCustomSize):
+ (JSC::Region::Region):
+ (JSC::Region::~Region):
+ (JSC::Region::reset):
+ (BlockAllocator):
+ (JSC::BlockAllocator::RegionSet::RegionSet):
+ (RegionSet):
+ (JSC::BlockAllocator::tryAllocateFromRegion): We change this function so that it correctly
+ moves blocks between empty, partial, and full lists.
+ (JSC::BlockAllocator::allocate):
+ (JSC::BlockAllocator::allocateCustomSize):
+ (JSC::BlockAllocator::deallocate): Ditto.
+ (JSC::CopiedBlock):
+ (JSC::MarkedBlock):
+ (JSC::BlockAllocator::regionSetFor): We use this so that we can use the same allocate/deallocate
+ functions with different RegionSets. We specialize the function for each type of block that we
+ want to allocate.
+ * heap/CopiedBlock.h:
+ (CopiedBlock):
+ * heap/CopiedSpace.h:
+ (CopiedSpace):
+ * heap/HeapBlock.h:
+ (HeapBlock):
+ * heap/MarkedBlock.cpp:
+ (JSC::MarkedBlock::MarkedBlock): For oversize MarkedBlocks, if the block size gets too big we can
+ underflow the endAtom, which will cause us to segfault when we try to sweep a block. If we're a
+ custom size MarkedBlock we need to calculate endAtom so it doesn't underflow.
+
+2012-10-14 Filip Pizlo <fpizlo@apple.com>
+
+ JIT::JIT fails to initialize all of its fields
+ https://bugs.webkit.org/show_bug.cgi?id=99283
+
+ Reviewed by Andreas Kling.
+
+ There were two groups of such fields, all of which are eventually initialized
+ prior to use inside of privateCompile(). But it's safer to make sure that they
+ are initialized in the constructor as well, since we may use the JIT to do a
+ stub compile without calling into privateCompile().
+
+ Unsigned index fields for dynamic repatching meta-data: this change
+ initializes them to UINT_MAX, so we should crash if we try to use those
+ indices without initializing them.
+
+ Boolean flags for value profiling: this change initializes them to false, so
+ we at worst turn off value profiling.
+
+ * jit/JIT.cpp:
+ (JSC::JIT::JIT):
+
+2012-10-15 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ We should avoid weakCompareAndSwap when parallel GC is disabled
+ https://bugs.webkit.org/show_bug.cgi?id=99331
+
+ Reviewed by Filip Pizlo.
+
+ CopiedBlock::reportLiveBytes and didEvacuateBytes uses weakCompareAndSwap, which some platforms
+ don't support. For platforms that don't have parallel GC enabled, we should just use a normal store.
+
+ * heap/CopiedBlock.h:
+ (JSC::CopiedBlock::reportLiveBytes):
+ (JSC::CopiedBlock::didEvacuateBytes):
+
+2012-10-15 Carlos Garcia Campos <cgarcia@igalia.com>
+
+ Unreviewed. Fix make distcheck.
+
+ * GNUmakefile.list.am: Add missing header file.
+
+2012-10-14 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should handle polymorphic array modes by eagerly transforming arrays into the most general applicable form
+ https://bugs.webkit.org/show_bug.cgi?id=99269
+
+ Reviewed by Geoffrey Garen.
+
+ This kills off a bunch of code for "polymorphic" array modes in the DFG. It should
+ also be a performance win for code that uses a lot of array storage arrays.
+
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGArrayMode.cpp:
+ (JSC::DFG::fromObserved):
+ (JSC::DFG::modeAlreadyChecked):
+ (JSC::DFG::modeToString):
+ * dfg/DFGArrayMode.h:
+ (DFG):
+ (JSC::DFG::modeUsesButterfly):
+ (JSC::DFG::modeIsJSArray):
+ (JSC::DFG::mayStoreToTail):
+ (JSC::DFG::mayStoreToHole):
+ (JSC::DFG::canCSEStorage):
+ (JSC::DFG::modeSupportsLength):
+ (JSC::DFG::benefitsFromStructureCheck):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::checkArray):
+ (JSC::DFG::FixupPhase::blessArrayOperation):
+ * dfg/DFGGraph.h:
+ (JSC::DFG::Graph::byValIsPure):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::jumpSlowForUnwantedArrayMode):
+ (JSC::DFG::SpeculativeJIT::checkArray):
+ (JSC::DFG::SpeculativeJIT::arrayify):
+ (DFG):
+ (JSC::DFG::SpeculativeJIT::compileGetArrayLength):
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::putByValWillNeedExtraRegister):
+ (SpeculativeJIT):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2012-10-14 Filip Pizlo <fpizlo@apple.com>
+
+ REGRESSION(126886): Fat binary builds don't know how to handle architecture variants to which the LLInt is agnostic
+ https://bugs.webkit.org/show_bug.cgi?id=99270
+
+ Reviewed by Geoffrey Garen.
+
+ The fix is to hash cons the offsets based on configuration index, not the offsets
+ themselves.
+
+ * offlineasm/offsets.rb:
+
+2012-10-13 Filip Pizlo <fpizlo@apple.com>
+
+ IndexingType should not have a bit for each type
+ https://bugs.webkit.org/show_bug.cgi?id=98997
+
+ Reviewed by Oliver Hunt.
+
+ Somewhat incidentally, the introduction of butterflies led to each indexing
+ type being represented by a unique bit. This is superficially nice since it
+ allows you to test if a structure corresponds to a particular indexing type
+ by saying !!(structure->indexingType() & TheType). But the downside is that
+ given the 8 bits we have for the m_indexingType field, that leaves only a
+ small number of possible indexing types if we have one per bit.
+
+ This changeset changes the indexing type to be:
+
+ Bit #1: Tells you if you're an array.
+
+ Bits #2 - #5: 16 possible indexing types, including the blank type for
+ objects that don't have indexed properties.
+
+ Bits #6-8: Auxiliary bits that we could use for other things. Currently we
+ just use one of those bits, for MayHaveIndexedAccessors.
+
+ This is performance-neutral, and is primarily intended to give us more
+ breathing room for introducing new inferred array modes.
+
+ * assembler/AbstractMacroAssembler.h:
+ (JSC::AbstractMacroAssembler::JumpList::jumps):
+ * assembler/MacroAssembler.h:
+ (MacroAssembler):
+ (JSC::MacroAssembler::patchableBranch32):
+ * assembler/MacroAssemblerARMv7.h:
+ (JSC::MacroAssemblerARMv7::patchableBranch32):
+ (MacroAssemblerARMv7):
+ * dfg/DFGArrayMode.cpp:
+ (JSC::DFG::modeAlreadyChecked):
+ * dfg/DFGRepatch.cpp:
+ (JSC::DFG::tryCacheGetByID):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::speculationCheck):
+ (JSC::DFG::SpeculativeJIT::forwardSpeculationCheck):
+ (JSC::DFG::SpeculativeJIT::jumpSlowForUnwantedArrayMode):
+ (DFG):
+ (JSC::DFG::SpeculativeJIT::checkArray):
+ (JSC::DFG::SpeculativeJIT::arrayify):
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::emitAllocateJSArray):
+ (JSC::JIT::chooseArrayMode):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_get_by_val):
+ (JSC::JIT::emitContiguousGetByVal):
+ (JSC::JIT::emitArrayStorageGetByVal):
+ (JSC::JIT::emit_op_put_by_val):
+ (JSC::JIT::emitContiguousPutByVal):
+ (JSC::JIT::emitArrayStoragePutByVal):
+ (JSC::JIT::privateCompilePatchGetArrayLength):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::emit_op_get_by_val):
+ (JSC::JIT::emitContiguousGetByVal):
+ (JSC::JIT::emitArrayStorageGetByVal):
+ (JSC::JIT::emit_op_put_by_val):
+ (JSC::JIT::emitContiguousPutByVal):
+ (JSC::JIT::emitArrayStoragePutByVal):
+ (JSC::JIT::privateCompilePatchGetArrayLength):
+ * llint/LowLevelInterpreter.asm:
+ * llint/LowLevelInterpreter32_64.asm:
+ * llint/LowLevelInterpreter64.asm:
+ * runtime/IndexingType.h:
+ (JSC):
+ (JSC::hasIndexedProperties):
+ (JSC::hasContiguous):
+ (JSC::hasFastArrayStorage):
+ (JSC::hasArrayStorage):
+ (JSC::shouldUseSlowPut):
+ * runtime/JSGlobalObject.cpp:
+ (JSC):
+ * runtime/StructureTransitionTable.h:
+ (JSC::newIndexingType):
+
+2012-10-14 Filip Pizlo <fpizlo@apple.com>
+
+ DFG structure check hoisting should attempt to ignore side effects and make transformations that are sound even in their presence
+ https://bugs.webkit.org/show_bug.cgi?id=99262
+
+ Reviewed by Oliver Hunt.
+
+ This hugely simplifies the structure check hoisting phase. It will no longer be necessary
+ to modify it when the effectfulness of operations changes. This also enables the hoister
+ to hoist effectful things in the future.
+
+ The downside is that the hoister may end up adding strictly more checks than were present
+ in the original code, if the code truly has a lot of side-effects. I don't see evidence
+ of this happening. This patch does have some speed-ups and some slow-downs, but is
+ neutral in the average, and the slow-downs do not appear to have more structure checks
+ than ToT.
+
+ * dfg/DFGStructureCheckHoistingPhase.cpp:
+ (JSC::DFG::StructureCheckHoistingPhase::run):
+ (JSC::DFG::StructureCheckHoistingPhase::noticeStructureCheck):
+ (StructureCheckHoistingPhase):
+ (CheckData):
+ (JSC::DFG::StructureCheckHoistingPhase::CheckData::CheckData):
+
+2012-10-14 Filip Pizlo <fpizlo@apple.com>
+
+ Fix the build of universal binary with ARMv7s of JavaScriptCore
+
+ * llint/LLIntOfflineAsmConfig.h:
+ * llint/LowLevelInterpreter.asm:
+
+2012-10-13 Filip Pizlo <fpizlo@apple.com>
+
+ Array length array profiling is broken in the baseline JIT
+ https://bugs.webkit.org/show_bug.cgi?id=99258
+
+ Reviewed by Oliver Hunt.
+
+ The code generator for array length stubs calls into
+ emitArrayProfilingSiteForBytecodeIndex(), which emits profiling only if
+ canBeOptimized() returns true. But m_canBeOptimized is only initialized during
+ full method compiles, so in a stub compile it may (or may not) be false, meaning
+ that we may, or may not, get meaningful profiling info.
+
+ This appeared to not affect too many programs since the LLInt has good array
+ length array profiling.
+
+ * jit/JIT.h:
+ (JSC::JIT::compilePatchGetArrayLength):
+
+2012-10-14 Patrick Gansterer <paroga@webkit.org>
+
+ Build fix for WinCE after r131089.
+
+ WinCE does not support getenv().
+
+ * runtime/Options.cpp:
+ (JSC::overrideOptionWithHeuristic):
+
+2012-10-12 Kangil Han <kangil.han@samsung.com>
+
+ Fix build error on DFGSpeculativeJIT32_64.cpp
+ https://bugs.webkit.org/show_bug.cgi?id=99234
+
+ Reviewed by Anders Carlsson.
+
+ Seems BUG 98608 causes build error on 32bit machine so fix it.
+
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2012-10-12 Filip Pizlo <fpizlo@apple.com>
+
+ Contiguous array allocation should always be inlined
+ https://bugs.webkit.org/show_bug.cgi?id=98608
+
+ Reviewed by Oliver Hunt and Mark Hahnenberg.
+
+ This inlines contiguous array allocation in the most obvious way possible.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * assembler/MacroAssembler.h:
+ (JSC::MacroAssembler::branchSubPtr):
+ (MacroAssembler):
+ * assembler/MacroAssemblerX86_64.h:
+ (JSC::MacroAssemblerX86_64::branchSubPtr):
+ (MacroAssemblerX86_64):
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGCCallHelpers.h:
+ (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
+ (CCallHelpers):
+ * dfg/DFGCallArrayAllocatorSlowPathGenerator.h: Added.
+ (DFG):
+ (CallArrayAllocatorSlowPathGenerator):
+ (JSC::DFG::CallArrayAllocatorSlowPathGenerator::CallArrayAllocatorSlowPathGenerator):
+ (JSC::DFG::CallArrayAllocatorSlowPathGenerator::generateInternal):
+ (CallArrayAllocatorWithVariableSizeSlowPathGenerator):
+ (JSC::DFG::CallArrayAllocatorWithVariableSizeSlowPathGenerator::CallArrayAllocatorWithVariableSizeSlowPathGenerator):
+ (JSC::DFG::CallArrayAllocatorWithVariableSizeSlowPathGenerator::generateInternal):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::emitAllocateJSArray):
+ (DFG):
+ (JSC::DFG::SpeculativeJIT::compileAllocatePropertyStorage):
+ (JSC::DFG::SpeculativeJIT::compileReallocatePropertyStorage):
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::callOperation):
+ (SpeculativeJIT):
+ (JSC::DFG::SpeculativeJIT::emitAllocateBasicStorage):
+ (JSC::DFG::SpeculativeJIT::emitAllocateBasicJSObject):
+ (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2012-10-12 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Race condition during CopyingPhase can lead to deadlock
+ https://bugs.webkit.org/show_bug.cgi?id=99226
+
+ Reviewed by Filip Pizlo.
+
+ The main thread calls startCopying() for each of the GCThreads at the beginning of the copy phase.
+ It then proceeds to start copying. If copying completes before one of the GCThreads wakes up, the
+ main thread will set m_currentPhase back to NoPhase, the GCThread will wake up, see that there's
+ nothing to do, and then it will go back to sleep without ever calling CopyVisitor::doneCopying()
+ to return its borrowed block to the CopiedSpace. CopiedSpace::doneCopying() will then sleep forever
+ waiting on the block.
+
+ The fix for this is to make sure we call CopiedSpace::doneCopying() on the main thread before we
+ call GCThreadSharedData::didFinishCopying(), which sets the m_currentPhase flag to NoPhase. This
+ way we will wait until all threads have woken up and given back their borrowed blocks before
+ clearing the flag.
+
+ * heap/Heap.cpp:
+ (JSC::Heap::copyBackingStores):
+
+2012-10-12 Anders Carlsson <andersca@apple.com>
+
+ Move macros from Parser.h to Parser.cpp
+ https://bugs.webkit.org/show_bug.cgi?id=99217
+
+ Reviewed by Andreas Kling.
+
+ There are a bunch of macros in Parser.h that are only used in Parser.cpp. Move them to Parser.cpp
+ so they won't pollute the global namespace.
+ * parser/Parser.cpp:
+ * parser/Parser.h:
+ (JSC):
+
+2012-10-12 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Another build fix after r131213
+
+ Added some symbol magic to placate the linker on some platforms.
+
+ * JavaScriptCore.order:
+
+2012-10-12 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Build fix after r131213
+
+ Removed an unused variable that was making compilers unhappy.
+
+ * heap/GCThread.cpp:
+ (JSC::GCThread::GCThread):
+ * heap/GCThread.h:
+ (GCThread):
+ * heap/GCThreadSharedData.cpp:
+ (JSC::GCThreadSharedData::GCThreadSharedData):
+
+2012-10-09 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Copying collection shouldn't require O(live bytes) memory overhead
+ https://bugs.webkit.org/show_bug.cgi?id=98792
+
+ Reviewed by Filip Pizlo.
+
+ Currently our copying collection occurs simultaneously with the marking phase. We'd like
+ to be able to reuse CopiedBlocks as soon as they become fully evacuated, but this is not
+ currently possible because we don't know the liveness statistics of each old CopiedBlock
+ until marking/copying has already finished. Instead, we have to allocate additional memory
+ from the OS to use as our working set of CopiedBlocks while copying. We then return the
+ fully evacuated old CopiedBlocks back to the block allocator, thus giving our copying phase
+ an O(live bytes) overhead.
+
+ To fix this, we should instead split the copying phase apart from the marking phase. This
+ way we have full liveness data for each CopiedBlock during the copying phase so that we
+ can reuse them the instant they become fully evacuated. With the additional liveness data
+ that each CopiedBlock accumulates, we can add some additional heuristics to the collector.
+ For example, we can calculate our global Heap fragmentation and only choose to do a copying
+ phase if that fragmentation exceeds some limit. As another example, we can skip copying
+ blocks that are already above a particular fragmentation limit, which allows older objects
+ to coalesce into blocks that are rarely copied.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * heap/CopiedBlock.h:
+ (CopiedBlock):
+ (JSC::CopiedBlock::CopiedBlock): Added support for tracking live bytes in a CopiedBlock in a
+ thread-safe fashion.
+ (JSC::CopiedBlock::reportLiveBytes): Adds a number of live bytes to the block in a thread-safe
+ fashion using compare and swap.
+ (JSC):
+ (JSC::CopiedBlock::didSurviveGC): Called when a block survives a single GC without being
+ evacuated. This could be called for a couple reasons: (a) the block was pinned or (b) we
+ decided not to do any copying. A block can become pinned for a few reasons: (1) a pointer into
+ the block was found during the conservative scan. (2) the block was deemed full enough to
+ not warrant any copying. (3) The block is oversize and was found to be live.
+ (JSC::CopiedBlock::didEvacuateBytes): Called when some number of bytes are copied from this
+ block. If the number of live bytes ever hits zero, the block will return itself to the
+ BlockAllocator to be recycled.
+ (JSC::CopiedBlock::canBeRecycled): Indicates that a block has no live bytes and can be
+ immediately recycled. This is used for blocks that are found to have zero live bytes at the
+ beginning of the copying phase.
+ (JSC::CopiedBlock::shouldEvacuate): This function returns true if the current fragmentation
+ of the block is above our fragmentation threshold, and false otherwise.
+ (JSC::CopiedBlock::isPinned): Added an accessor for the pinned flag
+ (JSC::CopiedBlock::liveBytes):
+ * heap/CopiedSpace.cpp:
+ (JSC::CopiedSpace::CopiedSpace):
+ (JSC::CopiedSpace::doneFillingBlock): Changed so that we can exchange our filled block for a
+ fresh block. This avoids the situation where a thread returns its borrowed block, it's the last
+ borrowed block, so CopiedSpace thinks that copying has completed, and it starts doing all of the
+ copying phase cleanup. In actuality, the thread wanted another block after returning the current
+ block. So we allow the thread to atomically exchange its block for another block.
+ (JSC::CopiedSpace::startedCopying): Added the calculation of global Heap fragmentation to
+ determine if the copying phase should commence. We include the MarkedSpace in our fragmentation
+ calculation by assuming that the MarkedSpace is 0% fragmented since we can reuse any currently
+ free memory in it (i.e. we ignore any internal fragmentation in the MarkedSpace). While we're
+ calculating the fragmentation of CopiedSpace, we also return any free blocks we find along the
+ way (meaning liveBytes() == 0).
+ (JSC):
+ (JSC::CopiedSpace::doneCopying): We still have to iterate over all the blocks, regardless of
+ whether the copying phase took place or not so that we can reset all of the live bytes counters
+ and un-pin any pinned blocks.
+ * heap/CopiedSpace.h:
+ (CopiedSpace):
+ (JSC::CopiedSpace::shouldDoCopyPhase):
+ * heap/CopiedSpaceInlineMethods.h:
+ (JSC::CopiedSpace::recycleEvacuatedBlock): This function is distinct from recycling a borrowed block
+ because a borrowed block hasn't been added to the CopiedSpace yet, but an evacuated block is still
+ currently in CopiedSpace, so we have to make sure we properly remove all traces of the block from
+ CopiedSpace before returning it to BlockAllocator.
+ (JSC::CopiedSpace::recycleBorrowedBlock): Renamed to indicate the distinction mentioned above.
+ * heap/CopyVisitor.cpp: Added.
+ (JSC):
+ (JSC::CopyVisitor::CopyVisitor):
+ (JSC::CopyVisitor::copyFromShared): Main function for any thread participating in the copying phase.
+ Grabs chunks of MarkedBlocks from the shared list and copies the backing store of anybody who needs
+ it until there are no more chunks to copy.
+ * heap/CopyVisitor.h: Added.
+ (JSC):
+ (CopyVisitor):
+ * heap/CopyVisitorInlineMethods.h: Added.
+ (JSC):
+ (GCCopyPhaseFunctor):
+ (JSC::GCCopyPhaseFunctor::GCCopyPhaseFunctor):
+ (JSC::GCCopyPhaseFunctor::operator()):
+ (JSC::CopyVisitor::checkIfShouldCopy): We don't have to check shouldEvacuate() because all of those
+ checks are done during the marking phase.
+ (JSC::CopyVisitor::allocateNewSpace):
+ (JSC::CopyVisitor::allocateNewSpaceSlow):
+ (JSC::CopyVisitor::startCopying): Initialization function for a thread that is about to start copying.
+ (JSC::CopyVisitor::doneCopying):
+ (JSC::CopyVisitor::didCopy): This callback is called by an object that has just successfully copied its
+ backing store. It indicates to the CopiedBlock that somebody has just finished evacuating some number of
+ bytes from it, and, if the CopiedBlock now has no more live bytes, can be recycled immediately.
+ * heap/GCThread.cpp: Added.
+ (JSC):
+ (JSC::GCThread::GCThread): This is a new class that encapsulates a single thread responsible for participating
+ in a specific set of GC phases. Currently, that set of phases includes Mark, Copy, and Exit. Each thread
+ monitors a shared variable in its associated GCThreadSharedData. The main thread updates this m_currentPhase
+ variable as collection progresses through the various phases. Parallel marking still works exactly like it
+ has. In other words, the "run loop" for each of the GC threads sits above any individual phase, thus keeping
+ the separate phases of the collector orthogonal.
+ (JSC::GCThread::threadID):
+ (JSC::GCThread::initializeThreadID):
+ (JSC::GCThread::slotVisitor):
+ (JSC::GCThread::copyVisitor):
+ (JSC::GCThread::waitForNextPhase):
+ (JSC::GCThread::gcThreadMain):
+ (JSC::GCThread::gcThreadStartFunc):
+ * heap/GCThread.h: Added.
+ (JSC):
+ (GCThread):
+ * heap/GCThreadSharedData.cpp: The GCThreadSharedData now has a list of GCThread objects rather than raw
+ ThreadIdentifiers.
+ (JSC::GCThreadSharedData::resetChildren):
+ (JSC::GCThreadSharedData::childVisitCount):
+ (JSC::GCThreadSharedData::GCThreadSharedData):
+ (JSC::GCThreadSharedData::~GCThreadSharedData):
+ (JSC::GCThreadSharedData::reset):
+ (JSC::GCThreadSharedData::didStartMarking): Callback to let the GCThreadSharedData know that marking has
+ started and updates the m_currentPhase variable and notifies the GCThreads accordingly.
+ (JSC::GCThreadSharedData::didFinishMarking): Ditto for finishing marking.
+ (JSC::GCThreadSharedData::didStartCopying): Ditto for starting the copying phase.
+ (JSC::GCThreadSharedData::didFinishCopying): Ditto for finishing copying.
+ * heap/GCThreadSharedData.h:
+ (JSC):
+ (GCThreadSharedData):
+ (JSC::GCThreadSharedData::getNextBlocksToCopy): Atomically gets the next chunk of work for a copying thread.
+ * heap/Heap.cpp:
+ (JSC::Heap::Heap):
+ (JSC::Heap::markRoots):
+ (JSC):
+ (JSC::Heap::copyBackingStores): Responsible for setting up the copying phase, notifying the copying threads,
+ and doing any copying work if necessary.
+ (JSC::Heap::collect):
+ * heap/Heap.h:
+ (Heap):
+ (JSC):
+ (JSC::CopyFunctor::CopyFunctor):
+ (CopyFunctor):
+ (JSC::CopyFunctor::operator()):
+ * heap/IncrementalSweeper.cpp: Changed the incremental sweeper to have a reference to the list of MarkedBlocks
+ that need sweeping, since this now resides in the Heap so that it can be easily shared by the GCThreads.
+ (JSC::IncrementalSweeper::IncrementalSweeper):
+ (JSC::IncrementalSweeper::startSweeping):
+ * heap/IncrementalSweeper.h:
+ (JSC):
+ (IncrementalSweeper):
+ * heap/SlotVisitor.cpp:
+ (JSC::SlotVisitor::setup):
+ (JSC::SlotVisitor::drainFromShared): We no longer do any copying-related work here.
+ (JSC):
+ * heap/SlotVisitor.h:
+ (SlotVisitor):
+ * heap/SlotVisitorInlineMethods.h:
+ (JSC):
+ (JSC::SlotVisitor::copyLater): Notifies the CopiedBlock that there are some live bytes that may need
+ to be copied.
+ * runtime/Butterfly.h:
+ (JSC):
+ (Butterfly):
+ * runtime/ButterflyInlineMethods.h:
+ (JSC::Butterfly::createUninitializedDuringCollection): Uses the new CopyVisitor.
+ * runtime/ClassInfo.h:
+ (MethodTable): Added new "virtual" function copyBackingStore to method table.
+ (JSC):
+ * runtime/JSCell.cpp:
+ (JSC::JSCell::copyBackingStore): Default implementation that does nothing.
+ (JSC):
+ * runtime/JSCell.h:
+ (JSC):
+ (JSCell):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::copyButterfly): Does the actual copying of the butterfly.
+ (JSC):
+ (JSC::JSObject::visitButterfly): Calls copyLater for the butterfly.
+ (JSC::JSObject::copyBackingStore):
+ * runtime/JSObject.h:
+ (JSObject):
+ (JSC::JSCell::methodTable):
+ (JSC::JSCell::inherits):
+ * runtime/Options.h: Added two new constants, minHeapUtilization and minCopiedBlockUtilization,
+ to govern the amount of fragmentation we allow before doing copying.
+ (JSC):
+
+2012-10-12 Filip Pizlo <fpizlo@apple.com>
+
+ DFG array allocation calls should not return an encoded JSValue
+ https://bugs.webkit.org/show_bug.cgi?id=99196
+
+ Reviewed by Mark Hahnenberg.
+
+ The array allocation operations now return a pointer instead. This makes it
+ easier to share code between 32-bit and 64-bit.
+
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGOperations.h:
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::callOperation):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2012-10-01 Jer Noble <jer.noble@apple.com>
+
+ Enable ENCRYPTED_MEDIA support on Mac.
+ https://bugs.webkit.org/show_bug.cgi?id=98044
+
+ Reviewed by Anders Carlsson.
+
+ Enable the ENCRYPTED_MEDIA flag.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2012-10-12 Filip Pizlo <fpizlo@apple.com>
+
+ Unreviewed. It should be possible to build JSC on ARMv7.
+
+ * assembler/MacroAssemblerARMv7.h:
+ (JSC::MacroAssemblerARMv7::patchableBranchPtr):
+
+2012-10-11 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ BlockAllocator should use regions as its VM allocation abstraction
+ https://bugs.webkit.org/show_bug.cgi?id=99107
+
+ Reviewed by Geoffrey Garen.
+
+ Currently the BlockAllocator allocates a single block at a time directly from the OS. Our block
+ allocations are on the large-ish side (64 KB) to amortize across many allocations the expense of
+ mapping new virtual memory from the OS. These large blocks are then shared between the MarkedSpace
+ and the CopiedSpace. This design makes it difficult to vary the size of the blocks in different
+ parts of the Heap while still allowing us to amortize the VM allocation costs.
+
+ We should redesign the BlockAllocator so that it has a layer of indirection between blocks that are
+ used by the allocator/collector and our primary unit of VM allocation from the OS. In particular,
+ the BlockAllocator should allocate Regions of virtual memory from the OS, which are then subdivided
+ into one or more Blocks to be used in our custom allocators. This design has the following nice properties:
+
+ 1) We can remove the knowledge of PageAllocationAligned from HeapBlocks. Each HeapBlock will now
+ only know what Region it belongs to. The Region maintains all the metadata for how to allocate
+ and deallocate virtual memory from the OS.
+
+ 2) We can easily allocate in larger chunks than we need to satisfy a particular request for a Block.
+ We can then continue to amortize our VM allocation costs while allowing for smaller block sizes,
+ which should increase locality in the mutator when allocating, lazy sweeping, etc.
+
+ 3) By encapsulating the logic of where our memory comes from inside of the Region class, we can more
+ easily transition over to allocating VM from a specific range of pre-reserved address space. This
+ will be a necessary step along the way to 32-bit pointers.
+
+ This particular patch will not change the size of MarkedBlocks or CopiedBlocks, nor will it change how
+ much VM we allocate per failed Block request. It only sets up the data structures that we need to make
+ these changes in future patches.
+
+ Most of the changes in this patch relate to the addition of the Region class to be used by the
+ BlockAllocator and the threading of changes made to BlockAllocator's interface through to the call sites.
+
+ * heap/BlockAllocator.cpp: The BlockAllocator now has three lists that track the three disjoint sets of
+ Regions that it cares about: empty regions, partially full regions, and completely full regions.
+ Empty regions have no blocks currently in use and can be freed immediately if the freeing thread
+ determines they should be. Partial regions have some blocks used, but aren't completely in use yet.
+ These regions are preferred for recycling before empty regions to mitigate fragmentation within regions.
+ Completely full regions are no longer able to be used for allocations. Regions move between these
+ three lists as they are created and their constituent blocks are allocated and deallocated.
+ (JSC::BlockAllocator::BlockAllocator):
+ (JSC::BlockAllocator::~BlockAllocator):
+ (JSC::BlockAllocator::releaseFreeRegions):
+ (JSC::BlockAllocator::waitForRelativeTimeWhileHoldingLock):
+ (JSC::BlockAllocator::waitForRelativeTime):
+ (JSC::BlockAllocator::blockFreeingThreadMain):
+ * heap/BlockAllocator.h:
+ (JSC):
+ (DeadBlock):
+ (JSC::DeadBlock::DeadBlock):
+ (Region):
+ (JSC::Region::blockSize):
+ (JSC::Region::isFull):
+ (JSC::Region::isEmpty):
+ (JSC::Region::create): This function is responsible for doing the actual VM allocation. This should be the
+ only function in the entire JSC object runtime that calls out the OS for virtual memory allocation.
+ (JSC::Region::Region):
+ (JSC::Region::~Region):
+ (JSC::Region::allocate):
+ (JSC::Region::deallocate):
+ (BlockAllocator):
+ (JSC::BlockAllocator::tryAllocateFromRegion): Helper function that encapsulates checking a particular list
+ of regions for a free block.
+ (JSC::BlockAllocator::allocate):
+ (JSC::BlockAllocator::allocateCustomSize): This function is responsible for allocating one-off custom size
+ regions for use in oversize allocations in both the MarkedSpace and the CopiedSpace. These regions are not
+ tracked by the BlockAllocator. The only pointer to them is in the HeapBlock that is returned. These regions
+ contain exactly one block.
+ (JSC::BlockAllocator::deallocate):
+ (JSC::BlockAllocator::deallocateCustomSize): This function is responsible for deallocating one-off custom size
+ regions. The regions are deallocated back to the OS eagerly.
+ * heap/CopiedBlock.h: Re-worked CopiedBlocks to use Regions instead of PageAllocationAligned.
+ (CopiedBlock):
+ (JSC::CopiedBlock::createNoZeroFill):
+ (JSC::CopiedBlock::create):
+ (JSC::CopiedBlock::CopiedBlock):
+ (JSC::CopiedBlock::payloadEnd):
+ (JSC::CopiedBlock::capacity):
+ * heap/CopiedSpace.cpp:
+ (JSC::CopiedSpace::~CopiedSpace):
+ (JSC::CopiedSpace::tryAllocateOversize):
+ (JSC::CopiedSpace::tryReallocateOversize):
+ (JSC::CopiedSpace::doneCopying):
+ * heap/CopiedSpaceInlineMethods.h:
+ (JSC::CopiedSpace::allocateBlockForCopyingPhase):
+ (JSC::CopiedSpace::allocateBlock):
+ * heap/HeapBlock.h:
+ (JSC::HeapBlock::destroy):
+ (JSC::HeapBlock::HeapBlock):
+ (JSC::HeapBlock::region):
+ (HeapBlock):
+ * heap/MarkedAllocator.cpp:
+ (JSC::MarkedAllocator::allocateBlock):
+ * heap/MarkedBlock.cpp:
+ (JSC::MarkedBlock::create):
+ (JSC::MarkedBlock::MarkedBlock):
+ * heap/MarkedBlock.h:
+ (JSC::MarkedBlock::capacity):
+ * heap/MarkedSpace.cpp:
+ (JSC::MarkedSpace::freeBlock):
+
+2012-10-11 Filip Pizlo <fpizlo@apple.com>
+
+ UInt32ToNumber and OSR exit should be aware of copy propagation and correctly recover both versions of a variable that was subject to a UInt32ToNumber cast
+ https://bugs.webkit.org/show_bug.cgi?id=99100
+ <rdar://problem/12480955>
+
+ Reviewed by Michael Saboff and Mark Hahnenberg.
+
+ Fixed by forcing UInt32ToNumber to use a different register. This "undoes" the copy propagation that we
+ would have been doing, since it has no performance effect in this case and has the benefit of making the
+ OSR exit compiler a lot simpler.
+
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileUInt32ToNumber):
+
+2012-10-11 Geoffrey Garen <ggaren@apple.com>
+
+ Removed some more static assumptions about inline object capacity
+ https://bugs.webkit.org/show_bug.cgi?id=98603
+
+ Reviewed by Filip Pizlo.
+
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::emitAllocateBasicJSObject): Use JSObject::allocationSize()
+ for a little more flexibility. We still pass it a constant inline capacity
+ because the JIT doesn't have a strategy for selecting a size class based
+ on non-constant capacity yet. "INLINE_STORAGE_CAPACITY" is a marker for
+ code that makes static assumptions about object size.
+
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::emitAllocateBasicJSObject):
+ * llint/LLIntData.cpp:
+ (JSC::LLInt::Data::performAssertions):
+ * llint/LowLevelInterpreter32_64.asm:
+ * llint/LowLevelInterpreter64.asm: Ditto for the rest of our many execution engines.
+
+ * runtime/JSObject.h:
+ (JSC::JSObject::allocationSize):
+ (JSC::JSFinalObject::finishCreation):
+ (JSC::JSFinalObject::create): New helper function for computing object
+ size dynamically, since we plan to have objects of different sizes.
+
+ (JSC::JSFinalObject::JSFinalObject): Note that our m_inlineStorage used
+ to auto-generate an implicit C++ constructor with default null initialization.
+ This memory is not observed in its uninitialized state, and our LLInt and
+ JIT allocators do not initialize it, so I did not add any explicit code
+ to do so, now that the implicit code is gone.
+
+ (JSC::JSObject::offsetOfInlineStorage): Changed the math here to match
+ inlineStorageUnsafe(), since we can rely on an explicit data member anymore.
+
+2012-10-11 Geoffrey Garen <ggaren@apple.com>
+
+ Enable RUNTIME_HEURISTICS all the time, for easier testing
+ https://bugs.webkit.org/show_bug.cgi?id=99090
+
+ Reviewed by Filip Pizlo.
+
+ I find myself using this a lot, and there doesn't seem to be an obvious
+ reason to compile it out, since it only runs once at startup.
+
+ * runtime/Options.cpp:
+ (JSC::overrideOptionWithHeuristic):
+ (JSC::Options::initialize):
+ * runtime/Options.h: Removed the #ifdef.
+
+2012-10-11 Geoffrey Garen <ggaren@apple.com>
+
+ Removed ASSERT_CLASS_FITS_IN_CELL
+ https://bugs.webkit.org/show_bug.cgi?id=97634
+
+ Reviewed by Mark Hahnenberg.
+
+ Our collector now supports arbitrarily sized objects, so the ASSERT is not needed.
+
+ * API/JSCallbackFunction.cpp:
+ * API/JSCallbackObject.cpp:
+ * heap/MarkedSpace.h:
+ * jsc.cpp:
+ * runtime/Arguments.cpp:
+ * runtime/ArrayConstructor.cpp:
+ * runtime/ArrayPrototype.cpp:
+ * runtime/BooleanConstructor.cpp:
+ * runtime/BooleanObject.cpp:
+ * runtime/BooleanPrototype.cpp:
+ * runtime/DateConstructor.cpp:
+ * runtime/DatePrototype.cpp:
+ * runtime/Error.cpp:
+ * runtime/ErrorConstructor.cpp:
+ * runtime/ErrorPrototype.cpp:
+ * runtime/FunctionConstructor.cpp:
+ * runtime/FunctionPrototype.cpp:
+ * runtime/InternalFunction.cpp:
+ * runtime/JSActivation.cpp:
+ * runtime/JSArray.cpp:
+ * runtime/JSBoundFunction.cpp:
+ * runtime/JSFunction.cpp:
+ * runtime/JSGlobalObject.cpp:
+ * runtime/JSGlobalThis.cpp:
+ * runtime/JSNameScope.cpp:
+ * runtime/JSNotAnObject.cpp:
+ * runtime/JSONObject.cpp:
+ * runtime/JSObject.cpp:
+ * runtime/JSPropertyNameIterator.cpp:
+ * runtime/JSScope.cpp:
+ * runtime/JSWithScope.cpp:
+ * runtime/JSWrapperObject.cpp:
+ * runtime/MathObject.cpp:
+ * runtime/NameConstructor.cpp:
+ * runtime/NamePrototype.cpp:
+ * runtime/NativeErrorConstructor.cpp:
+ * runtime/NativeErrorPrototype.cpp:
+ * runtime/NumberConstructor.cpp:
+ * runtime/NumberObject.cpp:
+ * runtime/NumberPrototype.cpp:
+ * runtime/ObjectConstructor.cpp:
+ * runtime/ObjectPrototype.cpp:
+ * runtime/RegExpConstructor.cpp:
+ * runtime/RegExpMatchesArray.cpp:
+ * runtime/RegExpObject.cpp:
+ * runtime/RegExpPrototype.cpp:
+ * runtime/StringConstructor.cpp:
+ * runtime/StringObject.cpp:
+ * runtime/StringPrototype.cpp:
+ * testRegExp.cpp: Removed the ASSERT.
+
+2012-10-11 Filip Pizlo <fpizlo@apple.com>
+
+ DFG should inline code blocks that use new_array_buffer
+ https://bugs.webkit.org/show_bug.cgi?id=98996
+
+ Reviewed by Geoffrey Garen.
+
+ This adds plumbing to drop in constant buffers from the inlinees to the inliner.
+ It's smart about not duplicating buffers needlessly but doesn't try to completely
+ hash-cons them, either.
+
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::numberOfConstantBuffers):
+ (JSC::CodeBlock::addConstantBuffer):
+ (JSC::CodeBlock::constantBufferAsVector):
+ (JSC::CodeBlock::constantBuffer):
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGByteCodeParser.cpp:
+ (ConstantBufferKey):
+ (JSC::DFG::ConstantBufferKey::ConstantBufferKey):
+ (JSC::DFG::ConstantBufferKey::operator==):
+ (JSC::DFG::ConstantBufferKey::hash):
+ (JSC::DFG::ConstantBufferKey::isHashTableDeletedValue):
+ (JSC::DFG::ConstantBufferKey::codeBlock):
+ (JSC::DFG::ConstantBufferKey::index):
+ (DFG):
+ (JSC::DFG::ConstantBufferKeyHash::hash):
+ (JSC::DFG::ConstantBufferKeyHash::equal):
+ (ConstantBufferKeyHash):
+ (WTF):
+ (ByteCodeParser):
+ (InlineStackEntry):
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
+ * dfg/DFGCapabilities.h:
+ (JSC::DFG::canInlineOpcode):
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGOperations.h:
+ * dfg/DFGSpeculativeJIT.h:
+ (JSC::DFG::SpeculativeJIT::callOperation):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+
+2012-10-10 Zoltan Horvath <zoltan@webkit.org>
+
+ Pageload tests should measure memory usage
+ https://bugs.webkit.org/show_bug.cgi?id=93958
+
+ Reviewed by Ryosuke Niwa.
+
+ Add JS Heap and Heap memory measurement to PageLoad tests.
+
+ * heap/HeapStatistics.cpp:
+ (JSC::HeapStatistics::usedJSHeap): Add new private function to expose the used JS Heap size.
+ (JSC):
+ * heap/HeapStatistics.h:
+ (HeapStatistics): Add new private function to expose the used JS Heap size.
+
+2012-10-10 Balazs Kilvady <kilvadyb@homejinni.com>
+
+ RegisterFile to JSStack rename fix for a struct member.
+
+ Compilation problem in debug build on MIPS
+ https://bugs.webkit.org/show_bug.cgi?id=98808
+
+ Reviewed by Alexey Proskuryakov.
+
+ In ASSERT conditions structure field name "registerFile" was replaced
+ with type name "JSStack" and it should be "stack".
+
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::JITThunks): structure member name fix.
+
+2012-10-10 Michael Saboff <msaboff@apple.com>
+
+ After r130344, OpaqueJSString::string() shouldn't directly return the wrapped String
+ https://bugs.webkit.org/show_bug.cgi?id=98801
+
+ Reviewed by Geoffrey Garen.
+
+ Return a copy of the wrapped String so that the wrapped string cannot be turned into
+ an Identifier.
+
+ * API/OpaqueJSString.cpp:
+ (OpaqueJSString::string):
+ * API/OpaqueJSString.h:
+ (OpaqueJSString):
+
+2012-10-10 Peter Gal <galpeter@inf.u-szeged.hu>
+
+ Add moveDoubleToInts and moveIntsToDouble to MacroAssemblerARM
+ https://bugs.webkit.org/show_bug.cgi?id=98855
+
+ Reviewed by Filip Pizlo.
+
+ Implement the missing moveDoubleToInts and moveIntsToDouble
+ methods in the MacroAssemblerARM after r130839.
+
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::moveDoubleToInts):
+ (MacroAssemblerARM):
+ (JSC::MacroAssemblerARM::moveIntsToDouble):
+
+2012-10-09 Filip Pizlo <fpizlo@apple.com>
+
+ Typed arrays should not be 20x slower in the baseline JIT than in the DFG JIT
+ https://bugs.webkit.org/show_bug.cgi?id=98605
+
+ Reviewed by Oliver Hunt and Gavin Barraclough.
+
+ This adds typed array get_by_val/put_by_val patching to the baseline JIT. It's
+ a big (~40%) win on benchmarks that have trouble staying in the DFG JIT. Even
+ if we fix those benchmarks, this functionality gives us the insurance that we
+ typically desire with all speculative optimizations: even if we bail to
+ baseline, we're still reasonably performant.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * assembler/MacroAssembler.cpp: Added.
+ (JSC):
+ * assembler/MacroAssembler.h:
+ (MacroAssembler):
+ (JSC::MacroAssembler::patchableBranchPtr):
+ * assembler/MacroAssemblerARMv7.h:
+ (MacroAssemblerARMv7):
+ (JSC::MacroAssemblerARMv7::moveDoubleToInts):
+ (JSC::MacroAssemblerARMv7::moveIntsToDouble):
+ (JSC::MacroAssemblerARMv7::patchableBranchPtr):
+ * assembler/MacroAssemblerX86.h:
+ (MacroAssemblerX86):
+ (JSC::MacroAssemblerX86::moveDoubleToInts):
+ (JSC::MacroAssemblerX86::moveIntsToDouble):
+ * bytecode/ByValInfo.h:
+ (JSC::hasOptimizableIndexingForClassInfo):
+ (JSC):
+ (JSC::hasOptimizableIndexing):
+ (JSC::jitArrayModeForClassInfo):
+ (JSC::jitArrayModeForStructure):
+ (JSC::ByValInfo::ByValInfo):
+ (ByValInfo):
+ * dfg/DFGAssemblyHelpers.cpp:
+ (DFG):
+ * dfg/DFGAssemblyHelpers.h:
+ (AssemblyHelpers):
+ (JSC::DFG::AssemblyHelpers::boxDouble):
+ (JSC::DFG::AssemblyHelpers::unboxDouble):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
+ (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+ * jit/JIT.h:
+ (JIT):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_get_by_val):
+ (JSC::JIT::emit_op_put_by_val):
+ (JSC::JIT::privateCompileGetByVal):
+ (JSC::JIT::privateCompilePutByVal):
+ (JSC::JIT::emitIntTypedArrayGetByVal):
+ (JSC):
+ (JSC::JIT::emitFloatTypedArrayGetByVal):
+ (JSC::JIT::emitIntTypedArrayPutByVal):
+ (JSC::JIT::emitFloatTypedArrayPutByVal):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::emit_op_get_by_val):
+ (JSC::JIT::emit_op_put_by_val):
+ * jit/JITStubs.cpp:
+ (JSC::DEFINE_STUB_FUNCTION):
+ * runtime/JSCell.h:
+ * runtime/JSGlobalData.h:
+ (JSGlobalData):
+ (JSC::JSGlobalData::typedArrayDescriptor):
+ * runtime/TypedArrayDescriptor.h: Added.
+ (JSC):
+ (JSC::TypedArrayDescriptor::TypedArrayDescriptor):
+ (TypedArrayDescriptor):
+
+2012-10-09 Michael Saboff <msaboff@apple.com>
+
+ Add tests to testapi for null OpaqueJSStrings
+ https://bugs.webkit.org/show_bug.cgi?id=98805
+
+ Reviewed by Geoffrey Garen.
+
+ Added tests that check that OpaqueJSString, which is wrapped via JSStringRef, properly returns
+ null strings and that a null string in a JSStringRef will return a NULL JSChar* and 0 length
+ via the JSStringGetCharactersPtr() and JSStringGetLength() APIs respectively. Added a check that
+ JSValueMakeFromJSONString() properly handles a null string as well.
+
+ * API/tests/testapi.c:
+ (main):
+
+2012-10-09 Jian Li <jianli@chromium.org>
+
+ Update the CSS property used to support draggable regions.
+ https://bugs.webkit.org/show_bug.cgi?id=97156
+
+ Reviewed by Adam Barth.
+
+ The CSS property to support draggable regions, guarded under
+ WIDGET_REGION is now disabled from Mac WebKit, in order not to cause
+ confusion with DASHBOARD_SUPPORT feature.
+
+ * Configurations/FeatureDefines.xcconfig: Disable WIDGET_REGION feature.
+
+2012-10-09 Filip Pizlo <fpizlo@apple.com>
+
+ Unreviewed, adding forgotten files.
+
+ * bytecode/ByValInfo.h: Added.
+ (JSC):
+ (JSC::isOptimizableIndexingType):
+ (JSC::jitArrayModeForIndexingType):
+ (JSC::ByValInfo::ByValInfo):
+ (ByValInfo):
+ (JSC::getByValInfoBytecodeIndex):
+ * runtime/IndexingType.cpp: Added.
+ (JSC):
+ (JSC::indexingTypeToString):
+
+2012-10-08 Filip Pizlo <fpizlo@apple.com>
+
+ JSC should infer when indexed storage is contiguous, and optimize for it
+ https://bugs.webkit.org/show_bug.cgi?id=97288
+
+ Reviewed by Mark Hahnenberg.
+
+ This introduces a new kind of indexed property storage called Contiguous,
+ which has the following properties:
+
+ - No header bits beyond IndexedHeader. This results in a 16 byte reduction
+ in memory usage per array versus an ArrayStorage array. It also means
+ that the total memory usage for an empty array is now just 3 * 8 on both
+ 32-bit and 64-bit. Of that, only 8 bytes are array-specific; the rest is
+ our standard object header overhead.
+
+ - No need for hole checks on store. This results in a ~4% speed-up on
+ Kraken and a ~1% speed-up on V8v7.
+
+ - publicLength <= vectorLength. This means that doing new Array(blah)
+ immediately allocates room for blah elements.
+
+ - No sparse map or index bias.
+
+ If you ever do things to an array that would require publicLength >
+ vectorLength, a sparse map, or index bias, then we switch to ArrayStorage
+ mode. This seems to never happen in any benchmark we track, and is unlikely
+ to happen very frequently on any website.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * assembler/AbstractMacroAssembler.h:
+ (JSC::AbstractMacroAssembler::JumpList::append):
+ * assembler/MacroAssembler.h:
+ (MacroAssembler):
+ (JSC::MacroAssembler::patchableBranchTest32):
+ * bytecode/ByValInfo.h: Added.
+ (JSC):
+ (JSC::isOptimizableIndexingType):
+ (JSC::jitArrayModeForIndexingType):
+ (JSC::ByValInfo::ByValInfo):
+ (ByValInfo):
+ (JSC::getByValInfoBytecodeIndex):
+ * bytecode/CodeBlock.h:
+ (CodeBlock):
+ (JSC::CodeBlock::getByValInfo):
+ (JSC::CodeBlock::setNumberOfByValInfos):
+ (JSC::CodeBlock::numberOfByValInfos):
+ (JSC::CodeBlock::byValInfo):
+ * bytecode/SamplingTool.h:
+ * dfg/DFGAbstractState.cpp:
+ (JSC::DFG::AbstractState::execute):
+ * dfg/DFGArrayMode.cpp:
+ (JSC::DFG::fromObserved):
+ (JSC::DFG::modeAlreadyChecked):
+ (JSC::DFG::modeToString):
+ * dfg/DFGArrayMode.h:
+ (DFG):
+ (JSC::DFG::modeUsesButterfly):
+ (JSC::DFG::modeIsJSArray):
+ (JSC::DFG::isInBoundsAccess):
+ (JSC::DFG::mayStoreToTail):
+ (JSC::DFG::mayStoreToHole):
+ (JSC::DFG::modeIsPolymorphic):
+ (JSC::DFG::polymorphicIncludesContiguous):
+ (JSC::DFG::polymorphicIncludesArrayStorage):
+ (JSC::DFG::canCSEStorage):
+ (JSC::DFG::modeSupportsLength):
+ (JSC::DFG::benefitsFromStructureCheck):
+ (JSC::DFG::isEffectful):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::handleIntrinsic):
+ * dfg/DFGCSEPhase.cpp:
+ (JSC::DFG::CSEPhase::getArrayLengthElimination):
+ (JSC::DFG::CSEPhase::getByValLoadElimination):
+ (JSC::DFG::CSEPhase::performNodeCSE):
+ * dfg/DFGFixupPhase.cpp:
+ (JSC::DFG::FixupPhase::fixupNode):
+ (JSC::DFG::FixupPhase::checkArray):
+ (JSC::DFG::FixupPhase::blessArrayOperation):
+ * dfg/DFGGraph.h:
+ (JSC::DFG::Graph::byValIsPure):
+ * dfg/DFGOperations.cpp:
+ * dfg/DFGOperations.h:
+ * dfg/DFGRepatch.cpp:
+ (JSC::DFG::tryCacheGetByID):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::checkArray):
+ (JSC::DFG::SpeculativeJIT::arrayify):
+ (JSC::DFG::SpeculativeJIT::compileGetArrayLength):
+ (JSC::DFG::SpeculativeJIT::temporaryRegisterForPutByVal):
+ (DFG):
+ * dfg/DFGSpeculativeJIT.h:
+ (DFG):
+ (JSC::DFG::SpeculativeJIT::callOperation):
+ (SpeculativeJIT):
+ (JSC::DFG::SpeculativeJIT::putByValWillNeedExtraRegister):
+ (JSC::DFG::SpeculativeJIT::temporaryRegisterForPutByVal):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compileContiguousGetByVal):
+ (DFG):
+ (JSC::DFG::SpeculativeJIT::compileArrayStorageGetByVal):
+ (JSC::DFG::SpeculativeJIT::compileContiguousPutByVal):
+ (JSC::DFG::SpeculativeJIT::compileArrayStoragePutByVal):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compileContiguousGetByVal):
+ (DFG):
+ (JSC::DFG::SpeculativeJIT::compileArrayStorageGetByVal):
+ (JSC::DFG::SpeculativeJIT::compileContiguousPutByVal):
+ (JSC::DFG::SpeculativeJIT::compileArrayStoragePutByVal):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * interpreter/Interpreter.cpp:
+ (SamplingScope):
+ (JSC::SamplingScope::SamplingScope):
+ (JSC::SamplingScope::~SamplingScope):
+ (JSC):
+ (JSC::Interpreter::execute):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompileSlowCases):
+ (JSC::JIT::privateCompile):
+ * jit/JIT.h:
+ (JSC::ByValCompilationInfo::ByValCompilationInfo):
+ (ByValCompilationInfo):
+ (JSC):
+ (JIT):
+ (JSC::JIT::compileGetByVal):
+ (JSC::JIT::compilePutByVal):
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::emitAllocateJSArray):
+ (JSC::JIT::emitArrayProfileStoreToHoleSpecialCase):
+ (JSC):
+ (JSC::arrayProfileSaw):
+ (JSC::JIT::chooseArrayMode):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::emitSlow_op_get_argument_by_val):
+ (JSC::JIT::emit_op_new_array):
+ (JSC::JIT::emitSlow_op_new_array):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::emitSlow_op_get_argument_by_val):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_get_by_val):
+ (JSC):
+ (JSC::JIT::emitContiguousGetByVal):
+ (JSC::JIT::emitArrayStorageGetByVal):
+ (JSC::JIT::emitSlow_op_get_by_val):
+ (JSC::JIT::emit_op_put_by_val):
+ (JSC::JIT::emitContiguousPutByVal):
+ (JSC::JIT::emitArrayStoragePutByVal):
+ (JSC::JIT::emitSlow_op_put_by_val):
+ (JSC::JIT::privateCompilePatchGetArrayLength):
+ (JSC::JIT::privateCompileGetByVal):
+ (JSC::JIT::privateCompilePutByVal):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::emit_op_get_by_val):
+ (JSC):
+ (JSC::JIT::emitContiguousGetByVal):
+ (JSC::JIT::emitArrayStorageGetByVal):
+ (JSC::JIT::emitSlow_op_get_by_val):
+ (JSC::JIT::emit_op_put_by_val):
+ (JSC::JIT::emitContiguousPutByVal):
+ (JSC::JIT::emitArrayStoragePutByVal):
+ (JSC::JIT::emitSlow_op_put_by_val):
+ * jit/JITStubs.cpp:
+ (JSC::getByVal):
+ (JSC):
+ (JSC::DEFINE_STUB_FUNCTION):
+ (JSC::putByVal):
+ * jit/JITStubs.h:
+ * llint/LowLevelInterpreter.asm:
+ * llint/LowLevelInterpreter32_64.asm:
+ * llint/LowLevelInterpreter64.asm:
+ * runtime/ArrayConventions.h:
+ (JSC::isDenseEnoughForVector):
+ * runtime/ArrayPrototype.cpp:
+ (JSC):
+ (JSC::shift):
+ (JSC::unshift):
+ (JSC::arrayProtoFuncPush):
+ (JSC::arrayProtoFuncShift):
+ (JSC::arrayProtoFuncSplice):
+ (JSC::arrayProtoFuncUnShift):
+ * runtime/Butterfly.h:
+ (Butterfly):
+ (JSC::Butterfly::fromPointer):
+ (JSC::Butterfly::pointer):
+ (JSC::Butterfly::publicLength):
+ (JSC::Butterfly::vectorLength):
+ (JSC::Butterfly::setPublicLength):
+ (JSC::Butterfly::setVectorLength):
+ (JSC::Butterfly::contiguous):
+ (JSC::Butterfly::fromContiguous):
+ * runtime/ButterflyInlineMethods.h:
+ (JSC::Butterfly::unshift):
+ (JSC::Butterfly::shift):
+ * runtime/IndexingHeaderInlineMethods.h:
+ (JSC::IndexingHeader::indexingPayloadSizeInBytes):
+ * runtime/IndexingType.cpp: Added.
+ (JSC):
+ (JSC::indexingTypeToString):
+ * runtime/IndexingType.h:
+ (JSC):
+ (JSC::hasContiguous):
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::setLengthWithArrayStorage):
+ (JSC::JSArray::setLength):
+ (JSC):
+ (JSC::JSArray::pop):
+ (JSC::JSArray::push):
+ (JSC::JSArray::shiftCountWithArrayStorage):
+ (JSC::JSArray::shiftCountWithAnyIndexingType):
+ (JSC::JSArray::unshiftCountWithArrayStorage):
+ (JSC::JSArray::unshiftCountWithAnyIndexingType):
+ (JSC::JSArray::sortNumericVector):
+ (JSC::JSArray::sortNumeric):
+ (JSC::JSArray::sortCompactedVector):
+ (JSC::JSArray::sort):
+ (JSC::JSArray::sortVector):
+ (JSC::JSArray::fillArgList):
+ (JSC::JSArray::copyToArguments):
+ (JSC::JSArray::compactForSorting):
+ * runtime/JSArray.h:
+ (JSC::JSArray::shiftCountForShift):
+ (JSC::JSArray::shiftCountForSplice):
+ (JSArray):
+ (JSC::JSArray::shiftCount):
+ (JSC::JSArray::unshiftCountForShift):
+ (JSC::JSArray::unshiftCountForSplice):
+ (JSC::JSArray::unshiftCount):
+ (JSC::JSArray::isLengthWritable):
+ (JSC::createContiguousArrayButterfly):
+ (JSC):
+ (JSC::JSArray::create):
+ (JSC::JSArray::tryCreateUninitialized):
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::reset):
+ (JSC):
+ (JSC::JSGlobalObject::haveABadTime):
+ (JSC::JSGlobalObject::visitChildren):
+ * runtime/JSGlobalObject.h:
+ (JSGlobalObject):
+ (JSC::JSGlobalObject::arrayStructureWithArrayStorage):
+ (JSC::JSGlobalObject::addressOfArrayStructureWithArrayStorage):
+ (JSC::constructEmptyArray):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::visitButterfly):
+ (JSC::JSObject::getOwnPropertySlotByIndex):
+ (JSC::JSObject::putByIndex):
+ (JSC::JSObject::enterDictionaryIndexingMode):
+ (JSC::JSObject::createInitialContiguous):
+ (JSC):
+ (JSC::JSObject::createArrayStorage):
+ (JSC::JSObject::convertContiguousToArrayStorage):
+ (JSC::JSObject::ensureContiguousSlow):
+ (JSC::JSObject::ensureArrayStorageSlow):
+ (JSC::JSObject::ensureIndexedStorageSlow):
+ (JSC::JSObject::ensureArrayStorageExistsAndEnterDictionaryIndexingMode):
+ (JSC::JSObject::switchToSlowPutArrayStorage):
+ (JSC::JSObject::setPrototype):
+ (JSC::JSObject::deletePropertyByIndex):
+ (JSC::JSObject::getOwnPropertyNames):
+ (JSC::JSObject::defineOwnIndexedProperty):
+ (JSC::JSObject::putByIndexBeyondVectorLengthContiguousWithoutAttributes):
+ (JSC::JSObject::putByIndexBeyondVectorLength):
+ (JSC::JSObject::putDirectIndexBeyondVectorLengthWithArrayStorage):
+ (JSC::JSObject::putDirectIndexBeyondVectorLength):
+ (JSC::JSObject::getNewVectorLength):
+ (JSC::JSObject::countElementsInContiguous):
+ (JSC::JSObject::increaseVectorLength):
+ (JSC::JSObject::ensureContiguousLengthSlow):
+ (JSC::JSObject::getOwnPropertyDescriptor):
+ * runtime/JSObject.h:
+ (JSC::JSObject::getArrayLength):
+ (JSC::JSObject::getVectorLength):
+ (JSC::JSObject::canGetIndexQuickly):
+ (JSC::JSObject::getIndexQuickly):
+ (JSC::JSObject::tryGetIndexQuickly):
+ (JSC::JSObject::canSetIndexQuickly):
+ (JSC::JSObject::canSetIndexQuicklyForPutDirect):
+ (JSC::JSObject::setIndexQuickly):
+ (JSC::JSObject::initializeIndex):
+ (JSC::JSObject::hasSparseMap):
+ (JSC::JSObject::inSparseIndexingMode):
+ (JSObject):
+ (JSC::JSObject::ensureContiguous):
+ (JSC::JSObject::ensureIndexedStorage):
+ (JSC::JSObject::ensureContiguousLength):
+ (JSC::JSObject::indexingData):
+ (JSC::JSObject::relevantLength):
+ * runtime/JSValue.cpp:
+ (JSC::JSValue::description):
+ * runtime/Options.cpp:
+ (JSC::Options::initialize):
+ * runtime/Structure.cpp:
+ (JSC::Structure::needsSlowPutIndexing):
+ (JSC):
+ (JSC::Structure::suggestedArrayStorageTransition):
+ * runtime/Structure.h:
+ (Structure):
+ * runtime/StructureTransitionTable.h:
+ (JSC::newIndexingType):
+
+2012-10-09 Michael Saboff <msaboff@apple.com>
+
+ After r130344, OpaqueJSString::identifier() adds wrapped String to identifier table
+ https://bugs.webkit.org/show_bug.cgi?id=98693
+ REGRESSION (r130344): Install failed in Install Environment
+ <rdar://problem/12450118>
+
+ Reviewed by Mark Rowe.
+
+ Use Identifier(LChar*, length) or Identifier(UChar*, length) constructors so that we don't
+ add the String instance in the OpaqueJSString to any identifier tables.
+
+ * API/OpaqueJSString.cpp:
+ (OpaqueJSString::identifier):
+
+2012-10-08 Mark Lam <mark.lam@apple.com>
+
+ Renamed RegisterFile to JSStack, and removed prototype of the
+ previously deleted Interpreter::privateExecute().
+ https://bugs.webkit.org/show_bug.cgi?id=98717.
+
+ Reviewed by Filip Pizlo.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * JavaScriptCore.order:
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * bytecode/BytecodeConventions.h:
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::nameForRegister):
+ * bytecode/CodeBlock.h:
+ (CodeBlock):
+ * bytecode/ValueRecovery.h:
+ (JSC::ValueRecovery::alreadyInJSStack):
+ (JSC::ValueRecovery::alreadyInJSStackAsUnboxedInt32):
+ (JSC::ValueRecovery::alreadyInJSStackAsUnboxedCell):
+ (JSC::ValueRecovery::alreadyInJSStackAsUnboxedBoolean):
+ (JSC::ValueRecovery::alreadyInJSStackAsUnboxedDouble):
+ (JSC::ValueRecovery::displacedInJSStack):
+ (JSC::ValueRecovery::isAlreadyInJSStack):
+ (JSC::ValueRecovery::virtualRegister):
+ (JSC::ValueRecovery::dump):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::resolveCallee):
+ (JSC::BytecodeGenerator::emitCall):
+ (JSC::BytecodeGenerator::emitConstruct):
+ * bytecompiler/BytecodeGenerator.h:
+ (JSC::BytecodeGenerator::registerFor):
+ * dfg/DFGAbstractState.h:
+ (AbstractState):
+ * dfg/DFGAssemblyHelpers.h:
+ (JSC::DFG::AssemblyHelpers::emitGetFromCallFrameHeaderPtr):
+ (JSC::DFG::AssemblyHelpers::emitPutToCallFrameHeader):
+ (JSC::DFG::AssemblyHelpers::emitPutImmediateToCallFrameHeader):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::getDirect):
+ (JSC::DFG::ByteCodeParser::findArgumentPositionForLocal):
+ (JSC::DFG::ByteCodeParser::addCall):
+ (JSC::DFG::ByteCodeParser::InlineStackEntry::remapOperand):
+ (JSC::DFG::ByteCodeParser::handleInlining):
+ (JSC::DFG::ByteCodeParser::parseBlock):
+ (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
+ * dfg/DFGGenerationInfo.h:
+ (GenerationInfo):
+ (JSC::DFG::GenerationInfo::needsSpill):
+ * dfg/DFGGraph.h:
+ * dfg/DFGJITCompiler.cpp:
+ (JSC::DFG::JITCompiler::compileEntry):
+ (JSC::DFG::JITCompiler::compileFunction):
+ * dfg/DFGJITCompiler.h:
+ (JSC::DFG::JITCompiler::beginCall):
+ * dfg/DFGOSREntry.cpp:
+ (JSC::DFG::prepareOSREntry):
+ * dfg/DFGOSRExitCompiler32_64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGOSRExitCompiler64.cpp:
+ (JSC::DFG::OSRExitCompiler::compileExit):
+ * dfg/DFGRepatch.cpp:
+ (JSC::DFG::tryBuildGetByIDList):
+ * dfg/DFGSpeculativeJIT.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
+ (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
+ * dfg/DFGSpeculativeJIT.h:
+ (SpeculativeJIT):
+ (JSC::DFG::SpeculativeJIT::spill):
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::emitCall):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::fillInteger):
+ (JSC::DFG::SpeculativeJIT::emitCall):
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGThunks.cpp:
+ (JSC::DFG::throwExceptionFromCallSlowPathGenerator):
+ (JSC::DFG::slowPathFor):
+ (JSC::DFG::virtualForThunkGenerator):
+ * dfg/DFGValueSource.cpp:
+ (JSC::DFG::ValueSource::dump):
+ * dfg/DFGValueSource.h:
+ (JSC::DFG::dataFormatToValueSourceKind):
+ (JSC::DFG::valueSourceKindToDataFormat):
+ (JSC::DFG::isInJSStack):
+ (JSC::DFG::ValueSource::forSpeculation):
+ (JSC::DFG::ValueSource::isInJSStack):
+ (JSC::DFG::ValueSource::valueRecovery):
+ * dfg/DFGVariableEventStream.cpp:
+ (JSC::DFG::VariableEventStream::reconstruct):
+ * heap/Heap.cpp:
+ (JSC::Heap::stack):
+ (JSC::Heap::getConservativeRegisterRoots):
+ (JSC::Heap::markRoots):
+ * heap/Heap.h:
+ (JSC):
+ (Heap):
+ * interpreter/CallFrame.cpp:
+ (JSC::CallFrame::stack):
+ * interpreter/CallFrame.h:
+ (JSC::ExecState::calleeAsValue):
+ (JSC::ExecState::callee):
+ (JSC::ExecState::codeBlock):
+ (JSC::ExecState::scope):
+ (JSC::ExecState::callerFrame):
+ (JSC::ExecState::returnPC):
+ (JSC::ExecState::hasReturnPC):
+ (JSC::ExecState::clearReturnPC):
+ (JSC::ExecState::bytecodeOffsetForNonDFGCode):
+ (JSC::ExecState::setBytecodeOffsetForNonDFGCode):
+ (JSC::ExecState::inlineCallFrame):
+ (JSC::ExecState::codeOriginIndexForDFG):
+ (JSC::ExecState::currentVPC):
+ (JSC::ExecState::setCurrentVPC):
+ (JSC::ExecState::setCallerFrame):
+ (JSC::ExecState::setScope):
+ (JSC::ExecState::init):
+ (JSC::ExecState::argumentCountIncludingThis):
+ (JSC::ExecState::offsetFor):
+ (JSC::ExecState::setArgumentCountIncludingThis):
+ (JSC::ExecState::setCallee):
+ (JSC::ExecState::setCodeBlock):
+ (JSC::ExecState::setReturnPC):
+ (JSC::ExecState::setInlineCallFrame):
+ (ExecState):
+ * interpreter/Interpreter.cpp:
+ (JSC::Interpreter::slideRegisterWindowForCall):
+ (JSC::eval):
+ (JSC::loadVarargs):
+ (JSC::Interpreter::dumpRegisters):
+ (JSC::Interpreter::throwException):
+ (JSC::Interpreter::execute):
+ (JSC::Interpreter::executeCall):
+ (JSC::Interpreter::executeConstruct):
+ (JSC::Interpreter::prepareForRepeatCall):
+ (JSC::Interpreter::endRepeatCall):
+ * interpreter/Interpreter.h:
+ (JSC::Interpreter::stack):
+ (Interpreter):
+ (JSC::Interpreter::execute):
+ (JSC):
+ * interpreter/JSStack.cpp: Copied from Source/JavaScriptCore/interpreter/RegisterFile.cpp.
+ (JSC::stackStatisticsMutex):
+ (JSC::JSStack::~JSStack):
+ (JSC::JSStack::growSlowCase):
+ (JSC::JSStack::gatherConservativeRoots):
+ (JSC::JSStack::releaseExcessCapacity):
+ (JSC::JSStack::initializeThreading):
+ (JSC::JSStack::committedByteCount):
+ (JSC::JSStack::addToCommittedByteCount):
+ * interpreter/JSStack.h: Copied from Source/JavaScriptCore/interpreter/RegisterFile.h.
+ (JSStack):
+ (JSC::JSStack::JSStack):
+ (JSC::JSStack::shrink):
+ (JSC::JSStack::grow):
+ * interpreter/RegisterFile.cpp: Removed.
+ * interpreter/RegisterFile.h: Removed.
+ * interpreter/VMInspector.cpp:
+ (JSC::VMInspector::dumpFrame):
+ * jit/JIT.cpp:
+ (JSC::JIT::JIT):
+ (JSC::JIT::privateCompile):
+ * jit/JIT.h:
+ (JSC):
+ (JIT):
+ * jit/JITCall.cpp:
+ (JSC::JIT::compileLoadVarargs):
+ (JSC::JIT::compileCallEval):
+ (JSC::JIT::compileCallEvalSlowCase):
+ (JSC::JIT::compileOpCall):
+ * jit/JITCall32_64.cpp:
+ (JSC::JIT::emit_op_ret):
+ (JSC::JIT::emit_op_ret_object_or_this):
+ (JSC::JIT::compileLoadVarargs):
+ (JSC::JIT::compileCallEval):
+ (JSC::JIT::compileCallEvalSlowCase):
+ (JSC::JIT::compileOpCall):
+ * jit/JITCode.h:
+ (JSC):
+ (JSC::JITCode::execute):
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::emitPutToCallFrameHeader):
+ (JSC::JIT::emitPutCellToCallFrameHeader):
+ (JSC::JIT::emitPutIntToCallFrameHeader):
+ (JSC::JIT::emitPutImmediateToCallFrameHeader):
+ (JSC::JIT::emitGetFromCallFrameHeaderPtr):
+ (JSC::JIT::emitGetFromCallFrameHeader32):
+ (JSC::JIT::updateTopCallFrame):
+ (JSC::JIT::unmap):
+ * jit/JITOpcodes.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ (JSC::JIT::privateCompileCTINativeCall):
+ (JSC::JIT::emit_op_end):
+ (JSC::JIT::emit_op_ret):
+ (JSC::JIT::emit_op_ret_object_or_this):
+ (JSC::JIT::emit_op_create_this):
+ (JSC::JIT::emit_op_get_arguments_length):
+ (JSC::JIT::emit_op_get_argument_by_val):
+ (JSC::JIT::emit_op_resolve_global_dynamic):
+ * jit/JITOpcodes32_64.cpp:
+ (JSC::JIT::privateCompileCTIMachineTrampolines):
+ (JSC::JIT::privateCompileCTINativeCall):
+ (JSC::JIT::emit_op_end):
+ (JSC::JIT::emit_op_create_this):
+ (JSC::JIT::emit_op_get_arguments_length):
+ (JSC::JIT::emit_op_get_argument_by_val):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::emit_op_get_scoped_var):
+ (JSC::JIT::emit_op_put_scoped_var):
+ * jit/JITPropertyAccess32_64.cpp:
+ (JSC::JIT::emit_op_get_scoped_var):
+ (JSC::JIT::emit_op_put_scoped_var):
+ * jit/JITStubs.cpp:
+ (JSC::ctiTrampoline):
+ (JSC::JITThunks::JITThunks):
+ (JSC):
+ (JSC::DEFINE_STUB_FUNCTION):
+ * jit/JITStubs.h:
+ (JSC):
+ (JITStackFrame):
+ * jit/JSInterfaceJIT.h:
+ * jit/SpecializedThunkJIT.h:
+ (JSC::SpecializedThunkJIT::SpecializedThunkJIT):
+ (JSC::SpecializedThunkJIT::returnJSValue):
+ (JSC::SpecializedThunkJIT::returnDouble):
+ (JSC::SpecializedThunkJIT::returnInt32):
+ (JSC::SpecializedThunkJIT::returnJSCell):
+ * llint/LLIntData.cpp:
+ (JSC::LLInt::Data::performAssertions):
+ * llint/LLIntOffsetsExtractor.cpp:
+ * llint/LLIntSlowPaths.cpp:
+ (JSC::LLInt::LLINT_SLOW_PATH_DECL):
+ (JSC::LLInt::genericCall):
+ * llint/LLIntSlowPaths.h:
+ (LLInt):
+ * llint/LowLevelInterpreter.asm:
+ * runtime/Arguments.cpp:
+ (JSC::Arguments::tearOffForInlineCallFrame):
+ * runtime/CommonSlowPaths.h:
+ (JSC::CommonSlowPaths::arityCheckFor):
+ * runtime/InitializeThreading.cpp:
+ (JSC::initializeThreadingOnce):
+ * runtime/JSActivation.cpp:
+ (JSC::JSActivation::visitChildren):
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSGlobalObject::globalExec):
+ * runtime/JSGlobalObject.h:
+ (JSC):
+ (JSGlobalObject):
+ * runtime/JSLock.cpp:
+ (JSC):
+ * runtime/JSVariableObject.h:
+ (JSVariableObject):
+ * runtime/MemoryStatistics.cpp:
+ (JSC::globalMemoryStatistics):
+
+2012-10-08 Kiran Muppala <cmuppala@apple.com>
+
+ Throttle DOM timers on hidden pages.
+ https://bugs.webkit.org/show_bug.cgi?id=98474
+
+ Reviewed by Maciej Stachowiak.
+
+ Add HIDDEN_PAGE_DOM_TIMER_THROTTLING feature define.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2012-10-08 Michael Saboff <msaboff@apple.com>
+
+ After r130344, OpaqueJSString() creates an empty string which should be a null string
+ https://bugs.webkit.org/show_bug.cgi?id=98417
+
+ Reviewed by Sam Weinig.
+
+ Changed create() of a null string to return 0. This is the same behavior as before r130344.
+
+ * API/OpaqueJSString.cpp:
+ (OpaqueJSString::create):
+
+2012-10-07 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
+
+ Rename first/second to key/value in HashMap iterators
+ https://bugs.webkit.org/show_bug.cgi?id=82784
+
+ Reviewed by Eric Seidel.
+
+ * API/JSCallbackObject.h:
+ (JSC::JSCallbackObjectData::JSPrivatePropertyMap::getPrivateProperty):
+ (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
+ (JSC::JSCallbackObjectData::JSPrivatePropertyMap::visitChildren):
+ * API/JSCallbackObjectFunctions.h:
+ (JSC::::getOwnNonIndexPropertyNames):
+ * API/JSClassRef.cpp:
+ (OpaqueJSClass::~OpaqueJSClass):
+ (OpaqueJSClassContextData::OpaqueJSClassContextData):
+ (OpaqueJSClass::contextData):
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::dump):
+ (JSC::EvalCodeCache::visitAggregate):
+ (JSC::CodeBlock::nameForRegister):
+ * bytecode/JumpTable.h:
+ (JSC::StringJumpTable::offsetForValue):
+ (JSC::StringJumpTable::ctiForValue):
+ * bytecode/LazyOperandValueProfile.cpp:
+ (JSC::LazyOperandValueProfileParser::getIfPresent):
+ * bytecode/SamplingTool.cpp:
+ (JSC::SamplingTool::dump):
+ * bytecompiler/BytecodeGenerator.cpp:
+ (JSC::BytecodeGenerator::addVar):
+ (JSC::BytecodeGenerator::addGlobalVar):
+ (JSC::BytecodeGenerator::addConstant):
+ (JSC::BytecodeGenerator::addConstantValue):
+ (JSC::BytecodeGenerator::emitLoad):
+ (JSC::BytecodeGenerator::addStringConstant):
+ (JSC::BytecodeGenerator::emitLazyNewFunction):
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::PropertyListNode::emitBytecode):
+ * debugger/Debugger.cpp:
+ * dfg/DFGArgumentsSimplificationPhase.cpp:
+ (JSC::DFG::ArgumentsSimplificationPhase::run):
+ (JSC::DFG::ArgumentsSimplificationPhase::observeBadArgumentsUse):
+ (JSC::DFG::ArgumentsSimplificationPhase::observeProperArgumentsUse):
+ (JSC::DFG::ArgumentsSimplificationPhase::isOKToOptimize):
+ (JSC::DFG::ArgumentsSimplificationPhase::removeArgumentsReferencingPhantomChild):
+ * dfg/DFGAssemblyHelpers.cpp:
+ (JSC::DFG::AssemblyHelpers::decodedCodeMapFor):
+ * dfg/DFGByteCodeCache.h:
+ (JSC::DFG::ByteCodeCache::~ByteCodeCache):
+ (JSC::DFG::ByteCodeCache::get):
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::cellConstant):
+ (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
+ * dfg/DFGStructureCheckHoistingPhase.cpp:
+ (JSC::DFG::StructureCheckHoistingPhase::run):
+ (JSC::DFG::StructureCheckHoistingPhase::noticeStructureCheck):
+ (JSC::DFG::StructureCheckHoistingPhase::noticeClobber):
+ * heap/Heap.cpp:
+ (JSC::Heap::markProtectedObjects):
+ * heap/Heap.h:
+ (JSC::Heap::forEachProtectedCell):
+ * heap/JITStubRoutineSet.cpp:
+ (JSC::JITStubRoutineSet::markSlow):
+ (JSC::JITStubRoutineSet::deleteUnmarkedJettisonedStubRoutines):
+ * heap/SlotVisitor.cpp:
+ (JSC::SlotVisitor::internalAppend):
+ * heap/Weak.h:
+ (JSC::weakRemove):
+ * jit/JIT.cpp:
+ (JSC::JIT::privateCompile):
+ * jit/JITStubs.cpp:
+ (JSC::JITThunks::ctiStub):
+ * parser/Parser.cpp:
+ (JSC::::parseStrictObjectLiteral):
+ * profiler/Profile.cpp:
+ (JSC::functionNameCountPairComparator):
+ (JSC::Profile::debugPrintDataSampleStyle):
+ * runtime/Identifier.cpp:
+ (JSC::Identifier::add):
+ * runtime/JSActivation.cpp:
+ (JSC::JSActivation::getOwnNonIndexPropertyNames):
+ (JSC::JSActivation::symbolTablePutWithAttributes):
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::setLength):
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::getOwnPropertySlotByIndex):
+ (JSC::JSObject::enterDictionaryIndexingModeWhenArrayStorageAlreadyExists):
+ (JSC::JSObject::deletePropertyByIndex):
+ (JSC::JSObject::getOwnPropertyNames):
+ (JSC::JSObject::defineOwnIndexedProperty):
+ (JSC::JSObject::attemptToInterceptPutByIndexOnHoleForPrototype):
+ (JSC::JSObject::putByIndexBeyondVectorLengthWithArrayStorage):
+ (JSC::JSObject::putDirectIndexBeyondVectorLengthWithArrayStorage):
+ (JSC::JSObject::getOwnPropertyDescriptor):
+ * runtime/JSSymbolTableObject.cpp:
+ (JSC::JSSymbolTableObject::getOwnNonIndexPropertyNames):
+ * runtime/JSSymbolTableObject.h:
+ (JSC::symbolTableGet):
+ (JSC::symbolTablePut):
+ (JSC::symbolTablePutWithAttributes):
+ * runtime/RegExpCache.cpp:
+ (JSC::RegExpCache::invalidateCode):
+ * runtime/SparseArrayValueMap.cpp:
+ (JSC::SparseArrayValueMap::putEntry):
+ (JSC::SparseArrayValueMap::putDirect):
+ (JSC::SparseArrayValueMap::visitChildren):
+ * runtime/WeakGCMap.h:
+ (JSC::WeakGCMap::clear):
+ (JSC::WeakGCMap::set):
+ * tools/ProfileTreeNode.h:
+ (JSC::ProfileTreeNode::sampleChild):
+ (JSC::ProfileTreeNode::childCount):
+ (JSC::ProfileTreeNode::dumpInternal):
+ (JSC::ProfileTreeNode::compareEntries):
+
+2012-10-05 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ JSC should have a way to gather and log Heap memory use and pause times
+ https://bugs.webkit.org/show_bug.cgi?id=98431
+
+ Reviewed by Geoffrey Garen.
+
+ In order to improve our infrastructure for benchmark-driven development, we should
+ have a centralized method of gathering and logging various statistics about the state
+ of the JS heap. This would allow us to create and to use other tools to analyze the
+ output of the VM after running various workloads.
+
+ The first two statistics that might be interesting is memory use by JSC and GC pause
+ times. We can control whether this recording happens through the use of the Options
+ class, allowing us to either use environment variables or command line flags.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * heap/Heap.cpp:
+ (JSC::Heap::collect): If we finish a collection and are still over our set GC heap size,
+ we end the program immediately and report an error. Also added recording of pause times.
+ * heap/Heap.h:
+ (Heap):
+ (JSC::Heap::shouldCollect): When we set a specific GC heap size through Options, we
+ ignore all other heuristics on when we should collect and instead only ask if we're
+ greater than the amount specified in the Option value. This allows us to view time/memory
+ tradeoffs more clearly.
+ * heap/HeapStatistics.cpp: Added.
+ (JSC):
+ (JSC::HeapStatistics::initialize):
+ (JSC::HeapStatistics::recordGCPauseTime):
+ (JSC::HeapStatistics::logStatistics):
+ (JSC::HeapStatistics::exitWithFailure):
+ (JSC::HeapStatistics::reportSuccess):
+ (JSC::HeapStatistics::parseMemoryAmount):
+ (StorageStatistics):
+ (JSC::StorageStatistics::StorageStatistics):
+ (JSC::StorageStatistics::operator()):
+ (JSC::StorageStatistics::objectWithOutOfLineStorageCount):
+ (JSC::StorageStatistics::objectCount):
+ (JSC::StorageStatistics::storageSize):
+ (JSC::StorageStatistics::storageCapacity):
+ (JSC::HeapStatistics::showObjectStatistics): Moved the old showHeapStatistics (renamed to showObjectStatistics)
+ to try to start collecting our various memory statistics gathering/reporting mechanisms scattered throughout the
+ codebase into one place.
+ * heap/HeapStatistics.h: Added.
+ (JSC):
+ (HeapStatistics):
+ * jsc.cpp:
+ (main):
+ * runtime/InitializeThreading.cpp:
+ (JSC::initializeThreadingOnce): We need to initialize our data structures for recording
+ statistics if necessary.
+ * runtime/Options.cpp: Add new Options for the various types of statistics we'll be gathering.
+ (JSC::parse):
+ (JSC):
+ (JSC::Options::initialize): Initialize the various new options using environment variables.
+ (JSC::Options::dumpOption):
+ * runtime/Options.h:
+ (JSC):
+
+2012-10-04 Rik Cabanier <cabanier@adobe.com>
+
+ Turn Compositing on by default in WebKit build
+ https://bugs.webkit.org/show_bug.cgi?id=98315
+
+ Reviewed by Simon Fraser.
+
+ enable -webkit-blend-mode on trunk.
+
+ * Configurations/FeatureDefines.xcconfig:
+
+2012-10-04 Michael Saboff <msaboff@apple.com>
+
+ Crash in Safari at com.apple.JavaScriptCore: WTF::StringImpl::is8Bit const + 12
+ https://bugs.webkit.org/show_bug.cgi?id=98433
+
+ Reviewed by Jessie Berlin.
+
+ The problem is due to a String with a null StringImpl (i.e. a null string).
+ Added a length check before the is8Bit() check since length() checks for a null StringImpl. Changed the
+ characters16() call to characters() since it can handle a null StringImpl as well.
+
+ * API/JSValueRef.cpp:
+ (JSValueMakeFromJSONString):
+
+2012-10-04 Benjamin Poulain <bpoulain@apple.com>
+
+ Use copyLCharsFromUCharSource() for IdentifierLCharFromUCharTranslator translation
+ https://bugs.webkit.org/show_bug.cgi?id=98335
+
+ Reviewed by Michael Saboff.
+
+ Michael Saboff added an optimized version of UChar->LChar conversion in r125846.
+ Use this function in JSC::Identifier.
+
+ * runtime/Identifier.cpp:
+ (JSC::IdentifierLCharFromUCharTranslator::translate):
+
+2012-10-04 Michael Saboff <msaboff@apple.com>
+
+ After r130344, OpaqueJSString() creates a empty string which should be a null string
+ https://bugs.webkit.org/show_bug.cgi?id=98417
+
+ Reviewed by Alexey Proskuryakov.
+
+ Removed the setting of enclosed string to an empty string from default constructor.
+ Before changeset r130344, the semantic was the default constructor produced a null
+ string.
+
+ * API/OpaqueJSString.h:
+ (OpaqueJSString::OpaqueJSString):
+
+2012-10-04 Csaba Osztrogonác <ossy@webkit.org>
+
+ [Qt] Add missing LLInt dependencies to the build system
+ https://bugs.webkit.org/show_bug.cgi?id=98394
+
+ Reviewed by Geoffrey Garen.
+
+ * DerivedSources.pri:
+ * LLIntOffsetsExtractor.pro:
+
+2012-10-03 Geoffrey Garen <ggaren@apple.com>
+
+ Next step toward fixing Windows: add new symbol.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2012-10-03 Geoffrey Garen <ggaren@apple.com>
+
+ First step toward fixing Windows: remove old symbol.
+
+ * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
+
+2012-10-03 Geoffrey Garen <ggaren@apple.com>
+
+ Removed the assumption that "final" objects have a fixed number of inline slots
+ https://bugs.webkit.org/show_bug.cgi?id=98332
+
+ Reviewed by Filip Pizlo.
+
+ This is a step toward object size inference.
+
+ I replaced the inline storage capacity constant with a data member per
+ structure, set the the maximum supported value for the constant to 100,
+ then fixed what broke. (Note that even though this patch increases the
+ theoretical maximum inline capacity, it doesn't change any actual inline
+ capacity.)
+
+ * dfg/DFGSpeculativeJIT32_64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compile):
+ * jit/JITPropertyAccess.cpp:
+ (JSC::JIT::compileGetDirectOffset): These functions just get a rename:
+ the constant they need is the first out of line offset along the offset
+ number line, which is not necessarily the same thing (and is, in this
+ patch, never the same thing) as the inline capacity of any given object.
+
+ (JSC::JIT::emit_op_get_by_pname):
+ * jit/JITPropertyAccess32_64.cpp: This function changes functionality,
+ since it needs to convert from the abstract offset number line to an
+ actual offset in memory, and it can't assume that inline and out-of-line
+ offsets are contiguous on the number line.
+
+ (JSC::JIT::compileGetDirectOffset): Updated for rename.
+
+ (JSC::JIT::emit_op_get_by_pname): Same as emit_op_get_by_pname above.
+
+ * llint/LowLevelInterpreter.asm: Updated to mirror changes in PropertyOffset.h,
+ since we duplicate values from there.
+
+ * llint/LowLevelInterpreter32_64.asm:
+ * llint/LowLevelInterpreter64.asm: Just like the JIT, most things are just
+ renames, and get_by_pname changes to do more math. I also standardized
+ offset calculations to use a hard-coded "-2", to match the JIT. This
+ isn't really better, but it makes global search and replace easier,
+ should we choose to refactor this code not to hard-code constants.
+
+ I also renamed loadPropertyAtVariableOffsetKnownNotFinal to
+ loadPropertyAtVariableOffsetKnownNotInline in order to sever the assumption
+ that inline capacity is tied to object type, and I changed the 64bit LLInt
+ to use this -- not using this previously seems to have been an oversight.
+
+ * runtime/JSObject.cpp:
+ (JSC::JSObject::visitChildren):
+ (JSC::JSFinalObject::visitChildren):
+ * runtime/JSObject.h:
+ (JSC::JSObject::offsetForLocation):
+ (JSNonFinalObject):
+ (JSC::JSFinalObject::createStructure):
+ (JSFinalObject):
+ (JSC::JSFinalObject::finishCreation): Updated for above changes.
+
+ * runtime/JSPropertyNameIterator.h:
+ (JSPropertyNameIterator):
+ (JSC::JSPropertyNameIterator::finishCreation): Store the inline capacity
+ of our object, since it's not a constant.
+
+ (JSC::JSPropertyNameIterator::getOffset): Removed. This function was
+ wrong. Luckily, it was also unused, since the C++ interpreter is gone.
+
+ * runtime/PropertyMapHashTable.h:
+ (PropertyTable): Use a helper function instead of hard-coding assumptions
+ about object types.
+
+ (JSC::PropertyTable::nextOffset):
+ * runtime/PropertyOffset.h:
+ (JSC):
+ (JSC::checkOffset):
+ (JSC::validateOffset):
+ (JSC::isInlineOffset):
+ (JSC::numberOfSlotsForLastOffset):
+ (JSC::propertyOffsetFor): Refactored these functions to take inline capacity
+ as an argument, since it's not fixed at compile time anymore.
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::Structure):
+ (JSC::Structure::flattenDictionaryStructure):
+ (JSC::Structure::putSpecificValue):
+ * runtime/Structure.h:
+ (Structure):
+ (JSC::Structure::outOfLineCapacity):
+ (JSC::Structure::hasInlineStorage):
+ (JSC::Structure::inlineCapacity):
+ (JSC::Structure::inlineSize):
+ (JSC::Structure::firstValidOffset):
+ (JSC::Structure::lastValidOffset):
+ (JSC::Structure::create): Removed some hard-coded assumptions about inline
+ capacity and object type, and replaced with more liberal use of helper functions.
+
+2012-10-03 Michael Saboff <msaboff@apple.com>
+
+ OpaqueJSString doesn't optimally handle 8 bit strings
+ https://bugs.webkit.org/show_bug.cgi?id=98300
+
+ Reviewed by Geoffrey Garen.
+
+ Change OpaqueJSString to store and manage a String instead of a UChar buffer.
+ The member string is a copy of any string used during creation.
+
+ * API/OpaqueJSString.cpp:
+ (OpaqueJSString::create):
+ (OpaqueJSString::identifier):
+ * API/OpaqueJSString.h:
+ (OpaqueJSString::characters):
+ (OpaqueJSString::length):
+ (OpaqueJSString::string):
+ (OpaqueJSString::OpaqueJSString):
+ (OpaqueJSString):
+
+2012-10-03 Filip Pizlo <fpizlo@apple.com>
+
+ Array.splice should be fast when it is used to remove elements other than the very first
+ https://bugs.webkit.org/show_bug.cgi?id=98236
+
+ Reviewed by Michael Saboff.
+
+ Applied the same technique that was used to optimize the unshift case of splice in
+ http://trac.webkit.org/changeset/129676. This is a >20x speed-up on programs that
+ use splice for element removal.
+
+ * runtime/ArrayPrototype.cpp:
+ (JSC::shift):
+ * runtime/JSArray.cpp:
+ (JSC::JSArray::shiftCount):
+ * runtime/JSArray.h:
+ (JSArray):
+
+2012-09-16 Mark Hahnenberg <mhahnenberg@apple.com>
+
+ Delayed structure sweep can leak structures without bound
+ https://bugs.webkit.org/show_bug.cgi?id=96546
+
+ Reviewed by Geoffrey Garen.
+
+ This patch gets rid of the separate Structure allocator in the MarkedSpace and adds two new destructor-only
+ allocators. We now have separate allocators for our three types of objects: those objects with no destructors,
+ those objects with destructors and with immortal structures, and those objects with destructors that don't have
+ immortal structures. All of the objects of the third type (destructors without immortal structures) now
+ inherit from a new class named JSDestructibleObject (which in turn is a subclass of JSNonFinalObject), which stores
+ the ClassInfo for these classes at a fixed offset for safe retrieval during sweeping/destruction.
+
+ * API/JSCallbackConstructor.cpp: Use JSDestructibleObject for JSCallbackConstructor.
+ (JSC):
+ (JSC::JSCallbackConstructor::JSCallbackConstructor):
+ * API/JSCallbackConstructor.h:
+ (JSCallbackConstructor):
+ * API/JSCallbackObject.cpp: Inherit from JSDestructibleObject for normal JSCallbackObjects and use a finalizer for
+ JSCallbackObject<JSGlobalObject>, since JSGlobalObject also uses a finalizer.
+ (JSC):
+ (JSC::::create): We need to move the create function for JSCallbackObject<JSGlobalObject> out of line so we can add
+ the finalizer for it. We don't want to add the finalizer is something like finishCreation in case somebody decides
+ to subclass this. We use this same technique for many other subclasses of JSGlobalObject.
+ (JSC::::createStructure):
+ * API/JSCallbackObject.h:
+ (JSCallbackObject):
+ (JSC):
+ * API/JSClassRef.cpp: Change all the JSCallbackObject<JSNonFinalObject> to use JSDestructibleObject instead.
+ (OpaqueJSClass::prototype):
+ * API/JSObjectRef.cpp: Ditto.
+ (JSObjectMake):
+ (JSObjectGetPrivate):
+ (JSObjectSetPrivate):
+ (JSObjectGetPrivateProperty):
+ (JSObjectSetPrivateProperty):
+ (JSObjectDeletePrivateProperty):
+ * API/JSValueRef.cpp: Ditto.
+ (JSValueIsObjectOfClass):
+ * API/JSWeakObjectMapRefPrivate.cpp: Ditto.
+ * JSCTypedArrayStubs.h:
+ (JSC):
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * dfg/DFGSpeculativeJIT.h: Use the proper allocator type when doing inline allocation in the DFG.
+ (JSC::DFG::SpeculativeJIT::emitAllocateBasicJSObject):
+ (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject):
+ * heap/Heap.cpp:
+ (JSC):
+ * heap/Heap.h: Add accessors for the various types of allocators now. Also remove the isSafeToSweepStructures function
+ since it's always safe to sweep Structures now.
+ (JSC::Heap::allocatorForObjectWithNormalDestructor):
+ (JSC::Heap::allocatorForObjectWithImmortalStructureDestructor):
+ (Heap):
+ (JSC::Heap::allocateWithNormalDestructor):
+ (JSC):
+ (JSC::Heap::allocateWithImmortalStructureDestructor):
+ * heap/IncrementalSweeper.cpp: Remove all the logic to detect when it's safe to sweep Structures from the
+ IncrementalSweeper since it's always safe to sweep Structures now.
+ (JSC::IncrementalSweeper::IncrementalSweeper):
+ (JSC::IncrementalSweeper::sweepNextBlock):
+ (JSC::IncrementalSweeper::startSweeping):
+ (JSC::IncrementalSweeper::willFinishSweeping):
+ (JSC):
+ * heap/IncrementalSweeper.h:
+ (IncrementalSweeper):
+ * heap/MarkedAllocator.cpp: Remove the logic that was preventing us from sweeping Structures if it wasn't safe. Add
+ tracking of the specific destructor type of allocator.
+ (JSC::MarkedAllocator::tryAllocateHelper):
+ (JSC::MarkedAllocator::allocateBlock):
+ * heap/MarkedAllocator.h:
+ (JSC::MarkedAllocator::destructorType):
+ (MarkedAllocator):
+ (JSC::MarkedAllocator::MarkedAllocator):
+ (JSC::MarkedAllocator::init):
+ * heap/MarkedBlock.cpp: Add all the destructor type stuff to MarkedBlocks so that we do the right thing when sweeping.
+ We also use the stored destructor type to determine the right thing to do in all JSCell::classInfo() calls.
+ (JSC::MarkedBlock::create):
+ (JSC::MarkedBlock::MarkedBlock):
+ (JSC):
+ (JSC::MarkedBlock::specializedSweep):
+ (JSC::MarkedBlock::sweep):
+ (JSC::MarkedBlock::sweepHelper):
+ * heap/MarkedBlock.h:
+ (JSC):
+ (JSC::MarkedBlock::allocator):
+ (JSC::MarkedBlock::destructorType):
+ * heap/MarkedSpace.cpp: Add the new destructor allocators to MarkedSpace.
+ (JSC::MarkedSpace::MarkedSpace):
+ (JSC::MarkedSpace::resetAllocators):
+ (JSC::MarkedSpace::canonicalizeCellLivenessData):
+ (JSC::MarkedSpace::isPagedOut):
+ (JSC::MarkedSpace::freeBlock):
+ * heap/MarkedSpace.h:
+ (MarkedSpace):
+ (JSC::MarkedSpace::immortalStructureDestructorAllocatorFor):
+ (JSC::MarkedSpace::normalDestructorAllocatorFor):
+ (JSC::MarkedSpace::allocateWithImmortalStructureDestructor):
+ (JSC::MarkedSpace::allocateWithNormalDestructor):
+ (JSC::MarkedSpace::forEachBlock):
+ * heap/SlotVisitor.cpp: Add include because the symbol was needed in an inlined function.
+ * jit/JIT.h: Make sure we use the correct allocator when doing inline allocations in the baseline JIT.
+ * jit/JITInlineMethods.h:
+ (JSC::JIT::emitAllocateBasicJSObject):
+ (JSC::JIT::emitAllocateJSFinalObject):
+ (JSC::JIT::emitAllocateJSArray):
+ * jsc.cpp:
+ (GlobalObject::create): Add finalizer here since JSGlobalObject needs to use a finalizer instead of inheriting from
+ JSDestructibleObject.
+ * runtime/Arguments.cpp: Inherit from JSDestructibleObject.
+ (JSC):
+ * runtime/Arguments.h:
+ (Arguments):
+ (JSC::Arguments::Arguments):
+ * runtime/ErrorPrototype.cpp: Added an assert to make sure we have a trivial destructor.
+ (JSC):
+ * runtime/Executable.h: Indicate that all of the Executable* classes have immortal Structures.
+ (JSC):
+ * runtime/InternalFunction.cpp: Inherit from JSDestructibleObject.
+ (JSC):
+ (JSC::InternalFunction::InternalFunction):
+ * runtime/InternalFunction.h:
+ (InternalFunction):
+ * runtime/JSCell.h: Added two static bools, needsDestruction and hasImmortalStructure, that classes can override
+ to indicate at compile time which part of the heap they should be allocated in.
+ (JSC::allocateCell): Use the appropriate allocator depending on the destructor type.
+ * runtime/JSDestructibleObject.h: Added. New class that stores the ClassInfo of any subclass so that it can be
+ accessed safely when the object is being destroyed.
+ (JSC):
+ (JSDestructibleObject):
+ (JSC::JSDestructibleObject::classInfo):
+ (JSC::JSDestructibleObject::JSDestructibleObject):
+ (JSC::JSCell::classInfo): Checks the current MarkedBlock to see where it should get the ClassInfo from so that it's always safe.
+ * runtime/JSGlobalObject.cpp: JSGlobalObject now uses a finalizer instead of a destructor so that it can avoid forcing all
+ of its relatives in the inheritance hierarchy (e.g. JSScope) to use destructors as well.
+ (JSC::JSGlobalObject::reset):
+ * runtime/JSGlobalObject.h:
+ (JSGlobalObject):
+ (JSC::JSGlobalObject::createRareDataIfNeeded): Since we always create a finalizer now, we don't have to worry about adding one
+ for the m_rareData field when it's created.
+ (JSC::JSGlobalObject::create):
+ (JSC):
+ * runtime/JSGlobalThis.h: Inherit from JSDestructibleObject.
+ (JSGlobalThis):
+ (JSC::JSGlobalThis::JSGlobalThis):
+ * runtime/JSPropertyNameIterator.h: Has an immortal Structure.
+ (JSC):
+ * runtime/JSScope.cpp:
+ (JSC):
+ * runtime/JSString.h: Has an immortal Structure.
+ (JSC):
+ * runtime/JSWrapperObject.h: Inherit from JSDestructibleObject.
+ (JSWrapperObject):
+ (JSC::JSWrapperObject::JSWrapperObject):
+ * runtime/MathObject.cpp: Cleaning up some of the inheritance stuff.
+ (JSC):
+ * runtime/NameInstance.h: Inherit from JSDestructibleObject.
+ (NameInstance):
+ * runtime/RegExp.h: Has immortal Structure.
+ (JSC):
+ * runtime/RegExpObject.cpp: Inheritance cleanup.
+ (JSC):
+ * runtime/SparseArrayValueMap.h: Has immortal Structure.
+ (JSC):
+ * runtime/Structure.h: Has immortal Structure.
+ (JSC):
+ * runtime/StructureChain.h: Ditto.
+ (JSC):
+ * runtime/SymbolTable.h: Ditto.
+ (SharedSymbolTable):
+ (JSC):
+
+== Rolled over to ChangeLog-2012-10-02 ==