1 2012-05-22 Yong Li <yoli@rim.com>
3 [BlackBerry] getPlatformThreadRegisters() should fetch target thread's registers
4 https://bugs.webkit.org/show_bug.cgi?id=87148
6 Reviewed by George Staikos.
8 Our previous implementation of getPlatformThreadRegisters() read registers in current
9 thread's context but it is supposed to read the target thread's registers.
11 * heap/MachineStackMarker.cpp:
12 (JSC::getPlatformThreadRegisters):
14 2012-05-05 Filip Pizlo <fpizlo@apple.com>
16 DFG should support reflective arguments access
17 https://bugs.webkit.org/show_bug.cgi?id=85721
19 Reviewed by Oliver Hunt.
21 Merged r116345 from dfgopt.
23 This adds support for op_create_arguments to the DFG. No other arguments-related
24 opcodes are added by this change, though it does add a lot of the scaffolding
25 necessary for the other ops.
27 This also adds GetByVal/PutByVal optimizations for Arguments.
29 Finally, this rationalizes slowPathCall with no return. Previously, that would
30 work via callOperation() overloads that took InvalidGPRReg as the return GPR.
31 But that creates awful ambiguity, since we had template functions that were
32 polymorphic over all parameters except the second, which was a GPRReg, and a
33 bunch of non-template overloads that also potentially had GPRReg as the second
34 argument. I finally started to hit this ambiguity and was getting absolutely
35 bizarre compiler errors, that made me feel like I was programming in SML. So,
36 I changed the no-argument overloads to take NoResultTag instead, which made
37 everything sensible again by eliminating the overload ambiguity.
39 This is a ~7% speed-up on V8/earley and neutral elsewhere.
41 * bytecode/PredictedType.h:
42 (JSC::isArgumentsPrediction):
44 (JSC::isActionableMutableArrayPrediction):
45 * dfg/DFGAbstractState.cpp:
46 (JSC::DFG::AbstractState::execute):
47 * dfg/DFGByteCodeParser.cpp:
48 (JSC::DFG::ByteCodeParser::parseBlock):
49 * dfg/DFGCCallHelpers.h:
50 (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
52 * dfg/DFGCSEPhase.cpp:
53 (JSC::DFG::CSEPhase::performNodeCSE):
54 * dfg/DFGCapabilities.h:
55 (JSC::DFG::canCompileOpcode):
56 (JSC::DFG::canInlineOpcode):
58 * dfg/DFGFixupPhase.cpp:
59 (JSC::DFG::FixupPhase::fixupNode):
61 (JSC::DFG::Node::unmodifiedArgumentsRegister):
63 (JSC::DFG::Node::shouldSpeculateArguments):
66 * dfg/DFGOperations.cpp:
67 * dfg/DFGOperations.h:
68 * dfg/DFGPredictionPropagationPhase.cpp:
69 (JSC::DFG::PredictionPropagationPhase::propagate):
70 * dfg/DFGSpeculativeJIT.cpp:
71 (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
72 (JSC::DFG::SpeculativeJIT::compileGetByValOnArguments):
74 (JSC::DFG::SpeculativeJIT::compileGetArgumentsLength):
75 * dfg/DFGSpeculativeJIT.h:
76 (JSC::DFG::SpeculativeJIT::silentSpillAllRegistersImpl):
78 (JSC::DFG::SpeculativeJIT::pickCanTrample):
79 (JSC::DFG::SpeculativeJIT::callOperation):
80 * dfg/DFGSpeculativeJIT32_64.cpp:
81 (JSC::DFG::SpeculativeJIT::cachedPutById):
82 (JSC::DFG::SpeculativeJIT::compile):
83 * dfg/DFGSpeculativeJIT64.cpp:
84 (JSC::DFG::SpeculativeJIT::cachedPutById):
85 (JSC::DFG::SpeculativeJIT::compile):
86 * runtime/Arguments.h:
89 (JSC::Arguments::offsetOfData):
91 2011-05-21 Geoffrey Garen <ggaren@apple.com>
93 GC allocation trigger should be tuned to system RAM
94 https://bugs.webkit.org/show_bug.cgi?id=87039
96 Reviewed by Darin Adler.
98 This helps avoid OOM crashes on small platforms, and helps avoid "too much GC"
99 performance issues on big platforms.
103 (JSC::Heap::collect):
105 (Heap): GC balances between a fixed minimum and a proportional multiplier,
106 which are limited based on system RAM.
108 * runtime/JSGlobalData.cpp:
109 (JSC::JSGlobalData::JSGlobalData):
110 (JSC::JSGlobalData::createContextGroup):
111 (JSC::JSGlobalData::create):
112 (JSC::JSGlobalData::createLeaked):
113 * runtime/JSGlobalData.h:
114 (JSGlobalData): Renamed HeapSize to HeapType because the exact size is
115 influenced by the heap type, but not determined by it.
117 2012-05-21 Gavin Barraclough <barraclough@apple.com>
119 Disable private names by default in WebCore
120 https://bugs.webkit.org/show_bug.cgi?id=87088
122 Reviewed by Geoff Garen.
124 r117859 introduced a preliminary implementation of ES6-like private name objects to JSC.
125 These are probably not yet ready to be web-facing, so disabling by default in WebCore.
126 Opting-in for JSC & DumpRenderTree so that we can still run the fast/js/names.html test.
130 (GlobalObject::javaScriptExperimentsEnabled):
131 - Implemented new trap to opt-in to private names support.
132 * runtime/JSGlobalObject.cpp:
134 (JSC::JSGlobalObject::reset):
135 - Only add the Name property to the global object if experiments are enabled.
136 * runtime/JSGlobalObject.h:
137 (GlobalObjectMethodTable):
138 - Added new trap to enabled experiments.
140 (JSC::JSGlobalObject::finishCreation):
141 - Set the global object's m_experimentsEnabled state on construction.
142 (JSC::JSGlobalObject::javaScriptExperimentsEnabled):
145 2012-05-06 Filip Pizlo <fpizlo@apple.com>
147 Truncating multiplication on integers should not OSR exit every time
148 https://bugs.webkit.org/show_bug.cgi?id=85752
150 Reviewed by Gavin Barraclough.
152 Merge r116264 from dfgopt.
154 * dfg/DFGAbstractState.cpp:
155 (JSC::DFG::AbstractState::execute):
156 * dfg/DFGFixupPhase.cpp:
157 (JSC::DFG::FixupPhase::fixupNode):
159 (JSC::DFG::Graph::mulShouldSpeculateInteger):
161 (JSC::DFG::Graph::mulImmediateShouldSpeculateInteger):
162 * dfg/DFGPredictionPropagationPhase.cpp:
163 (JSC::DFG::PredictionPropagationPhase::propagate):
164 (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
165 * dfg/DFGSpeculativeJIT.cpp:
166 (JSC::DFG::SpeculativeJIT::compileArithMul):
168 2012-05-21 Csaba Osztrogonác <ossy@webkit.org>
170 DFG should be able to compute dominators
171 https://bugs.webkit.org/show_bug.cgi?id=85269
173 Unreviewed trivial 32 bit buildfix after r117861.
176 (JSC::DFG::Graph::dump):
178 2012-05-21 Filip Pizlo <fpizlo@apple.com>
180 DFG should be able to compute dominators
181 https://bugs.webkit.org/show_bug.cgi?id=85269
183 Reviewed by Oliver Hunt.
185 Merged r115754 from dfgopt.
187 Implements a naive dominator calculator, which is currently just used to
188 print information in graph dumps. I've enabled it by default mainly to
189 be able to track its performance impact. So far it appears that there is
190 none, which is unsurprising given that the number of basic blocks in most
193 Also tweaked bytecode dumping to reveal more useful information about the
194 nature of the code block.
197 * GNUmakefile.list.am:
198 * JavaScriptCore.xcodeproj/project.pbxproj:
200 * bytecode/CodeBlock.cpp:
201 (JSC::CodeBlock::dump):
202 * dfg/DFGDominators.cpp: Added.
204 (JSC::DFG::Dominators::Dominators):
205 (JSC::DFG::Dominators::~Dominators):
206 (JSC::DFG::Dominators::compute):
207 (JSC::DFG::Dominators::iterateForBlock):
208 * dfg/DFGDominators.h: Added.
211 (JSC::DFG::Dominators::invalidate):
212 (JSC::DFG::Dominators::computeIfNecessary):
213 (JSC::DFG::Dominators::isValid):
214 (JSC::DFG::Dominators::dominates):
218 (JSC::DFG::Graph::dump):
222 2012-05-21 Michael Saboff <msaboff@apple.com>
224 Cleanup of Calls to operationStrCat and operationNewArray and Use Constructor after r117729
225 https://bugs.webkit.org/show_bug.cgi?id=87027
227 Reviewed by Oliver Hunt.
229 Change calls to operationStrCat and operationNewArray to provide the
230 pointer to the EncodedJSValue* data buffer instead of the ScratchBuffer
231 that contains it. Added a ScratchBuffer::create() function.
232 This is a clean-up to r117729.
234 * dfg/DFGOperations.cpp:
235 * dfg/DFGSpeculativeJIT32_64.cpp:
236 (JSC::DFG::SpeculativeJIT::compile):
237 * dfg/DFGSpeculativeJIT64.cpp:
238 (JSC::DFG::SpeculativeJIT::compile):
239 * runtime/JSGlobalData.h:
240 (JSC::ScratchBuffer::create):
241 (JSC::ScratchBuffer::dataBuffer):
242 (JSC::JSGlobalData::scratchBufferForSize):
244 2012-05-15 Gavin Barraclough <barraclough@apple.com>
246 Add support for private names
247 https://bugs.webkit.org/show_bug.cgi?id=86509
249 Reviewed by Oliver Hunt.
251 The spec isn't final, but we can start adding support to allow property maps
252 to contain keys that aren't identifiers.
254 * API/JSCallbackObjectFunctions.h:
255 (JSC::::getOwnPropertySlot):
257 (JSC::::deleteProperty):
258 (JSC::::getStaticValue):
259 (JSC::::staticFunctionGetter):
260 (JSC::::callbackGetter):
261 - Only expose public named properties over the JSC API.
263 * DerivedSources.make:
264 * DerivedSources.pri:
265 * GNUmakefile.list.am:
266 * JavaScriptCore.gypi:
267 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
268 * JavaScriptCore.xcodeproj/project.pbxproj:
270 - Added new files to build system.
271 * dfg/DFGOperations.cpp:
272 (JSC::DFG::operationPutByValInternal):
273 - Added support for property access with name objects.
274 * interpreter/CallFrame.h:
275 (JSC::ExecState::privateNamePrototypeTable):
276 - Added hash table for NamePrototype
277 * interpreter/Interpreter.cpp:
278 (JSC::Interpreter::privateExecute):
279 - Added support for property access with name objects.
281 (JSC::DEFINE_STUB_FUNCTION):
282 - Added support for property access with name objects.
283 * llint/LLIntSlowPaths.cpp:
284 (JSC::LLInt::getByVal):
285 (JSC::LLInt::LLINT_SLOW_PATH_DECL):
286 * runtime/CommonSlowPaths.h:
287 (JSC::CommonSlowPaths::opIn):
288 * runtime/JSActivation.cpp:
289 (JSC::JSActivation::symbolTableGet):
290 (JSC::JSActivation::symbolTablePut):
291 (JSC::JSActivation::symbolTablePutWithAttributes):
292 - Added support for property access with name objects.
293 * runtime/JSGlobalData.cpp:
295 (JSC::JSGlobalData::JSGlobalData):
296 (JSC::JSGlobalData::~JSGlobalData):
297 * runtime/JSGlobalData.h:
299 - Added hash table for NamePrototype
300 * runtime/JSGlobalObject.cpp:
301 (JSC::JSGlobalObject::reset):
302 * runtime/JSGlobalObject.h:
304 (JSC::JSGlobalObject::privateNameStructure):
305 (JSC::JSGlobalObject::symbolTableHasProperty):
306 - Added new global properties.
308 * runtime/JSTypeInfo.h:
309 (JSC::TypeInfo::isName):
310 - Added type for NameInstances, for fast isName check.
311 * runtime/JSVariableObject.cpp:
312 (JSC::JSVariableObject::deleteProperty):
313 (JSC::JSVariableObject::symbolTableGet):
314 * runtime/JSVariableObject.h:
315 (JSC::JSVariableObject::symbolTableGet):
316 (JSC::JSVariableObject::symbolTablePut):
317 (JSC::JSVariableObject::symbolTablePutWithAttributes):
318 - symbol table lookup should take a PropertyName.
319 * runtime/Lookup.cpp:
320 (JSC::setUpStaticFunctionSlot):
322 (JSC::HashTable::entry):
323 - entry lookup should take a PropertyName.
324 * runtime/NameConstructor.cpp: Added.
326 (JSC::NameConstructor::NameConstructor):
327 (JSC::NameConstructor::finishCreation):
328 (JSC::constructPrivateName):
329 (JSC::NameConstructor::getConstructData):
330 (JSC::NameConstructor::getCallData):
331 * runtime/NameConstructor.h: Added.
334 (JSC::NameConstructor::create):
335 (JSC::NameConstructor::createStructure):
337 * runtime/NameInstance.cpp: Added.
339 (JSC::NameInstance::NameInstance):
340 (JSC::NameInstance::destroy):
341 * runtime/NameInstance.h: Added.
344 (JSC::NameInstance::createStructure):
345 (JSC::NameInstance::create):
346 (JSC::NameInstance::privateName):
347 (JSC::NameInstance::nameString):
348 (JSC::NameInstance::finishCreation):
351 * runtime/NamePrototype.cpp: Added.
353 (JSC::NamePrototype::NamePrototype):
354 (JSC::NamePrototype::finishCreation):
355 (JSC::NamePrototype::getOwnPropertySlot):
356 (JSC::NamePrototype::getOwnPropertyDescriptor):
357 (JSC::privateNameProtoFuncToString):
358 * runtime/NamePrototype.h: Added.
361 (JSC::NamePrototype::create):
362 (JSC::NamePrototype::createStructure):
364 * runtime/PrivateName.h: Added.
367 (JSC::PrivateName::PrivateName):
368 (JSC::PrivateName::uid):
369 - A private name object holds a StringImpl that can be used as a unique key in a property map.
370 * runtime/PropertyMapHashTable.h:
371 (JSC::PropertyTable::find):
372 (JSC::PropertyTable::findWithString):
373 - Strings should only match keys in the table that are identifiers.
374 * runtime/PropertyName.h:
375 (JSC::PropertyName::PropertyName):
377 (JSC::PropertyName::uid):
378 (JSC::PropertyName::publicName):
379 (JSC::PropertyName::asIndex):
382 - replaced impl() & ustring() with uid() [to get the raw impl] and publicName() [impl or null, if not an identifier].
383 * runtime/Structure.cpp:
384 (JSC::Structure::despecifyDictionaryFunction):
385 (JSC::Structure::addPropertyTransitionToExistingStructure):
386 (JSC::Structure::addPropertyTransition):
387 (JSC::Structure::attributeChangeTransition):
388 (JSC::Structure::get):
389 (JSC::Structure::despecifyFunction):
390 (JSC::Structure::putSpecificValue):
391 (JSC::Structure::remove):
392 (JSC::Structure::getPropertyNamesFromStructure):
393 * runtime/Structure.h:
394 (JSC::Structure::get):
395 - call uid() to get a PropertyName raw impl, for use as a key.
397 2012-04-30 Filip Pizlo <fpizlo@apple.com>
399 Bytecode dumps should contain data about the state of get_by_id caches
400 https://bugs.webkit.org/show_bug.cgi?id=85246
402 Reviewed by Gavin Barraclough.
404 Merge r115694 from dfgopt.
406 Changed the DFG bytecode parser (and the code that calls it) to be able
407 to call codeBlock->dump() on the code blocks being parsed.
409 Changed bytecode dumping to be able to print the state of get_by_id
410 caches inline with the bytecode.
412 Removed the old StructureStubInfo dumping code, which no longer worked
413 right, and was incapable of telling us information about chain and list
416 This change does not add dumping for put_by_id caches. We can add that
419 * bytecode/CodeBlock.cpp:
420 (JSC::CodeBlock::printUnaryOp):
421 (JSC::CodeBlock::printBinaryOp):
422 (JSC::CodeBlock::printConditionalJump):
423 (JSC::CodeBlock::printGetByIdOp):
424 (JSC::dumpStructure):
427 (JSC::CodeBlock::printGetByIdCacheStatus):
428 (JSC::CodeBlock::printCallOp):
429 (JSC::CodeBlock::printPutByIdOp):
430 (JSC::printGlobalResolveInfo):
431 (JSC::CodeBlock::printStructure):
432 (JSC::CodeBlock::printStructures):
433 (JSC::CodeBlock::dump):
434 (JSC::CodeBlock::visitStructures):
435 (JSC::ProgramCodeBlock::jitCompileImpl):
436 (JSC::EvalCodeBlock::jitCompileImpl):
437 (JSC::FunctionCodeBlock::jitCompileImpl):
438 * bytecode/CodeBlock.h:
440 (JSC::CodeBlock::jitCompile):
444 * dfg/DFGByteCodeParser.cpp:
445 (JSC::DFG::ByteCodeParser::ByteCodeParser):
447 (JSC::DFG::ByteCodeParser::parseCodeBlock):
449 * dfg/DFGByteCodeParser.h:
453 (JSC::DFG::tryCompile):
454 (JSC::DFG::tryCompileFunction):
457 (JSC::DFG::tryCompile):
458 (JSC::DFG::tryCompileFunction):
459 * dfg/DFGOSRExitCompiler.cpp:
461 (JSC::jitCompileIfAppropriate):
462 (JSC::jitCompileFunctionIfAppropriate):
463 * llint/LLIntSlowPaths.cpp:
464 (JSC::LLInt::jitCompileAndSetHeuristics):
465 * runtime/Executable.cpp:
466 (JSC::EvalExecutable::jitCompile):
467 (JSC::EvalExecutable::compileInternal):
468 (JSC::ProgramExecutable::jitCompile):
469 (JSC::ProgramExecutable::compileInternal):
470 (JSC::FunctionExecutable::jitCompileForCall):
471 (JSC::FunctionExecutable::jitCompileForConstruct):
472 (JSC::FunctionExecutable::compileForCallInternal):
473 (JSC::FunctionExecutable::compileForConstructInternal):
474 * runtime/Executable.h:
477 (FunctionExecutable):
478 (JSC::FunctionExecutable::jitCompileFor):
479 * runtime/ExecutionHarness.h:
480 (JSC::prepareForExecution):
481 (JSC::prepareFunctionForExecution):
483 2012-05-21 Carlos Garcia Campos <cgarcia@igalia.com>
485 Unreviewed. Fix make distcheck.
487 * GNUmakefile.list.am: Add missing header files.
489 2012-05-21 Allan Sandfeld Jensen <allan.jensen@nokia.com>
492 https://bugs.webkit.org/show_bug.cgi?id=86465
494 Reviewed by Darin Adler.
496 Set emptyValueIsZero flag so RegExpKey can be used with the non-copyable RegExp values.
498 * runtime/RegExpKey.h:
500 2012-05-20 Michael Saboff <msaboff@apple.com>
502 JSGlobalData ScratchBuffers Are Not Visited During Garbage Collection
503 https://bugs.webkit.org/show_bug.cgi?id=86553
505 Reviewed by Gavin Barraclough.
507 Scratch buffers can contain the only reference to live objects.
508 Therefore visit scratch buffer contents as conservative roots.
509 Changed the scratch buffers to be a struct with an "active"
510 length and the actual buffer. The users of the scratch
511 buffer emit code where needed to set and clear the active
512 length as appropriate. During marking, the active count is
513 used for conservative marking.
515 * dfg/DFGAssemblyHelpers.h:
516 (JSC::DFG::AssemblyHelpers::debugCall):
517 * dfg/DFGOSRExitCompiler32_64.cpp:
518 (JSC::DFG::OSRExitCompiler::compileExit):
519 * dfg/DFGOSRExitCompiler64.cpp:
520 (JSC::DFG::OSRExitCompiler::compileExit):
521 * dfg/DFGOperations.cpp:
522 * dfg/DFGOperations.h:
523 * dfg/DFGSpeculativeJIT32_64.cpp:
524 (JSC::DFG::SpeculativeJIT::compile):
525 * dfg/DFGSpeculativeJIT64.cpp:
526 (JSC::DFG::SpeculativeJIT::compile):
528 (JSC::DFG::osrExitGenerationThunkGenerator):
530 (JSC::Heap::markRoots):
531 * runtime/JSGlobalData.cpp:
532 (JSC::JSGlobalData::gatherConservativeRoots):
533 * runtime/JSGlobalData.h:
534 (JSC::ScratchBuffer::ScratchBuffer):
536 (JSC::ScratchBuffer::allocationSize):
537 (JSC::ScratchBuffer::setActiveLength):
538 (JSC::ScratchBuffer::activeLength):
539 (JSC::ScratchBuffer::activeLengthPtr):
540 (JSC::ScratchBuffer::dataBuffer):
542 (JSC::JSGlobalData::scratchBufferForSize):
544 2012-05-20 Filip Pizlo <fpizlo@apple.com>
546 Predicted types should know about arguments
547 https://bugs.webkit.org/show_bug.cgi?id=85165
549 Reviewed by Oliver Hunt.
551 Merge r115604 from dfgopt.
553 * bytecode/PredictedType.cpp:
554 (JSC::predictionToString):
555 (JSC::predictionToAbbreviatedString):
556 (JSC::predictionFromClassInfo):
557 * bytecode/PredictedType.h:
559 (JSC::isMyArgumentsPrediction):
560 (JSC::isArgumentsPrediction):
562 2012-05-20 Filip Pizlo <fpizlo@apple.com>
564 Bytecompiler should emit trivially fewer jumps in loops
565 https://bugs.webkit.org/show_bug.cgi?id=85144
567 Reviewed by Oliver Hunt.
569 Merged r115587 from dfgopt.
571 1-2% across the board win.
573 * bytecompiler/NodesCodegen.cpp:
574 (JSC::WhileNode::emitBytecode):
575 (JSC::ForNode::emitBytecode):
577 2012-05-19 Vivek Galatage <vivekgalatage@gmail.com>
579 Windows build broken due to changes in the http://trac.webkit.org/changeset/117646
580 https://bugs.webkit.org/show_bug.cgi?id=86939
582 The changeset 117646 changed the JSString::toBoolean signature. This
583 change is for fixing the windows build break.
585 Reviewed by Ryosuke Niwa.
587 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
589 2012-05-18 Filip Pizlo <fpizlo@apple.com>
591 REGRESSION(117646): fast/canvas/webgl/glsl-conformance.html is crashing in the DFG
592 https://bugs.webkit.org/show_bug.cgi?id=86929
594 Reviewed by Oliver Hunt.
596 The problem was that if CFG simplification saw a Branch with identical successors,
597 it would always perform a basic block merge. But that's wrong if the successor has
600 * dfg/DFGCFGSimplificationPhase.cpp:
601 (JSC::DFG::CFGSimplificationPhase::run):
603 2012-05-18 Filip Pizlo <fpizlo@apple.com>
605 DFG CFG simplification crashes if it's trying to remove an unreachable block
606 that has an already-killed-off unreachable successor
607 https://bugs.webkit.org/show_bug.cgi?id=86918
609 Reviewed by Oliver Hunt.
611 This fixes crashes in:
612 inspector/styles/styles-computed-trace.html
613 inspector/console/console-big-array.html
615 * dfg/DFGCFGSimplificationPhase.cpp:
616 (JSC::DFG::CFGSimplificationPhase::fixPhis):
618 2012-05-18 Filip Pizlo <fpizlo@apple.com>
620 DFG should have control flow graph simplification
621 https://bugs.webkit.org/show_bug.cgi?id=84553
623 Reviewed by Oliver Hunt.
625 Merged r115512 from dfgopt.
627 This change gives the DFG the ability to simplify the control flow graph
628 as part of an optimization fixpoint that includes CSE, CFA, and constant
629 folding. This required a number of interesting changes including:
631 - Solidifying the set of invariants that the DFG obeys. For example, the
632 head and tail of each basic block must advertise the set of live locals
633 and the set of available locals, respectively. It must do so by
634 referring to the first access to the local in the block (for head) and
635 the last one (for tail). This patch introduces the start of a
636 validation step that may be turned on even with asserts disabled. To
637 ensure that these invariants are preserved, I had to remove the
638 redundant phi elimination phase. For now I just remove the call, but in
639 the future we will probably remove it entirely unless we find a use for
642 - Making it easier to get the boolean version of a JSValue. This is a
643 pure operation, but we previously did not treat it as such.
645 - Fixing the merging and filtering of AbstractValues that correspond to
646 concrete JSValues. This was previously broken and was limiting the
647 effect of running constant folding. Fixing this meant that I had to
648 change how constant folding eliminates GetLocal nodes, so as to ensure
649 that the resulting graph still obeys DFG rules.
651 - Introducing simplified getters for some of the things that DFG phases
652 want to know about, like the Nth child of a node (now just
653 graph.child(...) if you don't care about performance too much) or
654 getting successors of a basic block.
656 The current CFG simplifier can handle almost all of the cases that it
657 ought to handle; the noteworthy one that is not yet handled is removing
658 basic blocks that just have jumps. To do this right we need to be able
659 to remove jump-only blocks that also perform keep-alive on some values.
660 To make this work, we need to be able to hoist the keep-alive into (or
661 just above) a Branch. This is not fundamentally difficult but I opted to
662 let this patch omit this optimization. We can handle this later.
664 This is a big win on programs that include inline functions that are
665 often called with constant arguments. Of course, SunSpider, V8, and
666 Kraken don't count. Those benchmarks are completely neutral with this
669 * API/JSValueRef.cpp:
672 * GNUmakefile.list.am:
673 * JavaScriptCore.xcodeproj/project.pbxproj:
675 * bytecode/CodeBlock.h:
676 (JSC::CodeBlock::dfgOSREntryDataForBytecodeIndex):
677 * bytecode/Operands.h:
678 (JSC::Operands::setOperandFirstTime):
680 * dfg/DFGAbstractState.cpp:
681 (JSC::DFG::AbstractState::initialize):
682 (JSC::DFG::AbstractState::execute):
683 (JSC::DFG::AbstractState::mergeStateAtTail):
684 (JSC::DFG::AbstractState::mergeToSuccessors):
685 * dfg/DFGAbstractValue.h:
686 (JSC::DFG::AbstractValue::isClear):
687 (JSC::DFG::AbstractValue::operator!=):
688 (JSC::DFG::AbstractValue::merge):
689 (JSC::DFG::AbstractValue::filter):
690 (JSC::DFG::AbstractValue::validateIgnoringValue):
692 * dfg/DFGAdjacencyList.h:
693 (JSC::DFG::AdjacencyList::child):
694 (JSC::DFG::AdjacencyList::setChild):
696 * dfg/DFGBasicBlock.h:
697 (JSC::DFG::BasicBlock::~BasicBlock):
699 (JSC::DFG::BasicBlock::numNodes):
700 (JSC::DFG::BasicBlock::nodeIndex):
701 (JSC::DFG::BasicBlock::isPhiIndex):
702 (JSC::DFG::BasicBlock::isInPhis):
703 (JSC::DFG::BasicBlock::isInBlock):
704 * dfg/DFGByteCodeParser.cpp:
707 (JSC::DFG::ByteCodeParser::parse):
708 * dfg/DFGCFAPhase.cpp:
709 (JSC::DFG::CFAPhase::run):
710 (JSC::DFG::CFAPhase::performBlockCFA):
711 (JSC::DFG::performCFA):
714 * dfg/DFGCFGSimplificationPhase.cpp: Added.
716 (CFGSimplificationPhase):
717 (JSC::DFG::CFGSimplificationPhase::CFGSimplificationPhase):
718 (JSC::DFG::CFGSimplificationPhase::run):
719 (JSC::DFG::CFGSimplificationPhase::killUnreachable):
720 (JSC::DFG::CFGSimplificationPhase::findOperandSource):
721 (JSC::DFG::CFGSimplificationPhase::keepOperandAlive):
722 (JSC::DFG::CFGSimplificationPhase::fixPossibleGetLocal):
723 (JSC::DFG::CFGSimplificationPhase::jettisonBlock):
724 (JSC::DFG::CFGSimplificationPhase::fixPhis):
725 (JSC::DFG::CFGSimplificationPhase::fixJettisonedPredecessors):
726 (JSC::DFG::CFGSimplificationPhase::removePotentiallyDeadPhiReference):
727 (JSC::DFG::CFGSimplificationPhase::OperandSubstitution::OperandSubstitution):
728 (OperandSubstitution):
729 (JSC::DFG::CFGSimplificationPhase::OperandSubstitution::dump):
730 (JSC::DFG::CFGSimplificationPhase::skipGetLocal):
731 (JSC::DFG::CFGSimplificationPhase::fixTailOperand):
732 (JSC::DFG::CFGSimplificationPhase::mergeBlocks):
733 (JSC::DFG::performCFGSimplification):
734 * dfg/DFGCFGSimplificationPhase.h: Added.
736 * dfg/DFGCSEPhase.cpp:
737 (JSC::DFG::CSEPhase::run):
739 (JSC::DFG::CSEPhase::impureCSE):
740 (JSC::DFG::CSEPhase::globalVarLoadElimination):
741 (JSC::DFG::CSEPhase::getByValLoadElimination):
742 (JSC::DFG::CSEPhase::checkStructureLoadElimination):
743 (JSC::DFG::CSEPhase::getByOffsetLoadElimination):
744 (JSC::DFG::CSEPhase::getPropertyStorageLoadElimination):
745 (JSC::DFG::CSEPhase::getIndexedPropertyStorageLoadElimination):
746 (JSC::DFG::CSEPhase::performNodeCSE):
747 (JSC::DFG::CSEPhase::performBlockCSE):
748 (JSC::DFG::performCSE):
752 * dfg/DFGConstantFoldingPhase.cpp:
753 (JSC::DFG::ConstantFoldingPhase::run):
754 (JSC::DFG::performConstantFolding):
755 * dfg/DFGConstantFoldingPhase.h:
761 (JSC::DFG::Edge::operator UnspecifiedBoolType*):
762 * dfg/DFGFixupPhase.cpp:
763 (JSC::DFG::FixupPhase::run):
764 (JSC::DFG::FixupPhase::fixupBlock):
765 (JSC::DFG::performFixup):
766 * dfg/DFGFixupPhase.h:
769 (JSC::DFG::Graph::dump):
770 (JSC::DFG::Graph::handleSuccessor):
772 (JSC::DFG::Graph::determineReachability):
773 (JSC::DFG::Graph::resetReachability):
775 (JSC::DFG::Graph::deref):
776 (JSC::DFG::Graph::changeIndex):
778 (JSC::DFG::Graph::changeEdge):
779 (JSC::DFG::Graph::numSuccessors):
780 (JSC::DFG::Graph::successor):
781 (JSC::DFG::Graph::successorForCondition):
782 (JSC::DFG::Graph::isPredictedNumerical):
783 (JSC::DFG::Graph::byValIsPure):
784 (JSC::DFG::Graph::clobbersWorld):
785 (JSC::DFG::Graph::numChildren):
786 (JSC::DFG::Graph::child):
788 (JSC::DFG::Node::convertToConstant):
789 (JSC::DFG::Node::numSuccessors):
791 (JSC::DFG::Node::successor):
792 (JSC::DFG::Node::successorForCondition):
795 * dfg/DFGOSREntry.cpp:
796 (JSC::DFG::prepareOSREntry):
797 * dfg/DFGOperations.cpp:
799 (JSC::DFG::Phase::endPhase):
801 (JSC::DFG::runPhase):
802 * dfg/DFGPredictionPropagationPhase.cpp:
803 (JSC::DFG::PredictionPropagationPhase::run):
804 (JSC::DFG::performPredictionPropagation):
805 * dfg/DFGPredictionPropagationPhase.h:
807 * dfg/DFGRedundantPhiEliminationPhase.cpp:
808 (JSC::DFG::RedundantPhiEliminationPhase::run):
809 (JSC::DFG::performRedundantPhiElimination):
810 * dfg/DFGRedundantPhiEliminationPhase.h:
812 * dfg/DFGScoreBoard.h:
813 (JSC::DFG::ScoreBoard::use):
815 (JSC::DFG::ScoreBoard::useIfHasResult):
816 * dfg/DFGSpeculativeJIT.cpp:
817 (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
818 (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
819 (JSC::DFG::SpeculativeJIT::compile):
820 (JSC::DFG::SpeculativeJIT::createOSREntries):
821 (JSC::DFG::SpeculativeJIT::linkOSREntries):
822 (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant):
823 (JSC::DFG::SpeculativeJIT::compileRegExpExec):
824 * dfg/DFGSpeculativeJIT.h:
825 (JSC::DFG::SpeculativeJIT::nextBlock):
827 (JSC::DFG::SpeculativeJIT::use):
828 (JSC::DFG::SpeculativeJIT::jump):
829 * dfg/DFGSpeculativeJIT32_64.cpp:
830 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
831 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
832 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
833 (JSC::DFG::SpeculativeJIT::emitBranch):
834 (JSC::DFG::SpeculativeJIT::compile):
835 * dfg/DFGSpeculativeJIT64.cpp:
836 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
837 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
838 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
839 (JSC::DFG::SpeculativeJIT::emitBranch):
840 (JSC::DFG::SpeculativeJIT::compile):
841 * dfg/DFGValidate.cpp: Added.
844 (JSC::DFG::Validate::Validate):
845 (JSC::DFG::Validate::validate):
846 (JSC::DFG::Validate::reportValidationContext):
847 (JSC::DFG::Validate::dumpData):
848 (JSC::DFG::Validate::dumpGraphIfAppropriate):
849 (JSC::DFG::validate):
850 * dfg/DFGValidate.h: Added.
852 (JSC::DFG::validate):
853 * dfg/DFGVirtualRegisterAllocationPhase.cpp:
854 (JSC::DFG::VirtualRegisterAllocationPhase::run):
855 (JSC::DFG::performVirtualRegisterAllocation):
856 * dfg/DFGVirtualRegisterAllocationPhase.h:
858 * interpreter/Interpreter.cpp:
859 (JSC::Interpreter::privateExecute):
861 (JSC::DEFINE_STUB_FUNCTION):
862 * llint/LLIntSlowPaths.cpp:
863 (JSC::LLInt::LLINT_SLOW_PATH_DECL):
864 * runtime/ArrayPrototype.cpp:
865 (JSC::arrayProtoFuncFilter):
866 (JSC::arrayProtoFuncEvery):
867 (JSC::arrayProtoFuncSome):
868 * runtime/BooleanConstructor.cpp:
869 (JSC::constructBoolean):
870 (JSC::callBooleanConstructor):
873 * runtime/JSObject.cpp:
875 * runtime/JSObject.h:
876 * runtime/JSString.cpp:
877 (JSC::JSString::toBoolean):
878 * runtime/JSString.h:
880 (JSC::JSCell::toBoolean):
881 (JSC::JSValue::toBoolean):
883 * runtime/ObjectConstructor.cpp:
884 (JSC::toPropertyDescriptor):
885 * runtime/RegExpConstructor.cpp:
886 (JSC::setRegExpConstructorMultiline):
887 * runtime/RegExpPrototype.cpp:
888 (JSC::regExpProtoFuncToString):
890 2012-05-18 Filip Pizlo <fpizlo@apple.com>
892 Unreviewed, build fix.
894 * dfg/DFGSpeculativeJIT.h:
895 (JSC::DFG::SpeculativeJIT::silentSavePlanForGPR):
897 2012-04-17 Filip Pizlo <fpizlo@apple.com>
899 DFG should have constant propagation
900 https://bugs.webkit.org/show_bug.cgi?id=84004
902 Reviewed by Gavin Barraclough.
904 Merge r114554 from dfgopt.
906 Changes AbstractValue to be able to hold a "set" of constants, where
907 the maximum set size is 1 - so merging a value containing constant A
908 with another value containing constant B where A != B will result in
909 the AbstractValue claiming that it does not know any constants (i.e.
910 it'll just have a predicted type and possible a structure).
912 Added a constant folding phase that uses this new information to
913 replace pure operations known to have constant results with
914 JSConstants. This is OSR-exit-aware, in that it will prepend a Phantom
915 that refers to all of the kids of the node we replaced.
918 * GNUmakefile.list.am:
919 * JavaScriptCore.xcodeproj/project.pbxproj:
921 * dfg/DFGAbstractState.cpp:
922 (JSC::DFG::AbstractState::beginBasicBlock):
923 (JSC::DFG::AbstractState::endBasicBlock):
924 (JSC::DFG::AbstractState::execute):
925 * dfg/DFGAbstractState.h:
927 * dfg/DFGAbstractValue.h:
928 (JSC::DFG::AbstractValue::clear):
929 (JSC::DFG::AbstractValue::isClear):
930 (JSC::DFG::AbstractValue::makeTop):
931 (JSC::DFG::AbstractValue::clobberValue):
933 (JSC::DFG::AbstractValue::valueIsTop):
934 (JSC::DFG::AbstractValue::value):
935 (JSC::DFG::AbstractValue::set):
936 (JSC::DFG::AbstractValue::operator==):
937 (JSC::DFG::AbstractValue::merge):
938 (JSC::DFG::AbstractValue::filter):
939 (JSC::DFG::AbstractValue::validate):
940 (JSC::DFG::AbstractValue::checkConsistency):
941 (JSC::DFG::AbstractValue::dump):
942 * dfg/DFGAdjacencyList.h:
943 (JSC::DFG::AdjacencyList::initialize):
945 (JSC::DFG::AdjacencyList::reset):
946 * dfg/DFGBasicBlock.h:
947 (JSC::DFG::BasicBlock::BasicBlock):
949 * dfg/DFGCSEPhase.cpp:
950 (JSC::DFG::CSEPhase::constantCSE):
952 (JSC::DFG::CSEPhase::performNodeCSE):
953 * dfg/DFGConstantFoldingPhase.cpp: Added.
955 (ConstantFoldingPhase):
956 (JSC::DFG::ConstantFoldingPhase::ConstantFoldingPhase):
957 (JSC::DFG::ConstantFoldingPhase::run):
958 (JSC::DFG::performConstantFolding):
959 * dfg/DFGConstantFoldingPhase.h: Added.
965 (JSC::DFG::Graph::convertToConstant):
966 * dfg/DFGInsertionSet.h:
967 (JSC::DFG::InsertionSet::execute):
969 (JSC::DFG::Node::convertToConstant):
971 * runtime/JSValue.cpp:
972 (JSC::JSValue::description):
976 2012-05-18 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
978 Fix build for Qt by using ASSERT_UNUSED in DFGSpeculativeJIT
979 https://bugs.webkit.org/show_bug.cgi?id=86902
981 Reviewed by Andreas Kling.
983 * dfg/DFGSpeculativeJIT.h:
984 (JSC::DFG::SpeculativeJIT::silentSavePlanForGPR):
986 2012-04-16 Filip Pizlo <fpizlo@apple.com>
988 DFG should have out-of-line slow paths
989 https://bugs.webkit.org/show_bug.cgi?id=83992
991 Reviewed by Oliver Hunt.
993 Merge of r114472 and r114553 from dfgopt.
995 Introduces the notion of slow path code generation closures in the DFG.
996 These are defined in DFGSlowPathGenerator.h, though they are fairly
997 extensible so DFGSpeculativeJIT64.cpp and DFGSpeculativeJIT32_64.cpp
998 define a couple special-purpose ones. A slow path generation closure
999 (DFG::SlowPathGenerator) is executed after the main speculative path is
1000 generated. This makes them great for scheduling slow path code out of
1001 the way of the hot paths.
1003 This patch also converts most - but not all - of the DFG to use slow
1004 path generators instead of inline slow paths.
1006 The result is a sub-1% improvement on SunSpider and V8, and a miniscule
1007 regression on Kraken.
1009 * JavaScriptCore.xcodeproj/project.pbxproj:
1010 * assembler/AbstractMacroAssembler.h:
1011 (JSC::AbstractMacroAssembler::TrustedImmPtr::TrustedImmPtr):
1013 (JSC::AbstractMacroAssembler::TrustedImm32::TrustedImm32):
1015 * bytecode/StructureStubInfo.h:
1017 * dfg/DFGJITCompiler.cpp:
1018 (JSC::DFG::JITCompiler::link):
1019 (JSC::DFG::JITCompiler::compile):
1020 (JSC::DFG::JITCompiler::compileFunction):
1021 * dfg/DFGJITCompiler.h:
1023 (JSC::DFG::PropertyAccessRecord::PropertyAccessRecord):
1024 (PropertyAccessRecord):
1026 * dfg/DFGSilentRegisterSavePlan.h: Added.
1028 (SilentRegisterSavePlan):
1029 (JSC::DFG::SilentRegisterSavePlan::SilentRegisterSavePlan):
1030 (JSC::DFG::SilentRegisterSavePlan::spillAction):
1031 (JSC::DFG::SilentRegisterSavePlan::fillAction):
1032 (JSC::DFG::SilentRegisterSavePlan::nodeIndex):
1033 (JSC::DFG::SilentRegisterSavePlan::gpr):
1034 (JSC::DFG::SilentRegisterSavePlan::fpr):
1035 * dfg/DFGSlowPathGenerator.h: Added.
1037 (SlowPathGenerator):
1038 (JSC::DFG::SlowPathGenerator::SlowPathGenerator):
1039 (JSC::DFG::SlowPathGenerator::~SlowPathGenerator):
1040 (JSC::DFG::SlowPathGenerator::generate):
1041 (JSC::DFG::SlowPathGenerator::label):
1042 (JSC::DFG::SlowPathGenerator::call):
1043 (JumpingSlowPathGenerator):
1044 (JSC::DFG::JumpingSlowPathGenerator::JumpingSlowPathGenerator):
1045 (JSC::DFG::JumpingSlowPathGenerator::linkFrom):
1046 (JSC::DFG::JumpingSlowPathGenerator::jumpTo):
1047 (CallSlowPathGenerator):
1048 (JSC::DFG::CallSlowPathGenerator::CallSlowPathGenerator):
1049 (JSC::DFG::CallSlowPathGenerator::call):
1050 (JSC::DFG::CallSlowPathGenerator::setUp):
1051 (JSC::DFG::CallSlowPathGenerator::recordCall):
1052 (JSC::DFG::CallSlowPathGenerator::tearDown):
1053 (CallResultAndNoArgumentsSlowPathGenerator):
1054 (JSC::DFG::CallResultAndNoArgumentsSlowPathGenerator::CallResultAndNoArgumentsSlowPathGenerator):
1055 (JSC::DFG::CallResultAndNoArgumentsSlowPathGenerator::generateInternal):
1056 (CallResultAndOneArgumentSlowPathGenerator):
1057 (JSC::DFG::CallResultAndOneArgumentSlowPathGenerator::CallResultAndOneArgumentSlowPathGenerator):
1058 (JSC::DFG::CallResultAndOneArgumentSlowPathGenerator::generateInternal):
1059 (CallResultAndTwoArgumentsSlowPathGenerator):
1060 (JSC::DFG::CallResultAndTwoArgumentsSlowPathGenerator::CallResultAndTwoArgumentsSlowPathGenerator):
1061 (JSC::DFG::CallResultAndTwoArgumentsSlowPathGenerator::generateInternal):
1062 (CallResultAndThreeArgumentsSlowPathGenerator):
1063 (JSC::DFG::CallResultAndThreeArgumentsSlowPathGenerator::CallResultAndThreeArgumentsSlowPathGenerator):
1064 (JSC::DFG::CallResultAndThreeArgumentsSlowPathGenerator::generateInternal):
1065 (CallResultAndFourArgumentsSlowPathGenerator):
1066 (JSC::DFG::CallResultAndFourArgumentsSlowPathGenerator::CallResultAndFourArgumentsSlowPathGenerator):
1067 (JSC::DFG::CallResultAndFourArgumentsSlowPathGenerator::generateInternal):
1068 (CallResultAndFiveArgumentsSlowPathGenerator):
1069 (JSC::DFG::CallResultAndFiveArgumentsSlowPathGenerator::CallResultAndFiveArgumentsSlowPathGenerator):
1070 (JSC::DFG::CallResultAndFiveArgumentsSlowPathGenerator::generateInternal):
1071 (JSC::DFG::slowPathCall):
1072 (AssigningSlowPathGenerator):
1073 (JSC::DFG::AssigningSlowPathGenerator::AssigningSlowPathGenerator):
1074 (JSC::DFG::AssigningSlowPathGenerator::generateInternal):
1075 (JSC::DFG::slowPathMove):
1076 * dfg/DFGSpeculativeJIT.cpp:
1077 (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
1079 (JSC::DFG::SpeculativeJIT::~SpeculativeJIT):
1080 (JSC::DFG::SpeculativeJIT::addSlowPathGenerator):
1081 (JSC::DFG::SpeculativeJIT::runSlowPathGenerators):
1082 (JSC::DFG::SpeculativeJIT::compileValueToInt32):
1083 (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
1084 * dfg/DFGSpeculativeJIT.h:
1087 (JSC::DFG::SpeculativeJIT::silentSavePlanForGPR):
1088 (JSC::DFG::SpeculativeJIT::silentSavePlanForFPR):
1089 (JSC::DFG::SpeculativeJIT::silentSpill):
1090 (JSC::DFG::SpeculativeJIT::silentFill):
1091 (JSC::DFG::SpeculativeJIT::silentSpillAllRegistersImpl):
1092 (JSC::DFG::SpeculativeJIT::silentSpillAllRegisters):
1093 (JSC::DFG::SpeculativeJIT::pickCanTrample):
1094 (JSC::DFG::SpeculativeJIT::silentFillAllRegisters):
1095 (JSC::DFG::SpeculativeJIT::callOperation):
1096 * dfg/DFGSpeculativeJIT32_64.cpp:
1097 (ValueToNumberSlowPathGenerator):
1098 (JSC::DFG::ValueToNumberSlowPathGenerator::ValueToNumberSlowPathGenerator):
1099 (JSC::DFG::ValueToNumberSlowPathGenerator::generateInternal):
1101 (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToNumber):
1102 (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32):
1103 (JSC::DFG::SpeculativeJIT::cachedGetById):
1104 (JSC::DFG::SpeculativeJIT::cachedPutById):
1105 (CompareAndBoxBooleanSlowPathGenerator):
1106 (JSC::DFG::CompareAndBoxBooleanSlowPathGenerator::CompareAndBoxBooleanSlowPathGenerator):
1107 (JSC::DFG::CompareAndBoxBooleanSlowPathGenerator::generateInternal):
1108 (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
1109 (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
1110 (JSC::DFG::SpeculativeJIT::compileLogicalNot):
1111 (JSC::DFG::SpeculativeJIT::compile):
1112 * dfg/DFGSpeculativeJIT64.cpp:
1113 (ValueToNumberSlowPathGenerator):
1114 (JSC::DFG::ValueToNumberSlowPathGenerator::ValueToNumberSlowPathGenerator):
1115 (JSC::DFG::ValueToNumberSlowPathGenerator::generateInternal):
1117 (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToNumber):
1118 (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32):
1119 (JSC::DFG::SpeculativeJIT::cachedGetById):
1120 (JSC::DFG::SpeculativeJIT::cachedPutById):
1121 (CompareAndBoxBooleanSlowPathGenerator):
1122 (JSC::DFG::CompareAndBoxBooleanSlowPathGenerator::CompareAndBoxBooleanSlowPathGenerator):
1123 (JSC::DFG::CompareAndBoxBooleanSlowPathGenerator::generateInternal):
1124 (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
1125 (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
1126 (JSC::DFG::SpeculativeJIT::compileLogicalNot):
1127 (JSC::DFG::SpeculativeJIT::compile):
1129 2012-05-18 Tony Chang <tony@chromium.org>
1131 remove the CSS_GRID_LAYOUT compiler define, but default grid layout to off
1132 https://bugs.webkit.org/show_bug.cgi?id=86767
1134 Reviewed by Ojan Vafai.
1136 * Configurations/FeatureDefines.xcconfig: Remove ENABLE_CSS_GRID_LAYOUT.
1138 2012-05-17 Filip Pizlo <fpizlo@apple.com>
1140 Setting array index -1 and looping over array causes bad behavior
1141 https://bugs.webkit.org/show_bug.cgi?id=86733
1142 <rdar://problem/11477670>
1144 Reviewed by Oliver Hunt.
1146 * dfg/DFGOperations.cpp:
1148 2012-05-17 Geoffrey Garen <ggaren@apple.com>
1152 Rolled out r117495 because it caused som out of memory crashes.
1155 (JSC::Heap::collect):
1157 2012-05-17 Geoffrey Garen <ggaren@apple.com>
1159 Refactored the Heap to move more MarkedSpace logic into MarkedSpace
1160 https://bugs.webkit.org/show_bug.cgi?id=86790
1162 Reviewed by Gavin Barraclough.
1165 (JSC::Heap::lastChanceToFinalize):
1166 (JSC::Heap::markRoots):
1168 (JSC::Heap::objectCount):
1170 (JSC::Heap::capacity):
1171 (JSC::Heap::collect):
1173 (Heap): Took all the functors from here...
1175 * heap/MarkedBlock.h:
1177 (JSC::MarkedBlock::CountFunctor::CountFunctor):
1178 (JSC::MarkedBlock::CountFunctor::count):
1179 (JSC::MarkedBlock::CountFunctor::returnValue):
1181 * heap/MarkedSpace.h:
1182 (JSC::ClearMarks::operator()):
1184 (JSC::Sweep::operator()):
1185 (JSC::MarkCount::operator()):
1186 (JSC::Size::operator()):
1187 (JSC::Capacity::operator()):
1189 (JSC::MarkedSpace::clearMarks):
1190 (JSC::MarkedSpace::sweep):
1191 (JSC::MarkedSpace::objectCount):
1192 (JSC::MarkedSpace::size):
1193 (JSC::MarkedSpace::capacity): and put them here.
1195 2012-05-17 Geoffrey Garen <ggaren@apple.com>
1197 Increase the GC allocation trigger
1198 https://bugs.webkit.org/show_bug.cgi?id=86699
1200 Reviewed by Sam Weinig.
1202 This helps a lot when the heap is growing, and helps to resolve
1203 the regression caused by r116484.
1206 (JSC::Heap::collect):
1208 2012-05-16 Mark Hahnenberg <mhahnenberg@apple.com>
1210 GC in the middle of JSObject::allocatePropertyStorage can cause badness
1211 https://bugs.webkit.org/show_bug.cgi?id=83839
1213 Reviewed by Geoff Garen.
1215 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1216 * jit/JITStubs.cpp: Making changes to use the new return value of growPropertyStorage.
1217 (JSC::DEFINE_STUB_FUNCTION):
1218 * runtime/JSObject.cpp:
1219 (JSC::JSObject::growPropertyStorage): Renamed to more accurately reflect that we're
1220 growing our already-existing PropertyStorage.
1221 * runtime/JSObject.h:
1223 (JSC::JSObject::setPropertyStorage): "Atomically" sets the new property storage
1224 and the new structure so that we can be sure a GC never occurs when our Structure
1225 info is out of sync with our PropertyStorage.
1227 (JSC::JSObject::putDirectInternal): Moved the check to see if we should
1228 allocate more backing store before the actual property insertion into
1230 (JSC::JSObject::putDirectWithoutTransition): Ditto.
1231 (JSC::JSObject::transitionTo): Ditto.
1232 * runtime/Structure.cpp:
1233 (JSC::Structure::suggestedNewPropertyStorageSize): Added to keep the resize policy
1234 for property backing stores contained within the Structure class.
1236 * runtime/Structure.h:
1237 (JSC::Structure::shouldGrowPropertyStorage): Lets clients know if another insertion
1238 into the Structure would require resizing the property backing store so that they can
1239 preallocate the required storage.
1242 2012-05-16 Geoffrey Garen <ggaren@apple.com>
1244 GC is not thread-safe when moving values between C stacks
1245 https://bugs.webkit.org/show_bug.cgi?id=86672
1247 Reviewed by Phil Pizlo.
1249 GC pauses thread A while marking thread A, and then B while marking B,
1250 which isn't safe against A and B moving values between each others'
1253 This is a theoretical bug -- I haven't been able to reproduce it
1256 * heap/MachineStackMarker.cpp:
1257 (JSC::MachineThreads::gatherFromOtherThread):
1258 (JSC::MachineThreads::gatherConservativeRoots): Pause all C stacks for the
1259 duration of stack marking, to avoid missing values that might be moving
1262 2012-05-15 Mark Hahnenberg <mhahnenberg@apple.com>
1264 Block freeing thread should not free blocks when we are actively requesting them
1265 https://bugs.webkit.org/show_bug.cgi?id=86519
1267 Reviewed by Geoff Garen.
1269 * heap/BlockAllocator.h:
1270 (JSC::BlockAllocator::allocate): Reordering the setting of the flag so its done
1271 while we hold the lock to ensure proper locking.
1273 2012-05-15 Filip Pizlo <fpizlo@apple.com>
1275 shrinkToFit() is often not called for Vectors in CodeBlock
1276 https://bugs.webkit.org/show_bug.cgi?id=86436
1278 Reviewed by Oliver Hunt.
1280 The vectors in CodeBlock are often appended to during various stages of
1281 compilation, but we neglect to shrink them after compilation finishes. This
1282 patch takes the most brutal possible approach: shrink all the vectors after
1283 the bytecompile phase, and then shrink them again after the appropriate
1284 JITing phase. The two shrinks are necessary because the JIT may append more
1285 stuff, but may also generate code that directly references things in other
1286 vectors; hence some can only be shrunk before JIT and some after. Also,
1287 we may allow a CodeBlock to sit around for a long time - possibly forever -
1288 before invoking the JIT, hence it makes sense to have two shrinks.
1290 This is performance neutral on the major benchmarks we track.
1292 * bytecode/CodeBlock.cpp:
1293 (JSC::CodeBlock::shrinkToFit):
1294 * bytecode/CodeBlock.h:
1296 (JSC::CodeBlock::appendWeakReferenceTransition):
1297 * bytecompiler/BytecodeGenerator.cpp:
1298 (JSC::BytecodeGenerator::generate):
1299 * dfg/DFGDriver.cpp:
1300 (JSC::DFG::compile):
1301 * dfg/DFGJITCompiler.cpp:
1302 (JSC::DFG::JITCompiler::link):
1304 (JSC::JIT::privateCompile):
1306 2012-05-15 Oliver Hunt <oliver@apple.com>
1308 Make error information available even if all we have is line number information.
1309 https://bugs.webkit.org/show_bug.cgi?id=86547
1311 Reviewed by Filip Pizlo.
1313 We don't need expression information to generate useful line, file, and stack information,
1314 so only require that we have line number info available.
1316 * interpreter/Interpreter.cpp:
1317 (JSC::Interpreter::throwException):
1318 * runtime/Executable.h:
1321 2012-05-15 Mark Hahnenberg <mhahnenberg@apple.com>
1323 Block freeing thread should not free blocks when we are actively requesting them
1324 https://bugs.webkit.org/show_bug.cgi?id=86519
1326 Reviewed by Geoffrey Garen.
1328 The block freeing thread shoots us in the foot if it decides to run while we're actively
1329 requesting blocks and returning them. This situation can arise when there is a lot of copying
1330 collection going on in steady state. We allocate a large swath of pages to copy into, then we
1331 return all the newly free old pages to the BlockAllocator. In this state, if the block freeing
1332 thread wakes up in between collections (which is more likely than it waking up during a
1333 collection) and frees half of these pages, they will be needed almost immediately during the
1334 next collection, causing a storm of VM allocations which we know are going to be very slow.
1336 What we'd like is for when things have quieted down the block freeing thread can then return
1337 memory to the OS. Usually this will be when a page has fully loaded and has a low allocation
1338 rate. In this situation, our opportunistic collections will only be running at least every few
1339 seconds, thus the extra time spent doing VM allocations won't matter nearly as much as, say,
1340 while a page is loading.
1342 * heap/BlockAllocator.cpp:
1343 (JSC::BlockAllocator::BlockAllocator): Initialize our new field.
1344 (JSC::BlockAllocator::blockFreeingThreadMain): We check if we've seen any block requests recently.
1345 If so, reset our flag and go back to sleep. We also don't bother with locking here. If we miss out
1346 on an update, we'll see it when we wake up again.
1347 * heap/BlockAllocator.h: Add new field to track whether or not we've received recent block requests.
1349 (JSC::BlockAllocator::allocate): If we receive a request for a block, set our field that tracks
1350 that to true. We don't bother locking since we assume that writing to a bool is atomic.
1352 2012-05-14 Luke Macpherson <macpherson@chromium.org>
1354 Introduce ENABLE_CSS_VARIABLES compile flag.
1355 https://bugs.webkit.org/show_bug.cgi?id=86338
1357 Reviewed by Dimitri Glazkov.
1359 Add a configuration option for CSS Variables support, disabling it by default.
1361 * Configurations/FeatureDefines.xcconfig:
1363 2012-05-14 Gavin Barraclough <barraclough@apple.com>
1365 Cannot login to iCloud
1366 https://bugs.webkit.org/show_bug.cgi?id=86321
1368 Reviewed by Filip Pizlo.
1370 This is a bug introduced by bug#85853, we shouldn't allow assignment to
1371 the prototype property of functions to be cached, since we need to clear
1372 the cached inheritorID.
1374 * runtime/JSFunction.cpp:
1375 (JSC::JSFunction::put):
1377 2012-05-14 Michael Saboff <msaboff@apple.com>
1379 Enh: Add the Ability to Disable / Enable JavaScript GC Timer
1380 https://bugs.webkit.org/show_bug.cgi?id=86382
1382 Reviewed by Darin Adler.
1384 Add flag to GCActivityCallback to enable / disable activity timer.
1385 Add api via Heap to set the flag's value.
1387 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Windows export
1389 (JSC::Heap::setGarbageCollectionTimerEnabled):
1391 * runtime/GCActivityCallback.h:
1392 (JSC::GCActivityCallback::isEnabled):
1393 (JSC::GCActivityCallback::setEnabled):
1394 (JSC::GCActivityCallback::GCActivityCallback):
1395 * runtime/GCActivityCallbackCF.cpp:
1396 (JSC::DefaultGCActivityCallbackPlatformData::timerDidFire):
1398 2012-05-14 Michael Saboff <msaboff@apple.com>
1400 Increase Debug Logging in MarkStack::validate()
1401 https://bugs.webkit.org/show_bug.cgi?id=86408
1403 Rubber-stamped by Filip Pizlo.
1405 Added some descriptive debug messages for the conditions and
1406 values when a cell validation fails.
1408 * heap/MarkStack.cpp:
1409 (JSC::MarkStack::validate):
1411 2012-05-14 Carlos Garcia Campos <cgarcia@igalia.com>
1413 Unreviewed. Fix make distcheck.
1415 * GNUmakefile.list.am: Add missing header file.
1417 2012-05-14 Yong Li <yoli@rim.com>
1419 DFG JIT didn't work with ARM EABI.
1420 https://bugs.webkit.org/show_bug.cgi?id=84449
1422 Reviewed by Filip Pizlo.
1424 Add a 32-bit dummy argument for some callOperation()
1425 methods to make it work for ARM EABI.
1427 * dfg/DFGCCallHelpers.h:
1428 (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
1430 * dfg/DFGOperations.cpp:
1431 * dfg/DFGSpeculativeJIT.h:
1433 (JSC::DFG::SpeculativeJIT::callOperation):
1435 2012-05-13 Gavin Barraclough <barraclough@apple.com>
1437 Introduce PropertyName class
1438 https://bugs.webkit.org/show_bug.cgi?id=86241
1440 Reviewed by Darin Adler.
1442 This patch introduced a couple of small bugs.
1444 * runtime/PropertyName.h:
1445 (JSC::toUInt32FromCharacters):
1446 - Returning wrong value for "" - should not convert to 0.
1447 (JSC::PropertyName::PropertyName):
1448 - Remove the ASSERT, it was a little too aspirational.
1450 2012-05-13 Filip Pizlo <fpizlo@apple.com>
1452 DFG performs incorrect constant folding on double-to-uint32 conversion in
1453 Uint32Array PutByVal
1454 https://bugs.webkit.org/show_bug.cgi?id=86330
1456 Reviewed by Darin Adler.
1458 static_cast<int>(d) is wrong, since JS semantics require us to use toInt32(d).
1459 In particular, C++ casts on typical hardware (like x86 and similar) will
1460 return 0x80000000 for double values that are out of range of the int32 domain
1461 (i.e. less than -2^31 or greater than or equal to 2^31). But JS semantics call
1462 for wrap-around; for example the double value 4294967297 ought to become the
1463 int32 value 1, not 0x80000000.
1465 * dfg/DFGSpeculativeJIT.cpp:
1466 (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
1468 2012-05-11 Gavin Barraclough <barraclough@apple.com>
1470 Introduce PropertyName class
1471 https://bugs.webkit.org/show_bug.cgi?id=86241
1473 Reviewed by Geoff Garen.
1475 Replace 'const Identifier&' arguments to functions accessing object properties with a new 'PropertyName' type.
1476 This change paves the way to allow for properties keyed by values that are not Identifiers.
1478 This change is largely a mechanical find & replace.
1479 It also changes JSFunction's constructor to take a UString& instead of an Identifier&
1480 (since in some cases we can no longer guarantee that we'lll have an Identifier), and
1481 unifies Identifier's methods to obtain array indices onto PropertyName.
1483 The new PropertyName class retains the ability to support .impl() and .ustring(), but
1484 in a future patch we may need to rework this, since not all PropertyNames should be
1485 equal based on their string representation.
1487 * API/JSCallbackFunction.cpp:
1488 (JSC::JSCallbackFunction::finishCreation):
1489 * API/JSCallbackFunction.h:
1490 (JSCallbackFunction):
1491 (JSC::JSCallbackFunction::create):
1492 * API/JSCallbackObject.h:
1494 * API/JSCallbackObjectFunctions.h:
1495 (JSC::::getOwnPropertySlot):
1496 (JSC::::getOwnPropertyDescriptor):
1498 (JSC::::deleteProperty):
1499 (JSC::::getStaticValue):
1500 (JSC::::staticFunctionGetter):
1501 (JSC::::callbackGetter):
1502 * API/JSObjectRef.cpp:
1503 (JSObjectMakeFunctionWithCallback):
1504 * JSCTypedArrayStubs.h:
1506 * JavaScriptCore.xcodeproj/project.pbxproj:
1507 * debugger/DebuggerActivation.cpp:
1508 (JSC::DebuggerActivation::getOwnPropertySlot):
1509 (JSC::DebuggerActivation::put):
1510 (JSC::DebuggerActivation::putDirectVirtual):
1511 (JSC::DebuggerActivation::deleteProperty):
1512 (JSC::DebuggerActivation::getOwnPropertyDescriptor):
1513 (JSC::DebuggerActivation::defineOwnProperty):
1514 * debugger/DebuggerActivation.h:
1515 (DebuggerActivation):
1517 (GlobalObject::addFunction):
1518 (GlobalObject::addConstructableFunction):
1519 * runtime/Arguments.cpp:
1520 (JSC::Arguments::getOwnPropertySlot):
1521 (JSC::Arguments::getOwnPropertyDescriptor):
1522 (JSC::Arguments::put):
1523 (JSC::Arguments::deleteProperty):
1524 (JSC::Arguments::defineOwnProperty):
1525 * runtime/Arguments.h:
1527 * runtime/ArrayConstructor.cpp:
1528 (JSC::ArrayConstructor::finishCreation):
1529 (JSC::ArrayConstructor::getOwnPropertySlot):
1530 (JSC::ArrayConstructor::getOwnPropertyDescriptor):
1531 * runtime/ArrayConstructor.h:
1533 * runtime/ArrayPrototype.cpp:
1534 (JSC::ArrayPrototype::getOwnPropertySlot):
1535 (JSC::ArrayPrototype::getOwnPropertyDescriptor):
1537 * runtime/ArrayPrototype.h:
1539 * runtime/BooleanConstructor.cpp:
1540 (JSC::BooleanConstructor::finishCreation):
1541 * runtime/BooleanPrototype.cpp:
1542 (JSC::BooleanPrototype::getOwnPropertySlot):
1543 (JSC::BooleanPrototype::getOwnPropertyDescriptor):
1544 * runtime/BooleanPrototype.h:
1546 * runtime/ClassInfo.h:
1548 * runtime/DateConstructor.cpp:
1549 (JSC::DateConstructor::finishCreation):
1550 (JSC::DateConstructor::getOwnPropertySlot):
1551 (JSC::DateConstructor::getOwnPropertyDescriptor):
1552 * runtime/DateConstructor.h:
1554 * runtime/DatePrototype.cpp:
1555 (JSC::DatePrototype::getOwnPropertySlot):
1556 (JSC::DatePrototype::getOwnPropertyDescriptor):
1557 * runtime/DatePrototype.h:
1560 (JSC::StrictModeTypeErrorFunction::create):
1561 * runtime/ErrorConstructor.cpp:
1562 (JSC::ErrorConstructor::finishCreation):
1563 * runtime/ErrorPrototype.cpp:
1564 (JSC::ErrorPrototype::getOwnPropertySlot):
1565 (JSC::ErrorPrototype::getOwnPropertyDescriptor):
1566 * runtime/ErrorPrototype.h:
1568 * runtime/FunctionConstructor.cpp:
1569 (JSC::FunctionConstructor::finishCreation):
1570 * runtime/FunctionPrototype.cpp:
1571 (JSC::FunctionPrototype::finishCreation):
1572 (JSC::FunctionPrototype::addFunctionProperties):
1573 (JSC::functionProtoFuncBind):
1574 * runtime/FunctionPrototype.h:
1575 (JSC::FunctionPrototype::create):
1576 (FunctionPrototype):
1577 * runtime/Identifier.cpp:
1579 * runtime/Identifier.h:
1581 * runtime/InternalFunction.cpp:
1582 (JSC::InternalFunction::finishCreation):
1583 * runtime/InternalFunction.h:
1585 * runtime/JSActivation.cpp:
1586 (JSC::JSActivation::symbolTableGet):
1587 (JSC::JSActivation::symbolTablePut):
1588 (JSC::JSActivation::symbolTablePutWithAttributes):
1589 (JSC::JSActivation::getOwnPropertySlot):
1590 (JSC::JSActivation::put):
1591 (JSC::JSActivation::putDirectVirtual):
1592 (JSC::JSActivation::deleteProperty):
1593 (JSC::JSActivation::argumentsGetter):
1594 * runtime/JSActivation.h:
1596 * runtime/JSArray.cpp:
1597 (JSC::JSArray::defineOwnProperty):
1598 (JSC::JSArray::getOwnPropertySlot):
1599 (JSC::JSArray::getOwnPropertyDescriptor):
1600 (JSC::JSArray::put):
1601 (JSC::JSArray::deleteProperty):
1602 * runtime/JSArray.h:
1605 * runtime/JSBoundFunction.cpp:
1606 (JSC::JSBoundFunction::create):
1607 (JSC::JSBoundFunction::finishCreation):
1608 * runtime/JSBoundFunction.h:
1610 * runtime/JSCell.cpp:
1611 (JSC::JSCell::getOwnPropertySlot):
1613 (JSC::JSCell::deleteProperty):
1614 (JSC::JSCell::putDirectVirtual):
1615 (JSC::JSCell::defineOwnProperty):
1616 (JSC::JSCell::getOwnPropertyDescriptor):
1619 * runtime/JSFunction.cpp:
1620 (JSC::JSFunction::create):
1621 (JSC::JSFunction::finishCreation):
1622 (JSC::JSFunction::argumentsGetter):
1623 (JSC::JSFunction::callerGetter):
1624 (JSC::JSFunction::lengthGetter):
1625 (JSC::JSFunction::getOwnPropertySlot):
1626 (JSC::JSFunction::getOwnPropertyDescriptor):
1627 (JSC::JSFunction::put):
1628 (JSC::JSFunction::deleteProperty):
1629 (JSC::JSFunction::defineOwnProperty):
1630 (JSC::getCalculatedDisplayName):
1631 * runtime/JSFunction.h:
1633 * runtime/JSGlobalObject.cpp:
1634 (JSC::JSGlobalObject::put):
1635 (JSC::JSGlobalObject::putDirectVirtual):
1636 (JSC::JSGlobalObject::defineOwnProperty):
1637 (JSC::JSGlobalObject::reset):
1638 (JSC::JSGlobalObject::createThrowTypeError):
1639 (JSC::JSGlobalObject::getOwnPropertySlot):
1640 (JSC::JSGlobalObject::getOwnPropertyDescriptor):
1641 * runtime/JSGlobalObject.h:
1643 (JSC::JSGlobalObject::hasOwnPropertyForWrite):
1644 (JSC::JSGlobalObject::symbolTableHasProperty):
1645 * runtime/JSNotAnObject.cpp:
1646 (JSC::JSNotAnObject::getOwnPropertySlot):
1647 (JSC::JSNotAnObject::getOwnPropertyDescriptor):
1648 (JSC::JSNotAnObject::put):
1649 (JSC::JSNotAnObject::deleteProperty):
1650 * runtime/JSNotAnObject.h:
1652 * runtime/JSONObject.cpp:
1653 (JSC::JSONObject::getOwnPropertySlot):
1654 (JSC::JSONObject::getOwnPropertyDescriptor):
1655 * runtime/JSONObject.h:
1657 * runtime/JSObject.cpp:
1658 (JSC::JSObject::put):
1659 (JSC::JSObject::putDirectVirtual):
1660 (JSC::JSObject::putDirectAccessor):
1661 (JSC::JSObject::hasProperty):
1662 (JSC::JSObject::deleteProperty):
1663 (JSC::JSObject::hasOwnProperty):
1664 (JSC::callDefaultValueFunction):
1665 (JSC::JSObject::findPropertyHashEntry):
1666 (JSC::JSObject::getPropertySpecificValue):
1667 (JSC::JSObject::removeDirect):
1668 (JSC::JSObject::getOwnPropertyDescriptor):
1669 (JSC::JSObject::getPropertyDescriptor):
1670 (JSC::putDescriptor):
1671 (JSC::JSObject::defineOwnProperty):
1672 * runtime/JSObject.h:
1674 (JSC::JSObject::getDirect):
1675 (JSC::JSObject::getDirectLocation):
1676 (JSC::JSObject::inlineGetOwnPropertySlot):
1677 (JSC::JSObject::getOwnPropertySlot):
1678 (JSC::JSCell::fastGetOwnPropertySlot):
1679 (JSC::JSObject::getPropertySlot):
1680 (JSC::JSObject::get):
1681 (JSC::JSObject::putDirectInternal):
1682 (JSC::JSObject::putOwnDataProperty):
1683 (JSC::JSObject::putDirect):
1684 (JSC::JSObject::putDirectWithoutTransition):
1685 (JSC::JSValue::get):
1686 (JSC::JSValue::put):
1687 * runtime/JSStaticScopeObject.cpp:
1688 (JSC::JSStaticScopeObject::put):
1689 (JSC::JSStaticScopeObject::putDirectVirtual):
1690 (JSC::JSStaticScopeObject::getOwnPropertySlot):
1691 * runtime/JSStaticScopeObject.h:
1692 (JSStaticScopeObject):
1693 * runtime/JSString.cpp:
1694 (JSC::JSString::getOwnPropertySlot):
1695 (JSC::JSString::getStringPropertyDescriptor):
1696 * runtime/JSString.h:
1698 (JSC::JSString::getStringPropertySlot):
1699 * runtime/JSValue.cpp:
1700 (JSC::JSValue::putToPrimitive):
1701 * runtime/JSValue.h:
1704 * runtime/JSVariableObject.cpp:
1705 (JSC::JSVariableObject::deleteProperty):
1706 (JSC::JSVariableObject::symbolTableGet):
1707 (JSC::JSVariableObject::putDirectVirtual):
1708 * runtime/JSVariableObject.h:
1710 (JSC::JSVariableObject::symbolTableGet):
1711 (JSC::JSVariableObject::symbolTablePut):
1712 (JSC::JSVariableObject::symbolTablePutWithAttributes):
1713 * runtime/Lookup.cpp:
1714 (JSC::setUpStaticFunctionSlot):
1716 (JSC::HashTable::entry):
1718 (JSC::getStaticPropertySlot):
1719 (JSC::getStaticPropertyDescriptor):
1720 (JSC::getStaticFunctionSlot):
1721 (JSC::getStaticFunctionDescriptor):
1722 (JSC::getStaticValueSlot):
1723 (JSC::getStaticValueDescriptor):
1725 * runtime/MathObject.cpp:
1726 (JSC::MathObject::getOwnPropertySlot):
1727 (JSC::MathObject::getOwnPropertyDescriptor):
1728 * runtime/MathObject.h:
1730 * runtime/NativeErrorConstructor.h:
1731 (JSC::NativeErrorConstructor::finishCreation):
1732 * runtime/NumberConstructor.cpp:
1734 (JSC::NumberConstructor::finishCreation):
1735 (JSC::NumberConstructor::getOwnPropertySlot):
1736 (JSC::NumberConstructor::getOwnPropertyDescriptor):
1737 (JSC::NumberConstructor::put):
1738 (JSC::numberConstructorNaNValue):
1739 (JSC::numberConstructorNegInfinity):
1740 (JSC::numberConstructorPosInfinity):
1741 (JSC::numberConstructorMaxValue):
1742 (JSC::numberConstructorMinValue):
1743 * runtime/NumberConstructor.h:
1744 (NumberConstructor):
1745 * runtime/NumberPrototype.cpp:
1746 (JSC::NumberPrototype::getOwnPropertySlot):
1747 (JSC::NumberPrototype::getOwnPropertyDescriptor):
1748 * runtime/NumberPrototype.h:
1750 * runtime/ObjectConstructor.cpp:
1751 (JSC::ObjectConstructor::finishCreation):
1752 (JSC::ObjectConstructor::getOwnPropertySlot):
1753 (JSC::ObjectConstructor::getOwnPropertyDescriptor):
1754 * runtime/ObjectConstructor.h:
1755 (ObjectConstructor):
1756 * runtime/ObjectPrototype.cpp:
1757 (JSC::ObjectPrototype::put):
1758 (JSC::ObjectPrototype::defineOwnProperty):
1759 (JSC::ObjectPrototype::getOwnPropertySlot):
1760 (JSC::ObjectPrototype::getOwnPropertyDescriptor):
1761 * runtime/ObjectPrototype.h:
1763 * runtime/PropertySlot.h:
1765 (JSC::PropertySlot::getValue):
1766 * runtime/RegExpConstructor.cpp:
1768 (JSC::RegExpConstructor::finishCreation):
1769 (JSC::RegExpConstructor::getOwnPropertySlot):
1770 (JSC::RegExpConstructor::getOwnPropertyDescriptor):
1771 (JSC::regExpConstructorDollar1):
1772 (JSC::regExpConstructorDollar2):
1773 (JSC::regExpConstructorDollar3):
1774 (JSC::regExpConstructorDollar4):
1775 (JSC::regExpConstructorDollar5):
1776 (JSC::regExpConstructorDollar6):
1777 (JSC::regExpConstructorDollar7):
1778 (JSC::regExpConstructorDollar8):
1779 (JSC::regExpConstructorDollar9):
1780 (JSC::regExpConstructorInput):
1781 (JSC::regExpConstructorMultiline):
1782 (JSC::regExpConstructorLastMatch):
1783 (JSC::regExpConstructorLastParen):
1784 (JSC::regExpConstructorLeftContext):
1785 (JSC::regExpConstructorRightContext):
1786 (JSC::RegExpConstructor::put):
1787 * runtime/RegExpConstructor.h:
1788 (RegExpConstructor):
1789 * runtime/RegExpMatchesArray.h:
1790 (JSC::RegExpMatchesArray::getOwnPropertySlot):
1791 (JSC::RegExpMatchesArray::getOwnPropertyDescriptor):
1792 (JSC::RegExpMatchesArray::put):
1793 (JSC::RegExpMatchesArray::deleteProperty):
1794 (JSC::RegExpMatchesArray::defineOwnProperty):
1795 * runtime/RegExpObject.cpp:
1797 (JSC::RegExpObject::getOwnPropertySlot):
1798 (JSC::RegExpObject::getOwnPropertyDescriptor):
1799 (JSC::RegExpObject::deleteProperty):
1800 (JSC::RegExpObject::defineOwnProperty):
1801 (JSC::regExpObjectGlobal):
1802 (JSC::regExpObjectIgnoreCase):
1803 (JSC::regExpObjectMultiline):
1804 (JSC::regExpObjectSource):
1805 (JSC::RegExpObject::put):
1806 * runtime/RegExpObject.h:
1808 * runtime/RegExpPrototype.cpp:
1809 (JSC::RegExpPrototype::getOwnPropertySlot):
1810 (JSC::RegExpPrototype::getOwnPropertyDescriptor):
1811 * runtime/RegExpPrototype.h:
1813 * runtime/StrictEvalActivation.cpp:
1814 (JSC::StrictEvalActivation::deleteProperty):
1815 * runtime/StrictEvalActivation.h:
1816 (StrictEvalActivation):
1817 * runtime/StringConstructor.cpp:
1818 (JSC::StringConstructor::finishCreation):
1819 (JSC::StringConstructor::getOwnPropertySlot):
1820 (JSC::StringConstructor::getOwnPropertyDescriptor):
1821 * runtime/StringConstructor.h:
1822 (StringConstructor):
1823 * runtime/StringObject.cpp:
1824 (JSC::StringObject::getOwnPropertySlot):
1825 (JSC::StringObject::getOwnPropertyDescriptor):
1826 (JSC::StringObject::put):
1827 (JSC::StringObject::defineOwnProperty):
1828 (JSC::StringObject::deleteProperty):
1829 * runtime/StringObject.h:
1831 * runtime/StringPrototype.cpp:
1832 (JSC::StringPrototype::getOwnPropertySlot):
1833 (JSC::StringPrototype::getOwnPropertyDescriptor):
1834 * runtime/StringPrototype.h:
1836 * runtime/Structure.cpp:
1837 (JSC::Structure::despecifyDictionaryFunction):
1838 (JSC::Structure::addPropertyTransitionToExistingStructure):
1839 (JSC::Structure::addPropertyTransition):
1840 (JSC::Structure::removePropertyTransition):
1841 (JSC::Structure::despecifyFunctionTransition):
1842 (JSC::Structure::attributeChangeTransition):
1843 (JSC::Structure::addPropertyWithoutTransition):
1844 (JSC::Structure::removePropertyWithoutTransition):
1845 (JSC::Structure::get):
1846 (JSC::Structure::despecifyFunction):
1847 (JSC::Structure::putSpecificValue):
1848 (JSC::Structure::remove):
1849 * runtime/Structure.h:
1851 (JSC::Structure::get):
1853 2012-05-11 Michael Saboff <msaboff@apple.com>
1855 Rolling out r116659.
1857 Causes ASSERT failures on bots.
1859 Rubber stamped by Geoff Garen.
1862 (JSC::Heap::markRoots):
1863 * heap/MarkStack.cpp:
1864 (JSC::MarkStackThreadSharedData::markingThreadMain):
1865 (JSC::MarkStackThreadSharedData::markingThreadStartFunc):
1866 (JSC::MarkStackThreadSharedData::MarkStackThreadSharedData):
1867 (JSC::MarkStackThreadSharedData::reset):
1868 (JSC::MarkStack::reset):
1870 (JSC::SlotVisitor::copyAndAppend):
1872 (MarkStackThreadSharedData):
1874 * runtime/JSString.h:
1876 (JSC::JSString::finishCreation):
1877 (JSC::JSString::is8Bit):
1878 (JSC::JSRopeString::finishCreation):
1880 2012-05-11 Oliver Hunt <oliver@apple.com>
1882 Appease thread verifier when dealing with the JSC API's shared VM
1883 https://bugs.webkit.org/show_bug.cgi?id=86268
1885 Reviewed by Geoffrey Garen.
1887 If we're the shared VM, just disable the verifier. This makes debug builds
1888 livable against non-webkit clients.
1890 * runtime/JSGlobalData.cpp:
1891 (JSC::JSGlobalData::JSGlobalData):
1893 2012-05-11 Filip Pizlo <fpizlo@apple.com>
1895 JIT memory allocator is not returning memory to the OS on Darwin
1896 https://bugs.webkit.org/show_bug.cgi?id=86047
1898 Reviewed by Geoff Garen.
1900 * jit/ExecutableAllocatorFixedVMPool.cpp:
1901 (JSC::FixedVMPoolExecutableAllocator::notifyPageIsFree):
1903 2012-05-11 Geoffrey Garen <ggaren@apple.com>
1905 Clarified JSGlobalData (JavaScript VM) lifetime
1906 https://bugs.webkit.org/show_bug.cgi?id=85142
1908 Reviewed by Alexey Proskuryakov.
1912 * API/JSContextRef.cpp:
1913 (JSGlobalContextCreate): Restored some code I removed because I misread an #ifdef.
1914 (We don't need to test BUILDING_ON_LEOPARD, but we still need the linked-on
1915 test, because apps might have been linked on older OS's.)
1917 2012-05-11 Sam Weinig <sam@webkit.org>
1919 Fix crash seen when running with libgmalloc
1920 <rdar://problem/11435411>
1921 https://bugs.webkit.org/show_bug.cgi?id=86232
1923 Reviewed by Gavin Barraclough.
1925 * heap/MarkStack.cpp:
1926 (JSC::MarkStackThreadSharedData::markingThreadMain):
1927 Don't delete the SlotVisitor before the ParallelModeEnabler has had a chance to run its
1930 2012-05-10 Gavin Barraclough <barraclough@apple.com>
1932 Remove op_get_callee
1934 Rubber stamped by Geoff Garen.
1936 This is now redundant.
1938 * bytecode/CodeBlock.cpp:
1939 (JSC::CodeBlock::dump):
1940 * bytecode/Opcode.h:
1942 (JSC::padOpcodeName):
1943 * dfg/DFGByteCodeParser.cpp:
1944 (JSC::DFG::ByteCodeParser::parseBlock):
1945 * dfg/DFGCapabilities.h:
1946 (JSC::DFG::canCompileOpcode):
1947 * interpreter/Interpreter.cpp:
1948 (JSC::Interpreter::privateExecute):
1950 (JSC::JIT::privateCompileMainPass):
1952 * jit/JITOpcodes.cpp:
1954 * jit/JITOpcodes32_64.cpp:
1956 * llint/LowLevelInterpreter32_64.asm:
1957 * llint/LowLevelInterpreter64.asm:
1959 2012-05-10 Gavin Barraclough <barraclough@apple.com>
1961 Cache inheritorID on JSFunction
1962 https://bugs.webkit.org/show_bug.cgi?id=85853
1964 Reviewed by Geoff Garen & Filip Pizlo.
1966 An object's prototype is indicated via its structure. To create an otherwise
1967 empty object with object A as its prototype, we require a structure with its
1968 prototype set to point to A. We wish to use this same structure for all empty
1969 objects created with a prototype of A, so we presently store this structure as
1970 a property of A, known as the inheritorID.
1972 When a function F is invoked as a constructor, where F has a property 'prototype'
1973 set to point to A, in order to create the 'this' value for the constructor to
1974 use the following steps are taken:
1975 - the 'prototype' proptery of F is read, via a regular [[Get]] access.
1976 - the inheritorID internal property of the prototype is read.
1977 - a new, empty object is constructed with its structure set to point to inheritorID.
1979 There are two drawbacks to the current approach:
1980 - it requires that every object has an inheritorID field.
1981 - it requires a [[Get]] access on every constructor call to access the 'prototype' property.
1983 Instead, switch to caching a copy of the inheritorID on the function. Constructor
1984 calls now only need read the internal property from the callee, saving a [[Get]].
1985 This also means that JSObject::m_inheritorID is no longer commonly read, and in a
1986 future patch we can move to storing this in a more memory efficient fashion.
1988 * JavaScriptCore.xcodeproj/project.pbxproj:
1989 * bytecode/CodeBlock.cpp:
1990 (JSC::CodeBlock::dump):
1991 * bytecode/Opcode.h:
1993 (JSC::padOpcodeName):
1994 * bytecompiler/BytecodeGenerator.cpp:
1995 (JSC::BytecodeGenerator::BytecodeGenerator):
1996 * dfg/DFGAbstractState.cpp:
1997 (JSC::DFG::AbstractState::execute):
1998 * dfg/DFGByteCodeParser.cpp:
1999 (JSC::DFG::ByteCodeParser::parseBlock):
2000 * dfg/DFGNodeType.h:
2002 * dfg/DFGOperations.cpp:
2003 * dfg/DFGOperations.h:
2004 * dfg/DFGPredictionPropagationPhase.cpp:
2005 (JSC::DFG::PredictionPropagationPhase::propagate):
2006 * dfg/DFGSpeculativeJIT32_64.cpp:
2007 (JSC::DFG::SpeculativeJIT::compile):
2008 * dfg/DFGSpeculativeJIT64.cpp:
2009 (JSC::DFG::SpeculativeJIT::compile):
2010 * interpreter/Interpreter.cpp:
2011 (JSC::Interpreter::privateExecute):
2012 * jit/JITInlineMethods.h:
2013 (JSC::JIT::emitAllocateJSFunction):
2014 * jit/JITOpcodes.cpp:
2015 (JSC::JIT::emit_op_create_this):
2016 (JSC::JIT::emitSlow_op_create_this):
2017 * jit/JITOpcodes32_64.cpp:
2018 (JSC::JIT::emit_op_create_this):
2019 (JSC::JIT::emitSlow_op_create_this):
2021 (JSC::DEFINE_STUB_FUNCTION):
2022 * llint/LLIntSlowPaths.cpp:
2023 (JSC::LLInt::LLINT_SLOW_PATH_DECL):
2024 * llint/LowLevelInterpreter32_64.asm:
2025 * llint/LowLevelInterpreter64.asm:
2026 * runtime/JSFunction.cpp:
2027 (JSC::JSFunction::JSFunction):
2028 (JSC::JSFunction::cacheInheritorID):
2030 (JSC::JSFunction::put):
2031 (JSC::JSFunction::defineOwnProperty):
2032 * runtime/JSFunction.h:
2033 (JSC::JSFunction::cachedInheritorID):
2035 (JSC::JSFunction::offsetOfCachedInheritorID):
2037 2012-05-10 Michael Saboff <msaboff@apple.com>
2039 Enh: Hash Const JSString in Backing Stores to Save Memory
2040 https://bugs.webkit.org/show_bug.cgi?id=86024
2042 Reviewed by Filip Pizlo.
2044 During garbage collection, each marking thread keeps a HashMap of
2045 strings. While visiting via MarkStack::copyAndAppend(), we check to
2046 see if the string we are visiting is already in the HashMap. If not
2047 we add it. If so, we change the reference to the current string we're
2048 visiting to the prior string.
2050 To somewhat reduce the performance impact of this change, if a string
2051 is unique at the end of a marking it will not be checked during further
2052 GC phases. In some cases this won't catch all duplicates, but we are
2053 trying to catch the growth of duplicate strings.
2056 (JSC::Heap::markRoots):
2057 * heap/MarkStack.cpp:
2058 (JSC::MarkStackThreadSharedData::resetChildren): New method called by the
2059 main thread to reset the slave threads. This is primarily done to
2060 clear the m_uniqueStrings HashMap.
2062 (JSC::MarkStackThreadSharedData::markingThreadMain):
2063 (JSC::MarkStackThreadSharedData::markingThreadStartFunc):
2064 (JSC::MarkStackThreadSharedData::MarkStackThreadSharedData):
2065 (JSC::MarkStackThreadSharedData::reset):
2066 (JSC::MarkStack::reset): Added call to clear m_uniqueStrings.
2067 (JSC::MarkStack::internalAppend): New method that performs the hash consting.
2068 (JSC::SlotVisitor::copyAndAppend): Changed to call the new hash consting
2071 (MarkStackThreadSharedData):
2073 (JSC::MarkStack::sharedData):
2074 * runtime/JSString.h:
2075 (JSString): Added m_isHashConstSingleton flag, accessors for the flag and
2076 code to initialize the flag.
2077 (JSC::JSString::finishCreation):
2078 (JSC::JSString::isHashConstSingleton):
2079 (JSC::JSString::clearHashConstSingleton):
2080 (JSC::JSString::setHashConstSingleton):
2081 (JSC::JSRopeString::finishCreation):
2083 2012-05-09 Filip Pizlo <fpizlo@apple.com>
2085 JIT memory allocator is not returning memory to the OS on Darwin
2086 https://bugs.webkit.org/show_bug.cgi?id=86047
2087 <rdar://problem/11414948>
2089 Reviewed by Geoff Garen.
2091 Work around the problem by using a different madvise() flag, but only for the JIT memory
2092 allocator. Also put in ASSERTs that the call is actually working.
2094 * jit/ExecutableAllocatorFixedVMPool.cpp:
2095 (JSC::FixedVMPoolExecutableAllocator::notifyNeedPage):
2096 (JSC::FixedVMPoolExecutableAllocator::notifyPageIsFree):
2098 2012-05-09 Filip Pizlo <fpizlo@apple.com>
2100 It should be possible to get useful debug logging from the JIT memory allocator
2101 https://bugs.webkit.org/show_bug.cgi?id=86042
2103 Reviewed by Geoff Garen.
2105 * jit/ExecutableAllocator.h:
2107 2012-05-09 Gavin Barraclough <barraclough@apple.com>
2109 GC race condition in OpaqueJSClass::prototype
2110 https://bugs.webkit.org/show_bug.cgi?id=86034
2114 * API/JSClassRef.cpp:
2115 (OpaqueJSClass::prototype):
2116 - Eeeep, landed bad version of patch!
2118 2012-05-09 Gavin Barraclough <barraclough@apple.com>
2120 GC race condition in OpaqueJSClass::prototype
2121 https://bugs.webkit.org/show_bug.cgi?id=86034
2123 Reviewed by Filip Pizlo.
2125 The bug here is basically:
2126 if (weakref) weakref->method()
2127 where a GC may occur between the if & the method call.
2129 * API/JSClassRef.cpp:
2130 (OpaqueJSClass::prototype):
2132 2012-05-09 Mark Hahnenberg <mhahnenberg@apple.com>
2134 CopiedSpace does not add pinned blocks back to the to-space filter
2135 https://bugs.webkit.org/show_bug.cgi?id=86011
2137 Reviewed by Geoffrey Garen.
2139 After a collection has finished, we go through the blocks in from-space
2140 and move any of them that are pinned into to-space. At the beginning of
2141 collection, we reset the to-space block filter that is used during
2142 conservative scanning and add back the blocks that are filled during the
2143 collection. However, we neglect to add back those blocks that are moved
2144 from from-space to to-space, which can cause the conservative scan to
2145 think that some pinned items are not actually in CopiedSpace.
2147 * heap/CopiedSpace.cpp:
2148 (JSC::CopiedSpace::doneCopying): Add the pinned blocks back to the
2149 to-space filter. Also added a comment and assert for future readers that
2150 indicates that it's okay that we don't also add the block to the
2151 to-space block set since it was never removed.
2154 2012-05-09 Carlos Garcia Campos <cgarcia@igalia.com>
2156 [GTK] Use independent version numbers for public libraries
2157 https://bugs.webkit.org/show_bug.cgi?id=85984
2159 Reviewed by Gustavo Noronha Silva.
2161 * GNUmakefile.am: Use LIBJAVASCRIPTCOREGTK_VERSION for library
2164 2012-05-09 Carlos Garcia Campos <cgarcia@igalia.com>
2166 [GTK] Do not install JavaScriptCore platform-specific headers
2167 https://bugs.webkit.org/show_bug.cgi?id=85983
2169 Reviewed by Gustavo Noronha Silva.
2171 JavaScriptCore.h includes JSStringRefCF.h unconditionally. It was
2172 renamed to JavaScript.h in r29234 and it still exists for
2173 compatibility with mac and windows users.
2175 * GNUmakefile.list.am: Remove JavaScriptCore.h, JSStringRefCF.h
2176 and JSStringRefBSTR.h from the sources and headers list.
2178 2012-05-08 Gavin Barraclough <barraclough@apple.com>
2182 GC in the middle of JSObject::allocatePropertyStorage can cause badness
2183 https://bugs.webkit.org/show_bug.cgi?id=83839
2187 This breaks the world, with COLLECT_ON_EVERY_ALLOCATION enabled.
2189 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2191 (JSC::DEFINE_STUB_FUNCTION):
2192 * runtime/JSObject.cpp:
2193 (JSC::JSObject::allocatePropertyStorage):
2194 * runtime/JSObject.h:
2196 (JSC::JSObject::isUsingInlineStorage):
2198 (JSC::JSObject::putDirectInternal):
2199 (JSC::JSObject::putDirectWithoutTransition):
2200 (JSC::JSObject::transitionTo):
2201 * runtime/Structure.cpp:
2203 * runtime/Structure.h:
2204 (JSC::Structure::didTransition):
2206 2012-05-08 Mark Hahnenberg <mhahnenberg@apple.com>
2208 Heap should not continually allocate new pages in steady state
2209 https://bugs.webkit.org/show_bug.cgi?id=85936
2211 Reviewed by Geoff Garen.
2213 Currently, in steady state (i.e. a constant amount of live GC
2214 memory with a constant rate of allocation) assuming we've just
2215 finished a collection with X live blocks in CopiedSpace, we
2216 increase our working set by X blocks in CopiedSpace with each
2217 collection we perform. This is due to the fact that we allocate
2218 until we run out of free blocks to use in the Heap before we
2219 consider whether we should run a collection.
2221 In the longer term, this issue will be mostly resolved by
2222 implementing quick release for the CopiedSpace. In the shorter
2223 term, we should change our policy to check whether we should
2224 allocate before trying to use a free block from the Heap. We
2225 can change our policy to something more appropriate once we
2226 have implemented quick release.
2228 This change should also have the convenient side effect of
2229 reducing the variance in GC-heavy tests (e.g. v8-splay) due
2230 to fact that we are doing less VM allocation during copying
2231 collection. Overall, this patch is performance neutral across
2232 the benchmarks we track.
2234 * heap/CopiedSpace.cpp:
2235 (JSC::CopiedSpace::getFreshBlock): Shuffle the request from the BlockAllocator
2236 around so that we only do it if the block request must succeed
2237 i.e. after we've already checked whether we should do a collection.
2238 * heap/MarkedAllocator.cpp:
2239 (JSC::MarkedAllocator::allocateSlowCase): Ditto.
2240 (JSC::MarkedAllocator::allocateBlock): We no longer have a failure mode in this
2241 function because by the time we've called it, we've already checked whether we
2242 should run a collection so there's no point in returning null.
2243 * heap/MarkedAllocator.h: Removing old arguments from function declaration.
2246 2012-05-08 Gavin Barraclough <barraclough@apple.com>
2248 SIGFPE on divide in classic interpreter
2249 https://bugs.webkit.org/show_bug.cgi?id=85917
2251 Rubber stamped by Oliver Hunt.
2253 * interpreter/Interpreter.cpp:
2254 (JSC::Interpreter::privateExecute):
2255 - check for divisor of -1.
2257 2012-05-07 Oliver Hunt <oliver@apple.com>
2263 r110287 was meant to be refactoring only, but changed behavior
2264 enough to break some websites, including qq.com.
2266 2012-05-07 Andy Estes <aestes@apple.com>
2268 ENABLE_IFRAME_SEAMLESS should be part of FEATURE_DEFINES.
2270 * Configurations/FeatureDefines.xcconfig:
2272 2012-05-07 Oliver Hunt <oliver@apple.com>
2276 * llint/LLIntSlowPaths.cpp:
2277 (JSC::LLInt::LLINT_SLOW_PATH_DECL):
2279 2012-05-07 Oliver Hunt <oliver@apple.com>
2281 LLInt doesn't check for Ropes when performing a character switch
2282 https://bugs.webkit.org/show_bug.cgi?id=85837
2284 Reviewed by Filip Pizlo.
2286 Make LLint check if the scrutinee of a char switch is a rope, and if
2287 so fall back to a slow case.
2289 * llint/LLIntSlowPaths.cpp:
2290 (JSC::LLInt::LLINT_SLOW_PATH_DECL):
2292 * llint/LowLevelInterpreter32_64.asm:
2293 * llint/LowLevelInterpreter64.asm:
2295 2012-05-07 Eric Seidel <eric@webkit.org>
2297 Add ENABLE_IFRAME_SEAMLESS so Apple can turn off SEAMLESS if needed
2298 https://bugs.webkit.org/show_bug.cgi?id=85822
2300 Reviewed by Adam Barth.
2302 * Configurations/FeatureDefines.xcconfig:
2304 2012-05-05 Gavin Barraclough <barraclough@apple.com>
2306 Remove TrustedImm32::m_isPointer
2307 https://bugs.webkit.org/show_bug.cgi?id=85726
2309 Rubber stamped by Sam Weinig.
2311 We used to rely on being able to generate code with known, fixed offsets – to do so we
2312 would inhibit more optimal code generation for pointers. This is no longer necessary.
2314 * assembler/AbstractMacroAssembler.h:
2315 (JSC::AbstractMacroAssembler::TrustedImm32::TrustedImm32):
2317 * assembler/MacroAssemblerARM.h:
2318 (JSC::MacroAssemblerARM::store32):
2319 (JSC::MacroAssemblerARM::move):
2320 (JSC::MacroAssemblerARM::branch32):
2321 * assembler/MacroAssemblerARMv7.h:
2322 (JSC::MacroAssemblerARMv7::move):
2323 * assembler/MacroAssemblerMIPS.h:
2324 (JSC::MacroAssemblerMIPS::add32):
2325 (JSC::MacroAssemblerMIPS::and32):
2326 (JSC::MacroAssemblerMIPS::mul32):
2327 (JSC::MacroAssemblerMIPS::or32):
2328 (JSC::MacroAssemblerMIPS::sub32):
2329 (JSC::MacroAssemblerMIPS::store32):
2330 (JSC::MacroAssemblerMIPS::move):
2332 2012-05-04 Filip Pizlo <fpizlo@apple.com>
2334 DFG should not Flush GetLocal's
2335 https://bugs.webkit.org/show_bug.cgi?id=85663
2336 <rdar://problem/11373600>
2338 Reviewed by Oliver Hunt.
2340 * dfg/DFGByteCodeParser.cpp:
2341 (JSC::DFG::ByteCodeParser::flushArgument):
2342 (JSC::DFG::ByteCodeParser::handleCall):
2344 2012-05-04 Allan Sandfeld Jensen <allan.jensen@nokia.com>
2346 Doesn't build with ENABLE_JIT=0
2347 https://bugs.webkit.org/show_bug.cgi?id=85042
2349 Reviewed by Gavin Barraclough.
2351 * bytecode/Operands.h:
2353 2012-05-03 Oliver Hunt <oliver@apple.com>
2355 Regression(r114702): Clobbering the caller frame register before we've stored it.
2356 https://bugs.webkit.org/show_bug.cgi?id=85564
2358 Reviewed by Filip Pizlo.
2360 Don't use t0 as a temporary, when we're about to use the value in t0.
2362 * llint/LowLevelInterpreter32_64.asm:
2364 2012-05-03 Mark Hahnenberg <mhahnenberg@apple.com>
2366 Removing remainder of accidental printfs.
2369 (JSC::Heap::collect):
2371 2012-05-03 Andy Estes <aestes@apple.com>
2373 If you add printf()s to your garbage collector, the layout tests are gonna have a bad time.
2375 * runtime/GCActivityCallbackCF.cpp:
2376 (JSC::DefaultGCActivityCallbackPlatformData::timerDidFire):
2378 2012-05-03 Mark Hahnenberg <mhahnenberg@apple.com>
2380 Heap::reportAbandonedObjectGraph should not hasten an allocation-triggered collection
2381 https://bugs.webkit.org/show_bug.cgi?id=85543
2383 Reviewed by Filip Pizlo.
2385 Currently reportAbandonedObjectGraph causes the Heap to think it is closer to its
2386 allocation limit for the current cycle, thus hastening an allocation-triggered collection.
2387 In reality, it should just affect the opportunistic GC timer. We should track the bytes
2388 we think have been abandoned and the bytes that have been allocated separately.
2390 * heap/Heap.cpp: Added a new field m_abandonedBytes to Heap to keep track of how much
2391 we think we've abandoned.
2393 (JSC::Heap::reportAbandonedObjectGraph):
2395 (JSC::Heap::didAbandon): Added this function for reportAbandonedObjectGraph to call
2396 rather than didAllocate. Works the same as didAllocate, but modifies bytes abandoned rather
2397 than bytes allocated. Also notifies the timer, summing the two values together.
2398 (JSC::Heap::collect):
2399 (JSC::Heap::didAllocate): Now adds the bytes allocated and bytes abandoned when reporting
2400 to GCActivityCallback.
2404 2012-05-02 Eric Seidel <eric@webkit.org>
2406 Sort ENABLE_ defines in FeatureDefines.xcconfig files to make them easier to compare with one another (and easier to autogenerate)
2407 https://bugs.webkit.org/show_bug.cgi?id=85433
2409 Reviewed by Adam Barth.
2411 I have a script which can autogenerate these xcconfig files as well as the
2412 vsprops files (and soon the Chromium, cmake, gnumake and qmake) feature lists
2413 from a central feature list file.
2414 In preparation for posting such a tool, I'm re-sorting these xcconfig files to be
2415 alphabetically ordered (currently they're close, but not quite).
2416 There is also at least one inconsistency between these files (CSS_LEGACY_PREFIXES) which
2417 I will fix in a second pass. I will also sort the FEATURE_DEFINES = line in a follow-up patch.
2419 * Configurations/FeatureDefines.xcconfig:
2421 2012-05-02 Hojong Han <hojong.han@samsung.com>
2423 ARM_TRADITIONAL build fix
2424 https://bugs.webkit.org/show_bug.cgi?id=85358
2426 Reviewed by Gavin Barraclough.
2428 * assembler/MacroAssemblerARM.h:
2429 (JSC::MacroAssemblerARM::lshift32):
2430 (MacroAssemblerARM):
2431 (JSC::MacroAssemblerARM::or32):
2432 (JSC::MacroAssemblerARM::urshift32):
2433 (JSC::MacroAssemblerARM::xor32):
2434 (JSC::MacroAssemblerARM::branchSub32):
2436 2012-05-02 Mark Hahnenberg <mhahnenberg@apple.com>
2438 Opportunistic GC should give up if the Heap is paged out
2439 https://bugs.webkit.org/show_bug.cgi?id=85411
2441 Reviewed by Filip Pizlo.
2443 Opportunistic GC is punishing us severely in limited memory situations because its
2444 assumptions about how much time a collection will take are way out of whack when the Heap
2445 has been paged out by the OS. We should add a simple detection function to the Heap that
2446 detects if its is paged out. It will do this by iterating each block of both the MarkedSpace
2447 and CopiedSpace. If that operation takes longer than a fixed amount of time (e.g. 100ms),
2448 the function returns true. This function will only be run prior to an opportunistic
2449 collection (i.e. it will not run during our normal allocation-triggered collections).
2451 In my tests, steady state was drastically improved in high memory pressure situations (i.e.
2452 the browser was still usable, significant reduction in SPODs). Occasionally, a normal GC
2453 would be triggered due to pages doing things in the background, which would cause a
2454 significant pause. As we close pages we now cause normal collections rather than full
2455 collections, which prevents us from collecting all of the dead memory immediately. One
2456 nice way to deal with this issue might be to do incremental sweeping.
2459 * heap/CopiedSpace.cpp:
2460 (JSC::isBlockListPagedOut): Helper function to reduce code duplication when iterating over
2461 to-space, from-space, and the oversize blocks.
2463 (JSC::CopiedSpace::isPagedOut): Tries to determine whether or not CopiedSpace is paged out
2464 by iterating all of the blocks.
2465 * heap/CopiedSpace.h:
2468 (JSC::Heap::isPagedOut): Tries to determine whether the Heap is paged out by asking the
2469 MarkedSpace and CopiedSpace if they are paged out.
2473 (JSC::Heap::increaseLastGCLength): Added this so that the GC timer can linearly back off
2474 each time it determines that the Heap is paged out.
2475 * heap/MarkedAllocator.cpp:
2476 (JSC::MarkedAllocator::isPagedOut): Tries to determine if this particular MarkedAllocator's
2477 list of blocks are paged out.
2479 * heap/MarkedAllocator.h:
2481 * heap/MarkedSpace.cpp:
2482 (JSC::MarkedSpace::isPagedOut): For each MarkedAllocator, check to see if they're paged out.
2483 * heap/MarkedSpace.h:
2485 * runtime/GCActivityCallback.cpp:
2486 (JSC::DefaultGCActivityCallback::cancel):
2488 * runtime/GCActivityCallback.h:
2489 (JSC::GCActivityCallback::cancel):
2490 (DefaultGCActivityCallback):
2491 * runtime/GCActivityCallbackCF.cpp: Added a constant of 100ms for the timeout in determining
2492 whether the Heap is paged out or not.
2494 (JSC::DefaultGCActivityCallbackPlatformData::timerDidFire): Added the check to see if we
2495 should attempt a collection based on whether or not we can iterate the blocks of the Heap in
2496 100ms. If we can't, we cancel the timer and tell the Heap we just wasted 100ms more trying to
2497 do a collection. This gives us a nice linear backoff so we're not constantly re-trying in
2498 steady state paged-out-ness.
2499 (JSC::DefaultGCActivityCallback::cancel): Added this function which, while currently doing
2500 exactly the same thing as willCollect, is more obvious as to what it's doing when we call it
2503 2012-05-02 Yong Li <yoli@rim.com>
2505 Fix GCC X86 build error
2506 https://bugs.webkit.org/show_bug.cgi?id=85379
2508 Reviewed by Rob Buis.
2510 Always explicitly claim ".text" to make sure
2511 functions defined with inline assembly will be
2512 created in the correct section.
2514 * dfg/DFGOperations.cpp:
2517 2012-05-02 Oliver Hunt <oliver@apple.com>
2519 Unreviewed, rolling out r115388.
2520 http://trac.webkit.org/changeset/115388
2521 https://bugs.webkit.org/show_bug.cgi?id=85011
2523 This caused many weird performance problems, and needs to be
2526 * dfg/DFGOperations.cpp:
2528 (JSC::Heap::getConservativeRegisterRoots):
2529 (JSC::Heap::markRoots):
2530 * interpreter/CallFrame.cpp:
2531 (JSC::CallFrame::dumpCaller):
2533 * interpreter/CallFrame.h:
2534 (JSC::ExecState::init):
2536 * interpreter/Interpreter.cpp:
2537 (JSC::Interpreter::execute):
2538 (JSC::Interpreter::executeCall):
2539 (JSC::Interpreter::executeConstruct):
2540 (JSC::Interpreter::prepareForRepeatCall):
2541 (JSC::Interpreter::privateExecute):
2542 * interpreter/Interpreter.h:
2543 (JSC::Interpreter::execute):
2544 * interpreter/RegisterFile.cpp:
2545 (JSC::RegisterFile::growSlowCase):
2546 (JSC::RegisterFile::gatherConservativeRoots):
2547 * interpreter/RegisterFile.h:
2548 (JSC::RegisterFile::end):
2549 (JSC::RegisterFile::size):
2550 (JSC::RegisterFile::addressOfEnd):
2552 (JSC::RegisterFile::RegisterFile):
2553 (JSC::RegisterFile::shrink):
2554 (JSC::RegisterFile::grow):
2556 (JSC::DEFINE_STUB_FUNCTION):
2557 (JSC::jitCompileFor):
2559 * llint/LLIntSlowPaths.cpp:
2560 (JSC::LLInt::LLINT_SLOW_PATH_DECL):
2561 (JSC::LLInt::handleHostCall):
2562 * llint/LowLevelInterpreter.asm:
2563 * runtime/CommonSlowPaths.h:
2564 (JSC::CommonSlowPaths::arityCheckFor):
2566 2012-05-01 Oliver Hunt <oliver@apple.com>
2568 Physijs demo crashes due to DFG not updating topCallFrame correctly.
2569 https://bugs.webkit.org/show_bug.cgi?id=85311
2571 Reviewed by Filip Pizlo.
2573 A few of the dfg operations failed to correctly set the topCallFrame,
2574 and so everything goes wrong. This patch corrects the effected operations,
2575 and makes debug builds poison topCallFrame before calling a dfg operation.
2577 * dfg/DFGOperations.cpp:
2578 (JSC::DFG::putByVal):
2579 * dfg/DFGSpeculativeJIT.h:
2580 (JSC::DFG::SpeculativeJIT::callOperation):
2582 (JSC::DFG::SpeculativeJIT::prepareForExternalCall):
2583 (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheck):
2584 (JSC::DFG::SpeculativeJIT::appendCallSetResult):
2586 2012-04-30 Gavin Barraclough <barraclough@apple.com>
2588 Should be able to use YARR JIT without the JS language JIT
2589 https://bugs.webkit.org/show_bug.cgi?id=85252
2591 Reviewed by Geoff Garen.
2593 Need to split canUseRegExpJIT out of canUseJIT.
2595 * runtime/JSGlobalData.cpp:
2598 (JSC::JSGlobalData::JSGlobalData):
2599 - replace m_canUseJIT with m_canUseAssembler
2600 * runtime/JSGlobalData.h:
2602 (JSC::JSGlobalData::canUseRegExpJIT):
2603 - Added canUseRegExpJIT, distinct from canUseJIT.
2604 * runtime/RegExp.cpp:
2605 (JSC::RegExp::compile):
2606 (JSC::RegExp::compileMatchOnly):
2607 - Call canUseRegExpJIT instead of canUseJIT.
2609 2012-04-30 Gavin Barraclough <barraclough@apple.com>
2611 Should be able to build YARR JIT without the JS language JIT
2612 https://bugs.webkit.org/show_bug.cgi?id=85242
2614 Reviewed by Michael Saboff.
2616 Some build macros are wrong.
2618 * assembler/RepatchBuffer.h:
2619 * jit/ExecutableAllocator.h:
2621 * jit/JITExceptions.cpp:
2622 * runtime/InitializeThreading.cpp:
2623 (JSC::initializeThreadingOnce):
2625 2012-04-26 Gavin Barraclough <barraclough@apple.com>
2627 Arguments object resets attributes on redefinition of a parameter
2628 https://bugs.webkit.org/show_bug.cgi?id=84994
2630 Rubber stamped by Oliver Hunt.
2632 There is a bug that we always re-add the original property before
2633 redefinition, doing so in a way that will reset the attributes
2634 without checking configurability.
2636 * runtime/Arguments.cpp:
2637 (JSC::Arguments::defineOwnProperty):
2638 - Only instantiate the property once - do not re-add if
2639 it has already been added, or if it has been deleted.
2641 2012-04-30 Ryosuke Niwa <rniwa@webkit.org>
2643 Remove an erroneous assertion after r115655.
2645 * runtime/NumberPrototype.cpp:
2646 (JSC::toUStringWithRadix):
2648 2012-04-30 Myles Maxfield <mmaxfield@google.com>
2650 End of Interpreter::tryCacheGetByID can trigger the garbage collector
2651 https://bugs.webkit.org/show_bug.cgi?id=84927
2653 Reviewed by Oliver Hunt.
2655 * interpreter/Interpreter.cpp:
2656 (JSC::Interpreter::tryCacheGetByID):
2658 2012-04-30 Benjamin Poulain <benjamin@webkit.org>
2660 jsSingleCharacterString and jsSingleCharacterSubstring are not inlined
2661 https://bugs.webkit.org/show_bug.cgi?id=85147
2663 Reviewed by Darin Adler.
2665 The functions jsSingleCharacterString() and jsSingleCharacterSubstring() were not inlined
2666 by the compiler. This annihilate the gains of using SmallStrings.
2668 On stringProtoFuncCharAt(), this patch improves the performance by 11%.
2670 * runtime/JSString.h:
2671 (JSC::jsSingleCharacterString):
2672 (JSC::jsSingleCharacterSubstring):
2674 2012-04-30 Benjamin Poulain <bpoulain@apple.com>
2676 Add fast patch for radix == 10 on numberProtoFuncToString
2677 https://bugs.webkit.org/show_bug.cgi?id=85120
2679 Reviewed by Darin Adler.
2681 When radix, we use to turn the doubleValue into a JSValue just to convert
2682 it to a String. The problem is that was using the slow path for conversion and
2683 for the toString() operation.
2685 This patch shortcuts the creation of a JSValue and uses NumericStrings directly.
2686 The conversion is split between Integer and Double to ensure the fastest conversion
2687 for the common case of integer arguments.
2689 Converting number with radix 10 becomes 5% faster.
2691 Due to the simpler conversion of number to string for integer, converting
2692 integers that do not fall in the two previous optimizations get 32% faster.
2694 * runtime/NumberPrototype.cpp:
2695 (JSC::extractRadixFromArgs):
2696 (JSC::integerValueToString):
2697 (JSC::numberProtoFuncToString):
2699 2012-04-30 Carlos Garcia Campos <cgarcia@igalia.com>
2701 Unreviewed. Fix make distcheck.
2703 * GNUmakefile.list.am: Add missing header.
2705 2012-04-28 Geoffrey Garen <ggaren@apple.com>
2707 Factored threaded block allocation into a separate object
2708 https://bugs.webkit.org/show_bug.cgi?id=85148
2710 Reviewed by Sam Weinig.
2712 99% of this patch just moves duplicated block allocation and
2713 deallocation code into a new object named BlockAllocator, with these
2716 * heap/BlockAllocator.h: Added.
2717 (BlockAllocator::BlockAllocator): The order of declarations here now
2718 guards us against an unlikely race condition during startup.
2720 * heap/BlockAllocator.cpp:
2721 JSC::BlockAllocator::blockFreeingThreadMain): Added a FIXME to
2722 highlight a lack of clarity we have in our block deallocation routines.
2724 2012-04-28 Sam Weinig <sam@webkit.org>
2726 Try to fix the Qt build.
2729 (JSC::Heap::lastChanceToFinalize):
2731 2012-04-28 Geoffrey Garen <ggaren@apple.com>
2733 Try to fix the Windows build.
2735 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2737 2012-04-28 Geoffrey Garen <ggaren@apple.com>
2739 Clarified JSGlobalData (JavaScript VM) lifetime
2740 https://bugs.webkit.org/show_bug.cgi?id=85142
2742 Reviewed by Anders Carlsson.
2744 This was so confusing that I didn't feel like I could reason about
2745 memory lifetime in the heap without fixing it.
2749 (1) JSGlobalData owns the virtual machine and all memory in it.
2751 (2) Deleting a JSGlobalData frees the virtual machine and all memory
2754 (Caveat emptor: if you delete the virtual machine while you're running
2755 JIT code or accessing GC objects, you're gonna have a bad time.)
2757 (I opted not to make arbitrary sub-objects keep the virtual machine
2758 alive automatically because:
2760 (a) doing that right would be complex and slow;
2762 (b) in the case of an exiting thread or process, there's no
2763 clear way to give the garbage collector a chance to try again
2766 (c) continuing to run the garbage collector after we've been
2767 asked to shut down the virtual machine seems rude;
2769 (d) we've never really supported that feature, anyway.)
2771 (3) Normal ref-counting will do. No need to call a battery of
2772 specialty functions to tear down a JSGlobalData. Its foibles
2773 notwithstanding, C++ does in fact know how to execute destructors in
2776 * API/JSContextRef.cpp:
2777 (JSGlobalContextCreate): Removed compatibility shim for older
2778 operating systems because it's no longer used.
2780 (JSGlobalContextRelease): Now that we can rely on JSGlobalData to "do
2781 the right thing", this code is much simpler. We still have one special
2782 case to notify the garbage collector if we're removing the last
2783 reference to the global object, since this can improve memory behavior.
2785 * heap/CopiedSpace.cpp:
2786 (JSC::CopiedSpace::freeAllBlocks):
2787 * heap/CopiedSpace.h:
2788 (CopiedSpace): Renamed "destroy" => "freeAllBlocks" because true
2789 destruction-time behaviors should be limited to our C++ destructor.
2794 (JSC::Heap::lastChanceToFinalize):
2797 (JSC::Heap::heap): Renamed "destroy" => "lastChanceToFinalize" because
2798 true destruction-time behaviors should be limited to our C++
2801 Reorganized the code, putting code that must run before any objects
2802 get torn down into lastChanceToFinalize, and code that just tears down
2803 objects into our destructor.
2806 (JSC::LocalStack::LocalStack):
2807 (JSC::LocalStack::push):
2808 (LocalStack): See rule (2).
2813 (printUsageStatement):
2818 (printUsageStatement):
2820 (realMain): See rule (3).
2822 I removed the feature of ensuring orderly tear-down when calling quit()
2823 or running in --help mode because it didn't seem very useful and
2824 making it work with Windows structured exception handling and
2825 NO_RETURN didn't seem like a fun way to spend a Saturday.
2827 * runtime/JSGlobalData.h:
2828 * runtime/JSGlobalData.cpp:
2829 (JSC::JSGlobalData::JSGlobalData): Moved heap to be the first data
2830 member in JSGlobalData to ensure that it's destructed last, so other
2831 objects that reference it destruct without crashing. This allowed me
2832 to remove clearBuiltinStructures() altogether, and helped guarantee
2835 (JSC::JSGlobalData::~JSGlobalData): Explicitly call
2836 lastChanceToFinalize() at the head of our destructor to ensure that
2837 all pending finalizers run while the virtual machine is still in a
2838 valid state. Trying to resurrect (re-ref) the virtual machine at this
2839 point is not valid, but all other operations are.
2841 Changed a null to a 0xbbadbeef to clarify just how bad this beef is.
2843 * runtime/JSGlobalObject.cpp:
2844 (JSC::JSGlobalObject::init):
2845 * runtime/JSGlobalObject.h:
2847 (JSC::JSGlobalObject::globalData): See rule (3).
2849 2012-04-27 Geoffrey Garen <ggaren@apple.com>
2851 Try to fix the Windows build.
2856 2012-04-27 Geoffrey Garen <ggaren@apple.com>
2858 Made WeakSet::allocate() static and removed its JSGlobalData argument
2859 https://bugs.webkit.org/show_bug.cgi?id=85128
2861 Reviewed by Anders Carlsson.
2863 This is a step toward faster finalization.
2865 WeakSet::allocate() now deduces which WeakSet to allocate from based on
2866 its JSCell* argument. (Currently, there's only one WeakSet, but soon
2867 there will be many.)
2869 This was a global replace of "globalData.heap.weakSet()->allocate" with
2870 "WeakSet::allocate", plus by-hand removal of the JSGlobalData argument.
2872 * heap/WeakSetInlines.h: Copied from Source/JavaScriptCore/heap/WeakSet.h.
2874 I had to split out WeakSet::allocate() in to a separate header to avoid
2877 (JSC::WeakSet::allocate): We can mask the pointer we're passed to
2878 figure out where to allocate our WeakImpl. (Soon, we'll use this to
2879 associate the WeakImpl with the GC block it references.)
2881 2012-04-27 Geoffrey Garen <ggaren@apple.com>
2883 Stop using aligned allocation for WeakBlock
2884 https://bugs.webkit.org/show_bug.cgi?id=85124
2886 Reviewed by Anders Carlsson.
2888 We don't actually use the alignment for anything.
2890 * heap/WeakBlock.cpp:
2891 (JSC::WeakBlock::create):
2892 (JSC::WeakBlock::WeakBlock): Switched from aligned allocation to regular
2896 (WeakBlock): Don't use HeapBlock because HeapBlock requires aligned
2897 allocation. This change required me to add some declarations that we used
2898 to inherit from HeapBlock.
2900 (WeakBlock::blockFor): Removed. This function relied on aligned allocation
2901 but didn't do anything for us.
2903 (WeakBlock::deallocate): Removed. WeakBlock doesn't own any of the deallocation
2904 logic, so it shouldn't own the function.
2907 (JSC::WeakSet::~WeakSet):
2908 (JSC::WeakSet::finalizeAll):
2909 (JSC::WeakSet::visitLiveWeakImpls):
2910 (JSC::WeakSet::visitDeadWeakImpls):
2911 (JSC::WeakSet::sweep):
2912 (JSC::WeakSet::shrink):
2913 (JSC::WeakSet::resetAllocator):
2914 (JSC::WeakSet::tryFindAllocator):
2916 (WeakSet): Updated declarations to reflect WeakBlock not inheriting from
2917 HeapBlock. This allowed me to remove some casts, which was nice.
2919 (JSC::WeakSet::deallocate): Directly set the deallocated flag instead of
2920 asking WeakBlock to do it for us. We don't need to have a WeakBlock
2921 pointer to set the flag, so stop asking for one.
2923 2012-04-27 Kentaro Hara <haraken@chromium.org>
2925 [JSC] Implement a helper method createNotEnoughArgumentsError()
2926 https://bugs.webkit.org/show_bug.cgi?id=85102
2928 Reviewed by Geoffrey Garen.
2930 In bug 84787, kbr@ requested to avoid hard-coding
2931 createTypeError(exec, "Not enough arguments") here and there.
2932 This patch implements createNotEnoughArgumentsError(exec)
2933 and uses it in JSC bindings.
2935 c.f. a corresponding bug for V8 bindings is bug 85097.
2937 * runtime/Error.cpp:
2938 (JSC::createNotEnoughArgumentsError):
2943 2012-04-27 Geoffrey Garen <ggaren@apple.com>
2945 Only allow non-null pointers in the WeakSet
2946 https://bugs.webkit.org/show_bug.cgi?id=85119
2948 Reviewed by Darin Adler.
2950 This is a step toward more efficient finalization.
2952 No clients put non-pointers (JSValues) into Weak<T> and PassWeak<T>.
2954 Some clients put null pointers into Weak<T> and PassWeak<T>, but this is
2955 more efficient and straight-forward to model with a null in the Weak<T>
2956 or PassWeak<T> instead of allocating a WeakImpl just to hold null.
2959 (JSC): Removed the Unknown (JSValue) type of weak pointer because it's
2962 (PassWeak): Don't provide a default initializer for our JSCell* argument.
2963 This feature was only used in one place, and it was a bug.
2965 (JSC::::get): Don't check for a null stored inside our WeakImpl: that's
2966 not allowed anymore.
2968 (JSC::PassWeak::PassWeak): Handle null as a null WeakImpl instead of
2969 allocating a WeakImpl and storing null into it.
2973 (JSC::::Weak): Same changes as in PassWeak<T>.
2975 * heap/WeakBlock.cpp:
2976 (JSC::WeakBlock::visitLiveWeakImpls):
2977 (JSC::WeakBlock::visitDeadWeakImpls): Only non-null cells are valid in
2978 the WeakSet now, so no need to check for non-cells and null cell pointers.
2981 (JSC::WeakImpl::WeakImpl): Only non-null cells are valid in the WeakSet
2982 now, so ASSERT that.
2984 2012-04-27 Gavin Barraclough <barraclough@apple.com>
2986 <rdar://problem/7909395> Math in JavaScript is inaccurate on iOS
2988 By defalut IEEE754 denormal support is disabled on iOS;
2991 Reviewed by Filip Pizlo.
2995 - clear the appropriate bit in the fpscr.
2997 2012-04-27 Michael Saboff <msaboff@apple.com>
2999 Memory wasted in JSString for non-rope strings
3000 https://bugs.webkit.org/show_bug.cgi?id=84907
3002 Reviewed by Geoffrey Garen.
3004 Split JSString into two classes, JSString as a base class that does not
3005 include the fibers of a Rope, and a subclass JSRopeString that has the
3006 rope functionality. Both classes "share" the same ClassInfo. Added
3007 a bool to JSString to indicate that the string was allocated as a JSRopeString
3008 to properly handle visiting the fiber children when the rope is resolved and
3009 the JSRopeString appears as a JSString. Didn't change the interface of JSString
3010 to require any JIT changes.
3012 As part of this change, removed "cellSize" from ClassInfo since both classes
3013 share the same ClassInfo, but have different sizes. The only use I could find
3014 for cellSize was an ASSERT in allocateCell().
3016 This appears to be neutral on performance tests.
3018 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Changed JSString::resolveRope
3019 to JSRopeString::resolveRope
3020 * runtime/ClassInfo.h:
3024 (JSC::allocateCell):
3025 * runtime/JSString.cpp:
3026 (JSC::JSRopeString::RopeBuilder::expand):
3027 (JSC::JSString::visitChildren):
3029 (JSC::JSRopeString::visitFibers):
3030 (JSC::JSRopeString::resolveRope):
3031 (JSC::JSRopeString::resolveRopeSlowCase8):
3032 (JSC::JSRopeString::resolveRopeSlowCase):
3033 (JSC::JSRopeString::outOfMemory):
3034 (JSC::JSRopeString::getIndexSlowCase):
3035 * runtime/JSString.h:
3038 (JSC::JSString::finishCreation):
3039 (JSC::JSString::create):
3040 (JSC::JSString::isRope):
3041 (JSC::JSString::is8Bit):
3044 (JSC::JSRopeString::RopeBuilder::RopeBuilder):
3045 (JSC::JSRopeString::RopeBuilder::append):
3046 (JSC::JSRopeString::RopeBuilder::release):
3047 (JSC::JSRopeString::RopeBuilder::length):
3048 (JSC::JSRopeString::JSRopeString):
3049 (JSC::JSRopeString::finishCreation):
3050 (JSC::JSRopeString::createNull):
3051 (JSC::JSRopeString::create):
3052 (JSC::JSString::value):
3053 (JSC::JSString::tryGetValue):
3054 (JSC::JSString::getIndex):
3055 (JSC::jsStringBuilder):
3056 * runtime/Operations.h:
3058 (JSC::jsStringFromArguments):
3060 2012-04-27 Oliver Hunt <oliver@apple.com>
3064 * interpreter/Interpreter.cpp:
3065 (JSC::Interpreter::throwException):
3067 2012-04-27 Oliver Hunt <oliver@apple.com>
3069 Lazy link phase of baseline jit fails to propagate exception
3070 https://bugs.webkit.org/show_bug.cgi?id=85092
3072 Reviewed by Filip Pizlo.
3074 Very simple patch, when linking produces an error we need to actually store
3075 the exception prior to throwing it. I can't find any other examples of this,
3076 but as we're already in the slow path when throwing an exception I've hardened
3077 exception throwing against null exceptions.
3079 * interpreter/Interpreter.cpp:
3080 (JSC::Interpreter::throwException):
3084 2012-04-27 Benjamin Poulain <benjamin@webkit.org>
3086 Generalize the single character optimization of numberProtoFuncToString
3087 https://bugs.webkit.org/show_bug.cgi?id=85027
3089 Reviewed by Geoffrey Garen.
3091 The function numberProtoFuncToString() has an optimization to use SmallStrings::singleCharacterString()
3092 when the radix is 36.
3094 This patch generalize the optimization for any radix. Any positive number smaller than its radix
3095 can be represented by a single character of radixDigits.
3097 This makes numberProtoFuncToString() about twice as fast for this case of single digit conversion.
3099 * runtime/NumberPrototype.cpp:
3100 (JSC::numberProtoFuncToString):
3102 2012-04-27 Gavin Peters <gavinp@chromium.org>
3104 Add new ENABLE_LINK_PRERENDER define to control the Prerendering API
3105 https://bugs.webkit.org/show_bug.cgi?id=84871
3107 Reviewed by Adam Barth.
3109 Prerendering is currently covered by the ENABLE_LINK_PREFETCH macro, but the new Prerendering
3110 API separates it from prefetching. Having separate include guards lets ports enable prefetching,
3111 a relatively easy change, without needing to build the infrastructure for prerendering, which
3112 is considerably more complicated.
3114 * Configurations/FeatureDefines.xcconfig:
3116 2012-04-26 Oliver Hunt <oliver@apple.com>
3118 Allocating WeakImpl should not trigger GC, as that makes the world very tricksy.
3119 https://bugs.webkit.org/show_bug.cgi?id=85020
3121 Reviewed by Gavin Barraclough.
3123 Now in the event that we are unable to find an allocator for a new handle, just
3124 add a new allocator rather than trying to recover "dead" handles through a GC.
3126 Find allocator is now much simpler, and addAllocator directly reports the
3127 increased memory usage to the heap without causing any GC to happen immediately.
3130 (JSC::WeakSet::findAllocator):
3131 (JSC::WeakSet::addAllocator):
3133 2012-04-26 Oliver Hunt <oliver@apple.com>
3135 Remove RegisterFile::end()/m_end
3136 https://bugs.webkit.org/show_bug.cgi?id=85011
3138 Reviewed by Gavin Barraclough.
3140 Get rid of end() and m_end from RegisterFile. From now on
3141 we only care about the end of the committed region when calling
3142 code. When re-entering the VM we now plant the new CallFrame
3143 immediately after whatever the current topCallFrame is. This
3144 required adding a routine to CallFrame to determine exactly what
3145 we should be doing (in the absence of an existing CallFrame, we
3146 can't reason about the frameExtent() so we check for that).
3148 This also now means that the GC only marks the portion of the
3149 RegisterFile that is actually in use, and that VM re-entry doesn't
3150 exhaust the RegisterFile as rapidly.
3152 * dfg/DFGOperations.cpp:
3154 (JSC::Heap::getConservativeRegisterRoots):
3155 (JSC::Heap::markRoots):
3156 * interpreter/CallFrame.h:
3157 (JSC::ExecState::init):
3158 (JSC::ExecState::startOfReusableRegisterFile):
3160 * interpreter/Interpreter.cpp:
3161 (JSC::Interpreter::execute):
3162 (JSC::Interpreter::executeCall):
3163 (JSC::Interpreter::executeConstruct):
3164 (JSC::Interpreter::prepareForRepeatCall):
3165 (JSC::Interpreter::privateExecute):
3166 * interpreter/Interpreter.h:
3167 (JSC::Interpreter::execute):
3168 * interpreter/RegisterFile.cpp:
3169 (JSC::RegisterFile::growSlowCase):
3170 (JSC::RegisterFile::gatherConservativeRoots):
3171 * interpreter/RegisterFile.h:
3172 (JSC::RegisterFile::commitEnd):
3173 (JSC::RegisterFile::addressOfEnd):
3175 (JSC::RegisterFile::RegisterFile):
3176 (JSC::RegisterFile::shrink):
3177 (JSC::RegisterFile::grow):
3179 (JSC::DEFINE_STUB_FUNCTION):
3180 (JSC::jitCompileFor):
3182 * llint/LLIntSlowPaths.cpp:
3183 (JSC::LLInt::LLINT_SLOW_PATH_DECL):
3184 (JSC::LLInt::handleHostCall):
3185 * llint/LowLevelInterpreter.asm:
3186 * runtime/CommonSlowPaths.h:
3187 (JSC::CommonSlowPaths::arityCheckFor):
3189 2012-04-26 Filip Pizlo <fpizlo@apple.com>
3191 DFG ARMv7 backend should optimize Float32 arrays
3192 https://bugs.webkit.org/show_bug.cgi?id=85000
3193 <rdar://problem/10652827>
3195 Reviewed by Gavin Barraclough.
3197 * assembler/ARMv7Assembler.h:
3199 (JSC::ARMv7Assembler::flds):
3200 (JSC::ARMv7Assembler::fsts):
3201 (JSC::ARMv7Assembler::vcvtds):
3202 (JSC::ARMv7Assembler::vcvtsd):
3203 * assembler/MacroAssemblerARMv7.h:
3204 (JSC::MacroAssemblerARMv7::loadFloat):
3205 (MacroAssemblerARMv7):
3206 (JSC::MacroAssemblerARMv7::storeFloat):
3207 (JSC::MacroAssemblerARMv7::convertFloatToDouble):
3208 (JSC::MacroAssemblerARMv7::convertDoubleToFloat):
3209 * bytecode/PredictedType.h:
3210 (JSC::isActionableFloatMutableArrayPrediction):
3212 (JSC::DFG::Node::shouldSpeculateFloat32Array):
3214 2012-04-25 Benjamin Poulain <benjamin@webkit.org>
3216 Add a version of StringImpl::find() without offset
3217 https://bugs.webkit.org/show_bug.cgi?id=83968
3219 Reviewed by Sam Weinig.
3221 Add support for the new StringImpl::find() to UString.
3223 Change stringProtoFuncIndexOf() to specifically take advatage of the feature.
3224 This gives a 12% gains on a distribution of strings between 30 and 100 characters.
3226 * runtime/StringPrototype.cpp:
3227 (JSC::substituteBackreferences):
3228 (JSC::stringProtoFuncIndexOf):
3229 * runtime/UString.h:
3231 (JSC::UString::find):
3233 2012-04-25 Mark Hahnenberg <mhahnenberg@apple.com>
3235 WebCore shouldn't call collectAllGarbage directly
3236 https://bugs.webkit.org/show_bug.cgi?id=84897
3238 Reviewed by Geoffrey Garen.
3240 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Exported symbol
3241 for reportAbanondedObjectGraph so WebCore can use it.
3242 * heap/Heap.h: Ditto.
3244 2012-04-25 Oliver Hunt <oliver@apple.com>
3246 Biolab disaster crashes on ToT
3247 https://bugs.webkit.org/show_bug.cgi?id=84898
3249 Reviewed by Filip Pizlo.
3251 Whoops, committed without saving reviewer requested change.
3253 * dfg/DFGVirtualRegisterAllocationPhase.cpp:
3254 (JSC::DFG::VirtualRegisterAllocationPhase::run):
3256 2012-04-25 Oliver Hunt <oliver@apple.com>
3258 Biolab disaster crashes on ToT
3259 https://bugs.webkit.org/show_bug.cgi?id=84898
3261 Reviewed by Filip Pizlo.
3263 I recently added an assertion to the Interpreter to catch incorrect
3264 updates of topCallFrame. This caused a bunch of sites (including biolab
3265 disaster) to crash as we were not correctly handling callee registers
3266 of inlined functions, leading to a mismatch.
3268 I could not actually make this trigger directly, although it does trigger
3269 already on some of the GTK and QT bots.
3271 * dfg/DFGVirtualRegisterAllocationPhase.cpp:
3272 (JSC::DFG::VirtualRegisterAllocationPhase::run):
3274 2012-04-25 Kenneth Russell <kbr@google.com>
3276 Delete CanvasPixelArray, ByteArray, JSByteArray and JSC code once unreferenced
3277 https://bugs.webkit.org/show_bug.cgi?id=83655
3279 Reviewed by Oliver Hunt.
3282 * GNUmakefile.list.am:
3283 * JavaScriptCore.gypi:
3284 * JavaScriptCore.order:
3285 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
3286 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3287 * JavaScriptCore.xcodeproj/project.pbxproj:
3289 * bytecode/PredictedType.cpp:
3290 (JSC::predictionToString):
3291 (JSC::predictionToAbbreviatedString):
3292 (JSC::predictionFromClassInfo):
3293 * bytecode/PredictedType.h:
3295 (JSC::isActionableIntMutableArrayPrediction):
3296 * dfg/DFGAbstractState.cpp:
3297 (JSC::DFG::AbstractState::initialize):
3298 (JSC::DFG::AbstractState::execute):
3299 * dfg/DFGCSEPhase.cpp:
3300 (JSC::DFG::CSEPhase::performNodeCSE):
3301 * dfg/DFGFixupPhase.cpp:
3302 (JSC::DFG::FixupPhase::fixupNode):
3304 * dfg/DFGNodeType.h:
3306 * dfg/DFGOperations.cpp:
3307 (JSC::DFG::putByVal):
3308 * dfg/DFGPredictionPropagationPhase.cpp:
3309 (JSC::DFG::PredictionPropagationPhase::propagate):
3310 * dfg/DFGSpeculativeJIT.cpp:
3311 (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
3312 (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
3313 * dfg/DFGSpeculativeJIT.h:
3314 (JSC::DFG::ValueSource::forPrediction):
3316 * dfg/DFGSpeculativeJIT32_64.cpp:
3317 (JSC::DFG::SpeculativeJIT::compile):
3318 * dfg/DFGSpeculativeJIT64.cpp:
3319 (JSC::DFG::SpeculativeJIT::compile):
3320 * interpreter/Interpreter.cpp:
3321 (JSC::Interpreter::privateExecute):
3323 (JSC::DEFINE_STUB_FUNCTION):
3325 * llint/LLIntSlowPaths.cpp:
3326 (JSC::LLInt::getByVal):
3327 (JSC::LLInt::LLINT_SLOW_PATH_DECL):
3328 * runtime/JSByteArray.cpp: Removed.
3329 * runtime/JSByteArray.h: Removed.
3330 * runtime/JSGlobalData.cpp:
3332 2012-04-25 Filip Pizlo <fpizlo@apple.com>
3334 http://bellard.org/jslinux/ triggers an assertion failure in the DFG JIT
3335 https://bugs.webkit.org/show_bug.cgi?id=84815
3336 <rdar://problem/11319514>
3338 Reviewed by Gavin Barraclough.
3340 * dfg/DFGSpeculativeJIT.h:
3341 (JSC::DFG::SpeculativeJIT::forwardSpeculationCheck):
3343 2012-04-25 Michael Saboff <msaboff@apple.com>
3345 Closure in try {} with catch captures all locals from the enclosing function
3346 https://bugs.webkit.org/show_bug.cgi?id=84804
3348 Reviewed by Oliver Hunt.
3350 Changed the capturing of local variables from capturing when eval is used,
3351 within a "with" or within a "catch" to be just when an eval is used.
3352 Renamed the function returning that we should capture from
3353 getCapturedVariables() to usesEval(), since that what it noew returns.
3354 Needed to fix the "with" code to only range check when the activation
3355 has actually been torn off. Added m_isTornOff to JSActivation to
3359 (JSC::Scope::usesEval):
3360 (JSC::Scope::getCapturedVariables):
3361 * runtime/JSActivation.cpp:
3362 (JSC::JSActivation::JSActivation):
3363 (JSC::JSActivation::symbolTableGet):
3364 (JSC::JSActivation::symbolTablePut):
3365 * runtime/JSActivation.h:
3367 (JSC::JSActivation::tearOff):
3369 2012-04-24 Mark Hahnenberg <mhahnenberg@apple.com>
3371 GC Activity Callback timer should be based on how much has been allocated since the last collection
3372 https://bugs.webkit.org/show_bug.cgi?id=84763
3374 Reviewed by Geoffrey Garen.
3376 The desired behavior for the GC timer is to collect at some point in the future,
3377 regardless of how little we've allocated. A secondary goal, which is almost if not
3378 as important, is for the timer to collect sooner if there is the potential to
3379 collect a greater amount of memory. Conversely, as we allocate more memory we'd
3380 like to reduce the delay to the next collection. If we're allocating quickly enough,
3381 the timer should be preempted in favor of a normal allocation-triggered collection.
3382 If allocation were to slow or stop, we'd like the timer to be able to opportunistically
3383 run a collection without us having to allocate to the hard limit set by the Heap.
3385 This type of policy can be described in terms of the amount of CPU we are willing
3386 to dedicate to reclaim a single MB of memory. For example, we might be willing to
3387 dedicate 1% of our CPU to reclaim 1 MB. We base our CPU usage off of the length of
3388 the last collection, e.g. if our last collection took 1ms, we would want to wait about
3389 100ms before running another collection to reclaim 1 MB. These constants should be
3390 tune-able, e.g. 0.1% CPU = 1 MB vs. 1% CPU = 1 MB vs. 10% CPU = 1 MB.
3392 * API/JSBase.cpp: Use the new reportAbandonedObjectGraph.
3394 * API/JSContextRef.cpp: Ditto.
3397 (JSC::Heap::reportAbandonedObjectGraph): Similar to reportExtraMemoryCost. Clients call
3398 this function to notify the Heap that some unknown number of JSC objects might have just
3399 been abandoned and are now garbage. The Heap might schedule a new collection timer based
3400 on this notification.
3402 (JSC::Heap::collect): Renamed m_lastFullGCSize to the less confusing m_sizeAfterLastCollect.
3405 * heap/MarkedAllocator.h:
3406 (JSC::MarkedAllocator::zapFreeList): Fixed a bug in zapFreeList that failed to nullify the
3407 current allocator's FreeList once zapping was complete.
3408 * runtime/GCActivityCallback.cpp: Removed didAbandonObjectGraph because it was replaced by
3409 Heap::reportAbandonedObjectGraph.
3411 * runtime/GCActivityCallback.h:
3412 (JSC::GCActivityCallback::willCollect):
3413 (DefaultGCActivityCallback):
3414 * runtime/GCActivityCallbackCF.cpp: Refactored the GC timer code so that we now schedule the
3415 timer based on how much we have allocated since the last collection up to a certain amount.
3416 We use the length of the previous GC to try to keep our total cost of opportunistic timer-triggered
3417 collections around 1% of the CPU per MB of garbage we expect to reclaim up to a maximum of 5 MB.
3418 (DefaultGCActivityCallbackPlatformData):
3420 (JSC::DefaultGCActivityCallback::~DefaultGCActivityCallback):
3421 (JSC::DefaultGCActivityCallback::commonConstructor):
3422 (JSC::scheduleTimer):
3424 (JSC::DefaultGCActivityCallback::didAllocate):
3426 2012-04-24 Michael Saboff <msaboff@apple.com>
3428 objectProtoFuncToString creates new string every invocation
3429 https://bugs.webkit.org/show_bug.cgi?id=84781
3431 Reviewed by Geoffrey Garen.
3433 Cache the results of object toString() in the attached Structure.
3435 * runtime/ObjectPrototype.cpp:
3436 (JSC::objectProtoFuncToString):
3437 * runtime/Structure.cpp:
3438 (JSC::Structure::visitChildren): visit new m_hasObjectToStringValue.
3439 * runtime/Structure.h: Added new member m_hasObjectToStringValue
3441 (JSC::Structure::objectToStringValue):
3443 (JSC::Structure::setObjectToStringValue):
3445 2012-04-24 Thouraya ANDOLSI <thouraya.andolsi@st.com>
3447 Reviewed by Oliver Hunt.
3449 https://bugs.webkit.org/show_bug.cgi?id=84727.
3450 Fix build when ENABLE_JIT_CONSTANT_BLINDING enabled.
3452 * assembler/MacroAssemblerSH4.h:
3453 (JSC::MacroAssemblerSH4::or32):
3454 (JSC::MacroAssemblerSH4::and32):
3455 (JSC::MacroAssemblerSH4::lshift32):
3456 (JSC::MacroAssemblerSH4::xor32):
3457 (JSC::MacroAssemblerSH4::branchSub32):
3458 (JSC::MacroAssemblerSH4::urshift32):
3460 2012-04-24 Gavin Barraclough <barraclough@apple.com>
3462 Add explicit patchableBranchPtrWithPatch/patchableJump methods
3463 https://bugs.webkit.org/show_bug.cgi?id=84498
3465 Reviewed by Filip Pizlo.
3467 Don't rely on inUninterruptedSequence to distinguish which jumps we need to be able to repatch.
3469 * assembler/AbstractMacroAssembler.h:
3470 (JSC::AbstractMacroAssembler::PatchableJump::PatchableJump):
3472 (JSC::AbstractMacroAssembler::PatchableJump::operator Jump&):
3473 (AbstractMacroAssembler):
3474 (JSC::AbstractMacroAssembler::AbstractMacroAssembler):
3475 - Added PatchableJump type, removed inUninterruptedSequence.
3476 * assembler/LinkBuffer.h:
3478 (JSC::LinkBuffer::locationOf):
3479 - Only allow the location to be taken of patchable branches
3480 * assembler/MacroAssembler.h:
3482 (JSC::MacroAssembler::patchableBranchPtrWithPatch):
3483 (JSC::MacroAssembler::patchableJump):
3484 (JSC::MacroAssembler::shouldBlind):
3485 - Added default implementation of patchableBranchPtrWithPatch, patchableJump.
3486 * assembler/MacroAssemblerARMv7.h:
3487 (JSC::MacroAssemblerARMv7::MacroAssemblerARMv7):
3488 (MacroAssemblerARMv7):
3489 (JSC::MacroAssemblerARMv7::patchableBranchPtrWithPatch):
3490 (JSC::MacroAssemblerARMv7::patchableJump):
3491 (JSC::MacroAssemblerARMv7::jump):
3492 (JSC::MacroAssemblerARMv7::makeBranch):
3493 - Added ARMv7 implementation of patchableBranchPtrWithPatch, patchableJump.
3494 * dfg/DFGCorrectableJumpPoint.h:
3496 (JSC::DFG::CorrectableJumpPoint::switchToLateJump):
3497 - Late jumps are PatchableJumps.
3498 * dfg/DFGJITCompiler.cpp:
3499 (JSC::DFG::JITCompiler::linkOSRExits):
3500 - replace use of inUninterruptedSequence
3501 * dfg/DFGJITCompiler.h:
3502 (JSC::DFG::PropertyAccessRecord::PropertyAccessRecord):
3503 (PropertyAccessRecord):
3504 - replace use of inUninterruptedSequence
3505 * dfg/DFGSpeculativeJIT32_64.cpp:
3506 (JSC::DFG::SpeculativeJIT::cachedGetById):
3507 (JSC::DFG::SpeculativeJIT::cachedPutById):
3508 - replace use of inUninterruptedSequence
3509 * dfg/DFGSpeculativeJIT64.cpp:
3510 (JSC::DFG::SpeculativeJIT::cachedGetById):
3511 (JSC::DFG::SpeculativeJIT::cachedPutById):
3512 - replace use of inUninterruptedSequence
3514 (PropertyStubCompilationInfo):
3515 - replace use of inUninterruptedSequence
3516 * jit/JITInlineMethods.h:
3517 (JSC::JIT::beginUninterruptedSequence):
3518 (JSC::JIT::endUninterruptedSequence):
3519 - replace use of inUninterruptedSequence
3520 * jit/JITPropertyAccess.cpp:
3521 (JSC::JIT::compileGetByIdHotPath):
3522 - replace use of inUninterruptedSequence
3523 * jit/JITPropertyAccess32_64.cpp:
3524 (JSC::JIT::compileGetByIdHotPath):
3525 - replace use of inUninterruptedSequence
3527 2012-04-24 Benjamin Poulain <bpoulain@apple.com>
3529 Generalize the single character optimization of r114072
3530 https://bugs.webkit.org/show_bug.cgi?id=83961
3532 Reviewed by Eric Seidel.
3534 Use the regular String::find(StringImpl*) in all cases now that it has been made faster.
3536 * runtime/StringPrototype.cpp:
3537 (JSC::replaceUsingStringSearch):
3539 2012-04-24 Filip Pizlo <fpizlo@apple.com>
3541 Unreviewed, 32-bit build fix.
3543 * dfg/DFGSpeculativeJIT32_64.cpp:
3544 (JSC::DFG::SpeculativeJIT::compile):
3546 2012-04-24 Filip Pizlo <fpizlo@apple.com>
3548 DFG performs incorrect DCE on (some?) intrinsics
3549 https://bugs.webkit.org/show_bug.cgi?id=84746
3550 <rdar://problem/11310772>
3552 Reviewed by Oliver Hunt.
3554 * dfg/DFGAbstractState.cpp:
3555 (JSC::DFG::AbstractState::execute):
3556 * dfg/DFGByteCodeParser.cpp:
3558 (JSC::DFG::ByteCodeParser::setIntrinsicResult):
3559 (JSC::DFG::ByteCodeParser::handleMinMax):
3560 (JSC::DFG::ByteCodeParser::handleIntrinsic):
3561 * dfg/DFGNodeType.h:
3563 * dfg/DFGPredictionPropagationPhase.cpp:
3564 (JSC::DFG::PredictionPropagationPhase::propagate):
3565 * dfg/DFGSpeculativeJIT32_64.cpp:
3566 (JSC::DFG::SpeculativeJIT::compile):
3567 * dfg/DFGSpeculativeJIT64.cpp:
3568 (JSC::DFG::SpeculativeJIT::compile):
3570 2012-04-24 Mark Hahnenberg <mhahnenberg@apple.com>
3572 Failure to allocate ArrayStorage in emit_op_new_array leads to poisonous JSArray
3573 https://bugs.webkit.org/show_bug.cgi?id=84648
3575 Reviewed by Geoffrey Garen.
3577 When emit_op_new_array successfully allocates a new JSArray but fails to allocate
3578 the corresponding ArrayStorage for it, it falls back to the out-of-line stub call
3579 to constructArray, which constructs and entirely new JSArray/ArrayStorage pair.
3580 This leaves us with a JSArray hanging around on the stack or in a register that
3581 did not go through its own constructor, thus giving it uninitialized memory in the
3582 two fields that are checked in JSArray::visitChildren.
3584 * jit/JITInlineMethods.h:
3585 (JSC::JIT::emitAllocateJSArray): We try to allocate the ArrayStorage first, so that
3586 if we fail we haven't generated the poisonous JSArray that can cause a GC crash.
3587 * jit/JITOpcodes.cpp:
3588 (JSC::JIT::emitSlow_op_new_array):
3590 2012-04-23 Filip Pizlo <fpizlo@apple.com>
3592 DFG on ARMv7 should not OSR exit on every integer division
3593 https://bugs.webkit.org/show_bug.cgi?id=84661
3595 Reviewed by Oliver Hunt.
3597 On ARMv7, ArithDiv no longer has to know whether or not to speculate integer (since
3598 that was broken with the introduction of Int32ToDouble) nor does it have to know
3599 whether or not to convert its result to integer. This is now taken care of for free
3600 with the addition of the DoubleAsInt32 node, which represents a double-is-really-int
3603 * dfg/DFGAbstractState.cpp:
3604 (JSC::DFG::AbstractState::execute):
3605 * dfg/DFGCSEPhase.cpp:
3606 (JSC::DFG::CSEPhase::performNodeCSE):
3607 * dfg/DFGFixupPhase.cpp:
3608 (JSC::DFG::FixupPhase::fixupNode):
3609 * dfg/DFGNodeType.h:
3611 * dfg/DFGOSRExit.cpp:
3612 (JSC::DFG::OSRExit::OSRExit):
3613 (JSC::DFG::OSRExit::considerAddingAsFrequentExitSiteSlow):
3616 * dfg/DFGPredictionPropagationPhase.cpp:
3617 (JSC::DFG::PredictionPropagationPhase::propagate):
3618 * dfg/DFGSpeculativeJIT.cpp:
3619 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
3620 (JSC::DFG::SpeculativeJIT::compileDoubleAsInt32):
3622 * dfg/DFGSpeculativeJIT.h:
3624 (JSC::DFG::SpeculativeJIT::speculationCheck):
3625 (JSC::DFG::SpeculativeJIT::forwardSpeculationCheck):
3626 * dfg/DFGSpeculativeJIT32_64.cpp:
3627 (JSC::DFG::SpeculativeJIT::compile):
3628 * dfg/DFGSpeculativeJIT64.cpp:
3629 (JSC::DFG::SpeculativeJIT::compile):
3631 2012-04-24 Geoffrey Garen <ggaren@apple.com>
3633 "GlobalHandle" HandleHeap (now WeakSet) allocations grow but do not shrink
3634 https://bugs.webkit.org/show_bug.cgi?id=84740
3635 <rdar://problem/9917638>
3637 Reviewed by Gavin Barraclough.
3642 (JSC::Heap::destroy): Be more specific about what's shrinking, since we
3643 can also shrink the WeakSet, but we don't do so here.
3645 (JSC::Heap::collect): If we're going to shrink the heap, shrink the
3646 WeakSet too. Otherwise, its footprint is permanent.
3649 (Heap): Removed shrink() as a public interface, since it's vague about
3650 which parts of the heap it affects, and it's really an internal detail.
3653 (JSC::WeakSet::shrink): Nix any free blocks. We assume that sweep() has
3654 already taken place, since that's the convention for shrink() in the heap.
3657 (WeakSet): New function!
3659 2012-04-24 Adam Klein <adamk@chromium.org>
3661 Fix includes in StrongInlines.h and ScriptValue.h
3662 https://bugs.webkit.org/show_bug.cgi?id=84659
3664 Reviewed by Geoffrey Garen.
3666 * heap/StrongInlines.h: Include JSGlobalData.h, since JSGlobalData's
3667 definiition is required here.
3669 2012-04-23 Filip Pizlo <fpizlo@apple.com>
3671 DFG OSR exit should ensure that all variables have been initialized
3672 https://bugs.webkit.org/show_bug.cgi?id=84653
3673 <rdar://problem/11258183>
3675 Reviewed by Gavin Barraclough.
3677 Initialize all uncaptured dead variables to undefined on OSR exit.
3679 * dfg/DFGSpeculativeJIT.cpp:
3680 (JSC::DFG::ValueSource::dump):
3681 (JSC::DFG::SpeculativeJIT::compile):
3682 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
3683 * dfg/DFGSpeculativeJIT.h:
3685 2012-04-23 Oliver Hunt <oliver@apple.com>
3687 Call instruction for the baseline JIT stores origin info in wrong callframe
3688 https://bugs.webkit.org/show_bug.cgi?id=84645
3690 Reviewed by Gavin Barraclough.
3692 The baseline JIT was updating the wrong callframe when making a call. If the
3693 call failed during dispatch (unable to perform codegen, calling a non-object)
3694 we would attempt to use this information, but it would be completely wrong.
3697 (JSC::JIT::compileOpCall):
3698 * jit/JITCall32_64.cpp:
3699 (JSC::JIT::compileOpCall):
3701 2012-04-23 Filip Pizlo <fpizlo@apple.com>
3703 DFG must keep alive values that it will perform speculations on
3704 https://bugs.webkit.org/show_bug.cgi?id=84638
3705 <rdar://problem/11258183>
3707 Reviewed by Oliver Hunt.
3709 * dfg/DFGNodeType.h:
3712 2012-04-23 Oliver Hunt <oliver@apple.com>
3714 Fix non-LLInt builds by temporarily removing an over-enthusiastic assertion
3716 * interpreter/Interpreter.cpp:
3717 (JSC::Interpreter::executeCall):
3719 2012-04-22 Jon Lee <jonlee@apple.com>
3721 Remove notifications support on Mac Lion.
3722 https://bugs.webkit.org/show_bug.cgi?id=84554
3723 <rdar://problem/11297128>
3725 Reviewed by Sam Weinig.
3727 * Configurations/FeatureDefines.xcconfig:
3729 2012-04-21 Darin Adler <darin@apple.com>
3731 Change JavaScript lexer to use 0 instead of -1 for sentinel, eliminating the need to put characters into ints
3732 https://bugs.webkit.org/show_bug.cgi?id=84523
3734 Reviewed by Oliver Hunt.
3736 Profiles showed that checks against -1 were costly, and I saw they could be eliminated.
3737 Streamlined this code to use standard character types and 0 rather than -1. One benefit
3738 of this is that there's no widening and narrowing. Another is that there are many cases
3739 where we already have the correct behavior for 0, so can eliminate a branch that was
3740 used to test for -1 before. Also eliminates typecasts in the code.
3743 (JSC::Lexer::invalidCharacterMessage): Updated use of String::format since m_current is now a
3744 character type, not an int.
3745 (JSC::Lexer::setCode): Use 0 rather than -1 when past the end.
3746 (JSC::Lexer::shift): Ditto. Also spruced up the comment a bit.
3747 (JSC::Lexer::atEnd): Added. New function that distinguishes an actual 0 character from the end
3748 of the code. This can be used places we used to cheeck for -1.
3749 (JSC::Lexer::peek): Updated to use -1 instead of 0. Removed meaningless comment.
3750 (JSC::Lexer::parseFourDigitUnicodeHex): Changed to use character types instead of int.
3751 (JSC::Lexer::shiftLineTerminator): Removed now-unneeded type casts. Changed local variable that
3752 had a data-member-style name.
3753 (JSC::Lexer::parseIdentifier): Removed now-unneeded explicit checks for -1, since the isIdentPart
3754 function already returns false for the 0 character. Updated types in a couple other places. Used
3755 the atEnd function where needed.
3756 (JSC::Lexer::parseIdentifierSlowCase): More of the same.
3757 (JSC::characterRequiresParseStringSlowCase): Added overloaded helper function for parseString.
3758 (JSC::Lexer::parseString): Ditto.
3759 (JSC::Lexer::parseStringSlowCase): Ditto.
3760 (JSC::Lexer::parseMultilineComment): Ditto.
3761 (JSC::Lexer::lex): More of the same. Also changed code to set the startOffset directly in
3762 the tokenInfo instead of putting it in a local variable first, saving some memory access.
3763 (JSC::Lexer::scanRegExp): Ditto.
3764 (JSC::Lexer::skipRegExp): Ditto.
3766 * parser/Lexer.h: Changed return type of the peek function and type of m_current from int to
3767 the character type. Added atEnd function.
3768 (JSC::Lexer::setOffset): Used 0 instead of -1 and removed an overzealous attempt to optimize.
3769 (JSC::Lexer::lexExpectIdentifier): Used 0 instead of -1.
3771 2012-04-21 Darin Adler <darin@apple.com>
3773 Change JavaScript lexer to use 0 instead of -1 for sentinel, eliminating the need to put characters into ints
3774 https://bugs.webkit.org/show_bug.cgi?id=84523
3776 Reviewed by Oliver Hunt.
3778 Separate preparation step of copyright dates, renaming, and other small tweaks.
3781 (JSC::Lexer::invalidCharacterMessage): Removed "get" from name to match WebKit naming conventions.
3782 (JSC::Lexer::peek): Removed meaningless comment.
3783 (JSC::Lexer::parseFourDigitUnicodeHex): Renamed from getUnicodeCharacter to be more precise about
3784 what this function does.
3785 (JSC::Lexer::shiftLineTerminator): Renamed local variable that had a data-member-style name.
3786 (JSC::Lexer::parseStringSlowCase): Updated for new name of parseFourDigitUnicodeHex.
3787 (JSC::Lexer::lex): Updated for new name of invalidCharacterMessage.
3789 * parser/Lexer.h: Removed an unneeded forward declaration of the RegExp class.
3790 Renamed getInvalidCharMessage to invalidCharacterMessage and made it const. Renamed
3791 getUnicodeCharacter to parseFourDigitUnicodeHex.
3793 2012-04-20 Filip Pizlo <fpizlo@apple.com>
3795 DFG should optimize int8 and int16 arrays on ARMv7
3796 https://bugs.webkit.org/show_bug.cgi?id=84503
3798 Reviewed by Oliver Hunt.
3800 * assembler/ARMv7Assembler.h:
3802 (JSC::ARMv7Assembler::ldrsb):
3803 (JSC::ARMv7Assembler::ldrsh):
3804 * assembler/MacroAssemblerARMv7.h:
3805 (JSC::MacroAssemblerARMv7::load16Signed):
3806 (JSC::MacroAssemblerARMv7::load8Signed):
3807 * bytecode/PredictedType.h:
3808 (JSC::isActionableIntMutableArrayPrediction):
3810 (JSC::DFG::Node::shouldSpeculateInt8Array):
3811 (JSC::DFG::Node::shouldSpeculateInt16Array):
3813 2012-04-20 Oliver Hunt <oliver@apple.com>
3815 Add an ability to find the extent of a callframe
3816 https://bugs.webkit.org/show_bug.cgi?id=84513
3818 Reviewed by Filip Pizlo.
3820 Add a function to get the extent of a callframe and
3821 use that function for a new assertion to make sure the
3822 RegisterFile makes sense using that information.
3824 * interpreter/CallFrame.cpp:
3825 (JSC::CallFrame::frameExtentInternal):
3827 * interpreter/CallFrame.h:
3828 (JSC::ExecState::frameExtent):
3830 * interpreter/Interpreter.cpp:
3831 (JSC::Interpreter::executeCall):
3833 2012-04-20 Benjamin Poulain <bpoulain@apple.com>
3835 Inline the JSArray constructor
3836 https://bugs.webkit.org/show_bug.cgi?id=84416
3838 Reviewed by Geoffrey Garen.
3840 The constructor is trivial, no reason to jump for it.
3842 This makes the creation of array ~5% faster (on non-trivial cases, no empty arrays).
3844 * runtime/JSArray.cpp:
3846 * runtime/JSArray.h:
3847 (JSC::JSArray::JSArray):
3848 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
3850 2012-04-20 Mark Hahnenberg <mhahnenberg@apple.com>
3852 Heap should cancel GC timer at the start of the collection
3853 https://bugs.webkit.org/show_bug.cgi?id=84477
3855 Reviewed by Geoffrey Garen.
3857 Currently the Heap cancels the GC timer at the conclusion of a collection.
3858 We should change this to be at the beginning because something (e.g. a finalizer)
3859 could call didAbandonObjectGraph(), which will schedule the timer, but then
3860 we'll immediately unschedule the timer at the conclusion of the collection,
3861 thus potentially preventing large swaths of memory from being reclaimed in a timely manner.
3864 (JSGarbageCollect): Remove outdated fix-me and remove check for whether the Heap is
3865 busy or not, since we're just scheduling a timer to run a GC in the future.
3867 (JSC::Heap::collect): Rename didCollect to willCollect and move the call to the
3868 top of Heap::collect.
3869 * runtime/GCActivityCallback.cpp: Renamed didCollect to willCollect.
3870 (JSC::DefaultGCActivityCallback::willCollect):
3871 * runtime/GCActivityCallback.h: Ditto.
3872 (JSC::GCActivityCallback::willCollect):
3873 (DefaultGCActivityCallback):
3874 * runtime/GCActivityCallbackCF.cpp: Ditto.
3875 (JSC::DefaultGCActivityCallback::willCollect):
3877 2012-04-20 Mark Hahnenberg <mhahnenberg@apple.com>
3879 JSGarbageCollect should not call collectAllGarbage()
3880 https://bugs.webkit.org/show_bug.cgi?id=84476
3882 Reviewed by Geoffrey Garen.
3885 (JSGarbageCollect): Notify the Heap's GCActivityCallback using didAbandonObjectGraph.
3887 2012-04-19 Oliver Hunt <oliver@apple.com>
3889 Exception stack traces aren't complete when the exception starts in native code
3890 https://bugs.webkit.org/show_bug.cgi?id=84073
3892 Reviewed by Filip Pizlo.
3894 Refactored building the stack trace to so that we can construct
3895 it earlier, and don't rely on any prior work performed in the
3896 exception handling machinery. Also updated LLInt and the DFG to
3897 completely initialise the callframes of host function calls.
3899 Also fixed a few LLInt paths that failed to correctly update the
3902 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
3903 * dfg/DFGJITCompiler.h:
3904 * dfg/DFGOperations.cpp:
3905 * dfg/DFGSpeculativeJIT32_64.cpp:
3906 (JSC::DFG::SpeculativeJIT::emitCall):
3907 * dfg/DFGSpeculativeJIT64.cpp:
3908 (JSC::DFG::SpeculativeJIT::emitCall):
3909 * interpreter/Interpreter.cpp:
3911 (JSC::Interpreter::getStackTrace):
3912 (JSC::Interpreter::addStackTraceIfNecessary):
3914 (JSC::Interpreter::throwException):
3915 * interpreter/Interpreter.h:
3918 (JSC::JIT::compileOpCall):
3919 * jit/JITCall32_64.cpp:
3920 (JSC::JIT::compileOpCall):
3921 * jit/JITOpcodes.cpp:
3922 (JSC::JIT::privateCompileCTINativeCall):
3923 * jit/JITOpcodes32_64.cpp:
3924 (JSC::JIT::privateCompileCTINativeCall):
3927 * llint/LLIntExceptions.cpp:
3928 (JSC::LLInt::interpreterThrowInCaller):
3929 (JSC::LLInt::returnToThrow):
3930 (JSC::LLInt::callToThrow):
3931 * llint/LLIntSlowPaths.cpp:
3932 (JSC::LLInt::handleHostCall):
3933 * llint/LowLevelInterpreter32_64.asm:
3934 * llint/LowLevelInterpreter64.asm:
3937 * runtime/Error.cpp:
3938 (JSC::addErrorInfo):
3943 2012-04-19 Mark Hahnenberg <mhahnenberg@apple.com>
3945 We're collecting pathologically due to small allocations
3946 https://bugs.webkit.org/show_bug.cgi?id=84404
3948 Reviewed by Geoffrey Garen.
3950 No change in performance on run-jsc-benchmarks.
3952 * dfg/DFGSpeculativeJIT.h: Replacing m_firstFreeCell with m_freeList.
3953 (JSC::DFG::SpeculativeJIT::emitAllocateBasicJSObject):
3954 * heap/CopiedSpace.cpp: Getting rid of any water mark related stuff, since it's no
3956 (JSC::CopiedSpace::CopiedSpace):
3957 (JSC::CopiedSpace::tryAllocateSlowCase): We now only call didAllocate here rather than
3958 carrying out a somewhat complicated accounting job for our old water mark throughout CopiedSpace.
3959 (JSC::CopiedSpace::tryAllocateOversize): Call the new didAllocate to notify the Heap of
3960 newly allocated stuff.
3961 (JSC::CopiedSpace::tryReallocateOversize):
3962 (JSC::CopiedSpace::doneFillingBlock):
3963 (JSC::CopiedSpace::doneCopying):
3964 (JSC::CopiedSpace::destroy):
3965 * heap/CopiedSpace.h:
3967 * heap/CopiedSpaceInlineMethods.h:
3968 (JSC::CopiedSpace::startedCopying):
3969 * heap/Heap.cpp: Removed water mark related stuff, replaced with new bytesAllocated and
3970 bytesAllocatedLimit to track how much memory has been allocated since the last collection.
3972 (JSC::Heap::reportExtraMemoryCostSlowCase):
3973 (JSC::Heap::collect): We now set the new limit of bytes that we can allocate before triggering
3974 a collection to be the size of the Heap after the previous collection. Thus, we still have our
3975 2x allocation amount.
3976 (JSC::Heap::didAllocate): Notifies the GC activity timer of how many bytes have been allocated
3977 thus far and then adds the new number of bytes to the current total.
3979 * heap/Heap.h: Removed water mark related stuff.
3980 (JSC::Heap::notifyIsSafeToCollect):
3982 (JSC::Heap::shouldCollect):
3984 * heap/MarkedAllocator.cpp:
3985 (JSC::MarkedAllocator::tryAllocateHelper): Refactored to use MarkedBlock's new FreeList struct.
3986 (JSC::MarkedAllocator::allocateSlowCase):
3987 (JSC::MarkedAllocator::addBlock):
3988 * heap/MarkedAllocator.h:
3990 (JSC::MarkedAllocator::MarkedAllocator):
3991 (JSC::MarkedAllocator::allocate):
3992 (JSC::MarkedAllocator::zapFreeList): Refactored to take in a FreeList instead of a FreeCell.
3993 * heap/MarkedBlock.cpp:
3994 (JSC::MarkedBlock::specializedSweep):
3995 (JSC::MarkedBlock::sweep):
3996 (JSC::MarkedBlock::sweepHelper):
3997 (JSC::MarkedBlock::zapFreeList):
3998 * heap/MarkedBlock.h:
3999 (FreeList): Added a new struct that keeps track of the current MarkedAllocator's
4000 free list including the number of bytes of stuff in the free list so that when the free list is
4001 exhausted, the correct amount can be reported to Heap.
4003 (JSC::MarkedBlock::FreeList::FreeList):
4005 * heap/MarkedSpace.cpp: Removing all water mark related stuff.
4006 (JSC::MarkedSpace::MarkedSpace):
4007 (JSC::MarkedSpace::resetAllocators):
4008 * heap/MarkedSpace.h:
4012 (JSC::WeakSet::findAllocator): Refactored to use the didAllocate interface with the Heap. This
4013 function still needs work though now that the Heap knows how many bytes have been allocated
4014 since the last collection.
4015 * jit/JITInlineMethods.h: Refactored to use MarkedBlock's new FreeList struct.
4016 (JSC::JIT::emitAllocateBasicJSObject): Ditto.
4017 * llint/LowLevelInterpreter.asm: Ditto.
4018 * runtime/GCActivityCallback.cpp:
4019 (JSC::DefaultGCActivityCallback::didAllocate):
4020 * runtime/GCActivityCallback.h:
4021 (JSC::GCActivityCallback::didAllocate): Renamed willAllocate to didAllocate to indicate that
4022 the allocation that is being reported has already taken place.
4023 (DefaultGCActivityCallback):
4024 * runtime/GCActivityCallbackCF.cpp:
4026 (JSC::DefaultGCActivityCallback::didAllocate): Refactored to return early if the amount of
4027 allocation since the last collection is not above a threshold (initially arbitrarily chosen to
4030 2012-04-19 Filip Pizlo <fpizlo@apple.com>
4032 MacroAssemblerARMv7::branchTruncateDoubleToUint32 should obey the overflow signal
4033 https://bugs.webkit.org/show_bug.cgi?id=84401
4035 Reviewed by Gavin Barraclough.
4037 * assembler/MacroAssemblerARMv7.h:
4038 (JSC::MacroAssemblerARMv7::branchTruncateDoubleToUint32):
4040 2012-04-19 Don Olmstead <don.olmstead@am.sony.com>
4042 KeywordLookupGenerator.py should take an output file as an argument
4043 https://bugs.webkit.org/show_bug.cgi?id=84292
4045 Reviewed by Eric Seidel.
4047 Extended KeywordLookupGenerator to accept an additional argument specifying an output file. If this argument is found stdout is redirected to a file for the duration of the script.
4049 * KeywordLookupGenerator.py:
4051 2012-04-19 Filip Pizlo <fpizlo@apple.com>
4053 It should be possible to perform debugCall on ARMv7
4054 https://bugs.webkit.org/show_bug.cgi?id=84381
4056 Reviewed by Oliver Hunt.
4058 debugCall() was clobbering the argument to the call it was making, leading to a
4059 corrupt ExecState*. This change fixes that issue by using a scratch register that
4060 does not clobber arguments, and it also introduces more assertions that we have
4063 * dfg/DFGAssemblyHelpers.cpp:
4065 (JSC::DFG::AssemblyHelpers::jitAssertHasValidCallFrame):
4066 * dfg/DFGAssemblyHelpers.h:
4067 (JSC::DFG::AssemblyHelpers::selectScratchGPR):
4069 (JSC::DFG::AssemblyHelpers::debugCall):
4070 (JSC::DFG::AssemblyHelpers::jitAssertHasValidCallFrame):
4071 * dfg/DFGJITCompiler.cpp:
4072 (JSC::DFG::JITCompiler::linkOSRExits):
4073 * dfg/DFGOSRExitCompiler.cpp:
4074 * dfg/DFGSpeculativeJIT.cpp:
4075 (JSC::DFG::SpeculativeJIT::compile):
4076 * dfg/DFGSpeculativeJIT.h:
4077 (JSC::DFG::SpeculativeJIT::selectScratchGPR):
4079 2012-04-19 Filip Pizlo <fpizlo@apple.com>
4081 LLInt no-JIT fallback native call trampoline's exception handler incorrectly assumes that
4082 the PB/PC has been preserved
4083 https://bugs.webkit.org/show_bug.cgi?id=84367
4085 Reviewed by Oliver Hunt.
4087 * llint/LowLevelInterpreter32_64.asm:
4088 * llint/LowLevelInterpreter64.asm:
4090 2012-04-19 Filip Pizlo <fpizlo@apple.com>
4092 It should be possible to load from Float64 arrays on ARMv7 without crashing
4093 https://bugs.webkit.org/show_bug.cgi?id=84361
4095 Reviewed by Oliver Hunt.
4097 * assembler/MacroAssemblerARMv7.h:
4098 (JSC::MacroAssemblerARMv7::loadDouble):
4099 (JSC::MacroAssemblerARMv7::storeDouble):
4101 2012-04-19 Dominik Röttsches <dominik.rottsches@linux.intel.com>
4103 [CMake] Build fix after r114575
4104 https://bugs.webkit.org/show_bug.cgi?id=84322
4106 Reviewed by Simon Hausmann.
4108 Build fix, adding WTF when linking jsc shell.
4110 * shell/CMakeLists.txt:
4112 2012-04-18 Filip Pizlo <fpizlo@apple.com>
4114 JSC testing should have complete coverage over typed array types
4115 https://bugs.webkit.org/show_bug.cgi?id=84302
4117 Reviewed by Geoff Garen.
4119 Added Uint8ClampedArray to the set of typed arrays that are supported by jsc
4122 * JSCTypedArrayStubs.h:
4125 (GlobalObject::finishCreation):
4127 2012-04-18 Filip Pizlo <fpizlo@apple.com>
4129 jsc command line should support typed arrays by default
4130 https://bugs.webkit.org/show_bug.cgi?id=84298
4132 Rubber stamped by Gavin Barraclough.
4134 * JSCTypedArrayStubs.h:
4137 (GlobalObject::finishCreation):
4139 2012-04-18 Filip Pizlo <fpizlo@apple.com>
4141 JSVALUE32_64 should be able to perform division on ARM without crashing, and variables
4142 forced double should not be scrambled when performing OSR entry
4143 https://bugs.webkit.org/show_bug.cgi?id=84272
4145 Reviewed by Geoff Garen.
4147 * dfg/DFGFixupPhase.cpp:
4148 (JSC::DFG::FixupPhase::fixupNode):
4149 * dfg/DFGOSREntry.cpp:
4150 (JSC::DFG::prepareOSREntry):
4152 2012-04-18 Don Olmstead <don.olmstead@am.sony.com>
4154 JavaScriptCore.gypi not current
4155 https://bugs.webkit.org/show_bug.cgi?id=84224
4157 Reviewed by Eric Seidel.
4159 Updated JavaScriptCore.gypi to contain the latest sources. Removed os-win32 as it wasn't used. Also removed references to ICU files in the gypi file as ICU is most likely specified by the port itself.
4161 Private and public header files were determined by looking at copy-files.cmd within Apple's Visual Studio directory.
4163 * JavaScriptCore.gypi:
4165 2012-04-18 Benjamin Poulain <bpoulain@apple.com>
4167 Remove m_subclassData from JSArray, move the attribute to subclass as needed
4168 https://bugs.webkit.org/show_bug.cgi?id=84249
4170 Reviewed by Geoffrey Garen.
4172 JSArray's m_subclassData is only used by WebCore's RuntimeArray. This patch moves
4173 the attribute to RuntimeArray to avoid allocating memory for the pointer in the common
4176 This gives ~1% improvement in JSArray creation microbenchmark thanks to fewer allocations
4179 * jit/JITInlineMethods.h:
4180 (JSC::JIT::emitAllocateJSArray):
4181 * runtime/JSArray.cpp:
4182 (JSC::JSArray::JSArray):
4183 * runtime/JSArray.h:
4185 2012-04-18 Benjamin Poulain <bpoulain@apple.com>
4187 replaceUsingStringSearch: delay the creation of the replace string until needed
4188 https://bugs.webkit.org/show_bug.cgi?id=83841
4190 Reviewed by Geoffrey Garen.
4192 We do not need to obtain the replaceValue until we have a match. By moving the intialization
4193 of replaceValue when needed, we save a few instructions when there is no match.
4195 * runtime/StringPrototype.cpp:
4196 (JSC::replaceUsingRegExpSearch):
4197 (JSC::replaceUsingStringSearch):
4198 (JSC::stringProtoFuncReplace):
4200 2012-04-18 Mark Hahnenberg <mhahnenberg@apple.com>
4202 GC activity timer should be tied to allocation, not collection
4203 https://bugs.webkit.org/show_bug.cgi?id=83919
4205 Reviewed by Geoffrey Garen.
4207 * API/JSContextRef.cpp: Used the new didAbandonObjectGraph callback to indicate that now that we've
4208 released a global object, we're abandoning a potentially large number of objects that JSC might want
4210 * heap/CopiedSpace.cpp:
4211 (JSC::CopiedSpace::tryAllocateSlowCase): Added the call to timer's willAllocate function to indicate
4212 that we've hit a slow path and are allocating now, so schedule the timer.
4215 (JSC::Heap::collectAllGarbage): Removed the call to discardAllCompiledCode because it was causing us to
4216 throw away too much code during our benchmarks (especially vp8, which is very large and thus has large
4217 amounts of compiled code).
4218 (JSC::Heap::collect): Added the new call to didCollect at the conclusion of a collection so that we
4219 can cancel the timer if we no longer need to run a collection. Also added a check at the beginning of a
4220 collection to see if we should throw away our compiled code. Currently this is set to happen about once
4222 * heap/Heap.h: Added field to keep track of the last time we threw away our compiled code.
4223 * heap/MarkedAllocator.cpp:
4224 (JSC::MarkedAllocator::allocateSlowCase): Added call to willAllocate on the allocation slow path, just like
4226 * runtime/GCActivityCallback.cpp: Added default stubs for non-CF platforms.
4227 (JSC::DefaultGCActivityCallback::willAllocate):
4229 (JSC::DefaultGCActivityCallback::didCollect):
4230 (JSC::DefaultGCActivityCallback::didAbandonObjectGraph):
4231 * runtime/GCActivityCallback.h: Added new functions to make JSC's GC timer less arcane. This includes replacing
4232 the operator () with willAllocate() and adding an explicit didCollect() to cancel the timer after a collection
4233 occurs rather than relying on the way the timer is invoked to cancel itself. Also added a callback for
4234 when somebody else (e.g. WebCore or the JSC API) to notify JSC that they have just abandoned an entire graph of
4235 objects and that JSC might want to clean them up.
4236 (JSC::GCActivityCallback::~GCActivityCallback):
4237 (JSC::GCActivityCallback::willAllocate):
4238 (JSC::GCActivityCallback::didCollect):
4239 (JSC::GCActivityCallback::didAbandonObjectGraph):
4240 (JSC::GCActivityCallback::synchronize):
4241 (DefaultGCActivityCallback):
4242 * runtime/GCActivityCallbackCF.cpp: Re-wired all the run loop stuff to implement the aforementioned functions.
4243 We added a flag to check whether the timer was active because the call to CFRunLoopTimerSetNextFireDate actually
4244 turned out to be quite expensive (although Instruments couldn't tell us this).
4245 (DefaultGCActivityCallbackPlatformData):
4247 (JSC::DefaultGCActivityCallbackPlatformData::timerDidFire):
4248 (JSC::DefaultGCActivityCallback::commonConstructor):
4249 (JSC::scheduleTimer):
4251 (JSC::DefaultGCActivityCallback::willAllocate):
4252 (JSC::DefaultGCActivityCallback::didCollect):
4253 (JSC::DefaultGCActivityCallback::didAbandonObjectGraph):
4255 2012-04-17 Filip Pizlo <fpizlo@apple.com>
4257 DFG should not attempt to get rare case counts for op_mod on ARM
4258 https://bugs.webkit.org/show_bug.cgi?id=84218
4260 Reviewed by Geoff Garen.
4262 * dfg/DFGByteCodeParser.cpp:
4263 (JSC::DFG::ByteCodeParser::makeSafe):
4268 2012-04-17 Myles Maxfield <mmaxfield@google.com>
4270 BumpPointerAllocator assumes page size is less than MINIMUM_BUMP_POOL_SIZE
4271 https://bugs.webkit.org/show_bug.cgi?id=80912
4273 Reviewed by Hajime Morita.
4275 * wtf/BumpPointerAllocator.h:
4276 (WTF::BumpPointerPool::create):
4278 2012-04-17 Filip Pizlo <fpizlo@apple.com>
4280 Attempt to fix Windows build.
4282 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
4284 2012-04-17 Filip Pizlo <fpizlo@apple.com>
4286 It should be possible to create an inheritorID for the global this object without crashing
4287 https://bugs.webkit.org/show_bug.cgi?id=84200
4288 <rdar://problem/11251082>
4290 Reviewed by Oliver Hunt.
4292 * runtime/JSGlobalThis.cpp:
4293 (JSC::JSGlobalThis::setUnwrappedObject):
4294 * runtime/JSGlobalThis.h:
4295 (JSC::JSGlobalThis::unwrappedObject):
4297 * runtime/JSObject.cpp:
4298 (JSC::JSObject::createInheritorID):
4299 * runtime/JSObject.h:
4301 (JSC::JSObject::resetInheritorID):
4303 2012-04-17 Filip Pizlo <fpizlo@apple.com>
4305 DFG and LLInt should not clobber the frame pointer on ARMv7
4306 https://bugs.webkit.org/show_bug.cgi?id=84185
4307 <rdar://problem/10767252>
4309 Reviewed by Gavin Barraclough.
4311 Changed LLInt to use a different register. Changed DFG to use one fewer
4312 registers. We should revisit this and switch the DFG to use a different
4313 register instead of r7, but we can do that in a subsequent step since
4314 the performance effect is tiny.
4318 (JSC::DFG::GPRInfo::toRegister):
4319 (JSC::DFG::GPRInfo::toIndex):
4320 * offlineasm/armv7.rb:
4322 2012-04-17 Filip Pizlo <fpizlo@apple.com>
4324 use after free in JSC::DFG::Node::op / JSC::DFG::ByteCodeParser::flushArgument
4325 https://bugs.webkit.org/show_bug.cgi?id=83942
4326 <rdar://problem/11247370>
4328 Reviewed by Gavin Barraclough.
4330 Don't use references to the graph after resizing the graph.
4332 * dfg/DFGByteCodeParser.cpp:
4333 (JSC::DFG::ByteCodeParser::flushArgument):
4335 2012-04-16 Gavin Barraclough <barraclough@apple.com>
4337 Array.prototype.toString should be generic
4338 https://bugs.webkit.org/show_bug.cgi?id=81588
4340 Reviewed by Sam Weinig.
4342 * runtime/ArrayPrototype.cpp:
4343 (JSC::arrayProtoFuncToString):
4344 - check for join function, use fast case if base object is array & join is present & default.
4345 * runtime/CommonIdentifiers.h:
4348 2012-04-16 Carlos Garcia Campos <cgarcia@igalia.com>
4350 Unreviewed. Fix make distcheck issues.
4352 * GNUmakefile.list.am: Add missing files.
4354 2012-04-16 Sheriff Bot <webkit.review.bot@gmail.com>
4356 Unreviewed, rolling out r114309.
4357 http://trac.webkit.org/changeset/114309
4358 https://bugs.webkit.org/show_bug.cgi?id=84097
4360 it broke everything (Requested by olliej on #webkit).
4362 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
4363 * bytecode/CodeBlock.h:
4364 * dfg/DFGOperations.cpp:
4365 * interpreter/Interpreter.cpp:
4366 (JSC::Interpreter::getStackTrace):
4367 (JSC::Interpreter::throwException):
4368 * interpreter/Interpreter.h:
4371 (JSC::DEFINE_STUB_FUNCTION):
4374 * llint/LLIntSlowPaths.cpp:
4375 (JSC::LLInt::handleHostCall):
4378 * runtime/Error.cpp:
4379 (JSC::addErrorInfo):
4384 2012-04-16 Oliver Hunt <oliver@apple.com>
4386 Exception stack traces aren't complete when the exception starts in native code
4387 https://bugs.webkit.org/show_bug.cgi?id=84073
4389 Reviewed by Gavin Barraclough.
4391 Refactored building the stack trace to so that we can construct
4392 it earlier, and don't rely on any prior work performed in the
4393 exception handling machinery. Also updated LLInt and the DFG to
4394 completely initialise the callframes of host function calls.
4396 * bytecode/CodeBlock.h:
4397 (JSC::CodeBlock::codeOriginIndexForReturn):
4399 * dfg/DFGOperations.cpp:
4400 * interpreter/Interpreter.cpp:
4401 (JSC::Interpreter::getStackTrace):
4402 (JSC::Interpreter::addStackTraceIfNecessary):
4404 (JSC::Interpreter::throwException):
4405 * interpreter/Interpreter.h:
4408 (JSC::DEFINE_STUB_FUNCTION):
4411 * llint/LLIntSlowPaths.cpp:
4412 (JSC::LLInt::handleHostCall):
4415 * runtime/Error.cpp:
4416 (JSC::addErrorInfo):
4421 2012-04-16 Oliver Hunt <oliver@apple.com>
4423 Fix COMMANDLINE_TYPEDARRAYS build
4424 https://bugs.webkit.org/show_bug.cgi?id=84051
4426 Reviewed by Gavin Barraclough.
4428 Update for new putByIndex API and wtf changes.
4430 * JSCTypedArrayStubs.h:
4433 2012-04-16 Mark Hahnenberg <mhahnenberg@apple.com>
4435 GC in the middle of JSObject::allocatePropertyStorage can cause badness
4436 https://bugs.webkit.org/show_bug.cgi?id=83839
4438 Reviewed by Geoffrey Garen.
4440 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
4441 * jit/JITStubs.cpp: Making changes to use the new return value of growPropertyStorage.
4442 (JSC::DEFINE_STUB_FUNCTION):
4443 * runtime/JSObject.cpp:
4444 (JSC::JSObject::growPropertyStorage): Renamed to more accurately reflect that we're
4445 growing our already-existing PropertyStorage.
4446 * runtime/JSObject.h:
4448 (JSC::JSObject::setPropertyStorage): "Atomically" sets the new property storage
4449 and the new structure so that we can be sure a GC never occurs when our Structure
4450 info is out of sync with our PropertyStorage.
4452 (JSC::JSObject::putDirectInternal): Moved the check to see if we should
4453 allocate more backing store before the actual property insertion into
4455 (JSC::JSObject::putDirectWithoutTransition): Ditto.
4456 (JSC::JSObject::transitionTo): Ditto.
4457 * runtime/Structure.cpp:
4458 (JSC::Structure::suggestedNewPropertyStorageSize): Added to keep the resize policy
4459 for property backing stores contained within the Structure class.
4461 * runtime/Structure.h:
4462 (JSC::Structure::shouldGrowPropertyStorage): Lets clients know if another insertion
4463 into the Structure would require resizing the property backing store so that they can
4464 preallocate the required storage.
4467 2012-04-13 Sheriff Bot <webkit.review.bot@gmail.com>
4469 Unreviewed, rolling out r114185.
4470 http://trac.webkit.org/changeset/114185
4471 https://bugs.webkit.org/show_bug.cgi?id=83967
4473 Broke a bunch of JavaScript related tests (Requested by
4474 andersca on #webkit).
4476 * runtime/ArrayPrototype.cpp:
4477 (JSC::arrayProtoFuncToString):
4478 (JSC::arrayProtoFuncToLocaleString):
4479 * runtime/CommonIdentifiers.h:
4480 * tests/mozilla/ecma/Array/15.4.4.2.js:
4483 2012-04-13 Gavin Barraclough <barraclough@apple.com>
4485 Don't rely on fixed offsets to patch calls
4486 https://bugs.webkit.org/show_bug.cgi?id=83966
4488 Rubber stamped by Oliver Hunt.
4490 These aren't being used anywhere!
4494 (JSC::JIT::compileOpCall):
4495 * jit/JITCall32_64.cpp:
4496 (JSC::JIT::compileOpCall):
4498 2012-04-13 Hojong Han <hojong.han@samsung.com>
4500 Array.prototype.toString and Array.prototype.toLocaleString should be generic
4501 https://bugs.webkit.org/show_bug.cgi?id=81588
4503 Reviewed by Gavin Barraclough.
4505 * runtime/ArrayPrototype.cpp:
4506 (JSC::arrayProtoFuncToString):
4507 (JSC::arrayProtoFuncToLocaleString):
4508 * runtime/CommonIdentifiers.h:
4509 * tests/mozilla/ecma/Array/15.4.4.2.js:
4510 (getTestCases.array.item.new.TestCase):
4513 2012-04-13 Gavin Barraclough <barraclough@apple.com>
4515 Don't rely on fixed offsets to patch method checks
4516 https://bugs.webkit.org/show_bug.cgi?id=83958
4518 Reviewed by Oliver Hunt.
4520 * bytecode/StructureStubInfo.h:
4521 - Add fields for the method check info.
4523 (JSC::PropertyStubCompilationInfo::copyToStubInfo):
4524 - Store the offsets on the stub info, instead of asserting.
4526 - Delete all the method check related offsets.
4527 * jit/JITPropertyAccess.cpp:
4528 (JSC::JIT::patchMethodCallProto):
4529 - Use the offset from the stubInfo.
4531 (JSC::DEFINE_STUB_FUNCTION):
4532 - Pass the stubInfo to patchMethodCallProto.
4534 2012-04-13 Gavin Barraclough <barraclough@apple.com>
4536 Don't rely on fixed offsets to patch get_by_id/put_by_id
4537 https://bugs.webkit.org/show_bug.cgi?id=83924
4539 Reviewed by Oliver Hunt.
4541 Store offsets in the structure stub info, as we do for the DFG JIT.
4543 * assembler/AbstractMacroAssembler.h:
4544 (JSC::AbstractMacroAssembler::differenceBetween):
4545 - this method can be static (now used from PropertyStubCompilationInfo::copyToStubInfo, will be removed soon!)
4546 * bytecode/StructureStubInfo.h:
4547 - added new fields for baseline JIT offsets.
4549 (JSC::PropertyStubCompilationInfo::copyToStubInfo):
4550 - moved out from JIT::privateCompile.
4551 (JSC::JIT::privateCompile):
4552 - moved out code to PropertyStubCompilationInfo::copyToStubInfo.
4554 (PropertyStubCompilationInfo):
4555 - added helper functions to initializae PropertyStubCompilationInfo, state to store more offset info.
4556 - removed many offsets.
4557 * jit/JITPropertyAccess.cpp:
4558 (JSC::JIT::emit_op_method_check):
4559 (JSC::JIT::compileGetByIdHotPath):
4560 (JSC::JIT::compileGetByIdSlowCase):
4561 (JSC::JIT::emit_op_put_by_id):
4562 (JSC::JIT::emitSlow_op_put_by_id):
4563 (JSC::JIT::patchGetByIdSelf):
4564 (JSC::JIT::patchPutByIdReplace):
4565 (JSC::JIT::privateCompilePatchGetArrayLength):
4566 (JSC::JIT::privateCompileGetByIdProto):
4567 (JSC::JIT::privateCompileGetByIdSelfList):
4568 (JSC::JIT::privateCompileGetByIdProtoList):
4569 (JSC::JIT::privateCompileGetByIdChainList):
4570 (JSC::JIT::privateCompileGetByIdChain):
4571 (JSC::JIT::resetPatchGetById):
4572 (JSC::JIT::resetPatchPutById):
4573 - changed code generation to use new interface to store info on PropertyStubCompilationInfo.
4574 - changed repatch functions to read offsets from the structure stub info.
4575 * jit/JITPropertyAccess32_64.cpp:
4576 (JSC::JIT::emit_op_method_check):
4577 (JSC::JIT::compileGetByIdHotPath):
4578 (JSC::JIT::compileGetByIdSlowCase):
4579 (JSC::JIT::emit_op_put_by_id):
4580 (JSC::JIT::emitSlow_op_put_by_id):
4581 (JSC::JIT::patchGetByIdSelf):
4582 (JSC::JIT::patchPutByIdReplace):
4583 (JSC::JIT::privateCompilePatchGetArrayLength):
4584 (JSC::JIT::privateCompileGetByIdProto):
4585 (JSC::JIT::privateCompileGetByIdSelfList):
4586 (JSC::JIT::privateCompileGetByIdProtoList):
4587 (JSC::JIT::privateCompileGetByIdChainList):
4588 (JSC::JIT::privateCompileGetByIdChain):
4589 (JSC::JIT::resetPatchGetById):
4590 (JSC::JIT::resetPatchPutById):
4591 - changed code generation to use new interface to store info on PropertyStubCompilationInfo.
4592 - changed repatch functions to read offsets from the structure stub info.
4594 2012-04-13 Rob Buis <rbuis@rim.com>
4596 Fix some compiler warnings (miscellaneous)
4597 https://bugs.webkit.org/show_bug.cgi?id=80790
4599 Reviewed by Antonio Gomes.
4601 Fix signed/unsigned comparison warning.
4606 2012-04-12 Benjamin Poulain <bpoulain@apple.com>
4608 Improve replaceUsingStringSearch() for case of a single character searchValue
4609 https://bugs.webkit.org/show_bug.cgi?id=83738
4611 Reviewed by Geoffrey Garen.
4613 This patch improves replaceUsingStringSearch() with the following:
4614 -Add a special case for single character search, taking advantage of the faster WTF::find().
4615 -Inline replaceUsingStringSearch().
4616 -Use StringImpl::create() instead of UString::substringSharingImpl() since we know we are in the bounds
4619 This gives less than 1% improvement for the multicharacter replace.
4620 The single character search show about 9% improvement.
4622 * runtime/StringPrototype.cpp:
4623 (JSC::replaceUsingStringSearch):
4625 2012-04-12 Michael Saboff <msaboff@apple.com>
4627 StructureStubInfo::reset() causes leaks of PolymorphicAccessStructureList and ExecutableMemoryHandle objects
4628 https://bugs.webkit.org/show_bug.cgi?id=83823
4630 Reviewed by Gavin Barraclough.
4632 Put the clearing of the accessType to after the call to deref() so that
4633 deref() can use the accessType to delete referenced objects as needed.
4635 * bytecode/StructureStubInfo.h:
4636 (JSC::StructureStubInfo::reset):
4638 2012-04-12 Balazs Kelemen <kbalazs@webkit.org>
4640 [Qt] Fix WebKit1 build with V8
4641 https://bugs.webkit.org/show_bug.cgi?id=83322
4643 Reviewed by Adam Barth.
4647 2012-04-12 Gavin Barraclough <barraclough@apple.com>
4649 https://bugs.webkit.org/show_bug.cgi?id=83821
4650 Move dfg repatching properties of structure stub info into a union
4652 Reviewed by Oliver Hunt.
4654 We want to be able to have similar properties for the baseline JIT, some restructuring to prepare for this.
4656 * bytecode/StructureStubInfo.h:
4657 (StructureStubInfo):
4658 * dfg/DFGJITCompiler.cpp:
4659 (JSC::DFG::JITCompiler::link):
4660 * dfg/DFGRepatch.cpp:
4661 (JSC::DFG::dfgRepatchByIdSelfAccess):
4662 (JSC::DFG::linkRestoreScratch):
4663 (JSC::DFG::generateProtoChainAccessStub):
4664 (JSC::DFG::tryCacheGetByID):
4665 (JSC::DFG::tryBuildGetByIDList):
4666 (JSC::DFG::tryBuildGetByIDProtoList):
4667 (JSC::DFG::emitPutReplaceStub):
4668 (JSC::DFG::emitPutTransitionStub):
4669 (JSC::DFG::tryCachePutByID):
4670 (JSC::DFG::tryBuildPutByIdList):
4671 (JSC::DFG::dfgResetGetByID):
4672 (JSC::DFG::dfgResetPutByID):
4674 2012-04-12 Gavin Barraclough <barraclough@apple.com>
4676 Delete a bunch of unused, copy & pasted values in JIT.h
4677 https://bugs.webkit.org/show_bug.cgi?id=83822
4679 Reviewed by Oliver Hunt.
4681 The only architecture we support the JSVALUE64 JIT on is x86-64, all the patch offsets for other architectures are just nonsense.
4686 2012-04-12 Csaba Osztrogonác <ossy@webkit.org>
4688 [Qt][ARM] Buildfix after r113934.
4690 Reviewed by Zoltan Herczeg.
4692 * assembler/MacroAssemblerARM.h:
4693 (JSC::MacroAssemblerARM::compare8):
4694 (MacroAssemblerARM):
4696 2012-04-11 Filip Pizlo <fpizlo@apple.com>
4698 It is incorrect to short-circuit Branch(LogicalNot(@a)) if boolean speculations on @a may fail
4699 https://bugs.webkit.org/show_bug.cgi?id=83744
4700 <rdar://problem/11206946>
4702 Reviewed by Andy Estes.
4704 This does the conservative thing: it only short-circuits Branch(LogicalNot(@a)) if @a is a node
4705 that is statically known to return boolean results.
4707 * dfg/DFGFixupPhase.cpp:
4708 (JSC::DFG::FixupPhase::fixupNode):
4710 2012-04-11 Michael Saboff <msaboff@apple.com>
4712 Invalid Union Reference in StructureStubInfo.{cpp.h}
4713 https://bugs.webkit.org/show_bug.cgi?id=83735
4715 Reviewed by Filip Pizlo.
4717 Changed the references to u.getByIdProtoList and u.getByIdSelfList
4720 * bytecode/StructureStubInfo.cpp:
4721 (JSC::StructureStubInfo::visitWeakReferences):
4722 * bytecode/StructureStubInfo.h:
4723 (JSC::StructureStubInfo::initGetByIdSelfList):
4725 2012-04-11 Filip Pizlo <fpizlo@apple.com>
4727 Unreviewed attempting to make Qt's eccentric hardware work.
4729 * assembler/MacroAssemblerARM.h:
4730 (JSC::MacroAssemblerARM::compare8):
4731 (MacroAssemblerARM):
4732 * assembler/MacroAssemblerMIPS.h:
4733 (JSC::MacroAssemblerMIPS::compare8):
4734 (MacroAssemblerMIPS):
4735 * assembler/MacroAssemblerSH4.h:
4736 (JSC::MacroAssemblerSH4::compare8):
4737 (MacroAssemblerSH4):
4739 2012-04-11 Filip Pizlo <fpizlo@apple.com>
4741 op_is_foo should be optimized
4742 https://bugs.webkit.org/show_bug.cgi?id=83666
4744 Reviewed by Gavin Barraclough.
4746 This implements inlining of op_is_undefined, op_is_string, op_is_number,
4747 and op_is_boolean in LLInt and the baseline JIT. op_is_object and
4748 op_is_function are not inlined because they are quite a bit more complex.
4750 This also implements all of the op_is_foo opcodes in the DFG, but it does
4751 not do any type profiling based optimizations, yet.
4753 * assembler/MacroAssemblerARMv7.h:
4754 (JSC::MacroAssemblerARMv7::compare8):
4755 (MacroAssemblerARMv7):
4756 * assembler/MacroAssemblerX86Common.h:
4757 (JSC::MacroAssemblerX86Common::compare8):
4758 (MacroAssemblerX86Common):
4759 * assembler/MacroAssemblerX86_64.h:
4760 (MacroAssemblerX86_64):
4761 (JSC::MacroAssemblerX86_64::testPtr):
4762 * dfg/DFGAbstractState.cpp:
4763 (JSC::DFG::AbstractState::execute):
4764 * dfg/DFGByteCodeParser.cpp:
4765 (JSC::DFG::ByteCodeParser::parseBlock):
4766 * dfg/DFGCCallHelpers.h:
4767 (JSC::DFG::CCallHelpers::setupArguments):
4769 * dfg/DFGCSEPhase.cpp:
4770 (JSC::DFG::CSEPhase::performNodeCSE):
4771 * dfg/DFGCapabilities.h:
4772 (JSC::DFG::canCompileOpcode):
4773 * dfg/DFGNodeType.h:
4775 * dfg/DFGOperations.cpp:
4776 * dfg/DFGOperations.h:
4777 * dfg/DFGPredictionPropagationPhase.cpp:
4778 (JSC::DFG::PredictionPropagationPhase::propagate):
4779 * dfg/DFGSpeculativeJIT.h:
4780 (JSC::DFG::SpeculativeJIT::callOperation):
4781 (JSC::DFG::SpeculativeJIT::appendCallSetResult):
4782 * dfg/DFGSpeculativeJIT32_64.cpp:
4783 (JSC::DFG::SpeculativeJIT::compile):
4784 * dfg/DFGSpeculativeJIT64.cpp:
4785 (JSC::DFG::SpeculativeJIT::compile):
4787 (JSC::JIT::privateCompileMainPass):
4790 * jit/JITOpcodes.cpp:
4791 (JSC::JIT::emit_op_is_undefined):
4793 (JSC::JIT::emit_op_is_boolean):
4794 (JSC::JIT::emit_op_is_number):
4795 (JSC::JIT::emit_op_is_string):
4796 * jit/JITOpcodes32_64.cpp:
4797 (JSC::JIT::emit_op_is_undefined):
4799 (JSC::JIT::emit_op_is_boolean):
4800 (JSC::JIT::emit_op_is_number):
4801 (JSC::JIT::emit_op_is_string):
4804 * llint/LLIntSlowPaths.cpp:
4806 * llint/LLIntSlowPaths.h:
4808 * llint/LowLevelInterpreter.asm:
4809 * llint/LowLevelInterpreter32_64.asm:
4810 * llint/LowLevelInterpreter64.asm:
4811 * offlineasm/armv7.rb:
4812 * offlineasm/instructions.rb:
4813 * offlineasm/x86.rb:
4815 2012-04-11 Filip Pizlo <fpizlo@apple.com>
4817 If you use an IntegerOperand and want to return it with integerResult, you need to
4818 zero extend to get rid of the box
4819 https://bugs.webkit.org/show_bug.cgi?id=83734
4820 <rdar://problem/11232296>
4822 Reviewed by Oliver Hunt.
4824 * dfg/DFGSpeculativeJIT64.cpp:
4825 (JSC::DFG::SpeculativeJIT::fillInteger):
4826 (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32):
4828 2012-04-11 Filip Pizlo <fpizlo@apple.com>
4830 SpeculativeJIT::fillStorage() should work with all the states that a cell may be in
4831 https://bugs.webkit.org/show_bug.cgi?id=83722
4833 Reviewed by Gavin Barraclough.
4835 It's now possible to do StorageOperand on a cell, in the case that the storage is
4836 inline. But this means that fillStorage() must be able to handle all of the states
4837 that a cell might be in. Previously it didn't.
4839 With this change, it now does handle all of the states, and moreover, it does so
4840 by preserving the DataFormat of cells and performing all of the cell speculations
4841 that should be performed if you're using a cell as storage. But if you use this on
4842 something that is known to be storage already then it behaves as it did before.
4844 * dfg/DFGSpeculativeJIT.cpp:
4845 (JSC::DFG::SpeculativeJIT::fillStorage):
4847 2012-04-11 Filip Pizlo <fpizlo@apple.com>
4849 Global variable predictions should not be coalesced unnecessarily
4850 https://bugs.webkit.org/show_bug.cgi?id=83678
4852 Reviewed by Geoff Garen.
4854 Removed the PredictionTracker and everyone who used it. Converted GetGlobalVar
4855 to have a heapPrediction like a civilized DFG opcode ought to.
4857 No performance effect.
4859 * GNUmakefile.list.am:
4860 * JavaScriptCore.xcodeproj/project.pbxproj:
4861 * bytecode/CodeBlock.h:
4862 * bytecode/PredictionTracker.h: Removed.
4863 * dfg/DFGByteCodeParser.cpp:
4864 (JSC::DFG::ByteCodeParser::parseBlock):
4865 * dfg/DFGGenerationInfo.h:
4867 (JSC::DFG::Graph::dump):
4871 (JSC::DFG::Node::hasHeapPrediction):
4872 * dfg/DFGPredictionPropagationPhase.cpp:
4873 (JSC::DFG::PredictionPropagationPhase::propagate):
4875 2012-04-11 Benjamin Poulain <bpoulain@apple.com>
4877 Optimize String.split() for 1 character separator
4878 https://bugs.webkit.org/show_bug.cgi?id=83546
4880 Reviewed by Gavin Barraclough.
4882 This patch adds a serie of optimizations to make stringProtoFuncSplit() faster in the common case
4883 where the separator is a single character.
4885 The two main gains are:
4886 -Use of the find() function with a single character instead of doing a full string matching.
4887 -Use of WTF::find() instead of UString::find() to avoid branching on is8Bit() and have a simpler inline
4890 The code is also changed to avoid making unnecessary allocations by converting the 8bit string to 16bits.
4892 This makes String.split() faster by about 13% in that particular case.
4894 * runtime/StringPrototype.cpp:
4896 (JSC::splitStringByOneCharacterImpl):
4897 (JSC::stringProtoFuncSplit):
4899 2012-04-10 Carlos Garcia Campos <cgarcia@igalia.com>
4901 Unreviewed. Fix make distcheck issues.
4903 * GNUmakefile.list.am: Ad missing files.
4905 2012-04-10 Mark Rowe <mrowe@apple.com>
4907 Attempt to fix the Windows build.
4909 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
4911 2012-04-10 Patrick Gansterer <paroga@webkit.org>
4913 Cleanup wtf/Platform.h and config.h files
4914 https://bugs.webkit.org/show_bug.cgi?id=83431
4916 Reviewed by Eric Seidel.
4918 The ENABLE() and USE() macros take care about the case when the flag
4919 isn't defined. So there is no need to define anything with 0.
4921 Also move duplicated code from the config.h files to Platform.h and
4922 merge a few preprocessor commands to make the file more readable.
4926 2012-04-10 Filip Pizlo <fpizlo@apple.com>
4928 DFG should flush SetLocals to arguments
4929 https://bugs.webkit.org/show_bug.cgi?id=83554
4931 Reviewed by Gavin Barraclough.
4933 This is necessary to match baseline JIT argument capture behavior.
4935 But to make this work right we need to have a story for arguments into
4936 which we store values of different formats. This patch introduces the
4937 notion of an ArgumentPosition - i.e. an argument in a particular inline
4938 call frame - and forces unification of all data pertinent to selecting
4939 the argument's data format.
4941 Also fixed an amusing bug in the handling of OSR on SetLocals if there
4942 was any insertion/deletion of nodes in the basic block. This is benign
4943 for now but won't be eventually since the DFG is getting smarter. So
4946 Also fixed an amusing bug in the handling of OSR on SetLocals if they
4947 are immediately followed by a Flush. I think this bug might have always
4948 been there but now it'll happen more commonly, and it's covered by the
4949 run-javascriptcore-tests.
4951 * JavaScriptCore.xcodeproj/project.pbxproj:
4952 * dfg/DFGAbstractState.cpp:
4953 (JSC::DFG::AbstractState::execute):
4954 * dfg/DFGArgumentPosition.h: Added.
4957 (JSC::DFG::ArgumentPosition::ArgumentPosition):
4958 (JSC::DFG::ArgumentPosition::addVariable):
4959 (JSC::DFG::ArgumentPosition::mergeArgumentAwareness):
4960 * dfg/DFGByteCodeParser.cpp:
4961 (JSC::DFG::ByteCodeParser::setLocal):
4962 (JSC::DFG::ByteCodeParser::setArgument):
4964 (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
4965 * dfg/DFGDoubleFormatState.h: Added.
4967 (JSC::DFG::mergeDoubleFormatStates):
4968 (JSC::DFG::mergeDoubleFormatState):
4969 (JSC::DFG::doubleFormatStateToString):
4972 * dfg/DFGPredictionPropagationPhase.cpp:
4973 (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
4974 * dfg/DFGSpeculativeJIT32_64.cpp:
4975 (JSC::DFG::SpeculativeJIT::compile):
4976 * dfg/DFGSpeculativeJIT64.cpp:
4977 (JSC::DFG::SpeculativeJIT::compile):
4978 * dfg/DFGVariableAccessData.h:
4979 (JSC::DFG::VariableAccessData::VariableAccessData):
4980 (JSC::DFG::VariableAccessData::predict):
4981 (JSC::DFG::VariableAccessData::argumentAwarePrediction):
4982 (VariableAccessData):
4983 (JSC::DFG::VariableAccessData::mergeArgumentAwarePrediction):
4984 (JSC::DFG::VariableAccessData::doubleFormatState):
4985 (JSC::DFG::VariableAccessData::shouldUseDoubleFormat):
4986 (JSC::DFG::VariableAccessData::tallyVotesForShouldUseDoubleFormat):
4987 (JSC::DFG::VariableAccessData::mergeDoubleFormatState):
4988 (JSC::DFG::VariableAccessData::makePredictionForDoubleFormat):
4990 2012-04-10 Adam Klein <adamk@chromium.org>
4992 Remove unused NonNullPassRefPtr from WTF
4993 https://bugs.webkit.org/show_bug.cgi?id=82389
4995 Reviewed by Kentaro Hara.
4997 * JavaScriptCore.order: Remove nonexistent symbols referencing NonNullPassRefPtr.
4999 2012-04-10 Darin Adler <darin@apple.com>
5001 Remove unused data member from Lexer class
5002 https://bugs.webkit.org/show_bug.cgi?id=83429
5004 Reviewed by Kentaro Hara.
5006 I noticed that m_delimited was "write-only", so I deleted it.
5009 (JSC::Lexer::setCode): Removed code to set m_delimited.
5010 (JSC::Lexer::parseIdentifier): Ditto.
5011 (JSC::Lexer::parseIdentifierSlowCase): Ditto.
5012 (JSC::Lexer::lex): Ditto.
5013 * parser/Lexer.h: Deleted m_delimited.
5015 2012-04-10 Patrick Gansterer <paroga@webkit.org>
5017 [CMake] Enable USE_FOLDERS property
5018 https://bugs.webkit.org/show_bug.cgi?id=83571
5020 Reviewed by Daniel Bates.
5022 Setting the FOLDER property on targets gives more structure
5023 to the generated Visual Studio solutions.
5024 This does not affect other CMake generators.
5027 * shell/CMakeLists.txt:
5029 2012-04-10 Filip Pizlo <fpizlo@apple.com>
5031 It should be possible to see why a code block was not compiled by the DFG
5032 https://bugs.webkit.org/show_bug.cgi?id=83553
5034 Reviewed by Geoff Garen.
5036 If DFG_ENABLE(DEBUG_VERBOSE) and a code block is rejected, then print the
5037 opcode that caused the rejection.
5039 * dfg/DFGCapabilities.cpp:
5040 (JSC::DFG::debugFail):
5042 (JSC::DFG::canHandleOpcodes):
5044 2012-04-09 Gavin Barraclough <barraclough@apple.com>
5046 If a callback constructor returns a C++ null, throw a type error.
5047 https://bugs.webkit.org/show_bug.cgi?id=83537
5049 Rubber Stamped by Geoff Garen.
5051 * API/JSCallbackConstructor.cpp:
5052 (JSC::constructJSCallback):
5053 - If a callback constructor returns a C++ null, throw a type error.
5054 * API/tests/testapi.c:
5055 (Base_returnHardNull):
5056 * API/tests/testapi.js:
5057 - Add a test case for callback constructors that return a C++ null.
5059 2012-04-09 Gavin Barraclough <barraclough@apple.com>
5061 If a callback function returns a C++ null, convert to undefined.
5062 https://bugs.webkit.org/show_bug.cgi?id=83534
5064 Reviewed by Geoff Garen.
5066 * API/JSCallbackFunction.cpp:
5067 - If a callback function returns a C++ null, convert to undefined.
5068 (JSC::JSCallbackFunction::call):
5069 * API/tests/testapi.c:
5070 (Base_returnHardNull):
5071 * API/tests/testapi.js:
5072 - Add a test case for callback functions that return a C++ null.
5074 2012-04-09 Filip Pizlo <fpizlo@apple.com>
5076 Classic interpreter's GC hooks shouldn't attempt to scan instructions for code blocks that
5077 are currently being generated
5078 https://bugs.webkit.org/show_bug.cgi?id=83531
5079 <rdar://problem/11215200>
5081 Reviewed by Gavin Barraclough.
5083 * bytecode/CodeBlock.cpp:
5084 (JSC::CodeBlock::stronglyVisitStrongReferences):
5086 2012-04-09 Filip Pizlo <fpizlo@apple.com>
5088 Unreviewed, modernize and clean up uses of ARM assembly mnemonics in inline asm blocks.
5090 * dfg/DFGOperations.cpp:
5092 * offlineasm/armv7.rb:
5094 2012-04-09 Patrick Gansterer <paroga@webkit.org>
5096 Remove HAVE_STDINT_H
5097 https://bugs.webkit.org/show_bug.cgi?id=83434
5099 Reviewed by Kentaro Hara.
5101 HAVE_STDINT_H is defined with 1 all the time and we us stdint.h without HAVE(STDINT_H) already.
5105 2012-04-08 Filip Pizlo <fpizlo@apple.com>
5107 DFG should not load the property storage if it is inline.
5108 https://bugs.webkit.org/show_bug.cgi?id=83455
5110 Reviewed by Gavin Barraclough.
5112 We had previously decided to have all property storage accesses go through
5113 the property storage pointer even if they don't "really" have to, because
5114 we were thinking this would help GC barriers somehow. Well, we never ended
5115 up doing anything with that. Hence, doing these wasted loads of the
5116 property storage pointer when the storage is inline is just a waste of CPU
5119 This change makes the DFG's inline property accesses (GetByOffset and
5120 PutByOffset) go directly to the inline property storage if the structure(s)
5121 tell us that it's OK.
5123 This looks like an across-the-board 1% win.
5125 * bytecode/StructureSet.h:
5127 (JSC::StructureSet::allAreUsingInlinePropertyStorage):
5129 * dfg/DFGByteCodeParser.cpp:
5130 (JSC::DFG::ByteCodeParser::parseBlock):
5131 * dfg/DFGSpeculativeJIT.cpp:
5132 (JSC::DFG::SpeculativeJIT::fillStorage):
5134 2012-04-08 Filip Pizlo <fpizlo@apple.com>
5136 Command-line jsc's exception handling should be rationalized
5137 https://bugs.webkit.org/show_bug.cgi?id=83437
5139 Reviewed by Dan Bernstein.
5141 - If an exception is thrown during run() execution, it is now propagated,
5142 so that it will terminate program execution unless it is caught.
5144 - If program execution terminates with an exception, the exception is now
5147 - When printing the exception, the backtrace is now also printed if one is
5148 available. It will only not be available if you use something akin to my
5149 favorite line of code, 'throw "error"', since primitives don't have
5150 properties and hence we cannot attach a "stack" property to them.
5156 2012-04-04 Filip Pizlo <fpizlo@apple.com>
5158 Forced OSR exits should lead to recompilation based on count, not rate
5159 https://bugs.webkit.org/show_bug.cgi?id=83247
5160 <rdar://problem/10720925>
5162 Reviewed by Geoff Garen.
5164 Track which OSR exits happen because of inadequate coverage. Count them
5165 separately. If the count reaches a threshold, immediately trigger
5168 This is in contrast to the recompilation trigger for all other OSR exits.
5169 Normally recomp is triggered when the exit rate exceeds a certain ratio.
5171 Looks like a slight V8 speedup (sub 1%).
5173 * bytecode/CodeBlock.cpp:
5174 (JSC::CodeBlock::CodeBlock):
5175 * bytecode/CodeBlock.h:
5176 (JSC::CodeBlock::forcedOSRExitCounter):
5177 (JSC::CodeBlock::addressOfForcedOSRExitCounter):
5178 (JSC::CodeBlock::offsetOfForcedOSRExitCounter):
5179 (JSC::CodeBlock::shouldReoptimizeNow):
5180 (JSC::CodeBlock::shouldReoptimizeFromLoopNow):
5182 * bytecode/DFGExitProfile.h:
5183 (JSC::DFG::exitKindToString):
5184 * dfg/DFGOSRExitCompiler.cpp:
5185 (JSC::DFG::OSRExitCompiler::handleExitCounts):
5187 * dfg/DFGOSRExitCompiler.h:
5189 * dfg/DFGOSRExitCompiler32_64.cpp:
5190 (JSC::DFG::OSRExitCompiler::compileExit):
5191 * dfg/DFGOSRExitCompiler64.cpp:
5192 (JSC::DFG::OSRExitCompiler::compileExit):
5193 * dfg/DFGOperations.cpp:
5194 * dfg/DFGSpeculativeJIT.cpp:
5195 (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
5196 * dfg/DFGSpeculativeJIT32_64.cpp:
5197 (JSC::DFG::SpeculativeJIT::compile):
5198 * dfg/DFGSpeculativeJIT64.cpp:
5199 (JSC::DFG::SpeculativeJIT::compile):
5200 * runtime/Options.cpp:
5202 (JSC::Options::initializeOptions):
5203 * runtime/Options.h:
5206 2012-04-06 Benjamin Poulain <bpoulain@apple.com>
5208 Do not abuse ArrayStorage's m_length for testing array consistency
5209 https://bugs.webkit.org/show_bug.cgi?id=83403
5211 Reviewed by Geoffrey Garen.
5213 Array creation from a list of values is a 3 steps process:
5214 -JSArray::tryCreateUninitialized()
5215 -JSArray::initializeIndex() for each values
5216 -JSArray::completeInitialization()
5218 Previously, the attribute m_length was not set to the final size
5219 JSArray::tryCreateUninitialized() because it was used to test the array
5220 consistency JSArray::initializeIndex().
5222 This caused the initialization loop using JSArray::initializeIndex() maintain
5225 -storage->m_length++
5227 This patch fixes this by using the index of the initialization loop for the indinces of
5228 JSArray::initializeIndex(). For testing consistency, the variable m_initializationIndex
5229 is introduced if CHECK_ARRAY_CONSISTENCY is defined.
5231 The patch also fixes minor unrelated build issue when CHECK_ARRAY_CONSISTENCY is defined.
5233 This improves the performance of JSArray creation from literals by 8%.
5235 * runtime/JSArray.cpp:
5236 (JSC::JSArray::tryFinishCreationUninitialized):
5237 (JSC::JSArray::checkConsistency):
5238 * runtime/JSArray.h:
5240 (JSC::JSArray::initializeIndex):
5241 (JSC::JSArray::completeInitialization):
5243 2012-04-06 Jon Lee <jonlee@apple.com>
5245 Build fix for Windows bots.
5247 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: export missing symbol.
5249 2012-04-06 Geoffrey Garen <ggaren@apple.com>
5254 HandleHeap => HandleSet
5256 Reviewed by Sam Weinig.
5258 These sets do have internal allocators, but it's confusing to call them
5259 heaps because they're sub-objects of an object called "heap".
5261 * heap/HandleHeap.cpp: Removed.
5262 * heap/HandleHeap.h: Removed.
5263 * heap/HandleSet.cpp: Copied from JavaScriptCore/heap/HandleHeap.cpp.
5264 * heap/WeakHeap.cpp: Removed.
5265 * heap/WeakHeap.h: Removed.
5266 * heap/WeakSet.cpp: Copied from JavaScriptCore/heap/WeakHeap.cpp.
5267 * heap/WeakSet.h: Copied from JavaScriptCore/heap/WeakHeap.h.
5269 Plus global rename using grep.
5271 2012-04-06 Dan Bernstein <mitz@apple.com>
5273 <rdar://problem/10912476> HiDPI: Have canvas use a hidpi backing store, but downsample upon access
5275 Reviewed by Sam Weinig.
5277 * Configurations/FeatureDefines.xcconfig: Added ENABLE_HIGH_DPI_CANVAS.
5279 2012-04-06 Rob Buis <rbuis@rim.com>
5281 Fix cast-align warnings in JSC
5282 https://bugs.webkit.org/show_bug.cgi?id=80790
5284 Reviewed by George Staikos.
5286 * assembler/ARMv7Assembler.h:
5287 (JSC::ARMv7Assembler::computeJumpType):
5288 (JSC::ARMv7Assembler::link):
5289 * assembler/LinkBuffer.h:
5290 (JSC::LinkBuffer::linkCode):
5291 * heap/MarkStack.cpp:
5292 (JSC::SlotVisitor::copyAndAppend):
5293 * runtime/JSArray.cpp:
5294 (JSC::JSArray::visitChildren):
5295 * wtf/RefCountedArray.h:
5296 (WTF::RefCountedArray::Header::payload):
5298 2012-04-06 Darin Adler <darin@apple.com>
5300 Streamline strtod and fix some related problems
5301 https://bugs.webkit.org/show_bug.cgi?id=82857
5303 Reviewed by Geoffrey Garen.
5306 (JSC::Lexer<>::lex): Use parseDouble. Since we have already scanned the number
5307 and we know it has only correct characters, leading spaces, trailing junk, and
5308 trailing spaces are not a possibility. No need to add a trailing null character.
5310 * runtime/JSGlobalObjectFunctions.cpp:
5311 (JSC::parseInt): Changed overflow based 10 case to use parseDouble. No need
5312 to allow trailing junk since the code above already allows only numeric digits
5313 in the string. This code path is used only in unusual cases, so it's not
5314 optimized for 8-bit strings, but easily could be.
5315 (JSC::jsStrDecimalLiteral): Removed the allow trailing junk argument to this
5316 function template because all the callers are OK with trailing junk. Use the
5317 parseDouble function. No need to copy the data into a byte buffer, because
5318 parseDouble handles that.
5319 (JSC::toDouble): Got rid of the DisallowTrailingJunk argument to the
5320 jsStrDecimalLiteral function template. That's OK because this function
5321 already checks for trailing junk and handles it appropriately. The old code
5322 path was doing it twice.
5323 (JSC::parseFloat): Got rid of the AllowTrailingJunk argument to the
5324 jsStrDecimalLiteral function template; the template allows junk unconditionally.
5326 * runtime/LiteralParser.cpp:
5327 (JSC::::Lexer::lexNumber): Use parseDouble. Since we have already scanned the number
5328 and we know it has only correct characters, leading spaces, trailing junk, and
5329 trailing spaces are not a possibility. No need to add a trailing null character.
5330 No need to copy the data into a byte buffer, because parseDouble handles that.
5331 We could optimize the UChar case even more because we know all the characters
5332 are ASCII, but not doing that at this time.
5334 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Updated.
5336 2012-04-06 Patrick Gansterer <paroga@webkit.org>
5338 Remove JSC dependency from GregorianDateTime
5339 https://bugs.webkit.org/show_bug.cgi?id=83290
5341 Reviewed by Geoffrey Garen.
5343 This allows us to move it to WTF later.
5345 * runtime/DateConstructor.cpp:
5347 * runtime/JSDateMath.h:
5349 2012-04-05 Michael Saboff <msaboff@apple.com>
5351 Call Heap::discardAllCompiledCode() in low memory situations
5352 https://bugs.webkit.org/show_bug.cgi?id=83335
5354 Reviewed by Geoffrey Garen.
5356 Restructured Heap::discardAllCompiledCode() to do the "Is JavaScriptRunning?"
5357 check inline so that it can be called directly without this check.
5360 (JSC::Heap::discardAllCompiledCode):
5361 (JSC::Heap::collectAllGarbage):
5362 * heap/Heap.h: Added JS_EXPORT_PRIVATE to discardAllCompiledCode() so it can be
5363 called from WebCore.
5365 * runtime/JSGlobalData.h: Removed unused " void discardAllCompiledCode()" declaration.
5368 2012-04-05 Benjamin Poulain <bpoulain@apple.com>
5370 Speed up the conversion from JSValue to String for bulk operations
5371 https://bugs.webkit.org/show_bug.cgi?id=83243
5373 Reviewed by Geoffrey Garen.
5375 When making operations on primitive types, we loose some time converting
5376 values to JSString in order to extract the string.
5378 This patch speeds up some basic Array operations by avoiding the creation
5379 of intermediary JSString when possible.
5381 For the cases where we need to convert a lot of JSValue in a tight loop,
5382 an inline conversion is used.
5384 * runtime/ArrayPrototype.cpp:
5385 (JSC::arrayProtoFuncToString):
5386 (JSC::arrayProtoFuncToLocaleString):
5387 (JSC::arrayProtoFuncJoin):
5388 (JSC::arrayProtoFuncPush):
5389 (JSC::arrayProtoFuncSort):
5390 * runtime/CommonIdentifiers.h:
5391 * runtime/JSArray.cpp:
5392 (JSC::JSArray::sort):
5393 * runtime/JSString.h:
5394 (JSC::JSValue::toUString):
5396 (JSC::inlineJSValueNotStringtoUString):
5397 (JSC::JSValue::toUStringInline):
5398 * runtime/JSValue.cpp:
5399 (JSC::JSValue::toUStringSlowCase):
5401 * runtime/JSValue.h:
5404 2012-04-05 Benjamin Poulain <bpoulain@apple.com>
5406 Use QuickSort when sorting primitive values by string representation
5407 https://bugs.webkit.org/show_bug.cgi?id=83312
5409 Reviewed by Gavin Barraclough.
5411 When the value we are sorting are all primitive values, we do not need to
5412 ensure a stable sort as two values with equal string representation are
5413 indistinguishable from JavaScript.
5415 This gives about 16% performance increase when sorting primitive values.
5417 * runtime/JSArray.cpp:
5418 (JSC::JSArray::sort):
5420 2012-04-05 Oliver Hunt <oliver@apple.com>
5422 SIGILL in JavaScriptCore on a Geode processor
5423 https://bugs.webkit.org/show_bug.cgi?id=82496
5425 Reviewed by Gavin Barraclough.
5427 Don't attempt to use the DFG when SSE2 is not available.
5429 * dfg/DFGCapabilities.cpp:
5430 (JSC::DFG::canCompileOpcodes):
5432 2012-04-05 Oliver Hunt <oliver@apple.com>
5439 2012-04-05 Oliver Hunt <oliver@apple.com>
5441 Replace static_cast with jsCast when casting JSCell subclasses in JSC
5442 https://bugs.webkit.org/show_bug.cgi?id=83307
5444 Reviewed by Gavin Barraclough.
5446 Replace all usage of static_cast<JSCell subtype*> with jsCast<> in JavaScriptCore.
5447 This results in assertions when unsafe casts are performed, but simply leaves
5448 a static_cast<> in release builds.
5452 * API/JSCallbackConstructor.cpp:
5453 (JSC::constructJSCallback):
5454 * API/JSCallbackFunction.cpp:
5455 (JSC::JSCallbackFunction::call):
5456 * API/JSCallbackObjectFunctions.h:
5457 (JSC::::asCallbackObject):
5458 (JSC::::finishCreation):
5461 * API/JSObjectRef.cpp:
5462 (JSObjectGetPrivate):
5463 (JSObjectSetPrivate):
5464 (JSObjectGetPrivateProperty):
5465 (JSObjectSetPrivateProperty):
5466 (JSObjectDeletePrivateProperty):
5467 * API/JSValueRef.cpp:
5468 (JSValueIsObjectOfClass):
5469 * API/JSWeakObjectMapRefPrivate.cpp:
5470 * bytecompiler/BytecodeGenerator.cpp:
5471 (JSC::BytecodeGenerator::resolve):
5472 (JSC::BytecodeGenerator::resolveConstDecl):
5473 * debugger/DebuggerActivation.cpp:
5474 (JSC::DebuggerActivation::finishCreation):
5475 * dfg/DFGOperations.cpp:
5476 * interpreter/Interpreter.cpp:
5477 (JSC::Interpreter::execute):
5478 (JSC::Interpreter::privateExecute):
5480 (JSC::DEFINE_STUB_FUNCTION):
5481 * runtime/Executable.h:
5482 (JSC::isHostFunction):
5483 * runtime/JSActivation.h:
5484 (JSC::asActivation):
5485 * runtime/JSArray.cpp:
5486 (JSC::JSArray::defineOwnProperty):
5487 * runtime/JSArray.h:
5489 * runtime/JSBoundFunction.cpp:
5490 (JSC::boundFunctionCall):
5491 (JSC::boundFunctionConstruct):
5492 * runtime/JSByteArray.h:
5494 * runtime/JSCell.cpp:
5495 (JSC::JSCell::toObject):
5498 * runtime/JSGlobalObject.h:
5499 (JSC::asGlobalObject):
5500 * runtime/JSGlobalObjectFunctions.cpp:
5501 (JSC::globalFuncEval):
5502 * runtime/JSObject.cpp:
5503 (JSC::JSObject::setPrototypeWithCycleCheck):
5504 (JSC::JSObject::allowsAccessFrom):
5505 (JSC::JSObject::toThisObject):
5506 (JSC::JSObject::unwrappedObject):
5507 * runtime/JSObject.h:
5509 * runtime/JSPropertyNameIterator.h:
5510 (JSC::Register::propertyNameIterator):
5511 * runtime/JSString.h:
5513 (JSC::JSValue::toString):
5514 * runtime/StringPrototype.cpp:
5515 (JSC::stringProtoFuncSubstr):
5517 2012-04-05 Benjamin Poulain <bpoulain@apple.com>
5519 Make something faster than JSStringBuilder for joining an array of JSValue
5520 https://bugs.webkit.org/show_bug.cgi?id=83180
5522 Reviewed by Geoffrey Garen.
5524 This patch add the class JSStringJoiner optimized for join() operations.
5526 This class makes stricter constraints than JSStringBuilder in order avoid
5529 In the best case, the class allocate memory only twice:
5530 -Allocate an array to keep a list of UString to join.
5531 -Allocate the final string.
5533 We also avoid the conversion from 8bits strings to 16bits strings since
5534 they are costly and unlikly to help for subsequent calls.
5537 * GNUmakefile.list.am:
5538 * JavaScriptCore.gypi:
5539 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
5540 * JavaScriptCore.xcodeproj/project.pbxproj:
5542 * runtime/ArrayPrototype.cpp:
5543 (JSC::arrayProtoFuncToLocaleString):
5544 (JSC::arrayProtoFuncJoin):
5545 * runtime/JSStringJoiner.cpp: Added.
5547 (JSC::appendStringToData):
5549 (JSC::JSStringJoiner::build):
5550 * runtime/JSStringJoiner.h: Added.
5553 (JSC::JSStringJoiner::JSStringJoiner):
5554 (JSC::JSStringJoiner::append):
5556 2012-04-05 Gavin Barraclough <barraclough@apple.com>
5558 https://bugs.webkit.org/show_bug.cgi?id=77293
5561 Rubber stamped by Oliver Hunt.
5564 This does break the web - e.g. https://bvi.bnc.ca/index/bnc/indexen.html
5565 If we're going to reserve let, we're going to have to do so in a more
5566 circumspect fashion.
5568 * parser/Keywords.table:
5570 2012-04-05 Michael Saboff <msaboff@apple.com>
5572 Rolling out http://trac.webkit.org/changeset/113262.
5573 Original code was fine.
5575 Rubber-stamped by Oliver Hunt.
5577 * assembler/MacroAssembler.h:
5578 (JSC::MacroAssembler::additionBlindedConstant):
5580 2012-04-05 Patrick Gansterer <paroga@webkit.org>
5582 [WinCE] Remove unnecessary function decleration
5583 https://bugs.webkit.org/show_bug.cgi?id=83155
5585 Reviewed by Kentaro Hara.
5587 * runtime/JSDateMath.cpp:
5589 2012-04-04 Patrick Gansterer <paroga@webkit.org>
5591 Add WTF::getCurrentLocalTime()
5592 https://bugs.webkit.org/show_bug.cgi?id=83164
5594 Reviewed by Alexey Proskuryakov.
5596 Replace the calls to WTF::getLocalTime() with time(0) with the new function.
5597 This allows us to use Win32 API on windows to get the same result in a next step.
5599 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
5600 * runtime/DateConstructor.cpp:
5603 2012-04-04 Oliver Hunt <oliver@apple.com>
5605 Parser fails to revert some state after parsing expression and object literals.
5606 https://bugs.webkit.org/show_bug.cgi?id=83236
5608 Reviewed by Gavin Barraclough.
5610 Reset left hand side counter after parsing the literals.
5612 * parser/Parser.cpp:
5613 (JSC::::parseObjectLiteral):
5614 (JSC::::parseStrictObjectLiteral):
5615 (JSC::::parseArrayLiteral):
5617 2012-04-04 Filip Pizlo <fpizlo@apple.com>
5619 DFG InstanceOf should not uselessly speculate cell
5620 https://bugs.webkit.org/show_bug.cgi?id=83234
5622 Reviewed by Oliver Hunt.
5624 If InstanceOf is the only user of its child then don't speculate cell, since
5625 the not-cell case is super easy to handle.
5627 * dfg/DFGSpeculativeJIT.cpp:
5628 (JSC::DFG::SpeculativeJIT::compileInstanceOf):
5630 2012-04-04 Michael Saboff <msaboff@apple.com>
5632 Fixed minor error: "& 3" should be "& 2".
5634 Rubber-stamped by Oliver Hunt.
5636 * assembler/MacroAssembler.h:
5637 (JSC::MacroAssembler::additionBlindedConstant):
5639 2012-04-04 Michael Saboff <msaboff@apple.com>
5641 Constant Blinding for add/sub immediate crashes in ArmV7 when dest is SP
5642 https://bugs.webkit.org/show_bug.cgi?id=83191
5644 Reviewed by Oliver Hunt.
5646 Make are that blinded constant pairs are similarly aligned to the
5647 original immediate values so that instructions that expect that
5648 alignment work correctly. One example is ARMv7 add/sub imm to SP.
5650 * assembler/ARMv7Assembler.h:
5651 (JSC::ARMv7Assembler::add): Added ASSERT that immediate is word aligned.
5652 (JSC::ARMv7Assembler::sub): Added ASSERT that immediate is word aligned.
5653 (JSC::ARMv7Assembler::sub_S): Added ASSERT that immediate is word aligned.
5654 * assembler/MacroAssembler.h:
5655 (JSC::MacroAssembler::additionBlindedConstant):
5657 2012-04-04 Filip Pizlo <fpizlo@apple.com>
5659 DFG should short-circuit Branch(LogicalNot(...))
5660 https://bugs.webkit.org/show_bug.cgi?id=83181
5662 Reviewed by Geoff Garen.
5664 Slight (sub 1%) speed-up on V8.
5666 * dfg/DFGFixupPhase.cpp:
5667 (JSC::DFG::FixupPhase::fixupNode):
5669 2012-04-04 Geoffrey Garen <ggaren@apple.com>
5671 [Qt] REGRESSION(r113141): All tests assert on 32 bit debug mode
5672 https://bugs.webkit.org/show_bug.cgi?id=83139
5674 Reviewed by Sam Weinig.
5677 (JSC::::get): 32-bit JSValue treats JSValue(nullptr).asCell() as an error,
5678 so work around that here. (Long-term, we should make 32-bit and 64-bit
5679 agree on the right behavior.)
5681 2012-04-03 Geoffrey Garen <ggaren@apple.com>
5683 Updated JSC expected test results to reflect recent bug fixes <disapproving look>.
5685 Reviewed by Sam Weinig.
5687 * tests/mozilla/expected.html:
5689 2012-03-29 Geoffrey Garen <ggaren@apple.com>
5691 First step toward incremental Weak<T> finalization
5692 https://bugs.webkit.org/show_bug.cgi?id=82670
5694 Reviewed by Filip Pizlo.
5696 This patch implements a Weak<T> heap that is compatible with incremental
5697 finalization, while making as few behavior changes as possible. The behavior
5698 changes it makes are:
5700 (*) Weak<T>'s raw JSValue no longer reverts to JSValue() automatically --
5701 instead, a separate flag indicates that the JSValue is no longer valid.
5702 (This is required so that the JSValue can be preserved for later finalization.)
5703 Objects dealing with WeakImpls directly must change to check the flag.
5705 (*) Weak<T> is no longer a subclass of Handle<T>.
5707 (*) DOM GC performance is different -- 9% faster in the geometric mean,
5708 but 15% slower in one specific case:
5709 gc-dom1.html: 6% faster
5710 gc-dom2.html: 23% faster
5711 gc-dom3.html: 17% faster
5712 gc-dom4.html: 15% *slower*
5714 The key features of this new heap are:
5716 (*) Each block knows its own state, independent of any other blocks.
5718 (*) Each block caches its own sweep result.
5720 (*) The heap visits dead Weak<T>s at the end of GC. (It doesn't
5721 mark them yet, since that would be a behavior change.)
5723 * API/JSCallbackObject.cpp:
5724 (JSC::JSCallbackObjectData::finalize):
5725 * API/JSCallbackObjectFunctions.h:
5726 (JSC::::init): Updated to use the new WeakHeap API.
5729 * GNUmakefile.list.am:
5730 * JavaScriptCore.gypi:
5731 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
5732 * JavaScriptCore.xcodeproj/project.pbxproj:
5733 * Target.pri: Paid the build system tax since I added some new files.
5735 * heap/Handle.h: Made WeakBlock a friend and exposed slot() as public,
5736 so we can keep passing a Handle<T> to finalizers, to avoid more surface
5737 area change in this patch. A follow-up patch should change the type we
5740 * heap/HandleHeap.cpp:
5742 (JSC::HandleHeap::writeBarrier):
5743 (JSC::HandleHeap::isLiveNode):
5744 * heap/HandleHeap.h:
5748 (JSC::HandleHeap::Node::Node): Removed all code related to Weak<T>, since
5749 we have a separate WeakHeap now.
5752 (JSC::Heap::Heap): Removed m_extraCost because extra cost is accounted
5753 for through our watermark now. Removed m_waterMark because it was unused.
5755 (JSC::Heap::destroy): Updated for addition of WeakHeap.
5757 (JSC::Heap::reportExtraMemoryCostSlowCase): Changed from using its own
5758 variable to participating in the watermark strategy. I wanted to standardize
5759 WeakHeap and all other Heap clients on this strategy, to make sure it's
5762 (JSC::Heap::markRoots): Updated for addition of WeakHeap. Added WeakHeap
5763 dead visit pass, as explained above.
5765 (JSC::Heap::collect):
5766 (JSC::Heap::resetAllocators): Updated for addition of WeakHeap.
5768 (JSC::Heap::addFinalizer):
5769 (JSC::Heap::FinalizerOwner::finalize): Updated for new Weak<T> API.
5772 (JSC::Heap::weakHeap):
5774 (JSC::Heap::addToWaterMark): Added a way to participate in the watermarking
5775 strategy, since this is the best way for WeakHeap to report its memory
5776 cost. (I plan to update this in a follow-up patch to make it more accurate,
5777 but for now it is not less accurate than it used to be.)
5779 * heap/MarkedSpace.cpp:
5780 (JSC::MarkedSpace::MarkedSpace):
5781 (JSC::MarkedSpace::resetAllocators):
5782 * heap/MarkedSpace.h:
5784 (JSC::MarkedSpace::addToWaterMark):
5785 (JSC::MarkedSpace::didConsumeFreeList): Removed m_nurseryWaterMark because
5786 it was unused, and I didn't want to update WeakHeap to keep an usused
5787 variable working. Added API for above.
5798 (JSC::UnspecifiedBoolType):
5802 (JSC::Strong::operator!):
5804 (JSC::Strong::operator UnspecifiedBoolType*):
5810 (JSC::::isHashTableDeletedValue):
5815 (JSC::UnspecifiedBoolType):
5818 (JSC::::hashTableDeletedValue): Lots of code changes here, but they boil
5821 (*) Allocate WeakImpls from the WeakHeap instead of Handles from the HandleHeap.
5823 (*) Explicitly check WeakImpl::state() for non-liveness before returning
5824 a value (explained above).
5826 These files implement the new Weak<T> heap behavior described above:
5828 * heap/WeakBlock.cpp: Added.
5829 * heap/WeakBlock.h: Added.
5830 * heap/WeakHandleOwner.cpp: Added.
5831 * heap/WeakHandleOwner.h: Added.
5832 * heap/WeakHeap.cpp: Added.
5833 * heap/WeakHeap.h: Added.
5834 * heap/WeakImpl.h: Added.
5836 One interesting difference from the old heap is that we don't allow
5837 clients to overwrite a WeakImpl after allocating it, and we don't recycle
5838 WeakImpls prior to garbage collection. This is required for lazy finalization,
5839 but it will also help us esablish a useful invariant in the future: allocating
5840 a WeakImpl will be a binding contract to run a finalizer at some point in the
5841 future, even if the WeakImpl is later deallocated.
5844 (JSC::JITThunks::hostFunctionStub): Check the Weak<T> for ! instead of
5845 its JSValue, since that's our API contract now, and the JSValue might
5849 (JSC::jsCast): Allow casting NULL pointers because it's useful and harmless.
5851 * runtime/Structure.cpp:
5852 (JSC::StructureTransitionTable::add): I can't remember why I did this.
5854 * runtime/StructureTransitionTable.h:
5855 * runtime/WeakGCMap.h: I had to update these classes because they allocate
5856 and deallocate weak pointers manually. They should probably stop doing that.
5858 2012-04-03 Keishi Hattori <keishi@webkit.org>
5860 Disable ENABLE_DATALIST for now
5861 https://bugs.webkit.org/show_bug.cgi?id=82871
5863 Reviewed by Kent Tamura.
5865 * Configurations/FeatureDefines.xcconfig: Disabled ENABLE_DATALIST.
5867 2012-04-02 Filip Pizlo <fpizlo@apple.com>
5869 jsr/sret should be removed
5870 https://bugs.webkit.org/show_bug.cgi?id=82986
5871 <rdar://problem/11017015>
5873 Reviewed by Sam Weinig and Geoff Garen.
5875 Replaces jsr/sret with finally block inlining.
5877 * bytecode/CodeBlock.cpp:
5878 (JSC::CodeBlock::dump):
5879 * bytecode/Opcode.h:
5881 (JSC::padOpcodeName):
5882 * bytecompiler/BytecodeGenerator.cpp:
5883 (JSC::BytecodeGenerator::pushFinallyContext):
5884 (JSC::BytecodeGenerator::emitComplexJumpScopes):
5886 * bytecompiler/BytecodeGenerator.h:
5888 (BytecodeGenerator):
5889 * bytecompiler/NodesCodegen.cpp:
5890 (JSC::TryNode::emitBytecode):
5891 * interpreter/Interpreter.cpp:
5892 (JSC::Interpreter::privateExecute):
5894 (JSC::JIT::privateCompileMainPass):
5895 (JSC::JIT::privateCompile):
5898 * jit/JITOpcodes.cpp:
5900 * jit/JITOpcodes32_64.cpp:
5902 * llint/LowLevelInterpreter32_64.asm:
5903 * llint/LowLevelInterpreter64.asm:
5905 2012-04-03 Mark Rowe <mrowe@apple.com>
5907 Make it possible to install the JavaScriptCore test tools.
5909 Part of <rdar://problem/11158607>.
5911 Reviewed by Filip Pizlo.
5913 * JavaScriptCore.xcodeproj/project.pbxproj: Introduce an aggregate target named
5914 Test Tools that builds testapi, minidom and testRegExp. Switch All from depending on
5915 those targets individually to depending on the new aggregate target.
5917 2012-04-03 Filip Pizlo <fpizlo@apple.com>
5919 Offlineasm ARM backend has a very convoluted way of saying it wants to emit a
5920 three-operand multiply instruction
5921 https://bugs.webkit.org/show_bug.cgi?id=83100
5923 Reviewed by Darin Adler.
5925 Changed the "muli"/"mulp" case to call emitArmV7() since that helper method was
5926 already smart enough to do the Right Thing for multiply.
5928 * offlineasm/armv7.rb:
5930 2012-04-03 Filip Pizlo <fpizlo@apple.com>
5932 Offlineasm ARM backend uses the wrong mnemonic for multiply
5933 https://bugs.webkit.org/show_bug.cgi?id=83098
5934 <rdar://problem/11168744>
5936 Reviewed by Gavin Barraclough.
5938 Use "mul" instead of "muls" since we're passing three operands, not two.
5940 * offlineasm/armv7.rb:
5942 2012-04-03 Gavin Barraclough <barraclough@apple.com>
5944 Linux crashes during boot
5945 https://bugs.webkit.org/show_bug.cgi?id=83096
5947 Reviewed by Filip Pizlo.
5949 The bug here is that we add empty JSValues to the sparse map, and then set them
5950 - but a GC may occur before doing so (due to a call to reportExtraMemory cost).
5951 We may want to consider making it safe to mark empty JSValues, but the simple &
5952 contained fix to this specific bug is to just initialize these values to
5953 something other than JSValue().
5955 * runtime/JSArray.cpp:
5956 (JSC::SparseArrayValueMap::add):
5957 - Initialize sparse map entries.
5959 2012-04-02 Oliver Hunt <oliver@apple.com>
5961 Incorrect liveness information when inlining
5962 https://bugs.webkit.org/show_bug.cgi?id=82985
5964 Reviewed by Filip Pizlo.
5966 Don't remap register numbers that have already been remapped.
5968 * dfg/DFGByteCodeParser.cpp:
5969 (JSC::DFG::ByteCodeParser::handleInlining):
5971 2012-04-02 Filip Pizlo <fpizlo@apple.com>
5973 Activation tear-off neglects to copy the callee and scope chain, leading to crashes if we
5974 try to create an arguments object from the activation
5975 https://bugs.webkit.org/show_bug.cgi?id=82947
5976 <rdar://problem/11058598>
5978 Reviewed by Gavin Barraclough.
5980 We now copy the entire call frame header just to be sure. This is mostly perf-netural,
5981 except for a 3.7% slow-down in V8/earley.
5983 * runtime/JSActivation.cpp:
5984 (JSC::JSActivation::visitChildren):
5985 * runtime/JSActivation.h:
5986 (JSC::JSActivation::tearOff):
5988 2012-04-02 Daniel Bates <dbates@webkit.org>
5990 Remove Source/JavaScriptCore/wtf and its empty subdirectories
5992 Rubber-stamped by Eric Seidel.
5994 Following the move of WTF from Source/JavaScriptCore/wtf to Source/WTF
5995 (https://bugs.webkit.org/show_bug.cgi?id=75673), remove directory
5996 Source/JavaScriptCore/wtf and its empty subdirectories.
5999 * wtf/android: Removed.
6000 * wtf/blackberry: Removed.
6001 * wtf/chromium: Removed.
6002 * wtf/dtoa: Removed.
6004 * wtf/gobject: Removed.
6008 * wtf/qt/compat: Removed.
6009 * wtf/tests: Removed.
6010 * wtf/text: Removed.
6011 * wtf/threads: Removed.
6012 * wtf/threads/win: Removed.
6013 * wtf/unicode: Removed.
6014 * wtf/unicode/glib: Removed.
6015 * wtf/unicode/icu: Removed.
6016 * wtf/unicode/qt4: Removed.
6017 * wtf/unicode/wince: Removed.
6019 * wtf/url/api: Removed.
6020 * wtf/url/src: Removed.
6022 * wtf/wince: Removed.
6025 2012-04-02 Carlos Garcia Campos <cgarcia@igalia.com>
6027 Unreviewed. Fix make distcheck issues.
6029 * GNUmakefile.list.am: Add missing file.
6031 2012-04-01 Darin Adler <darin@apple.com>
6033 Fix incorrect path for libWTF.a in Mac project file.
6035 * JavaScriptCore.xcodeproj/project.pbxproj: Removed the "../Release" prefix that
6036 would cause other configurations to try to link with the "Release" version of
6037 libWTF.a instead of the correct version.
6039 2012-03-29 Filip Pizlo <fpizlo@apple.com>
6041 DFG should optimize a==b for a being an object and b being either an object or
6042 null/undefined, and vice versa
6043 https://bugs.webkit.org/show_bug.cgi?id=82656
6045 Reviewed by Oliver Hunt.
6047 Implements additional object equality optimizations for the case that one
6048 operand is predicted to be an easily speculated object (like FinalObject or
6049 Array) and the other is either an easily speculated object or Other, i.e.
6052 2-5% speed-up on V8/raytrace, leading to a sub-1% progression on V8.
6054 I also took the opportunity to clean up the control flow for the speculation
6055 decisions in the various Compare opcodes. And to fix a build bug in SamplingTool.
6056 And to remove debug cruft I stupidly committed in my last patch.
6058 * bytecode/SamplingTool.h:
6060 * dfg/DFGAbstractState.cpp:
6061 (JSC::DFG::AbstractState::execute):
6062 * dfg/DFGOperations.cpp:
6063 * dfg/DFGSpeculativeJIT.cpp:
6064 (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
6065 (JSC::DFG::SpeculativeJIT::compare):
6066 * dfg/DFGSpeculativeJIT.h:
6068 * dfg/DFGSpeculativeJIT32_64.cpp:
6069 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
6070 (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
6072 (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
6073 * dfg/DFGSpeculativeJIT64.cpp:
6074 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
6075 (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
6077 (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
6079 2012-03-30 David Barr <davidbarr@chromium.org>
6081 Split up top-level .gitignore and .gitattributes
6082 https://bugs.webkit.org/show_bug.cgi?id=82687
6084 Reviewed by Tor Arne Vestbø.
6086 * JavaScriptCore.gyp/.gitignore: Added.
6088 2012-03-30 Steve Falkenburg <sfalken@apple.com>
6090 Windows (make based) build fix.
6092 * JavaScriptCore.vcproj/JavaScriptCore.make: Copy WTF header files into a place where JavaScriptCore build can see them.
6094 2012-03-30 Keishi Hattori <keishi@webkit.org>
6096 Change ENABLE_INPUT_COLOR to ENABLE_INPUT_TYPE_COLOR and enable it for chromium
6097 https://bugs.webkit.org/show_bug.cgi?id=80972
6099 Reviewed by Kent Tamura.
6101 * Configurations/FeatureDefines.xcconfig:
6103 2012-03-29 Mark Hahnenberg <mhahnenberg@apple.com>
6105 Refactor recompileAllJSFunctions() to be less expensive
6106 https://bugs.webkit.org/show_bug.cgi?id=80330
6108 Reviewed by Filip Pizlo.
6110 This change is performance neutral on the JS benchmarks we track. It's mostly to improve page
6111 load performance, which currently does at least a couple full GCs per navigation.
6114 (JSC::Heap::discardAllCompiledCode): Rename recompileAllJSFunctions to discardAllCompiledCode
6115 because the function doesn't actually recompile anything (and never did); it simply throws code
6116 away for it to be recompiled later if we determine we should do so.
6118 (JSC::Heap::collectAllGarbage):
6119 (JSC::Heap::addFunctionExecutable): Adds a newly created FunctionExecutable to the Heap's list.
6120 (JSC::Heap::removeFunctionExecutable): Removes the specified FunctionExecutable from the Heap's list.
6124 * runtime/Executable.cpp: Added next and prev fields to FunctionExecutables so that they can
6125 be used in DoublyLinkedLists.
6126 (JSC::FunctionExecutable::FunctionExecutable):
6127 (JSC::FunctionExecutable::finalize): Removes the FunctionExecutable from the Heap's list.
6128 * runtime/Executable.h:
6129 (FunctionExecutable):
6130 (JSC::FunctionExecutable::create): Adds the FunctionExecutable to the Heap's list.
6131 * runtime/JSGlobalData.cpp: Remove recompileAllJSFunctions, as it's the Heap's job to own and manage
6132 the list of FunctionExecutables.
6133 * runtime/JSGlobalData.h:
6135 * runtime/JSGlobalObject.cpp:
6136 (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): Use the new discardAllCompiledCode.
6138 2012-03-29 Filip Pizlo <fpizlo@apple.com>
6140 Unreviewed build fix for non-x86 platforms.
6142 * dfg/DFGSpeculativeJIT.cpp:
6143 (JSC::DFG::SpeculativeJIT::compileSoftModulo):
6144 * dfg/DFGSpeculativeJIT.h:
6145 (JSC::DFG::SpeculativeJIT::callOperation):
6146 * jit/JITArithmetic32_64.cpp:
6147 (JSC::JIT::emitSlow_op_mod):
6149 2012-03-29 Gavin Barraclough <barraclough@apple.com>
6151 Windows build fix p2.
6153 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
6155 2012-03-29 Gavin Barraclough <barraclough@apple.com>
6157 Windows build fix p1.
6159 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
6161 2012-03-29 Gavin Barraclough <barraclough@apple.com>
6163 Template the Yarr::Interpreter on the character type
6164 https://bugs.webkit.org/show_bug.cgi?id=82637
6166 Reviewed by Sam Weinig.
6168 We should be able to call to the interpreter after having already checked the character type,
6169 without having to re-package the character pointer back up into a string!
6171 * runtime/RegExp.cpp:
6172 (JSC::RegExp::match):
6173 (JSC::RegExp::matchCompareWithInterpreter):
6174 - Don't pass length.
6176 - moved function declarations to YarrInterpreter.h.
6177 * yarr/YarrInterpreter.cpp:
6180 (JSC::Yarr::Interpreter::InputStream::InputStream):
6182 (JSC::Yarr::Interpreter::Interpreter):
6183 (JSC::Yarr::interpret):
6184 - templated Interpreter class on CharType.
6185 * yarr/YarrInterpreter.h:
6187 - added function declarations.
6189 2012-03-29 David Kilzer <ddkilzer@apple.com>
6191 Don't use a flattened framework path when building on OS X
6193 Reviewed by Mark Rowe.
6195 * Configurations/ToolExecutable.xcconfig: Use REAL_PLATFORM_NAME
6196 to select different INSTALL_PATH values.
6198 2012-03-29 Kevin Ollivier <kevino@theolliviers.com>
6200 [wx] Unreviewed build fix, add Win-specific sources
6201 the wx port needs after WTF move.
6205 2012-03-29 Andy Estes <aestes@apple.com>
6207 Remove an unused variable that breaks the build with newer versions of clang.
6209 Rubber stamped by Gavin Barraclough.
6212 (JSC::Yarr::YarrGenerator::backtrackCharacterClassNonGreedy):
6214 2012-03-29 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
6216 HashMap<>::add should return a more descriptive object
6217 https://bugs.webkit.org/show_bug.cgi?id=71063
6219 Reviewed by Ryosuke Niwa.
6221 Update code to use AddResult instead of a pair. Note that since WeakGCMap wraps
6222 the iterator type, there's a need for its own AddResult type -- instantiated from
6223 HashTableAddResult template class.
6225 * API/JSCallbackObject.h:
6226 (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
6227 * API/JSClassRef.cpp:
6228 (OpaqueJSClass::contextData):
6229 * bytecompiler/BytecodeGenerator.cpp:
6230 (JSC::BytecodeGenerator::addVar):
6231 (JSC::BytecodeGenerator::addGlobalVar):
6232 (JSC::BytecodeGenerator::addConstant):
6233 (JSC::BytecodeGenerator::addConstantValue):
6234 (JSC::BytecodeGenerator::emitLoad):
6235 (JSC::BytecodeGenerator::addStringConstant):
6236 (JSC::BytecodeGenerator::emitLazyNewFunction):
6237 * bytecompiler/NodesCodegen.cpp:
6238 (JSC::PropertyListNode::emitBytecode):
6239 * debugger/Debugger.cpp:
6240 * dfg/DFGAssemblyHelpers.cpp:
6241 (JSC::DFG::AssemblyHelpers::decodedCodeMapFor):
6242 * dfg/DFGByteCodeParser.cpp:
6243 (JSC::DFG::ByteCodeParser::cellConstant):
6244 (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
6246 (JSC::JITThunks::ctiStub):
6247 (JSC::JITThunks::hostFunctionStub):
6248 * parser/Parser.cpp:
6249 (JSC::::parseStrictObjectLiteral):
6251 (JSC::Scope::declareParameter):
6252 * runtime/Identifier.cpp:
6253 (JSC::Identifier::add):
6254 (JSC::Identifier::add8):
6255 (JSC::Identifier::addSlowCase):
6256 * runtime/Identifier.h:
6257 (JSC::Identifier::add):
6258 (JSC::IdentifierTable::add):
6259 * runtime/JSArray.cpp:
6260 (JSC::SparseArrayValueMap::add):
6261 (JSC::SparseArrayValueMap::put):
6262 (JSC::SparseArrayValueMap::putDirect):
6263 (JSC::JSArray::enterDictionaryMode):
6264 (JSC::JSArray::defineOwnNumericProperty):
6265 * runtime/JSArray.h:
6266 (SparseArrayValueMap):
6267 * runtime/PropertyNameArray.cpp:
6268 (JSC::PropertyNameArray::add):
6269 * runtime/StringRecursionChecker.h:
6270 (JSC::StringRecursionChecker::performCheck):
6271 * runtime/Structure.cpp:
6272 (JSC::StructureTransitionTable::add):
6273 * runtime/WeakGCMap.h:
6275 (JSC::WeakGCMap::add):
6276 (JSC::WeakGCMap::set):
6277 * tools/ProfileTreeNode.h:
6278 (JSC::ProfileTreeNode::sampleChild):
6280 2012-03-29 Patrick Gansterer <paroga@webkit.org>
6282 Build fix for !ENABLE(YARR_JIT) after r112454.
6284 * runtime/RegExp.cpp:
6285 (JSC::RegExp::invalidateCode):
6287 2012-03-28 Filip Pizlo <fpizlo@apple.com>
6289 DFG object equality speculations should be simplified
6290 https://bugs.webkit.org/show_bug.cgi?id=82557
6292 Reviewed by Gavin Barraclough.
6295 (JSC::DFG::Node::shouldSpeculateFinalObject):
6296 (JSC::DFG::Node::shouldSpeculateArray):
6298 2012-03-28 David Kilzer <ddkilzer@apple.com>
6300 minidom configurations should be based on ToolExecutable.xcconfig
6301 <http://webkit.org/b/82513>
6303 Reviewed by Mark Rowe.
6305 Note that this patch changes minidom from being installed in
6306 /usr/local/bin to JavaScriptCore.framework/Resources.
6308 * Configurations/ToolExecutable.xcconfig: Add semi-colon.
6309 * JavaScriptCore.xcodeproj/project.pbxproj: Base minidom
6310 configurations on ToolExecutable.xcconfig. Remove redundant
6311 PRODUCT_NAME and SKIP_INSTALL variables.
6313 2012-03-28 Gavin Barraclough <barraclough@apple.com>
6315 Build fix - some compiles generating NORETURN related warnings.
6318 (JSC::Yarr::YarrGenerator::setSubpatternStart):
6319 (JSC::Yarr::YarrGenerator::setSubpatternEnd):
6320 (JSC::Yarr::YarrGenerator::clearSubpatternStart):
6322 2012-03-28 Kevin Ollivier <kevino@theolliviers.com>
6324 [wx] Unreviewed. Build fix, move WTF back into JSCore target
6325 until issues with JSCore not linking in all WTF symbols are resolved.
6329 2012-03-28 Gavin Barraclough <barraclough@apple.com>
6331 Yarr: if we're not using the output array, don't populate it!
6332 https://bugs.webkit.org/show_bug.cgi?id=82519
6334 Reviewed by Sam Weinig.
6336 * runtime/RegExp.cpp:
6338 - Missed review comment! - didn't fully remove RegExpRepresentation.
6340 2012-03-28 Gavin Barraclough <barraclough@apple.com>
6342 Yarr: if we're not using the output array, don't populate it!
6343 https://bugs.webkit.org/show_bug.cgi?id=82519
6345 Reviewed by Sam Weinig.
6347 Add a new variant of the match method to RegExp that returns a MatchResult,
6348 and modify YarrJIT to be able to compile code that doesn't use an output vector.
6350 This is a 3% progression on v8-regexp.
6352 * JavaScriptCore.xcodeproj/project.pbxproj:
6353 - Moved MatchResult into its own header.
6354 * assembler/AbstractMacroAssembler.h:
6355 - Added missing include.
6356 * runtime/MatchResult.h: Added.
6357 (MatchResult::MatchResult):
6359 (MatchResult::failed):
6360 (MatchResult::operator bool):
6361 (MatchResult::empty):
6362 - Moved MatchResult into its own header.
6363 * runtime/RegExp.cpp:
6364 (JSC::RegExp::compile):
6365 (JSC::RegExp::compileIfNecessary):
6366 (JSC::RegExp::match):
6367 - Changed due to execute & representation changes.
6368 (JSC::RegExp::compileMatchOnly):
6369 (JSC::RegExp::compileIfNecessaryMatchOnly):
6370 - Added helper to compile MatchOnly code.
6371 (JSC::RegExp::invalidateCode):
6372 (JSC::RegExp::matchCompareWithInterpreter):
6373 (JSC::RegExp::printTraceData):
6374 - Changed due representation changes.
6377 (JSC::RegExp::hasCode):
6378 - Made YarrCodeBlock a member.
6379 * runtime/RegExpConstructor.h:
6380 (RegExpConstructor):
6381 (JSC::RegExpConstructor::performMatch):
6382 - Added no-ovector form.
6383 * runtime/RegExpMatchesArray.cpp:
6384 (JSC::RegExpMatchesArray::reifyAllProperties):
6385 - Match now takes a reference to ovector, not a pointer.
6386 * runtime/RegExpObject.h:
6388 - Moved MatchResult into its own header.
6389 * runtime/StringPrototype.cpp:
6390 (JSC::stringProtoFuncSplit):
6391 - Match now takes a reference to ovector, not a pointer.
6394 - Match now takes a reference to ovector, not a pointer.
6398 (JSC::Yarr::YarrGenerator::initCallFrame):
6399 (JSC::Yarr::YarrGenerator::removeCallFrame):
6400 (JSC::Yarr::YarrGenerator::setSubpatternStart):
6401 (JSC::Yarr::YarrGenerator::setSubpatternEnd):
6402 (JSC::Yarr::YarrGenerator::clearSubpatternStart):
6403 (JSC::Yarr::YarrGenerator::setMatchStart):
6404 (JSC::Yarr::YarrGenerator::getMatchStart):
6405 - Added helper functions to intermediate access to output.
6406 (JSC::Yarr::YarrGenerator::generateDotStarEnclosure):
6407 (JSC::Yarr::YarrGenerator::generate):
6408 (JSC::Yarr::YarrGenerator::backtrack):
6409 (JSC::Yarr::YarrGenerator::generateEnter):
6410 (JSC::Yarr::YarrGenerator::compile):
6411 - Changed to use the new helpers, only generate subpatterns if IncludeSubpatterns.
6412 (JSC::Yarr::jitCompile):
6413 - Needs to template of MatchOnly or IncludeSubpatterns.
6416 (JSC::Yarr::YarrCodeBlock::set8BitCode):
6417 (JSC::Yarr::YarrCodeBlock::set16BitCode):
6418 (JSC::Yarr::YarrCodeBlock::has8BitCodeMatchOnly):
6419 (JSC::Yarr::YarrCodeBlock::has16BitCodeMatchOnly):
6420 (JSC::Yarr::YarrCodeBlock::set8BitCodeMatchOnly):
6421 (JSC::Yarr::YarrCodeBlock::set16BitCodeMatchOnly):
6422 (JSC::Yarr::YarrCodeBlock::execute):
6423 (JSC::Yarr::YarrCodeBlock::clear):
6424 - Added a second set of CodeRefs, so that we can compile RexExps with/without subpattern matching.
6426 2012-03-27 Filip Pizlo <fpizlo@apple.com>
6428 DFG OSR exit should not generate an exit for variables of inlinees if the
6429 inlinees are not in scope
6430 https://bugs.webkit.org/show_bug.cgi?id=82312
6432 Reviewed by Oliver Hunt.
6434 * bytecode/CodeBlock.h:
6435 (JSC::baselineCodeBlockForInlineCallFrame):
6437 (JSC::baselineCodeBlockForOriginAndBaselineCodeBlock):
6438 * dfg/DFGOSRExit.cpp:
6439 (JSC::DFG::computeNumVariablesForCodeOrigin):
6441 (JSC::DFG::OSRExit::OSRExit):
6443 2012-03-27 Matt Lilek <mrl@apple.com>
6445 Stop compiling Interpreter.cpp with -fno-var-tracking
6446 https://bugs.webkit.org/show_bug.cgi?id=82299
6448 Reviewed by Anders Carlsson.
6450 * JavaScriptCore.xcodeproj/project.pbxproj:
6452 2012-03-27 Pratik Solanki <psolanki@apple.com>
6454 Compiler warning when JIT is not enabled
6455 https://bugs.webkit.org/show_bug.cgi?id=82352
6457 Reviewed by Filip Pizlo.
6459 * runtime/JSFunction.cpp:
6460 (JSC::JSFunction::create):
6462 2012-03-26 Thouraya ANDOLSI <thouraya.andolsi@st.com>
6464 Unaligned userspace access for SH4 platforms
6465 https://bugs.webkit.org/show_bug.cgi?id=79104
6467 Reviewed by Gavin Barraclough.
6469 * assembler/AbstractMacroAssembler.h:
6471 (JSC::AbstractMacroAssembler::Jump::Jump):
6472 (JSC::AbstractMacroAssembler::Jump::link):
6473 * assembler/MacroAssemblerSH4.h:
6474 (JSC::MacroAssemblerSH4::load16Unaligned):
6475 (JSC::MacroAssemblerSH4::load32WithUnalignedHalfWords):
6476 (JSC::MacroAssemblerSH4::branchDouble):
6477 (JSC::MacroAssemblerSH4::branchTrue):
6478 (JSC::MacroAssemblerSH4::branchFalse):
6479 * assembler/SH4Assembler.h:
6480 (JSC::SH4Assembler::extraInstrForBranch):
6482 (JSC::SH4Assembler::bra):
6483 (JSC::SH4Assembler::linkJump):
6487 (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
6489 2012-03-26 Ryosuke Niwa <rniwa@webkit.org>
6491 cssText should use shorthand notations
6492 https://bugs.webkit.org/show_bug.cgi?id=81737
6494 Reviewed by Enrica Casucci.
6496 Export symbols of BitVector on Windows.
6498 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
6500 2012-03-26 Filip Pizlo <fpizlo@apple.com>
6502 DFG should assert that argument value recoveries can only be
6503 AlreadyInRegisterFile or Constant
6504 https://bugs.webkit.org/show_bug.cgi?id=82249
6506 Reviewed by Michael Saboff.
6508 Made the assertions that the DFG makes for argument value recoveries match
6509 what Arguments expects.
6511 * bytecode/ValueRecovery.h:
6512 (JSC::ValueRecovery::isConstant):
6514 (JSC::ValueRecovery::isAlreadyInRegisterFile):
6515 * dfg/DFGSpeculativeJIT.cpp:
6516 (JSC::DFG::SpeculativeJIT::compile):
6518 2012-03-26 Dan Bernstein <mitz@apple.com>
6520 Tried to fix the Windows build.
6522 * yarr/YarrPattern.cpp:
6523 (JSC::Yarr::CharacterClassConstructor::putRange):
6525 2012-03-26 Gavin Barraclough <barraclough@apple.com>
6527 Unreviewed - speculative Windows build fix.
6529 * yarr/YarrCanonicalizeUCS2.h:
6530 (JSC::Yarr::getCanonicalPair):
6532 2012-03-26 Dan Bernstein <mitz@apple.com>
6534 Fixed builds with assertions disabled.
6536 * yarr/YarrCanonicalizeUCS2.h:
6537 (JSC::Yarr::areCanonicallyEquivalent):
6539 2012-03-26 Gavin Barraclough <barraclough@apple.com>
6541 Unreviewed - errk! - accidentally the whole pbxproj.
6543 * JavaScriptCore.xcodeproj/project.pbxproj:
6545 2012-03-25 Gavin Barraclough <barraclough@apple.com>
6547 Greek sigma is handled wrong in case independent regexp.
6548 https://bugs.webkit.org/show_bug.cgi?id=82063
6550 Reviewed by Oliver Hunt.
6552 The bug here is that we assume that any given codepoint has at most one additional value it
6553 should match under a case insensitive match, and that the pair of codepoints that match (if
6554 a codepoint does not only match itself) can be determined by calling toUpper/toLower on the
6555 given codepoint). Life is not that simple.
6557 Instead, pre-calculate a set of tables mapping from a UCS2 codepoint to the set of characters
6558 it may match, under the ES5.1 case-insensitive matching rules. Since unicode is fairly regular
6559 we can pack this table quite nicely, and get it down to 364 entries. This means we can use a
6560 simple binary search to find an entry in typically eight compares.
6563 * GNUmakefile.list.am:
6564 * JavaScriptCore.gypi:
6565 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
6566 * JavaScriptCore.xcodeproj/project.pbxproj:
6568 - Added new files to build systems.
6569 * yarr/YarrCanonicalizeUCS2.cpp: Added.
6570 - New - autogenerated, UCS2 canonicalized comparison tables.
6571 * yarr/YarrCanonicalizeUCS2.h: Added.
6572 (JSC::Yarr::rangeInfoFor):
6573 - Look up the canonicalization info for a UCS2 character.
6574 (JSC::Yarr::getCanonicalPair):
6575 - For a UCS2 character with a single equivalent value, look it up.
6576 (JSC::Yarr::isCanonicallyUnique):
6577 - Returns true if no other UCS2 code points are canonically equal.
6578 (JSC::Yarr::areCanonicallyEquivalent):
6579 - Compare two values, under canonicalization rules.
6580 * yarr/YarrCanonicalizeUCS2.js: Added.
6581 - script used to generate YarrCanonicalizeUCS2.cpp.
6582 * yarr/YarrInterpreter.cpp:
6583 (JSC::Yarr::Interpreter::tryConsumeBackReference):
6584 - Use isCanonicallyUnique, rather than Unicode toUpper/toLower.
6586 (JSC::Yarr::YarrGenerator::jumpIfCharNotEquals):
6587 (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
6588 (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed):
6589 - Use isCanonicallyUnique, rather than Unicode toUpper/toLower.
6590 * yarr/YarrPattern.cpp:
6591 (JSC::Yarr::CharacterClassConstructor::putChar):
6592 - Updated to determine canonical equivalents correctly.
6593 (JSC::Yarr::CharacterClassConstructor::putUnicodeIgnoreCase):
6594 - Added, used to put a non-ascii, non-unique character in a case-insensitive match.
6595 (JSC::Yarr::CharacterClassConstructor::putRange):
6596 - Updated to determine canonical equivalents correctly.
6597 (JSC::Yarr::YarrPatternConstructor::atomPatternCharacter):
6598 - Changed to call putUnicodeIgnoreCase, instead of putChar, avoid a double lookup of rangeInfo.
6600 2012-03-26 Kevin Ollivier <kevino@theolliviers.com>
6602 [wx] Unreviewed build fix. Add the build outputs dir to the list of build dirs,
6603 so we make sure it finds the API headers on all platforms.
6607 2012-03-26 Patrick Gansterer <paroga@webkit.org>
6609 Build fix for WinCE after r112039.
6611 * interpreter/Register.h:
6612 (Register): Removed inline keyword from decleration since
6613 there is an ALWAYS_INLINE at the definition anyway.
6615 2012-03-26 Carlos Garcia Campos <cgarcia@igalia.com>
6617 Unreviewed. Fix make distcheck.
6619 * GNUmakefile.list.am: Add missing files.
6621 2012-03-25 Kevin Ollivier <kevino@theolliviers.com>
6623 [wx] Unreviewed build fix. Move WTF to its own static lib build.
6627 2012-03-25 Filip Pizlo <fpizlo@apple.com>
6629 DFG int-to-double conversion should be revealed to CSE
6630 https://bugs.webkit.org/show_bug.cgi?id=82135
6632 Reviewed by Oliver Hunt.
6634 This introduces the notion of an Int32ToDouble node, which is injected
6635 into the graph anytime we know that we have a double use of a node that
6636 was predicted integer. The Int32ToDouble simplifies double speculation
6637 on integers by skipping the path that would unbox doubles, if we know
6638 that the value is already proven to be an integer. It allows integer to
6639 double conversions to be subjected to common subexpression elimination
6640 (CSE) by allowing the CSE phase to see where these conversions are
6641 occurring. Finally, it allows us to see when a constant is being used
6642 as both a double and an integer. This is a bit odd, since it means that
6643 sometimes a double use of a constant will not refer directly to the
6644 constant. This should not cause problems, for now, but it may require
6645 some canonizalization in the future if we want to support strength
6646 reductions of double operations based on constants.
6648 To allow injection of nodes into the graph, this change introduces the
6649 DFG::InsertionSet, which is a way of lazily inserting elements into a
6650 list. This allows the FixupPhase to remain O(N) despite performing
6651 multiple injections in a single basic block. Without the InsertionSet,
6652 each injection would require performing an insertion into a vector,
6653 which is O(N), leading to O(N^2) performance overall. With the
6654 InsertionSet, each injection simply records what insertion would have
6655 been performed, and all insertions are performed at once (via
6656 InsertionSet::execute) after processing of a basic block is completed.
6658 * JavaScriptCore.xcodeproj/project.pbxproj:
6659 * bytecode/PredictedType.h:
6660 (JSC::isActionableIntMutableArrayPrediction):
6662 (JSC::isActionableFloatMutableArrayPrediction):
6663 (JSC::isActionableTypedMutableArrayPrediction):
6664 (JSC::isActionableMutableArrayPrediction):
6665 * dfg/DFGAbstractState.cpp:
6666 (JSC::DFG::AbstractState::execute):
6667 * dfg/DFGCSEPhase.cpp:
6668 (JSC::DFG::CSEPhase::performNodeCSE):
6670 (JSC::DFG::useKindToString):
6672 * dfg/DFGFixupPhase.cpp:
6673 (JSC::DFG::FixupPhase::run):
6674 (JSC::DFG::FixupPhase::fixupBlock):
6676 (JSC::DFG::FixupPhase::fixupNode):
6677 (JSC::DFG::FixupPhase::fixDoubleEdge):
6679 (JSC::DFG::Graph::dump):
6680 * dfg/DFGInsertionSet.h: Added.
6683 (JSC::DFG::Insertion::Insertion):
6684 (JSC::DFG::Insertion::index):
6685 (JSC::DFG::Insertion::element):
6687 (JSC::DFG::InsertionSet::InsertionSet):
6688 (JSC::DFG::InsertionSet::append):
6689 (JSC::DFG::InsertionSet::execute):
6690 * dfg/DFGNodeType.h:
6692 * dfg/DFGPredictionPropagationPhase.cpp:
6693 (JSC::DFG::PredictionPropagationPhase::propagate):
6694 * dfg/DFGSpeculativeJIT.cpp:
6695 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
6696 (JSC::DFG::SpeculativeJIT::compileValueToInt32):
6697 (JSC::DFG::SpeculativeJIT::compileInt32ToDouble):
6699 * dfg/DFGSpeculativeJIT.h:
6701 (JSC::DFG::IntegerOperand::IntegerOperand):
6702 (JSC::DFG::DoubleOperand::DoubleOperand):
6703 (JSC::DFG::JSValueOperand::JSValueOperand):
6704 (JSC::DFG::StorageOperand::StorageOperand):
6705 (JSC::DFG::SpeculateIntegerOperand::SpeculateIntegerOperand):
6706 (JSC::DFG::SpeculateStrictInt32Operand::SpeculateStrictInt32Operand):
6707 (JSC::DFG::SpeculateDoubleOperand::SpeculateDoubleOperand):
6708 (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
6709 (JSC::DFG::SpeculateBooleanOperand::SpeculateBooleanOperand):
6710 * dfg/DFGSpeculativeJIT32_64.cpp:
6711 (JSC::DFG::SpeculativeJIT::compile):
6712 * dfg/DFGSpeculativeJIT64.cpp:
6713 (JSC::DFG::SpeculativeJIT::compile):
6715 2012-03-25 Filip Pizlo <fpizlo@apple.com>
6717 DFGOperands should be moved out of the DFG and into bytecode
6718 https://bugs.webkit.org/show_bug.cgi?id=82151
6720 Reviewed by Dan Bernstein.
6722 * GNUmakefile.list.am:
6723 * JavaScriptCore.xcodeproj/project.pbxproj:
6724 * bytecode/Operands.h: Copied from Source/JavaScriptCore/dfg/DFGOperands.h.
6725 * dfg/DFGBasicBlock.h:
6727 * dfg/DFGOSREntry.h:
6729 * dfg/DFGOperands.h: Removed.
6730 * dfg/DFGVariableAccessData.h:
6732 2012-03-24 Filip Pizlo <fpizlo@apple.com>
6734 DFG 64-bit Branch implementation should not be creating a JSValueOperand that
6735 it isn't going to use
6736 https://bugs.webkit.org/show_bug.cgi?id=82136
6738 Reviewed by Geoff Garen.
6740 * dfg/DFGSpeculativeJIT64.cpp:
6741 (JSC::DFG::SpeculativeJIT::emitBranch):
6743 2012-03-24 Kevin Ollivier <kevino@theolliviers.com>
6745 [wx] Unreviewed. Fix the build after WTF move.
6749 2012-03-23 Filip Pizlo <fpizlo@apple.com>
6751 DFG double voting may be overzealous in the case of variables that end up
6752 being used as integers
6753 https://bugs.webkit.org/show_bug.cgi?id=82008
6755 Reviewed by Oliver Hunt.
6757 Cleaned up propagation, making the intent more explicit in most places.
6758 Back-propagate NodeUsedAsInt for cases where a node was used in a context
6759 that is known to strongly prefer integers.
6761 * dfg/DFGByteCodeParser.cpp:
6762 (JSC::DFG::ByteCodeParser::handleCall):
6763 (JSC::DFG::ByteCodeParser::parseBlock):
6765 (JSC::DFG::Graph::dumpCodeOrigin):
6766 (JSC::DFG::Graph::dump):
6769 * dfg/DFGNodeFlags.cpp:
6770 (JSC::DFG::nodeFlagsAsString):
6771 * dfg/DFGNodeFlags.h:
6773 * dfg/DFGPredictionPropagationPhase.cpp:
6774 (JSC::DFG::PredictionPropagationPhase::run):
6775 (JSC::DFG::PredictionPropagationPhase::propagate):
6776 (PredictionPropagationPhase):
6777 (JSC::DFG::PredictionPropagationPhase::mergeDefaultFlags):
6778 (JSC::DFG::PredictionPropagationPhase::vote):
6779 (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
6780 (JSC::DFG::PredictionPropagationPhase::fixupNode):
6781 * dfg/DFGVariableAccessData.h:
6782 (JSC::DFG::VariableAccessData::shouldUseDoubleFormatAccordingToVote):
6784 2012-03-24 Filip Pizlo <fpizlo@apple.com>
6786 DFG::Node::shouldNotSpeculateInteger() should be eliminated
6787 https://bugs.webkit.org/show_bug.cgi?id=82123
6789 Reviewed by Geoff Garen.
6791 * dfg/DFGAbstractState.cpp:
6792 (JSC::DFG::AbstractState::execute):
6795 * dfg/DFGSpeculativeJIT.cpp:
6796 (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
6797 (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
6799 2012-03-24 Yong Li <yoli@rim.com>
6801 Increase getByIdSlowCase ConstantSpace/InstructionSpace for CPU(ARM_TRADITIONAL)
6802 https://bugs.webkit.org/show_bug.cgi?id=81521
6804 Increase sequenceGetByIdSlowCaseConstantSpace and sequenceGetByIdSlowCaseInstructionSpace
6805 for CPU(ARM_TRADITIONAL) to fit actual need.
6807 Reviewed by Oliver Hunt.
6812 2012-03-23 Filip Pizlo <fpizlo@apple.com>
6814 DFG Fixup should be able to short-circuit trivial ValueToInt32's
6815 https://bugs.webkit.org/show_bug.cgi?id=82030
6817 Reviewed by Michael Saboff.
6819 Takes the fixup() method of the prediction propagation phase and makes it
6820 into its own phase. Adds the ability to short-circuit trivial ValueToInt32
6821 nodes, and mark pure ValueToInt32's as such.
6824 * GNUmakefile.list.am:
6825 * JavaScriptCore.xcodeproj/project.pbxproj:
6827 * dfg/DFGByteCodeParser.cpp:
6828 (JSC::DFG::ByteCodeParser::makeSafe):
6829 (JSC::DFG::ByteCodeParser::handleCall):
6830 (JSC::DFG::ByteCodeParser::parseBlock):
6832 * dfg/DFGDriver.cpp:
6833 (JSC::DFG::compile):
6834 * dfg/DFGFixupPhase.cpp: Added.
6837 (JSC::DFG::FixupPhase::FixupPhase):
6838 (JSC::DFG::FixupPhase::run):
6839 (JSC::DFG::FixupPhase::fixupNode):
6840 (JSC::DFG::FixupPhase::fixIntEdge):
6841 (JSC::DFG::performFixup):
6842 * dfg/DFGFixupPhase.h: Added.
6844 * dfg/DFGPredictionPropagationPhase.cpp:
6845 (JSC::DFG::PredictionPropagationPhase::run):
6846 (PredictionPropagationPhase):
6848 2012-03-23 Mark Hahnenberg <mhahnenberg@apple.com>
6850 tryReallocate could break the zero-ed memory invariant of CopiedBlocks
6851 https://bugs.webkit.org/show_bug.cgi?id=82087
6853 Reviewed by Filip Pizlo.
6855 Removing this optimization turned out to be ~1% regression on kraken, so I simply
6856 undid the modification to the current block if we fail.
6858 * heap/CopiedSpace.cpp:
6859 (JSC::CopiedSpace::tryReallocate): Undid the reset in the CopiedAllocator if we fail
6860 to reallocate from the current block.
6862 2012-03-23 Alexey Proskuryakov <ap@apple.com>
6864 [Mac] No need for platform-specific ENABLE_BLOB values
6865 https://bugs.webkit.org/show_bug.cgi?id=82102
6867 Reviewed by David Kilzer.
6869 * Configurations/FeatureDefines.xcconfig:
6871 2012-03-23 Michael Saboff <msaboff@apple.com>
6873 DFG::compileValueToInt32 Sometime Generates GPR to FPR reg back to GPR
6874 https://bugs.webkit.org/show_bug.cgi?id=81805
6876 Reviewed by Filip Pizlo.
6878 Added SpeculativeJIT::checkGeneratedType() to determine the current format
6879 of an operand. Used that information in SpeculativeJIT::compileValueToInt32
6880 to generate code that will use integer and JSValue types in integer
6881 format directly without a conversion to double.
6883 * JavaScriptCore.xcodeproj/project.pbxproj:
6884 * dfg/DFGSpeculativeJIT.cpp:
6885 (JSC::DFG::SpeculativeJIT::checkGeneratedType):
6887 (JSC::DFG::SpeculativeJIT::compileValueToInt32):
6888 * dfg/DFGSpeculativeJIT.h:
6892 2012-03-23 Steve Falkenburg <sfalken@apple.com>
6894 Update Apple Windows build files for WTF move
6895 https://bugs.webkit.org/show_bug.cgi?id=82069
6897 Reviewed by Jessie Berlin.
6899 * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Removed WTF and WTFGenerated.
6901 2012-03-23 Dean Jackson <dino@apple.com>
6903 Disable CSS_SHADERS in Apple builds
6904 https://bugs.webkit.org/show_bug.cgi?id=81996
6906 Reviewed by Simon Fraser.
6908 Remove ENABLE_CSS_SHADERS from FeatureDefines. It's now in Platform.h.
6910 * Configurations/FeatureDefines.xcconfig:
6912 2012-03-23 Gavin Barraclough <barraclough@apple.com>
6914 RexExp constructor last match properties should not rely on previous ovector
6915 https://bugs.webkit.org/show_bug.cgi?id=82077
6917 Reviewed by Oliver Hunt.
6919 This change simplifies matching, and will enable subpattern results to be fully lazily generated in the future.
6921 This patch changes the scheme used to lazily generate the last match properties of the RegExp object.
6922 Instead of relying on the results in the ovector, we can instead lazily generate the subpatters using
6923 a RegExpMatchesArray. To do so we just need to store the input, the regexp matched, and the match
6924 location (the MatchResult). When the match is accessed or the input is set, we reify results. We use
6925 a special value of setting the saved result to MatchResult::failed() to indicated that we're in a
6926 reified state. This means that next time a match is performed, the store of the result will
6927 automatically blow away the reified value.
6929 * JavaScriptCore.xcodeproj/project.pbxproj:
6931 * runtime/RegExp.cpp:
6932 (JSC::RegExpFunctionalTestCollector::outputOneTest):
6933 - changed 'subPattern' -> 'subpattern' (there was a mix in JSC, 'subpattern' was more common).
6934 * runtime/RegExpCachedResult.cpp: Added.
6935 (JSC::RegExpCachedResult::visitChildren):
6936 (JSC::RegExpCachedResult::lastResult):
6937 (JSC::RegExpCachedResult::setInput):
6938 - New methods, mark GC objects, lazily create the matches array, and record a user provided input (via assignment to RegExp.inupt).
6939 * runtime/RegExpCachedResult.h: Added.
6940 (RegExpCachedResult):
6942 (JSC::RegExpCachedResult::RegExpCachedResult):
6943 (JSC::RegExpCachedResult::record):
6944 (JSC::RegExpCachedResult::input):
6945 - Initialize the object, record the result of a RegExp match, access the stored input property.
6946 * runtime/RegExpConstructor.cpp:
6947 (JSC::RegExpConstructor::RegExpConstructor):
6948 - Initialize m_result/m_multiline properties.
6949 (JSC::RegExpConstructor::visitChildren):
6950 - Make sure the cached results (or lazy source for them) are marked.
6951 (JSC::RegExpConstructor::getBackref):
6952 (JSC::RegExpConstructor::getLastParen):
6953 (JSC::RegExpConstructor::getLeftContext):
6954 (JSC::RegExpConstructor::getRightContext):
6955 - Moved from RegExpConstructor, moved to RegExpCachedResult, and using new caching scheme.
6956 (JSC::regExpConstructorInput):
6957 (JSC::setRegExpConstructorInput):
6958 - Changed to use RegExpCachedResult.
6959 * runtime/RegExpConstructor.h:
6960 (JSC::RegExpConstructor::create):
6961 (RegExpConstructor):
6962 (JSC::RegExpConstructor::setMultiline):
6963 (JSC::RegExpConstructor::multiline):
6964 - Move multiline property onto the constructor object; it is not affected by the last match.
6965 (JSC::RegExpConstructor::setInput):
6966 (JSC::RegExpConstructor::input):
6967 - These defer to RegExpCachedResult.
6968 (JSC::RegExpConstructor::performMatch):
6969 * runtime/RegExpMatchesArray.cpp: Added.
6970 (JSC::RegExpMatchesArray::visitChildren):
6971 - Eeeep! added missing visitChildren!
6972 (JSC::RegExpMatchesArray::finishCreation):
6973 (JSC::RegExpMatchesArray::reifyAllProperties):
6974 (JSC::RegExpMatchesArray::reifyMatchProperty):
6975 - Moved from RegExpConstructor.cpp.
6976 (JSC::RegExpMatchesArray::leftContext):
6977 (JSC::RegExpMatchesArray::rightContext):
6978 - Since the match start/
6979 * runtime/RegExpMatchesArray.h:
6980 (RegExpMatchesArray):
6981 - Declare new methods & structure flags.
6982 * runtime/RegExpObject.cpp:
6983 (JSC::RegExpObject::match):
6984 - performMatch now requires the JSString input, to cache.
6985 * runtime/StringPrototype.cpp:
6986 (JSC::removeUsingRegExpSearch):
6987 (JSC::replaceUsingRegExpSearch):
6988 (JSC::stringProtoFuncMatch):
6989 (JSC::stringProtoFuncSearch):
6990 - performMatch now requires the JSString input, to cache.
6992 2012-03-23 Tony Chang <tony@chromium.org>
6994 [chromium] rename newwtf target back to wtf
6995 https://bugs.webkit.org/show_bug.cgi?id=82064
6997 Reviewed by Adam Barth.
6999 * JavaScriptCore.gyp/JavaScriptCore.gyp:
7001 2012-03-23 Mark Hahnenberg <mhahnenberg@apple.com>
7003 Simplify memory usage tracking in CopiedSpace
7004 https://bugs.webkit.org/show_bug.cgi?id=80705
7006 Reviewed by Filip Pizlo.
7008 * heap/CopiedAllocator.h:
7009 (CopiedAllocator): Rename currentUtilization to currentSize.
7010 (JSC::CopiedAllocator::currentCapacity):
7011 * heap/CopiedBlock.h:
7013 (JSC::CopiedBlock::payload): Move the implementation of payload() out of the class
7016 (JSC::CopiedBlock::size): Add new function to calculate the block's size.
7017 (JSC::CopiedBlock::capacity): Ditto for capacity.
7018 * heap/CopiedSpace.cpp:
7019 (JSC::CopiedSpace::CopiedSpace): Remove old bogus memory stats fields and add a new
7020 field for the water mark.
7021 (JSC::CopiedSpace::init):
7022 (JSC::CopiedSpace::tryAllocateSlowCase): When we fail to allocate from the current
7023 block, we need to update our current water mark with the size of the block.
7024 (JSC::CopiedSpace::tryAllocateOversize): When we allocate a new oversize block, we
7025 need to update our current water mark with the size of the used portion of the block.
7026 (JSC::CopiedSpace::tryReallocate): We don't need to update the water mark when
7027 reallocating because it will either get accounted for when we fill up the block later
7028 in the case of being able to reallocate in the current block or it will get picked up
7029 immediately because we'll have to get a new block.
7030 (JSC::CopiedSpace::tryReallocateOversize): We do, however, need to update in when
7031 realloc-ing an oversize block because we deallocate the old block and allocate a brand
7033 (JSC::CopiedSpace::doneFillingBlock): Update the water mark as blocks are returned to
7034 the CopiedSpace by the SlotVisitors.
7035 (JSC::CopiedSpace::doneCopying): Add in any pinned blocks to the water mark.
7036 (JSC::CopiedSpace::getFreshBlock): We use the Heap's new function to tell us whether or
7037 not we should collect now instead of doing the calculation ourself.
7038 (JSC::CopiedSpace::destroy):
7040 (JSC::CopiedSpace::size): Manually calculate the size of the CopiedSpace, similar to how
7042 (JSC::CopiedSpace::capacity): Ditto for capacity.
7043 * heap/CopiedSpace.h:
7044 (JSC::CopiedSpace::waterMark):
7046 * heap/CopiedSpaceInlineMethods.h:
7047 (JSC::CopiedSpace::startedCopying): Reset water mark to 0 when we start copying during a
7049 (JSC::CopiedSpace::allocateNewBlock):
7050 (JSC::CopiedSpace::fitsInBlock):
7051 (JSC::CopiedSpace::allocateFromBlock):
7053 (JSC::Heap::size): Incorporate size of CopiedSpace into the total size of the Heap.
7054 (JSC::Heap::capacity): Ditto for capacity.
7055 (JSC::Heap::collect):
7058 (JSC::Heap::shouldCollect): New function for other sub-parts of the Heap to use to
7059 determine whether they should initiate a collection or continue to allocate new blocks.
7061 (JSC::Heap::waterMark): Now is the sum of the water marks of the two sub-parts of the
7062 Heap (MarkedSpace and CopiedSpace).
7063 * heap/MarkedAllocator.cpp:
7064 (JSC::MarkedAllocator::allocateSlowCase): Changed to use the Heap's new shouldCollect() function.
7066 2012-03-23 Ryosuke Niwa <rniwa@webkit.org>
7068 BitVector::resizeOutOfLine doesn't memset when converting an inline buffer
7069 https://bugs.webkit.org/show_bug.cgi?id=82012
7071 Reviewed by Filip Pizlo.
7073 Initialize out-of-line buffers while extending an inline buffer. Also export symbols to be used in WebCore.
7075 * wtf/BitVector.cpp:
7076 (WTF::BitVector::resizeOutOfLine):
7081 2012-03-22 Michael Saboff <msaboff@apple.com>
7083 ExecutableAllocator::memoryPressureMultiplier() might can return NaN
7084 https://bugs.webkit.org/show_bug.cgi?id=82002
7086 Reviewed by Filip Pizlo.
7088 Guard against divide by zero and then make sure the return
7091 * jit/ExecutableAllocator.cpp:
7092 (JSC::ExecutableAllocator::memoryPressureMultiplier):
7093 * jit/ExecutableAllocatorFixedVMPool.cpp:
7094 (JSC::ExecutableAllocator::memoryPressureMultiplier):
7096 2012-03-22 Jessie Berlin <jberlin@apple.com>
7098 Windows build fix after r111778.
7100 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
7101 Don't include and try to build files owned by WTF.
7102 Also, let VS have its way with the vcproj in terms of file ordering.
7104 2012-03-22 Raphael Kubo da Costa <rakuco@FreeBSD.org>
7106 [CMake] Unreviewed build fix after r111778.
7108 * CMakeLists.txt: Move ${WTF_DIR} after ${JAVASCRIPTCORE_DIR} in
7109 the include paths so that the right config.h is used.
7111 2012-03-22 Tony Chang <tony@chromium.org>
7113 Unreviewed, fix chromium build after wtf move.
7115 Remove old wtf_config and wtf targets.
7117 * JavaScriptCore.gyp/JavaScriptCore.gyp:
7119 2012-03-22 Martin Robinson <mrobinson@igalia.com>
7121 Fixed the GTK+ WTF/JavaScriptCore build after r111778.
7123 * GNUmakefile.list.am: Removed an extra trailing backslash.
7125 2012-03-22 Mark Rowe <mrowe@apple.com>
7129 * Configurations/JavaScriptCore.xcconfig: Tell the linker to pull in all members from static libraries
7130 rather than only those that contain symbols that JavaScriptCore itself uses.
7131 * JavaScriptCore.xcodeproj/project.pbxproj: Remove some bogus settings that crept in to the Xcode project.
7133 2012-03-22 Filip Pizlo <fpizlo@apple.com>
7135 DFG NodeFlags has some duplicate code and naming issues
7136 https://bugs.webkit.org/show_bug.cgi?id=81975
7138 Reviewed by Gavin Barraclough.
7140 Removed most references to "ArithNodeFlags" since those are now just part
7141 of the node flags. Fixed some renaming goofs (EdgedAsNum is once again
7142 NodeUsedAsNum). Got rid of setArithNodeFlags() and mergeArithNodeFlags()
7143 because the former was never called and the latter did the same things as
7146 * dfg/DFGByteCodeParser.cpp:
7147 (JSC::DFG::ByteCodeParser::makeSafe):
7148 (JSC::DFG::ByteCodeParser::makeDivSafe):
7149 (JSC::DFG::ByteCodeParser::handleIntrinsic):
7151 (JSC::DFG::Graph::dump):
7153 (JSC::DFG::Node::arithNodeFlags):
7155 * dfg/DFGNodeFlags.cpp:
7156 (JSC::DFG::nodeFlagsAsString):
7157 * dfg/DFGNodeFlags.h:
7159 (JSC::DFG::nodeUsedAsNumber):
7160 * dfg/DFGPredictionPropagationPhase.cpp:
7161 (JSC::DFG::PredictionPropagationPhase::propagate):
7162 (JSC::DFG::PredictionPropagationPhase::mergeDefaultArithFlags):
7164 2012-03-22 Eric Seidel <eric@webkit.org>
7166 Actually move WTF files to their new home
7167 https://bugs.webkit.org/show_bug.cgi?id=81844
7169 Unreviewed. The details of the port-specific changes
7170 have been seen by contributors from those ports, but
7171 the whole 5MB change isn't very reviewable as-is.
7174 * GNUmakefile.list.am:
7175 * JSCTypedArrayStubs.h:
7176 * JavaScriptCore.gypi:
7177 * JavaScriptCore.xcodeproj/project.pbxproj:
7180 2012-03-22 Kevin Ollivier <kevino@theolliviers.com>
7182 [wx] Unreviewed. Adding Source/WTF to the build.
7186 2012-03-22 Gavin Barraclough <barraclough@apple.com>
7188 Add JSValue::isFunction
7189 https://bugs.webkit.org/show_bug.cgi?id=81935
7191 Reviewed by Geoff Garen.
7193 This would be useful in the WebCore bindings code.
7194 Also, remove asFunction, replace with jsCast<JSFunction*>.
7196 * API/JSContextRef.cpp:
7197 * debugger/Debugger.cpp:
7198 * debugger/DebuggerCallFrame.cpp:
7199 (JSC::DebuggerCallFrame::functionName):
7201 (JSC::DFG::Graph::valueOfFunctionConstant):
7202 * dfg/DFGOperations.cpp:
7203 * interpreter/CallFrame.cpp:
7204 (JSC::CallFrame::isInlineCallFrameSlow):
7205 * interpreter/Interpreter.cpp:
7206 (JSC::Interpreter::privateExecute):
7208 (JSC::DEFINE_STUB_FUNCTION):
7209 (JSC::jitCompileFor):
7211 * llint/LLIntSlowPaths.cpp:
7212 (JSC::LLInt::traceFunctionPrologue):
7213 (JSC::LLInt::LLINT_SLOW_PATH_DECL):
7214 (JSC::LLInt::setUpCall):
7215 * runtime/Arguments.h:
7216 (JSC::Arguments::finishCreation):
7217 * runtime/ArrayPrototype.cpp:
7218 (JSC::arrayProtoFuncFilter):
7219 (JSC::arrayProtoFuncMap):
7220 (JSC::arrayProtoFuncEvery):
7221 (JSC::arrayProtoFuncForEach):
7222 (JSC::arrayProtoFuncSome):
7223 (JSC::arrayProtoFuncReduce):
7224 (JSC::arrayProtoFuncReduceRight):
7225 * runtime/CommonSlowPaths.h:
7226 (JSC::CommonSlowPaths::arityCheckFor):
7227 * runtime/Executable.h:
7228 (JSC::FunctionExecutable::compileFor):
7229 (JSC::FunctionExecutable::compileOptimizedFor):
7230 * runtime/FunctionPrototype.cpp:
7231 (JSC::functionProtoFuncToString):
7232 * runtime/JSArray.cpp:
7233 (JSC::JSArray::sort):
7234 * runtime/JSFunction.cpp:
7235 (JSC::JSFunction::argumentsGetter):
7236 (JSC::JSFunction::callerGetter):
7237 (JSC::JSFunction::lengthGetter):
7238 * runtime/JSFunction.h:
7240 (JSC::asJSFunction):
7241 (JSC::JSValue::isFunction):
7242 * runtime/JSGlobalData.cpp:
7243 (WTF::Recompiler::operator()):
7244 (JSC::JSGlobalData::releaseExecutableMemory):
7245 * runtime/JSValue.h:
7246 * runtime/StringPrototype.cpp:
7247 (JSC::replaceUsingRegExpSearch):
7249 2012-03-21 Filip Pizlo <fpizlo@apple.com>
7251 DFG speculation on booleans should be rationalized
7252 https://bugs.webkit.org/show_bug.cgi?id=81840
7254 Reviewed by Gavin Barraclough.
7256 This removes isKnownBoolean() and replaces it with AbstractState-based
7257 optimization, and cleans up the control flow in code gen methods for
7258 Branch and LogicalNot. Also fixes a goof in Node::shouldSpeculateNumber,
7259 and removes isKnownNotBoolean() since that method appeared to be a
7260 helper used solely by 32_64's speculateBooleanOperation().
7262 This is performance-neutral.
7264 * dfg/DFGAbstractState.cpp:
7265 (JSC::DFG::AbstractState::execute):
7267 (JSC::DFG::Node::shouldSpeculateNumber):
7268 * dfg/DFGSpeculativeJIT.cpp:
7270 * dfg/DFGSpeculativeJIT.h:
7272 * dfg/DFGSpeculativeJIT32_64.cpp:
7273 (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
7274 (JSC::DFG::SpeculativeJIT::compileLogicalNot):
7275 (JSC::DFG::SpeculativeJIT::emitBranch):
7276 (JSC::DFG::SpeculativeJIT::compile):
7277 * dfg/DFGSpeculativeJIT64.cpp:
7278 (JSC::DFG::SpeculativeJIT::compileLogicalNot):
7279 (JSC::DFG::SpeculativeJIT::emitBranch):
7280 (JSC::DFG::SpeculativeJIT::compile):
7282 2012-03-21 Mark Rowe <mrowe@apple.com>
7286 * wtf/MetaAllocator.h:
7287 (MetaAllocator): Export the destructor.
7289 2012-03-21 Eric Seidel <eric@webkit.org>
7291 Fix remaining WTF includes in JavaScriptCore in preparation for moving WTF headers out of JavaScriptCore
7292 https://bugs.webkit.org/show_bug.cgi?id=81834
7294 Reviewed by Adam Barth.
7297 * os-win32/WinMain.cpp:
7298 * runtime/JSDateMath.cpp:
7299 * runtime/TimeoutChecker.cpp:
7301 * tools/CodeProfiling.cpp:
7303 2012-03-21 Eric Seidel <eric@webkit.org>
7305 WTF::MetaAllocator has a weak vtable (discovered when building wtf as a static library)
7306 https://bugs.webkit.org/show_bug.cgi?id=81838
7308 Reviewed by Geoffrey Garen.
7310 My understanding is that weak vtables happen when the compiler/linker cannot
7311 determine which compilation unit should constain the vtable. In this case
7312 because there were only pure virtual functions as well as an "inline"
7313 virtual destructor (thus the virtual destructor was defined in many compilation
7314 units). Since you can't actually "inline" a virtual function (it still has to
7315 bounce through the vtable), the "inline" on this virutal destructor doesn't
7316 actually help performance, and is only serving to confuse the compiler here.
7317 I've moved the destructor implementation to the .cpp file, thus making
7318 it clear to the compiler where the vtable should be stored, and solving the error.
7320 * wtf/MetaAllocator.cpp:
7321 (WTF::MetaAllocator::~MetaAllocator):
7323 * wtf/MetaAllocator.h:
7325 2012-03-20 Gavin Barraclough <barraclough@apple.com>
7327 RegExpMatchesArray should not copy the ovector
7328 https://bugs.webkit.org/show_bug.cgi?id=81742
7330 Reviewed by Michael Saboff.
7332 Currently, all RegExpMatchesArray object contain Vector<int, 32>, used to hold any sub-pattern results.
7333 This makes allocation/construction/destruction of these objects more expensive. Instead, just store the
7334 main match, and recreate the sub-pattern ranges only if necessary (these are often only used for grouping,
7335 and the results never accessed).
7336 If the main match (index 0) of the RegExpMatchesArray is accessed, reify that value alone.
7338 * dfg/DFGOperations.cpp:
7339 - RegExpObject match renamed back to test (test returns a bool).
7340 * runtime/RegExpConstructor.cpp:
7342 - Removed RegExpResult, RegExpMatchesArray constructor, destroy method.
7343 (JSC::RegExpMatchesArray::finishCreation):
7344 - Removed RegExpConstructorPrivate parameter.
7345 (JSC::RegExpMatchesArray::reifyAllProperties):
7346 - (Was fillArrayInstance) Reify all properties of the RegExpMatchesArray.
7347 If there are sub-pattern properties, the RegExp is re-run to generate their values.
7348 (JSC::RegExpMatchesArray::reifyMatchProperty):
7349 - Reify just the match (index 0) property of the RegExpMatchesArray.
7350 * runtime/RegExpConstructor.h:
7351 (RegExpConstructor):
7352 (JSC::RegExpConstructor::performMatch):
7353 - performMatch now returns a MatchResult, rather than using out-parameters.
7354 * runtime/RegExpMatchesArray.h:
7355 (JSC::RegExpMatchesArray::RegExpMatchesArray):
7356 - Moved from .cpp, stores the input/regExp/result to use when lazily reifying properties.
7357 (RegExpMatchesArray):
7358 (JSC::RegExpMatchesArray::create):
7359 - Now passed the input string matched against, the RegExp, and the MatchResult.
7360 (JSC::RegExpMatchesArray::reifyAllPropertiesIfNecessary):
7361 (JSC::RegExpMatchesArray::reifyMatchPropertyIfNecessary):
7362 - Helpers to conditionally reify properties.
7363 (JSC::RegExpMatchesArray::getOwnPropertySlot):
7364 (JSC::RegExpMatchesArray::getOwnPropertySlotByIndex):
7365 (JSC::RegExpMatchesArray::getOwnPropertyDescriptor):
7366 (JSC::RegExpMatchesArray::put):
7367 (JSC::RegExpMatchesArray::putByIndex):
7368 (JSC::RegExpMatchesArray::deleteProperty):
7369 (JSC::RegExpMatchesArray::deletePropertyByIndex):
7370 (JSC::RegExpMatchesArray::getOwnPropertyNames):
7371 (JSC::RegExpMatchesArray::defineOwnProperty):
7372 - Changed to use reifyAllPropertiesIfNecessary/reifyMatchPropertyIfNecessary
7373 (getOwnPropertySlotByIndex calls reifyMatchPropertyIfNecessary if index is 0).
7374 * runtime/RegExpObject.cpp:
7375 (JSC::RegExpObject::exec):
7376 (JSC::RegExpObject::match):
7377 - match now returns a MatchResult.
7378 * runtime/RegExpObject.h:
7379 (JSC::MatchResult::MatchResult):
7380 - Added the result of a match is a start & end tuple.
7381 (JSC::MatchResult::failed):
7382 - A failure is indicated by (notFound, 0).
7383 (JSC::MatchResult::operator bool):
7384 - Evaluates to false if the match failed.
7385 (JSC::MatchResult::empty):
7386 - Evaluates to true if the match succeeded with length 0.
7387 (JSC::RegExpObject::test):
7388 - Now returns a bool.
7389 * runtime/RegExpPrototype.cpp:
7390 (JSC::regExpProtoFuncTest):
7391 - RegExpObject match renamed back to test (test returns a bool).
7392 * runtime/StringPrototype.cpp:
7393 (JSC::removeUsingRegExpSearch):
7394 (JSC::replaceUsingRegExpSearch):
7395 (JSC::stringProtoFuncMatch):
7396 (JSC::stringProtoFuncSearch):
7397 - performMatch now returns a MatchResult, rather than using out-parameters.
7399 2012-03-21 Hojong Han <hojong.han@samsung.com>
7401 Fix out of memory by allowing overcommit
7402 https://bugs.webkit.org/show_bug.cgi?id=81743
7404 Reviewed by Geoffrey Garen.
7406 Garbage collection is not triggered and new blocks are added
7407 because overcommit is allowed by MAP_NORESERVE flag when high water mark is big enough.
7409 * wtf/OSAllocatorPosix.cpp:
7410 (WTF::OSAllocator::reserveAndCommit):
7412 2012-03-21 Jessie Berlin <jberlin@apple.com>
7414 More Windows build fixing.
7416 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
7417 Fix the order of the include directories to look in include/private first before looking
7418 in include/private/JavaScriptCore.
7419 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGO.vsprops:
7420 Look in the Production output directory (where the wtf headers will be). This is the same
7421 thing that is done for jsc and testRegExp in ReleasePGO.
7423 2012-03-21 Jessie Berlin <jberlin@apple.com>
7425 WTF headers should be in $(ConfigurationBuildDir)\include\private\wtf, not
7426 $(ConfigurationBuildDir)\include\private\JavaScriptCore\wtf.
7427 https://bugs.webkit.org/show_bug.cgi?id=81739
7429 Reviewed by Dan Bernstein.
7431 * JavaScriptCore.vcproj/jsc/jsc.vcproj:
7432 Look for AtomicString.cpp, StringBuilder.cpp, StringImpl.cpp, and WTFString.cpp in the wtf
7433 subdirectory of the build output, not the JavaScriptCore/wtf subdirectory.
7434 * JavaScriptCore.vcproj/testRegExp/testRegExp.vcproj:
7437 * JavaScriptCore.vcproj/testRegExp/testRegExpReleasePGO.vsprops:
7438 Get the headers for those 4 files from the wtf subdirectory of the build output, not the
7439 JavaScriptCore/wtf subdirectory.
7440 * JavaScriptCore.vcproj/jsc/jscReleasePGO.vsprops:
7443 2012-03-20 Eric Seidel <eric@webkit.org>
7445 Move wtf/Platform.h from JavaScriptCore to Source/WTF/wtf
7446 https://bugs.webkit.org/show_bug.cgi?id=80911
7448 Reviewed by Adam Barth.
7450 Update the various build systems to depend on Source/WTF headers
7451 as well as remove references to Platform.h (since it's now moved).
7454 * JavaScriptCore.pri:
7455 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
7456 * JavaScriptCore.xcodeproj/project.pbxproj:
7457 * wtf/CMakeLists.txt:
7459 2012-03-20 Filip Pizlo <fpizlo@apple.com>
7461 op_mod fails on many interesting corner cases
7462 https://bugs.webkit.org/show_bug.cgi?id=81648
7464 Reviewed by Oliver Hunt.
7466 Removed most strength reduction for op_mod, and fixed the integer handling
7467 to do the right thing for corner cases. Oddly, this revealed bugs in OSR,
7468 which this patch also fixes.
7470 This patch is performance neutral on all of the major benchmarks we track.
7472 * dfg/DFGOperations.cpp:
7473 * dfg/DFGOperations.h:
7474 * dfg/DFGSpeculativeJIT.cpp:
7476 (JSC::DFG::SpeculativeJIT::compileSoftModulo):
7477 (JSC::DFG::SpeculativeJIT::compileArithMod):
7480 * jit/JITArithmetic.cpp:
7482 (JSC::JIT::emit_op_mod):
7483 (JSC::JIT::emitSlow_op_mod):
7484 * jit/JITArithmetic32_64.cpp:
7485 (JSC::JIT::emit_op_mod):
7486 (JSC::JIT::emitSlow_op_mod):
7487 * jit/JITOpcodes32_64.cpp:
7488 (JSC::JIT::privateCompileCTIMachineTrampolines):
7491 (TrampolineStructure):
7492 (JSC::JITThunks::ctiNativeConstruct):
7493 * llint/LowLevelInterpreter64.asm:
7495 * wtf/SimpleStats.h:
7496 (WTF::SimpleStats::variance):
7498 2012-03-20 Steve Falkenburg <sfalken@apple.com>
7500 Windows (make based) build fix.
7501 <rdar://problem/11069015>
7503 * JavaScriptCore.vcproj/JavaScriptCore.make: devenv /rebuild doesn't work with JavaScriptCore.vcproj. Use /clean and /build instead.
7505 2012-03-20 Steve Falkenburg <sfalken@apple.com>
7507 Move WTF-related Windows project files out of JavaScriptCore
7508 https://bugs.webkit.org/show_bug.cgi?id=80680
7510 This change only moves the vcproj and related files from JavaScriptCore/JavaScriptCore.vcproj/WTF.
7511 It does not move any source code. This is in preparation for the WTF source move out of
7514 Reviewed by Jessie Berlin.
7516 * JavaScriptCore.vcproj/JavaScriptCore.sln:
7517 * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:
7518 * JavaScriptCore.vcproj/WTF: Removed.
7519 * JavaScriptCore.vcproj/WTF/WTF.vcproj: Removed.
7520 * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops: Removed.
7521 * JavaScriptCore.vcproj/WTF/WTFDebug.vsprops: Removed.
7522 * JavaScriptCore.vcproj/WTF/WTFDebugAll.vsprops: Removed.
7523 * JavaScriptCore.vcproj/WTF/WTFDebugCairoCFLite.vsprops: Removed.
7524 * JavaScriptCore.vcproj/WTF/WTFGenerated.make: Removed.
7525 * JavaScriptCore.vcproj/WTF/WTFGenerated.vcproj: Removed.
7526 * JavaScriptCore.vcproj/WTF/WTFGeneratedCommon.vsprops: Removed.
7527 * JavaScriptCore.vcproj/WTF/WTFGeneratedDebug.vsprops: Removed.
7528 * JavaScriptCore.vcproj/WTF/WTFGeneratedDebugAll.vsprops: Removed.
7529 * JavaScriptCore.vcproj/WTF/WTFGeneratedDebugCairoCFLite.vsprops: Removed.
7530 * JavaScriptCore.vcproj/WTF/WTFGeneratedProduction.vsprops: Removed.
7531 * JavaScriptCore.vcproj/WTF/WTFGeneratedRelease.vsprops: Removed.
7532 * JavaScriptCore.vcproj/WTF/WTFGeneratedReleaseCairoCFLite.vsprops: Removed.
7533 * JavaScriptCore.vcproj/WTF/WTFPostBuild.cmd: Removed.
7534 * JavaScriptCore.vcproj/WTF/WTFPreBuild.cmd: Removed.
7535 * JavaScriptCore.vcproj/WTF/WTFProduction.vsprops: Removed.
7536 * JavaScriptCore.vcproj/WTF/WTFRelease.vsprops: Removed.
7537 * JavaScriptCore.vcproj/WTF/WTFReleaseCairoCFLite.vsprops: Removed.
7538 * JavaScriptCore.vcproj/WTF/build-generated-files.sh: Removed.
7539 * JavaScriptCore.vcproj/WTF/copy-files.cmd: Removed.
7540 * JavaScriptCore.vcproj/WTF/work-around-vs-dependency-tracking-bugs.py: Removed.
7542 2012-03-20 Benjamin Poulain <bpoulain@apple.com>
7544 Cache the type string of JavaScript object
7545 https://bugs.webkit.org/show_bug.cgi?id=81446
7547 Reviewed by Geoffrey Garen.
7549 Instead of creating the JSString every time, we create
7550 lazily the strings in JSGlobalData.
7552 This avoid the construction of the StringImpl and of the JSString,
7553 which gives some performance improvements.
7555 * runtime/CommonIdentifiers.h:
7556 * runtime/JSValue.cpp:
7557 (JSC::JSValue::toStringSlowCase):
7558 * runtime/Operations.cpp:
7559 (JSC::jsTypeStringForValue):
7560 * runtime/SmallStrings.cpp:
7561 (JSC::SmallStrings::SmallStrings):
7562 (JSC::SmallStrings::finalizeSmallStrings):
7563 (JSC::SmallStrings::initialize):
7565 * runtime/SmallStrings.h:
7568 2012-03-20 Oliver Hunt <oliver@apple.com>
7570 Allow LLINT to work even when executable allocation fails.
7571 https://bugs.webkit.org/show_bug.cgi?id=81693
7573 Reviewed by Gavin Barraclough.
7575 Don't crash if executable allocation fails if we can fall back on LLINT
7577 * jit/ExecutableAllocatorFixedVMPool.cpp:
7578 (JSC::FixedVMPoolExecutableAllocator::FixedVMPoolExecutableAllocator):
7579 * wtf/OSAllocatorPosix.cpp:
7580 (WTF::OSAllocator::reserveAndCommit):
7582 2012-03-20 Csaba Osztrogonác <ossy@webkit.org>
7584 Division optimizations fail to infer cases of truncated division and mishandle -2147483648/-1
7585 https://bugs.webkit.org/show_bug.cgi?id=81428
7587 32 bit buildfix after r111355.
7589 2147483648 (2^31) isn't valid int literal in ISO C90, because 2147483647 (2^31-1) is the biggest int.
7590 The smallest int is -2147483648 (-2^31) == -2147483647 - 1 == -INT32_MAX-1 == INT32_MIN (stdint.h).
7592 Reviewed by Zoltan Herczeg.
7594 * dfg/DFGSpeculativeJIT.cpp:
7595 (JSC::DFG::SpeculativeJIT::compileIntegerArithDivForX86):
7597 2012-03-19 Jochen Eisinger <jochen@chromium.org>
7599 Split WTFReportBacktrace into WTFReportBacktrace and WTFPrintBacktrace
7600 https://bugs.webkit.org/show_bug.cgi?id=80983
7602 Reviewed by Darin Adler.
7604 This allows printing a backtrace acquired by an earlier WTFGetBacktrace
7605 call which is useful for local debugging.
7607 * wtf/Assertions.cpp:
7610 2012-03-19 Benjamin Poulain <benjamin@webkit.org>
7612 Do not copy the script source in the SourceProvider, just reference the existing string
7613 https://bugs.webkit.org/show_bug.cgi?id=81466
7615 Reviewed by Geoffrey Garen.
7617 * parser/SourceCode.h: Remove the unused, and incorrect, function data().
7618 * parser/SourceProvider.h: Add OVERRIDE for clarity.
7620 2012-03-19 Filip Pizlo <fpizlo@apple.com>
7622 Division optimizations fail to infer cases of truncated division and
7623 mishandle -2147483648/-1
7624 https://bugs.webkit.org/show_bug.cgi?id=81428
7625 <rdar://problem/11067382>
7627 Reviewed by Oliver Hunt.
7629 If you're a division over integers and you're only used as an integer, then you're
7630 an integer division and remainder checks become unnecessary. If you're dividing
7631 -2147483648 by -1, don't crash.
7633 * assembler/MacroAssemblerX86Common.h:
7634 (MacroAssemblerX86Common):
7635 (JSC::MacroAssemblerX86Common::add32):
7636 * dfg/DFGSpeculativeJIT.cpp:
7638 (JSC::DFG::SpeculativeJIT::compileIntegerArithDivForX86):
7639 * dfg/DFGSpeculativeJIT.h:
7641 * dfg/DFGSpeculativeJIT32_64.cpp:
7642 (JSC::DFG::SpeculativeJIT::compile):
7643 * dfg/DFGSpeculativeJIT64.cpp:
7644 (JSC::DFG::SpeculativeJIT::compile):
7645 * llint/LowLevelInterpreter64.asm:
7647 2012-03-19 Benjamin Poulain <bpoulain@apple.com>
7649 Simplify SmallStrings
7650 https://bugs.webkit.org/show_bug.cgi?id=81445
7652 Reviewed by Gavin Barraclough.
7654 SmallStrings had two methods that should not be public: count() and clear().
7656 The method clear() is effectively replaced by finalizeSmallStrings(). The body
7657 of the method was moved to the constructor since the code is obvious.
7659 The method count() is unused.
7661 * runtime/SmallStrings.cpp:
7662 (JSC::SmallStrings::SmallStrings):
7663 * runtime/SmallStrings.h:
7666 2012-03-19 Filip Pizlo <fpizlo@apple.com>
7668 DFG can no longer compile V8-v4/regexp in debug mode
7669 https://bugs.webkit.org/show_bug.cgi?id=81592
7671 Reviewed by Gavin Barraclough.
7673 * dfg/DFGSpeculativeJIT32_64.cpp:
7674 (JSC::DFG::SpeculativeJIT::compile):
7675 * dfg/DFGSpeculativeJIT64.cpp:
7676 (JSC::DFG::SpeculativeJIT::compile):
7678 2012-03-19 Filip Pizlo <fpizlo@apple.com>
7680 Prediction propagation for UInt32ToNumber incorrectly assumes that outs outcome does not
7681 change throughout the fixpoint
7682 https://bugs.webkit.org/show_bug.cgi?id=81583
7684 Reviewed by Michael Saboff.
7686 * dfg/DFGPredictionPropagationPhase.cpp:
7687 (JSC::DFG::PredictionPropagationPhase::propagate):
7689 2012-03-19 Filip Pizlo <fpizlo@apple.com>
7691 GC should not attempt to clear LLInt instruction inline caches for code blocks that are in
7692 the process of being generated
7693 https://bugs.webkit.org/show_bug.cgi?id=81565
7695 Reviewed by Oliver Hunt.
7697 * bytecode/CodeBlock.cpp:
7698 (JSC::CodeBlock::finalizeUnconditionally):
7700 2012-03-19 Eric Seidel <eric@webkit.org>
7702 Fix WTF header include discipline in Chromium WebKit
7703 https://bugs.webkit.org/show_bug.cgi?id=81281
7705 Reviewed by James Robinson.
7707 * JavaScriptCore.gyp/JavaScriptCore.gyp:
7708 * wtf/unicode/icu/CollatorICU.cpp:
7710 2012-03-19 Filip Pizlo <fpizlo@apple.com>
7712 DFG NodeUse should be called Edge and NodeReferenceBlob should be called AdjacencyList
7713 https://bugs.webkit.org/show_bug.cgi?id=81556
7715 Rubber stamped by Gavin Barraclough.
7717 * GNUmakefile.list.am:
7718 * JavaScriptCore.xcodeproj/project.pbxproj:
7719 * dfg/DFGAbstractState.h:
7720 (JSC::DFG::AbstractState::forNode):
7721 * dfg/DFGAdjacencyList.h: Copied from Source/JavaScriptCore/dfg/DFGNodeReferenceBlob.h.
7722 (JSC::DFG::AdjacencyList::AdjacencyList):
7723 (JSC::DFG::AdjacencyList::child):
7724 (JSC::DFG::AdjacencyList::setChild):
7725 (JSC::DFG::AdjacencyList::child1):
7726 (JSC::DFG::AdjacencyList::child2):
7727 (JSC::DFG::AdjacencyList::child3):
7728 (JSC::DFG::AdjacencyList::setChild1):
7729 (JSC::DFG::AdjacencyList::setChild2):
7730 (JSC::DFG::AdjacencyList::setChild3):
7731 (JSC::DFG::AdjacencyList::child1Unchecked):
7732 (JSC::DFG::AdjacencyList::initialize):
7734 * dfg/DFGByteCodeParser.cpp:
7735 (JSC::DFG::ByteCodeParser::addVarArgChild):
7736 (JSC::DFG::ByteCodeParser::processPhiStack):
7737 * dfg/DFGCSEPhase.cpp:
7738 (JSC::DFG::CSEPhase::canonicalize):
7739 (JSC::DFG::CSEPhase::performSubstitution):
7740 * dfg/DFGEdge.h: Copied from Source/JavaScriptCore/dfg/DFGNodeUse.h.
7742 (JSC::DFG::Edge::Edge):
7743 (JSC::DFG::Edge::operator==):
7744 (JSC::DFG::Edge::operator!=):
7746 (JSC::DFG::operator==):
7747 (JSC::DFG::operator!=):
7749 (JSC::DFG::Graph::operator[]):
7750 (JSC::DFG::Graph::at):
7751 (JSC::DFG::Graph::ref):
7752 (JSC::DFG::Graph::deref):
7753 (JSC::DFG::Graph::clearAndDerefChild1):
7754 (JSC::DFG::Graph::clearAndDerefChild2):
7755 (JSC::DFG::Graph::clearAndDerefChild3):
7757 * dfg/DFGJITCompiler.h:
7758 (JSC::DFG::JITCompiler::getPrediction):
7760 (JSC::DFG::Node::Node):
7761 (JSC::DFG::Node::child1):
7762 (JSC::DFG::Node::child1Unchecked):
7763 (JSC::DFG::Node::child2):
7764 (JSC::DFG::Node::child3):
7766 * dfg/DFGNodeFlags.cpp:
7767 (JSC::DFG::arithNodeFlagsAsString):
7768 * dfg/DFGNodeFlags.h:
7770 (JSC::DFG::nodeUsedAsNumber):
7771 * dfg/DFGNodeReferenceBlob.h: Removed.
7772 * dfg/DFGNodeUse.h: Removed.
7773 * dfg/DFGPredictionPropagationPhase.cpp:
7774 (JSC::DFG::PredictionPropagationPhase::propagate):
7775 (JSC::DFG::PredictionPropagationPhase::mergeDefaultArithFlags):
7776 (JSC::DFG::PredictionPropagationPhase::vote):
7777 (JSC::DFG::PredictionPropagationPhase::fixupNode):
7778 * dfg/DFGScoreBoard.h:
7779 (JSC::DFG::ScoreBoard::use):
7780 * dfg/DFGSpeculativeJIT.cpp:
7781 (JSC::DFG::SpeculativeJIT::useChildren):
7782 (JSC::DFG::SpeculativeJIT::writeBarrier):
7783 (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
7784 (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
7785 (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
7786 (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant):
7787 * dfg/DFGSpeculativeJIT.h:
7788 (JSC::DFG::SpeculativeJIT::at):
7789 (JSC::DFG::SpeculativeJIT::canReuse):
7790 (JSC::DFG::SpeculativeJIT::use):
7792 (JSC::DFG::SpeculativeJIT::speculationCheck):
7793 (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
7794 (JSC::DFG::IntegerOperand::IntegerOperand):
7795 (JSC::DFG::DoubleOperand::DoubleOperand):
7796 (JSC::DFG::JSValueOperand::JSValueOperand):
7797 (JSC::DFG::StorageOperand::StorageOperand):
7798 (JSC::DFG::SpeculateIntegerOperand::SpeculateIntegerOperand):
7799 (JSC::DFG::SpeculateStrictInt32Operand::SpeculateStrictInt32Operand):
7800 (JSC::DFG::SpeculateDoubleOperand::SpeculateDoubleOperand):
7801 (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
7802 (JSC::DFG::SpeculateBooleanOperand::SpeculateBooleanOperand):
7803 * dfg/DFGSpeculativeJIT32_64.cpp:
7804 (JSC::DFG::SpeculativeJIT::cachedPutById):
7805 (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
7806 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
7807 (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
7808 (JSC::DFG::SpeculativeJIT::emitCall):
7809 (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
7810 (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
7811 * dfg/DFGSpeculativeJIT64.cpp:
7812 (JSC::DFG::SpeculativeJIT::cachedPutById):
7813 (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
7814 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
7815 (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
7816 (JSC::DFG::SpeculativeJIT::emitCall):
7817 (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
7818 (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
7820 2012-03-19 Gavin Barraclough <barraclough@apple.com>
7822 Object.freeze broken on latest Nightly
7823 https://bugs.webkit.org/show_bug.cgi?id=80577
7825 Reviewed by Oliver Hunt.
7827 * runtime/Arguments.cpp:
7828 (JSC::Arguments::defineOwnProperty):
7829 - defineOwnProperty was checking for correct behaviour, provided that length/callee hadn't
7830 been overrridden. instead, just reify length/callee & rely on JSObject::defineOwnProperty.
7831 * runtime/JSFunction.cpp:
7832 (JSC::JSFunction::defineOwnProperty):
7833 - for arguments/caller/length properties, defineOwnProperty was incorrectly asserting that
7834 the object must be extensible; this is incorrect since these properties should already exist
7835 on the object. In addition, it was asserting that the arguments/caller values must match the
7836 corresponding magic data properties, but for strict mode function this is incorrect. Instead,
7837 just reify the arguments/caller accessor & defer to JSObject::defineOwnProperty.
7839 2012-03-19 Filip Pizlo <fpizlo@apple.com>
7841 LLInt get_by_pname slow path incorrectly assumes that the operands are not constants
7842 https://bugs.webkit.org/show_bug.cgi?id=81559
7844 Reviewed by Michael Saboff.
7846 * llint/LLIntSlowPaths.cpp:
7847 (JSC::LLInt::LLINT_SLOW_PATH_DECL):
7849 2012-03-19 Yong Li <yoli@rim.com>
7851 [BlackBerry] Implement OSAllocator::commit/decommit in the correct way
7852 https://bugs.webkit.org/show_bug.cgi?id=77013
7854 We should use mmap(PROT_NONE, MAP_LAZY) instead of posix_madvise() to
7855 implement memory decommitting for QNX.
7857 Reviewed by Rob Buis.
7859 * wtf/OSAllocatorPosix.cpp:
7860 (WTF::OSAllocator::reserveUncommitted):
7861 (WTF::OSAllocator::commit):
7862 (WTF::OSAllocator::decommit):
7864 2012-03-19 Gavin Barraclough <barraclough@apple.com>
7866 Unreviewed - revent a couple of files accidentally committed.
7868 * runtime/Arguments.cpp:
7869 (JSC::Arguments::defineOwnProperty):
7870 * runtime/JSFunction.cpp:
7871 (JSC::JSFunction::defineOwnProperty):
7873 2012-03-19 Jessie Berlin <jberlin@apple.com>
7875 Another Windows build fix after r111129.
7877 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
7879 2012-03-19 Raphael Kubo da Costa <rakuco@FreeBSD.org>
7881 Cross-platform processor core counter: fix build on FreeBSD.
7882 https://bugs.webkit.org/show_bug.cgi?id=81482
7884 Reviewed by Zoltan Herczeg.
7886 The documentation of sysctl(3) shows that <sys/types.h> should be
7887 included before <sys/sysctl.h> (sys/types.h tends to be the first
7888 included header in general).
7890 This should fix the build on FreeBSD and other systems where
7891 sysctl.h really depends on types defined in types.h.
7893 * wtf/NumberOfCores.cpp:
7895 2012-03-19 Jessie Berlin <jberlin@apple.com>
7897 Windows build fix after r111129.
7899 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
7901 2012-03-19 Gavin Barraclough <barraclough@apple.com>
7903 JSCallbackFunction::toStringCallback/valueOfCallback do not handle 0 return value from convertToType
7904 https://bugs.webkit.org/show_bug.cgi?id=81468 <rdar://problem/11034745>
7906 Reviewed by Oliver Hunt.
7908 The API specifies that convertToType may opt not to handle a conversion:
7909 "@result The objects's converted value, or NULL if the object was not converted."
7910 In which case, it would propagate first up the JSClass hierarchy, calling its superclass's
7911 conversion functions, and failing that call the JSObject::defaultValue function.
7913 Unfortunately this behaviour was removed in bug#69677/bug#69858, and instead we now rely on
7914 the toStringCallback/valueOfCallback function introduced in bug#69156. Even after a fix in
7915 bug#73368, these will return the result from the first convertToType they find, regardless
7916 of whether this result is null, and if no convertToType method is found in the api class
7917 hierarchy (possible if toStringCallback/valueOfCallback was accessed off the prototype
7918 chain), they will also return a null pointer. This is unsafe.
7920 It would be easy to make the approach based around toStringCallback/valueOfCallback continue
7921 to walk the api class hierarchy, but making the fallback to defaultValue would be problematic
7922 (since defaultValue calls toStringCallback/valueOfCallback, this would infinitely recurse).
7923 Making the fallback work with toString/valueOf methods attached to api objects is probably
7924 not the right thing to do – instead, we should just implement the defaultValue trap for api
7927 In addition, this bug highlights that fact that JSCallbackFunction::call will allow a hard
7928 null to be returned from C to JavaScript - this is not okay. Handle with an exception.
7930 * API/JSCallbackFunction.cpp:
7931 (JSC::JSCallbackFunction::call):
7932 - Should be null checking the return value.
7934 - Remove toStringCallback/valueOfCallback.
7935 * API/JSCallbackFunction.h:
7936 (JSCallbackFunction):
7937 - Remove toStringCallback/valueOfCallback.
7938 * API/JSCallbackObject.h:
7940 - Add defaultValue mthods to JSCallbackObject.
7941 * API/JSCallbackObjectFunctions.h:
7942 (JSC::::defaultValue):
7943 - Add defaultValue mthods to JSCallbackObject.
7944 * API/JSClassRef.cpp:
7945 (OpaqueJSClass::prototype):
7946 - Remove toStringCallback/valueOfCallback.
7947 * API/tests/testapi.js:
7948 - Revert this test, now we no longer artificially introduce a toString method onto the api object.
7950 2012-03-18 Raphael Kubo da Costa <rakuco@FreeBSD.org>
7952 [EFL] Include ICU_INCLUDE_DIRS when building.
7953 https://bugs.webkit.org/show_bug.cgi?id=81483
7955 Reviewed by Daniel Bates.
7957 So far, only the ICU libraries were being included when building
7958 JavaScriptCore, however the include path is also needed, otherwise the
7959 build will fail when ICU is installed into a non-standard location.
7961 * PlatformEfl.cmake: Include ${ICU_INCLUDE_DIRS}.
7963 2012-03-17 Gavin Barraclough <barraclough@apple.com>
7965 Strength reduction, RegExp.exec -> RegExp.test
7966 https://bugs.webkit.org/show_bug.cgi?id=81459
7968 Reviewed by Sam Weinig.
7970 RegExp.prototype.exec & RegExp.prototype.test can both be used to test a regular
7971 expression for a match against a string - however exec is more expensive, since
7972 it allocates a matches array object. In cases where the result is consumed in a
7973 boolean context the allocation of the matches array can be trivially elided.
7978 for (i =0; i < 10000000; ++i)
7983 This is a 2.5x speedup on this example microbenchmark loop.
7985 In a more advanced form of this optimization, we may be able to avoid allocating
7986 the array where access to the array can be observed.
7988 * create_hash_table:
7989 * dfg/DFGAbstractState.cpp:
7990 (JSC::DFG::AbstractState::execute):
7991 * dfg/DFGByteCodeParser.cpp:
7992 (JSC::DFG::ByteCodeParser::handleIntrinsic):
7994 (JSC::DFG::Node::hasHeapPrediction):
7995 * dfg/DFGNodeType.h:
7997 * dfg/DFGOperations.cpp:
7998 * dfg/DFGOperations.h:
7999 * dfg/DFGPredictionPropagationPhase.cpp:
8000 (JSC::DFG::PredictionPropagationPhase::propagate):
8001 * dfg/DFGSpeculativeJIT.cpp:
8002 (JSC::DFG::SpeculativeJIT::compileRegExpExec):
8004 * dfg/DFGSpeculativeJIT.h:
8005 (JSC::DFG::SpeculativeJIT::callOperation):
8006 * dfg/DFGSpeculativeJIT32_64.cpp:
8007 (JSC::DFG::SpeculativeJIT::compile):
8008 * dfg/DFGSpeculativeJIT64.cpp:
8009 (JSC::DFG::SpeculativeJIT::compile):
8011 (GlobalObject::addConstructableFunction):
8012 * runtime/Intrinsic.h:
8013 * runtime/JSFunction.cpp:
8014 (JSC::JSFunction::create):
8016 * runtime/JSFunction.h:
8018 * runtime/Lookup.cpp:
8019 (JSC::setUpStaticFunctionSlot):
8020 * runtime/RegExpObject.cpp:
8021 (JSC::RegExpObject::exec):
8022 (JSC::RegExpObject::match):
8023 * runtime/RegExpObject.h:
8025 * runtime/RegExpPrototype.cpp:
8026 (JSC::regExpProtoFuncTest):
8027 (JSC::regExpProtoFuncExec):
8029 2012-03-16 Michael Saboff <msaboff@apple.com>
8031 Improve diagnostic benefit of JSGlobalData::m_isInitializingObject
8032 https://bugs.webkit.org/show_bug.cgi?id=81244
8034 Rubber stamped by Filip Pizlo.
8036 Changed type and name of JSGlobalData::m_isInitializingObject to
8037 ClassInfo* and m_initializingObjectClass.
8038 Changed JSGlobalData::setInitializingObject to
8039 JSGlobalData::setInitializingObjectClass. This pointer can be used within
8040 the debugger to determine what type of object is being initialized.
8043 (JSC::JSCell::finishCreation):
8044 (JSC::allocateCell):
8045 * runtime/JSGlobalData.cpp:
8046 (JSC::JSGlobalData::JSGlobalData):
8047 * runtime/JSGlobalData.h:
8049 (JSC::JSGlobalData::isInitializingObject):
8050 (JSC::JSGlobalData::setInitializingObjectClass):
8051 * runtime/Structure.h:
8052 (JSC::JSCell::finishCreation):
8054 2012-03-16 Mark Rowe <mrowe@apple.com>
8056 Build fix. Do not preserve owner and group information when installing the WTF headers.
8058 * JavaScriptCore.xcodeproj/project.pbxproj:
8060 2012-03-15 David Dorwin <ddorwin@chromium.org>
8062 Make the array pointer parameters in the Typed Array create() methods const.
8063 https://bugs.webkit.org/show_bug.cgi?id=81147
8065 Reviewed by Kenneth Russell.
8067 This allows const arrays to be passed to these methods.
8068 They use PassRefPtr<Subclass> create(), which already has a const parameter.
8072 (WTF::Int16Array::create):
8075 (WTF::Int32Array::create):
8078 (WTF::Int8Array::create):
8079 * wtf/Uint16Array.h:
8081 (WTF::Uint16Array::create):
8082 * wtf/Uint32Array.h:
8084 (WTF::Uint32Array::create):
8087 (WTF::Uint8Array::create):
8088 * wtf/Uint8ClampedArray.h:
8089 (Uint8ClampedArray):
8090 (WTF::Uint8ClampedArray::create):
8092 2012-03-15 Myles Maxfield <mmaxfield@google.com>
8094 CopiedSpace::tryAllocateOversize assumes system page size
8095 https://bugs.webkit.org/show_bug.cgi?id=80615
8097 Reviewed by Geoffrey Garen.
8099 * heap/CopiedSpace.cpp:
8100 (JSC::CopiedSpace::tryAllocateOversize):
8101 * heap/CopiedSpace.h:
8103 * heap/CopiedSpaceInlineMethods.h:
8104 (JSC::CopiedSpace::oversizeBlockFor):
8105 * wtf/BumpPointerAllocator.h:
8106 (WTF::BumpPointerPool::create):
8107 * wtf/StdLibExtras.h:
8108 (WTF::roundUpToMultipleOf):
8110 2012-03-15 Mark Hahnenberg <mhahnenberg@apple.com>
8112 Fixing Windows build breakage
8114 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
8116 2012-03-15 Patrick Gansterer <paroga@webkit.org>
8118 [EFL] Make zlib a general build requirement
8119 https://bugs.webkit.org/show_bug.cgi?id=80153
8121 Reviewed by Hajime Morita.
8123 After r109538 WebSocket module needs zlib to support deflate-frame extension.
8127 2012-03-15 Benjamin Poulain <bpoulain@apple.com>
8129 NumericStrings should be inlined
8130 https://bugs.webkit.org/show_bug.cgi?id=81183
8132 Reviewed by Gavin Barraclough.
8134 NumericStrings is not always inlined. When it is not, the class is not faster
8135 than using UString::number() directly.
8137 * runtime/NumericStrings.h:
8138 (JSC::NumericStrings::add):
8139 (JSC::NumericStrings::lookupSmallString):
8141 2012-03-15 Andras Becsi <andras.becsi@nokia.com>
8143 Fix ARM build after r110792.
8145 Unreviewed build fix.
8147 * jit/ExecutableAllocator.h:
8148 (JSC::ExecutableAllocator::cacheFlush):
8149 Remove superfluous curly brackets.
8151 2012-03-15 Gavin Barraclough <barraclough@apple.com>
8153 ARMv7: prefer vmov(gpr,gpr->double) over vmov(gpr->single)
8154 https://bugs.webkit.org/show_bug.cgi?id=81256
8156 Reviewed by Oliver Hunt.
8158 This is a 0.5% sunspider progression.
8160 * assembler/MacroAssemblerARMv7.h:
8161 (JSC::MacroAssemblerARMv7::convertInt32ToDouble):
8162 - switch which form of vmov we use.
8164 2012-03-15 YoungTaeck Song <youngtaeck.song@samsung.com>
8166 [EFL] Add OwnPtr specialization for Ecore_Timer.
8167 https://bugs.webkit.org/show_bug.cgi?id=80119
8169 Reviewed by Hajime Morita.
8171 Add an overload for deleteOwnedPtr(Ecore_Timer*) on EFL port.
8173 * wtf/OwnPtrCommon.h:
8175 * wtf/efl/OwnPtrEfl.cpp:
8176 (WTF::deleteOwnedPtr):
8179 2012-03-15 Hojong Han <hojong.han@samsung.com>
8181 Linux has madvise enough to support OSAllocator::commit/decommit
8182 https://bugs.webkit.org/show_bug.cgi?id=80505
8184 Reviewed by Geoffrey Garen.
8186 * wtf/OSAllocatorPosix.cpp:
8187 (WTF::OSAllocator::reserveUncommitted):
8188 (WTF::OSAllocator::commit):
8189 (WTF::OSAllocator::decommit):
8191 2012-03-15 Steve Falkenburg <sfalken@apple.com>
8195 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGO.vsprops:
8196 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGOOptimize.vsprops:
8197 * JavaScriptCore.vcproj/WTF/copy-files.cmd:
8198 * JavaScriptCore.vcproj/jsc/jscReleasePGO.vsprops:
8200 2012-03-15 Steve Falkenburg <sfalken@apple.com>
8204 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
8206 2012-03-15 Kevin Ollivier <kevino@theolliviers.com>
8208 Move wx port to using export macros
8209 https://bugs.webkit.org/show_bug.cgi?id=77279
8211 Reviewed by Hajime Morita.
8216 2012-03-14 Benjamin Poulain <bpoulain@apple.com>
8218 Avoid StringImpl::getData16SlowCase() when sorting array
8219 https://bugs.webkit.org/show_bug.cgi?id=81070
8221 Reviewed by Geoffrey Garen.
8223 The function codePointCompare() is used intensively when sorting strings.
8224 This patch improves its performance by:
8225 -Avoiding character conversion.
8226 -Inlining the function.
8228 This makes Peacekeeper's arrayCombined test 30% faster.
8230 * wtf/text/StringImpl.cpp:
8231 * wtf/text/StringImpl.h:
8233 (WTF::codePointCompare):
8234 (WTF::codePointCompare8):
8235 (WTF::codePointCompare16):
8236 (WTF::codePointCompare8To16):
8238 2012-03-14 Hojong Han <hojong.han@samsung.com>
8240 Fix memory allocation failed by fastmalloc
8241 https://bugs.webkit.org/show_bug.cgi?id=79614
8243 Reviewed by Geoffrey Garen.
8245 Memory allocation failed even if the heap grows successfully.
8246 It is wrong to get the span only from the large list after the heap grows,
8247 because new span could be added in the normal list.
8249 * wtf/FastMalloc.cpp:
8250 (WTF::TCMalloc_PageHeap::New):
8252 2012-03-14 Hojong Han <hojong.han@samsung.com>
8254 Run cacheFlush page by page to assure of flushing all the requested ranges
8255 https://bugs.webkit.org/show_bug.cgi?id=77712
8257 Reviewed by Geoffrey Garen.
8259 Current MetaAllocator concept, always coalesces adjacent free spaces,
8260 doesn't meet memory management of Linux kernel.
8261 In a certain case Linux kernel doesn't regard contiguous virtual memory areas as one but two.
8262 Therefore cacheFlush page by page guarantees a flush-requested range.
8264 * jit/ExecutableAllocator.h:
8265 (JSC::ExecutableAllocator::cacheFlush):
8267 2012-03-14 Oliver Hunt <oliver@apple.com>
8269 Make ARMv7 work again
8270 https://bugs.webkit.org/show_bug.cgi?id=81157
8272 Reviewed by Geoffrey Garen.
8274 We were trying to use the ARMv7 dataRegister as a scratch register in a scenario
8275 where we the ARMv7MacroAssembler would also try to use dataRegister for its own
8278 * assembler/MacroAssembler.h:
8279 (JSC::MacroAssembler::store32):
8280 * assembler/MacroAssemblerARMv7.h:
8281 (MacroAssemblerARMv7):
8283 2012-03-14 Mark Hahnenberg <mhahnenberg@apple.com>
8285 Heap::destroy leaks CopiedSpace
8286 https://bugs.webkit.org/show_bug.cgi?id=81055
8288 Reviewed by Geoffrey Garen.
8290 Added a destroy() function to CopiedSpace that moves all normal size
8291 CopiedBlocks from the CopiedSpace to the Heap's list of free blocks
8292 as well as deallocates all of the oversize blocks in the CopiedSpace.
8293 This function is now called in Heap::destroy().
8295 * heap/CopiedSpace.cpp:
8296 (JSC::CopiedSpace::destroy):
8298 * heap/CopiedSpace.h:
8301 (JSC::Heap::destroy):
8303 2012-03-14 Andrew Lo <anlo@rim.com>
8305 [BlackBerry] Implement REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR using AnimationFrameRateController
8306 https://bugs.webkit.org/show_bug.cgi?id=81000
8308 Enable WTF_USE_REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR for BlackBerry.
8310 Reviewed by Antonio Gomes.
8314 2012-03-13 Filip Pizlo <fpizlo@apple.com>
8316 ValueToInt32 speculation will cause OSR exits even when it does not have to
8317 https://bugs.webkit.org/show_bug.cgi?id=81068
8318 <rdar://problem/11043926>
8320 Reviewed by Anders Carlsson.
8322 Two related changes:
8323 1) ValueToInt32 will now always just defer to the non-speculative path, instead
8324 of exiting, if it doesn't know what speculations to perform.
8325 2) ValueToInt32 will speculate boolean if it sees this to be profitable.
8327 * dfg/DFGAbstractState.cpp:
8328 (JSC::DFG::AbstractState::execute):
8330 (JSC::DFG::Node::shouldSpeculateBoolean):
8332 * dfg/DFGSpeculativeJIT.cpp:
8333 (JSC::DFG::SpeculativeJIT::compileValueToInt32):
8335 2012-03-13 Mark Hahnenberg <mhahnenberg@apple.com>
8337 More Windows build fixing
8339 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
8341 2012-03-13 Mark Hahnenberg <mhahnenberg@apple.com>
8345 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
8347 2012-03-13 Mark Hahnenberg <mhahnenberg@apple.com>
8349 Type conversion of exponential part failed
8350 https://bugs.webkit.org/show_bug.cgi?id=80673
8352 Reviewed by Geoffrey Garen.
8356 * runtime/JSGlobalObjectFunctions.cpp:
8359 (JSC::jsStrDecimalLiteral): Added another template argument that exposes whether or not
8360 we accept trailing junk to clients of jsStrDecimalLiteral. Also added additional template
8361 parameter for strtod to allow trailing spaces.
8363 (JSC::parseFloat): Accept trailing junk, as per the ECMA 262 spec (15.1.2.3).
8364 * runtime/LiteralParser.cpp:
8365 (JSC::::Lexer::lexNumber):
8366 * tests/mozilla/expected.html: Update the expected page for run-javascriptcore-tests so that
8367 we will run ecma/TypeConversion/9.3.1-3.js as a regression test now.
8370 (WTF::strtod): We also needed to sometimes accept trailing spaces to pass a few other tests that were
8371 broken by changing the default allowance of trailing junk in jsStrDecimalLiteral.
8373 * wtf/dtoa/double-conversion.cc: When the AdvanceToNonspace function was lifted out of the
8374 Chromium codebase, the person porting it only thought to check for spaces when skipping whitespace.
8375 A few of our JSC tests check for other types of trailing whitespace, so I've added checks for those
8376 here to cover those cases (horizontal tab, vertical tab, carriage return, form feed, and line feed).
8377 * wtf/text/WTFString.cpp:
8378 (WTF::toDoubleType): Disallow trailing spaces, as this breaks form input verification stuff.
8380 2012-03-13 Filip Pizlo <fpizlo@apple.com>
8382 Unreviewed, build fix since is_pod<> includes some header that I didn't know about.
8383 Removing the assert for now.
8385 * dfg/DFGOperations.h:
8386 * llint/LLIntSlowPaths.h:
8388 2012-03-13 Filip Pizlo <fpizlo@apple.com>
8390 Functions with C linkage should return POD types
8391 https://bugs.webkit.org/show_bug.cgi?id=81061
8393 Reviewed by Mark Rowe.
8395 * dfg/DFGOperations.h:
8396 * llint/LLIntSlowPaths.h:
8398 (SlowPathReturnType):
8399 (JSC::LLInt::encodeResult):
8401 2012-03-13 Filip Pizlo <fpizlo@apple.com>
8403 Loads from UInt32Arrays should not result in a double up-convert if it isn't necessary
8404 https://bugs.webkit.org/show_bug.cgi?id=80979
8405 <rdar://problem/11036848>
8407 Reviewed by Oliver Hunt.
8409 Also improved DFG IR dumping to include type information in a somewhat more
8412 * bytecode/PredictedType.cpp:
8413 (JSC::predictionToAbbreviatedString):
8415 * bytecode/PredictedType.h:
8417 * dfg/DFGAbstractState.cpp:
8418 (JSC::DFG::AbstractState::execute):
8420 (JSC::DFG::Graph::dump):
8421 * dfg/DFGPredictionPropagationPhase.cpp:
8422 (JSC::DFG::PredictionPropagationPhase::propagate):
8423 * dfg/DFGSpeculativeJIT.cpp:
8424 (JSC::DFG::SpeculativeJIT::compileUInt32ToNumber):
8425 (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
8426 * dfg/DFGSpeculativeJIT.h:
8427 (JSC::DFG::SpeculativeJIT::forwardSpeculationCheck):
8429 2012-03-13 George Staikos <staikos@webkit.org>
8431 The callback is only used if SA_RESTART is defined. Compile it out
8432 otherwise to avoid a warning.
8433 https://bugs.webkit.org/show_bug.cgi?id=80926
8435 Reviewed by Alexey Proskuryakov.
8437 * heap/MachineStackMarker.cpp:
8440 2012-03-13 Hojong Han <hojong.han@samsung.com>
8442 Dump the generated code for ARM_TRADITIONAL
8443 https://bugs.webkit.org/show_bug.cgi?id=80975
8445 Reviewed by Gavin Barraclough.
8447 * assembler/LinkBuffer.h:
8448 (JSC::LinkBuffer::dumpCode):
8450 2012-03-13 Adam Barth <abarth@webkit.org> && Benjamin Poulain <bpoulain@apple.com>
8452 Always enable ENABLE(CLIENT_BASED_GEOLOCATION)
8453 https://bugs.webkit.org/show_bug.cgi?id=78853
8455 Reviewed by Adam Barth.
8457 * Configurations/FeatureDefines.xcconfig:
8460 2012-03-13 Kwonjin Jeong <gram@company100.net>
8462 Remove SlotVisitor::copy() method.
8463 https://bugs.webkit.org/show_bug.cgi?id=80973
8465 Reviewed by Geoffrey Garen.
8467 SlotVisitor::copy() method isn't called anywhere.
8469 * heap/MarkStack.cpp: Remove definition of SlotVisitor::copy() method.
8470 * heap/SlotVisitor.h: Remove declaration of SlotVisitor::copy() method.
8472 2012-03-12 Hojong Han <hojong.han@samsung.com>
8474 Fix test cases for RegExp multiline
8475 https://bugs.webkit.org/show_bug.cgi?id=80822
8477 Reviewed by Gavin Barraclough.
8479 * tests/mozilla/js1_2/regexp/RegExp_multiline.js:
8480 * tests/mozilla/js1_2/regexp/RegExp_multiline_as_array.js:
8481 * tests/mozilla/js1_2/regexp/beginLine.js:
8482 * tests/mozilla/js1_2/regexp/endLine.js:
8484 2012-03-12 Filip Pizlo <fpizlo@apple.com>
8486 Arithmetic use inference should be procedure-global and should run in tandem
8487 with type propagation
8488 https://bugs.webkit.org/show_bug.cgi?id=80819
8489 <rdar://problem/11034006>
8491 Reviewed by Gavin Barraclough.
8494 * GNUmakefile.list.am:
8495 * JavaScriptCore.xcodeproj/project.pbxproj:
8497 * dfg/DFGArithNodeFlagsInferencePhase.cpp: Removed.
8498 * dfg/DFGArithNodeFlagsInferencePhase.h: Removed.
8499 * dfg/DFGDriver.cpp:
8500 (JSC::DFG::compile):
8501 * dfg/DFGPredictionPropagationPhase.cpp:
8502 (JSC::DFG::PredictionPropagationPhase::isNotNegZero):
8503 (PredictionPropagationPhase):
8504 (JSC::DFG::PredictionPropagationPhase::isNotZero):
8505 (JSC::DFG::PredictionPropagationPhase::propagate):
8506 (JSC::DFG::PredictionPropagationPhase::mergeDefaultArithFlags):
8507 * dfg/DFGVariableAccessData.h:
8508 (JSC::DFG::VariableAccessData::VariableAccessData):
8509 (JSC::DFG::VariableAccessData::flags):
8510 (VariableAccessData):
8511 (JSC::DFG::VariableAccessData::mergeFlags):
8513 2012-03-12 Filip Pizlo <fpizlo@apple.com>
8515 Node::op and Node::flags should be private
8516 https://bugs.webkit.org/show_bug.cgi?id=80824
8517 <rdar://problem/11033435>
8519 Reviewed by Gavin Barraclough.
8522 * GNUmakefile.list.am:
8523 * JavaScriptCore.xcodeproj/project.pbxproj:
8525 * dfg/DFGAbstractState.cpp:
8526 (JSC::DFG::AbstractState::initialize):
8527 (JSC::DFG::AbstractState::execute):
8528 (JSC::DFG::AbstractState::mergeStateAtTail):
8529 (JSC::DFG::AbstractState::mergeToSuccessors):
8530 * dfg/DFGArithNodeFlagsInferencePhase.cpp:
8531 (JSC::DFG::ArithNodeFlagsInferencePhase::propagate):
8532 * dfg/DFGByteCodeParser.cpp:
8533 (JSC::DFG::ByteCodeParser::injectLazyOperandPrediction):
8534 (JSC::DFG::ByteCodeParser::getLocal):
8535 (JSC::DFG::ByteCodeParser::getArgument):
8536 (JSC::DFG::ByteCodeParser::flushArgument):
8537 (JSC::DFG::ByteCodeParser::toInt32):
8538 (JSC::DFG::ByteCodeParser::isJSConstant):
8539 (JSC::DFG::ByteCodeParser::makeSafe):
8540 (JSC::DFG::ByteCodeParser::makeDivSafe):
8541 (JSC::DFG::ByteCodeParser::handleInlining):
8542 (JSC::DFG::ByteCodeParser::parseBlock):
8543 (JSC::DFG::ByteCodeParser::processPhiStack):
8544 (JSC::DFG::ByteCodeParser::linkBlock):
8545 * dfg/DFGCFAPhase.cpp:
8546 (JSC::DFG::CFAPhase::performBlockCFA):
8547 * dfg/DFGCSEPhase.cpp:
8548 (JSC::DFG::CSEPhase::canonicalize):
8549 (JSC::DFG::CSEPhase::endIndexForPureCSE):
8550 (JSC::DFG::CSEPhase::pureCSE):
8551 (JSC::DFG::CSEPhase::byValIsPure):
8552 (JSC::DFG::CSEPhase::clobbersWorld):
8553 (JSC::DFG::CSEPhase::impureCSE):
8554 (JSC::DFG::CSEPhase::globalVarLoadElimination):
8555 (JSC::DFG::CSEPhase::getByValLoadElimination):
8556 (JSC::DFG::CSEPhase::checkFunctionElimination):
8557 (JSC::DFG::CSEPhase::checkStructureLoadElimination):
8558 (JSC::DFG::CSEPhase::getByOffsetLoadElimination):
8559 (JSC::DFG::CSEPhase::getPropertyStorageLoadElimination):
8560 (JSC::DFG::CSEPhase::getIndexedPropertyStorageLoadElimination):
8561 (JSC::DFG::CSEPhase::getScopeChainLoadElimination):
8562 (JSC::DFG::CSEPhase::performNodeCSE):
8564 (JSC::DFG::Graph::dump):
8567 (JSC::DFG::Graph::addShouldSpeculateInteger):
8568 (JSC::DFG::Graph::negateShouldSpeculateInteger):
8569 (JSC::DFG::Graph::methodOfGettingAValueProfileFor):
8570 * dfg/DFGNode.cpp: Removed.
8573 (JSC::DFG::Node::Node):
8575 (JSC::DFG::Node::op):
8576 (JSC::DFG::Node::flags):
8577 (JSC::DFG::Node::setOp):
8578 (JSC::DFG::Node::setFlags):
8579 (JSC::DFG::Node::mergeFlags):
8580 (JSC::DFG::Node::filterFlags):
8581 (JSC::DFG::Node::clearFlags):
8582 (JSC::DFG::Node::setOpAndDefaultFlags):
8583 (JSC::DFG::Node::mustGenerate):
8584 (JSC::DFG::Node::isConstant):
8585 (JSC::DFG::Node::isWeakConstant):
8586 (JSC::DFG::Node::valueOfJSConstant):
8587 (JSC::DFG::Node::hasVariableAccessData):
8588 (JSC::DFG::Node::hasIdentifier):
8589 (JSC::DFG::Node::resolveGlobalDataIndex):
8590 (JSC::DFG::Node::hasArithNodeFlags):
8591 (JSC::DFG::Node::arithNodeFlags):
8592 (JSC::DFG::Node::setArithNodeFlag):
8593 (JSC::DFG::Node::mergeArithNodeFlags):
8594 (JSC::DFG::Node::hasConstantBuffer):
8595 (JSC::DFG::Node::hasRegexpIndex):
8596 (JSC::DFG::Node::hasVarNumber):
8597 (JSC::DFG::Node::hasScopeChainDepth):
8598 (JSC::DFG::Node::hasResult):
8599 (JSC::DFG::Node::hasInt32Result):
8600 (JSC::DFG::Node::hasNumberResult):
8601 (JSC::DFG::Node::hasJSResult):
8602 (JSC::DFG::Node::hasBooleanResult):
8603 (JSC::DFG::Node::isJump):
8604 (JSC::DFG::Node::isBranch):
8605 (JSC::DFG::Node::isTerminal):
8606 (JSC::DFG::Node::hasHeapPrediction):
8607 (JSC::DFG::Node::hasFunctionCheckData):
8608 (JSC::DFG::Node::hasStructureTransitionData):
8609 (JSC::DFG::Node::hasStructureSet):
8610 (JSC::DFG::Node::hasStorageAccessData):
8611 (JSC::DFG::Node::hasFunctionDeclIndex):
8612 (JSC::DFG::Node::hasFunctionExprIndex):
8613 (JSC::DFG::Node::child1):
8614 (JSC::DFG::Node::child2):
8615 (JSC::DFG::Node::child3):
8616 (JSC::DFG::Node::firstChild):
8617 (JSC::DFG::Node::numChildren):
8618 * dfg/DFGNodeFlags.cpp: Copied from Source/JavaScriptCore/dfg/DFGNode.cpp.
8619 * dfg/DFGNodeFlags.h: Added.
8621 (JSC::DFG::nodeUsedAsNumber):
8622 (JSC::DFG::nodeCanTruncateInteger):
8623 (JSC::DFG::nodeCanIgnoreNegativeZero):
8624 (JSC::DFG::nodeMayOverflow):
8625 (JSC::DFG::nodeCanSpeculateInteger):
8626 * dfg/DFGNodeType.h: Added.
8628 (JSC::DFG::defaultFlags):
8629 * dfg/DFGPredictionPropagationPhase.cpp:
8630 (JSC::DFG::PredictionPropagationPhase::propagate):
8631 (JSC::DFG::PredictionPropagationPhase::vote):
8632 (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
8633 (JSC::DFG::PredictionPropagationPhase::fixupNode):
8634 * dfg/DFGRedundantPhiEliminationPhase.cpp:
8635 (JSC::DFG::RedundantPhiEliminationPhase::run):
8636 (JSC::DFG::RedundantPhiEliminationPhase::replacePhiChild):
8637 (JSC::DFG::RedundantPhiEliminationPhase::updateBlockVariableInformation):
8638 * dfg/DFGSpeculativeJIT.cpp:
8639 (JSC::DFG::SpeculativeJIT::useChildren):
8640 (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
8641 (JSC::DFG::SpeculativeJIT::compileMovHint):
8642 (JSC::DFG::SpeculativeJIT::compile):
8643 (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
8644 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
8645 (JSC::DFG::SpeculativeJIT::compileUInt32ToNumber):
8646 (JSC::DFG::SpeculativeJIT::compileAdd):
8647 (JSC::DFG::SpeculativeJIT::compare):
8648 * dfg/DFGSpeculativeJIT.h:
8649 (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch):
8650 * dfg/DFGSpeculativeJIT32_64.cpp:
8651 (JSC::DFG::SpeculativeJIT::emitCall):
8652 (JSC::DFG::SpeculativeJIT::compile):
8653 * dfg/DFGSpeculativeJIT64.cpp:
8654 (JSC::DFG::SpeculativeJIT::emitCall):
8655 (JSC::DFG::SpeculativeJIT::compile):
8656 * dfg/DFGVirtualRegisterAllocationPhase.cpp:
8657 (JSC::DFG::VirtualRegisterAllocationPhase::run):
8659 2012-03-12 Laszlo Gombos <laszlo.1.gombos@nokia.com>
8662 https://bugs.webkit.org/show_bug.cgi?id=80826
8664 Reviewed by Andreas Kling.
8666 * bytecode/ExecutionCounter.cpp:
8667 Do not include DataLog.h, it is not used.
8669 * jit/ExecutableAllocator.cpp:
8673 (WTF::initializeLogFileOnce):
8674 Add missing semi-colon to the code path where DATA_LOG_FILENAME is defined.
8676 * wtf/HashTable.cpp:
8677 Include DataLog as it is used.
8679 2012-03-12 SangGyu Lee <sg5.lee@samsung.com>
8681 Integer overflow check code in arithmetic operation in classic interpreter
8682 https://bugs.webkit.org/show_bug.cgi?id=80465
8684 Reviewed by Gavin Barraclough.
8686 * interpreter/Interpreter.cpp:
8687 (JSC::Interpreter::privateExecute):
8689 2012-03-12 Zeno Albisser <zeno@webkit.org>
8691 [Qt][Mac] Build fails after enabling LLINT when JIT is disabled (r109863)
8692 https://bugs.webkit.org/show_bug.cgi?id=80827
8694 Qt on Mac uses OS(DARWIN) as well, but we do not want to enable LLINT.
8696 Reviewed by Simon Hausmann.
8700 2012-03-12 Simon Hausmann <simon.hausmann@nokia.com>
8702 Unreviewed prospective Qt/Mac build fix
8704 * runtime/JSGlobalData.cpp: use #USE(CF) instead of PLATFORM(MAC) to determine
8705 whether to include CoreFoundation headers, used for JIT configuration in JSGlobalData
8708 2012-03-12 Filip Pizlo <fpizlo@apple.com>
8710 All DFG nodes should have a mutable set of flags
8711 https://bugs.webkit.org/show_bug.cgi?id=80779
8712 <rdar://problem/11026218>
8714 Reviewed by Gavin Barraclough.
8716 Got rid of NodeId, and placed all of the flags that distinguished NodeId
8717 from NodeType into a separate Node::flags field. Combined what was previously
8718 ArithNodeFlags into Node::flags.
8720 In the process of debugging, I found that the debug support in the virtual
8721 register allocator was lacking, so I improved it. I also realized that the
8722 virtual register allocator was assuming that the nodes in a basic block were
8723 contiguous, which is no longer the case. So I fixed that. The fix also made
8724 it natural to have more extreme assertions, so I added them. I suspect this
8725 will make it easier to catch virtual register allocation bugs in the future.
8727 This is mostly performance neutral; if anything it looks like a slight
8730 This patch does leave some work for future refactorings; for example, Node::op
8731 is unencapsulated. This was already the case, though now it feels even more
8732 like it should be. I avoided doing that because this patch has already grown
8733 way bigger than I wanted.
8735 Finally, this patch creates a DFGNode.cpp file and makes a slight effort to
8736 move some unnecessarily inline stuff out of DFGNode.h.
8739 * GNUmakefile.list.am:
8740 * JavaScriptCore.xcodeproj/project.pbxproj:
8742 * dfg/DFGArithNodeFlagsInferencePhase.cpp:
8743 (JSC::DFG::ArithNodeFlagsInferencePhase::propagate):
8744 * dfg/DFGByteCodeParser.cpp:
8745 (JSC::DFG::ByteCodeParser::addToGraph):
8746 (JSC::DFG::ByteCodeParser::makeSafe):
8747 (JSC::DFG::ByteCodeParser::makeDivSafe):
8748 (JSC::DFG::ByteCodeParser::handleMinMax):
8749 (JSC::DFG::ByteCodeParser::handleIntrinsic):
8750 (JSC::DFG::ByteCodeParser::parseBlock):
8751 * dfg/DFGCFAPhase.cpp:
8752 (JSC::DFG::CFAPhase::performBlockCFA):
8753 * dfg/DFGCSEPhase.cpp:
8754 (JSC::DFG::CSEPhase::endIndexForPureCSE):
8755 (JSC::DFG::CSEPhase::pureCSE):
8756 (JSC::DFG::CSEPhase::clobbersWorld):
8757 (JSC::DFG::CSEPhase::impureCSE):
8758 (JSC::DFG::CSEPhase::setReplacement):
8759 (JSC::DFG::CSEPhase::eliminate):
8760 (JSC::DFG::CSEPhase::performNodeCSE):
8761 (JSC::DFG::CSEPhase::performBlockCSE):
8764 (JSC::DFG::Graph::opName):
8765 (JSC::DFG::Graph::dump):
8767 * dfg/DFGNode.cpp: Added.
8769 (JSC::DFG::arithNodeFlagsAsString):
8772 (JSC::DFG::nodeUsedAsNumber):
8773 (JSC::DFG::nodeCanTruncateInteger):
8774 (JSC::DFG::nodeCanIgnoreNegativeZero):
8775 (JSC::DFG::nodeMayOverflow):
8776 (JSC::DFG::nodeCanSpeculateInteger):
8777 (JSC::DFG::defaultFlags):
8778 (JSC::DFG::Node::Node):
8780 (JSC::DFG::Node::setOpAndDefaultFlags):
8781 (JSC::DFG::Node::mustGenerate):
8782 (JSC::DFG::Node::arithNodeFlags):
8783 (JSC::DFG::Node::setArithNodeFlag):
8784 (JSC::DFG::Node::mergeArithNodeFlags):
8785 (JSC::DFG::Node::hasResult):
8786 (JSC::DFG::Node::hasInt32Result):
8787 (JSC::DFG::Node::hasNumberResult):
8788 (JSC::DFG::Node::hasJSResult):
8789 (JSC::DFG::Node::hasBooleanResult):
8790 (JSC::DFG::Node::isJump):
8791 (JSC::DFG::Node::isBranch):
8792 (JSC::DFG::Node::isTerminal):
8793 (JSC::DFG::Node::child1):
8794 (JSC::DFG::Node::child2):
8795 (JSC::DFG::Node::child3):
8796 (JSC::DFG::Node::firstChild):
8797 (JSC::DFG::Node::numChildren):
8798 * dfg/DFGPredictionPropagationPhase.cpp:
8799 (JSC::DFG::PredictionPropagationPhase::propagate):
8800 (JSC::DFG::PredictionPropagationPhase::vote):
8801 (JSC::DFG::PredictionPropagationPhase::fixupNode):
8802 * dfg/DFGScoreBoard.h:
8804 (JSC::DFG::ScoreBoard::~ScoreBoard):
8805 (JSC::DFG::ScoreBoard::assertClear):
8806 (JSC::DFG::ScoreBoard::use):
8807 * dfg/DFGSpeculativeJIT.cpp:
8808 (JSC::DFG::SpeculativeJIT::useChildren):
8809 * dfg/DFGSpeculativeJIT32_64.cpp:
8810 (JSC::DFG::SpeculativeJIT::compile):
8811 * dfg/DFGSpeculativeJIT64.cpp:
8812 (JSC::DFG::SpeculativeJIT::compile):
8813 * dfg/DFGVirtualRegisterAllocationPhase.cpp:
8814 (JSC::DFG::VirtualRegisterAllocationPhase::run):
8816 2012-03-10 Filip Pizlo <fpizlo@apple.com>
8818 LLInt should support JSVALUE64
8819 https://bugs.webkit.org/show_bug.cgi?id=79609
8820 <rdar://problem/10063437>
8822 Reviewed by Gavin Barraclough and Oliver Hunt.
8824 Ported the LLInt, which previously only worked on 32-bit, to 64-bit. This
8825 patch moves a fair bit of code from LowLevelInterpreter32_64.asm to the common
8826 file, LowLevelInterpreter.asm. About 1/3 of the LLInt did not have to be
8827 specialized for value representation.
8829 Also made some minor changes to offlineasm and the slow-paths.
8831 * llint/LLIntData.cpp:
8832 (JSC::LLInt::Data::performAssertions):
8833 * llint/LLIntEntrypoints.cpp:
8834 * llint/LLIntSlowPaths.cpp:
8836 (JSC::LLInt::llint_trace_value):
8837 (JSC::LLInt::LLINT_SLOW_PATH_DECL):
8838 (JSC::LLInt::jitCompileAndSetHeuristics):
8839 * llint/LLIntSlowPaths.h:
8841 (SlowPathReturnType):
8842 (JSC::LLInt::SlowPathReturnType::SlowPathReturnType):
8843 (JSC::LLInt::encodeResult):
8844 * llint/LLIntThunks.cpp:
8845 * llint/LowLevelInterpreter.asm:
8846 * llint/LowLevelInterpreter32_64.asm:
8847 * llint/LowLevelInterpreter64.asm:
8848 * offlineasm/armv7.rb:
8849 * offlineasm/asm.rb:
8850 * offlineasm/ast.rb:
8851 * offlineasm/backends.rb:
8852 * offlineasm/instructions.rb:
8853 * offlineasm/parser.rb:
8854 * offlineasm/registers.rb:
8855 * offlineasm/transform.rb:
8856 * offlineasm/x86.rb:
8859 2012-03-10 Yong Li <yoli@rim.com>
8861 Web Worker crashes with WX_EXCLUSIVE
8862 https://bugs.webkit.org/show_bug.cgi?id=80532
8864 Let each JS global object own a meta allocator
8865 for WX_EXCLUSIVE to avoid conflicts from Web Worker.
8866 Also fix a mutex leak in MetaAllocator's dtor.
8868 Reviewed by Filip Pizlo.
8870 * jit/ExecutableAllocator.cpp:
8871 (JSC::DemandExecutableAllocator::DemandExecutableAllocator):
8872 (JSC::DemandExecutableAllocator::~DemandExecutableAllocator):
8873 (JSC::DemandExecutableAllocator::bytesAllocatedByAllAllocators):
8874 (DemandExecutableAllocator):
8875 (JSC::DemandExecutableAllocator::bytesCommittedByAllocactors):
8876 (JSC::DemandExecutableAllocator::dumpProfileFromAllAllocators):
8877 (JSC::DemandExecutableAllocator::allocateNewSpace):
8878 (JSC::DemandExecutableAllocator::allocators):
8879 (JSC::DemandExecutableAllocator::allocatorsMutex):
8881 (JSC::ExecutableAllocator::initializeAllocator):
8882 (JSC::ExecutableAllocator::ExecutableAllocator):
8883 (JSC::ExecutableAllocator::underMemoryPressure):
8884 (JSC::ExecutableAllocator::memoryPressureMultiplier):
8885 (JSC::ExecutableAllocator::allocate):
8886 (JSC::ExecutableAllocator::committedByteCount):
8887 (JSC::ExecutableAllocator::dumpProfile):
8888 * jit/ExecutableAllocator.h:
8890 (ExecutableAllocator):
8891 (JSC::ExecutableAllocator::allocator):
8892 * wtf/MetaAllocator.h:
8893 (WTF::MetaAllocator::~MetaAllocator): Finalize the spin lock.
8895 (TCMalloc_SpinLock::Finalize): Add empty Finalize() to some implementations.
8897 2012-03-09 Gavin Barraclough <barraclough@apple.com>
8899 Object.freeze broken on latest Nightly
8900 https://bugs.webkit.org/show_bug.cgi?id=80577
8902 Reviewed by Oliver Hunt.
8904 The problem here is that deleteProperty rejects deletion of prototype.
8905 This is correct in most cases, however defineOwnPropery is presently
8906 implemented internally to ensure the attributes change by deleting the
8907 old property, and creating a new one.
8909 * runtime/JSFunction.cpp:
8910 (JSC::JSFunction::deleteProperty):
8911 - If deletePropery is called via defineOwnPropery, allow old prototype to be removed.
8913 2012-03-09 Gavin Barraclough <barraclough@apple.com>
8915 Array.prototype.toLocaleString visits elements in wrong order under certain conditions
8916 https://bugs.webkit.org/show_bug.cgi?id=80663
8918 Reviewed by Michael Saboff.
8920 The bug here is actually that we're continuing to process the array after an exception
8921 has been thrown, and that the second value throw is overriding the first.
8923 * runtime/ArrayPrototype.cpp:
8924 (JSC::arrayProtoFuncToLocaleString):
8926 2012-03-09 Ryosuke Niwa <rniwa@webkit.org>
8928 WebKit compiled by gcc (Xcode 3.2.6) hangs while running DOM/Accessors.html
8929 https://bugs.webkit.org/show_bug.cgi?id=80080
8931 Reviewed by Filip Pizlo.
8933 * bytecode/SamplingTool.cpp:
8934 (JSC::SamplingRegion::Locker::Locker):
8935 (JSC::SamplingRegion::Locker::~Locker):
8936 * bytecode/SamplingTool.h:
8937 (JSC::SamplingRegion::exchangeCurrent):
8940 (WTF::weakCompareAndSwap):
8941 (WTF::weakCompareAndSwapUIntPtr):
8943 2012-03-09 Gavin Barraclough <barraclough@apple.com>
8945 REGRESSION: Date.parse("Tue Nov 23 20:40:05 2010 GMT") returns NaN
8946 https://bugs.webkit.org/show_bug.cgi?id=49989
8948 Reviewed by Oliver Hunt.
8950 Patch originally by chris reiss <christopher.reiss@nokia.com>,
8951 allow the year to appear before the timezone in date strings.
8954 (WTF::parseDateFromNullTerminatedCharacters):
8956 2012-03-09 Mark Rowe <mrowe@apple.com>
8958 Ensure that the WTF headers are copied at installhdrs time.
8960 Reviewed by Dan Bernstein and Jessie Berlin.
8962 * Configurations/JavaScriptCore.xcconfig: Set INSTALLHDRS_SCRIPT_PHASE = YES
8963 so that our script phases are invoked at installhdrs time. The only one that
8964 does any useful work at that time is the one that installs WTF headers.
8966 2012-03-09 Jon Lee <jonlee@apple.com>
8968 Add support for ENABLE(LEGACY_NOTIFICATIONS)
8969 https://bugs.webkit.org/show_bug.cgi?id=80497
8971 Reviewed by Adam Barth.
8973 Prep for b80472: Update API for Web Notifications
8974 * Configurations/FeatureDefines.xcconfig:
8976 2012-03-09 Ashod Nakashian <ashodnakashian@yahoo.com>
8978 Bash scripts should support LF endings only
8979 https://bugs.webkit.org/show_bug.cgi?id=79509
8981 Reviewed by David Kilzer.
8983 * gyp/generate-derived-sources.sh: Added property svn:eol-style.
8984 * gyp/run-if-exists.sh: Added property svn:eol-style.
8985 * gyp/update-info-plist.sh: Added property svn:eol-style.
8987 2012-03-09 Jessie Berlin <jberlin@apple.com>
8989 Windows debug build fix.
8991 * assembler/MacroAssembler.h:
8992 (JSC::MacroAssembler::shouldBlind):
8993 Fix unreachable code warnings (which we treat as errors).
8995 2012-03-09 Thouraya ANDOLSI <thouraya.andolsi@st.com>
8997 Reviewed by Zoltan Herczeg.
8999 [Qt] Fix the SH4 build after r109834
9000 https://bugs.webkit.org/show_bug.cgi?id=80492
9002 * assembler/MacroAssemblerSH4.h:
9003 (JSC::MacroAssemblerSH4::branchAdd32):
9004 (JSC::MacroAssemblerSH4::branchSub32):
9006 2012-03-09 Andy Wingo <wingo@igalia.com>
9008 Refactor code feature analysis in the parser
9009 https://bugs.webkit.org/show_bug.cgi?id=79112
9011 Reviewed by Geoffrey Garen.
9013 This commit refactors the parser to more uniformly propagate flag
9014 bits down and up the parse process, as the parser descends and
9015 returns into nested blocks. Some flags get passed town to
9016 subscopes, some apply to specific scopes only, and some get
9017 unioned up after parsing subscopes.
9019 The goal is to eventually be very precise with scoping
9020 information, once we have block scopes: one block scope might use
9021 `eval', which would require the emission of a symbol table within
9022 that block and containing blocks, whereas another block in the
9023 same function might not, allowing us to not emit a symbol table.
9026 (JSC::ScopeFlags): Rename from CodeFeatures.
9027 (JSC::ScopeNode::addScopeFlags):
9028 (JSC::ScopeNode::scopeFlags): New accessors for m_scopeFlags.
9029 (JSC::ScopeNode::isStrictMode):
9030 (JSC::ScopeNode::usesEval):
9031 (JSC::ScopeNode::usesArguments):
9032 (JSC::ScopeNode::setUsesArguments):
9033 (JSC::ScopeNode::usesThis):
9034 (JSC::ScopeNode::needsActivationForMoreThanVariables):
9035 (JSC::ScopeNode::needsActivation): Refactor these accessors to
9036 operate on the m_scopeFlags member.
9037 (JSC::ScopeNode::source):
9038 (JSC::ScopeNode::sourceURL):
9039 (JSC::ScopeNode::sourceID): Shuffle these definitions around; no
9041 (JSC::ScopeNode::ScopeNode)
9042 (JSC::ProgramNode::ProgramNode)
9043 (JSC::EvalNode::EvalNode)
9044 (JSC::FunctionBodyNode::FunctionBodyNode): Have these constructors
9045 take a ScopeFlags as an argument, instead of a bool inStrictContext.
9048 (JSC::ScopeNode::ScopeNode):
9049 (JSC::ProgramNode::ProgramNode):
9050 (JSC::ProgramNode::create):
9051 (JSC::EvalNode::EvalNode):
9052 (JSC::EvalNode::create):
9053 (JSC::FunctionBodyNode::FunctionBodyNode):
9054 (JSC::FunctionBodyNode::create): Adapt constructors to change.
9056 * parser/ASTBuilder.h:
9057 (JSC::ASTBuilder::ASTBuilder):
9058 (JSC::ASTBuilder::thisExpr):
9059 (JSC::ASTBuilder::createResolve):
9060 (JSC::ASTBuilder::createFunctionBody):
9061 (JSC::ASTBuilder::createFuncDeclStatement):
9062 (JSC::ASTBuilder::createTryStatement):
9063 (JSC::ASTBuilder::createWithStatement):
9064 (JSC::ASTBuilder::addVar):
9065 (JSC::ASTBuilder::Scope::Scope):
9068 (JSC::ASTBuilder::makeFunctionCallNode): Don't track scope
9069 features here. Instead rely on the base Parser mechanism to track
9072 * parser/NodeInfo.h (NodeInfo, NodeDeclarationInfo): "ScopeFlags".
9075 (JSC::Scope::Scope): Manage scope through flags, not
9076 bit-booleans. This lets us uniformly propagate them up and down.
9077 (JSC::Scope::declareWrite):
9078 (JSC::Scope::declareParameter):
9079 (JSC::Scope::useVariable):
9080 (JSC::Scope::collectFreeVariables):
9081 (JSC::Scope::getCapturedVariables):
9082 (JSC::Scope::saveFunctionInfo):
9083 (JSC::Scope::restoreFunctionInfo):
9084 (JSC::Parser::pushScope): Adapt to use scope flags and their
9085 accessors instead of bit-booleans.
9086 * parser/Parser.cpp:
9088 (JSC::::parseInner):
9089 (JSC::::didFinishParsing):
9090 (JSC::::parseSourceElements):
9091 (JSC::::parseVarDeclarationList):
9092 (JSC::::parseConstDeclarationList):
9093 (JSC::::parseWithStatement):
9094 (JSC::::parseTryStatement):
9095 (JSC::::parseFunctionBody):
9096 (JSC::::parseFunctionInfo):
9097 (JSC::::parseFunctionDeclaration):
9098 (JSC::::parsePrimaryExpression): Hoist some of the flag handling
9099 out of the "context" (ASTBuilder or SyntaxChecker) and to here.
9100 Does not seem to have a performance impact.
9102 * parser/SourceProviderCacheItem.h (SourceProviderCacheItem):
9103 Cache the scopeflags.
9104 * parser/SyntaxChecker.h: Remove evalCount() decl.
9106 * runtime/Executable.cpp:
9107 (JSC::EvalExecutable::compileInternal):
9108 (JSC::ProgramExecutable::compileInternal):
9109 (JSC::FunctionExecutable::produceCodeBlockFor):
9110 * runtime/Executable.h:
9111 (JSC::ScriptExecutable::ScriptExecutable):
9112 (JSC::ScriptExecutable::usesEval):
9113 (JSC::ScriptExecutable::usesArguments):
9114 (JSC::ScriptExecutable::needsActivation):
9115 (JSC::ScriptExecutable::isStrictMode):
9116 (JSC::ScriptExecutable::recordParse):
9117 (ScriptExecutable): ScopeFlags, not features.
9119 2012-03-08 Benjamin Poulain <bpoulain@apple.com>
9121 Build fix for MSVC after r110266
9123 Unreviewed. A #ifdef for MSVC was left over in r110266.
9125 * runtime/RegExpObject.h:
9128 2012-03-08 Benjamin Poulain <bpoulain@apple.com>
9130 Allocate the RegExpObject's data with the Cell
9131 https://bugs.webkit.org/show_bug.cgi?id=80654
9133 Reviewed by Gavin Barraclough.
9135 This patch removes the creation of RegExpObject's data to avoid the overhead
9136 create by the allocation and destruction.
9138 We RegExp are created repeatedly, this provides some performance improvment.
9139 The PeaceKeeper test stringDetectBrowser improves by 10%.
9141 * runtime/RegExpObject.cpp:
9142 (JSC::RegExpObject::RegExpObject):
9143 (JSC::RegExpObject::visitChildren):
9144 (JSC::RegExpObject::getOwnPropertyDescriptor):
9145 (JSC::RegExpObject::defineOwnProperty):
9146 (JSC::RegExpObject::match):
9147 * runtime/RegExpObject.h:
9148 (JSC::RegExpObject::setRegExp):
9149 (JSC::RegExpObject::regExp):
9150 (JSC::RegExpObject::setLastIndex):
9151 (JSC::RegExpObject::getLastIndex):
9154 2012-03-08 Steve Falkenburg <sfalken@apple.com>
9156 Separate WTF parts of JavaScriptCoreGenerated into WTFGenerated for Windows build
9157 https://bugs.webkit.org/show_bug.cgi?id=80657
9159 Preparation for WTF separation from JavaScriptCore.
9160 The "Generated" vcproj files on Windows are necessary so Visual Studio can calculate correct
9161 dependencies for generated files.
9163 This also removes the PGO build targets from the WTF code, since we can't build instrumentation/optimization
9164 versions of the WTF code independent of the JavaScriptCore code.
9166 Reviewed by Jessie Berlin.
9168 * JavaScriptCore.vcproj/JavaScriptCore.sln: Add WTFGenerated, update dependent projects.
9169 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: Removed WTF specific parts.
9170 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: Removed WTF specific parts.
9171 * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: Removed WTF specific parts.
9172 * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd: Removed WTF specific parts.
9173 * JavaScriptCore.vcproj/JavaScriptCore/work-around-vs-dependency-tracking-bugs.py: Removed.
9174 * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Add WTFGenerated, update dependent projects.
9175 * JavaScriptCore.vcproj/WTF/WTF.vcproj: Remove PGO targets from WTF.
9176 * JavaScriptCore.vcproj/WTF/WTFGenerated.make: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make.
9177 * JavaScriptCore.vcproj/WTF/WTFGenerated.vcproj: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj.
9178 * JavaScriptCore.vcproj/WTF/WTFGeneratedCommon.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedCommon.vsprops.
9179 * JavaScriptCore.vcproj/WTF/WTFGeneratedDebug.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebug.vsprops.
9180 * JavaScriptCore.vcproj/WTF/WTFGeneratedDebugAll.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebugAll.vsprops.
9181 * JavaScriptCore.vcproj/WTF/WTFGeneratedDebugCairoCFLite.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebugCairoCFLite.vsprops.
9182 * JavaScriptCore.vcproj/WTF/WTFGeneratedProduction.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedProduction.vsprops.
9183 * JavaScriptCore.vcproj/WTF/WTFGeneratedRelease.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedRelease.vsprops.
9184 * JavaScriptCore.vcproj/WTF/WTFGeneratedReleaseCairoCFLite.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedReleaseCairoCFLite.vsprops.
9185 * JavaScriptCore.vcproj/WTF/WTFReleasePGO.vsprops: Removed.
9186 * JavaScriptCore.vcproj/WTF/build-generated-files.sh: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh.
9187 * JavaScriptCore.vcproj/WTF/copy-files.cmd: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd.
9188 * JavaScriptCore.vcproj/WTF/work-around-vs-dependency-tracking-bugs.py: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/work-around-vs-dependency-tracking-bugs.py.
9190 2012-03-08 Benjamin Poulain <benjamin@webkit.org>
9192 Fix the build of WebKit with WTFURL following the removal of ForwardingHeaders/wtf
9193 https://bugs.webkit.org/show_bug.cgi?id=80652
9195 Reviewed by Eric Seidel.
9197 Fix the header, URLSegments.h is not part of the API.
9199 * wtf/url/api/ParsedURL.h:
9201 2012-03-08 Ryosuke Niwa <rniwa@webkit.org>
9203 Mac build fix for micro data API.
9205 * Configurations/FeatureDefines.xcconfig:
9207 2012-03-08 Gavin Barraclough <barraclough@apple.com>
9209 String.prototype.match and replace do not clear global regexp lastIndex per ES5.1 15.5.4.10
9210 https://bugs.webkit.org/show_bug.cgi?id=26890
9212 Reviewed by Oliver Hunt.
9214 Per 15.10.6.2 step 9.a.1 called via the action of the last iteration of 15.5.4.10 8.f.i.
9216 * runtime/StringPrototype.cpp:
9217 (JSC::replaceUsingRegExpSearch):
9218 (JSC::stringProtoFuncMatch):
9219 - added calls to setLastIndex.
9221 2012-03-08 Matt Lilek <mrl@apple.com>
9223 Don't enable VIDEO_TRACK on all OS X platforms
9224 https://bugs.webkit.org/show_bug.cgi?id=80635
9226 Reviewed by Eric Carlson.
9228 * Configurations/FeatureDefines.xcconfig:
9230 2012-03-08 Oliver Hunt <oliver@apple.com>
9232 Build fix. That day is not today.
9234 * assembler/MacroAssembler.h:
9235 (JSC::MacroAssembler::shouldBlind):
9236 * assembler/MacroAssemblerX86Common.h:
9237 (MacroAssemblerX86Common):
9238 (JSC::MacroAssemblerX86Common::shouldBlindForSpecificArch):
9240 2012-03-08 Oliver Hunt <oliver@apple.com>
9242 Build fix. One of these days I'll manage to commit something that works everywhere.
9244 * assembler/AbstractMacroAssembler.h:
9245 (AbstractMacroAssembler):
9246 * assembler/MacroAssemblerARMv7.h:
9247 (MacroAssemblerARMv7):
9248 * assembler/MacroAssemblerX86Common.h:
9249 (JSC::MacroAssemblerX86Common::shouldBlindForSpecificArch):
9250 (MacroAssemblerX86Common):
9252 2012-03-08 Chao-ying Fu <fu@mips.com>
9254 Update MIPS patchOffsetGetByIdSlowCaseCall
9255 https://bugs.webkit.org/show_bug.cgi?id=80302
9257 Reviewed by Oliver Hunt.
9262 2012-03-08 Oliver Hunt <oliver@apple.com>
9264 Missing some places where we should be blinding 64bit values (and blinding something we shouldn't)
9265 https://bugs.webkit.org/show_bug.cgi?id=80633
9267 Reviewed by Gavin Barraclough.
9269 Add 64-bit trap for shouldBlindForSpecificArch, so that we always blind
9270 if there isn't a machine specific implementation (otherwise the 64bit value
9271 got truncated and 32bit checks were used -- leaving 32bits untested).
9272 Also add a bit of logic to ensure that we don't try to blind a few common
9273 constants that go through the ImmPtr paths -- encoded numeric JSValues and
9274 unencoded doubles with common "safe" values.
9276 * assembler/AbstractMacroAssembler.h:
9277 (JSC::AbstractMacroAssembler::shouldBlindForSpecificArch):
9278 * assembler/MacroAssembler.h:
9279 (JSC::MacroAssembler::shouldBlindDouble):
9281 (JSC::MacroAssembler::shouldBlind):
9282 * assembler/MacroAssemblerX86Common.h:
9283 (JSC::MacroAssemblerX86Common::shouldBlindForSpecificArch):
9285 2012-03-08 Mark Rowe <mrowe@apple.com>
9287 <rdar://problem/11012572> Ensure that the staged frameworks path is in the search path for JavaScriptCore
9289 Reviewed by Dan Bernstein.
9291 * Configurations/Base.xcconfig:
9293 2012-03-08 Steve Falkenburg <sfalken@apple.com>
9295 Fix line endings for copy-files.cmd.
9297 If a cmd file doesn't have Windows line endings, it doesn't work properly.
9298 In this case, the label :clean wasn't found, breaking the clean build.
9300 Reviewed by Jessie Berlin.
9302 * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:
9304 2012-03-07 Filip Pizlo <fpizlo@apple.com>
9306 DFG CFA incorrectly handles ValueToInt32
9307 https://bugs.webkit.org/show_bug.cgi?id=80568
9309 Reviewed by Gavin Barraclough.
9311 Changed it match exactly the decision pattern used in
9312 DFG::SpeculativeJIT::compileValueToInt32
9314 * dfg/DFGAbstractState.cpp:
9315 (JSC::DFG::AbstractState::execute):
9317 2012-03-08 Viatcheslav Ostapenko <ostapenko.viatcheslav@nokia.com>
9319 [Qt] [WK2] Webkit fails to link when compiled with force_static_libs_as_shared
9320 https://bugs.webkit.org/show_bug.cgi?id=80524
9322 Reviewed by Simon Hausmann.
9324 Move IdentifierTable methods defintion to WTFThreadData.cpp to fix linking
9327 * runtime/Identifier.cpp:
9328 * wtf/WTFThreadData.cpp:
9330 (JSC::IdentifierTable::~IdentifierTable):
9331 (JSC::IdentifierTable::add):
9333 2012-03-08 Filip Pizlo <fpizlo@apple.com>
9335 DFG instruction count threshold should be lifted to 10000
9336 https://bugs.webkit.org/show_bug.cgi?id=80579
9338 Reviewed by Gavin Barraclough.
9340 * runtime/Options.cpp:
9341 (JSC::Options::initializeOptions):
9343 2012-03-07 Filip Pizlo <fpizlo@apple.com>
9345 Incorrect tracking of abstract values of variables forced double
9346 https://bugs.webkit.org/show_bug.cgi?id=80566
9347 <rdar://problem/11001442>
9349 Reviewed by Gavin Barraclough.
9351 * dfg/DFGAbstractState.cpp:
9352 (JSC::DFG::AbstractState::mergeStateAtTail):
9354 2012-03-07 Chao-yng Fu <fu@mips.com>
9356 [Qt] Fix the MIPS/SH4 build after r109834
9357 https://bugs.webkit.org/show_bug.cgi?id=80492
9359 Reviewed by Oliver Hunt.
9361 Implement three-argument branch(Add,Sub)32.
9363 * assembler/MacroAssemblerMIPS.h:
9364 (JSC::MacroAssemblerMIPS::add32):
9365 (MacroAssemblerMIPS):
9366 (JSC::MacroAssemblerMIPS::sub32):
9367 (JSC::MacroAssemblerMIPS::branchAdd32):
9368 (JSC::MacroAssemblerMIPS::branchSub32):
9370 2012-03-07 Sheriff Bot <webkit.review.bot@gmail.com>
9372 Unreviewed, rolling out r110127.
9373 http://trac.webkit.org/changeset/110127
9374 https://bugs.webkit.org/show_bug.cgi?id=80562
9376 compile failed on AppleWin (Requested by ukai on #webkit).
9379 (JSC::Heap::collectAllGarbage):
9383 * runtime/Executable.cpp:
9384 (JSC::FunctionExecutable::FunctionExecutable):
9385 (JSC::FunctionExecutable::finalize):
9386 * runtime/Executable.h:
9387 (FunctionExecutable):
9388 (JSC::FunctionExecutable::create):
9389 * runtime/JSGlobalData.cpp:
9392 (WTF::Recompiler::operator()):
9393 (JSC::JSGlobalData::recompileAllJSFunctions):
9395 * runtime/JSGlobalData.h:
9397 * runtime/JSGlobalObject.cpp:
9398 (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):
9400 2012-03-07 Hojong Han <hojong.han@samsung.com>
9402 The end atom of the marked block considered to filter invalid cells
9403 https://bugs.webkit.org/show_bug.cgi?id=79191
9405 Reviewed by Geoffrey Garen.
9407 Register file could have stale pointers beyond the end atom of marked block.
9408 Those pointers can weasel out of filtering in-middle-of-cell pointer.
9410 * heap/MarkedBlock.h:
9411 (JSC::MarkedBlock::isLiveCell):
9413 2012-03-07 Jessie Berlin <jberlin@apple.com>
9415 Clean Windows build fails after r110033
9416 https://bugs.webkit.org/show_bug.cgi?id=80553
9418 Rubber-stamped by Jon Honeycutt and Eric Seidel.
9420 * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:
9421 Place the implementation files next to their header files in the wtf/text subdirectory.
9422 Use echo -F to tell xcopy that these are files (since there is apparently no flag).
9423 * JavaScriptCore.vcproj/jsc/jsc.vcproj:
9424 Update the path to those implementation files.
9425 * JavaScriptCore.vcproj/testRegExp/testRegExp.vcproj:
9428 2012-03-07 Yuqiang Xian <yuqiang.xian@intel.com>
9430 Eliminate redundant Phis in DFG
9431 https://bugs.webkit.org/show_bug.cgi?id=80415
9433 Reviewed by Filip Pizlo.
9435 Although this may not have any advantage at current stage, this is towards
9436 minimal SSA to make more high level optimizations (like bug 76770) easier.
9437 We have the choices either to build minimal SSA from scratch or to
9438 keep current simple Phi insertion mechanism and remove the redundancy
9439 in another phase. Currently we choose the latter because the change
9443 * GNUmakefile.list.am:
9444 * JavaScriptCore.xcodeproj/project.pbxproj:
9446 * dfg/DFGDriver.cpp:
9447 (JSC::DFG::compile):
9449 (JSC::DFG::Graph::dump):
9450 * dfg/DFGRedundantPhiEliminationPhase.cpp: Added.
9452 (RedundantPhiEliminationPhase):
9453 (JSC::DFG::RedundantPhiEliminationPhase::RedundantPhiEliminationPhase):
9454 (JSC::DFG::RedundantPhiEliminationPhase::run):
9455 (JSC::DFG::RedundantPhiEliminationPhase::getRedundantReplacement):
9456 (JSC::DFG::RedundantPhiEliminationPhase::replacePhiChild):
9457 (JSC::DFG::RedundantPhiEliminationPhase::fixupPhis):
9458 (JSC::DFG::RedundantPhiEliminationPhase::updateBlockVariableInformation):
9459 (JSC::DFG::performRedundantPhiElimination):
9460 * dfg/DFGRedundantPhiEliminationPhase.h: Added.
9463 2012-03-07 Mark Hahnenberg <mhahnenberg@apple.com>
9465 Refactor recompileAllJSFunctions() to be less expensive
9466 https://bugs.webkit.org/show_bug.cgi?id=80330
9468 Reviewed by Geoffrey Garen.
9470 This change is performance neutral on the JS benchmarks we track. It's mostly to improve page
9471 load performance, which currently does at least a couple full GCs per navigation.
9474 (JSC::Heap::discardAllCompiledCode): Rename recompileAllJSFunctions to discardAllCompiledCode
9475 because the function doesn't actually recompile anything (and never did); it simply throws code
9476 away for it to be recompiled later if we determine we should do so.
9478 (JSC::Heap::collectAllGarbage):
9479 (JSC::Heap::addFunctionExecutable): Adds a newly created FunctionExecutable to the Heap's list.
9480 (JSC::Heap::removeFunctionExecutable): Removes the specified FunctionExecutable from the Heap's list.
9484 * runtime/Executable.cpp: Added next and prev fields to FunctionExecutables so that they can
9485 be used in DoublyLinkedLists.
9486 (JSC::FunctionExecutable::FunctionExecutable):
9487 (JSC::FunctionExecutable::finalize): Removes the FunctionExecutable from the Heap's list.
9488 * runtime/Executable.h:
9489 (FunctionExecutable):
9490 (JSC::FunctionExecutable::create): Adds the FunctionExecutable to the Heap's list.
9491 * runtime/JSGlobalData.cpp: Remove recompileAllJSFunctions, as it's the Heap's job to own and manage
9492 the list of FunctionExecutables.
9493 * runtime/JSGlobalData.h:
9495 * runtime/JSGlobalObject.cpp:
9496 (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): Use the new discardAllCompiledCode.
9498 2012-03-06 Oliver Hunt <oliver@apple.com>
9500 Further harden 64-bit JIT
9501 https://bugs.webkit.org/show_bug.cgi?id=80457
9503 Reviewed by Filip Pizlo.
9505 This patch implements blinding for ImmPtr. Rather than xor based blinding
9506 we perform randomised pointer rotations in order to avoid the significant
9507 cost in executable memory that would otherwise be necessary (and to avoid
9508 the need for an additional scratch register in some cases).
9510 As with the prior blinding patch there's a moderate amount of noise as we
9511 correct the use of ImmPtr vs. TrustedImmPtr.
9513 * assembler/AbstractMacroAssembler.h:
9515 (JSC::AbstractMacroAssembler::ImmPtr::asTrustedImmPtr):
9516 * assembler/MacroAssembler.h:
9518 (JSC::MacroAssembler::storePtr):
9519 (JSC::MacroAssembler::branchPtr):
9520 (JSC::MacroAssembler::shouldBlind):
9521 (JSC::MacroAssembler::RotatedImmPtr::RotatedImmPtr):
9523 (JSC::MacroAssembler::rotationBlindConstant):
9524 (JSC::MacroAssembler::loadRotationBlindedConstant):
9525 (JSC::MacroAssembler::convertInt32ToDouble):
9526 (JSC::MacroAssembler::move):
9527 (JSC::MacroAssembler::poke):
9528 * assembler/MacroAssemblerARMv7.h:
9529 (JSC::MacroAssemblerARMv7::storeDouble):
9530 (JSC::MacroAssemblerARMv7::branchAdd32):
9531 * assembler/MacroAssemblerX86_64.h:
9532 (MacroAssemblerX86_64):
9533 (JSC::MacroAssemblerX86_64::rotateRightPtr):
9534 (JSC::MacroAssemblerX86_64::xorPtr):
9535 * assembler/X86Assembler.h:
9537 (JSC::X86Assembler::xorq_rm):
9538 (JSC::X86Assembler::rorq_i8r):
9539 * dfg/DFGCCallHelpers.h:
9541 (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
9542 * dfg/DFGOSRExitCompiler32_64.cpp:
9543 (JSC::DFG::OSRExitCompiler::compileExit):
9544 * dfg/DFGOSRExitCompiler64.cpp:
9545 (JSC::DFG::OSRExitCompiler::compileExit):
9546 * dfg/DFGSpeculativeJIT.cpp:
9547 (JSC::DFG::SpeculativeJIT::createOSREntries):
9548 * dfg/DFGSpeculativeJIT.h:
9549 (JSC::DFG::SpeculativeJIT::silentFillGPR):
9550 (JSC::DFG::SpeculativeJIT::callOperation):
9551 (JSC::DFG::SpeculativeJIT::emitEdgeCode):
9552 * dfg/DFGSpeculativeJIT32_64.cpp:
9553 (JSC::DFG::SpeculativeJIT::compile):
9554 * dfg/DFGSpeculativeJIT64.cpp:
9555 (JSC::DFG::SpeculativeJIT::fillInteger):
9556 (JSC::DFG::SpeculativeJIT::fillDouble):
9557 (JSC::DFG::SpeculativeJIT::fillJSValue):
9558 (JSC::DFG::SpeculativeJIT::emitCall):
9559 (JSC::DFG::SpeculativeJIT::compileObjectEquality):
9560 (JSC::DFG::SpeculativeJIT::compileLogicalNot):
9561 (JSC::DFG::SpeculativeJIT::emitBranch):
9563 (JSC::JIT::emitOptimizationCheck):
9564 * jit/JITArithmetic32_64.cpp:
9565 (JSC::JIT::emitSlow_op_post_inc):
9566 * jit/JITInlineMethods.h:
9567 (JSC::JIT::emitValueProfilingSite):
9568 (JSC::JIT::emitGetVirtualRegister):
9569 * jit/JITOpcodes.cpp:
9570 (JSC::JIT::emit_op_mov):
9571 (JSC::JIT::emit_op_new_object):
9572 (JSC::JIT::emit_op_strcat):
9573 (JSC::JIT::emit_op_ensure_property_exists):
9574 (JSC::JIT::emit_op_resolve_skip):
9575 (JSC::JIT::emitSlow_op_resolve_global):
9576 (JSC::JIT::emit_op_resolve_with_base):
9577 (JSC::JIT::emit_op_resolve_with_this):
9578 (JSC::JIT::emit_op_jmp_scopes):
9579 (JSC::JIT::emit_op_switch_imm):
9580 (JSC::JIT::emit_op_switch_char):
9581 (JSC::JIT::emit_op_switch_string):
9582 (JSC::JIT::emit_op_throw_reference_error):
9583 (JSC::JIT::emit_op_debug):
9584 (JSC::JIT::emitSlow_op_resolve_global_dynamic):
9585 (JSC::JIT::emit_op_new_array):
9586 (JSC::JIT::emitSlow_op_new_array):
9587 (JSC::JIT::emit_op_new_array_buffer):
9588 * jit/JITOpcodes32_64.cpp:
9589 (JSC::JIT::emit_op_new_object):
9590 (JSC::JIT::emit_op_strcat):
9591 (JSC::JIT::emit_op_ensure_property_exists):
9592 (JSC::JIT::emit_op_resolve_skip):
9593 (JSC::JIT::emitSlow_op_resolve_global):
9594 (JSC::JIT::emit_op_resolve_with_base):
9595 (JSC::JIT::emit_op_resolve_with_this):
9596 (JSC::JIT::emit_op_jmp_scopes):
9597 (JSC::JIT::emit_op_switch_imm):
9598 (JSC::JIT::emit_op_switch_char):
9599 (JSC::JIT::emit_op_switch_string):
9600 * jit/JITPropertyAccess32_64.cpp:
9601 (JSC::JIT::emit_op_put_by_index):
9602 * jit/JITStubCall.h:
9604 (JSC::JITStubCall::addArgument):
9606 2012-03-07 Simon Hausmann <simon.hausmann@nokia.com>
9610 Reviewed by Zoltan Herczeg.
9612 Implement three-argument branch(Add,Sub)32.
9614 * assembler/MacroAssemblerARM.h:
9615 (JSC::MacroAssemblerARM::add32):
9616 (MacroAssemblerARM):
9617 (JSC::MacroAssemblerARM::sub32):
9618 (JSC::MacroAssemblerARM::branchAdd32):
9619 (JSC::MacroAssemblerARM::branchSub32):
9621 2012-03-07 Andy Wingo <wingo@igalia.com>
9623 Parser: Inline ScopeNodeData into ScopeNode
9624 https://bugs.webkit.org/show_bug.cgi?id=79776
9626 Reviewed by Geoffrey Garen.
9628 It used to be that some ScopeNode members were kept in a separate
9629 structure because sometimes they wouldn't be needed, and
9630 allocating a ParserArena was expensive. This patch makes
9631 ParserArena lazily allocate its IdentifierArena, allowing the
9632 members to be included directly, which is simpler and easier to
9635 * parser/ParserArena.cpp:
9636 (JSC::ParserArena::ParserArena):
9637 (JSC::ParserArena::reset):
9638 (JSC::ParserArena::isEmpty):
9639 * parser/ParserArena.h:
9640 (JSC::ParserArena::identifierArena): Lazily allocate the
9644 (JSC::ScopeNode::ScopeNode):
9645 (JSC::ScopeNode::singleStatement):
9646 (JSC::ProgramNode::create):
9647 (JSC::EvalNode::create):
9648 (JSC::FunctionBodyNode::create):
9650 (JSC::ScopeNode::destroyData):
9651 (JSC::ScopeNode::needsActivationForMoreThanVariables):
9652 (JSC::ScopeNode::needsActivation):
9653 (JSC::ScopeNode::hasCapturedVariables):
9654 (JSC::ScopeNode::capturedVariableCount):
9655 (JSC::ScopeNode::captures):
9656 (JSC::ScopeNode::varStack):
9657 (JSC::ScopeNode::functionStack):
9658 (JSC::ScopeNode::neededConstants):
9660 * bytecompiler/NodesCodegen.cpp:
9661 (JSC::ScopeNode::emitStatementsBytecode): Inline ScopeNodeData
9662 into ScopeNode. Adapt accessors.
9664 2012-03-06 Eric Seidel <eric@webkit.org>
9666 Make WTF public headers use fully-qualified include paths and remove ForwardingHeaders/wtf
9667 https://bugs.webkit.org/show_bug.cgi?id=80363
9669 Reviewed by Mark Rowe.
9671 Historically WTF has been part of JavaScriptCore, and on Mac and Windows
9672 its headers have appeared as part of the "private" headers exported by
9673 JavaScriptCore. All of the WTF headers there are "flattened" into a single
9674 private headers directory, and WebCore, WebKit and WebKit2 have used "ForwardingHeaders"
9675 to re-map fully-qualified <wtf/text/Foo.h> includes to simple <JavaScriptCore/Foo.h> includes.
9677 However, very soon, we are moving the WTF source code out of JavaScriptCore into its
9678 own directory and project. As part of such, the WTF headers will no longer be part of
9679 the JavaScriptCore private interfaces.
9680 In preparation for that, this change makes both the Mac and Win builds export
9681 WTF headers in a non-flattened manner. On Mac, that means into usr/local/include/wtf
9682 (and subdirectories), on Windows for now that means JavaScriptCore/wtf (and subdirectories).
9684 There are 5 parts to this change.
9685 1. Updates the JavaScriptCore XCode and VCProj files to actually install these headers
9686 (and header directories) into the appropriate places in the build directory.
9687 2. Updates JavaScriptCore.xcodeproj to look for these WTF headers in this install location
9688 (WebCore, WebKit, etc. had already been taught to look in previous patches).
9689 3. Fixes all JavaScriptCore source files, and WTF headers to include WTF headers
9690 using fully qualified paths.
9691 4. Stops the Mac and Win builds from installing these WTF headers in their old "flattened" location.
9692 5. Removes WebCore and WebKit ForwardingHeaders/wtf directories now that the flattened headers no longer exist.
9694 Unfortunately we see no way to do this change in smaller parts, since all of these steps are interdependant.
9695 It is possible there are internal Apple projects which depend on JavaScriptCore/Foo.h working for WTF
9696 headers, those will have to be updated to use <wtf/Foo.h> after this change.
9697 I've discussed this proposed change at length with Mark Rowe, and my understanding is they
9698 are ready for (and interested in) this change happening.
9700 * API/tests/JSNode.c:
9701 * API/tests/JSNodeList.c:
9702 * Configurations/Base.xcconfig:
9703 * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:
9704 * JavaScriptCore.xcodeproj/project.pbxproj:
9705 * assembler/MacroAssemblerCodeRef.h:
9706 * bytecompiler/BytecodeGenerator.h:
9707 * dfg/DFGOperations.cpp:
9708 * heap/GCAssertions.h:
9709 * heap/HandleHeap.h:
9710 * heap/HandleStack.h:
9711 * heap/MarkedSpace.h:
9715 * jit/HostCallReturnValue.cpp:
9718 * jit/ThunkGenerators.cpp:
9720 * runtime/Completion.cpp:
9721 * runtime/Executable.cpp:
9722 * runtime/Identifier.h:
9723 * runtime/InitializeThreading.cpp:
9724 * runtime/JSDateMath.cpp:
9725 * runtime/JSGlobalObjectFunctions.cpp:
9726 * runtime/JSStringBuilder.h:
9727 * runtime/JSVariableObject.h:
9728 * runtime/NumberPrototype.cpp:
9729 * runtime/WriteBarrier.h:
9730 * tools/CodeProfile.cpp:
9731 * tools/TieredMMapArray.h:
9734 * wtf/AlwaysInline.h:
9735 * wtf/ArrayBufferView.h:
9739 * wtf/BoundsCheckedPointer.h:
9740 * wtf/CheckedArithmetic.h:
9742 * wtf/ExportMacros.h:
9743 * wtf/FastAllocBase.h:
9745 * wtf/Float32Array.h:
9746 * wtf/Float64Array.h:
9748 * wtf/HashCountedSet.h:
9749 * wtf/HashFunctions.h:
9757 * wtf/IntegralTypedArrayBase.h:
9758 * wtf/ListHashSet.h:
9760 * wtf/MetaAllocator.h:
9761 * wtf/Noncopyable.h:
9762 * wtf/OwnArrayPtr.h:
9764 * wtf/PackedIntVector.h:
9765 * wtf/ParallelJobs.h:
9766 * wtf/PassOwnArrayPtr.h:
9771 * wtf/PossiblyNull.h:
9773 * wtf/RefCountedLeakCounter.h:
9776 * wtf/SimpleStats.h:
9778 * wtf/StdLibExtras.h:
9780 * wtf/TemporaryChange.h:
9781 * wtf/ThreadSafeRefCounted.h:
9783 * wtf/ThreadingPrimitives.h:
9785 * wtf/TypedArrayBase.h:
9786 * wtf/Uint16Array.h:
9787 * wtf/Uint32Array.h:
9789 * wtf/Uint8ClampedArray.h:
9790 * wtf/UnusedParam.h:
9792 * wtf/VectorTraits.h:
9793 * wtf/dtoa/double-conversion.h:
9795 * wtf/gobject/GRefPtr.h:
9796 * wtf/gobject/GlibUtilities.h:
9797 * wtf/text/AtomicString.h:
9798 * wtf/text/AtomicStringImpl.h:
9799 * wtf/text/CString.h:
9800 * wtf/text/StringConcatenate.h:
9801 * wtf/text/StringHash.h:
9802 * wtf/text/WTFString.h:
9803 * wtf/unicode/CharacterNames.h:
9804 * wtf/unicode/UTF8.h:
9805 * wtf/unicode/glib/UnicodeGLib.h:
9806 * wtf/unicode/qt4/UnicodeQt4.h:
9807 * wtf/unicode/wince/UnicodeWinCE.h:
9808 * wtf/url/api/ParsedURL.h:
9809 * wtf/url/api/URLString.h:
9810 * wtf/wince/FastMallocWinCE.h:
9813 2012-03-06 Gavin Barraclough <barraclough@apple.com>
9815 Array.prototype functions should throw if delete fails
9816 https://bugs.webkit.org/show_bug.cgi?id=80467
9818 Reviewed by Oliver Hunt.
9820 All calls to [[Delete]] from Array.prototype are specified to pass 'true' as the value of Throw.
9821 In the case of shift/unshift, these are also missing a throw from the 'put' in the implementations
9822 in JSArray.cpp. There are effectively three copies of each of the generic shift/unshift routines,
9823 one in splice, one in ArrayPrototype's shift/unshift methods, and one in JSArray's shift/unshift
9824 routines, for handling arrays with holes. These three copies should be unified.
9826 * runtime/ArrayPrototype.cpp:
9829 - Added - shared copies of the shift/unshift functionality.
9830 (JSC::arrayProtoFuncPop):
9831 - should throw if the delete fails.
9832 (JSC::arrayProtoFuncReverse):
9833 - should throw if the delete fails.
9834 (JSC::arrayProtoFuncShift):
9835 (JSC::arrayProtoFuncSplice):
9836 (JSC::arrayProtoFuncUnShift):
9837 - use shift/unshift.
9838 * runtime/JSArray.cpp:
9839 (JSC::JSArray::shiftCount):
9840 (JSC::JSArray::unshiftCount):
9841 - Don't try to handle arrays with holes; return a value indicating
9842 the generic routine should be used instead.
9843 * runtime/JSArray.h:
9844 - declaration for shiftCount/unshiftCount changed.
9845 * tests/mozilla/js1_6/Array/regress-304828.js:
9846 - this was asserting incorrect behaviour.
9848 2012-03-06 Raphael Kubo da Costa <kubo@profusion.mobi>
9850 [CMake] Make the removal of transitive library dependencies work with CMake < 2.8.7.
9851 https://bugs.webkit.org/show_bug.cgi?id=80469
9853 Reviewed by Antonio Gomes.
9855 * CMakeLists.txt: Manually set the LINK_INTERFACE_LIBRARIES target
9856 property on the library being created.
9858 2012-03-06 Yuqiang Xian <yuqiang.xian@intel.com>
9860 DFG BasicBlock should group the Phi nodes together and separate them
9861 from the other nodes
9862 https://bugs.webkit.org/show_bug.cgi?id=80361
9864 Reviewed by Filip Pizlo.
9866 This would make it more efficient to remove the redundant Phi nodes or
9867 insert new Phi nodes for SSA, besides providing a cleaner BasicBlock structure.
9868 This is performance neutral on SunSpider, V8 and Kraken.
9870 * dfg/DFGAbstractState.cpp:
9871 (JSC::DFG::AbstractState::clobberStructures):
9872 (JSC::DFG::AbstractState::dump):
9873 * dfg/DFGBasicBlock.h:
9874 (JSC::DFG::BasicBlock::BasicBlock):
9876 * dfg/DFGByteCodeParser.cpp:
9877 (JSC::DFG::ByteCodeParser::addToGraph):
9878 (JSC::DFG::ByteCodeParser::insertPhiNode):
9879 * dfg/DFGCFAPhase.cpp:
9880 (JSC::DFG::CFAPhase::performBlockCFA):
9881 * dfg/DFGCSEPhase.cpp:
9882 (JSC::DFG::CSEPhase::pureCSE):
9883 (JSC::DFG::CSEPhase::impureCSE):
9884 (JSC::DFG::CSEPhase::globalVarLoadElimination):
9885 (JSC::DFG::CSEPhase::getByValLoadElimination):
9886 (JSC::DFG::CSEPhase::checkFunctionElimination):
9887 (JSC::DFG::CSEPhase::checkStructureLoadElimination):
9888 (JSC::DFG::CSEPhase::getByOffsetLoadElimination):
9889 (JSC::DFG::CSEPhase::getPropertyStorageLoadElimination):
9890 (JSC::DFG::CSEPhase::getIndexedPropertyStorageLoadElimination):
9891 (JSC::DFG::CSEPhase::getScopeChainLoadElimination):
9892 (JSC::DFG::CSEPhase::performBlockCSE):
9894 (JSC::DFG::Graph::dump):
9895 * dfg/DFGSpeculativeJIT.cpp:
9896 (JSC::DFG::SpeculativeJIT::compile):
9898 2012-03-06 Mark Hahnenberg <mhahnenberg@apple.com>
9900 GCActivityCallback timer should vary with the length of the previous GC
9901 https://bugs.webkit.org/show_bug.cgi?id=80344
9903 Reviewed by Geoffrey Garen.
9905 * heap/Heap.cpp: Gave Heap the ability to keep track of the length of its last
9906 GC length so that the GC Activity Callback can use it.
9908 (JSC::Heap::collect):
9910 (JSC::Heap::lastGCLength):
9912 * runtime/GCActivityCallbackCF.cpp:
9914 (JSC::DefaultGCActivityCallback::operator()): Use the length of the Heap's last
9915 GC to determine the length of our timer trigger (currently set at 100x the duration
9918 2012-03-06 Rob Buis <rbuis@rim.com>
9920 BlackBerry] Fix cast-align gcc warnings when compiling JSC
9921 https://bugs.webkit.org/show_bug.cgi?id=80420
9923 Reviewed by Gavin Barraclough.
9925 Fix warnings given in Blackberry build.
9927 * heap/CopiedBlock.h:
9928 (JSC::CopiedBlock::CopiedBlock):
9929 * wtf/RefCountedArray.h:
9930 (WTF::RefCountedArray::Header::fromPayload):
9932 2012-03-06 Gavin Barraclough <barraclough@apple.com>
9934 writable/configurable not respected for some properties of Function/String/Arguments
9935 https://bugs.webkit.org/show_bug.cgi?id=80436
9937 Reviewed by Oliver Hunt.
9939 Special properties should behave like regular properties.
9941 * runtime/Arguments.cpp:
9942 (JSC::Arguments::defineOwnProperty):
9943 - Mis-nested logic for making read-only properties non-live.
9944 * runtime/JSFunction.cpp:
9945 (JSC::JSFunction::put):
9946 - arguments/length/caller are non-writable, non-configurable - reject appropriately.
9947 (JSC::JSFunction::deleteProperty):
9948 - Attempting to delete prototype/caller should fail.
9949 (JSC::JSFunction::defineOwnProperty):
9950 - Ensure prototype is reified on attempt to reify it.
9951 - arguments/length/caller are non-writable, non-configurable - reject appropriately.
9952 * runtime/JSFunction.h:
9953 - added declaration for defineOwnProperty.
9955 * runtime/StringObject.cpp:
9956 (JSC::StringObject::put):
9957 - length is non-writable, non-configurable - reject appropriately.
9959 2012-03-06 Ulan Degenbaev <ulan@chromium.org>
9961 TypedArray subarray call for subarray does not clamp the end index parameter properly
9962 https://bugs.webkit.org/show_bug.cgi?id=80285
9964 Reviewed by Kenneth Russell.
9966 * wtf/ArrayBufferView.h:
9967 (WTF::ArrayBufferView::calculateOffsetAndLength):
9969 2012-03-06 Sheriff Bot <webkit.review.bot@gmail.com>
9971 Unreviewed, rolling out r109837.
9972 http://trac.webkit.org/changeset/109837
9973 https://bugs.webkit.org/show_bug.cgi?id=80399
9975 breaks Mac Productions builds, too late to try and fix it
9976 tonight (Requested by eseidel on #webkit).
9978 * API/tests/JSNode.c:
9979 * API/tests/JSNodeList.c:
9980 * Configurations/Base.xcconfig:
9981 * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:
9982 * JavaScriptCore.xcodeproj/project.pbxproj:
9983 * assembler/MacroAssemblerCodeRef.h:
9984 * bytecompiler/BytecodeGenerator.h:
9985 * dfg/DFGOperations.cpp:
9986 * heap/GCAssertions.h:
9987 * heap/HandleHeap.h:
9988 * heap/HandleStack.h:
9989 * heap/MarkedSpace.h:
9993 * jit/HostCallReturnValue.cpp:
9996 * jit/ThunkGenerators.cpp:
9998 * runtime/Completion.cpp:
9999 * runtime/Executable.cpp:
10000 * runtime/Identifier.h:
10001 * runtime/InitializeThreading.cpp:
10002 * runtime/JSDateMath.cpp:
10003 * runtime/JSGlobalObjectFunctions.cpp:
10004 * runtime/JSStringBuilder.h:
10005 * runtime/JSVariableObject.h:
10006 * runtime/NumberPrototype.cpp:
10007 * runtime/WriteBarrier.h:
10008 * tools/CodeProfile.cpp:
10009 * tools/TieredMMapArray.h:
10010 * yarr/YarrJIT.cpp:
10012 2012-03-06 Zoltan Herczeg <zherczeg@webkit.org>
10014 [Qt][ARM] Speculative buildfix after r109834.
10016 Reviewed by Csaba Osztrogonác.
10018 * assembler/MacroAssemblerARM.h:
10019 (JSC::MacroAssemblerARM::and32):
10020 (MacroAssemblerARM):
10022 2012-03-05 Gavin Barraclough <barraclough@apple.com>
10024 Unreviewed windows build fix pt 2.
10026 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
10028 2012-03-05 Gavin Barraclough <barraclough@apple.com>
10030 Unreviewed windows build fix pt 1.
10032 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
10034 2012-03-05 Gavin Barraclough <barraclough@apple.com>
10036 putByIndex should throw in strict mode
10037 https://bugs.webkit.org/show_bug.cgi?id=80335
10039 Reviewed by Filip Pizlo.
10041 Make the MethodTable PutByIndex trap take a boolean 'shouldThrow' parameter.
10043 This is a largely mechanical change, simply adding an extra parameter to a number
10044 of functions. Some call sites need perform additional exception checks, and
10045 operationPutByValBeyondArrayBounds needs to know whether it is strict or not.
10047 This patch doesn't fix a missing throw from some cases of shift/unshift (this is
10048 an existing bug), I'll follow up with a third patch to handle that.
10050 * API/JSObjectRef.cpp:
10051 (JSObjectSetPropertyAtIndex):
10052 * JSCTypedArrayStubs.h:
10054 * dfg/DFGOperations.cpp:
10055 (JSC::DFG::putByVal):
10056 * dfg/DFGOperations.h:
10057 * dfg/DFGSpeculativeJIT32_64.cpp:
10058 (JSC::DFG::SpeculativeJIT::compile):
10059 * dfg/DFGSpeculativeJIT64.cpp:
10060 (JSC::DFG::SpeculativeJIT::compile):
10061 * interpreter/Interpreter.cpp:
10062 (JSC::Interpreter::privateExecute):
10063 * jit/JITStubs.cpp:
10064 (JSC::DEFINE_STUB_FUNCTION):
10066 (GlobalObject::finishCreation):
10067 * llint/LLIntSlowPaths.cpp:
10068 (JSC::LLInt::LLINT_SLOW_PATH_DECL):
10069 * runtime/Arguments.cpp:
10070 (JSC::Arguments::putByIndex):
10071 * runtime/Arguments.h:
10073 * runtime/ArrayPrototype.cpp:
10074 (JSC::arrayProtoFuncPush):
10075 (JSC::arrayProtoFuncReverse):
10076 (JSC::arrayProtoFuncShift):
10077 (JSC::arrayProtoFuncSort):
10078 (JSC::arrayProtoFuncSplice):
10079 (JSC::arrayProtoFuncUnShift):
10080 * runtime/ClassInfo.h:
10082 * runtime/JSArray.cpp:
10083 (JSC::SparseArrayValueMap::put):
10084 (JSC::JSArray::put):
10085 (JSC::JSArray::putByIndex):
10086 (JSC::JSArray::putByIndexBeyondVectorLength):
10087 (JSC::JSArray::push):
10088 (JSC::JSArray::shiftCount):
10089 (JSC::JSArray::unshiftCount):
10090 * runtime/JSArray.h:
10091 (SparseArrayValueMap):
10093 * runtime/JSByteArray.cpp:
10094 (JSC::JSByteArray::putByIndex):
10095 * runtime/JSByteArray.h:
10097 * runtime/JSCell.cpp:
10098 (JSC::JSCell::putByIndex):
10099 * runtime/JSCell.h:
10101 * runtime/JSNotAnObject.cpp:
10102 (JSC::JSNotAnObject::putByIndex):
10103 * runtime/JSNotAnObject.h:
10105 * runtime/JSONObject.cpp:
10106 (JSC::Walker::walk):
10107 * runtime/JSObject.cpp:
10108 (JSC::JSObject::putByIndex):
10109 * runtime/JSObject.h:
10110 (JSC::JSValue::putByIndex):
10111 * runtime/RegExpConstructor.cpp:
10112 (JSC::RegExpMatchesArray::fillArrayInstance):
10113 * runtime/RegExpMatchesArray.h:
10114 (JSC::RegExpMatchesArray::putByIndex):
10115 * runtime/StringPrototype.cpp:
10116 (JSC::stringProtoFuncSplit):
10118 2012-03-05 Yuqiang Xian <yuqiang.xian@intel.com>
10120 PredictNone is incorrectly treated as isDoublePrediction
10121 https://bugs.webkit.org/show_bug.cgi?id=80365
10123 Reviewed by Filip Pizlo.
10125 Also it is incorrectly treated as isFixedIndexedStorageObjectPrediction.
10127 * bytecode/PredictedType.h:
10128 (JSC::isFixedIndexedStorageObjectPrediction):
10129 (JSC::isDoublePrediction):
10131 2012-03-05 Filip Pizlo <fpizlo@apple.com>
10133 The LLInt should work even when the JIT is disabled
10134 https://bugs.webkit.org/show_bug.cgi?id=80340
10135 <rdar://problem/10922235>
10137 Reviewed by Gavin Barraclough.
10139 * assembler/MacroAssemblerCodeRef.h:
10140 (JSC::MacroAssemblerCodePtr::createLLIntCodePtr):
10141 (MacroAssemblerCodeRef):
10142 (JSC::MacroAssemblerCodeRef::createLLIntCodeRef):
10143 * interpreter/Interpreter.cpp:
10144 (JSC::Interpreter::initialize):
10145 (JSC::Interpreter::execute):
10146 (JSC::Interpreter::executeCall):
10147 (JSC::Interpreter::executeConstruct):
10149 (JSC::JIT::compileCTINativeCall):
10151 (JSC::JITThunks::ctiNativeCall):
10152 (JSC::JITThunks::ctiNativeConstruct):
10153 * llint/LLIntEntrypoints.cpp:
10154 (JSC::LLInt::getFunctionEntrypoint):
10155 (JSC::LLInt::getEvalEntrypoint):
10156 (JSC::LLInt::getProgramEntrypoint):
10157 * llint/LLIntSlowPaths.cpp:
10158 (JSC::LLInt::LLINT_SLOW_PATH_DECL):
10160 * llint/LLIntSlowPaths.h:
10162 * llint/LowLevelInterpreter.h:
10163 * llint/LowLevelInterpreter32_64.asm:
10164 * runtime/Executable.h:
10165 (NativeExecutable):
10166 (JSC::NativeExecutable::create):
10167 (JSC::NativeExecutable::finishCreation):
10168 * runtime/JSGlobalData.cpp:
10169 (JSC::JSGlobalData::JSGlobalData):
10170 * runtime/JSGlobalData.h:
10172 * runtime/Options.cpp:
10174 (JSC::Options::parse):
10175 (JSC::Options::initializeOptions):
10176 * runtime/Options.h:
10180 2012-03-05 Yuqiang Xian <yuqiang.xian@intel.com>
10182 Checks for dead variables are not sufficient when fixing the expected
10183 values in DFG OSR entry
10184 https://bugs.webkit.org/show_bug.cgi?id=80371
10186 Reviewed by Filip Pizlo.
10188 A dead variable should be identified when there's no node referencing it.
10189 But we currently failed to catch the case where there are some nodes
10190 referencing a variable but those nodes are actually not referenced by
10191 others so will be ignored in code generation. In such case we should
10192 also consider that variable to be a dead variable in the block and fix
10193 the expected values.
10194 This is performance neutral on SunSpider, V8 and Kraken.
10196 * dfg/DFGJITCompiler.h:
10197 (JSC::DFG::JITCompiler::noticeOSREntry):
10199 2012-03-05 Oliver Hunt <oliver@apple.com>
10203 * assembler/AbstractMacroAssembler.h:
10204 * assembler/MacroAssembler.h:
10206 * dfg/DFGSpeculativeJIT.cpp:
10207 (JSC::DFG::SpeculativeJIT::compileArithSub):
10208 * jit/JITArithmetic32_64.cpp:
10209 (JSC::JIT::emitSub32Constant):
10211 2012-03-05 Eric Seidel <eric@webkit.org>
10213 Update JavaScriptCore files to use fully-qualified WTF include paths
10214 https://bugs.webkit.org/show_bug.cgi?id=79960
10216 Reviewed by Adam Barth.
10218 This change does 5 small/related things:
10219 1. Updates JavaScriptCore.xcodeproj to install WTF headers into $BUILD/usr/local/include
10220 (WebCore, WebKit were already setup to look there, but JavaScriptCore.xcodeproj
10221 was not installing headers there.)
10222 2. Makes JavaScriptCore targets include $BUILD/usr/local/include in their
10223 header search path, as that's where the WTF headers will be installed.
10224 3. Similarly updates JavaScriptCore.vcproj/copy-files.cmd to copy WTF headers to PrivateHeaders/wtf/*
10225 in addition to the current behavior of flattening all headers to PrivateHeaders/*.h.
10226 4. Updates a bunch of JSC files to use #include <wtf/Foo.h> instead of #include "Foo.h"
10227 since soon the WTF headers will not be part of the JavaScriptCore Xcode project.
10228 5. Makes build-webkit build the WTF XCode project by default.
10230 * API/tests/JSNode.c:
10231 * API/tests/JSNodeList.c:
10232 * Configurations/Base.xcconfig:
10233 * assembler/MacroAssemblerCodeRef.h:
10234 * bytecompiler/BytecodeGenerator.h:
10235 * dfg/DFGOperations.cpp:
10236 * heap/GCAssertions.h:
10237 * heap/HandleHeap.h:
10238 * heap/HandleStack.h:
10239 * heap/MarkedSpace.h:
10243 * jit/HostCallReturnValue.cpp:
10245 * jit/JITStubs.cpp:
10246 * jit/ThunkGenerators.cpp:
10247 * parser/Lexer.cpp:
10248 * runtime/Completion.cpp:
10249 * runtime/Executable.cpp:
10250 * runtime/Identifier.h:
10251 * runtime/InitializeThreading.cpp:
10252 * runtime/JSDateMath.cpp:
10253 * runtime/JSGlobalObjectFunctions.cpp:
10254 * runtime/JSStringBuilder.h:
10255 * runtime/JSVariableObject.h:
10256 * runtime/NumberPrototype.cpp:
10257 * runtime/WriteBarrier.h:
10258 * tools/CodeProfile.cpp:
10259 * tools/TieredMMapArray.h:
10260 * yarr/YarrJIT.cpp:
10262 2012-03-05 Oliver Hunt <oliver@apple.com>
10264 Add basic support for constant blinding to the JIT
10265 https://bugs.webkit.org/show_bug.cgi?id=80354
10267 Reviewed by Filip Pizlo.
10269 This patch adds basic constant blinding support to the JIT, at the
10270 MacroAssembler level. This means all JITs in JSC (Yarr, baseline, and DFG)
10271 get constant blinding. Woo!
10273 This patch only introduces blinding for Imm32, a later patch will do similar
10274 for ImmPtr. In order to make misuse of Imm32 as a trusted type essentially
10275 impossible, we make TrustedImm32 a private parent of Imm32 and add an explicit
10276 accessor that's needed to access the actual value. This also means you cannot
10277 accidentally pass an untrusted value to a function that does not perform
10280 To make everything work sensibly, this patch also corrects some code that was using
10281 Imm32 when TrustedImm32 could be used, and refactors a few callers that use
10282 untrusted immediates, so that they call slightly different varaints of the functions
10283 that they used previously. This is largely necessary to deal with x86-32 not having
10284 sufficient registers to handle the additional work required when we choose to blind
10287 * assembler/AbstractMacroAssembler.h:
10288 (JSC::AbstractMacroAssembler::Imm32::asTrustedImm32):
10290 (JSC::AbstractMacroAssembler::beginUninterruptedSequence):
10291 (JSC::AbstractMacroAssembler::endUninterruptedSequence):
10292 (JSC::AbstractMacroAssembler::AbstractMacroAssembler):
10293 (AbstractMacroAssembler):
10294 (JSC::AbstractMacroAssembler::inUninterruptedSequence):
10295 (JSC::AbstractMacroAssembler::random):
10296 (JSC::AbstractMacroAssembler::scratchRegisterForBlinding):
10297 (JSC::AbstractMacroAssembler::shouldBlindForSpecificArch):
10298 * assembler/MacroAssembler.h:
10299 (JSC::MacroAssembler::addressForPoke):
10301 (JSC::MacroAssembler::poke):
10302 (JSC::MacroAssembler::branchPtr):
10303 (JSC::MacroAssembler::branch32):
10304 (JSC::MacroAssembler::convertInt32ToDouble):
10305 (JSC::MacroAssembler::shouldBlind):
10306 (JSC::MacroAssembler::BlindedImm32::BlindedImm32):
10308 (JSC::MacroAssembler::keyForConstant):
10309 (JSC::MacroAssembler::xorBlindConstant):
10310 (JSC::MacroAssembler::additionBlindedConstant):
10311 (JSC::MacroAssembler::andBlindedConstant):
10312 (JSC::MacroAssembler::orBlindedConstant):
10313 (JSC::MacroAssembler::loadXorBlindedConstant):
10314 (JSC::MacroAssembler::add32):
10315 (JSC::MacroAssembler::addPtr):
10316 (JSC::MacroAssembler::and32):
10317 (JSC::MacroAssembler::andPtr):
10318 (JSC::MacroAssembler::move):
10319 (JSC::MacroAssembler::or32):
10320 (JSC::MacroAssembler::store32):
10321 (JSC::MacroAssembler::sub32):
10322 (JSC::MacroAssembler::subPtr):
10323 (JSC::MacroAssembler::xor32):
10324 (JSC::MacroAssembler::branchAdd32):
10325 (JSC::MacroAssembler::branchMul32):
10326 (JSC::MacroAssembler::branchSub32):
10327 (JSC::MacroAssembler::trustedImm32ForShift):
10328 (JSC::MacroAssembler::lshift32):
10329 (JSC::MacroAssembler::rshift32):
10330 (JSC::MacroAssembler::urshift32):
10331 * assembler/MacroAssemblerARMv7.h:
10332 (MacroAssemblerARMv7):
10333 (JSC::MacroAssemblerARMv7::scratchRegisterForBlinding):
10334 (JSC::MacroAssemblerARMv7::shouldBlindForSpecificArch):
10335 * assembler/MacroAssemblerX86_64.h:
10336 (JSC::MacroAssemblerX86_64::branchSubPtr):
10337 (MacroAssemblerX86_64):
10338 (JSC::MacroAssemblerX86_64::scratchRegisterForBlinding):
10339 * dfg/DFGJITCompiler.cpp:
10340 (JSC::DFG::JITCompiler::linkOSRExits):
10341 (JSC::DFG::JITCompiler::compileBody):
10342 (JSC::DFG::JITCompiler::compileFunction):
10343 * dfg/DFGOSRExitCompiler32_64.cpp:
10344 (JSC::DFG::OSRExitCompiler::compileExit):
10345 * dfg/DFGOSRExitCompiler64.cpp:
10346 (JSC::DFG::OSRExitCompiler::compileExit):
10347 * dfg/DFGSpeculativeJIT.cpp:
10348 (JSC::DFG::SpeculativeJIT::compile):
10349 (JSC::DFG::SpeculativeJIT::compileArithSub):
10350 (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant):
10351 * dfg/DFGSpeculativeJIT.h:
10352 (JSC::DFG::SpeculativeJIT::callOperation):
10353 * dfg/DFGSpeculativeJIT32_64.cpp:
10354 (JSC::DFG::SpeculativeJIT::emitCall):
10355 (JSC::DFG::SpeculativeJIT::compileObjectEquality):
10356 (JSC::DFG::SpeculativeJIT::compileDoubleCompare):
10357 (JSC::DFG::SpeculativeJIT::compile):
10358 * dfg/DFGSpeculativeJIT64.cpp:
10359 (JSC::DFG::SpeculativeJIT::emitCall):
10360 (JSC::DFG::SpeculativeJIT::compileDoubleCompare):
10361 (JSC::DFG::SpeculativeJIT::compile):
10363 (JSC::JIT::privateCompileSlowCases):
10364 (JSC::JIT::privateCompile):
10365 * jit/JITArithmetic.cpp:
10366 (JSC::JIT::compileBinaryArithOp):
10367 (JSC::JIT::emit_op_add):
10368 (JSC::JIT::emit_op_mul):
10369 (JSC::JIT::emit_op_div):
10370 * jit/JITArithmetic32_64.cpp:
10371 (JSC::JIT::emitAdd32Constant):
10372 (JSC::JIT::emitSub32Constant):
10373 (JSC::JIT::emitBinaryDoubleOp):
10374 (JSC::JIT::emitSlow_op_mul):
10375 (JSC::JIT::emit_op_div):
10377 (JSC::JIT::compileLoadVarargs):
10378 * jit/JITCall32_64.cpp:
10379 (JSC::JIT::compileLoadVarargs):
10380 * jit/JITInlineMethods.h:
10381 (JSC::JIT::updateTopCallFrame):
10382 (JSC::JIT::emitValueProfilingSite):
10383 * jit/JITOpcodes32_64.cpp:
10384 (JSC::JIT::emitSlow_op_jfalse):
10385 (JSC::JIT::emitSlow_op_jtrue):
10386 * jit/JITStubCall.h:
10388 (JSC::JITStubCall::addArgument):
10389 * yarr/YarrJIT.cpp:
10390 (JSC::Yarr::YarrGenerator::backtrack):
10392 2012-03-05 Gavin Barraclough <barraclough@apple.com>
10394 putByIndex should throw in strict mode
10395 https://bugs.webkit.org/show_bug.cgi?id=80335
10397 Reviewed by Filip Pizlo.
10399 We'll need to pass an additional parameter.
10401 Part 1 - rename JSValue::put() for integer indices to JSValue::putByIndex()
10402 to match the method in the MethodTable, make this take a parameter indicating
10403 whether the put should throw. This fixes the cases where the base of the put
10406 * dfg/DFGOperations.cpp:
10408 (JSC::DFG::putByVal):
10409 (JSC::DFG::operationPutByValInternal):
10410 * interpreter/Interpreter.cpp:
10411 (JSC::Interpreter::execute):
10412 (JSC::Interpreter::privateExecute):
10413 * jit/JITStubs.cpp:
10414 (JSC::DEFINE_STUB_FUNCTION):
10415 * llint/LLIntSlowPaths.cpp:
10416 (JSC::LLInt::LLINT_SLOW_PATH_DECL):
10417 * runtime/JSObject.h:
10418 (JSC::JSValue::putByIndex):
10419 * runtime/JSValue.cpp:
10421 * runtime/JSValue.h:
10424 2012-03-05 Sam Weinig <sam@webkit.org>
10426 Add support for hosting layers in the window server in WebKit2
10427 <rdar://problem/10400246>
10428 https://bugs.webkit.org/show_bug.cgi?id=80310
10430 Reviewed by Anders Carlsson.
10433 Add HAVE_LAYER_HOSTING_IN_WINDOW_SERVER.
10435 2012-03-05 Filip Pizlo <fpizlo@apple.com>
10437 Unreviewed, attempted build fix for !ENABLE(JIT) after r109705.
10439 * bytecode/ExecutionCounter.cpp:
10440 (JSC::ExecutionCounter::applyMemoryUsageHeuristics):
10441 * bytecode/ExecutionCounter.h:
10443 2012-03-05 Patrick Gansterer <paroga@webkit.org>
10445 Unreviewed. Build fix for !ENABLE(JIT) after r109705.
10447 * bytecode/ExecutionCounter.cpp:
10448 * bytecode/ExecutionCounter.h:
10450 2012-03-05 Andy Wingo <wingo@igalia.com>
10452 Lexer: Specialize character predicates for LChar, UChar
10453 https://bugs.webkit.org/show_bug.cgi?id=79677
10455 Reviewed by Oliver Hunt.
10457 This patch specializes isIdentStart, isIdentPart, isWhiteSpace,
10458 and isLineTerminator to perform a more limited number of checks if
10459 the lexer is being instantiated to work on LChar sequences. This
10460 is about a 1.5% win on the --parse-only suite, here.
10462 * parser/Lexer.cpp:
10463 (JSC::isLatin1): New static helper, specialized for LChar and
10465 (JSC::typesOfLatin1Characters): Rename from
10466 typesOfASCIICharacters, and expand to the range of the LChar
10467 type. All uses of isASCII are changed to use isLatin1. Generated
10468 using libunistring.
10469 (JSC::isNonLatin1IdentStart):
10470 (JSC::isIdentStart):
10471 (JSC::isNonLatin1IdentPart):
10472 (JSC::isIdentPart):
10473 (JSC::Lexer::shiftLineTerminator):
10474 (JSC::Lexer::parseIdentifier):
10475 (JSC::Lexer::parseIdentifierSlowCase):
10476 (JSC::Lexer::parseStringSlowCase):
10477 (JSC::Lexer::parseMultilineComment):
10479 (JSC::Lexer::scanRegExp):
10480 (JSC::Lexer::skipRegExp): Sprinkle static_cast<T>(_) around.
10482 (JSC::Lexer::isWhiteSpace):
10483 (JSC::Lexer::isLineTerminator):
10484 * KeywordLookupGenerator.py:
10485 (Trie.printAsC): Declare specialized isIdentPart static functions.
10487 2012-03-05 Carlos Garcia Campos <cgarcia@igalia.com>
10489 Unreviewed. Fix make distcheck.
10491 * GNUmakefile.list.am: Add missing header file.
10493 2012-03-05 Andy Wingo <wingo@igalia.com>
10495 WTF: Micro-optimize cleanup of empty vectors and hash tables
10496 https://bugs.webkit.org/show_bug.cgi?id=79903
10498 Reviewed by Michael Saboff and Geoffrey Garen.
10500 This patch speeds up cleanup of vectors and hash tables whose
10501 backing store was never allocated. This is the case by default
10502 for most vectors / hash tables that never had any entries added.
10504 The result for me is that calling checkSyntax 1000 times on
10505 concat-jquery-mootools-prototype.js goes from 6.234s to 6.068s, a
10509 (WTF::HashTable::~HashTable):
10510 (WTF::::clear): Don't deallocate the storage or frob member
10511 variables if there is no backing storage.
10513 (WTF::VectorBufferBase::deallocateBuffer): Likewise.
10515 2012-03-04 Filip Pizlo <fpizlo@apple.com>
10517 JIT heuristics should be hyperbolic
10518 https://bugs.webkit.org/show_bug.cgi?id=80055
10519 <rdar://problem/10922260>
10521 Reviewed by Oliver Hunt.
10523 Added tracking of the amount of executable memory typically used for a bytecode
10524 instruction. Modified the execution counter scheme to use this, and the amount
10525 of free memory, to determine how long to wait before invoking the JIT.
10527 The result is that even if we bomb the VM with more code than can fit in our
10528 executable memory pool, we still keep running and almost never run out of
10529 executable memory - which ensures that if we have to JIT something critical, then
10530 we'll likely have enough memory to do so. This also does not regress performance
10531 on the three main benchmarks.
10534 * GNUmakefile.list.am:
10535 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
10536 * JavaScriptCore.xcodeproj/project.pbxproj:
10538 * bytecode/CodeBlock.cpp:
10539 (JSC::CodeBlock::predictedMachineCodeSize):
10541 (JSC::CodeBlock::usesOpcode):
10542 * bytecode/CodeBlock.h:
10544 (JSC::CodeBlock::checkIfJITThresholdReached):
10545 (JSC::CodeBlock::dontJITAnytimeSoon):
10546 (JSC::CodeBlock::jitAfterWarmUp):
10547 (JSC::CodeBlock::jitSoon):
10548 (JSC::CodeBlock::llintExecuteCounter):
10549 (JSC::CodeBlock::counterValueForOptimizeAfterWarmUp):
10550 (JSC::CodeBlock::counterValueForOptimizeAfterLongWarmUp):
10551 (JSC::CodeBlock::addressOfJITExecuteCounter):
10552 (JSC::CodeBlock::offsetOfJITExecuteCounter):
10553 (JSC::CodeBlock::offsetOfJITExecutionActiveThreshold):
10554 (JSC::CodeBlock::offsetOfJITExecutionTotalCount):
10555 (JSC::CodeBlock::jitExecuteCounter):
10556 (JSC::CodeBlock::checkIfOptimizationThresholdReached):
10557 (JSC::CodeBlock::optimizeNextInvocation):
10558 (JSC::CodeBlock::dontOptimizeAnytimeSoon):
10559 (JSC::CodeBlock::optimizeAfterWarmUp):
10560 (JSC::CodeBlock::optimizeAfterLongWarmUp):
10561 (JSC::CodeBlock::optimizeSoon):
10562 * bytecode/ExecutionCounter.cpp: Added.
10564 (JSC::ExecutionCounter::ExecutionCounter):
10565 (JSC::ExecutionCounter::checkIfThresholdCrossedAndSet):
10566 (JSC::ExecutionCounter::setNewThreshold):
10567 (JSC::ExecutionCounter::deferIndefinitely):
10568 (JSC::ExecutionCounter::applyMemoryUsageHeuristics):
10569 (JSC::ExecutionCounter::applyMemoryUsageHeuristicsAndConvertToInt):
10570 (JSC::ExecutionCounter::hasCrossedThreshold):
10571 (JSC::ExecutionCounter::setThreshold):
10572 (JSC::ExecutionCounter::reset):
10573 * bytecode/ExecutionCounter.h: Added.
10575 (ExecutionCounter):
10576 (JSC::ExecutionCounter::formattedTotalCount):
10577 * dfg/DFGOSRExitCompiler32_64.cpp:
10578 (JSC::DFG::OSRExitCompiler::compileExit):
10579 * dfg/DFGOSRExitCompiler64.cpp:
10580 (JSC::DFG::OSRExitCompiler::compileExit):
10581 * jit/ExecutableAllocator.cpp:
10582 (JSC::DemandExecutableAllocator::allocateNewSpace):
10583 (JSC::ExecutableAllocator::underMemoryPressure):
10585 (JSC::ExecutableAllocator::memoryPressureMultiplier):
10586 * jit/ExecutableAllocator.h:
10587 * jit/ExecutableAllocatorFixedVMPool.cpp:
10588 (JSC::ExecutableAllocator::memoryPressureMultiplier):
10591 (JSC::JIT::privateCompile):
10592 * jit/JITStubs.cpp:
10593 (JSC::DEFINE_STUB_FUNCTION):
10594 * llint/LLIntSlowPaths.cpp:
10595 (JSC::LLInt::jitCompileAndSetHeuristics):
10596 * llint/LowLevelInterpreter32_64.asm:
10597 * runtime/JSGlobalData.h:
10599 * runtime/Options.cpp:
10601 (JSC::Options::initializeOptions):
10602 * runtime/Options.h:
10604 * wtf/SimpleStats.h: Added.
10607 (WTF::SimpleStats::SimpleStats):
10608 (WTF::SimpleStats::add):
10609 (WTF::SimpleStats::operator!):
10610 (WTF::SimpleStats::count):
10611 (WTF::SimpleStats::sum):
10612 (WTF::SimpleStats::sumOfSquares):
10613 (WTF::SimpleStats::mean):
10614 (WTF::SimpleStats::variance):
10615 (WTF::SimpleStats::standardDeviation):
10617 2012-03-04 Raphael Kubo da Costa <kubo@profusion.mobi>
10619 [CMake] Libraries are installed to /usr/lib and not /usr/lib64 on x86_64
10620 https://bugs.webkit.org/show_bug.cgi?id=71507
10622 Reviewed by Antonio Gomes.
10624 * CMakeLists.txt: Use ${LIB_INSTALL_DIR} instead of hardcoding "lib".
10626 2012-03-04 David Kilzer <ddkilzer@apple.com>
10628 Fix build when the classic interpreter is enabled
10630 Reviewed by Gavin Barraclough.
10632 Fixes the following build error when running the "Generate
10633 Derived Sources" build phase script:
10635 offlineasm: Parsing JavaScriptCore/llint/LowLevelInterpreter.asm and ../../JSCLLIntOffsetsExtractor and creating assembly file LLIntAssembly.h.
10636 ./JavaScriptCore/offlineasm/offsets.rb:145:in `offsetsAndConfigurationIndex': unhandled exception
10637 from JavaScriptCore/offlineasm/asm.rb:131
10638 Command /bin/sh failed with exit code 1
10640 Gavin's fix in r109674 avoided the #error statement in
10641 JITStubs.h when compiling LLIntOffsetsExtractor.cpp, but it
10642 caused the "Generate Derived Sources" build phase script to fail
10643 when JavaScriptCore/offlineasm/asm.rb was run. The solution is
10644 to detect when the classic interpreter is being built and simply
10645 exit early from asm.rb in that case.
10647 * llint/LLIntOffsetsExtractor.cpp:
10648 (JSC::LLIntOffsetsExtractor::dummy): Return NULL pointer if the
10649 JIT is disabled. Note that offsets.rb doesn't care about the
10650 return value here, but instead it cares about finding the magic
10651 values in the binary. The magic values are no longer present
10652 when the JIT is disabled.
10653 * offlineasm/asm.rb: Catch MissingMagicValuesException and exit
10654 early with a status message.
10655 * offlineasm/offsets.rb:
10656 (MissingMagicValuesException): Add new exception class.
10657 (offsetsAndConfigurationIndex): Throw
10658 MissingMagicValuesException when no magic values are found.
10660 2012-03-04 Jurij Smakov <jurij@wooyd.org>
10662 SPARC also needs aligned accesses.
10664 Rubber-stamped by Gustavo Noronha Silva.
10668 2012-03-04 Gavin Barraclough <barraclough@apple.com>
10670 Unreviewed build fix.
10673 - Move ENABLE(JIT) to head of file.
10675 2012-03-03 Gavin Barraclough <barraclough@apple.com>
10677 Split JSArray's [[Put]] & [[DefineOwnProperty]] traps.
10678 https://bugs.webkit.org/show_bug.cgi?id=80217
10680 Reviewed by Filip Pizlo.
10682 putByIndex() provides similar behavior to put(), but for indexed property names.
10683 Many places in ArrayPrototype call putByIndex() where they really mean to call
10684 [[DefineOwnProperty]]. This is only okay due to a bug – putByIndex should be
10685 calling numeric accessors (& respecting numeric read only properties) on the
10686 prototype chain, but isn't. Add a new putDirectIndex (matching JSObject's
10687 putDirect* methods), to correctly provide a fast [[DefineOwnProperty]] interface.
10689 * runtime/ArrayPrototype.cpp:
10690 (JSC::arrayProtoFuncConcat):
10691 (JSC::arrayProtoFuncSlice):
10692 (JSC::arrayProtoFuncFilter):
10693 (JSC::arrayProtoFuncMap):
10694 * runtime/JSArray.cpp:
10697 (JSC::SparseArrayValueMap::putDirect):
10698 (JSC::JSArray::defineOwnNumericProperty):
10699 (JSC::JSArray::putByIndexBeyondVectorLength):
10700 (JSC::JSArray::putDirectIndexBeyondVectorLength):
10701 * runtime/JSArray.h:
10702 (SparseArrayValueMap):
10704 (JSC::JSArray::putDirectIndex):
10706 2012-03-03 Benjamin Poulain <benjamin@webkit.org>
10708 Implement the basis of KURLWTFURL
10709 https://bugs.webkit.org/show_bug.cgi?id=79600
10711 Reviewed by Adam Barth.
10713 Add an API to know if a ParsedURL is valid.
10715 * wtf/url/api/ParsedURL.cpp:
10716 (WTF::ParsedURL::ParsedURL):
10718 (WTF::ParsedURL::isolatedCopy): This is needed by APIs moving URL objects between thread
10719 and by KURL's detach() on write.
10720 (WTF::ParsedURL::baseAsString):
10721 (WTF::ParsedURL::segment):
10722 Add a stronger constraint on accessors: the client of this API should never ask for the segments
10724 * wtf/url/api/ParsedURL.h:
10726 (WTF::ParsedURL::ParsedURL):
10728 (WTF::ParsedURL::isValid):
10730 2012-03-03 Hans Wennborg <hans@chromium.org>
10732 Implement Speech JavaScript API
10733 https://bugs.webkit.org/show_bug.cgi?id=80019
10735 Reviewed by Adam Barth.
10737 Add ENABLE_SCRIPTED_SPEECH.
10739 * Configurations/FeatureDefines.xcconfig:
10741 2012-03-02 Filip Pizlo <fpizlo@apple.com>
10743 When getting the line number of a call into a call frame with no code block, it's
10744 incorrect to rely on the returnPC
10745 https://bugs.webkit.org/show_bug.cgi?id=80195
10747 Reviewed by Oliver Hunt.
10749 * interpreter/Interpreter.cpp:
10750 (JSC::getCallerInfo):
10752 (JSC::JIT::compileLoadVarargs):
10754 2012-03-02 Han Hojong <hojong.han@samsung.com>
10756 Expected results updated for checking type conversion
10757 https://bugs.webkit.org/show_bug.cgi?id=80138
10759 Reviewed by Gavin Barraclough.
10761 * tests/mozilla/ecma/TypeConversion/9.3.1-3.js:
10763 2012-03-02 Kenichi Ishibashi <bashi@chromium.org>
10765 Adding WebSocket per-frame DEFLATE extension
10766 https://bugs.webkit.org/show_bug.cgi?id=77522
10768 Added USE(ZLIB) flag.
10770 Reviewed by Kent Tamura.
10774 2012-03-02 Filip Pizlo <fpizlo@apple.com>
10776 Unreviewed build fix for platforms that have DFG_JIT disabled but PARALLEL_GC enabled.
10778 * bytecode/CodeBlock.cpp:
10779 (JSC::CodeBlock::visitAggregate):
10781 2012-03-01 Filip Pizlo <fpizlo@apple.com>
10783 DFGCodeBlocks should not trace CodeBlocks that are also going to be traced by
10784 virtue of being in the transitive closure
10785 https://bugs.webkit.org/show_bug.cgi?id=80098
10787 Reviewed by Anders Carlsson.
10789 If DFGCodeBlocks traces a CodeBlock that might also be traced via its owner Executable,
10790 then you might have the visitAggregate() method called concurrently by multiple threads.
10791 This is benign on 64-bit -- visitAggregate() and everything it calls turns out to be
10792 racy and slightly imprecise but not unsound. But on 32-bit, visitAggregate() may crash
10793 due to word tearing in ValueProfile bucket updates inside of computeUpdatedPrediction().
10795 It would seem that the fix is just to have DFGCodeBlocks not trace CodeBlocks that are
10796 not jettisoned. But CodeBlocks may be jettisoned later during the GC, so it must trace
10797 any CodeBlock that it knows to be live by virtue of it being reachable from the stack.
10798 Hence the real fix is to make sure that concurrent calls into CodeBlock::visitAggregate()
10799 don't lead to two threads racing over each other as they clobber state. This patch
10800 achieves this with a simple CAS loop: whichever thread wins the CAS race (which is
10801 trivially linearizable) will get to trace the CodeBlock; all other threads give up and
10804 Unfortunately there will be no new tests. It's possible to reproduce this maybe 1/10
10805 times by running V8-v6's raytrace repeatedly, using the V8 harness hacked to rerun it
10806 even when it's gotten sufficient counts. But that takes a while - sometimes up to a
10807 minute to get a crash. I have no other reliable repro case.
10809 * bytecode/CodeBlock.cpp:
10810 (JSC::CodeBlock::visitAggregate):
10811 * bytecode/CodeBlock.h:
10813 * heap/DFGCodeBlocks.cpp:
10814 (JSC::DFGCodeBlocks::clearMarks):
10816 2012-03-01 Filip Pizlo <fpizlo@apple.com>
10818 The JIT should not crash the entire process just because there is not enough executable
10819 memory, if the LLInt is enabled
10820 https://bugs.webkit.org/show_bug.cgi?id=79962
10822 Reviewed by Csaba Osztrogonác.
10826 * assembler/AssemblerBufferWithConstantPool.h:
10827 (JSC::AssemblerBufferWithConstantPool::executableCopy):
10829 2012-03-01 Ryosuke Niwa <rniwa@webkit.org>
10831 Revert my change. Broke builds.
10832 Source/JavaScriptCore/wtf/Atomics.h:188: error: redefinition of 'bool WTF::weakCompareAndSwap(volatile uintptr_t*, uintptr_t, uintptr_t)'
10833 Source/JavaScriptCore/wtf/Atomics.h:122: error: 'bool WTF::weakCompareAndSwap(volatile unsigned int*, unsigned int, unsigned i
10837 (WTF::weakCompareAndSwap):
10839 2012-03-01 Ryosuke Niwa <rniwa@webkit.org>
10843 Rubber-stamped by Filip Pizlo.
10847 (WTF::weakCompareAndSwap):
10849 2012-03-01 Gavin Barraclough <barraclough@apple.com>
10851 ES5.1-15.3.5.4. prohibits Function.caller from [[Get]]ting a strict caller
10852 https://bugs.webkit.org/show_bug.cgi?id=80011
10854 Reviewed by Oliver Hunt.
10856 Also, fix getting the caller from within a bound function, for within a getter,
10857 or setter (make our implementation match other browsers).
10859 * interpreter/Interpreter.cpp:
10860 (JSC::getCallerInfo):
10861 - Allow this to get the caller of host functions.
10862 (JSC::Interpreter::retrieveCallerFromVMCode):
10863 - This should use getCallerInfo, and should skip over function bindings.
10864 * runtime/JSFunction.cpp:
10865 (JSC::JSFunction::callerGetter):
10866 - This should never return a strict-mode function.
10868 2012-03-01 Yuqiang Xian <yuqiang.xian@intel.com>
10870 DFG local CSE for a node can be terminated earlier
10871 https://bugs.webkit.org/show_bug.cgi?id=80014
10873 Reviewed by Filip Pizlo.
10875 When one of the node's childredn is met in the process of back traversing
10876 the nodes, we don't need to traverse the remaining nodes.
10877 This is performance neutral on SunSpider, V8 and Kraken.
10879 * dfg/DFGCSEPhase.cpp:
10880 (JSC::DFG::CSEPhase::pureCSE):
10881 (JSC::DFG::CSEPhase::impureCSE):
10882 (JSC::DFG::CSEPhase::getByValLoadElimination):
10883 (JSC::DFG::CSEPhase::checkFunctionElimination):
10884 (JSC::DFG::CSEPhase::checkStructureLoadElimination):
10885 (JSC::DFG::CSEPhase::getByOffsetLoadElimination):
10886 (JSC::DFG::CSEPhase::getPropertyStorageLoadElimination):
10887 (JSC::DFG::CSEPhase::getIndexedPropertyStorageLoadElimination):
10889 2012-02-29 Yuqiang Xian <yuqiang.xian@intel.com>
10891 DFG BasicBlocks should not require that their nodes have continuous indices in the graph
10892 https://bugs.webkit.org/show_bug.cgi?id=79899
10894 Reviewed by Filip Pizlo.
10896 This will make it more convenient to insert nodes into the DFG.
10897 With this capability we now place the Phi nodes in the corresponding
10899 Local CSE is modified to not to rely on the assumption of continuous
10900 node indices in a block.
10901 This is performance neutral on SunSpider, V8 and Kraken.
10903 * dfg/DFGAbstractState.cpp:
10904 (JSC::DFG::AbstractState::AbstractState):
10905 (JSC::DFG::AbstractState::beginBasicBlock):
10906 (JSC::DFG::AbstractState::execute):
10907 (JSC::DFG::AbstractState::clobberStructures):
10908 (JSC::DFG::AbstractState::mergeToSuccessors):
10909 (JSC::DFG::AbstractState::dump):
10910 * dfg/DFGAbstractState.h:
10911 (JSC::DFG::AbstractState::forNode):
10913 * dfg/DFGArithNodeFlagsInferencePhase.cpp:
10914 (ArithNodeFlagsInferencePhase):
10915 * dfg/DFGBasicBlock.h:
10916 (JSC::DFG::BasicBlock::BasicBlock):
10918 * dfg/DFGByteCodeParser.cpp:
10919 (JSC::DFG::ByteCodeParser::addToGraph):
10921 (JSC::DFG::ByteCodeParser::insertPhiNode):
10922 (JSC::DFG::ByteCodeParser::handleInlining):
10923 (JSC::DFG::ByteCodeParser::parseBlock):
10924 (JSC::DFG::ByteCodeParser::processPhiStack):
10925 (JSC::DFG::ByteCodeParser::linkBlock):
10926 (JSC::DFG::ByteCodeParser::determineReachability):
10927 (JSC::DFG::ByteCodeParser::parseCodeBlock):
10928 * dfg/DFGCFAPhase.cpp:
10929 (JSC::DFG::CFAPhase::performBlockCFA):
10931 * dfg/DFGCSEPhase.cpp:
10932 (JSC::DFG::CSEPhase::CSEPhase):
10933 (JSC::DFG::CSEPhase::endIndexForPureCSE):
10934 (JSC::DFG::CSEPhase::pureCSE):
10935 (JSC::DFG::CSEPhase::impureCSE):
10936 (JSC::DFG::CSEPhase::globalVarLoadElimination):
10937 (JSC::DFG::CSEPhase::getByValLoadElimination):
10938 (JSC::DFG::CSEPhase::checkFunctionElimination):
10939 (JSC::DFG::CSEPhase::checkStructureLoadElimination):
10940 (JSC::DFG::CSEPhase::getByOffsetLoadElimination):
10941 (JSC::DFG::CSEPhase::getPropertyStorageLoadElimination):
10942 (JSC::DFG::CSEPhase::getIndexedPropertyStorageLoadElimination):
10943 (JSC::DFG::CSEPhase::getScopeChainLoadElimination):
10944 (JSC::DFG::CSEPhase::performNodeCSE):
10945 (JSC::DFG::CSEPhase::performBlockCSE):
10947 * dfg/DFGGraph.cpp:
10948 (JSC::DFG::Graph::dump):
10949 * dfg/DFGPhase.cpp:
10950 (JSC::DFG::Phase::beginPhase):
10951 * dfg/DFGSpeculativeJIT.cpp:
10952 (JSC::DFG::SpeculativeJIT::nonSpeculativeCompare):
10953 (JSC::DFG::SpeculativeJIT::nonSpeculativeStrictEq):
10954 (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
10955 (JSC::DFG::SpeculativeJIT::compile):
10956 (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant):
10957 (JSC::DFG::SpeculativeJIT::compileStrictEq):
10958 * dfg/DFGSpeculativeJIT.h:
10960 (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch):
10961 (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
10962 * dfg/DFGSpeculativeJIT32_64.cpp:
10963 (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
10964 * dfg/DFGSpeculativeJIT64.cpp:
10965 (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
10966 * dfg/DFGVirtualRegisterAllocationPhase.cpp:
10967 (JSC::DFG::VirtualRegisterAllocationPhase::run):
10969 2012-02-29 Filip Pizlo <fpizlo@apple.com>
10971 The JIT should not crash the entire process just because there is not
10972 enough executable memory, if the LLInt is enabled
10973 https://bugs.webkit.org/show_bug.cgi?id=79962
10974 <rdar://problem/10922215>
10976 Unreviewed, adding forgotten file.
10978 * jit/JITCompilationEffort.h: Added.
10981 2012-02-29 Filip Pizlo <fpizlo@apple.com>
10983 The JIT should not crash the entire process just because there is not
10984 enough executable memory, if the LLInt is enabled
10985 https://bugs.webkit.org/show_bug.cgi?id=79962
10986 <rdar://problem/10922215>
10988 Reviewed by Gavin Barraclough.
10990 Added the notion of JITCompilationEffort. If we're JIT'ing as a result of
10991 a tier-up, then we set it to JITCompilationCanFail. Otherwise it's
10992 JITCompilationMustSucceed. This preserves the old behavior of LLInt is
10993 disabled or if we're compiling something that can't be interpreted (like
10996 * JavaScriptCore.xcodeproj/project.pbxproj:
10997 * assembler/ARMAssembler.cpp:
10998 (JSC::ARMAssembler::executableCopy):
10999 * assembler/ARMAssembler.h:
11001 * assembler/AssemblerBuffer.h:
11002 (JSC::AssemblerBuffer::executableCopy):
11003 * assembler/LinkBuffer.h:
11004 (JSC::LinkBuffer::LinkBuffer):
11005 (JSC::LinkBuffer::~LinkBuffer):
11007 (JSC::LinkBuffer::didFailToAllocate):
11008 (JSC::LinkBuffer::isValid):
11009 (JSC::LinkBuffer::linkCode):
11010 (JSC::LinkBuffer::performFinalization):
11011 * assembler/MIPSAssembler.h:
11012 (JSC::MIPSAssembler::executableCopy):
11013 * assembler/SH4Assembler.h:
11014 (JSC::SH4Assembler::executableCopy):
11015 * assembler/X86Assembler.h:
11016 (JSC::X86Assembler::executableCopy):
11017 (JSC::X86Assembler::X86InstructionFormatter::executableCopy):
11018 * bytecode/CodeBlock.cpp:
11019 (JSC::ProgramCodeBlock::jitCompileImpl):
11020 (JSC::EvalCodeBlock::jitCompileImpl):
11021 (JSC::FunctionCodeBlock::jitCompileImpl):
11022 * bytecode/CodeBlock.h:
11023 (JSC::CodeBlock::jitCompile):
11025 (ProgramCodeBlock):
11027 (FunctionCodeBlock):
11028 * dfg/DFGDriver.cpp:
11029 (JSC::DFG::compile):
11030 * dfg/DFGJITCompiler.cpp:
11031 (JSC::DFG::JITCompiler::compile):
11032 (JSC::DFG::JITCompiler::compileFunction):
11033 * dfg/DFGJITCompiler.h:
11035 * jit/ExecutableAllocator.cpp:
11036 (JSC::DemandExecutableAllocator::allocateNewSpace):
11037 (JSC::ExecutableAllocator::allocate):
11038 * jit/ExecutableAllocator.h:
11039 (ExecutableAllocator):
11040 * jit/ExecutableAllocatorFixedVMPool.cpp:
11041 (JSC::ExecutableAllocator::allocate):
11043 (JSC::JIT::privateCompile):
11045 (JSC::JIT::compile):
11047 * jit/JITCompilationEffort.h: Added.
11050 (JSC::jitCompileIfAppropriate):
11051 (JSC::jitCompileFunctionIfAppropriate):
11052 * llint/LLIntSlowPaths.cpp:
11054 (JSC::LLInt::jitCompileAndSetHeuristics):
11055 (JSC::LLInt::entryOSR):
11056 (JSC::LLInt::LLINT_SLOW_PATH_DECL):
11057 * runtime/Executable.cpp:
11058 (JSC::EvalExecutable::jitCompile):
11059 (JSC::ProgramExecutable::jitCompile):
11060 (JSC::FunctionExecutable::jitCompileForCall):
11061 (JSC::FunctionExecutable::jitCompileForConstruct):
11062 * runtime/Executable.h:
11064 (ProgramExecutable):
11065 (FunctionExecutable):
11066 (JSC::FunctionExecutable::jitCompileFor):
11067 * runtime/ExecutionHarness.h:
11068 (JSC::prepareForExecution):
11069 (JSC::prepareFunctionForExecution):
11071 2012-02-29 No'am Rosenthal <noam.rosenthal@nokia.com>
11073 [Qt][WK2] Get rid of the #ifdef mess in LayerTreeHost[Proxy]
11074 https://bugs.webkit.org/show_bug.cgi?id=79501
11076 Enable WTF_USE_UI_SIDE_COMPOSITING for Qt.
11078 Reviewed by Kenneth Rohde Christiansen.
11082 2012-02-29 Gavin Barraclough <barraclough@apple.com>
11084 Rubber stamped by Oliver Hunt.
11086 * tests/mozilla/ecma_2/RegExp/constructor-001.js:
11087 * tests/mozilla/ecma_2/RegExp/function-001.js:
11088 * tests/mozilla/ecma_2/RegExp/properties-001.js:
11089 - Check in new test cases results.
11091 2012-02-29 Mark Rowe <mrowe@apple.com>
11093 Stop installing JSCLLIntOffsetsExtractor.
11095 Replace the separate TestRegExp and TestAPI xcconfig files with a single ToolExecutable xcconfig file
11096 that derives the product name from the target name. We can then use that xcconfig file for JSCLLIntOffsetsExtractor.
11097 This has the results of setting SKIP_INSTALL = YES for JSCLLIntOffsetsExtractor.
11099 While I was doing this fiddling I noticed that the JSCLLIntOffsetsExtractor target had a custom value
11100 for USER_HEADER_SEARCH_PATHS to allow it to find LLIntDesiredOffsets.h. A better way of doing that is
11101 to add LLIntDesiredOffsets.h to the Xcode project so that it'll be included in the header map. That
11102 allows us to remove the override of USER_HEADER_SEARCH_PATHS entirely. So I did that too!
11104 Reviewed by Filip Pizlo.
11106 * Configurations/TestRegExp.xcconfig: Removed.
11107 * Configurations/ToolExecutable.xcconfig: Renamed from Source/JavaScriptCore/Configurations/TestAPI.xcconfig.
11108 * JavaScriptCore.xcodeproj/project.pbxproj:
11110 2012-02-28 Filip Pizlo <fpizlo@apple.com>
11112 RefCounted::deprecatedTurnOffVerifier() should not be deprecated
11113 https://bugs.webkit.org/show_bug.cgi?id=79864
11115 Reviewed by Oliver Hunt.
11117 Removed the word "deprecated" from the name of this method, since this method
11118 should not be deprecated. It works just fine as it is, and there is simply no
11119 alternative to calling this method for many interesting JSC classes.
11121 * parser/SourceProvider.h:
11122 (JSC::SourceProvider::SourceProvider):
11123 * runtime/SymbolTable.h:
11124 (JSC::SharedSymbolTable::SharedSymbolTable):
11125 * wtf/MetaAllocator.cpp:
11126 (WTF::MetaAllocatorHandle::MetaAllocatorHandle):
11127 (WTF::MetaAllocator::allocate):
11128 * wtf/RefCounted.h:
11130 (WTF::RefCountedBase::turnOffVerifier):
11132 2012-02-29 Gavin Barraclough <barraclough@apple.com>
11134 'source' property of RegExp instance cannot be ""
11135 https://bugs.webkit.org/show_bug.cgi?id=79938
11137 Reviewed by Oliver Hunt.
11139 15.10.6.4 specifies that RegExp.prototype.toString must return '/' + source + '/',
11140 and also states that the result must be a valid RegularExpressionLiteral. '//' is
11141 not a valid RegularExpressionLiteral (since it is a single line comment), and hence
11142 source cannot ever validly be "". If the source is empty, return a different Pattern
11143 that would match the same thing.
11145 * runtime/RegExpObject.cpp:
11146 (JSC::regExpObjectSource):
11147 - Do not return "" if the source is empty, this would lead to invalid behaviour in toString.
11148 * runtime/RegExpPrototype.cpp:
11149 (JSC::regExpProtoFuncToString):
11150 - No need to special case the empty string - this should be being done by 'source'.
11152 2012-02-29 Gavin Barraclough <barraclough@apple.com>
11154 Writable attribute not set correctly when redefining an accessor to a data descriptor
11155 https://bugs.webkit.org/show_bug.cgi?id=79931
11157 Reviewed by Oliver Hunt.
11159 * runtime/JSObject.cpp:
11160 (JSC::JSObject::defineOwnProperty):
11161 - use attributesOverridingCurrent instead of attributesWithOverride.
11162 * runtime/PropertyDescriptor.cpp:
11163 * runtime/PropertyDescriptor.h:
11164 - remove attributesWithOverride - attributesOverridingCurrent does the same thing.
11166 2012-02-29 Kevin Ollivier <kevino@theolliviers.com>
11168 Add JSCore symbol exports needed by wx port
11169 https://bugs.webkit.org/show_bug.cgi?id=77280
11171 Reviewed by Hajime Morita.
11173 * wtf/ArrayBufferView.h:
11174 * wtf/ExportMacros.h:
11176 2012-02-28 Raphael Kubo da Costa <kubo@profusion.mobi>
11178 [CMake] Always build wtf as a static library.
11179 https://bugs.webkit.org/show_bug.cgi?id=79857
11181 Reviewed by Eric Seidel.
11183 To help the efforts in bug 75673 to move WTF out of
11184 JavaScriptCore, act more like the other ports and remove the
11185 possibility of building WTF as a shared library.
11187 It does not make much sense to, for example, ship WTF as a
11188 separate .so with webkit-efl packages, and it should be small
11189 enough not to cause problems during linking.
11191 * wtf/CMakeLists.txt:
11193 2012-02-28 Dmitry Lomov <dslomov@google.com>
11195 [JSC] Implement ArrayBuffer transfer
11196 https://bugs.webkit.org/show_bug.cgi?id=73493.
11197 Implement ArrayBuffer transfer, per Khronos spec: http://www.khronos.org/registry/typedarray/specs/latest/#9.
11198 This brings parity with V8 implementation of transferable typed arrays.
11200 Reviewed by Oliver Hunt.
11202 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Extra export.
11203 * wtf/ArrayBuffer.h:
11204 (ArrayBuffer): Added extra export.
11206 2012-02-28 Kevin Ollivier <kevino@theolliviers.com>
11208 [wx] Unreviewed. Build fix after recent LLInt additions.
11212 2012-02-28 Mark Hahnenberg <mhahnenberg@apple.com>
11214 Refactor SpeculativeJIT::emitAllocateJSFinalObject
11215 https://bugs.webkit.org/show_bug.cgi?id=79801
11217 Reviewed by Filip Pizlo.
11219 * dfg/DFGSpeculativeJIT.h:
11220 (JSC::DFG::SpeculativeJIT::emitAllocateBasicJSObject): Split emitAllocateJSFinalObject out to form this
11221 function, which is more generic in that it can allocate a variety of classes.
11223 (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject): Changed to use the new helper function.
11225 2012-02-28 Gavin Barraclough <barraclough@apple.com>
11227 [[Get]]/[[Put]] for primitives should not wrap on strict accessor call
11228 https://bugs.webkit.org/show_bug.cgi?id=79588
11230 Reviewed by Oliver Hunt.
11232 In the case of [[Get]], this is a pretty trivial bug - just don't wrap
11233 primitives at the point you call a getter.
11235 For setters, this is a little more involved, since we have already wrapped
11236 the value up in a synthesized object. Stop doing so. There is also a further
11237 subtely, that in strict mode all attempts to create a new data property on
11238 the object should throw.
11240 * runtime/JSCell.cpp:
11241 (JSC::JSCell::put):
11242 - [[Put]] to a string primitive should use JSValue::putToPrimitive.
11243 * runtime/JSObject.cpp:
11244 (JSC::JSObject::put):
11245 - Remove static function called in one place.
11246 * runtime/JSObject.h:
11247 (JSC::JSValue::put):
11248 - [[Put]] to a non-cell JSValue should use JSValue::putToPrimitive.
11249 * runtime/JSValue.cpp:
11250 (JSC::JSValue::synthesizePrototype):
11251 - Add support for synthesizing the prototype of strings.
11252 (JSC::JSValue::putToPrimitive):
11253 - Added, implements [[Put]] for primitive bases, per 8.7.2.
11254 * runtime/JSValue.h:
11256 - Add declaration for JSValue::putToPrimitive.
11257 * runtime/PropertySlot.cpp:
11258 (JSC::PropertySlot::functionGetter):
11259 - Don't call ToObject on primitive this values.
11261 2012-02-28 Mark Hahnenberg <mhahnenberg@apple.com>
11263 Re-enable parallel GC on Mac
11264 https://bugs.webkit.org/show_bug.cgi?id=79837
11266 Rubber stamped by Filip Pizlo.
11268 * runtime/Options.cpp:
11269 (JSC::Options::initializeOptions): We accidentally disabled parallel GC with this line,
11270 so we removed it and things should go back to normal.
11272 2012-02-28 Filip Pizlo <fpizlo@apple.com>
11274 Some run-javascriptcore-tests broken for 32-bit debug
11275 https://bugs.webkit.org/show_bug.cgi?id=79844
11277 Rubber stamped by Oliver Hunt.
11279 These assertions are just plain wrong for 32-bit. We could either have a massive
11280 assertion that depends on value representation, that has to be changed every
11281 time we change the JITs, resulting in a bug tail of debug-mode crashes, or we
11282 could get rid of the assertions. I pick the latter.
11284 * dfg/DFGOperations.cpp:
11285 * jit/JITStubs.cpp:
11286 (JSC::DEFINE_STUB_FUNCTION):
11288 2012-02-28 Mark Hahnenberg <mhahnenberg@apple.com>
11290 Get rid of padding cruft in CopiedBlock
11291 https://bugs.webkit.org/show_bug.cgi?id=79686
11293 Reviewed by Filip Pizlo.
11295 * heap/CopiedBlock.h:
11296 (CopiedBlock): Removed the extra padding that was used for alignment purposes until
11297 the calculation of the payload offset into CopiedBlocks was redone recently.
11299 2012-02-28 Anders Carlsson <andersca@apple.com>
11301 Fix build with newer versions of clang.
11303 Clang now warns since we're not passing a CFString literal to CFStringCreateWithFormatAndArguments,
11304 but it's OK to ignore this warning since clang is also checking that the caller (vprintf_stderr_common)
11305 takes a string literal.
11307 * wtf/Assertions.cpp:
11309 2012-02-28 Mario Sanchez Prada <msanchez@igalia.com>
11311 [GTK] Add GMainLoop and GMainContext to be handled by GRefPtr
11312 https://bugs.webkit.org/show_bug.cgi?id=79496
11314 Reviewed by Martin Robinson.
11316 Handle GMainLoop and GMainContext in GRefPtr, by calling
11317 g_main_loop_(un)ref and g_main_context_(un)ref in the
11318 implementation of the refGPtr and derefGPtr template functions.
11320 * wtf/gobject/GRefPtr.cpp:
11324 * wtf/gobject/GRefPtr.h:
11326 * wtf/gobject/GTypedefs.h:
11328 2012-02-28 Yong Li <yoli@rim.com>
11330 JSString::resolveRope() should report extra memory cost to the heap.
11331 https://bugs.webkit.org/show_bug.cgi?id=79555
11333 Reviewed by Michael Saboff.
11335 At the time a JSString is constructed with fibers, it doesn't report
11336 extra memory cost, which is reasonable because it hasn't allocate
11337 new memory. However when the rope is resolved, it should report meory
11338 cost for the new buffer.
11340 * runtime/JSString.cpp:
11341 (JSC::JSString::resolveRope):
11343 2012-02-27 Oliver Hunt <oliver@apple.com>
11345 sputnik/Unicode/Unicode_500/S7.2_A1.6_T1.html crashes in the interpreter
11346 https://bugs.webkit.org/show_bug.cgi?id=79728
11348 Reviewed by Gavin Barraclough.
11350 When initialising a chained get instruction we may end up in a state where
11351 the instruction stream says we have a scopechain, but it has not yet been set
11352 (eg. if allocating the StructureChain itself is what leads to the GC). We could
11353 re-order the allocation, but it occurs in a couple of places, so it seems less
11354 fragile simply to null check the scopechain slot before we actually visit the slot.
11356 * bytecode/CodeBlock.cpp:
11357 (JSC::CodeBlock::visitStructures):
11359 2012-02-27 Filip Pizlo <fpizlo@apple.com>
11361 Old JIT's style of JSVALUE64 strict equality is subtly wrong
11362 https://bugs.webkit.org/show_bug.cgi?id=79700
11364 Reviewed by Oliver Hunt.
11366 * assembler/MacroAssemblerX86_64.h:
11367 (JSC::MacroAssemblerX86_64::comparePtr):
11368 (MacroAssemblerX86_64):
11369 * dfg/DFGOperations.cpp:
11370 * dfg/DFGSpeculativeJIT.cpp:
11371 (JSC::DFG::SpeculativeJIT::nonSpeculativeStrictEq):
11372 * dfg/DFGSpeculativeJIT64.cpp:
11373 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
11374 (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
11375 * jit/JITOpcodes.cpp:
11376 (JSC::JIT::compileOpStrictEq):
11377 (JSC::JIT::emitSlow_op_stricteq):
11378 (JSC::JIT::emitSlow_op_nstricteq):
11379 * jit/JITStubs.cpp:
11380 (JSC::DEFINE_STUB_FUNCTION):
11382 2012-02-27 Gavin Barraclough <barraclough@apple.com>
11384 Implement support for op_negate and op_bitnot in the DFG JIT
11385 https://bugs.webkit.org/show_bug.cgi?id=79617
11387 Reviewed by Filip Pizlo.
11389 Add an ArithNegate op to the DFG JIT, to implement op_negate.
11391 This patch also adds support for op_negate to the JSVALUE64 baseline JIT
11392 (JSVALUE32_64 already had this), so that we can profile the slowpath usage.
11394 This is a 2.5%-3% Sunspider progression and a 1% win on Kraken.
11396 * assembler/ARMv7Assembler.h:
11397 (JSC::ARMv7Assembler::sub_S):
11398 - Added sub_S from immediate.
11400 (JSC::ARMv7Assembler::vneg):
11401 - Added double negate.
11402 * assembler/MacroAssemblerARMv7.h:
11403 (JSC::MacroAssemblerARMv7::negateDouble):
11404 - Added double negate.
11405 (MacroAssemblerARMv7):
11406 (JSC::MacroAssemblerARMv7::branchNeg32):
11408 * assembler/MacroAssemblerX86.h:
11409 (MacroAssemblerX86):
11410 - moved loadDouble, absDouble to common.
11411 * assembler/MacroAssemblerX86Common.h:
11412 (MacroAssemblerX86Common):
11413 (JSC::MacroAssemblerX86Common::absDouble):
11414 - implementation can be shared.
11415 (JSC::MacroAssemblerX86Common::negateDouble):
11417 (JSC::MacroAssemblerX86Common::loadDouble):
11418 - allow absDouble to have a common implementation.
11419 * assembler/MacroAssemblerX86_64.h:
11420 (MacroAssemblerX86_64):
11421 - moved loadDouble, absDouble to common.
11422 * dfg/DFGAbstractState.cpp:
11423 (JSC::DFG::AbstractState::execute):
11424 - support ArithNegate.
11425 * dfg/DFGArithNodeFlagsInferencePhase.cpp:
11426 (JSC::DFG::ArithNodeFlagsInferencePhase::propagate):
11427 - support ArithNegate.
11428 * dfg/DFGByteCodeParser.cpp:
11429 (JSC::DFG::ByteCodeParser::makeSafe):
11430 - support ArithNegate.
11431 (JSC::DFG::ByteCodeParser::parseBlock):
11432 - support op_negate.
11433 * dfg/DFGCSEPhase.cpp:
11434 (JSC::DFG::CSEPhase::performNodeCSE):
11435 - support ArithNegate.
11436 * dfg/DFGCapabilities.h:
11437 (JSC::DFG::canCompileOpcode):
11438 - support op_negate.
11440 (JSC::DFG::Graph::negateShouldSpeculateInteger):
11441 - support ArithNegate.
11443 (JSC::DFG::Node::hasArithNodeFlags):
11444 - support ArithNegate.
11445 * dfg/DFGPredictionPropagationPhase.cpp:
11446 (JSC::DFG::PredictionPropagationPhase::propagate):
11447 - support ArithNegate.
11448 * dfg/DFGSpeculativeJIT.cpp:
11449 (JSC::DFG::SpeculativeJIT::compileArithNegate):
11450 - support ArithNegate.
11451 * dfg/DFGSpeculativeJIT.h:
11453 - support ArithNegate.
11454 * dfg/DFGSpeculativeJIT32_64.cpp:
11455 (JSC::DFG::SpeculativeJIT::compile):
11456 - support ArithNegate.
11457 * dfg/DFGSpeculativeJIT64.cpp:
11458 (JSC::DFG::SpeculativeJIT::compile):
11459 - support ArithNegate.
11461 (JSC::JIT::privateCompileMainPass):
11462 (JSC::JIT::privateCompileSlowCases):
11463 - Add support for op_negate in JSVALUE64.
11464 * jit/JITArithmetic.cpp:
11465 (JSC::JIT::emit_op_negate):
11466 (JSC::JIT::emitSlow_op_negate):
11467 - Add support for op_negate in JSVALUE64.
11469 2012-02-27 Mahesh Kulkarni <mahesh.kulkarni@nokia.com>
11471 Unreviewed. Build fix for linux-bot (qt) after r109021.
11473 * runtime/Error.cpp:
11475 2012-02-27 Oliver Hunt <oliver@apple.com>
11477 REGRESSION (r108112): AWS Management Console at amazon.com fails to initialize
11478 https://bugs.webkit.org/show_bug.cgi?id=79693
11480 Reviewed by Filip Pizlo.
11482 Alas we can't provide the stack trace as an array, as despite everyone wanting
11483 an array, everyone arbitrarily creates the array by calling split on the stack
11484 trace. To create the array we would have provided them in the first place.
11486 This changes the exception's stack property to a \n separated string. To get the
11487 old array just do <exception>.stack.split("\n").
11489 * runtime/Error.cpp:
11490 (JSC::addErrorInfo):
11492 2012-02-27 Gavin Barraclough <barraclough@apple.com>
11494 RegExp lastIndex should behave as a regular property
11495 https://bugs.webkit.org/show_bug.cgi?id=79446
11497 Reviewed by Sam Weinig.
11499 lastIndex should be a regular data descriptor, with the attributes configurable:false,
11500 enumerable:false, writable:true. As such, it should be possible to reconfigure writable
11501 as false. If the lastIndex property is reconfigured to be read-only, we should respect
11504 * runtime/CommonIdentifiers.h:
11505 - Removed some unused identifiers, added lastIndex.
11506 * runtime/RegExpObject.cpp:
11507 (JSC::RegExpObject::getOwnPropertySlot):
11508 - lastIndex is no longer a static value, provided specific handling.
11509 (JSC::RegExpObject::getOwnPropertyDescriptor):
11510 - lastIndex is no longer a static value, provided specific handling.
11511 (JSC::RegExpObject::deleteProperty):
11512 - lastIndex is no longer a static value, provided specific handling.
11513 (JSC::RegExpObject::getOwnPropertyNames):
11514 - lastIndex is no longer a static value, provided specific handling.
11515 (JSC::RegExpObject::getPropertyNames):
11516 - lastIndex is no longer a static value, provided specific handling.
11518 - helper function for defineOwnProperty.
11519 (JSC::RegExpObject::defineOwnProperty):
11520 - lastIndex is no longer a static value, provided specific handling.
11521 (JSC::RegExpObject::put):
11522 - lastIndex is no longer a static value, provided specific handling.
11523 (JSC::RegExpObject::match):
11524 - Pass setLastIndex an ExecState, so it can throw if read-only.
11525 * runtime/RegExpObject.h:
11526 (JSC::RegExpObject::setLastIndex):
11527 - Pass setLastIndex an ExecState, so it can throw if read-only.
11528 (RegExpObjectData):
11529 - Added lastIndexIsWritable.
11530 * runtime/RegExpPrototype.cpp:
11531 (JSC::regExpProtoFuncCompile):
11532 - Pass setLastIndex an ExecState, so it can throw if read-only.
11534 2012-02-27 Gavin Barraclough <barraclough@apple.com>
11536 Implement support for op_negate and op_bitnot in the DFG JIT
11537 https://bugs.webkit.org/show_bug.cgi?id=79617
11539 Reviewed by Sam Weinig.
11541 Remove op_bitnop - this is redundant, ~x === x^-1.
11542 This is a fractional (<1%) progression.
11544 Remove not32(X) from the MacroAssemblers - make this an optimization to add32(-1, X).
11545 Remove CanReuse from the result type - this was unused.
11548 * assembler/MacroAssemblerARM.h:
11549 (MacroAssemblerARM):
11550 (JSC::MacroAssemblerARM::xor32):
11551 * assembler/MacroAssemblerARMv7.h:
11552 (MacroAssemblerARMv7):
11553 (JSC::MacroAssemblerARMv7::xor32):
11554 * assembler/MacroAssemblerMIPS.h:
11555 (MacroAssemblerMIPS):
11556 (JSC::MacroAssemblerMIPS::xor32):
11557 * assembler/MacroAssemblerSH4.h:
11558 (MacroAssemblerSH4):
11559 (JSC::MacroAssemblerSH4::xor32):
11560 * assembler/MacroAssemblerX86Common.h:
11561 (MacroAssemblerX86Common):
11562 (JSC::MacroAssemblerX86Common::xor32):
11563 * bytecode/CodeBlock.cpp:
11564 (JSC::CodeBlock::dump):
11565 * bytecode/Opcode.h:
11567 (JSC::padOpcodeName):
11568 * bytecompiler/NodesCodegen.cpp:
11570 (JSC::BitwiseNotNode::emitBytecode):
11571 * interpreter/Interpreter.cpp:
11572 (JSC::Interpreter::privateExecute):
11574 (JSC::JIT::privateCompileMainPass):
11575 (JSC::JIT::privateCompileSlowCases):
11578 * jit/JITArithmetic32_64.cpp:
11580 * jit/JITOpcodes.cpp:
11582 * jit/JITStubs.cpp:
11585 * llint/LLIntSlowPaths.cpp:
11587 * llint/LLIntSlowPaths.h:
11589 * llint/LowLevelInterpreter32_64.asm:
11590 * parser/NodeConstructors.h:
11591 (JSC::NegateNode::NegateNode):
11592 (JSC::BitwiseNotNode::BitwiseNotNode):
11593 (JSC::MultNode::MultNode):
11594 (JSC::DivNode::DivNode):
11595 (JSC::ModNode::ModNode):
11596 (JSC::SubNode::SubNode):
11597 (JSC::UnsignedRightShiftNode::UnsignedRightShiftNode):
11600 (JSC::BitwiseNotNode::expr):
11602 * parser/ResultType.h:
11604 (JSC::ResultType::numberTypeIsInt32):
11605 (JSC::ResultType::stringOrNumberType):
11606 (JSC::ResultType::forAdd):
11607 (JSC::ResultType::forBitOp):
11609 2012-02-27 Michael Saboff <msaboff@apple.com>
11611 Error check regexp min quantifier
11612 https://bugs.webkit.org/show_bug.cgi?id=70648
11614 Reviewed by Gavin Barraclough.
11616 Added checking for min or only quantifier being UINT_MAX.
11617 When encountered this becomes a SyntaxError during parsing.
11619 * yarr/YarrParser.h:
11620 (JSC::Yarr::Parser::parseQuantifier):
11621 (JSC::Yarr::Parser::parse):
11624 2012-02-27 Carlos Garcia Campos <cgarcia@igalia.com>
11626 Unreviewed. Fix make distcheck.
11628 * GNUmakefile.list.am: Add missing files.
11630 2012-02-26 Hajime Morrita <morrita@chromium.org>
11632 Move ChromeClient::showContextMenu() to ContextMenuClient
11633 https://bugs.webkit.org/show_bug.cgi?id=79427
11635 Reviewed by Adam Barth.
11637 Added ACCESSIBILITY_CONTEXT_MENUS.
11641 2012-02-26 Filip Pizlo <fpizlo@apple.com>
11643 LayoutTests/fast/xpath/xpath-functional-test.html is crashing in the DFG
11644 https://bugs.webkit.org/show_bug.cgi?id=79616
11646 Reviewed by Oliver Hunt.
11648 Guard against the fact that in JSVALUE64, JSValue().isCell() == true.
11650 * dfg/DFGAbstractValue.h:
11651 (JSC::DFG::AbstractValue::validate):
11653 2012-02-26 Filip Pizlo <fpizlo@apple.com>
11655 DFG should support activations and nested functions
11656 https://bugs.webkit.org/show_bug.cgi?id=79554
11658 Reviewed by Sam Weinig.
11660 Fix 32-bit. The 32-bit function+activation code had some really weird
11661 register reuse bugs.
11663 * dfg/DFGSpeculativeJIT32_64.cpp:
11664 (JSC::DFG::SpeculativeJIT::compile):
11666 2012-02-26 Filip Pizlo <fpizlo@apple.com>
11668 Getting the instruction stream for a code block should not require two loads
11669 https://bugs.webkit.org/show_bug.cgi?id=79608
11671 Reviewed by Sam Weinig.
11673 Introduced the RefCountedArray class, which contains a single inline pointer
11674 to a ref-counted non-resizeable vector backing store. This satisfies the
11675 requirements of CodeBlock, which desires the ability to share instruction
11676 streams with other CodeBlocks. It also reduces the number of loads required
11677 for getting the instruction stream by one.
11679 This patch also gets rid of the bytecode discarding logic, since we don't
11680 use it anymore and it's unlikely to ever work right with DFG or LLInt. And
11681 I didn't feel like porting dead code to use RefCountedArray.
11683 * GNUmakefile.list.am:
11684 * JavaScriptCore.xcodeproj/project.pbxproj:
11685 * bytecode/CodeBlock.cpp:
11686 (JSC::instructionOffsetForNth):
11687 (JSC::CodeBlock::dump):
11688 (JSC::CodeBlock::CodeBlock):
11689 (JSC::CodeBlock::finalizeUnconditionally):
11690 (JSC::CodeBlock::handlerForBytecodeOffset):
11691 (JSC::CodeBlock::lineNumberForBytecodeOffset):
11692 (JSC::CodeBlock::expressionRangeForBytecodeOffset):
11693 (JSC::CodeBlock::shrinkToFit):
11694 * bytecode/CodeBlock.h:
11696 (JSC::CodeBlock::numberOfInstructions):
11697 (JSC::CodeBlock::instructions):
11698 (JSC::CodeBlock::instructionCount):
11699 (JSC::CodeBlock::valueProfileForBytecodeOffset):
11701 * bytecompiler/BytecodeGenerator.cpp:
11702 (JSC::Label::setLocation):
11704 (JSC::BytecodeGenerator::generate):
11705 (JSC::BytecodeGenerator::newLabel):
11706 * bytecompiler/BytecodeGenerator.h:
11708 (BytecodeGenerator):
11709 (JSC::BytecodeGenerator::instructions):
11710 * bytecompiler/Label.h:
11711 (JSC::Label::Label):
11713 * dfg/DFGByteCodeCache.h:
11714 (JSC::DFG::ByteCodeCache::~ByteCodeCache):
11715 (JSC::DFG::ByteCodeCache::get):
11716 * jit/JITExceptions.cpp:
11717 (JSC::genericThrow):
11718 * llint/LowLevelInterpreter32_64.asm:
11719 * runtime/Executable.cpp:
11720 (JSC::EvalExecutable::compileInternal):
11721 (JSC::ProgramExecutable::compileInternal):
11722 (JSC::FunctionExecutable::codeBlockWithBytecodeFor):
11723 (JSC::FunctionExecutable::produceCodeBlockFor):
11724 * wtf/RefCountedArray.h: Added.
11727 (WTF::RefCountedArray::RefCountedArray):
11728 (WTF::RefCountedArray::operator=):
11729 (WTF::RefCountedArray::~RefCountedArray):
11730 (WTF::RefCountedArray::size):
11731 (WTF::RefCountedArray::data):
11732 (WTF::RefCountedArray::begin):
11733 (WTF::RefCountedArray::end):
11734 (WTF::RefCountedArray::at):
11735 (WTF::RefCountedArray::operator[]):
11737 (WTF::RefCountedArray::Header::size):
11738 (WTF::RefCountedArray::Header::payload):
11739 (WTF::RefCountedArray::Header::fromPayload):
11742 2012-02-26 Yusuke Suzuki <utatane.tea@gmail.com>
11744 StringLiteral and NumericLiteral are allowed as ObjectLiteral getter / setter name
11745 https://bugs.webkit.org/show_bug.cgi?id=79571
11747 Reviewed by Gavin Barraclough.
11749 * parser/ASTBuilder.h:
11750 (JSC::ASTBuilder::createGetterOrSetterProperty):
11751 * parser/Parser.cpp:
11752 (JSC::::parseProperty):
11753 * parser/SyntaxChecker.h:
11754 (JSC::SyntaxChecker::createGetterOrSetterProperty):
11756 2012-02-26 Mark Hahnenberg <mhahnenberg@apple.com>
11758 Implement fast path for op_new_array in the baseline JIT
11759 https://bugs.webkit.org/show_bug.cgi?id=78612
11761 Reviewed by Filip Pizlo.
11763 heap/CopiedAllocator.h:
11764 (CopiedAllocator): Friended the JIT to allow access to m_currentOffset.
11765 * heap/CopiedSpace.h:
11766 (CopiedSpace): Friended the JIT to allow access to isOversize.
11767 (JSC::CopiedSpace::allocator):
11769 (JSC::Heap::storageAllocator): Added a getter for the CopiedAllocator class so the JIT
11770 can use it for simple allocation i.e. when we can just bump the offset without having to
11773 (JSC::JIT::privateCompileSlowCases): Added new slow case for op_new_array for when
11774 we have to bail out because the fast allocation path fails for whatever reason.
11777 * jit/JITInlineMethods.h:
11778 (JSC::JIT::emitAllocateBasicStorage): Added utility function that allows objects to
11779 allocate generic backing stores. This function is used by emitAllocateJSArray.
11781 (JSC::JIT::emitAllocateJSArray): Added utility function that allows the client to
11782 more easily allocate JSArrays. This function is used by emit_op_new_array and I expect
11783 it will also be used for emit_op_new_array_buffer.
11784 * jit/JITOpcodes.cpp:
11785 (JSC::JIT::emit_op_new_array): Changed to do inline allocation of JSArrays. Still does
11786 a stub call for oversize arrays.
11788 (JSC::JIT::emitSlow_op_new_array): New slow path that just bails out to a stub call if we
11789 fail in any way on the fast path.
11790 * runtime/JSArray.cpp:
11792 * runtime/JSArray.h: Added lots of offset functions for all the fields that we need to
11793 initialize in the JIT.
11795 (JSC::ArrayStorage::lengthOffset):
11796 (JSC::ArrayStorage::numValuesInVectorOffset):
11797 (JSC::ArrayStorage::allocBaseOffset):
11798 (JSC::ArrayStorage::vectorOffset):
11800 (JSC::JSArray::sparseValueMapOffset):
11801 (JSC::JSArray::subclassDataOffset):
11802 (JSC::JSArray::indexBiasOffset):
11804 (JSC::JSArray::storageSize): Moved this function from being a static function in the cpp file
11805 to being a static function in the JSArray class. This move allows the JIT to call it to
11806 see what size it should allocate.
11808 2012-02-26 Patrick Gansterer <paroga@webkit.org>
11810 Unreviewed. Build fix for ENABLE(CLASSIC_INTERPRETER) after r108681.
11812 * interpreter/Interpreter.cpp:
11813 (JSC::getLineNumberForCallFrame):
11814 (JSC::Interpreter::getStackTrace):
11816 2012-02-26 Patrick Gansterer <paroga@webkit.org>
11818 Unreviewed. Build fix for !ENABLE(JIT) after r108681.
11820 * interpreter/Interpreter.cpp:
11821 (JSC::getLineNumberForCallFrame):
11823 2012-02-25 Filip Pizlo <fpizlo@apple.com>
11825 LLInt assembly file should be split into 32-bit and 64-bit parts
11826 https://bugs.webkit.org/show_bug.cgi?id=79584
11828 Reviewed by Sam Weinig.
11830 Moved LowLevelInterpreter.asm to LowLevelInterpreter32_64.asm. Gave offlineasm
11831 the ability to include files, and correctly track dependencies: it restricts
11832 the include mechanism to using the same directory as the source file, and uses
11833 the SHA1 hash of all .asm files in that directory as an input hash.
11835 * llint/LLIntOfflineAsmConfig.h:
11836 * llint/LowLevelInterpreter.asm:
11837 * llint/LowLevelInterpreter32_64.asm: Added.
11838 - This is just the entire contents of what was previously LowLevelInterpreter.asm
11839 * llint/LowLevelInterpreter64.asm: Added.
11840 * offlineasm/asm.rb:
11841 * offlineasm/ast.rb:
11842 * offlineasm/generate_offset_extractor.rb:
11843 * offlineasm/parser.rb:
11844 * offlineasm/self_hash.rb:
11846 2012-02-25 Filip Pizlo <fpizlo@apple.com>
11848 Offlineasm should support X86_64
11849 https://bugs.webkit.org/show_bug.cgi?id=79581
11851 Reviewed by Oliver Hunt.
11853 * llint/LLIntOfflineAsmConfig.h:
11854 * offlineasm/backends.rb:
11855 * offlineasm/instructions.rb:
11856 * offlineasm/settings.rb:
11857 * offlineasm/x86.rb:
11859 2012-02-25 Filip Pizlo <fpizlo@apple.com>
11861 DFG should support activations and nested functions
11862 https://bugs.webkit.org/show_bug.cgi?id=79554
11864 Reviewed by Oliver Hunt.
11866 Wrote the simplest possible implementation of activations. Big speed-up on
11867 code that uses activations, no speed-up on major benchmarks (SunSpider, V8,
11868 Kraken) because they do not appear to have sufficient coverage over code
11869 that uses activations.
11871 * bytecode/PredictedType.cpp:
11872 (JSC::predictionToString):
11873 (JSC::predictionFromValue):
11874 * bytecode/PredictedType.h:
11876 (JSC::isEmptyPrediction):
11877 * dfg/DFGAbstractState.cpp:
11878 (JSC::DFG::AbstractState::execute):
11879 * dfg/DFGByteCodeParser.cpp:
11880 (JSC::DFG::ByteCodeParser::ByteCodeParser):
11882 (JSC::DFG::ByteCodeParser::parseBlock):
11883 (JSC::DFG::ByteCodeParser::buildOperandMapsIfNecessary):
11884 (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
11885 (JSC::DFG::ByteCodeParser::parse):
11886 * dfg/DFGCapabilities.h:
11887 (JSC::DFG::canCompileOpcode):
11888 (JSC::DFG::canInlineOpcode):
11890 (JSC::DFG::Graph::needsActivation):
11893 (JSC::DFG::Node::storageAccessDataIndex):
11895 (JSC::DFG::Node::hasFunctionDeclIndex):
11896 (JSC::DFG::Node::functionDeclIndex):
11897 (JSC::DFG::Node::hasFunctionExprIndex):
11898 (JSC::DFG::Node::functionExprIndex):
11899 * dfg/DFGOperations.cpp:
11900 * dfg/DFGOperations.h:
11901 * dfg/DFGPredictionPropagationPhase.cpp:
11902 (JSC::DFG::PredictionPropagationPhase::propagate):
11903 * dfg/DFGSpeculativeJIT.cpp:
11904 (JSC::DFG::SpeculativeJIT::compileNewFunctionNoCheck):
11906 (JSC::DFG::SpeculativeJIT::compileNewFunctionExpression):
11907 * dfg/DFGSpeculativeJIT.h:
11908 (JSC::DFG::SpeculativeJIT::callOperation):
11909 * dfg/DFGSpeculativeJIT32_64.cpp:
11910 (JSC::DFG::SpeculativeJIT::compile):
11911 * dfg/DFGSpeculativeJIT64.cpp:
11912 (JSC::DFG::SpeculativeJIT::compile):
11914 2012-02-25 Benjamin Poulain <benjamin@webkit.org>
11916 Add an empty skeleton of KURL for WTFURL
11917 https://bugs.webkit.org/show_bug.cgi?id=78990
11919 Reviewed by Adam Barth.
11921 * JavaScriptCore.xcodeproj/project.pbxproj: Export the relevant classes from WTFURL
11922 so that can use them in WebCore.
11924 2012-02-25 Filip Pizlo <fpizlo@apple.com>
11926 Unreviewed, fix build for DFG disabled and LLInt enabled.
11929 (JSC::JIT::privateCompile):
11930 * llint/LLIntSlowPaths.cpp:
11932 (JSC::LLInt::LLINT_SLOW_PATH_DECL):
11934 2012-02-25 Mark Hahnenberg <mhahnenberg@apple.com>
11936 Fix the CopiedBlock offset alignment in a cross platform fashion
11937 https://bugs.webkit.org/show_bug.cgi?id=79556
11939 Reviewed by Filip Pizlo.
11941 Replaced m_payload with a payload() method that calculates the offset
11942 of the payload with the proper alignment. This change allows us to
11943 avoid alignment-related issues in a cross-platform manner.
11945 * heap/CopiedAllocator.h:
11946 (JSC::CopiedAllocator::currentUtilization):
11947 * heap/CopiedBlock.h:
11948 (JSC::CopiedBlock::CopiedBlock):
11949 (JSC::CopiedBlock::payload):
11951 * heap/CopiedSpace.cpp:
11952 (JSC::CopiedSpace::doneFillingBlock):
11953 * heap/CopiedSpaceInlineMethods.h:
11954 (JSC::CopiedSpace::borrowBlock):
11955 (JSC::CopiedSpace::allocateFromBlock):
11957 2012-02-24 Michael Saboff <msaboff@apple.com>
11959 Unreviewed, Windows build fix. Changed signature in export to match
11960 change made in r108858.
11962 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
11964 2012-02-24 Filip Pizlo <fpizlo@apple.com>
11966 DFG support for op_new_regexp should be enabled
11967 https://bugs.webkit.org/show_bug.cgi?id=79538
11969 Reviewed by Oliver Hunt.
11971 No performance change.
11973 * dfg/DFGCapabilities.h:
11974 (JSC::DFG::canCompileOpcode):
11977 2012-02-24 Michael Saboff <msaboff@apple.com>
11979 ASSERT(position < 0) in JSC::Yarr::Interpreter::InputStream::readChecked
11980 https://bugs.webkit.org/show_bug.cgi?id=73728
11982 Reviewed by Gavin Barraclough.
11984 Fixed the mixing of signed and unsigned character indeces in YARR
11987 * runtime/RegExp.cpp:
11988 (JSC::RegExp::match): Added code to check for match longer than 2^31 and
11989 return no match after resetting the offsets.
11990 * yarr/YarrInterpreter.cpp: Changed to use unsigned for all character index
11991 handling except when matching back references.
11992 (JSC::Yarr::Interpreter::InputStream::readChecked):
11993 (JSC::Yarr::Interpreter::InputStream::checkInput):
11994 (JSC::Yarr::Interpreter::InputStream::uncheckInput):
11995 (JSC::Yarr::Interpreter::InputStream::atStart):
11996 (JSC::Yarr::Interpreter::InputStream::atEnd):
11997 (JSC::Yarr::Interpreter::InputStream::isAvailableInput):
11998 (JSC::Yarr::Interpreter::checkCharacter):
11999 (JSC::Yarr::Interpreter::checkCasedCharacter):
12000 (JSC::Yarr::Interpreter::checkCharacterClass):
12001 (JSC::Yarr::Interpreter::tryConsumeBackReference):
12002 (JSC::Yarr::Interpreter::matchAssertionBOL):
12003 (JSC::Yarr::Interpreter::matchAssertionWordBoundary):
12004 (JSC::Yarr::Interpreter::backtrackPatternCharacter):
12005 (JSC::Yarr::Interpreter::backtrackPatternCasedCharacter):
12006 (JSC::Yarr::Interpreter::matchCharacterClass):
12007 (JSC::Yarr::Interpreter::backtrackCharacterClass):
12008 (JSC::Yarr::Interpreter::matchParenthesesOnceBegin):
12009 (JSC::Yarr::Interpreter::matchDisjunction):
12010 (JSC::Yarr::Interpreter::interpret):
12011 (JSC::Yarr::ByteCompiler::assertionBOL):
12012 (JSC::Yarr::ByteCompiler::assertionEOL):
12013 (JSC::Yarr::ByteCompiler::assertionWordBoundary):
12014 (JSC::Yarr::ByteCompiler::atomPatternCharacter):
12015 (JSC::Yarr::ByteCompiler::atomCharacterClass):
12016 (JSC::Yarr::ByteCompiler::atomBackReference):
12017 (JSC::Yarr::ByteCompiler::atomParenthesesOnceBegin):
12018 (JSC::Yarr::ByteCompiler::atomParenthesesTerminalBegin):
12019 (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternBegin):
12020 (JSC::Yarr::ByteCompiler::atomParentheticalAssertionEnd):
12021 (JSC::Yarr::ByteCompiler::emitDisjunction):
12022 * yarr/YarrInterpreter.h:
12024 2012-02-24 Filip Pizlo <fpizlo@apple.com>
12026 Unreviewed, build fix for builds where the DFG is disabled but the LLInt is
12029 * llint/LLIntOfflineAsmConfig.h:
12030 * llint/LowLevelInterpreter.asm:
12032 2012-02-24 Filip Pizlo <fpizlo@apple.com>
12034 DFG should be able to handle variables getting captured
12035 https://bugs.webkit.org/show_bug.cgi?id=79469
12037 Reviewed by Oliver Hunt.
12039 Made captured variables work by placing a Flush on the SetLocal and
12040 forcing the emission of the GetLocal even if copy propagation tells us
12043 Changed the CFA and various prediction codes to understand that we can't
12044 really prove anything about captured variables. Well, we could in the
12045 future by just looking at what side effects are happening, but in this
12046 first cut we just assume that we can't reason about captured variables.
12048 Also added a mode where the DFG pretends that all variables and arguments
12049 got captured. Used this mode to harden the code.
12051 This is performance neutral. Capturing all variables is a slow down, but
12052 not too big of one. This seems to predict that when we add activation
12053 support, the amount of speed benefit we'll get from increased coverage
12054 will far outweigh the pessimism that we'll have to endure for captured
12057 * bytecode/CodeType.h:
12058 (JSC::codeTypeToString):
12059 * dfg/DFGAbstractState.cpp:
12060 (JSC::DFG::AbstractState::initialize):
12061 (JSC::DFG::AbstractState::endBasicBlock):
12062 (JSC::DFG::AbstractState::execute):
12063 (JSC::DFG::AbstractState::merge):
12064 * dfg/DFGAbstractState.h:
12066 * dfg/DFGByteCodeParser.cpp:
12067 (JSC::DFG::ByteCodeParser::getLocal):
12068 (JSC::DFG::ByteCodeParser::setLocal):
12069 (JSC::DFG::ByteCodeParser::getArgument):
12070 (JSC::DFG::ByteCodeParser::setArgument):
12071 (JSC::DFG::ByteCodeParser::flushArgument):
12072 (JSC::DFG::ByteCodeParser::handleInlining):
12073 (JSC::DFG::ByteCodeParser::processPhiStack):
12074 (JSC::DFG::ByteCodeParser::parseCodeBlock):
12075 (JSC::DFG::ByteCodeParser::parse):
12076 * dfg/DFGCapabilities.h:
12077 (JSC::DFG::mightInlineFunctionForCall):
12078 (JSC::DFG::mightInlineFunctionForConstruct):
12081 (JSC::DFG::Graph::needsActivation):
12083 (JSC::DFG::Graph::argumentIsCaptured):
12084 (JSC::DFG::Graph::localIsCaptured):
12085 (JSC::DFG::Graph::isCaptured):
12087 (JSC::DFG::Node::shouldGenerate):
12088 * dfg/DFGPredictionPropagationPhase.cpp:
12089 (JSC::DFG::PredictionPropagationPhase::propagate):
12090 (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
12091 * dfg/DFGSpeculativeJIT.cpp:
12093 (JSC::DFG::ValueSource::dump):
12094 (JSC::DFG::SpeculativeJIT::compile):
12095 * dfg/DFGSpeculativeJIT.h:
12097 * dfg/DFGSpeculativeJIT32_64.cpp:
12098 (JSC::DFG::SpeculativeJIT::compile):
12099 * dfg/DFGSpeculativeJIT64.cpp:
12100 (JSC::DFG::SpeculativeJIT::compile):
12101 * dfg/DFGVirtualRegisterAllocationPhase.cpp:
12102 (JSC::DFG::VirtualRegisterAllocationPhase::run):
12104 2012-02-24 Gavin Barraclough <barraclough@apple.com>
12106 Should not allow malformed \x escapes
12107 https://bugs.webkit.org/show_bug.cgi?id=79462
12109 Reviewed by Oliver Hunt.
12111 * parser/Lexer.cpp:
12112 (JSC::::parseString):
12113 (JSC::::parseStringSlowCase):
12114 - Prohibit malformed '\x' escapes
12115 * tests/mozilla/ecma/Array/15.4.5.1-1.js:
12116 * tests/mozilla/ecma/LexicalConventions/7.7.4.js:
12117 * tests/mozilla/ecma_2/RegExp/hex-001.js:
12118 * tests/mozilla/js1_2/regexp/hexadecimal.js:
12119 - Remove erroneous test cases (correct behaviour is tested by LayoutTests/sputnik).
12121 2012-02-24 Daniel Bates <dbates@webkit.org>
12123 Fix change log entry for changeset r108819; add bug URL
12124 https://bugs.webkit.org/show_bug.cgi?id=79504
12126 Changeset r108819 is associated with bug #79504.
12130 2012-02-24 Daniel Bates <dbates@webkit.org>
12132 Substitute ENABLE(CLASSIC_INTERPRETER) for ENABLE(INTERPRETER) in Interpreter.cpp
12133 https://bugs.webkit.org/show_bug.cgi?id=79504
12135 Reviewed by Oliver Hunt.
12137 There are a few places in Interpreter.cpp that need to be updated to use
12138 ENABLE(CLASSIC_INTERPRETER) following the renaming of ENABLE_INTERPRETER to
12139 ENABLE_CLASSIC_INTERPRETER in changeset <http://trac.webkit.org/changeset/108020>
12140 (https://bugs.webkit.org/show_bug.cgi?id=78791).
12142 * interpreter/Interpreter.cpp:
12143 (JSC::getLineNumberForCallFrame):
12144 (JSC::getCallerInfo):
12145 (JSC::getSourceURLFromCallFrame):
12147 2012-02-24 Adam Roben <aroben@apple.com>
12149 Undo the BUILDING_WTF part of r108808
12151 This broke the build, which is obviously worse than the linker warning it was trying to
12154 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
12156 2012-02-24 Adam Roben <aroben@apple.com>
12158 Fix linker warnings on Windows
12160 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Removed symbols that are already
12161 exported via JS_EXPORTDATA.
12163 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: Define BUILDING_WTF. We
12164 aren't actually building WTF, but we are statically linking it, so we need to define this
12165 symbol so that we export WTF's exports.
12167 2012-02-24 Philippe Normand <pnormand@igalia.com>
12169 Fix GTK WebAudio build for WebKitGTK 1.7.90.
12171 Patch by Priit Laes <plaes@plaes.org> on 2012-02-24
12172 Rubber-stamped by Philippe Normand.
12174 * GNUmakefile.list.am: Add Complex.h to the list of files so it
12175 gets disted in the tarballs.
12177 2012-02-24 Zoltan Herczeg <zherczeg@webkit.org>
12179 [Qt] Buildfix for "Zero out CopiedBlocks on initialization".
12180 https://bugs.webkit.org/show_bug.cgi?id=79199
12182 Ruber stamped by Csaba Osztrogonác.
12184 Temporary fix since the new member wastes a little space on
12185 64 bit systems. Although it is harmless, it is only needed
12186 for 32 bit systems.
12188 * heap/CopiedBlock.h:
12191 2012-02-24 Han Hojong <hojong.han@samsung.com>
12193 Remove useless jump instructions for short circuit
12194 https://bugs.webkit.org/show_bug.cgi?id=75602
12196 Reviewed by Michael Saboff.
12198 Jump instruction is inserted to make short circuit,
12199 however it does nothing but moving to the next instruction.
12200 Therefore useless jump instructions are removed,
12201 and jump list is moved into the case not for a short circuit,
12202 so that only necessary instructions are added to JIT code
12203 unless it has a 16 bit pattern character and an 8 bit string.
12205 * yarr/YarrJIT.cpp:
12206 (JSC::Yarr::YarrGenerator::generatePatternCharacterGreedy):
12207 (JSC::Yarr::YarrGenerator::backtrackPatternCharacterNonGreedy):
12209 2012-02-24 Sheriff Bot <webkit.review.bot@gmail.com>
12211 Unreviewed, rolling out r108731.
12212 http://trac.webkit.org/changeset/108731
12213 https://bugs.webkit.org/show_bug.cgi?id=79464
12215 Broke Chromium Win tests (Requested by bashi on #webkit).
12219 2012-02-24 Andrew Lo <anlo@rim.com>
12221 [BlackBerry] Enable requestAnimationFrame
12222 https://bugs.webkit.org/show_bug.cgi?id=79408
12224 Use timer implementation of requestAnimationFrame on BlackBerry.
12226 Reviewed by Rob Buis.
12230 2012-02-24 Mathias Bynens <mathias@qiwi.be>
12232 `\u200c` and `\u200d` should be allowed in IdentifierPart, as per ES5
12233 https://bugs.webkit.org/show_bug.cgi?id=78908
12235 Add additional checks for zero-width non-joiner (0x200C) and
12236 zero-width joiner (0x200D) characters.
12238 Reviewed by Michael Saboff.
12240 * parser/Lexer.cpp:
12241 (JSC::isNonASCIIIdentPart)
12242 * runtime/LiteralParser.cpp:
12243 (JSC::::Lexer::lexIdentifier)
12245 2012-02-23 Kenichi Ishibashi <bashi@chromium.org>
12247 Adding WebSocket per-frame DEFLATE extension
12248 https://bugs.webkit.org/show_bug.cgi?id=77522
12250 Added USE(ZLIB) flag.
12252 Reviewed by Kent Tamura.
12256 2012-02-23 Mark Hahnenberg <mhahnenberg@apple.com>
12258 Zero out CopiedBlocks on initialization
12259 https://bugs.webkit.org/show_bug.cgi?id=79199
12261 Reviewed by Filip Pizlo.
12263 Made CopyBlocks zero their payloads during construction. This allows
12264 JSArray to avoid having to manually clear its backing store upon allocation
12265 and also alleviates any future pain with regard to the garbage collector trying
12266 to mark what it thinks are values in what is actually uninitialized memory.
12268 * heap/CopiedBlock.h:
12269 (JSC::CopiedBlock::CopiedBlock):
12270 * runtime/JSArray.cpp:
12271 (JSC::JSArray::finishCreation):
12272 (JSC::JSArray::tryFinishCreationUninitialized):
12273 (JSC::JSArray::increaseVectorLength):
12274 (JSC::JSArray::unshiftCountSlowCase):
12276 2012-02-23 Oliver Hunt <oliver@apple.com>
12278 Make Interpreter::getStackTrace be able to generate the line number for the top callframe if none is provided
12279 https://bugs.webkit.org/show_bug.cgi?id=79407
12281 Reviewed by Gavin Barraclough.
12283 Outside of exception handling, we don't know what our source line number is. This
12284 change allows us to pass -1 is as the initial line number, and get the correct line
12285 number in the resultant stack trace. We can't completely elide the initial line
12286 number (yet) due to some idiosyncrasies of the exception handling machinery.
12288 * interpreter/Interpreter.cpp:
12289 (JSC::getLineNumberForCallFrame):
12291 (JSC::Interpreter::getStackTrace):
12293 2012-02-22 Filip Pizlo <fpizlo@apple.com>
12295 DFG OSR exit value profiling should have graceful handling of local variables and arguments
12296 https://bugs.webkit.org/show_bug.cgi?id=79310
12298 Reviewed by Gavin Barraclough.
12300 Previously, if we OSR exited because a prediction in a local was wrong, we'd
12301 only realize what the true type of the local was if the regular value profiling
12302 kicked in and told us. Unless the local was block-locally copy propagated, in
12303 which case we'd know from an OSR exit profile.
12305 This patch adds OSR exit profiling to all locals and arguments. Now, if we OSR
12306 exit because of a mispredicted local or argument type, we'll know what the type of
12307 the local or argument should be immediately upon exiting.
12309 The way that local variable OSR exit profiling works is that we now have a lazily
12310 added set of OSR-exit-only value profiles for exit sites that are BadType and that
12311 cited a GetLocal as their value source. The value profiles are only added if the
12312 OSR exit is taken, and are keyed by CodeBlock, bytecode index of the GetLocal, and
12313 operand. The look-up is performed by querying the
12314 CompressedLazyOperandValueProfileHolder in the CodeBlock, using a key that contains
12315 the bytecode index and the operand. Because the value profiles are added at random
12316 times, they are not sorted; instead they are just stored in an arbitrarily-ordered
12317 SegmentedVector. Look-ups are made fast by "decompressing": the DFG::ByteCodeParser
12318 creates a LazyOperandValueProfileParser, which turns the
12319 CompressedLazyOperandValueProfileHolder's contents into a HashMap for the duration
12322 Previously, OSR exits had a pointer to the ValueProfile that had the specFailBucket
12323 into which values observed during OSR exit would be placed. Now it uses a lazy
12324 thunk for a ValueProfile. I call this the MethodOfGettingAValueProfile. It may
12325 either contain a ValueProfile inside it (which works for previous uses of OSR exit
12326 profiling) or it may just have knowledge of how to go about creating the
12327 LazyOperandValueProfile in the case that the OSR exit is actually taken. This
12328 ensures that we never have to create NumOperands*NumBytecodeIndices*NumCodeBlocks
12329 value profiling buckets unless we actually did OSR exit on every single operand,
12330 in every single instruction, in each code block (that's probably unlikely).
12332 This appears to be neutral on the major benchmarks, but is a double-digit speed-up
12333 on code deliberately written to have data flow that spans basic blocks and where
12334 the code exhibits post-optimization polymorphism in a local variable.
12337 * GNUmakefile.list.am:
12338 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
12339 * JavaScriptCore.xcodeproj/project.pbxproj:
12341 * bytecode/CodeBlock.cpp:
12342 (JSC::CodeBlock::stronglyVisitStrongReferences):
12343 * bytecode/CodeBlock.h:
12345 (JSC::CodeBlock::lazyOperandValueProfiles):
12346 * bytecode/LazyOperandValueProfile.cpp: Added.
12348 (JSC::CompressedLazyOperandValueProfileHolder::CompressedLazyOperandValueProfileHolder):
12349 (JSC::CompressedLazyOperandValueProfileHolder::~CompressedLazyOperandValueProfileHolder):
12350 (JSC::CompressedLazyOperandValueProfileHolder::computeUpdatedPredictions):
12351 (JSC::CompressedLazyOperandValueProfileHolder::add):
12352 (JSC::LazyOperandValueProfileParser::LazyOperandValueProfileParser):
12353 (JSC::LazyOperandValueProfileParser::~LazyOperandValueProfileParser):
12354 (JSC::LazyOperandValueProfileParser::getIfPresent):
12355 (JSC::LazyOperandValueProfileParser::prediction):
12356 * bytecode/LazyOperandValueProfile.h: Added.
12358 (LazyOperandValueProfileKey):
12359 (JSC::LazyOperandValueProfileKey::LazyOperandValueProfileKey):
12360 (JSC::LazyOperandValueProfileKey::operator!):
12361 (JSC::LazyOperandValueProfileKey::operator==):
12362 (JSC::LazyOperandValueProfileKey::hash):
12363 (JSC::LazyOperandValueProfileKey::bytecodeOffset):
12364 (JSC::LazyOperandValueProfileKey::operand):
12365 (JSC::LazyOperandValueProfileKey::isHashTableDeletedValue):
12366 (JSC::LazyOperandValueProfileKeyHash::hash):
12367 (JSC::LazyOperandValueProfileKeyHash::equal):
12368 (LazyOperandValueProfileKeyHash):
12370 (JSC::LazyOperandValueProfile::LazyOperandValueProfile):
12371 (LazyOperandValueProfile):
12372 (JSC::LazyOperandValueProfile::key):
12373 (CompressedLazyOperandValueProfileHolder):
12374 (LazyOperandValueProfileParser):
12375 * bytecode/MethodOfGettingAValueProfile.cpp: Added.
12377 (JSC::MethodOfGettingAValueProfile::fromLazyOperand):
12378 (JSC::MethodOfGettingAValueProfile::getSpecFailBucket):
12379 * bytecode/MethodOfGettingAValueProfile.h: Added.
12381 (MethodOfGettingAValueProfile):
12382 (JSC::MethodOfGettingAValueProfile::MethodOfGettingAValueProfile):
12383 (JSC::MethodOfGettingAValueProfile::operator!):
12384 * bytecode/ValueProfile.cpp: Removed.
12385 * bytecode/ValueProfile.h:
12387 (ValueProfileBase):
12388 (JSC::ValueProfileBase::ValueProfileBase):
12389 (JSC::ValueProfileBase::dump):
12390 (JSC::ValueProfileBase::computeUpdatedPrediction):
12391 (JSC::MinimalValueProfile::MinimalValueProfile):
12392 (ValueProfileWithLogNumberOfBuckets):
12393 (JSC::ValueProfileWithLogNumberOfBuckets::ValueProfileWithLogNumberOfBuckets):
12394 (JSC::ValueProfile::ValueProfile):
12395 (JSC::getValueProfileBytecodeOffset):
12396 (JSC::getRareCaseProfileBytecodeOffset):
12397 * dfg/DFGByteCodeParser.cpp:
12399 (JSC::DFG::ByteCodeParser::injectLazyOperandPrediction):
12400 (JSC::DFG::ByteCodeParser::getLocal):
12401 (JSC::DFG::ByteCodeParser::getArgument):
12402 (InlineStackEntry):
12403 (JSC::DFG::ByteCodeParser::fixVariableAccessPredictions):
12405 (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
12406 (JSC::DFG::ByteCodeParser::parse):
12407 * dfg/DFGDriver.cpp:
12408 (JSC::DFG::compile):
12410 (JSC::DFG::Graph::valueProfileFor):
12411 (JSC::DFG::Graph::methodOfGettingAValueProfileFor):
12415 * dfg/DFGOSRExit.cpp:
12416 (JSC::DFG::OSRExit::OSRExit):
12417 * dfg/DFGOSRExit.h:
12419 * dfg/DFGOSRExitCompiler32_64.cpp:
12420 (JSC::DFG::OSRExitCompiler::compileExit):
12421 * dfg/DFGOSRExitCompiler64.cpp:
12422 (JSC::DFG::OSRExitCompiler::compileExit):
12423 * dfg/DFGPhase.cpp:
12424 (JSC::DFG::Phase::beginPhase):
12425 (JSC::DFG::Phase::endPhase):
12426 * dfg/DFGSpeculativeJIT.cpp:
12427 (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
12428 * dfg/DFGSpeculativeJIT.h:
12429 (JSC::DFG::SpeculativeJIT::speculationCheck):
12430 * dfg/DFGVariableAccessData.h:
12431 (JSC::DFG::VariableAccessData::nonUnifiedPrediction):
12432 (VariableAccessData):
12434 2012-02-23 Filip Pizlo <fpizlo@apple.com>
12438 * llint/LLIntOffsetsExtractor.cpp:
12440 2012-02-23 Kevin Ollivier <kevino@theolliviers.com>
12442 [wx] Build fix, disable LLINT for now and fix ENABLE defines for it.
12444 * llint/LLIntOffsetsExtractor.cpp:
12447 2012-02-23 Kevin Ollivier <kevino@theolliviers.com>
12449 [wx] Build fix for non-Mac wx builds.
12451 * runtime/DatePrototype.cpp:
12453 2012-02-22 Filip Pizlo <fpizlo@apple.com>
12455 DFG's logic for emitting a Flush is too convoluted and contains an inaccurate comment
12456 https://bugs.webkit.org/show_bug.cgi?id=79334
12458 Reviewed by Oliver Hunt.
12460 * dfg/DFGByteCodeParser.cpp:
12461 (JSC::DFG::ByteCodeParser::getLocal):
12462 (JSC::DFG::ByteCodeParser::getArgument):
12463 (JSC::DFG::ByteCodeParser::flush):
12465 2012-02-23 Gavin Barraclough <barraclough@apple.com>
12467 Object.isSealed / Object.isFrozen don't work for native objects
12468 https://bugs.webkit.org/show_bug.cgi?id=79331
12470 Reviewed by Sam Weinig.
12472 Need to inspect all properties, including static ones.
12473 This exposes a couple of bugs in Array & Arguments:
12474 - getOwnPropertyDescriptor doesn't correctly report the writable attribute of array length.
12475 - Arguments object's defineOwnProperty does not handle callee/caller/length correctly.
12477 * runtime/Arguments.cpp:
12478 (JSC::Arguments::defineOwnProperty):
12479 - Add handling for callee/caller/length.
12480 * runtime/JSArray.cpp:
12481 (JSC::JSArray::getOwnPropertyDescriptor):
12482 - report length's writability correctly.
12483 * runtime/ObjectConstructor.cpp:
12484 (JSC::objectConstructorSeal):
12485 (JSC::objectConstructorFreeze):
12486 (JSC::objectConstructorIsSealed):
12487 (JSC::objectConstructorIsFrozen):
12488 - Add spec-based implementation for non-final objects.
12490 2012-02-23 Gavin Barraclough <barraclough@apple.com>
12492 pop of array hole should get from the prototype chain
12493 https://bugs.webkit.org/show_bug.cgi?id=79338
12495 Reviewed by Sam Weinig.
12497 * runtime/JSArray.cpp:
12498 (JSC::JSArray::pop):
12499 - If the fast fast vector case fails, more closely follow the spec.
12501 2012-02-23 Yong Li <yoli@rim.com>
12503 JSString::outOfMemory() should ASSERT(isRope()) rather than !isRope()
12504 https://bugs.webkit.org/show_bug.cgi?id=79268
12506 Reviewed by Michael Saboff.
12508 resolveRope() is the only caller of outOfMemory(), and it calls outOfMemory()
12509 after it fails to allocate a buffer for m_value. So outOfMemory() should assert
12510 isRope() rather than !isRope().
12512 * runtime/JSString.cpp:
12513 (JSC::JSString::outOfMemory):
12515 2012-02-23 Patrick Gansterer <paroga@webkit.org>
12517 [CMake] Add WEBKIT_INCLUDE_CONFIG_FILES_IF_EXISTS macro
12518 https://bugs.webkit.org/show_bug.cgi?id=79371
12520 Reviewed by Daniel Bates.
12523 * shell/CMakeLists.txt:
12524 * wtf/CMakeLists.txt:
12526 2012-02-23 Aron Rosenberg <arosenberg@logitech.com>
12528 Fix the PRI macros used in WTF::String formatters to be compatible with Qt and Visual Studio 2005 and newer.
12529 https://bugs.webkit.org/show_bug.cgi?id=76210
12531 Add compile time check for Visual Studio 2005 or newer.
12533 Reviewed by Simon Hausmann.
12535 * os-win32/inttypes.h:
12537 2012-02-22 Gavin Barraclough <barraclough@apple.com>
12539 Implement [[DefineOwnProperty]] for the arguments object
12540 https://bugs.webkit.org/show_bug.cgi?id=79309
12542 Reviewed by Sam Weinig.
12544 * runtime/Arguments.cpp:
12545 (JSC::Arguments::deletePropertyByIndex):
12546 (JSC::Arguments::deleteProperty):
12547 - Deleting an argument should also delete the copy on the object, if any.
12548 (JSC::Arguments::defineOwnProperty):
12549 - Defining a property may override the live mapping.
12550 * runtime/Arguments.h:
12553 2012-02-22 Gavin Barraclough <barraclough@apple.com>
12555 Fix Object.freeze for non-final objects.
12556 https://bugs.webkit.org/show_bug.cgi?id=79286
12558 Reviewed by Oliver Hunt.
12560 For vanilla objects we implement this with a single transition, for objects
12561 with special properties we should just follow the spec defined algorithm.
12563 * runtime/JSArray.cpp:
12564 (JSC::SparseArrayValueMap::put):
12565 - this does need to handle inextensible objects.
12566 * runtime/ObjectConstructor.cpp:
12567 (JSC::objectConstructorSeal):
12568 (JSC::objectConstructorFreeze):
12569 - Implement spec defined algorithm for non-final objects.
12570 * runtime/Structure.cpp:
12571 (JSC::Structure::Structure):
12572 (JSC::Structure::freezeTransition):
12573 - freeze should set m_hasReadOnlyOrGetterSetterPropertiesExcludingProto.
12574 * runtime/Structure.h:
12575 (JSC::Structure::hasReadOnlyOrGetterSetterPropertiesExcludingProto):
12576 (JSC::Structure::setHasGetterSetterProperties):
12577 (JSC::Structure::setContainsReadOnlyProperties):
12579 - renamed m_hasReadOnlyOrGetterSetterPropertiesExcludingProto.
12581 2012-02-22 Mark Hahnenberg <mhahnenberg@apple.com>
12583 Allocations from CopiedBlocks should always be 8-byte aligned
12584 https://bugs.webkit.org/show_bug.cgi?id=79271
12586 Reviewed by Geoffrey Garen.
12588 * heap/CopiedAllocator.h:
12589 (JSC::CopiedAllocator::allocate):
12590 * heap/CopiedBlock.h: Changed to add padding so that the start of the payload is always
12591 guaranteed to be 8 byte aligned on both 64- and 32-bit platforms.
12593 * heap/CopiedSpace.cpp: Changed all assertions of isPointerAligned to is8ByteAligned.
12594 (JSC::CopiedSpace::tryAllocateOversize):
12595 (JSC::CopiedSpace::getFreshBlock):
12596 * heap/CopiedSpaceInlineMethods.h:
12597 (JSC::CopiedSpace::allocateFromBlock):
12598 * runtime/JSArray.h:
12599 (ArrayStorage): Added padding for ArrayStorage to make sure that it is always 8 byte
12600 aligned on both 64- and 32-bit platforms.
12601 * wtf/StdLibExtras.h:
12602 (WTF::is8ByteAligned): Added new utility function that functions similarly to the
12603 way isPointerAligned does, but it just always checks for 8 byte alignment.
12606 2012-02-22 Sheriff Bot <webkit.review.bot@gmail.com>
12608 Unreviewed, rolling out r108456.
12609 http://trac.webkit.org/changeset/108456
12610 https://bugs.webkit.org/show_bug.cgi?id=79223
12612 Broke fast/regex/pcre-test-4.html and cannot find anyone on
12613 IRC (Requested by zherczeg on #webkit).
12615 * yarr/YarrJIT.cpp:
12616 (JSC::Yarr::YarrGenerator::backtrackPatternCharacterGreedy):
12618 2012-02-22 Sheriff Bot <webkit.review.bot@gmail.com>
12620 Unreviewed, rolling out r108468.
12621 http://trac.webkit.org/changeset/108468
12622 https://bugs.webkit.org/show_bug.cgi?id=79219
12624 Broke Chromium Win release build (Requested by bashi on
12629 2012-02-22 Kenichi Ishibashi <bashi@chromium.org>
12631 Adding WebSocket per-frame DEFLATE extension
12632 https://bugs.webkit.org/show_bug.cgi?id=77522
12634 Added USE(ZLIB) flag.
12636 Reviewed by Kent Tamura.
12640 2012-02-22 Hojong Han <hojong.han@samsung.com>
12642 Short circuit fixed for a 16 bt pattern character and an 8 bit string.
12643 https://bugs.webkit.org/show_bug.cgi?id=75602
12645 Reviewed by Gavin Barraclough.
12647 * yarr/YarrJIT.cpp:
12648 (JSC::Yarr::YarrGenerator::backtrackPatternCharacterGreedy):
12650 2012-02-21 Filip Pizlo <fpizlo@apple.com>
12652 Build fix for systems with case sensitive disks.
12654 * llint/LLIntOfflineAsmConfig.h:
12656 2012-02-21 Filip Pizlo <fpizlo@apple.com>
12658 JSC should be a triple-tier VM
12659 https://bugs.webkit.org/show_bug.cgi?id=75812
12660 <rdar://problem/10079694>
12662 Reviewed by Gavin Barraclough.
12664 Implemented an interpreter that uses the JIT's calling convention. This
12665 interpreter is called LLInt, or the Low Level Interpreter. JSC will now
12666 will start by executing code in LLInt and will only tier up to the old
12667 JIT after the code is proven hot.
12669 LLInt is written in a modified form of our macro assembly. This new macro
12670 assembly is compiled by an offline assembler (see offlineasm), which
12671 implements many modern conveniences such as a Turing-complete CPS-based
12672 macro language and direct access to relevant C++ type information
12673 (basically offsets of fields and sizes of structs/classes).
12675 Code executing in LLInt appears to the rest of the JSC world "as if" it
12676 were executing in the old JIT. Hence, things like exception handling and
12677 cross-execution-engine calls just work and require pretty much no
12678 additional overhead.
12680 This interpreter is 2-2.5x faster than our old interpreter on SunSpider,
12681 V8, and Kraken. With triple-tiering turned on, we're neutral on SunSpider,
12682 V8, and Kraken, but appear to get a double-digit improvement on real-world
12683 websites due to a huge reduction in the amount of JIT'ing.
12687 * GNUmakefile.list.am:
12688 * JavaScriptCore.pri:
12689 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
12690 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
12691 * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:
12692 * JavaScriptCore.xcodeproj/project.pbxproj:
12694 * assembler/LinkBuffer.h:
12695 * assembler/MacroAssemblerCodeRef.h:
12696 (MacroAssemblerCodePtr):
12697 (JSC::MacroAssemblerCodePtr::createFromExecutableAddress):
12698 * bytecode/BytecodeConventions.h: Added.
12699 * bytecode/CallLinkStatus.cpp:
12700 (JSC::CallLinkStatus::computeFromLLInt):
12702 (JSC::CallLinkStatus::computeFor):
12703 * bytecode/CallLinkStatus.h:
12704 (JSC::CallLinkStatus::isSet):
12705 (JSC::CallLinkStatus::operator!):
12707 * bytecode/CodeBlock.cpp:
12708 (JSC::CodeBlock::dump):
12709 (JSC::CodeBlock::CodeBlock):
12710 (JSC::CodeBlock::~CodeBlock):
12711 (JSC::CodeBlock::finalizeUnconditionally):
12712 (JSC::CodeBlock::stronglyVisitStrongReferences):
12714 (JSC::CodeBlock::unlinkCalls):
12715 (JSC::CodeBlock::unlinkIncomingCalls):
12716 (JSC::CodeBlock::bytecodeOffset):
12717 (JSC::ProgramCodeBlock::jettison):
12718 (JSC::EvalCodeBlock::jettison):
12719 (JSC::FunctionCodeBlock::jettison):
12720 (JSC::ProgramCodeBlock::jitCompileImpl):
12721 (JSC::EvalCodeBlock::jitCompileImpl):
12722 (JSC::FunctionCodeBlock::jitCompileImpl):
12723 * bytecode/CodeBlock.h:
12726 (JSC::CodeBlock::baselineVersion):
12727 (JSC::CodeBlock::linkIncomingCall):
12728 (JSC::CodeBlock::bytecodeOffset):
12729 (JSC::CodeBlock::jitCompile):
12730 (JSC::CodeBlock::hasOptimizedReplacement):
12731 (JSC::CodeBlock::addPropertyAccessInstruction):
12732 (JSC::CodeBlock::addGlobalResolveInstruction):
12733 (JSC::CodeBlock::addLLIntCallLinkInfo):
12734 (JSC::CodeBlock::addGlobalResolveInfo):
12735 (JSC::CodeBlock::numberOfMethodCallLinkInfos):
12736 (JSC::CodeBlock::valueProfilePredictionForBytecodeOffset):
12737 (JSC::CodeBlock::likelyToTakeSlowCase):
12738 (JSC::CodeBlock::couldTakeSlowCase):
12739 (JSC::CodeBlock::likelyToTakeSpecialFastCase):
12740 (JSC::CodeBlock::likelyToTakeDeepestSlowCase):
12741 (JSC::CodeBlock::likelyToTakeAnySlowCase):
12742 (JSC::CodeBlock::addFrequentExitSite):
12743 (JSC::CodeBlock::dontJITAnytimeSoon):
12744 (JSC::CodeBlock::jitAfterWarmUp):
12745 (JSC::CodeBlock::jitSoon):
12746 (JSC::CodeBlock::llintExecuteCounter):
12747 (ProgramCodeBlock):
12749 (FunctionCodeBlock):
12750 * bytecode/GetByIdStatus.cpp:
12751 (JSC::GetByIdStatus::computeFromLLInt):
12753 (JSC::GetByIdStatus::computeFor):
12754 * bytecode/GetByIdStatus.h:
12755 (JSC::GetByIdStatus::GetByIdStatus):
12756 (JSC::GetByIdStatus::wasSeenInJIT):
12758 * bytecode/Instruction.h:
12760 (JSC::Instruction::Instruction):
12762 * bytecode/LLIntCallLinkInfo.h: Added.
12764 (JSC::LLIntCallLinkInfo::LLIntCallLinkInfo):
12765 (LLIntCallLinkInfo):
12766 (JSC::LLIntCallLinkInfo::~LLIntCallLinkInfo):
12767 (JSC::LLIntCallLinkInfo::isLinked):
12768 (JSC::LLIntCallLinkInfo::unlink):
12769 * bytecode/MethodCallLinkStatus.cpp:
12770 (JSC::MethodCallLinkStatus::computeFor):
12771 * bytecode/Opcode.cpp:
12773 * bytecode/Opcode.h:
12775 (JSC::padOpcodeName):
12776 * bytecode/PutByIdStatus.cpp:
12777 (JSC::PutByIdStatus::computeFromLLInt):
12779 (JSC::PutByIdStatus::computeFor):
12780 * bytecode/PutByIdStatus.h:
12782 * bytecompiler/BytecodeGenerator.cpp:
12783 (JSC::BytecodeGenerator::emitResolve):
12784 (JSC::BytecodeGenerator::emitResolveWithBase):
12785 (JSC::BytecodeGenerator::emitGetById):
12786 (JSC::BytecodeGenerator::emitPutById):
12787 (JSC::BytecodeGenerator::emitDirectPutById):
12788 (JSC::BytecodeGenerator::emitCall):
12789 (JSC::BytecodeGenerator::emitConstruct):
12790 (JSC::BytecodeGenerator::emitCatch):
12791 * dfg/DFGByteCodeParser.cpp:
12792 (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
12793 (JSC::DFG::ByteCodeParser::handleInlining):
12794 (JSC::DFG::ByteCodeParser::parseBlock):
12795 * dfg/DFGCapabilities.h:
12796 (JSC::DFG::canCompileOpcode):
12797 * dfg/DFGOSRExitCompiler.cpp:
12798 * dfg/DFGOperations.cpp:
12801 (JSC::Heap::firstAllocatorWithoutDestructors):
12803 * heap/MarkStack.cpp:
12804 (JSC::visitChildren):
12805 * heap/MarkedAllocator.h:
12808 * heap/MarkedSpace.h:
12811 (JSC::MarkedSpace::firstAllocator):
12812 * interpreter/CallFrame.cpp:
12814 (JSC::CallFrame::bytecodeOffsetForNonDFGCode):
12815 (JSC::CallFrame::setBytecodeOffsetForNonDFGCode):
12816 (JSC::CallFrame::currentVPC):
12817 (JSC::CallFrame::setCurrentVPC):
12818 (JSC::CallFrame::trueCallerFrame):
12819 * interpreter/CallFrame.h:
12820 (JSC::ExecState::hasReturnPC):
12821 (JSC::ExecState::clearReturnPC):
12823 (JSC::ExecState::bytecodeOffsetForNonDFGCode):
12824 (JSC::ExecState::currentVPC):
12825 (JSC::ExecState::setCurrentVPC):
12826 * interpreter/Interpreter.cpp:
12827 (JSC::Interpreter::Interpreter):
12828 (JSC::Interpreter::~Interpreter):
12830 (JSC::Interpreter::initialize):
12831 (JSC::Interpreter::isOpcode):
12832 (JSC::Interpreter::unwindCallFrame):
12833 (JSC::getCallerInfo):
12834 (JSC::Interpreter::privateExecute):
12835 (JSC::Interpreter::retrieveLastCaller):
12836 * interpreter/Interpreter.h:
12839 (JSC::Interpreter::getOpcode):
12840 (JSC::Interpreter::getOpcodeID):
12841 (JSC::Interpreter::classicEnabled):
12842 * interpreter/RegisterFile.h:
12845 * jit/ExecutableAllocator.h:
12847 * jit/HostCallReturnValue.cpp: Added.
12849 (JSC::getHostCallReturnValueWithExecState):
12850 * jit/HostCallReturnValue.h: Added.
12852 (JSC::initializeHostCallReturnValue):
12854 (JSC::JIT::privateCompileMainPass):
12855 (JSC::JIT::privateCompileSlowCases):
12856 (JSC::JIT::privateCompile):
12858 (JSC::JITCode::isOptimizingJIT):
12860 (JSC::JITCode::isBaselineCode):
12861 (JSC::JITCode::JITCode):
12863 (JSC::jitCompileIfAppropriate):
12864 (JSC::jitCompileFunctionIfAppropriate):
12865 * jit/JITExceptions.cpp:
12867 * jit/JITInlineMethods.h:
12868 (JSC::JIT::updateTopCallFrame):
12869 * jit/JITStubs.cpp:
12870 (JSC::DEFINE_STUB_FUNCTION):
12874 * jit/JSInterfaceJIT.h:
12876 * llint/LLIntCommon.h: Added.
12877 * llint/LLIntData.cpp: Added.
12879 (JSC::LLInt::Data::Data):
12880 (JSC::LLInt::Data::performAssertions):
12881 (JSC::LLInt::Data::~Data):
12882 * llint/LLIntData.h: Added.
12886 (JSC::LLInt::Data::exceptionInstructions):
12887 (JSC::LLInt::Data::opcodeMap):
12888 (JSC::LLInt::Data::performAssertions):
12889 * llint/LLIntEntrypoints.cpp: Added.
12891 (JSC::LLInt::getFunctionEntrypoint):
12892 (JSC::LLInt::getEvalEntrypoint):
12893 (JSC::LLInt::getProgramEntrypoint):
12894 * llint/LLIntEntrypoints.h: Added.
12897 (JSC::LLInt::getEntrypoint):
12898 * llint/LLIntExceptions.cpp: Added.
12900 (JSC::LLInt::interpreterThrowInCaller):
12901 (JSC::LLInt::returnToThrowForThrownException):
12902 (JSC::LLInt::returnToThrow):
12903 (JSC::LLInt::callToThrow):
12904 * llint/LLIntExceptions.h: Added.
12907 * llint/LLIntOfflineAsmConfig.h: Added.
12908 * llint/LLIntOffsetsExtractor.cpp: Added.
12910 (LLIntOffsetsExtractor):
12911 (JSC::LLIntOffsetsExtractor::dummy):
12913 * llint/LLIntSlowPaths.cpp: Added.
12915 (JSC::LLInt::llint_trace_operand):
12916 (JSC::LLInt::llint_trace_value):
12917 (JSC::LLInt::LLINT_SLOW_PATH_DECL):
12918 (JSC::LLInt::traceFunctionPrologue):
12919 (JSC::LLInt::shouldJIT):
12920 (JSC::LLInt::entryOSR):
12921 (JSC::LLInt::resolveGlobal):
12922 (JSC::LLInt::getByVal):
12923 (JSC::LLInt::handleHostCall):
12924 (JSC::LLInt::setUpCall):
12925 (JSC::LLInt::genericCall):
12926 * llint/LLIntSlowPaths.h: Added.
12929 * llint/LLIntThunks.cpp: Added.
12931 (JSC::LLInt::generateThunkWithJumpTo):
12932 (JSC::LLInt::functionForCallEntryThunkGenerator):
12933 (JSC::LLInt::functionForConstructEntryThunkGenerator):
12934 (JSC::LLInt::functionForCallArityCheckThunkGenerator):
12935 (JSC::LLInt::functionForConstructArityCheckThunkGenerator):
12936 (JSC::LLInt::evalEntryThunkGenerator):
12937 (JSC::LLInt::programEntryThunkGenerator):
12938 * llint/LLIntThunks.h: Added.
12941 * llint/LowLevelInterpreter.asm: Added.
12942 * llint/LowLevelInterpreter.cpp: Added.
12943 * llint/LowLevelInterpreter.h: Added.
12944 * offlineasm: Added.
12945 * offlineasm/armv7.rb: Added.
12946 * offlineasm/asm.rb: Added.
12947 * offlineasm/ast.rb: Added.
12948 * offlineasm/backends.rb: Added.
12949 * offlineasm/generate_offset_extractor.rb: Added.
12950 * offlineasm/instructions.rb: Added.
12951 * offlineasm/offset_extractor_constants.rb: Added.
12952 * offlineasm/offsets.rb: Added.
12953 * offlineasm/opt.rb: Added.
12954 * offlineasm/parser.rb: Added.
12955 * offlineasm/registers.rb: Added.
12956 * offlineasm/self_hash.rb: Added.
12957 * offlineasm/settings.rb: Added.
12958 * offlineasm/transform.rb: Added.
12959 * offlineasm/x86.rb: Added.
12960 * runtime/CodeSpecializationKind.h: Added.
12962 * runtime/CommonSlowPaths.h:
12963 (JSC::CommonSlowPaths::arityCheckFor):
12965 * runtime/Executable.cpp:
12966 (JSC::jettisonCodeBlock):
12968 (JSC::EvalExecutable::jitCompile):
12969 (JSC::samplingDescription):
12970 (JSC::EvalExecutable::compileInternal):
12971 (JSC::ProgramExecutable::jitCompile):
12972 (JSC::ProgramExecutable::compileInternal):
12973 (JSC::FunctionExecutable::baselineCodeBlockFor):
12974 (JSC::FunctionExecutable::jitCompileForCall):
12975 (JSC::FunctionExecutable::jitCompileForConstruct):
12976 (JSC::FunctionExecutable::compileForCallInternal):
12977 (JSC::FunctionExecutable::compileForConstructInternal):
12978 * runtime/Executable.h:
12981 (ProgramExecutable):
12982 (FunctionExecutable):
12983 (JSC::FunctionExecutable::jitCompileFor):
12984 * runtime/ExecutionHarness.h: Added.
12986 (JSC::prepareForExecution):
12987 (JSC::prepareFunctionForExecution):
12988 * runtime/JSArray.h:
12991 * runtime/JSCell.h:
12994 * runtime/JSFunction.h:
12997 * runtime/JSGlobalData.cpp:
12998 (JSC::JSGlobalData::JSGlobalData):
12999 * runtime/JSGlobalData.h:
13002 * runtime/JSGlobalObject.h:
13005 * runtime/JSObject.h:
13009 * runtime/JSPropertyNameIterator.h:
13011 (JSPropertyNameIterator):
13012 * runtime/JSString.h:
13015 * runtime/JSTypeInfo.h:
13018 * runtime/JSValue.cpp:
13019 (JSC::JSValue::description):
13020 * runtime/JSValue.h:
13023 * runtime/JSVariableObject.h:
13025 (JSVariableObject):
13026 * runtime/Options.cpp:
13028 (JSC::Options::initializeOptions):
13029 * runtime/Options.h:
13031 * runtime/ScopeChain.h:
13034 * runtime/Structure.cpp:
13035 (JSC::Structure::addPropertyTransition):
13036 * runtime/Structure.h:
13039 * runtime/StructureChain.h:
13044 * wtf/SentinelLinkedList.h:
13045 (SentinelLinkedList):
13046 (WTF::SentinelLinkedList::isEmpty):
13047 * wtf/text/StringImpl.h:
13051 2012-02-21 Oliver Hunt <oliver@apple.com>
13053 Unbreak double-typed arrays on ARMv7
13054 https://bugs.webkit.org/show_bug.cgi?id=79177
13056 Reviewed by Gavin Barraclough.
13058 The existing code had completely broken address arithmetic.
13060 * JSCTypedArrayStubs.h:
13062 * assembler/MacroAssemblerARMv7.h:
13063 (JSC::MacroAssemblerARMv7::storeDouble):
13064 (JSC::MacroAssemblerARMv7::storeFloat):
13066 2012-02-21 Gavin Barraclough <barraclough@apple.com>
13068 Should be able to reconfigure a non-configurable property as read-only
13069 https://bugs.webkit.org/show_bug.cgi?id=79170
13071 Reviewed by Sam Weinig.
13073 See ES5.1 8.12.9 10.a.i - the spec prohibits making a read-only property writable,
13074 but does not inhibit making a writable property read-only.
13076 * runtime/JSGlobalData.cpp:
13077 (JSC::JSGlobalData::JSGlobalData):
13078 * runtime/JSGlobalData.h:
13079 (JSC::JSGlobalData::setInDefineOwnProperty):
13081 (JSC::JSGlobalData::isInDefineOwnProperty):
13082 - Added flag, tracking whether we are in JSObject::defineOwnProperty.
13083 * runtime/JSObject.cpp:
13084 (JSC::JSObject::deleteProperty):
13085 (DefineOwnPropertyScope):
13086 - Always allow properties to be deleted by DefineOwnProperty - assume it knows what it is doing!
13087 (JSC::DefineOwnPropertyScope::DefineOwnPropertyScope):
13088 (JSC::DefineOwnPropertyScope::~DefineOwnPropertyScope):
13089 - Added RAII helper.
13090 (JSC::JSObject::defineOwnProperty):
13091 - Track on the globalData when we are in this method.
13093 2012-02-21 Oliver Hunt <oliver@apple.com>
13095 Make TypedArrays be available in commandline jsc
13096 https://bugs.webkit.org/show_bug.cgi?id=79163
13098 Reviewed by Gavin Barraclough.
13100 Adds a compile time option to have jsc support a basic implementation
13101 of the TypedArrays available in WebCore. This lets us test the typed
13102 array logic in the JIT witout having to build webcore.
13104 * JSCTypedArrayStubs.h: Added.
13106 * JavaScriptCore.xcodeproj/project.pbxproj:
13108 (GlobalObject::finishCreation):
13110 (GlobalObject::addConstructableFunction):
13111 * runtime/JSGlobalData.h:
13114 2012-02-21 Tom Sepez <tsepez@chromium.org>
13116 equalIgnoringNullity() only comparing half the bytes for equality
13117 https://bugs.webkit.org/show_bug.cgi?id=79135
13119 Reviewed by Adam Barth.
13121 * wtf/text/StringImpl.h:
13122 (WTF::equalIgnoringNullity):
13124 2012-02-21 Roland Takacs <takacs.roland@stud.u-szeged.hu>
13126 Unnecessary preprocessor macros in MainThread.h/cpp
13127 https://bugs.webkit.org/show_bug.cgi?id=79083
13129 Removed invalid/wrong PLATFORM(WINDOWS) preprocessor macro.
13131 * wtf/MainThread.cpp:
13133 * wtf/MainThread.h:
13136 2012-02-21 Sam Weinig <sam@webkit.org>
13138 Attempt to fix the Snow Leopard build.
13140 * Configurations/Base.xcconfig:
13142 2012-02-21 Sam Weinig <sam@webkit.org>
13144 Use libc++ when building with Clang on Mac
13145 https://bugs.webkit.org/show_bug.cgi?id=78981
13147 Reviewed by Dan Bernstein.
13149 * Configurations/Base.xcconfig:
13151 2012-02-21 Adam Roben <aroben@apple.com>
13153 Roll out r108309, r108323, and r108326
13155 They broke the 32-bit Lion build.
13157 Original bugs is <http://webkit.org/b/75812> <rdar://problem/10079694>.
13161 * GNUmakefile.list.am:
13162 * JavaScriptCore.pri:
13163 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
13164 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
13165 * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:
13166 * JavaScriptCore.xcodeproj/project.pbxproj:
13168 * assembler/LinkBuffer.h:
13169 * assembler/MacroAssemblerCodeRef.h:
13170 * bytecode/BytecodeConventions.h: Removed.
13171 * bytecode/CallLinkStatus.cpp:
13172 * bytecode/CallLinkStatus.h:
13173 * bytecode/CodeBlock.cpp:
13174 * bytecode/CodeBlock.h:
13175 * bytecode/GetByIdStatus.cpp:
13176 * bytecode/GetByIdStatus.h:
13177 * bytecode/Instruction.h:
13178 * bytecode/LLIntCallLinkInfo.h: Removed.
13179 * bytecode/MethodCallLinkStatus.cpp:
13180 * bytecode/Opcode.cpp:
13181 * bytecode/Opcode.h:
13182 * bytecode/PutByIdStatus.cpp:
13183 * bytecode/PutByIdStatus.h:
13184 * bytecompiler/BytecodeGenerator.cpp:
13185 * dfg/DFGByteCodeParser.cpp:
13186 * dfg/DFGCapabilities.h:
13187 * dfg/DFGOSRExitCompiler.cpp:
13188 * dfg/DFGOperations.cpp:
13190 * heap/MarkStack.cpp:
13191 * heap/MarkedAllocator.h:
13192 * heap/MarkedSpace.h:
13193 * interpreter/CallFrame.cpp:
13194 * interpreter/CallFrame.h:
13195 * interpreter/Interpreter.cpp:
13196 * interpreter/Interpreter.h:
13197 * interpreter/RegisterFile.h:
13198 * jit/ExecutableAllocator.h:
13199 * jit/HostCallReturnValue.cpp: Removed.
13200 * jit/HostCallReturnValue.h: Removed.
13204 * jit/JITExceptions.cpp:
13205 * jit/JITInlineMethods.h:
13206 * jit/JITStubs.cpp:
13208 * jit/JSInterfaceJIT.h:
13209 * llint/LLIntCommon.h: Removed.
13210 * llint/LLIntData.cpp: Removed.
13211 * llint/LLIntData.h: Removed.
13212 * llint/LLIntEntrypoints.cpp: Removed.
13213 * llint/LLIntEntrypoints.h: Removed.
13214 * llint/LLIntExceptions.cpp: Removed.
13215 * llint/LLIntExceptions.h: Removed.
13216 * llint/LLIntOfflineAsmConfig.h: Removed.
13217 * llint/LLIntOffsetsExtractor.cpp: Removed.
13218 * llint/LLIntSlowPaths.cpp: Removed.
13219 * llint/LLIntSlowPaths.h: Removed.
13220 * llint/LLIntThunks.cpp: Removed.
13221 * llint/LLIntThunks.h: Removed.
13222 * llint/LowLevelInterpreter.asm: Removed.
13223 * llint/LowLevelInterpreter.cpp: Removed.
13224 * llint/LowLevelInterpreter.h: Removed.
13225 * offlineasm/armv7.rb: Removed.
13226 * offlineasm/asm.rb: Removed.
13227 * offlineasm/ast.rb: Removed.
13228 * offlineasm/backends.rb: Removed.
13229 * offlineasm/generate_offset_extractor.rb: Removed.
13230 * offlineasm/instructions.rb: Removed.
13231 * offlineasm/offset_extractor_constants.rb: Removed.
13232 * offlineasm/offsets.rb: Removed.
13233 * offlineasm/opt.rb: Removed.
13234 * offlineasm/parser.rb: Removed.
13235 * offlineasm/registers.rb: Removed.
13236 * offlineasm/self_hash.rb: Removed.
13237 * offlineasm/settings.rb: Removed.
13238 * offlineasm/transform.rb: Removed.
13239 * offlineasm/x86.rb: Removed.
13240 * runtime/CodeSpecializationKind.h: Removed.
13241 * runtime/CommonSlowPaths.h:
13242 * runtime/Executable.cpp:
13243 * runtime/Executable.h:
13244 * runtime/ExecutionHarness.h: Removed.
13245 * runtime/JSArray.h:
13246 * runtime/JSCell.h:
13247 * runtime/JSFunction.h:
13248 * runtime/JSGlobalData.cpp:
13249 * runtime/JSGlobalData.h:
13250 * runtime/JSGlobalObject.h:
13251 * runtime/JSObject.h:
13252 * runtime/JSPropertyNameIterator.h:
13253 * runtime/JSString.h:
13254 * runtime/JSTypeInfo.h:
13255 * runtime/JSValue.cpp:
13256 * runtime/JSValue.h:
13257 * runtime/JSVariableObject.h:
13258 * runtime/Options.cpp:
13259 * runtime/Options.h:
13260 * runtime/ScopeChain.h:
13261 * runtime/Structure.cpp:
13262 * runtime/Structure.h:
13263 * runtime/StructureChain.h:
13266 * wtf/SentinelLinkedList.h:
13267 * wtf/text/StringImpl.h:
13269 2012-02-21 Gustavo Noronha Silva <kov@debian.org> and Bob Tracy <rct@frus.com>
13271 Does not build on IA64, SPARC and Alpha
13272 https://bugs.webkit.org/show_bug.cgi?id=79047
13274 Rubber-stamped by Kent Tamura.
13276 * wtf/dtoa/utils.h: these architectures also have correct double
13277 operations, so add them to the appropriate side of the check.
13279 2012-02-21 Filip Pizlo <fpizlo@apple.com>
13281 Fix massive crashes in all tests introduced by previous build fix, and fix non-DFG build.
13282 https://bugs.webkit.org/show_bug.cgi?id=75812
13284 Reviewed by Csaba Osztrogonác.
13286 * dfg/DFGOperations.cpp:
13288 * jit/HostCallReturnValue.h:
13289 (JSC::initializeHostCallReturnValue):
13291 2012-02-21 Filip Pizlo <fpizlo@apple.com>
13293 Attempted build fix for ELF platforms.
13295 * dfg/DFGOperations.cpp:
13297 (JSC::getHostCallReturnValueWithExecState):
13298 * jit/HostCallReturnValue.cpp:
13300 * jit/HostCallReturnValue.h:
13301 (JSC::initializeHostCallReturnValue):
13303 2012-02-20 Filip Pizlo <fpizlo@apple.com>
13305 JSC should be a triple-tier VM
13306 https://bugs.webkit.org/show_bug.cgi?id=75812
13307 <rdar://problem/10079694>
13309 Reviewed by Gavin Barraclough.
13311 Implemented an interpreter that uses the JIT's calling convention. This
13312 interpreter is called LLInt, or the Low Level Interpreter. JSC will now
13313 will start by executing code in LLInt and will only tier up to the old
13314 JIT after the code is proven hot.
13316 LLInt is written in a modified form of our macro assembly. This new macro
13317 assembly is compiled by an offline assembler (see offlineasm), which
13318 implements many modern conveniences such as a Turing-complete CPS-based
13319 macro language and direct access to relevant C++ type information
13320 (basically offsets of fields and sizes of structs/classes).
13322 Code executing in LLInt appears to the rest of the JSC world "as if" it
13323 were executing in the old JIT. Hence, things like exception handling and
13324 cross-execution-engine calls just work and require pretty much no
13325 additional overhead.
13327 This interpreter is 2-2.5x faster than our old interpreter on SunSpider,
13328 V8, and Kraken. With triple-tiering turned on, we're neutral on SunSpider,
13329 V8, and Kraken, but appear to get a double-digit improvement on real-world
13330 websites due to a huge reduction in the amount of JIT'ing.
13334 * GNUmakefile.list.am:
13335 * JavaScriptCore.pri:
13336 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
13337 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
13338 * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:
13339 * JavaScriptCore.xcodeproj/project.pbxproj:
13341 * assembler/LinkBuffer.h:
13342 * assembler/MacroAssemblerCodeRef.h:
13343 (MacroAssemblerCodePtr):
13344 (JSC::MacroAssemblerCodePtr::createFromExecutableAddress):
13345 * bytecode/BytecodeConventions.h: Added.
13346 * bytecode/CallLinkStatus.cpp:
13347 (JSC::CallLinkStatus::computeFromLLInt):
13349 (JSC::CallLinkStatus::computeFor):
13350 * bytecode/CallLinkStatus.h:
13351 (JSC::CallLinkStatus::isSet):
13352 (JSC::CallLinkStatus::operator!):
13354 * bytecode/CodeBlock.cpp:
13355 (JSC::CodeBlock::dump):
13356 (JSC::CodeBlock::CodeBlock):
13357 (JSC::CodeBlock::~CodeBlock):
13358 (JSC::CodeBlock::finalizeUnconditionally):
13359 (JSC::CodeBlock::stronglyVisitStrongReferences):
13361 (JSC::CodeBlock::unlinkCalls):
13362 (JSC::CodeBlock::unlinkIncomingCalls):
13363 (JSC::CodeBlock::bytecodeOffset):
13364 (JSC::ProgramCodeBlock::jettison):
13365 (JSC::EvalCodeBlock::jettison):
13366 (JSC::FunctionCodeBlock::jettison):
13367 (JSC::ProgramCodeBlock::jitCompileImpl):
13368 (JSC::EvalCodeBlock::jitCompileImpl):
13369 (JSC::FunctionCodeBlock::jitCompileImpl):
13370 * bytecode/CodeBlock.h:
13373 (JSC::CodeBlock::baselineVersion):
13374 (JSC::CodeBlock::linkIncomingCall):
13375 (JSC::CodeBlock::bytecodeOffset):
13376 (JSC::CodeBlock::jitCompile):
13377 (JSC::CodeBlock::hasOptimizedReplacement):
13378 (JSC::CodeBlock::addPropertyAccessInstruction):
13379 (JSC::CodeBlock::addGlobalResolveInstruction):
13380 (JSC::CodeBlock::addLLIntCallLinkInfo):
13381 (JSC::CodeBlock::addGlobalResolveInfo):
13382 (JSC::CodeBlock::numberOfMethodCallLinkInfos):
13383 (JSC::CodeBlock::valueProfilePredictionForBytecodeOffset):
13384 (JSC::CodeBlock::likelyToTakeSlowCase):
13385 (JSC::CodeBlock::couldTakeSlowCase):
13386 (JSC::CodeBlock::likelyToTakeSpecialFastCase):
13387 (JSC::CodeBlock::likelyToTakeDeepestSlowCase):
13388 (JSC::CodeBlock::likelyToTakeAnySlowCase):
13389 (JSC::CodeBlock::addFrequentExitSite):
13390 (JSC::CodeBlock::dontJITAnytimeSoon):
13391 (JSC::CodeBlock::jitAfterWarmUp):
13392 (JSC::CodeBlock::jitSoon):
13393 (JSC::CodeBlock::llintExecuteCounter):
13394 (ProgramCodeBlock):
13396 (FunctionCodeBlock):
13397 * bytecode/GetByIdStatus.cpp:
13398 (JSC::GetByIdStatus::computeFromLLInt):
13400 (JSC::GetByIdStatus::computeFor):
13401 * bytecode/GetByIdStatus.h:
13402 (JSC::GetByIdStatus::GetByIdStatus):
13403 (JSC::GetByIdStatus::wasSeenInJIT):
13405 * bytecode/Instruction.h:
13407 (JSC::Instruction::Instruction):
13409 * bytecode/LLIntCallLinkInfo.h: Added.
13411 (JSC::LLIntCallLinkInfo::LLIntCallLinkInfo):
13412 (LLIntCallLinkInfo):
13413 (JSC::LLIntCallLinkInfo::~LLIntCallLinkInfo):
13414 (JSC::LLIntCallLinkInfo::isLinked):
13415 (JSC::LLIntCallLinkInfo::unlink):
13416 * bytecode/MethodCallLinkStatus.cpp:
13417 (JSC::MethodCallLinkStatus::computeFor):
13418 * bytecode/Opcode.cpp:
13420 * bytecode/Opcode.h:
13422 (JSC::padOpcodeName):
13423 * bytecode/PutByIdStatus.cpp:
13424 (JSC::PutByIdStatus::computeFromLLInt):
13426 (JSC::PutByIdStatus::computeFor):
13427 * bytecode/PutByIdStatus.h:
13429 * bytecompiler/BytecodeGenerator.cpp:
13430 (JSC::BytecodeGenerator::emitResolve):
13431 (JSC::BytecodeGenerator::emitResolveWithBase):
13432 (JSC::BytecodeGenerator::emitGetById):
13433 (JSC::BytecodeGenerator::emitPutById):
13434 (JSC::BytecodeGenerator::emitDirectPutById):
13435 (JSC::BytecodeGenerator::emitCall):
13436 (JSC::BytecodeGenerator::emitConstruct):
13437 (JSC::BytecodeGenerator::emitCatch):
13438 * dfg/DFGByteCodeParser.cpp:
13439 (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
13440 (JSC::DFG::ByteCodeParser::handleInlining):
13441 (JSC::DFG::ByteCodeParser::parseBlock):
13442 * dfg/DFGCapabilities.h:
13443 (JSC::DFG::canCompileOpcode):
13444 * dfg/DFGOSRExitCompiler.cpp:
13445 * dfg/DFGOperations.cpp:
13448 (JSC::Heap::firstAllocatorWithoutDestructors):
13450 * heap/MarkStack.cpp:
13451 (JSC::visitChildren):
13452 * heap/MarkedAllocator.h:
13455 * heap/MarkedSpace.h:
13458 (JSC::MarkedSpace::firstAllocator):
13459 * interpreter/CallFrame.cpp:
13461 (JSC::CallFrame::bytecodeOffsetForNonDFGCode):
13462 (JSC::CallFrame::setBytecodeOffsetForNonDFGCode):
13463 (JSC::CallFrame::currentVPC):
13464 (JSC::CallFrame::setCurrentVPC):
13465 (JSC::CallFrame::trueCallerFrame):
13466 * interpreter/CallFrame.h:
13467 (JSC::ExecState::hasReturnPC):
13468 (JSC::ExecState::clearReturnPC):
13470 (JSC::ExecState::bytecodeOffsetForNonDFGCode):
13471 (JSC::ExecState::currentVPC):
13472 (JSC::ExecState::setCurrentVPC):
13473 * interpreter/Interpreter.cpp:
13474 (JSC::Interpreter::Interpreter):
13475 (JSC::Interpreter::~Interpreter):
13477 (JSC::Interpreter::initialize):
13478 (JSC::Interpreter::isOpcode):
13479 (JSC::Interpreter::unwindCallFrame):
13480 (JSC::getCallerInfo):
13481 (JSC::Interpreter::privateExecute):
13482 (JSC::Interpreter::retrieveLastCaller):
13483 * interpreter/Interpreter.h:
13486 (JSC::Interpreter::getOpcode):
13487 (JSC::Interpreter::getOpcodeID):
13488 (JSC::Interpreter::classicEnabled):
13489 * interpreter/RegisterFile.h:
13492 * jit/ExecutableAllocator.h:
13494 * jit/HostCallReturnValue.cpp: Added.
13496 (JSC::getHostCallReturnValueWithExecState):
13497 * jit/HostCallReturnValue.h: Added.
13499 (JSC::initializeHostCallReturnValue):
13501 (JSC::JIT::privateCompileMainPass):
13502 (JSC::JIT::privateCompileSlowCases):
13503 (JSC::JIT::privateCompile):
13505 (JSC::JITCode::isOptimizingJIT):
13507 (JSC::JITCode::isBaselineCode):
13508 (JSC::JITCode::JITCode):
13510 (JSC::jitCompileIfAppropriate):
13511 (JSC::jitCompileFunctionIfAppropriate):
13512 * jit/JITExceptions.cpp:
13514 * jit/JITInlineMethods.h:
13515 (JSC::JIT::updateTopCallFrame):
13516 * jit/JITStubs.cpp:
13517 (JSC::DEFINE_STUB_FUNCTION):
13521 * jit/JSInterfaceJIT.h:
13523 * llint/LLIntCommon.h: Added.
13524 * llint/LLIntData.cpp: Added.
13526 (JSC::LLInt::Data::Data):
13527 (JSC::LLInt::Data::performAssertions):
13528 (JSC::LLInt::Data::~Data):
13529 * llint/LLIntData.h: Added.
13533 (JSC::LLInt::Data::exceptionInstructions):
13534 (JSC::LLInt::Data::opcodeMap):
13535 (JSC::LLInt::Data::performAssertions):
13536 * llint/LLIntEntrypoints.cpp: Added.
13538 (JSC::LLInt::getFunctionEntrypoint):
13539 (JSC::LLInt::getEvalEntrypoint):
13540 (JSC::LLInt::getProgramEntrypoint):
13541 * llint/LLIntEntrypoints.h: Added.
13544 (JSC::LLInt::getEntrypoint):
13545 * llint/LLIntExceptions.cpp: Added.
13547 (JSC::LLInt::interpreterThrowInCaller):
13548 (JSC::LLInt::returnToThrowForThrownException):
13549 (JSC::LLInt::returnToThrow):
13550 (JSC::LLInt::callToThrow):
13551 * llint/LLIntExceptions.h: Added.
13554 * llint/LLIntOfflineAsmConfig.h: Added.
13555 * llint/LLIntOffsetsExtractor.cpp: Added.
13557 (LLIntOffsetsExtractor):
13558 (JSC::LLIntOffsetsExtractor::dummy):
13560 * llint/LLIntSlowPaths.cpp: Added.
13562 (JSC::LLInt::llint_trace_operand):
13563 (JSC::LLInt::llint_trace_value):
13564 (JSC::LLInt::LLINT_SLOW_PATH_DECL):
13565 (JSC::LLInt::traceFunctionPrologue):
13566 (JSC::LLInt::shouldJIT):
13567 (JSC::LLInt::entryOSR):
13568 (JSC::LLInt::resolveGlobal):
13569 (JSC::LLInt::getByVal):
13570 (JSC::LLInt::handleHostCall):
13571 (JSC::LLInt::setUpCall):
13572 (JSC::LLInt::genericCall):
13573 * llint/LLIntSlowPaths.h: Added.
13576 * llint/LLIntThunks.cpp: Added.
13578 (JSC::LLInt::generateThunkWithJumpTo):
13579 (JSC::LLInt::functionForCallEntryThunkGenerator):
13580 (JSC::LLInt::functionForConstructEntryThunkGenerator):
13581 (JSC::LLInt::functionForCallArityCheckThunkGenerator):
13582 (JSC::LLInt::functionForConstructArityCheckThunkGenerator):
13583 (JSC::LLInt::evalEntryThunkGenerator):
13584 (JSC::LLInt::programEntryThunkGenerator):
13585 * llint/LLIntThunks.h: Added.
13588 * llint/LowLevelInterpreter.asm: Added.
13589 * llint/LowLevelInterpreter.cpp: Added.
13590 * llint/LowLevelInterpreter.h: Added.
13591 * offlineasm: Added.
13592 * offlineasm/armv7.rb: Added.
13593 * offlineasm/asm.rb: Added.
13594 * offlineasm/ast.rb: Added.
13595 * offlineasm/backends.rb: Added.
13596 * offlineasm/generate_offset_extractor.rb: Added.
13597 * offlineasm/instructions.rb: Added.
13598 * offlineasm/offset_extractor_constants.rb: Added.
13599 * offlineasm/offsets.rb: Added.
13600 * offlineasm/opt.rb: Added.
13601 * offlineasm/parser.rb: Added.
13602 * offlineasm/registers.rb: Added.
13603 * offlineasm/self_hash.rb: Added.
13604 * offlineasm/settings.rb: Added.
13605 * offlineasm/transform.rb: Added.
13606 * offlineasm/x86.rb: Added.
13607 * runtime/CodeSpecializationKind.h: Added.
13609 * runtime/CommonSlowPaths.h:
13610 (JSC::CommonSlowPaths::arityCheckFor):
13612 * runtime/Executable.cpp:
13613 (JSC::jettisonCodeBlock):
13615 (JSC::EvalExecutable::jitCompile):
13616 (JSC::samplingDescription):
13617 (JSC::EvalExecutable::compileInternal):
13618 (JSC::ProgramExecutable::jitCompile):
13619 (JSC::ProgramExecutable::compileInternal):
13620 (JSC::FunctionExecutable::baselineCodeBlockFor):
13621 (JSC::FunctionExecutable::jitCompileForCall):
13622 (JSC::FunctionExecutable::jitCompileForConstruct):
13623 (JSC::FunctionExecutable::compileForCallInternal):
13624 (JSC::FunctionExecutable::compileForConstructInternal):
13625 * runtime/Executable.h:
13628 (ProgramExecutable):
13629 (FunctionExecutable):
13630 (JSC::FunctionExecutable::jitCompileFor):
13631 * runtime/ExecutionHarness.h: Added.
13633 (JSC::prepareForExecution):
13634 (JSC::prepareFunctionForExecution):
13635 * runtime/JSArray.h:
13638 * runtime/JSCell.h:
13641 * runtime/JSFunction.h:
13644 * runtime/JSGlobalData.cpp:
13645 (JSC::JSGlobalData::JSGlobalData):
13646 * runtime/JSGlobalData.h:
13649 * runtime/JSGlobalObject.h:
13652 * runtime/JSObject.h:
13656 * runtime/JSPropertyNameIterator.h:
13658 (JSPropertyNameIterator):
13659 * runtime/JSString.h:
13662 * runtime/JSTypeInfo.h:
13665 * runtime/JSValue.cpp:
13666 (JSC::JSValue::description):
13667 * runtime/JSValue.h:
13670 * runtime/JSVariableObject.h:
13672 (JSVariableObject):
13673 * runtime/Options.cpp:
13675 (JSC::Options::initializeOptions):
13676 * runtime/Options.h:
13678 * runtime/ScopeChain.h:
13681 * runtime/Structure.cpp:
13682 (JSC::Structure::addPropertyTransition):
13683 * runtime/Structure.h:
13686 * runtime/StructureChain.h:
13691 * wtf/SentinelLinkedList.h:
13692 (SentinelLinkedList):
13693 (WTF::SentinelLinkedList::isEmpty):
13694 * wtf/text/StringImpl.h:
13698 2012-02-20 Filip Pizlo <fpizlo@apple.com>
13700 Unreviewed, rolling out http://trac.webkit.org/changeset/108291
13701 It completely broke the 32-bit JIT.
13703 * heap/CopiedAllocator.h:
13704 * heap/CopiedSpace.h:
13707 (JSC::Heap::allocatorForObjectWithDestructor):
13709 (JSC::JIT::privateCompileSlowCases):
13712 * jit/JITInlineMethods.h:
13714 * jit/JITOpcodes.cpp:
13715 (JSC::JIT::emit_op_new_array):
13716 * runtime/JSArray.cpp:
13717 (JSC::storageSize):
13719 * runtime/JSArray.h:
13723 2012-02-20 Gavin Barraclough <barraclough@apple.com>
13725 [[Put]] should throw if prototype chain contains a readonly property.
13726 https://bugs.webkit.org/show_bug.cgi?id=79069
13728 Reviewed by Oliver Hunt.
13730 Currently we only check the base of the put, not the prototype chain.
13731 Fold this check in with the test for accessors.
13733 * runtime/JSObject.cpp:
13734 (JSC::JSObject::put):
13735 - Updated to test all objects in the propotype chain for readonly properties.
13736 (JSC::JSObject::putDirectAccessor):
13737 (JSC::putDescriptor):
13738 - Record the presence of readonly properties on the structure.
13739 * runtime/Structure.cpp:
13740 (JSC::Structure::Structure):
13741 - hasGetterSetterPropertiesExcludingProto expanded to hasReadOnlyOrGetterSetterPropertiesExcludingProto.
13742 * runtime/Structure.h:
13743 (JSC::Structure::hasReadOnlyOrGetterSetterPropertiesExcludingProto):
13744 (JSC::Structure::setHasGetterSetterProperties):
13745 - hasGetterSetterPropertiesExcludingProto expanded to hasReadOnlyOrGetterSetterPropertiesExcludingProto.
13746 (JSC::Structure::setContainsReadOnlyProperties):
13749 2012-02-20 Mark Hahnenberg <mhahnenberg@apple.com>
13751 Implement fast path for op_new_array in the baseline JIT
13752 https://bugs.webkit.org/show_bug.cgi?id=78612
13754 Reviewed by Filip Pizlo.
13756 * heap/CopiedAllocator.h:
13757 (CopiedAllocator): Friended the JIT to allow access to m_currentOffset.
13758 * heap/CopiedSpace.h:
13759 (CopiedSpace): Friended the JIT to allow access to
13760 (JSC::CopiedSpace::allocator):
13762 (JSC::Heap::storageAllocator): Added a getter for the CopiedAllocator class so the JIT
13763 can use it for simple allocation i.e. when we can just bump the offset without having to
13766 (JSC::JIT::privateCompileSlowCases): Added new slow case for op_new_array for when
13767 we have to bail out because the fast allocation path fails for whatever reason.
13770 * jit/JITInlineMethods.h:
13771 (JSC::JIT::emitAllocateBasicStorage): Added utility function that allows objects to
13772 allocate generic backing stores. This function is used by emitAllocateJSArray.
13774 (JSC::JIT::emitAllocateJSArray): Added utility function that allows the client to
13775 more easily allocate JSArrays. This function is used by emit_op_new_array and I expect
13776 it will also be used for emit_op_new_array_buffer.
13777 * jit/JITOpcodes.cpp:
13778 (JSC::JIT::emit_op_new_array): Changed to do inline allocation of JSArrays. Still does
13779 a stub call for oversize arrays.
13781 (JSC::JIT::emitSlow_op_new_array): Just bails out to a stub call if we fail in any way on
13783 * runtime/JSArray.cpp:
13785 * runtime/JSArray.h: Added lots of offset functions for all the fields that we need to
13786 initialize in the JIT.
13788 (JSC::ArrayStorage::lengthOffset):
13789 (JSC::ArrayStorage::numValuesInVectorOffset):
13790 (JSC::ArrayStorage::allocBaseOffset):
13791 (JSC::ArrayStorage::vectorOffset):
13793 (JSC::JSArray::sparseValueMapOffset):
13794 (JSC::JSArray::subclassDataOffset):
13795 (JSC::JSArray::indexBiasOffset):
13797 (JSC::JSArray::storageSize): Moved this function from being a static function in the cpp file
13798 to being a static function in the JSArray class. This move allows the JIT to call it to
13799 see what size it should allocate.
13801 2012-02-20 Gavin Barraclough <barraclough@apple.com>
13803 DefineOwnProperty fails with numeric properties & Object.prototype
13804 https://bugs.webkit.org/show_bug.cgi?id=79059
13806 Reviewed by Oliver Hunt.
13808 ObjectPrototype caches whether it contains any numeric properties (m_hasNoPropertiesWithUInt32Names),
13809 calls to defineOwnProperty need to update this cache.
13811 * runtime/ObjectPrototype.cpp:
13812 (JSC::ObjectPrototype::put):
13813 (JSC::ObjectPrototype::defineOwnProperty):
13815 (JSC::ObjectPrototype::getOwnPropertySlotByIndex):
13816 * runtime/ObjectPrototype.h:
13819 2012-02-20 Pino Toscano <pino@debian.org>
13821 Does not build on GNU Hurd
13822 https://bugs.webkit.org/show_bug.cgi?id=79045
13824 Reviewed by Gustavo Noronha Silva.
13826 * wtf/Platform.h: define WTF_OS_HURD.
13827 * wtf/ThreadIdentifierDataPthreads.cpp: adds a band-aid fix
13828 for the lack of PTHREAD_KEYS_MAX definition, with a value which
13829 should not cause issues.
13831 2012-02-20 Gavin Barraclough <barraclough@apple.com>
13833 Unreviewed windows build fix.
13835 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
13837 2012-02-20 Mark Hahnenberg <mhahnenberg@apple.com>
13839 Undoing accidental changes
13842 (JSC::Heap::collectAllGarbage):
13844 2012-02-20 Mark Hahnenberg <mhahnenberg@apple.com>
13846 Factor out allocation in CopySpace into a separate CopyAllocator
13847 https://bugs.webkit.org/show_bug.cgi?id=78610
13849 Reviewed by Oliver Hunt.
13851 Added a new CopyAllocator class, which allows us to do allocations without
13852 having to load the current offset and store the current offset in the current
13853 block. This change will allow us to easily do inline assembly in the JIT for
13856 * GNUmakefile.list.am:
13857 * JavaScriptCore.gypi:
13858 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
13859 * JavaScriptCore.xcodeproj/project.pbxproj:
13860 * heap/CopiedAllocator.h: Added.
13863 (JSC::CopiedAllocator::currentBlock):
13864 (JSC::CopiedAllocator::CopiedAllocator):
13865 (JSC::CopiedAllocator::allocate):
13866 (JSC::CopiedAllocator::fitsInCurrentBlock):
13867 (JSC::CopiedAllocator::wasLastAllocation):
13868 (JSC::CopiedAllocator::startedCopying):
13869 (JSC::CopiedAllocator::resetCurrentBlock):
13870 (JSC::CopiedAllocator::currentUtilization):
13871 (JSC::CopiedAllocator::resetLastAllocation):
13872 * heap/CopiedBlock.h:
13874 * heap/CopiedSpace.cpp: Moved some stuff from CopiedSpaceInlineMethods to here because we
13875 weren't really getting any benefits from having such big functions in a header file.
13876 (JSC::CopiedSpace::CopiedSpace):
13878 (JSC::CopiedSpace::init):
13879 (JSC::CopiedSpace::tryAllocateSlowCase):
13880 (JSC::CopiedSpace::tryAllocateOversize):
13881 (JSC::CopiedSpace::tryReallocate):
13882 (JSC::CopiedSpace::tryReallocateOversize):
13883 (JSC::CopiedSpace::doneFillingBlock):
13884 (JSC::CopiedSpace::doneCopying):
13885 (JSC::CopiedSpace::getFreshBlock):
13886 * heap/CopiedSpace.h:
13888 * heap/CopiedSpaceInlineMethods.h:
13890 (JSC::CopiedSpace::startedCopying):
13891 (JSC::CopiedSpace::addNewBlock):
13892 (JSC::CopiedSpace::allocateNewBlock):
13893 (JSC::CopiedSpace::fitsInBlock):
13894 (JSC::CopiedSpace::tryAllocate):
13895 (JSC::CopiedSpace::allocateFromBlock):
13897 (JSC::Heap::collectAllGarbage):
13898 * heap/HeapBlock.h:
13901 2012-02-20 Patrick Gansterer <paroga@webkit.org>
13903 Fix Visual Studio 2010 build.
13905 * bytecompiler/NodesCodegen.cpp:
13906 (JSC::PropertyListNode::emitBytecode):
13908 2012-02-16 Gavin Barraclough <barraclough@apple.com>
13910 Move special __proto__ property to Object.prototype
13911 https://bugs.webkit.org/show_bug.cgi?id=78409
13913 Reviewed by Oliver Hunt.
13915 Re-implement this as a regular accessor property. This has three key benefits:
13916 1) It makes it possible for objects to be given properties named __proto__.
13917 2) Object.prototype.__proto__ can be deleted, preventing object prototypes from being changed.
13918 3) This largely removes the magic used the implement __proto__, it can just be made a regular accessor property.
13920 * parser/Parser.cpp:
13921 (JSC::::parseFunctionInfo):
13922 - No need to prohibit functions named __proto__.
13923 * runtime/JSGlobalObject.cpp:
13924 (JSC::JSGlobalObject::reset):
13925 - Add __proto__ accessor to Object.prototype.
13926 * runtime/JSGlobalObjectFunctions.cpp:
13927 (JSC::globalFuncProtoGetter):
13928 (JSC::globalFuncProtoSetter):
13929 - Definition of the __proto__ accessor functions.
13930 * runtime/JSGlobalObjectFunctions.h:
13931 - Declaration of the __proto__ accessor functions.
13932 * runtime/JSObject.cpp:
13933 (JSC::JSObject::put):
13934 - Remove the special handling for __proto__, there is still a check to allow for a fast guard for accessors excluding __proto__.
13935 (JSC::JSObject::putDirectAccessor):
13936 - Track on the structure whether an object contains accessors other than one for __proto__.
13937 (JSC::JSObject::defineOwnProperty):
13938 - No need to prohibit definition of own properties named __proto__.
13939 * runtime/JSObject.h:
13940 (JSC::JSObject::inlineGetOwnPropertySlot):
13941 - Remove the special handling for __proto__.
13942 (JSC::JSValue::get):
13943 - Remove the special handling for __proto__.
13944 * runtime/JSString.cpp:
13945 (JSC::JSString::getOwnPropertySlot):
13946 - Remove the special handling for __proto__.
13947 * runtime/JSValue.h:
13949 - Made synthesizePrototype public (this may be needed by the __proto__ getter).
13950 * runtime/ObjectConstructor.cpp:
13951 (JSC::objectConstructorGetPrototypeOf):
13952 - Perform the security check & call prototype() directly.
13953 * runtime/Structure.cpp:
13954 (JSC::Structure::Structure):
13955 - Added 'ExcludingProto' variant of the 'hasGetterSetterProperties' state.
13956 * runtime/Structure.h:
13957 (JSC::Structure::hasGetterSetterPropertiesExcludingProto):
13958 (JSC::Structure::setHasGetterSetterProperties):
13960 - Added 'ExcludingProto' variant of the 'hasGetterSetterProperties' state.
13962 2012-02-20 Michael Saboff <msaboff@apple.com>
13964 Update toLower and toUpper tests for Unicode 6.1 changes
13965 https://bugs.webkit.org/show_bug.cgi?id=78923
13967 Reviewed by Oliver Hunt.
13969 * tests/mozilla/ecma/String/15.5.4.11-2.js: Updated the test
13970 to handle a third set of results for updated Unicode 6.1
13973 (TestCaseMultiExpected):
13974 (writeTestCaseResultMultiExpected):
13975 (getTestCaseResultMultiExpected):
13977 (GetUnicodeValues):
13978 (DecimalToHexString):
13980 2012-02-20 Andy Wingo <wingo@igalia.com>
13982 Remove unused features from CodeFeatures
13983 https://bugs.webkit.org/show_bug.cgi?id=78804
13985 Reviewed by Gavin Barraclough.
13988 * parser/ASTBuilder.h:
13989 (JSC::ClosureFeature):
13990 (JSC::ASTBuilder::createFunctionBody):
13991 (JSC::ASTBuilder::usesClosures):
13992 Remove "ClosureFeature". Since we track captured variables more
13993 precisely, this bit doesn't do us any good.
13995 (JSC::AssignFeature):
13996 (JSC::ASTBuilder::makeAssignNode):
13997 (JSC::ASTBuilder::makePrefixNode):
13998 (JSC::ASTBuilder::makePostfixNode):
13999 (JSC::ASTBuilder::usesAssignment):
14000 Similarly, remove AssignFeature. It is unused.
14002 2012-02-19 Carlos Garcia Campos <cgarcia@igalia.com>
14004 Unreviewed. Fix make distcheck issues.
14006 * GNUmakefile.list.am: Add missing files.
14008 2012-02-18 Sam Weinig <sam@webkit.org>
14010 Fix style issues in DFG Phase classes
14011 https://bugs.webkit.org/show_bug.cgi?id=78983
14013 Reviewed by Ryosuke Niwa.
14015 * dfg/DFGArithNodeFlagsInferencePhase.cpp:
14016 * dfg/DFGCFAPhase.cpp:
14017 * dfg/DFGCSEPhase.cpp:
14018 * dfg/DFGPredictionPropagationPhase.cpp:
14019 * dfg/DFGVirtualRegisterAllocationPhase.cpp:
14020 Add a space before the colon in class declarations.
14022 2012-02-18 Filip Pizlo <fpizlo@apple.com>
14024 Attempt to fix Windows build.
14026 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
14028 2012-02-18 Sam Weinig <sam@webkit.org>
14030 Fix the libc++ build.
14032 Reviewed by Anders Carlsson.
14035 Libc++'s nullptr emulation does not allow default construction
14036 of the nullptr_t type. Work around this with the arguably clearer
14037 just returning nullptr.
14039 2012-02-18 Filip Pizlo <fpizlo@apple.com>
14041 DFGPropagator.cpp has too many things
14042 https://bugs.webkit.org/show_bug.cgi?id=78956
14044 Reviewed by Oliver Hunt.
14046 Added the notion of a DFG::Phase. Removed DFG::Propagator, and took its
14047 various things and put them into separate files. These new phases follow
14048 the naming convention "DFG<name>Phase" where <name> is a noun. They are
14049 called via functions of the form "perform<name>".
14052 * GNUmakefile.list.am:
14053 * JavaScriptCore.xcodeproj/project.pbxproj:
14055 * dfg/DFGArithNodeFlagsInferencePhase.cpp: Added.
14057 (JSC::DFG::performArithNodeFlagsInference):
14058 * dfg/DFGArithNodeFlagsInferencePhase.h: Added.
14060 * dfg/DFGCFAPhase.cpp: Added.
14062 (JSC::DFG::performCFA):
14063 * dfg/DFGCFAPhase.h: Added.
14065 * dfg/DFGCSEPhase.cpp: Added.
14067 (JSC::DFG::performCSE):
14068 * dfg/DFGCSEPhase.h: Added.
14070 * dfg/DFGDriver.cpp:
14071 (JSC::DFG::compile):
14072 * dfg/DFGPhase.cpp: Added.
14074 (JSC::DFG::Phase::beginPhase):
14075 (JSC::DFG::Phase::endPhase):
14076 * dfg/DFGPhase.h: Added.
14079 (JSC::DFG::Phase::Phase):
14080 (JSC::DFG::Phase::~Phase):
14081 (JSC::DFG::Phase::globalData):
14082 (JSC::DFG::Phase::codeBlock):
14083 (JSC::DFG::Phase::profiledBlock):
14084 (JSC::DFG::Phase::beginPhase):
14085 (JSC::DFG::Phase::endPhase):
14086 (JSC::DFG::runPhase):
14087 * dfg/DFGPredictionPropagationPhase.cpp: Added.
14089 (JSC::DFG::performPredictionPropagation):
14090 * dfg/DFGPredictionPropagationPhase.h: Added.
14092 * dfg/DFGPropagator.cpp: Removed.
14093 * dfg/DFGPropagator.h: Removed.
14094 * dfg/DFGVirtualRegisterAllocationPhase.cpp: Added.
14096 (JSC::DFG::performVirtualRegisterAllocation):
14097 * dfg/DFGVirtualRegisterAllocationPhase.h: Added.
14100 2012-02-17 Filip Pizlo <fpizlo@apple.com>
14102 DFG::Graph should have references to JSGlobalData, the CodeBlock being compiled, and
14103 the CodeBlock that was used for profiling
14104 https://bugs.webkit.org/show_bug.cgi?id=78954
14106 Reviewed by Gavin Barraclough.
14108 * bytecode/CodeBlock.h:
14109 (JSC::baselineCodeBlockForOriginAndBaselineCodeBlock):
14111 * dfg/DFGAbstractState.cpp:
14112 (JSC::DFG::AbstractState::AbstractState):
14113 (JSC::DFG::AbstractState::execute):
14114 * dfg/DFGAbstractState.h:
14115 * dfg/DFGAssemblyHelpers.h:
14117 * dfg/DFGByteCodeParser.cpp:
14118 (JSC::DFG::ByteCodeParser::ByteCodeParser):
14119 (JSC::DFG::ByteCodeParser::handleCall):
14121 * dfg/DFGByteCodeParser.h:
14123 * dfg/DFGDriver.cpp:
14124 (JSC::DFG::compile):
14125 * dfg/DFGGraph.cpp:
14126 (JSC::DFG::Graph::dump):
14127 (JSC::DFG::Graph::predictArgumentTypes):
14129 (JSC::DFG::Graph::Graph):
14131 (JSC::DFG::Graph::getJSConstantPrediction):
14132 (JSC::DFG::Graph::addShouldSpeculateInteger):
14133 (JSC::DFG::Graph::isInt32Constant):
14134 (JSC::DFG::Graph::isDoubleConstant):
14135 (JSC::DFG::Graph::isNumberConstant):
14136 (JSC::DFG::Graph::isBooleanConstant):
14137 (JSC::DFG::Graph::isFunctionConstant):
14138 (JSC::DFG::Graph::valueOfJSConstant):
14139 (JSC::DFG::Graph::valueOfInt32Constant):
14140 (JSC::DFG::Graph::valueOfNumberConstant):
14141 (JSC::DFG::Graph::valueOfBooleanConstant):
14142 (JSC::DFG::Graph::valueOfFunctionConstant):
14143 (JSC::DFG::Graph::baselineCodeBlockFor):
14144 (JSC::DFG::Graph::valueProfileFor):
14145 (JSC::DFG::Graph::addImmediateShouldSpeculateInteger):
14146 * dfg/DFGJITCompiler.h:
14147 (JSC::DFG::JITCompiler::JITCompiler):
14149 * dfg/DFGOSRExit.cpp:
14150 (JSC::DFG::OSRExit::considerAddingAsFrequentExitSiteSlow):
14151 * dfg/DFGPropagator.cpp:
14152 (JSC::DFG::Propagator::Propagator):
14153 (JSC::DFG::Propagator::isNotNegZero):
14154 (JSC::DFG::Propagator::isNotZero):
14155 (JSC::DFG::Propagator::propagateNodePredictions):
14156 (JSC::DFG::Propagator::doRoundOfDoubleVoting):
14157 (JSC::DFG::Propagator::globalCFA):
14158 (JSC::DFG::propagate):
14159 * dfg/DFGPropagator.h:
14161 * dfg/DFGSpeculativeJIT.cpp:
14162 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
14163 (JSC::DFG::SpeculativeJIT::compileAdd):
14164 (JSC::DFG::SpeculativeJIT::compileArithSub):
14165 * dfg/DFGSpeculativeJIT.h:
14166 (JSC::DFG::SpeculativeJIT::isConstant):
14167 (JSC::DFG::SpeculativeJIT::isJSConstant):
14168 (JSC::DFG::SpeculativeJIT::isInt32Constant):
14169 (JSC::DFG::SpeculativeJIT::isDoubleConstant):
14170 (JSC::DFG::SpeculativeJIT::isNumberConstant):
14171 (JSC::DFG::SpeculativeJIT::isBooleanConstant):
14172 (JSC::DFG::SpeculativeJIT::isFunctionConstant):
14173 (JSC::DFG::SpeculativeJIT::valueOfInt32Constant):
14174 (JSC::DFG::SpeculativeJIT::valueOfNumberConstant):
14175 (JSC::DFG::SpeculativeJIT::valueOfJSConstant):
14176 (JSC::DFG::SpeculativeJIT::valueOfBooleanConstant):
14177 (JSC::DFG::SpeculativeJIT::valueOfFunctionConstant):
14178 (JSC::DFG::SpeculativeJIT::speculationCheck):
14179 (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
14181 2012-02-17 Ahmad Sharif <asharif.tools@gmail.com>
14183 There is a warning in memset in glibc that gets triggered through a
14184 warndecl when the fill-value of memset is a non-zero constant and the
14185 size is zero. This warning is enabled when building with
14186 -D_FORTIFY_SOURCE=2. This patch fixes the warning.
14188 https://bugs.webkit.org/show_bug.cgi?id=78513
14190 Reviewed by Alexey Proskuryakov
14194 2012-02-17 Kalev Lember <kalevlember@gmail.com>
14196 Remove unused parameters from WTF threading API
14197 https://bugs.webkit.org/show_bug.cgi?id=78389
14199 Reviewed by Adam Roben.
14201 waitForThreadCompletion() had an out param 'void **result' to get the
14202 'void *' returned by ThreadFunction. However, the implementation in
14203 ThreadingWin.cpp ignored the out param, not filling it in. This had
14204 led to a situation where none of the client code made use of the param
14205 and just ignored it.
14207 To clean this up, the patch changes the signature of ThreadFunction to
14208 return void instead of void* and drops the the unused 'void **result'
14209 parameter from waitForThreadCompletion. Also, all client code is
14210 updated for the API change.
14212 As mentioned in https://bugs.webkit.org/show_bug.cgi?id=78389 , even
14213 though the change only affects internal API, Safari is using it
14214 directly and we'll need to keep the old versions around for ABI
14215 compatibility. For this, the patch adds compatibility wrappers with
14218 * JavaScriptCore.order:
14219 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
14220 * bytecode/SamplingTool.cpp:
14221 (JSC::SamplingThread::threadStartFunc):
14222 (JSC::SamplingThread::stop):
14223 * bytecode/SamplingTool.h:
14226 (JSC::Heap::~Heap):
14227 (JSC::Heap::blockFreeingThreadStartFunc):
14229 * heap/MarkStack.cpp:
14230 (JSC::MarkStackThreadSharedData::markingThreadStartFunc):
14231 (JSC::MarkStackThreadSharedData::~MarkStackThreadSharedData):
14232 * heap/MarkStack.h:
14233 (MarkStackThreadSharedData):
14234 * wtf/ParallelJobsGeneric.cpp:
14235 (WTF::ParallelEnvironment::ThreadPrivate::workerThread):
14236 * wtf/ParallelJobsGeneric.h:
14238 * wtf/ThreadFunctionInvocation.h: Update the signature of
14241 * wtf/Threading.cpp:
14242 (WTF::threadEntryPoint): Update for ThreadFunction signature change.
14244 (WTF::ThreadFunctionWithReturnValueInvocation::ThreadFunctionWithReturnValueInvocation):
14245 ABI compatibility function for Safari.
14246 (ThreadFunctionWithReturnValueInvocation): Ditto.
14247 (WTF::compatEntryPoint): Ditto.
14248 (WTF::createThread): Ditto.
14249 (WTF::waitForThreadCompletion): Ditto.
14250 * wtf/Threading.h: Update the signature of ThreadFunction and
14251 waitForThreadCompletion.
14253 * wtf/ThreadingPthreads.cpp: Implement the new API.
14254 (WTF::wtfThreadEntryPoint):
14256 (WTF::createThreadInternal):
14257 (WTF::waitForThreadCompletion):
14258 * wtf/ThreadingWin.cpp: Implement the new API.
14259 (WTF::wtfThreadEntryPoint):
14260 (WTF::waitForThreadCompletion):
14262 2012-02-16 Oliver Hunt <oliver@apple.com>
14264 Implement Error.stack
14265 https://bugs.webkit.org/show_bug.cgi?id=66994
14267 Reviewed by Gavin Barraclough.
14269 Implement support for stack traces on exception objects. This is a rewrite
14270 of the core portion of the last stack walking logic, but the mechanical work
14271 of adding the information to an exception comes from the original work by
14272 Juan Carlos Montemayor Elosua.
14274 * interpreter/Interpreter.cpp:
14275 (JSC::getCallerInfo):
14277 (JSC::getSourceURLFromCallFrame):
14278 (JSC::getStackFrameCodeType):
14279 (JSC::Interpreter::getStackTrace):
14280 (JSC::Interpreter::throwException):
14281 (JSC::Interpreter::privateExecute):
14282 * interpreter/Interpreter.h:
14285 (JSC::StackFrame::toString):
14288 (GlobalObject::finishCreation):
14289 (functionJSCStack):
14291 (JSC::FunctionBodyNode::setInferredName):
14294 * runtime/CommonIdentifiers.h:
14295 * runtime/Error.cpp:
14296 (JSC::addErrorInfo):
14300 2012-02-17 Mark Hahnenberg <mhahnenberg@apple.com>
14302 Rename Bump* to Copy*
14303 https://bugs.webkit.org/show_bug.cgi?id=78573
14305 Reviewed by Geoffrey Garen.
14307 Renamed anything with "Bump" in the name to have "Copied" instead.
14310 * GNUmakefile.list.am:
14311 * JavaScriptCore.gypi:
14312 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
14313 * JavaScriptCore.xcodeproj/project.pbxproj:
14315 * heap/BumpBlock.h: Removed.
14316 * heap/BumpSpace.cpp: Removed.
14317 * heap/BumpSpace.h: Removed.
14318 * heap/BumpSpaceInlineMethods.h: Removed.
14319 * heap/ConservativeRoots.cpp:
14320 (JSC::ConservativeRoots::ConservativeRoots):
14321 (JSC::ConservativeRoots::genericAddPointer):
14322 * heap/ConservativeRoots.h:
14323 (ConservativeRoots):
14324 * heap/CopiedBlock.h: Added.
14327 (JSC::CopiedBlock::CopiedBlock):
14328 * heap/CopiedSpace.cpp: Added.
14330 (JSC::CopiedSpace::tryAllocateSlowCase):
14331 * heap/CopiedSpace.h: Added.
14334 (JSC::CopiedSpace::isInCopyPhase):
14335 (JSC::CopiedSpace::totalMemoryAllocated):
14336 (JSC::CopiedSpace::totalMemoryUtilized):
14337 * heap/CopiedSpaceInlineMethods.h: Added.
14339 (JSC::CopiedSpace::CopiedSpace):
14340 (JSC::CopiedSpace::init):
14341 (JSC::CopiedSpace::contains):
14342 (JSC::CopiedSpace::pin):
14343 (JSC::CopiedSpace::startedCopying):
14344 (JSC::CopiedSpace::doneCopying):
14345 (JSC::CopiedSpace::doneFillingBlock):
14346 (JSC::CopiedSpace::recycleBlock):
14347 (JSC::CopiedSpace::getFreshBlock):
14348 (JSC::CopiedSpace::borrowBlock):
14349 (JSC::CopiedSpace::addNewBlock):
14350 (JSC::CopiedSpace::allocateNewBlock):
14351 (JSC::CopiedSpace::fitsInBlock):
14352 (JSC::CopiedSpace::fitsInCurrentBlock):
14353 (JSC::CopiedSpace::tryAllocate):
14354 (JSC::CopiedSpace::tryAllocateOversize):
14355 (JSC::CopiedSpace::allocateFromBlock):
14356 (JSC::CopiedSpace::tryReallocate):
14357 (JSC::CopiedSpace::tryReallocateOversize):
14358 (JSC::CopiedSpace::isOversize):
14359 (JSC::CopiedSpace::isPinned):
14360 (JSC::CopiedSpace::oversizeBlockFor):
14361 (JSC::CopiedSpace::blockFor):
14366 * heap/MarkStack.cpp:
14367 (JSC::MarkStackThreadSharedData::MarkStackThreadSharedData):
14368 (JSC::SlotVisitor::drainFromShared):
14369 (JSC::SlotVisitor::startCopying):
14370 (JSC::SlotVisitor::allocateNewSpace):
14371 (JSC::SlotVisitor::doneCopying):
14372 * heap/MarkStack.h:
14373 (MarkStackThreadSharedData):
14374 * heap/SlotVisitor.h:
14376 * runtime/JSArray.cpp:
14377 * runtime/JSObject.cpp:
14379 2012-02-16 Yuqiang Xian <yuqiang.xian@intel.com>
14381 Add JSC code profiling support on Linux x86
14382 https://bugs.webkit.org/show_bug.cgi?id=78871
14384 Reviewed by Gavin Barraclough.
14386 We don't unwind the stack for now as we cannot guarantee all the
14387 libraries are compiled without -fomit-frame-pointer.
14389 * tools/CodeProfile.cpp:
14390 (JSC::CodeProfile::sample):
14391 * tools/CodeProfiling.cpp:
14393 (JSC::profilingTimer):
14394 (JSC::CodeProfiling::begin):
14395 (JSC::CodeProfiling::end):
14397 2012-02-16 Csaba Osztrogonác <ossy@webkit.org>
14399 Unreviewed. Rolling out r107980, because it broke 32 bit platforms.
14401 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
14402 * interpreter/Interpreter.cpp:
14403 (JSC::Interpreter::throwException):
14404 (JSC::Interpreter::privateExecute):
14405 * interpreter/Interpreter.h:
14409 (GlobalObject::finishCreation):
14411 (JSC::FunctionBodyNode::setInferredName):
14414 * runtime/CommonIdentifiers.h:
14415 * runtime/Error.cpp:
14416 (JSC::addErrorInfo):
14420 2012-02-16 Filip Pizlo <fpizlo@apple.com>
14422 ENABLE_INTERPRETER should be ENABLE_CLASSIC_INTERPRETER
14423 https://bugs.webkit.org/show_bug.cgi?id=78791
14425 Rubber stamped by Oliver Hunt.
14427 Just a renaming, nothing more. Also renamed COMPUTED_GOTO_INTERPRETER to
14428 COMPUTED_GOTO_CLASSIC_INTERPRETER.
14430 * bytecode/CodeBlock.cpp:
14431 (JSC::CodeBlock::dump):
14432 (JSC::CodeBlock::stronglyVisitStrongReferences):
14434 (JSC::CodeBlock::shrinkToFit):
14435 * bytecode/CodeBlock.h:
14437 * bytecode/Instruction.h:
14438 (JSC::Instruction::Instruction):
14439 * bytecode/Opcode.h:
14440 (JSC::padOpcodeName):
14441 * bytecompiler/BytecodeGenerator.cpp:
14442 (JSC::BytecodeGenerator::emitResolve):
14443 (JSC::BytecodeGenerator::emitResolveWithBase):
14444 (JSC::BytecodeGenerator::emitGetById):
14445 (JSC::BytecodeGenerator::emitPutById):
14446 (JSC::BytecodeGenerator::emitDirectPutById):
14447 * interpreter/AbstractPC.cpp:
14448 (JSC::AbstractPC::AbstractPC):
14449 * interpreter/AbstractPC.h:
14451 * interpreter/CallFrame.h:
14453 * interpreter/Interpreter.cpp:
14455 (JSC::Interpreter::initialize):
14456 (JSC::Interpreter::isOpcode):
14457 (JSC::Interpreter::unwindCallFrame):
14458 (JSC::Interpreter::execute):
14459 (JSC::Interpreter::privateExecute):
14460 (JSC::Interpreter::retrieveLastCaller):
14461 * interpreter/Interpreter.h:
14462 (JSC::Interpreter::getOpcode):
14463 (JSC::Interpreter::getOpcodeID):
14465 * jit/ExecutableAllocatorFixedVMPool.cpp:
14466 (JSC::FixedVMPoolExecutableAllocator::FixedVMPoolExecutableAllocator):
14467 * runtime/Executable.cpp:
14468 (JSC::EvalExecutable::compileInternal):
14469 (JSC::ProgramExecutable::compileInternal):
14470 (JSC::FunctionExecutable::compileForCallInternal):
14471 (JSC::FunctionExecutable::compileForConstructInternal):
14472 * runtime/Executable.h:
14473 (NativeExecutable):
14474 * runtime/JSGlobalData.cpp:
14475 (JSC::JSGlobalData::JSGlobalData):
14476 (JSC::JSGlobalData::getHostFunction):
14477 * runtime/JSGlobalData.h:
14479 * wtf/OSAllocatorPosix.cpp:
14480 (WTF::OSAllocator::reserveAndCommit):
14483 2012-02-15 Geoffrey Garen <ggaren@apple.com>
14485 Made Weak<T> single-owner, adding PassWeak<T>
14486 https://bugs.webkit.org/show_bug.cgi?id=78740
14488 Reviewed by Sam Weinig.
14490 This works basically the same way as OwnPtr<T> and PassOwnPtr<T>.
14492 This clarifies the semantics of finalizers: It's ambiguous and probably
14493 a bug to copy a finalizer (i.e., it's a bug to run a C++ destructor
14494 twice), so I've made Weak<T> non-copyable. Anywhere we used to copy a
14495 Weak<T>, we now use PassWeak<T>.
14497 This also makes Weak<T> HashMaps more efficient.
14499 * API/JSClassRef.cpp:
14500 (OpaqueJSClass::prototype): Use PassWeak<T> instead of set(), since
14503 * JavaScriptCore.xcodeproj/project.pbxproj: Export!
14505 * heap/PassWeak.h: Added.
14508 (JSC::PassWeak::PassWeak):
14509 (JSC::PassWeak::~PassWeak):
14510 (JSC::PassWeak::get):
14511 (JSC::::leakHandle):
14514 (JSC::operator!=): This is the Weak<T> version of PassOwnPtr<T>.
14519 (JSC::Weak::release):
14520 (JSC::Weak::hashTableDeletedValue):
14522 (JSC): Changed to be non-copyable, removing a lot of copying-related
14523 APIs. Added hash traits so hash maps still work.
14525 * jit/JITStubs.cpp:
14526 (JSC::JITThunks::hostFunctionStub):
14527 * runtime/RegExpCache.cpp:
14528 (JSC::RegExpCache::lookupOrCreate): Use PassWeak<T>, as required by
14529 our new hash map API.
14531 2012-02-16 Mark Hahnenberg <mhahnenberg@apple.com>
14533 Fix the broken viewport tests
14534 https://bugs.webkit.org/show_bug.cgi?id=78774
14536 Reviewed by Kenneth Rohde Christiansen.
14538 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
14539 * wtf/text/WTFString.cpp:
14541 (WTF::toDoubleType): Template-ized to allow other functions to specify whether they
14542 want to allow trailing junk or not when calling strtod.
14543 (WTF::charactersToDouble):
14544 (WTF::charactersToFloat):
14545 (WTF::charactersToFloatIgnoringJunk): Created new version of charactersToFloat that allows
14547 * wtf/text/WTFString.h:
14550 2012-02-16 Oliver Hunt <oliver@apple.com>
14552 Implement Error.stack
14553 https://bugs.webkit.org/show_bug.cgi?id=66994
14555 Reviewed by Gavin Barraclough.
14557 Implement support for stack traces on exception objects. This is a rewrite
14558 of the core portion of the last stack walking logic, but the mechanical work
14559 of adding the information to an exception comes from the original work by
14560 Juan Carlos Montemayor Elosua.
14562 * interpreter/Interpreter.cpp:
14563 (JSC::getCallerInfo):
14565 (JSC::getSourceURLFromCallFrame):
14566 (JSC::getStackFrameCodeType):
14567 (JSC::Interpreter::getStackTrace):
14568 (JSC::Interpreter::throwException):
14569 (JSC::Interpreter::privateExecute):
14570 * interpreter/Interpreter.h:
14573 (JSC::StackFrame::toString):
14576 (GlobalObject::finishCreation):
14577 (functionJSCStack):
14579 (JSC::FunctionBodyNode::setInferredName):
14582 * runtime/CommonIdentifiers.h:
14583 * runtime/Error.cpp:
14584 (JSC::addErrorInfo):
14588 2012-02-15 Gavin Barraclough <barraclough@apple.com>
14590 Numerous trivial bugs in Object.defineProperty
14591 https://bugs.webkit.org/show_bug.cgi?id=78777
14593 Reviewed by Sam Weinig.
14595 There are a handful of really trivial bugs, related to Object.defineProperty:
14596 * Redefining an accessor with different attributes changes the attributes, but not the get/set functions!
14597 * Calling an undefined setter should only throw in strict mode.
14598 * When redefining an accessor to a data decriptor, if writable is not specified we should default to false.
14599 * Any attempt to redefine a non-configurable property of an array as configurable should be rejected.
14600 * Object.defineProperties should call toObject on 'Properties' argument, rather than throwing if it is not an object.
14601 * If preventExtensions has been called on an array, subsequent assignment beyond array bounds should fail.
14602 * 'isFrozen' shouldn't be checking the ReadOnly bit for accessor descriptors (we presently always keep this bit as 'false').
14603 * Should be able to redefine an non-writable, non-configurable property, with the same value and attributes.
14604 * Should be able to define an non-configurable accessor.
14605 These are mostly all one-line changes, e.g. inverted boolean checks, masking against wrong attribute.
14607 * runtime/JSArray.cpp:
14608 (JSC::SparseArrayValueMap::put):
14610 - Calling an undefined setter should only throw in strict mode.
14611 (JSC::JSArray::putDescriptor):
14612 - Should be able to define an non-configurable accessor.
14613 (JSC::JSArray::defineOwnNumericProperty):
14614 - Any attempt to redefine a non-configurable property of an array as configurable should be rejected.
14615 (JSC::JSArray::putByIndexBeyondVectorLength):
14616 - If preventExtensions has been called on an array, subsequent assignment beyond array bounds should fail.
14617 * runtime/JSArray.h:
14619 - made enterDictionaryMode public, called from JSObject.
14620 * runtime/JSObject.cpp:
14621 (JSC::JSObject::put):
14622 - Calling an undefined setter should only throw in strict mode.
14623 (JSC::JSObject::preventExtensions):
14624 - Put array objects into dictionary mode to handle this!
14625 (JSC::JSObject::defineOwnProperty):
14626 - Should be able to redefine an non-writable, non-configurable property, with the same value and attributes.
14627 - Redefining an accessor with different attributes changes the attributes, but not the get/set functions!
14628 * runtime/ObjectConstructor.cpp:
14629 (JSC::objectConstructorDefineProperties):
14630 - Object.defineProperties should call toObject on 'Properties' argument, rather than throwing if it is not an object.
14631 * runtime/PropertyDescriptor.cpp:
14632 (JSC::PropertyDescriptor::attributesWithOverride):
14633 - When redefining an accessor to a data decriptor, if writable is not specified we should default to false.
14634 (JSC::PropertyDescriptor::attributesOverridingCurrent):
14635 - When redefining an accessor to a data decriptor, if writable is not specified we should default to false.
14636 * runtime/Structure.cpp:
14637 (JSC::Structure::freezeTransition):
14638 - 'freezeTransition' shouldn't be setting the ReadOnly bit for accessor descriptors (we presently always keep this bit as 'false').
14639 (JSC::Structure::isFrozen):
14640 - 'isFrozen' shouldn't be checking the ReadOnly bit for accessor descriptors (we presently always keep this bit as 'false').
14642 2012-02-13 Filip Pizlo <fpizlo@apple.com>
14644 DFG should not check the types of arguments that are dead
14645 https://bugs.webkit.org/show_bug.cgi?id=78518
14647 Reviewed by Geoff Garen.
14649 The argument checks are now elided if the corresponding SetArgument is dead,
14650 and the abstract value of the argument is set to bottom (None, []). This is
14651 performance neutral on the benchmarks we currently track.
14653 * dfg/DFGAbstractState.cpp:
14654 (JSC::DFG::AbstractState::initialize):
14655 * dfg/DFGSpeculativeJIT.cpp:
14656 (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
14658 2012-02-15 Oliver Hunt <oliver@apple.com>
14660 Ensure that the DFG JIT always plants a CodeOrigin when making calls
14661 https://bugs.webkit.org/show_bug.cgi?id=78763
14663 Reviewed by Gavin Barraclough.
14665 Make all calls plant a CodeOrigin prior to the actual
14666 call. Also clobbers the Interpreter with logic to ensure
14667 that the interpreter always plants a bytecode offset.
14669 * dfg/DFGJITCompiler.cpp:
14670 (JSC::DFG::JITCompiler::link):
14671 (JSC::DFG::JITCompiler::compileFunction):
14672 * dfg/DFGJITCompiler.h:
14674 (JSC::DFG::JITCompiler::beginJSCall):
14675 (JSC::DFG::JITCompiler::beginCall):
14676 * dfg/DFGRepatch.cpp:
14677 (JSC::DFG::tryBuildGetByIDList):
14678 * dfg/DFGSpeculativeJIT.h:
14679 (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheck):
14680 * dfg/DFGSpeculativeJIT32_64.cpp:
14681 (JSC::DFG::SpeculativeJIT::emitCall):
14682 * dfg/DFGSpeculativeJIT64.cpp:
14683 (JSC::DFG::SpeculativeJIT::emitCall):
14684 * interpreter/AbstractPC.cpp:
14685 (JSC::AbstractPC::AbstractPC):
14686 * interpreter/CallFrame.cpp:
14687 (JSC::CallFrame::trueCallFrame):
14688 * interpreter/CallFrame.h:
14689 (JSC::ExecState::bytecodeOffsetForNonDFGCode):
14691 (JSC::ExecState::setBytecodeOffsetForNonDFGCode):
14692 (JSC::ExecState::codeOriginIndexForDFG):
14694 2012-02-14 Oliver Hunt <oliver@apple.com>
14698 * runtime/Executable.cpp:
14700 * runtime/Executable.h:
14703 2012-02-14 Matt Lilek <mrl@apple.com>
14705 Don't ENABLE_DASHBOARD_SUPPORT unconditionally on all Mac platforms
14706 https://bugs.webkit.org/show_bug.cgi?id=78629
14708 Reviewed by David Kilzer.
14710 * Configurations/FeatureDefines.xcconfig:
14712 2012-02-14 Filip Pizlo <fpizlo@apple.com>
14714 Unreviewed, build fix for non-DFG platforms.
14716 * assembler/MacroAssembler.h:
14719 2012-02-14 Filip Pizlo <fpizlo@apple.com>
14721 Unreviewed, fix build and configuration goof.
14723 * assembler/MacroAssembler.h:
14724 (JSC::MacroAssembler::invert):
14727 2012-02-13 Filip Pizlo <fpizlo@apple.com>
14729 DFG should be able to emit code on control flow edges
14730 https://bugs.webkit.org/show_bug.cgi?id=78515
14732 Reviewed by Gavin Barraclough.
14734 This gets us a few steps closer to being able to perform global register allocation,
14735 by allowing us to have landing pads on control flow edges. This will let us reshuffle
14736 registers if it happens to be necessary due to different reg alloc decisions in
14739 This also introduces the notion of a landing pad for OSR entry, which will allow us
14740 to emit code that places data into registers when we're entering into the DFG from
14743 Finally, this patch introduces a verification mode that checks that the landing pads
14744 are actually emitted and do actually work as advertised. When verification is disabled,
14745 this has no effect on behavior.
14747 * assembler/MacroAssembler.h:
14749 (JSC::MacroAssembler::invert):
14750 (JSC::MacroAssembler::isInvertible):
14752 * dfg/DFGJITCompiler.cpp:
14753 (JSC::DFG::JITCompiler::compile):
14754 (JSC::DFG::JITCompiler::compileFunction):
14755 * dfg/DFGSpeculativeJIT.cpp:
14756 (JSC::DFG::SpeculativeJIT::compilePeepHoleDoubleBranch):
14757 (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
14758 (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
14759 (JSC::DFG::SpeculativeJIT::compile):
14760 (JSC::DFG::SpeculativeJIT::createOSREntries):
14762 (JSC::DFG::SpeculativeJIT::linkOSREntries):
14763 (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant):
14764 * dfg/DFGSpeculativeJIT.h:
14766 (JSC::DFG::SpeculativeJIT::branchDouble):
14767 (JSC::DFG::SpeculativeJIT::branchDoubleNonZero):
14768 (JSC::DFG::SpeculativeJIT::branch32):
14769 (JSC::DFG::SpeculativeJIT::branchTest32):
14770 (JSC::DFG::SpeculativeJIT::branchPtr):
14771 (JSC::DFG::SpeculativeJIT::branchTestPtr):
14772 (JSC::DFG::SpeculativeJIT::branchTest8):
14773 (JSC::DFG::SpeculativeJIT::jump):
14774 (JSC::DFG::SpeculativeJIT::haveEdgeCodeToEmit):
14775 (JSC::DFG::SpeculativeJIT::emitEdgeCode):
14776 * dfg/DFGSpeculativeJIT32_64.cpp:
14777 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
14778 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
14779 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
14780 (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
14781 (JSC::DFG::SpeculativeJIT::emitBranch):
14782 (JSC::DFG::SpeculativeJIT::compile):
14783 * dfg/DFGSpeculativeJIT64.cpp:
14784 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
14785 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
14786 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
14787 (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
14788 (JSC::DFG::SpeculativeJIT::emitBranch):
14789 (JSC::DFG::SpeculativeJIT::compile):
14791 2012-02-14 Filip Pizlo <fpizlo@apple.com>
14793 Assertion failure under JSC::DFG::AbstractState::execute loading economist.com
14794 https://bugs.webkit.org/show_bug.cgi?id=78153
14795 <rdar://problem/10861712> <rdar://problem/10861947>
14797 Reviewed by Oliver Hunt.
14799 * dfg/DFGAbstractState.cpp:
14800 (JSC::DFG::AbstractState::execute):
14801 * dfg/DFGSpeculativeJIT.cpp:
14802 (JSC::DFG::SpeculativeJIT::compileAdd):
14804 2012-02-14 Eric Seidel <eric@webkit.org>
14806 Upstream Android's additions to Platform.h
14807 https://bugs.webkit.org/show_bug.cgi?id=78536
14809 Reviewed by Adam Barth.
14813 2012-02-12 Mark Hahnenberg <mhahnenberg@apple.com>
14815 Replace old strtod with new strtod
14816 https://bugs.webkit.org/show_bug.cgi?id=68044
14818 Reviewed by Geoffrey Garen.
14820 * parser/Lexer.cpp: Added template argument. This version allows junk after numbers.
14822 * runtime/JSGlobalObjectFunctions.cpp: Ditto.
14824 (JSC::jsStrDecimalLiteral):
14825 * runtime/LiteralParser.cpp: Ditto.
14826 (JSC::::Lexer::lexNumber):
14827 * wtf/dtoa.cpp: Replaced old strtod with a new version that uses the new StringToDoubleConverter.
14828 It takes a template argument to allow clients to determine statically whether it should allow
14829 junk after the numbers or not.
14834 * wtf/text/WTFString.cpp: Added template argument. This version does not allow junk after numbers.
14835 (WTF::toDoubleType):
14837 2012-02-13 Mark Hahnenberg <mhahnenberg@apple.com>
14839 More windows build fixing
14841 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
14843 2012-02-13 Oliver Hunt <oliver@apple.com>
14845 Executing out of bounds in JSC::Yarr::YarrCodeBlock::execute / JSC::RegExp::match
14846 https://bugs.webkit.org/show_bug.cgi?id=76315
14848 Reviewed by Gavin Barraclough.
14850 Perform a 3 byte compare using two comparisons, rather than trying to perform the
14851 operation with a four byte load.
14853 * yarr/YarrJIT.cpp:
14854 (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
14856 2012-02-13 Mark Hahnenberg <mhahnenberg@apple.com>
14860 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
14862 2012-02-12 Mark Hahnenberg <mhahnenberg@apple.com>
14864 Replace old strtod with new strtod
14865 https://bugs.webkit.org/show_bug.cgi?id=68044
14867 Reviewed by Geoffrey Garen.
14869 * parser/Lexer.cpp: Added template argument. This version allows junk after numbers.
14871 * runtime/JSGlobalObjectFunctions.cpp: Ditto.
14873 (JSC::jsStrDecimalLiteral):
14874 * runtime/LiteralParser.cpp: Ditto.
14875 (JSC::::Lexer::lexNumber):
14876 * wtf/dtoa.cpp: Replaced old strtod with a new version that uses the new StringToDoubleConverter.
14877 It takes a template argument to allow clients to determine statically whether it should allow
14878 junk after the numbers or not.
14883 * wtf/text/WTFString.cpp: Added template argument. This version does not allow junk after numbers.
14884 (WTF::toDoubleType):
14886 2012-02-13 Sam Weinig <sam@webkit.org>
14888 Move JSC related assertions out of Assertions.h and into their own header
14889 https://bugs.webkit.org/show_bug.cgi?id=78508
14891 Reviewed by Gavin Barraclough.
14893 * GNUmakefile.list.am:
14894 * JavaScriptCore.gypi:
14895 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
14896 * JavaScriptCore.xcodeproj/project.pbxproj:
14899 * heap/GCAssertions.h: Added.
14900 Move assertions here.
14902 * runtime/WriteBarrier.h:
14903 Add #include of GCAssertions.h
14905 * wtf/Assertions.h:
14906 Remove JSC related assertions.
14909 Add compiler check for __has_trivial_destructor.
14911 2012-02-13 Chao-ying Fu <fu@mips.com>
14913 Update MIPS patchOffsetGetByIdSlowCaseCall
14914 https://bugs.webkit.org/show_bug.cgi?id=78392
14916 Reviewed by Gavin Barraclough.
14921 2012-02-13 Patrick Gansterer <paroga@webkit.org>
14923 Remove obsolete #if from ThreadSpecific.h
14924 https://bugs.webkit.org/show_bug.cgi?id=78485
14926 Reviewed by Adam Roben.
14928 Since alle platform use either pthread or Win32 for threading,
14929 we can remove all PLATFORM() preprocessor statements.
14931 * wtf/ThreadSpecific.h:
14934 2012-02-13 Jessie Berlin <jberlin@apple.com>
14936 Fix the Windows build.
14938 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
14940 2012-02-13 Sam Weinig <sam@webkit.org>
14942 Use C11's _Static_assert for COMPILE_ASSERT if it is available
14943 https://bugs.webkit.org/show_bug.cgi?id=78506
14945 Rubber-stamped by Antti Koivisto.
14947 Use C11's _Static_assert for COMPILE_ASSERT if it is available to give slightly
14948 better error messages.
14950 * wtf/Assertions.h:
14951 Use _Static_assert if it is available.
14954 Add COMPILER_SUPPORTS support for _Static_assert when using the LLVM Compiler.
14956 2012-02-13 Mario Sanchez Prada <msanchez@igalia.com>
14958 [GTK] Add GSList to the list of GObject types in GOwnPtr
14959 https://bugs.webkit.org/show_bug.cgi?id=78487
14961 Reviewed by Philippe Normand.
14963 Handle the GSList type in GOwnPtr, by calling g_slist_free in the
14964 implementation of the freeOwnedGPtr template function.
14966 * wtf/gobject/GOwnPtr.cpp:
14969 * wtf/gobject/GOwnPtr.h:
14971 * wtf/gobject/GTypedefs.h:
14973 2012-02-06 Raphael Kubo da Costa <kubo@profusion.mobi>
14975 [EFL] Drop support for the Curl network backend.
14976 https://bugs.webkit.org/show_bug.cgi?id=77874
14978 Reviewed by Eric Seidel.
14980 Nobody seems to be maintaining the Curl backend in WebCore, the
14981 EFL port developers all seem to be using the Soup backend and the
14982 port itself has many features which are only implemented for the
14985 * wtf/PlatformEfl.cmake: Always build the gobject-dependent source
14988 2012-02-13 Patrick Gansterer <paroga@webkit.org>
14990 Unreviewed. Build fix for !ENABLE(JIT) after r107485.
14992 * bytecode/PolymorphicPutByIdList.cpp:
14994 2012-02-13 Gavin Barraclough <barraclough@apple.com>
14996 https://bugs.webkit.org/show_bug.cgi?id=78434
14997 Unreviewed - temporarily reverting r107498 will I fix a couple of testcases.
14999 * parser/Parser.cpp:
15000 (JSC::::parseFunctionInfo):
15001 * runtime/ClassInfo.h:
15004 * runtime/JSCell.cpp:
15006 * runtime/JSCell.h:
15008 * runtime/JSGlobalObject.cpp:
15009 (JSC::JSGlobalObject::reset):
15010 * runtime/JSGlobalObjectFunctions.cpp:
15012 * runtime/JSGlobalObjectFunctions.h:
15014 * runtime/JSObject.cpp:
15015 (JSC::JSObject::put):
15017 (JSC::JSObject::putDirectAccessor):
15018 (JSC::JSObject::defineOwnProperty):
15019 * runtime/JSObject.h:
15020 (JSC::JSObject::inlineGetOwnPropertySlot):
15021 (JSC::JSValue::get):
15022 * runtime/JSString.cpp:
15023 (JSC::JSString::getOwnPropertySlot):
15024 * runtime/JSValue.h:
15026 * runtime/ObjectConstructor.cpp:
15027 (JSC::objectConstructorGetPrototypeOf):
15028 * runtime/Structure.cpp:
15029 (JSC::Structure::Structure):
15030 * runtime/Structure.h:
15031 (JSC::Structure::setHasGetterSetterProperties):
15034 2012-02-12 Ashod Nakashian <ashodnakashian@yahoo.com>
15036 KeywordLookupGenerator.py script fails in some cases
15037 https://bugs.webkit.org/show_bug.cgi?id=77886
15039 Reviewed by Benjamin Poulain.
15041 * parser/Keywords.table: Converted to LF-only.
15043 2012-02-12 Shinya Kawanaka <shinyak@google.com>
15045 Introduce ShadowRootList.
15046 https://bugs.webkit.org/show_bug.cgi?id=78069
15048 Reviewed by Hajime Morita.
15050 DoublyLinkedList should have tail() method to take the last element.
15052 * wtf/DoublyLinkedList.h:
15053 (DoublyLinkedList):
15057 2012-02-12 Raphael Kubo da Costa <kubo@profusion.mobi>
15059 [CMake] Move source files in WTF_HEADERS to WTF_SOURCES.
15060 https://bugs.webkit.org/show_bug.cgi?id=78436
15062 Reviewed by Daniel Bates.
15064 * wtf/CMakeLists.txt: Move .cpp files from WTF_HEADERS to WTF_SOURCES,
15065 and correctly sort the files which start with 'M'.
15067 2012-02-12 Sam Weinig <sam@webkit.org>
15069 Move the NumberOfCores.h/cpp files into the WTF group of JavaScriptCore.xcodeproj.
15071 Rubber-stamped by Anders Carlsson.
15073 * JavaScriptCore.xcodeproj/project.pbxproj:
15075 2012-02-12 Raphael Kubo da Costa <kubo@profusion.mobi>
15077 [CMake] Remove unused or empty variable definitions.
15078 https://bugs.webkit.org/show_bug.cgi?id=78437
15080 Reviewed by Daniel Bates.
15082 * CMakeLists.txt: Remove unused JavaScriptCore_HEADERS definition.
15083 * shell/CMakeLists.txt: Remove unused JSC_HEADERS definition.
15084 * wtf/CMakeLists.txt: Remove empty WTF_LIBRARIES definition, it will
15085 be defined later by Platform*.cmake via LIST(APPEND WTF_LIBRARIES).
15087 2012-02-12 Filip Pizlo <fpizlo@apple.com>
15089 DFG::SpeculativeJIT calls fprintf() instead of dataLog in terminateSpeculativeExecution()
15090 https://bugs.webkit.org/show_bug.cgi?id=78431
15092 Reviewed by Gavin Barraclough.
15094 * dfg/DFGSpeculativeJIT.h:
15095 (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
15097 2012-02-11 Benjamin Poulain <benjamin@webkit.org>
15099 Add back WTFURL to WebKit
15100 https://bugs.webkit.org/show_bug.cgi?id=77291
15102 Reviewed by Adam Barth.
15104 WTFURL was removed from WebKit in r86787.
15106 This patch adds the code back to WTF with the following changes:
15107 -Guard the feature with USE(WTFURL).
15108 -Change the typename CHAR to CharacterType to follow recent WebKit conventions.
15109 -Fix some coding style to make check-webkit-style happy.
15111 * JavaScriptCore.xcodeproj/project.pbxproj:
15113 * wtf/url/api/ParsedURL.cpp: Added.
15115 (WTF::ParsedURL::ParsedURL):
15116 (WTF::ParsedURL::scheme):
15117 (WTF::ParsedURL::username):
15118 (WTF::ParsedURL::password):
15119 (WTF::ParsedURL::host):
15120 (WTF::ParsedURL::port):
15121 (WTF::ParsedURL::path):
15122 (WTF::ParsedURL::query):
15123 (WTF::ParsedURL::fragment):
15124 (WTF::ParsedURL::segment):
15125 * wtf/url/api/ParsedURL.h: Added.
15128 (WTF::ParsedURL::spec):
15129 * wtf/url/api/URLString.h: Added.
15132 (WTF::URLString::URLString):
15133 (WTF::URLString::string):
15134 * wtf/url/src/RawURLBuffer.h: Added.
15137 (WTF::RawURLBuffer::RawURLBuffer):
15138 (WTF::RawURLBuffer::~RawURLBuffer):
15139 (WTF::RawURLBuffer::resize):
15140 * wtf/url/src/URLBuffer.h: Added.
15143 (WTF::URLBuffer::URLBuffer):
15144 (WTF::URLBuffer::~URLBuffer):
15145 (WTF::URLBuffer::at):
15146 (WTF::URLBuffer::set):
15147 (WTF::URLBuffer::capacity):
15148 (WTF::URLBuffer::length):
15149 (WTF::URLBuffer::data):
15150 (WTF::URLBuffer::setLength):
15151 (WTF::URLBuffer::append):
15152 (WTF::URLBuffer::grow):
15153 * wtf/url/src/URLCharacterTypes.cpp: Added.
15156 * wtf/url/src/URLCharacterTypes.h: Added.
15158 (URLCharacterTypes):
15159 (WTF::URLCharacterTypes::isQueryChar):
15160 (WTF::URLCharacterTypes::isIPv4Char):
15161 (WTF::URLCharacterTypes::isHexChar):
15163 (WTF::URLCharacterTypes::isCharOfType):
15164 * wtf/url/src/URLComponent.h: Added.
15167 (WTF::URLComponent::URLComponent):
15168 (WTF::URLComponent::fromRange):
15169 (WTF::URLComponent::isValid):
15170 (WTF::URLComponent::isNonEmpty):
15171 (WTF::URLComponent::isEmptyOrInvalid):
15172 (WTF::URLComponent::reset):
15173 (WTF::URLComponent::operator==):
15174 (WTF::URLComponent::begin):
15175 (WTF::URLComponent::setBegin):
15176 (WTF::URLComponent::length):
15177 (WTF::URLComponent::setLength):
15178 (WTF::URLComponent::end):
15179 * wtf/url/src/URLEscape.cpp: Added.
15182 * wtf/url/src/URLEscape.h: Added.
15184 (WTF::appendURLEscapedCharacter):
15185 * wtf/url/src/URLParser.h: Added.
15189 (WTF::URLParser::isPossibleAuthorityTerminator):
15190 (WTF::URLParser::parseAuthority):
15191 (WTF::URLParser::extractScheme):
15192 (WTF::URLParser::parseAfterScheme):
15193 (WTF::URLParser::parseStandardURL):
15194 (WTF::URLParser::parsePath):
15195 (WTF::URLParser::parsePathURL):
15196 (WTF::URLParser::parseMailtoURL):
15197 (WTF::URLParser::parsePort):
15198 (WTF::URLParser::extractFileName):
15199 (WTF::URLParser::extractQueryKeyValue):
15200 (WTF::URLParser::isURLSlash):
15201 (WTF::URLParser::shouldTrimFromURL):
15202 (WTF::URLParser::trimURL):
15203 (WTF::URLParser::consecutiveSlashes):
15204 (WTF::URLParser::isPortDigit):
15205 (WTF::URLParser::nextAuthorityTerminator):
15206 (WTF::URLParser::parseUserInfo):
15207 (WTF::URLParser::parseServerInfo):
15208 * wtf/url/src/URLQueryCanonicalizer.h: Added.
15210 (URLQueryCanonicalizer):
15211 (WTF::URLQueryCanonicalizer::canonicalize):
15212 (WTF::URLQueryCanonicalizer::isAllASCII):
15213 (WTF::URLQueryCanonicalizer::isRaw8Bit):
15214 (WTF::URLQueryCanonicalizer::appendRaw8BitQueryString):
15215 (WTF::URLQueryCanonicalizer::convertToQueryEncoding):
15216 * wtf/url/src/URLSegments.cpp: Added.
15218 (WTF::URLSegments::length):
15219 (WTF::URLSegments::charactersBefore):
15220 * wtf/url/src/URLSegments.h: Added.
15224 (WTF::URLSegments::URLSegments):
15226 2012-02-11 Filip Pizlo <fpizlo@apple.com>
15228 Old JIT put_by_id profiling counts every put_by_id_transition as taking slow path
15229 https://bugs.webkit.org/show_bug.cgi?id=78430
15230 <rdar://problem/10849469> <rdar://problem/10849684>
15232 Reviewed by Gavin Barraclough.
15234 The old JIT's put_by_id transition caching involves repatching the slow call to
15235 a generated stub. That means that the call is counted as "slow case". So, this
15236 patch inserts code to decrement the slow case count if the stub succeeds.
15238 Looks like a ~1% speed-up on V8.
15240 * jit/JITPropertyAccess.cpp:
15241 (JSC::JIT::privateCompilePutByIdTransition):
15242 * jit/JITPropertyAccess32_64.cpp:
15243 (JSC::JIT::privateCompilePutByIdTransition):
15245 2012-02-11 Filip Pizlo <fpizlo@apple.com>
15251 2012-02-11 Filip Pizlo <fpizlo@apple.com>
15253 It should be possible to send all JSC debug logging to a file
15254 https://bugs.webkit.org/show_bug.cgi?id=78418
15256 Reviewed by Sam Weinig.
15258 Introduced wtf/DataLog, which defines WTF::dataFile, WTF::dataLog,
15259 and WTF::dataLogV. Changed all debugging- and profiling-related printfs
15260 to use WTF::dataLog() or one of its friends. By default, debug logging
15261 goes to stderr, unless you change the setting in wtf/DataLog.cpp.
15263 * GNUmakefile.list.am:
15264 * JavaScriptCore.gypi:
15265 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
15266 * JavaScriptCore.xcodeproj/project.pbxproj:
15267 * assembler/LinkBuffer.h:
15268 (JSC::LinkBuffer::dumpLinkStatistics):
15269 (JSC::LinkBuffer::dumpCode):
15270 * assembler/SH4Assembler.h:
15271 (JSC::SH4Assembler::vprintfStdoutInstr):
15272 * bytecode/CodeBlock.cpp:
15273 (JSC::CodeBlock::printUnaryOp):
15274 (JSC::CodeBlock::printBinaryOp):
15275 (JSC::CodeBlock::printConditionalJump):
15276 (JSC::CodeBlock::printGetByIdOp):
15277 (JSC::CodeBlock::printCallOp):
15278 (JSC::CodeBlock::printPutByIdOp):
15279 (JSC::printGlobalResolveInfo):
15280 (JSC::printStructureStubInfo):
15281 (JSC::CodeBlock::printStructure):
15282 (JSC::CodeBlock::printStructures):
15283 (JSC::CodeBlock::dump):
15284 (JSC::CodeBlock::dumpStatistics):
15285 (JSC::CodeBlock::finalizeUnconditionally):
15286 (JSC::CodeBlock::shouldOptimizeNow):
15287 (JSC::CodeBlock::tallyFrequentExitSites):
15288 (JSC::CodeBlock::dumpValueProfiles):
15289 * bytecode/Opcode.cpp:
15290 (JSC::OpcodeStats::~OpcodeStats):
15291 * bytecode/SamplingTool.cpp:
15292 (JSC::SamplingFlags::stop):
15293 (JSC::SamplingRegion::dumpInternal):
15294 (JSC::SamplingTool::dump):
15295 * dfg/DFGAbstractState.cpp:
15296 (JSC::DFG::AbstractState::endBasicBlock):
15297 (JSC::DFG::AbstractState::mergeStateAtTail):
15298 * dfg/DFGByteCodeParser.cpp:
15299 (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
15300 (JSC::DFG::ByteCodeParser::makeSafe):
15301 (JSC::DFG::ByteCodeParser::makeDivSafe):
15302 (JSC::DFG::ByteCodeParser::handleCall):
15303 (JSC::DFG::ByteCodeParser::handleInlining):
15304 (JSC::DFG::ByteCodeParser::parseBlock):
15305 (JSC::DFG::ByteCodeParser::processPhiStack):
15306 (JSC::DFG::ByteCodeParser::linkBlock):
15307 (JSC::DFG::ByteCodeParser::parseCodeBlock):
15308 (JSC::DFG::ByteCodeParser::parse):
15310 * dfg/DFGDriver.cpp:
15311 (JSC::DFG::compile):
15312 * dfg/DFGGraph.cpp:
15313 (JSC::DFG::printWhiteSpace):
15314 (JSC::DFG::Graph::dumpCodeOrigin):
15315 (JSC::DFG::Graph::dump):
15316 (JSC::DFG::Graph::predictArgumentTypes):
15317 * dfg/DFGJITCompiler.cpp:
15318 (JSC::DFG::JITCompiler::link):
15319 * dfg/DFGOSREntry.cpp:
15320 (JSC::DFG::prepareOSREntry):
15321 * dfg/DFGOSRExitCompiler.cpp:
15322 * dfg/DFGOSRExitCompiler32_64.cpp:
15323 (JSC::DFG::OSRExitCompiler::compileExit):
15324 * dfg/DFGOSRExitCompiler64.cpp:
15325 (JSC::DFG::OSRExitCompiler::compileExit):
15326 * dfg/DFGOperations.cpp:
15327 * dfg/DFGPropagator.cpp:
15328 (JSC::DFG::Propagator::fixpoint):
15329 (JSC::DFG::Propagator::propagateArithNodeFlags):
15330 (JSC::DFG::Propagator::propagateArithNodeFlagsForward):
15331 (JSC::DFG::Propagator::propagateArithNodeFlagsBackward):
15332 (JSC::DFG::Propagator::propagateNodePredictions):
15333 (JSC::DFG::Propagator::propagatePredictionsForward):
15334 (JSC::DFG::Propagator::propagatePredictionsBackward):
15335 (JSC::DFG::Propagator::doRoundOfDoubleVoting):
15336 (JSC::DFG::Propagator::fixupNode):
15337 (JSC::DFG::Propagator::fixup):
15338 (JSC::DFG::Propagator::startIndexForChildren):
15339 (JSC::DFG::Propagator::endIndexForPureCSE):
15340 (JSC::DFG::Propagator::setReplacement):
15341 (JSC::DFG::Propagator::eliminate):
15342 (JSC::DFG::Propagator::performNodeCSE):
15343 (JSC::DFG::Propagator::localCSE):
15344 (JSC::DFG::Propagator::allocateVirtualRegisters):
15345 (JSC::DFG::Propagator::performBlockCFA):
15346 (JSC::DFG::Propagator::performForwardCFA):
15347 * dfg/DFGRegisterBank.h:
15348 (JSC::DFG::RegisterBank::dump):
15349 * dfg/DFGScoreBoard.h:
15350 (JSC::DFG::ScoreBoard::dump):
15351 * dfg/DFGSpeculativeJIT.cpp:
15352 (JSC::DFG::SpeculativeJIT::dump):
15353 (JSC::DFG::SpeculativeJIT::checkConsistency):
15354 (JSC::DFG::SpeculativeJIT::compile):
15355 * dfg/DFGSpeculativeJIT32_64.cpp:
15356 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
15357 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
15358 (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
15359 (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
15360 * dfg/DFGSpeculativeJIT64.cpp:
15361 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
15362 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
15363 (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
15364 (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
15366 (JSC::Heap::destroy):
15367 * heap/MarkedBlock.h:
15368 * interpreter/CallFrame.cpp:
15369 (JSC::CallFrame::dumpCaller):
15370 * interpreter/Interpreter.cpp:
15371 (JSC::Interpreter::dumpRegisters):
15373 (JSC::JIT::privateCompileMainPass):
15374 (JSC::JIT::privateCompileSlowCases):
15375 (JSC::JIT::privateCompile):
15376 * jit/JITStubs.cpp:
15377 (JSC::DEFINE_STUB_FUNCTION):
15378 * profiler/Profile.cpp:
15379 (JSC::Profile::debugPrintData):
15380 (JSC::Profile::debugPrintDataSampleStyle):
15381 * profiler/ProfileNode.cpp:
15382 (JSC::ProfileNode::debugPrintData):
15383 (JSC::ProfileNode::debugPrintDataSampleStyle):
15384 * runtime/JSGlobalData.cpp:
15385 (JSC::JSGlobalData::dumpRegExpTrace):
15386 * runtime/RegExp.cpp:
15387 (JSC::RegExp::matchCompareWithInterpreter):
15388 * runtime/SamplingCounter.cpp:
15389 (JSC::AbstractSamplingCounter::dump):
15390 * runtime/SamplingCounter.h:
15391 (JSC::DeletableSamplingCounter::~DeletableSamplingCounter):
15392 * runtime/ScopeChain.cpp:
15393 (JSC::ScopeChainNode::print):
15394 * runtime/Structure.cpp:
15395 (JSC::Structure::dumpStatistics):
15396 (JSC::PropertyMapStatisticsExitLogger::~PropertyMapStatisticsExitLogger):
15397 * tools/CodeProfile.cpp:
15398 (JSC::CodeProfile::report):
15399 * tools/ProfileTreeNode.h:
15400 (JSC::ProfileTreeNode::dumpInternal):
15401 * wtf/CMakeLists.txt:
15402 * wtf/DataLog.cpp: Added.
15404 (WTF::initializeLogFileOnce):
15405 (WTF::initializeLogFile):
15409 * wtf/DataLog.h: Added.
15411 * wtf/HashTable.cpp:
15412 (WTF::HashTableStats::~HashTableStats):
15413 * wtf/MetaAllocator.cpp:
15414 (WTF::MetaAllocator::dumpProfile):
15415 * wtf/text/WTFString.cpp:
15417 * yarr/YarrInterpreter.cpp:
15418 (JSC::Yarr::ByteCompiler::dumpDisjunction):
15420 2012-02-11 Gavin Barraclough <barraclough@apple.com>
15422 Move special __proto__ property to Object.prototype
15423 https://bugs.webkit.org/show_bug.cgi?id=78409
15425 Reviewed by Oliver Hunt.
15427 Re-implement this as a regular accessor property. This has three key benefits:
15428 1) It makes it possible for objects to be given properties named __proto__.
15429 2) Object.prototype.__proto__ can be deleted, preventing object prototypes from being changed.
15430 3) This largely removes the magic used the implement __proto__, it can just be made a regular accessor property.
15432 * parser/Parser.cpp:
15433 (JSC::::parseFunctionInfo):
15434 - No need to prohibit functions named __proto__.
15435 * runtime/JSGlobalObject.cpp:
15436 (JSC::JSGlobalObject::reset):
15437 - Add __proto__ accessor to Object.prototype.
15438 * runtime/JSGlobalObjectFunctions.cpp:
15439 (JSC::globalFuncProtoGetter):
15440 (JSC::globalFuncProtoSetter):
15441 - Definition of the __proto__ accessor functions.
15442 * runtime/JSGlobalObjectFunctions.h:
15443 - Declaration of the __proto__ accessor functions.
15444 * runtime/JSObject.cpp:
15445 (JSC::JSObject::put):
15446 - Remove the special handling for __proto__, there is still a check to allow for a fast guard for accessors excluding __proto__.
15447 (JSC::JSObject::putDirectAccessor):
15448 - Track on the structure whether an object contains accessors other than one for __proto__.
15449 (JSC::JSObject::defineOwnProperty):
15450 - No need to prohibit definition of own properties named __proto__.
15451 * runtime/JSObject.h:
15452 (JSC::JSObject::inlineGetOwnPropertySlot):
15453 - Remove the special handling for __proto__.
15454 (JSC::JSValue::get):
15455 - Remove the special handling for __proto__.
15456 * runtime/JSString.cpp:
15457 (JSC::JSString::getOwnPropertySlot):
15458 - Remove the special handling for __proto__.
15459 * runtime/JSValue.h:
15461 - Made synthesizePrototype public (this may be needed by the __proto__ getter).
15462 * runtime/ObjectConstructor.cpp:
15463 (JSC::objectConstructorGetPrototypeOf):
15464 - Perform the security check & call prototype() directly.
15465 * runtime/Structure.cpp:
15466 (JSC::Structure::Structure):
15467 - Added 'ExcludingProto' variant of the 'hasGetterSetterProperties' state.
15468 * runtime/Structure.h:
15469 (JSC::Structure::hasGetterSetterPropertiesExcludingProto):
15470 (JSC::Structure::setHasGetterSetterProperties):
15472 - Added 'ExcludingProto' variant of the 'hasGetterSetterProperties' state.
15474 2012-02-11 Filip Pizlo <fpizlo@apple.com>
15476 DFG CFA assumes that a WeakJSConstant's structure is known
15477 https://bugs.webkit.org/show_bug.cgi?id=78428
15478 <rdar://problem/10849492> <rdar://problem/10849621>
15480 Reviewed by Gavin Barraclough.
15482 * dfg/DFGAbstractState.cpp:
15483 (JSC::DFG::AbstractState::execute):
15485 2012-02-11 Mark Hahnenberg <mhahnenberg@apple.com>
15489 * heap/MarkedBlock.cpp:
15490 (JSC::MarkedBlock::callDestructor): Platforms that don't use clang will allocate
15491 JSFinalObjects in the destuctor subspace, so we should remove this assert so it
15492 doesn't cause crashes.
15494 2012-02-11 Filip Pizlo <fpizlo@apple.com>
15496 Old 32_64 JIT should assert that its use of map() is consistent with the DFG
15497 OSR exit's expectations
15498 https://bugs.webkit.org/show_bug.cgi?id=78419
15499 <rdar://problem/10817121>
15501 Reviewed by Oliver Hunt.
15503 * jit/JITInlineMethods.h:
15506 2012-02-11 Mark Hahnenberg <mhahnenberg@apple.com>
15508 Reduce the reentrancy limit of the interpreter for the iOS simulator
15509 https://bugs.webkit.org/show_bug.cgi?id=78400
15511 Reviewed by Gavin Barraclough.
15513 * interpreter/Interpreter.h: Lowered the maximum reentrancy limit for large thread stacks.
15516 2012-02-11 Filip Pizlo <fpizlo@apple.com>
15518 [DFG] Misuse of WeakJSConstants in silentFillGPR code.
15519 https://bugs.webkit.org/show_bug.cgi?id=78423
15520 <rdar://problem/10849353> <rdar://problem/10804043>
15522 Reviewed by Sam Weinig.
15524 The code was using Node::isConstant(), when it was supposed to use Node::hasConstant().
15525 This patch is a surgical fix; the bigger problem is: why do we have isConstant() and
15526 hasConstant() when hasConstant() is correct and isConstant() is almost always wrong?
15528 * dfg/DFGSpeculativeJIT.h:
15529 (JSC::DFG::SpeculativeJIT::silentFillGPR):
15531 2012-02-11 Sam Weinig <sam@webkit.org>
15533 Prepare JavaScriptCore to build with libc++
15534 <rdar://problem/10426673>
15535 https://bugs.webkit.org/show_bug.cgi?id=78424
15537 Reviewed by Anders Carlsson.
15541 libc++ provides std::nullptr emulation, so we don't have to.
15543 2012-02-07 Filip Pizlo <fpizlo@apple.com>
15545 DFG should have polymorphic put_by_id caching
15546 https://bugs.webkit.org/show_bug.cgi?id=78062
15547 <rdar://problem/10326439> <rdar://problem/10824839>
15549 Reviewed by Oliver Hunt.
15551 Implemented polymorphic put_by_id caching in the DFG, and added much of the
15552 machinery that would be needed to implement it in the old JIT as well.
15554 I decided against using the old PolymorphicAccessStructureList mechanism as
15555 this didn't quite fit with put_by_id. In particular, I wanted the ability to
15556 have one list that captured all relevant cases (including proto put_by_id
15557 if we ever decided to do it). And I wanted the code to have better
15558 encapsulation. And I didn't want to get confused by the fact that the
15559 original (non-list) put_by_id cache may itself consist of a stub routine.
15561 This code is still sub-optimal (for example adding a replace to a list whose
15562 previous elements are all transitions should just repatch the original code,
15563 but here it will generate a stub) but it already generates a >20% speed-up
15564 on V8-splay, leading to a 2% win overall in splay. Neutral elsewhere.
15567 * GNUmakefile.list.am:
15568 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
15569 * JavaScriptCore.xcodeproj/project.pbxproj:
15571 * bytecode/PolymorphicPutByIdList.cpp: Added.
15573 (JSC::PutByIdAccess::fromStructureStubInfo):
15574 (JSC::PutByIdAccess::visitWeak):
15575 (JSC::PolymorphicPutByIdList::PolymorphicPutByIdList):
15576 (JSC::PolymorphicPutByIdList::from):
15577 (JSC::PolymorphicPutByIdList::~PolymorphicPutByIdList):
15578 (JSC::PolymorphicPutByIdList::isFull):
15579 (JSC::PolymorphicPutByIdList::isAlmostFull):
15580 (JSC::PolymorphicPutByIdList::addAccess):
15581 (JSC::PolymorphicPutByIdList::visitWeak):
15582 * bytecode/PolymorphicPutByIdList.h: Added.
15585 (JSC::PutByIdAccess::PutByIdAccess):
15586 (JSC::PutByIdAccess::transition):
15587 (JSC::PutByIdAccess::replace):
15588 (JSC::PutByIdAccess::isSet):
15589 (JSC::PutByIdAccess::operator!):
15590 (JSC::PutByIdAccess::type):
15591 (JSC::PutByIdAccess::isTransition):
15592 (JSC::PutByIdAccess::isReplace):
15593 (JSC::PutByIdAccess::oldStructure):
15594 (JSC::PutByIdAccess::structure):
15595 (JSC::PutByIdAccess::newStructure):
15596 (JSC::PutByIdAccess::chain):
15597 (JSC::PutByIdAccess::stubRoutine):
15598 (PolymorphicPutByIdList):
15599 (JSC::PolymorphicPutByIdList::currentSlowPathTarget):
15600 (JSC::PolymorphicPutByIdList::isEmpty):
15601 (JSC::PolymorphicPutByIdList::size):
15602 (JSC::PolymorphicPutByIdList::at):
15603 (JSC::PolymorphicPutByIdList::operator[]):
15604 (JSC::PolymorphicPutByIdList::kind):
15605 * bytecode/PutKind.h: Added.
15607 * bytecode/StructureStubInfo.cpp:
15608 (JSC::StructureStubInfo::deref):
15609 (JSC::StructureStubInfo::visitWeakReferences):
15610 * bytecode/StructureStubInfo.h:
15612 (JSC::isPutByIdAccess):
15613 (JSC::StructureStubInfo::initPutByIdList):
15614 (StructureStubInfo):
15615 (JSC::StructureStubInfo::reset):
15616 * dfg/DFGOperations.cpp:
15617 * dfg/DFGOperations.h:
15619 * dfg/DFGRepatch.cpp:
15620 (JSC::DFG::appropriateGenericPutByIdFunction):
15621 (JSC::DFG::appropriateListBuildingPutByIdFunction):
15623 (JSC::DFG::emitPutReplaceStub):
15624 (JSC::DFG::emitPutTransitionStub):
15625 (JSC::DFG::tryCachePutByID):
15626 (JSC::DFG::dfgRepatchPutByID):
15627 (JSC::DFG::tryBuildPutByIdList):
15628 (JSC::DFG::dfgBuildPutByIdList):
15629 (JSC::DFG::dfgResetPutByID):
15630 * dfg/DFGRepatch.h:
15632 * runtime/WriteBarrier.h:
15633 (WriteBarrierBase):
15634 (JSC::WriteBarrierBase::copyFrom):
15636 2012-02-10 Vineet Chaudhary <rgf748@motorola.com>
15638 https://bugs.webkit.org/show_bug.cgi?id=72756
15639 DOMHTMLElement’s accessKey property is declared as available in WebKit version that didn’t have it
15641 Reviewed by Timothy Hatcher.
15643 * API/WebKitAvailability.h: Added AVAILABLE_AFTER_WEBKIT_VERSION_5_1 and
15644 AVAILABLE_WEBKIT_VERSION_1_3_AND_LATER_BUT_DEPRECATED_AFTER_WEBKIT_VERSION_5_1 for the new versions.
15646 2012-02-10 Mark Hahnenberg <mhahnenberg@apple.com>
15648 Fixing windows build
15650 Unreviewed build fix
15652 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
15654 2012-02-10 Adam Klein <adamk@chromium.org>
15656 Enable MUTATION_OBSERVERS by default on all platforms
15657 https://bugs.webkit.org/show_bug.cgi?id=78196
15659 Reviewed by Ojan Vafai.
15661 * Configurations/FeatureDefines.xcconfig:
15663 2012-02-10 Yong Li <yoli@rim.com>
15665 ENABLE(ASSEMBLER_WX_EXCLUSIVE): LinkBuffer can leave pages not marked as executable.
15666 https://bugs.webkit.org/show_bug.cgi?id=76724
15668 Reviewed by Rob Buis.
15670 This issue only exists when both ENABLE(ASSEMBLER_WX_EXCLUSIVE) and ENABLE(BRANCH_COMPACTION) are on.
15671 The size used to call makeExecutable can be smaller than the one that was used for makeWritable.
15672 So it can leave pages behind that are not set back to default flags. When an assembly on one of those
15673 pages is executed or JIT returns to those pages in the case it was already executing from there, the
15674 software will crash.
15676 * assembler/LinkBuffer.h: Add m_initialSize and use it in performFinalization().
15677 (JSC::LinkBuffer::LinkBuffer):
15678 (JSC::LinkBuffer::linkCode):
15679 (JSC::LinkBuffer::performFinalization):
15682 2012-02-10 Mark Hahnenberg <mhahnenberg@apple.com>
15684 Split MarkedSpace into destructor and destructor-free subspaces
15685 https://bugs.webkit.org/show_bug.cgi?id=77761
15687 Reviewed by Geoffrey Garen.
15689 * dfg/DFGSpeculativeJIT.h:
15690 (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject): Switched over to use destructor-free space.
15692 (JSC::Heap::allocatorForObjectWithoutDestructor): Added to give clients (e.g. the JIT) the ability to
15693 pick which subspace they want to allocate out of.
15694 (JSC::Heap::allocatorForObjectWithDestructor): Ditto.
15696 (JSC::Heap::allocateWithDestructor): Added private function for CellAllocator to use.
15698 (JSC::Heap::allocateWithoutDestructor): Ditto.
15699 * heap/MarkedAllocator.cpp: Added the cellsNeedDestruction flag to allocators so that they can allocate
15700 their MarkedBlocks correctly.
15701 (JSC::MarkedAllocator::allocateBlock):
15702 * heap/MarkedAllocator.h:
15703 (JSC::MarkedAllocator::cellsNeedDestruction):
15705 (JSC::MarkedAllocator::MarkedAllocator):
15707 (JSC::MarkedAllocator::init): Replaced custom set functions, which were only used upon initialization, with
15708 an init function that does all of that stuff in fewer lines.
15709 * heap/MarkedBlock.cpp:
15710 (JSC::MarkedBlock::create):
15711 (JSC::MarkedBlock::recycle):
15712 (JSC::MarkedBlock::MarkedBlock):
15713 (JSC::MarkedBlock::callDestructor): Templatized, along with specializedSweep and sweepHelper, to make
15714 checking the m_cellsNeedDestructor flag faster and cleaner looking.
15716 (JSC::MarkedBlock::specializedSweep):
15717 (JSC::MarkedBlock::sweep):
15718 (JSC::MarkedBlock::sweepHelper):
15719 * heap/MarkedBlock.h:
15721 (JSC::MarkedBlock::cellsNeedDestruction):
15723 * heap/MarkedSpace.cpp:
15724 (JSC::MarkedSpace::MarkedSpace):
15725 (JSC::MarkedSpace::resetAllocators):
15726 (JSC::MarkedSpace::canonicalizeCellLivenessData):
15727 (JSC::TakeIfUnmarked::operator()):
15728 * heap/MarkedSpace.h:
15731 (JSC::MarkedSpace::allocatorFor): Needed function to differentiate between the two broad subspaces of
15734 (JSC::MarkedSpace::destructorAllocatorFor): Ditto.
15735 (JSC::MarkedSpace::allocateWithoutDestructor): Ditto.
15736 (JSC::MarkedSpace::allocateWithDestructor): Ditto.
15737 (JSC::MarkedSpace::forEachBlock):
15739 * jit/JITInlineMethods.h: Modified to use the proper allocator for JSFinalObjects and others.
15740 (JSC::JIT::emitAllocateBasicJSObject):
15741 (JSC::JIT::emitAllocateJSFinalObject):
15742 (JSC::JIT::emitAllocateJSFunction):
15743 * runtime/JSArray.cpp:
15745 * runtime/JSArray.h:
15747 (JSC::JSArray::create):
15749 (JSC::JSArray::tryCreateUninitialized):
15750 * runtime/JSCell.h:
15753 (NeedsDestructor): Template struct that calculates at compile time whether the class in question requires
15754 destruction or not using the compiler type trait __has_trivial_destructor. allocateCell then checks this
15755 constant to decide whether to allocate in the destructor or destructor-free parts of the heap.
15756 (JSC::allocateCell):
15757 * runtime/JSFunction.cpp:
15759 * runtime/JSFunction.h:
15761 * runtime/JSObject.cpp:
15763 * runtime/JSObject.h:
15764 (JSNonFinalObject):
15767 (JSC::JSFinalObject::create):
15769 2012-02-10 Adrienne Walker <enne@google.com>
15771 Remove implicit copy constructor usage in HashMaps with OwnPtr
15772 https://bugs.webkit.org/show_bug.cgi?id=78071
15774 Reviewed by Darin Adler.
15776 Change the return type of emptyValue() in PairHashTraits to be the
15777 actual type returned rather than the trait type to avoid an implicit
15778 generation of the OwnPtr copy constructor. This happens for hash
15779 traits involving OwnPtr where the empty value is not zero and each
15780 hash bucket needs to be initialized with emptyValue().
15782 Also, update StructureTransitionTable to use default hash traits
15783 rather than rolling its own, in order to update it to handle
15786 Test: patch from bug 74154 compiles on Clang with this patch
15788 * runtime/StructureTransitionTable.h:
15789 (StructureTransitionTable):
15790 * wtf/HashTraits.h:
15791 (GenericHashTraits):
15793 (WTF::PairHashTraits::emptyValue):
15795 2012-02-10 Aron Rosenberg <arosenberg@logitech.com>
15797 [Qt] Fix compiler warning in Visual Studio 2010 about TR1
15798 https://bugs.webkit.org/show_bug.cgi?id=63642
15800 Reviewed by Simon Hausmann.
15802 * JavaScriptCore.pri:
15804 2012-02-10 Michael Saboff <msaboff@apple.com>
15806 Yarr assert with regexp where alternative in *-quantified group matches empty
15807 https://bugs.webkit.org/show_bug.cgi?id=67752
15809 Reviewed by Gavin Barraclough.
15811 Added backtracking for the prior alternative if it matched
15812 but didn't consume any input characters.
15814 * yarr/YarrJIT.cpp:
15815 (YarrOp): New jump.
15816 (JSC::Yarr::YarrGenerator::generate): Emit conditional jump
15817 when an alternative matches and no input was consumed. Moved the
15818 zero length match check for a set of alternatives to the alternative
15819 code from the parentheses cases to the alternative end cases.
15820 Converted the existing zero length checks in the parentheses cases
15821 to runtime assertion checks.
15822 (JSC::Yarr::YarrGenerator::backtrack): Link new jump to backtrack
15825 2012-02-10 Roland Takacs <takacs.roland@stud.u-szeged.hu>
15827 [Qt] GC should be parallel on Qt platform
15828 https://bugs.webkit.org/show_bug.cgi?id=73309
15830 Reviewed by Zoltan Herczeg.
15832 These changes made the parallel gc feature available for Qt port.
15833 The implementation of "registerGCThread" and "isMainThreadOrGCThread",
15834 and a local static function [initializeGCThreads] is moved from
15835 MainThreadMac.mm to the common MainThread.cpp to make them available
15836 for other platforms.
15838 Measurement results:
15839 V8 speed-up: 1.025x as fast [From: 663.4ms To: 647.0ms ]
15840 V8 Splay speed-up: 1.185x as fast [From: 138.4ms To: 116.8ms ]
15842 Tested on Intel(R) Core(TM) i5-2320 CPU @ 3.00GHz with 4-core.
15844 * JavaScriptCore.order:
15845 * wtf/MainThread.cpp:
15846 (WTF::initializeMainThread):
15848 (WTF::initializeGCThreads):
15849 (WTF::registerGCThread):
15850 (WTF::isMainThreadOrGCThread):
15851 * wtf/MainThread.h:
15854 * wtf/mac/MainThreadMac.mm:
15857 2012-02-09 Andy Wingo <wingo@igalia.com>
15859 Eliminate dead code in BytecodeGenerator::resolve()
15860 https://bugs.webkit.org/show_bug.cgi?id=78242
15862 Reviewed by Gavin Barraclough.
15864 * bytecompiler/BytecodeGenerator.cpp:
15865 (JSC::BytecodeGenerator::resolve):
15866 BytecodeGenerator::shouldOptimizeLocals() is only true for
15867 FunctionCode, and thus cannot be true for GlobalCode.
15869 2012-02-09 Andy Wingo <wingo@igalia.com>
15871 Remove BytecodeGenerator::isLocal
15872 https://bugs.webkit.org/show_bug.cgi?id=78241
15874 Minor refactor to BytecodeGenerator.
15876 Reviewed by Gavin Barraclough.
15878 * bytecompiler/BytecodeGenerator.h:
15879 * bytecompiler/BytecodeGenerator.cpp:
15880 (JSC::BytecodeGenerator::isLocal):
15881 (JSC::BytecodeGenerator::isLocalConstant): Remove now-unused
15883 * bytecompiler/NodesCodegen.cpp:
15884 (JSC::ResolveNode::isPure): Use the ResolveResult mechanism
15885 instead of isLocal. This will recognize more resolve nodes as
15887 (JSC::PrefixResolveNode::emitBytecode): Use isReadOnly on the
15888 location instead of isLocalConstant.
15890 2012-02-09 Oliver Hunt <oliver@apple.com>
15892 The JS Parser scope object needs a VectorTrait specialization
15893 https://bugs.webkit.org/show_bug.cgi?id=78308
15895 Reviewed by Gavin Barraclough.
15897 This showed up as a periodic crash in various bits of generated code
15898 originally, but I've added an assertion in the bytecode generator
15899 that makes the effected code much more crash-happy should it go
15902 * bytecompiler/BytecodeGenerator.cpp:
15903 (JSC::BytecodeGenerator::BytecodeGenerator):
15904 (JSC::BytecodeGenerator::resolve):
15905 * parser/Parser.cpp:
15908 * runtime/JSActivation.h:
15909 (JSC::JSActivation::isValidScopedLookup):
15912 2012-02-08 Oliver Hunt <oliver@apple.com>
15914 Whoops, fix the build.
15916 * runtime/Executable.cpp:
15917 (JSC::FunctionExecutable::FunctionExecutable):
15919 2012-02-08 Oliver Hunt <oliver@apple.com>
15921 Fix issue encountered while debugging stacktraces
15922 https://bugs.webkit.org/show_bug.cgi?id=78147
15924 Reviewed by Gavin Barraclough.
15926 Debugging is easier if we always ensure that we have a non-null
15929 * runtime/Executable.cpp:
15930 (JSC::FunctionExecutable::FunctionExecutable):
15932 2012-02-08 Oliver Hunt <oliver@apple.com>
15934 updateTopCallframe in the baseline JIT doesn't provide enough information to the stubs
15935 https://bugs.webkit.org/show_bug.cgi?id=78145
15937 Reviewed by Gavin Barraclough.
15939 Fix the updateTopCallFrame helper to store additional information
15940 that becomes necessary when we are trying to provide more stack
15943 * interpreter/CallFrame.h:
15944 (JSC::ExecState::bytecodeOffsetForBaselineJIT):
15947 (JSC::JIT::privateCompile):
15949 (JSC::JIT::compileGetByIdProto):
15950 (JSC::JIT::compileGetByIdSelfList):
15951 (JSC::JIT::compileGetByIdProtoList):
15952 (JSC::JIT::compileGetByIdChainList):
15953 (JSC::JIT::compileGetByIdChain):
15954 (JSC::JIT::compilePutByIdTransition):
15956 * jit/JITInlineMethods.h:
15957 (JSC::JIT::updateTopCallFrame):
15959 2012-02-07 Robert Kroeger <rjkroege@chromium.org>
15961 [chromium] Remove the enable marcro for the no longer necessary Chromium
15962 gesture recognizer.
15963 https://bugs.webkit.org/show_bug.cgi?id=77492
15965 Reviewed by Adam Barth.
15969 2012-02-07 Tony Chang <tony@chromium.org>
15971 merge DashboardSupportCSSPropertyNames.in into CSSPropertyNames.in
15972 https://bugs.webkit.org/show_bug.cgi?id=78036
15974 Reviewed by Darin Adler.
15976 * Configurations/FeatureDefines.xcconfig: Add ENABLE_DASHBOARD_SUPPORT to FEATURE_DEFINES.
15978 2012-02-07 Gyuyoung Kim <gyuyoung.kim@samsung.com>
15980 [CMAKE] Use *bin* and *lib* directories for executable and libraries.
15981 https://bugs.webkit.org/show_bug.cgi?id=77928
15983 Reviewed by Daniel Bates.
15985 CMake has used *Programs* directory for executable. In addition, shared libraries are being
15986 built in source directory. It is better to set common places in order to maintain executable
15987 and libraries. *bin* is for executable and *lib* is for library.
15989 * shell/CMakeLists.txt: Change *Programs* with *bin*.
15991 2012-02-07 Gavin Barraclough <barraclough@apple.com>
15993 Crash on http://www.rickshawbags.com/
15994 https://bugs.webkit.org/show_bug.cgi?id=78045
15996 Reviewed by Darin Adler.
15998 Problem URL is: http://www.rickshawbags.com/customize/custom-bag#!thl=rickshaw/bag()
16000 This is a bug introduced by https://bugs.webkit.org/show_bug.cgi?id=71933,
16001 isVariableObject() checks were excluding StaticScopeObjects, this patch
16002 inadvertently changed them to be included.
16004 * runtime/JSType.h:
16005 - sort JSType enum such that StaticScopeObjectType comes before VariableObjectType,
16006 and thus is excluded from isVariableObject() checks.
16008 2012-02-06 Jer Noble <jer.noble@apple.com>
16010 Use CMClock as a timing source for PlatformClock where available.
16011 https://bugs.webkit.org/show_bug.cgi?id=77885
16013 Reviewed by Eric Carlson.
16015 * wtf/Platform.h: Added WTF_USE_COREMEDIA.
16017 2012-02-06 Filip Pizlo <fpizlo@apple.com>
16019 ValueToNumber and ValueToDouble nodes don't do anything and should be removed
16020 https://bugs.webkit.org/show_bug.cgi?id=77855
16021 <rdar://problem/10811325>
16023 Reviewed by Gavin Barraclough.
16025 Removed ValueToNumber and ValueToDouble, because the only thing they were doing
16026 was wasting registers.
16028 This looks like a 1% win on V8 (with a 5% win on crypto) and a 2-3% win on Kraken,
16029 mostly due to a >10% win on gaussian-blur. No win anywhere else.
16031 * dfg/DFGAbstractState.cpp:
16032 (JSC::DFG::AbstractState::execute):
16033 * dfg/DFGByteCodeParser.cpp:
16034 (JSC::DFG::ByteCodeParser::getToInt32):
16036 (JSC::DFG::ByteCodeParser::handleMinMax):
16037 (JSC::DFG::ByteCodeParser::handleIntrinsic):
16038 (JSC::DFG::ByteCodeParser::parseBlock):
16041 (JSC::DFG::Node::hasArithNodeFlags):
16042 * dfg/DFGPropagator.cpp:
16043 (JSC::DFG::Propagator::propagateArithNodeFlags):
16044 (JSC::DFG::Propagator::propagateNodePredictions):
16045 (JSC::DFG::Propagator::vote):
16046 (JSC::DFG::Propagator::doRoundOfDoubleVoting):
16048 (JSC::DFG::Propagator::fixupNode):
16049 (JSC::DFG::Propagator::canonicalize):
16050 * dfg/DFGSpeculativeJIT.cpp:
16051 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
16052 * dfg/DFGSpeculativeJIT32_64.cpp:
16053 (JSC::DFG::SpeculativeJIT::compile):
16054 * dfg/DFGSpeculativeJIT64.cpp:
16055 (JSC::DFG::SpeculativeJIT::compile):
16057 2012-02-06 Patrick Gansterer <paroga@webkit.org>
16059 Unreviewed WinCE build fix after r106197.
16061 * tools/CodeProfiling.cpp:
16062 (JSC::CodeProfiling::notifyAllocator): getenv() isn't supported by WinCE. Don't call it.
16064 2012-02-05 Gavin Barraclough <barraclough@apple.com>
16066 Remove JSObject defineGetter/defineSetter lookupGetter/lookupSetter
16067 https://bugs.webkit.org/show_bug.cgi?id=77451
16069 Reviewed by Sam Weinig.
16071 These can now all be implemented in terms of defineOwnProperty & getPropertyDescriptor.
16072 Also remove initializeGetterSetterProperty, since this is equivalent to putDirectAccessor.
16074 * JavaScriptCore.exp:
16075 * debugger/DebuggerActivation.cpp:
16076 (JSC::DebuggerActivation::defineOwnProperty):
16077 * debugger/DebuggerActivation.h:
16078 (DebuggerActivation):
16079 * runtime/ClassInfo.h:
16082 * runtime/JSBoundFunction.cpp:
16083 (JSC::JSBoundFunction::finishCreation):
16084 * runtime/JSCell.cpp:
16086 * runtime/JSCell.h:
16088 * runtime/JSFunction.cpp:
16089 (JSC::JSFunction::getOwnPropertySlot):
16090 (JSC::JSFunction::getOwnPropertyDescriptor):
16091 * runtime/JSGlobalObject.cpp:
16092 (JSC::JSGlobalObject::defineOwnProperty):
16094 * runtime/JSGlobalObject.h:
16096 * runtime/JSObject.cpp:
16098 * runtime/JSObject.h:
16100 * runtime/ObjectPrototype.cpp:
16101 (JSC::objectProtoFuncDefineGetter):
16102 (JSC::objectProtoFuncDefineSetter):
16103 (JSC::objectProtoFuncLookupGetter):
16104 (JSC::objectProtoFuncLookupSetter):
16106 2012-02-06 Carlos Garcia Campos <cgarcia@igalia.com>
16108 Unreviewed. Fix make distcheck.
16110 * GNUmakefile.list.am: Add missing files.
16112 2012-02-05 Filip Pizlo <fpizlo@apple.com>
16114 DFG's child references from one node to another should have room for type information
16115 https://bugs.webkit.org/show_bug.cgi?id=77797
16117 Reviewed by Oliver Hunt.
16119 The DFG::Node::child fields now contain both a DFG::NodeIndex (which is just an unsigned)
16120 and a DFG::UseKind (which is currently an effectively empty enum). They are encapsulated
16121 together as a DFG::NodeUse, which can in most cases still be used as an index (for
16122 example DFG::Graph, AbstractState, and SpeculativeJIT all accept NodeUse in most places
16123 where they really want a NodeIndex).
16125 The NodeUse stores both the index and the UseKind without bloating the memory usage of
16126 DFG::Node, since we really don't need full 32 bits for the NodeIndex (a DFG::Node is
16127 roughly 11 words, so if we assume that we never want to use more than 1GB to DFG compile
16128 something - likely a sensible assumption! - then we will only be able to have room for
16129 about 24 million nodes, which means we only need about 24.5 bits for the node index).
16130 Currently the DFG::NodeUse allocates 4 bits for the UseKind and 28 bits for the index,
16131 but stores the index as a signed number to make NoNode work naturally. Hence we really
16132 just have 27 bits for the index.
16134 This is performance-neutral on all benchmarks we track.
16136 * JavaScriptCore.xcodeproj/project.pbxproj:
16137 * dfg/DFGAbstractState.h:
16138 (JSC::DFG::AbstractState::forNode):
16140 * dfg/DFGByteCodeParser.cpp:
16141 (JSC::DFG::ByteCodeParser::getLocal):
16142 (JSC::DFG::ByteCodeParser::getArgument):
16143 (JSC::DFG::ByteCodeParser::toInt32):
16144 (JSC::DFG::ByteCodeParser::addVarArgChild):
16145 (JSC::DFG::ByteCodeParser::processPhiStack):
16147 * dfg/DFGGraph.cpp:
16148 (JSC::DFG::Graph::dump):
16152 (JSC::DFG::Graph::operator[]):
16153 (JSC::DFG::Graph::at):
16154 (JSC::DFG::Graph::ref):
16155 (JSC::DFG::Graph::deref):
16156 (JSC::DFG::Graph::clearAndDerefChild1):
16157 (JSC::DFG::Graph::clearAndDerefChild2):
16158 (JSC::DFG::Graph::clearAndDerefChild3):
16159 * dfg/DFGJITCompiler.h:
16160 (JSC::DFG::JITCompiler::getPrediction):
16162 (JSC::DFG::Node::Node):
16163 (JSC::DFG::Node::child1):
16164 (JSC::DFG::Node::child1Unchecked):
16165 (JSC::DFG::Node::child2):
16166 (JSC::DFG::Node::child3):
16167 (JSC::DFG::Node::firstChild):
16168 (JSC::DFG::Node::numChildren):
16169 (JSC::DFG::Node::dumpChildren):
16171 * dfg/DFGNodeReferenceBlob.h: Added.
16173 (NodeReferenceBlob):
16174 (JSC::DFG::NodeReferenceBlob::NodeReferenceBlob):
16175 (JSC::DFG::NodeReferenceBlob::child):
16176 (JSC::DFG::NodeReferenceBlob::child1):
16177 (JSC::DFG::NodeReferenceBlob::child2):
16178 (JSC::DFG::NodeReferenceBlob::child3):
16179 (JSC::DFG::NodeReferenceBlob::child1Unchecked):
16180 (JSC::DFG::NodeReferenceBlob::initialize):
16181 (JSC::DFG::NodeReferenceBlob::firstChild):
16182 (JSC::DFG::NodeReferenceBlob::setFirstChild):
16183 (JSC::DFG::NodeReferenceBlob::numChildren):
16184 (JSC::DFG::NodeReferenceBlob::setNumChildren):
16185 * dfg/DFGNodeUse.h: Added.
16188 (JSC::DFG::NodeUse::NodeUse):
16189 (JSC::DFG::NodeUse::indexUnchecked):
16190 (JSC::DFG::NodeUse::index):
16191 (JSC::DFG::NodeUse::setIndex):
16192 (JSC::DFG::NodeUse::useKind):
16193 (JSC::DFG::NodeUse::setUseKind):
16194 (JSC::DFG::NodeUse::isSet):
16195 (JSC::DFG::NodeUse::operator!):
16196 (JSC::DFG::NodeUse::operator==):
16197 (JSC::DFG::NodeUse::operator!=):
16198 (JSC::DFG::NodeUse::shift):
16199 (JSC::DFG::NodeUse::makeWord):
16200 (JSC::DFG::operator==):
16201 (JSC::DFG::operator!=):
16202 * dfg/DFGPropagator.cpp:
16203 (JSC::DFG::Propagator::propagateArithNodeFlags):
16204 (JSC::DFG::Propagator::vote):
16205 (JSC::DFG::Propagator::toDouble):
16206 (JSC::DFG::Propagator::fixupNode):
16207 (JSC::DFG::Propagator::canonicalize):
16208 (JSC::DFG::Propagator::startIndex):
16209 (JSC::DFG::Propagator::globalVarLoadElimination):
16210 (JSC::DFG::Propagator::getByValLoadElimination):
16211 (JSC::DFG::Propagator::getByOffsetLoadElimination):
16212 (JSC::DFG::Propagator::performSubstitution):
16213 (JSC::DFG::Propagator::performNodeCSE):
16214 * dfg/DFGScoreBoard.h:
16215 (JSC::DFG::ScoreBoard::use):
16216 * dfg/DFGSpeculativeJIT.cpp:
16217 (JSC::DFG::SpeculativeJIT::useChildren):
16218 (JSC::DFG::SpeculativeJIT::writeBarrier):
16219 (JSC::DFG::SpeculativeJIT::nonSpeculativeStrictEq):
16220 (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
16221 (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
16222 (JSC::DFG::SpeculativeJIT::compileMovHint):
16223 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
16224 (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
16225 (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
16226 (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
16227 (JSC::DFG::SpeculativeJIT::compileSoftModulo):
16228 (JSC::DFG::SpeculativeJIT::compileAdd):
16229 (JSC::DFG::SpeculativeJIT::compileArithSub):
16230 (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant):
16231 (JSC::DFG::SpeculativeJIT::compileStrictEq):
16232 * dfg/DFGSpeculativeJIT.h:
16233 (JSC::DFG::SpeculativeJIT::at):
16234 (JSC::DFG::SpeculativeJIT::canReuse):
16235 (JSC::DFG::SpeculativeJIT::use):
16237 (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch):
16238 (JSC::DFG::SpeculativeJIT::speculationCheck):
16239 (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
16240 (JSC::DFG::IntegerOperand::IntegerOperand):
16241 (JSC::DFG::DoubleOperand::DoubleOperand):
16242 (JSC::DFG::JSValueOperand::JSValueOperand):
16243 (JSC::DFG::StorageOperand::StorageOperand):
16244 (JSC::DFG::SpeculateIntegerOperand::SpeculateIntegerOperand):
16245 (JSC::DFG::SpeculateStrictInt32Operand::SpeculateStrictInt32Operand):
16246 (JSC::DFG::SpeculateDoubleOperand::SpeculateDoubleOperand):
16247 (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
16248 (JSC::DFG::SpeculateBooleanOperand::SpeculateBooleanOperand):
16249 * dfg/DFGSpeculativeJIT32_64.cpp:
16250 (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToNumber):
16251 (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32):
16252 (JSC::DFG::SpeculativeJIT::cachedPutById):
16253 (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
16254 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
16255 (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
16256 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
16257 (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
16258 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
16259 (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
16260 (JSC::DFG::SpeculativeJIT::emitCall):
16261 (JSC::DFG::SpeculativeJIT::compileValueAdd):
16262 (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
16263 (JSC::DFG::SpeculativeJIT::compileLogicalNot):
16264 (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
16265 (JSC::DFG::SpeculativeJIT::emitBranch):
16266 (JSC::DFG::SpeculativeJIT::compile):
16267 * dfg/DFGSpeculativeJIT64.cpp:
16268 (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToNumber):
16269 (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32):
16270 (JSC::DFG::SpeculativeJIT::cachedPutById):
16271 (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
16272 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
16273 (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
16274 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
16275 (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
16276 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
16277 (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
16278 (JSC::DFG::SpeculativeJIT::emitCall):
16279 (JSC::DFG::SpeculativeJIT::compileObjectEquality):
16280 (JSC::DFG::SpeculativeJIT::compileValueAdd):
16281 (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
16282 (JSC::DFG::SpeculativeJIT::compileLogicalNot):
16283 (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
16284 (JSC::DFG::SpeculativeJIT::emitBranch):
16285 (JSC::DFG::SpeculativeJIT::compile):
16287 2012-02-05 Gyuyoung Kim <gyuyoung.kim@samsung.com>
16289 [CMAKE] Support javascriptcore test for EFL port.
16290 https://bugs.webkit.org/show_bug.cgi?id=77425
16292 Reviewed by Daniel Bates.
16294 Efl and WinCE as well as Blackberry port are now using Cmake as its build system
16295 and they are share the make file to create jsc excutable. In order to run
16296 "run-javascriptcore-tests", EFL port needs to change jsc installation configuration
16297 with executable output directory(e.g. Programs). So, this patch change jsc installation
16298 configuration only for EFL port.
16300 * shell/CMakeLists.txt:
16302 2012-02-04 Gavin Barraclough <barraclough@apple.com>
16304 Rubber stamped by Sam Weinig.
16306 * yarr/YarrPattern.cpp:
16307 (JSC::Yarr::YarrPatternConstructor::quantifyAtom):
16310 2012-02-04 Kalev Lember <kalevlember@gmail.com>
16312 [GTK] CurrentTime: Reorder headers for win32
16313 https://bugs.webkit.org/show_bug.cgi?id=77808
16315 Reviewed by Martin Robinson.
16317 In GTK+ win32 port, monotonicallyIncreasingTime() implementation is
16318 based on g_get_monotonic_time(). Reorder headers to make sure glib.h
16319 gets included even when the platform is win32.
16321 CurrentTime.cpp: In function 'double WTF::monotonicallyIncreasingTime()':
16322 CurrentTime.cpp:321:53: error: 'g_get_monotonic_time' was not declared in this scope
16323 CurrentTime.cpp:322:1: warning: control reaches end of non-void function [-Wreturn-type]
16325 * wtf/CurrentTime.cpp:
16327 2012-02-03 Anders Carlsson <andersca@apple.com>
16329 Prefix the typedef in WTF_MAKE_FAST_ALLOCATED with underscores
16330 https://bugs.webkit.org/show_bug.cgi?id=77788
16332 Reviewed by Andreas Kling.
16334 The current typedef name, 'ThisIsHereToForceASemicolonAfterThisMacro', shows up when trying to
16335 code-complete 'this' in Xcode. Prefix the typedef with two underscores to stop this from happening.
16337 * wtf/FastAllocBase.h:
16339 2012-02-03 Rob Buis <rbuis@rim.com>
16341 Fix alignment warnings in ARMv7
16342 https://bugs.webkit.org/show_bug.cgi?id=55368
16344 Reviewed by Filip Pizlo.
16346 Use reinterpret_cast_ptr and static_cast to get rid of alignment issues in ARMv7 code.
16348 * heap/HandleTypes.h:
16349 (JSC::HandleTypes::getFromSlot):
16350 * heap/MarkedBlock.cpp:
16351 (JSC::MarkedBlock::specializedSweep):
16352 * heap/MarkedBlock.h:
16353 (JSC::MarkedBlock::forEachCell):
16354 * runtime/WriteBarrier.h:
16355 (JSC::WriteBarrierBase::get):
16356 (JSC::WriteBarrierBase::unvalidatedGet):
16358 2012-02-03 Mark Hahnenberg <mhahnenberg@apple.com>
16362 Unreviewed build fix
16364 Forgot to add a couple files.
16366 * heap/MarkedAllocator.cpp: Added.
16368 (JSC::MarkedAllocator::tryAllocateHelper):
16369 (JSC::MarkedAllocator::tryAllocate):
16370 (JSC::MarkedAllocator::allocateSlowCase):
16371 (JSC::MarkedAllocator::allocateBlock):
16372 (JSC::MarkedAllocator::addBlock):
16373 (JSC::MarkedAllocator::removeBlock):
16374 * heap/MarkedAllocator.h: Added.
16378 (JSC::MarkedAllocator::cellSize):
16379 (JSC::MarkedAllocator::heap):
16380 (JSC::MarkedAllocator::setHeap):
16381 (JSC::MarkedAllocator::setCellSize):
16382 (JSC::MarkedAllocator::setMarkedSpace):
16383 (JSC::MarkedAllocator::MarkedAllocator):
16384 (JSC::MarkedAllocator::allocate):
16385 (JSC::MarkedAllocator::reset):
16386 (JSC::MarkedAllocator::zapFreeList):
16387 (JSC::MarkedAllocator::forEachBlock):
16389 2012-02-03 Mark Hahnenberg <mhahnenberg@apple.com>
16391 Refactor MarkedBlock::SizeClass into a separate class
16392 https://bugs.webkit.org/show_bug.cgi?id=77600
16394 Reviewed by Geoffrey Garen.
16396 We pulled SizeClass out into its own class, named MarkedAllocator, and gave it
16397 the responsibility of allocating objects from the collection of MarkedBlocks
16398 that it manages. Also limited the amount of coupling to internal data fields
16399 from other places, although it's mostly unavoidable in the JIT code.
16401 Eventually MarkedAllocator will implement various policies to do with object
16402 management, e.g. whether or not to run destructors on objects that it manages.
16403 MarkedSpace will manage a collection of MarkedAllocators with varying policies,
16404 as it does now but to a larger extent.
16407 * GNUmakefile.list.am:
16408 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
16409 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
16410 * JavaScriptCore.xcodeproj/project.pbxproj:
16412 * dfg/DFGSpeculativeJIT.h:
16413 (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject):
16415 (JSC::Heap::collect):
16416 (JSC::Heap::resetAllocators):
16418 (JSC::Heap::allocatorForObject):
16420 * heap/MarkedAllocator.cpp: Added.
16422 (JSC::MarkedAllocator::tryAllocateHelper):
16423 (JSC::MarkedAllocator::tryAllocate):
16424 (JSC::MarkedAllocator::allocateSlowCase):
16425 (JSC::MarkedAllocator::allocateBlock):
16426 (JSC::MarkedAllocator::addBlock):
16427 (JSC::MarkedAllocator::removeBlock):
16428 * heap/MarkedAllocator.h: Added.
16432 (JSC::MarkedAllocator::cellSize):
16433 (JSC::MarkedAllocator::heap):
16434 (JSC::MarkedAllocator::setHeap):
16435 (JSC::MarkedAllocator::setCellSize):
16436 (JSC::MarkedAllocator::setMarkedSpace):
16437 (JSC::MarkedAllocator::MarkedAllocator):
16438 (JSC::MarkedAllocator::allocate):
16439 (JSC::MarkedAllocator::reset):
16440 (JSC::MarkedAllocator::zapFreeList):
16441 (JSC::MarkedAllocator::forEachBlock):
16442 * heap/MarkedSpace.cpp:
16443 (JSC::MarkedSpace::MarkedSpace):
16444 (JSC::MarkedSpace::resetAllocators):
16445 (JSC::MarkedSpace::canonicalizeCellLivenessData):
16446 (JSC::TakeIfUnmarked::operator()):
16447 * heap/MarkedSpace.h:
16449 (JSC::MarkedSpace::allocatorFor):
16450 (JSC::MarkedSpace::allocate):
16451 (JSC::MarkedSpace::forEachBlock):
16452 (JSC::MarkedSpace::didAddBlock):
16453 (JSC::MarkedSpace::didConsumeFreeList):
16454 * jit/JITInlineMethods.h:
16455 (JSC::JIT::emitAllocateBasicJSObject):
16457 2012-02-03 Simon Hausmann <simon.hausmann@nokia.com>
16459 [Qt] Replace GNU linker script for exports with export macros in WTF/JSC
16460 https://bugs.webkit.org/show_bug.cgi?id=77723
16462 Reviewed by Tor Arne Vestbø.
16464 * wtf/Platform.h: Enable use of export macros.
16466 2012-02-02 Hajime Morrita <morrita@chromium.org>
16468 Unreviewed, removing an unnecessarily JS_PRIVATE_EXPORT annotation.
16470 * interpreter/Interpreter.h:
16473 2012-01-31 Hajime Morrita <morrita@chromium.org>
16475 [Mac] eliminate JavaScriptCore.exp
16476 https://bugs.webkit.org/show_bug.cgi?id=72854
16478 Reviewed by Darin Adler.
16480 - Removed exp files and corresponding makefile entries.
16481 - Changed the build configuration no to use exp file.
16483 * Configurations/JavaScriptCore.xcconfig:
16484 * DerivedSources.make:
16485 * JavaScriptCore.JSVALUE32_64only.exp: Removed.
16486 * JavaScriptCore.JSVALUE64only.exp: Removed.
16487 * JavaScriptCore.exp: Removed.
16488 * JavaScriptCore.xcodeproj/project.pbxproj:
16491 2012-02-02 Benjamin Poulain <bpoulain@apple.com>
16493 Running a Web Worker on about:blank crashes the interpreter
16494 https://bugs.webkit.org/show_bug.cgi?id=77593
16496 Reviewed by Michael Saboff.
16498 The method Interpreter::execute() was crashing on empty programs because
16499 the assumption is made the source is not null.
16501 This patch shortcut the execution when the String is null to avoid invalid
16504 * interpreter/Interpreter.cpp:
16505 (JSC::Interpreter::execute):
16507 2012-02-02 Kalev Lember <kalevlember@gmail.com>
16509 [GTK] Use win32 native threading
16510 https://bugs.webkit.org/show_bug.cgi?id=77676
16512 Reviewed by Martin Robinson.
16514 r97269 switched from glib threading to pthreads, breaking win32 GTK+.
16515 This is a follow up, removing some leftovers in ThreadSpecific.h and
16516 switching win32 to use the native threading in ThreadingWin.cpp.
16518 * GNUmakefile.list.am: Compile in win32 native threading support
16519 * wtf/ThreadSpecific.h: Remove GTK+-specific definitions
16523 2012-02-02 Filip Pizlo <fpizlo@apple.com>
16525 retrieveCallerFromVMCode should call trueCallerFrame
16526 https://bugs.webkit.org/show_bug.cgi?id=77684
16528 Reviewed by Oliver Hunt.
16530 * interpreter/Interpreter.cpp:
16531 (JSC::Interpreter::retrieveCallerFromVMCode):
16533 2012-02-02 Kalev Lember <kalevlember@gmail.com>
16535 [GTK] Implement current executable path finding for win32
16536 https://bugs.webkit.org/show_bug.cgi?id=77677
16538 Reviewed by Martin Robinson.
16540 The WTF helper for getting the binary path that was added in r101710
16541 left out the win32 implementation. Fix this.
16543 * wtf/gobject/GlibUtilities.cpp:
16544 (getCurrentExecutablePath):
16546 2012-02-02 Filip Pizlo <fpizlo@apple.com>
16548 Throwing away bytecode and then reparsing during DFG optimization is just
16549 plain wrong and makes things crash
16550 https://bugs.webkit.org/show_bug.cgi?id=77680
16551 <rdar://problem/10798490>
16553 Reviewed by Oliver Hunt.
16555 This is the minimal surgical fix: it removes the code that triggered bytecode
16556 throw-away. Once we're confident that this is a good idea, we can kill all of
16557 the code that implements the feature.
16559 * bytecode/CodeBlock.h:
16560 (JSC::CodeBlock::discardBytecodeLater):
16561 (JSC::CodeBlock::addValueProfile):
16563 (JSC::jitCompileIfAppropriate):
16564 (JSC::jitCompileFunctionIfAppropriate):
16566 2012-02-02 Filip Pizlo <fpizlo@apple.com>
16568 Release build debugging should be easier
16569 https://bugs.webkit.org/show_bug.cgi?id=77669
16571 Reviewed by Gavin Barraclough.
16573 * assembler/ARMAssembler.h:
16575 (JSC::ARMAssembler::debugOffset):
16576 * assembler/ARMv7Assembler.h:
16578 (JSC::ARMv7Assembler::debugOffset):
16579 (ARMInstructionFormatter):
16580 (JSC::ARMv7Assembler::ARMInstructionFormatter::debugOffset):
16581 * assembler/AbstractMacroAssembler.h:
16582 (AbstractMacroAssembler):
16583 (JSC::AbstractMacroAssembler::debugOffset):
16584 * assembler/AssemblerBuffer.h:
16586 (JSC::AssemblerBuffer::debugOffset):
16587 * assembler/LinkBuffer.h:
16589 (JSC::LinkBuffer::debugSize):
16590 * assembler/MIPSAssembler.h:
16592 (JSC::MIPSAssembler::debugOffset):
16593 * assembler/X86Assembler.h:
16595 (JSC::X86Assembler::debugOffset):
16596 (X86InstructionFormatter):
16597 (JSC::X86Assembler::X86InstructionFormatter::debugOffset):
16598 * bytecode/CodeBlock.cpp:
16600 * bytecode/CodeBlock.h:
16602 * bytecode/CodeOrigin.h:
16605 (JSC::CodeOrigin::inlineStack):
16606 * bytecode/DFGExitProfile.h:
16607 (JSC::DFG::exitKindToString):
16608 * bytecode/DataFormat.h:
16609 (JSC::dataFormatToString):
16610 * bytecode/PredictedType.cpp:
16612 (JSC::predictionToString):
16613 * bytecode/PredictedType.h:
16615 * bytecode/ValueRecovery.h:
16617 (JSC::ValueRecovery::dump):
16618 * bytecompiler/BytecodeGenerator.cpp:
16620 (JSC::BytecodeGenerator::setDumpsGeneratedCode):
16621 (JSC::BytecodeGenerator::dumpsGeneratedCode):
16622 (JSC::BytecodeGenerator::generate):
16623 * dfg/DFGAbstractValue.h:
16624 (StructureAbstractValue):
16625 (JSC::DFG::StructureAbstractValue::dump):
16627 (JSC::DFG::AbstractValue::dump):
16628 * dfg/DFGAssemblyHelpers.h:
16631 (JSC::DFG::AssemblyHelpers::debugCall):
16632 * dfg/DFGFPRInfo.h:
16634 (JSC::DFG::FPRInfo::debugName):
16635 * dfg/DFGGPRInfo.h:
16637 (JSC::DFG::GPRInfo::debugName):
16638 * dfg/DFGGraph.cpp:
16644 (JSC::DFG::arithNodeFlagsAsString):
16646 (JSC::DFG::Node::hasIdentifier):
16647 (JSC::DFG::Node::dumpChildren):
16648 * dfg/DFGOSRExit.cpp:
16650 (JSC::DFG::OSRExit::dump):
16651 * dfg/DFGOSRExit.h:
16653 * runtime/JSValue.cpp:
16655 (JSC::JSValue::description):
16656 * runtime/JSValue.h:
16658 * wtf/BitVector.cpp:
16660 (WTF::BitVector::dump):
16664 2012-02-02 Oliver Hunt <oliver@apple.com>
16666 Getters and setters cause line numbers in errors/console.log to be offset for the whole file
16667 https://bugs.webkit.org/show_bug.cgi?id=77675
16669 Reviewed by Timothy Hatcher.
16671 Our default literal parsing logic doesn't handle the extra work required for
16672 getters and setters. When it encounters one, it rolls back the lexer and
16673 then switches to a more complete parsing function. Unfortunately it was only
16674 winding back the character position, and was ignoring the line number and
16675 other lexer data. This led to every getter and setter causing the line number
16676 to be incorrectly incremented leading to increasingly incorrect numbers for
16677 the rest of the file.
16679 * parser/Parser.cpp:
16680 (JSC::::parseObjectLiteral):
16682 2012-02-02 Andy Wingo <wingo@igalia.com>
16684 Fix type punning warning in HashTable.h debug builds
16685 https://bugs.webkit.org/show_bug.cgi?id=77422
16687 Reviewed by Gavin Barraclough.
16689 * wtf/HashTable.h (WTF::HashTable::checkKey): Fix type punning
16690 warning appearing in debug builds with gcc-4.6.2 on GNU/Linux.
16692 2012-02-01 Michael Saboff <msaboff@apple.com>
16694 Yarr crash with regexp replace
16695 https://bugs.webkit.org/show_bug.cgi?id=67454
16697 Reviewed by Gavin Barraclough.
16699 Properly handle the case of a back reference to an unmatched
16700 subpattern by always matching without consuming any characters.
16702 * yarr/YarrInterpreter.cpp:
16703 (JSC::Yarr::Interpreter::matchBackReference):
16704 (JSC::Yarr::Interpreter::backtrackBackReference):
16706 2012-02-01 Gavin Barraclough <barraclough@apple.com>
16708 calling function on catch block scope containing an eval result in wrong this value being passed
16709 https://bugs.webkit.org/show_bug.cgi?id=77581
16711 Reviewed by Oliver Hunt.
16713 javascript:function F(){ return 'F' in this; }; try { throw F; } catch (e) { eval(""); alert(e()); }
16715 * bytecompiler/NodesCodegen.cpp:
16716 (JSC::TryNode::emitBytecode):
16717 * interpreter/Interpreter.cpp:
16718 (JSC::Interpreter::execute):
16719 * parser/ASTBuilder.h:
16720 (JSC::ASTBuilder::createTryStatement):
16721 * parser/NodeConstructors.h:
16722 (JSC::TryNode::TryNode):
16725 * parser/Parser.cpp:
16726 (JSC::::parseTryStatement):
16727 * parser/SyntaxChecker.h:
16728 (JSC::SyntaxChecker::createTryStatement):
16729 * runtime/JSObject.h:
16731 (JSC::JSObject::isStaticScopeObject):
16734 2012-02-01 Oliver Hunt <oliver@apple.com>
16736 Add support for inferred function names
16737 https://bugs.webkit.org/show_bug.cgi?id=77579
16739 Reviewed by Gavin Barraclough.
16741 Add new "inferred" names to function expressions, getters, and setters.
16742 This property is not exposed to JS, so is only visible in the debugger
16745 * JavaScriptCore.exp:
16746 * bytecompiler/BytecodeGenerator.h:
16747 (JSC::BytecodeGenerator::makeFunction):
16748 * debugger/DebuggerCallFrame.cpp:
16749 (JSC::DebuggerCallFrame::calculatedFunctionName):
16750 * parser/ASTBuilder.h:
16751 (JSC::ASTBuilder::createAssignResolve):
16752 (JSC::ASTBuilder::createGetterOrSetterProperty):
16753 (JSC::ASTBuilder::createProperty):
16754 (JSC::ASTBuilder::makeAssignNode):
16756 (JSC::FunctionBodyNode::setInferredName):
16757 (JSC::FunctionBodyNode::inferredName):
16758 (FunctionBodyNode):
16759 * profiler/Profiler.cpp:
16761 (JSC::Profiler::createCallIdentifier):
16762 (JSC::createCallIdentifierFromFunctionImp):
16763 * runtime/Executable.cpp:
16764 (JSC::FunctionExecutable::FunctionExecutable):
16765 (JSC::FunctionExecutable::fromGlobalCode):
16766 * runtime/Executable.h:
16767 (JSC::FunctionExecutable::create):
16768 (JSC::FunctionExecutable::inferredName):
16769 (FunctionExecutable):
16770 * runtime/JSFunction.cpp:
16771 (JSC::JSFunction::calculatedDisplayName):
16773 (JSC::getCalculatedDisplayName):
16774 * runtime/JSFunction.h:
16777 2012-02-01 Filip Pizlo <fpizlo@apple.com>
16779 DFG should fold double-to-int conversions
16780 https://bugs.webkit.org/show_bug.cgi?id=77532
16782 Reviewed by Oliver Hunt.
16784 Performance neutral on major benchmarks. But it makes calling V8's
16785 Math.random() 4x faster.
16787 * bytecode/CodeBlock.cpp:
16789 (JSC::CodeBlock::addOrFindConstant):
16790 * bytecode/CodeBlock.h:
16791 (JSC::CodeBlock::addConstant):
16793 * dfg/DFGAbstractState.cpp:
16794 (JSC::DFG::AbstractState::execute):
16795 * dfg/DFGByteCodeParser.cpp:
16796 (JSC::DFG::ByteCodeParser::toInt32):
16798 (JSC::DFG::ByteCodeParser::getJSConstantForValue):
16799 (JSC::DFG::ByteCodeParser::isInt32Constant):
16801 (JSC::DFG::Graph::addShouldSpeculateInteger):
16803 (JSC::DFG::Graph::addImmediateShouldSpeculateInteger):
16804 * dfg/DFGPropagator.cpp:
16805 (JSC::DFG::Propagator::propagateNodePredictions):
16806 (JSC::DFG::Propagator::doRoundOfDoubleVoting):
16807 (JSC::DFG::Propagator::fixupNode):
16808 * dfg/DFGSpeculativeJIT.cpp:
16809 (JSC::DFG::SpeculativeJIT::compileAdd):
16811 (JSC::DFG::SpeculativeJIT::compileArithSub):
16812 * dfg/DFGSpeculativeJIT.h:
16813 (JSC::DFG::SpeculativeJIT::valueOfNumberConstantAsInt32):
16815 * dfg/DFGSpeculativeJIT32_64.cpp:
16816 (JSC::DFG::SpeculativeJIT::compile):
16817 * dfg/DFGSpeculativeJIT64.cpp:
16818 (JSC::DFG::SpeculativeJIT::compile):
16819 * runtime/JSValueInlineMethods.h:
16820 (JSC::JSValue::asDouble):
16822 2012-02-01 Filip Pizlo <fpizlo@apple.com>
16824 DFG graph dump for GetScopedVar should show the correct prediction
16825 https://bugs.webkit.org/show_bug.cgi?id=77530
16827 Reviewed by Geoff Garen.
16829 GetScopedVar has a heap prediction, not a variable prediction. But it does
16830 have a variable. Hence we need to check for heap predictions before checking
16831 for variable predictions.
16833 * dfg/DFGGraph.cpp:
16834 (JSC::DFG::Graph::dump):
16836 2012-02-01 Mark Hahnenberg <mhahnenberg@apple.com>
16838 Replace JSArray destructor with finalizer
16839 https://bugs.webkit.org/show_bug.cgi?id=77488
16841 Reviewed by Geoffrey Garen.
16843 * JavaScriptCore.exp:
16844 * runtime/JSArray.cpp:
16845 (JSC::JSArray::finalize): Added finalizer.
16846 (JSC::JSArray::allocateSparseMap): Factored out code for allocating new sparse maps.
16848 (JSC::JSArray::deallocateSparseMap): Factored out code for deallocating sparse maps.
16849 (JSC::JSArray::enterDictionaryMode): Renamed enterSparseMode to enterDictionaryMode
16850 because the old name was confusing because we could have a sparse array that never
16851 called enterSparseMode.
16852 (JSC::JSArray::defineOwnNumericProperty):
16853 (JSC::JSArray::setLengthWritable):
16854 (JSC::JSArray::putByIndexBeyondVectorLength):
16855 (JSC::JSArray::setLength):
16856 (JSC::JSArray::pop):
16857 (JSC::JSArray::sort):
16858 (JSC::JSArray::compactForSorting):
16859 * runtime/JSArray.h:
16862 2012-02-01 Andy Wingo <wingo@igalia.com>
16864 Refactor identifier resolution in BytecodeGenerator
16865 https://bugs.webkit.org/show_bug.cgi?id=76285
16867 Reviewed by Geoffrey Garen.
16869 * bytecompiler/BytecodeGenerator.h:
16870 (JSC::ResolveResult): New class, to describe the storage
16871 location corresponding to an identifier in a program.
16872 * bytecompiler/BytecodeGenerator.cpp:
16873 (JSC::BytecodeGenerator::resolve): New function, replacing
16874 findScopedProperty.
16875 (JSC::BytecodeGenerator::resolveConstDecl): New function,
16876 encapsulating what ConstDeclNode::emitBytecode used to do.
16877 (JSC::BytecodeGenerator::emitGetStaticVar):
16878 (JSC::BytecodeGenerator::emitPutStaticVar): New functions,
16879 corresponding to the old emitGetScopedVar and emitPutScopedVar.
16880 (JSC::BytecodeGenerator::registerFor): Remove version that took an
16881 Identifier&; replaced by ResolveResult::local().
16882 (JSC::BytecodeGenerator::emitResolve):
16883 (JSC::BytecodeGenerator::emitResolveBase):
16884 (JSC::BytecodeGenerator::emitResolveBaseForPut):
16885 (JSC::BytecodeGenerator::emitResolveWithBase):
16886 (JSC::BytecodeGenerator::emitResolveWithThis): Change to accept a
16887 "resolveResult" argument. This is more clear, and reduces the
16888 amount of double analysis happening at compile-time.
16889 * bytecompiler/NodesCodegen.cpp:
16890 (JSC::ResolveNode::emitBytecode):
16891 (JSC::EvalFunctionCallNode::emitBytecode):
16892 (JSC::FunctionCallResolveNode::emitBytecode):
16893 (JSC::PostfixResolveNode::emitBytecode):
16894 (JSC::DeleteResolveNode::emitBytecode):
16895 (JSC::TypeOfResolveNode::emitBytecode):
16896 (JSC::PrefixResolveNode::emitBytecode):
16897 (JSC::ReadModifyResolveNode::emitBytecode):
16898 (JSC::AssignResolveNode::emitBytecode):
16899 (JSC::ConstDeclNode::emitCodeSingle):
16900 (JSC::ForInNode::emitBytecode): Refactor to use the new
16901 ResolveResult structure.
16903 2012-02-01 Csaba Osztrogonác <ossy@webkit.org>
16905 Implement Error.stack
16906 https://bugs.webkit.org/show_bug.cgi?id=66994
16908 Unreviewed, rolling out r106407.
16910 * JavaScriptCore.exp:
16911 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
16912 * interpreter/AbstractPC.cpp:
16913 (JSC::AbstractPC::AbstractPC):
16914 * interpreter/Interpreter.cpp:
16915 (JSC::Interpreter::throwException):
16916 * interpreter/Interpreter.h:
16920 (GlobalObject::finishCreation):
16923 * runtime/CommonIdentifiers.h:
16924 * runtime/Error.cpp:
16925 (JSC::addErrorInfo):
16929 2012-01-31 Hajime Morrita <morrita@chromium.org>
16931 Add missing JS_PRIVATE_EXPORTs
16932 https://bugs.webkit.org/show_bug.cgi?id=77507
16934 Reviewed by Kevin Ollivier.
16936 * heap/MarkedSpace.h:
16938 * interpreter/Interpreter.h:
16940 * runtime/JSValue.h:
16942 * wtf/text/AtomicString.h:
16943 (WTF::AtomicString::add):
16944 * wtf/text/WTFString.h:
16947 2012-01-31 Geoffrey Garen <ggaren@apple.com>
16949 Stop using -fomit-frame-pointer
16950 https://bugs.webkit.org/show_bug.cgi?id=77403
16952 Reviewed by Filip Pizlo.
16954 JavaScriptCore is too fast. I'm just the man to fix it.
16956 * Configurations/JavaScriptCore.xcconfig:
16958 2012-01-31 Michael Saboff <msaboff@apple.com>
16960 StringProtoFuncToUpperCase should call StringImpl::upper similar to StringProtoToLowerCase
16961 https://bugs.webkit.org/show_bug.cgi?id=76647
16963 Reviewed by Darin Adler.
16965 Changed stringProtoFuncToUpperCase to call StringImpl::upper() in a manor similar
16966 to stringProtoFuncToLowerCase(). Fixed StringImpl::upper() to handle to special
16967 cases. One case is s-sharp (0xdf) which converts to "SS". The other case is
16968 for characters which become 16 bit values when converted to upper case. For
16969 those, we up convert the the source string and use the 16 bit path.
16971 * runtime/StringPrototype.cpp:
16972 (JSC::stringProtoFuncToUpperCase):
16973 * wtf/text/StringImpl.cpp:
16974 (WTF::StringImpl::upper):
16975 * wtf/unicode/CharacterNames.h:
16976 (smallLetterSharpS): New constant
16978 2012-01-31 Oliver Hunt <oliver@apple.com>
16980 Remove unneeded sourceId property
16981 https://bugs.webkit.org/show_bug.cgi?id=77495
16983 Reviewed by Filip Pizlo.
16985 sourceId isn't used anymore, so we'll just remove it.
16987 * runtime/Error.cpp:
16989 (JSC::addErrorInfo):
16990 (JSC::hasErrorInfo):
16992 2012-01-31 Oliver Hunt <oliver@apple.com>
16994 Implement Error.stack
16995 https://bugs.webkit.org/show_bug.cgi?id=66994
16997 Reviewed by Gavin Barraclough.
16999 Original patch by Juan Carlos Montemayor Elosua:
17000 This patch utilizes topCallFrame to create a stack trace when
17001 an error is thrown. Users will also be able to use the stack()
17002 command in jsc to get arrays with stack trace information.
17004 Modified to be correct on ToT, with a variety of correctness,
17005 performance, and security improvements.
17007 * JavaScriptCore.exp:
17008 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
17009 * interpreter/Interpreter.cpp:
17010 (JSC::getCallerLine):
17011 (JSC::getSourceURLFromCallFrame):
17012 (JSC::getStackFrameCodeType):
17013 (JSC::Interpreter::getStackTrace):
17014 (JSC::Interpreter::throwException):
17015 * interpreter/Interpreter.h:
17016 (JSC::StackFrame::toString):
17018 (GlobalObject::finishCreation):
17019 (functionJSCStack):
17021 (JSC::Parser::parse):
17022 * runtime/CommonIdentifiers.h:
17023 * runtime/Error.cpp:
17024 (JSC::addErrorInfo):
17027 2012-01-31 Scott Graham <scottmg@chromium.org>
17029 [Chromium] Remove references to gyp cygwin build target
17030 https://bugs.webkit.org/show_bug.cgi?id=77253
17032 Reviewed by Julien Chaffraix.
17034 Target dependency is no longer required, it's done earlier in the
17037 * JavaScriptCore.gyp/JavaScriptCore.gyp:
17039 2012-01-31 Michael Saboff <msaboff@apple.com>
17041 ASSERT(m_jumpsToLink.isEmpty()) failing in ARMv7Assembler dtor
17042 https://bugs.webkit.org/show_bug.cgi?id=77443
17044 Reviewed by Gavin Barraclough.
17046 Removed failing ASSERT() and thus destructor. The ASSERT isn't needed.
17047 We are hitting it in the YARR JIT case where we bail out and go to the
17048 interpreter with a partially JIT'ed function. Since we haven't linked
17049 the JIT'ed code, there is likely to be some unresolved jumps in the vector
17050 when the ARMv7Assembler destructor is called. For the case where we
17051 complete the JIT process, we clear the vector at the end of
17052 LinkBuffer::linkCode (LinkBuffer.h:292).
17054 * assembler/ARMv7Assembler.h:
17057 2012-01-31 Anders Carlsson <andersca@apple.com>
17059 Vector<T>::operator== shouldn't require T to have operator!=
17060 https://bugs.webkit.org/show_bug.cgi?id=77448
17062 Reviewed by Andreas Kling.
17064 Change VectorComparer::compare to use !(a == b) instead of a != b since
17065 it makes more sense for Vector::operator== to use the element's operator==.
17069 2012-01-30 Oliver Hunt <oliver@apple.com>
17071 get_by_val_arguments is broken in the interpreter
17072 https://bugs.webkit.org/show_bug.cgi?id=77389
17074 Reviewed by Gavin Barraclough.
17076 When get_by_val had wad a value profile added, the same slot was not added to
17077 get_by_val_arguments. This broke the interpreter as the interpreter falls
17078 back on its regular get_by_val implementation.
17080 No tests are added as the interpreter is fairly broken in its
17081 current state (multiple tests fail due to this bug).
17083 * bytecode/CodeBlock.cpp:
17084 (JSC::CodeBlock::dump):
17085 * bytecode/Opcode.h:
17088 * bytecompiler/BytecodeGenerator.cpp:
17089 (JSC::BytecodeGenerator::emitGetArgumentByVal):
17091 2012-01-30 Oliver Hunt <oliver@apple.com>
17093 Unexpected syntax error
17094 https://bugs.webkit.org/show_bug.cgi?id=77340
17096 Reviewed by Gavin Barraclough.
17098 Function calls and new expressions have the same semantics for
17099 assignment, so should simply share their lhs handling.
17101 * parser/Parser.cpp:
17102 (JSC::::parseMemberExpression):
17104 2012-01-30 Gavin Barraclough <barraclough@apple.com>
17106 Unreviewed ARMv7 build fix.
17108 * tools/CodeProfiling.cpp:
17110 (JSC::setProfileTimer):
17111 (JSC::CodeProfiling::begin):
17112 (JSC::CodeProfiling::end):
17114 2012-01-30 David Levin <levin@chromium.org>
17116 Using OS(WIN) or OS(MAC) should cause a build error.
17117 https://bugs.webkit.org/show_bug.cgi?id=77162
17119 Reviewed by Darin Adler.
17121 * wtf/Platform.h: Expand them into something that will
17122 cause a compile error.
17124 2012-01-30 Yong Li <yoli@rim.com>
17126 [BlackBerry] OS(QNX) also has TM_GMTOFF, TM_ZONE, and TIMEGM
17127 https://bugs.webkit.org/show_bug.cgi?id=77360
17129 Reviewed by Rob Buis.
17131 Turn on HAVE(TM_GMTOFF), HAVE(TM_ZONE), and HAVE(TIMEGM)
17136 2012-01-30 Gavin Barraclough <barraclough@apple.com>
17138 Speculative Windows build fix.
17140 * assembler/MacroAssemblerCodeRef.h:
17143 2012-01-30 Gavin Barraclough <barraclough@apple.com>
17145 https://bugs.webkit.org/show_bug.cgi?id=77163
17146 MacroAssemblerCodeRef.h uses OS(WIN) instead of OS(WINDOWS)
17148 Rubber stamped by Geoff Garen
17150 * assembler/MacroAssemblerCodeRef.h:
17152 2012-01-30 Gavin Barraclough <barraclough@apple.com>
17154 Unreviewed build fix for interpreter builds.
17156 * bytecode/CodeBlock.cpp:
17157 (JSC::CodeBlock::CodeBlock):
17158 * bytecode/CodeBlock.h:
17160 * interpreter/Interpreter.cpp:
17161 (JSC::Interpreter::privateExecute):
17162 * tools/CodeProfile.cpp:
17163 (JSC::CodeProfile::sample):
17165 2012-01-30 Gavin Barraclough <barraclough@apple.com>
17167 Unreviewed build fix following bug#76855
17169 * JavaScriptCore.exp:
17171 2012-01-30 Michael Saboff <msaboff@apple.com>
17173 CaseFoldingHash::hash() doesn't handle 8 bit strings directly
17174 https://bugs.webkit.org/show_bug.cgi?id=76652
17176 Reviewed by Andreas Kling.
17178 * wtf/text/StringHash.h:
17179 (WTF::CaseFoldingHash::hash): Added 8 bit string code path.
17181 2012-01-30 Michael Saboff <msaboff@apple.com>
17183 stringProtoFuncReplace converts 8 bit strings to 16 bit during replacement
17184 https://bugs.webkit.org/show_bug.cgi?id=76651
17186 Reviewed by Geoffrey Garen.
17188 Made local function substituteBackreferencesSlow a template function
17189 based on character width. Cleaned up getCharacters() in both UString
17190 and StringImpl. Changed getCharacters<UChar> to up convert an 8 bit
17191 string to 16 bits if necessary.
17193 * runtime/StringPrototype.cpp:
17194 (JSC::substituteBackreferencesSlow):
17195 (JSC::substituteBackreferences):
17196 * runtime/UString.h:
17199 * wtf/text/StringImpl.h:
17202 2012-01-30 Gavin Barraclough <barraclough@apple.com>
17205 https://bugs.webkit.org/show_bug.cgi?id=76232
17207 Reviewed by Sam Weinig.
17209 Part 3 - merge op_put_getter & op_put_setter.
17211 Putting these separately is inefficient (and makes future optimiation,
17212 e.g. making GetterSetter immutable) harder. Change to emit a single
17213 op_put_getter_setter bytecode op. Ultimately we should probably be
17214 able to merge this with put direct, to create a common op to initialize
17215 object literal properties.
17217 * bytecode/CodeBlock.cpp:
17218 (JSC::CodeBlock::dump):
17219 * bytecode/Opcode.h:
17222 * bytecompiler/BytecodeGenerator.cpp:
17223 (JSC::BytecodeGenerator::emitPutGetterSetter):
17224 * bytecompiler/BytecodeGenerator.h:
17225 (BytecodeGenerator):
17226 * bytecompiler/NodesCodegen.cpp:
17227 (JSC::PropertyListNode::emitBytecode):
17228 * interpreter/Interpreter.cpp:
17229 (JSC::Interpreter::privateExecute):
17231 (JSC::JIT::privateCompileMainPass):
17234 * jit/JITPropertyAccess.cpp:
17235 (JSC::JIT::emit_op_put_getter_setter):
17236 * jit/JITPropertyAccess32_64.cpp:
17237 (JSC::JIT::emit_op_put_getter_setter):
17238 * jit/JITStubs.cpp:
17239 (JSC::DEFINE_STUB_FUNCTION):
17242 * runtime/JSObject.cpp:
17243 (JSC::JSObject::putDirectVirtual):
17244 (JSC::JSObject::putDirectAccessor):
17246 (JSC::putDescriptor):
17247 (JSC::JSObject::defineOwnProperty):
17248 * runtime/JSObject.h:
17250 (JSC::JSObject::putDirectInternal):
17251 (JSC::JSObject::putDirect):
17252 (JSC::JSObject::putDirectWithoutTransition):
17254 2012-01-30 Michael Saboff <msaboff@apple.com>
17256 Dromaeo tests call parseSimpleLengthValue() on 8 bit strings
17257 https://bugs.webkit.org/show_bug.cgi?id=76649
17259 Reviewed by Geoffrey Garen.
17261 * JavaScriptCore.exp: Added export for charactersToDouble.
17263 2012-01-30 Michael Saboff <msaboff@apple.com>
17265 WebCore decodeEscapeSequences unnecessarily converts 8 bit strings to 16 bit when decoding.
17266 https://bugs.webkit.org/show_bug.cgi?id=76648
17268 Reviewed by Geoffrey Garen.
17270 Added a new overloaded append member that takes a String& argument, an offest
17271 and a length to do direct sub string appending to a StringBuilder.
17273 * wtf/text/StringBuilder.h:
17274 (WTF::StringBuilder::append):
17276 2012-01-29 Zoltan Herczeg <zherczeg@webkit.org>
17278 Custom written CSS lexer
17279 https://bugs.webkit.org/show_bug.cgi?id=70107
17281 Reviewed by Antti Koivisto and Oliver Hunt.
17283 Add new helper functions for the custom written CSS lexer.
17285 * wtf/ASCIICType.h:
17286 (WTF::toASCIILowerUnchecked):
17288 (WTF::isASCIIAlphaCaselessEqual):
17290 2012-01-29 Filip Pizlo <fpizlo@apple.com>
17292 REGRESSION (r105576-r105582): Web Inspector Crash in JSC::JSValue::toString(JSC::ExecState*) const
17293 https://bugs.webkit.org/show_bug.cgi?id=77146
17294 <rdar://problem/10770586>
17296 Reviewed by Oliver Hunt.
17298 The old JIT expects that the result of the last operation is in the lastResultRegister. The DFG JIT is
17299 designed to correctly track the lastResultRegister by looking at SetLocal nodes. However, when the DFG
17300 JIT inlines a code block, it forgets that the inlined code block's result would have been placed in the
17301 lastResultRegister. Hence if we OSR exit on the first node following the end of an inlined code block
17302 that had a return value, and that first node uses the return value, the old JIT will get massively
17303 confused. This patch takes a surgical approach: instead of making the DFG smarter, it makes the old
17304 JIT slightly dumber.
17307 (JSC::JIT::emit_op_call_put_result):
17309 2012-01-29 Filip Pizlo <fpizlo@apple.com>
17311 Build fix for Mac non-x64 platforms.
17313 * tools/CodeProfiling.cpp:
17316 2012-01-28 Gavin Barraclough <barraclough@apple.com>
17319 https://bugs.webkit.org/show_bug.cgi?id=77293
17321 Rubber stamped by Oliver Hunt.
17323 'let' may become a keyword in ES6. We're going to try experimentally reserving it,
17324 to see if this breaks the web.
17326 * parser/Keywords.table:
17328 2012-01-27 Gavin Barraclough <barraclough@apple.com>
17330 Implement a JIT-code aware sampling profiler for JSC
17331 https://bugs.webkit.org/show_bug.cgi?id=76855
17333 Reviewed by Oliver Hunt.
17335 To enable the profiler, set the JSC_CODE_PROFILING environment variable to
17336 1 (no tracing the C stack), 2 (trace one level of C code) or 3 (recursively
17337 trace all samples).
17339 The profiler requires -fomit-frame-pointer to be removed from the build flags.
17341 * JavaScriptCore.exp:
17342 - Removed an export.
17343 * JavaScriptCore.xcodeproj/project.pbxproj:
17345 * bytecode/CodeBlock.cpp:
17346 - For baseline codeblocks, cache the result of canCompileWithDFG.
17347 * bytecode/CodeBlock.h:
17348 - For baseline codeblocks, cache the result of canCompileWithDFG.
17349 * jit/ExecutableAllocator.cpp:
17350 (JSC::ExecutableAllocator::initializeAllocator):
17351 - Notify the profiler when the allocator is created.
17352 (JSC::ExecutableAllocator::allocate):
17353 - Inform the allocated of the ownerUID.
17354 * jit/ExecutableAllocatorFixedVMPool.cpp:
17355 (JSC::ExecutableAllocator::initializeAllocator):
17356 - Notify the profiler when the allocator is created.
17357 (JSC::ExecutableAllocator::allocate):
17358 - Inform the allocated of the ownerUID.
17359 * jit/JITStubs.cpp:
17360 - If profiling, don't mask the return address in JIT code.
17361 (We do so to provide nicer backtraces in debug builds).
17362 * runtime/Completion.cpp:
17364 - Notify the profiler of script evaluations.
17366 * tools/CodeProfile.cpp: Added.
17368 - Helper function to get the name of a symbol in the framework.
17369 (JSC::truncateTrace):
17370 - Helper to truncate traces into methods know to have uninformatively deep stacks.
17371 (JSC::CodeProfile::sample):
17372 - Record a stack trace classifying samples.
17373 (JSC::CodeProfile::report):
17374 - {Print profiler output.
17375 * tools/CodeProfile.h: Added.
17376 - new class, captures a set of samples associated with an evaluated script,
17377 and nested to record samples from subscripts.
17378 * tools/CodeProfiling.cpp: Added.
17379 (JSC::CodeProfiling::profilingTimer):
17380 - callback fired then a timer event occurs.
17381 (JSC::CodeProfiling::notifyAllocator):
17382 - called when the executable allocator is constructed.
17383 (JSC::CodeProfiling::getOwnerUIDForPC):
17384 - helper to lookup the codeblock from an address in JIT code
17385 (JSC::CodeProfiling::begin):
17386 - enter a profiling scope.
17387 (JSC::CodeProfiling::end):
17388 - exit a profiling scope.
17389 * tools/CodeProfiling.h: Added.
17390 - new class, instantialed from Completion to define a profiling scope.
17391 * tools/ProfileTreeNode.h: Added.
17392 - new class, used to construct a tree of samples.
17393 * tools/TieredMMapArray.h: Added.
17394 - new class, a malloc-free vector (can be used while the main thread is suspended,
17395 possibly holding the malloc heap lock).
17396 * wtf/MetaAllocator.cpp:
17397 (WTF::MetaAllocatorHandle::MetaAllocatorHandle):
17398 (WTF::MetaAllocator::allocate):
17399 - Allow allocation handles to track information about their owner.
17400 * wtf/MetaAllocator.h:
17402 - Allow allocation handles to track information about their owner.
17403 * wtf/MetaAllocatorHandle.h:
17404 (MetaAllocatorHandle):
17405 (WTF::MetaAllocatorHandle::ownerUID):
17406 - Allow allocation handles to track information about their owner.
17407 * wtf/OSAllocator.h:
17408 (WTF::OSAllocator::reallocateCommitted):
17409 - reallocate an existing, committed memory allocation.
17411 2012-01-28 Sheriff Bot <webkit.review.bot@gmail.com>
17413 Unreviewed, rolling out r106187.
17414 http://trac.webkit.org/changeset/106187
17415 https://bugs.webkit.org/show_bug.cgi?id=77276
17417 The last rollout was a false charge. (Requested by morrita on
17420 * runtime/ExceptionHelpers.h:
17421 (InterruptedExecutionError):
17422 * runtime/JSBoundFunction.h:
17424 * runtime/RegExp.h:
17426 * runtime/RegExpMatchesArray.h:
17427 (RegExpMatchesArray):
17429 2012-01-28 Sheriff Bot <webkit.review.bot@gmail.com>
17431 Unreviewed, rolling out r106151.
17432 http://trac.webkit.org/changeset/106151
17433 https://bugs.webkit.org/show_bug.cgi?id=77275
17435 may break windows build (Requested by morrita on #webkit).
17437 * runtime/ExceptionHelpers.h:
17438 (InterruptedExecutionError):
17439 * runtime/JSBoundFunction.h:
17441 * runtime/RegExp.h:
17443 * runtime/RegExpMatchesArray.h:
17444 (RegExpMatchesArray):
17446 2012-01-28 Filip Pizlo <fpizlo@apple.com>
17448 GC invoked while doing an old JIT property storage reallocation may lead
17449 to an object that refers to a dead structure
17450 https://bugs.webkit.org/show_bug.cgi?id=77273
17451 <rdar://problem/10770565>
17453 Reviewed by Gavin Barraclough.
17455 The put_by_id transition was already saving the old structure by virtue of
17456 having the object on the stack, so that wasn't going to get deleted. But the
17457 new structure was unprotected in the transition. I've now changed the
17458 transition code to save the new structure, ensuring that the GC will know it
17459 to be marked if invoked from within put_by_id_transition_realloc.
17461 * jit/JITPropertyAccess.cpp:
17462 (JSC::JIT::privateCompilePutByIdTransition):
17463 * jit/JITPropertyAccess32_64.cpp:
17464 (JSC::JIT::privateCompilePutByIdTransition):
17465 * jit/JITStubs.cpp:
17466 (JSC::DEFINE_STUB_FUNCTION):
17471 2012-01-27 Sheriff Bot <webkit.review.bot@gmail.com>
17473 Unreviewed, rolling out r106167.
17474 http://trac.webkit.org/changeset/106167
17475 https://bugs.webkit.org/show_bug.cgi?id=77264
17477 broke LayoutTests/fast/js/string-capitalization.html
17478 (Requested by msaboff on #webkit).
17480 * runtime/StringPrototype.cpp:
17481 (JSC::stringProtoFuncToLowerCase):
17482 (JSC::stringProtoFuncToUpperCase):
17483 * wtf/text/StringImpl.cpp:
17484 (WTF::StringImpl::upper):
17486 2012-01-27 Filip Pizlo <fpizlo@apple.com>
17488 Build fix for interpreter platforms.
17490 * interpreter/AbstractPC.cpp:
17491 (JSC::AbstractPC::AbstractPC):
17493 2012-01-27 Michael Saboff <msaboff@apple.com>
17495 StringProtoFuncToUpperCase should call StringImpl::upper similar to StringProtoToLowerCase
17496 https://bugs.webkit.org/show_bug.cgi?id=76647
17498 Reviewed by Geoffrey Garen.
17500 Changed stringProtoFuncToUpperCase to call StringImpl::upper() is a manor similar
17501 to stringProtoFuncToLowerCase(). Fixed StringImpl::upper() to handle the two
17502 8 bit characters that when converted to upper case become 16 bit characters.
17504 * runtime/StringPrototype.cpp:
17505 (JSC::stringProtoFuncToLowerCase): Removed extra trailing whitespace.
17506 (JSC::stringProtoFuncToUpperCase):
17507 * wtf/text/StringImpl.cpp:
17508 (WTF::StringImpl::upper):
17510 2012-01-27 Hajime Morita <morrita@google.com>
17512 [JSC] ThunkGenerators.cpp should hide its asm-defined symbols
17513 https://bugs.webkit.org/show_bug.cgi?id=77244
17515 Reviewed by Filip Pizlo.
17517 * jit/ThunkGenerators.cpp: Added HIDE_SYMBOLS()
17518 * wtf/InlineASM.h: Moved some duplicated macros from ThunkGenerators.cpp
17520 2012-01-27 Simon Hausmann <simon.hausmann@nokia.com>
17522 [JSC] Asm-originated symbols should be marked as hidden
17523 https://bugs.webkit.org/show_bug.cgi?id=77150
17525 Reviewed by Filip Pizlo.
17527 * dfg/DFGOperations.cpp: The HIDE_SYMBOLS macros were present in the CPU(ARM) preprocessor branches,
17528 but they were missing in the CPU(X86) and the CPU(X86_64) cases.
17530 2012-01-27 MORITA Hajime <morrita@google.com>
17532 [JSC] Some JS_EXPORTDATA may not be necessary.
17533 https://bugs.webkit.org/show_bug.cgi?id=77145
17535 Reviewed by Darin Adler.
17537 Removed JS_EXPORTDATA attributes whose attributing symbols are
17538 not exported on Mac port.
17540 * runtime/ExceptionHelpers.h:
17541 (InterruptedExecutionError):
17542 * runtime/JSBoundFunction.h:
17544 * runtime/RegExp.h:
17546 * runtime/RegExpMatchesArray.h:
17547 (RegExpMatchesArray):
17549 2012-01-27 MORITA Hajime <morrita@google.com>
17551 [WTF] WTFString.h has some extra JS_EXPORT_PRIVATEs
17552 https://bugs.webkit.org/show_bug.cgi?id=77113
17554 Reviewed by Darin Adler.
17556 * wtf/text/WTFString.h: Removed some WTF_EXPORT_PRIVATE attributes which we don't need to export.
17558 2012-01-27 Zeno Albisser <zeno@webkit.org>
17560 [Qt][Mac] Build fails after adding ICU support (r105997).
17561 https://bugs.webkit.org/show_bug.cgi?id=77118
17563 Use Apple code path for unicode date formats on mac.
17565 Reviewed by Tor Arne Vestbø.
17567 * runtime/DatePrototype.cpp:
17570 2012-01-27 Carlos Garcia Campos <cgarcia@igalia.com>
17572 [GTK] Add a GKeyFile especialization to GOwnPtr
17573 https://bugs.webkit.org/show_bug.cgi?id=77191
17575 Reviewed by Martin Robinson.
17577 * wtf/gobject/GOwnPtr.cpp:
17578 (WTF::GKeyFile): Implement freeOwnedGPtr for GKeyFile.
17579 * wtf/gobject/GOwnPtr.h: Add GKeyFile template.
17580 * wtf/gobject/GTypedefs.h: Add forward declaration for GKeyFile.
17582 2012-01-25 Yury Semikhatsky <yurys@chromium.org>
17584 Web Inspector: should be possible to open function declaration from script popover
17585 https://bugs.webkit.org/show_bug.cgi?id=76913
17587 Added display function name and source location to the popover in scripts panel.
17588 Now when a function is hovered user can navigate to its definition.
17590 Reviewed by Pavel Feldman.
17592 * JavaScriptCore/JavaScriptCore.exp
17593 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
17594 * runtime/JSFunction.h:
17597 2012-01-26 Kevin Ollivier <kevino@theolliviers.com>
17599 [wx] Unreviewed. Build fix, wx uses the Mac ICU headers so we must match Mac behavior.
17601 * runtime/DatePrototype.cpp:
17604 2012-01-26 Mark Hahnenberg <mhahnenberg@apple.com>
17606 Merge AllocationSpace into MarkedSpace
17607 https://bugs.webkit.org/show_bug.cgi?id=77116
17609 Reviewed by Geoffrey Garen.
17611 Merging AllocationSpace and MarkedSpace in preparation for future refactoring/enhancement to
17612 MarkedSpace allocation.
17615 * GNUmakefile.list.am:
17616 * JavaScriptCore.exp:
17617 * JavaScriptCore.gypi:
17618 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
17619 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
17620 * JavaScriptCore.xcodeproj/project.pbxproj:
17622 * heap/AllocationSpace.cpp: Removed.
17623 * heap/AllocationSpace.h: Removed.
17624 * heap/BumpSpace.h:
17627 (JSC::Heap::objectSpace):
17630 * heap/HeapBlock.h:
17632 * heap/MarkedSpace.cpp:
17633 (JSC::MarkedSpace::tryAllocateHelper):
17635 (JSC::MarkedSpace::tryAllocate):
17636 (JSC::MarkedSpace::allocateSlowCase):
17637 (JSC::MarkedSpace::allocateBlock):
17638 (JSC::MarkedSpace::freeBlocks):
17640 (JSC::TakeIfUnmarked::TakeIfUnmarked):
17641 (JSC::TakeIfUnmarked::operator()):
17642 (JSC::TakeIfUnmarked::returnValue):
17643 (JSC::MarkedSpace::shrink):
17644 (GatherDirtyCells):
17645 (JSC::GatherDirtyCells::returnValue):
17646 (JSC::GatherDirtyCells::GatherDirtyCells):
17647 (JSC::GatherDirtyCells::operator()):
17648 (JSC::MarkedSpace::gatherDirtyCells):
17649 * heap/MarkedSpace.h:
17651 (JSC::MarkedSpace::blocks):
17652 (JSC::MarkedSpace::forEachCell):
17654 (JSC::MarkedSpace::allocate):
17656 2012-01-26 Oliver Hunt <oliver@apple.com>
17659 <rdar://problem/10703671> MSVC generates bad code for enum compare.
17663 Make bitfield large enough to work around MSVC's desire to make enums
17666 * bytecode/CallLinkInfo.h:
17669 2012-01-26 Filip Pizlo <fpizlo@apple.com>
17671 All DFG helpers that may call out to arbitrary JS code must know where they
17672 were called from due to inlining and call stack walking
17673 https://bugs.webkit.org/show_bug.cgi?id=77070
17674 <rdar://problem/10750834>
17676 Reviewed by Geoff Garen.
17678 Changed the DFG to always record a code origin index in the tag of the argument
17679 count (which we previously left blank for the benefit of LLInt, but is still
17680 otherwise unused by the DFG), so that if we ever need to walk the stack accurately
17681 we know where to start. In particular, if the current ExecState* points several
17682 semantic call frames away from the true semantic call frame because we had
17683 performed inlining, having the code origin index recorded means that we can reify
17684 those call frames as necessary to give runtime/library code an accurate view of
17685 the current JS state.
17687 This required several large but mechanical changes:
17689 - Calling a function from the DFG now plants a store32 instruction to store the
17690 code origin index. But the indices of code origins were previously picked by
17691 the DFG::JITCompiler after code generation completed. I changed this somewhat;
17692 even though the code origins are put into the CodeBlock after code gen, the
17693 code gen now knows a priori what their indices will be. Extensive assertions
17694 are in place to ensure that the two don't get out of sync, in the form of the
17695 DFG::CallBeginToken. Note that this mechanism has almost no effect on JS calls;
17696 those don't need the code origin index set in the call frame because we can get
17697 it by doing a binary search on the return PC.
17699 - Stack walking now always calls trueCallFrame() first before beginning the walk,
17700 since even the top call frame may be wrong. It still calls trueCallerFrame() as
17701 before to get to the next frame, though trueCallerFrame() is now mostly a
17702 wrapper around callerFrame()->trueCallFrame().
17704 - Because the mechanism for getting the code origin of a call frame is bimodal
17705 (either the call frame knows its code origin because the code origin index was
17706 set, or it's necessary to use the callee frame's return PC), I put in extra
17707 mechanisms to determine whether your caller, or your callee, corresponds to
17708 a call out of C++ code. Previously we just had the host call flag, but this is
17709 insufficient as it does not cover the case of someone calling JSC::call(). But
17710 luckily we can determine this just by looking at the return PC: if the return
17711 PC is in range of the ctiTrampiline, then two things are true: this call
17712 frame's PC will tell you nothing about where you came from in your caller, and
17713 the caller already knows where it's at because it must have set the code origin
17714 index (unless it's not DFG code, in which case we don't care because there is
17715 no inlining to worry about).
17717 - During testing this revealed a simple off-by-one goof in DFG::ByteCodeParser's
17718 inlining code, so I fixed it.
17720 - Finally because I was tired of doing random #if's for checking if I should be
17721 passing around an Instruction* or a ReturnAddressPtr, I created a class called
17722 AbstractPC that holds whatever notion of a PC is appropriate for the current
17723 execution environment. It's designed to work gracefully even if both the
17724 interpreter and the JIT are compiled in, and should integrate nicely with the
17727 This is neutral on all benchmarks and fixes some nasty corner-case regressions of
17728 evil code that uses combinations of getters/setters and function.arguments.
17731 * GNUmakefile.list.am:
17732 * JavaScriptCore.exp:
17733 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
17734 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
17735 * JavaScriptCore.xcodeproj/project.pbxproj:
17737 * bytecode/CodeBlock.h:
17738 (JSC::CodeBlock::codeOrigin):
17740 * dfg/DFGByteCodeParser.cpp:
17741 (JSC::DFG::ByteCodeParser::handleInlining):
17742 * dfg/DFGJITCompiler.cpp:
17743 (JSC::DFG::JITCompiler::link):
17744 * dfg/DFGJITCompiler.h:
17746 (JSC::DFG::CallBeginToken::CallBeginToken):
17747 (JSC::DFG::CallBeginToken::assertCodeOriginIndex):
17748 (JSC::DFG::CallBeginToken::assertNoCodeOriginIndex):
17750 (JSC::DFG::CallExceptionRecord::CallExceptionRecord):
17751 (CallExceptionRecord):
17752 (JSC::DFG::JITCompiler::JITCompiler):
17754 (JSC::DFG::JITCompiler::nextCallBeginToken):
17755 (JSC::DFG::JITCompiler::beginCall):
17756 (JSC::DFG::JITCompiler::notifyCall):
17757 (JSC::DFG::JITCompiler::addExceptionCheck):
17758 (JSC::DFG::JITCompiler::addFastExceptionCheck):
17759 * dfg/DFGOperations.cpp:
17761 * dfg/DFGRepatch.cpp:
17762 (JSC::DFG::tryBuildGetByIDList):
17763 * dfg/DFGSpeculativeJIT.h:
17764 (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheck):
17765 * dfg/DFGSpeculativeJIT32_64.cpp:
17766 (JSC::DFG::SpeculativeJIT::emitCall):
17767 * dfg/DFGSpeculativeJIT64.cpp:
17768 (JSC::DFG::SpeculativeJIT::emitCall):
17769 * interpreter/AbstractPC.cpp: Added.
17771 (JSC::AbstractPC::AbstractPC):
17772 * interpreter/AbstractPC.h: Added.
17775 (JSC::AbstractPC::AbstractPC):
17776 (JSC::AbstractPC::hasJITReturnAddress):
17777 (JSC::AbstractPC::jitReturnAddress):
17778 (JSC::AbstractPC::hasInterpreterReturnAddress):
17779 (JSC::AbstractPC::interpreterReturnAddress):
17780 (JSC::AbstractPC::isSet):
17781 (JSC::AbstractPC::operator!):
17783 * interpreter/CallFrame.cpp:
17785 (JSC::CallFrame::trueCallFrame):
17786 (JSC::CallFrame::trueCallerFrame):
17787 * interpreter/CallFrame.h:
17788 (JSC::ExecState::abstractReturnPC):
17789 (JSC::ExecState::codeOriginIndexForDFGWithInlining):
17791 (JSC::ExecState::trueCallFrame):
17792 (JSC::ExecState::trueCallFrameFromVMCode):
17793 * interpreter/Interpreter.cpp:
17794 (JSC::Interpreter::retrieveArgumentsFromVMCode):
17795 (JSC::Interpreter::retrieveCallerFromVMCode):
17796 (JSC::Interpreter::findFunctionCallFrameFromVMCode):
17797 * interpreter/Interpreter.h:
17800 * jit/JITStubs.cpp:
17805 (JSC::returnAddressIsInCtiTrampoline):
17806 * runtime/JSFunction.cpp:
17807 (JSC::JSFunction::argumentsGetter):
17808 (JSC::JSFunction::callerGetter):
17809 (JSC::JSFunction::getOwnPropertyDescriptor):
17811 2012-01-26 Peter Varga <pvarga@webkit.org>
17813 Fix build when VERBOSE_SPECULATION_FAILURE is enabled in DFG
17814 https://bugs.webkit.org/show_bug.cgi?id=77104
17816 Reviewed by Filip Pizlo.
17818 * dfg/DFGOperations.cpp:
17821 2012-01-26 Michael Saboff <msaboff@apple.com>
17823 String::latin1() should take advantage of 8 bit strings
17824 https://bugs.webkit.org/show_bug.cgi?id=76646
17826 Reviewed by Geoffrey Garen.
17828 * wtf/text/WTFString.cpp:
17829 (WTF::String::latin1): For 8 bit strings, use existing buffer
17830 without conversion.
17832 2012-01-26 Michael Saboff <msaboff@apple.com>
17834 Dromaeo tests usage of StringImpl find routines cause 8->16 bit conversions
17835 https://bugs.webkit.org/show_bug.cgi?id=76645
17837 Reviewed by Geoffrey Garen.
17839 * wtf/text/StringImpl.cpp:
17840 (WTF::equalIgnoringCase): New LChar version.
17841 (WTF::findInner): New helper function.
17842 (WTF::StringImpl::find): Added 8 bit path.
17843 (WTF::reverseFindInner): New helper funciton.
17844 (WTF::StringImpl::reverseFind): Added 8 bit path.
17845 (WTF::StringImpl::reverseFindIgnoringCase): Added 8 bit path.
17846 * wtf/text/StringImpl.h:
17849 2012-01-26 Csaba Osztrogonác <ossy@webkit.org>
17851 [Qt][Win] One more speculative buildfix after r105970.
17853 * JavaScriptCore.pri:
17855 2012-01-26 Csaba Osztrogonác <ossy@webkit.org>
17857 [Qt][Win] Speculative buildfix after r105970.
17859 * JavaScriptCore.pri: Link lgdi for DeleteObject() and DeleteDC().
17861 2012-01-26 Sheriff Bot <webkit.review.bot@gmail.com>
17863 Unreviewed, rolling out r105982.
17864 http://trac.webkit.org/changeset/105982
17865 https://bugs.webkit.org/show_bug.cgi?id=77090
17867 breaks the world (Requested by WildFox on #webkit).
17869 * wtf/MainThread.cpp:
17872 * wtf/mac/MainThreadMac.mm:
17874 (WTF::registerGCThread):
17875 (WTF::isMainThreadOrGCThread):
17877 2012-01-26 Roland Takacs <takacs.roland@stud.u-szeged.hu>
17879 [Qt] GC should be parallel on Qt platform
17880 https://bugs.webkit.org/show_bug.cgi?id=73309
17882 Reviewed by Zoltan Herczeg.
17884 These changes made the parallel gc feature available for Qt port.
17885 The implementation of "registerGCThread" and "isMainThreadOrGCThread"
17886 is moved from MainThreadMac.mm to the common MainThread.cpp to make
17887 them available for other platforms.
17889 Measurement results:
17890 V8 speed-up: 1.071x as fast [From: 746.1ms To: 696.4ms ]
17891 WindScorpion speed-up: 1.082x as fast [From: 3490.4ms To: 3226.7ms]
17892 V8 Splay speed-up: 1.158x as fast [From: 145.8ms To: 125.9ms ]
17894 Tested on Intel(R) Core(TM) i5-2320 CPU @ 3.00GHz with 4-core.
17896 * wtf/MainThread.cpp:
17898 (WTF::registerGCThread):
17899 (WTF::isMainThreadOrGCThread):
17901 * wtf/mac/MainThreadMac.mm:
17903 2012-01-26 Andy Estes <aestes@apple.com>
17905 REGRESSION (r105555): Incorrect use of OS() macro breaks OwnPtr when used with Win32 data types
17906 https://bugs.webkit.org/show_bug.cgi?id=77073
17908 Reviewed by Ryosuke Niwa.
17910 r105555 changed PLATFORM(WIN) to OS(WIN), but WTF_OS_WIN isn't defined.
17911 This should have been changed to OS(WINDOWS). This causes the
17912 preprocessor to strip out Win32 data type overrides for deleteOwnedPtr,
17913 causing allocations made by Win32 to be deleted by fastmalloc.
17915 * wtf/OwnPtrCommon.h:
17916 (WTF): Use OS(WINDOWS) instead of OS(WIN).
17918 2012-01-25 Mark Rowe <mrowe@apple.com>
17920 Attempted Mac build fix after r105939.
17922 * runtime/DatePrototype.cpp: Don't #include unicode/udat.h on Mac or iOS.
17923 It isn't used on these platforms and isn't available in the ICU headers
17926 2012-01-25 Mark Rowe <mrowe@apple.com>
17928 Build in to an alternate location when USE_STAGING_INSTALL_PATH is set.
17930 <rdar://problem/10609417> Adopt USE_STAGING_INSTALL_PATH
17932 Reviewed by David Kilzer.
17934 * Configurations/Base.xcconfig: Define NORMAL_JAVASCRIPTCORE_FRAMEWORKS_DIR, which contains
17935 the path where JavaScriptCore is normally installed. Update JAVASCRIPTCORE_FRAMEWORKS_DIR
17936 to point to the staged frameworks directory when USE_STAGING_INSTALL_PATH is set.
17937 * Configurations/JavaScriptCore.xcconfig: Always set the framework's install name based on
17938 the normal framework location. This prevents an incorrect install name from being used when
17939 installing in to the staged frameworks directory.
17941 2012-01-25 Eli Fidler <efidler@rim.com>
17943 Implement Date.toLocaleString() using ICU
17944 https://bugs.webkit.org/show_bug.cgi?id=76714
17946 Reviewed by Darin Adler.
17948 * runtime/DatePrototype.cpp:
17949 (JSC::formatLocaleDate):
17951 2012-01-25 Hajime Morita <morrita@google.com>
17953 ENABLE_SHADOW_DOM should be available via build-webkit --shadow-dom
17954 https://bugs.webkit.org/show_bug.cgi?id=76863
17956 Reviewed by Dimitri Glazkov.
17958 Added a feature flag.
17960 * Configurations/FeatureDefines.xcconfig:
17962 2012-01-25 Yong Li <yoli@rim.com>
17964 [BlackBerry] Implement OSAllocator::commit/decommit.
17965 BlackBerry port should support virtual memory decommiting.
17966 https://bugs.webkit.org/show_bug.cgi?id=77013
17968 Reviewed by Rob Buis.
17970 * wtf/OSAllocatorPosix.cpp:
17971 (WTF::OSAllocator::reserveUncommitted):
17972 (WTF::OSAllocator::commit):
17973 (WTF::OSAllocator::decommit):
17976 2012-01-24 Oliver Hunt <oliver@apple.com>
17978 Make DFG update topCallFrame
17979 https://bugs.webkit.org/show_bug.cgi?id=76969
17981 Reviewed by Filip Pizlo.
17983 Add NativeCallFrameTracer to manage topCallFrame assignment
17984 in the DFG operations, and make use of it.
17986 * dfg/DFGOperations.cpp:
17987 (JSC::DFG::operationPutByValInternal):
17989 * interpreter/Interpreter.h:
17991 (NativeCallFrameTracer):
17992 (JSC::NativeCallFrameTracer::NativeCallFrameTracer):
17994 2012-01-24 Filip Pizlo <fpizlo@apple.com>
17996 Inlining breaks call frame walking when the walking is done from outside the inlinee,
17997 but inside a code block that had inlining
17998 https://bugs.webkit.org/show_bug.cgi?id=76978
17999 <rdar://problem/10720904>
18001 Reviewed by Oliver Hunt.
18003 * bytecode/CodeBlock.h:
18004 (JSC::CodeBlock::codeOriginForReturn):
18005 * interpreter/CallFrame.cpp:
18006 (JSC::CallFrame::trueCallerFrame):
18008 2012-01-24 Gavin Barraclough <barraclough@apple.com>
18010 https://bugs.webkit.org/show_bug.cgi?id=76855
18011 Implement a JIT-code aware sampling profiler for JSC
18013 Reviewed by Oliver Hunt.
18015 Add support to MetaAllocator.cpp to track all live handles in a map,
18016 allowing lookup based on any address within the allocation.
18018 * wtf/MetaAllocator.cpp:
18019 (WTF::MetaAllocatorTracker::notify):
18020 (WTF::MetaAllocatorTracker::release):
18021 - Track live handle objects in a map.
18022 (WTF::MetaAllocator::release):
18023 - Removed support for handles with null m_allocator (no longer used).
18024 - Notify the tracker of handles being released.
18025 (WTF::MetaAllocatorHandle::~MetaAllocatorHandle):
18026 - Moved functionality out into MetaAllocator::release.
18027 (WTF::MetaAllocatorHandle::shrink):
18028 - Removed support for handles with null m_allocator (no longer used).
18029 (WTF::MetaAllocator::MetaAllocator):
18030 - Initialize m_tracker.
18031 (WTF::MetaAllocator::allocate):
18032 - Notify the tracker of new allocations.
18033 * wtf/MetaAllocator.h:
18034 (WTF::MetaAllocatorTracker::find):
18035 - Lookup a MetaAllocatorHandle based on an address inside the allocation.
18036 (WTF::MetaAllocator::trackAllocations):
18037 - Register a callback object to track allocation state.
18038 * wtf/MetaAllocatorHandle.h:
18039 - Remove unused createSelfManagedHandle/constructor.
18040 (WTF::MetaAllocatorHandle::key):
18041 - Added, for use in RedBlackTree.
18043 2012-01-24 Mark Hahnenberg <mhahnenberg@apple.com>
18045 Use copying collector for out-of-line JSObject property storage
18046 https://bugs.webkit.org/show_bug.cgi?id=76665
18048 Reviewed by Geoffrey Garen.
18050 * runtime/JSObject.cpp:
18051 (JSC::JSObject::visitChildren): Changed to use copyAndAppend whenever the property storage is out-of-line.
18052 Also added a temporary variable to avoid warnings from GCC.
18053 (JSC::JSObject::allocatePropertyStorage): Changed to use tryAllocateStorage/tryReallocateStorage as opposed to
18054 operator new. Also added a temporary variable to avoid warnings from GCC.
18055 * runtime/JSObject.h:
18057 2012-01-24 Geoffrey Garen <ggaren@apple.com>
18059 JSValue::toString() should return a JSString* instead of a UString
18060 https://bugs.webkit.org/show_bug.cgi?id=76861
18062 Fixed two failing layout tests after my last patch.
18064 Reviewed by Gavin Barraclough.
18066 * runtime/ArrayPrototype.cpp:
18067 (JSC::arrayProtoFuncSort): Call value() after calling toString(), as
18068 in all other cases.
18070 I missed this case because the JSString* type has a valid operator<,
18071 so the compiler didn't complain.
18073 2012-01-24 Kenichi Ishibashi <bashi@chromium.org>
18075 [V8] Add Uint8ClampedArray support
18076 https://bugs.webkit.org/show_bug.cgi?id=76803
18078 Reviewed by Kenneth Russell.
18080 * wtf/ArrayBufferView.h:
18081 (WTF::ArrayBufferView::isUnsignedByteClampedArray): Added.
18082 * wtf/Uint8ClampedArray.h:
18083 (WTF::Uint8ClampedArray::isUnsignedByteClampedArray): Overridden to return true.
18085 2012-01-23 Carlos Garcia Campos <cgarcia@igalia.com>
18087 [GTK] Add WebKitDownload to WebKit2 GTK+ API
18088 https://bugs.webkit.org/show_bug.cgi?id=72949
18090 Reviewed by Martin Robinson.
18092 * wtf/gobject/GOwnPtr.cpp:
18093 (WTF::GTimer): Use g_timer_destroy() to free a GTimer.
18094 * wtf/gobject/GOwnPtr.h: Add GTimer template.
18095 * wtf/gobject/GTypedefs.h: Add GTimer forward declaration.
18097 2012-01-24 Ilya Tikhonovsky <loislo@chromium.org>
18099 Unreviewed build fix for Qt LinuxSH4 build after r105698.
18101 * interpreter/Interpreter.cpp:
18102 (JSC::Interpreter::privateExecute):
18104 2012-01-23 Geoffrey Garen <ggaren@apple.com>
18106 JSValue::toString() should return a JSString* instead of a UString
18107 https://bugs.webkit.org/show_bug.cgi?id=76861
18109 Reviewed by Gavin Barraclough.
18111 This makes the common case -- toString() on a string -- faster and
18112 inline-able. (Not a measureable speedup, but we can now remove a bunch
18113 of duplicate hand-rolled code for this optimization.)
18115 This also clarifies the boundary between "C++ strings" and "JS strings".
18117 In all cases other than true, false, null, undefined, and multi-digit
18118 numbers, the JS runtime was just retrieving a UString from a JSString,
18119 so returning a JSString* is strictly better. In the other cases, we can
18120 optimize to avoid creating a new JSString if we care to, but it doesn't
18121 seem to be a big deal.
18123 * JavaScriptCore.exp: Export!
18130 (functionCheckSyntax):
18133 * API/JSValueRef.cpp:
18134 (JSValueToStringCopy):
18135 * bytecode/CodeBlock.cpp:
18136 (JSC::valueToSourceString): Call value() after calling toString(), to
18137 convert from "JS string" (JSString*) to "C++ string" (UString), since
18138 toString() no longer returns a "C++ string".
18140 * dfg/DFGOperations.cpp:
18141 (JSC::DFG::operationValueAddNotNumber):
18142 * jit/JITStubs.cpp:
18143 (op_add): Updated for removal of toPrimitiveString():
18144 all '+' operands can use toString(), except for object operands, which
18145 need to take a slow path to call toPrimitive().
18147 * runtime/ArrayPrototype.cpp:
18148 (JSC::arrayProtoFuncToString):
18149 (JSC::arrayProtoFuncToLocaleString):
18150 (JSC::arrayProtoFuncJoin):
18151 (JSC::arrayProtoFuncPush):
18152 * runtime/CommonSlowPaths.h:
18153 (JSC::CommonSlowPaths::opIn):
18154 * runtime/DateConstructor.cpp:
18156 * runtime/DatePrototype.cpp:
18157 (JSC::formatLocaleDate): Call value() after calling toString(), as above.
18159 * runtime/ErrorInstance.h:
18160 (JSC::ErrorInstance::create): Simplified down to one canonical create()
18161 function, to make string handling easier.
18163 * runtime/ErrorPrototype.cpp:
18164 (JSC::errorProtoFuncToString):
18165 * runtime/ExceptionHelpers.cpp:
18166 (JSC::createInvalidParamError):
18167 (JSC::createNotAConstructorError):
18168 (JSC::createNotAFunctionError):
18169 (JSC::createNotAnObjectError):
18170 * runtime/FunctionConstructor.cpp:
18171 (JSC::constructFunctionSkippingEvalEnabledCheck):
18172 * runtime/FunctionPrototype.cpp:
18173 (JSC::functionProtoFuncBind):
18174 * runtime/JSArray.cpp:
18175 (JSC::JSArray::sort): Call value() after calling toString(), as above.
18177 * runtime/JSCell.cpp:
18178 * runtime/JSCell.h: Removed JSCell::toString() because JSValue does this
18179 job now. Doing it in JSCell is slower (requires extra type checking), and
18180 creates the misimpression that language-defined toString() behavior is
18181 an implementation detail of JSCell.
18183 * runtime/JSGlobalObjectFunctions.cpp:
18186 (JSC::globalFuncEval):
18187 (JSC::globalFuncParseInt):
18188 (JSC::globalFuncParseFloat):
18189 (JSC::globalFuncEscape):
18190 (JSC::globalFuncUnescape): Call value() after calling toString(), as above.
18192 * runtime/JSONObject.cpp:
18193 (JSC::unwrapBoxedPrimitive):
18194 (JSC::Stringifier::Stringifier):
18195 (JSC::JSONProtoFuncParse): Removed some manual optimization that toString()
18198 * runtime/JSObject.cpp:
18199 (JSC::JSObject::toString):
18200 * runtime/JSObject.h: Updated to return JSString*.
18202 * runtime/JSString.cpp:
18203 * runtime/JSString.h:
18204 (JSC::JSValue::toString): Removed, since I removed JSCell::toString().
18206 * runtime/JSValue.cpp:
18207 (JSC::JSValue::toStringSlowCase): Removed toPrimitiveString(), and re-
18208 spawned toStringSlowCase() from its zombie corpse, since toPrimitiveString()
18209 basically did what we want all the time. (Note that the toPrimitive()
18210 preference changes from NoPreference to PreferString, because that's
18211 how ToString is defined in the language. op_add does not want this behavior.)
18213 * runtime/NumberPrototype.cpp:
18214 (JSC::numberProtoFuncToString):
18215 (JSC::numberProtoFuncToLocaleString): A little simpler, now that toString()
18216 returns a JSString*.
18218 * runtime/ObjectConstructor.cpp:
18219 (JSC::objectConstructorGetOwnPropertyDescriptor):
18220 (JSC::objectConstructorDefineProperty):
18221 * runtime/ObjectPrototype.cpp:
18222 (JSC::objectProtoFuncHasOwnProperty):
18223 (JSC::objectProtoFuncDefineGetter):
18224 (JSC::objectProtoFuncDefineSetter):
18225 (JSC::objectProtoFuncLookupGetter):
18226 (JSC::objectProtoFuncLookupSetter):
18227 (JSC::objectProtoFuncPropertyIsEnumerable): More calls to value(), as above.
18229 * runtime/Operations.cpp:
18230 (JSC::jsAddSlowCase): Need to check for object before taking the toString()
18231 fast path becuase adding an object to a string requires calling toPrimitive()
18232 on the object, not toString(). (They differ in their preferred conversion
18235 * runtime/Operations.h:
18237 (JSC::jsStringFromArguments): This code gets simpler, now that toString()
18238 does the right thing.
18240 (JSC::jsAdd): Now checks for object, just like jsAddSlowCase().
18242 * runtime/RegExpConstructor.cpp:
18243 (JSC::setRegExpConstructorInput):
18244 (JSC::constructRegExp):
18245 * runtime/RegExpObject.cpp:
18246 (JSC::RegExpObject::match):
18247 * runtime/RegExpPrototype.cpp:
18248 (JSC::regExpProtoFuncCompile):
18249 (JSC::regExpProtoFuncToString): More calls to value(), as above.
18251 * runtime/StringConstructor.cpp:
18252 (JSC::constructWithStringConstructor):
18253 (JSC::callStringConstructor): This code gets simpler, now that toString()
18254 does the right thing.
18256 * runtime/StringPrototype.cpp:
18257 (JSC::replaceUsingRegExpSearch):
18258 (JSC::replaceUsingStringSearch):
18259 (JSC::stringProtoFuncReplace):
18260 (JSC::stringProtoFuncCharAt):
18261 (JSC::stringProtoFuncCharCodeAt):
18262 (JSC::stringProtoFuncConcat):
18263 (JSC::stringProtoFuncIndexOf):
18264 (JSC::stringProtoFuncLastIndexOf):
18265 (JSC::stringProtoFuncMatch):
18266 (JSC::stringProtoFuncSearch):
18267 (JSC::stringProtoFuncSlice):
18268 (JSC::stringProtoFuncSplit):
18269 (JSC::stringProtoFuncSubstr):
18270 (JSC::stringProtoFuncSubstring):
18271 (JSC::stringProtoFuncToLowerCase):
18272 (JSC::stringProtoFuncToUpperCase):
18273 (JSC::stringProtoFuncLocaleCompare):
18274 (JSC::stringProtoFuncBig):
18275 (JSC::stringProtoFuncSmall):
18276 (JSC::stringProtoFuncBlink):
18277 (JSC::stringProtoFuncBold):
18278 (JSC::stringProtoFuncFixed):
18279 (JSC::stringProtoFuncItalics):
18280 (JSC::stringProtoFuncStrike):
18281 (JSC::stringProtoFuncSub):
18282 (JSC::stringProtoFuncSup):
18283 (JSC::stringProtoFuncFontcolor):
18284 (JSC::stringProtoFuncFontsize):
18285 (JSC::stringProtoFuncAnchor):
18286 (JSC::stringProtoFuncLink):
18287 (JSC::trimString): Some of this code gets simpler, now that toString()
18288 does the right thing. More calls to value(), as above.
18290 2012-01-23 Luke Macpherson <macpherson@chromium.org>
18292 Unreviewed, rolling out r105676.
18293 http://trac.webkit.org/changeset/105676
18294 https://bugs.webkit.org/show_bug.cgi?id=76665
18296 Breaks build on max due to compile warnings.
18298 * runtime/JSObject.cpp:
18299 (JSC::JSObject::finalize):
18300 (JSC::JSObject::visitChildren):
18301 (JSC::JSObject::allocatePropertyStorage):
18302 * runtime/JSObject.h:
18304 2012-01-23 Mark Hahnenberg <mhahnenberg@apple.com>
18306 Use copying collector for out-of-line JSObject property storage
18307 https://bugs.webkit.org/show_bug.cgi?id=76665
18309 Reviewed by Geoffrey Garen.
18311 * runtime/JSObject.cpp:
18312 (JSC::JSObject::visitChildren): Changed to use copyAndAppend whenever the property storage is out-of-line.
18313 (JSC::JSObject::allocatePropertyStorage): Changed to use tryAllocateStorage/tryReallocateStorage as opposed to
18315 * runtime/JSObject.h:
18317 2012-01-23 Brian Weinstein <bweinstein@apple.com>
18319 More build fixing after r105646.
18321 * JavaScriptCore.exp:
18323 2012-01-23 Gavin Barraclough <barraclough@apple.com>
18325 https://bugs.webkit.org/show_bug.cgi?id=76855
18326 Implement a JIT-code aware sampling profiler for JSC
18328 Reviewed by Geoff Garen.
18330 Step 2: generalize RedBlackTree. The profiler is going to want tio use
18331 a RedBlackTree, allow this class to work with subclasses of
18332 RedBlackTree::Node, Node should not need to know the names of the m_key
18333 and m_value fields (the subclass can provide a key() accessor), and
18334 RedBlackTree does not need to know anything about ValueType.
18336 * JavaScriptCore.exp:
18337 * wtf/MetaAllocator.cpp:
18338 (WTF::MetaAllocator::findAndRemoveFreeSpace):
18339 (WTF::MetaAllocator::debugFreeSpaceSize):
18340 (WTF::MetaAllocator::addFreeSpace):
18341 * wtf/MetaAllocator.h:
18342 (WTF::MetaAllocator::FreeSpaceNode::FreeSpaceNode):
18343 (WTF::MetaAllocator::FreeSpaceNode::key):
18344 * wtf/MetaAllocatorHandle.h:
18345 (WTF::MetaAllocatorHandle::key):
18346 * wtf/RedBlackTree.h:
18347 (WTF::RedBlackTree::Node::successor):
18348 (WTF::RedBlackTree::Node::predecessor):
18349 (WTF::RedBlackTree::Node::parent):
18350 (WTF::RedBlackTree::Node::setParent):
18351 (WTF::RedBlackTree::Node::left):
18352 (WTF::RedBlackTree::Node::setLeft):
18353 (WTF::RedBlackTree::Node::right):
18354 (WTF::RedBlackTree::Node::setRight):
18355 (WTF::RedBlackTree::insert):
18356 (WTF::RedBlackTree::remove):
18357 (WTF::RedBlackTree::findExact):
18358 (WTF::RedBlackTree::findLeastGreaterThanOrEqual):
18359 (WTF::RedBlackTree::findGreatestLessThanOrEqual):
18360 (WTF::RedBlackTree::first):
18361 (WTF::RedBlackTree::last):
18362 (WTF::RedBlackTree::size):
18363 (WTF::RedBlackTree::treeMinimum):
18364 (WTF::RedBlackTree::treeMaximum):
18365 (WTF::RedBlackTree::treeInsert):
18366 (WTF::RedBlackTree::leftRotate):
18367 (WTF::RedBlackTree::rightRotate):
18368 (WTF::RedBlackTree::removeFixup):
18370 2012-01-23 Andy Estes <aestes@apple.com>
18372 Fix the build after r105635.
18374 * JavaScriptCore.exp:
18376 2012-01-23 Mark Hahnenberg <mhahnenberg@apple.com>
18378 Remove StackBounds from JSGlobalData
18379 https://bugs.webkit.org/show_bug.cgi?id=76310
18381 Reviewed by Sam Weinig.
18383 Removed StackBounds and the stack() function from JSGlobalData since it no
18384 longer accessed any members of JSGlobalData.
18386 * bytecompiler/BytecodeGenerator.cpp:
18387 (JSC::BytecodeGenerator::BytecodeGenerator):
18388 * heap/MachineStackMarker.cpp:
18389 (JSC::MachineThreads::addCurrentThread):
18390 (JSC::MachineThreads::gatherFromCurrentThread):
18391 * parser/Parser.cpp:
18393 * runtime/JSGlobalData.cpp:
18394 (JSC::JSGlobalData::JSGlobalData):
18395 * runtime/JSGlobalData.h:
18397 2012-01-23 Gavin Barraclough <barraclough@apple.com>
18399 Implement a JIT-code aware sampling profiler for JSC
18400 https://bugs.webkit.org/show_bug.cgi?id=76855
18402 Rubber stanmped by Geoff Garen.
18404 Mechanical change - pass CodeBlock through to the executable allocator,
18405 such that we will be able to map ranges of JIT code back to their owner.
18407 * assembler/ARMAssembler.cpp:
18408 (JSC::ARMAssembler::executableCopy):
18409 * assembler/ARMAssembler.h:
18410 * assembler/AssemblerBuffer.h:
18411 (JSC::AssemblerBuffer::executableCopy):
18412 * assembler/AssemblerBufferWithConstantPool.h:
18413 (JSC::AssemblerBufferWithConstantPool::executableCopy):
18414 * assembler/LinkBuffer.h:
18415 (JSC::LinkBuffer::LinkBuffer):
18416 (JSC::LinkBuffer::linkCode):
18417 * assembler/MIPSAssembler.h:
18418 (JSC::MIPSAssembler::executableCopy):
18419 * assembler/SH4Assembler.h:
18420 (JSC::SH4Assembler::executableCopy):
18421 * assembler/X86Assembler.h:
18422 (JSC::X86Assembler::executableCopy):
18423 (JSC::X86Assembler::X86InstructionFormatter::executableCopy):
18424 * dfg/DFGJITCompiler.cpp:
18425 (JSC::DFG::JITCompiler::compile):
18426 (JSC::DFG::JITCompiler::compileFunction):
18427 * dfg/DFGOSRExitCompiler.cpp:
18428 * dfg/DFGRepatch.cpp:
18429 (JSC::DFG::generateProtoChainAccessStub):
18430 (JSC::DFG::tryCacheGetByID):
18431 (JSC::DFG::tryBuildGetByIDList):
18432 (JSC::DFG::tryCachePutByID):
18433 * dfg/DFGThunks.cpp:
18434 (JSC::DFG::osrExitGenerationThunkGenerator):
18435 * jit/ExecutableAllocator.cpp:
18436 (JSC::ExecutableAllocator::allocate):
18437 * jit/ExecutableAllocator.h:
18438 * jit/ExecutableAllocatorFixedVMPool.cpp:
18439 (JSC::ExecutableAllocator::allocate):
18441 (JSC::JIT::privateCompile):
18442 * jit/JITOpcodes.cpp:
18443 (JSC::JIT::privateCompileCTIMachineTrampolines):
18444 * jit/JITOpcodes32_64.cpp:
18445 (JSC::JIT::privateCompileCTIMachineTrampolines):
18446 (JSC::JIT::privateCompileCTINativeCall):
18447 * jit/JITPropertyAccess.cpp:
18448 (JSC::JIT::stringGetByValStubGenerator):
18449 (JSC::JIT::privateCompilePutByIdTransition):
18450 (JSC::JIT::privateCompilePatchGetArrayLength):
18451 (JSC::JIT::privateCompileGetByIdProto):
18452 (JSC::JIT::privateCompileGetByIdSelfList):
18453 (JSC::JIT::privateCompileGetByIdProtoList):
18454 (JSC::JIT::privateCompileGetByIdChainList):
18455 (JSC::JIT::privateCompileGetByIdChain):
18456 * jit/JITPropertyAccess32_64.cpp:
18457 (JSC::JIT::stringGetByValStubGenerator):
18458 (JSC::JIT::privateCompilePutByIdTransition):
18459 (JSC::JIT::privateCompilePatchGetArrayLength):
18460 (JSC::JIT::privateCompileGetByIdProto):
18461 (JSC::JIT::privateCompileGetByIdSelfList):
18462 (JSC::JIT::privateCompileGetByIdProtoList):
18463 (JSC::JIT::privateCompileGetByIdChainList):
18464 (JSC::JIT::privateCompileGetByIdChain):
18465 * jit/JITStubs.cpp:
18466 * jit/SpecializedThunkJIT.h:
18467 (JSC::SpecializedThunkJIT::finalize):
18468 * yarr/YarrJIT.cpp:
18469 (JSC::Yarr::YarrGenerator::compile):
18471 2012-01-23 Xianzhu Wang <wangxianzhu@chromium.org>
18473 Basic enhancements to StringBuilder
18474 https://bugs.webkit.org/show_bug.cgi?id=67081
18476 This change contains the following enhancements to StringBuilder,
18477 for convenience, performance, testability, etc.:
18478 - Change toStringPreserveCapacity() to const
18479 - new public methods: capacity(), swap(), toAtomicString(), canShrink()
18480 and append(const StringBuilder&)
18481 - == and != opearators to compare StringBuilders and a StringBuilder/String
18483 Unit tests: Tools/TestWebKitAPI/Tests/WTF/StringBuilder.cpp
18485 Reviewed by Darin Adler.
18487 * JavaScriptCore.exp:
18488 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
18489 * wtf/text/AtomicString.cpp:
18490 (WTF::SubstringTranslator::hash):
18491 (WTF::SubstringTranslator::equal):
18492 (WTF::SubstringTranslator::translate):
18493 (WTF::AtomicString::add):
18494 (WTF::AtomicString::addSlowCase):
18495 * wtf/text/AtomicString.h:
18496 (WTF::AtomicString::AtomicString):
18497 (WTF::AtomicString::add):
18498 * wtf/text/StringBuilder.cpp:
18499 (WTF::StringBuilder::reifyString):
18500 (WTF::StringBuilder::resize):
18501 (WTF::StringBuilder::canShrink):
18502 (WTF::StringBuilder::shrinkToFit):
18503 * wtf/text/StringBuilder.h:
18504 (WTF::StringBuilder::append):
18505 (WTF::StringBuilder::toString):
18506 (WTF::StringBuilder::toStringPreserveCapacity):
18507 (WTF::StringBuilder::toAtomicString):
18508 (WTF::StringBuilder::isEmpty):
18509 (WTF::StringBuilder::capacity):
18510 (WTF::StringBuilder::is8Bit):
18511 (WTF::StringBuilder::swap):
18515 * wtf/text/StringImpl.h:
18517 2012-01-23 Carlos Garcia Campos <cgarcia@igalia.com>
18519 Unreviewed. Fix make distcheck.
18521 * GNUmakefile.list.am: Add missing files, remove deleted files and
18524 2012-01-22 Filip Pizlo <fpizlo@apple.com>
18526 Build fix for non-DFG platforms that error out on warn-unused-parameter.
18528 * bytecode/CallLinkStatus.cpp:
18529 (JSC::CallLinkStatus::computeFor):
18530 * bytecode/GetByIdStatus.cpp:
18531 (JSC::GetByIdStatus::computeFor):
18532 * bytecode/MethodCallLinkStatus.cpp:
18533 (JSC::MethodCallLinkStatus::computeFor):
18534 * bytecode/PutByIdStatus.cpp:
18535 (JSC::PutByIdStatus::computeFor):
18537 2012-01-22 Filip Pizlo <fpizlo@apple.com>
18539 Build fix for non-DFG platforms.
18541 * bytecode/CallLinkStatus.cpp:
18542 (JSC::CallLinkStatus::computeFor):
18543 * bytecode/GetByIdStatus.cpp:
18544 (JSC::GetByIdStatus::computeFor):
18545 * bytecode/MethodCallLinkStatus.cpp:
18546 (JSC::MethodCallLinkStatus::computeFor):
18547 * bytecode/PutByIdStatus.cpp:
18548 (JSC::PutByIdStatus::computeFor):
18550 2012-01-20 Filip Pizlo <fpizlo@apple.com>
18552 DFG should not have code that directly decodes the states of old JIT inline
18553 cache data structures
18554 https://bugs.webkit.org/show_bug.cgi?id=76768
18556 Reviewed by Sam Weinig.
18558 Introduced new classes (like GetByIdStatus) that encapsulate the set of things
18559 that the DFG would like to know about property accesses and calls. Whereas it
18560 previously got this information by directly decoding the data structures used
18561 by the old JIT for inline caching, it now uses these classes, which do the work
18562 for it. This should make it somewhat more straight forward to introduce new
18563 ways of profiling the same information.
18565 Also hoisted StructureSet into bytecode/ from dfg/, because it's now used by
18568 Making this work right involved carefully ensuring that the heuristics for
18569 choosing how to handle property accesses was at least as good as what we had
18570 before, since I completely restructured that code. Currently the performance
18571 looks neutral. Since I rewrote the code I did change some things that I never
18572 liked before, like previously if a put_bu_id had executed exactly once then
18573 we'd compile it as if it had taken slow-path. Executing once is special because
18574 then the inline cache is not baked in, so there is no information about how the
18575 DFG should optimize the code. Now this is rationalized: if the put_by_id does
18576 not offer enough information to be optimized (i.e. had executed 0 or 1 times)
18577 then we turn it into a forced OSR exit (i.e. a patch point). However, get_by_id
18578 still has the old behavior; I left it that way because I didn't want to make
18579 too many changes at once.
18582 * GNUmakefile.list.am:
18583 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
18584 * JavaScriptCore.xcodeproj/project.pbxproj:
18586 * bytecode/CallLinkStatus.cpp: Added.
18587 (JSC::CallLinkStatus::computeFor):
18588 * bytecode/CallLinkStatus.h: Added.
18589 (JSC::CallLinkStatus::CallLinkStatus):
18590 (JSC::CallLinkStatus::isSet):
18591 (JSC::CallLinkStatus::operator!):
18592 (JSC::CallLinkStatus::couldTakeSlowPath):
18593 (JSC::CallLinkStatus::callTarget):
18594 * bytecode/GetByIdStatus.cpp: Added.
18595 (JSC::GetByIdStatus::computeFor):
18596 * bytecode/GetByIdStatus.h: Added.
18597 (JSC::GetByIdStatus::GetByIdStatus):
18598 (JSC::GetByIdStatus::state):
18599 (JSC::GetByIdStatus::isSet):
18600 (JSC::GetByIdStatus::operator!):
18601 (JSC::GetByIdStatus::isSimpleDirect):
18602 (JSC::GetByIdStatus::takesSlowPath):
18603 (JSC::GetByIdStatus::makesCalls):
18604 (JSC::GetByIdStatus::structureSet):
18605 (JSC::GetByIdStatus::offset):
18606 * bytecode/MethodCallLinkStatus.cpp: Added.
18607 (JSC::MethodCallLinkStatus::computeFor):
18608 * bytecode/MethodCallLinkStatus.h: Added.
18609 (JSC::MethodCallLinkStatus::MethodCallLinkStatus):
18610 (JSC::MethodCallLinkStatus::isSet):
18611 (JSC::MethodCallLinkStatus::operator!):
18612 (JSC::MethodCallLinkStatus::needsPrototypeCheck):
18613 (JSC::MethodCallLinkStatus::structure):
18614 (JSC::MethodCallLinkStatus::prototypeStructure):
18615 (JSC::MethodCallLinkStatus::function):
18616 (JSC::MethodCallLinkStatus::prototype):
18617 * bytecode/PutByIdStatus.cpp: Added.
18618 (JSC::PutByIdStatus::computeFor):
18619 * bytecode/PutByIdStatus.h: Added.
18620 (JSC::PutByIdStatus::PutByIdStatus):
18621 (JSC::PutByIdStatus::state):
18622 (JSC::PutByIdStatus::isSet):
18623 (JSC::PutByIdStatus::operator!):
18624 (JSC::PutByIdStatus::isSimpleReplace):
18625 (JSC::PutByIdStatus::isSimpleTransition):
18626 (JSC::PutByIdStatus::takesSlowPath):
18627 (JSC::PutByIdStatus::oldStructure):
18628 (JSC::PutByIdStatus::newStructure):
18629 (JSC::PutByIdStatus::structureChain):
18630 (JSC::PutByIdStatus::offset):
18631 * bytecode/StructureSet.h: Added.
18632 (JSC::StructureSet::StructureSet):
18633 (JSC::StructureSet::clear):
18634 (JSC::StructureSet::add):
18635 (JSC::StructureSet::addAll):
18636 (JSC::StructureSet::remove):
18637 (JSC::StructureSet::contains):
18638 (JSC::StructureSet::isSubsetOf):
18639 (JSC::StructureSet::isSupersetOf):
18640 (JSC::StructureSet::size):
18641 (JSC::StructureSet::at):
18642 (JSC::StructureSet::operator[]):
18643 (JSC::StructureSet::last):
18644 (JSC::StructureSet::predictionFromStructures):
18645 (JSC::StructureSet::operator==):
18646 (JSC::StructureSet::dump):
18647 * dfg/DFGAbstractValue.h:
18648 * dfg/DFGByteCodeParser.cpp:
18649 (JSC::DFG::ByteCodeParser::handleCall):
18650 (JSC::DFG::ByteCodeParser::parseBlock):
18651 * dfg/DFGStructureSet.h: Removed.
18653 2012-01-20 Filip Pizlo <fpizlo@apple.com>
18655 JIT compilation should not require ExecState
18656 https://bugs.webkit.org/show_bug.cgi?id=76729
18657 <rdar://problem/10731545>
18659 Reviewed by Gavin Barraclough.
18661 Changed the relevant JIT driver functions to take JSGlobalData& instead of
18662 ExecState*, since really they just needed the global data.
18664 * dfg/DFGDriver.cpp:
18665 (JSC::DFG::compile):
18666 (JSC::DFG::tryCompile):
18667 (JSC::DFG::tryCompileFunction):
18669 (JSC::DFG::tryCompile):
18670 (JSC::DFG::tryCompileFunction):
18672 (JSC::jitCompileIfAppropriate):
18673 (JSC::jitCompileFunctionIfAppropriate):
18674 * runtime/Executable.cpp:
18675 (JSC::EvalExecutable::compileInternal):
18676 (JSC::ProgramExecutable::compileInternal):
18677 (JSC::FunctionExecutable::compileForCallInternal):
18678 (JSC::FunctionExecutable::compileForConstructInternal):
18680 2012-01-20 David Levin <levin@chromium.org>
18682 Make OwnPtr<HDC> work for the Chromium Windows port.
18683 https://bugs.webkit.org/show_bug.cgi?id=76738
18685 Reviewed by Jian Li.
18687 * JavaScriptCore.gyp/JavaScriptCore.gyp: Added OwnPtrWin.cpp to the
18688 Chromium Windows build.
18689 * wtf/OwnPtrCommon.h: Changed from platform WIN to OS WIN for
18690 OwnPtr<HDC> and similar constructs.
18692 2012-01-19 Geoffrey Garen <ggaren@apple.com>
18694 Removed some regexp entry boilerplate code
18695 https://bugs.webkit.org/show_bug.cgi?id=76687
18697 Reviewed by Darin Adler.
18699 1% - 2% speedup on regexp tests, no change overall.
18701 * runtime/RegExp.cpp:
18702 (JSC::RegExp::match):
18703 - ASSERT that our startIndex is non-negative, because anything less
18704 would be uncivilized.
18706 - ASSERT that our input is not the null string for the same reason.
18708 - No need to test for startOffset being past the end of the string,
18709 since the regular expression engine will do this test for us.
18711 - No need to initialize the output vector, since the regular expression
18712 engine will fill it in for us.
18714 * yarr/YarrInterpreter.cpp:
18715 (JSC::Yarr::Interpreter::interpret):
18716 * yarr/YarrJIT.cpp:
18717 (JSC::Yarr::YarrGenerator::compile):
18719 RegExp used to do these jobs for us, but now we do them for ourselves
18720 because it's a better separation of concerns, and the JIT can do them
18721 more efficiently than C++ code:
18723 - Test for "past the end" before doing any matching -- otherwise
18724 a* will match with zero length past the end of the string, which is wrong.
18726 - Initialize the output vector before doing any matching.
18728 2012-01-20 Filip Pizlo <fpizlo@apple.com>
18730 Build fix for no-DFG configuration.
18731 Needed for <rdar://problem/10727689>.
18733 * bytecompiler/BytecodeGenerator.cpp:
18734 (JSC::BytecodeGenerator::emitProfiledOpcode):
18736 (JSC::JIT::emitValueProfilingSite):
18738 2012-01-19 Filip Pizlo <fpizlo@apple.com>
18740 Bytecode instructions that may have value profiling should have a direct inline
18741 link to the ValueProfile instance
18742 https://bugs.webkit.org/show_bug.cgi?id=76682
18743 <rdar://problem/10727689>
18745 Reviewed by Sam Weinig.
18747 Each opcode that gets value profiled now has a link to its ValueProfile. This
18748 required rationalizing the emission of value profiles for opcode combos, like
18749 op_method_check/op_get_by_id and op_call/op_call_put_result. It only makes
18750 sense for one of them to have a value profile link, and it makes most sense
18751 for it to be the one that actually sets the result. The previous behavior was
18752 to have op_method_check profile for op_get_by_id when they were used together,
18753 but otherwise for op_get_by_id to have its own profiles. op_call already did
18754 the right thing; all profiling was done by op_call_put_result.
18756 But rationalizing this code required breaking some of the natural boundaries
18757 that the code had; for instance the code in DFG that emits a GetById in place
18758 of both op_method_check and op_get_by_id must now know that it's the latter of
18759 those that has the value profile, while the first of those constitutes the OSR
18760 target. Hence each CodeOrigin must now have two bytecode indices - one for
18761 OSR exit and one for profiling.
18763 Finally this change required some refiddling of our optimization heuristics,
18764 because now all code blocks have "more instructions" due to the value profile
18767 * bytecode/CodeBlock.cpp:
18768 (JSC::CodeBlock::printGetByIdOp):
18769 (JSC::CodeBlock::dump):
18770 * bytecode/CodeBlock.h:
18771 (JSC::CodeBlock::valueProfileForBytecodeOffset):
18772 * bytecode/CodeOrigin.h:
18773 (JSC::CodeOrigin::CodeOrigin):
18774 (JSC::CodeOrigin::bytecodeIndexForValueProfile):
18775 * bytecode/Instruction.h:
18776 (JSC::Instruction::Instruction):
18777 * bytecode/Opcode.h:
18778 * bytecompiler/BytecodeGenerator.cpp:
18779 (JSC::BytecodeGenerator::emitProfiledOpcode):
18780 (JSC::BytecodeGenerator::emitResolve):
18781 (JSC::BytecodeGenerator::emitGetScopedVar):
18782 (JSC::BytecodeGenerator::emitResolveBase):
18783 (JSC::BytecodeGenerator::emitResolveBaseForPut):
18784 (JSC::BytecodeGenerator::emitResolveWithBase):
18785 (JSC::BytecodeGenerator::emitResolveWithThis):
18786 (JSC::BytecodeGenerator::emitGetById):
18787 (JSC::BytecodeGenerator::emitGetByVal):
18788 (JSC::BytecodeGenerator::emitCall):
18789 (JSC::BytecodeGenerator::emitCallVarargs):
18790 (JSC::BytecodeGenerator::emitConstruct):
18791 * bytecompiler/BytecodeGenerator.h:
18792 * dfg/DFGByteCodeParser.cpp:
18793 (JSC::DFG::ByteCodeParser::ByteCodeParser):
18794 (JSC::DFG::ByteCodeParser::currentCodeOrigin):
18795 (JSC::DFG::ByteCodeParser::addCall):
18796 (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
18797 (JSC::DFG::ByteCodeParser::getPrediction):
18798 (JSC::DFG::ByteCodeParser::handleCall):
18799 (JSC::DFG::ByteCodeParser::handleInlining):
18800 (JSC::DFG::ByteCodeParser::parseBlock):
18801 (JSC::DFG::ByteCodeParser::parse):
18803 (JSC::DFG::Graph::valueProfileFor):
18805 (JSC::JIT::emitValueProfilingSite):
18807 (JSC::JIT::emit_op_call_put_result):
18808 * jit/JITCall32_64.cpp:
18809 (JSC::JIT::emit_op_call_put_result):
18810 * jit/JITInlineMethods.h:
18811 (JSC::JIT::emitValueProfilingSite):
18812 * jit/JITOpcodes.cpp:
18813 (JSC::JIT::emit_op_resolve):
18814 (JSC::JIT::emit_op_resolve_base):
18815 (JSC::JIT::emit_op_resolve_skip):
18816 (JSC::JIT::emit_op_resolve_global):
18817 (JSC::JIT::emitSlow_op_resolve_global):
18818 (JSC::JIT::emit_op_resolve_with_base):
18819 (JSC::JIT::emit_op_resolve_with_this):
18820 (JSC::JIT::emitSlow_op_resolve_global_dynamic):
18821 * jit/JITOpcodes32_64.cpp:
18822 (JSC::JIT::emit_op_resolve):
18823 (JSC::JIT::emit_op_resolve_base):
18824 (JSC::JIT::emit_op_resolve_skip):
18825 (JSC::JIT::emit_op_resolve_global):
18826 (JSC::JIT::emitSlow_op_resolve_global):
18827 (JSC::JIT::emit_op_resolve_with_base):
18828 (JSC::JIT::emit_op_resolve_with_this):
18829 * jit/JITPropertyAccess.cpp:
18830 (JSC::JIT::emit_op_get_by_val):
18831 (JSC::JIT::emitSlow_op_get_by_val):
18832 (JSC::JIT::emit_op_method_check):
18833 (JSC::JIT::emitSlow_op_method_check):
18834 (JSC::JIT::emit_op_get_by_id):
18835 (JSC::JIT::emitSlow_op_get_by_id):
18836 (JSC::JIT::emit_op_get_scoped_var):
18837 (JSC::JIT::emit_op_get_global_var):
18838 * jit/JITPropertyAccess32_64.cpp:
18839 (JSC::JIT::emit_op_method_check):
18840 (JSC::JIT::emitSlow_op_method_check):
18841 (JSC::JIT::emit_op_get_by_val):
18842 (JSC::JIT::emitSlow_op_get_by_val):
18843 (JSC::JIT::emit_op_get_by_id):
18844 (JSC::JIT::emitSlow_op_get_by_id):
18845 (JSC::JIT::emit_op_get_scoped_var):
18846 (JSC::JIT::emit_op_get_global_var):
18847 * jit/JITStubCall.h:
18848 (JSC::JITStubCall::callWithValueProfiling):
18849 * runtime/Options.cpp:
18850 (JSC::Options::initializeOptions):
18852 2012-01-20 ChangSeok Oh <shivamidow@gmail.com>
18854 undefined reference to symbol eina_module_free
18855 https://bugs.webkit.org/show_bug.cgi?id=76681
18857 Reviewed by Martin Robinson.
18859 eina_module_free has been used without including eina libraries after r104936.
18861 * wtf/PlatformEfl.cmake: Add EINA_LIBRARIES.
18863 2012-01-19 Tony Chang <tony@chromium.org>
18865 [chromium] Remove an obsolete comment about features.gypi
18866 https://bugs.webkit.org/show_bug.cgi?id=76643
18868 There can be only one features.gypi.
18870 Reviewed by James Robinson.
18872 * JavaScriptCore.gyp/JavaScriptCore.gyp:
18874 2012-01-19 Geoffrey Garen <ggaren@apple.com>
18876 Implicit creation of a regular expression should eagerly check for syntax errors
18877 https://bugs.webkit.org/show_bug.cgi?id=76642
18879 Reviewed by Oliver Hunt.
18881 This is a correctness fix and a slight optimization.
18883 * runtime/StringPrototype.cpp:
18884 (JSC::stringProtoFuncMatch):
18885 (JSC::stringProtoFuncSearch): Check for syntax errors because that's the
18888 * runtime/RegExp.cpp:
18889 (JSC::RegExp::match): ASSERT that we aren't a syntax error. (One line
18890 of code change, many lines of indentation change.)
18892 Since we have no clients that try to match a RegExp that is a syntax error,
18893 let's optimize out the check.
18895 2012-01-19 Mark Hahnenberg <mhahnenberg@apple.com>
18897 Implement a new allocator for backing stores
18898 https://bugs.webkit.org/show_bug.cgi?id=75181
18900 Reviewed by Filip Pizlo.
18902 We want to move away from using fastMalloc for the backing stores for
18903 some of our objects (e.g. JSArray, JSObject, JSString, etc). These backing
18904 stores have a nice property in that they only have a single owner (i.e. a
18905 single pointer to them at any one time). One way that we can take advantage
18906 of this property is to implement a simple bump allocator/copying collector,
18907 which will run alongside our normal mark/sweep collector, that only needs to
18908 update the single owner pointer rather than having to redirect an arbitrary
18909 number of pointers in from-space to to-space.
18911 This plan can give us a number of benefits. We can beat fastMalloc in terms
18912 of both performance and memory usage, we can track how much memory we're using
18913 far more accurately than our rough estimation now through the use of
18914 reportExtraMemoryCost, and we can allocate arbitrary size objects (as opposed
18915 to being limited to size classes like we have been historically). This is also
18916 another step toward moving away from lazy destruction, which will improve our memory footprint.
18918 We start by creating said allocator and moving the ArrayStorage for JSArray
18919 to use it rather than fastMalloc.
18921 The design of the collector is as follows:
18923 -The collector allocates 64KB chunks from the OS to use for object allocation.
18924 -Each chunk contains an offset, a flag indicating if the block has been pinned,
18925 and a payload, along with next and prev pointers so that they can be put in DoublyLinkedLists.
18926 -Any allocation greater than 64KB gets its own separate oversize block, which
18927 is managed separately from the rest.
18928 -If the allocator receives a request for more than the remaining amount in the
18929 current block, it grabs a fresh block.
18930 -Grabbing a fresh block means grabbing one off of the global free list (which is now
18931 shared between the mark/sweep allocator and the bump allocator) if there is one.
18932 If there isn't a new one we do one of two things: allocate a new block from the OS
18933 if we're not ready for a GC yet, or run a GC and then try again. If we still don't
18934 have enough space after the GC, we allocate a new block from the OS.
18936 Garbage collection:
18937 -At the start of garbage collection during conservative stack scanning, if we encounter
18938 what appears to be a pointer to a bump-allocated block of memory, we pin that block so
18939 that it will not be copied for this round of collection.
18940 -We also pin any oversize blocks that we encounter, which effectively doubles as a
18941 "mark bit" for that block. Any oversize blocks that aren't pinned at the end of copying
18942 are given back to the OS.
18943 -Marking threads are now also responsible for copying bump-allocated objects to newSpace
18944 -Each marking thread has a private 64KB block into which it copies bump-allocated objects that it encounters.
18945 -When that block fills up, the marking thread gives it back to the allocator and requests a new one.
18946 -When all marking has concluded, each thread gives back its copy block, even if it isn't full.
18947 -At the conclusion of copying (which is done by the end of the marking phase), we un-pin
18948 any pinned blocks and give any blocks left in from-space to the global free list.
18951 * GNUmakefile.list.am:
18952 * JavaScriptCore.gypi:
18953 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
18954 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
18955 * JavaScriptCore.xcodeproj/project.pbxproj:
18957 * heap/AllocationSpace.cpp:
18958 (JSC::AllocationSpace::allocateSlowCase):
18959 (JSC::AllocationSpace::allocateBlock):
18960 (JSC::AllocationSpace::freeBlocks):
18961 * heap/AllocationSpace.h:
18962 (JSC::AllocationSpace::waterMark):
18963 * heap/BumpBlock.h: Added.
18964 (JSC::BumpBlock::BumpBlock):
18965 * heap/BumpSpace.cpp: Added.
18966 (JSC::BumpSpace::tryAllocateSlowCase):
18967 * heap/BumpSpace.h: Added.
18968 (JSC::BumpSpace::isInCopyPhase):
18969 (JSC::BumpSpace::totalMemoryAllocated):
18970 (JSC::BumpSpace::totalMemoryUtilized):
18971 * heap/BumpSpaceInlineMethods.h: Added.
18972 (JSC::BumpSpace::BumpSpace):
18973 (JSC::BumpSpace::init):
18974 (JSC::BumpSpace::contains):
18975 (JSC::BumpSpace::pin):
18976 (JSC::BumpSpace::startedCopying):
18977 (JSC::BumpSpace::doneCopying):
18978 (JSC::BumpSpace::doneFillingBlock):
18979 (JSC::BumpSpace::recycleBlock):
18980 (JSC::BumpSpace::getFreshBlock):
18981 (JSC::BumpSpace::borrowBlock):
18982 (JSC::BumpSpace::addNewBlock):
18983 (JSC::BumpSpace::allocateNewBlock):
18984 (JSC::BumpSpace::fitsInBlock):
18985 (JSC::BumpSpace::fitsInCurrentBlock):
18986 (JSC::BumpSpace::tryAllocate):
18987 (JSC::BumpSpace::tryAllocateOversize):
18988 (JSC::BumpSpace::allocateFromBlock):
18989 (JSC::BumpSpace::tryReallocate):
18990 (JSC::BumpSpace::tryReallocateOversize):
18991 (JSC::BumpSpace::isOversize):
18992 (JSC::BumpSpace::isPinned):
18993 (JSC::BumpSpace::oversizeBlockFor):
18994 (JSC::BumpSpace::blockFor):
18995 * heap/ConservativeRoots.cpp:
18996 (JSC::ConservativeRoots::ConservativeRoots):
18997 (JSC::ConservativeRoots::genericAddPointer):
18998 (JSC::ConservativeRoots::add):
18999 * heap/ConservativeRoots.h:
19002 (JSC::Heap::blockFreeingThreadMain):
19003 (JSC::Heap::reportExtraMemoryCostSlowCase):
19004 (JSC::Heap::getConservativeRegisterRoots):
19005 (JSC::Heap::markRoots):
19006 (JSC::Heap::collect):
19007 (JSC::Heap::releaseFreeBlocks):
19009 (JSC::Heap::waterMark):
19010 (JSC::Heap::highWaterMark):
19011 (JSC::Heap::setHighWaterMark):
19012 (JSC::Heap::tryAllocateStorage):
19013 (JSC::Heap::tryReallocateStorage):
19014 * heap/HeapBlock.h: Added.
19015 (JSC::HeapBlock::HeapBlock):
19016 * heap/MarkStack.cpp:
19017 (JSC::MarkStackThreadSharedData::MarkStackThreadSharedData):
19018 (JSC::SlotVisitor::drain):
19019 (JSC::SlotVisitor::drainFromShared):
19020 (JSC::SlotVisitor::startCopying):
19021 (JSC::SlotVisitor::allocateNewSpace):
19022 (JSC::SlotVisitor::copy):
19023 (JSC::SlotVisitor::copyAndAppend):
19024 (JSC::SlotVisitor::doneCopying):
19025 * heap/MarkStack.h:
19026 * heap/MarkedBlock.cpp:
19027 (JSC::MarkedBlock::recycle):
19028 (JSC::MarkedBlock::MarkedBlock):
19029 * heap/MarkedBlock.h:
19030 * heap/MarkedSpace.cpp:
19031 (JSC::MarkedSpace::MarkedSpace):
19032 * heap/MarkedSpace.h:
19033 (JSC::MarkedSpace::allocate):
19034 (JSC::MarkedSpace::forEachBlock):
19035 (JSC::MarkedSpace::SizeClass::resetAllocator):
19036 * heap/SlotVisitor.h:
19037 (JSC::SlotVisitor::SlotVisitor):
19038 * heap/TinyBloomFilter.h:
19039 (JSC::TinyBloomFilter::reset):
19040 * runtime/JSArray.cpp:
19041 (JSC::JSArray::JSArray):
19042 (JSC::JSArray::finishCreation):
19043 (JSC::JSArray::tryFinishCreationUninitialized):
19044 (JSC::JSArray::~JSArray):
19045 (JSC::JSArray::enterSparseMode):
19046 (JSC::JSArray::defineOwnNumericProperty):
19047 (JSC::JSArray::setLengthWritable):
19048 (JSC::JSArray::getOwnPropertySlotByIndex):
19049 (JSC::JSArray::getOwnPropertyDescriptor):
19050 (JSC::JSArray::putByIndexBeyondVectorLength):
19051 (JSC::JSArray::deletePropertyByIndex):
19052 (JSC::JSArray::getOwnPropertyNames):
19053 (JSC::JSArray::increaseVectorLength):
19054 (JSC::JSArray::unshiftCountSlowCase):
19055 (JSC::JSArray::setLength):
19056 (JSC::JSArray::pop):
19057 (JSC::JSArray::unshiftCount):
19058 (JSC::JSArray::visitChildren):
19059 (JSC::JSArray::sortNumeric):
19060 (JSC::JSArray::sort):
19061 (JSC::JSArray::compactForSorting):
19062 (JSC::JSArray::subclassData):
19063 (JSC::JSArray::setSubclassData):
19064 (JSC::JSArray::checkConsistency):
19065 * runtime/JSArray.h:
19066 (JSC::JSArray::inSparseMode):
19067 (JSC::JSArray::isLengthWritable):
19068 * wtf/CheckedBoolean.h: Added.
19069 (CheckedBoolean::CheckedBoolean):
19070 (CheckedBoolean::~CheckedBoolean):
19071 (CheckedBoolean::operator bool):
19072 * wtf/DoublyLinkedList.h:
19074 * wtf/StdLibExtras.h:
19075 (WTF::isPointerAligned):
19077 2012-01-19 Joi Sigurdsson <joi@chromium.org>
19079 Enable use of precompiled headers in Chromium port on Windows.
19081 Bug 76381 - Use precompiled headers in Chromium port on Windows
19082 https://bugs.webkit.org/show_bug.cgi?id=76381
19084 Reviewed by Tony Chang.
19086 * JavaScriptCore.gyp/JavaScriptCore.gyp: Include WinPrecompile.gypi.
19088 2012-01-18 Roland Takacs <takacs.roland@stud.u-szeged.hu>
19090 Cross-platform processor core counter fix
19091 https://bugs.webkit.org/show_bug.cgi?id=76540
19093 Reviewed by Zoltan Herczeg.
19095 I attached "OS(FREEBSD)" to "#if OS(DARWIN) || OS(OPENBSD) || OS(NETBSD)"
19096 and I removed the OS checking macros from ParallelJobsGeneric.cpp because
19097 the NumberOfCores.cpp contains them for counting CPU cores.
19098 The processor core counter patch located at
19099 https://bugs.webkit.org/show_bug.cgi?id=76530
19101 * wtf/NumberOfCores.cpp:
19102 * wtf/ParallelJobsGeneric.cpp:
19104 2012-01-18 Csaba Osztrogonác <ossy@webkit.org>
19106 Cross-platform processor core counter
19107 https://bugs.webkit.org/show_bug.cgi?id=76530
19109 Unreviewed cross-MinGW buildfix after r105270.
19111 * wtf/NumberOfCores.cpp: Use windows.h instead of Windows.h.
19113 2012-01-18 Roland Takacs <takacs.roland@stud.u-szeged.hu>
19115 Cross-platform processor core counter
19116 https://bugs.webkit.org/show_bug.cgi?id=76530
19118 Reviewed by Zoltan Herczeg.
19120 Two files have been created that include the processor core counter function.
19121 It used to be in ParallelJobsGeneric.h/cpp before.
19123 * GNUmakefile.list.am:
19124 * JavaScriptCore.gypi:
19125 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
19126 * JavaScriptCore.xcodeproj/project.pbxproj:
19127 * runtime/Options.cpp:
19128 (JSC::Options::initializeOptions):
19129 * wtf/CMakeLists.txt:
19130 * wtf/NumberOfCores.cpp: Added.
19131 (WTF::numberOfProcessorCores):
19132 * wtf/NumberOfCores.h: Added.
19133 * wtf/ParallelJobsGeneric.cpp:
19134 (WTF::ParallelEnvironment::ParallelEnvironment):
19135 * wtf/ParallelJobsGeneric.h:
19137 2012-01-18 Balazs Kelemen <kbalazs@webkit.org>
19139 [Qt] Consolidate layout test crash logging
19140 https://bugs.webkit.org/show_bug.cgi?id=75088
19142 Reviewed by Simon Hausmann.
19144 Move backtrace generating logic into WTFReportBacktrace
19145 and add a way to deinstall signal handlers if we know
19146 that we have already printed the backtrace.
19148 * JavaScriptCore.exp:
19149 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
19150 * wtf/Assertions.cpp:
19151 (WTFLogLocker::WTFReportBacktrace):
19152 (WTFLogLocker::WTFSetCrashHook):
19153 (WTFLogLocker::WTFInvokeCrashHook):
19154 * wtf/Assertions.h:
19156 2012-01-17 Geoffrey Garen <ggaren@apple.com>
19158 Factored out some code into a helper function.
19160 I think this might help getting rid of omit-frame-pointer.
19162 Reviewed by Sam Weinig.
19164 No benchmark change.
19166 * runtime/StringPrototype.cpp:
19167 (JSC::removeUsingRegExpSearch): Moved to here...
19168 (JSC::replaceUsingRegExpSearch): ...from here.
19170 2012-01-17 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
19172 Uint8ClampedArray support
19173 https://bugs.webkit.org/show_bug.cgi?id=74455
19175 Reviewed by Filip Pizlo.
19177 * GNUmakefile.list.am:
19178 * JavaScriptCore.xcodeproj/project.pbxproj:
19179 * bytecode/PredictedType.cpp:
19180 (JSC::predictionToString):
19181 (JSC::predictionFromClassInfo):
19182 * bytecode/PredictedType.h:
19183 (JSC::isUint8ClampedArrayPrediction):
19184 (JSC::isActionableMutableArrayPrediction):
19185 * dfg/DFGAbstractState.cpp:
19186 (JSC::DFG::AbstractState::initialize):
19187 (JSC::DFG::AbstractState::execute):
19189 (JSC::DFG::Node::shouldSpeculateUint8ClampedArray):
19190 * dfg/DFGPropagator.cpp:
19191 (JSC::DFG::Propagator::propagateNodePredictions):
19192 (JSC::DFG::Propagator::fixupNode):
19193 (JSC::DFG::Propagator::performNodeCSE):
19194 * dfg/DFGSpeculativeJIT.cpp:
19195 (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
19196 (JSC::DFG::clampDoubleToByte):
19197 (JSC::DFG::compileClampIntegerToByte):
19198 (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
19199 (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
19200 (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
19201 * dfg/DFGSpeculativeJIT.h:
19202 * dfg/DFGSpeculativeJIT32_64.cpp:
19203 (JSC::DFG::SpeculativeJIT::compile):
19204 * dfg/DFGSpeculativeJIT64.cpp:
19205 (JSC::DFG::SpeculativeJIT::compile):
19206 * runtime/JSCell.h:
19207 * runtime/JSGlobalData.h:
19209 * wtf/Uint8Array.h:
19210 * wtf/Uint8ClampedArray.h: Added.
19211 (WTF::Uint8ClampedArray::set):
19212 (WTF::Uint8ClampedArray::create):
19213 (WTF::Uint8ClampedArray::Uint8ClampedArray):
19214 (WTF::Uint8ClampedArray::subarray):
19216 2012-01-17 Sam Weinig <sam@webkit.org>
19218 Add helper macro for forward declaring objective-c classes
19219 https://bugs.webkit.org/show_bug.cgi?id=76485
19221 Reviewed by Anders Carlsson.
19224 Add OBJC_CLASS macro which helps reduce code when forward declaring an
19225 objective-c class in a header which can be included from both Objective-C
19226 and non-Objective-C files.
19228 2012-01-17 Filip Pizlo <fpizlo@apple.com>
19230 DFG should be able to do JS and custom getter caching
19231 https://bugs.webkit.org/show_bug.cgi?id=76361
19233 Reviewed by Csaba Osztrogonác.
19237 * dfg/DFGRepatch.cpp:
19238 (JSC::DFG::tryBuildGetByIDList):
19239 * dfg/DFGSpeculativeJIT32_64.cpp:
19240 (JSC::DFG::SpeculativeJIT::compile):
19242 2012-01-15 Filip Pizlo <fpizlo@apple.com>
19244 DFG should be able to do JS and custom getter caching
19245 https://bugs.webkit.org/show_bug.cgi?id=76361
19246 <rdar://problem/10698060>
19248 Reviewed by Geoff Garen.
19250 Added the ability to cache JS getter calls and custom getter calls in the DFG.
19251 Most of this is pretty mundane, since the old JIT supported this functionality
19252 as well. But a couple interesting things had to happen:
19254 - There are now two variants of GetById: GetById, which works as before, and
19255 GetByIdFlush, which flushes registers prior to doing the GetById. Only
19256 GetByIdFlush can be used for caching getters. We detect which GetById style
19257 to use by looking at the inline caches of the old JIT.
19259 - Exception handling for getter calls planted in stubs uses a separate lookup
19260 handler routine, which uses the CodeOrigin stored in the StructureStubInfo.
19262 This is a 40% speed-up in the Dromaeo DOM Traversal average. It removes all of
19263 the DFG regressions we saw in Dromaeo. This is neutral on SunSpider, V8, and
19266 * bytecode/StructureStubInfo.h:
19267 * dfg/DFGAbstractState.cpp:
19268 (JSC::DFG::AbstractState::execute):
19269 * dfg/DFGAssemblyHelpers.h:
19270 (JSC::DFG::AssemblyHelpers::emitExceptionCheck):
19271 * dfg/DFGByteCodeParser.cpp:
19272 (JSC::DFG::ByteCodeParser::willNeedFlush):
19273 (JSC::DFG::ByteCodeParser::parseBlock):
19274 * dfg/DFGCCallHelpers.h:
19275 (JSC::DFG::CCallHelpers::setupResults):
19276 * dfg/DFGJITCompiler.cpp:
19277 (JSC::DFG::JITCompiler::link):
19278 * dfg/DFGJITCompiler.h:
19279 (JSC::DFG::PropertyAccessRecord::PropertyAccessRecord):
19280 (JSC::DFG::JITCompiler::addExceptionCheck):
19282 (JSC::DFG::Node::hasIdentifier):
19283 (JSC::DFG::Node::hasHeapPrediction):
19284 * dfg/DFGOperations.cpp:
19285 * dfg/DFGOperations.h:
19286 * dfg/DFGPropagator.cpp:
19287 (JSC::DFG::Propagator::propagateNodePredictions):
19288 * dfg/DFGRepatch.cpp:
19289 (JSC::DFG::tryCacheGetByID):
19290 (JSC::DFG::tryBuildGetByIDList):
19291 * dfg/DFGSpeculativeJIT.h:
19292 (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheckSetResult):
19293 * dfg/DFGSpeculativeJIT32_64.cpp:
19294 (JSC::DFG::SpeculativeJIT::cachedGetById):
19295 (JSC::DFG::SpeculativeJIT::compile):
19296 * dfg/DFGSpeculativeJIT64.cpp:
19297 (JSC::DFG::SpeculativeJIT::cachedGetById):
19298 (JSC::DFG::SpeculativeJIT::compile):
19300 2012-01-16 Jon Lee <jonlee@apple.com>
19302 Build fix for r105086.
19304 * Configurations/FeatureDefines.xcconfig:
19307 2012-01-16 Jon Lee <jonlee@apple.com>
19309 Remove HTML notifications support on Mac
19310 https://bugs.webkit.org/show_bug.cgi?id=76401
19311 <rdar://problem/10589881>
19313 Reviewed by Sam Weinig.
19315 * wtf/Platform.h: Define ENABLE_HTML_NOTIFICATIONS macro.
19317 2012-01-16 Zeno Albisser <zeno@webkit.org>
19319 [Qt] Fix QT_VERSION related warnings when building on Mac OS X
19320 https://bugs.webkit.org/show_bug.cgi?id=76340
19322 This bug was caused by r104826.
19323 As already mentioned for https://bugs.webkit.org/show_bug.cgi?id=57239
19324 we should not use "using namespace WebCore" in header files,
19325 because it might cause ambiguous references.
19326 This patch reverts the changes from r104826 and r104981
19327 and removes the "using namespace WebCore" statement from
19330 Reviewed by Tor Arne Vestbø.
19334 2012-01-16 Carlos Garcia Campos <cgarcia@igalia.com>
19336 Unreviewed. Fix make distcheck.
19338 * GNUmakefile.list.am: Fix typo.
19340 2012-01-16 Pavel Heimlich <tropikhajma@gmail.com>
19342 Solaris Studio supports alignment macros too
19343 https://bugs.webkit.org/show_bug.cgi?id=75453
19345 Reviewed by Hajime Morita.
19349 2012-01-16 Yuqiang Xian <yuqiang.xian@intel.com>
19351 Build fix on 32bit if verbose debug is enabled in DFG
19352 https://bugs.webkit.org/show_bug.cgi?id=76351
19354 Reviewed by Hajime Morita.
19356 Mostly change "%lu" to "%zu" to print a "size_t" variable.
19358 * dfg/DFGAbstractState.cpp:
19359 (JSC::DFG::AbstractState::endBasicBlock):
19360 * dfg/DFGByteCodeParser.cpp:
19361 (JSC::DFG::ByteCodeParser::handleCall):
19362 (JSC::DFG::ByteCodeParser::handleInlining):
19363 (JSC::DFG::ByteCodeParser::parseBlock):
19364 (JSC::DFG::ByteCodeParser::parseCodeBlock):
19365 * dfg/DFGGraph.cpp:
19366 (JSC::DFG::Graph::predictArgumentTypes):
19367 * dfg/DFGJITCompiler.cpp:
19368 (JSC::DFG::JITCompiler::link):
19369 * dfg/DFGOSREntry.cpp:
19370 (JSC::DFG::prepareOSREntry):
19372 2012-01-15 Filip Pizlo <fpizlo@apple.com>
19374 The C calling convention logic in DFG::SpeculativeJIT should be available even
19375 when not generating code for the DFG speculative path
19376 https://bugs.webkit.org/show_bug.cgi?id=76355
19378 Reviewed by Dan Bernstein.
19380 Moved all of the logic for placing C call arguments into the right place (stack
19381 or registers) into a new class, DFG::CCallHelpers. This class inherits from
19382 AssemblyHelpers, another DFG grab-bag of helper functions. I could have moved
19383 this code into AssemblyHelpers, but decided against it, because I wanted to
19384 limit the number of methods each class in the JIT has. Hence now we have a
19385 slightly odd organization of JIT classes in DFG: MacroAssembler (basic instruction
19386 emission) <= AssemblyHelpers (some additional JS smarts) <= CCallHelpers
19387 (understands calls to C functions) <= JITCompiler (can compile a graph to machine
19388 code). Each of these except for JITCompiler can be reused for stub compilation.
19390 * GNUmakefile.list.am:
19391 * JavaScriptCore.xcodeproj/project.pbxproj:
19392 * dfg/DFGCCallHelpers.h: Added.
19393 (JSC::DFG::CCallHelpers::CCallHelpers):
19394 (JSC::DFG::CCallHelpers::resetCallArguments):
19395 (JSC::DFG::CCallHelpers::addCallArgument):
19396 (JSC::DFG::CCallHelpers::setupArguments):
19397 (JSC::DFG::CCallHelpers::setupArgumentsExecState):
19398 (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
19399 (JSC::DFG::CCallHelpers::setupTwoStubArgs):
19400 (JSC::DFG::CCallHelpers::setupStubArguments):
19401 * dfg/DFGJITCompiler.h:
19402 (JSC::DFG::JITCompiler::JITCompiler):
19403 * dfg/DFGSpeculativeJIT.h:
19404 (JSC::DFG::SpeculativeJIT::callOperation):
19406 2012-01-15 Pablo Flouret <pablof@motorola.com>
19408 Fix compilation errors on build-webkit --debug --no-video on mac.
19409 https://bugs.webkit.org/show_bug.cgi?id=75867
19411 Reviewed by Philippe Normand.
19413 Make ENABLE_VIDEO_TRACK conditional on ENABLE_VIDEO, video track feature
19414 doesn't build without video.
19418 2012-01-14 David Levin <levin@chromium.org>
19420 HWndDC should be in platform/win instead of wtf.
19421 https://bugs.webkit.org/show_bug.cgi?id=76314
19423 Reviewed by Sam Weinig.
19425 * JavaScriptCore.gyp/JavaScriptCore.gyp:
19426 * JavaScriptCore.gypi:
19428 2012-01-13 David Levin <levin@chromium.org>
19430 check-webkit-style: should encourage the use of Own* classes for Windows DC.
19431 https://bugs.webkit.org/show_bug.cgi?id=76227
19433 Reviewed by Dirk Pranke.
19435 * wtf/win/HWndDCWin.h:
19436 (WTF::HwndDC::HwndDC): Add a way to do GetDCEx.
19437 There are no users, but I want to catch this in check-webkit-style
19438 and tell any users to use HwndDC to avoid leaks.
19440 2012-01-13 David Levin <levin@chromium.org>
19442 Header file is missing header guard.
19444 Reviewed by Dirk Pranke.
19446 * wtf/win/HWndDCWin.h: Added the guards.
19448 2012-01-13 Andy Wingo <wingo@igalia.com>
19450 Eval in strict mode does not need dynamic checks
19451 https://bugs.webkit.org/show_bug.cgi?id=76286
19453 Reviewed by Oliver Hunt.
19455 * runtime/JSActivation.cpp (JSC::JSActivation::JSActivation):
19456 Eval in strict mode cannot introduce variables, so it not impose
19457 the need for dynamic checks.
19459 2012-01-13 David Levin <levin@chromium.org>
19461 HWndDC is a better name than HwndDC.
19462 https://bugs.webkit.org/show_bug.cgi?id=76281
19464 Reviewed by Darin Adler.
19466 * JavaScriptCore.gyp/JavaScriptCore.gyp:
19467 * JavaScriptCore.gypi:
19468 * wtf/win/HWndDCWin.h: Renamed from Source/JavaScriptCore/wtf/win/HwndDCWin.h.
19469 (WTF::HWndDC::HWndDC):
19470 (WTF::HWndDC::~HWndDC):
19471 (WTF::HWndDC::operator HDC):
19473 2012-01-13 YoungTaeck Song <youngtaeck.song@samsung.com>
19475 [EFL] Add OwnPtr specialization for Eina_Module.
19476 https://bugs.webkit.org/show_bug.cgi?id=76255
19478 Reviewed by Andreas Kling.
19480 Add an overload for deleteOwnedPtr(Eina_Module*) on EFL port.
19482 * wtf/OwnPtrCommon.h:
19483 * wtf/efl/OwnPtrEfl.cpp:
19484 (WTF::deleteOwnedPtr):
19486 2012-01-13 Yuqiang Xian <yuqiang.xian@intel.com>
19488 Unreviewed build fix after r104787 if JIT_VERBOSE_OSR is defined
19490 * jit/JITStubs.cpp:
19491 (JSC::DEFINE_STUB_FUNCTION):
19493 2012-01-12 Hajime Morrita <morrita@chromium.org>
19495 JavaScriptCore: Mark all exported symbols in the header file automatically.
19496 https://bugs.webkit.org/show_bug.cgi?id=72855
19498 Reviewed by Darin Adler.
19500 Added WTF_EXPORT_PRIVATE and JS_EXPORT_PRIVATE based on JavaScriptCore.exp files.
19501 The change is generated by a tool calledListExportables (https://github.com/omo/ListExportables)
19503 * API/OpaqueJSString.h:
19504 * bytecode/CodeBlock.h:
19505 * bytecode/SamplingTool.h:
19506 * debugger/Debugger.h:
19507 * debugger/DebuggerActivation.h:
19508 * debugger/DebuggerCallFrame.h:
19509 * heap/AllocationSpace.h:
19510 * heap/HandleHeap.h:
19512 * heap/MachineStackMarker.h:
19513 * heap/MarkStack.h:
19514 * heap/VTableSpectrum.h:
19515 * heap/WriteBarrierSupport.h:
19517 * parser/ParserArena.h:
19518 * profiler/Profile.h:
19519 * runtime/ArgList.h:
19520 * runtime/CallData.h:
19521 * runtime/Completion.h:
19522 * runtime/ConstructData.h:
19523 * runtime/DateInstance.h:
19525 * runtime/ExceptionHelpers.h:
19526 * runtime/FunctionConstructor.h:
19527 * runtime/Identifier.h:
19528 * runtime/InitializeThreading.h:
19529 * runtime/InternalFunction.h:
19530 * runtime/JSArray.h:
19531 * runtime/JSByteArray.h:
19532 * runtime/JSCell.h:
19533 * runtime/JSFunction.h:
19534 * runtime/JSGlobalData.cpp:
19535 * runtime/JSGlobalData.h:
19536 * runtime/JSGlobalObject.h:
19537 * runtime/JSGlobalThis.h:
19538 * runtime/JSLock.h:
19539 * runtime/JSObject.h:
19540 * runtime/JSString.h:
19541 * runtime/JSValue.h:
19542 * runtime/JSVariableObject.h:
19543 * runtime/Lookup.h:
19544 * runtime/MemoryStatistics.h:
19545 * runtime/ObjectPrototype.h:
19546 * runtime/Options.h:
19547 * runtime/PropertyDescriptor.h:
19548 * runtime/PropertyNameArray.h:
19549 * runtime/PropertySlot.h:
19550 * runtime/RegExp.h:
19551 * runtime/RegExpObject.h:
19552 * runtime/SamplingCounter.h:
19553 * runtime/SmallStrings.h:
19554 * runtime/StringObject.h:
19555 * runtime/Structure.h:
19556 * runtime/TimeoutChecker.h:
19557 * runtime/UString.h:
19558 * runtime/WriteBarrier.h:
19559 * wtf/ArrayBufferView.h:
19561 * wtf/CryptographicallyRandomNumber.h:
19562 * wtf/CurrentTime.h:
19564 * wtf/DecimalNumber.h:
19565 * wtf/FastMalloc.cpp:
19566 * wtf/FastMalloc.h:
19568 * wtf/MainThread.h:
19569 * wtf/MetaAllocator.h:
19570 * wtf/MetaAllocatorHandle.h:
19571 * wtf/OSAllocator.h:
19573 * wtf/RandomNumber.h:
19574 * wtf/RefCountedLeakCounter.h:
19576 * wtf/Threading.cpp:
19578 * wtf/ThreadingPrimitives.h:
19579 * wtf/WTFThreadData.h:
19581 * wtf/text/AtomicString.h:
19582 * wtf/text/CString.h:
19583 * wtf/text/StringBuilder.h:
19584 * wtf/text/StringImpl.h:
19585 * wtf/text/WTFString.h:
19586 * wtf/unicode/Collator.h:
19587 * wtf/unicode/UTF8.h:
19589 * yarr/YarrPattern.h:
19591 2012-01-12 MORITA Hajime <morrita@google.com>
19593 [Chromium] JSExportMacros.h should be visible.
19594 https://bugs.webkit.org/show_bug.cgi?id=76147
19596 Reviewed by Tony Chang.
19600 2012-01-12 David Levin <levin@chromium.org>
19602 HwndDC is a better name than OwnGetDC.
19603 https://bugs.webkit.org/show_bug.cgi?id=76235
19605 Reviewed by Dmitry Titov.
19607 This is a better name for two reasons:
19608 1. "Own" implies "delete". In this case, the final call is a release (ReleaseDC).
19609 2. "Ref" would be a better name due to the release but the RefPtr (and OwnPtr)
19610 classes always take something to hold on to. In this case, the object (the DC)
19611 is created by the class once it is given a Window to ensure that the HDC
19612 was actually created using GetDC.
19614 * JavaScriptCore.gyp/JavaScriptCore.gyp:
19615 * JavaScriptCore.gypi:
19616 * wtf/win/HwndDCWin.h: Renamed from Source/JavaScriptCore/wtf/win/OwnGetDCWin.h.
19617 (WTF::HwndDC::HwndDC):
19618 (WTF::HwndDC::~HwndDC):
19619 (WTF::HwndDC::operator HDC):
19621 2012-01-12 Gavin Barraclough <barraclough@apple.com>
19623 Clean up putDirect (part 2)
19624 https://bugs.webkit.org/show_bug.cgi?id=76232
19626 Reviewed by Sam Weinig.
19628 Rename putWithAttributes to putDirectVirtual, to identify that this
19629 has the same unchecked-DefineOwnProperty behaviour, change putDirectInternal
19630 to be templated on an enum indicating which behaviour it is supposed to be
19631 implementing, and change clients that are defining properties to call
19632 putDirectInternal correctly.
19634 * API/JSObjectRef.cpp:
19635 (JSObjectSetProperty):
19636 * JavaScriptCore.exp:
19637 * debugger/DebuggerActivation.cpp:
19638 (JSC::DebuggerActivation::putDirectVirtual):
19639 * debugger/DebuggerActivation.h:
19640 * interpreter/Interpreter.cpp:
19641 (JSC::Interpreter::execute):
19642 * runtime/ClassInfo.h:
19643 * runtime/Error.cpp:
19644 (JSC::addErrorInfo):
19645 * runtime/JSActivation.cpp:
19646 (JSC::JSActivation::putDirectVirtual):
19647 * runtime/JSActivation.h:
19648 * runtime/JSCell.cpp:
19649 (JSC::JSCell::putDirectVirtual):
19650 * runtime/JSCell.h:
19651 * runtime/JSGlobalObject.cpp:
19652 (JSC::JSGlobalObject::putDirectVirtual):
19653 * runtime/JSGlobalObject.h:
19654 * runtime/JSObject.cpp:
19655 (JSC::JSObject::put):
19656 (JSC::JSObject::putDirectVirtual):
19657 (JSC::JSObject::defineGetter):
19658 (JSC::JSObject::initializeGetterSetterProperty):
19659 (JSC::JSObject::defineSetter):
19660 (JSC::putDescriptor):
19661 * runtime/JSObject.h:
19662 (JSC::JSObject::putDirectInternal):
19663 (JSC::JSObject::putOwnDataProperty):
19664 (JSC::JSObject::putDirect):
19665 * runtime/JSStaticScopeObject.cpp:
19666 (JSC::JSStaticScopeObject::putDirectVirtual):
19667 * runtime/JSStaticScopeObject.h:
19668 * runtime/JSVariableObject.cpp:
19669 (JSC::JSVariableObject::putDirectVirtual):
19670 * runtime/JSVariableObject.h:
19672 2012-01-12 Gavin Barraclough <barraclough@apple.com>
19674 Clean up putDirect (part 1)
19675 https://bugs.webkit.org/show_bug.cgi?id=76232
19677 Reviewed by Sam Weinig.
19679 putDirect has ambiguous semantics, clean these up a bit.
19681 putDirect generally behaves a bit like a fast defineOwnProperty, but one that
19682 always creates the property, with no checking to validate the put it permitted.
19684 It also encompasses two slightly different behaviors.
19685 (1) a fast form of put for JSActivation, which doesn't have to handle searching
19686 the prototype chain, getter/setter properties, or the magic __proto__ value.
19687 Break this out as a new method, 'putOwnDataProperty'.
19688 (2) the version of putDirect on JSValue will also check for overwriting ReadOnly
19689 values, in strict mode. This is, however, not so smart on a few level, since
19690 it is only called from op_put_by_id with direct set, which is only used with
19691 an object as the base, and is only used to put new properties onto objects.
19693 * dfg/DFGOperations.cpp:
19694 * interpreter/Interpreter.cpp:
19695 (JSC::Interpreter::privateExecute):
19696 * jit/JITStubs.cpp:
19697 (JSC::DEFINE_STUB_FUNCTION):
19698 * runtime/JSActivation.cpp:
19699 (JSC::JSActivation::put):
19700 * runtime/JSFunction.cpp:
19701 (JSC::JSFunction::getOwnPropertySlot):
19702 * runtime/JSObject.h:
19703 (JSC::JSObject::putOwnDataProperty):
19704 * runtime/JSValue.h:
19706 2012-01-12 Gavin Barraclough <barraclough@apple.com>
19708 https://bugs.webkit.org/show_bug.cgi?id=76141
19709 defineSetter/defineGetter may fail to update Accessor attribute
19711 Reviewed by Oliver Hunt.
19713 * runtime/JSObject.cpp:
19714 (JSC::JSObject::defineGetter):
19715 (JSC::JSObject::initializeGetterSetterProperty):
19716 (JSC::JSObject::defineSetter):
19717 * runtime/Structure.cpp:
19718 (JSC::Structure::attributeChangeTransition):
19719 * runtime/Structure.h:
19721 2012-01-12 David Levin <levin@chromium.org>
19723 [chromium] Fix DC leak in WebScreenInfoFactory.
19724 https://bugs.webkit.org/show_bug.cgi?id=76203
19726 Reviewed by Dmitry Titov.
19728 * JavaScriptCore.gyp/JavaScriptCore.gyp: Added OwnGetDCWin.h
19729 * JavaScriptCore.gypi: Added OwnGetDCWin.h
19730 * JavaScriptCore/wtf/win/OwnGetDCWin.h: Made an owner class for GetDC which needs ReleaseDC as opposed to DeleteDC.
19732 2012-01-11 Gavin Barraclough <barraclough@apple.com>
19734 Allow accessor get/set property to be set to undefined
19735 https://bugs.webkit.org/show_bug.cgi?id=76148
19737 Reviewed by Oliver Hunt.
19739 AccessorDescriptor properties may have their get & set properties defined to reference a function
19740 (Callable object) or be set to undefined. Valid PropertyDescriptors created by toPropertyDescriptor
19741 (defined from JS code via Object.defineProperty, etc) have get and set properties that are in one of
19742 three states (1) nonexistent, (2) set to undefined, or (3) a function (any Callable object).
19744 On the PropertyDescriptor object these three states are represneted by JSValue(), jsUndefined(), and
19745 any JSObject* (with a constraint that this must be callable).
19747 Logically the get/set property of an accessor descriptor on an object might be in any of the three
19748 states above, but in practice there is no way to distinguish between the first two states. As such
19749 we stor the get/set values in property storage in a JSObject* field, with 0 indicating absent or
19750 undefined. When unboxing to a PropertyDescriptor, map this back to a JS undefined value.
19752 * runtime/GetterSetter.h:
19753 (JSC::GetterSetter::setGetter):
19754 (JSC::GetterSetter::setSetter):
19755 - Allow the getter/setter to be cleared.
19756 * runtime/JSArray.cpp:
19757 (JSC::JSArray::putDescriptor):
19758 - Changed to call getterObject/setterObject.
19759 (JSC::JSArray::defineOwnNumericProperty):
19761 * runtime/JSObject.cpp:
19762 (JSC::putDescriptor):
19763 (JSC::JSObject::defineOwnProperty):
19764 - Changed to call getterObject/setterObject.
19765 * runtime/ObjectConstructor.cpp:
19766 (JSC::objectConstructorGetOwnPropertyDescriptor):
19767 - getter/setter values read from properties on object are never missing, they will now be set as undefined by 'setDescriptor'.
19768 (JSC::toPropertyDescriptor):
19769 - Do not translate undefined->empty, this loses an important distinction between a get/set property being absent, or being explicitly set to undefined.
19770 * runtime/PropertyDescriptor.cpp:
19771 (JSC::PropertyDescriptor::getterObject):
19772 (JSC::PropertyDescriptor::setterObject):
19773 - Accessors to convert the get/set property to an object pointer, converting undefined to 0.
19774 (JSC::PropertyDescriptor::setDescriptor):
19775 (JSC::PropertyDescriptor::setAccessorDescriptor):
19776 - Translate a getter/setter internally represented at 0 to undefined, indicating that it is present.
19777 * runtime/PropertyDescriptor.h:
19778 - Declare getterObject/setterObject.
19780 2012-01-12 Zeno Albisser <zeno@webkit.org>
19782 [Qt][WK2][Mac] Conflict of MacTypes.h defining a Fixed type after r104560.
19783 https://bugs.webkit.org/show_bug.cgi?id=76175
19785 Defining ENABLE_CSS_FILTERS leads to ambiguous references
19786 due to MacTypes.h being included.
19787 Defining CF_OPEN_SOURCE works around this problem.
19789 Reviewed by Simon Hausmann.
19793 2012-01-12 Simon Hausmann <simon.hausmann@nokia.com>
19795 Make the new WTF module build on Qt
19796 https://bugs.webkit.org/show_bug.cgi?id=76163
19798 Reviewed by Tor Arne Vestbø.
19800 * JavaScriptCore.pro: Removed wtf from the subdirs to build.
19802 2012-01-11 Filip Pizlo <fpizlo@apple.com>
19804 CodeBlock::m_executeCounter should be renamed to CodeBlock::m_jitExecuteCounter
19805 https://bugs.webkit.org/show_bug.cgi?id=76144
19806 <rdar://problem/10681711>
19808 Rubber stamped by Gavin Barraclough.
19810 * bytecode/CodeBlock.h:
19811 (JSC::CodeBlock::addressOfJITExecuteCounter):
19812 (JSC::CodeBlock::offsetOfJITExecuteCounter):
19813 (JSC::CodeBlock::jitExecuteCounter):
19814 (JSC::CodeBlock::optimizeNextInvocation):
19815 (JSC::CodeBlock::dontOptimizeAnytimeSoon):
19816 (JSC::CodeBlock::optimizeAfterWarmUp):
19817 (JSC::CodeBlock::optimizeAfterLongWarmUp):
19818 (JSC::CodeBlock::optimizeSoon):
19819 * dfg/DFGOSRExitCompiler32_64.cpp:
19820 (JSC::DFG::OSRExitCompiler::compileExit):
19821 * dfg/DFGOSRExitCompiler64.cpp:
19822 (JSC::DFG::OSRExitCompiler::compileExit):
19824 (JSC::JIT::emitOptimizationCheck):
19826 2012-01-11 Gavin Barraclough <barraclough@apple.com>
19828 Merge 'Getter'/'Setter' attributes into 'Accessor'
19829 https://bugs.webkit.org/show_bug.cgi?id=76141
19831 Reviewed by Filip Pizlo.
19833 These are currently ambiguous (and used inconsistently). It would logically appear
19834 that either being bit set implies that the corresponding type of accessor is present
19835 but (a) we don't correctly enforce this, and (b) this means the attributes would not
19836 be able to distinguish between a data descriptor and an accessor descriptor with
19837 neither a getter nor setter defined (which is a descriptor permissible under the spec).
19838 This ambiguity would lead to unsafe property caching behavior (though this does not
19839 represent an actual current bug, since we are currently unable to create descriptors
19840 that have neither a getter nor setter, it just prevents us from doing so).
19842 * runtime/Arguments.cpp:
19843 (JSC::Arguments::createStrictModeCallerIfNecessary):
19844 (JSC::Arguments::createStrictModeCalleeIfNecessary):
19845 * runtime/JSArray.cpp:
19846 (JSC::SparseArrayValueMap::put):
19847 (JSC::JSArray::putDescriptor):
19848 * runtime/JSBoundFunction.cpp:
19849 (JSC::JSBoundFunction::finishCreation):
19850 * runtime/JSFunction.cpp:
19851 (JSC::JSFunction::getOwnPropertySlot):
19852 (JSC::JSFunction::getOwnPropertyDescriptor):
19853 * runtime/JSObject.cpp:
19854 (JSC::JSObject::defineGetter):
19855 (JSC::JSObject::initializeGetterSetterProperty):
19856 (JSC::JSObject::defineSetter):
19857 (JSC::putDescriptor):
19858 (JSC::JSObject::defineOwnProperty):
19859 * runtime/JSObject.h:
19860 * runtime/ObjectConstructor.cpp:
19861 (JSC::objectConstructorDefineProperty):
19862 * runtime/PropertyDescriptor.cpp:
19863 (JSC::PropertyDescriptor::setDescriptor):
19864 (JSC::PropertyDescriptor::setAccessorDescriptor):
19865 (JSC::PropertyDescriptor::setSetter):
19866 (JSC::PropertyDescriptor::setGetter):
19867 (JSC::PropertyDescriptor::attributesOverridingCurrent):
19869 2012-01-11 Gavin Barraclough <barraclough@apple.com>
19871 Object.defineProperty([], 'length', {}) should not make length read-only
19872 https://bugs.webkit.org/show_bug.cgi?id=76097
19874 Reviewed by Oliver Hunt.
19876 * runtime/JSArray.cpp:
19877 (JSC::JSArray::defineOwnProperty):
19878 - We should be checking writablePresent().
19880 2012-01-11 Filip Pizlo <fpizlo@apple.com>
19882 Code duplication for invoking the JIT and DFG should be reduced
19883 https://bugs.webkit.org/show_bug.cgi?id=76117
19884 <rdar://problem/10680189>
19886 Rubber stamped by Geoff Garen.
19888 * GNUmakefile.list.am:
19889 * JavaScriptCore.xcodeproj/project.pbxproj:
19890 * jit/JITDriver.h: Added.
19891 (JSC::jitCompileIfAppropriate):
19892 (JSC::jitCompileFunctionIfAppropriate):
19893 * runtime/Executable.cpp:
19894 (JSC::EvalExecutable::compileInternal):
19895 (JSC::ProgramExecutable::compileInternal):
19896 (JSC::FunctionExecutable::compileForCallInternal):
19897 (JSC::FunctionExecutable::compileForConstructInternal):
19899 2012-01-11 Geoffrey Garen <ggaren@apple.com>
19901 Bytecode dumping is broken for call opcodes (due to two new operands)
19902 https://bugs.webkit.org/show_bug.cgi?id=75886
19904 Reviewed by Oliver Hunt.
19906 * bytecode/CodeBlock.cpp:
19907 (JSC::CodeBlock::printCallOp): Made a helper function, so I wouldn't have
19908 to fix this more than once. The helper function skips the extra two operands
19909 at the end of the opcode, used for optimization.
19911 (JSC::CodeBlock::dump): Used the helper function.
19913 * bytecode/CodeBlock.h: Declared the helper function.
19915 2012-01-09 Geoffrey Garen <ggaren@apple.com>
19917 REGRESSION: d3 Bullet Charts demo doesn't work (call with argument assignment is broken)
19918 https://bugs.webkit.org/show_bug.cgi?id=75911
19920 * bytecompiler/BytecodeGenerator.h:
19921 (JSC::BytecodeGenerator::emitNodeForLeftHandSide): Cleanup: No need to
19922 explicitly cast to our return type in C++.
19924 * bytecompiler/NodesCodegen.cpp:
19925 (JSC::FunctionCallResolveNode::emitBytecode):
19926 (JSC::ApplyFunctionCallDotNode::emitBytecode): Make sure to copy our function
19927 into a temporary register before evaluating our arguments, since argument
19928 evaluation might include function calls or assignments that overwrite our callee by name.
19930 2012-01-11 Michael Saboff <msaboff@apple.com>
19932 v8-regexp spends 35% of its time allocating and copying internal regexp results data
19933 https://bugs.webkit.org/show_bug.cgi?id=76079
19935 Reviewed by Geoffrey Garen.
19937 Added a new RegExpResults struct that has the input string, the number of
19938 subexpressions and the output vector. Changed RegExpConstructor to
19939 include a RegExpConstructorPrivate instead of having a reference to one.
19940 Changed RegExpMatchesArray to include a RegExpResults instead of a
19941 reference to a RegExpConstructorPrivate. Created an overloaded assignment
19942 operator to assign a RegExpConstructorPrivate to a RegExpResults.
19943 Collectively this change is worth 24% performance improvement to v8-regexp.
19945 * runtime/RegExpConstructor.cpp:
19946 (JSC::RegExpResult::operator=):
19947 (JSC::RegExpConstructor::RegExpConstructor):
19948 (JSC::RegExpMatchesArray::RegExpMatchesArray):
19949 (JSC::RegExpMatchesArray::finishCreation):
19950 (JSC::RegExpMatchesArray::~RegExpMatchesArray):
19951 (JSC::RegExpMatchesArray::fillArrayInstance):
19952 (JSC::RegExpConstructor::arrayOfMatches):
19953 (JSC::RegExpConstructor::getBackref):
19954 (JSC::RegExpConstructor::getLastParen):
19955 (JSC::RegExpConstructor::getLeftContext):
19956 (JSC::RegExpConstructor::getRightContext):
19957 (JSC::RegExpConstructor::setInput):
19958 (JSC::RegExpConstructor::input):
19959 (JSC::RegExpConstructor::setMultiline):
19960 (JSC::RegExpConstructor::multiline):
19961 * runtime/RegExpConstructor.h:
19962 (JSC::RegExpResult::RegExpResult):
19963 (JSC::RegExpConstructor::performMatch):
19964 * runtime/RegExpMatchesArray.h:
19965 (JSC::RegExpMatchesArray::create):
19966 (JSC::RegExpMatchesArray::getOwnPropertySlot):
19967 (JSC::RegExpMatchesArray::getOwnPropertySlotByIndex):
19968 (JSC::RegExpMatchesArray::getOwnPropertyDescriptor):
19969 (JSC::RegExpMatchesArray::put):
19970 (JSC::RegExpMatchesArray::putByIndex):
19971 (JSC::RegExpMatchesArray::deleteProperty):
19972 (JSC::RegExpMatchesArray::deletePropertyByIndex):
19973 (JSC::RegExpMatchesArray::getOwnPropertyNames):
19975 2012-01-11 Eugene Girard <girard@google.com>
19977 Typo in error message: Unexpected token 'defualt'
19978 https://bugs.webkit.org/show_bug.cgi?id=75105
19980 Reviewed by Simon Fraser.
19983 (JSC::Parser::getTokenName):
19985 2012-01-11 Anders Carlsson <andersca@apple.com>
19987 Assertion failure in JSC::allocateCell trying to allocate a JSString
19988 https://bugs.webkit.org/show_bug.cgi?id=76101
19990 Reviewed by Adam Roben.
19992 Remove the ExecutableBase::s_info and JSString::s_info static member variables from the .def file and
19993 export them explicitly using the JS_EXPORTDATA macro.
19995 member variables explicitly using
19996 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
19997 * runtime/Executable.h:
19998 * runtime/JSString.h:
20000 2012-01-10 Mark Rowe <mrowe@apple.com>
20002 <rdar://problem/10673792> jsc should install directly in to versioned Resources subfolder
20004 This ensures that jsc ends up in a consistent location whether built in to the same DSTROOT
20005 as JavaScriptCore.framework or in to a different one.
20007 Rubber-stamped by Dan Bernstein.
20009 * Configurations/JSC.xcconfig: Update INSTALL_PATH.
20011 2012-01-10 Filip Pizlo <fpizlo@apple.com>
20013 DFG inlining block linking compares BlockIndex against bytecode index
20014 https://bugs.webkit.org/show_bug.cgi?id=76018
20015 <rdar://problem/10671979>
20017 Reviewed by Gavin Barraclough.
20019 * dfg/DFGByteCodeParser.cpp:
20020 (JSC::DFG::ByteCodeParser::parseCodeBlock):
20022 2012-01-10 Filip Pizlo <fpizlo@apple.com>
20024 CodeBlock.h declares too many things
20025 https://bugs.webkit.org/show_bug.cgi?id=76001
20027 Rubber stamped by Gavin Barraclough.
20029 Removed all non-CodeBlock type declarations from CodeBlock.h, and put them
20030 into separate header files. Also removed all non-CodeBlock method implementations
20031 from CodeBlock.cpp and put them into corresponding cpp files.
20034 * GNUmakefile.list.am:
20035 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
20036 * JavaScriptCore.xcodeproj/project.pbxproj:
20038 * assembler/RepatchBuffer.h:
20039 * bytecode/CallLinkInfo.cpp: Added.
20040 (JSC::CallLinkInfo::unlink):
20041 * bytecode/CallLinkInfo.h: Added.
20042 (JSC::CallLinkInfo::callTypeFor):
20043 (JSC::CallLinkInfo::CallLinkInfo):
20044 (JSC::CallLinkInfo::~CallLinkInfo):
20045 (JSC::CallLinkInfo::isLinked):
20046 (JSC::CallLinkInfo::seenOnce):
20047 (JSC::CallLinkInfo::setSeen):
20048 (JSC::getCallLinkInfoReturnLocation):
20049 (JSC::getCallLinkInfoBytecodeIndex):
20050 * bytecode/CallReturnOffsetToBytecodeOffset.h: Added.
20051 (JSC::CallReturnOffsetToBytecodeOffset::CallReturnOffsetToBytecodeOffset):
20052 (JSC::getCallReturnOffset):
20053 * bytecode/CodeBlock.cpp:
20054 * bytecode/CodeBlock.h:
20055 * bytecode/CodeType.h: Added.
20056 * bytecode/ExpressionRangeInfo.h: Added.
20057 * bytecode/GlobalResolveInfo.h: Added.
20058 (JSC::GlobalResolveInfo::GlobalResolveInfo):
20059 * bytecode/HandlerInfo.h: Added.
20060 * bytecode/LineInfo.h: Added.
20061 * bytecode/MethodCallLinkInfo.cpp: Added.
20062 (JSC::MethodCallLinkInfo::reset):
20063 * bytecode/MethodCallLinkInfo.h: Added.
20064 (JSC::MethodCallLinkInfo::MethodCallLinkInfo):
20065 (JSC::MethodCallLinkInfo::seenOnce):
20066 (JSC::MethodCallLinkInfo::setSeen):
20067 (JSC::getMethodCallLinkInfoReturnLocation):
20068 (JSC::getMethodCallLinkInfoBytecodeIndex):
20069 * bytecode/StructureStubInfo.h:
20070 (JSC::getStructureStubInfoReturnLocation):
20071 (JSC::getStructureStubInfoBytecodeIndex):
20073 2012-01-10 Anders Carlsson <andersca@apple.com>
20075 Hang opening movie that requires authentication
20076 https://bugs.webkit.org/show_bug.cgi?id=75989
20077 <rdar://problem/9601915>
20079 Reviewed by Sam Weinig.
20081 * wtf/Functional.h:
20082 Add function wrapper for a function that takes three parameters.
20084 2012-01-10 Filip Pizlo <fpizlo@apple.com>
20086 CodeBlock::m_numParameters should be encapsulated
20087 https://bugs.webkit.org/show_bug.cgi?id=75985
20088 <rdar://problem/10671020>
20090 Reviewed by Oliver Hunt.
20092 Encapsulated CodeBlock::m_numParameters and hooked argument profile creation
20093 into it. This appears to be performance neutral.
20095 * bytecode/CodeBlock.cpp:
20096 (JSC::CodeBlock::CodeBlock):
20097 (JSC::CodeBlock::setNumParameters):
20098 (JSC::CodeBlock::addParameter):
20099 * bytecode/CodeBlock.h:
20100 (JSC::CodeBlock::numParameters):
20101 (JSC::CodeBlock::addressOfNumParameters):
20102 (JSC::CodeBlock::offsetOfNumParameters):
20103 (JSC::CodeBlock::numberOfArgumentValueProfiles):
20104 * bytecompiler/BytecodeGenerator.cpp:
20105 (JSC::BytecodeGenerator::BytecodeGenerator):
20106 (JSC::BytecodeGenerator::addParameter):
20107 (JSC::BytecodeGenerator::emitReturn):
20108 * dfg/DFGAbstractState.cpp:
20109 (JSC::DFG::AbstractState::AbstractState):
20110 * dfg/DFGByteCodeParser.cpp:
20111 (JSC::DFG::ByteCodeParser::ByteCodeParser):
20112 (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
20113 * dfg/DFGGraph.cpp:
20114 (JSC::DFG::Graph::predictArgumentTypes):
20115 * dfg/DFGJITCompiler.cpp:
20116 (JSC::DFG::JITCompiler::compileFunction):
20117 * dfg/DFGOperations.cpp:
20118 * dfg/DFGSpeculativeJIT.cpp:
20119 (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
20120 * dfg/DFGSpeculativeJIT.h:
20121 (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
20122 * interpreter/Interpreter.cpp:
20123 (JSC::Interpreter::slideRegisterWindowForCall):
20124 (JSC::Interpreter::dumpRegisters):
20125 (JSC::Interpreter::execute):
20126 (JSC::Interpreter::prepareForRepeatCall):
20128 (JSC::JIT::privateCompile):
20129 * jit/JITStubs.cpp:
20130 (JSC::arityCheckFor):
20131 (JSC::lazyLinkFor):
20132 * runtime/Executable.cpp:
20133 (JSC::FunctionExecutable::compileForCallInternal):
20134 (JSC::FunctionExecutable::compileForConstructInternal):
20136 2012-01-10 Gavin Barraclough <barraclough@apple.com>
20138 Build fix following https://bugs.webkit.org/show_bug.cgi?id=75935
20142 * runtime/JSArray.cpp:
20143 (JSC::JSArray::getOwnPropertyNames):
20144 (JSC::JSArray::setLength):
20146 2012-01-10 Gavin Barraclough <barraclough@apple.com>
20150 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
20152 2012-01-10 Gavin Barraclough <barraclough@apple.com>
20154 Do not allow Array length to be set if it is non-configurable
20155 https://bugs.webkit.org/show_bug.cgi?id=75935
20157 Reviewed by Sam Weinig.
20159 Do not allow Array length to be set if it is non-configurable, and if the new
20160 length is less than the old length then intervening properties should removed
20161 in reverse order. Removal of properties should cease if an intervening indexed
20162 property being removed is non-configurable.
20164 * JavaScriptCore.exp:
20165 - Removed export for setLength.
20166 * runtime/ArrayPrototype.cpp:
20167 (JSC::arrayProtoFuncConcat):
20168 - JSArray::setLength now takes an ExecState*
20169 (JSC::arrayProtoFuncSlice):
20170 - JSArray::setLength now takes an ExecState*
20171 * runtime/JSArray.cpp:
20172 (JSC::JSArray::defineOwnProperty):
20173 - JSArray::setLength now takes an ExecState*
20174 (JSC::JSArray::put):
20175 - JSArray::setLength now takes an ExecState*
20176 (JSC::compareKeysForQSort):
20177 - Keys extracted from the map can be stored as unsigneds.
20178 (JSC::JSArray::getOwnPropertyNames):
20179 - Keys extracted from the map can be stored as unsigneds.
20180 (JSC::JSArray::setLength):
20181 - Check lengthIsReadOnly(), rather than copying the entire map to iterate
20182 over to determine which keys to remove, instead just copy the keys from
20183 the map to a Vector. When inSparseMode sort the keys in the Vector so
20184 that we can remove properties in reverse order.
20185 * runtime/JSArray.h:
20186 - JSArray::setLength now takes an ExecState*
20188 2012-01-10 Gavin Barraclough <barraclough@apple.com>
20190 Use SameValue to compare property descriptor values
20191 https://bugs.webkit.org/show_bug.cgi?id=75975
20193 Reviewed by Sam Weinig.
20195 Rather than strictEqual.
20197 * runtime/JSArray.cpp:
20198 (JSC::JSArray::defineOwnNumericProperty):
20199 - Missing configurablePresent() check.
20200 * runtime/JSObject.cpp:
20201 (JSC::JSObject::defineOwnProperty):
20203 * runtime/PropertyDescriptor.cpp:
20205 - Moved from JSArray.cpp, fix NaN comparison.
20206 (JSC::PropertyDescriptor::equalTo):
20208 * runtime/PropertyDescriptor.h:
20209 - Added declaration for sameValue.
20210 2012-01-09 Gavin Barraclough <barraclough@apple.com>
20212 Error handling : in ISO8601 timezone
20213 https://bugs.webkit.org/show_bug.cgi?id=75919
20215 Reviewed by Sam Weinig.
20217 * wtf/DateMath.cpp:
20218 (WTF::parseDateFromNullTerminatedCharacters):
20219 - need to increment the string position.
20221 2012-01-09 Mark Rowe <mrowe@apple.com>
20223 JavaScriptCore executable targets shouldn't explicitly depend on the JavaScriptCore framework target
20224 <http://webkit.org/b/75907> / <rdar://problem/10659862>
20226 We'd like for it to be possible to build jsc without building JavaScriptCore.framework and the explicit
20227 dependencies prevent this.
20229 Reviewed by Dan Bernstein.
20231 * JavaScriptCore.xcodeproj/project.pbxproj:
20233 2012-01-09 Adam Treat <atreat@rim.com>
20235 Log is a little to verbose for blackberry port
20236 https://bugs.webkit.org/show_bug.cgi?id=75728
20238 The BlackBerry::Platform::Log* functions take care of the call to vfprintf
20239 which is resulting in unintentional noise in our logs. Add a conditional
20242 Change to using BlackBerry::Platform::logStreamV which does not insert
20243 threading info and newlines unlike BlackBerry::Platform::log.
20245 Finally, add log locking and unlocking which the BlackBerry platform
20246 uses to ensure that N threads do not trample on each other's logs.
20248 Reviewed by Rob Buis.
20250 * wtf/Assertions.cpp:
20251 (WTFLogLocker::WTFReportAssertionFailure):
20252 (WTFLogLocker::WTFReportAssertionFailureWithMessage):
20253 (WTFLogLocker::WTFReportArgumentAssertionFailure):
20254 (WTFLogLocker::WTFReportFatalError):
20255 (WTFLogLocker::WTFReportError):
20256 (WTFLogLocker::WTFLog):
20257 (WTFLogLocker::WTFLogVerbose):
20259 2012-01-09 Gavin Barraclough <barraclough@apple.com>
20261 https://bugs.webkit.org/show_bug.cgi?id=75789
20262 defineOwnProperty not implemented for Array objects
20264 Reviewed by Sam Weinig.
20266 Implements support for getter/setter & non-default attribute properties on arrays,
20267 by forcing them into a dictionary-like 'SparseMode'. This fixes ~300 test-262
20270 * JavaScriptCore.exp:
20272 * dfg/DFGOperations.cpp:
20273 - JSArray::pop now requires an exec state.
20274 * runtime/ArrayPrototype.cpp:
20275 (JSC::arrayProtoFuncPop):
20276 - JSArray::pop now requires an exec state.
20277 * runtime/JSArray.cpp:
20278 (JSC::SparseArrayValueMap::add):
20279 - Add a potentially empty entry into the map.
20280 (JSC::SparseArrayValueMap::put):
20281 - Changed to call setter.
20282 (JSC::SparseArrayEntry::get):
20284 (JSC::SparseArrayEntry::getNonSparseMode):
20285 - does not call getters.
20286 (JSC::JSArray::enterSparseMode):
20287 - Convert into 'SparseMode' - removes the vectors, don't allow it to be recreated.
20288 (JSC::JSArray::putDescriptor):
20289 - Create a numeric property based on a descriptor.
20293 - Helper for the [[DefineOwnProperty]] algorithm.
20294 (JSC::JSArray::defineOwnNumericProperty):
20295 - Define an indexed property on an array object.
20296 (JSC::JSArray::setLengthWritable):
20297 - Marks the length read-only, enters SparseMode as necessary.
20298 (JSC::JSArray::defineOwnProperty):
20299 - Defines either an indexed property or 'length' on an array object.
20300 (JSC::JSArray::getOwnPropertySlotByIndex):
20301 - Updated to correctly handle accessor descriptors & attributes.
20302 (JSC::JSArray::getOwnPropertyDescriptor):
20303 - Updated to correctly handle accessor descriptors & attributes.
20304 (JSC::JSArray::put):
20305 - Pass strict mode flag to setLength.
20306 (JSC::JSArray::putByIndex):
20307 - putByIndexBeyondVectorLength requires an ExecState* rather than a JSGloablData&.
20308 (JSC::JSArray::putByIndexBeyondVectorLength):
20309 - Pass exec to SparseArrayValueMap::put.
20310 (JSC::JSArray::deletePropertyByIndex):
20311 - Do not allow deletion of non-configurable properties.
20312 (JSC::compareKeysForQSort):
20313 - used in implementation of getOwnPropertyNames.
20314 (JSC::JSArray::getOwnPropertyNames):
20315 - Properties in the sparse map should be iterated in order.
20316 (JSC::JSArray::setLength):
20317 - Updated to take a 'shouldThrow' flag, return a result indicating error.
20318 (JSC::JSArray::pop):
20319 - pop should throw an error if length is not writable, even if the array is empty.
20320 (JSC::JSArray::push):
20321 - putByIndexBeyondVectorLength requires an ExecState* rather than a JSGloablData&.
20322 (JSC::JSArray::sort):
20323 - Changed 'get' to 'getNonSparseMode' (can't be getters to call).
20324 (JSC::JSArray::compactForSorting):
20325 - Changed 'get' to 'getNonSparseMode' (can't be getters to call).
20326 * runtime/JSArray.h:
20327 (JSC::SparseArrayValueMap::lengthIsReadOnly):
20328 - Check if the length is read only.
20329 (JSC::SparseArrayValueMap::setLengthIsReadOnly):
20330 - Mark the length as read only.
20331 (JSC::SparseArrayValueMap::find):
20332 - Moved into header.
20333 (JSC::JSArray::isLengthWritable):
20334 - Wraps SparseArrayValueMap::lengthIsReadOnly.
20335 * runtime/JSObject.cpp:
20336 (JSC::JSObject::defineOwnProperty):
20337 - Should be returning the result of putDescriptor.
20338 * runtime/PropertyDescriptor.cpp:
20339 (JSC::PropertyDescriptor::attributesOverridingCurrent):
20340 - Added attributesOverridingCurrent - this should probably be merged with attributesWithOverride.
20341 * runtime/PropertyDescriptor.h:
20342 - Added attributesOverridingCurrent.
20344 2012-01-09 Pavel Heimlich <tropikhajma@gmail.com>
20346 There is no support for fastcall in Solaris Studio.
20347 Fixes build on Solaris.
20348 https://bugs.webkit.org/show_bug.cgi?id=75736
20350 Reviewed by Gavin Barraclough.
20354 2012-01-09 Pavel Heimlich <tropikhajma@gmail.com>
20356 Fix build failure on Solaris
20357 https://bugs.webkit.org/show_bug.cgi?id=75733
20359 Reviewed by Gavin Barraclough.
20363 2012-01-01 Raphael Kubo da Costa <kubo@profusion.mobi>
20365 [CMake] Clean up some cruft from WTF's CMakeLists.txt
20366 https://bugs.webkit.org/show_bug.cgi?id=75420
20368 Reviewed by Daniel Bates.
20370 * wtf/CMakeLists.txt: Remove the unused WTF_PORT_FLAGS variable; add
20371 all needed paths to WTF_INCLUDE_DIRECTORIES in a single place.
20373 2012-01-08 Xianzhu Wang <wangxianzhu@chromium.org>
20375 Fix compilation error about ListHashSetReverseIterator
20376 https://bugs.webkit.org/show_bug.cgi?id=75372
20378 Reviewed by Darin Adler.
20380 There is a typo in class ListHashSetReverseIterator:
20381 typedef ListHashSetConstIterator<ValueArg, inlineCapacity, HashArg> const_reverse_iterator;
20383 typedef ListHashSetConstReverseIterator<ValueArg, inlineCapacity, HashArg> const_reverse_iterator;
20385 * wtf/ListHashSet.h:
20387 2012-01-08 Ryosuke Niwa <rniwa@webkit.org>
20389 WinCE build fix after r104415.
20391 * jit/JITExceptions.cpp:
20392 * jit/JITExceptions.h:
20394 2012-01-08 Filip Pizlo <fpizlo@apple.com>
20396 The JIT's protocol for exception handling should be available to other parts of the system
20397 https://bugs.webkit.org/show_bug.cgi?id=75808
20398 <rdar://problem/10661025>
20400 Reviewed by Oliver Hunt.
20403 * GNUmakefile.list.am:
20404 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
20405 * JavaScriptCore.xcodeproj/project.pbxproj:
20407 * jit/JITExceptions.cpp: Added.
20408 (JSC::genericThrow):
20410 * jit/JITExceptions.h: Added.
20411 * jit/JITStubs.cpp:
20412 * runtime/JSGlobalData.h:
20414 2012-01-06 Hajime Morrita <morrita@chromium.org>
20416 https://bugs.webkit.org/show_bug.cgi?id=75296
20417 JSString should not have JS_EXPORTCLASS annotation
20419 Reviewed by Kevin Ollivier.
20421 * runtime/JSString.h: Removed JS_EXPORTCLASS annotation.
20422 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
20423 Added missing symbols which were hidden by JS_EXPORTCLASS.
20425 2012-01-06 Michael Saboff <msaboff@apple.com>
20427 JSArray::pop() should compare SparseArrayValueMap::find() to SparseArrayValueMap::notFound()
20428 https://bugs.webkit.org/show_bug.cgi?id=75757
20430 Reviewed by Gavin Barraclough.
20432 * runtime/JSArray.cpp:
20433 (JSC::JSArray::pop): Changed map->end() to map->notFound().
20435 2012-01-06 Filip Pizlo <fpizlo@apple.com>
20437 JIT stub slow paths that would be identical to that of an interpreter should be factored out
20438 https://bugs.webkit.org/show_bug.cgi?id=75743
20439 <rdar://problem/10657024>
20441 Reviewed by Geoff Garen.
20443 * GNUmakefile.list.am:
20444 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
20445 * JavaScriptCore.xcodeproj/project.pbxproj:
20446 * jit/JITStubs.cpp:
20447 (JSC::DEFINE_STUB_FUNCTION):
20448 * runtime/CommonSlowPaths.h: Added.
20449 (JSC::CommonSlowPaths::opInstanceOfSlow):
20450 (JSC::CommonSlowPaths::opIn):
20451 (JSC::CommonSlowPaths::opResolve):
20452 (JSC::CommonSlowPaths::opResolveSkip):
20453 (JSC::CommonSlowPaths::opResolveWithBase):
20454 (JSC::CommonSlowPaths::opResolveWithThis):
20456 2012-01-06 Sam Weinig <sam@webkit.org>
20460 * wtf/TypeTraits.cpp:
20462 2012-01-05 Michael Saboff <msaboff@apple.com>
20464 Default HashTraits for Opcode don't work for Opcode = 0
20465 https://bugs.webkit.org/show_bug.cgi?id=75595
20467 Reviewed by Oliver Hunt.
20469 Removed the populating of the m_opcodeIDTable table in the
20470 case where the OpcodeID and Opcode are the same (m_enabled is false).
20471 Instead we just cast the one type to the other.
20473 * interpreter/Interpreter.cpp:
20474 (JSC::Interpreter::initialize):
20475 (JSC::Interpreter::isOpcode):
20476 * interpreter/Interpreter.h:
20477 (JSC::Interpreter::getOpcodeID):
20479 2012-01-06 Sam Weinig <sam@webkit.org>
20481 Add a DecayArray type trait as a first step towards merging OwnPtr and OwnArrayPtr
20482 https://bugs.webkit.org/show_bug.cgi?id=75737
20484 Reviewed by Anders Carlsson.
20486 * wtf/TypeTraits.cpp:
20487 * wtf/TypeTraits.h:
20488 Added a DecayArray trait, that can convert T[] and T[3] -> T*. DecayArray
20489 is composed of some helpers which are also exposed, Conditional<>, which
20490 can provide one type or another based on a boolean predicate, IsArray<>
20491 which can deduce array types, and RemoveExtent<>, which removes the extent
20492 from an array type.
20494 2012-01-06 Oliver Hunt <oliver@apple.com>
20496 GetByteArrayLength is incorrect
20497 https://bugs.webkit.org/show_bug.cgi?id=75735
20499 Reviewed by Filip Pizlo.
20501 Load the byte array length from the correct location.
20502 This stops an existing test from hanging.
20504 * dfg/DFGSpeculativeJIT32_64.cpp:
20505 (JSC::DFG::SpeculativeJIT::compile):
20506 * dfg/DFGSpeculativeJIT64.cpp:
20507 (JSC::DFG::SpeculativeJIT::compile):
20509 2012-01-06 Filip Pizlo <fpizlo@apple.com>
20513 * JavaScriptCore.xcodeproj/project.pbxproj:
20515 2012-01-06 Oliver Hunt <oliver@apple.com>
20517 DFG no longer optimises CanvasPixelArray
20518 https://bugs.webkit.org/show_bug.cgi?id=75729
20520 Reviewed by Gavin Barraclough.
20522 Rename ByteArray (in its ClassInfo) to Uint8ClampedArray to match
20523 the future name when we switch over to the new typed-array based
20524 ImageData specification.
20526 * runtime/JSByteArray.cpp:
20528 2012-01-06 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
20530 Use HashMap<OwnPtr> for SourceProviderCache items
20531 https://bugs.webkit.org/show_bug.cgi?id=75346
20533 Reviewed by Daniel Bates.
20535 * parser/Parser.cpp:
20536 * parser/SourceProviderCache.cpp:
20537 (JSC::SourceProviderCache::clear):
20538 (JSC::SourceProviderCache::add):
20539 * parser/SourceProviderCache.h:
20541 2012-01-06 Sam Weinig <sam@webkit.org>
20543 Remove unused OwnFastMallocPtr class.
20544 https://bugs.webkit.org/show_bug.cgi?id=75722
20546 Reviewed by Geoffrey Garen.
20548 * GNUmakefile.list.am:
20549 * JavaScriptCore.gypi:
20550 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
20551 * JavaScriptCore.xcodeproj/project.pbxproj:
20552 * wtf/CMakeLists.txt:
20553 * wtf/OwnFastMallocPtr.h: Removed.
20554 * wtf/text/StringImpl.h:
20557 2012-01-06 Benjamin Poulain <bpoulain@webkit.org>
20559 [Mac] Sort the resources of JavaScriptCore.xcodeproj and remove duplicates
20560 https://bugs.webkit.org/show_bug.cgi?id=75631
20562 Reviewed by Andreas Kling.
20564 * JavaScriptCore.xcodeproj/project.pbxproj:
20566 2012-01-06 Eric Seidel <eric@webkit.org> and Gustavo Noronha Silva <gustavo.noronha@collabora.com>
20568 Make the new WTF module build on Gtk
20569 https://bugs.webkit.org/show_bug.cgi?id=75669
20573 2012-01-06 Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
20575 [Qt] Remove un-needed VPATHs from project includes
20577 Reviewed by Simon Hausmann.
20579 * JavaScriptCore.pri:
20582 2012-01-06 Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
20584 [Qt] Move listing of include paths and libs to pri files in sources
20586 Includepaths are sometimes modified by non-Qt contributors so keeping
20587 them in files inside Sources makes it more likely that they are updated
20588 along with project files for the other ports.
20590 Using pri files instead of prf files for this also has the benefit that
20591 the include() from the main target file can be parsed and followed by
20592 Qt Creator -- something that does not work with load().
20594 Dependency from a target to a library through the WEBKIT variable are
20595 handled through forwarding-files in Tools/qmake/mkspecs/modules, which
20596 set the source root of the module and include the right pri file.
20598 Ideally we'd use the variant of include() that takes an optional
20599 namespace to read the variables into, or the fromfile() function,
20600 but both of these add an overhead of about 40% on the total qmake
20601 runtime, due to making a deep copy of all the variables in the
20602 project or re-reading all the prf files from scratch.
20604 Reviewed by Simon Hausmann.
20607 * JavaScriptCore.pri: Renamed from Tools/qmake/mkspecs/features/javascriptcore.prf.
20609 * wtf/wtf.pri: Renamed from Tools/qmake/mkspecs/features/wtf.prf.
20612 2012-01-06 Hajime Morrita <morrita@chromium.org>
20614 WTF::String: Inline method shouldn't have WTF_EXPORT_PRIVATE
20615 https://bugs.webkit.org/show_bug.cgi?id=75612
20617 Reviewed by Kevin Ollivier.
20619 * wtf/text/WTFString.h:
20620 (WTF::String::findIgnoringCase):
20621 (WTF::String::append):
20622 (WTF::String::fromUTF8):
20623 (WTF::String::fromUTF8WithLatin1Fallback):
20624 (WTF::String::isHashTableDeletedValue):
20626 2012-01-05 Dan Bernstein <mitz@apple.com>
20628 <rdar://problem/10633760> Update copyright strings
20630 Reviewed by Mark Rowe.
20634 2012-01-05 Gavin Barraclough <barraclough@apple.com>
20636 Date constructor handles infinite values incorrectly.
20637 https://bugs.webkit.org/show_bug.cgi?id=70998
20639 Reviewed by Filip Pizlo.
20641 * runtime/DateConstructor.cpp:
20642 (JSC::constructDate):
20643 - should be checking !finite rather then isnan.
20645 2012-01-05 Gavin Barraclough <barraclough@apple.com>
20647 date.toISOString produces incorrect results for dates with ms prior to 1970
20648 https://bugs.webkit.org/show_bug.cgi?id=75684
20650 Reviewed by Sam Weinig.
20652 * runtime/DatePrototype.cpp:
20653 (JSC::dateProtoFuncToISOString):
20655 2012-01-05 Gavin Barraclough <barraclough@apple.com>
20657 Array.prototype.lastIndexOf ignores undefined fromIndex.
20658 https://bugs.webkit.org/show_bug.cgi?id=75678
20660 Reviewed by Sam Weinig.
20662 array.lastIndexOf(x, undefined) is equivalent to array.lastIndexOf(x, 0), not array.lastIndexOf(x)
20664 * runtime/ArrayPrototype.cpp:
20665 (JSC::arrayProtoFuncLastIndexOf):
20666 - should check argumnet count, rather than checking agument value for undefined.
20668 2012-01-05 Gavin Barraclough <barraclough@apple.com>
20670 Date parsing is too restrictive.
20671 https://bugs.webkit.org/show_bug.cgi?id=75671
20673 Reviewed by Oliver Hunt.
20675 ES5 date parsing currently requires all fields to be present, which does not match the spec (ES5.1 15.9.1.15).
20676 The spec allow a date to be date only, or date + time.
20678 The date portion on the should match: (pseudocode!:)
20679 [(+|-)YY]YYYY[-MM[-DD]]
20680 though we are slightly more liberal (permitted by the spec), allowing:
20682 The time portion should match:
20683 THH:mm[:ss[.sss]][Z|(+|-)HH:mm]
20684 again we're slightly more liberal, allowing:
20685 THH:mm[:ss[.s+]][Z|(+|-)HH:mm]
20687 * wtf/DateMath.cpp:
20688 (WTF::parseES5DatePortion):
20689 - Month/day fields are optional, default to 01.
20690 (WTF::parseES5TimePortion):
20691 - Hours/Minutes are requires, seconds/timezone are optional.
20692 (WTF::parseES5DateFromNullTerminatedCharacters):
20693 - Dates may be date only, or date + time.
20695 2012-01-05 Bruno Dilly <bdilly@profusion.mobi>
20697 [EFL] Undefined references to ICU_I18N symbols on WTF
20698 https://bugs.webkit.org/show_bug.cgi?id=75642
20700 Unreviewed build fix.
20702 Add ${ICU_I18N_LIBRARIES} to WTF_LIBRARIES on wtf efl platform cmake.
20703 Some undefined references were ucol_setAttribute_44, ucol_close_44,
20704 ucol_getAttribute_44...
20706 * wtf/PlatformEfl.cmake:
20708 2012-01-05 Geoffrey Garen <ggaren@apple.com>
20710 Refined the fast path for StringImpl::hash()
20711 https://bugs.webkit.org/show_bug.cgi?id=75178
20713 Reviewed by Darin Adler.
20715 Moved the hash calculation code into an out-of-line function to clean up
20718 No measurable benchmark change, but this knocks some samples off in
20719 Instruments, and I think this is a step toward removing -fomit-frame-pointer.
20721 * wtf/text/StringImpl.cpp:
20722 (WTF::StringImpl::hashSlowCase):
20723 * wtf/text/StringImpl.h:
20724 (WTF::StringImpl::hash): The patch.
20726 * wtf/text/StringStatics.cpp:
20727 (WTF::StringImpl::hashSlowCase): Abide by the cockamamie Windows build
20728 scheme, which requires all out-of-line StringImpl functions used by
20729 WebCore be defined in this file instead of StringImpl.cpp. (See http://trac.webkit.org/changeset/59187.)
20731 2012-01-05 Gavin Barraclough <barraclough@apple.com>
20733 Literal tab in JSONString fails
20734 https://bugs.webkit.org/show_bug.cgi?id=71772
20736 Reviewed by Oliver Hunt.
20738 rfc4627 does not allow literal tab characters in JSON source.
20740 * runtime/LiteralParser.cpp:
20741 (JSC::isSafeStringCharacter):
20742 - do not allow literal tab in StrictJSON mode.
20744 2012-01-05 Gavin Barraclough <barraclough@apple.com>
20746 push/shift fifo may consume excessive memory
20747 https://bugs.webkit.org/show_bug.cgi?id=75610
20749 Reviewed by Sam Weinig.
20751 Array object commonly store data in a vector, consisting of a portion that is
20752 in use, a pre-capacity (m_indexBias) and a post-capacity (the delta between
20753 m_length and m_vectorLength). Calls to shift with grow the pre-capacity, and
20754 the current algorithm for increaseVectorLength (used by push, or [[Put]]) will
20755 never shrink the pre-capacity, so a push/shift fifo may consume an inordinate
20756 amount of memory, whilst having a relatively small active length.
20758 * runtime/JSArray.cpp:
20759 (JSC::JSArray::increaseVectorLength):
20760 - If m_indexBias is non-zero, decay it over time.
20762 2012-01-05 Csaba Osztrogonác <ossy@webkit.org>
20764 unshift/pop fifo may consume excessive memory
20765 https://bugs.webkit.org/show_bug.cgi?id=75588
20767 Reviewed by Zoltan Herczeg.
20769 Buildfix after r104120.
20771 * runtime/JSArray.cpp: Remove useless asserts, baecause unsigned expression >= 0 is always true
20772 (JSC::JSArray::unshiftCount):
20774 2012-01-05 Zoltan Herczeg <zherczeg@webkit.org>
20776 Unreviewed gardening after r104134.
20778 * wtf/Assertions.cpp:
20780 2012-01-05 Zoltan Herczeg <zherczeg@webkit.org>
20782 Unreviewed gardening after r75605.
20784 Rubber stamped by NOBODY Csaba Osztrogonác.
20786 * wtf/Assertions.cpp:
20788 2012-01-05 Benjamin Poulain <benjamin@webkit.org>
20790 Improve charactersAreAllASCII() to compare multiple characters at a time
20791 https://bugs.webkit.org/show_bug.cgi?id=74063
20793 Reviewed by Darin Adler.
20795 A new header ASCIIFastPath.h contains the functions related to
20796 the detection of ASCII by using machine words. Part of it comes from
20797 WebCore's TextCodecASCIIFastPath.h.
20799 The function charactersAreAllASCII() is moved to TextCodecASCIIFastPath.h
20800 and is implemented with computer word comparison.
20801 The gain over the previous implementation of charactersAreAllASCII() is of
20802 the order of how many comparison are avoided (4x, 8x, 16x depending on the
20803 format and the CPU type).
20805 * GNUmakefile.list.am:
20806 * JavaScriptCore.gypi:
20807 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
20808 * JavaScriptCore.xcodeproj/project.pbxproj:
20809 * wtf/text/ASCIIFastPath.h: Added.
20810 (WTF::isAlignedToMachineWord):
20811 (WTF::alignToMachineWord):
20813 (WTF::charactersAreAllASCII):
20814 * wtf/text/WTFString.h:
20817 2012-01-05 Mark Rowe <mrowe@apple.com>
20819 <http://webkit.org/b/75606> [Mac] WTF logging functions should output to both stderr and ASL
20821 We should always log to both ASL and stderr on platforms where this won't result in launchd
20822 duplicating the messages.
20824 Reviewed by Dan Bernstein.
20826 * wtf/Assertions.cpp:
20827 (vprintf_stderr_common):
20829 2012-01-05 Mark Rowe <mrowe@apple.com>
20831 <http://webkit.org/b/75605> WTF logging functions should call vprintf_stderr_common only once per line
20833 Several of the WTF logging functions make multiple calls to vprintf_stderr_common to output a
20834 single line of text. This results in strangely formatted output if vprintf_stderr_common is
20835 retargeted to an output device that is message-oriented (such as ASL) rather than stream-oriented
20838 Reviewed by Dan Bernstein.
20840 * wtf/Assertions.cpp:
20841 (vprintf_stderr_with_prefix): Helper function to prepend a given prefix on to the given format
20842 string before handing it off to vprintf_stderr_common. This requires disabling warnings about
20843 calling a printf-like function with a non-literal format string for this piece of code. It's
20844 safe in this particular case as vprintf_stderr_with_prefix is only ever given a literal prefix.
20845 (vprintf_stderr_with_trailing_newline): Helper function to append a trailling newline on to the
20846 given format string if one does not already exist. It requires the same treatment with regards
20847 to the non-literal format string warning.
20848 (WTFReportAssertionFailureWithMessage): Switch to using vprintf_stderr_with_prefix.
20849 (WTFReportBacktrace): Switch from calling fprintf directly to using fprintf_stderr_common.
20850 (WTFReportFatalError): Switch to using vprintf_stderr_with_prefix.
20851 (WTFReportError): Ditto.
20852 (WTFLog): Switch to using vprintf_stderr_with_trailing_newline.
20853 (WTFLogVerbose): Ditto.
20855 2012-01-04 Gavin Barraclough <barraclough@apple.com>
20857 unshift/pop fifo may consume excessive memory
20858 https://bugs.webkit.org/show_bug.cgi?id=75588
20860 Reviewed by Sam Weinig.
20862 The Array object commonly store data in a vector, consisting of a portion that
20863 is in use, a pre-capacity (m_indexBias) and a post-capacity (the delta between
20864 m_length and m_vectorLength). Calls to pop with grow the post-capacity, and the
20865 current algorithm for increasePrefixVectorLength (used by unshift) will never
20866 stink the post-capacity, so a unshift/pop fifo may consume an inordinate amount
20867 of memory, whilst having a relatively small active length.
20869 * runtime/JSArray.cpp:
20870 (JSC::storageSize):
20871 - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>)
20872 (JSC::SparseArrayValueMap::put):
20873 - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>)
20874 (JSC::JSArray::increaseVectorLength):
20875 - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>)
20876 (JSC::JSArray::unshiftCountSlowCase):
20877 - renamed from increaseVectorPrefixLength (this was a bad name, since it
20878 also moved the ArrayStorage header), rewritten.
20879 (JSC::JSArray::shiftCount):
20880 - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>), count should be unsigned
20881 (JSC::JSArray::unshiftCount):
20882 - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>), count should be unsigned,
20883 increaseVectorPrefixLength renamed to unshiftCountSlowCase
20884 (JSC::JSArray::sortNumeric):
20885 * runtime/JSArray.h:
20886 - Updated function declarations, m_indexBias should be unsigned.
20888 2012-01-04 Mark Rowe <mrowe@apple.com>
20890 <http://webkit.org/b/75604> All instances of JSC::ArgumentsData appear to be leaked by JSC::Arguments
20892 Since JSC::Arguments has an OwnPtr for a member it needs to override destroy
20893 to ensure that the correct destructor is invoked. This is necessary because
20894 JSCell subclasses all intentionally have non-virtual destructors.
20896 Reviewed by Filip Pizlo.
20898 * runtime/Arguments.cpp:
20899 (JSC::Arguments::destroy):
20900 * runtime/Arguments.h:
20902 2012-01-04 Filip Pizlo <fpizlo@apple.com>
20904 Unreviewed, accidentally turned off the JIT in previous commit. Turning
20909 2012-01-04 Filip Pizlo <fpizlo@apple.com>
20911 Changed "return" to "break" in some macrology I introduced in
20912 http://trac.webkit.org/changeset/104086. This is a benign change, as
20913 "return" was technically correct for all uses of the macro.
20915 Reviewed by Oliver Hunt.
20917 * dfg/DFGGraph.cpp:
20920 2012-01-04 Michael Saboff <msaboff@apple.com>
20922 StructureStubInfo not reset when corresponding MethodCallLinkInfo is reset
20923 https://bugs.webkit.org/show_bug.cgi?id=75583
20925 Reviewed by Filip Pizlo.
20927 * bytecode/CodeBlock.cpp:
20928 (JSC::CodeBlock::finalizeUnconditionally): Find the corresponding
20929 StructureStubInfo and reset the appropriate JIT and
20930 the StructureStubInfo itself when reseting a MethodCallLinkInfo.
20932 2012-01-04 Michael Saboff <msaboff@apple.com>
20934 Invalid ASSERT() in DFGRepatch.cpp near line 385
20935 https://bugs.webkit.org/show_bug.cgi?id=75584
20937 Reviewed by Filip Pizlo.
20939 * dfg/DFGRepatch.cpp:
20940 (JSC::DFG::tryBuildGetByIDProtoList): Fixed ASSERT to use ==.
20942 2012-01-04 Filip Pizlo <fpizlo@apple.com>
20944 Incorrect use of DFG node reference counts when mutating the graph
20945 https://bugs.webkit.org/show_bug.cgi?id=75580
20946 <rdar://problem/10644607>
20948 Reviewed by Oliver Hunt.
20950 Made deref(node) follow the pattern of ref(node), which it should have
20953 * dfg/DFGGraph.cpp:
20954 (JSC::DFG::Graph::refChildren):
20955 (JSC::DFG::Graph::derefChildren):
20957 (JSC::DFG::Graph::deref):
20958 (JSC::DFG::Graph::clearAndDerefChild1):
20959 (JSC::DFG::Graph::clearAndDerefChild2):
20960 (JSC::DFG::Graph::clearAndDerefChild3):
20962 (JSC::DFG::Node::deref):
20963 * dfg/DFGPropagator.cpp:
20964 (JSC::DFG::Propagator::fixupNode):
20966 2012-01-04 Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
20968 [Qt] Introduce new qmake variable 'WEBKIT' for signaling dependencies
20970 The custom qmake variable 'WEBKIT' is used for signaling that a
20971 target depends in some way on other subproject of the WebKit
20972 project. For now this is limited to the set of intermediate
20973 libraries: wtf, javascriptcore, webcore, and webkit2.
20975 This replaces the previous convension of using load(foo) for
20976 just include paths, and CONFIG += foo to also link against foo.
20978 Adding a dependency results in additional include paths being
20979 available, and potentially linking to the library. This is
20980 decided by the build system based on conditions such as what
20981 kind of target is being built and the general build config.
20983 An advantage to his approach is that it simplifies the individual
20984 foo.prf files, for example by allowing us to use INCLUDEPATH +=
20985 and LIBS += as normal instead of prepending.
20987 Reviewed by Simon Hausmann.
20993 2012-01-03 Filip Pizlo <fpizlo@apple.com>
20995 DFG: The assertion that a double-voted variable cannot become double-unvoted is wrong
20996 https://bugs.webkit.org/show_bug.cgi?id=75516
20997 <rdar://problem/10640266>
20999 Reviewed by Gavin Barraclough.
21001 Removed the offending assertion, since it was wrong. Also hardened the code to make
21002 this case less likely by first having the propagator fixpoint converge, and then doing
21003 double voting combined with a second fixpoint. This is neutral on benchmarks and
21004 fixes the assertion in a fairly low-risk way (i.e. we won't vote a variable double
21005 until we've converged to the conclusion that it really is double).
21007 * dfg/DFGPropagator.cpp:
21008 (JSC::DFG::Propagator::propagatePredictions):
21009 * dfg/DFGVariableAccessData.h:
21010 (JSC::DFG::VariableAccessData::tallyVotesForShouldUseDoubleFormat):
21012 2012-01-03 Filip Pizlo <fpizlo@apple.com>
21014 REGRESSION (r98196-98236): Incorrect layout of iGoogle with RSS feeds
21015 https://bugs.webkit.org/show_bug.cgi?id=75303
21016 <rdar://problem/10633533>
21018 Reviewed by Gavin Barraclough.
21020 The this argument was not being kept alive in some cases during inlining and intrinsic
21023 * dfg/DFGByteCodeParser.cpp:
21024 (JSC::DFG::ByteCodeParser::handleCall):
21025 (JSC::DFG::ByteCodeParser::emitFunctionCheck):
21026 (JSC::DFG::ByteCodeParser::handleInlining):
21028 2012-01-03 Gavin Barraclough <barraclough@apple.com>
21032 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
21034 2012-01-03 Gavin Barraclough <barraclough@apple.com>
21038 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
21040 2012-01-03 Gavin Barraclough <barraclough@apple.com>
21042 https://bugs.webkit.org/show_bug.cgi?id=75140
21044 Reviewed by Sam Weinig.
21046 Rewrite JSArray::putSlowCase to be much cleaner & simpler.
21048 This rewrite only significantly changes behaviour for sparse array, specifically
21049 in how sparse arrays are reified back to vector form. This does not affect arrays
21050 with less than 10000 entries (since these always use a vector). The more common
21051 cases of sparse array behavior (though large sparse arrays are rare) - arrays that
21052 always remain sparse, and arrays that are filled in reverse sequential order -
21053 should be just as fast or faster (since reification is simpler & no longer
21054 requires map lookups) after these changes.
21056 Simplifying this code allows all cases of putByIndex that need to grow the vector
21057 to do so via increaseVectorLength, which means that this method can encapsulate
21058 the policy of determining how the vector should be grown.
21060 No performance impact.
21062 * runtime/JSArray.cpp:
21063 (JSC::isDenseEnoughForVector):
21064 - any array of length <= MIN_SPARSE_ARRAY_INDEX is dense enough for a vector.
21065 (JSC::JSArray::putByIndex):
21066 - simplify & comment.
21067 (JSC::JSArray::putByIndexBeyondVectorLength):
21068 - Re-written to be much clearer & simpler.
21069 (JSC::JSArray::increaseVectorLength):
21070 (JSC::JSArray::increaseVectorPrefixLength):
21071 - add explicit checks against MAX_STORAGE_VECTOR_LENGTH, so clients do not need do so.
21072 (JSC::JSArray::push):
21073 - simplify & comment.
21074 * runtime/JSArray.h:
21075 - removed SparseArrayValueMap::take.
21077 2012-01-03 Gavin Barraclough <barraclough@apple.com>
21081 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
21083 2012-01-03 Gavin Barraclough <barraclough@apple.com>
21085 https://bugs.webkit.org/show_bug.cgi?id=75140
21087 Reviewed by Sam Weinig.
21089 Simplify JSArray creation - remove ArgsList/JSValue* create methods
21090 (this functionality can be implemented in terms of tryCreateUninitialized).
21092 * JavaScriptCore.exp:
21093 * runtime/ArrayConstructor.cpp:
21094 - use constructArray/constructEmptyArray instead of calling JSArray::create directly
21095 (JSC::constructArrayWithSizeQuirk):
21096 * runtime/JSArray.cpp:
21097 * runtime/JSArray.h:
21098 - removed ArgsList/JSValue* create methods
21099 * runtime/JSGlobalObject.h:
21100 (JSC::constructEmptyArray):
21101 (JSC::constructArray):
21102 - changed to be implemented in terms of JSArray::tryCreateUninitialized
21104 2012-01-03 Gavin Barraclough <barraclough@apple.com>
21106 https://bugs.webkit.org/show_bug.cgi?id=75429
21107 ThrowTypeError should be a singleton object
21109 Reviewed by Sam Weinig.
21111 Per section 13.2.3 of the spec.
21112 We could change setAccessorDescriptor to be able to share the global
21113 GetterSetter object, rather than storing the accessor functions and
21114 creating a new GetterSetter in defineProperty - but this won't be a
21115 small change to PropertyDescriptors (and would probably mean making
21116 GetterSetter objects immutable?) - so I'll leave that for another
21119 * JavaScriptCore.exp:
21120 - don't export setAccessorDescriptor
21121 * runtime/Arguments.cpp:
21122 (JSC::Arguments::createStrictModeCallerIfNecessary):
21123 (JSC::Arguments::createStrictModeCalleeIfNecessary):
21124 - call throwTypeErrorGetterSetter instead of createTypeErrorFunction
21125 * runtime/Error.cpp:
21127 - remove createTypeErrorFunction
21128 * runtime/JSFunction.cpp:
21129 * runtime/JSFunction.h:
21130 - remove unused createDescriptorForThrowingProperty
21131 * runtime/JSGlobalObject.cpp:
21132 (JSC::JSGlobalObject::reset):
21133 (JSC::JSGlobalObject::visitChildren):
21134 - removed m_strictModeTypeErrorFunctionStructure.
21135 * runtime/JSGlobalObject.h:
21136 (JSC::JSGlobalObject::internalFunctionStructure):
21137 - removed m_strictModeTypeErrorFunctionStructure.
21138 * runtime/PropertyDescriptor.cpp:
21139 (JSC::PropertyDescriptor::setAccessorDescriptor):
21140 - changed to take a GetterSetter
21141 * runtime/PropertyDescriptor.h:
21142 - changed to take a GetterSetter
21144 2012-01-02 Gavin Barraclough <barraclough@apple.com>
21146 Check in fixes for jsc tests following bug #75455.
21148 * tests/mozilla/ecma/GlobalObject/15.1.2.2-1.js:
21149 * tests/mozilla/ecma/GlobalObject/15.1.2.2-2.js:
21151 2012-01-02 Gavin Barraclough <barraclough@apple.com>
21153 https://bugs.webkit.org/show_bug.cgi?id=75452
21154 If argument to Error is undefined, message is not set
21156 Reviewed by Sam Weinig.
21158 Per section 15.11.1.1 of the spec.
21160 * runtime/ErrorInstance.h:
21161 (JSC::ErrorInstance::create):
21162 (JSC::ErrorInstance::finishCreation):
21164 2012-01-02 Gavin Barraclough <barraclough@apple.com>
21166 ES5 prohibits parseInt from supporting octal
21167 https://bugs.webkit.org/show_bug.cgi?id=75455
21169 Reviewed by Sam Weinig.
21171 See sections 15.1.2.2 and annex E.
21173 * runtime/JSGlobalObjectFunctions.cpp:
21176 2012-01-02 Gavin Barraclough <barraclough@apple.com>
21178 https://bugs.webkit.org/show_bug.cgi?id=55343
21179 Global JSON should be configurable but isn't
21181 Reviewed by Sam Weinig.
21183 * runtime/JSGlobalObject.cpp:
21184 (JSC::JSGlobalObject::reset):
21185 - make JSON configurable
21187 2012-01-01 Filip Pizlo <fpizlo@apple.com>
21189 Call instructions should leave room for linking information
21190 https://bugs.webkit.org/show_bug.cgi?id=75422
21191 <rdar://problem/10633985>
21193 Reviewed by Oliver Hunt.
21195 * bytecode/Opcode.h:
21196 * bytecompiler/BytecodeGenerator.cpp:
21197 (JSC::BytecodeGenerator::emitCall):
21198 (JSC::BytecodeGenerator::emitConstruct):
21200 2011-12-31 Dan Bernstein <mitz@apple.com>
21202 Continue trying to fix the Windows build after r103823.
21204 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
21206 2011-12-31 Dan Bernstein <mitz@apple.com>
21208 Start trying to fix the Windows build after r103823.
21210 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
21212 2011-12-30 Anders Carlsson <andersca@apple.com>
21214 Add a ParamStorageTraits specialization for RetainPtr
21215 https://bugs.webkit.org/show_bug.cgi?id=75392
21217 Reviewed by Daniel Bates.
21219 * wtf/Functional.h:
21220 Add a partial specialization of ParamStorageTraits for RetainPtr<T>.
21223 Bring in the retainPtr function template from WTF.
21225 2011-12-29 Sam Weinig <sam@webkit.org>
21227 It should be easier to iterate a Vector backwards
21228 https://bugs.webkit.org/show_bug.cgi?id=75359
21230 Reviewed by Anders Carlsson.
21232 Adds Vector::rbegin(), Vector::rend(), and Vector::reversed(),
21233 a new proxy driven way to access a vector backwards. One can use
21234 reversed() in a range-based for loop like so:
21236 for (auto val: myVector.reversed())
21240 (WTF::Vector::~Vector):
21243 (WTF::Vector::rbegin):
21244 (WTF::Vector::rend):
21245 Added using standard adaptor std::reverse_iterator.
21247 (WTF::Vector::reversed):
21248 (WTF::Vector::VectorReverseProxy::begin):
21249 (WTF::Vector::VectorReverseProxy::end):
21250 Add proxy similar to one used in HashMap for keys() and values()
21251 which allows access to a Vector backwards for use in range-based
21254 2011-12-29 Gavin Barraclough <barraclough@apple.com>
21256 https://bugs.webkit.org/show_bug.cgi?id=75140
21258 Reviewed by Oliver Hunt.
21260 Start cleaning up JSArray construction. JSArray has a set of create methods,
21261 one of which (currently) takes a 'creation mode' enum parameter. Based on that
21262 parameter, the constructor does one of two completely different things. If the
21263 parameter is 'CreateInitialized' it creates an array, setting the length, but
21264 does not eagerly allocate a storage vector of the specified length. A small
21265 (BASE_VECTOR_LEN sized) initial vector will be allocated, and cleared, property
21266 access to the vector will read the hole value (return undefined). The alternate
21267 usage of this method ('CreateCompact') does something very different. It tries
21268 to create an array of the requested length, and also allocates a storage vector
21269 large enough to hold all properties. It does not clear the storage vector,
21270 leaving the memory uninitialized and requiring the user to call a method
21271 'uncheckedSetIndex' to initialize values in the vector.
21273 This patch factors out these two behaviours, moving the 'CreateCompact' mode
21274 into its own method, 'tryCreateUninitialized' (matching the naming for this
21275 functionality in the string classes). 'tryCreateUninitialized' may return 0 if
21276 memory allocation fails during construction of the object. The construction
21277 pattern changes such that values added during initialization will be marked if
21278 a GC is triggered during array allocation. 'CreateInitialized' no longer need
21279 be passed to create a normal, fully constructed array with a length, and this
21280 method is merged with the version of 'create' that does not take an initial
21281 length (length parameter defaults to 0).
21283 * JavaScriptCore.exp:
21284 * runtime/ArrayConstructor.cpp:
21285 (JSC::constructArrayWithSizeQuirk):
21286 - removed 'CreateInitialized' argument
21287 * runtime/ArrayPrototype.cpp:
21288 (JSC::arrayProtoFuncSplice):
21289 - changed to call 'tryCreateUninitialized'
21290 * runtime/FunctionPrototype.cpp:
21291 (JSC::functionProtoFuncBind):
21292 - changed to call 'tryCreateUninitialized'
21293 * runtime/JSArray.cpp:
21294 (JSC::JSArray::JSArray):
21295 - initialize m_storage to null; if construction fails, make destruction safe
21296 (JSC::JSArray::finishCreation):
21297 - merge versions of this method, takes an initialLength parameter defaulting to zero
21298 (JSC::JSArray::tryFinishCreationUninitialized):
21299 - version of 'finishCreation' that tries to eagerly allocate storage; may fail & return 0
21300 (JSC::JSArray::~JSArray):
21301 - check for null m_storage, in case array construction failed.
21302 (JSC::JSArray::increaseVectorPrefixLength):
21303 * runtime/JSArray.h:
21304 (JSC::JSArray::create):
21305 - merge versions of this method, takes an initialLength parameter defaulting to zero
21306 (JSC::JSArray::tryCreateUninitialized):
21307 - version of 'create' that tries to eagerly allocate storage; may fail & return 0
21308 (JSC::JSArray::initializeIndex):
21309 (JSC::JSArray::completeInitialization):
21310 - used in conjunction with 'tryCreateUninitialized' to initialize the array
21311 * runtime/JSGlobalObject.h:
21312 (JSC::constructEmptyArray):
21313 - removed 'CreateInitialized' argument
21314 * runtime/RegExpConstructor.cpp:
21315 (JSC::RegExpMatchesArray::finishCreation):
21316 - removed 'CreateInitialized' argument
21318 2011-12-29 Anders Carlsson <andersca@apple.com>
21320 Add a retainPtr function template
21321 https://bugs.webkit.org/show_bug.cgi?id=75365
21323 Reviewed by Dan Bernstein.
21325 This makes it easier to make a RetainPtr using template argument deduction, which
21326 is useful when passing RetainPtr objects as function arguments.
21331 2011-12-28 Yuqiang Xian <yuqiang.xian@intel.com>
21333 spill unboxed values in DFG 32_64
21334 https://bugs.webkit.org/show_bug.cgi?id=75291
21336 Reviewed by Filip Pizlo.
21338 Currently all the values are spilled as boxed in DFG 32_64, which is
21339 not necessary and introduces additional stores/loads. Instead we
21340 can spill them as unboxed if feasible. It can be applied to the
21341 Integers, Cells and Booleans in DFG 32_64. Doubles are left as is
21342 because they don't need to be boxed at all. The modifications to the
21343 spill/fill and the OSR exit are required, as well as a bug fix to the
21344 "isUnknownJS" logic.
21346 * bytecode/ValueRecovery.h:
21347 (JSC::ValueRecovery::displacedInRegisterFile):
21348 (JSC::ValueRecovery::virtualRegister):
21349 (JSC::ValueRecovery::dump):
21350 * dfg/DFGGenerationInfo.h:
21351 (JSC::DFG::GenerationInfo::isUnknownJS):
21352 (JSC::DFG::GenerationInfo::spill):
21353 * dfg/DFGOSRExitCompiler32_64.cpp:
21354 (JSC::DFG::OSRExitCompiler::compileExit):
21355 * dfg/DFGSpeculativeJIT.cpp:
21356 (JSC::DFG::SpeculativeJIT::isKnownNotBoolean):
21357 * dfg/DFGSpeculativeJIT.h:
21358 (JSC::DFG::SpeculativeJIT::silentFillGPR):
21359 (JSC::DFG::SpeculativeJIT::spill):
21360 * dfg/DFGSpeculativeJIT32_64.cpp:
21361 (JSC::DFG::SpeculativeJIT::fillInteger):
21362 (JSC::DFG::SpeculativeJIT::fillDouble):
21363 (JSC::DFG::SpeculativeJIT::fillJSValue):
21364 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
21365 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
21366 (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
21367 (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
21368 (JSC::DFG::SpeculativeJIT::compileObjectEquality):
21369 (JSC::DFG::SpeculativeJIT::compile):
21371 2011-12-28 Anders Carlsson <andersca@apple.com>
21373 Add an implicit block conversion operator to WTF::Function
21374 https://bugs.webkit.org/show_bug.cgi?id=75325
21376 Reviewed by Dan Bernstein.
21379 Add a define for COMPILER_SUPPORTS(BLOCKS). It's only defined for clang, since the gcc blocks implementation
21380 is buggy, especially when it comes to C++.
21382 * wtf/Functional.h:
21383 Add a block conversion operator that creates and returns an autoreleased block that will call the function when executed.
21385 2011-12-27 Anders Carlsson <andersca@apple.com>
21387 Add a new WTF::bind overload that takes 6 parameters
21388 https://bugs.webkit.org/show_bug.cgi?id=75287
21390 Reviewed by Sam Weinig.
21392 * wtf/Functional.h:
21394 2011-12-27 Sam Weinig <sam@webkit.org>
21396 Continue moving compiler feature checks to use the COMPILER_SUPPORTS() macro
21397 https://bugs.webkit.org/show_bug.cgi?id=75268
21399 Reviewed by Anders Carlsson.
21402 Add support for COMPILER_SUPPORTS(CXX_NULLPTR) and COMPILER_SUPPORTS(CXX_DELETED_FUNCTIONS).
21404 * wtf/Noncopyable.h:
21405 Use COMPILER_SUPPORTS(CXX_DELETED_FUNCTIONS).
21409 Use COMPILER_SUPPORTS(CXX_NULLPTR). Remove support for HAVE(NULLPTR).
21413 Switch from HAVE(NULLPTR) to COMPILER_SUPPORTS(CXX_NULLPTR).
21415 2011-12-27 Anders Carlsson <andersca@apple.com>
21417 Misc fixes and cleanups in Functional.h
21418 https://bugs.webkit.org/show_bug.cgi?id=75281
21420 Reviewed by Andreas Kling.
21422 - Reformat template declarations so that the class begins on a new line.
21423 - Change the parameter template parameters to start at P1 instead of P0.
21424 - Add function wrappers and bind overloads for 4 and 5 parameter functions.
21425 - Change the Function call operator to be const so const functions can be called.
21427 * wtf/Functional.h:
21429 2011-12-27 Tony Chang <tony@chromium.org>
21431 [chromium] Minor cleanup of gyp files.
21432 https://bugs.webkit.org/show_bug.cgi?id=75269
21434 Reviewed by Adam Barth.
21436 * JavaScriptCore.gyp/JavaScriptCore.gyp: msvs_guid is no longer needed
21437 and vim/emacs specific hooks should be added by the user.
21439 2011-12-27 Gavin Barraclough <barraclough@apple.com>
21441 https://bugs.webkit.org/show_bug.cgi?id=75260
21442 Null name for host function can result in dereference of uninitialize memory
21444 Reviewed by Filip Pizlo.
21446 This is a recent regression in ToT, if the name passed to finishCreation of a host function is null,
21447 we are currently skipping the putDirect, which leaves memory uninitialized. This patch reverts the
21448 aspect of the change that introduced the issue. It might be better if functions that don't have a
21449 name don't have this property at all, but that's change should be separate from fixing the bug.
21451 * runtime/JSFunction.cpp:
21452 (JSC::JSFunction::finishCreation):
21453 - Always initialize the name property.
21455 2011-12-27 Anders Carlsson <andersca@apple.com>
21457 Function should handle wrapping/unwrapping RefPtr and PassRefPtr
21458 https://bugs.webkit.org/show_bug.cgi?id=75266
21460 Reviewed by Sam Weinig.
21462 Add ParamStorageTraits that can be used for deciding how bound parameters should be stored
21463 and peeked at. For RefPtr we want to use the raw pointer when "peeking" to avoid ref-churn.
21464 For PassRefPtr, we want to use RefPtr for storage but still use the raw pointer when peeking.
21466 * wtf/Functional.h:
21467 (WTF::ParamStorageTraits::wrap):
21468 (WTF::ParamStorageTraits::unwrap):
21470 2011-12-27 Tony Chang <tony@chromium.org>
21472 [chromium] really enable wpo for WebCore libs and for WTF
21473 https://bugs.webkit.org/show_bug.cgi?id=75264
21475 Reviewed by Adam Barth.
21477 * JavaScriptCore.gyp/JavaScriptCore.gyp: Enable WPO for wtf and yarr.
21479 2011-12-26 Gavin Barraclough <barraclough@apple.com>
21481 Errk! OS X build fix.
21483 * JavaScriptCore.exp:
21485 2011-12-26 Gavin Barraclough <barraclough@apple.com>
21489 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
21490 * runtime/JSObject.h:
21492 2011-12-26 Gavin Barraclough <barraclough@apple.com>
21494 https://bugs.webkit.org/show_bug.cgi?id=75231
21495 Fail to throw in strict mode on assign to read only static properties
21497 Reviewed by Filip Pizlo.
21499 There are three bugs here:
21500 * symbolTablePut should throw for strict mode accesses.
21501 * lookupPut should throw for strict mode accesses.
21502 * NumberConstructor should override put to call lookupPut, to trap assignment to readonly properties.
21504 * runtime/JSActivation.cpp:
21505 (JSC::JSActivation::symbolTablePut):
21506 (JSC::JSActivation::put):
21507 * runtime/JSActivation.h:
21508 * runtime/JSGlobalObject.cpp:
21509 (JSC::JSGlobalObject::put):
21510 * runtime/JSStaticScopeObject.cpp:
21511 (JSC::JSStaticScopeObject::put):
21512 * runtime/JSVariableObject.h:
21513 (JSC::JSVariableObject::symbolTablePut):
21514 * runtime/Lookup.h:
21516 * runtime/NumberConstructor.cpp:
21517 (JSC::NumberConstructor::put):
21518 * runtime/NumberConstructor.h:
21520 2011-12-26 Gavin Barraclough <barraclough@apple.com>
21522 Fix miss-commit of utf8 change.
21524 Reviewed by Filip Pizlo
21526 Eeep, patch as landed a while ago had no effect! - acidentally landed
21527 modified version of patch used for performance testing.
21529 (This isn't covered by layout tests because layour tests don't use jsc,
21530 and the tests/mozilla tests use latin1, which was already supported!)
21532 Landing changes as intended (and as originally reviewed).
21537 2011-12-26 Filip Pizlo <fpizlo@apple.com>
21539 Unreviewed build fix for ARMv7.
21541 * assembler/MacroAssemblerARMv7.h:
21542 (JSC::MacroAssemblerARMv7::load16Signed):
21543 (JSC::MacroAssemblerARMv7::load8Signed):
21545 2011-12-26 Hajime Morrita <morrita@google.com>
21547 Rename WTF_INLINE, JS_INLINE to HIDDEN_INLINE
21548 https://bugs.webkit.org/show_bug.cgi?id=74990
21550 Reviewed by Kevin Ollivier.
21552 * runtime/JSExportMacros.h: Removed JS_INLINE
21553 * wtf/ExportMacros.h: Renamed WTF_INLINE to HIDDEN_INLINE
21555 2011-12-24 Filip Pizlo <fpizlo@apple.com>
21557 The ArgumentCount field in the CallFrame should have its tag left blank for other uses
21558 https://bugs.webkit.org/show_bug.cgi?id=75199
21559 <rdar://problem/10625105>
21560 <rdar://problem/10625106>
21562 Reviewed by Oliver Hunt.
21564 * dfg/DFGOSRExitCompiler32_64.cpp:
21565 (JSC::DFG::OSRExitCompiler::compileExit):
21566 * dfg/DFGOSRExitCompiler64.cpp:
21567 (JSC::DFG::OSRExitCompiler::compileExit):
21568 * dfg/DFGSpeculativeJIT.h:
21569 (JSC::DFG::SpeculativeJIT::argumentPayloadSlot):
21570 * dfg/DFGSpeculativeJIT32_64.cpp:
21571 (JSC::DFG::SpeculativeJIT::emitCall):
21572 * dfg/DFGSpeculativeJIT64.cpp:
21573 (JSC::DFG::SpeculativeJIT::emitCall):
21574 * interpreter/CallFrame.h:
21575 (JSC::ExecState::argumentCountIncludingThis):
21576 (JSC::ExecState::setArgumentCountIncludingThis):
21577 * interpreter/Register.h:
21578 (JSC::Register::unboxedInt32):
21579 (JSC::Register::unboxedBoolean):
21580 (JSC::Register::unboxedCell):
21581 (JSC::Register::payload):
21582 (JSC::Register::tag):
21584 (JSC::JIT::compileOpCall):
21585 * jit/JITCall32_64.cpp:
21586 (JSC::JIT::compileLoadVarargs):
21587 (JSC::JIT::compileOpCall):
21589 2011-12-25 Andreas Kling <awesomekling@apple.com>
21591 Yarr: Avoid copying vectors in CharacterClassConstructor.
21592 <http://webkit.org/b/75206>
21594 Reviewed by Darin Adler.
21596 Yarr::CharacterClassConstructor::charClass() was hot when loading twitter
21597 feeds (1.2%), replace the usage of Vector::append() by swap() since we're
21598 always clearing the source vector afterwards anyway.
21600 * yarr/YarrPattern.cpp:
21601 (JSC::Yarr::CharacterClassConstructor::charClass):
21603 2011-12-24 Darin Adler <darin@apple.com>
21605 Specialize HashTraits for RefPtr to use PassRefPtr as "pass type" to reduce reference count churn
21606 https://bugs.webkit.org/show_bug.cgi?id=72476
21608 Reviewed by Sam Weinig.
21610 * wtf/HashTraits.h: Defined PassInType and store function in HashTraits<RefPtr>.
21612 2011-12-23 Geoffrey Garen <ggaren@apple.com>
21614 Inlined Yarr::execute
21615 https://bugs.webkit.org/show_bug.cgi?id=75180
21617 Reviewed reluctantly by Beth Dakin.
21619 Tiny speedup on SunSpider string tests. Removes some samples from
21620 Instruments. A step toward removing -fomit-frame-pointer.
21622 * yarr/YarrJIT.cpp:
21624 (JSC::Yarr::execute): ONE LINE FUNCTION, Y U NOT INLINED?!
21626 2011-12-23 Filip Pizlo <fpizlo@apple.com>
21628 DFG loads from signed 8-bit and 16-bit typed arrays are broken
21629 https://bugs.webkit.org/show_bug.cgi?id=75163
21631 Reviewed by Geoffrey Garen.
21633 Added 8-bit and 16-bit signed loads. Because doing so on ARM is less trivial, I'm
21634 currently disabling Int8Array and Int16Array optimizations on ARM.
21636 * assembler/MacroAssemblerX86Common.h:
21637 (JSC::MacroAssemblerX86Common::load8Signed):
21638 (JSC::MacroAssemblerX86Common::load16Signed):
21639 * assembler/X86Assembler.h:
21640 (JSC::X86Assembler::movswl_mr):
21641 (JSC::X86Assembler::movsbl_mr):
21642 * bytecode/PredictedType.h:
21643 (JSC::isActionableMutableArrayPrediction):
21645 (JSC::DFG::Node::shouldSpeculateInt8Array):
21646 (JSC::DFG::Node::shouldSpeculateInt16Array):
21647 * dfg/DFGSpeculativeJIT.cpp:
21648 (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
21650 2011-12-23 Filip Pizlo <fpizlo@apple.com>
21652 DFG does double-to-int conversion incorrectly when storing into int typed arrays
21653 https://bugs.webkit.org/show_bug.cgi?id=75164
21654 <rdar://problem/10557547>
21656 Reviewed by Geoffrey Garen.
21658 * assembler/MacroAssemblerARMv7.h:
21659 (JSC::MacroAssemblerARMv7::branchTruncateDoubleToUint32):
21660 * assembler/MacroAssemblerX86Common.h:
21661 (JSC::MacroAssemblerX86Common::branchTruncateDoubleToUint32):
21662 (JSC::MacroAssemblerX86Common::truncateDoubleToUint32):
21663 * dfg/DFGSpeculativeJIT.cpp:
21664 (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
21666 2011-12-23 Geoffrey Garen <ggaren@apple.com>
21668 Refactored String.prototype.replace
21669 https://bugs.webkit.org/show_bug.cgi?id=75114
21671 Reviewed by Darin Adler.
21673 No performance difference.
21675 I think this is a step toward removing -fomit-frame-pointer.
21677 * runtime/JSString.cpp:
21678 * runtime/JSString.h: Removed the test and special case for a single-character
21679 search string because the standard path does this test and special case
21680 for us. (As an aside, if we do come up with a unique single-character
21681 replace optimization in future, it probably belongs in the replace function,
21682 and not in JSString.)
21684 * runtime/StringPrototype.cpp:
21685 (JSC::stringProtoFuncReplace): Split this mega-sized function into:
21686 (JSC::replaceUsingStringSearch): - This reasonably sized function, and
21687 (JSC::replaceUsingRegExpSearch): - This still mega-sized function.
21689 2011-12-23 Pierre Rossi <pierre.rossi@gmail.com>
21691 [Qt] REGRESSION(r103467): It broke fast/images/animated-gif-restored-from-bfcache.html
21692 https://bugs.webkit.org/show_bug.cgi?id=75087
21694 monotonicallyIncreasingTime needs to hava a higher resolution than milliseconds.
21696 Reviewed by Darin Adler.
21698 * wtf/CurrentTime.cpp:
21699 (WTF::monotonicallyIncreasingTime):
21701 2011-12-22 Filip Pizlo <fpizlo@apple.com>
21703 DFG should not speculate array even when predictions say that the base is not an array
21704 https://bugs.webkit.org/show_bug.cgi?id=75160
21705 <rdar://problem/10622646>
21706 <rdar://problem/10622649>
21708 Reviewed by Oliver Hunt.
21710 Added the ability to call slow path when the base is known to not be an array.
21711 Also rationalized the logic for deciding when the index is not an int, and
21712 cleaned up the logic for deciding when to speculate typed array.
21714 Neutral for the most part, with odd speed-ups and slow-downs. The slow-downs can
21715 likely be mitigated by having the notion of a polymorphic array access, where we
21716 try, but don't speculate, to access the array one way before either trying some
21717 other ways or calling slow path.
21719 * bytecode/PredictedType.h:
21720 (JSC::isActionableMutableArrayPrediction):
21721 (JSC::isActionableArrayPrediction):
21722 * dfg/DFGAbstractState.cpp:
21723 (JSC::DFG::AbstractState::execute):
21725 (JSC::DFG::Node::shouldSpeculateInt8Array):
21726 (JSC::DFG::Node::shouldSpeculateInt16Array):
21727 (JSC::DFG::Node::shouldSpeculateInt32Array):
21728 (JSC::DFG::Node::shouldSpeculateUint8Array):
21729 (JSC::DFG::Node::shouldSpeculateUint16Array):
21730 (JSC::DFG::Node::shouldSpeculateUint32Array):
21731 (JSC::DFG::Node::shouldSpeculateFloat32Array):
21732 (JSC::DFG::Node::shouldSpeculateFloat64Array):
21733 * dfg/DFGPropagator.cpp:
21734 (JSC::DFG::Propagator::byValIsPure):
21735 * dfg/DFGSpeculativeJIT.cpp:
21736 (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
21737 * dfg/DFGSpeculativeJIT32_64.cpp:
21738 (JSC::DFG::SpeculativeJIT::compile):
21739 * dfg/DFGSpeculativeJIT64.cpp:
21740 (JSC::DFG::SpeculativeJIT::compile):
21742 2011-12-22 Gavin Barraclough <barraclough@apple.com>
21744 Unreviewed - fix stylebot issues from last patch.
21746 * runtime/JSArray.cpp:
21747 (JSC::JSArray::putSlowCase):
21749 2011-12-22 Gavin Barraclough <barraclough@apple.com>
21751 https://bugs.webkit.org/show_bug.cgi?id=75151
21752 Add attributes field to JSArray's SparseMap
21754 Reviewed by Sam Weinig.
21756 This will be necessary to be able to support non- writable/configurable/enumerable
21757 properties, and helpful for getters/setters.
21759 Added a concept of being 'inSparseMode' - this indicates the array has a non-standard
21761 * runtime/ArrayPrototype.cpp:
21762 (JSC::arrayProtoFuncSort):
21763 - JSArray::sort methods not allowed on arrays that are 'inSparseMode'.
21764 (must fall back to generic sort alogrithm).
21765 * runtime/JSArray.cpp:
21766 (JSC::JSArray::finishCreation):
21767 - moved reportedMapCapacity into the SparseArrayValueMap object.
21768 (JSC::SparseArrayValueMap::find):
21769 (JSC::SparseArrayValueMap::put):
21770 (JSC::SparseArrayValueMap::visitChildren):
21772 (JSC::JSArray::getOwnPropertySlotByIndex):
21773 (JSC::JSArray::getOwnPropertyDescriptor):
21774 (JSC::JSArray::putSlowCase):
21775 (JSC::JSArray::deletePropertyByIndex):
21776 (JSC::JSArray::getOwnPropertyNames):
21777 (JSC::JSArray::setLength):
21778 (JSC::JSArray::pop):
21779 (JSC::JSArray::visitChildren):
21780 - Updated for changes in SparseArrayValueMap.
21781 (JSC::JSArray::sortNumeric):
21782 (JSC::JSArray::sort):
21783 (JSC::JSArray::compactForSorting):
21784 - Disallow on 'SparseMode' arrays.
21785 * runtime/JSArray.h:
21786 (JSC::SparseArrayEntry::SparseArrayEntry):
21787 - An entry in the sparse array - value (WriteBarrier) + attributes.
21788 (JSC::SparseArrayValueMap::SparseArrayValueMap):
21789 (JSC::SparseArrayValueMap::sparseMode):
21790 (JSC::SparseArrayValueMap::setSparseMode):
21791 - Flags to track whether an Array is forced into SparseMode.
21792 (JSC::SparseArrayValueMap::remove):
21793 (JSC::SparseArrayValueMap::notFound):
21794 (JSC::SparseArrayValueMap::isEmpty):
21795 (JSC::SparseArrayValueMap::contains):
21796 (JSC::SparseArrayValueMap::size):
21797 (JSC::SparseArrayValueMap::begin):
21798 (JSC::SparseArrayValueMap::end):
21799 - accessors to the map
21800 (JSC::SparseArrayValueMap::take):
21801 - only for use on non-SpareMode arrays.
21802 (JSC::JSArray::inSparseMode):
21805 2011-12-22 Filip Pizlo <fpizlo@apple.com>
21807 DFG CFA sometimes generates an incorrect proof that a node is known to be a typed array
21808 https://bugs.webkit.org/show_bug.cgi?id=75150
21809 <rdar://problem/10621900>
21811 Reviewed by Gavin Barraclough.
21813 * dfg/DFGAbstractState.cpp:
21814 (JSC::DFG::AbstractState::execute):
21816 2011-12-22 Filip Pizlo <fpizlo@apple.com>
21818 DFG JIT does exactly the wrong thing when doing strict equality on two known cells
21819 https://bugs.webkit.org/show_bug.cgi?id=75138
21820 <rdar://problem/10621526>
21822 Reviewed by Oliver Hunt.
21824 * dfg/DFGSpeculativeJIT32_64.cpp:
21825 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
21826 * dfg/DFGSpeculativeJIT64.cpp:
21827 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
21829 2011-12-22 Balazs Kelemen <kbalazs@webkit.org>
21831 Fix debug build with assertions disabled
21832 https://bugs.webkit.org/show_bug.cgi?id=75075
21834 Reviewed by Darin Adler.
21836 Check whether assertions are disabled instead of NDEBUG
21837 where appropriate to avoid "defined but not used" warnings.
21839 * wtf/DateMath.cpp:
21840 (WTF::initializeDates):
21842 2011-12-22 Mariusz Grzegorczyk <mariusz.g@samsung.com>
21844 [EFL] Missing plugins support for efl port
21845 https://bugs.webkit.org/show_bug.cgi?id=44505
21847 Reviewed by Anders Carlsson.
21849 Add define of ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH for efl port.
21853 2011-12-22 Wei Charles <charles.wei@torchmobile.com.cn>
21855 Remove un-used data member of LiteralParser::Lex::m_string
21856 https://bugs.webkit.org/show_bug.cgi?id=68216
21858 Reviewed by George Staikos.
21860 * runtime/LiteralParser.h:
21862 2011-12-21 Dan Bernstein <mitz@apple.com>
21864 OS X build fix after r103488.
21866 * JavaScriptCore.exp:
21868 2011-12-21 Konrad Piascik <kpiascik@rim.com>
21870 Implement the JavaScriptCore bindings for eventListenerHandlerLocation
21871 https://bugs.webkit.org/show_bug.cgi?id=74313
21873 Reviewed by Eric Seidel.
21875 Updated project files to get Windows and Mac builds working.
21877 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
21878 * JavaScriptCore.xcodeproj/project.pbxproj:
21880 2011-12-21 Filip Pizlo <fpizlo@apple.com>
21882 DFG ConvertThis optimizations do not honor the distinction between the global object and the global this object
21883 https://bugs.webkit.org/show_bug.cgi?id=75058
21884 <rdar://problem/10616612>
21885 <rdar://problem/10617500>
21887 Reviewed by Oliver Hunt.
21889 Added a call to toThisObject() in the DFG when planting a direct reference to the global this object.
21890 Instead of adding a separate toThisObject() method on JSCell which does not take ExecState*, I reascribed
21891 a new contract: if you're calling toThisObject() on JSObject or one of its subtypes, then the ExecState*
21894 * dfg/DFGAssemblyHelpers.h:
21895 (JSC::DFG::AssemblyHelpers::globalThisObjectFor):
21896 * dfg/DFGSpeculativeJIT32_64.cpp:
21897 (JSC::DFG::SpeculativeJIT::compile):
21898 * dfg/DFGSpeculativeJIT64.cpp:
21899 (JSC::DFG::SpeculativeJIT::compile):
21900 * runtime/JSObject.h:
21902 2011-12-21 Pierre Rossi <pierre.rossi@gmail.com>
21904 Implement montonicallyIncreasingClock() on Qt
21905 https://bugs.webkit.org/show_bug.cgi?id=62159
21907 Reviewed by Darin Adler.
21909 * wtf/CurrentTime.cpp:
21910 (WTF::monotonicallyIncreasingTime):
21912 2011-12-20 Filip Pizlo <fpizlo@apple.com>
21914 32_64 baseline JIT should attempt to convert division results to integers, and record when that fails
21915 https://bugs.webkit.org/show_bug.cgi?id=74997
21916 <rdar://problem/10612389>
21918 Reviewed by Gavin Barraclough.
21920 * jit/JITArithmetic32_64.cpp:
21921 (JSC::JIT::emit_op_div):
21923 2011-12-20 Filip Pizlo <fpizlo@apple.com>
21925 JavaScriptCore should be consistent about how it reads and writes ArgumentCount
21926 https://bugs.webkit.org/show_bug.cgi?id=74989
21927 <rdar://problem/10612006>
21929 Reviewed by Gavin Barraclough.
21931 * dfg/DFGJITCompiler.cpp:
21932 (JSC::DFG::JITCompiler::compileFunction):
21934 (JSC::JIT::privateCompile):
21935 * jit/JITCall32_64.cpp:
21936 (JSC::JIT::compileLoadVarargs):
21937 * jit/JITOpcodes32_64.cpp:
21938 (JSC::JIT::emit_op_get_arguments_length):
21939 (JSC::JIT::emit_op_get_argument_by_val):
21940 * jit/SpecializedThunkJIT.h:
21941 (JSC::SpecializedThunkJIT::SpecializedThunkJIT):
21943 2011-12-20 Filip Pizlo <fpizlo@apple.com>
21945 Value Profiles for arguments should be more easily accessible to the interpreter
21946 https://bugs.webkit.org/show_bug.cgi?id=74984
21947 <rdar://problem/10611364>
21949 Reviewed by Gavin Barraclough.
21951 * bytecode/CodeBlock.cpp:
21952 (JSC::CodeBlock::stronglyVisitStrongReferences):
21953 (JSC::CodeBlock::shouldOptimizeNow):
21954 (JSC::CodeBlock::dumpValueProfiles):
21955 * bytecode/CodeBlock.h:
21956 (JSC::CodeBlock::setArgumentValueProfileSize):
21957 (JSC::CodeBlock::numberOfArgumentValueProfiles):
21958 (JSC::CodeBlock::valueProfileForArgument):
21959 (JSC::CodeBlock::addValueProfile):
21960 (JSC::CodeBlock::valueProfile):
21961 (JSC::CodeBlock::valueProfileForBytecodeOffset):
21962 (JSC::CodeBlock::totalNumberOfValueProfiles):
21963 (JSC::CodeBlock::getFromAllValueProfiles):
21964 * bytecode/ValueProfile.h:
21965 (JSC::ValueProfile::ValueProfile):
21967 (JSC::JIT::privateCompile):
21969 * jit/JITInlineMethods.h:
21970 (JSC::JIT::emitValueProfilingSite):
21972 2011-12-20 Gavin Barraclough <barraclough@apple.com>
21974 JSC shell should accept utf8 input.
21976 Reviewed by Filip Pizlo.
21982 (functionCheckSyntax):
21986 2011-12-20 Gavin Barraclough <barraclough@apple.com>
21988 Rubber Stamped by Sam Weinig
21990 * runtime/JSGlobalData.cpp:
21991 - removed some dead code.
21993 2011-12-19 Geoffrey Garen <ggaren@apple.com>
21995 Tightened up Vector<T>::append
21996 https://bugs.webkit.org/show_bug.cgi?id=74906
21998 Reviewed by Sam Weinig.
22000 Not a measurable speedup, but code inspection shows better code generated,
22001 and I believe this is a step toward turning off -fomit-frame-pointer.
22005 (WTF::::appendSlowCase): Split out the slow case into a separate function
22006 to keep unnecessary instructions off the hot path. This means the hot
22007 path can now be inlined more often.
22009 Removed some old MSVC7 cruft. Hopefully, we don't need to hang on to a
22010 compiler work-around from 2007.
22012 2011-12-19 Yuqiang Xian <yuqiang.xian@intel.com>
22014 Temporary GPR should not be lazily allocated in DFG JIT on X86
22015 https://bugs.webkit.org/show_bug.cgi?id=74908
22017 Reviewed by Filip Pizlo.
22019 On X86, we used to allocate a temporary GPR lazily when it's really
22020 used rather than defined. This may cause potential issues of
22021 allocating registers inside control flow and result in problems in
22022 subsequent code generation, for example the DFG JIT may think an
22023 operand already being spilled (to satisfy the allocation request) and
22024 generate code to read the data from memory, but the allocation and
22025 spilling are in a branch which is not taken at runtime, so the
22026 generated code is incorrect.
22028 Although current DFG JIT code doesn't have this problematic pattern,
22029 it's better to cut-off the root to avoid any potential issues in the
22032 * dfg/DFGSpeculativeJIT.cpp:
22033 (JSC::DFG::GPRTemporary::GPRTemporary):
22034 * dfg/DFGSpeculativeJIT.h:
22035 (JSC::DFG::GPRTemporary::gpr):
22036 * dfg/DFGSpeculativeJIT32_64.cpp:
22037 (JSC::DFG::SpeculativeJIT::compile):
22039 2011-12-19 Yuqiang Xian <yuqiang.xian@intel.com>
22041 Remove unused code for non-speculative Arith operations from DFG JIT
22042 https://bugs.webkit.org/show_bug.cgi?id=74905
22044 Reviewed by Filip Pizlo.
22046 * dfg/DFGSpeculativeJIT.h:
22047 * dfg/DFGSpeculativeJIT32_64.cpp:
22048 * dfg/DFGSpeculativeJIT64.cpp:
22050 2011-12-19 Gavin Barraclough <barraclough@apple.com>
22052 https://bugs.webkit.org/show_bug.cgi?id=74903
22053 Exceptions not thrown correctly from DFG JIT on 32bit
22055 Reviewed by Oliver Hunt.
22057 Arguments for lookupExceptionHandler are not setup correctly.
22058 In the case of ARMv7 we rely on lr being preserved over a call,
22059 this in invalid. On x86 we don't should be poking the arguments onto the stack!
22061 * bytecode/CodeBlock.h:
22062 (JSC::CodeBlock::bytecodeOffsetForCallAtIndex):
22063 * dfg/DFGAssemblyHelpers.h:
22064 (JSC::DFG::AssemblyHelpers::restoreReturnAddressBeforeReturn):
22065 * dfg/DFGGPRInfo.h:
22066 * dfg/DFGJITCompiler.cpp:
22067 (JSC::DFG::JITCompiler::compileBody):
22068 * dfg/DFGJITCompiler.h:
22069 (JSC::DFG::JITCompiler::addExceptionCheck):
22070 (JSC::DFG::JITCompiler::addFastExceptionCheck):
22071 * dfg/DFGOperations.cpp:
22072 * dfg/DFGOperations.h:
22074 2011-12-19 Filip Pizlo <fpizlo@apple.com>
22076 If we detect that we can use the JIT, don't use computed opcode lookups
22077 https://bugs.webkit.org/show_bug.cgi?id=74899
22078 <rdar://problem/10604551>
22080 Reviewed by Gavin Barraclough.
22082 * interpreter/Interpreter.cpp:
22083 (JSC::Interpreter::Interpreter):
22084 (JSC::Interpreter::initialize):
22085 (JSC::Interpreter::privateExecute):
22086 * interpreter/Interpreter.h:
22087 (JSC::Interpreter::getOpcode):
22088 (JSC::Interpreter::getOpcodeID):
22089 * runtime/JSGlobalData.cpp:
22090 (JSC::JSGlobalData::JSGlobalData):
22092 2011-12-19 Geoffrey Garen <ggaren@apple.com>
22094 Try to fix the Qt build.
22098 * wtf/ThreadSpecific.h: #include!
22100 2011-12-18 Filip Pizlo <fpizlo@apple.com>
22102 It should be possible to change the value of an Options variable without recompiling the world
22103 https://bugs.webkit.org/show_bug.cgi?id=74807
22105 Reviewed by Gavin Barraclough.
22107 * runtime/Options.cpp:
22108 (JSC::Options::initializeOptions):
22109 * runtime/Options.h:
22111 2011-12-19 Sheriff Bot <webkit.review.bot@gmail.com>
22113 Unreviewed, rolling out r103250.
22114 http://trac.webkit.org/changeset/103250
22115 https://bugs.webkit.org/show_bug.cgi?id=74877
22117 it still breaks codegen (Requested by olliej on #webkit).
22119 * dfg/DFGAbstractState.cpp:
22120 (JSC::DFG::AbstractState::execute):
22121 * dfg/DFGByteCodeParser.cpp:
22122 (JSC::DFG::ByteCodeParser::parseBlock):
22124 * dfg/DFGPropagator.cpp:
22125 (JSC::DFG::Propagator::propagateArithNodeFlags):
22126 (JSC::DFG::Propagator::fixupNode):
22127 (JSC::DFG::Propagator::byValIsPure):
22128 (JSC::DFG::Propagator::clobbersWorld):
22129 (JSC::DFG::Propagator::getByValLoadElimination):
22130 (JSC::DFG::Propagator::checkStructureLoadElimination):
22131 (JSC::DFG::Propagator::getByOffsetLoadElimination):
22132 (JSC::DFG::Propagator::getPropertyStorageLoadElimination):
22133 (JSC::DFG::Propagator::getIndexedPropertyStorageLoadElimination):
22134 (JSC::DFG::Propagator::performNodeCSE):
22135 * dfg/DFGSpeculativeJIT.cpp:
22136 (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
22137 (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
22138 (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
22139 * dfg/DFGSpeculativeJIT.h:
22140 * dfg/DFGSpeculativeJIT32_64.cpp:
22141 (JSC::DFG::SpeculativeJIT::compile):
22142 * dfg/DFGSpeculativeJIT64.cpp:
22143 (JSC::DFG::SpeculativeJIT::compile):
22145 2011-12-16 Oliver Hunt <oliver@apple.com>
22147 Rolling r103120 back in with merge errors corrected.
22149 PutByVal[Alias] unnecessarily reloads the storage buffer
22150 https://bugs.webkit.org/show_bug.cgi?id=74747
22152 Reviewed by Gavin Barraclough.
22154 Make PutByVal use GetIndexedStorage to load the storage buffer.
22155 This required switching PutByVal to a vararg node (which is
22156 responsible for most of the noise in this patch). This fixes the
22157 remaining portion of the kraken regression caused by the GetByVal
22158 storage load elimination, and a 1-5% win on some of the sub tests of
22159 the typed array benchmark at:
22160 http://stepheneb.github.com/webgl-matrix-benchmarks/matrix_benchmark.html
22162 * dfg/DFGAbstractState.cpp:
22163 (JSC::DFG::AbstractState::execute):
22164 * dfg/DFGByteCodeParser.cpp:
22165 (JSC::DFG::ByteCodeParser::parseBlock):
22167 * dfg/DFGPropagator.cpp:
22168 (JSC::DFG::Propagator::propagateArithNodeFlags):
22169 (JSC::DFG::Propagator::fixupNode):
22170 (JSC::DFG::Propagator::byValIndexIsPure):
22171 (JSC::DFG::Propagator::clobbersWorld):
22172 (JSC::DFG::Propagator::getByValLoadElimination):
22173 (JSC::DFG::Propagator::checkStructureLoadElimination):
22174 (JSC::DFG::Propagator::getByOffsetLoadElimination):
22175 (JSC::DFG::Propagator::getPropertyStorageLoadElimination):
22176 (JSC::DFG::Propagator::getIndexedPropertyStorageLoadElimination):
22177 (JSC::DFG::Propagator::performNodeCSE):
22178 * dfg/DFGSpeculativeJIT.cpp:
22179 (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
22180 (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
22181 (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
22182 * dfg/DFGSpeculativeJIT.h:
22183 * dfg/DFGSpeculativeJIT32_64.cpp:
22184 (JSC::DFG::SpeculativeJIT::compile):
22185 * dfg/DFGSpeculativeJIT64.cpp:
22186 (JSC::DFG::SpeculativeJIT::compile):
22188 2011-12-15 Geoffrey Garen <ggaren@apple.com>
22190 Placement new does an unnecessary NULL check
22191 https://bugs.webkit.org/show_bug.cgi?id=74676
22193 Reviewed by Sam Weinig.
22195 We can define our own version, which skips the NULL check.
22197 Not a measurable speedup, but code inspection shows better code generated,
22198 and I believe this is a step toward turning off -fomit-frame-pointer.
22200 * API/JSCallbackConstructor.h:
22201 (JSC::JSCallbackConstructor::create):
22202 * API/JSCallbackFunction.h:
22203 (JSC::JSCallbackFunction::create): Use the NotNull version of placement
22204 new to skip the NULL check.
22206 * API/JSCallbackObject.h: Removed a conflicting, unnecessaray placement new.
22208 (JSC::JSCallbackObject::create):
22209 * debugger/DebuggerActivation.h:
22210 (JSC::DebuggerActivation::create):
22211 * heap/HandleHeap.cpp:
22212 (JSC::HandleHeap::grow):
22213 * heap/HandleHeap.h:
22214 (JSC::HandleHeap::allocate):
22215 * heap/MarkedBlock.cpp:
22216 (JSC::MarkedBlock::create):
22217 (JSC::MarkedBlock::recycle):
22219 (JSC::JITCode::clear):
22221 (GlobalObject::create):
22222 * profiler/CallIdentifier.h:
22223 * runtime/Arguments.h:
22224 (JSC::Arguments::create):
22225 * runtime/ArrayConstructor.h:
22226 (JSC::ArrayConstructor::create):
22227 * runtime/ArrayPrototype.h:
22228 (JSC::ArrayPrototype::create):
22229 * runtime/BooleanConstructor.h:
22230 (JSC::BooleanConstructor::create):
22231 * runtime/BooleanObject.h:
22232 (JSC::BooleanObject::create):
22233 * runtime/BooleanPrototype.h:
22234 (JSC::BooleanPrototype::create):
22235 * runtime/DateConstructor.h:
22236 (JSC::DateConstructor::create):
22237 * runtime/DateInstance.h:
22238 (JSC::DateInstance::create):
22239 * runtime/DatePrototype.h:
22240 (JSC::DatePrototype::create):
22242 (JSC::StrictModeTypeErrorFunction::create):
22243 * runtime/ErrorConstructor.h:
22244 (JSC::ErrorConstructor::create):
22245 * runtime/ErrorInstance.h:
22246 (JSC::ErrorInstance::create):
22247 * runtime/ErrorPrototype.h:
22248 (JSC::ErrorPrototype::create):
22249 * runtime/ExceptionHelpers.h:
22250 (JSC::InterruptedExecutionError::create):
22251 (JSC::TerminatedExecutionError::create):
22252 * runtime/Executable.h:
22253 (JSC::NativeExecutable::create):
22254 (JSC::EvalExecutable::create):
22255 (JSC::ProgramExecutable::create):
22256 (JSC::FunctionExecutable::create):
22257 * runtime/FunctionConstructor.h:
22258 (JSC::FunctionConstructor::create):
22259 * runtime/FunctionPrototype.h:
22260 (JSC::FunctionPrototype::create):
22261 * runtime/GetterSetter.h:
22262 (JSC::GetterSetter::create):
22263 * runtime/JSAPIValueWrapper.h:
22264 (JSC::JSAPIValueWrapper::create):
22265 * runtime/JSActivation.h:
22266 (JSC::JSActivation::create):
22267 * runtime/JSArray.h:
22268 (JSC::JSArray::create):
22269 * runtime/JSBoundFunction.cpp:
22270 (JSC::JSBoundFunction::create):
22271 * runtime/JSByteArray.h:
22272 (JSC::JSByteArray::create): Use the NotNull version of placement
22273 new to skip the NULL check.
22275 * runtime/JSCell.h: Removed a conflicting, unnecessaray placement new.
22277 * runtime/JSFunction.cpp:
22278 (JSC::JSFunction::create):
22279 * runtime/JSFunction.h:
22280 (JSC::JSFunction::create):
22281 * runtime/JSGlobalObject.h:
22282 (JSC::JSGlobalObject::create):
22283 * runtime/JSGlobalThis.h:
22284 (JSC::JSGlobalThis::create):
22285 * runtime/JSNotAnObject.h:
22286 (JSC::JSNotAnObject::create):
22287 * runtime/JSONObject.h:
22288 (JSC::JSONObject::create):
22289 * runtime/JSObject.h:
22290 (JSC::JSFinalObject::create):
22291 * runtime/JSPropertyNameIterator.cpp:
22292 (JSC::JSPropertyNameIterator::create):
22293 * runtime/JSPropertyNameIterator.h:
22294 (JSC::JSPropertyNameIterator::create):
22295 * runtime/JSStaticScopeObject.h:
22296 (JSC::JSStaticScopeObject::create):
22297 * runtime/JSString.cpp:
22298 (JSC::StringObject::create):
22299 * runtime/JSString.h:
22300 (JSC::RopeBuilder::createNull):
22301 (JSC::RopeBuilder::create):
22302 (JSC::RopeBuilder::createHasOtherOwner):
22303 * runtime/MathObject.h:
22304 (JSC::MathObject::create):
22305 * runtime/NativeErrorConstructor.h:
22306 (JSC::NativeErrorConstructor::create):
22307 * runtime/NativeErrorPrototype.h:
22308 (JSC::NativeErrorPrototype::create):
22309 * runtime/NumberConstructor.h:
22310 (JSC::NumberConstructor::create):
22311 * runtime/NumberObject.h:
22312 (JSC::NumberObject::create):
22313 * runtime/NumberPrototype.h:
22314 (JSC::NumberPrototype::create):
22315 * runtime/ObjectConstructor.h:
22316 (JSC::ObjectConstructor::create):
22317 * runtime/ObjectPrototype.h:
22318 (JSC::ObjectPrototype::create):
22319 * runtime/RegExp.cpp:
22320 (JSC::RegExp::createWithoutCaching):
22321 * runtime/RegExpConstructor.h:
22322 (JSC::RegExpConstructor::create):
22323 * runtime/RegExpMatchesArray.h:
22324 (JSC::RegExpMatchesArray::create):
22325 * runtime/RegExpObject.h:
22326 (JSC::RegExpObject::create):
22327 * runtime/RegExpPrototype.h:
22328 (JSC::RegExpPrototype::create):
22329 * runtime/ScopeChain.h:
22330 (JSC::ScopeChainNode::create):
22331 * runtime/StrictEvalActivation.h:
22332 (JSC::StrictEvalActivation::create):
22333 * runtime/StringConstructor.h:
22334 (JSC::StringConstructor::create):
22335 * runtime/StringObject.h:
22336 (JSC::StringObject::create):
22337 * runtime/StringPrototype.h:
22338 (JSC::StringPrototype::create):
22339 * runtime/Structure.h:
22340 (JSC::Structure::create):
22341 (JSC::Structure::createStructure):
22342 * runtime/StructureChain.h:
22343 (JSC::StructureChain::create):
22345 (GlobalObject::create):
22346 * wtf/BitVector.cpp:
22347 (WTF::BitVector::OutOfLineBits::create): Use the NotNull version of placement
22348 new to skip the NULL check.
22350 * wtf/BumpPointerAllocator.h:
22351 (WTF::BumpPointerPool::create): Standardized spacing to make grep easier.
22353 * wtf/ByteArray.cpp:
22354 (WTF::ByteArray::create):
22357 (WTF::::prepend): Use NotNull, as above.
22359 * wtf/FastAllocBase.h: Added a placement new, since this class would otherwise
22360 hide the name of the global placement new.
22362 (WTF::fastNew): Standardized spacing. Most of these functions don't need
22363 NotNull, since they check for NULL, and the optimizer can see that.
22366 * wtf/HashTraits.h:
22367 (WTF::SimpleClassHashTraits::constructDeletedValue):
22368 * wtf/MetaAllocator.cpp:
22369 (WTF::MetaAllocator::allocFreeSpaceNode): NotNull, as above.
22371 * wtf/StdLibExtras.h:
22372 (throw): This is our NotNull placement new. Declaring that we throw is
22373 the C++ way to say that operator new will not return NULL.
22375 * wtf/ThreadSpecific.h:
22379 (WTF::::tryAppend):
22380 (WTF::::uncheckedAppend):
22382 * wtf/text/AtomicStringHash.h:
22383 * wtf/text/StringImpl.cpp:
22384 (WTF::StringImpl::createUninitialized):
22385 (WTF::StringImpl::reallocate):
22386 * wtf/text/StringImpl.h:
22387 (WTF::StringImpl::tryCreateUninitialized):
22388 * wtf/text/StringStatics.cpp:
22389 (WTF::AtomicString::init): Use NotNull, as above.
22391 * yarr/YarrInterpreter.cpp:
22392 (JSC::Yarr::Interpreter::allocDisjunctionContext):
22393 (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::ParenthesesDisjunctionContext):
22394 (JSC::Yarr::Interpreter::allocParenthesesDisjunctionContext): Standardized
22395 spacing for easy grep.
22397 2011-12-19 Eric Carlson <eric.carlson@apple.com>
22399 Enable <track> for Mac build
22400 https://bugs.webkit.org/show_bug.cgi?id=74838
22402 Reviewed by Darin Adler.
22406 2011-12-18 Filip Pizlo <fpizlo@apple.com>
22408 DFG is too sloppy with register allocation
22409 https://bugs.webkit.org/show_bug.cgi?id=74835
22411 Reviewed by Gavin Barraclough.
22413 Added assertions that at the end of a successfully generated basic block,
22414 all use counts should be zero. This revealed a number of bugs:
22416 - Array length optimizations were turning a must-generate node into one
22417 that is not must-generate, but failing to change the ref count
22420 - Indexed property storage optimizations were failing to deref their
22421 children, or to deref the indexed property storage node itself. Also,
22422 they used the Phantom node as a replacement. But the Phantom node is
22423 must-generate, which was causing bizarre issues. So this introduces a
22424 Nop node, which should be used in cases where you want a node that is
22425 skipped and has no children.
22427 This does not have any significant performance effect, but it should
22428 relieve some register pressure. The main thing this patch adds, though,
22429 are the assertions, which should make it easier to do register allocation
22430 related changes in the future.
22432 * dfg/DFGAbstractState.cpp:
22433 (JSC::DFG::AbstractState::execute):
22434 * dfg/DFGGenerationInfo.h:
22435 (JSC::DFG::GenerationInfo::initConstant):
22436 (JSC::DFG::GenerationInfo::initInteger):
22437 (JSC::DFG::GenerationInfo::initJSValue):
22438 (JSC::DFG::GenerationInfo::initCell):
22439 (JSC::DFG::GenerationInfo::initBoolean):
22440 (JSC::DFG::GenerationInfo::initDouble):
22441 (JSC::DFG::GenerationInfo::initStorage):
22442 (JSC::DFG::GenerationInfo::use):
22444 (JSC::DFG::Graph::clearAndDerefChild1):
22445 (JSC::DFG::Graph::clearAndDerefChild2):
22446 (JSC::DFG::Graph::clearAndDerefChild3):
22448 (JSC::DFG::Node::deref):
22449 * dfg/DFGPropagator.cpp:
22450 (JSC::DFG::Propagator::propagateNodePredictions):
22451 (JSC::DFG::Propagator::fixupNode):
22452 * dfg/DFGSpeculativeJIT.cpp:
22453 (JSC::DFG::SpeculativeJIT::compile):
22454 * dfg/DFGSpeculativeJIT32_64.cpp:
22455 (JSC::DFG::SpeculativeJIT::compile):
22456 * dfg/DFGSpeculativeJIT64.cpp:
22457 (JSC::DFG::SpeculativeJIT::compile):
22459 2011-12-18 Benjamin Poulain <bpoulain@apple.com>
22461 Remove the duplicated code from ASCIICType.h
22462 https://bugs.webkit.org/show_bug.cgi?id=74771
22464 Reviewed by Andreas Kling.
22466 Use isASCIIDigit() and isASCIIAlpha() instead of copying the code.
22468 * wtf/ASCIICType.h:
22469 (WTF::isASCIIDigit):
22470 (WTF::isASCIIAlphanumeric):
22471 (WTF::isASCIIHexDigit):
22473 2011-12-18 Anders Carlsson <andersca@apple.com>
22475 Set the main frame view scroll position asynchronously
22476 https://bugs.webkit.org/show_bug.cgi?id=74823
22478 Reviewed by Sam Weinig.
22480 * JavaScriptCore.exp:
22482 2011-12-10 Andreas Kling <kling@webkit.org>
22484 OpaqueJSClass: Remove RVCT2 workarounds.
22485 <http://webkit.org/b/74250>
22487 Reviewed by Benjamin Poulain.
22489 We no longer need workarounds for the RVCT2 compiler since it was
22490 only used for the Symbian port of WebKit which is now defunct.
22492 * API/JSClassRef.cpp:
22493 (OpaqueJSClass::OpaqueJSClass):
22494 (OpaqueJSClassContextData::OpaqueJSClassContextData):
22496 2011-12-16 Benjamin Poulain <bpoulain@apple.com>
22498 Remove the duplicated code from ASCIICType.h
22499 https://bugs.webkit.org/show_bug.cgi?id=74771
22501 Reviewed by Andreas Kling.
22503 The functions were sharing similar code and were defined for the various input types.
22504 Use templates instead to avoid code duplication.
22506 * wtf/ASCIICType.h:
22508 (WTF::isASCIIAlpha):
22509 (WTF::isASCIIAlphanumeric):
22510 (WTF::isASCIIDigit):
22511 (WTF::isASCIIHexDigit):
22512 (WTF::isASCIILower):
22513 (WTF::isASCIIOctalDigit):
22514 (WTF::isASCIIPrintable):
22515 (WTF::isASCIISpace):
22516 (WTF::isASCIIUpper):
22517 (WTF::toASCIILower):
22518 (WTF::toASCIIUpper):
22519 (WTF::toASCIIHexValue):
22520 (WTF::lowerNibbleToASCIIHexDigit):
22521 (WTF::upperNibbleToASCIIHexDigit):
22523 2011-12-16 Filip Pizlo <fpizlo@apple.com>
22525 DFG OSR exit may get confused about where in the scratch buffer it stored a value
22526 https://bugs.webkit.org/show_bug.cgi?id=74695
22528 Reviewed by Oliver Hunt.
22530 The code that reads from the scratch buffer now explicitly knows which locations to
22531 read from. No new tests, since this patch covers a case so uncommon that I don't know
22532 how to make a test for it.
22534 * dfg/DFGOSRExitCompiler.h:
22535 (JSC::DFG::OSRExitCompiler::badIndex):
22536 (JSC::DFG::OSRExitCompiler::initializePoisoned):
22537 (JSC::DFG::OSRExitCompiler::poisonIndex):
22538 * dfg/DFGOSRExitCompiler32_64.cpp:
22539 (JSC::DFG::OSRExitCompiler::compileExit):
22540 * dfg/DFGOSRExitCompiler64.cpp:
22541 (JSC::DFG::OSRExitCompiler::compileExit):
22543 2011-12-16 Oliver Hunt <oliver@apple.com>
22545 PutByVal[Alias] unnecessarily reloads the storage buffer
22546 https://bugs.webkit.org/show_bug.cgi?id=74747
22548 Reviewed by Gavin Barraclough.
22550 Make PutByVal use GetIndexedStorage to load the storage buffer.
22551 This required switching PutByVal to a vararg node (which is
22552 responsible for most of the noise in this patch). This fixes the
22553 remaining portion of the kraken regression caused by the GetByVal
22554 storage load elimination, and a 1-5% win on some of the sub tests of
22555 the typed array benchmark at:
22556 http://stepheneb.github.com/webgl-matrix-benchmarks/matrix_benchmark.html
22558 * dfg/DFGAbstractState.cpp:
22559 (JSC::DFG::AbstractState::execute):
22560 * dfg/DFGByteCodeParser.cpp:
22561 (JSC::DFG::ByteCodeParser::parseBlock):
22563 * dfg/DFGPropagator.cpp:
22564 (JSC::DFG::Propagator::propagateArithNodeFlags):
22565 (JSC::DFG::Propagator::fixupNode):
22566 (JSC::DFG::Propagator::byValIndexIsPure):
22567 (JSC::DFG::Propagator::clobbersWorld):
22568 (JSC::DFG::Propagator::getByValLoadElimination):
22569 (JSC::DFG::Propagator::checkStructureLoadElimination):
22570 (JSC::DFG::Propagator::getByOffsetLoadElimination):
22571 (JSC::DFG::Propagator::getPropertyStorageLoadElimination):
22572 (JSC::DFG::Propagator::getIndexedPropertyStorageLoadElimination):
22573 (JSC::DFG::Propagator::performNodeCSE):
22574 * dfg/DFGSpeculativeJIT.cpp:
22575 (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
22576 (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
22577 (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
22578 * dfg/DFGSpeculativeJIT.h:
22579 * dfg/DFGSpeculativeJIT32_64.cpp:
22580 (JSC::DFG::SpeculativeJIT::compile):
22581 * dfg/DFGSpeculativeJIT64.cpp:
22582 (JSC::DFG::SpeculativeJIT::compile):
22584 2011-12-16 Daniel Bates <dbates@rim.com>
22586 Include BlackBerryPlatformLog.h instead of BlackBerryPlatformMisc.h
22588 Rubber-stamped by Antonio Gomes.
22590 BlackBerry::Platform::logV() is declared in BlackBerryPlatformLog.h. That is, it isn't
22591 declared in BlackBerryPlatformMisc.h. Hence, we should include BlackBerryPlatformLog.h
22592 instead of BlackBerryPlatformMisc.h.
22594 * wtf/Assertions.cpp:
22596 2011-12-16 Mark Hahnenberg <mhahnenberg@apple.com>
22598 De-virtualize destructors
22599 https://bugs.webkit.org/show_bug.cgi?id=74331
22601 Reviewed by Geoffrey Garen.
22603 This is a megapatch which frees us from the chains of virtual destructors.
22605 In order to remove the virtual destructors, which are the last of the virtual
22606 functions, from the JSCell hierarchy, we need to add the ClassInfo pointer to
22607 the cell rather than to the structure because in order to be able to lazily call
22608 the static destroy() functions that will replace the virtual destructors, we
22609 need to be able to access the ClassInfo without the danger of the object's
22610 Structure being collected before the object itself.
22612 After adding the ClassInfo to the cell, we can then begin to remove our use
22613 of vptrs for optimizations within the JIT and the GC. When we have removed
22614 all of the stored vptrs from JSGlobalData, we can then also remove all of
22615 the related VPtrStealingHack code.
22617 The replacement for virtual destructors will be to add a static destroy function
22618 pointer to the MethodTable stored in ClassInfo. Any subclass of JSCell that has
22619 a non-trivial destructor will require its own static destroy function to static
22620 call its corresponding destructor, which will now be non-virtual. In future
22621 patches we will slowly move away from destructors altogether as we make more and
22622 more objects backed by GC memory rather than malloc-ed memory. The GC will now
22623 call the static destroy method rather than the virtual destructor.
22625 As we go through the hierarchy and add static destroy functions to classes,
22626 we will also add a new assert, ASSERT_HAS_TRIVIAL_DESTRUCTOR, to those classes
22627 to which it applies. The future goal is to eventually have every class have that assert.
22629 * API/JSCallbackConstructor.cpp:
22630 (JSC::JSCallbackConstructor::destroy): Add a destroy function to statically call
22631 ~JSCallbackConstructor because it has some extra destruction logic.
22632 * API/JSCallbackConstructor.h:
22633 * API/JSCallbackFunction.cpp: Add trivial destructor assert for JSCallbackFunction.
22634 * API/JSCallbackObject.cpp: Add a destroy function to statically call ~JSCallbackObject
22635 because it has a member OwnPtr that needs destruction.
22637 * API/JSCallbackObject.h:
22638 * JavaScriptCore.exp: Add/remove necessary symbols for JSC.
22639 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Same for Windows symbols.
22640 * debugger/DebuggerActivation.cpp: DebuggerActivation, for some strange reason, didn't
22641 have its own ClassInfo despite the fact that it overrides a number of MethodTable
22642 methods. Added the ClassInfo, along with an assertion that its destructor is trivial.
22643 * debugger/DebuggerActivation.h:
22644 * dfg/DFGOperations.cpp: Remove global data first argument to isJSArray, isJSByteArray,
22645 isJSString, as it is no longer necessary.
22646 (JSC::DFG::putByVal):
22647 * dfg/DFGRepatch.cpp: Ditto. Also remove uses of jsArrayVPtr in favor of using the
22648 JSArray ClassInfo pointer.
22649 (JSC::DFG::tryCacheGetByID):
22650 * dfg/DFGSpeculativeJIT.cpp: Replace uses of the old vptrs with new ClassInfo
22651 comparisons since we don't have vptrs anymore.
22652 (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
22653 (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
22654 (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
22655 (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
22656 (JSC::DFG::SpeculativeJIT::compileGetTypedArrayLength):
22657 (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
22658 (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
22659 (JSC::DFG::SpeculativeJIT::compare):
22660 (JSC::DFG::SpeculativeJIT::compileStrictEq):
22661 (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
22662 * dfg/DFGSpeculativeJIT.h: Ditto.
22663 (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject):
22664 * dfg/DFGSpeculativeJIT32_64.cpp: Ditto.
22665 (JSC::DFG::SpeculativeJIT::compileObjectEquality):
22666 (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
22667 (JSC::DFG::SpeculativeJIT::compileLogicalNot):
22668 (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
22669 (JSC::DFG::SpeculativeJIT::emitBranch):
22670 (JSC::DFG::SpeculativeJIT::compile):
22671 * dfg/DFGSpeculativeJIT64.cpp: Ditto.
22672 (JSC::DFG::SpeculativeJIT::compileObjectEquality):
22673 (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
22674 (JSC::DFG::SpeculativeJIT::compileLogicalNot):
22675 (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
22676 (JSC::DFG::SpeculativeJIT::emitBranch):
22677 (JSC::DFG::SpeculativeJIT::compile):
22678 * heap/Heap.cpp: Remove all uses of vptrs in GC optimizations and replace them with
22679 ClassInfo comparisons.
22681 * heap/MarkStack.cpp: Ditto.
22682 (JSC::MarkStackThreadSharedData::markingThreadMain):
22683 (JSC::visitChildren):
22684 (JSC::SlotVisitor::drain):
22685 * heap/MarkStack.h: Ditto.
22686 (JSC::MarkStack::MarkStack):
22687 * heap/MarkedBlock.cpp: Ditto.
22688 (JSC::MarkedBlock::callDestructor):
22689 (JSC::MarkedBlock::specializedSweep):
22690 * heap/MarkedBlock.h: Ditto.
22691 * heap/SlotVisitor.h: Ditto.
22692 (JSC::SlotVisitor::SlotVisitor):
22693 * heap/VTableSpectrum.cpp: Now that we don't have vptrs, we can't count them.
22694 We'll have to rename this class and make it use ClassInfo ptrs in a future patch.
22695 (JSC::VTableSpectrum::count):
22696 * interpreter/Interpreter.cpp: Remove all global data arguments from isJSArray,
22698 (JSC::loadVarargs):
22699 (JSC::Interpreter::tryCacheGetByID):
22700 (JSC::Interpreter::privateExecute):
22701 * jit/JIT.h: Remove vptr argument from emitAllocateBasicJSObject
22702 * jit/JITInlineMethods.h: Remove vptr planting, and add ClassInfo planting,
22703 remove all vtable related code.
22704 (JSC::JIT::emitLoadCharacterString):
22705 (JSC::JIT::emitAllocateBasicJSObject):
22706 (JSC::JIT::emitAllocateJSFinalObject):
22707 (JSC::JIT::emitAllocateJSFunction):
22708 * jit/JITOpcodes.cpp: Replace vptr related branch code with corresponding ClassInfo.
22709 (JSC::JIT::privateCompileCTIMachineTrampolines):
22710 (JSC::JIT::emit_op_to_primitive):
22711 (JSC::JIT::emit_op_convert_this):
22712 * jit/JITOpcodes32_64.cpp: Ditto.
22713 (JSC::JIT::privateCompileCTIMachineTrampolines):
22714 (JSC::JIT::emit_op_to_primitive):
22715 (JSC::JIT::emitSlow_op_eq):
22716 (JSC::JIT::emitSlow_op_neq):
22717 (JSC::JIT::compileOpStrictEq):
22718 (JSC::JIT::emit_op_convert_this):
22719 * jit/JITPropertyAccess.cpp: Ditto.
22720 (JSC::JIT::stringGetByValStubGenerator):
22721 (JSC::JIT::emit_op_get_by_val):
22722 (JSC::JIT::emitSlow_op_get_by_val):
22723 (JSC::JIT::emit_op_put_by_val):
22724 (JSC::JIT::privateCompilePutByIdTransition):
22725 (JSC::JIT::privateCompilePatchGetArrayLength):
22726 * jit/JITPropertyAccess32_64.cpp: Ditto.
22727 (JSC::JIT::stringGetByValStubGenerator):
22728 (JSC::JIT::emit_op_get_by_val):
22729 (JSC::JIT::emitSlow_op_get_by_val):
22730 (JSC::JIT::emit_op_put_by_val):
22731 (JSC::JIT::privateCompilePatchGetArrayLength):
22732 * jit/JITStubs.cpp: Remove global data argument from isJSString, etc.
22733 (JSC::JITThunks::tryCacheGetByID):
22734 (JSC::DEFINE_STUB_FUNCTION):
22735 * jit/SpecializedThunkJIT.h: Replace vptr related stuff with ClassInfo stuff.
22736 (JSC::SpecializedThunkJIT::loadJSStringArgument):
22737 * runtime/ArrayConstructor.cpp: Add trivial destructor assert.
22738 * runtime/ArrayPrototype.cpp: Remove global data argument from isJSArray.
22739 (JSC::arrayProtoFuncToString):
22740 (JSC::arrayProtoFuncJoin):
22741 (JSC::arrayProtoFuncPop):
22742 (JSC::arrayProtoFuncPush):
22743 (JSC::arrayProtoFuncShift):
22744 (JSC::arrayProtoFuncSplice):
22745 (JSC::arrayProtoFuncUnShift):
22746 (JSC::arrayProtoFuncFilter):
22747 (JSC::arrayProtoFuncMap):
22748 (JSC::arrayProtoFuncEvery):
22749 (JSC::arrayProtoFuncForEach):
22750 (JSC::arrayProtoFuncSome):
22751 (JSC::arrayProtoFuncReduce):
22752 (JSC::arrayProtoFuncReduceRight):
22753 * runtime/BooleanConstructor.cpp: Add trivial destructor assert.
22754 * runtime/BooleanObject.cpp: Ditto.
22755 * runtime/BooleanPrototype.cpp: Ditto.
22756 * runtime/ClassInfo.h: Add destroy function pointer to MethodTable.
22757 * runtime/DateConstructor.cpp: Add trivial destructor assert.
22758 * runtime/DateInstance.cpp: Add destroy function for DateInstance because it has a RefPtr
22759 that needs destruction.
22760 (JSC::DateInstance::destroy):
22761 * runtime/DateInstance.h:
22762 * runtime/Error.cpp: Ditto (because of UString member).
22763 (JSC::StrictModeTypeErrorFunction::destroy):
22765 * runtime/ErrorConstructor.cpp: Add trivial destructor assert.
22766 * runtime/ErrorInstance.cpp: Ditto.
22767 * runtime/ExceptionHelpers.cpp: Ditto.
22768 * runtime/Executable.cpp: Add destroy functions for ExecutableBase and subclasses.
22769 (JSC::ExecutableBase::destroy):
22770 (JSC::NativeExecutable::destroy):
22771 (JSC::ScriptExecutable::destroy):
22772 (JSC::EvalExecutable::destroy):
22773 (JSC::ProgramExecutable::destroy):
22774 (JSC::FunctionExecutable::destroy):
22775 * runtime/Executable.h:
22776 * runtime/FunctionConstructor.cpp: Add trivial destructor assert.
22777 * runtime/FunctionPrototype.cpp: Ditto. Also remove global data first arg from isJSArray.
22778 (JSC::functionProtoFuncApply):
22779 * runtime/GetterSetter.cpp: Ditto.
22780 * runtime/InitializeThreading.cpp: Remove call to JSGlobalData::storeVPtrs since it no
22782 (JSC::initializeThreadingOnce):
22783 * runtime/InternalFunction.cpp: Remove vtableAnchor function, add trivial destructor assert,
22784 remove first arg from isJSString.
22785 (JSC::InternalFunction::displayName):
22786 * runtime/InternalFunction.h: Remove VPtrStealingHack.
22787 * runtime/JSAPIValueWrapper.cpp: Add trivial destructor assert.
22788 * runtime/JSArray.cpp: Add static destroy to call ~JSArray. Replace vptr checks in
22789 destructor with ClassInfo checks.
22790 (JSC::JSArray::~JSArray):
22791 (JSC::JSArray::destroy):
22792 * runtime/JSArray.h: Remove VPtrStealingHack. Remove globalData argument from isJSArray
22793 and change them to check the ClassInfo rather than the vptrs.
22795 * runtime/JSBoundFunction.cpp: Add trival destructor assert. Remove first arg from isJSArray.
22796 (JSC::boundFunctionCall):
22797 (JSC::boundFunctionConstruct):
22798 * runtime/JSByteArray.cpp: Add static destroy function, replace vptr checks with ClassInfo checks.
22799 (JSC::JSByteArray::~JSByteArray):
22800 (JSC::JSByteArray::destroy):
22801 * runtime/JSByteArray.h: Remove VPtrStealingHack code.
22802 (JSC::isJSByteArray):
22803 * runtime/JSCell.cpp: Add trivial destructor assert. Add static destroy function.
22804 (JSC::JSCell::destroy):
22805 * runtime/JSCell.h: Remove VPtrStealingHack code. Add function for returning the offset
22806 of the ClassInfo pointer in the object for use by the JIT. Add the ClassInfo pointer to
22807 the JSCell itself, and grab it from the Structure. Remove the vptr and setVPtr functions,
22808 as they are no longer used. Add a validatedClassInfo function to JSCell for any clients
22809 that want to verify, while in Debug mode, that the ClassInfo contained in the cell is the
22810 same one as that contained in the Structure. This isn't used too often, because most of
22811 the places where we compare the ClassInfo to things can be called during destruction.
22812 Since the Structure is unreliable during the phase when destructors are being called,
22813 we can't call validatedClassInfo.
22814 (JSC::JSCell::classInfoOffset):
22815 (JSC::JSCell::structure):
22816 (JSC::JSCell::classInfo):
22817 * runtime/JSFunction.cpp: Remove VPtrStealingHack code. Add static destroy, remove vtableAnchor,
22818 remove first arg from call to isJSString.
22819 (JSC::JSFunction::destroy):
22820 (JSC::JSFunction::displayName):
22821 * runtime/JSFunction.h:
22822 * runtime/JSGlobalData.cpp: Remove all VPtr stealing code and storage, including storeVPtrs,
22823 as these vptrs are no longer needed in the codebase.
22824 * runtime/JSGlobalData.h:
22825 (JSC::TypedArrayDescriptor::TypedArrayDescriptor): Changed the TypedArrayDescriptor to use
22826 ClassInfo rather than the vptr.
22827 * runtime/JSGlobalObject.cpp: Add static destroy function.
22828 (JSC::JSGlobalObject::destroy):
22829 * runtime/JSGlobalObject.h:
22830 * runtime/JSGlobalThis.cpp: Add trivial destructor assert.
22831 * runtime/JSNotAnObject.cpp: Ditto.
22832 * runtime/JSONObject.cpp: Ditto. Remove first arg from isJSArray calls.
22833 (JSC::Stringifier::Holder::appendNextProperty):
22834 (JSC::Walker::walk):
22835 * runtime/JSObject.cpp:
22836 (JSC::JSFinalObject::destroy):
22837 (JSC::JSNonFinalObject::destroy):
22838 (JSC::JSObject::destroy):
22839 * runtime/JSObject.h: Add trivial destructor assert for JSObject, remove vtableAnchor
22840 from JSNonFinalObject and JSFinalObject, add static destroy for JSFinalObject and
22841 JSNonFinalObject, add isJSFinalObject utility function similar to isJSArray, remove all VPtrStealingHack code.
22842 (JSC::JSObject::finishCreation):
22843 (JSC::JSNonFinalObject::finishCreation):
22844 (JSC::JSFinalObject::finishCreation):
22845 (JSC::isJSFinalObject):
22846 * runtime/JSPropertyNameIterator.cpp: Add static destroy.
22847 (JSC::JSPropertyNameIterator::destroy):
22848 * runtime/JSPropertyNameIterator.h:
22849 * runtime/JSStaticScopeObject.cpp: Ditto.
22850 (JSC::JSStaticScopeObject::destroy):
22851 * runtime/JSStaticScopeObject.h: Ditto.
22852 * runtime/JSString.cpp:
22853 (JSC::JSString::destroy):
22854 * runtime/JSString.h: Ditto. Remove VPtrStealingHack code. Also remove fixupVPtr code,
22855 since we no longer need to fixup vptrs.
22856 (JSC::jsSingleCharacterString):
22857 (JSC::jsSingleCharacterSubstring):
22858 (JSC::jsNontrivialString):
22860 (JSC::jsSubstring8):
22861 (JSC::jsSubstring):
22862 (JSC::jsOwnedString):
22863 (JSC::jsStringBuilder):
22865 * runtime/JSVariableObject.cpp:
22866 (JSC::JSVariableObject::destroy):
22867 * runtime/JSVariableObject.h: Ditto.
22868 * runtime/JSWrapperObject.cpp:
22869 * runtime/JSWrapperObject.h: Add trivial destructor assert.
22870 * runtime/MathObject.cpp: Ditto.
22871 * runtime/NativeErrorConstructor.cpp: Ditto.
22872 * runtime/NumberConstructor.cpp: Ditto.
22873 * runtime/NumberObject.cpp: Ditto.
22874 * runtime/NumberPrototype.cpp: Ditto.
22875 * runtime/ObjectConstructor.cpp: Ditto.
22876 * runtime/ObjectPrototype.cpp: Ditto.
22877 * runtime/Operations.h: Remove calls to fixupVPtr, remove first arg to isJSString.
22881 * runtime/RegExp.cpp: Add static destroy.
22882 (JSC::RegExp::destroy):
22883 * runtime/RegExp.h:
22884 * runtime/RegExpConstructor.cpp: Add static destroy for RegExpConstructor and RegExpMatchesArray.
22885 (JSC::RegExpConstructor::destroy):
22886 (JSC::RegExpMatchesArray::destroy):
22887 * runtime/RegExpConstructor.h:
22888 * runtime/RegExpMatchesArray.h:
22889 * runtime/RegExpObject.cpp: Add static destroy.
22890 (JSC::RegExpObject::destroy):
22891 * runtime/RegExpObject.h:
22892 * runtime/ScopeChain.cpp: Add trivial destructor assert.
22893 * runtime/ScopeChain.h:
22894 * runtime/StrictEvalActivation.cpp: Ditto.
22895 * runtime/StringConstructor.cpp:
22896 * runtime/StringObject.cpp: Ditto. Remove vtableAnchor.
22897 * runtime/StringObject.h:
22898 * runtime/StringPrototype.cpp: Ditto.
22899 * runtime/Structure.cpp: Add static destroy.
22900 (JSC::Structure::destroy):
22901 * runtime/Structure.h: Move JSCell::finishCreation and JSCell constructor into Structure.h
22902 because they need to have the full Structure type to access the ClassInfo to store in the JSCell.
22903 (JSC::JSCell::setStructure):
22904 (JSC::JSCell::validatedClassInfo):
22905 (JSC::JSCell::JSCell):
22906 (JSC::JSCell::finishCreation):
22907 * runtime/StructureChain.cpp: Add static destroy.
22908 (JSC::StructureChain::destroy):
22909 * runtime/StructureChain.h:
22910 * wtf/Assertions.h: Add new assertion ASSERT_HAS_TRIVIAL_DESTRUCTOR, which uses clangs
22911 ability to tell us when a class has a trivial destructor. We will use this assert
22912 more in future patches as we move toward having all JSC objects backed by GC memory,
22913 which means moving away from using destructors/finalizers.
22915 2011-12-15 Martin Robinson <mrobinson@igalia.com>
22917 Fix 'make dist' in preparation for the GTK+ release.
22919 * GNUmakefile.list.am: Add missing header.
22921 2011-12-15 Sam Weinig <sam@webkit.org>
22923 <rdar://problem/10552550> JavaScriptCore uses obsolete 'cpy' mnemonic in ARM assembly
22925 Reviewed by Gavin Barraclough.
22927 Original patch by Jim Grosbach.
22929 * jit/JITStubs.cpp:
22930 (JSC::ctiTrampoline):
22931 (JSC::ctiVMThrowTrampoline):
22932 Replace uses of the 'cpy' mnemonic with 'mov'.
22934 2011-12-15 Filip Pizlo <fpizlo@apple.com>
22936 Value profiling should distinguished between NaN and non-NaN doubles
22937 https://bugs.webkit.org/show_bug.cgi?id=74682
22939 Reviewed by Gavin Barraclough.
22941 Added PredictDoubleReal and PredictDoubleNaN. PredictDouble is now the union
22944 * bytecode/PredictedType.cpp:
22945 (JSC::predictionToString):
22946 (JSC::predictionFromValue):
22947 * bytecode/PredictedType.h:
22948 (JSC::isDoubleRealPrediction):
22949 (JSC::isDoublePrediction):
22951 2011-12-15 Anders Carlsson <andersca@apple.com>
22953 Regression (r102866): Navigating away from or closing a page with a plugin crashes
22954 https://bugs.webkit.org/show_bug.cgi?id=74655
22955 <rdar://problem/10590024>
22957 Reviewed by Sam Weinig.
22959 Rewrite HasRefAndDeref to work if ref and deref are implemented in base classes,
22960 using a modified version of the technique described here:
22961 http://groups.google.com/group/comp.lang.c++.moderated/msg/e5fbc9305539f699
22963 * wtf/Functional.h:
22965 2011-12-15 Andy Wingo <wingo@igalia.com>
22967 Warnings fixes in Interpreter.cpp and PrivateExecute.cpp
22968 https://bugs.webkit.org/show_bug.cgi?id=74624
22970 Reviewed by Darin Adler.
22972 * interpreter/Interpreter.cpp:
22973 (JSC::Interpreter::privateExecute): Fix variables unused in
22975 * wtf/ParallelJobsGeneric.cpp:
22976 (WTF::ParallelEnvironment::ParallelEnvironment): Fix
22977 signed/unsigned comparison warning, with a cast.
22979 2011-12-15 Andy Wingo <wingo@igalia.com>
22981 Use more macrology in JSC::Options
22982 https://bugs.webkit.org/show_bug.cgi?id=72938
22984 Reviewed by Filip Pizlo.
22986 * runtime/Options.cpp:
22987 (JSC::Options::initializeOptions):
22988 * runtime/Options.h: Use macros to ensure that all heuristics are
22989 declared and have initializers.
22991 2011-12-15 Anders Carlsson <andersca@apple.com>
22993 Add ScrollingCoordinator class and ENABLE_THREADED_SCROLLING define
22994 https://bugs.webkit.org/show_bug.cgi?id=74639
22996 Reviewed by Andreas Kling.
22998 Add ENABLE_THREADED_SCROLLING #define.
23002 2011-12-15 Anders Carlsson <andersca@apple.com>
23004 EventDispatcher should handle wheel events on the connection queue
23005 https://bugs.webkit.org/show_bug.cgi?id=74627
23007 Reviewed by Andreas Kling.
23009 Add a BoundFunctionImpl specialization that takes three parameters.
23011 * wtf/Functional.h:
23016 2011-12-14 Anders Carlsson <andersca@apple.com>
23018 Add WTF::Function to wtf/Forward.h
23019 https://bugs.webkit.org/show_bug.cgi?id=74576
23021 Reviewed by Adam Roben.
23024 Work around a name conflict in the readline library.
23029 2011-12-15 Igor Oliveira <igor.oliveira@openbossa.org>
23031 [Qt] Support requestAnimationFrame API
23032 https://bugs.webkit.org/show_bug.cgi?id=74528
23034 Let Qt port use REQUEST_ANIMATION_FRAME_TIMER.
23036 Reviewed by Kenneth Rohde Christiansen.
23040 2011-12-15 Andy Wingo <wingo@igalia.com>
23042 Minor refactor to Parser::parseTryStatement
23043 https://bugs.webkit.org/show_bug.cgi?id=74507
23045 Reviewed by Geoffrey Garen.
23047 * parser/Parser.cpp (JSC::Parser::parseTryStatement): Use the
23048 Parser's declareVariable instead of going directly to the scope.
23049 This will facilitate future checks related to harmony block
23052 2011-12-15 Andy Wingo <wingo@igalia.com>
23054 Rename JSC::Heuristics to JSC::Options
23055 https://bugs.webkit.org/show_bug.cgi?id=72889
23057 Reviewed by Filip Pizlo.
23059 * runtime/Options.cpp: Renamed from Source/JavaScriptCore/runtime/Heuristics.cpp.
23060 * runtime/Options.h: Renamed from Source/JavaScriptCore/runtime/Heuristics.h.
23063 * GNUmakefile.list.am:
23064 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
23065 * JavaScriptCore.xcodeproj/project.pbxproj:
23067 * bytecode/CodeBlock.cpp:
23068 (JSC::CodeBlock::shouldOptimizeNow):
23069 * bytecode/CodeBlock.h:
23070 (JSC::CodeBlock::likelyToTakeSlowCase):
23071 (JSC::CodeBlock::couldTakeSlowCase):
23072 (JSC::CodeBlock::likelyToTakeSpecialFastCase):
23073 (JSC::CodeBlock::likelyToTakeDeepestSlowCase):
23074 (JSC::CodeBlock::likelyToTakeAnySlowCase):
23075 (JSC::CodeBlock::reoptimizationRetryCounter):
23076 (JSC::CodeBlock::countReoptimization):
23077 (JSC::CodeBlock::counterValueForOptimizeAfterWarmUp):
23078 (JSC::CodeBlock::counterValueForOptimizeAfterLongWarmUp):
23079 (JSC::CodeBlock::optimizeNextInvocation):
23080 (JSC::CodeBlock::dontOptimizeAnytimeSoon):
23081 (JSC::CodeBlock::optimizeSoon):
23082 (JSC::CodeBlock::largeFailCountThreshold):
23083 (JSC::CodeBlock::largeFailCountThresholdForLoop):
23084 (JSC::CodeBlock::shouldReoptimizeNow):
23085 (JSC::CodeBlock::shouldReoptimizeFromLoopNow):
23086 * dfg/DFGByteCodeParser.cpp:
23087 (JSC::DFG::ByteCodeParser::handleInlining):
23088 * dfg/DFGCapabilities.h:
23089 (JSC::DFG::mightCompileEval):
23090 (JSC::DFG::mightCompileProgram):
23091 (JSC::DFG::mightCompileFunctionForCall):
23092 (JSC::DFG::mightCompileFunctionForConstruct):
23093 (JSC::DFG::mightInlineFunctionForCall):
23094 (JSC::DFG::mightInlineFunctionForConstruct):
23095 * dfg/DFGOSRExit.cpp:
23096 (JSC::DFG::OSRExit::considerAddingAsFrequentExitSiteSlow):
23097 * dfg/DFGOSRExitCompiler32_64.cpp:
23098 (JSC::DFG::OSRExitCompiler::compileExit):
23099 * dfg/DFGOSRExitCompiler64.cpp:
23100 (JSC::DFG::OSRExitCompiler::compileExit):
23101 * dfg/DFGVariableAccessData.h:
23102 (JSC::DFG::VariableAccessData::shouldUseDoubleFormatAccordingToVote):
23103 * heap/MarkStack.cpp:
23104 (JSC::MarkStackSegmentAllocator::allocate):
23105 (JSC::MarkStackSegmentAllocator::shrinkReserve):
23106 (JSC::MarkStackArray::MarkStackArray):
23107 (JSC::MarkStackArray::donateSomeCellsTo):
23108 (JSC::MarkStackArray::stealSomeCellsFrom):
23109 (JSC::MarkStackThreadSharedData::MarkStackThreadSharedData):
23110 (JSC::SlotVisitor::donateSlow):
23111 (JSC::SlotVisitor::drain):
23112 (JSC::SlotVisitor::drainFromShared):
23113 * heap/MarkStack.h:
23114 (JSC::MarkStack::mergeOpaqueRootsIfProfitable):
23115 (JSC::MarkStack::addOpaqueRoot):
23116 (JSC::MarkStackArray::canDonateSomeCells):
23117 * heap/SlotVisitor.h:
23118 (JSC::SlotVisitor::donate):
23120 (JSC::JIT::emitOptimizationCheck):
23121 * runtime/InitializeThreading.cpp:
23122 (JSC::initializeThreadingOnce): Adapt callers and build systems.
23125 (CommandLine::CommandLine):
23127 (CommandLine::CommandLine):
23128 Rename from Options, to avoid name conflict.
23130 2011-12-14 Sam Weinig <sam@webkit.org>
23132 Revert unintentional change to JavaScriptCore.def
23134 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
23136 2011-12-14 Sam Weinig <weinig@apple.com>
23138 Remove whitespace from InheritedPropertySheets attributes in
23139 vsprops files to appease the Visual Studio project migrator.
23141 Reviewed by Adam Roben.
23143 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
23144 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreDebug.vsprops:
23145 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreDebugAll.vsprops:
23146 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreDebugCairoCFLite.vsprops:
23147 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebug.vsprops:
23148 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebugAll.vsprops:
23149 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebugCairoCFLite.vsprops:
23150 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedProduction.vsprops:
23151 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedRelease.vsprops:
23152 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedReleaseCairoCFLite.vsprops:
23153 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedReleasePGO.vsprops:
23154 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreProduction.vsprops:
23155 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreRelease.vsprops:
23156 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleaseCairoCFLite.vsprops:
23157 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGO.vsprops:
23158 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGOOptimize.vsprops:
23159 * JavaScriptCore.vcproj/WTF/WTFDebug.vsprops:
23160 * JavaScriptCore.vcproj/WTF/WTFDebugAll.vsprops:
23161 * JavaScriptCore.vcproj/WTF/WTFDebugCairoCFLite.vsprops:
23162 * JavaScriptCore.vcproj/WTF/WTFProduction.vsprops:
23163 * JavaScriptCore.vcproj/WTF/WTFRelease.vsprops:
23164 * JavaScriptCore.vcproj/WTF/WTFReleaseCairoCFLite.vsprops:
23165 * JavaScriptCore.vcproj/WTF/WTFReleasePGO.vsprops:
23166 * JavaScriptCore.vcproj/jsc/jscDebug.vsprops:
23167 * JavaScriptCore.vcproj/jsc/jscDebugAll.vsprops:
23168 * JavaScriptCore.vcproj/jsc/jscDebugCairoCFLite.vsprops:
23169 * JavaScriptCore.vcproj/jsc/jscProduction.vsprops:
23170 * JavaScriptCore.vcproj/jsc/jscRelease.vsprops:
23171 * JavaScriptCore.vcproj/jsc/jscReleaseCairoCFLite.vsprops:
23172 * JavaScriptCore.vcproj/jsc/jscReleasePGO.vsprops:
23173 * JavaScriptCore.vcproj/testRegExp/testRegExpDebug.vsprops:
23174 * JavaScriptCore.vcproj/testRegExp/testRegExpDebugAll.vsprops:
23175 * JavaScriptCore.vcproj/testRegExp/testRegExpDebugCairoCFLite.vsprops:
23176 * JavaScriptCore.vcproj/testRegExp/testRegExpProduction.vsprops:
23177 * JavaScriptCore.vcproj/testRegExp/testRegExpRelease.vsprops:
23178 * JavaScriptCore.vcproj/testRegExp/testRegExpReleaseCairoCFLite.vsprops:
23179 * JavaScriptCore.vcproj/testRegExp/testRegExpReleasePGO.vsprops:
23180 * JavaScriptCore.vcproj/testapi/testapiDebug.vsprops:
23181 * JavaScriptCore.vcproj/testapi/testapiDebugAll.vsprops:
23182 * JavaScriptCore.vcproj/testapi/testapiDebugCairoCFLite.vsprops:
23183 * JavaScriptCore.vcproj/testapi/testapiProduction.vsprops:
23184 * JavaScriptCore.vcproj/testapi/testapiRelease.vsprops:
23185 * JavaScriptCore.vcproj/testapi/testapiReleaseCairoCFLite.vsprops:
23187 2011-12-14 Anders Carlsson <andersca@apple.com>
23189 binding a member function should ref/deref the object pointer if needed
23190 https://bugs.webkit.org/show_bug.cgi?id=74552
23192 Reviewed by Sam Weinig.
23194 Add a HasRefAndDeref helper class template which checks if a given class type has ref and deref
23195 member functions which the right type. Use this to determine if we should ref/deref the first parameter.
23197 * wtf/Functional.h:
23200 (WTF::RefAndDeref::ref):
23201 (WTF::RefAndDeref::deref):
23203 2011-12-14 Hajime Morrita <morrita@chromium.org>
23205 JS_INLINE and WTF_INLINE should be visible from WebCore
23206 https://bugs.webkit.org/show_bug.cgi?id=73191
23208 - Moved Export related macro definitions from config.h to ExportMacros.h and JSExportMacros.h.
23209 - Moved WTF_USE_JSC and WTF_USE_V8 from various config.h family to Platform.h.
23210 - Replaced JS_EXPORTDATA in wtf moudule with newly introduced WTF_EXPORTDATA.
23212 Reviewed by Kevin Ollivier.
23214 * JavaScriptCore.xcodeproj/project.pbxproj:
23216 * runtime/JSExportMacros.h: Added.
23217 * wtf/ExportMacros.h:
23219 * wtf/WTFThreadData.h:
23220 * wtf/text/AtomicString.h:
23221 * wtf/text/StringStatics.cpp:
23223 2011-12-14 Anders Carlsson <andersca@apple.com>
23225 Work around a bug in the MSVC2005 compiler
23226 https://bugs.webkit.org/show_bug.cgi?id=74550
23228 Reviewed by Sam Weinig.
23230 Add template parameters for the return types of the partial specializations of BoundFunctionImpl.
23232 * wtf/Functional.h:
23235 2011-12-13 Jon Lee <jonlee@apple.com>
23237 Enable notifications on Mac.
23239 Reviewed by Sam Weinig.
23241 * Configurations/FeatureDefines.xcconfig:
23243 2011-12-14 David Kilzer <ddkilzer@apple.com>
23245 Remove definition of old ENABLE(YARR) macro
23246 <http://webkit.org/b/74532>
23248 Reviewed by Darin Adler.
23250 * wtf/Platform.h: Removed ENABLE_YARR macros.
23252 2011-12-14 Anders Carlsson <andersca@apple.com>
23254 bind should handle member functions
23255 https://bugs.webkit.org/show_bug.cgi?id=74529
23257 Reviewed by Sam Weinig.
23259 Add FunctionWrapper partial specializations for member function pointers.
23261 * wtf/Functional.h:
23264 2011-12-14 Gavin Barraclough <barraclough@apple.com>
23266 DFG relies on returning a struct in registers
23267 https://bugs.webkit.org/show_bug.cgi?id=74527
23269 Reviewed by Geoff Garen.
23271 This will not work on all platforms. Returning a uint64_t will more reliably achieve
23272 what we want, on 32-bit platforms (on 64-bit, stick with the struct return).
23274 * dfg/DFGOperations.cpp:
23275 * dfg/DFGOperations.h:
23276 (JSC::DFG::DFGHandler::dfgHandlerEncoded):
23278 2011-12-14 Anders Carlsson <andersca@apple.com>
23280 Add unary and binary bind overloads
23281 https://bugs.webkit.org/show_bug.cgi?id=74524
23283 Reviewed by Sam Weinig.
23285 * wtf/Functional.h:
23287 (WTF::FunctionWrapper::ResultType):
23290 2011-12-14 Anders Carlsson <andersca@apple.com>
23292 Add back the callOnMainThread overload that takes a WTF::Function
23293 https://bugs.webkit.org/show_bug.cgi?id=74512
23295 Reviewed by Darin Adler.
23297 Add back the overload; the changes to WebCore should hopefully keep Windows building.
23299 * wtf/MainThread.cpp:
23300 (WTF::callFunctionObject):
23301 (WTF::callOnMainThread):
23302 * wtf/MainThread.h:
23304 2011-12-13 Filip Pizlo <fpizlo@apple.com>
23306 DFG should infer when local variables are doubles
23307 https://bugs.webkit.org/show_bug.cgi?id=74480
23309 Reviewed by Oliver Hunt.
23311 Introduced the notion that a local variable (though not an argument, yet!) can
23312 be stored as a double, and will be guaranteed to always contain a double. This
23313 requires more magic in the OSR (conversion in both entry and exit). The inference
23314 is quite unorthodox: all uses of a variable vote on whether they think it should
23315 be a double or a JSValue, based on how they use it. If they use it in an integer
23316 or boxed value context, they vote JSValue. If they use it in a double context,
23317 they vote double. This voting is interleaved in the propagator's fixpoint, so
23318 that variables voted double then have a double prediction propagated from them.
23319 This interleaving is needed because a variable that actually always contains an
23320 integer that always gets used in arithmetic that involves doubles may end up
23321 being voted double, which then means that all uses of the variable will see a
23322 double rather than an integer.
23324 This is worth 18% to SunSpider/3d-cube, 7% to Kraken/audio-beat-detection, 7%
23325 to Kraken/audio-fft, 6% to Kraken/imaging-darkroom, 20% to
23326 Kraken/imaging-gaussian-blur, and just over 1% to Kraken/json-parse-financial.
23327 It results in a 1% speed-up on SunSpider and a 4% speed-up in Kraken. Similar
23328 results on JSVALUE32_64, though with a bigger win on Kraken (5%) and no overall
23331 * bytecode/ValueRecovery.h:
23332 (JSC::ValueRecovery::alreadyInRegisterFileAsUnboxedDouble):
23333 (JSC::ValueRecovery::dump):
23334 * dfg/DFGAbstractState.cpp:
23335 (JSC::DFG::AbstractState::execute):
23336 * dfg/DFGAssemblyHelpers.h:
23337 (JSC::DFG::AssemblyHelpers::boxDouble):
23338 * dfg/DFGGraph.cpp:
23339 (JSC::DFG::Graph::dump):
23340 * dfg/DFGJITCompiler.h:
23341 (JSC::DFG::JITCompiler::noticeOSREntry):
23342 * dfg/DFGOSREntry.cpp:
23343 (JSC::DFG::prepareOSREntry):
23344 * dfg/DFGOSREntry.h:
23345 * dfg/DFGOSRExitCompiler64.cpp:
23346 (JSC::DFG::OSRExitCompiler::compileExit):
23347 * dfg/DFGPropagator.cpp:
23348 (JSC::DFG::Propagator::vote):
23349 (JSC::DFG::Propagator::doRoundOfDoubleVoting):
23350 (JSC::DFG::Propagator::propagatePredictions):
23351 (JSC::DFG::Propagator::fixupNode):
23352 * dfg/DFGSpeculativeJIT.cpp:
23353 (JSC::DFG::ValueSource::dump):
23354 (JSC::DFG::SpeculativeJIT::compile):
23355 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
23356 * dfg/DFGSpeculativeJIT.h:
23357 * dfg/DFGSpeculativeJIT32_64.cpp:
23358 (JSC::DFG::SpeculativeJIT::compile):
23359 * dfg/DFGSpeculativeJIT64.cpp:
23360 (JSC::DFG::SpeculativeJIT::compile):
23361 * dfg/DFGVariableAccessData.h:
23362 (JSC::DFG::VariableAccessData::VariableAccessData):
23363 (JSC::DFG::VariableAccessData::clearVotes):
23364 (JSC::DFG::VariableAccessData::vote):
23365 (JSC::DFG::VariableAccessData::doubleVoteRatio):
23366 (JSC::DFG::VariableAccessData::shouldUseDoubleFormatAccordingToVote):
23367 (JSC::DFG::VariableAccessData::shouldUseDoubleFormat):
23368 (JSC::DFG::VariableAccessData::tallyVotesForShouldUseDoubleFormat):
23369 * runtime/Arguments.cpp:
23370 (JSC::Arguments::tearOff):
23371 * runtime/Heuristics.cpp:
23372 (JSC::Heuristics::initializeHeuristics):
23373 * runtime/Heuristics.h:
23375 2011-12-13 Anders Carlsson <andersca@apple.com>
23377 Try to fix the Windows build.
23379 Remove the callOnMainThread overload that takes a WTF::Function since it's not being used.
23381 * wtf/MainThread.cpp:
23382 * wtf/MainThread.h:
23384 2011-12-13 Anders Carlsson <andersca@apple.com>
23386 Add a very bare-bones implementation of bind and Function to WTF
23387 https://bugs.webkit.org/show_bug.cgi?id=74462
23389 Reviewed by Sam Weinig.
23391 In order to make it easier to package up function calls and send them across
23392 threads, add a (currently very simple) implementation of WTF::bind and WTF::Function to a new
23393 wtf/Functional.h header.
23395 Currently, all bind can do is bind a nullary function and return a Function object that can be called and copied,
23396 but I'll add more as the need arises.
23398 * GNUmakefile.list.am:
23399 * JavaScriptCore.gypi:
23400 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
23401 * JavaScriptCore.xcodeproj/project.pbxproj:
23402 * wtf/Functional.h: Added.
23404 (WTF::FunctionImplBase::~FunctionImplBase):
23405 (WTF::FunctionWrapper::ResultType):
23406 (WTF::FunctionBase::isNull):
23407 (WTF::FunctionBase::FunctionBase):
23408 (WTF::FunctionBase::impl):
23410 * wtf/MainThread.cpp:
23411 (WTF::callFunctionObject):
23412 (WTF::callOnMainThread):
23413 * wtf/MainThread.h:
23416 2011-12-13 Geoffrey Garen <ggaren@apple.com>
23418 <rdar://problem/10577239> GC Crash introduced in r102545
23420 Reviewed by Gavin Barraclough.
23422 MarkedArgumentBuffer was still marking items in forwards order, even though
23423 the argument order has been reversed.
23425 I fixed this bug, and replaced address calculation code with some helper
23426 functions -- mallocBase() and slotFor() -- so it stays fixed everywhere.
23428 * runtime/ArgList.cpp:
23429 (JSC::MarkedArgumentBuffer::markLists):
23430 (JSC::MarkedArgumentBuffer::slowAppend):
23431 * runtime/ArgList.h:
23432 (JSC::MarkedArgumentBuffer::~MarkedArgumentBuffer):
23433 (JSC::MarkedArgumentBuffer::at):
23434 (JSC::MarkedArgumentBuffer::append):
23435 (JSC::MarkedArgumentBuffer::last):
23436 (JSC::MarkedArgumentBuffer::slotFor):
23437 (JSC::MarkedArgumentBuffer::mallocBase):
23439 2011-12-13 Filip Pizlo <fpizlo@apple.com>
23441 DFG OSR exit for UInt32ToNumber should roll forward, not roll backward
23442 https://bugs.webkit.org/show_bug.cgi?id=74463
23444 Reviewed by Gavin Barraclough.
23446 Implements roll-forward OSR exit for UInt32ToNumber, which requires ValueRecoveries knowing
23447 how to execute the slow path of UInt32ToNumber.
23449 * bytecode/CodeBlock.h:
23450 (JSC::CodeBlock::lastOSRExit):
23451 * bytecode/CodeOrigin.h:
23452 (JSC::CodeOrigin::operator!=):
23453 * bytecode/ValueRecovery.h:
23454 (JSC::ValueRecovery::uint32InGPR):
23455 (JSC::ValueRecovery::gpr):
23456 (JSC::ValueRecovery::dump):
23457 * dfg/DFGAssemblyHelpers.cpp:
23458 * dfg/DFGAssemblyHelpers.h:
23459 * dfg/DFGOSRExit.h:
23460 (JSC::DFG::OSRExit::valueRecoveryForOperand):
23461 * dfg/DFGOSRExitCompiler32_64.cpp:
23462 (JSC::DFG::OSRExitCompiler::compileExit):
23463 * dfg/DFGOSRExitCompiler64.cpp:
23464 (JSC::DFG::OSRExitCompiler::compileExit):
23465 * dfg/DFGSpeculativeJIT.cpp:
23466 (JSC::DFG::SpeculativeJIT::compileUInt32ToNumber):
23467 (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
23468 * dfg/DFGSpeculativeJIT.h:
23469 * dfg/DFGSpeculativeJIT32_64.cpp:
23470 (JSC::DFG::SpeculativeJIT::nonSpeculativeUInt32ToNumber):
23471 (JSC::DFG::SpeculativeJIT::compile):
23472 * dfg/DFGSpeculativeJIT64.cpp:
23473 (JSC::DFG::SpeculativeJIT::nonSpeculativeUInt32ToNumber):
23474 (JSC::DFG::SpeculativeJIT::compile):
23476 2011-12-13 Oliver Hunt <oliver@apple.com>
23478 Arguments object doesn't handle mutation of length property correctly
23479 https://bugs.webkit.org/show_bug.cgi?id=74454
23481 Reviewed by Gavin Barraclough.
23483 Correct handling of arguments objects with overridden length property
23485 * interpreter/Interpreter.cpp:
23486 (JSC::loadVarargs):
23487 * runtime/Arguments.cpp:
23488 (JSC::Arguments::copyToArguments):
23489 (JSC::Arguments::fillArgList):
23491 2011-12-13 Filip Pizlo <fpizlo@apple.com>
23493 DFG GetByVal CSE rule should match PutByValAlias
23494 https://bugs.webkit.org/show_bug.cgi?id=74390
23496 Reviewed by Geoff Garen.
23498 Tiny win on some benchmarks. Maybe a 0.2% win on SunSpider.
23500 * dfg/DFGPropagator.cpp:
23501 (JSC::DFG::Propagator::getByValLoadElimination):
23503 2011-12-13 Andy Wingo <wingo@igalia.com>
23505 Fix interpreter debug build.
23506 https://bugs.webkit.org/show_bug.cgi?id=74439
23508 Reviewed by Geoffrey Garen.
23510 * bytecode/ValueRecovery.h: Include stdio.h on debug builds.
23512 2011-12-13 Filip Pizlo <fpizlo@apple.com>
23514 DFG should know exactly why recompilation was triggered
23515 https://bugs.webkit.org/show_bug.cgi?id=74362
23517 Reviewed by Oliver Hunt.
23519 Each OSR exit is now individually counted, as well as counting the total number
23520 of OSR exits that occurred in a code block. If recompilation is triggered, we
23521 check to see if there are OSR exit sites that make up a sufficiently large
23522 portion of the total OSR exits that occurred. For any such OSR exit sites, we
23523 add a description of the site (bytecode index, kind) to a data structure in the
23524 corresponding baseline CodeBlock. Then, when we recompile the code, we immediately
23525 know which speculations would be unwise based on the fact that previous such
23526 speculations proved to be fruitless.
23528 This means 2% win on two of the SunSpider string tests, a 4% win on V8's deltablue,
23529 and 5% on Kraken's imaging-darkroom. It is only a minor win in the averages, less
23533 * GNUmakefile.list.am:
23534 * JavaScriptCore.xcodeproj/project.pbxproj:
23536 * bytecode/CodeBlock.cpp:
23537 (JSC::CodeBlock::tallyFrequentExitSites):
23538 * bytecode/CodeBlock.h:
23539 (JSC::CodeBlock::addFrequentExitSite):
23540 (JSC::CodeBlock::exitProfile):
23541 (JSC::CodeBlock::reoptimize):
23542 (JSC::CodeBlock::tallyFrequentExitSites):
23543 * bytecode/DFGExitProfile.cpp: Added.
23544 (JSC::DFG::ExitProfile::ExitProfile):
23545 (JSC::DFG::ExitProfile::~ExitProfile):
23546 (JSC::DFG::ExitProfile::add):
23547 (JSC::DFG::QueryableExitProfile::QueryableExitProfile):
23548 (JSC::DFG::QueryableExitProfile::~QueryableExitProfile):
23549 * bytecode/DFGExitProfile.h: Added.
23550 (JSC::DFG::exitKindToString):
23551 (JSC::DFG::exitKindIsCountable):
23552 (JSC::DFG::FrequentExitSite::FrequentExitSite):
23553 (JSC::DFG::FrequentExitSite::operator!):
23554 (JSC::DFG::FrequentExitSite::operator==):
23555 (JSC::DFG::FrequentExitSite::hash):
23556 (JSC::DFG::FrequentExitSite::bytecodeOffset):
23557 (JSC::DFG::FrequentExitSite::kind):
23558 (JSC::DFG::FrequentExitSite::isHashTableDeletedValue):
23559 (JSC::DFG::FrequentExitSiteHash::hash):
23560 (JSC::DFG::FrequentExitSiteHash::equal):
23561 (JSC::DFG::QueryableExitProfile::hasExitSite):
23562 * dfg/DFGAssemblyHelpers.h:
23563 (JSC::DFG::AssemblyHelpers::baselineCodeBlockForOriginAndBaselineCodeBlock):
23564 (JSC::DFG::AssemblyHelpers::baselineCodeBlockFor):
23565 * dfg/DFGByteCodeParser.cpp:
23566 (JSC::DFG::ByteCodeParser::makeSafe):
23567 (JSC::DFG::ByteCodeParser::makeDivSafe):
23568 (JSC::DFG::ByteCodeParser::handleCall):
23569 (JSC::DFG::ByteCodeParser::handleIntrinsic):
23570 (JSC::DFG::ByteCodeParser::parseBlock):
23571 (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
23572 * dfg/DFGOSRExit.cpp:
23573 (JSC::DFG::OSRExit::OSRExit):
23574 (JSC::DFG::OSRExit::considerAddingAsFrequentExitSiteSlow):
23575 * dfg/DFGOSRExit.h:
23576 (JSC::DFG::OSRExit::considerAddingAsFrequentExitSite):
23577 * dfg/DFGOSRExitCompiler.cpp:
23578 * dfg/DFGOSRExitCompiler32_64.cpp:
23579 (JSC::DFG::OSRExitCompiler::compileExit):
23580 * dfg/DFGOSRExitCompiler64.cpp:
23581 (JSC::DFG::OSRExitCompiler::compileExit):
23582 * dfg/DFGSpeculativeJIT.cpp:
23583 (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
23584 (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
23585 (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt):
23586 (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
23587 (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
23588 (JSC::DFG::SpeculativeJIT::compileGetByValOnByteArray):
23589 (JSC::DFG::SpeculativeJIT::compileGetTypedArrayLength):
23590 (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
23591 (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
23592 (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
23593 (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
23594 (JSC::DFG::SpeculativeJIT::compileInstanceOfForObject):
23595 (JSC::DFG::SpeculativeJIT::compileSoftModulo):
23596 (JSC::DFG::SpeculativeJIT::compileArithMul):
23597 (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
23598 * dfg/DFGSpeculativeJIT.h:
23599 (JSC::DFG::SpeculativeJIT::speculationCheck):
23600 (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
23601 * dfg/DFGSpeculativeJIT32_64.cpp:
23602 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
23603 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
23604 (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
23605 (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
23606 (JSC::DFG::SpeculativeJIT::compileObjectEquality):
23607 (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
23608 (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
23609 (JSC::DFG::SpeculativeJIT::compile):
23610 * dfg/DFGSpeculativeJIT64.cpp:
23611 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
23612 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
23613 (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
23614 (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
23615 (JSC::DFG::SpeculativeJIT::compileObjectEquality):
23616 (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
23617 (JSC::DFG::SpeculativeJIT::compileLogicalNot):
23618 (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
23619 (JSC::DFG::SpeculativeJIT::emitBranch):
23620 (JSC::DFG::SpeculativeJIT::compile):
23621 * runtime/Heuristics.cpp:
23622 (JSC::Heuristics::initializeHeuristics):
23623 * runtime/Heuristics.h:
23625 2011-12-13 Michael Saboff <msaboff@apple.com>
23627 Cleanup of StringImpl::equal in r102631 post commit
23628 https://bugs.webkit.org/show_bug.cgi?id=74421
23630 Reviewed by Darin Adler.
23632 * wtf/text/AtomicString.h:
23633 (WTF::operator==): Removed cast no longer needed.
23634 * wtf/text/StringImpl.h:
23635 (WTF::equal): Changed template to several overloaded methods.
23637 2011-12-12 Michael Saboff <msaboff@apple.com>
23639 Eliminate Duplicate word at a time equal code in StringImpl.cpp and StringHash.h
23640 https://bugs.webkit.org/show_bug.cgi?id=73622
23642 Reviewed by Oliver Hunt.
23644 Moved equal(charType1 *, charType2, unsigned) template methods
23645 from static StringImpl.cpp to StringImpl.h and then replaced the
23646 processor specific character comparison code in StringHash::equal
23647 with calls to these methods.
23649 This change is worth 3% on SunSpider string-unpack-code as reported
23650 by the SunSpider command line harness. No other tests appear to
23651 have measurable performance changes.
23653 * wtf/text/AtomicString.h:
23655 * wtf/text/StringHash.h:
23656 (WTF::StringHash::equal):
23657 * wtf/text/StringImpl.cpp:
23658 * wtf/text/StringImpl.h:
23663 2011-12-12 Filip Pizlo <fpizlo@apple.com>
23665 ARMv7 version of DFG soft modulo does register allocation inside of control flow
23666 https://bugs.webkit.org/show_bug.cgi?id=74354
23668 Reviewed by Gavin Barraclough.
23670 * dfg/DFGSpeculativeJIT.cpp:
23671 (JSC::DFG::SpeculativeJIT::compileSoftModulo):
23673 2011-12-12 Andy Wingo <wingo@igalia.com>
23675 Simplify autotools configure.ac
23676 https://bugs.webkit.org/show_bug.cgi?id=74312
23678 Reviewed by Martin Robinson.
23680 * GNUmakefile.am: Add JSC_CPPFLAGS to javascriptcore_cppflags.
23682 2011-12-12 Filip Pizlo <fpizlo@apple.com>
23684 DFG GetByVal CSE incorrectly assumes that a non-matching PutByVal cannot clobber
23685 https://bugs.webkit.org/show_bug.cgi?id=74329
23687 Reviewed by Gavin Barraclough.
23689 * dfg/DFGPropagator.cpp:
23690 (JSC::DFG::Propagator::getByValLoadElimination):
23692 2011-12-09 Alexander Pavlov <apavlov@chromium.org>
23694 WebKit does not enumerate over CSS properties in HTMLElement.style
23695 https://bugs.webkit.org/show_bug.cgi?id=23946
23697 Reviewed by Darin Adler.
23699 Add a few exports to follow the JSCSSStyleDeclaration.cpp changes,
23700 introduce an std::sort() comparator function.
23702 * JavaScriptCore.exp:
23703 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
23704 * wtf/text/WTFString.h:
23705 (WTF::codePointCompareLessThan): Used by std::sort() to sort properties.
23707 2011-12-12 Alexander Pavlov <apavlov@chromium.org>
23709 Unreviewed, build fix.
23711 Revert r102570 which broke SnowLeopard builders.
23713 * JavaScriptCore.exp:
23714 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
23715 * wtf/text/WTFString.h:
23717 2011-12-09 Alexander Pavlov <apavlov@chromium.org>
23719 WebKit does not enumerate over CSS properties in HTMLElement.style
23720 https://bugs.webkit.org/show_bug.cgi?id=23946
23722 Reviewed by Darin Adler.
23724 Add a few exports to follow the JSCSSStyleDeclaration.cpp changes,
23725 introduce an std::sort() comparator function.
23727 * JavaScriptCore.exp:
23728 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
23729 * wtf/text/WTFString.h:
23730 (WTF::codePointCompareLessThan): Used by std::sort() to sort properties.
23732 2011-12-12 Carlos Garcia Campos <cgarcia@igalia.com>
23734 Unreviewed. Fix make distcheck issues.
23736 * GNUmakefile.list.am:
23738 2011-12-11 Sam Weinig <sam@webkit.org>
23740 Fix another signed vs. unsigned warning
23742 * runtime/ArgList.h:
23743 (JSC::MarkedArgumentBuffer::~MarkedArgumentBuffer):
23745 2011-12-11 Sam Weinig <sam@webkit.org>
23747 Fix a signed vs. unsigned warning.
23749 * runtime/ArgList.cpp:
23750 (JSC::MarkedArgumentBuffer::slowAppend):
23751 Cast inlineCapacity to an int to appease the warning. This is known OK
23752 since inlineCapacity is defined to be 8.
23754 2011-12-11 Geoffrey Garen <ggaren@apple.com>
23756 Rolled out *another* debugging change I committed accidentally.
23760 * Configurations/Base.xcconfig:
23762 2011-12-11 Geoffrey Garen <ggaren@apple.com>
23764 Rolled out a debug counter I committed accidentally.
23768 * jit/JITStubs.cpp:
23769 (JSC::arityCheckFor):
23771 2011-12-10 Geoffrey Garen <ggaren@apple.com>
23773 v8 benchmark takes 12-13 million function call slow paths due to extra arguments
23774 https://bugs.webkit.org/show_bug.cgi?id=74244
23776 Reviewed by Filip Pizlo.
23778 .arguments function of order the Reversed
23780 10% speedup on v8-raytrace, 1.7% speedup on v8 overall, neutral on Kraken
23783 * bytecode/CodeBlock.h:
23784 (JSC::CodeBlock::valueProfileForArgument): Clarified that the interface
23785 to this function is an argument number.
23787 * bytecompiler/BytecodeGenerator.cpp:
23788 (JSC::BytecodeGenerator::BytecodeGenerator):
23789 (JSC::BytecodeGenerator::emitCall):
23790 (JSC::BytecodeGenerator::emitConstruct):
23791 (JSC::BytecodeGenerator::isArgumentNumber): Switched to using CallFrame
23792 helper functions for computing offsets for arguments, rather than doing
23795 Switched to iterating argument offsets backwards (--) instead of forwards (++).
23797 * bytecompiler/BytecodeGenerator.h:
23798 (JSC::CallArguments::thisRegister):
23799 (JSC::CallArguments::argumentRegister):
23800 (JSC::CallArguments::registerOffset): Updated for arguments being reversed.
23802 * bytecompiler/NodesCodegen.cpp: Allocate arguments in reverse order.
23804 * dfg/DFGByteCodeParser.cpp:
23805 (JSC::DFG::ByteCodeParser::getArgument):
23806 (JSC::DFG::ByteCodeParser::setArgument):
23807 (JSC::DFG::ByteCodeParser::flush):
23808 (JSC::DFG::ByteCodeParser::addCall):
23809 (JSC::DFG::ByteCodeParser::handleCall):
23810 (JSC::DFG::ByteCodeParser::handleInlining):
23811 (JSC::DFG::ByteCodeParser::handleMinMax):
23812 (JSC::DFG::ByteCodeParser::handleIntrinsic):
23813 (JSC::DFG::ByteCodeParser::parseBlock):
23814 (JSC::DFG::ByteCodeParser::processPhiStack): Use abstract argument indices
23815 that just-in-time convert to bytecode operands (i.e., indexes in the register
23816 file) through helper functions. This means only one piece of code needs
23817 to know how arguments are laid out in the register file.
23819 * dfg/DFGGraph.cpp:
23820 (JSC::DFG::Graph::dump): Ditto.
23823 (JSC::DFG::Graph::valueProfileFor): Ditto.
23825 * dfg/DFGJITCompiler.cpp:
23826 (JSC::DFG::JITCompiler::compileFunction): The whole point of this patch:
23827 Treat too many arguments as an arity match.
23829 * dfg/DFGOSRExit.h:
23830 (JSC::DFG::OSRExit::variableForIndex):
23831 (JSC::DFG::OSRExit::operandForIndex): Use helper functions, as above.
23833 * dfg/DFGOperands.h:
23834 (JSC::DFG::operandToArgument):
23835 (JSC::DFG::argumentToOperand): These are now the only two lines of code in
23836 the DFG compiler that know how arguments are laid out in memory.
23838 (JSC::DFG::Operands::operand):
23839 (JSC::DFG::Operands::setOperand): Use helper functions, as above.
23841 * dfg/DFGOperations.cpp: The whole point of this patch:
23842 Treat too many arguments as an arity match.
23844 * dfg/DFGSpeculativeJIT32_64.cpp:
23845 (JSC::DFG::SpeculativeJIT::emitCall): Use helper functions, as above.
23847 Also, don't tag the caller frame slot as a cell, because it's not a cell.
23849 * dfg/DFGSpeculativeJIT64.cpp:
23850 (JSC::DFG::SpeculativeJIT::emitCall): Use helper functions, as above.
23852 * dfg/DFGSpeculativeJIT.cpp:
23853 (JSC::DFG::SpeculativeJIT::compile): Use helper functions, as above.
23855 (JSC::DFG::SpeculativeJIT::checkArgumentTypes): Use already-computed
23856 argument virtual register instead of recomputing by hand.
23858 * dfg/DFGSpeculativeJIT.h:
23859 (JSC::DFG::SpeculativeJIT::callFrameSlot):
23860 (JSC::DFG::SpeculativeJIT::argumentSlot):
23861 (JSC::DFG::SpeculativeJIT::callFrameTagSlot):
23862 (JSC::DFG::SpeculativeJIT::callFramePayloadSlot):
23863 (JSC::DFG::SpeculativeJIT::argumentTagSlot):
23864 (JSC::DFG::SpeculativeJIT::argumentPayloadSlot): Added a few helper
23865 functions for dealing with callee arguments specifically. These still
23866 build on top of our other helper functions, and have no direct knowledge
23867 of how arguments are laid out in the register file.
23869 (JSC::DFG::SpeculativeJIT::resetCallArguments):
23870 (JSC::DFG::SpeculativeJIT::addCallArgument): Renamed argumentIndex to
23871 argumentOffset to match CallFrame naming.
23873 (JSC::DFG::SpeculativeJIT::valueSourceReferenceForOperand): Use helper
23874 functions, as above.
23876 * interpreter/CallFrame.h:
23877 (JSC::ExecState::argumentOffset):
23878 (JSC::ExecState::argumentOffsetIncludingThis):
23879 (JSC::ExecState::argument):
23880 (JSC::ExecState::setArgument):
23881 (JSC::ExecState::thisArgumentOffset):
23882 (JSC::ExecState::thisValue):
23883 (JSC::ExecState::setThisValue):
23884 (JSC::ExecState::offsetFor):
23885 (JSC::ExecState::hostThisRegister):
23886 (JSC::ExecState::hostThisValue): Added a bunch of helper functions for
23887 computing where an argument is in the register file. Anything in the
23888 runtime that needs to access arguments should use these helpers.
23890 * interpreter/CallFrameClosure.h:
23891 (JSC::CallFrameClosure::setThis):
23892 (JSC::CallFrameClosure::setArgument):
23893 (JSC::CallFrameClosure::resetCallFrame): This stuff is a lot simpler, now
23894 that too many arguments counts as an arity match and doesn't require
23895 preserving two copies of our arguments.
23897 * interpreter/Interpreter.cpp:
23898 (JSC::Interpreter::slideRegisterWindowForCall): Only need to do something
23899 special if the caller provided too few arguments.
23901 Key simplification: We never need to maintain two copies of our arguments
23905 (JSC::loadVarargs): Use helper functions.
23907 (JSC::Interpreter::unwindCallFrame): Updated for new interface.
23909 (JSC::Interpreter::execute):
23910 (JSC::Interpreter::executeCall):
23911 (JSC::Interpreter::executeConstruct):
23912 (JSC::Interpreter::prepareForRepeatCall): Seriously, though: use helper
23915 (JSC::Interpreter::privateExecute): No need to check for stack overflow
23916 when calling host functions because they have zero callee registers.
23918 (JSC::Interpreter::retrieveArguments): Explicitly tear off the arguments
23919 object, since there's no special constructor for this anymore.
23921 * interpreter/Interpreter.h: Reduced the C++ re-entry depth because some
23922 workers tests were hitting stack overflow in some of my testing. We should
23923 make this test more exact in future.
23925 * interpreter/RegisterFile.h: Death to all runtime knowledge of argument
23926 location that does not belong to the CallFrame class!
23929 (JSC::JIT::privateCompile): I am a broken record and I use helper functions.
23931 Also, the whole point of this patch: Treat too many arguments as an arity match.
23933 * jit/JITCall32_64.cpp:
23934 (JSC::JIT::compileLoadVarargs):
23936 (JSC::JIT::compileLoadVarargs): Updated the argument copying math to use
23937 helper functions, for backwards-correctness. Removed the condition
23938 pertaining to declared argument count because, now that arguments are
23939 always in just one place, this optimization is valid for all functions.
23940 Standardized the if predicate for each line of the optimization. This might
23941 fix a bug, but I couldn't get the bug to crash in practice.
23943 * jit/JITOpcodes32_64.cpp:
23944 (JSC::JIT::emit_op_create_arguments):
23945 (JSC::JIT::emit_op_get_argument_by_val):
23946 (JSC::JIT::emitSlow_op_get_argument_by_val):
23947 * jit/JITOpcodes.cpp:
23948 (JSC::JIT::emit_op_create_arguments):
23949 (JSC::JIT::emit_op_get_argument_by_val):
23950 (JSC::JIT::emitSlow_op_get_argument_by_val): Removed cti_op_create_arguments_no_params
23951 optimization because it's no longer an optimization, now that arguments
23952 are always contiguous in a known location.
23954 Updated argument access opcode math for backwards-correctness.
23956 * jit/JITStubs.cpp:
23957 (JSC::arityCheckFor): Updated just like slideRegisterWindowForCall. This
23958 function is slightly different because it copies the call frame in
23959 addition to the arguments. (In the Interpreter, the call frame is not
23960 set up by this point.)
23962 (JSC::lazyLinkFor): The whole point of this patch: Treat too many
23963 arguments as an arity match.
23965 (JSC::DEFINE_STUB_FUNCTION): Updated for new iterface to tearOff().
23968 * jit/SpecializedThunkJIT.h:
23969 (JSC::SpecializedThunkJIT::loadDoubleArgument):
23970 (JSC::SpecializedThunkJIT::loadCellArgument):
23971 (JSC::SpecializedThunkJIT::loadInt32Argument): Use helper functions! They
23972 build strong bones and teeth!
23974 * runtime/ArgList.cpp:
23975 (JSC::ArgList::getSlice):
23976 (JSC::MarkedArgumentBuffer::slowAppend):
23977 * runtime/ArgList.h:
23978 (JSC::MarkedArgumentBuffer::MarkedArgumentBuffer):
23979 (JSC::MarkedArgumentBuffer::~MarkedArgumentBuffer):
23980 (JSC::MarkedArgumentBuffer::at):
23981 (JSC::MarkedArgumentBuffer::clear):
23982 (JSC::MarkedArgumentBuffer::append):
23983 (JSC::MarkedArgumentBuffer::removeLast):
23984 (JSC::MarkedArgumentBuffer::last):
23985 (JSC::ArgList::ArgList):
23986 (JSC::ArgList::at): Updated for backwards-correctness. WTF::Vector doesn't
23987 play nice with backwards-ness, so I changed to using manual allocation.
23989 Fixed a FIXME about not all values being marked in the case of out-of-line
23990 arguments. I had to rewrite the loop anyway, and I didn't feel like
23991 maintaining fidelity to its old bugs.
23993 * runtime/Arguments.cpp:
23994 (JSC::Arguments::visitChildren):
23995 (JSC::Arguments::copyToArguments):
23996 (JSC::Arguments::fillArgList):
23997 (JSC::Arguments::getOwnPropertySlotByIndex):
23998 (JSC::Arguments::getOwnPropertySlot):
23999 (JSC::Arguments::getOwnPropertyDescriptor):
24000 (JSC::Arguments::putByIndex):
24001 (JSC::Arguments::put):
24002 (JSC::Arguments::tearOff):
24003 * runtime/Arguments.h:
24004 (JSC::Arguments::create):
24005 (JSC::Arguments::Arguments):
24006 (JSC::Arguments::argument):
24007 (JSC::Arguments::finishCreation): Secondary benefit of this patch: deleted
24008 lots of tricky code designed to maintain two different copies of function
24009 arguments. Now that arguments are always contiguous in one place in memory,
24010 this complexity can go away.
24012 Reduced down to one create function for the Arguments class, from three.
24014 Moved tearOff() into an out-of-line function because it's huge.
24016 Moved logic about whether to tear off eagerly into the Arguments class,
24017 so we didn't have to duplicate it elsewhere.
24019 * runtime/JSActivation.cpp:
24020 (JSC::JSActivation::JSActivation):
24021 (JSC::JSActivation::visitChildren): Renamed m_numParametersMinusThis to
24022 m_numCapturedArgs because if the value really were m_numParametersMinusThis
24023 we would be marking too much. (We shouldn't mark 'this' because it can't
24024 be captured.) Also, use helper functions.
24026 * runtime/JSActivation.h:
24027 (JSC::JSActivation::tearOff): Use helper functions.
24029 * runtime/JSArray.cpp:
24030 (JSC::JSArray::copyToArguments):
24031 * runtime/JSArray.h: Use helper functions, as above.
24033 2011-12-10 Mark Hahnenberg <mhahnenberg@apple.com>
24035 JSC testapi is crashing on Windows
24036 https://bugs.webkit.org/show_bug.cgi?id=74233
24038 Reviewed by Sam Weinig.
24040 Same error we've encountered before where we are calling the wrong version of
24041 visitChildren and objects that are still reachable aren't getting marked.
24042 This problem will go away soon with the removal of vptrs for these sorts of
24043 optimizations in favor of using the ClassInfo, but for now we can simply give
24044 JSFinalObject a bogus virtual method that Visual Studio can't optimize away to
24045 ensure that JSFinalObject will always have a unique vptr. We don't have to worry
24046 about JSString or JSArray right now, which are the other two special cases for
24047 visitChildren, since they already have their own virtual functions.
24049 * JavaScriptCore.exp:
24050 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
24051 * runtime/JSObject.cpp:
24052 (JSC::JSFinalObject::vtableAnchor):
24053 * runtime/JSObject.h:
24055 2011-12-10 Alexis Menard <alexis.menard@openbossa.org>
24057 Unused variable in YarrJIT.cpp.
24058 https://bugs.webkit.org/show_bug.cgi?id=74237
24060 Reviewed by Andreas Kling.
24062 Variable is set but not used so we can remove it.
24064 * yarr/YarrJIT.cpp:
24065 (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
24067 2011-12-09 Filip Pizlo <fpizlo@apple.com>
24069 DFG ArithMul power-of-two case does not check for overflow
24070 https://bugs.webkit.org/show_bug.cgi?id=74230
24072 Reviewed by Gavin Barraclough.
24074 Disabled power-of-2 peephole optimization for multiplication, because it was wrong,
24075 and any attempt to fix it would likely introduce code bloat and register pressure.
24077 * dfg/DFGSpeculativeJIT.cpp:
24078 (JSC::DFG::SpeculativeJIT::compileArithMul):
24080 2011-12-09 David Levin <levin@chromium.org>
24082 REGRESSION(r101863-r102042): Assertion hit: m_verifier.isSafeToUse() in RefCountedBase::ref in FunctionCodeBlock
24083 https://bugs.webkit.org/show_bug.cgi?id=73886
24085 Reviewed by Darin Adler.
24087 * runtime/SymbolTable.h:
24088 (JSC::SharedSymbolTable::SharedSymbolTable): Added deprecatedTurnOffVerifier for
24089 another JavaScriptObject, since JavaScriptCore objects allow use on multiple threads.
24090 Bug 58091 is about changing these deprecated calls to something else but that something
24091 else will still need to be in all of these places.
24093 2011-12-09 Konrad Piascik <kpiascik@rim.com>
24095 Remove unnecessary file DissasemblerARM.cpp from build system
24096 https://bugs.webkit.org/show_bug.cgi?id=74184
24098 Reviewed by Daniel Bates.
24100 * PlatformBlackBerry.cmake:
24102 2011-12-09 Filip Pizlo <fpizlo@apple.com>
24104 DFG's interpretation of rare case profiles should be frequency-based not count-based
24105 https://bugs.webkit.org/show_bug.cgi?id=74170
24107 Reviewed by Geoff Garen.
24109 DFG optimizes for rare cases only when the rare case counter is above some threshold
24110 and it also constitutes a large enough fraction of total function executions. Also
24111 added some minor debug logic.
24113 * bytecode/CodeBlock.cpp:
24114 (JSC::CodeBlock::CodeBlock):
24115 * bytecode/CodeBlock.h:
24116 (JSC::CodeBlock::likelyToTakeSlowCase):
24117 (JSC::CodeBlock::couldTakeSlowCase):
24118 (JSC::CodeBlock::likelyToTakeSpecialFastCase):
24119 (JSC::CodeBlock::likelyToTakeDeepestSlowCase):
24120 (JSC::CodeBlock::likelyToTakeAnySlowCase):
24121 (JSC::CodeBlock::executionEntryCount):
24122 * dfg/DFGByteCodeParser.cpp:
24123 (JSC::DFG::ByteCodeParser::makeSafe):
24124 (JSC::DFG::ByteCodeParser::makeDivSafe):
24125 (JSC::DFG::ByteCodeParser::handleCall):
24126 (JSC::DFG::ByteCodeParser::parseBlock):
24127 * dfg/DFGDriver.cpp:
24128 (JSC::DFG::compile):
24130 (JSC::JIT::privateCompile):
24131 * runtime/Heuristics.cpp:
24132 (JSC::Heuristics::initializeHeuristics):
24133 * runtime/Heuristics.h:
24135 2011-12-09 Oliver Hunt <oliver@apple.com>
24137 PutByValAlias unnecessarily clobbers GetIndexedPropertyStorage
24138 https://bugs.webkit.org/show_bug.cgi?id=74223
24140 Reviewed by Geoffrey Garen.
24142 Don't clobber GetIndexedPropertyStorage when we see PutByValAlias
24144 * dfg/DFGPropagator.cpp:
24145 (JSC::DFG::Propagator::getIndexedPropertyStorageLoadElimination):
24147 2011-12-09 David Levin <levin@chromium.org>
24149 Hash* iterators should allow comparison between const and const versions.
24150 https://bugs.webkit.org/show_bug.cgi?id=73370
24152 Reviewed by Darin Adler.
24154 * wtf/HashTable.h: Add the operators needed to do this.
24155 (WTF::HashTableConstIterator::operator==):
24156 (WTF::HashTableConstIterator::operator!=):
24157 (WTF::HashTableIterator::operator==):
24158 (WTF::HashTableIterator::operator!=):
24162 2011-12-09 Michael Saboff <msaboff@apple.com>
24164 YARR: Multi-character read optimization for 8bit strings
24165 https://bugs.webkit.org/show_bug.cgi?id=74191
24167 Reviewed by Oliver Hunt.
24169 Changed generatePatternCharacterOnce to generate
24170 code for 1 to 4 characters in the 8 bit case.
24171 This is worth 29% improvement on SunSpider regexp-dna test.
24172 It provides no benefit to v8-regexp.
24174 * yarr/YarrJIT.cpp:
24175 (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
24176 (JSC::Yarr::YarrGenerator::generate): Spelling fix in comment.
24178 2011-12-09 David Levin <levin@chromium.org>
24180 Regression(r53595): Sync xhr requests in workers aren't terminated on worker close.
24181 https://bugs.webkit.org/show_bug.cgi?id=71695
24183 Reviewed by Zoltan Herczeg.
24185 * wtf/MessageQueue.h:
24186 (WTF::MessageQueue::tryGetMessageIgnoringKilled): Added a way to get messages
24187 even after the queue has been killed. This is useful when one wants to
24188 kill a queue but then go through it to run clean up tasks from it.
24190 2011-12-09 Adrienne Walker <enne@google.com>
24192 Fix HashMap<..., OwnPtr<...> >::add compilation errors
24193 https://bugs.webkit.org/show_bug.cgi?id=74159
24195 Reviewed by Darin Adler.
24197 Add a constructor to OwnPtr that takes the empty value (nullptr_t)
24198 from HashTraits so that this function can compile.
24201 (WTF::OwnPtr::OwnPtr):
24203 2011-12-09 Oliver Hunt <oliver@apple.com>
24205 Avoid reloading storage pointer for indexed properties unnecessarily
24206 https://bugs.webkit.org/show_bug.cgi?id=74136
24208 Reviewed by Filip Pizlo.
24210 Add a node to represent loading property storage for indexed properties.
24211 This allows us to reduce code generated for sequential access of arrays,
24212 strings, etc. This results in up to 5% improvement in code that is
24213 very heavy on indexed reads, such as matrix operations in typed arrays
24214 and 20% faster on microbenchmarks.
24216 Currently this is only supported by GetByVal and other similar indexed reads.
24218 * bytecode/PredictedType.h:
24219 (JSC::isFixedIndexedStorageObjectPrediction):
24220 * dfg/DFGAbstractState.cpp:
24221 (JSC::DFG::AbstractState::execute):
24222 * dfg/DFGByteCodeParser.cpp:
24223 (JSC::DFG::ByteCodeParser::handleIntrinsic):
24224 (JSC::DFG::ByteCodeParser::parseBlock):
24226 * dfg/DFGPropagator.cpp:
24227 (JSC::DFG::Propagator::propagateNodePredictions):
24228 (JSC::DFG::Propagator::fixupNode):
24229 (JSC::DFG::Propagator::getIndexedPropertyStorageLoadElimination):
24230 (JSC::DFG::Propagator::performNodeCSE):
24231 * dfg/DFGSpeculativeJIT.cpp:
24232 (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt):
24233 (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
24234 (JSC::DFG::SpeculativeJIT::compileGetByValOnByteArray):
24235 (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
24236 (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
24237 (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
24238 * dfg/DFGSpeculativeJIT.h:
24239 * dfg/DFGSpeculativeJIT32_64.cpp:
24240 (JSC::DFG::SpeculativeJIT::compile):
24241 * dfg/DFGSpeculativeJIT64.cpp:
24242 (JSC::DFG::SpeculativeJIT::compile):
24244 2011-12-08 Fady Samuel <fsamuel@chromium.org>
24246 [Chromium] Enable viewport metatag
24247 https://bugs.webkit.org/show_bug.cgi?id=73495
24249 Reviewed by Darin Fisher.
24251 * wtf/Platform.h: Added ENABLE(VIEWPORT) tag.
24253 2011-12-08 Adam Klein <adamk@chromium.org>
24255 Use HashMap<Node*, OwnPtr<...>> in ChildListMutationScope
24256 https://bugs.webkit.org/show_bug.cgi?id=73964
24258 Reviewed by Darin Adler.
24260 * wtf/HashTraits.h: Add passOut(std::nullptr_t) to allow callers to use HashMap::take on a HashMap of OwnPtrs.
24262 2011-12-08 Thouraya ANDOLSI <thouraya.andolsi@st.com>
24264 https://bugs.webkit.org/show_bug.cgi?id=74005
24265 fix unaligned access memory in generatePatternCharacterOnce function
24268 Reviewed by Gavin Barraclough.
24270 * assembler/MacroAssemblerARM.h:
24271 (JSC::MacroAssemblerARM::load16Unaligned):
24272 * assembler/MacroAssemblerARMv7.h:
24273 (JSC::MacroAssemblerARMv7::load16Unaligned):
24274 * assembler/MacroAssemblerMIPS.h:
24275 (JSC::MacroAssemblerMIPS::load16Unaligned):
24276 * assembler/MacroAssemblerSH4.h:
24277 (JSC::MacroAssemblerSH4::lshift32):
24278 (JSC::MacroAssemblerSH4::load8):
24279 (JSC::MacroAssemblerSH4::load16):
24280 (JSC::MacroAssemblerSH4::load16Unaligned):
24281 (JSC::MacroAssemblerSH4::branch8):
24282 * assembler/MacroAssemblerX86Common.h:
24283 (JSC::MacroAssemblerX86Common::load16Unaligned):
24285 * yarr/YarrJIT.cpp:
24286 (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
24288 2011-12-08 Michael Saboff <msaboff@apple.com>
24290 Add 8 bit paths for StringTypeAdapter classes
24291 https://bugs.webkit.org/show_bug.cgi?id=73882
24293 Reviewed by Darin Adler.
24295 Added is8Bit() method and writeTo(LChar*) methods
24296 to StringTypeAdapter<> classes. The writeTo(LChar*)
24297 method can be used if is8Bit() returns true. The
24298 non-native 8 bit classes contain ASSERT(is8Bit())
24299 in their writeTo(LChar*).
24301 Updated all of the various versions of tryMakeString() to
24302 use 8 bit processing in the updated StringTypeAdapter<>
24305 This has slight if any performance improvement on kraken.
24307 * runtime/UStringConcatenate.h:
24308 * wtf/text/StringConcatenate.h:
24309 (WTF::tryMakeString):
24310 * wtf/text/StringOperators.h:
24311 (WTF::StringAppend::is8Bit):
24312 (WTF::StringAppend::writeTo):
24314 2011-12-07 Filip Pizlo <fpizlo@apple.com>
24316 DFG CSE should know that CheckFunction is pure
24317 https://bugs.webkit.org/show_bug.cgi?id=74044
24319 Reviewed by Oliver Hunt.
24321 Possible slight win on V8, no regressions.
24323 * dfg/DFGPropagator.cpp:
24324 (JSC::DFG::Propagator::checkFunctionElimination):
24326 2011-12-07 Michael Saboff <msaboff@apple.com>
24328 StringBuilderTest.Append and StringBuilderTest.ToStringPreserveCapacity are failing.
24329 https://bugs.webkit.org/show_bug.cgi?id=73995
24331 Reviewed by Geoffrey Garen.
24333 Problem was that a call to characters on an StringImpl associated
24334 with a StringBuilder that is being appended to gets stale.
24335 Added a new m_valid16BitShadowlen that keeps the length of
24336 the 16 bit shadow that has been upconverted or will be up converted
24337 with the first getCharacters(). When StringBuilder::characters or
24338 ::reifyString is called, further characters are upconverted if
24339 we have a shadow16bit copy and the m_valid16BitShadowlen is updated.
24341 * JavaScriptCore.exp:
24342 * wtf/text/StringBuilder.cpp:
24343 (WTF::StringBuilder::reifyString):
24344 * wtf/text/StringBuilder.h:
24345 (WTF::StringBuilder::StringBuilder):
24346 (WTF::StringBuilder::characters):
24347 (WTF::StringBuilder::clear): Cleaned up as part of the change.
24348 * wtf/text/StringImpl.cpp:
24349 (WTF::StringImpl::getData16SlowCase):
24350 (WTF::StringImpl::upconvertCharacters):
24351 * wtf/text/StringImpl.h:
24353 2011-12-07 Filip Pizlo <fpizlo@apple.com>
24355 Compare and Swap should be enabled on ARMv7
24356 https://bugs.webkit.org/show_bug.cgi?id=74023
24358 Reviewed by Geoff Garen.
24360 Implemented weakCompareAndSwap in terms of LDREX/STREX and enabled PARALLEL_GC.
24361 It gives the expected speed-up on multi-core ARMv7 devices.
24364 (WTF::weakCompareAndSwap):
24367 2011-12-07 Filip Pizlo <fpizlo@apple.com>
24369 DFG CSE is overzealous with GetByVal
24370 https://bugs.webkit.org/show_bug.cgi?id=74042
24372 Reviewed by Oliver Hunt.
24374 Made sure that the purity of GetByVal and the limited-clobber-itude of PutByVal
24375 is tested in all places that matter.
24377 * dfg/DFGPropagator.cpp:
24378 (JSC::DFG::Propagator::byValIsPure):
24379 (JSC::DFG::Propagator::clobbersWorld):
24380 (JSC::DFG::Propagator::getByValLoadElimination):
24381 (JSC::DFG::Propagator::checkStructureLoadElimination):
24382 (JSC::DFG::Propagator::getByOffsetLoadElimination):
24383 (JSC::DFG::Propagator::getPropertyStorageLoadElimination):
24384 (JSC::DFG::Propagator::performNodeCSE):
24386 2011-12-07 Sheriff Bot <webkit.review.bot@gmail.com>
24388 Unreviewed, rolling out r102267.
24389 http://trac.webkit.org/changeset/102267
24390 https://bugs.webkit.org/show_bug.cgi?id=74032
24392 Breaks build on Chromium Mac Debug (Requested by aklein on
24395 * wtf/HashTraits.h:
24397 2011-12-07 Adam Klein <adamk@chromium.org>
24399 Use HashMap<Node*, OwnPtr<...>> in ChildListMutationScope
24400 https://bugs.webkit.org/show_bug.cgi?id=73964
24402 Reviewed by Ryosuke Niwa.
24404 * wtf/HashTraits.h: Add passOut(std::nullptr_t) to allow callers to use HashMap::take on an entry whose value is null.
24406 2011-12-07 Filip Pizlo <fpizlo@apple.com>
24408 Non-Mac devices should benefit from a larger heap
24409 https://bugs.webkit.org/show_bug.cgi?id=74015
24411 Reviewed by Geoff Garen.
24413 Removed the ENABLE(LARGE_HEAP) option from Platform.h, since it was only used in
24414 Heap.cpp, and got in the way of having more granular, per-platform control over
24415 what the heap size should be. Bumped the heap size to 8MB on iOS (was 512KB).
24418 (JSC::GCTimer::heapSizeForHint):
24421 2011-11-30 Simon Hausmann <simon.hausmann@nokia.com>
24423 [Qt] V8 build fixes.
24425 Reviewed by Tor Arne Vestbø.
24427 * yarr/yarr.pri: Don't rely on Source/JavaScriptCore being in
24428 VPATH. Prefix SOURCES correctly and make sure that runtime/ is
24429 in the include search path when building with v8.
24431 2011-12-06 Filip Pizlo <fpizlo@apple.com>
24433 Zapping a block that is Marked leads to dead objects being mistaken for live ones
24434 https://bugs.webkit.org/show_bug.cgi?id=73982
24436 Reviewed by Geoff Garen.
24438 Changed the zapping code to ignore blocks that are Marked or Zapped. Additionally,
24439 the code asserts that:
24441 - If we zap a Marked or Zapped block then the free list is empty, because this
24442 can only happen if the block was never free-listed.
24444 - Zapping can only happen for Marked, Zapped, or FreeListed blocks, since Allocated
24445 blocks are those that cannot be referred to by SizeClass::currentBlock (since
24446 SizeClass::currentBlock only refers to blocks that are candidates for allocation,
24447 and Allocated blocks are those who have been exhausted by allocation and will not
24448 be allocated from again), and New blocks cannot be referred to by anything except
24449 during a brief window inside the allocation slow-path.
24451 * heap/MarkedBlock.cpp:
24452 (JSC::MarkedBlock::zapFreeList):
24454 2011-12-06 Filip Pizlo <fpizlo@apple.com>
24456 DFG 32_64 call linking does not handle non-cell callees correctly
24457 https://bugs.webkit.org/show_bug.cgi?id=73965
24459 Reviewed by Sam Weinig.
24461 * dfg/DFGSpeculativeJIT32_64.cpp:
24462 (JSC::DFG::SpeculativeJIT::emitCall):
24464 2011-12-06 Sam Weinig <sam@webkit.org>
24466 Remove unintentional type name shadowing in the Interpreter
24467 https://bugs.webkit.org/show_bug.cgi?id=73963
24469 Reviewed by Oliver Hunt.
24471 * interpreter/Interpreter.cpp:
24472 (JSC::Interpreter::prepareForRepeatCall): Replace the parameter name FunctionExecutable,
24473 which shadows the FunctionExecutable type name, with functionExecutable.
24475 2011-12-06 Michael Saboff <msaboff@apple.com>
24477 r102146 from 73875 broke fast/js/encode-URI-test.html
24478 https://bugs.webkit.org/show_bug.cgi?id=73950
24480 Reviewed by Gavin Barraclough.
24482 * runtime/JSGlobalObjectFunctions.cpp:
24483 (JSC::globalFuncUnescape): Restructured to handle
24484 the %uHHHH case to output the resulting character
24485 and continue so that a failure in finding 4 hex
24486 digits will fall through and output the '%'.
24487 Due to style check, changed the temporary
24488 character variable to a more descriptive name.
24490 2011-12-06 Filip Pizlo <fpizlo@apple.com>
24492 GC zapping logic could benefit from some more assertions
24493 https://bugs.webkit.org/show_bug.cgi?id=73947
24495 Reviewed by Gavin Barraclough.
24497 - If you're in a zapped block and you're zapped, then your mark bit should
24500 - If you're being marked, then you should never be zapped.
24502 * heap/MarkedBlock.h:
24503 (JSC::MarkedBlock::isLive):
24504 * runtime/Structure.h:
24505 (JSC::MarkStack::internalAppend):
24507 2011-12-06 Oliver Hunt <oliver@apple.com>
24509 Don't allocate register in typedarray control flow
24510 https://bugs.webkit.org/show_bug.cgi?id=73944
24512 Reviewed by Gavin Barraclough.
24514 Move a temporary allocation outside of control flow.
24516 * dfg/DFGSpeculativeJIT.cpp:
24517 (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
24519 2011-12-06 Gavin Barraclough <barraclough@apple.com>
24521 https://bugs.webkit.org/show_bug.cgi?id=68328
24522 The generator and intrinsic fields in HashTableValue/HashEntry and associated structures and methods are redundant
24524 Reviewed by Geoff Garen.
24526 Move the instrinsic enum out of the DFG, into runtime. Add entires for all host functions
24527 that have an intrinsic in the form of a generated thunk. Remove the thunk pointer from the
24528 hashtable, and make Intrinsic field no longer ifdef on JIT/DFG. In getHostFunction select
24529 a thunk genertaor to use based on the Intrinsic.
24531 * JavaScriptCore.xcodeproj/project.pbxproj:
24532 * create_hash_table:
24533 * dfg/DFGByteCodeParser.cpp:
24534 (JSC::DFG::ByteCodeParser::handleCall):
24535 (JSC::DFG::ByteCodeParser::handleIntrinsic):
24536 * dfg/DFGCapabilities.h:
24537 * dfg/DFGIntrinsic.h: Removed.
24538 * jit/JITStubs.cpp:
24539 (JSC::JITThunks::hostFunctionStub):
24541 * runtime/Executable.cpp:
24542 (JSC::ExecutableBase::intrinsic):
24543 (JSC::NativeExecutable::intrinsic):
24544 * runtime/Executable.h:
24545 (JSC::ExecutableBase::intrinsicFor):
24546 (JSC::NativeExecutable::create):
24547 (JSC::NativeExecutable::finishCreation):
24548 * runtime/Intrinsic.h: Copied from Source/JavaScriptCore/dfg/DFGIntrinsic.h.
24549 * runtime/JSGlobalData.cpp:
24550 (JSC::thunkGeneratorForIntrinsic):
24551 (JSC::JSGlobalData::getHostFunction):
24552 * runtime/JSGlobalData.h:
24553 * runtime/Lookup.cpp:
24554 (JSC::HashTable::createTable):
24555 (JSC::setUpStaticFunctionSlot):
24556 * runtime/Lookup.h:
24557 (JSC::HashEntry::initialize):
24558 (JSC::HashEntry::intrinsic):
24560 2011-12-06 Michael Saboff <msaboff@apple.com>
24562 Add 8 bit paths to global object functions
24563 https://bugs.webkit.org/show_bug.cgi?id=73875
24565 Added 8 bit paths for converions methods.
24567 This is worth 1.5% on kraken audio-oscillator,
24568 1.6% on stanford-crypto-ccm and 2.5% on
24569 stanford-crypto-sha256-iterative. See bug for
24572 Reviewed by Oliver Hunt.
24574 * runtime/JSGlobalObjectFunctions.cpp:
24575 (JSC::decode): Split into a templated helper.
24576 (JSC::parseInt): Split into a templated helper.
24577 (JSC::parseFloat): Added an 8 bit path
24578 (JSC::globalFuncEscape): Added 8 bit path
24579 (JSC::globalFuncUnescape): Added 8 bit path
24580 * runtime/JSStringBuilder.h:
24581 (JSC::JSStringBuilder::append): New append for LChar
24582 * wtf/text/StringBuilder.h:
24583 (WTF::StringBuilder::append): New append for LChar
24585 2011-11-21 Balazs Kelemen <kbalazs@webkit.org>
24587 Enable ParallelJobs by default
24588 https://bugs.webkit.org/show_bug.cgi?id=70032
24590 Reviewed by Zoltan Herczeg.
24592 According to measurements on Mac and Linux it is a
24593 considerable speedup for SVG on multicore.
24595 Remove the ENABLE(PARALLEL_JOBS) guard.
24596 Fix build on Windows and Chromium.
24598 * JavaScriptCore.gypi: Add the files to the build. It was
24599 missing for the gyp build system.
24600 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
24602 * wtf/ParallelJobs.h:
24603 * wtf/ParallelJobsGeneric.cpp:
24604 (WTF::ParallelEnvironment::ParallelEnvironment):
24605 (WTF::ParallelEnvironment::execute):
24606 Deinline these to avoid exporting a lot of symbols.
24607 These are non-trivial and called only once on a given object
24608 so it doesn't seems to be worthwile to inline them.
24609 Additionally fix a signed-unsigned comparison in the constructor.
24610 * wtf/ParallelJobsGeneric.h:
24613 2011-12-06 Simon Hausmann <simon.hausmann@nokia.com>
24615 [Qt] build-jsc script doesn't work
24616 https://bugs.webkit.org/show_bug.cgi?id=73910
24618 Reviewed by Tor Arne Vestbø.
24620 * JavaScriptCore.pro: Build WTF before JavaScriptCore and JSC
24621 (moved from top-level WebKit.pro). Also add v8 scopes to only build
24622 WTF during v8 builds.
24624 2011-12-05 Anders Carlsson <andersca@apple.com>
24626 Add HashMap::keys() and HashMap::values() for easy iteration of hash map keys and values in C++11.
24628 Reviewed by Darin Adler.
24632 2011-12-05 Michael Saboff <msaboff@apple.com>
24634 Create StringImpl::empty() as an 8 bit string
24635 https://bugs.webkit.org/show_bug.cgi?id=73871
24637 Reviewed by Oliver Hunt.
24639 * wtf/text/StringStatics.cpp:
24640 (WTF::StringImpl::empty): Changed to be an 8 bit string.
24642 2011-12-05 Darin Adler <darin@apple.com>
24644 Convert JSClassRef to use HashMap<OwnPtr>
24645 https://bugs.webkit.org/show_bug.cgi?id=73780
24647 Reviewed by Andreas Kling.
24649 * API/JSCallbackObjectFunctions.h:
24650 (JSC::JSCallbackObject::getOwnPropertyNames): Use get() on the hash map
24651 entries because the hash map now has an OwnPtr instead of a raw pointer.
24653 * API/JSClassRef.cpp:
24654 (OpaqueJSClass::OpaqueJSClass): No need to initialize m_staticValues and
24655 m_staticFunctions since they are now OwnPtr. Use adoptPtr when allocating.
24656 Removed the code that gets and deletes existing entries, and just use set,
24657 which now handles deletion automatically due to it being OwnPtr.
24658 (OpaqueJSClass::~OpaqueJSClass): Replaced code to do all the deletion
24659 with assertion-only NDEBUG-only code.
24660 (OpaqueJSClassContextData::OpaqueJSClassContextData): Use adoptPtr when
24661 allocating. Use OwnPtr when adding. Removed unneeded code to set
24662 staticValues and staticFunctions to 0. Removed unneeded destructor.
24663 (OpaqueJSClass::staticValues): Added get call. Also removed unneeded local.
24664 (OpaqueJSClass::staticFunctions): Ditto.
24665 (OpaqueJSClass::prototype): Added use of adoptPtr.
24667 * API/JSClassRef.h: Made the static values and static functions tables
24668 use OwnPtr for the entries. Also used OwnPtr for the pointers to the
24669 tables themselves. Also removed ~OpaqueJSClassContextData(), letting
24670 the compiler generate it.
24672 2011-12-05 Oliver Hunt <oliver@apple.com>
24674 Land uncommitted bit of float array support
24675 https://bugs.webkit.org/show_bug.cgi?id=73873
24677 Reviewed by Filip Pizlo.
24679 * dfg/DFGSpeculativeJIT.cpp:
24680 (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
24682 2011-12-05 Benjamin Poulain <benjamin@webkit.org>
24684 Update String::containsOnlyASCII() to handle 8 bits strings
24685 https://bugs.webkit.org/show_bug.cgi?id=73799
24687 Reviewed by Darin Adler.
24689 Implement String::containsOnlyASCII() so that it does not
24690 call String::characters().
24692 * wtf/text/WTFString.h:
24693 (WTF::String::containsOnlyASCII):
24695 2011-12-05 Filip Pizlo <fpizlo@apple.com>
24697 Unreviewed build fix for non-DFG platforms.
24699 * dfg/DFGRepatch.h:
24701 2011-12-05 Filip Pizlo <fpizlo@apple.com>
24703 Old JIT emits 32-bit offsets for put_by_id but sometimes patches them as if they
24704 were compact offsets
24705 https://bugs.webkit.org/show_bug.cgi?id=73861
24707 Reviewed by Gavin Barraclough.
24709 * jit/JITPropertyAccess32_64.cpp:
24710 (JSC::JIT::resetPatchPutById):
24712 2011-12-05 Filip Pizlo <fpizlo@apple.com>
24714 Unreviewed, build fixes for ARM.
24716 * assembler/AbstractMacroAssembler.h:
24717 (JSC::AbstractMacroAssembler::unreachableForPlatform):
24718 * assembler/MacroAssemblerARMv7.h:
24719 (JSC::MacroAssemblerARMv7::loadDouble):
24720 (JSC::MacroAssemblerARMv7::loadFloat):
24721 (JSC::MacroAssemblerARMv7::storeFloat):
24722 (JSC::MacroAssemblerARMv7::convertFloatToDouble):
24723 (JSC::MacroAssemblerARMv7::convertDoubleToFloat):
24725 2011-12-05 Benjamin Poulain <benjamin@webkit.org>
24727 Update String::containsOnlyLatin1() to avoid converting to 16 bits
24728 https://bugs.webkit.org/show_bug.cgi?id=73797
24730 Reviewed by Andreas Kling.
24732 When the String use 8bits StringImpl, there is no need to iterate
24735 The function charactersAreAllLatin1() is removed because it is not
24738 * wtf/text/WTFString.h:
24739 (WTF::String::containsOnlyLatin1):
24741 2011-12-05 Michael Saboff <msaboff@apple.com>
24743 8 bit string work slows down Kraken json-stringify-tinderbox
24744 https://bugs.webkit.org/show_bug.cgi?id=73457
24746 Added 8 bit path to StringBuilder. StringBuilder starts
24747 assuming 8 bit contents and gets converted to 16 bit upon
24748 seeing the first 16 bit character or string. Split
24749 appendUninitialiezed into an inlined fast and function call
24752 Factored out the processing of the UString argument from
24753 Stringifier::appendQuotedString() to a static templated function
24754 based on character size.
24756 This change eliminates 5% of the 7% slowdown to json-stringify-tinderbox.
24757 This change introduces a 4.8% slowdown to json-parse-financial.
24758 This slowdown will be addressed in a subsequent patch to StringImpl::equal.
24760 Reviewed by Oliver Hunt.
24762 * runtime/JSONObject.cpp:
24763 (JSC::appendStringToUStringBuilder):
24764 (JSC::Stringifier::appendQuotedString):
24765 * wtf/text/StringBuilder.cpp:
24766 (WTF::StringBuilder::resize):
24767 (WTF::StringBuilder::allocateBuffer):
24768 (WTF::StringBuilder::allocateBufferUpConvert):
24771 (WTF::StringBuilder::reserveCapacity):
24772 (WTF::StringBuilder::appendUninitialized):
24773 (WTF::StringBuilder::appendUninitializedSlow):
24774 (WTF::StringBuilder::append):
24775 (WTF::StringBuilder::shrinkToFit):
24776 * wtf/text/StringBuilder.h:
24777 (WTF::StringBuilder::StringBuilder):
24778 (WTF::StringBuilder::append):
24779 (WTF::StringBuilder::operator[]):
24780 (WTF::StringBuilder::characters8):
24781 (WTF::StringBuilder::characters16):
24782 (WTF::StringBuilder::charactersBlah):
24786 2011-12-01 Gavin Barraclough <barraclough@apple.com>
24788 https://bugs.webkit.org/show_bug.cgi?id=73624
24789 JIT + INTERPRETER builds are broken
24791 Reviewed by Geoff Garen, Sam Weinig.
24793 These don't fallback to the interpreter correctly.
24794 Thunk creation assumes that is the JIT is compiled in, then it is enabled.
24796 * jit/JITStubs.cpp:
24797 (JSC::JITThunks::JITThunks):
24798 * runtime/Executable.h:
24799 (JSC::NativeExecutable::create):
24800 (JSC::NativeExecutable::finishCreation):
24801 * runtime/JSGlobalData.cpp:
24802 (JSC::JSGlobalData::getHostFunction):
24804 2011-12-05 Zoltan Herczeg <zherczeg@webkit.org>
24806 MacroAssemblerSH4 does not implement readCallTarget
24807 https://bugs.webkit.org/show_bug.cgi?id=73434
24809 Reviewed by Csaba Osztrogonác.
24811 * assembler/MacroAssemblerSH4.h: Support for SH4.
24812 (JSC::MacroAssemblerSH4::readCallTarget):
24813 * assembler/SH4Assembler.h:
24814 (JSC::SH4Assembler::readCallTarget):
24816 2011-12-04 Filip Pizlo <fpizlo@apple.com>
24818 DFG should optimize strict equality
24819 https://bugs.webkit.org/show_bug.cgi?id=73764
24821 Reviewed by Oliver Hunt.
24825 * dfg/DFGSpeculativeJIT.cpp:
24826 (JSC::DFG::SpeculativeJIT::compare):
24827 (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant):
24828 (JSC::DFG::SpeculativeJIT::compileStrictEq):
24829 * dfg/DFGSpeculativeJIT.h:
24830 * dfg/DFGSpeculativeJIT32_64.cpp:
24831 (JSC::DFG::SpeculativeJIT::compileIntegerCompare):
24832 (JSC::DFG::SpeculativeJIT::compileDoubleCompare):
24833 (JSC::DFG::SpeculativeJIT::compile):
24834 * dfg/DFGSpeculativeJIT64.cpp:
24835 (JSC::DFG::SpeculativeJIT::compileIntegerCompare):
24836 (JSC::DFG::SpeculativeJIT::compileDoubleCompare):
24837 (JSC::DFG::SpeculativeJIT::compile):
24839 2011-12-03 Darin Adler <darin@apple.com>
24841 Use HashMap<OwnPtr> for ScriptSampleRecordMap
24842 https://bugs.webkit.org/show_bug.cgi?id=73758
24844 Reviewed by Andreas Kling.
24846 * bytecode/SamplingTool.cpp:
24847 (JSC::SamplingTool::notifyOfScope): Added adoptPtr.
24848 (JSC::SamplingTool::dump): Added get.
24849 * bytecode/SamplingTool.h: Changed the value type of ScriptSampleRecordMap to be OwnPtr.
24851 2011-12-03 Darin Adler <darin@apple.com>
24853 Use HashMap<OwnPtr> for the opaqueJSClassData map
24854 https://bugs.webkit.org/show_bug.cgi?id=73759
24856 Reviewed by Andreas Kling.
24858 * API/JSClassRef.cpp:
24859 (OpaqueJSClass::contextData): Update types.
24860 * runtime/JSGlobalData.cpp:
24861 (JSC::JSGlobalData::~JSGlobalData): Add an explicit clear of opaqueJSClassData to keep the
24862 timing the same. If we didn't care about the order of operations, we could remove this, too.
24863 * runtime/JSGlobalData.h: Use OwnPtr instead of raw pointer for the mapped type in the
24864 opaqueJSClassData map.
24866 2011-12-03 Darin Adler <darin@apple.com>
24868 Change HashMap implementation to use the pass type and peek type from traits for the mapped value
24869 https://bugs.webkit.org/show_bug.cgi?id=72474
24871 Reviewed by Anders Carlsson.
24873 * wtf/HashMap.h: Added ReferenceTypeMaker struct template. Get PassInType, PassOutType,
24874 and PeekType from the traits of the mapped value instead of hard-coding them here.
24875 Changed inlineAdd to take a reference to the PassInType instead of the PassInType itself,
24876 to accomodate a PassInType that can't be copied. Use the store, peek, and passOut
24877 functions from the traits as well.
24879 * wtf/HashTraits.h: Updated GenericHashTraits and HashTraits for OwnPtr to include
24880 PassInType, PassOutType, PeekType, store, passOut, and peek. Before this, the file had
24881 an earlier version that was just PassType, PeekType, pass, and peek. Also commented
24882 the HashTraits for RefPtr to foreshadow some work we can do there.
24884 * wtf/RefPtrHashMap.h: Same changes as HashMap.h.
24886 2011-12-02 David Levin <levin@chromium.org>
24888 Rename WTF class from TemporarilyChange to TemporaryChange.
24889 https://bugs.webkit.org/show_bug.cgi?id=73479
24891 Reviewed by Eric Seidel.
24893 * JavaScriptCore.gypi:
24894 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
24895 * JavaScriptCore.xcodeproj/project.pbxproj:
24896 * wtf/TemporaryChange.h: Renamed from Source/JavaScriptCore/wtf/TemporarilyChange.h.
24897 (WTF::TemporaryChange::TemporaryChange):
24898 (WTF::TemporaryChange::~TemporaryChange):
24900 2011-12-02 Mark Hahnenberg <mhahnenberg@apple.com>
24902 REGRESSION (r99754): All layout tests crash on Windows
24903 https://bugs.webkit.org/show_bug.cgi?id=72305
24905 Reviewed by Geoffrey Garen.
24907 Fixes a crash in release builds on Windows. Windows was optimizing the out-of-line virtual destructor in
24908 JSFunction away, which left it with no virtual functions. Its vtable ptr was then identical to that of
24909 a different class, therefore the optimization in the visitChildren helper function in MarkedStack.cpp was calling an
24910 incorrect version of visitChildren on the object, which left its children unmarked, causing them to be
24911 collected when they were still reachable.
24913 * runtime/JSFunction.cpp:
24914 (JSC::JSFunction::vtableAnchor): Add a virtual function to JSFunction that Visual Studio can't optimize away.
24915 * runtime/JSFunction.h:
24916 * runtime/JSGlobalData.cpp:
24917 (JSC::JSGlobalData::storeVPtrs): Add checks to make sure that all virtual pointers that we rely on for optimization
24918 purposes are distinct from one another.
24920 2011-12-02 Oliver Hunt <oliver@apple.com>
24922 Improve float array support in the DFG JIT
24923 https://bugs.webkit.org/show_bug.cgi?id=73722
24925 Reviewed by Gavin Barraclough.
24927 Add basic support for float typed arrays in JSC. This is currently
24928 less optimal than it could be in the following ways:
24929 * float32Array1[0] = float32Array2[0] (eg. an element by element copy)
24930 promotes float to double and then back to float.
24931 * float64Array[0] will always perform NaN tests in order to prevent
24932 signalling NaNs from entering the engine.
24934 We also don't support Float32Array on ARMv7
24936 * assembler/MacroAssemblerARMv7.h:
24937 (JSC::MacroAssemblerARMv7::loadDouble):
24938 (JSC::MacroAssemblerARMv7::loadFloat):
24939 (JSC::MacroAssemblerARMv7::storeDouble):
24940 (JSC::MacroAssemblerARMv7::storeFloat):
24941 (JSC::MacroAssemblerARMv7::convertFloatToDouble):
24942 (JSC::MacroAssemblerARMv7::convertDoubleToFloat):
24943 * assembler/MacroAssemblerX86Common.h:
24944 (JSC::MacroAssemblerX86Common::loadDouble):
24945 (JSC::MacroAssemblerX86Common::loadFloat):
24946 (JSC::MacroAssemblerX86Common::storeDouble):
24947 (JSC::MacroAssemblerX86Common::storeFloat):
24948 (JSC::MacroAssemblerX86Common::convertDoubleToFloat):
24949 (JSC::MacroAssemblerX86Common::convertFloatToDouble):
24950 * assembler/X86Assembler.h:
24951 (JSC::X86Assembler::cvtsd2ss_rr):
24952 (JSC::X86Assembler::cvtss2sd_rr):
24953 (JSC::X86Assembler::movsd_rm):
24954 (JSC::X86Assembler::movss_rm):
24955 (JSC::X86Assembler::movsd_mr):
24956 (JSC::X86Assembler::movss_mr):
24957 * dfg/DFGAbstractState.cpp:
24958 (JSC::DFG::AbstractState::execute):
24960 (JSC::DFG::Node::shouldSpeculateFloat32Array):
24961 * dfg/DFGPropagator.cpp:
24962 (JSC::DFG::Propagator::propagateNodePredictions):
24963 * dfg/DFGSpeculativeJIT.cpp:
24964 (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
24965 (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
24966 (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
24967 * dfg/DFGSpeculativeJIT.h:
24968 * dfg/DFGSpeculativeJIT32_64.cpp:
24969 (JSC::DFG::SpeculativeJIT::compile):
24970 * dfg/DFGSpeculativeJIT64.cpp:
24971 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
24972 (JSC::DFG::SpeculativeJIT::compile):
24974 2011-12-02 Sheriff Bot <webkit.review.bot@gmail.com>
24976 Unreviewed, rolling out r101801.
24977 http://trac.webkit.org/changeset/101801
24978 https://bugs.webkit.org/show_bug.cgi?id=73667
24980 Build is still broken (Requested by Ossy on #webkit).
24982 * assembler/SH4Assembler.h:
24984 2011-12-01 Darin Adler <darin@apple.com>
24986 Prepare to deploy pass and peek types in the HashMap class
24987 https://bugs.webkit.org/show_bug.cgi?id=73477
24989 Reviewed by Adam Roben.
24991 This patch adds private typedefs inside the HashMap class,
24992 and uses them as appropriate. A future patch will actually
24993 tie those typedefs to hash traits, which will allow us to
24994 make HashMap work with OwnPtr mapped values and to optimize
24995 how HashMap works with RefPtr mapped values.
24997 Also changed the hash translator and adapter struct templates
24998 to use template functions to simplify them and make them more
25001 Also removed some unused template arguments.
25003 This goes out of its way to not change behavior. Future patches
25004 will change the peek type to be a reference type, which will
25005 reduce reference count churn a bit for hash tables with RefPtr
25006 mapped values, and then do further optimizations for RefPtr
25007 and OwnPtr by getting types from the hash traits.
25009 * wtf/HashMap.h: Added MappedPassInType, MappedPassOutType,
25010 and MappedPeekType typedefs, and used them for the arguments
25011 and return types of the get, set, add, take, and inlineAdd
25013 (WTF::HashMapTranslator): Changed this struct template to take
25014 fewer arguments, and changed its member functions to be
25015 function templates instead. This allows the compiler to
25016 determine types more flexibly and also simplifies use of it.
25017 (WTF::HashMapTranslatorAdapter): Ditto.
25018 (WTF::HashMap::find): Updated to use new HashMapTranslatorAdapter.
25019 Also reduced the arguments passed to the HashTable function template.
25020 (WTF::HashMap::contains): Ditto.
25021 (WTF::HashMap::inlineAdd): Ditto. Also take MappedPassInType.
25022 (WTF::HashMap::set): Ditto.
25023 (WTF::HashMap::add): Ditto.
25024 (WTF::HashMap::inlineGet): Ditto, but return MappedPeekType.
25025 (WTF::HashMap::get): Ditto.
25026 (WTF::HashMap::take): Ditto, but return MappedPassOutType and use
25027 that type in the implementation.
25028 (WTF::deleteAllValues): Removed unneeded template arguments from
25029 call to deleteAllPairSeconds.
25030 (WTF::deleteAllKeys): Removed unneeded template arguments from
25031 call to deleteAllPairFirsts.
25034 (WTF::IdentityExtractor): Changed this to be a struct rather than
25035 a struct template, and replaced the extract function with a function
25036 template. This allows the compiler to deduce the type.
25037 (WTF::HashSetTranslatorAdapter): Changed this struct template to take
25038 fewer arguments, and changed its member functions to be
25039 function templates instead. This allows the compiler to
25040 determine types more flexibly and also simplifies use of it.
25041 (WTF::HashSet::find): Updated to use new HashSetTranslatorAdapter.
25042 Also reduced the arguments passed to the HashTable function template.
25043 (WTF::HashSet::contains): Ditto.
25044 (WTF::HashSet::add): Ditto.
25047 (WTF::IdentityHashTranslator): Changed this struct template to take
25048 fewer arguments, and changed its member functions to be
25049 function templates instead. This allows the compiler to
25050 determine types more flexibly and also simplifies use of it.
25051 (WTF::HashTable::add): Reduced arguments passed to the function template.
25052 (WTF::HashTable::find): Ditto, also reversed the template arguments so the
25053 translator comes first so the compiler can deduce the other type.
25054 (WTF::HashTable::contains): Ditto.
25055 (WTF::HashTable::lookup): Ditto.
25056 (WTF::HashTable::lookupForWriting): Ditto.
25057 (WTF::HashTable::checkKey): Ditto.
25058 (WTF::HashTable::fullLookupForWriting): Ditto.
25059 (WTF::HashTable::add): Ditto.
25060 (WTF::HashTable::addPassingHashCode): Ditto.
25061 (WTF::HashTable::find): Ditto.
25062 (WTF::HashTable::contains): Ditto.
25064 * wtf/ListHashSet.h:
25065 (WTF::ListHashSetNodeHashFunctions): Changed this struct template to take
25066 fewer arguments, and changed its member functions to be function templates
25067 instead. This allows the compiler to determine types more flexibly and
25068 also simplifies use of it.
25069 (WTF::ListHashSet::find): Reduced the arguments passed to the HashTable
25071 (WTF::ListHashSetTranslatorAdapter): Changed this struct template in the
25072 same way we changed ListHashSetNodeHashFunctions above.
25073 (WTF::ListHashSetTranslatorAdapter::equal):
25076 (WTF::::insertBefore):
25078 * wtf/RefPtrHashMap.h: Updated comments. Removed the
25079 RefPtrHashMapRawKeyTranslator struct template; we can use the
25080 HashMapTranslator struct template from HashMap.h instead now that
25081 it is more flexible. Added MappedPassInType, MappedPassOutType,
25082 and MappedPeekType typedefs, and used them for the arguments
25083 and return types of the get, inlineGet, set, add, take, and inlineAdd
25084 functions. Changed the name of the RawKeyTranslator type to
25085 Translator since it's now a class that can handle both raw keys
25086 and conventional keys.
25087 (WTF::HashMap::find): Changed to use Translator instead of RawKeyTranslator.
25088 Reduced the arguments passed to the HashTable function template.
25089 (WTF::HashMap::contains): Ditto.
25090 (WTF::HashMap::inlineAdd): Ditto. Also take MappedPassInType.
25091 (WTF::HashMap::set): Ditto.
25092 (WTF::HashMap::add): Ditto.
25093 (WTF::HashMap::inlineGet): Ditto, but return MappedPeekType.
25094 (WTF::HashMap::get): Ditto.
25095 (WTF::HashMap::take): Ditto, but return MappedPassOutType and use
25096 that type in the implementation.
25097 (WTF::deleteAllValues): Removed unneeded template arguments from
25098 call to deleteAllPairSeconds.
25099 (WTF::deleteAllKeys): Removed unneeded template arguments from
25100 call to deleteAllPairFirsts.
25102 2011-12-02 Zoltan Herczeg <zherczeg@webkit.org>
25104 MacroAssemblerSH4 does not implement readCallTarget
25105 https://bugs.webkit.org/show_bug.cgi?id=73434
25107 Reviewed by Csaba Osztrogonác.
25109 * assembler/SH4Assembler.h:
25110 (JSC::SH4Assembler::readCallTarget): Support for SH4.
25112 2011-12-02 Hajime Morrita <morrita@chromium.org>
25114 Unreviewed, rolling out r101751 and r101775.
25115 http://trac.webkit.org/changeset/101751
25116 http://trac.webkit.org/changeset/101775
25117 https://bugs.webkit.org/show_bug.cgi?id=73191
25119 breaks Windows build
25121 * JavaScriptCore.xcodeproj/project.pbxproj:
25123 * runtime/JSExportMacros.h: Removed.
25124 * wtf/ExportMacros.h:
25126 * wtf/WTFThreadData.h:
25127 * wtf/text/AtomicString.h:
25128 * wtf/text/StringStatics.cpp:
25130 2011-12-01 Hajime Morrita <morrita@chromium.org>
25132 JS_INLINE and WTF_INLINE should be visible from WebCore
25133 https://bugs.webkit.org/show_bug.cgi?id=73191
25135 - Moved Export related macro definitions from config.h to ExportMacros.h and JSExportMacros.h.
25136 - Moved WTF_USE_JSC and WTF_USE_V8 from various config.h family to Platform.h.
25137 - Replaced JS_EXPORTDATA in wtf moudule with newly introduced WTF_EXPORTDATA.
25139 Reviewed by Kevin Ollivier.
25141 * JavaScriptCore.xcodeproj/project.pbxproj:
25143 * runtime/JSExportMacros.h: Added.
25144 * wtf/ExportMacros.h:
25146 * wtf/WTFThreadData.h:
25147 * wtf/text/AtomicString.h:
25148 * wtf/text/StringStatics.cpp:
25150 2011-12-01 Michael Saboff <msaboff@apple.com>
25152 Changes proposed for 73457 slow down Kraken json-parse-financial
25153 https://bugs.webkit.org/show_bug.cgi?id=73584
25155 Restructured StringImpl::equal to take advantage of 8 or 4 bytes
25156 at a time when possible.
25158 This is worth ~3% on Kraken json-parse-financial. It provides
25159 ~2% on SunSpider string-unpack-code.
25161 Reviewed by Sam Weinig.
25163 * wtf/text/StringImpl.cpp:
25166 2011-12-01 Oliver Hunt <oliver@apple.com>
25168 Support integer typed arrays in the DFG JIT
25169 https://bugs.webkit.org/show_bug.cgi?id=73608
25171 Reviewed by Filip Pizlo.
25173 Add support for all the integral typed arrays in the DFG JIT.
25174 Currently this loads the contents of Uint32 arrays as doubles,
25175 which is clearly not as efficient as it could be, but this is
25176 still in the order of 10-20x faster than the existing behaviour.
25178 This needed us to add support for writing 16bit values to the
25179 macroassembler, and also to support double<->unsigned conversion.
25181 * assembler/ARMv7Assembler.h:
25182 (JSC::ARMv7Assembler::strh):
25183 (JSC::ARMv7Assembler::vcvt_floatingPointToUnsigned):
25184 * assembler/MacroAssemblerARMv7.h:
25185 (JSC::MacroAssemblerARMv7::store16):
25186 (JSC::MacroAssemblerARMv7::truncateDoubleToUint32):
25187 * assembler/MacroAssemblerX86Common.h:
25188 (JSC::MacroAssemblerX86Common::store16):
25189 (JSC::MacroAssemblerX86Common::truncateDoubleToUint32):
25190 * assembler/X86Assembler.h:
25191 (JSC::X86Assembler::movw_rm):
25192 (JSC::X86Assembler::cvttsd2siq_rr):
25193 * bytecode/PredictedType.cpp:
25194 (JSC::predictionToString):
25195 (JSC::predictionFromClassInfo):
25196 * bytecode/PredictedType.h:
25197 (JSC::isInt8ArrayPrediction):
25198 (JSC::isInt16ArrayPrediction):
25199 (JSC::isInt32ArrayPrediction):
25200 (JSC::isUint8ArrayPrediction):
25201 (JSC::isUint16ArrayPrediction):
25202 (JSC::isUint32ArrayPrediction):
25203 (JSC::isFloat32ArrayPrediction):
25204 (JSC::isFloat64ArrayPrediction):
25205 * dfg/DFGAbstractState.cpp:
25206 (JSC::DFG::AbstractState::initialize):
25207 (JSC::DFG::AbstractState::execute):
25209 (JSC::DFG::Node::shouldSpeculateInt8Array):
25210 (JSC::DFG::Node::shouldSpeculateInt16Array):
25211 (JSC::DFG::Node::shouldSpeculateInt32Array):
25212 (JSC::DFG::Node::shouldSpeculateUint8Array):
25213 (JSC::DFG::Node::shouldSpeculateUint16Array):
25214 (JSC::DFG::Node::shouldSpeculateUint32Array):
25215 (JSC::DFG::Node::shouldSpeculateFloat32Array):
25216 (JSC::DFG::Node::shouldSpeculateFloat64Array):
25217 * dfg/DFGPropagator.cpp:
25218 (JSC::DFG::Propagator::propagateNodePredictions):
25219 (JSC::DFG::Propagator::fixupNode):
25220 (JSC::DFG::Propagator::performNodeCSE):
25221 * dfg/DFGSpeculativeJIT.cpp:
25222 (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
25223 (JSC::DFG::SpeculativeJIT::compileGetTypedArrayLength):
25224 (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
25225 (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
25226 * dfg/DFGSpeculativeJIT.h:
25227 * dfg/DFGSpeculativeJIT32_64.cpp:
25228 (JSC::DFG::SpeculativeJIT::compile):
25229 * dfg/DFGSpeculativeJIT64.cpp:
25230 (JSC::DFG::SpeculativeJIT::compile):
25231 * runtime/JSGlobalData.h:
25233 2011-12-01 Benjamin Poulain <benjamin@webkit.org>
25235 URLs are encoded in UTF-8, then decoded as if they are Latin1
25236 https://bugs.webkit.org/show_bug.cgi?id=71758
25238 Reviewed by Darin Adler.
25240 Add the operator == between a String and a Vector of char. The implementation
25241 is the same as the comparison of String and char* but adds the length as a
25242 parameter for comparing the strings.
25244 * JavaScriptCore.exp:
25245 * wtf/text/StringImpl.h:
25247 * wtf/text/WTFString.h:
25251 2011-12-01 Martin Robinson <mrobinson@igalia.com>
25253 [GTK] Read fonts from the jhbuild root
25254 https://bugs.webkit.org/show_bug.cgi?id=73487
25256 Reviewed by Gustavo Noronha Silva.
25258 Read fonts from the jhbuild root instead of from the system. This will ensure
25259 that all testers use the same fonts instead of leaving this up to luck.
25261 * wtf/gobject/GlibUtilities.h: Add Assertions.h which was required for the WebKit2TestRunner.
25263 2011-12-01 Martin Robinson <mrobinson@igalia.com>
25265 [GTK] Add a helper function to find the current executable's path
25266 https://bugs.webkit.org/show_bug.cgi?id=73473
25268 Reviewed by Gustavo Noronha Silva.
25270 Add a WTF helper which gets the binary path. This is currently only used
25273 * GNUmakefile.list.am: Add the new file to the source list.
25274 * wtf/gobject/GlibUtilities.cpp: Added.
25275 (getCurrentExecutablePath):
25276 * wtf/gobject/GlibUtilities.h: Added.
25278 2011-12-01 Sheriff Bot <webkit.review.bot@gmail.com>
25280 Unreviewed, rolling out r101691.
25281 http://trac.webkit.org/changeset/101691
25282 https://bugs.webkit.org/show_bug.cgi?id=73588
25284 Tests fail on Chromium bots, early warning system warned
25285 committer, please adjust test_expectations in patch (Requested
25286 by scheib on #webkit).
25288 * JavaScriptCore.exp:
25289 * wtf/text/StringImpl.h:
25290 * wtf/text/WTFString.h:
25292 2011-12-01 Filip Pizlo <fpizlo@apple.com>
25294 ARMv7 only allows for one-shot patching of compact offsets, while the
25295 JIT expects to be able to repatch
25296 https://bugs.webkit.org/show_bug.cgi?id=73548
25298 Reviewed by Oliver Hunt.
25300 * assembler/ARMv7Assembler.h:
25301 (JSC::ARMv7Assembler::setUInt7ForLoad):
25303 2011-11-30 Benjamin Poulain <benjamin@webkit.org>
25305 URLs are encoded in UTF-8, then decoded as if they are Latin1
25306 https://bugs.webkit.org/show_bug.cgi?id=71758
25308 Reviewed by Darin Adler.
25310 Add the operator == between a String and a Vector of char. The implementation
25311 is the same as the comparison of String and char* but adds the length as a
25312 parameter for comparing the strings.
25314 * JavaScriptCore.exp:
25315 * wtf/text/StringImpl.h:
25317 * wtf/text/WTFString.h:
25321 2011-11-30 Dmitry Lomov <dslomov@google.com>
25323 https://bugs.webkit.org/show_bug.cgi?id=73503
25324 [Chromium][V8] Implement ArrayBuffer transfer in chromium.
25325 Portions of this patch come from Luke Zarko.
25327 Reviewed by David Levin.
25329 * wtf/ArrayBuffer.cpp:
25330 (WTF::ArrayBuffer::transfer): Changed prototype from pointers to RefPtr.
25331 * wtf/ArrayBuffer.h:
25332 (WTF::ArrayBufferContents::transfer): Changed prototype from pointers to RefPtr.
25333 (WTF::ArrayBuffer::isNeutered):
25334 * wtf/TypedArrayBase.h:
25335 (WTF::TypedArrayBase::neuter):
25337 2011-12-01 Chao-ying Fu <fu@mips.com>
25339 MacroAssemblerMIPS does not implement readCallTarget
25340 https://bugs.webkit.org/show_bug.cgi?id=73432
25342 Reviewed by Zoltan Herczeg.
25344 * assembler/MIPSAssembler.h:
25345 (JSC::MIPSAssembler::readCallTarget):
25346 * assembler/MacroAssemblerMIPS.h:
25347 (JSC::MacroAssemblerMIPS::readCallTarget):
25349 2011-12-01 Noel Gordon <noel.gordon@gmail.com>
25351 [chromium] Remove wtf/qt/ThreadingQt.cpp from the gyp projects
25352 https://bugs.webkit.org/show_bug.cgi?id=73527
25354 Reviewed by Simon Hausmann.
25356 wtf/qt/ThreadingQt.cpp was removed in r101477
25358 * JavaScriptCore.gypi: remove wtf/qt/ThreadingQt.cpp
25360 2011-12-01 Filip Pizlo <fpizlo@apple.com>
25362 BitVector isInline check could fail
25363 https://bugs.webkit.org/show_bug.cgi?id=70691
25365 Reviewed by Gavin Barraclough.
25367 Switch back to using the high bit as the inline marker, to make
25368 all of the bit indexing operations simpler. Computing the size in
25369 words and in bytes of a bitvector, using the number of bits as
25370 input is error-prone enough; and with the current approach to
25371 solving the X86 bug we end up getting it wrong. Making it right
25374 So instead, to solve the original problem (the high bit may be
25375 meaningful on 32-bit systems), the out-of-line storage pointer is
25376 right-shifted by 1. Compared to the original BitVector code, this
25377 is a much smaller change (just three lines).
25379 This solves a bug where the DFG was corrupting its call frame
25380 because BitVector lost track of some bits.
25382 * wtf/BitVector.cpp:
25383 (WTF::BitVector::setSlow):
25384 (WTF::BitVector::resizeOutOfLine):
25386 (WTF::BitVector::quickGet):
25387 (WTF::BitVector::quickSet):
25388 (WTF::BitVector::quickClear):
25389 (WTF::BitVector::makeInlineBits):
25390 (WTF::BitVector::isInline):
25391 (WTF::BitVector::outOfLineBits):
25393 2011-11-30 Filip Pizlo <fpizlo@apple.com>
25395 DFG should make it easier to notice node boundaries in disassembly
25396 https://bugs.webkit.org/show_bug.cgi?id=73509
25398 Rubber-stamped by Gavin Barraclough
25400 If you set XOR_DEBUG_AID to 1 in DFGCommon.h, a pair of xor's will
25401 be emitted at node boundaries, where the immediate being xor'd is the
25405 * dfg/DFGSpeculativeJIT.cpp:
25406 (JSC::DFG::SpeculativeJIT::compile):
25408 2011-11-30 Geoffrey Garen <ggaren@apple.com>
25410 Removed ArgList iterators.
25412 Reviewed by Gavin Barraclough.
25414 Another step toward reversing the argument order.
25416 * interpreter/Interpreter.cpp:
25417 (JSC::Interpreter::executeCall):
25418 (JSC::Interpreter::executeConstruct): Switched from iterator to int.
25420 * runtime/ArgList.h:
25421 (JSC::ArgList::ArgList):
25422 (JSC::ArgList::isEmpty): Removed iterators.
25424 * runtime/JSArray.cpp:
25425 (JSC::JSArray::finishCreation): Switched from iterator to int.
25427 2011-11-30 Yuqiang Xian <yuqiang.xian@intel.com>
25429 32 bit DFG should handle logicalNot slow case instead of simply bailing out
25430 https://bugs.webkit.org/show_bug.cgi?id=73515
25432 Reviewed by Filip Pizlo.
25434 This improves Kraken performance by 14%, mainly due to ~3X improvement
25435 on imaging-desaturate.
25437 * dfg/DFGSpeculativeJIT32_64.cpp:
25438 (JSC::DFG::SpeculativeJIT::compileLogicalNot):
25440 2011-11-30 Max Vujovic <mvujovic@adobe.com>
25442 Some date values not handled consistently with IE/Firefox
25443 https://bugs.webkit.org/show_bug.cgi?id=14176
25445 Reviewed by Gavin Barraclough.
25447 Changed time zone offset parsing behavior to match IE/Firefox/Opera's in
25448 implementation dependent cases like "GMT-4".
25450 * wtf/DateMath.cpp:
25451 (WTF::parseDateFromNullTerminatedCharacters):
25453 2011-11-30 Mark Hahnenberg <mhahnenberg@apple.com>
25455 toStringCallback and valueOfCallback do not check the entire prototype chain for convertToType callback
25456 https://bugs.webkit.org/show_bug.cgi?id=73368
25458 Reviewed by Darin Adler.
25460 We need to search the entire prototype chain for the convertToType callback, rather than just calling whatever
25461 happens to be in the first class of the chain, which potentially could be null.
25463 <rdar://problem/10493218>
25465 * API/JSCallbackFunction.cpp:
25466 (JSC::JSCallbackFunction::toStringCallback):
25467 (JSC::JSCallbackFunction::valueOfCallback):
25469 2011-11-29 Sam Weinig <sam@webkit.org>
25471 Add adoptCF and adoptNS convenience functions to RetainPtr.h
25472 https://bugs.webkit.org/show_bug.cgi?id=73399
25474 Reviewed by Anders Carlsson.
25479 These adoption functions match the pattern we use in other
25480 smart pointer classes.
25482 2011-11-30 Adam Roben <aroben@apple.com>
25484 Fix RetainPtr's move assignment operators
25486 Fixes <http://webkit.org/b/73449> RetainPtr's move assignment operators don't modify the
25487 pointer being assigned to
25489 I didn't write a test for this because we don't have a way of unit testing C++11 code (see
25490 <http://webkit.org/b/73448>).
25492 Reviewed by Anders Carlsson.
25495 (WTF::RetainPtr::operator=): Adopt the passed-in RetainPtr's underlying pointer, not our own
25498 2011-11-30 Csaba Osztrogonác <ossy@webkit.org>
25500 Unreviewed rolling out incorrect r101481.
25502 * assembler/MIPSAssembler.h:
25503 * assembler/MacroAssemblerMIPS.h:
25505 2011-11-30 Simon Hausmann <simon.hausmann@nokia.com>
25507 Fix compilation with MingW.
25509 Reviewed by Csaba Osztrogonác.
25511 * wtf/ThreadingWin.cpp:
25512 (WTF::initializeCurrentThreadInternal): MingW doesn't support MSVC exception handling, so for
25513 the time being make the thread name setting unimplemented for MingW.
25515 2011-11-30 Simon Hausmann <simon.hausmann@nokia.com>
25517 Unreviewed propective build fix for Qt/Windows part 2 after r101477.
25519 * wtf/ThreadSpecific.h: Fix the OS(WINDOWS) defines for the friend declaration for ThreadSpecific<T>::Data
25521 2011-11-30 Simon Hausmann <simon.hausmann@nokia.com>
25523 Unreviewed propective build fix for Qt/Windows after r101477.
25525 * wtf/ThreadSpecific.h: Use OS(WINDOWS) for declaring "destructor", as it's
25526 only referenced from within another OS(WINDOWS) section.
25528 2011-11-30 Csaba Osztrogonác <ossy@webkit.org>
25530 Unreviewed speculative buildfix after r101457.
25532 * assembler/MIPSAssembler.h:
25533 (JSC::MIPSAssembler::readCallTarget):
25534 * assembler/MacroAssemblerMIPS.h:
25535 (JSC::MacroAssemblerMIPS::readCallTarget):
25537 2011-11-30 Andrew Wason <rectalogic@rectalogic.com>
25539 Replace Qt QThread threading back-end with pthread/Win32 threading back-ends
25540 https://bugs.webkit.org/show_bug.cgi?id=72155
25542 Reviewed by Simon Hausmann.
25544 Use ThreadingPthreads and ThreadingWin instead of ThreadingQt.
25546 * heap/MachineStackMarker.cpp:
25547 * wtf/MainThread.cpp:
25548 (WTF::initializeMainThread):
25550 * wtf/ThreadSpecific.h: Drop QThreadStorage related code.
25552 * wtf/ThreadingPrimitives.h:
25553 * wtf/qt/MainThreadQt.cpp: Drop Qt specific isMainThread().
25554 (WTF::initializeMainThreadPlatform): Initialize MainThreadInvoker on main thread to avoid infecting secondary thread with QAdoptedThread.
25555 (WTF::scheduleDispatchFunctionsOnMainThread):
25556 * wtf/qt/ThreadingQt.cpp: Removed.
25559 2011-11-30 Csaba Osztrogonác <ossy@webkit.org>
25561 MacroAssemblerARM does not implement readCallTarget
25562 https://bugs.webkit.org/show_bug.cgi?id=73413
25564 Based on Filip Pizlo's patch.
25566 Buildfix. Rubber-stamped by Gabor Loki.
25568 * assembler/ARMAssembler.h:
25569 (JSC::ARMAssembler::readCallTarget):
25570 * assembler/MacroAssemblerARM.h:
25571 (JSC::MacroAssemblerARM::readCallTarget):
25573 2011-11-29 Filip Pizlo <fpizlo@apple.com>
25575 Resetting a put_by_id inline cache should preserve the "isDirect" bit
25576 https://bugs.webkit.org/show_bug.cgi?id=73375
25578 Reviewed by Gavin Barraclough.
25580 For the replace case, we can find out if it was direct by looking at the
25581 slow call. For the transition case, we explicitly remember if it was
25584 * bytecode/CodeBlock.cpp:
25585 (JSC::printStructureStubInfo):
25586 * bytecode/StructureStubInfo.cpp:
25587 (JSC::StructureStubInfo::deref):
25588 (JSC::StructureStubInfo::visitWeakReferences):
25589 * bytecode/StructureStubInfo.h:
25590 (JSC::isPutByIdAccess):
25591 (JSC::StructureStubInfo::initPutByIdTransition):
25592 * dfg/DFGByteCodeParser.cpp:
25593 (JSC::DFG::ByteCodeParser::parseBlock):
25594 * dfg/DFGRepatch.cpp:
25595 (JSC::DFG::tryCachePutByID):
25597 * jit/JITPropertyAccess.cpp:
25598 (JSC::JIT::resetPatchPutById):
25599 (JSC::JIT::isDirectPutById):
25600 * jit/JITPropertyAccess32_64.cpp:
25601 (JSC::JIT::resetPatchPutById):
25602 * jit/JITStubs.cpp:
25603 (JSC::JITThunks::tryCachePutByID):
25605 2011-11-29 Sam Weinig <sam@webkit.org>
25607 Remove RetainPtr::releaseRef
25608 https://bugs.webkit.org/show_bug.cgi?id=73396
25610 Reviewed by Dan Bernstein.
25613 Be gone releaseRef! Long live leakRef!
25615 2011-11-29 Sam Weinig <sam@webkit.org>
25617 Add move semantics to RetainPtr
25618 https://bugs.webkit.org/show_bug.cgi?id=73393
25620 Reviewed by Anders Carlsson.
25623 (WTF::RetainPtr::RetainPtr):
25624 Add a move constructor and move enabled assignment operators
25625 to RetainPtr if the compiler being used supports rvalue
25626 references. If the compiler does not support it, we fallback
25627 to the copy semantics we have always had.
25629 2011-11-29 Yuqiang Xian <yuqiang.xian@intel.com>
25631 DFG local CSE may cause incorrect reference counting for a node
25632 https://bugs.webkit.org/show_bug.cgi?id=73390
25634 Reviewed by Filip Pizlo.
25636 When performing a node substitution, the ref count of the replaced
25637 child will be increased, no matter whether the user node is skipped in
25638 code generation or not. This will cause the reference count of the
25639 replaced child never get the chance to become zero and so the
25640 registers occupied by it cannot be reused simply without spilling, if
25641 it's used by a "skipped" node.
25642 This is a 1% gain on V8 benchmark, tested on IA32 Linux.
25644 * dfg/DFGPropagator.cpp:
25645 (JSC::DFG::Propagator::performSubstitution):
25646 (JSC::DFG::Propagator::performNodeCSE):
25648 2011-11-29 David Levin <levin@chromium.org>
25650 Add a way to revert a variable to its previous value after leaving a scope.
25651 https://bugs.webkit.org/show_bug.cgi?id=73371
25653 Reviewed by Adam Barth.
25655 In case anyone from Chromium sees this, it is nearly identical to AutoReset
25656 but if the same name were used, it causes unnecessary ambiguity.
25658 * JavaScriptCore.xcodeproj/project.pbxproj:
25659 * wtf/TemporarilyChange.h: Added.
25660 (WTF::TemporarilyChange::TemporarilyChange):
25661 (WTF::TemporarilyChange::~TemporarilyChange):
25663 2011-11-29 Sam Weinig <sam@webkit.org>
25665 Add COMPILER_SUPPORTS macro to allow for compiler feature testing
25666 https://bugs.webkit.org/show_bug.cgi?id=73386
25668 Reviewed by Anders Carlsson.
25671 Add COMPILER_SUPPORTS and #defines for C++11 variadic templates and
25672 rvalue references for Clang.
25674 2011-11-29 Oliver Hunt <oliver@apple.com>
25676 Allow WebCore to describe typed arrays to JSC
25677 https://bugs.webkit.org/show_bug.cgi?id=73355
25679 Reviewed by Gavin Barraclough.
25681 Allow globaldata to track the structure of typed arrays.
25683 * runtime/JSGlobalData.h:
25684 (JSC::TypedArrayDescriptor::TypedArrayDescriptor):
25686 2011-11-28 Filip Pizlo <fpizlo@apple.com>
25688 DFG debugCall() mechanism only works on X86 and X86-64
25689 https://bugs.webkit.org/show_bug.cgi?id=73282
25691 Reviewed by Oliver Hunt.
25693 * dfg/DFGAssemblyHelpers.h:
25694 (JSC::DFG::AssemblyHelpers::debugCall):
25696 2011-11-28 Filip Pizlo <fpizlo@apple.com>
25698 DFG non-X86 ArithDiv does speculation failure after mutating state,
25699 without a value recovery
25700 https://bugs.webkit.org/show_bug.cgi?id=73286
25702 Reviewed by Gavin Barraclough.
25704 * dfg/DFGSpeculativeJIT32_64.cpp:
25705 (JSC::DFG::SpeculativeJIT::compile):
25707 2011-11-28 Filip Pizlo <fpizlo@apple.com>
25709 Unreviewed build fixes for ARM.
25711 * assembler/MacroAssemblerARMv7.h:
25712 (JSC::MacroAssemblerARMv7::readCallTarget):
25713 * dfg/DFGSpeculativeJIT.h:
25714 (JSC::DFG::SpeculativeJIT::setupArgumentsWithExecState):
25716 2011-11-20 Roland Steiner <rolandsteiner@chromium.org>
25718 <style scoped>: add ENABLE(STYLE_SCOPED) flag to WebKit
25719 https://bugs.webkit.org/show_bug.cgi?id=72848
25721 Add ENABLE_STYLE_SCOPED flag.
25723 Reviewed by Dimitri Glazkov.
25725 * Configurations/FeatureDefines.xcconfig:
25727 2011-11-28 Jon Lee <jonlee@apple.com>
25729 Create skeleton framework for notifications support in WK2
25730 https://bugs.webkit.org/show_bug.cgi?id=73253
25731 <rdar://problem/10356943>
25733 * Configurations/FeatureDefines.xcconfig: Split out ENABLE_NOTIFICATIONS based on platform.
25735 2011-11-28 Oliver Hunt <oliver@apple.com>
25739 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
25741 2011-11-28 Oliver Hunt <oliver@apple.com>
25745 * JavaScriptCore.gypi:
25747 2011-11-28 Filip Pizlo <fpizlo@apple.com>
25749 GetById should not always speculate cell
25750 https://bugs.webkit.org/show_bug.cgi?id=73181
25752 Reviewed by Gavin Barraclough.
25754 GetById will now speculate cell if the predictions of the base are cell.
25755 Otherwise it will do like the old JIT (and like the old non-speculative
25756 DFG JIT): if not cell, go straight to slow-path but otherwise don't OSR
25757 out. This is a 1% speed-up on SunSpider.
25759 * dfg/DFGAbstractState.cpp:
25760 (JSC::DFG::AbstractState::execute):
25761 * dfg/DFGOperations.cpp:
25762 * dfg/DFGOperations.h:
25763 * dfg/DFGSpeculativeJIT.h:
25764 (JSC::DFG::SpeculativeJIT::setupArgumentsWithExecState):
25765 (JSC::DFG::SpeculativeJIT::callOperation):
25766 * dfg/DFGSpeculativeJIT32_64.cpp:
25767 (JSC::DFG::SpeculativeJIT::cachedGetById):
25768 (JSC::DFG::SpeculativeJIT::compile):
25769 * dfg/DFGSpeculativeJIT64.cpp:
25770 (JSC::DFG::SpeculativeJIT::compile):
25772 2011-11-28 Oliver Hunt <oliver@apple.com>
25774 Move typed array implementations into wtf
25775 https://bugs.webkit.org/show_bug.cgi?id=73248
25777 Reviewed by Sam Weinig.
25779 Move typed array implementation files from WebCore to wtf. Inline the
25780 .cpp files for each of the array views to cut down on unnecessary exports
25781 and function call overhead for trivial operations.
25783 Added files to all the project files.
25785 * GNUmakefile.list.am:
25786 * JavaScriptCore.exp:
25787 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
25788 * JavaScriptCore.xcodeproj/project.pbxproj:
25789 * wtf/ArrayBuffer.cpp: Renamed from Source/WebCore/html/canvas/Float32Array.cpp.
25790 (WTF::ArrayBuffer::transfer):
25791 (WTF::ArrayBuffer::addView):
25792 (WTF::ArrayBuffer::removeView):
25793 * wtf/ArrayBuffer.h: Renamed from Source/WebCore/html/canvas/ArrayBuffer.cpp.
25794 (WTF::ArrayBufferContents::ArrayBufferContents):
25795 (WTF::ArrayBufferContents::data):
25796 (WTF::ArrayBufferContents::sizeInBytes):
25797 (WTF::ArrayBufferContents::transfer):
25798 (WTF::ArrayBuffer::~ArrayBuffer):
25799 (WTF::ArrayBuffer::clampValue):
25800 (WTF::ArrayBuffer::create):
25801 (WTF::ArrayBuffer::ArrayBuffer):
25802 (WTF::ArrayBuffer::data):
25803 (WTF::ArrayBuffer::byteLength):
25804 (WTF::ArrayBuffer::slice):
25805 (WTF::ArrayBuffer::sliceImpl):
25806 (WTF::ArrayBuffer::clampIndex):
25807 (WTF::ArrayBufferContents::tryAllocate):
25808 (WTF::ArrayBufferContents::~ArrayBufferContents):
25809 * wtf/ArrayBufferView.cpp: Copied from Source/WebCore/bindings/js/JSArrayBufferCustom.cpp.
25810 (WTF::ArrayBufferView::ArrayBufferView):
25811 (WTF::ArrayBufferView::~ArrayBufferView):
25812 (WTF::ArrayBufferView::neuter):
25813 * wtf/ArrayBufferView.h: Renamed from Source/WebCore/html/canvas/ArrayBufferView.h.
25814 (WTF::ArrayBufferView::isByteArray):
25815 (WTF::ArrayBufferView::isUnsignedByteArray):
25816 (WTF::ArrayBufferView::isShortArray):
25817 (WTF::ArrayBufferView::isUnsignedShortArray):
25818 (WTF::ArrayBufferView::isIntArray):
25819 (WTF::ArrayBufferView::isUnsignedIntArray):
25820 (WTF::ArrayBufferView::isFloatArray):
25821 (WTF::ArrayBufferView::isDoubleArray):
25822 (WTF::ArrayBufferView::isDataView):
25823 (WTF::ArrayBufferView::buffer):
25824 (WTF::ArrayBufferView::baseAddress):
25825 (WTF::ArrayBufferView::byteOffset):
25826 (WTF::ArrayBufferView::verifySubRange):
25827 (WTF::ArrayBufferView::clampOffsetAndNumElements):
25828 (WTF::ArrayBufferView::setImpl):
25829 (WTF::ArrayBufferView::setRangeImpl):
25830 (WTF::ArrayBufferView::zeroRangeImpl):
25831 (WTF::ArrayBufferView::calculateOffsetAndLength):
25832 * wtf/CMakeLists.txt:
25833 * wtf/Float32Array.h: Renamed from Source/WebCore/html/canvas/Float32Array.h.
25834 (WTF::Float32Array::set):
25835 (WTF::Float32Array::item):
25836 (WTF::Float32Array::isFloatArray):
25837 (WTF::Float32Array::create):
25838 (WTF::Float32Array::Float32Array):
25839 (WTF::Float32Array::subarray):
25840 * wtf/Float64Array.h: Renamed from Source/WebCore/html/canvas/Float64Array.h.
25841 (WTF::Float64Array::set):
25842 (WTF::Float64Array::item):
25843 (WTF::Float64Array::isDoubleArray):
25844 (WTF::Float64Array::create):
25845 (WTF::Float64Array::Float64Array):
25846 (WTF::Float64Array::subarray):
25847 * wtf/Int16Array.h: Renamed from Source/WebCore/html/canvas/Int16Array.cpp.
25848 (WTF::Int16Array::set):
25849 (WTF::Int16Array::isShortArray):
25850 (WTF::Int16Array::create):
25851 (WTF::Int16Array::Int16Array):
25852 (WTF::Int16Array::subarray):
25853 * wtf/Int32Array.h: Renamed from Source/WebCore/html/canvas/Int32Array.cpp.
25854 (WTF::Int32Array::set):
25855 (WTF::Int32Array::isIntArray):
25856 (WTF::Int32Array::create):
25857 (WTF::Int32Array::Int32Array):
25858 (WTF::Int32Array::subarray):
25859 * wtf/Int8Array.h: Renamed from Source/WebCore/html/canvas/Int8Array.cpp.
25860 (WTF::Int8Array::set):
25861 (WTF::Int8Array::isByteArray):
25862 (WTF::Int8Array::create):
25863 (WTF::Int8Array::Int8Array):
25864 (WTF::Int8Array::subarray):
25865 * wtf/IntegralTypedArrayBase.h: Renamed from Source/WebCore/html/canvas/IntegralTypedArrayBase.h.
25866 (WTF::IntegralTypedArrayBase::set):
25867 (WTF::IntegralTypedArrayBase::item):
25868 (WTF::IntegralTypedArrayBase::IntegralTypedArrayBase):
25869 * wtf/TypedArrayBase.h: Renamed from Source/WebCore/html/canvas/TypedArrayBase.h.
25870 (WTF::TypedArrayBase::data):
25871 (WTF::TypedArrayBase::set):
25872 (WTF::TypedArrayBase::setRange):
25873 (WTF::TypedArrayBase::zeroRange):
25874 (WTF::TypedArrayBase::length):
25875 (WTF::TypedArrayBase::byteLength):
25876 (WTF::TypedArrayBase::TypedArrayBase):
25877 (WTF::TypedArrayBase::create):
25878 (WTF::TypedArrayBase::subarrayImpl):
25879 * wtf/Uint16Array.h: Renamed from Source/WebCore/html/canvas/Uint16Array.cpp.
25880 (WTF::Uint16Array::set):
25881 (WTF::Uint16Array::isUnsignedShortArray):
25882 (WTF::Uint16Array::create):
25883 (WTF::Uint16Array::Uint16Array):
25884 (WTF::Uint16Array::subarray):
25885 * wtf/Uint32Array.h: Renamed from Source/WebCore/html/canvas/Uint32Array.cpp.
25886 (WTF::Uint32Array::set):
25887 (WTF::Uint32Array::isUnsignedIntArray):
25888 (WTF::Uint32Array::create):
25889 (WTF::Uint32Array::Uint32Array):
25890 (WTF::Uint32Array::subarray):
25891 * wtf/Uint8Array.h: Renamed from Source/WebCore/html/canvas/Uint8Array.h.
25892 (WTF::Uint8Array::set):
25893 (WTF::Uint8Array::isUnsignedByteArray):
25894 (WTF::Uint8Array::create):
25895 (WTF::Uint8Array::Uint8Array):
25896 (WTF::Uint8Array::subarray):
25899 2011-11-27 Filip Pizlo <fpizlo@apple.com>
25901 Don't try to optimize huge code blocks
25902 https://bugs.webkit.org/show_bug.cgi?id=73187
25904 Reviewed by Oliver Hunt.
25906 This unifies the heuristics used for deciding if a code block is too big
25907 to optimize, and sets this heuristic to 1000, which is intuitively better
25908 than numeric_limits<unsigned>::max(). It also results in what looks like
25909 a speed-up on both SunSpider and V8 (in Tools/Scripts/bencher).
25911 * dfg/DFGCapabilities.h:
25912 (JSC::DFG::mightCompileEval):
25913 (JSC::DFG::mightCompileProgram):
25914 (JSC::DFG::mightCompileFunctionForCall):
25915 (JSC::DFG::mightCompileFunctionForConstruct):
25916 * runtime/Heuristics.cpp:
25917 (JSC::Heuristics::initializeHeuristics):
25918 * runtime/Heuristics.h:
25920 2011-11-28 Filip Pizlo <fpizlo@apple.com>
25922 Either remove the GetMethod node from the DFG backend, or find a use for it
25923 https://bugs.webkit.org/show_bug.cgi?id=73178
25925 Reviewed by Gavin Barraclough.
25927 More testing seemed to imply that the GetMethod code was indeed not profitable
25928 in any major test. So, it's probably best to just remove it.
25930 * bytecode/CodeBlock.cpp:
25931 (JSC::MethodCallLinkInfo::reset):
25932 * dfg/DFGAbstractState.cpp:
25933 (JSC::DFG::AbstractState::execute):
25934 * dfg/DFGJITCompiler.cpp:
25935 (JSC::DFG::JITCompiler::link):
25936 * dfg/DFGJITCompiler.h:
25938 (JSC::DFG::Node::hasIdentifier):
25939 (JSC::DFG::Node::hasHeapPrediction):
25940 * dfg/DFGOperations.cpp:
25941 * dfg/DFGOperations.h:
25942 * dfg/DFGPropagator.cpp:
25943 (JSC::DFG::Propagator::propagateNodePredictions):
25944 * dfg/DFGRepatch.cpp:
25945 * dfg/DFGRepatch.h:
25946 * dfg/DFGSpeculativeJIT.h:
25947 * dfg/DFGSpeculativeJIT32_64.cpp:
25948 (JSC::DFG::SpeculativeJIT::cachedGetById):
25949 (JSC::DFG::SpeculativeJIT::compile):
25950 * dfg/DFGSpeculativeJIT64.cpp:
25951 (JSC::DFG::SpeculativeJIT::cachedGetById):
25952 (JSC::DFG::SpeculativeJIT::compile):
25954 2011-11-28 Michael Saboff <msaboff@apple.com>
25956 Change set 101187 from bug 73154 removed already lower case optimization
25957 https://bugs.webkit.org/show_bug.cgi?id=73174
25959 Added back the "string is already lower case" optimization.
25961 Reviewed by Geoffrey Garen.
25963 * runtime/StringPrototype.cpp:
25964 (JSC::stringProtoFuncToLowerCase):
25966 2011-11-28 Simon Hausmann <simon.hausmann@nokia.com>
25968 Unreviewed prospective build fix. Touch the file to trigger correct
25969 rebuild on the Qt mips/sh4/sl bot.
25971 * wtf/unicode/qt4/UnicodeQt4.h:
25973 2011-11-28 Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
25975 [Qt] Remove cruft from project file
25977 Reviewed by Simon Hausmann.
25981 2011-11-28 Simon Hausmann <simon.hausmann@nokia.com>
25983 [Qt] WTF should be built as separate static library
25984 https://bugs.webkit.org/show_bug.cgi?id=73201
25986 Reviewed by Tor Arne Vestbø.
25988 * Target.pri: Don't claim to build WTF, as that would cause
25989 the debug-with-shlibs build to not link in wtf.
25990 * jsc.pro: Require wtf.
25991 * wtf/wtf.pri: Removed.
25992 * wtf/wtf.pro: Added. Pro file to build wtf statically.
25994 2011-11-28 Martin Robinson <mrobinson@igalia.com>
25996 [GTK] JavaScriptCore generated sources should build in the DerivedSources directory
25997 https://bugs.webkit.org/show_bug.cgi?id=73197
25999 Reviewed by Philippe Normand.
26001 Build all JavaScriptCore generated sources in DerivedSources.
26003 * GNUmakefile.am: Update generation rules.
26004 * GNUmakefile.list.am: Update source lists.
26006 2011-11-27 Filip Pizlo <fpizlo@apple.com>
26008 DFG should not emit GetMethod node
26009 https://bugs.webkit.org/show_bug.cgi?id=73175
26011 Reviewed by Gavin Barraclough.
26013 Replaces all instances of the GetMethod node with GetById. This appears to
26014 be a slight win on V8. This patch leaves GetMethod support in the code-base,
26015 making this decision easy to reverse, for now.
26017 * dfg/DFGByteCodeParser.cpp:
26018 (JSC::DFG::ByteCodeParser::parseBlock):
26020 2011-11-26 Hajime Morrita <morrita@chromium.org>
26022 Needs WTF_INLINE and JS_INLINE
26023 https://bugs.webkit.org/show_bug.cgi?id=72853
26025 Reviewed by Kevin Ollivier.
26027 Added WTF_HIDDEN, WTF_INLINE and JS_INLINE which
26028 indirect __attribute__((visibility("hidden"))
26031 * wtf/ExportMacros.h:
26033 2011-11-25 Michael Saboff <msaboff@apple.com>
26035 String.prototype.toLower should be optimized for 8 bit strings
26036 https://bugs.webkit.org/show_bug.cgi?id=73154
26038 Changed stringProtoFuncToLowerCase to use StringImpl::lower() which has
26039 been optimized for 8 bit strings.
26041 This is worth ~7% to sunspider string.tagcloud.
26043 Reviewed by Filip Pizlo.
26045 * runtime/StringPrototype.cpp:
26046 (JSC::stringProtoFuncToLowerCase):
26048 2011-11-25 Michael Saboff <msaboff@apple.com>
26050 Array.toString always uses StringImpl::characters()
26051 https://bugs.webkit.org/show_bug.cgi?id=72969
26053 If all component strings are 8 bit, create an 8 bit result string for toString().
26055 This appears to be performance neutral to sunspider and v8.
26057 Reviewed by Filip Pizlo.
26059 * runtime/ArrayPrototype.cpp:
26060 (JSC::arrayProtoFuncToString):
26062 2011-11-24 Michael Saboff <msaboff@apple.com>
26064 UString methods are not character size aware
26065 https://bugs.webkit.org/show_bug.cgi?id=72975
26067 Changed the UString number constructors to build 8 bit strings.
26068 Modified the other methods to check string bitness and process
26069 with 8 bits wherre appropriate.
26071 * runtime/UString.cpp:
26072 (JSC::UString::number):
26075 (JSC::UString::ascii):
26077 2011-11-24 Michael Saboff <msaboff@apple.com>
26079 JavaScript string to number conversion functions use characters()
26080 https://bugs.webkit.org/show_bug.cgi?id=72974
26082 Change the various JS to number routines to process strings
26083 using characters8() or characters16() as appropriate.
26084 Implemented using static template methods.
26086 Reviewed by Filip Pizlo.
26088 * runtime/JSGlobalObjectFunctions.cpp:
26090 (JSC::jsHexIntegerLiteral):
26091 (JSC::jsStrDecimalLiteral):
26095 2011-11-24 Michael Saboff <msaboff@apple.com>
26097 Empty JSStrings are created as 16 bit
26098 https://bugs.webkit.org/show_bug.cgi?id=72968
26100 Clear m_is8Bit flag for empty strings.
26102 Reviewed by Filip Pizlo.
26104 * runtime/JSString.h:
26105 (JSC::RopeBuilder::finishCreation):
26107 2011-11-24 Michael Saboff <msaboff@apple.com>
26109 Tune JSStringBuilder for 8 bit Strings
26110 https://bugs.webkit.org/show_bug.cgi?id=72683
26112 Changed JSStringBuilder to use 8 bit buffers until 16 bit data is added.
26113 When 16 bit data is to be added, the 8 bit buffer is converted to 16 bit
26114 and building continues with a 16 bit buffer.
26116 Reviewed by Filip Pizlo.
26118 * runtime/JSStringBuilder.h:
26119 (JSC::JSStringBuilder::JSStringBuilder):
26120 (JSC::JSStringBuilder::append):
26121 (JSC::JSStringBuilder::upConvert):
26122 (JSC::JSStringBuilder::build):
26123 * runtime/UString.h:
26124 (JSC::UString::adopt):
26125 * wtf/text/StringImpl.h:
26126 (WTF::StringImpl::adopt):
26128 2011-11-24 Zeno Albisser <zeno@webkit.org>
26130 [Qt]WK2][Mac] Use Mac port's IPC implementation instead of Unix sockets
26131 https://bugs.webkit.org/show_bug.cgi?id=72495
26133 Update defines to not use Unix Domain Sockets for platform Qt on Mac.
26134 This enables Qt to reuse existing code for mach ports and Grand
26135 Central Dispatch based IPC.
26137 Reviewed by Simon Hausmann.
26141 2011-11-24 Simon Hausmann <simon.hausmann@nokia.com>
26143 [Qt] REGRESSION(r101131): WTF::scheduleDispatchFunctionsOnMainThread() doesn't work reliably
26145 Reviewed by Andreas Kling.
26147 We must make sure that the MainThreadInvoker object lives in the gui thread. There are a few
26148 ways of doing that and this fix seems like the least intrusive one by simply pushing the
26149 invoker to the gui thread if it's not there already.
26151 * wtf/qt/MainThreadQt.cpp:
26152 (WTF::scheduleDispatchFunctionsOnMainThread):
26154 2011-11-24 Patrick Gansterer <paroga@webkit.org>
26156 [Qt] Use QEvent for dispatchFunctionsFromMainThread()
26157 https://bugs.webkit.org/show_bug.cgi?id=72704
26159 Reviewed by Simon Hausmann.
26161 Replace QMetaObject::invokeMethod with QCoreApplication::postEvent.
26162 This is the same as what invokeMethod does internally, but reduces
26163 the dependency on some internal QThread stuff.
26165 * wtf/qt/MainThreadQt.cpp:
26166 (WTF::MainThreadInvoker::MainThreadInvoker):
26167 (WTF::MainThreadInvoker::event):
26168 (WTF::scheduleDispatchFunctionsOnMainThread):
26170 2011-11-23 George Staikos <staikos@webkit.org>
26172 Remove BlackBerry OS support from RandomNumberSeed, making QNX=UNIX.
26173 https://bugs.webkit.org/show_bug.cgi?id=73028
26175 Reviewed by Daniel Bates.
26177 * wtf/RandomNumberSeed.h:
26178 (WTF::initializeRandomNumberGenerator):
26180 2011-11-23 Nikolas Zimmermann <nzimmermann@rim.com>
26182 Add flags/precision arguments to String::number(double) to allow fine-grained control over the result string
26183 https://bugs.webkit.org/show_bug.cgi?id=72793
26185 Reviewed by Zoltan Herczeg.
26187 This new code will be used in follow-up patches to replace the String::format("%.2f") usage in
26188 platform/text/TextStream.cpp, and String::format("%.6lg") usage in svg/SVGPathStringBuilder.cpp.
26190 The String::number(double) currently calls String::format("%.6lg") in trunk. In order to replace
26191 this by a variant that properly rounds to six significant figures, JSC code could be refactored.
26192 JSCs Number.toPrecision/toFixed uses wtf/dtoa/double-conversion which provides all features we need,
26193 except truncating trailing zeros, needed to mimic the "g" format, which is either f or e but with
26194 trailing zeros removed, producing shorter results. Changed the default signature to:
26196 "static String number(double, unsigned = ShouldRoundSignificantFigures | ShouldTruncateTrailingZeros, unsigned precision = 6);".
26198 In WebCore we can now replace String::format() calls like this:
26199 String::format("%.2f", f) -> String::number(f, ShouldRoundDecimalPlaces, 2)
26200 String::format("%.6lg", f) -> String::number(f)
26202 The default parameters for precison & flags exactly match the format of the string produced now, except that the result
26203 is rounded according to the rounding mode / formatting mode and precision. This paves the way towards reliable results
26204 in the d="" attribute dumps of SVG paths across platforms. The dtoa rounding code enforces a unique zero, resolving
26205 all 0.0 vs. -0.0 issues currently seen on Windows, and some Gtk/Qt bots.
26207 This patch needs a rebaseline of svg/dom/length-list-parser.html as we don't perfecly mimic the String::format() "lg" mode
26208 result for exponentials, we used to return eg. "e-7" and now return "e-07" - the trailing zero truncation hasn't been
26209 implemented for exponentials, as this really affects only this test and thus wasn't worth the trouble - in contrary the
26210 trailing zero truncation is needed for thousands of other results in "f" notation, and thus needed to match the DRT results.
26212 Here's a performance comparision using a JSC release build and some arbitary numbers:
26213 Converting 123.456 using old approach took 95.527100ms. avg 0.000955ms/call.
26214 Converting 123.456 using new approach took 28.126953ms. avg 0.000281ms/call.
26216 Converting 123 using old approach took 85.411133ms. avg 0.000854ms/call.
26217 Converting 123 using new approach took 24.190186ms. avg 0.000242ms/call.
26219 Converting 0.1 using old approach took 92.622803ms. avg 0.000926ms/call.
26220 Converting 0.1 using new approach took 23.317871ms. avg 0.000233ms/call.
26222 Converting 1/i using old approach took 106.893066ms. avg 0.001069ms/call.
26223 Converting 1/i using new approach took 27.164062ms. avg 0.000272ms/call.
26225 For all numbers I've tested in RoundingSignificantFigures mode and 6 digit precision the speedup was at least 250%.
26227 * JavaScriptCore.exp: Change String::number(double) signature.
26228 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Ditto.
26229 * runtime/NumberPrototype.cpp:
26230 (JSC::numberProtoFuncToFixed): Refactor this into numberToFixedPrecisionString(), move to wtf/dtoa.cpp.
26231 (JSC::numberProtoFuncToPrecision): Ditto, refactor this into numberToFixedWidthString.
26232 * wtf/dtoa.cpp: Moved fixedWidth/Precision helpers into dtoa, extend numberToFixedPrecisionString(). Add a mode which allows to truncate trailing zeros/decimal point.
26233 to make it possible to use them to generate strings that match the output from String::format("%6.lg"), while using our dtoas rounding facilities.
26235 * wtf/dtoa/utils.h: Expose new helper method, which allows us to truncate the result, before generating the output const char*.
26236 (WTF::double_conversion::StringBuilder::SetPosition):
26237 * wtf/text/WTFString.cpp:
26238 (WTF::String::number): Remove String::format("%6.lg") usage! Switch to rounding to six significant figures, while matching the output of String::format.
26239 * wtf/text/WTFString.h:
26241 2011-11-23 Hajime Morrita <morrita@chromium.org>
26243 WTF::String has extra WTF_EXPORT_PRIVATE
26244 https://bugs.webkit.org/show_bug.cgi?id=72858
26246 Reviewed by Kevin Ollivier.
26248 * wtf/text/WTFString.h:
26249 (WTF::String::String):
26251 2011-11-23 Raphael Kubo da Costa <kubo@profusion.mobi>
26253 [CMake] Move the top-level logic to the top-level directory.
26254 https://bugs.webkit.org/show_bug.cgi?id=72685
26256 Reviewed by Brent Fulgham.
26258 * CMakeLists.txt: Point to the right Source/ directory.
26259 * wtf/CMakeLists.txt: Ditto.
26261 2011-11-22 Yuqiang Xian <yuqiang.xian@intel.com>
26263 Strength reduction for Mul and Mod operations for known constants in DFG
26264 https://bugs.webkit.org/show_bug.cgi?id=72878
26266 Reviewed by Filip Pizlo.
26268 Also the code should be commonly shared by both 32_64 and 64.
26271 (JSC::DFG::nodeMayOverflow):
26272 * dfg/DFGSpeculativeJIT.cpp:
26273 (JSC::DFG::fmodAsDFGOperation):
26274 (JSC::DFG::SpeculativeJIT::compileInstanceOf):
26275 (JSC::DFG::isPowerOfTwo):
26276 (JSC::DFG::logTwo):
26277 (JSC::DFG::SpeculativeJIT::compileSoftModulo):
26278 (JSC::DFG::SpeculativeJIT::compileArithMul):
26279 (JSC::DFG::SpeculativeJIT::compileArithMod):
26280 * dfg/DFGSpeculativeJIT.h:
26281 * dfg/DFGSpeculativeJIT32_64.cpp:
26282 (JSC::DFG::SpeculativeJIT::compile):
26283 * dfg/DFGSpeculativeJIT64.cpp:
26284 (JSC::DFG::SpeculativeJIT::compile):
26286 2011-11-22 Daniel Bates <dbates@rim.com>
26288 Add WTF infrastructure for the BlackBerry port
26289 https://bugs.webkit.org/show_bug.cgi?id=72970
26291 Reviewed by Antonio Gomes.
26293 * wtf/Assertions.cpp: Added BlackBerry-specific logging directive.
26294 * wtf/MathExtras.h:
26295 (abs): Added; stdlib doesn't contain abs() on QNX.
26296 * wtf/Platform.h: Define WTF_PLATFORM_BLACKBERRY and enable some platform features.
26297 * wtf/RandomNumberSeed.h:
26298 (WTF::initializeRandomNumberGenerator): For the BlackBerry port, we initialize
26299 the bad pseudo random number generator using time(3) before initializing the
26300 Mersenne Twister random number generator.
26301 * wtf/ThreadingPthreads.cpp:
26302 (WTF::createThreadInternal): Added.
26303 * wtf/blackberry: Added.
26304 * wtf/blackberry/MainThreadBlackBerry.cpp: Added.
26305 (WTF::initializeMainThreadPlatform):
26306 (WTF::scheduleDispatchFunctionsOnMainThread):
26307 * wtf/text/WTFString.h: Added constructor and conversion operator for
26308 BlackBerry WebString string object.
26310 2011-11-22 Sheriff Bot <webkit.review.bot@gmail.com>
26312 Unreviewed, rolling out r100988.
26313 http://trac.webkit.org/changeset/100988
26314 https://bugs.webkit.org/show_bug.cgi?id=72941
26316 "Broke pixel tests on Chromium-Linux" (Requested by kbalazs on
26319 * JavaScriptCore.gypi:
26320 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
26321 * wtf/ParallelJobs.h:
26322 * wtf/ParallelJobsGeneric.cpp:
26323 * wtf/ParallelJobsGeneric.h:
26324 (WTF::ParallelEnvironment::ParallelEnvironment):
26325 (WTF::ParallelEnvironment::execute):
26328 2011-11-21 Balazs Kelemen <kbalazs@webkit.org>
26330 Enable ParallelJobs by default
26331 https://bugs.webkit.org/show_bug.cgi?id=70032
26333 Reviewed by Zoltan Herczeg.
26335 According to measurements on Mac and Linux it is a
26336 considerable speedup for SVG on multicore.
26338 Remove the ENABLE(PARALLEL_JOBS) guard.
26339 Fix build on Windows and Chromium.
26341 * JavaScriptCore.gypi: Add the files to the build. It was
26342 missing for the gyp build system.
26343 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
26345 * wtf/ParallelJobs.h:
26346 * wtf/ParallelJobsGeneric.cpp:
26347 (WTF::ParallelEnvironment::ParallelEnvironment):
26348 (WTF::ParallelEnvironment::execute):
26349 Deinline these to avoid exporting a lot of symbols.
26350 These are non-trivial and called only once on a given object
26351 so it doesn't seems to be worthwile to inline them.
26352 Additionally fix a signed-unsigned comparison in the constructor.
26353 * wtf/ParallelJobsGeneric.h:
26356 2011-11-21 Filip Pizlo <fpizlo@apple.com>
26358 DFG should have richer debug output for CFA and phi processing
26359 https://bugs.webkit.org/show_bug.cgi?id=72922
26361 Reviewed by Gavin Barraclough.
26363 In the default verbose mode, we now print information about variable
26364 state at the bottom of basic blocks in addition to the top, and we
26365 also print local variable linking. In the verbose propagation mode,
26366 the state of phi processing is dumped more richly and CFA merging (the
26367 most subtle part of CFA) is traced as well.
26369 * dfg/DFGAbstractState.cpp:
26370 (JSC::DFG::AbstractState::endBasicBlock):
26371 (JSC::DFG::AbstractState::mergeStateAtTail):
26372 * dfg/DFGAbstractValue.h:
26373 (JSC::DFG::StructureAbstractValue::dump):
26374 (JSC::DFG::AbstractValue::dump):
26375 * dfg/DFGByteCodeParser.cpp:
26376 (JSC::DFG::ByteCodeParser::processPhiStack):
26377 (JSC::DFG::ByteCodeParser::parse):
26379 (JSC::DFG::NodeIndexTraits::dump):
26380 * dfg/DFGDriver.cpp:
26381 (JSC::DFG::compile):
26382 * dfg/DFGGraph.cpp:
26383 (JSC::DFG::Graph::dump):
26385 (JSC::DFG::Node::dumpChildren):
26386 * dfg/DFGOSRExitCompiler.cpp:
26387 * dfg/DFGOperands.h:
26388 (JSC::DFG::OperandValueTraits::dump):
26389 (JSC::DFG::dumpOperands):
26391 2011-11-21 Filip Pizlo <fpizlo@apple.com>
26393 Showing the data overlay in OpenStreetMap doesn't work, zooming partially broken
26394 https://bugs.webkit.org/show_bug.cgi?id=71505
26396 Reviewed by Gavin Barraclough.
26398 It turns out that we were corrupting phi nodes in case of overflow. The bug is
26399 really obvious, but producing a test case that causes the badness is hard. Even
26400 when the phi nodes do get corrupt, there's more that has to happen before it
26401 causes incorrect execution - and I wasn't able to reproduce in any kind of
26402 sensible reduced case.
26404 * dfg/DFGByteCodeParser.cpp:
26405 (JSC::DFG::ByteCodeParser::processPhiStack):
26407 2011-11-21 Simon Hausmann <simon.hausmann@nokia.com>
26409 [Qt] Speed up debug builds.
26410 https://bugs.webkit.org/show_bug.cgi?id=72882
26412 Reviewed by Tor Arne Vestbø.
26414 * Target.pri: Make BUILDING_JavaScriptCore available earlier, so it can be
26415 used by the build system.
26417 2011-11-21 Sheriff Bot <webkit.review.bot@gmail.com>
26419 Unreviewed, rolling out r100913.
26420 http://trac.webkit.org/changeset/100913
26421 https://bugs.webkit.org/show_bug.cgi?id=72885
26423 "Break Windows build" (Requested by kbalazs on #webkit).
26425 * JavaScriptCore.gypi:
26426 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
26427 * wtf/ParallelJobs.h:
26428 * wtf/ParallelJobsGeneric.cpp:
26429 * wtf/ParallelJobsGeneric.h:
26430 (WTF::ParallelEnvironment::ParallelEnvironment):
26431 (WTF::ParallelEnvironment::execute):
26434 2011-11-21 Balazs Kelemen <kbalazs@webkit.org>
26436 Enable ParallelJobs by default
26437 https://bugs.webkit.org/show_bug.cgi?id=70032
26439 Reviewed by Zoltan Herczeg.
26441 According to measurements on Mac and Linux it is a
26442 considerable speedup for SVG on multicore.
26444 Remove the ENABLE(PARALLEL_JOBS) guard.
26445 Fix build on Windows and Chromium.
26447 * JavaScriptCore.gypi: Add the files to the build. It was
26448 missing for the gyp build system.
26449 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
26451 * wtf/ParallelJobs.h:
26452 * wtf/ParallelJobsGeneric.cpp:
26453 (WTF::ParallelEnvironment::ParallelEnvironment):
26454 (WTF::ParallelEnvironment::execute):
26455 Deinline these to avoid exporting a lot of symbols.
26456 These are non-trivial and called only once on a given object
26457 so it doesn't seems to be worthwile to inline them.
26458 Additionally fix a signed-unsigned comparison in the constructor.
26459 * wtf/ParallelJobsGeneric.h:
26462 2011-11-21 Andy Wingo <wingo@igalia.com>
26464 Add .dir-locals.el file for better Emacs defaults
26465 https://bugs.webkit.org/show_bug.cgi?id=72483
26467 Reviewed by Xan Lopez.
26469 * .dir-locals.el: Set appropriate directory-local variables for Emacs.
26471 2011-11-21 Filip Pizlo <fpizlo@apple.com>
26473 Another attempt at a build fix.
26475 * dfg/DFGRepatch.h:
26476 (JSC::DFG::dfgResetGetByID):
26477 (JSC::DFG::dfgResetPutByID):
26479 2011-11-20 Filip Pizlo <fpizlo@apple.com>
26481 Unreviewed interpreter build fix.
26483 * bytecode/CodeBlock.cpp:
26484 (JSC::CodeBlock::finalizeUnconditionally):
26485 * dfg/DFGRepatch.h:
26487 2011-11-20 Yuqiang Xian <yuqiang.xian@intel.com>
26489 Improve modulo operation on 32bit platforms
26490 https://bugs.webkit.org/show_bug.cgi?id=72501
26492 Reviewed by Filip Pizlo.
26494 Extend softModulo to support X86 and MIPS in baseline JIT.
26495 Apply the same optimization to 32bit DFG JIT.
26496 1% gain on Kraken, tested on Linux Core i7 Nehalem 32bit.
26498 * dfg/DFGSpeculativeJIT.h:
26499 * dfg/DFGSpeculativeJIT32_64.cpp:
26500 (JSC::DFG::SpeculativeJIT::compileSoftModulo):
26501 (JSC::DFG::SpeculativeJIT::compile):
26502 * jit/JITArithmetic32_64.cpp:
26503 (JSC::JIT::emit_op_mod):
26504 (JSC::JIT::emitSlow_op_mod):
26505 * jit/JITOpcodes32_64.cpp:
26506 (JSC::JIT::softModulo):
26509 2011-11-18 Filip Pizlo <fpizlo@apple.com>
26511 Inline caches that refer to otherwise dead objects should be cleared
26512 https://bugs.webkit.org/show_bug.cgi?id=72311
26514 Reviewed by Geoff Garen.
26516 DFG code blocks now participate in the weak reference harvester fixpoint
26517 so that they only consider themselves to be live if either they are
26518 currently executing, or their owner is live and all of their weak references
26519 are live. If not, the relevant code blocks are jettisoned.
26521 Inline caches in both the old JIT and the DFG are now cleared if any of
26522 their references are not marked at the end of a GC.
26524 This is performance-neutral on SunSpider, V8, and Kraken. With the clear-
26525 all-code-on-GC policy that we currently have, it shows a slight reduction
26526 in memory usage. If we turn that policy off, it's pretty easy to come up
26527 with an example program that will cause ToT to experience linear heap
26528 growth, while with this patch, the heap stays small and remains at a
26531 * assembler/ARMv7Assembler.h:
26532 (JSC::ARMv7Assembler::readCallTarget):
26533 * assembler/MacroAssemblerARMv7.h:
26534 (JSC::MacroAssemblerARMv7::readCallTarget):
26535 * assembler/MacroAssemblerX86.h:
26536 (JSC::MacroAssemblerX86::readCallTarget):
26537 * assembler/MacroAssemblerX86_64.h:
26538 (JSC::MacroAssemblerX86_64::readCallTarget):
26539 * bytecode/CodeBlock.cpp:
26540 (JSC::CodeBlock::visitAggregate):
26541 (JSC::CodeBlock::performTracingFixpointIteration):
26542 (JSC::CodeBlock::visitWeakReferences):
26543 (JSC::CodeBlock::finalizeUnconditionally):
26544 (JSC::CodeBlock::stronglyVisitStrongReferences):
26545 (JSC::MethodCallLinkInfo::reset):
26546 (JSC::ProgramCodeBlock::jettison):
26547 (JSC::EvalCodeBlock::jettison):
26548 (JSC::FunctionCodeBlock::jettison):
26549 * bytecode/CodeBlock.h:
26550 (JSC::CodeBlock::reoptimize):
26551 (JSC::CodeBlock::shouldImmediatelyAssumeLivenessDuringScan):
26552 * bytecode/Instruction.h:
26553 (JSC::PolymorphicAccessStructureList::visitWeak):
26554 * bytecode/StructureStubInfo.cpp:
26555 (JSC::StructureStubInfo::visitWeakReferences):
26556 * bytecode/StructureStubInfo.h:
26557 (JSC::isGetByIdAccess):
26558 (JSC::isPutByIdAccess):
26559 (JSC::StructureStubInfo::reset):
26560 * dfg/DFGJITCompiler.cpp:
26561 (JSC::DFG::JITCompiler::link):
26562 * dfg/DFGOperations.cpp:
26563 * dfg/DFGRepatch.cpp:
26564 (JSC::DFG::dfgRepatchByIdSelfAccess):
26565 (JSC::DFG::dfgResetGetByID):
26566 (JSC::DFG::dfgResetPutByID):
26567 * dfg/DFGRepatch.h:
26568 (JSC::DFG::dfgResetGetByID):
26569 (JSC::DFG::dfgResetPutByID):
26571 * jit/JITPropertyAccess.cpp:
26572 (JSC::JIT::resetPatchGetById):
26573 (JSC::JIT::resetPatchPutById):
26574 * jit/JITPropertyAccess32_64.cpp:
26575 (JSC::JIT::resetPatchGetById):
26576 (JSC::JIT::resetPatchPutById):
26577 * jit/JITStubs.cpp:
26578 (JSC::DEFINE_STUB_FUNCTION):
26579 * jit/JITWriteBarrier.h:
26580 (JSC::JITWriteBarrierBase::clearToMaxUnsigned):
26582 2011-11-20 Filip Pizlo <fpizlo@apple.com>
26584 Showing the data overlay in OpenStreetMap doesn't work, zooming partially broken
26585 https://bugs.webkit.org/show_bug.cgi?id=71505
26587 Reviewed by Oliver Hunt.
26589 The bytecode generator was assuming that call_varargs never reuses the base register
26590 (i.e. the function being called) for the result. This is no longer true.
26592 * bytecompiler/BytecodeGenerator.cpp:
26593 (JSC::BytecodeGenerator::emitCallVarargs):
26594 * bytecompiler/BytecodeGenerator.h:
26595 * bytecompiler/NodesCodegen.cpp:
26596 (JSC::ApplyFunctionCallDotNode::emitBytecode):
26598 2011-11-20 Filip Pizlo <fpizlo@apple.com>
26600 DFG 32_64 should directly store double virtual registers on SetLocal
26601 https://bugs.webkit.org/show_bug.cgi?id=72845
26603 Reviewed by Oliver Hunt.
26607 * dfg/DFGSpeculativeJIT32_64.cpp:
26608 (JSC::DFG::SpeculativeJIT::compile):
26610 2011-11-20 Noel Gordon <noel.gordon@gmail.com>
26612 [chromium] Remove DFG::JITCodeGenerator from the gyp projects
26613 https://bugs.webkit.org/show_bug.cgi?id=72842
26615 Reviewed by Filip Pizlo.
26617 dfg/DFGJITCodeGenerator.{h,cpp} were removed in r100244
26619 * JavaScriptCore.gypi: remove dfg/DFGJITCodeGenerator.{h,cpp}
26621 2011-11-18 Daniel Bates <dbates@rim.com>
26623 Add CMake build infrastructure for the BlackBerry port
26624 https://bugs.webkit.org/show_bug.cgi?id=72768
26626 Reviewed by Antonio Gomes.
26628 * PlatformBlackBerry.cmake: Added.
26629 * shell/PlatformBlackBerry.cmake: Added.
26630 * wtf/PlatformBlackBerry.cmake: Added.
26632 2011-11-18 Filip Pizlo <fpizlo@apple.com>
26634 DFG JIT fails speculation on InstanceOf if the base is not an object
26635 https://bugs.webkit.org/show_bug.cgi?id=72709
26637 Reviewed by Geoff Garen.
26639 InstanceOf already leverages the fact that we only allow the default
26640 hasInstance implementation. So, if the base is predicted to possibly
26641 be not an object and the CFA has not yet proven otherwise, InstanceOf
26642 will abstain from speculating cell and instead return false if the
26643 base is not a cell.
26645 This appears to be a 1% speed-up on V8 on the V8 harness. 3-4% or so
26646 speed-up in earley-boyer. Neutral according to bencher on SunSpider,
26647 V8, and Kraken. In 32-bit, it's a 0.5% win on SunSpider and a 1.9%
26648 win on V8 even on my harness, due to a 12.5% win on earley-boyer.
26650 I also took this opportunity to make the code for InstanceOf common
26651 between the two JITs. This was partially successful, in that the
26652 "common code" has a bunch of #if's, but overall it seems like a code
26655 * dfg/DFGAbstractState.cpp:
26656 (JSC::DFG::AbstractState::execute):
26657 * dfg/DFGSpeculativeJIT.cpp:
26658 (JSC::DFG::SpeculativeJIT::compileInstanceOfForObject):
26659 (JSC::DFG::SpeculativeJIT::compileInstanceOf):
26660 * dfg/DFGSpeculativeJIT.h:
26661 * dfg/DFGSpeculativeJIT32_64.cpp:
26662 (JSC::DFG::SpeculativeJIT::compile):
26663 * dfg/DFGSpeculativeJIT64.cpp:
26664 (JSC::DFG::SpeculativeJIT::compile):
26666 2011-11-18 Mark Hahnenberg <mhahnenberg@apple.com>
26668 Forgot to completely de-virtualize isDynamicScope
26669 https://bugs.webkit.org/show_bug.cgi?id=72763
26671 Reviewed by Darin Adler.
26673 * runtime/JSActivation.h: Removed virtual keyword.
26675 2011-11-18 Filip Pizlo <fpizlo@apple.com>
26677 Crash in JSC::DFG::OSRExitCompiler::compileExit(JSC::DFG::OSRExit const&, JSC::DFG::SpeculationRecovery*)
26678 https://bugs.webkit.org/show_bug.cgi?id=72292
26680 Reviewed by Darin Adler.
26682 Fix this for 32_64.
26684 * dfg/DFGOSRExitCompiler32_64.cpp:
26685 (JSC::DFG::OSRExitCompiler::compileExit):
26687 2011-11-18 Mark Hahnenberg <mhahnenberg@apple.com>
26689 De-virtualize ExecutableBase::intrinsic
26690 https://bugs.webkit.org/show_bug.cgi?id=72548
26692 Reviewed by Oliver Hunt.
26694 * runtime/Executable.cpp:
26695 (JSC::ExecutableBase::intrinsic): Dynamic cast to NativeExecutable. If successful, call intrinsic, otherwise return default value.
26696 * runtime/Executable.h:
26697 * runtime/JSCell.h:
26698 (JSC::jsDynamicCast): Add jsDynamicCast that duplicates the functionality of dynamic_cast in C++ but uses ClassInfo
26699 rather than requiring C++ RTTI.
26701 2011-11-18 Patrick Gansterer <paroga@webkit.org>
26703 [CMake] Remove duplicate dtoa files from CMakeLists.txt
26704 https://bugs.webkit.org/show_bug.cgi?id=72711
26706 Reviewed by Brent Fulgham.
26708 * wtf/CMakeLists.txt:
26710 2011-11-17 Michael Saboff <msaboff@apple.com>
26712 [Qt] REGRESSION(r100510): Enable 8 Bit Strings in JavaScriptCore
26713 https://bugs.webkit.org/show_bug.cgi?id=72602
26715 Fixed StringImpl::foldCase by adding return in the case we need to handle
26716 folding of 8 bit strings with Latin-1 characters.
26718 Fixed case where StringImpl::replace was using a char temp instead of an
26721 Because of the second change, I changed other uses of char or
26722 unsigned char to LChar.
26724 Reviewed by Zoltan Herczeg.
26726 * wtf/text/StringImpl.cpp:
26727 (WTF::StringImpl::upper):
26728 (WTF::StringImpl::foldCase):
26730 (WTF::equalIgnoringCase):
26731 (WTF::StringImpl::replace):
26733 2011-11-17 Patrick Gansterer <paroga@webkit.org>
26735 [CMake] Move FAST_MALLOC specific lines from Platform*.cmake to CMakeLists.txt
26736 https://bugs.webkit.org/show_bug.cgi?id=72644
26738 Reviewed by Brent Fulgham.
26740 All ports need to do the same determination about fast malloc. Move the CMake code from
26741 platform specific files into the generic one, so that additional ports can reuse it.
26743 * wtf/CMakeLists.txt:
26744 * wtf/PlatformEfl.cmake:
26745 * wtf/PlatformWinCE.cmake:
26747 2011-11-17 Mark Hahnenberg <mhahnenberg@apple.com>
26749 Add finalizer to JSActivation
26750 https://bugs.webkit.org/show_bug.cgi?id=72575
26752 Reviewed by Geoffrey Garen.
26754 * runtime/JSActivation.cpp:
26755 (JSC::JSActivation::finishCreation): Attach finalize function to objects during creation.
26756 (JSC::JSActivation::finalize):
26757 * runtime/JSActivation.h: Replaced virtual destructor with static finalize function.
26759 2011-11-15 Filip Pizlo <fpizlo@apple.com>
26761 Code block jettisoning should be part of the GC's transitive closure
26762 https://bugs.webkit.org/show_bug.cgi?id=72467
26764 Reviewed by Geoff Garen.
26766 Replaced JettisonedCodeBlocks with DFGCodeBlocks. The latter knows about all
26767 DFG code blocks (i.e. those that may be jettisoned, and may have inlined weak
26768 references) and helps track what state each of those code blocks is in during
26769 GC. The state consists of two flags; mayBeExecuting, which tells if the code block
26770 is live from call frames; and isJettisoned, which tells if the code block is
26771 not owned by any executable and thus should be deleted as soon as it is not
26774 - Not executing, Not jettisoned: The code block may or may not be reachable from
26775 any executables, but it is owned by an executable, and hence should be
26776 kept alive if its executable is live and if all of its weak references are
26777 live. Otherwise it should be deleted during the current GC cycle, and its
26778 outgoing references should not be scanned.
26780 - Not executing but jettisoned: The code block should be deleted as soon as
26781 possible and none of its outgoing references should be scanned.
26783 - Executing but not jettisoned: The code block should be kept alive during this
26784 GC cycle, and all of its outgoing references (including the weak ones)
26785 should be scanned and marked strongly. The mayBeExecuting bit will be cleared at
26786 the end of the GC cycle.
26788 - Executing and jettisoned: The code block should be kept alive during this
26789 GC cycle, and all of its outgoing references (including the weak ones)
26790 should be scanned and marked strongly. However, on the next GC cycle, it
26791 will have its mayBeExecuting bit cleared and hence it will become a candidate
26792 for immediate deletion provided it is not executing again.
26794 This is performance-neutral.
26797 * GNUmakefile.list.am:
26798 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
26799 * JavaScriptCore.xcodeproj/project.pbxproj:
26801 * bytecode/CodeBlock.cpp:
26802 (JSC::CodeBlock::~CodeBlock):
26803 * bytecode/CodeBlock.h:
26804 (JSC::CodeBlock::setJITCode):
26805 (JSC::CodeBlock::DFGData::DFGData):
26806 (JSC::DFGCodeBlocks::mark):
26807 * heap/ConservativeRoots.cpp:
26808 (JSC::ConservativeRoots::add):
26809 * heap/ConservativeRoots.h:
26810 * heap/DFGCodeBlocks.cpp: Added.
26811 (JSC::DFGCodeBlocks::DFGCodeBlocks):
26812 (JSC::DFGCodeBlocks::~DFGCodeBlocks):
26813 (JSC::DFGCodeBlocks::jettison):
26814 (JSC::DFGCodeBlocks::clearMarks):
26815 (JSC::DFGCodeBlocks::deleteUnmarkedJettisonedCodeBlocks):
26816 (JSC::DFGCodeBlocks::traceMarkedCodeBlocks):
26817 * heap/DFGCodeBlocks.h: Added.
26819 (JSC::Heap::jettisonDFGCodeBlock):
26820 (JSC::Heap::markRoots):
26821 (JSC::Heap::collect):
26823 * heap/JettisonedCodeBlocks.cpp: Removed.
26824 * heap/JettisonedCodeBlocks.h: Removed.
26825 * interpreter/RegisterFile.cpp:
26826 (JSC::RegisterFile::gatherConservativeRoots):
26827 * interpreter/RegisterFile.h:
26828 * runtime/Executable.cpp:
26829 (JSC::jettisonCodeBlock):
26831 2011-11-16 Filip Pizlo <fpizlo@apple.com>
26833 Unreviewed, build fix for 32-bit.
26835 * dfg/DFGSpeculativeJIT32_64.cpp:
26836 (JSC::DFG::SpeculativeJIT::compile):
26838 2011-11-16 Geoffrey Garen <ggaren@apple.com>
26840 Some CachedCall cleanup, in preparation for reversing argument order.
26842 Reviewed by Gavin Barraclough.
26844 * bytecode/CodeBlock.cpp:
26845 (JSC::CodeBlock::stronglyVisitWeakReferences): A build fix for the interpreter,
26848 * interpreter/CachedCall.h:
26849 (JSC::CachedCall::CachedCall): Renamed argCount to argumentCount because
26850 we are not that desperate for character saving.
26852 (JSC::CachedCall::setThis):
26853 (JSC::CachedCall::setArgument): Adopted new 0-based argument indexing for
26856 * interpreter/CallFrameClosure.h:
26857 (JSC::CallFrameClosure::setThis):
26858 (JSC::CallFrameClosure::setArgument):
26859 (JSC::CallFrameClosure::resetCallFrame): Provide 0-based argument indexing,
26860 with an explicit setter for 'this', since that's how most clients think.
26862 * interpreter/Interpreter.cpp:
26863 (JSC::Interpreter::prepareForRepeatCall):
26864 * interpreter/Interpreter.h: Change argCount to argumentCountIncludingThis,
26867 2011-11-16 Mark Hahnenberg <mhahnenberg@apple.com>
26869 De-virtualize ScriptExecutable::unlinkCalls
26870 https://bugs.webkit.org/show_bug.cgi?id=72546
26872 Reviewed by Geoffrey Garen.
26874 * runtime/Executable.cpp:
26875 (JSC::FunctionExecutable::~FunctionExecutable): Added an empty explicit virtual destructor to prevent a very odd compilation error
26876 due to the fact that the compiler was trying to generate the implicit inline destructor in every translation unit, some of which
26877 didn't have complete type information on the things that needed to be destructed in the implicit destructor.
26878 * runtime/Executable.h:
26879 (JSC::EvalExecutable::createStructure): Used new type value from JSType
26880 (JSC::ProgramExecutable::createStructure): Ditto
26881 (JSC::FunctionExecutable::createStructure): Ditto
26882 (JSC::ScriptExecutable::unlinkCalls): Condition upon the type value, cast and call the corresponding unlinkCalls implementation.
26883 * runtime/JSType.h: Added new values for EvalExecutable, ProgramExecutable, and FunctionExecutable. Remove explicit numbers, since
26884 that just adds noise to patches and they currently have no significance.
26886 2011-11-16 Filip Pizlo <fpizlo@apple.com>
26888 JSC::CodeBlock should know which references generated by the DFG are weak
26889 https://bugs.webkit.org/show_bug.cgi?id=72563
26891 Reviewed by Geoff Garen.
26893 CodeBlock::m_dfgData now tracks weak references and weak reference transitions
26894 (like ephemerons) generated by the DFG. The DFG makes sure to notify the
26895 CodeBlock of all uses of weak references and weak reference transitions.
26896 CodeBlock currently marks them strongly, since the weak marking logic is not
26899 * bytecode/CodeBlock.cpp:
26900 (JSC::CodeBlock::visitAggregate):
26901 (JSC::CodeBlock::stronglyVisitWeakReferences):
26902 * bytecode/CodeBlock.h:
26903 (JSC::CodeBlock::appendWeakReference):
26904 (JSC::CodeBlock::shrinkWeakReferencesToFit):
26905 (JSC::CodeBlock::appendWeakReferenceTransition):
26906 (JSC::CodeBlock::shrinkWeakReferenceTransitionsToFit):
26907 (JSC::CodeBlock::WeakReferenceTransition::WeakReferenceTransition):
26908 * bytecode/CodeOrigin.h:
26909 (JSC::CodeOrigin::codeOriginOwner):
26910 * dfg/DFGByteCodeParser.cpp:
26911 (JSC::DFG::ByteCodeParser::handleCall):
26912 (JSC::DFG::ByteCodeParser::handleInlining):
26913 (JSC::DFG::ByteCodeParser::parseBlock):
26914 * dfg/DFGJITCompiler.cpp:
26915 (JSC::DFG::JITCompiler::link):
26916 * dfg/DFGJITCompiler.h:
26917 (JSC::DFG::JITCompiler::addWeakReference):
26918 (JSC::DFG::JITCompiler::addWeakReferenceTransition):
26919 (JSC::DFG::JITCompiler::branchWeakPtr):
26920 * dfg/DFGSpeculativeJIT.h:
26921 * dfg/DFGSpeculativeJIT32_64.cpp:
26922 (JSC::DFG::SpeculativeJIT::compile):
26923 * dfg/DFGSpeculativeJIT64.cpp:
26924 (JSC::DFG::SpeculativeJIT::fillJSValue):
26925 (JSC::DFG::SpeculativeJIT::compile):
26927 2011-11-16 Michael Saboff <msaboff@apple.com>
26929 LayoutTests for Debug Builds Crashes in JavaScriptCore/yarr/YarrInterpreter.cpp(185)
26930 https://bugs.webkit.org/show_bug.cgi?id=72561
26932 Removed #if USE(JSC) and therefore the ASSERT_NOT_REACHED().
26933 Simplified the code in the process.
26935 Reviewed by James Robinson.
26937 * yarr/YarrInterpreter.cpp:
26938 (JSC::Yarr::Interpreter::CharAccess::CharAccess):
26939 (JSC::Yarr::Interpreter::CharAccess::~CharAccess):
26941 2011-11-16 Geoffrey Garen <ggaren@apple.com>
26943 Interpreter build fixes.
26945 * bytecode/CodeBlock.h:
26946 * interpreter/Interpreter.cpp:
26947 (JSC::Interpreter::privateExecute):
26949 2011-11-16 Patrick Gansterer <paroga@webkit.org>
26951 Unreviewed. Build fix for !ENABLE(JIT) after r100363.
26953 * bytecode/CodeBlock.h:
26955 2011-11-16 Geoffrey Garen <ggaren@apple.com>
26957 Rolled back in r100375 and r100385 with 32-bit build fixed.
26959 * dfg/DFGOperations.cpp:
26960 * jit/JITStubs.cpp:
26961 (JSC::DEFINE_STUB_FUNCTION):
26962 * runtime/ArgList.cpp:
26963 (JSC::ArgList::getSlice):
26964 * runtime/ArgList.h:
26965 * runtime/JSArray.cpp:
26966 (JSC::JSArray::finishCreation):
26967 * runtime/JSArray.h:
26968 (JSC::JSArray::create):
26969 * runtime/JSGlobalObject.h:
26970 (JSC::constructArray):
26972 2011-11-16 Filip Pizlo <fpizlo@apple.com>
26974 DFG global variable CSE mishandles the cross-global-object inlining corner case
26975 https://bugs.webkit.org/show_bug.cgi?id=72542
26977 Reviewed by Geoff Garen.
26979 Moved code to get the global object for a code origin into CodeBlock, so it is
26980 more broadly accessible. Fixed CSE to compare both the variable number, and the
26981 global object, before deciding to perform elimination.
26983 * bytecode/CodeBlock.h:
26984 (JSC::CodeBlock::globalObjectFor):
26985 * dfg/DFGAssemblyHelpers.h:
26986 (JSC::DFG::AssemblyHelpers::globalObjectFor):
26987 * dfg/DFGPropagator.cpp:
26988 (JSC::DFG::Propagator::globalVarLoadElimination):
26989 (JSC::DFG::Propagator::performNodeCSE):
26991 2011-11-16 Michael Saboff <msaboff@apple.com>
26993 Enable 8 Bit Strings in JavaScriptCore
26994 https://bugs.webkit.org/show_bug.cgi?id=71337
26996 This patch turns on 8 bit strings in StringImpl and enables
26997 their use in JavaScriptCore. Some of the changes are to
26998 turn on code that had been staged (Lexer.cpp, Identifier.cpp,
26999 SmallStrings.cpp and some of StringImpl.{h,cpp}).
27000 Other changes are minor fixes to make 8 bit strings work
27001 (UString.h, StringImpl::getData16SlowCase()).
27002 Changed StringBuffer to be a templated class based on character
27003 type. This change rippled into WebCore code as well.
27005 Reviewed by Geoffrey Garen.
27007 * JavaScriptCore.exp:
27008 * parser/Lexer.cpp:
27009 (JSC::::append8): Changed to use 8 bit buffers.
27010 (JSC::::parseIdentifier): Changed to use 8 bit buffers.
27011 (JSC::::parseString): Changed to use 8 bit buffers.
27012 * runtime/Identifier.cpp:
27013 (JSC::IdentifierCStringTranslator::translate): 8 bit version keeps data 8 bit
27014 (JSC::Identifier::toUInt32FromCharacters): Templated helper.
27015 (JSC::Identifier::toUInt32): Added 8 bit optimized path.
27016 * runtime/SmallStrings.cpp:
27017 (JSC::SmallStringsStorage::SmallStringsStorage): Changed to be 8 bit strings
27018 * runtime/UString.h:
27019 (JSC::UString::characters): Now calls StringImpl::characters()
27021 * wtf/text/StringBuffer.h: Made StringBuffer a template base on character type.
27022 (WTF::StringBuffer::StringBuffer):
27023 (WTF::StringBuffer::characters):
27024 (WTF::StringBuffer::release):
27025 * wtf/text/StringImpl.cpp:
27026 (WTF::StringImpl::create):
27027 (WTF::StringImpl::getData16SlowCase): Fixed null terminated case.
27028 (WTF::StringImpl::removeCharacters): Added 8 bit path.
27029 (WTF::StringImpl::simplifyMatchedCharactersToSpace):
27030 (WTF::StringImpl::simplifyWhiteSpace):
27031 (WTF::equal): Removed bug from code copied from null terminated version.
27032 (WTF::StringImpl::adopt): Added 8 bit path.
27033 (WTF::StringImpl::createWithTerminatingNullCharacter): Fixed 8 bi flag propagation.
27034 * wtf/text/StringImpl.h:
27035 (WTF::StringImpl::StringImpl): Added new 8 bit constructor.
27036 (WTF::StringImpl::characters8): Removed ASSERT_NOT_REACHED().
27037 (WTF::getCharacters<LChar>): Added templated accessor for 8 bit strings.
27038 (WTF::getCharacters<UChar>): Added templated accessor for 16 bit strings.
27039 * wtf/text/WTFString.h:
27040 (WTF::String::adopt): Changed to use StringBuffer template.
27042 2011-11-16 Mark Hahnenberg <mhahnenberg@apple.com>
27044 De-virtualize ExecutableBase::clearCodeVirtual
27045 https://bugs.webkit.org/show_bug.cgi?id=72337
27047 Reviewed by Darin Adler.
27049 Added static finalize functions to the subclasses of ExecutableBase that provide an implementation
27050 of clearCodeVirtual, changed all of the clearCodeVirtual methods to non-virtual clearCode method,
27051 and had the finalize functions call the corresponding clearCode methods.
27053 * runtime/Executable.cpp:
27054 (JSC::ExecutableBase::clearCode):
27055 (JSC::NativeExecutable::finalize):
27056 (JSC::EvalExecutable::finalize):
27057 (JSC::EvalExecutable::clearCode):
27058 (JSC::ProgramExecutable::finalize):
27059 (JSC::ProgramExecutable::clearCode):
27060 (JSC::FunctionExecutable::discardCode):
27061 (JSC::FunctionExecutable::finalize):
27062 (JSC::FunctionExecutable::clearCode):
27063 * runtime/Executable.h:
27064 (JSC::ExecutableBase::finishCreation):
27065 (JSC::NativeExecutable::create):
27066 (JSC::EvalExecutable::create):
27067 (JSC::ProgramExecutable::create):
27068 (JSC::FunctionExecutable::create):
27070 2011-11-16 Yusuke Suzuki <utatane.tea@gmail.com>
27072 String new RegExp('\n').toString() returns is invalid RegularExpressionLiteral
27073 https://bugs.webkit.org/show_bug.cgi?id=71572
27075 Reviewed by Gavin Barraclough and Darin Adler.
27077 * runtime/RegExpObject.cpp:
27078 (JSC::regExpObjectSource):
27080 2011-11-16 Darin Adler <darin@apple.com>
27082 Specialize HashTraits for OwnPtr to use PassOwnPtr and raw pointer
27083 https://bugs.webkit.org/show_bug.cgi?id=72475
27085 Reviewed by Adam Roben.
27087 * wtf/HashTraits.h: Specialize HashTraits for OwnPtr.
27088 Do overloads so we can pass a nullptr and also be sure to get the
27089 raw pointer type from the OwnPtr template so we handle both forms
27090 of OwnPtr: OwnPtr<T> and OwnPtr<T*>.
27092 2011-11-16 Simon Hausmann <simon.hausmann@nokia.com>
27094 [Qt] Centralize hide_symbols and ensure all libs are built with symbol visibility & bsymbolic_functions
27096 Reviewed by Tor Arne Vestbø.
27098 * Target.pri: Eliminate duplicated symbol stuff that lives now in default_post.prf.
27100 2011-11-16 Simon Hausmann <simon.hausmann@nokia.com>
27102 Unreviewed, rolling out r100266.
27103 http://trac.webkit.org/changeset/100266
27109 2011-11-16 Darin Adler <darin@apple.com>
27111 Add a "pass type" and "peek type" concept to HashTraits
27112 https://bugs.webkit.org/show_bug.cgi?id=72473
27114 Reviewed by Filip Pizlo.
27116 * wtf/HashTraits.h: Added the pass type and peek type.
27117 For OwnPtr, the pass type will be PassOwnPtr and the peek
27118 type will be a raw pointer.
27120 2011-11-16 Darin Adler <darin@apple.com>
27122 Fix some hash traits that don't derive from the base hash traits
27123 https://bugs.webkit.org/show_bug.cgi?id=72470
27125 Reviewed by Filip Pizlo.
27127 Hash traits structures need to derive from the base hash traits in
27128 HashTraits.h, but some were not. This is needed for compatibility with
27129 some additional traits we will be adding to make OwnPtr work with HashMap.
27131 * runtime/Identifier.h: Make IdentifierMapIndexHashTraits derive from
27132 HashTraits<int>. This enabled removal of all the members except for the
27133 ones that control the empty value, because this is otherwise the same
27134 as the standard int hash.
27136 * runtime/SymbolTable.h: Changed SymbolTableIndexHashTraits to derive
27137 from HashTraits<SymbolTableEntry> and removed redundant members.
27139 2011-11-15 Sheriff Bot <webkit.review.bot@gmail.com>
27141 Unreviewed, rolling out r100375 and r100385.
27142 http://trac.webkit.org/changeset/100375
27143 http://trac.webkit.org/changeset/100385
27144 https://bugs.webkit.org/show_bug.cgi?id=72465
27146 They broke 32 bit builds on Qt (Requested by ossy on #webkit).
27148 * dfg/DFGOperations.cpp:
27149 * jit/JITStubs.cpp:
27150 (JSC::DEFINE_STUB_FUNCTION):
27151 * runtime/ArgList.cpp:
27152 (JSC::ArgList::getSlice):
27153 * runtime/ArgList.h:
27154 (JSC::ArgList::ArgList):
27155 * runtime/JSArray.cpp:
27156 * runtime/JSArray.h:
27157 * runtime/JSGlobalObject.h:
27159 2011-11-15 George Staikos <staikos@webkit.org>
27161 Remove the guard page from the addressable stack region on QNX.
27162 https://bugs.webkit.org/show_bug.cgi?id=72455
27164 Reviewed by Daniel Bates.
27166 * wtf/StackBounds.cpp:
27167 (WTF::StackBounds::initialize):
27169 2011-11-15 Michael Saboff <msaboff@apple.com>
27171 Towards 8 bit Strings - Update utf8() and ascii() methods for 8 bit strings
27172 https://bugs.webkit.org/show_bug.cgi?id=72323
27174 Added 8 bit optimized paths for String and UString ascii() and utf8() methods.
27176 Added String::characters8(), characters16() and is8Bit() helper methods.
27178 Added an new Unicode::convertLatin1ToUTF8() method that works on
27179 LChar (8 bit) strings that is a stripped down version of convertUTF16ToUTF8().
27181 Reviewed by Geoff Garen.
27183 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
27184 * runtime/UString.cpp:
27185 (JSC::UString::utf8):
27186 * wtf/text/WTFString.cpp:
27187 (WTF::String::ascii):
27188 (WTF::String::utf8):
27189 * wtf/text/WTFString.h:
27190 (WTF::String::characters8):
27191 (WTF::String::characters16):
27192 (WTF::String::is8Bit):
27195 * wtf/unicode/UTF8.cpp:
27196 (WTF::Unicode::convertLatin1ToUTF8):
27197 * wtf/unicode/UTF8.h:
27198 * wtf/unicode/Unicode.h:
27200 2011-11-15 Darin Adler <darin@apple.com>
27202 REGRESSION (r98887): ParserArena and Keywords leaking
27203 https://bugs.webkit.org/show_bug.cgi?id=72428
27205 Reviewed by Sam Weinig.
27207 * parser/Lexer.h: Made Keywords destructor public since OwnPtr and PassOwnPtr
27208 need to be able to destroy it.
27210 * parser/Parser.cpp:
27211 (JSC::Parser::Parser): Use get now that parserArena is an OwnPtr.
27213 * runtime/JSGlobalData.cpp:
27214 (JSC::JSGlobalData::JSGlobalData): Use adoptPtr to initialize OwnPtr members.
27216 * runtime/JSGlobalData.h: Make parserArena and keywords be OwnPtr.
27218 2011-11-15 Geoffrey Garen <ggaren@apple.com>
27220 Removed another use of ArgList that baked in the assumption that arguments
27221 are forward in the regiter file.
27223 Reviewed by Sam Weinig.
27225 * dfg/DFGOperations.cpp:
27226 * jit/JITStubs.cpp:
27227 (JSC::DEFINE_STUB_FUNCTION): Use our new array creation API, instead of
27228 working through ArgList.
27230 * runtime/ArgList.h: Removed!
27232 2011-11-15 Geoffrey Garen <ggaren@apple.com>
27234 Removed a use of ArgList that baked in the assumption that arguments
27235 are forward in the regiter file.
27237 Reviewed by Sam Weinig.
27239 * dfg/DFGOperations.cpp:
27240 * jit/JITStubs.cpp:
27241 (JSC::DEFINE_STUB_FUNCTION): Use new API.
27243 * runtime/ArgList.cpp:
27244 (JSC::ArgList::getSlice): No need to provide an arbitrary constructor --
27245 getSlice can do the right thing by using its rights to private data.
27247 * runtime/ArgList.h: Removed constructor that took a forward-contiguous
27250 * runtime/JSArray.cpp:
27251 (JSC::JSArray::finishCreation):
27252 * runtime/JSArray.h:
27253 (JSC::JSArray::create):
27254 * runtime/JSGlobalObject.h:
27255 (JSC::constructArray): Added explicit support for creating an array from
27256 a pre-allocated set of values, so we could stop relying on the ArgList
27257 API we want to remove.
27259 2011-11-15 Filip Pizlo <fpizlo@apple.com>
27261 Crash in JSC::DFG::OSRExitCompiler::compileExit(JSC::DFG::OSRExit const&, JSC::DFG::SpeculationRecovery*)
27262 https://bugs.webkit.org/show_bug.cgi?id=72292
27264 Reviewed by Geoff Garen.
27266 We need to be careful about how we look for the baseline CodeBlock if we're lazy-compiling
27267 an OSR exit after our CodeBlock has been jettisoned. In short, use CodeBlock::baselineVersion()
27268 instead of CodeBlock::alternative().
27270 No performance effect.
27272 No tests because all of our heuristics work very hard to make sure that this never happens in
27273 the first place. OSR exits are rare by design, and jettisoning of CodeBlocks (i.e. recompilation)
27274 is even rarer. Furthermore, OSR exits after a CodeBlock has been jettisoned is rarer still
27275 because the whole point of jettisoning is to bring the probability of future OSR exits to as
27276 close to zero as possible. But even that isn't enough to trigger this bug; it requires the OSR
27277 exit after a jettison to be the first of its kind; our whole design tries to ensure that
27278 CodeBlocks tend to OSR exit at a handful (i.e. 1 in most cases) of points, and since jettisoning
27279 is triggered by OSR, in most sane cases the OSR exits after jettison will not require lazy OSR
27280 compilation. So this is a truly evil case, and any test for it would be quite fragile.
27282 * bytecode/CodeBlock.h:
27283 (JSC::CodeBlock::specializationKind):
27284 (JSC::CodeBlock::largeFailCountThreshold):
27285 (JSC::CodeBlock::largeFailCountThresholdForLoop):
27286 * dfg/DFGAssemblyHelpers.h:
27287 (JSC::DFG::AssemblyHelpers::AssemblyHelpers):
27288 (JSC::DFG::AssemblyHelpers::baselineCodeBlockFor):
27289 (JSC::DFG::AssemblyHelpers::baselineCodeBlock):
27290 * dfg/DFGDriver.cpp:
27291 (JSC::DFG::compile):
27292 * dfg/DFGOSRExitCompiler.cpp:
27293 * dfg/DFGOSRExitCompiler64.cpp:
27294 (JSC::DFG::OSRExitCompiler::compileExit):
27296 2011-11-15 Geoffrey Garen <ggaren@apple.com>
27298 Use MarkedArgumentBuffer to avoid making assumptions about argument order
27299 https://bugs.webkit.org/show_bug.cgi?id=72418
27301 Reviewed by Sam Weinig.
27303 A step toward reversing the argument order.
27305 * runtime/JSONObject.cpp:
27306 (JSC::Stringifier::toJSON):
27307 (JSC::Stringifier::appendStringifiedValue):
27308 (JSC::Walker::callReviver): Don't assume that ArgList wants to point
27309 at arguments in forward order. Instead, use MarkedArgumentBuffer, which
27310 will make the decision for us.
27312 2011-11-15 Filip Pizlo <fpizlo@apple.com>
27314 DFG should distinguish between constants in the constant pool and weak
27315 constants added as artifacts of code generation
27316 https://bugs.webkit.org/show_bug.cgi?id=72367
27318 Reviewed by Geoff Garen.
27320 Added the notion of a WeakJSConstant, which is like a JSConstant except that
27321 it can only refer to JSCell*. Currently all WeakJSConstants are also backed
27322 by constants in the constant pool, since weak references originated from
27323 machine code are not yet properly handled.
27325 Replaced CheckMethod, and MethodCheckData, with a combination of WeakJSConstant
27326 and CheckStructure. This results in improved CSE, leading to a 1% win on V8.
27328 * dfg/DFGAbstractState.cpp:
27329 (JSC::DFG::AbstractState::execute):
27330 * dfg/DFGByteCodeParser.cpp:
27331 (JSC::DFG::ByteCodeParser::cellConstant):
27332 (JSC::DFG::ByteCodeParser::prepareToParseBlock):
27333 (JSC::DFG::ByteCodeParser::parseBlock):
27334 * dfg/DFGGraph.cpp:
27335 (JSC::DFG::Graph::dump):
27337 (JSC::DFG::Graph::getJSConstantPrediction):
27338 (JSC::DFG::Graph::valueOfJSConstant):
27339 (JSC::DFG::Graph::valueOfInt32Constant):
27340 (JSC::DFG::Graph::valueOfNumberConstant):
27341 (JSC::DFG::Graph::valueOfBooleanConstant):
27343 (JSC::DFG::Node::isWeakConstant):
27344 (JSC::DFG::Node::hasConstant):
27345 (JSC::DFG::Node::weakConstant):
27346 (JSC::DFG::Node::valueOfJSConstant):
27347 (JSC::DFG::Node::isInt32Constant):
27348 (JSC::DFG::Node::isDoubleConstant):
27349 (JSC::DFG::Node::isNumberConstant):
27350 (JSC::DFG::Node::isBooleanConstant):
27351 (JSC::DFG::Node::hasIdentifier):
27352 * dfg/DFGPropagator.cpp:
27353 (JSC::DFG::Propagator::propagateNodePredictions):
27354 (JSC::DFG::Propagator::performNodeCSE):
27355 * dfg/DFGSpeculativeJIT32_64.cpp:
27356 (JSC::DFG::SpeculativeJIT::compile):
27357 * dfg/DFGSpeculativeJIT64.cpp:
27358 (JSC::DFG::SpeculativeJIT::compile):
27360 2011-11-15 Michael Saboff <msaboff@apple.com>
27362 Towards 8 bit Strings - Initial JS String Tuning
27363 https://bugs.webkit.org/show_bug.cgi?id=72326
27365 Added 8 bit optimized paths for the methods below.
27367 Reviewed by Geoffrey Garen.
27369 * runtime/JSString.h:
27370 (JSC::jsSubstring8):
27371 * runtime/StringPrototype.cpp:
27372 (JSC::jsSpliceSubstrings):
27373 (JSC::jsSpliceSubstringsWithSeparators):
27374 (JSC::stringProtoFuncReplace):
27375 (JSC::stringProtoFuncCharCodeAt):
27377 2011-11-15 Gavin Barraclough <barraclough@apple.com>
27379 Result of Error.prototype.toString not ES5 conformant
27380 https://bugs.webkit.org/show_bug.cgi?id=70889
27382 Reviewed by Oliver Hunt.
27384 * runtime/ErrorPrototype.cpp:
27385 (JSC::errorProtoFuncToString):
27387 2011-11-15 Simon Hausmann <simon.hausmann@nokia.com>
27389 [Qt] Centralize hide_symbols and ensure all libs are built with symbol visibility & bsymbolic_functions
27391 Reviewed by Tor Arne Vestbø.
27393 * Target.pri: Eliminate duplicated symbol stuff that lives now in default_post.prf.
27395 2011-11-15 Yuqiang Xian <yuqiang.xian@intel.com>
27397 Remove DFGJITCompilerInlineMethods
27398 https://bugs.webkit.org/show_bug.cgi?id=72366
27400 Reviewed by Filip Pizlo.
27402 Those methods are actually seldom used. Modify the few such places and
27403 remove DFGJITCompilerInlineMethods stuffs totally.
27405 * GNUmakefile.list.am:
27406 * JavaScriptCore.xcodeproj/project.pbxproj:
27407 * dfg/DFGJITCompiler.h:
27408 (JSC::DFG::JITCompiler::addressOfDoubleConstant):
27409 * dfg/DFGJITCompilerInlineMethods.h: Removed.
27410 * dfg/DFGSpeculativeJIT.cpp:
27411 * dfg/DFGSpeculativeJIT.h:
27412 (JSC::DFG::SpeculativeJIT::silentFillFPR):
27413 * dfg/DFGSpeculativeJIT32_64.cpp:
27414 (JSC::DFG::SpeculativeJIT::fillJSValue):
27415 (JSC::DFG::SpeculativeJIT::cachedGetMethod):
27417 2011-11-14 Filip Pizlo <fpizlo@apple.com>
27419 DFG::SpeculativeJIT and DFG::JITCodeGenerator should be combined
27420 https://bugs.webkit.org/show_bug.cgi?id=72348
27422 Reviewed by Gavin Barraclough.
27424 Moved all of JITCodeGenerator into SpeculativeJIT.
27427 * GNUmakefile.list.am:
27428 * JavaScriptCore.xcodeproj/project.pbxproj:
27430 * dfg/DFGJITCodeGenerator.cpp: Removed.
27431 * dfg/DFGJITCodeGenerator.h: Removed.
27432 * dfg/DFGJITCodeGenerator32_64.cpp: Removed.
27433 * dfg/DFGJITCodeGenerator64.cpp: Removed.
27434 * dfg/DFGJITCompiler.cpp:
27435 * dfg/DFGRepatch.cpp:
27436 (JSC::DFG::generateProtoChainAccessStub):
27437 (JSC::DFG::tryCacheGetByID):
27438 (JSC::DFG::tryCachePutByID):
27439 * dfg/DFGSpeculativeJIT.cpp:
27440 (JSC::DFG::SpeculativeJIT::clearGenerationInfo):
27441 (JSC::DFG::SpeculativeJIT::fillStorage):
27442 (JSC::DFG::SpeculativeJIT::useChildren):
27443 (JSC::DFG::SpeculativeJIT::isStrictInt32):
27444 (JSC::DFG::SpeculativeJIT::isKnownInteger):
27445 (JSC::DFG::SpeculativeJIT::isKnownNumeric):
27446 (JSC::DFG::SpeculativeJIT::isKnownCell):
27447 (JSC::DFG::SpeculativeJIT::isKnownNotCell):
27448 (JSC::DFG::SpeculativeJIT::isKnownNotInteger):
27449 (JSC::DFG::SpeculativeJIT::isKnownNotNumber):
27450 (JSC::DFG::SpeculativeJIT::isKnownBoolean):
27451 (JSC::DFG::SpeculativeJIT::writeBarrier):
27452 (JSC::DFG::SpeculativeJIT::markCellCard):
27453 (JSC::DFG::SpeculativeJIT::nonSpeculativeCompare):
27454 (JSC::DFG::SpeculativeJIT::nonSpeculativeStrictEq):
27455 (JSC::DFG::dataFormatString):
27456 (JSC::DFG::SpeculativeJIT::dump):
27457 (JSC::DFG::SpeculativeJIT::checkConsistency):
27458 (JSC::DFG::GPRTemporary::GPRTemporary):
27459 (JSC::DFG::GPRTemporary::adopt):
27460 (JSC::DFG::FPRTemporary::FPRTemporary):
27461 * dfg/DFGSpeculativeJIT.h:
27462 (JSC::DFG::SpeculativeJIT::at):
27463 (JSC::DFG::SpeculativeJIT::lock):
27464 (JSC::DFG::SpeculativeJIT::unlock):
27465 (JSC::DFG::SpeculativeJIT::canReuse):
27466 (JSC::DFG::SpeculativeJIT::reuse):
27467 (JSC::DFG::SpeculativeJIT::allocate):
27468 (JSC::DFG::SpeculativeJIT::tryAllocate):
27469 (JSC::DFG::SpeculativeJIT::fprAllocate):
27470 (JSC::DFG::SpeculativeJIT::isFilled):
27471 (JSC::DFG::SpeculativeJIT::isFilledDouble):
27472 (JSC::DFG::SpeculativeJIT::use):
27473 (JSC::DFG::SpeculativeJIT::selectScratchGPR):
27474 (JSC::DFG::SpeculativeJIT::silentSpillGPR):
27475 (JSC::DFG::SpeculativeJIT::silentSpillFPR):
27476 (JSC::DFG::SpeculativeJIT::silentFillGPR):
27477 (JSC::DFG::SpeculativeJIT::silentFillFPR):
27478 (JSC::DFG::SpeculativeJIT::silentSpillAllRegisters):
27479 (JSC::DFG::SpeculativeJIT::silentFillAllRegisters):
27480 (JSC::DFG::SpeculativeJIT::boxDouble):
27481 (JSC::DFG::SpeculativeJIT::unboxDouble):
27482 (JSC::DFG::SpeculativeJIT::spill):
27483 (JSC::DFG::SpeculativeJIT::isConstant):
27484 (JSC::DFG::SpeculativeJIT::isJSConstant):
27485 (JSC::DFG::SpeculativeJIT::isInt32Constant):
27486 (JSC::DFG::SpeculativeJIT::isDoubleConstant):
27487 (JSC::DFG::SpeculativeJIT::isNumberConstant):
27488 (JSC::DFG::SpeculativeJIT::isBooleanConstant):
27489 (JSC::DFG::SpeculativeJIT::isFunctionConstant):
27490 (JSC::DFG::SpeculativeJIT::valueOfInt32Constant):
27491 (JSC::DFG::SpeculativeJIT::valueOfNumberConstant):
27492 (JSC::DFG::SpeculativeJIT::addressOfDoubleConstant):
27493 (JSC::DFG::SpeculativeJIT::valueOfJSConstant):
27494 (JSC::DFG::SpeculativeJIT::valueOfBooleanConstant):
27495 (JSC::DFG::SpeculativeJIT::valueOfFunctionConstant):
27496 (JSC::DFG::SpeculativeJIT::isNullConstant):
27497 (JSC::DFG::SpeculativeJIT::identifier):
27498 (JSC::DFG::SpeculativeJIT::flushRegisters):
27499 (JSC::DFG::SpeculativeJIT::isFlushed):
27500 (JSC::DFG::SpeculativeJIT::valueOfJSConstantAsImmPtr):
27501 (JSC::DFG::SpeculativeJIT::bitOp):
27502 (JSC::DFG::SpeculativeJIT::shiftOp):
27503 (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch):
27504 (JSC::DFG::SpeculativeJIT::addressOfCallData):
27505 (JSC::DFG::SpeculativeJIT::tagOfCallData):
27506 (JSC::DFG::SpeculativeJIT::payloadOfCallData):
27507 (JSC::DFG::SpeculativeJIT::integerResult):
27508 (JSC::DFG::SpeculativeJIT::noResult):
27509 (JSC::DFG::SpeculativeJIT::cellResult):
27510 (JSC::DFG::SpeculativeJIT::booleanResult):
27511 (JSC::DFG::SpeculativeJIT::jsValueResult):
27512 (JSC::DFG::SpeculativeJIT::storageResult):
27513 (JSC::DFG::SpeculativeJIT::doubleResult):
27514 (JSC::DFG::SpeculativeJIT::initConstantInfo):
27515 (JSC::DFG::SpeculativeJIT::resetCallArguments):
27516 (JSC::DFG::SpeculativeJIT::addCallArgument):
27517 (JSC::DFG::SpeculativeJIT::setupArguments):
27518 (JSC::DFG::SpeculativeJIT::setupArgumentsExecState):
27519 (JSC::DFG::SpeculativeJIT::setupArgumentsWithExecState):
27520 (JSC::DFG::SpeculativeJIT::setupTwoStubArgs):
27521 (JSC::DFG::SpeculativeJIT::setupStubArguments):
27522 (JSC::DFG::SpeculativeJIT::callOperation):
27523 (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheck):
27524 (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheckSetResult):
27525 (JSC::DFG::SpeculativeJIT::setupResults):
27526 (JSC::DFG::SpeculativeJIT::appendCallSetResult):
27527 (JSC::DFG::SpeculativeJIT::addBranch):
27528 (JSC::DFG::SpeculativeJIT::linkBranches):
27529 (JSC::DFG::SpeculativeJIT::block):
27530 (JSC::DFG::SpeculativeJIT::checkConsistency):
27531 (JSC::DFG::SpeculativeJIT::BranchRecord::BranchRecord):
27532 (JSC::DFG::IntegerOperand::IntegerOperand):
27533 (JSC::DFG::IntegerOperand::~IntegerOperand):
27534 (JSC::DFG::IntegerOperand::index):
27535 (JSC::DFG::IntegerOperand::format):
27536 (JSC::DFG::IntegerOperand::gpr):
27537 (JSC::DFG::IntegerOperand::use):
27538 (JSC::DFG::DoubleOperand::DoubleOperand):
27539 (JSC::DFG::DoubleOperand::~DoubleOperand):
27540 (JSC::DFG::DoubleOperand::index):
27541 (JSC::DFG::DoubleOperand::fpr):
27542 (JSC::DFG::DoubleOperand::use):
27543 (JSC::DFG::JSValueOperand::JSValueOperand):
27544 (JSC::DFG::JSValueOperand::~JSValueOperand):
27545 (JSC::DFG::JSValueOperand::index):
27546 (JSC::DFG::JSValueOperand::gpr):
27547 (JSC::DFG::JSValueOperand::jsValueRegs):
27548 (JSC::DFG::JSValueOperand::isDouble):
27549 (JSC::DFG::JSValueOperand::fill):
27550 (JSC::DFG::JSValueOperand::tagGPR):
27551 (JSC::DFG::JSValueOperand::payloadGPR):
27552 (JSC::DFG::JSValueOperand::fpr):
27553 (JSC::DFG::JSValueOperand::use):
27554 (JSC::DFG::StorageOperand::StorageOperand):
27555 (JSC::DFG::StorageOperand::~StorageOperand):
27556 (JSC::DFG::StorageOperand::index):
27557 (JSC::DFG::StorageOperand::gpr):
27558 (JSC::DFG::StorageOperand::use):
27559 (JSC::DFG::GPRTemporary::~GPRTemporary):
27560 (JSC::DFG::GPRTemporary::gpr):
27561 (JSC::DFG::FPRTemporary::~FPRTemporary):
27562 (JSC::DFG::FPRTemporary::fpr):
27563 (JSC::DFG::FPRTemporary::FPRTemporary):
27564 (JSC::DFG::GPRResult::GPRResult):
27565 (JSC::DFG::GPRResult2::GPRResult2):
27566 (JSC::DFG::FPRResult::FPRResult):
27567 (JSC::DFG::FPRResult::lockedResult):
27568 (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
27569 * dfg/DFGSpeculativeJIT32_64.cpp:
27570 (JSC::DFG::SpeculativeJIT::fillInteger):
27571 (JSC::DFG::SpeculativeJIT::fillDouble):
27572 (JSC::DFG::SpeculativeJIT::fillJSValue):
27573 (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToNumber):
27574 (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32):
27575 (JSC::DFG::SpeculativeJIT::nonSpeculativeUInt32ToNumber):
27576 (JSC::DFG::SpeculativeJIT::nonSpeculativeKnownConstantArithOp):
27577 (JSC::DFG::SpeculativeJIT::nonSpeculativeBasicArithOp):
27578 (JSC::DFG::SpeculativeJIT::cachedGetById):
27579 (JSC::DFG::SpeculativeJIT::cachedPutById):
27580 (JSC::DFG::SpeculativeJIT::cachedGetMethod):
27581 (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
27582 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
27583 (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
27584 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
27585 (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
27586 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
27587 (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
27588 (JSC::DFG::SpeculativeJIT::emitCall):
27589 * dfg/DFGSpeculativeJIT64.cpp:
27590 (JSC::DFG::SpeculativeJIT::fillInteger):
27591 (JSC::DFG::SpeculativeJIT::fillDouble):
27592 (JSC::DFG::SpeculativeJIT::fillJSValue):
27593 (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToNumber):
27594 (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32):
27595 (JSC::DFG::SpeculativeJIT::nonSpeculativeUInt32ToNumber):
27596 (JSC::DFG::SpeculativeJIT::nonSpeculativeKnownConstantArithOp):
27597 (JSC::DFG::SpeculativeJIT::nonSpeculativeBasicArithOp):
27598 (JSC::DFG::SpeculativeJIT::cachedGetById):
27599 (JSC::DFG::SpeculativeJIT::cachedPutById):
27600 (JSC::DFG::SpeculativeJIT::cachedGetMethod):
27601 (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
27602 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
27603 (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
27604 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
27605 (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
27606 (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
27607 (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
27608 (JSC::DFG::SpeculativeJIT::emitCall):
27609 * runtime/JSFunction.h:
27611 2011-11-14 Filip Pizlo <fpizlo@apple.com>
27613 Weak reference harvesters should run to fixpoint
27614 https://bugs.webkit.org/show_bug.cgi?id=72346
27616 Reviewed by Oliver Hunt.
27619 (JSC::Heap::markRoots):
27620 * heap/ListableHandler.h:
27621 (JSC::ListableHandler::next):
27622 (JSC::ListableHandler::List::head):
27623 (JSC::ListableHandler::List::removeNext):
27624 (JSC::ListableHandler::List::removeAll):
27625 * heap/MarkStack.cpp:
27626 (JSC::MarkStackThreadSharedData::reset):
27627 (JSC::SlotVisitor::harvestWeakReferences):
27628 * heap/MarkStack.h:
27629 (JSC::MarkStack::isEmpty):
27631 2011-11-14 Oliver Hunt <oliver@apple.com>
27633 Start migrating typed array impl types to WTF
27634 https://bugs.webkit.org/show_bug.cgi?id=72336
27636 Reviewed by Geoffrey Garen.
27638 Add typed array impls to WTF forwarding header.
27642 2011-11-14 Julien Chaffraix <jchaffraix@webkit.org>
27644 Add --css-grid-layout to build-webkit and the build systems
27645 https://bugs.webkit.org/show_bug.cgi?id=72320
27647 Reviewed by Ojan Vafai.
27649 * Configurations/FeatureDefines.xcconfig:
27651 2011-11-14 Geoffrey Garen <ggaren@apple.com>
27653 A little bit of arguments / activation cleanup
27654 https://bugs.webkit.org/show_bug.cgi?id=72339
27656 Reviewed by Gavin Barraclough.
27658 Renamed copyRegisters => tearOff to match bytecode and other terminology.
27660 Renamed setActivation => didTearOffActivation to indicate that this is a
27661 notification the object may choose to ignore. Moved "Should I ignore?"
27662 code into the arguments object to avoid duplication elsewhere.
27664 * interpreter/Interpreter.cpp:
27665 (JSC::Interpreter::unwindCallFrame):
27666 (JSC::Interpreter::privateExecute):
27667 (JSC::Interpreter::retrieveArguments):
27668 * jit/JITStubs.cpp:
27669 (JSC::DEFINE_STUB_FUNCTION):
27670 * runtime/Arguments.h:
27671 (JSC::Arguments::createAndTearOff):
27672 (JSC::Arguments::didTearOffActivation):
27673 (JSC::Arguments::finishCreationButDontTearOff):
27674 (JSC::Arguments::finishCreation):
27675 (JSC::Arguments::finishCreationAndTearOff):
27676 (JSC::Arguments::tearOff):
27678 * runtime/JSActivation.h:
27679 (JSC::JSActivation::tearOff): Moved Activation's code into its own header
27680 because that's where it belongs.
27682 2011-11-14 Gavin Barraclough <barraclough@apple.com>
27684 Should sign the jsc binary
27685 https://bugs.webkit.org/show_bug.cgi?id=72332
27687 Reviewed by David Kilzer.
27689 * Configurations/JSC.xcconfig:
27690 * entitlements.plist: Added.
27692 2011-11-14 Filip Pizlo <fpizlo@apple.com>
27694 DFG's inline references to objects should be tracked
27695 https://bugs.webkit.org/show_bug.cgi?id=72313
27697 Reviewed by Gavin Barraclough.
27699 Added a pinCell() method in the parser that currently creates a
27700 dummy constant in CodeBlock. Added calls to pinCell() wherever the
27701 DFG would inline a constant reference that the original code would
27702 not have referred to.
27704 * dfg/DFGByteCodeParser.cpp:
27705 (JSC::DFG::ByteCodeParser::getCellConstantIndex):
27706 (JSC::DFG::ByteCodeParser::pinCell):
27707 (JSC::DFG::ByteCodeParser::cellConstant):
27708 (JSC::DFG::ByteCodeParser::handleCall):
27709 (JSC::DFG::ByteCodeParser::handleInlining):
27710 (JSC::DFG::ByteCodeParser::parseBlock):
27712 2011-11-14 Filip Pizlo <fpizlo@apple.com>
27714 DFG put_by_id transition optimizations test the wrong structures
27715 https://bugs.webkit.org/show_bug.cgi?id=72324
27717 Reviewed by Gavin Barraclough.
27719 * dfg/DFGByteCodeParser.cpp:
27720 (JSC::DFG::ByteCodeParser::structureChainIsStillValid):
27721 (JSC::DFG::ByteCodeParser::parseBlock):
27722 * jit/JITPropertyAccess.cpp:
27723 (JSC::JIT::privateCompilePutByIdTransition):
27725 2011-11-14 Michael Saboff <msaboff@apple.com>
27727 Further changes and cleanup to JSString.h and cpp.
27729 Reviewed by Darin Adler.
27731 * runtime/JSString.cpp:
27732 (JSC::JSString::resolveRope): Change PassRefPtr to RefPtr. Eliminated exec in slow case calls.
27733 (JSC::JSString::resolveRopeSlowCase8): Darin and I agreed that this should have 8 in name.
27734 (JSC::JSString::resolveRopeSlowCase): Removed exec parameter.
27735 * runtime/JSString.h:
27737 2011-11-14 Adam Barth <abarth@webkit.org>
27739 DateMath.cpp should not depend on JavaScriptCore
27740 https://bugs.webkit.org/show_bug.cgi?id=71747
27742 Reviewed by Darin Adler.
27744 This patch moves the JSC-specific parts of DateMath into JSDateMath in
27745 JavaScriptCore. There shouldn't be any behavior change.
27748 * GNUmakefile.list.am:
27749 * JavaScriptCore.gypi:
27750 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
27751 * JavaScriptCore.xcodeproj/project.pbxproj:
27753 * runtime/DateConstructor.cpp:
27754 * runtime/DateConversion.cpp:
27755 * runtime/DateInstance.cpp:
27756 * runtime/DateInstanceCache.h:
27757 * runtime/DatePrototype.cpp:
27758 * runtime/InitializeThreading.cpp:
27759 * runtime/JSDateMath.cpp: Copied from Source/JavaScriptCore/wtf/DateMath.cpp.
27761 (JSC::msToSeconds):
27762 * runtime/JSDateMath.h: Copied from Source/JavaScriptCore/wtf/DateMath.h.
27763 * wtf/DateMath.cpp:
27766 (WTF::msToMinutes):
27768 (WTF::parseDateFromNullTerminatedCharacters):
27769 (WTF::makeRFC2822DateString):
27772 2011-11-14 Michael Saboff <msaboff@apple.com>
27774 Towards 8 bit strings - Add 8 bit handling to JSString Ropes
27775 https://bugs.webkit.org/show_bug.cgi?id=72317
27777 Added bit to track that a rope is made up of all 8 bit fibers.
27778 Created an 8 bit path (fast and slow cases) to handle 8 bit
27781 Reviewed by Oliver Hunt.
27783 * runtime/JSString.cpp:
27784 (JSC::JSString::resolveRope):
27785 (JSC::JSString::resolveRopeSlowCase8):
27786 (JSC::JSString::resolveRopeSlowCase16):
27787 * runtime/JSString.h:
27788 (JSC::RopeBuilder::finishCreation):
27789 (JSC::RopeBuilder::is8Bit):
27790 (JSC::jsSubstring8):
27792 2011-11-14 Geoffrey Garen <ggaren@apple.com>
27794 A little bit of function call cleanup
27795 https://bugs.webkit.org/show_bug.cgi?id=72314
27797 Reviewed by Oliver Hunt.
27799 * bytecompiler/BytecodeGenerator.cpp:
27800 (JSC::BytecodeGenerator::emitCall): Renamed callFrame to registerOffset
27801 because this value doesn't give you the offset of the callee's call frame.
27803 (JSC::BytecodeGenerator::emitReturn): Tightened to use equality instead
27804 of greater-than. Removed comment since its reasoning was wrong.
27806 (JSC::BytecodeGenerator::emitConstruct): Updated for rename mentioned above.
27808 (JSC::BytecodeGenerator::isArgumentNumber): Provided a more precise way
27809 to ask this question, giving the bytecode generator more freedom to change
27810 internal implementation details.
27812 * bytecompiler/BytecodeGenerator.h: Reduced default vector capacity because
27814 (JSC::CallArguments::registerOffset): Updated for rename mentioned above.
27816 * bytecompiler/NodesCodegen.cpp:
27817 (JSC::CallArguments::CallArguments):
27818 (JSC::CallArguments::newArgument): Factored out argument allocation into
27819 a helper function, so I can change it later.
27821 (JSC::CallFunctionCallDotNode::emitBytecode):
27822 (JSC::FunctionBodyNode::emitBytecode): Use helper function mentioned above.
27824 2011-11-14 Tony Chang <tony@chromium.org>
27826 Remove the CSS3_FLEXBOX compile time flag and enable on all ports
27827 https://bugs.webkit.org/show_bug.cgi?id=72196
27829 Reviewed by Ojan Vafai.
27831 * Configurations/FeatureDefines.xcconfig:
27833 2011-11-14 Mark Rowe <mrowe@apple.com>
27835 <rdar://problem/10424154> testRegExp should not be installed as part of JavaScriptCore
27837 testRegExp and testapi.js were being installed in the JavaScriptCore framework.
27838 As test-only tools they shouldn't be installed there by default, only when
27839 FORCE_TOOL_INSTALL is set to YES.
27841 This patch incorprorates a few related changes:
27842 1) Make the jsc and testRegExp targets be configured via .xcconfig files.
27843 2) Sets up testRegExp so that SKIP_INSTALL is YES by default, and only NO when
27844 FORCE_TOOL_INSTALL is YES.
27845 3) Switches the testapi target to using a script build phase to install testapi.js
27846 so that the installation will be skipped when SKIP_INSTALL is YES. I'm not sure
27847 why this isn't the built-in behavior when a Copy Files build phase has "Copy only
27848 when installing" checked, but it doesn't seem to be.
27849 4) Other random cleanup such as removing a bogus group that refers to files that do
27850 not exist, moving testRegExp.cpp in to the tests group, etc.
27852 Reviewed by Geoff Garen.
27854 * Configurations/JSC.xcconfig: Added.
27855 * Configurations/TestRegExp.xcconfig: Added.
27856 * JavaScriptCore.xcodeproj/project.pbxproj:
27858 2011-11-14 Michael Saboff <msaboff@apple.com>
27860 Towards 8 bit strings - Add 8 bit paths to StringImpl methods
27861 https://bugs.webkit.org/show_bug.cgi?id=72290
27863 Added 8 bit patchs to StringImpl to number and find methods.
27865 Reviewed by Oliver Hunt.
27867 * wtf/text/StringImpl.cpp:
27868 (WTF::StringImpl::toIntStrict):
27869 (WTF::StringImpl::toUIntStrict):
27870 (WTF::StringImpl::toInt64Strict):
27871 (WTF::StringImpl::toUInt64Strict):
27872 (WTF::StringImpl::toIntPtrStrict):
27873 (WTF::StringImpl::toInt):
27874 (WTF::StringImpl::toUInt):
27875 (WTF::StringImpl::toInt64):
27876 (WTF::StringImpl::toUInt64):
27877 (WTF::StringImpl::toIntPtr):
27878 (WTF::StringImpl::toDouble):
27879 (WTF::StringImpl::toFloat):
27880 (WTF::StringImpl::find):
27881 (WTF::StringImpl::reverseFind):
27882 * wtf/text/WTFString.cpp:
27883 (WTF::toIntegralType):
27884 (WTF::lengthOfCharactersAsInteger):
27885 (WTF::charactersToIntStrict):
27886 (WTF::charactersToUIntStrict):
27887 (WTF::charactersToInt64Strict):
27888 (WTF::charactersToUInt64Strict):
27889 (WTF::charactersToIntPtrStrict):
27890 (WTF::charactersToInt):
27891 (WTF::charactersToUInt):
27892 (WTF::charactersToInt64):
27893 (WTF::charactersToUInt64):
27894 (WTF::charactersToIntPtr):
27895 (WTF::toDoubleType):
27896 (WTF::charactersToDouble):
27897 (WTF::charactersToFloat):
27898 * wtf/text/WTFString.h:
27900 (WTF::reverseFind):
27902 2011-11-14 Vincent Scheib <scheib@chromium.org>
27904 Mouse Lock: Renaming to 'Pointer Lock': ENABLE Flags
27905 https://bugs.webkit.org/show_bug.cgi?id=72286
27907 Reviewed by Adam Barth.
27911 2011-11-14 Gavin Barraclough <barraclough@apple.com>
27913 https://bugs.webkit.org/show_bug.cgi?id=72280
27915 Rubber stamped by Geoff Garen.
27919 * JavaScriptCore.xcodeproj/project.pbxproj:
27920 * wtf/OSAllocatorPosix.cpp:
27921 (WTF::OSAllocator::reserveAndCommit):
27923 2011-11-14 Geoffrey Garen <ggaren@apple.com>
27925 32-bit Build fix: declare virtual register indices to be int rather than
27926 unsigned, since they can be positive or negative.
27928 For better clarity, explicitly use ReturnPC instead of -1 as the "invalid"
27929 state, since we'll never load and operate on the ReturnPC as a JS value.
27934 * jit/JITInlineMethods.h:
27935 (JSC::JIT::emitLoadTag):
27936 (JSC::JIT::emitLoadPayload):
27937 (JSC::JIT::emitLoad):
27938 (JSC::JIT::emitLoad2):
27939 (JSC::JIT::emitLoadDouble):
27940 (JSC::JIT::emitLoadInt32ToDouble):
27941 (JSC::JIT::emitStore):
27942 (JSC::JIT::emitStoreInt32):
27943 (JSC::JIT::emitStoreAndMapInt32):
27944 (JSC::JIT::emitStoreCell):
27945 (JSC::JIT::emitStoreBool):
27946 (JSC::JIT::emitStoreDouble):
27949 (JSC::JIT::isMapped):
27950 (JSC::JIT::getMappedPayload):
27951 (JSC::JIT::getMappedTag):
27952 (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
27954 2011-11-14 Michael Saboff <msaboff@apple.com>
27956 Remove unused m_data member from UStringSourceProvider
27957 https://bugs.webkit.org/show_bug.cgi?id=72289
27959 Removed unused m_data member from UStringSourceProvider.
27961 Reviewed by Oliver Hunt.
27963 * parser/SourceProvider.h:
27964 (JSC::UStringSourceProvider::UStringSourceProvider):
27966 2011-11-14 Michael Saboff <msaboff@apple.com>
27968 Towards 8 Bit Strings: Templatize YARR Parser
27969 https://bugs.webkit.org/show_bug.cgi?id=72288
27971 Changed Yarr::Parser to be a template based on character type.
27973 Reviewed by Oliver Hunt.
27975 * yarr/YarrParser.h:
27976 (JSC::Yarr::Parser::Parser):
27977 (JSC::Yarr::parse):
27979 2011-11-14 Geoffrey Garen <ggaren@apple.com>
27981 32-bit build fix: Removed unused declaration.
27983 * dfg/DFGJITCodeGenerator32_64.cpp:
27984 (JSC::DFG::JITCodeGenerator::emitCall):
27986 2011-11-12 Geoffrey Garen <ggaren@apple.com>
27988 Standardized the JS calling convention
27989 https://bugs.webkit.org/show_bug.cgi?id=72221
27991 Reviewed by Oliver Hunt.
27993 This patch standardizes the calling convention so that the caller always
27994 sets up the callee's CallFrame. Adjustments for call type, callee type,
27995 argument count, etc. now always take place after that initial setup.
27997 This is a step toward reversing the argument order, but also has these
27998 immediate benefits (measured on x64):
28000 (1) 1% benchmark speedup across the board.
28002 (2) 50% code size reduction in baseline JIT function calls.
28004 (3) 1.5x speedup for single-dispatch .apply forwarding.
28006 (4) 1.1x speedup for multi-dispatch .apply forwarding.
28008 This change affected the baseline JIT most, since the baseline JIT had
28009 lots of ad hoc calling conventions for different caller / callee types.
28011 * assembler/MacroAssemblerX86_64.h:
28012 (JSC::MacroAssemblerX86_64::branchPtr):
28013 (JSC::MacroAssemblerX86_64::branchAddPtr): Optimize compare to 0 into
28014 a test, like other assemblers do. (I added some compares to 0, and didn't
28015 want them to be slow.)
28017 * bytecode/CodeBlock.cpp:
28018 (JSC::CodeBlock::dump): Merged op_load_varargs into op_call_varargs so
28019 op_call_varargs could share code generation with other forms of op_call.
28020 This is also a small optimization, since op_*varargs no longer have to
28021 pass arguments to each other through the register file.
28023 (JSC::CallLinkInfo::unlink):
28024 * bytecode/CodeBlock.h: Added a new call type: CallVarargs. This allows
28025 us to link functions called through .apply syntax. We need to distinguish
28026 CallVarargs from Call because CallVarargs changes its argument count
28027 on each inovcation, so we must always link to the argument count checking
28028 version of the callee.
28030 * bytecode/Opcode.h:
28031 * bytecompiler/BytecodeGenerator.cpp:
28032 (JSC::BytecodeGenerator::emitCallVarargs):
28033 * bytecompiler/BytecodeGenerator.h: Merged op_load_varargs into op_call_varargs.
28035 * bytecompiler/NodesCodegen.cpp:
28036 (JSC::ApplyFunctionCallDotNode::emitBytecode): Ditto. Also, simplified
28037 some of this bytecode generation to remove redundant copies.
28039 * dfg/DFGJITCodeGenerator32_64.cpp:
28040 (JSC::DFG::JITCodeGenerator::emitCall):
28041 * dfg/DFGJITCodeGenerator64.cpp:
28042 (JSC::DFG::JITCodeGenerator::emitCall): Added a new call type: CallVarargs.
28043 DFG doesn't support this type, but its code needs to change slightly
28044 to accomodate a 3-state variable.
28046 Stopped passing the argument count in regT1 because this is non-standard.
28047 (The argument count goes in the CallFrame. This trades speed on the slow
28048 path for speed and code size on the fast path, and simplicity on all paths.
28049 A good trade, in my opinion.)
28051 * dfg/DFGJITCompiler.cpp:
28052 (JSC::DFG::JITCompiler::compileEntry):
28053 (JSC::DFG::JITCompiler::link):
28054 (JSC::DFG::JITCompiler::compile):
28055 (JSC::DFG::JITCompiler::compileFunction): Tweaked code to make CallFrame
28056 setup more obvious when single-stepping. Also, updated for argument count
28057 not being in regT1.
28059 * dfg/DFGJITCompiler.h:
28060 (JSC::DFG::JITCompiler::addJSCall):
28061 (JSC::DFG::JITCompiler::JSCallRecord::JSCallRecord): Added a new call
28064 * dfg/DFGOperations.cpp: Do finish CallFrame setup in one place before
28065 doing anything else. Don't check for stack overflow because we have no callee
28066 registers, and our caller has already checked for its own registers.
28068 * dfg/DFGRepatch.cpp:
28069 (JSC::DFG::dfgLinkFor): We can link to our callee even if our argument
28070 count doesn't match -- we just need to link to the argument count checking
28073 * interpreter/CallFrameClosure.h:
28074 (JSC::CallFrameClosure::setArgument): BUG FIX: When supplying too many
28075 arguments from C++, we need to supply a full copy of the arguments prior
28076 to the subset copy that matches our callee's argument count. (That is what
28077 the standard calling convention would have produced in JS.) I would have
28078 split this into its own patch, but I couldn't find a way to get the JIT
28079 to fail a regression test in this area without my patch applied.
28081 * interpreter/Interpreter.cpp: Let the true code bomb begin!
28083 (JSC::eval): Fixed up this helper function to operate on eval()'s CallFrame,
28084 and not eval()'s caller frame. We no longer leave the CallFrame pointing
28085 to eval()'s caller during a call to eval(), since that is not standard.
28087 (JSC::loadVarargs): Factored out a shared helper function for use by JIT
28088 and interpreter because half the code means one quarter the bugs -- in my
28089 programming, at least.
28091 (JSC::Interpreter::execute): Removed a now-unused way to invoke eval.
28093 (JSC::Interpreter::privateExecute): Removed an invalid ASSERT following
28094 putDirect, because it got in the way of my testing. (When putting a
28095 function, the cached base of a PutPropertySlot can be 0 to signify "do
28098 op_call_eval: Updated for new, standard eval calling convention.
28100 op_load_varargs: Merged op_load_varargs into op_call_varargs.
28102 op_call_varags: Updated for new, standard eval calling convention. Don't
28103 check for stack overflow because the loadVarargs helper function already
28106 * interpreter/Interpreter.h:
28107 (JSC::Interpreter::execute): Headers are fun and educational!
28109 * interpreter/RegisterFile.cpp:
28110 (JSC::RegisterFile::growSlowCase):
28111 * interpreter/RegisterFile.h:
28112 (JSC::RegisterFile::grow): Factored out the slow case into a slow
28113 case because it was cramping the style of my fast case.
28116 (JSC::JIT::privateCompile): Moved initialization of
28117 RegisterFile::CodeBlock to make it more obvious when debugging. Removed
28118 assumption that argument count is in regT1, as above. Removed call to
28119 restoreArgumentReference() because the JITStubCall abstraction does this for us.
28121 (JSC::JIT::linkFor): Link even if we miss on argument count, as above.
28124 * jit/JITCall32_64.cpp:
28125 (JSC::JIT::emitSlow_op_call):
28126 (JSC::JIT::emitSlow_op_call_eval):
28127 (JSC::JIT::emitSlow_op_call_varargs):
28128 (JSC::JIT::emitSlow_op_construct):
28129 (JSC::JIT::emit_op_call_eval):
28130 (JSC::JIT::emit_op_call_varargs): Share all function call code generation.
28131 Don't count call_eval when accounting for linkable function calls because
28132 eval doesn't link. (Its fast path is to perform the eval.)
28134 (JSC::JIT::compileLoadVarargs): Ported this inline copying optimization
28135 to our new calling convention. The key to this optimization is the
28136 observation that, in a function that declares no arguments, if any
28137 arguments are passed, they all end up right behind 'this'.
28139 (JSC::JIT::compileCallEval):
28140 (JSC::JIT::compileCallEvalSlowCase): Factored out eval for a little clarity.
28142 (JSC::JIT::compileOpCall):
28143 (JSC::JIT::compileOpCallSlowCase): If you are still with me, dear reader,
28144 this is the whole point of my patch. The caller now unconditionally moves
28145 the CallFrame forward and fills in the data it knows before taking any
28146 branches to deal with weird caller/callee pairs.
28148 This also means that there is almost no slow path for calls -- it all
28149 gets folded into the shared virtual call stub. The only things remaining
28150 in the slow path are the rare case counter and a call to the stub.
28152 * jit/JITOpcodes32_64.cpp:
28153 (JSC::JIT::privateCompileCTIMachineTrampolines):
28154 (JSC::JIT::privateCompileCTINativeCall): Updated for values being in
28155 different registers or in memory, based on our new standard calling
28158 Added a shared path for calling out to CTI helper functions for non-JS
28161 * jit/JITPropertyAccess32_64.cpp:
28162 (JSC::JIT::emit_op_method_check): method_check emits its own code and
28163 the following get_by_id's code, so it needs to add both when informing
28164 result chaining of its result. This is important because the standard
28165 calling convention can now take advantage of this chaining.
28168 (JSC::JIT::compileLoadVarargs):
28169 (JSC::JIT::compileCallEval):
28170 (JSC::JIT::compileCallEvalSlowCase):
28171 (JSC::JIT::compileOpCall):
28172 (JSC::JIT::compileOpCallSlowCase):
28173 * jit/JITOpcodes.cpp:
28174 (JSC::JIT::privateCompileCTIMachineTrampolines):
28175 (JSC::JIT::emit_op_call_eval):
28176 (JSC::JIT::emit_op_call_varargs):
28177 (JSC::JIT::emitSlow_op_call):
28178 (JSC::JIT::emitSlow_op_call_eval):
28179 (JSC::JIT::emitSlow_op_call_varargs):
28180 (JSC::JIT::emitSlow_op_construct): Observe, as I write all of my code a
28181 second time, now with 64 bits.
28183 * jit/JITStubs.cpp:
28184 (JSC::throwExceptionFromOpCall):
28185 (JSC::jitCompileFor):
28186 (JSC::arityCheckFor):
28187 (JSC::lazyLinkFor): A lot of mechanical changes here for one purpose:
28188 Exceptions thrown in the middle of a function call now use a shared helper
28189 function (throwExceptionFromOpCall). This function understands that the
28190 CallFrame currently points to the callEE, and the exception must be
28191 thrown by the callER. (The old calling convention would often still have
28192 the CallFrame pointing at the callER at the point of an exception. That
28193 is not the way of our new, standard calling convention.)
28195 (JSC::op_call_eval): Finish standard CallFrame setup before calling
28196 our eval helper function, which now depends on that setup.
28198 * runtime/Arguments.h:
28199 (JSC::Arguments::length): Renamed numProvidedArguments() to length()
28200 because that's what other objects call it, and the difference made our
28201 new loadVarargs helper function hard to read.
28203 * runtime/Executable.cpp:
28204 (JSC::FunctionExecutable::compileForCallInternal):
28205 (JSC::FunctionExecutable::compileForConstructInternal): Interpreter build
28208 * runtime/FunctionPrototype.cpp:
28209 (JSC::functionProtoFuncApply): Honor Arguments::MaxArguments even when
28210 the .apply call_varargs optimization fails. (This bug appears on layout
28211 tests when you disable the optimization.)
28213 2011-11-11 Jer Noble <jer.noble@apple.com>
28215 Implement MediaController.
28216 https://bugs.webkit.org/show_bug.cgi?id=71408
28218 Reviewed by Eric Carlson.
28220 Change the definition of WTF_USE_COREAUDIO to exclude Windows completely, as
28221 CoreAudioClock.h is not available there.
28225 2011-11-14 Patrick Gansterer <paroga@webkit.org>
28227 [WIN] Remove dependency on pthread from FastMalloc
28228 https://bugs.webkit.org/show_bug.cgi?id=72098
28230 Reviewed by Adam Roben.
28232 All pthread calls are already ported to native Windows calls.
28233 Use the native version for all OS(WINDOWS) to remove the
28234 runtime dependency on the pthread dll.
28236 * wtf/FastMalloc.cpp:
28238 2011-11-14 Simon Hausmann <simon.hausmann@nokia.com>
28240 [Qt] Replace use of QApplication with QGuiApplication.
28242 Reviewed by Tor Arne Vestbø.
28244 * wtf/qt/compat/qguiapplication.h:
28245 (QGuiApplication::styleHints): Introduce styleHints wrapper hack.
28247 2011-11-14 Carlos Garcia Campos <cgarcia@igalia.com>
28249 Unreviewed. Fix make distcheck build.
28251 * GNUmakefile.list.am: Add missing files.
28253 2011-11-11 Yury Semikhatsky <yurys@chromium.org>
28255 Web Inspector: function remote objetct should provide access to function position in the script
28256 https://bugs.webkit.org/show_bug.cgi?id=71808
28258 Exposed accessor for function source code.
28260 Reviewed by Pavel Feldman.
28262 * JavaScriptCore.exp:
28263 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
28264 * runtime/JSFunction.cpp:
28265 (JSC::JSFunction::sourceCode):
28266 * runtime/JSFunction.h:
28268 2011-11-13 Yuqiang Xian <yuqiang.xian@intel.com>
28270 Fix silent spilling/filling GPRs in DFG 32_64
28271 https://bugs.webkit.org/show_bug.cgi?id=72201
28273 Reviewed by Gavin Barraclough.
28275 Current silentSpillGPR/silentFillGPR may not work as expected for some
28276 cases in 32_64. If there's a JSValue which was retained by two GPRs,
28277 we may end up failing to spill/fill some GPRs or redundantly
28278 spilling/filling some GPRs. For example, if we tend to exclude "eax"
28279 from spilling while a JSValue is retained by both "eax" and "edx",
28280 then "edx" won't be spilled as well (wrong). And if another JSValue is
28281 retained by "ecx" and "ebx", both "ecx" and "ebx" will be spilled
28282 twice. The similar problem applies to silentFillGPR.
28283 The fix is to make silentSpillGPR/silentFillGPR more straightforward,
28284 i.e., spilling/filling based on the GPR instead of the virtual
28285 register. FPR spilling/filling is also modified accordingly to make it
28286 consistent with GPR spilling/filling.
28288 * dfg/DFGJITCodeGenerator.h:
28289 (JSC::DFG::JITCodeGenerator::silentSpillGPR):
28290 (JSC::DFG::JITCodeGenerator::silentSpillFPR):
28291 (JSC::DFG::JITCodeGenerator::silentFillGPR):
28292 (JSC::DFG::JITCodeGenerator::silentFillFPR):
28293 (JSC::DFG::JITCodeGenerator::silentSpillAllRegisters):
28294 (JSC::DFG::JITCodeGenerator::silentFillAllRegisters):
28296 2011-11-12 Laszlo Gombos <laszlo.1.gombos@nokia.com>
28298 [Qt][Symbian] Remove support for WINSCW compiler
28299 https://bugs.webkit.org/show_bug.cgi?id=70178
28301 Reviewed by Chang Shu.
28303 * API/JSStringRef.h:
28304 * create_hash_table: Revert r45553.
28305 * runtime/JSGlobalData.cpp: Revert r45553.
28306 * runtime/LiteralParser.cpp: Remove WINSCW comment.
28307 (JSC::LiteralParser::Lexer::lexString):
28308 * runtime/Lookup.h: Revert r45553.
28309 * runtime/Structure.h: Revert r48461.
28311 * wtf/Assertions.h: Revert r52337.
28313 * wtf/ListRefPtr.h: Revert r48988.
28314 (WTF::ListRefPtr::~ListRefPtr):
28315 * wtf/OwnArrayPtr.h: Revert r45911.
28316 (WTF::OwnArrayPtr::operator UnspecifiedBoolType):
28317 * wtf/PassOwnArrayPtr.h:
28318 (WTF::PassOwnArrayPtr::operator UnspecifiedBoolType):
28319 * wtf/PassRefPtr.h:
28320 * wtf/StaticConstructors.h:
28321 * wtf/unicode/qt4/UnicodeQt4.h:
28323 2011-11-12 Patrick Gansterer <paroga@webkit.org>
28325 Unreviewed. Add ENABLE(DFG_JIT) around DFGCorrectableJumpPoint code.
28327 * dfg/DFGCorrectableJumpPoint.cpp:
28328 * dfg/DFGCorrectableJumpPoint.h:
28330 2011-11-12 Patrick Gansterer <paroga@webkit.org>
28332 [CMake] Move list of DFG source files into correct file
28333 https://bugs.webkit.org/show_bug.cgi?id=72212
28335 Reviewed by Daniel Bates.
28337 The DFG files are platform independent. So move them from
28338 the EFL specific file into the general CMakeLists.txt.
28341 * PlatformEfl.cmake:
28343 2011-11-12 Patrick Gansterer <paroga@webkit.org>
28345 Fix "unused variable" warning in JSLock
28346 https://bugs.webkit.org/show_bug.cgi?id=72213
28348 Reviewed by Anders Carlsson.
28350 Use ASSERT_UNUSED() instead of ASSERT() to make sure
28351 that the variable is also used in the release build.
28353 * runtime/JSLock.cpp:
28354 (JSC::JSLock::lock):
28355 (JSC::JSLock::unlock):
28357 2011-11-11 Gavin Barraclough <barraclough@apple.com>
28359 Update iOS compiler version.
28361 Reviewed by David Kilzer.
28363 * Configurations/CompilerVersion.xcconfig:
28364 - Update compiler version.
28366 2011-11-11 Gavin Barraclough <barraclough@apple.com>
28368 Update iOS port's configuration setting, particularly in Platform.h
28369 https://bugs.webkit.org/show_bug.cgi?id=72187
28371 Reviewed by David Kilzer.
28373 * interpreter/Interpreter.h:
28374 - Lower the reentry depth.
28375 * runtime/DatePrototype.cpp:
28376 - iOS also uses CF.
28377 * wtf/FastMalloc.cpp:
28378 (WTF::TCMalloc_PageHeap::IncrementalScavenge):
28379 - Update fastmalloc configuration for iOS.
28380 * wtf/OSAllocatorPosix.cpp:
28381 (WTF::OSAllocator::reserveAndCommit):
28384 - Update platform configuration for iOS.
28386 2011-11-11 David Kilzer <ddkilzer@apple.com>
28388 Only define BUILDING_ON_* and TARGETING_* macros when building for Mac OS X
28389 <http://webkit.org/b/72175>
28391 Reviewed by Joseph Pecoraro.
28393 * wtf/Platform.h: Move the definition of the BUILDING_ON_* and
28394 TARGETING_* macros to where the WTF_OS_MAC_OS_X macro is defined
28395 so that they're only defined on Mac OS X builds. Also include
28396 Availability.h, which is needed on iOS builds.
28398 2011-11-11 Darin Adler <darin@apple.com>
28400 Remove all releaseRef implementations except for RetainPtr
28401 https://bugs.webkit.org/show_bug.cgi?id=71423
28403 Reviewed by Julien Chaffraix.
28405 * API/JSRetainPtr.h: Removed releaseRef.
28406 * wtf/PassRefPtr.h: Removed releaseRef.
28408 2011-11-11 Darin Adler <darin@apple.com>
28410 * JavaScriptCore.xcodeproj/project.pbxproj: Let a newer Xcode update this file.
28411 If an older Xcode downgrades this file and we have a risk of some kind of
28412 oscillating commit situation, please contact me so I know not to do this again.
28414 2011-11-11 Mark Hahnenberg <mhahnenberg@apple.com>
28416 Add jsCast to replace static_cast
28417 https://bugs.webkit.org/show_bug.cgi?id=72071
28419 Reviewed by Geoffrey Garen.
28421 Added new jsCast and changed all of the static_cast sites in functions that
28422 are in the MethodTable to use jsCast instead.
28424 * API/JSCallbackFunction.cpp:
28425 (JSC::JSCallbackFunction::toStringCallback):
28426 (JSC::JSCallbackFunction::valueOfCallback):
28427 * API/JSCallbackObject.h:
28428 (JSC::JSCallbackObject::visitChildren):
28429 * API/JSCallbackObjectFunctions.h:
28430 (JSC::::className):
28431 (JSC::::getOwnPropertySlot):
28432 (JSC::::getOwnPropertyDescriptor):
28434 (JSC::::deleteProperty):
28435 (JSC::::deletePropertyByIndex):
28436 (JSC::::getConstructData):
28437 (JSC::::hasInstance):
28438 (JSC::::getCallData):
28439 (JSC::::getOwnPropertyNames):
28440 * debugger/DebuggerActivation.cpp:
28441 (JSC::DebuggerActivation::visitChildren):
28442 (JSC::DebuggerActivation::className):
28443 (JSC::DebuggerActivation::getOwnPropertySlot):
28444 (JSC::DebuggerActivation::put):
28445 (JSC::DebuggerActivation::putWithAttributes):
28446 (JSC::DebuggerActivation::deleteProperty):
28447 (JSC::DebuggerActivation::getOwnPropertyNames):
28448 (JSC::DebuggerActivation::getOwnPropertyDescriptor):
28449 (JSC::DebuggerActivation::defineGetter):
28450 (JSC::DebuggerActivation::defineSetter):
28451 * runtime/Arguments.cpp:
28452 (JSC::Arguments::visitChildren):
28453 (JSC::Arguments::getOwnPropertySlotByIndex):
28454 (JSC::Arguments::getOwnPropertySlot):
28455 (JSC::Arguments::getOwnPropertyDescriptor):
28456 (JSC::Arguments::getOwnPropertyNames):
28457 (JSC::Arguments::putByIndex):
28458 (JSC::Arguments::put):
28459 (JSC::Arguments::deletePropertyByIndex):
28460 (JSC::Arguments::deleteProperty):
28461 * runtime/ArrayConstructor.cpp:
28462 (JSC::ArrayConstructor::getOwnPropertySlot):
28463 (JSC::ArrayConstructor::getOwnPropertyDescriptor):
28464 * runtime/ArrayPrototype.cpp:
28465 (JSC::ArrayPrototype::getOwnPropertySlot):
28466 (JSC::ArrayPrototype::getOwnPropertyDescriptor):
28467 * runtime/BooleanPrototype.cpp:
28468 (JSC::BooleanPrototype::getOwnPropertySlot):
28469 (JSC::BooleanPrototype::getOwnPropertyDescriptor):
28470 * runtime/DateConstructor.cpp:
28471 (JSC::DateConstructor::getOwnPropertySlot):
28472 (JSC::DateConstructor::getOwnPropertyDescriptor):
28473 * runtime/DatePrototype.cpp:
28474 (JSC::DatePrototype::getOwnPropertySlot):
28475 (JSC::DatePrototype::getOwnPropertyDescriptor):
28476 * runtime/ErrorPrototype.cpp:
28477 (JSC::ErrorPrototype::getOwnPropertySlot):
28478 (JSC::ErrorPrototype::getOwnPropertyDescriptor):
28479 * runtime/Executable.cpp:
28480 (JSC::ExecutableBase::clearCode):
28481 (JSC::EvalExecutable::visitChildren):
28482 (JSC::ProgramExecutable::visitChildren):
28483 (JSC::FunctionExecutable::visitChildren):
28484 * runtime/GetterSetter.cpp:
28485 (JSC::GetterSetter::visitChildren):
28486 * runtime/JSActivation.cpp:
28487 (JSC::JSActivation::visitChildren):
28488 (JSC::JSActivation::getOwnPropertyNames):
28489 (JSC::JSActivation::getOwnPropertySlot):
28490 (JSC::JSActivation::put):
28491 (JSC::JSActivation::putWithAttributes):
28492 * runtime/JSArray.cpp:
28493 (JSC::JSArray::getOwnPropertySlotByIndex):
28494 (JSC::JSArray::getOwnPropertySlot):
28495 (JSC::JSArray::getOwnPropertyDescriptor):
28496 (JSC::JSArray::put):
28497 (JSC::JSArray::putByIndex):
28498 (JSC::JSArray::deleteProperty):
28499 (JSC::JSArray::deletePropertyByIndex):
28500 (JSC::JSArray::getOwnPropertyNames):
28501 (JSC::JSArray::visitChildren):
28502 * runtime/JSBoundFunction.cpp:
28503 (JSC::JSBoundFunction::hasInstance):
28504 (JSC::JSBoundFunction::visitChildren):
28505 * runtime/JSByteArray.cpp:
28506 (JSC::JSByteArray::getOwnPropertySlot):
28507 (JSC::JSByteArray::getOwnPropertyDescriptor):
28508 (JSC::JSByteArray::getOwnPropertySlotByIndex):
28509 (JSC::JSByteArray::put):
28510 (JSC::JSByteArray::putByIndex):
28511 (JSC::JSByteArray::getOwnPropertyNames):
28512 * runtime/JSCell.h:
28513 (JSC::JSCell::visitChildren):
28515 * runtime/JSFunction.cpp:
28516 (JSC::JSFunction::visitChildren):
28517 (JSC::JSFunction::getCallData):
28518 (JSC::JSFunction::getOwnPropertySlot):
28519 (JSC::JSFunction::getOwnPropertyDescriptor):
28520 (JSC::JSFunction::getOwnPropertyNames):
28521 (JSC::JSFunction::put):
28522 (JSC::JSFunction::deleteProperty):
28523 (JSC::JSFunction::getConstructData):
28524 * runtime/JSGlobalData.cpp:
28525 (JSC::StackPreservingRecompiler::operator()):
28526 * runtime/JSGlobalObject.cpp:
28527 (JSC::JSGlobalObject::put):
28528 (JSC::JSGlobalObject::putWithAttributes):
28529 (JSC::JSGlobalObject::defineGetter):
28530 (JSC::JSGlobalObject::defineSetter):
28531 (JSC::JSGlobalObject::visitChildren):
28532 (JSC::JSGlobalObject::getOwnPropertySlot):
28533 (JSC::JSGlobalObject::getOwnPropertyDescriptor):
28534 (JSC::JSGlobalObject::clearRareData):
28535 * runtime/JSGlobalThis.cpp:
28536 (JSC::JSGlobalThis::visitChildren):
28537 * runtime/JSONObject.cpp:
28538 (JSC::JSONObject::getOwnPropertySlot):
28539 (JSC::JSONObject::getOwnPropertyDescriptor):
28540 * runtime/JSObject.cpp:
28541 (JSC::JSObject::finalize):
28542 (JSC::JSObject::visitChildren):
28543 (JSC::JSObject::getOwnPropertySlotByIndex):
28544 (JSC::JSObject::put):
28545 (JSC::JSObject::putByIndex):
28546 (JSC::JSObject::deleteProperty):
28547 (JSC::JSObject::deletePropertyByIndex):
28548 * runtime/JSObject.h:
28549 (JSC::JSObject::getOwnPropertySlot):
28550 * runtime/JSPropertyNameIterator.cpp:
28551 (JSC::JSPropertyNameIterator::visitChildren):
28552 * runtime/JSStaticScopeObject.cpp:
28553 (JSC::JSStaticScopeObject::visitChildren):
28554 (JSC::JSStaticScopeObject::put):
28555 (JSC::JSStaticScopeObject::putWithAttributes):
28556 (JSC::JSStaticScopeObject::getOwnPropertySlot):
28557 * runtime/JSString.cpp:
28558 (JSC::JSString::visitChildren):
28559 (JSC::JSString::toThisObject):
28560 (JSC::JSString::getOwnPropertySlot):
28561 (JSC::JSString::getOwnPropertySlotByIndex):
28562 * runtime/JSVariableObject.cpp:
28563 (JSC::JSVariableObject::deleteProperty):
28564 (JSC::JSVariableObject::getOwnPropertyNames):
28565 * runtime/JSWrapperObject.cpp:
28566 (JSC::JSWrapperObject::visitChildren):
28567 * runtime/MathObject.cpp:
28568 (JSC::MathObject::getOwnPropertySlot):
28569 (JSC::MathObject::getOwnPropertyDescriptor):
28570 * runtime/NativeErrorConstructor.cpp:
28571 (JSC::NativeErrorConstructor::visitChildren):
28572 * runtime/NumberConstructor.cpp:
28573 (JSC::NumberConstructor::getOwnPropertySlot):
28574 (JSC::NumberConstructor::getOwnPropertyDescriptor):
28575 * runtime/NumberPrototype.cpp:
28576 (JSC::NumberPrototype::getOwnPropertySlot):
28577 (JSC::NumberPrototype::getOwnPropertyDescriptor):
28578 * runtime/ObjectConstructor.cpp:
28579 (JSC::ObjectConstructor::getOwnPropertySlot):
28580 (JSC::ObjectConstructor::getOwnPropertyDescriptor):
28581 * runtime/ObjectPrototype.cpp:
28582 (JSC::ObjectPrototype::put):
28583 (JSC::ObjectPrototype::getOwnPropertySlotByIndex):
28584 (JSC::ObjectPrototype::getOwnPropertySlot):
28585 (JSC::ObjectPrototype::getOwnPropertyDescriptor):
28586 * runtime/RegExpConstructor.cpp:
28587 (JSC::RegExpConstructor::getOwnPropertySlot):
28588 (JSC::RegExpConstructor::getOwnPropertyDescriptor):
28589 (JSC::RegExpConstructor::put):
28590 * runtime/RegExpMatchesArray.h:
28591 (JSC::RegExpMatchesArray::getOwnPropertySlot):
28592 (JSC::RegExpMatchesArray::getOwnPropertySlotByIndex):
28593 (JSC::RegExpMatchesArray::getOwnPropertyDescriptor):
28594 (JSC::RegExpMatchesArray::put):
28595 (JSC::RegExpMatchesArray::putByIndex):
28596 (JSC::RegExpMatchesArray::deleteProperty):
28597 (JSC::RegExpMatchesArray::deletePropertyByIndex):
28598 (JSC::RegExpMatchesArray::getOwnPropertyNames):
28599 * runtime/RegExpObject.cpp:
28600 (JSC::RegExpObject::visitChildren):
28601 (JSC::RegExpObject::getOwnPropertySlot):
28602 (JSC::RegExpObject::getOwnPropertyDescriptor):
28603 (JSC::RegExpObject::put):
28604 * runtime/RegExpPrototype.cpp:
28605 (JSC::RegExpPrototype::getOwnPropertySlot):
28606 (JSC::RegExpPrototype::getOwnPropertyDescriptor):
28607 * runtime/ScopeChain.cpp:
28608 (JSC::ScopeChainNode::visitChildren):
28609 * runtime/StringConstructor.cpp:
28610 (JSC::StringConstructor::getOwnPropertySlot):
28611 (JSC::StringConstructor::getOwnPropertyDescriptor):
28612 * runtime/StringObject.cpp:
28613 (JSC::StringObject::getOwnPropertySlot):
28614 (JSC::StringObject::getOwnPropertySlotByIndex):
28615 (JSC::StringObject::getOwnPropertyDescriptor):
28616 (JSC::StringObject::deleteProperty):
28617 (JSC::StringObject::getOwnPropertyNames):
28618 * runtime/StringPrototype.cpp:
28619 (JSC::StringPrototype::getOwnPropertySlot):
28620 (JSC::StringPrototype::getOwnPropertyDescriptor):
28621 * runtime/Structure.cpp:
28622 (JSC::Structure::visitChildren):
28623 * runtime/StructureChain.cpp:
28624 (JSC::StructureChain::visitChildren):
28626 2011-11-11 Gavin Barraclough <barraclough@apple.com>
28628 Enable DFG JIT for ARMv7/iOS.
28630 Rubber stamped by Oliver Hunt.
28633 - enable DFG JIT for ARMv7/iOS.
28635 2011-11-11 Mark Hahnenberg <mhahnenberg@apple.com>
28637 De-virtualize supportsProfiling, supportsRichSourceInfo, shouldInterruptScript in JSGlobalObject
28638 https://bugs.webkit.org/show_bug.cgi?id=72035
28640 Reviewed by Geoffrey Garen.
28642 De-virtualized the methods through the use of a new method table just for JSGlobalObject and subclasses.
28644 * JavaScriptCore.exp:
28645 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
28646 * bytecompiler/BytecodeGenerator.cpp: Changed call sites to use the new GlobalObjectMethodTable.
28647 (JSC::BytecodeGenerator::BytecodeGenerator):
28648 * interpreter/Interpreter.cpp: Ditto.
28649 (JSC::Interpreter::execute):
28650 * runtime/JSGlobalObject.cpp: Added a static const GlobalObjectMethodTable with the correct function pointers.
28651 * runtime/JSGlobalObject.h: Added a field in JSGlobalObject to keep track of the current method table.
28652 (JSC::JSGlobalObject::JSGlobalObject):
28653 (JSC::JSGlobalObject::globalObjectMethodTable): The new struct to contain the function pointers.
28654 (JSC::JSGlobalObject::supportsProfiling): Made static to put in the method table.
28655 (JSC::JSGlobalObject::supportsRichSourceInfo): Ditto.
28656 (JSC::JSGlobalObject::shouldInterruptScript): Ditto.
28657 * runtime/TimeoutChecker.cpp: Changed call sites to use the new GlobalObjectMethodTable for lookup.
28658 (JSC::TimeoutChecker::didTimeOut):
28660 2011-11-11 Mark Hahnenberg <mhahnenberg@apple.com>
28662 De-virtualize JSGlobalObject::allowsAccessFrom
28663 https://bugs.webkit.org/show_bug.cgi?id=71969
28665 Reviewed by Darin Adler.
28667 * runtime/JSGlobalObject.h: Removed allowsAccessFrom from JSGlobalObject since it is exclusive to
28668 JSDOMWindowBase and WebScriptObject.
28670 2011-11-11 Sheriff Bot <webkit.review.bot@gmail.com>
28672 Unreviewed, rolling out r99950.
28673 http://trac.webkit.org/changeset/99950
28674 https://bugs.webkit.org/show_bug.cgi?id=72117
28676 "Landed wrong patch by mistake" (Requested by yurys on
28679 * JavaScriptCore.exp:
28680 * runtime/JSFunction.cpp:
28681 * runtime/JSFunction.h:
28683 2011-11-11 Patrick Gansterer <paroga@webkit.org>
28685 Unreviewed. Build fix for !ENABLE(JIT) after r99898.
28687 * bytecode/CodeBlock.cpp:
28688 (JSC::CodeBlock::CodeBlock):
28690 2011-11-10 Dan Bernstein <mitz@apple.com>
28692 Disabling assertions breaks the debug build
28693 https://bugs.webkit.org/show_bug.cgi?id=72091
28695 Reviewed by Geoff Garen.
28697 * dfg/DFGNode.h: Made hasIdentifier() available when assertions are
28698 disabled. It is used in Graph::dump().
28699 * runtime/JSObject.cpp:
28700 (JSC::JSObject::visitChildren): Update m_isCheckingForDefaultMarkViolation
28701 only if assertions are enabled.
28703 (WTF::::checkIndexValidity): Changed ASSERT to ASSERT_UNUSED.
28704 * wtf/ThreadRestrictionVerifier.h:
28705 (WTF::ThreadRestrictionVerifier::setShared): Guarded the definition of
28706 a local variable that is only used in an assertion.
28708 2011-11-10 Filip Pizlo <fpizlo@apple.com>
28710 JSString forgets to clear m_fibers when resolving ropes
28711 https://bugs.webkit.org/show_bug.cgi?id=72089
28713 Reviewed by Geoff Garen.
28715 * runtime/JSString.cpp:
28716 (JSC::JSString::resolveRopeSlowCase):
28718 2011-11-09 Filip Pizlo <fpizlo@apple.com>
28720 DFG byte array support sometimes clamps values incorrectly
28721 https://bugs.webkit.org/show_bug.cgi?id=71975
28723 Reviewed by Oliver Hunt.
28725 * dfg/DFGSpeculativeJIT.cpp:
28726 (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
28728 2011-11-10 Filip Pizlo <fpizlo@apple.com>
28730 ValueProfile/PredictedType contains dead code, and doesn't recognize functions
28731 https://bugs.webkit.org/show_bug.cgi?id=72065
28733 Reviewed by Gavin Barraclough and Geoff Garen.
28735 Added PredictFunction support, and did some cleaning up along the way.
28736 ValueProfile no longer has statistics machinery, because we never used
28737 it. Rearranged some bits in PredictedType to more easily make room for
28738 one more object type. Changed some debug code to use more consistent
28739 conventions (ByteArray becomes Bytearray so that if we ever have a
28740 "Byte" prediction we don't get confused between a prediction that is
28741 the union of Byte and Array and a prediction that indicates precisely
28744 * bytecode/PredictedType.cpp:
28745 (JSC::predictionToString):
28746 (JSC::predictionFromClassInfo):
28747 * bytecode/PredictedType.h:
28748 (JSC::isFunctionPrediction):
28749 * bytecode/ValueProfile.cpp:
28750 * bytecode/ValueProfile.h:
28751 (JSC::ValueProfile::dump):
28752 * dfg/DFGAbstractState.cpp:
28753 (JSC::DFG::AbstractState::execute):
28754 * dfg/DFGPropagator.cpp:
28755 (JSC::DFG::Propagator::propagateNodePredictions):
28757 2011-11-10 David Kilzer <ddkilzer@apple.com>
28759 <http://webkit.org/b/72049> Specify testapi.js install path using JAVASCRIPTCORE_FRAMEWORKS_DIR
28761 Reviewed by Joseph Pecoraro.
28763 * JavaScriptCore.xcodeproj/project.pbxproj: The testapi.js
28764 script should use JAVASCRIPTCORE_FRAMEWORKS_DIR in its dstPath
28765 for installation. Also removed "Versions/A/" from the path
28766 since this is unneeded due the default symlinks present in the
28769 2011-11-10 Gavin Barraclough <barraclough@apple.com>
28771 Add ARMv7 support to the DFG JIT
28772 https://bugs.webkit.org/show_bug.cgi?id=72061
28774 Reviewed by Geoff Garen.
28776 * dfg/DFGAssemblyHelpers.h:
28777 (JSC::DFG::AssemblyHelpers::preserveReturnAddressAfterCall):
28778 (JSC::DFG::AssemblyHelpers::restoreReturnAddressBeforeReturn):
28779 (JSC::DFG::AssemblyHelpers::emitPutImmediateToCallFrameHeader):
28780 (JSC::DFG::AssemblyHelpers::boxDouble):
28781 (JSC::DFG::AssemblyHelpers::unboxDouble):
28782 - Add CPU(ARM) copies of these functions.
28783 * dfg/DFGJITCodeGenerator.h:
28784 (JSC::DFG::JITCodeGenerator::spill):
28785 - Fix matching of '}' re #if blocks, makes some tools happy.
28786 (JSC::DFG::JITCodeGenerator::setupArguments):
28787 (JSC::DFG::JITCodeGenerator::setupArgumentsWithExecState):
28788 (JSC::DFG::JITCodeGenerator::appendCallWithExceptionCheckSetResult):
28789 (JSC::DFG::JITCodeGenerator::appendCallSetResult):
28790 - Add CPU(ARM) / 4 argument register copies of these functions.
28791 * dfg/DFGJITCodeGenerator32_64.cpp:
28792 (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
28793 - Should use callOperation to plant a call to a DFG_OPERATION.
28794 (JSC::DFG::JITCodeGenerator::cachedGetById):
28795 (JSC::DFG::JITCodeGenerator::cachedPutById):
28796 - These methods need to plant a relinkable jump; we currently do so
28797 using beginUninterruptedSequence() / endUninterruptedSequence().
28798 * dfg/DFGJITCodeGenerator64.cpp:
28799 (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
28800 - Should use callOperation to plant a call to a DFG_OPERATION.
28801 * dfg/DFGJITCompiler.cpp:
28802 (JSC::DFG::JITCompiler::linkOSRExits):
28803 - This method needs to plant a relinkable jump; we currently do so
28804 using beginUninterruptedSequence() / endUninterruptedSequence().
28805 (JSC::DFG::JITCompiler::compileBody):
28806 - Add abstraction to retrieve the pc after a call.
28807 * dfg/DFGOSRExitCompiler.cpp:
28808 - Fix a bug - CodeLocationLabel needs a data address rather than an
28809 executable one, but can just take a MacroAssemblerCodePtr instead!
28810 * dfg/DFGOperations.cpp:
28811 * dfg/DFGSpeculativeJIT.cpp:
28812 (JSC::DFG::compileClampDoubleToByte):
28813 - Add FIXME comment to come back to! - bug#72054.
28814 * dfg/DFGSpeculativeJIT.h:
28815 (JSC::DFG::SpeculativeJIT::speculationCheck):
28816 - Add missing method (ooops, required by bug#72047)
28817 * dfg/DFGSpeculativeJIT32_64.cpp:
28818 - Need to wrap fmod on ARMv7.
28821 2011-11-10 Filip Pizlo <fpizlo@apple.com>
28823 DFG should not reparse code that was just parsed
28824 https://bugs.webkit.org/show_bug.cgi?id=71977
28826 Reviewed by Geoff Garen.
28828 The instruction stream of a code block is now kept around until
28829 the next GC. When doing either an optimizing compilation of an
28830 executable, or inlining of an executable, we now try to find the
28831 already preexisting bytecode. If we find it, we don't have to parse.
28832 If we don't find it, we parse as before. Inlining takes the extra
28833 step of caching code blocks, so if the same executable gets inlined
28834 multiple times into the same caller, then we parse it at most once
28835 even if prior to inlining that executable did not have any code
28836 blocks with an instruction stream.
28838 Also fixed a silly bug where the strict mode for various operations
28839 was being determined by looking at the machine code block rather
28842 To enable the delete-on-next-GC policy, I introduced the notion
28843 of an ultra weak finalizer, which anyone can register during
28844 tracing. This is thread-safe (for parallel GC) and
28845 stop-the-world-safe (so calls to free() are postponed until the
28846 world is resumed). This required reusing some facilities previously
28847 created for WeakReferenceHarvester, so I created a common utility
28848 class. I also retweaked the handling of WeakReferenceHarvesters,
28849 since they should be executed during stop-the-world since in the
28850 future we may want to allow them to call drain().
28852 2% win on SunSpider. 2% win on V8, when run in my harness. Neutral
28855 * JavaScriptCore.xcodeproj/project.pbxproj:
28856 * bytecode/CodeBlock.cpp:
28857 (JSC::CodeBlock::CodeBlock):
28858 (JSC::CodeBlock::visitAggregate):
28859 (JSC::CodeBlock::copyPostParseDataFrom):
28860 (JSC::CodeBlock::copyPostParseDataFromAlternative):
28861 (JSC::CodeBlock::finalizeUnconditionally):
28862 * bytecode/CodeBlock.h:
28863 (JSC::CodeBlock::canProduceCopyWithBytecode):
28864 (JSC::CodeBlock::discardBytecodeLater):
28865 (JSC::CodeBlock::handleBytecodeDiscardingOpportunity):
28866 (JSC::GlobalCodeBlock::GlobalCodeBlock):
28867 (JSC::ProgramCodeBlock::ProgramCodeBlock):
28868 (JSC::EvalCodeBlock::EvalCodeBlock):
28869 (JSC::FunctionCodeBlock::FunctionCodeBlock):
28870 (JSC::BytecodeDestructionBlocker::BytecodeDestructionBlocker):
28871 (JSC::BytecodeDestructionBlocker::~BytecodeDestructionBlocker):
28872 * dfg/DFGAssemblyHelpers.h:
28873 (JSC::DFG::AssemblyHelpers::strictModeFor):
28874 * dfg/DFGByteCodeCache.h: Added.
28875 (JSC::DFG::CodeBlockKey::CodeBlockKey):
28876 (JSC::DFG::CodeBlockKey::operator==):
28877 (JSC::DFG::CodeBlockKey::hash):
28878 (JSC::DFG::CodeBlockKey::executable):
28879 (JSC::DFG::CodeBlockKey::kind):
28880 (JSC::DFG::CodeBlockKey::isHashTableDeletedValue):
28881 (JSC::DFG::CodeBlockKeyHash::hash):
28882 (JSC::DFG::CodeBlockKeyHash::equal):
28883 (JSC::DFG::ByteCodeCache::ByteCodeCache):
28884 (JSC::DFG::ByteCodeCache::~ByteCodeCache):
28885 (JSC::DFG::ByteCodeCache::get):
28886 * dfg/DFGByteCodeParser.cpp:
28887 (JSC::DFG::ByteCodeParser::handleInlining):
28888 * dfg/DFGJITCodeGenerator32_64.cpp:
28889 (JSC::DFG::JITCodeGenerator::cachedPutById):
28890 * dfg/DFGJITCodeGenerator64.cpp:
28891 (JSC::DFG::JITCodeGenerator::cachedPutById):
28892 * dfg/DFGSpeculativeJIT64.cpp:
28893 (JSC::DFG::SpeculativeJIT::compile):
28895 (JSC::Heap::finalizeUnconditionally):
28896 (JSC::Heap::markRoots):
28897 (JSC::Heap::collect):
28899 * heap/ListableHandler.h: Added.
28900 (JSC::ListableHandler::ListableHandler):
28901 (JSC::ListableHandler::~ListableHandler):
28902 (JSC::ListableHandler::List::List):
28903 (JSC::ListableHandler::List::addNotThreadSafe):
28904 (JSC::ListableHandler::List::addThreadSafe):
28905 (JSC::ListableHandler::List::hasNext):
28906 (JSC::ListableHandler::List::removeNext):
28907 * heap/MarkStack.cpp:
28908 (JSC::MarkStackThreadSharedData::MarkStackThreadSharedData):
28909 (JSC::SlotVisitor::harvestWeakReferences):
28910 (JSC::SlotVisitor::finalizeUnconditionally):
28911 * heap/MarkStack.h:
28912 (JSC::MarkStack::addWeakReferenceHarvester):
28913 (JSC::MarkStack::addUnconditionalFinalizer):
28914 * heap/SlotVisitor.h:
28915 * heap/UnconditionalFinalizer.h: Added.
28916 (JSC::UnconditionalFinalizer::~UnconditionalFinalizer):
28917 * heap/WeakReferenceHarvester.h:
28918 (JSC::WeakReferenceHarvester::WeakReferenceHarvester):
28919 (JSC::WeakReferenceHarvester::~WeakReferenceHarvester):
28920 * runtime/Executable.cpp:
28921 (JSC::EvalExecutable::compileInternal):
28922 (JSC::ProgramExecutable::compileInternal):
28923 (JSC::FunctionExecutable::baselineCodeBlockFor):
28924 (JSC::FunctionExecutable::codeBlockWithBytecodeFor):
28925 (JSC::FunctionExecutable::produceCodeBlockFor):
28926 (JSC::FunctionExecutable::compileForCallInternal):
28927 (JSC::FunctionExecutable::compileForConstructInternal):
28928 * runtime/Executable.h:
28929 (JSC::FunctionExecutable::profiledCodeBlockFor):
28931 2011-11-10 Gavin Barraclough <barraclough@apple.com>
28933 Add ARMv7 register info for the DFG JIT
28934 https://bugs.webkit.org/show_bug.cgi?id=72050
28936 Reviewed by Geoff Garen.
28938 * dfg/DFGFPRInfo.h:
28939 (JSC::DFG::FPRInfo::toRegister):
28940 (JSC::DFG::FPRInfo::toIndex):
28941 (JSC::DFG::FPRInfo::debugName):
28942 * dfg/DFGGPRInfo.h:
28943 (JSC::DFG::GPRInfo::toRegister):
28944 (JSC::DFG::GPRInfo::toIndex):
28945 (JSC::DFG::GPRInfo::debugName):
28947 2011-11-10 Gavin Barraclough <barraclough@apple.com>
28949 #ifdef CPU(X86) specific div/mod code in DFGSpeculativeJIT32_64
28950 https://bugs.webkit.org/show_bug.cgi?id=72047
28952 Reviewed by Geoff Garen.
28954 We currently don't attempt to abstract divide through the macro assembler,
28955 due to these instructions commonly having specific requirements. This means
28956 there is architecture specific code in the JIT - #ifdef it, and provide a
28957 common implementation.
28959 * dfg/DFGSpeculativeJIT32_64.cpp:
28960 (JSC::DFG::fmodAsDFGOperation):
28961 (JSC::DFG::SpeculativeJIT::compile):
28963 2011-11-10 Gavin Barraclough <barraclough@apple.com>
28965 Add ENABLE_VALUE_PROFILER support for ARMv7
28966 https://bugs.webkit.org/show_bug.cgi?id=72043
28968 Reviewed by Geoff Garen.
28970 This requires us to make a bucketCounterRegister available; to do so we'll need to spill more registers on entry to JIT code.
28972 * jit/JITArithmetic32_64.cpp:
28973 (JSC::JIT::emitSlow_op_mod):
28974 - cleanup location of UNUSED_PARAM
28975 * jit/JITStubs.cpp:
28976 (JSC::ctiTrampoline):
28977 (JSC::ctiVMThrowTrampoline):
28978 (JSC::ctiOpThrowNotCaught):
28979 (JSC::JITThunks::JITThunks):
28981 - Update JITStackFrame structure & asm code to spill more registers.
28982 * jit/JSInterfaceJIT.h:
28983 - Assign a bucketCounterRegister.
28985 2011-11-10 Gavin Barraclough <barraclough@apple.com>
28987 Fix sampling counters on ARMv7, move add64 functionality to macro assembler
28988 https://bugs.webkit.org/show_bug.cgi?id=72040
28990 Reviewed by Geoff Garen.
28992 The ability to add an integer to a uint64_t in memory is poorly copied in
28993 multiple places & ifdef'ed on architecture, addWithCarry32 is also a badly
28994 designed interface since add32 is not required to set flags (we have no
28995 concept of flags in the macro assembler interface).
28997 * assembler/MacroAssemblerARMv7.h:
28998 (JSC::MacroAssemblerARMv7::add64):
28999 * assembler/MacroAssemblerX86.h:
29000 (JSC::MacroAssemblerX86::add64):
29001 * assembler/MacroAssemblerX86_64.h:
29002 (JSC::MacroAssemblerX86_64::add64):
29003 * dfg/DFGAssemblyHelpers.cpp:
29004 * dfg/DFGAssemblyHelpers.h:
29005 (JSC::DFG::AssemblyHelpers::emitCount):
29006 * dfg/DFGJITCodeGenerator.cpp:
29007 (JSC::DFG::JITCodeGenerator::writeBarrier):
29009 * jit/JITInlineMethods.h:
29010 (JSC::JIT::emitCount):
29012 011-11-10 Ryuan Choi <ryuan.choi@samsung.com>
29014 [CMAKE] Refactoring CMakeLists${PORT}.txt to Platform${PORT}.cmake
29015 https://bugs.webkit.org/show_bug.cgi?id=56705
29017 Reviewed by Adam Roben.
29020 * PlatformEfl.cmake: Renamed from Source/JavaScriptCore/CMakeListsEfl.txt.
29021 * PlatformWinCE.cmake: Renamed from Source/JavaScriptCore/CMakeListsWinCE.txt.
29022 * shell/CMakeLists.txt:
29023 * shell/PlatformEfl.cmake: Renamed from Source/JavaScriptCore/shell/CMakeListsEfl.txt.
29024 * shell/PlatformWinCE.cmake: Renamed from Source/JavaScriptCore/shell/CMakeListsWinCE.txt.
29025 * wtf/CMakeLists.txt:
29026 * wtf/PlatformEfl.cmake: Renamed from Source/JavaScriptCore/wtf/CMakeListsEfl.txt.
29027 * wtf/PlatformWinCE.cmake: Renamed from Source/JavaScriptCore/wtf/CMakeListsWinCE.txt.
29029 2011-11-10 Carlos Garcia Campos <cgarcia@igalia.com>
29031 Unreviewed. Fix make distcheck build.
29033 * GNUmakefile.list.am: Add missing files.
29035 2011-11-09 Michael Saboff <msaboff@apple.com>
29037 Towards 8 Bit Strings: Templatize JSC::LiteralParser class by character type
29038 https://bugs.webkit.org/show_bug.cgi?id=71862
29040 Changed LiteralParser to be templatized of character type.
29042 Moved five enums out of class definition to work around a clang compiler defect.
29044 Added lexIdentifier templated method to break out character specific versions.
29045 Added static setParserTokenString templated method to handle setting approriately
29046 sized string pointer.
29048 To keep code in LiteralParser.cpp and keep LiteralParser.h small, the two
29049 flavors of LiteralParser are explicitly instantiated at the end of
29052 Reviewed by Oliver Hunt.
29054 * API/JSValueRef.cpp:
29055 (JSValueMakeFromJSONString):
29056 * JavaScriptCore.exp:
29057 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
29058 * interpreter/Interpreter.cpp:
29059 (JSC::Interpreter::callEval):
29060 (JSC::Interpreter::execute):
29061 * runtime/JSGlobalObjectFunctions.cpp:
29062 (JSC::globalFuncEval):
29063 * runtime/JSONObject.cpp:
29064 (JSC::JSONProtoFuncParse):
29065 * runtime/LiteralParser.cpp:
29066 (JSC::isJSONWhiteSpace):
29067 (JSC::::tryJSONPParse):
29068 (JSC::::makeIdentifier):
29069 (JSC::::Lexer::lex):
29070 (JSC::::Lexer::lexIdentifier):
29071 (JSC::::Lexer::next):
29074 (JSC::isSafeStringCharacter):
29075 (JSC::::Lexer::lexString):
29076 (JSC::::Lexer::lexNumber):
29078 * runtime/LiteralParser.h:
29079 (JSC::LiteralParser::LiteralParser):
29080 (JSC::LiteralParser::getErrorMessage):
29081 (JSC::LiteralParser::tryLiteralParse):
29082 (JSC::LiteralParser::Lexer::Lexer):
29083 (JSC::LiteralParser::Lexer::currentToken):
29084 (JSC::LiteralParser::Lexer::getErrorMessage):
29085 * runtime/UString.h:
29088 * wtf/text/StringBuilder.cpp:
29089 (WTF::StringBuilder::append):
29090 * wtf/text/StringBuilder.h:
29091 (WTF::StringBuilder::append):
29093 2011-11-09 Filip Pizlo <fpizlo@apple.com>
29095 Multiple CodeBlock should be able to share the same instruction
29096 stream without copying
29097 https://bugs.webkit.org/show_bug.cgi?id=71978
29099 Reviewed by Oliver Hunt.
29101 This refactors CodeBlock::m_instructions to be a Vector boxed in a
29102 ref-counted object, but otherwise does not take advantage of this.
29104 This is performance neutral.
29106 * bytecode/CodeBlock.cpp:
29107 (JSC::CodeBlock::printStructure):
29108 (JSC::CodeBlock::printStructures):
29109 (JSC::CodeBlock::dump):
29110 (JSC::CodeBlock::CodeBlock):
29111 (JSC::CodeBlock::visitAggregate):
29112 (JSC::CodeBlock::shrinkToFit):
29113 * bytecode/CodeBlock.h:
29114 (JSC::CodeBlock::hasInstructions):
29115 (JSC::CodeBlock::numberOfInstructions):
29116 (JSC::CodeBlock::instructions):
29120 2011-11-09 Gavin Barraclough <barraclough@apple.com>
29122 Renovate ARMv7 assembler/macro-assembler
29123 https://bugs.webkit.org/show_bug.cgi?id=71982
29125 Reviewed by Geoff Garen.
29128 * add support for strb (byte stores)
29129 * rename the VMOV_CtoS opcodes (there are currently backwards!)
29130 * add support for adc (add with carry)
29131 * add support for vsqrt, vabs
29132 * add support for vmov (between FPRs, and to/from GPR pairs).
29133 * remove '_F64' postfixes from instructions (these aren't helpful, functions can already be distinguished by their signatures).
29134 * rename vcvt_F64_S32 to vcvt_signedToFloatingPoint, the prior postfix was unhelpful in failing to distinguish the types (S32 indicates a single precision register, but the type could be float, int32, or uint32).
29135 * rename vcvtr_S32_F64 to vcvt_floatingPointToSigned, as for previous, also vcvtr was the incorrect name for the operation (the emitted instruction truncates).
29137 MacroAssemblerARMv7:
29138 * add 3-operand versions of and32, lshift32, or32, rshift32, urshift32, sub32, xor32,
29139 * add store8, and store32 imm to base-index.
29140 * fix load32WithCompactAddressOffsetPatch to work for all gprs (the fix is a little kludgy but functional; to do better we'll have to also fix the repatching code).
29141 * Update supportsFloating* flags (all features now supported).
29142 * add moveDouble, storeDouble to absolute address, addDouble to absolute address
29143 * add 3-operand double operations.
29144 * implement sqrtDouble/absDouble
29145 * add branchTruncateDoubleToInt32, implement truncateDoubleToInt32
29146 * move should do nothing if src == dest
29147 * branchTest8-on-memory can be implemented in terms of branchTest32-on-register (branchTest8-on-register has been removed).
29148 * add 3-operand branchAdd32, branchSub32, also branchAdd32 absolute address.
29150 2011-11-09 Gavin Barraclough <barraclough@apple.com>
29152 https://bugs.webkit.org/show_bug.cgi?id=71873
29154 Reviewed by Geoff Garen.
29156 Incrementally re-landing these changes, trying to determine what went wrong.
29157 (The whole patch failed tests on the build bot but worked locally.
29159 * dfg/DFGByteCodeParser.cpp:
29160 (JSC::DFG::ByteCodeParser::handleIntrinsic):
29162 2011-11-09 Filip Pizlo <fpizlo@apple.com>
29164 DFG OSR exit code should be lazily generated
29165 https://bugs.webkit.org/show_bug.cgi?id=71744
29167 Reviewed by Gavin Barraclough.
29169 The OSR exit code is now generated the first time it is executed,
29170 rather than right after speculative compilation. Because most OSR
29171 exits are never taken, this should greatly reduce both code size
29172 and compilation time.
29174 This is a 1% win on SunSpider, and a 1% win on V8 when running in
29175 my harness. No change in V8 in V8's harness (due to the long runs,
29176 so compile time is not an issue) and no change in Kraken (again,
29177 long runs of small code so compile time has no measurable effect).
29179 * CMakeListsEfl.txt:
29180 * GNUmakefile.list.am:
29181 * JavaScriptCore.xcodeproj/project.pbxproj:
29183 * assembler/AbstractMacroAssembler.h:
29184 * assembler/MacroAssemblerX86.h:
29185 (JSC::MacroAssemblerX86::jump):
29186 * assembler/MacroAssemblerX86_64.h:
29187 (JSC::MacroAssemblerX86_64::jump):
29188 * assembler/X86Assembler.h:
29189 (JSC::X86Assembler::jmp_m):
29190 * bytecode/CodeBlock.h:
29191 (JSC::CodeBlock::createDFGDataIfNecessary):
29192 (JSC::CodeBlock::appendDFGOSREntryData):
29193 (JSC::CodeBlock::numberOfDFGOSREntries):
29194 (JSC::CodeBlock::dfgOSREntryData):
29195 (JSC::CodeBlock::dfgOSREntryDataForBytecodeIndex):
29196 (JSC::CodeBlock::appendOSRExit):
29197 (JSC::CodeBlock::appendSpeculationRecovery):
29198 (JSC::CodeBlock::numberOfOSRExits):
29199 (JSC::CodeBlock::numberOfSpeculationRecoveries):
29200 (JSC::CodeBlock::osrExit):
29201 (JSC::CodeBlock::speculationRecovery):
29202 * dfg/DFGAssemblyHelpers.h:
29203 (JSC::DFG::AssemblyHelpers::debugCall):
29204 * dfg/DFGCorrectableJumpPoint.cpp: Added.
29205 (JSC::DFG::CorrectableJumpPoint::codeLocationForRepatch):
29206 * dfg/DFGCorrectableJumpPoint.h: Added.
29207 (JSC::DFG::CorrectableJumpPoint::CorrectableJumpPoint):
29208 (JSC::DFG::CorrectableJumpPoint::switchToLateJump):
29209 (JSC::DFG::CorrectableJumpPoint::correctInitialJump):
29210 (JSC::DFG::CorrectableJumpPoint::correctLateJump):
29211 (JSC::DFG::CorrectableJumpPoint::initialJump):
29212 (JSC::DFG::CorrectableJumpPoint::lateJump):
29213 (JSC::DFG::CorrectableJumpPoint::correctJump):
29214 (JSC::DFG::CorrectableJumpPoint::getJump):
29215 * dfg/DFGJITCompiler.cpp:
29216 (JSC::DFG::JITCompiler::linkOSRExits):
29217 (JSC::DFG::JITCompiler::compileBody):
29218 (JSC::DFG::JITCompiler::link):
29219 * dfg/DFGJITCompiler.h:
29220 * dfg/DFGOSRExit.cpp: Added.
29221 (JSC::DFG::OSRExit::OSRExit):
29222 (JSC::DFG::OSRExit::dump):
29223 * dfg/DFGOSRExit.h:
29224 * dfg/DFGOSRExitCompiler.cpp: Added.
29225 * dfg/DFGOSRExitCompiler.h:
29226 * dfg/DFGOSRExitCompiler32_64.cpp:
29227 (JSC::DFG::OSRExitCompiler::compileExit):
29228 * dfg/DFGOSRExitCompiler64.cpp:
29229 (JSC::DFG::OSRExitCompiler::compileExit):
29230 * dfg/DFGOperations.cpp:
29231 * dfg/DFGSpeculativeJIT.cpp:
29232 * dfg/DFGSpeculativeJIT.h:
29233 (JSC::DFG::SpeculativeJIT::speculationCheck):
29234 * dfg/DFGThunks.cpp: Added.
29235 (JSC::DFG::osrExitGenerationThunkGenerator):
29236 * dfg/DFGThunks.h: Added.
29238 (JSC::JITCode::dataAddressAtOffset):
29239 * runtime/JSGlobalData.h:
29241 2011-11-09 Mark Hahnenberg <mhahnenberg@apple.com>
29243 Fixing build breakage
29245 Unreviewed build fix
29247 * JavaScriptCore.exp:
29248 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
29250 2011-11-09 Mark Hahnenberg <mhahnenberg@apple.com>
29252 De-virtualize JSVariableObject::isDynamicScope
29253 https://bugs.webkit.org/show_bug.cgi?id=71933
29255 Reviewed by Geoffrey Garen.
29257 * runtime/JSActivation.cpp:
29258 * runtime/JSActivation.h: Inlined and de-virtualized isDynamicScope
29259 (JSC::JSActivation::isDynamicScope):
29260 * runtime/JSGlobalObject.cpp:
29261 * runtime/JSGlobalObject.h: Inlined and de-virtualized isDynamicScope
29262 (JSC::JSGlobalObject::isDynamicScope):
29263 * runtime/JSStaticScopeObject.cpp:
29264 * runtime/JSStaticScopeObject.h: Inlined and de-virtualized isDynamicScope
29265 (JSC::JSStaticScopeObject::createStructure): Changed createStructure to use new JSType
29266 (JSC::JSStaticScopeObject::isDynamicScope):
29267 * runtime/JSType.h: Added new type for JSStaticScopeObject
29268 * runtime/JSVariableObject.cpp: De-virtualized and added an implementation that checks the
29269 object's type and calls the corresponding implementation.
29270 (JSC::JSVariableObject::isDynamicScope):
29271 * runtime/JSVariableObject.h:
29273 2011-11-09 Mark Hahnenberg <mhahnenberg@apple.com>
29275 De-virtualize JSGlobalObject::hasOwnPropertyForWrite
29276 https://bugs.webkit.org/show_bug.cgi?id=71934
29278 Reviewed by Geoffrey Garen.
29280 * runtime/JSGlobalObject.h: Removed the virtual-ness of hasOwnPropertyForWrite since nobody overrides it.
29282 2011-11-09 Gavin Barraclough <barraclough@apple.com>
29284 https://bugs.webkit.org/show_bug.cgi?id=71873
29286 Reviewed by Geoff Garen.
29288 Incrementally re-landing these changes, trying to determine what went wrong.
29289 (The whole patch failed tests on the build bot but worked locally.
29291 * assembler/MacroAssemblerARM.h:
29292 (JSC::MacroAssemblerARM::absDouble):
29293 * assembler/MacroAssemblerARMv7.h:
29294 * assembler/MacroAssemblerMIPS.h:
29295 (JSC::MacroAssemblerMIPS::absDouble):
29296 * assembler/MacroAssemblerSH4.h:
29297 (JSC::MacroAssemblerSH4::absDouble):
29298 * assembler/MacroAssemblerX86.h:
29299 (JSC::MacroAssemblerX86::absDouble):
29300 * assembler/MacroAssemblerX86Common.h:
29301 * assembler/MacroAssemblerX86_64.h:
29302 (JSC::MacroAssemblerX86_64::absDouble):
29303 * dfg/DFGSpeculativeJIT32_64.cpp:
29304 (JSC::DFG::SpeculativeJIT::compile):
29305 * dfg/DFGSpeculativeJIT64.cpp:
29306 (JSC::DFG::SpeculativeJIT::compile):
29307 * jit/ThunkGenerators.cpp:
29308 (JSC::absThunkGenerator):
29310 2011-11-09 Mark Hahnenberg <mhahnenberg@apple.com>
29312 De-virtualize JSObject::getOwnPropertyDescriptor
29313 https://bugs.webkit.org/show_bug.cgi?id=71523
29315 Reviewed by Sam Weinig.
29317 Added getOwnPropertyDescriptor to the MethodTable, changed all of the
29318 virtual versions of getOwnPropertyDescriptor to static ones, and
29319 changed all of the call sites to the corresponding lookup in the MethodTable.
29321 * API/JSCallbackObject.h:
29322 * API/JSCallbackObjectFunctions.h:
29323 (JSC::::getOwnPropertyDescriptor):
29324 * JavaScriptCore.exp:
29325 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
29326 * debugger/DebuggerActivation.cpp:
29327 (JSC::DebuggerActivation::getOwnPropertyDescriptor):
29328 * debugger/DebuggerActivation.h:
29329 * runtime/Arguments.cpp:
29330 (JSC::Arguments::getOwnPropertyDescriptor):
29331 * runtime/Arguments.h:
29332 * runtime/ArrayConstructor.cpp:
29333 (JSC::ArrayConstructor::getOwnPropertyDescriptor):
29334 * runtime/ArrayConstructor.h:
29335 * runtime/ArrayPrototype.cpp:
29336 (JSC::ArrayPrototype::getOwnPropertyDescriptor):
29337 * runtime/ArrayPrototype.h:
29338 * runtime/BooleanPrototype.cpp:
29339 (JSC::BooleanPrototype::getOwnPropertyDescriptor):
29340 * runtime/BooleanPrototype.h:
29341 * runtime/ClassInfo.h:
29342 * runtime/DateConstructor.cpp:
29343 (JSC::DateConstructor::getOwnPropertyDescriptor):
29344 * runtime/DateConstructor.h:
29345 * runtime/DatePrototype.cpp:
29346 (JSC::DatePrototype::getOwnPropertyDescriptor):
29347 * runtime/DatePrototype.h:
29348 * runtime/ErrorPrototype.cpp:
29349 (JSC::ErrorPrototype::getOwnPropertyDescriptor):
29350 * runtime/ErrorPrototype.h:
29351 * runtime/JSArray.cpp:
29352 (JSC::JSArray::getOwnPropertyDescriptor):
29353 * runtime/JSArray.h:
29354 * runtime/JSByteArray.cpp:
29355 (JSC::JSByteArray::getOwnPropertyDescriptor):
29356 * runtime/JSByteArray.h:
29357 * runtime/JSCell.cpp:
29358 (JSC::JSCell::getOwnPropertyDescriptor):
29359 * runtime/JSCell.h:
29360 * runtime/JSFunction.cpp:
29361 (JSC::JSFunction::getOwnPropertyDescriptor):
29362 * runtime/JSFunction.h:
29363 * runtime/JSGlobalObject.cpp:
29364 (JSC::JSGlobalObject::getOwnPropertyDescriptor):
29365 * runtime/JSGlobalObject.h:
29366 * runtime/JSNotAnObject.cpp:
29367 (JSC::JSNotAnObject::getOwnPropertyDescriptor):
29368 * runtime/JSNotAnObject.h:
29369 * runtime/JSONObject.cpp:
29370 (JSC::JSONObject::getOwnPropertyDescriptor):
29371 * runtime/JSONObject.h:
29372 * runtime/JSObject.cpp:
29373 (JSC::JSObject::vtableAnchor):
29374 (JSC::JSObject::propertyIsEnumerable):
29375 (JSC::JSObject::getOwnPropertyDescriptor):
29376 (JSC::JSObject::getPropertyDescriptor):
29377 (JSC::JSObject::defineOwnProperty):
29378 * runtime/JSObject.h:
29379 * runtime/JSString.cpp: Removed getOwnPropertyDescriptor, since this seems to be a relic from a
29380 bygone era when getOwnPropertyDescriptor was rooted in JSCell rather than JSObject. There were
29381 no call sites for this version of getOwnPropertyDescriptor in the entire project.
29382 * runtime/JSString.h:
29383 * runtime/Lookup.h:
29384 (JSC::getStaticPropertyDescriptor):
29385 (JSC::getStaticFunctionDescriptor):
29386 (JSC::getStaticValueDescriptor):
29387 * runtime/MathObject.cpp:
29388 (JSC::MathObject::getOwnPropertyDescriptor):
29389 * runtime/MathObject.h:
29390 * runtime/NumberConstructor.cpp:
29391 (JSC::NumberConstructor::getOwnPropertyDescriptor):
29392 * runtime/NumberConstructor.h:
29393 * runtime/NumberPrototype.cpp:
29394 (JSC::NumberPrototype::getOwnPropertyDescriptor):
29395 * runtime/NumberPrototype.h:
29396 * runtime/ObjectConstructor.cpp:
29397 (JSC::ObjectConstructor::getOwnPropertyDescriptor):
29398 (JSC::objectConstructorGetOwnPropertyDescriptor):
29399 * runtime/ObjectConstructor.h:
29400 * runtime/ObjectPrototype.cpp:
29401 (JSC::ObjectPrototype::getOwnPropertyDescriptor):
29402 * runtime/ObjectPrototype.h:
29403 * runtime/RegExpConstructor.cpp:
29404 (JSC::RegExpConstructor::getOwnPropertyDescriptor):
29405 * runtime/RegExpConstructor.h:
29406 * runtime/RegExpMatchesArray.h:
29407 (JSC::RegExpMatchesArray::getOwnPropertyDescriptor):
29408 * runtime/RegExpObject.cpp:
29409 (JSC::RegExpObject::getOwnPropertyDescriptor):
29410 * runtime/RegExpObject.h:
29411 * runtime/RegExpPrototype.cpp:
29412 (JSC::RegExpPrototype::getOwnPropertyDescriptor):
29413 * runtime/RegExpPrototype.h:
29414 * runtime/StringConstructor.cpp:
29415 (JSC::StringConstructor::getOwnPropertyDescriptor):
29416 * runtime/StringConstructor.h:
29417 * runtime/StringObject.cpp:
29418 (JSC::StringObject::vtableAnchor): Added to prevent a weak vtable.
29419 (JSC::StringObject::getOwnPropertyDescriptor):
29420 * runtime/StringObject.h:
29421 * runtime/StringPrototype.cpp:
29422 (JSC::StringPrototype::getOwnPropertyDescriptor):
29423 * runtime/StringPrototype.h:
29425 2011-11-09 Gavin Barraclough <barraclough@apple.com>
29427 https://bugs.webkit.org/show_bug.cgi?id=71873
29429 Reviewed by Geoff Garen.
29431 Incrementally re-landing these changes, trying to determine what went wrong.
29432 (The whole patch failed tests on the build bot but worked locally.
29434 * assembler/MacroAssemblerARM.h:
29435 (JSC::MacroAssemblerARM::supportsFloatingPoint):
29436 (JSC::MacroAssemblerARM::supportsFloatingPointTruncate):
29437 (JSC::MacroAssemblerARM::supportsFloatingPointSqrt):
29438 (JSC::MacroAssemblerARM::supportsFloatingPointAbs):
29439 * assembler/MacroAssemblerARMv7.h:
29440 (JSC::MacroAssemblerARMv7::supportsFloatingPoint):
29441 (JSC::MacroAssemblerARMv7::supportsFloatingPointTruncate):
29442 (JSC::MacroAssemblerARMv7::supportsFloatingPointSqrt):
29443 (JSC::MacroAssemblerARMv7::supportsFloatingPointAbs):
29444 * assembler/MacroAssemblerMIPS.h:
29445 (JSC::MacroAssemblerMIPS::supportsFloatingPoint):
29446 (JSC::MacroAssemblerMIPS::supportsFloatingPointTruncate):
29447 (JSC::MacroAssemblerMIPS::supportsFloatingPointSqrt):
29448 (JSC::MacroAssemblerMIPS::supportsFloatingPointAbs):
29449 * assembler/MacroAssemblerSH4.h:
29450 (JSC::MacroAssemblerSH4::supportsFloatingPoint):
29451 (JSC::MacroAssemblerSH4::supportsFloatingPointTruncate):
29452 (JSC::MacroAssemblerSH4::supportsFloatingPointSqrt):
29453 (JSC::MacroAssemblerSH4::supportsFloatingPointAbs):
29454 * assembler/MacroAssemblerX86.h:
29455 (JSC::MacroAssemblerX86::supportsFloatingPoint):
29456 (JSC::MacroAssemblerX86::supportsFloatingPointTruncate):
29457 (JSC::MacroAssemblerX86::supportsFloatingPointSqrt):
29458 (JSC::MacroAssemblerX86::supportsFloatingPointAbs):
29459 * assembler/MacroAssemblerX86_64.h:
29460 (JSC::MacroAssemblerX86_64::supportsFloatingPoint):
29461 (JSC::MacroAssemblerX86_64::supportsFloatingPointTruncate):
29462 (JSC::MacroAssemblerX86_64::supportsFloatingPointSqrt):
29463 (JSC::MacroAssemblerX86_64::supportsFloatingPointAbs):
29464 * jit/ThunkGenerators.cpp:
29465 (JSC::absThunkGenerator):
29467 2011-11-08 Darin Adler <darin@apple.com>
29469 Add code path in HashTable for emptyValueIsZero that does not require copying the empty value
29470 https://bugs.webkit.org/show_bug.cgi?id=71875
29472 Reviewed by Anders Carlsson.
29474 This is a step along the path of making OwnPtr work as HashMap value types.
29476 * wtf/Alignment.h: Moved the AlignedBufferChar and AlignedBuffer types from Vector.h here.
29477 Also fixed include style. To include other WTF headers inside WTF, we use "" includes.
29478 I did not change the code to fix style checker complaints.
29480 * wtf/HashTable.h: Added includes as needed and fixed include style.
29481 (WTF::doubleHash): Removed the uneeeded and inappropriate "static" in this function, which
29482 gave it internal linkage for no good reason.
29483 (WTF::HashTable::checkKey): Made this use AlignedBuffer for the deleted value check to avoid
29484 construction/destruction problems instead of doing the trick where we construct and destroy
29485 an empty value twice. It's cleaner and simpler and avoids copying the empty value.
29486 (WTF::HashTable::initializeBucket): Specialized initializeBucket to use memset when the
29487 empty value is zero rather than copying an empty value.
29489 * wtf/Vector.h: Moved the AlignedBufferChar and AlignedBuffer types into Alignment.h.
29491 2011-11-09 Gabor Rapcsanyi <rgabor@webkit.org>
29493 Buildfix for 32bit debug mode.
29495 Reviewed by Csaba Osztrogonác.
29497 * dfg/DFGAbstractState.cpp:
29498 (JSC::DFG::AbstractState::dump):
29499 * dfg/DFGGraph.cpp:
29500 (JSC::DFG::Graph::dump):
29502 2011-11-09 Andy Wingo <wingo@igalia.com>
29504 Enable the DFG JIT on X86-64 Linux platforms
29505 https://bugs.webkit.org/show_bug.cgi?id=71373
29507 Reviewed by Csaba Osztrogonác.
29509 * wtf/Platform.h (ENABLE_DFG_JIT): Enable the DFG JIT on the
29510 x86-64 GNU/Linux platform.
29511 * CMakeListsEfl.txt: Add JSValue64 implementations to EFL build.
29513 2011-11-09 Csaba Osztrogonác <ossy@webkit.org>
29515 Enable the DFG JIT on x86-64 Linux platforms
29516 https://bugs.webkit.org/show_bug.cgi?id=71373
29518 Enable DFG JIT by default on X86 Linux and Mac platforms
29519 https://bugs.webkit.org/show_bug.cgi?id=71686
29521 Buildfix for stricter compilers: -Werror=unused-but-set-variable
29523 Reviewed by Zoltan Herczeg.
29525 * dfg/DFGSpeculativeJIT.cpp:
29526 (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
29527 * dfg/DFGSpeculativeJIT32_64.cpp:
29528 (JSC::DFG::SpeculativeJIT::compile):
29529 * dfg/DFGSpeculativeJIT64.cpp:
29530 (JSC::DFG::SpeculativeJIT::compile):
29532 2011-11-09 Sheriff Bot <webkit.review.bot@gmail.com>
29534 Unreviewed, rolling out r99678.
29535 http://trac.webkit.org/changeset/99678
29536 https://bugs.webkit.org/show_bug.cgi?id=71882
29538 broke the build with -Werror=unused-but-set-variable
29539 (Requested by tronical_ on #webkit).
29541 * CMakeListsEfl.txt:
29544 2011-11-09 Andy Wingo <wingo@igalia.com>
29546 Enable the DFG JIT on X86-64 Linux platforms
29547 https://bugs.webkit.org/show_bug.cgi?id=71373
29549 Reviewed by Filip Pizlo.
29551 * wtf/Platform.h (ENABLE_DFG_JIT): Enable the DFG JIT on the
29552 x86-64 GNU/Linux platform.
29553 * CMakeListsEfl.txt: Add JSValue64 implementations to EFL build.
29555 2011-11-09 Mark Hahnenberg <mhahnenberg@apple.com>
29557 De-virtualize JSObject::defineOwnProperty
29558 https://bugs.webkit.org/show_bug.cgi?id=71429
29560 Reviewed by Geoffrey Garen.
29562 Added defineOwnProperty to the MethodTable, changed all the virtual
29563 implementations of defineOwnProperty to static ones, and replaced
29564 all call sites with corresponding lookups in the MethodTable.
29566 * JavaScriptCore.exp:
29567 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
29568 * runtime/Arguments.cpp:
29569 (JSC::Arguments::createStrictModeCallerIfNecessary):
29570 (JSC::Arguments::createStrictModeCalleeIfNecessary):
29571 * runtime/ClassInfo.h:
29572 * runtime/JSCell.cpp:
29573 (JSC::JSCell::defineOwnProperty):
29574 * runtime/JSCell.h:
29575 * runtime/JSObject.cpp:
29576 (JSC::JSObject::defineOwnProperty):
29577 * runtime/JSObject.h:
29578 * runtime/ObjectConstructor.cpp:
29579 (JSC::objectConstructorDefineProperty):
29580 (JSC::defineProperties):
29582 2011-11-09 Simon Hausmann <simon.hausmann@nokia.com>
29584 [Qt] Build system cleanup
29585 https://bugs.webkit.org/show_bug.cgi?id=71815
29587 Reviewed by Kenneth Rohde Christiansen.
29589 * wtf/wtf.pri: Moved the glib dependency to javascriptcore.prf.
29591 2011-11-08 Simon Hausmann <simon.hausmann@nokia.com>
29593 [Qt] Replace use of QApplication with QGuiApplication
29594 https://bugs.webkit.org/show_bug.cgi?id=71794
29596 Reviewed by Andreas Kling.
29598 Add compat headers for use when building with Qt 4: QGuiApplication
29599 is typedef'ed to QApplication.
29601 * wtf/qt/compat/QGuiApplication: Added.
29602 * wtf/qt/compat/qguiapplication.h: Added.
29604 2011-11-08 Sheriff Bot <webkit.review.bot@gmail.com>
29606 Unreviewed, rolling out r99647.
29607 http://trac.webkit.org/changeset/99647
29608 https://bugs.webkit.org/show_bug.cgi?id=71876
29610 It broke jsc and layout tests on all bot (Requested by
29611 Ossy_night on #webkit).
29613 * assembler/MacroAssemblerARM.h:
29614 (JSC::MacroAssemblerARM::supportsFloatingPoint):
29615 (JSC::MacroAssemblerARM::supportsFloatingPointTruncate):
29616 (JSC::MacroAssemblerARM::supportsFloatingPointSqrt):
29617 (JSC::MacroAssemblerARM::supportsDoubleBitops):
29618 (JSC::MacroAssemblerARM::andnotDouble):
29619 * assembler/MacroAssemblerARMv7.h:
29620 (JSC::MacroAssemblerARMv7::supportsFloatingPoint):
29621 (JSC::MacroAssemblerARMv7::supportsFloatingPointTruncate):
29622 (JSC::MacroAssemblerARMv7::supportsFloatingPointSqrt):
29623 (JSC::MacroAssemblerARMv7::supportsDoubleBitops):
29624 * assembler/MacroAssemblerMIPS.h:
29625 (JSC::MacroAssemblerMIPS::andnotDouble):
29626 (JSC::MacroAssemblerMIPS::supportsFloatingPoint):
29627 (JSC::MacroAssemblerMIPS::supportsFloatingPointTruncate):
29628 (JSC::MacroAssemblerMIPS::supportsFloatingPointSqrt):
29629 (JSC::MacroAssemblerMIPS::supportsDoubleBitops):
29630 * assembler/MacroAssemblerSH4.h:
29631 (JSC::MacroAssemblerSH4::supportsFloatingPoint):
29632 (JSC::MacroAssemblerSH4::supportsFloatingPointTruncate):
29633 (JSC::MacroAssemblerSH4::supportsFloatingPointSqrt):
29634 (JSC::MacroAssemblerSH4::supportsDoubleBitops):
29635 (JSC::MacroAssemblerSH4::andnotDouble):
29636 * assembler/MacroAssemblerX86.h:
29637 (JSC::MacroAssemblerX86::MacroAssemblerX86):
29638 (JSC::MacroAssemblerX86::supportsFloatingPoint):
29639 (JSC::MacroAssemblerX86::supportsFloatingPointTruncate):
29640 (JSC::MacroAssemblerX86::supportsFloatingPointSqrt):
29641 (JSC::MacroAssemblerX86::supportsDoubleBitops):
29642 * assembler/MacroAssemblerX86Common.h:
29643 (JSC::MacroAssemblerX86Common::andnotDouble):
29644 * assembler/MacroAssemblerX86_64.h:
29645 (JSC::MacroAssemblerX86_64::supportsFloatingPoint):
29646 (JSC::MacroAssemblerX86_64::supportsFloatingPointTruncate):
29647 (JSC::MacroAssemblerX86_64::supportsFloatingPointSqrt):
29648 (JSC::MacroAssemblerX86_64::supportsDoubleBitops):
29649 * assembler/X86Assembler.h:
29650 * dfg/DFGByteCodeParser.cpp:
29651 (JSC::DFG::ByteCodeParser::handleIntrinsic):
29652 * dfg/DFGSpeculativeJIT32_64.cpp:
29653 (JSC::DFG::SpeculativeJIT::compile):
29654 * dfg/DFGSpeculativeJIT64.cpp:
29655 (JSC::DFG::SpeculativeJIT::compile):
29656 * jit/ThunkGenerators.cpp:
29657 (JSC::absThunkGenerator):
29658 * runtime/JSGlobalData.cpp:
29660 2011-11-08 Gavin Barraclough <barraclough@apple.com>
29662 Better abstract 'abs' operation through the MacroAssembler.
29663 https://bugs.webkit.org/show_bug.cgi?id=71873
29665 Reviewed by Geoff Garen.
29667 Currently the x86 specific instruction sequence to perform a double abs
29668 is duplicated throughout the JITs / thunk generators.
29670 * assembler/MacroAssemblerARM.h:
29671 (JSC::MacroAssemblerARM::supportsFloatingPoint):
29672 (JSC::MacroAssemblerARM::supportsFloatingPointTruncate):
29673 (JSC::MacroAssemblerARM::supportsFloatingPointSqrt):
29674 (JSC::MacroAssemblerARM::supportsFloatingPointAbs):
29675 (JSC::MacroAssemblerARM::absDouble):
29676 - Renamed supportsFloatingPointAbs, make these methods static so that
29677 we can check the JIT's capabilites before we begin compilation.
29678 * assembler/MacroAssemblerARMv7.h:
29679 (JSC::MacroAssemblerARMv7::supportsFloatingPoint):
29680 (JSC::MacroAssemblerARMv7::supportsFloatingPointTruncate):
29681 (JSC::MacroAssemblerARMv7::supportsFloatingPointSqrt):
29682 (JSC::MacroAssemblerARMv7::supportsFloatingPointAbs):
29683 - Renamed supportsFloatingPointAbs, make these methods static so that
29684 we can check the JIT's capabilites before we begin compilation.
29685 * assembler/MacroAssemblerMIPS.h:
29686 (JSC::MacroAssemblerMIPS::absDouble):
29687 (JSC::MacroAssemblerMIPS::supportsFloatingPoint):
29688 (JSC::MacroAssemblerMIPS::supportsFloatingPointTruncate):
29689 (JSC::MacroAssemblerMIPS::supportsFloatingPointSqrt):
29690 (JSC::MacroAssemblerMIPS::supportsFloatingPointAbs):
29691 - Renamed supportsFloatingPointAbs, make these methods static so that
29692 we can check the JIT's capabilites before we begin compilation.
29693 * assembler/MacroAssemblerSH4.h:
29694 (JSC::MacroAssemblerSH4::supportsFloatingPoint):
29695 (JSC::MacroAssemblerSH4::supportsFloatingPointTruncate):
29696 (JSC::MacroAssemblerSH4::supportsFloatingPointSqrt):
29697 (JSC::MacroAssemblerSH4::supportsFloatingPointAbs):
29698 (JSC::MacroAssemblerSH4::absDouble):
29699 - Renamed supportsFloatingPointAbs, make these methods static so that
29700 we can check the JIT's capabilites before we begin compilation.
29701 * assembler/MacroAssemblerX86.h:
29702 (JSC::MacroAssemblerX86::absDouble):
29703 (JSC::MacroAssemblerX86::supportsFloatingPoint):
29704 (JSC::MacroAssemblerX86::supportsFloatingPointTruncate):
29705 (JSC::MacroAssemblerX86::supportsFloatingPointSqrt):
29706 (JSC::MacroAssemblerX86::supportsFloatingPointAbs):
29707 - Made supports* methods static so that we can check the JIT's
29708 capabilites before we begin compilation. Added absDouble.
29709 * assembler/MacroAssemblerX86Common.h:
29710 - Removed andnotDouble, added s_maskSignBit.
29711 * assembler/MacroAssemblerX86_64.h:
29712 (JSC::MacroAssemblerX86_64::absDouble):
29713 (JSC::MacroAssemblerX86_64::supportsFloatingPoint):
29714 (JSC::MacroAssemblerX86_64::supportsFloatingPointTruncate):
29715 (JSC::MacroAssemblerX86_64::supportsFloatingPointSqrt):
29716 (JSC::MacroAssemblerX86_64::supportsFloatingPointAbs):
29717 - Made supports* methods static so that we can check the JIT's
29718 capabilites before we begin compilation. Added absDouble.
29719 * assembler/X86Assembler.h:
29720 (JSC::X86Assembler::andpd_rr):
29721 (JSC::X86Assembler::andpd_mr):
29722 - Added support for andpd instruction.
29723 * dfg/DFGByteCodeParser.cpp:
29724 (JSC::DFG::ByteCodeParser::handleIntrinsic):
29725 - Added checks for supportsFloatingPointAbs, supportsFloatingPointSqrt.
29726 * dfg/DFGSpeculativeJIT32_64.cpp:
29727 (JSC::DFG::SpeculativeJIT::compile):
29728 - Switched to use doubleAbs, we can now also reuse the operand register for the result.
29729 * dfg/DFGSpeculativeJIT64.cpp:
29730 (JSC::DFG::SpeculativeJIT::compile):
29731 - Switched to use doubleAbs, we can now also reuse the operand register for the result.
29732 * jit/ThunkGenerators.cpp:
29733 - Switched to use doubleAbs.
29734 (JSC::absThunkGenerator):
29735 * runtime/JSGlobalData.cpp:
29736 - Declared MacroAssemblerX86Common::s_maskSignBit here.
29737 This is a little ugly, but it doesn't seem worth adding a whole extra .cpp
29738 to the compile for just one constant.
29740 2011-11-08 Gavin Barraclough <barraclough@apple.com>
29742 Move duplicates of SYMBOL_STRING* macros to the single location
29743 https://bugs.webkit.org/show_bug.cgi?id=71456
29745 Reviewed by Sam Weinig.
29747 * JavaScriptCore.xcodeproj/project.pbxproj:
29748 * dfg/DFGOperations.cpp:
29749 * jit/JITStubs.cpp:
29750 * wtf/InlineASM.h: Added.
29751 - Moved asm related macros.
29753 2011-11-08 Gavin Barraclough <barraclough@apple.com>
29755 Move code to handle 8bit regs from X86Assembler to MacroAssembler
29756 https://bugs.webkit.org/show_bug.cgi?id=71867
29758 Reviewed by Oliver Hunt.
29760 This code is fine, but is in the wrong place really. X86 assembler should
29761 basically just format up exactly the instruction you request - not expand
29762 out to a set of instructions (that is what the macro assembler layer is
29763 for!). For other 8-bit ops, on X86 we don't guard against clients accessing
29766 * assembler/MacroAssemblerX86Common.h:
29767 (JSC::MacroAssemblerX86Common::store8):
29768 * assembler/X86Assembler.h:
29769 (JSC::X86Assembler::movb_rm):
29772 2011-11-08 Filip Pizlo <fpizlo@apple.com>
29774 Unreviewed build fix for GTK.
29776 * GNUmakefile.list.am:
29778 2011-11-08 Gavin Barraclough <barraclough@apple.com>
29782 * assembler/X86Assembler.h:
29784 2011-11-08 Gavin Barraclough <barraclough@apple.com>
29786 Errrk, failed to commit this in last change.
29788 * assembler/X86Assembler.h:
29790 2011-11-08 Gavin Barraclough <barraclough@apple.com>
29792 Remove an unused method.
29794 Rubber stamped by Geoff Garen.
29796 * assembler/AbstractMacroAssembler.h:
29797 * assembler/AssemblerBuffer.h:
29798 - removed rewindToLabel.
29800 2011-11-08 Gavin Barraclough <barraclough@apple.com>
29802 Fix OSR entry points to calculate offsets correctly WRT to branch compaction.
29803 https://bugs.webkit.org/show_bug.cgi?id=71864
29805 Reviewed by Filip Pizlo.
29807 * assembler/LinkBuffer.h:
29808 (JSC::LinkBuffer::offsetOf):
29809 - We use this to return the offsets into the code of the entry points.
29810 * dfg/DFGJITCompiler.cpp:
29811 (JSC::DFG::JITCompiler::compileEntry):
29812 (JSC::DFG::JITCompiler::compileBody):
29813 (JSC::DFG::JITCompiler::compile):
29814 (JSC::DFG::JITCompiler::compileFunction):
29815 - Move the construction of the speculative JIT outside of
29816 compileBody, such that it is still available to link the
29817 OSR entry points at the point we are linking.
29818 * dfg/DFGJITCompiler.h:
29819 (JSC::DFG::JITCompiler::noticeOSREntry):
29820 - Pass the label of the block & linkbuffer into noticeOSREntry.
29821 * dfg/DFGSpeculativeJIT.cpp:
29822 (JSC::DFG::SpeculativeJIT::compile):
29823 (JSC::DFG::SpeculativeJIT::linkOSREntries):
29824 - Moved call to noticeOSREntry until we we linking.
29825 * dfg/DFGSpeculativeJIT.h:
29827 (JSC::JIT::privateCompileMainPass):
29828 (JSC::JIT::privateCompileSlowCases):
29829 (JSC::JIT::privateCompile):
29830 - Moved calculation of entries until we we linking.
29832 - Removed some members.
29834 2011-11-08 Filip Pizlo <fpizlo@apple.com>
29836 DFG OSR exit code should be generated by a separate compiler, not
29837 related to DFG::JITCompiler
29838 https://bugs.webkit.org/show_bug.cgi?id=71787
29840 Reviewed by Gavin Barraclough.
29842 Moves the exitSpeculativeWithOSR() method from JITCompiler to
29843 OSRExitCompiler::compileExit().
29845 * CMakeListsEfl.txt:
29846 * JavaScriptCore.xcodeproj/project.pbxproj:
29848 * dfg/DFGJITCompiler.cpp:
29849 (JSC::DFG::JITCompiler::linkOSRExits):
29850 * dfg/DFGJITCompiler32_64.cpp: Removed.
29851 * dfg/DFGOSRExitCompiler.h: Added.
29852 (JSC::DFG::OSRExitCompiler::OSRExitCompiler):
29853 * dfg/DFGOSRExitCompiler32_64.cpp: Added.
29854 (JSC::DFG::OSRExitCompiler::compileExit):
29855 * dfg/DFGOSRExitCompiler64.cpp: Added.
29856 (JSC::DFG::OSRExitCompiler::compileExit):
29857 * runtime/JSValue.h:
29859 2011-11-08 Filip Pizlo <fpizlo@apple.com>
29861 Basic DFG definitions should be moved out of DFGNode.h
29862 https://bugs.webkit.org/show_bug.cgi?id=71861
29864 Rubber-stamped by Gavin Barraclough.
29866 * JavaScriptCore.xcodeproj/project.pbxproj:
29867 * dfg/DFGCommon.h: Added.
29868 (JSC::DFG::NodeIndexTraits::defaultValue):
29870 * dfg/DFGOSRExit.h:
29871 * dfg/DFGRegisterBank.h:
29873 2011-11-08 Michael Saboff <msaboff@apple.com>
29875 Towards 8 Bit Strings: Templatize JSC::Parser class by Lexer type
29876 https://bugs.webkit.org/show_bug.cgi?id=71761
29878 Templatized Parser based on Lexer<T>. Moved two enums,
29879 SourceElementsMode and FunctionRequirements out of Parser definition
29880 to work around a clang compiler defect.
29882 Cleaned up SourceCode data() to return StringImpl* and eliminated
29883 the recently added stringData() virtual method.
29885 To keep code in Parser.cpp and keep Parser.h small, the two flavors
29886 of Parser are explicitly instantiated at the end of Parser.cpp.
29888 Reviewed by Gavin Barraclough.
29890 * interpreter/Interpreter.cpp:
29891 (JSC::appendSourceToError):
29892 * parser/Lexer.cpp:
29894 (JSC::::sourceCode):
29895 * parser/Parser.cpp:
29898 (JSC::::parseInner):
29899 (JSC::::didFinishParsing):
29900 (JSC::::allowAutomaticSemicolon):
29901 (JSC::::parseSourceElements):
29902 (JSC::::parseVarDeclaration):
29903 (JSC::::parseConstDeclaration):
29904 (JSC::::parseDoWhileStatement):
29905 (JSC::::parseWhileStatement):
29906 (JSC::::parseVarDeclarationList):
29907 (JSC::::parseConstDeclarationList):
29908 (JSC::::parseForStatement):
29909 (JSC::::parseBreakStatement):
29910 (JSC::::parseContinueStatement):
29911 (JSC::::parseReturnStatement):
29912 (JSC::::parseThrowStatement):
29913 (JSC::::parseWithStatement):
29914 (JSC::::parseSwitchStatement):
29915 (JSC::::parseSwitchClauses):
29916 (JSC::::parseSwitchDefaultClause):
29917 (JSC::::parseTryStatement):
29918 (JSC::::parseDebuggerStatement):
29919 (JSC::::parseBlockStatement):
29920 (JSC::::parseStatement):
29921 (JSC::::parseFormalParameters):
29922 (JSC::::parseFunctionBody):
29923 (JSC::::parseFunctionInfo):
29924 (JSC::::parseFunctionDeclaration):
29925 (JSC::::parseExpressionOrLabelStatement):
29926 (JSC::::parseExpressionStatement):
29927 (JSC::::parseIfStatement):
29928 (JSC::::parseExpression):
29929 (JSC::::parseAssignmentExpression):
29930 (JSC::::parseConditionalExpression):
29931 (JSC::::isBinaryOperator):
29932 (JSC::::parseBinaryExpression):
29933 (JSC::::parseProperty):
29934 (JSC::::parseObjectLiteral):
29935 (JSC::::parseStrictObjectLiteral):
29936 (JSC::::parseArrayLiteral):
29937 (JSC::::parsePrimaryExpression):
29938 (JSC::::parseArguments):
29939 (JSC::::parseMemberExpression):
29940 (JSC::::parseUnaryExpression):
29944 * parser/SourceCode.h:
29945 (JSC::SourceCode::data):
29946 (JSC::SourceCode::subExpression):
29947 * parser/SourceProvider.h:
29948 (JSC::UStringSourceProvider::data):
29950 2011-11-08 Gavin Barraclough <barraclough@apple.com>
29952 Fix PropertyAccessRecords in DFG JIT to take account of branch compaction.
29953 https://bugs.webkit.org/show_bug.cgi?id=71855
29955 Reviewed by Filip Pizlo.
29957 The DFG JIT presently calculates a set of offsets early, before branches have been compacted.
29958 This won't work on ARMv7.
29960 * assembler/AbstractMacroAssembler.h:
29961 (JSC::AbstractMacroAssembler::differenceBetweenCodePtr):
29962 * assembler/LinkBuffer.h:
29963 (JSC::LinkBuffer::locationOf):
29964 * dfg/DFGJITCodeGenerator32_64.cpp:
29965 (JSC::DFG::JITCodeGenerator::cachedGetById):
29966 (JSC::DFG::JITCodeGenerator::cachedPutById):
29967 * dfg/DFGJITCodeGenerator64.cpp:
29968 (JSC::DFG::JITCodeGenerator::cachedGetById):
29969 (JSC::DFG::JITCodeGenerator::cachedPutById):
29970 * dfg/DFGJITCompiler.cpp:
29971 (JSC::DFG::JITCompiler::link):
29972 * dfg/DFGJITCompiler.h:
29973 (JSC::DFG::PropertyAccessRecord::PropertyAccessRecord):
29974 (JSC::DFG::JITCompiler::addPropertyAccess):
29976 2011-11-08 Gavin Barraclough <barraclough@apple.com>
29978 DFG JIT calculation of OSR entry points is not THUMB2 safe
29979 https://bugs.webkit.org/show_bug.cgi?id=71852
29981 Reviewed by Oliver Hunt.
29983 Executable addresses are tagged with a low bit set to distinguish
29984 between THUMB2 and traditional ARM.
29986 * dfg/DFGJITCompiler.cpp:
29987 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
29988 * dfg/DFGJITCompiler32_64.cpp:
29989 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
29990 * dfg/DFGOSREntry.cpp:
29991 (JSC::DFG::prepareOSREntry):
29993 (JSC::JITCode::executableAddressAtOffset):
29994 (JSC::JITCode::start):
29995 (JSC::JITCode::size):
29997 2011-11-08 Michael Saboff <msaboff@apple.com>
29999 JSC::Parser::Parser leaks Lexer member
30000 https://bugs.webkit.org/show_bug.cgi?id=71847
30002 Changed m_lexer member of Parser to be OwnPtr to fix a memory leak.
30004 Reviewed by Oliver Hunt.
30006 * parser/Parser.cpp:
30007 (JSC::Parser::Parser):
30008 (JSC::Parser::parseFunctionBody):
30011 2011-11-08 Yuqiang Xian <yuqiang.xian@intel.com>
30013 Enable DFG JIT by default on X86 Linux and Mac platforms
30014 https://bugs.webkit.org/show_bug.cgi?id=71686
30016 Reviewed by Filip Pizlo.
30018 We can get 9% on SunSpider, 89% on Kraken and 37% on V8, on Linux X86.
30022 2011-11-08 Yuqiang Xian <yuqiang.xian@intel.com>
30024 DFG 32_64 - update make lists for efl, gtk, and Qt ports with DFG change r99519
30025 https://bugs.webkit.org/show_bug.cgi?id=71768
30027 Reviewed by Geoffrey Garen.
30029 Also includes a fix to make the newly introduced AssemblyHelpers
30030 friend of JSValue as we need the Tag definitions.
30032 * CMakeListsEfl.txt:
30033 * GNUmakefile.list.am:
30035 * runtime/JSValue.h:
30037 2011-11-07 Yuqiang Xian <yuqiang.xian@intel.com>
30039 Fix gcc 4.4 compilation warnings in DFG 32_64
30040 https://bugs.webkit.org/show_bug.cgi?id=71762
30042 Reviewed by Filip Pizlo.
30044 * dfg/DFGJITCodeGenerator.h:
30045 (JSC::DFG::JITCodeGenerator::registersMatched):
30047 2011-11-07 Filip Pizlo <fpizlo@apple.com>
30049 DFG code base should allow for classes not related to DFG::JITCompiler
30051 https://bugs.webkit.org/show_bug.cgi?id=71746
30053 Reviewed by Gavin Barraclough.
30055 * JavaScriptCore.xcodeproj/project.pbxproj:
30056 * dfg/DFGAssemblyHelpers.cpp: Added.
30057 (JSC::DFG::AssemblyHelpers::decodedCodeMapFor):
30058 (JSC::DFG::AssemblyHelpers::emitCount):
30059 (JSC::DFG::AssemblyHelpers::setSamplingFlag):
30060 (JSC::DFG::AssemblyHelpers::clearSamplingFlag):
30061 (JSC::DFG::AssemblyHelpers::jitAssertIsInt32):
30062 (JSC::DFG::AssemblyHelpers::jitAssertIsJSInt32):
30063 (JSC::DFG::AssemblyHelpers::jitAssertIsJSNumber):
30064 (JSC::DFG::AssemblyHelpers::jitAssertIsJSDouble):
30065 (JSC::DFG::AssemblyHelpers::jitAssertIsCell):
30066 * dfg/DFGAssemblyHelpers.h: Added.
30067 * dfg/DFGJITCompiler.cpp:
30068 * dfg/DFGJITCompiler.h:
30069 (JSC::DFG::JITCompiler::JITCompiler):
30070 (JSC::DFG::JITCompiler::graph):
30071 * dfg/DFGJITCompiler32_64.cpp:
30072 * dfg/DFGOSRExit.h: Added.
30073 (JSC::DFG::SpeculationRecovery::SpeculationRecovery):
30074 (JSC::DFG::SpeculationRecovery::type):
30075 (JSC::DFG::SpeculationRecovery::dest):
30076 (JSC::DFG::SpeculationRecovery::src):
30077 (JSC::DFG::OSRExit::numberOfRecoveries):
30078 (JSC::DFG::OSRExit::valueRecovery):
30079 (JSC::DFG::OSRExit::isArgument):
30080 (JSC::DFG::OSRExit::isVariable):
30081 (JSC::DFG::OSRExit::argumentForIndex):
30082 (JSC::DFG::OSRExit::variableForIndex):
30083 (JSC::DFG::OSRExit::operandForArgument):
30084 (JSC::DFG::OSRExit::operandForIndex):
30085 * dfg/DFGSpeculativeJIT.h:
30087 2011-11-07 Filip Pizlo <fpizlo@apple.com>
30089 Switch back to 1+1 value profiling buckets, since it didn't help on arewefastyet,
30090 but it appears to help on other benchmarks.
30092 Rubber stamped by Oliver Hunt.
30094 * bytecode/ValueProfile.h:
30096 2011-11-07 Ariya Hidayat <ariya@sencha.com>
30098 "use strict" can not contain escape sequences or line continuation
30099 https://bugs.webkit.org/show_bug.cgi?id=71532
30101 Reviewed by Darin Adler.
30103 Store the actual literal length (before the escapes and line
30104 continuation are encoded) while parsing the directive and use it
30105 for the directive comparison.
30107 * parser/Parser.cpp:
30108 (JSC::Parser::parseSourceElements):
30109 (JSC::Parser::parseStatement):
30112 2011-11-06 Filip Pizlo <fpizlo@apple.com>
30114 DFG operationCreateThis slow path may get the wrong callee in case of inlining
30115 https://bugs.webkit.org/show_bug.cgi?id=71647
30117 Reviewed by Oliver Hunt.
30119 No new tests because I only saw this manifest itself when I had other bugs
30120 leading to spurious slow path executions.
30122 * dfg/DFGJITCodeGenerator.h:
30123 (JSC::DFG::callOperation):
30124 * dfg/DFGOperations.cpp:
30125 * dfg/DFGOperations.h:
30126 * dfg/DFGSpeculativeJIT32_64.cpp:
30127 (JSC::DFG::SpeculativeJIT::compile):
30128 * dfg/DFGSpeculativeJIT64.cpp:
30129 (JSC::DFG::SpeculativeJIT::compile):
30131 2011-11-07 Mark Hahnenberg <mhahnenberg@apple.com>
30133 De-virtualize JSObject::putWithAttributes
30134 https://bugs.webkit.org/show_bug.cgi?id=71716
30136 Reviewed by Darin Adler.
30138 Added putWithAttributes to the MethodTable, changed all the virtual
30139 implementations of putWithAttributes to static ones, and replaced
30140 all call sites with corresponding lookups in the MethodTable.
30142 * API/JSObjectRef.cpp:
30143 (JSObjectSetProperty):
30144 * JavaScriptCore.exp:
30145 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
30146 * debugger/DebuggerActivation.cpp:
30147 (JSC::DebuggerActivation::putWithAttributes):
30148 * debugger/DebuggerActivation.h:
30149 * interpreter/Interpreter.cpp:
30150 (JSC::Interpreter::execute):
30151 * runtime/ClassInfo.h:
30152 * runtime/JSActivation.cpp:
30153 (JSC::JSActivation::putWithAttributes):
30154 * runtime/JSActivation.h:
30155 * runtime/JSCell.cpp:
30156 (JSC::JSCell::putWithAttributes):
30157 * runtime/JSCell.h:
30158 * runtime/JSGlobalObject.cpp:
30159 (JSC::JSGlobalObject::putWithAttributes):
30160 * runtime/JSGlobalObject.h:
30161 * runtime/JSObject.cpp:
30162 (JSC::JSObject::putWithAttributes):
30163 (JSC::putDescriptor):
30164 * runtime/JSObject.h:
30165 * runtime/JSStaticScopeObject.cpp:
30166 (JSC::JSStaticScopeObject::putWithAttributes):
30167 * runtime/JSStaticScopeObject.h:
30168 * runtime/JSVariableObject.cpp:
30169 (JSC::JSVariableObject::putWithAttributes):
30170 * runtime/JSVariableObject.h:
30172 2011-11-07 Dmitry Lomov <dslomov@google.com>
30174 Unreviewed. Release build fix.
30176 * parser/Lexer.cpp:
30177 (JSC::assertCharIsIn8BitRange):
30179 2011-11-07 Filip Pizlo <fpizlo@apple.com>
30181 Switch the value profiler back to 8 buckets, because we suspect that while this
30182 is more expensive it's also more stable.
30184 Rubber stamped by Geoff Garen.
30186 * bytecode/ValueProfile.h:
30188 2011-11-07 Andrew Wason <rectalogic@rectalogic.com>
30190 Uninitialized Heap member var
30191 https://bugs.webkit.org/show_bug.cgi?id=71722
30193 Reviewed by Filip Pizlo.
30196 (JSC::Heap::Heap): Initialize m_blockFreeingThreadShouldQuit
30198 2011-11-07 Yuqiang Xian <yuqiang.xian@intel.com>
30200 DFG 32_64 - registers cannot be reused arbitrarily if speculation failures are possible
30201 https://bugs.webkit.org/show_bug.cgi?id=71684
30203 Reviewed by Filip Pizlo.
30205 Currently in DFG JIT, we try to reuse the physical register of an
30206 operand for temporary usage if the current use of the operand is the
30207 last use. But sometimes this can be wrong, for example if there are
30208 possible speculation failures and we need to fallback to baseline JIT,
30209 the value of the operand which is supposed to be hold in the physical
30210 register can be modified by register reusing. The fixes the last
30211 inspector failures in layout test on Mac 32-bit if switching on DFG.
30213 * dfg/DFGSpeculativeJIT32_64.cpp:
30214 (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
30215 (JSC::DFG::SpeculativeJIT::compile):
30217 2011-11-07 Ryosuke Niwa <rniwa@webkit.org>
30219 REGRESSION(r99436): Broke Snow Leopard debug build
30220 https://bugs.webkit.org/show_bug.cgi?id=71713
30222 Reviewed by Darin Adler.
30224 Put the assertion in a template and use template specialization
30225 to avoid warning when instantiated with UChar or LChar.
30227 In the long term, we should have traits for unsigned integral types
30228 and use that to specialize template instead of specializing it for UChar and LChar.
30230 * parser/Lexer.cpp:
30231 (JSC::assertCharIsIn8BitRange):
30234 2011-11-07 ChangSeok Oh <shivamidow@gmail.com>
30236 [EFL] Support requestAnimationFrame API
30237 https://bugs.webkit.org/show_bug.cgi?id=67112
30239 Reviewed by Andreas Kling.
30241 Let EFL port use REQUEST_ANIMATION_FRAME_TIMER.
30245 2011-11-07 Michael Saboff <msaboff@apple.com>
30247 Towards 8 Bit Strings: Templatize JSC::Lexer class by character type
30248 https://bugs.webkit.org/show_bug.cgi?id=71331
30250 Change the Lexer class to be a template class based on the character
30251 type of the source. In the process updated the parseIdentifier()
30252 and parseString() methods to create 8 bit strings where possible.
30253 Also added some helper methods for accumulating temporary string
30254 data in the 8 and 16 bit vectors.
30256 Changed the SourceProvider::data() virtual method to return a
30257 StringImpl* instead of a UChar*.
30259 Updated the KeywordLookup generator to create code to match keywords
30260 for both 8 and 16 bit source strings.
30262 Due to a compiler bug (<rdar://problem/10194295>) moved enum
30263 definition outside of Lexer class declaration. Remove second enum
30266 Reviewed by Darin Adler.
30268 * KeywordLookupGenerator.py:
30269 * interpreter/Interpreter.cpp:
30270 (JSC::Interpreter::callEval):
30271 * parser/Lexer.cpp:
30274 (JSC::::getInvalidCharMessage):
30275 (JSC::::currentCharacter):
30277 (JSC::::internalShift):
30280 (JSC::::getUnicodeCharacter):
30281 (JSC::::shiftLineTerminator):
30282 (JSC::::lastTokenWasRestrKeyword):
30287 (JSC::::parseIdentifier):
30288 (JSC::::parseIdentifierSlowCase):
30289 (JSC::::parseString):
30290 (JSC::::parseStringSlowCase):
30292 (JSC::::parseOctal):
30293 (JSC::::parseDecimal):
30294 (JSC::::parseNumberAfterDecimalPoint):
30295 (JSC::::parseNumberAfterExponentIndicator):
30296 (JSC::::parseMultilineComment):
30297 (JSC::::nextTokenIsColon):
30299 (JSC::::scanRegExp):
30300 (JSC::::skipRegExp):
30302 (JSC::::sourceCode):
30304 (JSC::Lexer::append16):
30305 (JSC::Lexer::currentOffset):
30306 (JSC::Lexer::setOffsetFromCharOffset):
30307 (JSC::::isWhiteSpace):
30308 (JSC::::isLineTerminator):
30309 (JSC::::convertHex):
30310 (JSC::::convertUnicode):
30311 (JSC::::makeIdentifier):
30312 (JSC::::setCodeStart):
30313 (JSC::::makeIdentifierLCharFromUChar):
30314 (JSC::::lexExpectIdentifier):
30315 * parser/Parser.cpp:
30316 (JSC::Parser::Parser):
30317 (JSC::Parser::parseProperty):
30318 (JSC::Parser::parseMemberExpression):
30320 (JSC::Parser::next):
30321 (JSC::Parser::nextExpectIdentifier):
30322 * parser/ParserArena.h:
30323 (JSC::IdentifierArena::makeIdentifier):
30324 (JSC::IdentifierArena::makeIdentifierLCharFromUChar):
30325 * parser/SourceCode.h:
30326 (JSC::SourceCode::subExpression):
30327 * parser/SourceProvider.h:
30328 (JSC::UStringSourceProvider::stringData):
30329 * parser/SourceProviderCache.h:
30330 * parser/SyntaxChecker.h:
30331 * runtime/FunctionPrototype.cpp:
30332 (JSC::insertSemicolonIfNeeded):
30333 * runtime/Identifier.cpp:
30334 (JSC::IdentifierTable::add):
30335 (JSC::IdentifierLCharFromUCharTranslator::hash):
30336 (JSC::IdentifierLCharFromUCharTranslator::equal):
30337 (JSC::IdentifierLCharFromUCharTranslator::translate):
30338 (JSC::Identifier::add8):
30339 * runtime/Identifier.h:
30340 (JSC::Identifier::Identifier):
30341 (JSC::Identifier::createLCharFromUChar):
30342 (JSC::Identifier::canUseSingleCharacterString):
30343 (JSC::IdentifierCharBufferTranslator::hash):
30344 (JSC::IdentifierCharBufferTranslator::equal):
30345 (JSC::IdentifierCharBufferTranslator::translate):
30346 (JSC::Identifier::add):
30347 (JSC::Identifier::equal):
30348 (JSC::IdentifierTable::add):
30349 * runtime/JSGlobalObjectFunctions.cpp:
30351 (JSC::parseIntOverflow):
30352 (JSC::globalFuncUnescape):
30353 * runtime/JSGlobalObjectFunctions.h:
30354 (JSC::parseIntOverflow):
30355 * runtime/LiteralParser.cpp:
30356 (JSC::LiteralParser::tryJSONPParse):
30357 (JSC::LiteralParser::Lexer::lexString):
30358 * wtf/text/StringImpl.h:
30360 2011-11-07 Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
30362 [Qt] Put the jsc binary in 'bin' instead of leaving it deep in the build tree
30364 Allows us to not package up the whole Source/JavaScriptCore directory for the
30367 Reviewed-by Simon Hausmann.
30371 2011-11-06 Filip Pizlo <fpizlo@apple.com>
30373 REGRESSION(r99374): GTK+ build of the jsc binary doesn't like the call
30374 to initializeMainThread, and crashes
30375 https://bugs.webkit.org/show_bug.cgi?id=71643
30377 Reviewed by Sam Weinig.
30382 2011-11-06 Sam Weinig <sam@webkit.org>
30384 Add space missing from some class declarations
30385 https://bugs.webkit.org/show_bug.cgi?id=71632
30387 Reviewed by Anders Carlsson.
30389 * assembler/AssemblerBufferWithConstantPool.h:
30390 * bytecode/CodeBlock.h:
30391 * dfg/DFGVariableAccessData.h:
30392 * heap/VTableSpectrum.h:
30393 * jit/ExecutableAllocator.cpp:
30394 * jit/ExecutableAllocatorFixedVMPool.cpp:
30395 * wtf/MetaAllocatorHandle.h:
30398 2011-11-06 Sam Weinig <sam@webkit.org>
30400 Allow use of FINAL in JavaScriptCore
30401 https://bugs.webkit.org/show_bug.cgi?id=71630
30403 Reviewed by Anders Carlsson.
30405 * Configurations/Base.xcconfig:
30406 Don't warn about C++11 extensions used in C++98 mode.
30408 2011-11-05 Filip Pizlo <fpizlo@apple.com>
30410 Value profiling should just use two buckets
30411 https://bugs.webkit.org/show_bug.cgi?id=71619
30413 Reviewed by Gavin Barraclough.
30415 Added one more configuration options (like Heuristics::minimumOptimizationDelay),
30416 improved debugging in JIT optimization support, changed the number of buckets
30417 in the value profile from 9 to 2, and wrote a more optimal value profiling path
30418 in the old JIT to take advantage of this. It's still possible to play around with
30419 larger numbers of buckets, and we should probably keep this for a little while
30420 until we convince ourselves that using just two buckets is the right call.
30422 * bytecode/CodeBlock.cpp:
30423 (JSC::CodeBlock::shouldOptimizeNow):
30424 * bytecode/ValueProfile.h:
30425 * jit/JITInlineMethods.h:
30426 (JSC::JIT::emitValueProfilingSite):
30427 * jit/JITStubs.cpp:
30428 (JSC::DEFINE_STUB_FUNCTION):
30429 * runtime/Heuristics.cpp:
30430 (JSC::Heuristics::initializeHeuristics):
30431 * runtime/Heuristics.h:
30433 2011-11-03 Filip Pizlo <fpizlo@apple.com>
30435 JSC should be able to sample itself in a more flexible way than just sampling flags
30436 https://bugs.webkit.org/show_bug.cgi?id=71522
30438 Reviewed by Gavin Barraclough.
30440 Added a construct that looks like SamplingRegion samplingRegion("name").
30442 * JavaScriptCore.exp:
30443 * JavaScriptCore.xcodeproj/project.pbxproj:
30444 * bytecode/SamplingTool.cpp:
30445 (JSC::SamplingRegion::Locker::Locker):
30446 (JSC::SamplingRegion::Locker::~Locker):
30447 (JSC::SamplingRegion::sample):
30448 (JSC::SamplingRegion::dump):
30449 (JSC::SamplingRegion::dumpInternal):
30450 (JSC::SamplingThread::threadStartFunc):
30451 * bytecode/SamplingTool.h:
30452 (JSC::SamplingRegion::SamplingRegion):
30453 (JSC::SamplingRegion::~SamplingRegion):
30454 (JSC::SamplingRegion::exchangeCurrent):
30455 * bytecompiler/BytecodeGenerator.cpp:
30456 (JSC::BytecodeGenerator::generate):
30457 * dfg/DFGDriver.cpp:
30458 (JSC::DFG::compile):
30460 (JSC::Heap::markRoots):
30461 (JSC::Heap::collect):
30462 * heap/VTableSpectrum.cpp:
30463 (JSC::VTableSpectrum::countVPtr):
30464 (JSC::VTableSpectrum::dump):
30465 * heap/VTableSpectrum.h:
30471 * runtime/Executable.cpp:
30472 (JSC::EvalExecutable::compileInternal):
30473 (JSC::ProgramExecutable::compileInternal):
30474 (JSC::FunctionExecutable::compileForCallInternal):
30475 (JSC::FunctionExecutable::compileForConstructInternal):
30477 (WTF::weakCompareAndSwap):
30479 * wtf/Spectrum.h: Added.
30480 (WTF::Spectrum::Spectrum):
30481 (WTF::Spectrum::add):
30482 (WTF::Spectrum::get):
30483 (WTF::Spectrum::begin):
30484 (WTF::Spectrum::end):
30485 (WTF::Spectrum::KeyAndCount::KeyAndCount):
30486 (WTF::Spectrum::KeyAndCount::operator<):
30487 (WTF::Spectrum::buildList):
30490 2011-11-05 Sam Weinig <sam@webkit.org>
30494 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
30496 2011-11-04 Sam Weinig <sam@webkit.org>
30498 Reduce the number of putWithAttributes
30499 https://bugs.webkit.org/show_bug.cgi?id=71597
30501 Reviewed by Adam Roben.
30503 * JavaScriptCore.exp:
30504 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
30505 Remove exports of removed functions.
30507 * runtime/JSActivation.cpp:
30508 (JSC::JSActivation::putWithAttributes):
30509 Calling the overload without the extra parameters does the same thing.
30511 * runtime/JSObject.cpp:
30512 (JSC::JSObject::putWithAttributes):
30513 * runtime/JSObject.h:
30514 Remove four unused JSObject::putWithAttributes overloads and make one of the remaining
30515 two overloads not virtual, since no one overrides it.
30517 2011-11-04 Pratik Solanki <psolanki@apple.com>
30519 sqrtDouble and andnotDouble should be declared noreturn
30520 https://bugs.webkit.org/show_bug.cgi?id=71592
30522 Reviewed by Sam Weinig.
30524 * assembler/MacroAssemblerARMv7.h:
30526 2011-11-04 Mark Hahnenberg <mhahnenberg@apple.com>
30528 De-virtualize JSObject::hasInstance
30529 https://bugs.webkit.org/show_bug.cgi?id=71430
30531 Reviewed by Darin Adler.
30533 Added hasInstance to the MethodTable, changed all the virtual
30534 implementations of hasInstance to static ones, and replaced
30535 all call sites with corresponding lookups in the MethodTable.
30537 * API/JSCallbackObject.h:
30538 * API/JSCallbackObjectFunctions.h:
30539 (JSC::::hasInstance):
30540 * API/JSValueRef.cpp:
30541 (JSValueIsInstanceOfConstructor):
30542 * JavaScriptCore.exp:
30543 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
30544 * interpreter/Interpreter.cpp:
30545 (JSC::Interpreter::privateExecute):
30546 * jit/JITStubs.cpp:
30547 (JSC::DEFINE_STUB_FUNCTION):
30548 * runtime/ClassInfo.h:
30549 * runtime/JSBoundFunction.cpp:
30550 (JSC::JSBoundFunction::hasInstance):
30551 * runtime/JSBoundFunction.h:
30552 * runtime/JSCell.cpp:
30553 (JSC::JSCell::hasInstance):
30554 * runtime/JSCell.h:
30555 * runtime/JSObject.cpp:
30556 (JSC::JSObject::hasInstance):
30557 * runtime/JSObject.h:
30559 2011-11-04 Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
30561 [Qt] Refactor and clean up the qmake build system
30563 The qmake build system has accumulated a bit of cruft and redundancy
30564 over time. There's also a fairly tight coupling between how to build
30565 the various targets, and _what_ to build, making it harder to add new
30566 rules or sources. This patch aims to elevate these issues somewhat.
30568 This is a short-list of the changes:
30570 * The rules for how to build targets are now mostly contained as
30571 prf-files in Tools/qmake/mkspecs/features. Using mkspecs also
30572 allows us to do pre- and post-processing of each project file,
30573 which helps to clean up the actual project files.
30575 * Derived sources are no longer generated as a separate make-step
30576 but is part of each target's project file as a subdir. Makefile
30577 rules are used to ensure that we run make on the derived sources
30578 before running qmake on the actual target makefile. This makes
30579 it easier to keep a proper dependency between derived sources
30582 * We use GNU make and the compiler to generate dependencies on
30583 UNIX-based systems running Qt 5. This allows us to lessen the
30584 need to run qmake, which should reduce compile time.
30586 * WebKit2 is now build by default if building with Qt 5. It can
30587 be disabled by passing --no-webkit2 to build-webkit.
30589 The result of these changes are hopefully a cleaner and easier
30590 build system to modify, and faster build times due to no longer
30591 running qmake on every single build. It's also a first step
30592 towards possibly generating the list of sources using another
30595 https://bugs.webkit.org/show_bug.cgi?id=71222
30597 Reviewed by Simon Hausmann.
30599 * DerivedSources.pri: Added.
30600 * DerivedSources.pro: Removed.
30601 * JavaScriptCore.pro:
30602 * Target.pri: Copied from Source/JavaScriptCore/JavaScriptCore.pro.
30603 * headers.pri: Removed.
30608 2011-11-04 Yuqiang Xian <yuqiang.xian@intel.com>
30610 More code clean-up in DFG 32_64
30611 https://bugs.webkit.org/show_bug.cgi?id=71540
30613 Remove unnecessary code duplications, and fix compilation warnings.
30615 Reviewed by Gavin Barraclough.
30617 * dfg/DFGJITCompiler.cpp:
30618 (JSC::DFG::JITCompiler::emitCount):
30619 (JSC::DFG::JITCompiler::setSamplingFlag):
30620 (JSC::DFG::JITCompiler::clearSamplingFlag):
30621 (JSC::DFG::JITCompiler::jitAssertIsCell):
30622 * dfg/DFGJITCompiler32_64.cpp:
30623 * dfg/DFGSpeculativeJIT32_64.cpp:
30624 (JSC::DFG::SpeculativeJIT::compile):
30626 2011-11-04 Csaba Osztrogonác <ossy@webkit.org>
30628 De-virtualize JSObject::hasInstance
30629 https://bugs.webkit.org/show_bug.cgi?id=71430
30631 Unreviewed rolling out r99238, because it made a test crash on all platform.
30633 * API/JSCallbackObject.h:
30634 * API/JSCallbackObjectFunctions.h:
30635 (JSC::::hasInstance):
30636 * API/JSValueRef.cpp:
30637 (JSValueIsInstanceOfConstructor):
30638 * JavaScriptCore.exp:
30639 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
30640 * interpreter/Interpreter.cpp:
30641 (JSC::Interpreter::privateExecute):
30642 * jit/JITStubs.cpp:
30643 (JSC::DEFINE_STUB_FUNCTION):
30644 * runtime/ClassInfo.h:
30645 * runtime/JSBoundFunction.cpp:
30646 (JSC::JSBoundFunction::hasInstance):
30647 * runtime/JSBoundFunction.h:
30648 * runtime/JSCell.cpp:
30649 * runtime/JSCell.h:
30650 * runtime/JSObject.cpp:
30651 (JSC::JSObject::hasInstance):
30652 * runtime/JSObject.h:
30654 2011-11-03 Mark Hahnenberg <mhahnenberg@apple.com>
30656 De-virtualize JSObject::getPropertyNames
30657 https://bugs.webkit.org/show_bug.cgi?id=71306
30659 Reviewed by Darin Adler.
30661 Added getPropertyNames to the MethodTable, changed all the virtual
30662 implementations of getPropertyNames to static ones, and replaced
30663 all call sites with corresponding lookups in the MethodTable.
30665 * API/JSObjectRef.cpp:
30666 (JSObjectCopyPropertyNames):
30667 * JavaScriptCore.exp:
30668 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
30669 * debugger/DebuggerActivation.cpp:
30670 (JSC::DebuggerActivation::getOwnPropertyNames):
30671 * runtime/ClassInfo.h:
30672 * runtime/JSCell.cpp:
30673 (JSC::JSCell::getPropertyNames):
30674 * runtime/JSCell.h:
30675 * runtime/JSObject.cpp:
30676 (JSC::JSObject::getPropertyNames):
30677 (JSC::JSObject::getOwnPropertyNames):
30678 * runtime/JSObject.h:
30679 * runtime/JSPropertyNameIterator.cpp:
30680 (JSC::JSPropertyNameIterator::create):
30681 * runtime/ScopeChain.cpp:
30682 (JSC::ScopeChainNode::print):
30683 * runtime/Structure.cpp:
30684 (JSC::Structure::getPropertyNamesFromStructure):
30685 * runtime/Structure.h:
30687 2011-11-03 Darin Adler <darin@apple.com>
30689 Change remaining callers of releaseRef to call leakRef
30690 https://bugs.webkit.org/show_bug.cgi?id=71422
30692 * wtf/text/AtomicString.cpp:
30693 (WTF::HashAndUTF8CharactersTranslator::translate): Use leakRef.
30695 2011-11-02 Darin Adler <darin@apple.com>
30697 Change remaining callers of releaseRef to call leakRef
30698 https://bugs.webkit.org/show_bug.cgi?id=71422
30700 * wtf/text/AtomicString.cpp:
30701 (WTF::HashAndUTF8CharactersTranslator::translate): Use leakRef.
30703 2011-11-03 Mark Hahnenberg <mhahnenberg@apple.com>
30705 De-virtualize JSObject::hasInstance
30706 https://bugs.webkit.org/show_bug.cgi?id=71430
30708 Reviewed by Darin Adler.
30710 Added hasInstance to the MethodTable, changed all the virtual
30711 implementations of hasInstance to static ones, and replaced
30712 all call sites with corresponding lookups in the MethodTable.
30714 * API/JSCallbackObject.h:
30715 * API/JSCallbackObjectFunctions.h:
30716 (JSC::::hasInstance):
30717 * API/JSValueRef.cpp:
30718 (JSValueIsInstanceOfConstructor):
30719 * JavaScriptCore.exp:
30720 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
30721 * interpreter/Interpreter.cpp:
30722 (JSC::Interpreter::privateExecute):
30723 * jit/JITStubs.cpp:
30724 (JSC::DEFINE_STUB_FUNCTION):
30725 * runtime/ClassInfo.h:
30726 * runtime/JSBoundFunction.cpp:
30727 (JSC::JSBoundFunction::hasInstance):
30728 * runtime/JSBoundFunction.h:
30729 * runtime/JSCell.cpp:
30730 (JSC::JSCell::hasInstance):
30731 * runtime/JSCell.h:
30732 * runtime/JSObject.cpp:
30733 (JSC::JSObject::hasInstance):
30734 * runtime/JSObject.h:
30736 2011-11-03 Filip Pizlo <fpizlo@apple.com>
30738 JIT-specific code should be able to refer to register types even on JIT-disabled builds
30739 https://bugs.webkit.org/show_bug.cgi?id=71498
30741 Reviewed by Gavin Barraclough.
30743 * assembler/MacroAssembler.h:
30744 (MacroAssembler::MacroAssembler):
30746 2011-11-03 Mark Hahnenberg <mhahnenberg@apple.com>
30748 De-virtualize JSObject::className
30749 https://bugs.webkit.org/show_bug.cgi?id=71428
30751 Reviewed by Sam Weinig.
30753 Added className to the MethodTable, changed all the virtual
30754 implementations of className to static ones, and replaced
30755 all call sites with corresponding lookups in the MethodTable.
30757 * API/JSCallbackObject.h:
30758 * API/JSCallbackObjectFunctions.h:
30759 (JSC::::className):
30760 * JavaScriptCore.exp:
30761 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
30762 * debugger/DebuggerActivation.cpp:
30763 (JSC::DebuggerActivation::className):
30764 * debugger/DebuggerActivation.h:
30766 (GlobalObject::createStructure):
30767 * profiler/Profiler.cpp:
30768 (JSC::Profiler::createCallIdentifier):
30769 * runtime/ClassInfo.h:
30770 * runtime/JSCell.cpp:
30771 (JSC::JSCell::className):
30772 * runtime/JSCell.h:
30773 * runtime/JSObject.cpp:
30774 (JSC::JSObject::className):
30775 * runtime/JSObject.h:
30776 * runtime/ObjectPrototype.cpp:
30777 (JSC::objectProtoFuncToString):
30779 (GlobalObject::createStructure):
30781 2011-11-02 Jer Noble <jer.noble@apple.com>
30783 Add Clock class and platform-specific implementations.
30784 https://bugs.webkit.org/show_bug.cgi?id=71341
30786 Reviewed by Sam Weinig.
30788 Add WTF_USE_COREAUDIO macro for use by PlatformClockCA.
30792 2011-11-03 Pavel Feldman <pfeldman@chromium.org>
30794 Not reviewed: fixing win build. step2.
30796 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
30798 2011-11-03 Pavel Feldman <pfeldman@chromium.org>
30800 Not reviewed: fix windows build, step1
30802 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
30804 2011-11-03 Pavel Feldman <pfeldman@google.com>
30806 Web Inspector: preserve script location for inline handlers.
30807 https://bugs.webkit.org/show_bug.cgi?id=71367
30809 Makes SourceCode factories receive TextPosition instead of the line number;
30810 Stores consistent position values in SourceCode and SourceProvider;
30812 Reviewed by Yury Semikhatsky.
30815 (JSEvaluateScript):
30816 (JSCheckScriptSyntax):
30817 * API/JSObjectRef.cpp:
30818 (JSObjectMakeFunction):
30819 * parser/SourceCode.h:
30821 * parser/SourceProvider.h:
30822 (JSC::SourceProvider::SourceProvider):
30823 (JSC::SourceProvider::startPosition):
30824 (JSC::UStringSourceProvider::create):
30825 (JSC::UStringSourceProvider::UStringSourceProvider):
30826 * runtime/FunctionConstructor.cpp:
30827 (JSC::constructFunction):
30828 (JSC::constructFunctionSkippingEvalEnabledCheck):
30829 * runtime/FunctionConstructor.h:
30831 2011-11-03 Kentaro Hara <haraken@chromium.org>
30833 Fixed wrong implementation of doubleValue % 2^{64}.
30834 https://bugs.webkit.org/show_bug.cgi?id=67980
30836 Reviewed by Hajime Morita.
30838 fast/events/constructors/progress-event-constructor.html was failing
30839 because of the wrong implementation of conversion from an ECMAScript value
30840 to an IDL unsigned long long value (Spec: http://www.w3.org/TR/WebIDL/#es-unsigned-long-long).
30841 In particular, the calculation of doubleValue % 2^{64} was wrong.
30842 This patch implemented it correctly in doubleToInteger() in wtf/MathExtras.h.
30844 * wtf/MathExtras.h:
30845 (doubleToInteger): Implemented the spec correctly.
30847 2011-11-03 Sheriff Bot <webkit.review.bot@gmail.com>
30849 Unreviewed, rolling out r99089.
30850 http://trac.webkit.org/changeset/99089
30851 https://bugs.webkit.org/show_bug.cgi?id=71448
30853 @plt postfix for math functions cause crash on Linux 32 (the
30854 symbol is defined but it points to NULL) (Requested by
30855 zherczeg on #webkit).
30857 * dfg/DFGOperations.cpp:
30858 * jit/JITStubs.cpp:
30859 * jit/ThunkGenerators.cpp:
30861 2011-11-02 Filip Pizlo <fpizlo@apple.com>
30863 DFG inlining breaks function.arguments[something] if the argument being
30864 retrieved was subjected to DFG's unboxing optimizations
30865 https://bugs.webkit.org/show_bug.cgi?id=71436
30867 Reviewed by Oliver Hunt.
30869 This makes inlined arguments retrieval use some of the same machinery as
30870 OSR to determine where from, and how, to retrieve a value that the DFG
30871 might have somehow squirreled away while the old JIT would put it in its
30872 obvious location, using an obvious format.
30874 To that end, previously DFG-internal notions such as DataFormat,
30875 VirtualRegister, and ValueRecovery are now in bytecode/ since they are
30876 stored as part of InlineCallFrames.
30878 * bytecode/CodeOrigin.h:
30879 * dfg/DFGAbstractState.cpp:
30880 (JSC::DFG::AbstractState::execute):
30881 * dfg/DFGByteCodeParser.cpp:
30882 (JSC::DFG::ByteCodeParser::handleInlining):
30883 (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
30884 * dfg/DFGJITCompiler.cpp:
30885 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
30886 * dfg/DFGJITCompiler32_64.cpp:
30887 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
30889 * dfg/DFGPropagator.cpp:
30890 (JSC::DFG::Propagator::propagateNodePredictions):
30891 * dfg/DFGSpeculativeJIT.cpp:
30892 (JSC::DFG::SpeculativeJIT::compile):
30893 * dfg/DFGSpeculativeJIT64.cpp:
30894 (JSC::DFG::SpeculativeJIT::compile):
30895 * interpreter/CallFrame.cpp:
30896 (JSC::CallFrame::trueCallerFrame):
30897 * interpreter/CallFrame.h:
30898 (JSC::ExecState::inlineCallFrame):
30899 * interpreter/Register.h:
30900 (JSC::Register::asInlineCallFrame):
30901 (JSC::Register::unboxedInt32):
30902 (JSC::Register::unboxedBoolean):
30903 (JSC::Register::unboxedCell):
30904 * runtime/Arguments.h:
30905 (JSC::Arguments::finishCreationAndCopyRegisters):
30907 2011-11-02 Filip Pizlo <fpizlo@apple.com>
30909 ValueRecovery should be moved out of the DFG JIT
30910 https://bugs.webkit.org/show_bug.cgi?id=71439
30912 Reviewed by Oliver Hunt.
30914 * JavaScriptCore.xcodeproj/project.pbxproj:
30915 * bytecode/DataFormat.h: Added.
30916 (JSC::dataFormatToString):
30917 (JSC::needDataFormatConversion):
30919 (JSC::isJSInteger):
30922 (JSC::isJSBoolean):
30923 * bytecode/ValueRecovery.h: Added.
30924 (JSC::ValueRecovery::ValueRecovery):
30925 (JSC::ValueRecovery::alreadyInRegisterFile):
30926 (JSC::ValueRecovery::alreadyInRegisterFileAsUnboxedInt32):
30927 (JSC::ValueRecovery::alreadyInRegisterFileAsUnboxedCell):
30928 (JSC::ValueRecovery::alreadyInRegisterFileAsUnboxedBoolean):
30929 (JSC::ValueRecovery::inGPR):
30930 (JSC::ValueRecovery::inPair):
30931 (JSC::ValueRecovery::inFPR):
30932 (JSC::ValueRecovery::displacedInRegisterFile):
30933 (JSC::ValueRecovery::constant):
30934 (JSC::ValueRecovery::technique):
30935 (JSC::ValueRecovery::isInRegisters):
30936 (JSC::ValueRecovery::gpr):
30937 (JSC::ValueRecovery::tagGPR):
30938 (JSC::ValueRecovery::payloadGPR):
30939 (JSC::ValueRecovery::fpr):
30940 (JSC::ValueRecovery::virtualRegister):
30941 (JSC::ValueRecovery::dump):
30942 * bytecode/VirtualRegister.h: Added.
30943 * dfg/DFGGenerationInfo.h:
30944 (JSC::DFG::GenerationInfo::isJSFormat):
30945 * dfg/DFGSpeculativeJIT.cpp:
30946 (JSC::DFG::ValueSource::dump):
30947 * dfg/DFGSpeculativeJIT.h:
30948 * dfg/DFGVariableAccessData.h:
30950 2011-11-02 Sam Weinig <sam@webkit.org>
30952 Object.getOwnPropertyDescriptor() does not retrieve the getter/setter from a property on the window that has been overridden with a getter/setter
30953 https://bugs.webkit.org/show_bug.cgi?id=71333
30955 Reviewed by Gavin Barraclough.
30957 Tested by fast/dom/getter-on-window-object2.html
30959 * runtime/PropertyDescriptor.cpp:
30960 (JSC::PropertyDescriptor::setDescriptor):
30961 The attributes returned from Structure::get do not include Getter or Setter, so
30962 instead check if the value is a GetterSetter like we do elsewhere. If it is, update
30963 the descriptor's attributes accordingly.
30965 2011-11-02 Yuqiang Xian <yuqiang.xian@intel.com>
30967 FunctionPtr should accept FASTCALL functions on X86
30968 https://bugs.webkit.org/show_bug.cgi?id=71434
30970 Reviewed by Filip Pizlo.
30972 On X86 we sometimes use FASTCALL convention functions, for example the
30973 cti functions, and we may need the pointers to such functions, e.g.,
30974 in current DFG register file check and arity check, though long term
30975 we may avoid such usage of cti calls in DFG.
30977 * assembler/MacroAssemblerCodeRef.h:
30978 (JSC::FunctionPtr::FunctionPtr):
30980 2011-11-02 Filip Pizlo <fpizlo@apple.com>
30982 Inlined uses of the global object should use the right global object
30983 https://bugs.webkit.org/show_bug.cgi?id=71427
30985 Reviewed by Oliver Hunt.
30987 * dfg/DFGJITCompiler.h:
30988 (JSC::DFG::JITCompiler::globalObjectFor):
30989 * dfg/DFGSpeculativeJIT64.cpp:
30990 (JSC::DFG::SpeculativeJIT::compile):
30992 2011-11-02 Yuqiang Xian <yuqiang.xian@intel.com>
30994 Remove some unnecessary loads/stores in DFG JIT 32_64
30995 https://bugs.webkit.org/show_bug.cgi?id=71090
30997 Reviewed by Filip Pizlo.
30999 In fillSpeculateCell and OSR exit, some unnecessary loads/stores can
31002 * dfg/DFGJITCompiler32_64.cpp:
31003 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
31004 * dfg/DFGSpeculativeJIT32_64.cpp:
31005 (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
31007 2011-11-02 Adam Klein <adamk@chromium.org>
31009 Replace usage of StringImpl with String where possible in CharacterData and Text
31010 https://bugs.webkit.org/show_bug.cgi?id=71383
31012 Reviewed by Darin Adler.
31014 * wtf/text/WTFString.h:
31015 (WTF::String::containsOnlyWhitespace): Added new method.
31017 2011-11-02 Mark Hahnenberg <mhahnenberg@apple.com>
31019 De-virtualize JSObject::getOwnPropertyNames
31020 https://bugs.webkit.org/show_bug.cgi?id=71307
31022 Reviewed by Darin Adler.
31024 Added getOwnPropertyNames to the MethodTable, changed all the virtual
31025 implementations of getOwnPropertyNames to static ones, and replaced
31026 all call sites with corresponding lookups in the MethodTable.
31028 * API/JSCallbackObject.h:
31029 * API/JSCallbackObjectFunctions.h:
31030 (JSC::::getOwnPropertyNames):
31031 * JavaScriptCore.exp:
31032 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
31033 * debugger/DebuggerActivation.cpp:
31034 (JSC::DebuggerActivation::getOwnPropertyNames):
31035 * debugger/DebuggerActivation.h:
31036 * runtime/Arguments.cpp:
31037 (JSC::Arguments::getOwnPropertyNames):
31038 * runtime/Arguments.h:
31039 * runtime/ClassInfo.h:
31040 * runtime/JSActivation.cpp:
31041 (JSC::JSActivation::getOwnPropertyNames):
31042 * runtime/JSActivation.h:
31043 * runtime/JSArray.cpp:
31044 (JSC::JSArray::getOwnPropertyNames):
31045 * runtime/JSArray.h:
31046 * runtime/JSByteArray.cpp:
31047 (JSC::JSByteArray::getOwnPropertyNames):
31048 * runtime/JSByteArray.h:
31049 * runtime/JSCell.cpp:
31050 (JSC::JSCell::getOwnPropertyNames):
31051 * runtime/JSCell.h:
31052 * runtime/JSFunction.cpp:
31053 (JSC::JSFunction::getOwnPropertyNames):
31054 * runtime/JSFunction.h:
31055 * runtime/JSNotAnObject.cpp:
31056 (JSC::JSNotAnObject::getOwnPropertyNames):
31057 * runtime/JSNotAnObject.h:
31058 * runtime/JSONObject.cpp:
31059 (JSC::Stringifier::Holder::appendNextProperty):
31060 (JSC::Walker::walk):
31061 * runtime/JSObject.cpp:
31062 (JSC::JSObject::getPropertyNames):
31063 (JSC::JSObject::getOwnPropertyNames):
31064 * runtime/JSObject.h:
31065 * runtime/JSVariableObject.cpp:
31066 (JSC::JSVariableObject::~JSVariableObject):
31067 (JSC::JSVariableObject::getOwnPropertyNames):
31068 * runtime/JSVariableObject.h:
31069 * runtime/ObjectConstructor.cpp:
31070 (JSC::objectConstructorGetOwnPropertyNames):
31071 (JSC::objectConstructorKeys):
31072 (JSC::defineProperties):
31073 * runtime/RegExpMatchesArray.h:
31074 (JSC::RegExpMatchesArray::getOwnPropertyNames):
31075 * runtime/StringObject.cpp:
31076 (JSC::StringObject::getOwnPropertyNames):
31077 * runtime/StringObject.h:
31078 * runtime/Structure.h:
31080 2011-11-02 Dean Jackson <dino@apple.com>
31082 Add ENABLE_CSS_SHADERS flag
31083 https://bugs.webkit.org/show_bug.cgi?id=71394
31085 Reviewed by Sam Weinig.
31087 * Configurations/FeatureDefines.xcconfig:
31089 2011-11-02 Alexey Shabalin <a.shabalin@gmail.com>
31091 TEXTREL in libjavascriptcoregtk-1.0.so.0.11.0 on x86 (or i586)
31092 https://bugs.webkit.org/show_bug.cgi?id=70610
31094 Reviewed by Martin Robinson.
31096 Properly annotate ASM on BSD and Linux x86 systems.
31098 * dfg/DFGOperations.cpp: Add annotation for X86.
31099 * jit/JITStubs.cpp: Ditto.
31100 * jit/ThunkGenerators.cpp: Ditto.
31102 2011-11-02 Xianzhu Wang <wangxianzhu@chromium.org>
31104 Missing Force8BitConstructor in 8-bit version of StringImpl::reallocate()
31105 https://bugs.webkit.org/show_bug.cgi?id=71347
31107 Reviewed by Geoffrey Garen.
31109 * wtf/text/StringImpl.cpp:
31110 (WTF::StringImpl::reallocate):
31112 2011-11-01 Darin Adler <darin@apple.com>
31114 Cut down on malloc/free a bit in the parser arena
31115 https://bugs.webkit.org/show_bug.cgi?id=71343
31117 Reviewed by Oliver Hunt.
31119 * parser/ParserArena.cpp:
31120 (JSC::ParserArena::deallocateObjects): Call the destructors of
31121 the deletable objects before freeing the pools. Don't call
31122 fastFree on the deletable objects any more.
31124 * parser/ParserArena.h:
31125 (JSC::ParserArena::allocateDeletable): Use allocateFreeable
31126 instead of fastMalloc here.
31128 2011-11-01 Sam Weinig <sam@webkit.org>
31130 Implement __lookupGetter__/__lookupSetter__ in terms of getPropertyDescriptor
31131 https://bugs.webkit.org/show_bug.cgi?id=71336
31133 Reviewed by Darin Adler.
31135 * debugger/DebuggerActivation.cpp:
31136 * debugger/DebuggerActivation.h:
31137 Remove overrides of lookupGetter/lookupSetter, which are no longer needed
31138 due to implementing getPropertyDescriptor.
31140 * runtime/JSObject.cpp:
31141 (JSC::JSObject::lookupGetter):
31142 (JSC::JSObject::lookupSetter):
31143 * runtime/JSObject.h:
31144 De-virtualize lookupGetter/lookupSetter, and implement them in terms of
31145 getPropertyDescriptor.
31147 2011-11-01 Mark Hahnenberg <mhahnenberg@apple.com>
31149 De-virtualize JSObject::defineSetter
31150 https://bugs.webkit.org/show_bug.cgi?id=71303
31152 Reviewed by Darin Adler.
31154 Added defineSetter to the MethodTable, changed all the virtual
31155 implementations of defineSetter to static ones, and replaced
31156 all call sites with corresponding lookups in the MethodTable.
31158 * JavaScriptCore.exp:
31159 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
31160 * debugger/DebuggerActivation.cpp:
31161 (JSC::DebuggerActivation::defineSetter):
31162 * debugger/DebuggerActivation.h:
31163 * interpreter/Interpreter.cpp:
31164 (JSC::Interpreter::privateExecute):
31165 * jit/JITStubs.cpp:
31166 (JSC::DEFINE_STUB_FUNCTION):
31167 * runtime/ClassInfo.h:
31168 * runtime/JSCell.cpp:
31169 (JSC::JSCell::defineSetter):
31170 * runtime/JSCell.h:
31171 * runtime/JSGlobalObject.cpp:
31172 (JSC::JSGlobalObject::defineSetter):
31173 * runtime/JSGlobalObject.h:
31174 * runtime/JSObject.cpp:
31175 (JSC::JSObject::defineSetter):
31176 (JSC::putDescriptor):
31177 * runtime/JSObject.h:
31178 * runtime/ObjectPrototype.cpp:
31179 (JSC::objectProtoFuncDefineSetter):
31181 2011-11-01 Filip Pizlo <fpizlo@apple.com>
31183 DFG inlining breaks function.arguments
31184 https://bugs.webkit.org/show_bug.cgi?id=71329
31186 Reviewed by Oliver Hunt.
31188 The DFG was forgetting to store code origin mappings for inlined
31189 call sites. Some of the fast-path optimizations for
31190 CallFrame::trueCallerFrame() were wrong. An assertion in Arguments
31193 I also took the opportunity to decrease code duplication between
31194 DFG64 and DFG32_64, because I didn't feel like writing the same
31197 * bytecode/CodeBlock.h:
31198 (JSC::ExecState::isInlineCallFrame):
31199 * dfg/DFGJITCompiler.cpp:
31200 (JSC::DFG::JITCompiler::compileEntry):
31201 (JSC::DFG::JITCompiler::compileBody):
31202 (JSC::DFG::JITCompiler::link):
31203 (JSC::DFG::JITCompiler::compile):
31204 (JSC::DFG::JITCompiler::compileFunction):
31205 * dfg/DFGJITCompiler32_64.cpp:
31207 * interpreter/CallFrame.cpp:
31208 (JSC::CallFrame::trueCallerFrame):
31209 * interpreter/CallFrame.h:
31210 * runtime/Arguments.h:
31211 (JSC::Arguments::getArgumentsData):
31213 2011-11-01 Xianzhu Wang <wangxianzhu@chromium.org>
31215 StringImpl::reallocate() should have a 8-bit version
31216 https://bugs.webkit.org/show_bug.cgi?id=71210
31218 Reviewed by Geoffrey Garen.
31220 * wtf/text/StringImpl.cpp:
31221 (WTF::StringImpl::reallocate):
31222 * wtf/text/StringImpl.h:
31224 2011-10-31 Filip Pizlo <fpizlo@apple.com>
31226 The GC should be parallel
31227 https://bugs.webkit.org/show_bug.cgi?id=70995
31229 Reviewed by Geoff Garen.
31231 Added parallel tracing to the GC. This works by having local mark
31232 stacks per thread, and a global shared one. Threads sometimes
31233 donate cells from the mark stack to the global one if the heuristics
31234 tell them that it's affordable to do so. Threads that have depleted
31235 their local mark stacks try to steal some from the shared one.
31237 Marking is now done using an atomic weak relaxed CAS (compare-and-swap).
31239 This is a 23% speed-up on V8-splay when I use 4 marking threads,
31240 leading to a 3.5% speed-up on V8.
31242 It also appears that this reduces GC pause times on real websites by
31245 * JavaScriptCore.exp:
31246 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
31249 (JSC::Heap::~Heap):
31250 (JSC::Heap::markRoots):
31252 * heap/MarkStack.cpp:
31253 (JSC::MarkStackSegmentAllocator::MarkStackSegmentAllocator):
31254 (JSC::MarkStackSegmentAllocator::~MarkStackSegmentAllocator):
31255 (JSC::MarkStackSegmentAllocator::allocate):
31256 (JSC::MarkStackSegmentAllocator::release):
31257 (JSC::MarkStackSegmentAllocator::shrinkReserve):
31258 (JSC::MarkStackArray::MarkStackArray):
31259 (JSC::MarkStackArray::~MarkStackArray):
31260 (JSC::MarkStackArray::expand):
31261 (JSC::MarkStackArray::refill):
31262 (JSC::MarkStackArray::donateSomeCellsTo):
31263 (JSC::MarkStackArray::stealSomeCellsFrom):
31264 (JSC::MarkStackThreadSharedData::markingThreadMain):
31265 (JSC::MarkStackThreadSharedData::markingThreadStartFunc):
31266 (JSC::MarkStackThreadSharedData::MarkStackThreadSharedData):
31267 (JSC::MarkStackThreadSharedData::~MarkStackThreadSharedData):
31268 (JSC::MarkStackThreadSharedData::reset):
31269 (JSC::MarkStack::reset):
31270 (JSC::SlotVisitor::donateSlow):
31271 (JSC::SlotVisitor::drain):
31272 (JSC::SlotVisitor::drainFromShared):
31273 (JSC::MarkStack::mergeOpaqueRoots):
31274 (JSC::SlotVisitor::harvestWeakReferences):
31275 * heap/MarkStack.h:
31276 (JSC::MarkStackSegment::data):
31277 (JSC::MarkStackSegment::capacityFromSize):
31278 (JSC::MarkStackSegment::sizeFromCapacity):
31279 (JSC::MarkStackArray::postIncTop):
31280 (JSC::MarkStackArray::preDecTop):
31281 (JSC::MarkStackArray::setTopForFullSegment):
31282 (JSC::MarkStackArray::setTopForEmptySegment):
31283 (JSC::MarkStackArray::top):
31284 (JSC::MarkStackArray::validatePrevious):
31285 (JSC::MarkStack::addWeakReferenceHarvester):
31286 (JSC::MarkStack::mergeOpaqueRootsIfNecessary):
31287 (JSC::MarkStack::mergeOpaqueRootsIfProfitable):
31288 (JSC::MarkStack::MarkStack):
31289 (JSC::MarkStack::addOpaqueRoot):
31290 (JSC::MarkStack::containsOpaqueRoot):
31291 (JSC::MarkStack::opaqueRootCount):
31292 (JSC::MarkStackArray::append):
31293 (JSC::MarkStackArray::canRemoveLast):
31294 (JSC::MarkStackArray::removeLast):
31295 (JSC::MarkStackArray::isEmpty):
31296 (JSC::MarkStackArray::canDonateSomeCells):
31297 (JSC::MarkStackArray::size):
31298 (JSC::ParallelModeEnabler::ParallelModeEnabler):
31299 (JSC::ParallelModeEnabler::~ParallelModeEnabler):
31300 * heap/MarkedBlock.h:
31301 (JSC::MarkedBlock::testAndSetMarked):
31302 * heap/SlotVisitor.h:
31303 (JSC::SlotVisitor::donate):
31304 (JSC::SlotVisitor::donateAndDrain):
31305 (JSC::SlotVisitor::donateKnownParallel):
31306 (JSC::SlotVisitor::SlotVisitor):
31307 * heap/WeakReferenceHarvester.h:
31308 * runtime/Heuristics.cpp:
31309 (JSC::Heuristics::initializeHeuristics):
31310 * runtime/Heuristics.h:
31312 (WTF::weakCompareAndSwap):
31317 (WTF::::testAndSet):
31318 (WTF::::testAndClear):
31319 (WTF::::concurrentTestAndSet):
31320 (WTF::::concurrentTestAndClear):
31323 (WTF::::nextPossiblyUnset):
31324 (WTF::::findRunOfZeros):
31328 * wtf/MainThread.h:
31329 (WTF::isMainThreadOrGCThread):
31331 * wtf/ThreadSpecific.h:
31333 * wtf/mac/MainThreadMac.mm:
31334 (WTF::initializeGCThreads):
31335 (WTF::initializeMainThreadPlatform):
31336 (WTF::initializeMainThreadToProcessMainThreadPlatform):
31337 (WTF::registerGCThread):
31338 (WTF::isMainThreadOrGCThread):
31340 2011-10-31 Mark Hahnenberg <mhahnenberg@apple.com>
31342 De-virtualize JSObject::defaultValue
31343 https://bugs.webkit.org/show_bug.cgi?id=71146
31345 Reviewed by Sam Weinig.
31347 Added defaultValue to the MethodTable. Replaced all virtual versions of
31348 defaultValue with static versions. Replaced all call sites with lookups in the
31351 * JavaScriptCore.exp:
31352 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
31353 * runtime/ClassInfo.h:
31354 * runtime/ExceptionHelpers.cpp:
31355 (JSC::InterruptedExecutionError::defaultValue):
31356 (JSC::TerminatedExecutionError::defaultValue):
31357 * runtime/ExceptionHelpers.h:
31358 * runtime/JSCell.cpp:
31359 (JSC::JSCell::defaultValue):
31360 * runtime/JSCell.h:
31361 * runtime/JSNotAnObject.cpp:
31362 (JSC::JSNotAnObject::defaultValue):
31363 * runtime/JSNotAnObject.h:
31364 * runtime/JSObject.cpp:
31365 (JSC::JSObject::getPrimitiveNumber):
31366 (JSC::JSObject::defaultValue):
31367 * runtime/JSObject.h:
31368 (JSC::JSObject::toPrimitive):
31370 2011-10-31 Mark Hahnenberg <mhahnenberg@apple.com>
31372 Interpreter build fix
31374 Unreviewed build fix
31376 * interpreter/Interpreter.cpp:
31377 (JSC::Interpreter::privateExecute):
31378 * runtime/Executable.cpp:
31379 (JSC::FunctionExecutable::compileForCallInternal):
31380 (JSC::FunctionExecutable::compileForConstructInternal):
31382 2011-10-31 Filip Pizlo <fpizlo@apple.com>
31384 DFG OSR exits should add to value profiles
31385 https://bugs.webkit.org/show_bug.cgi?id=71202
31387 Reviewed by Oliver Hunt.
31389 Value profiles now have an extra special slot not used by the old JIT's
31390 profiling, which is reserved for OSR exits.
31392 The DFG's OSR exit code now knows which register, node index, and value
31393 profiling site was responsible for the (possibly flawed) information that
31394 led to the OSR failure. This is somewhat opportunistic and imperfect;
31395 if there's a lot of control flow between the value profiling site and the
31396 OSR failure point, then this mechanism simply gives up. It also gives up
31397 if the OSR failure is caused by either known deficiencies in the DFG
31398 (like that we always assume that the index in a strict charCodeAt access
31399 is within bounds) or where the OSR failure would be catalogues and
31400 profiled through other means (like slow case counters).
31402 This patch also adds the notion of a JSValueRegs, which is either a
31403 single register in JSVALUE64 or a pair in JSVALUE32_64. We should
31404 probably move the 32_64 DFG towards using this, since it often makes it
31405 easier to share code between 64 and 32_64.
31407 Also fixed a number of pathologies that this uncovered. op_method_check
31408 didn't have a value profiling site on the slow path. GetById should not
31409 always force OSR exit if it never executed in the old JIT; we may be
31410 able to infer its type if it's a array or string length get. Finally,
31411 these changes benefit from a slight tweak to optimization delay
31412 heuristics (profile fullness is now 0.35 instead of 0.25).
31414 3.8% speed-up on Kraken, mostly due to ~35% on both stanford-crypto-aes
31415 and imaging-darkroom.
31417 * bytecode/ValueProfile.cpp:
31418 (JSC::ValueProfile::computeStatistics):
31419 (JSC::ValueProfile::computeUpdatedPrediction):
31420 * bytecode/ValueProfile.h:
31421 (JSC::ValueProfile::ValueProfile):
31422 (JSC::ValueProfile::specFailBucket):
31423 (JSC::ValueProfile::numberOfSamples):
31424 (JSC::ValueProfile::isLive):
31425 (JSC::ValueProfile::numberOfInt32s):
31426 (JSC::ValueProfile::numberOfDoubles):
31427 (JSC::ValueProfile::numberOfCells):
31428 (JSC::ValueProfile::numberOfObjects):
31429 (JSC::ValueProfile::numberOfFinalObjects):
31430 (JSC::ValueProfile::numberOfStrings):
31431 (JSC::ValueProfile::numberOfArrays):
31432 (JSC::ValueProfile::numberOfBooleans):
31433 (JSC::ValueProfile::dump):
31434 * dfg/DFGAbstractState.cpp:
31435 (JSC::DFG::AbstractState::execute):
31436 * dfg/DFGByteCodeParser.cpp:
31437 (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
31438 (JSC::DFG::ByteCodeParser::getPrediction):
31439 (JSC::DFG::ByteCodeParser::parseBlock):
31440 * dfg/DFGGPRInfo.h:
31441 (JSC::DFG::JSValueRegs::JSValueRegs):
31442 (JSC::DFG::JSValueRegs::operator!):
31443 (JSC::DFG::JSValueRegs::gpr):
31444 (JSC::DFG::JSValueSource::JSValueSource):
31445 (JSC::DFG::JSValueSource::unboxedCell):
31446 (JSC::DFG::JSValueSource::operator!):
31447 (JSC::DFG::JSValueSource::isAddress):
31448 (JSC::DFG::JSValueSource::offset):
31449 (JSC::DFG::JSValueSource::base):
31450 (JSC::DFG::JSValueSource::gpr):
31451 (JSC::DFG::JSValueSource::asAddress):
31452 (JSC::DFG::JSValueSource::notAddress):
31453 (JSC::DFG::JSValueRegs::tagGPR):
31454 (JSC::DFG::JSValueRegs::payloadGPR):
31455 (JSC::DFG::JSValueSource::tagGPR):
31456 (JSC::DFG::JSValueSource::payloadGPR):
31457 (JSC::DFG::JSValueSource::hasKnownTag):
31458 (JSC::DFG::JSValueSource::tag):
31459 * dfg/DFGGenerationInfo.h:
31460 (JSC::DFG::GenerationInfo::jsValueRegs):
31462 (JSC::DFG::Graph::valueProfileFor):
31463 * dfg/DFGJITCodeGenerator.h:
31464 (JSC::JSValueOperand::jsValueRegs):
31465 * dfg/DFGJITCompiler.cpp:
31466 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
31467 * dfg/DFGJITCompiler.h:
31468 (JSC::DFG::JITCompiler::valueProfileFor):
31469 * dfg/DFGJITCompiler32_64.cpp:
31470 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
31471 * dfg/DFGPropagator.cpp:
31472 (JSC::DFG::Propagator::propagateNodePredictions):
31473 * dfg/DFGSpeculativeJIT.cpp:
31474 (JSC::DFG::OSRExit::OSRExit):
31475 (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
31476 (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
31477 (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt):
31478 (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
31479 (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
31480 (JSC::DFG::SpeculativeJIT::compileGetByValOnByteArray):
31481 * dfg/DFGSpeculativeJIT.h:
31482 (JSC::DFG::SpeculativeJIT::speculationCheck):
31483 (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
31484 * dfg/DFGSpeculativeJIT32_64.cpp:
31485 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
31486 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
31487 (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
31488 (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
31489 (JSC::DFG::SpeculativeJIT::compileObjectEquality):
31490 (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
31491 (JSC::DFG::SpeculativeJIT::compileLogicalNot):
31492 (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
31493 (JSC::DFG::SpeculativeJIT::compile):
31494 * dfg/DFGSpeculativeJIT64.cpp:
31495 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
31496 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
31497 (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
31498 (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
31499 (JSC::DFG::SpeculativeJIT::compileObjectEquality):
31500 (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
31501 (JSC::DFG::SpeculativeJIT::compileLogicalNot):
31502 (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
31503 (JSC::DFG::SpeculativeJIT::emitBranch):
31504 (JSC::DFG::SpeculativeJIT::compile):
31505 * jit/JITPropertyAccess.cpp:
31506 (JSC::JIT::emitSlow_op_method_check):
31507 * jit/JITPropertyAccess32_64.cpp:
31508 (JSC::JIT::emitSlow_op_method_check):
31509 * runtime/Heuristics.cpp:
31510 (JSC::Heuristics::initializeHeuristics):
31511 * runtime/JSValue.h:
31513 2011-10-31 Sam Weinig <sam@webkit.org>
31515 Remove need for virtual JSObject::unwrappedObject
31516 https://bugs.webkit.org/show_bug.cgi?id=71034
31518 Reviewed by Geoffrey Garen.
31520 * JavaScriptCore.exp:
31524 * GNUmakefile.list.am:
31525 * JavaScriptCore.exp:
31526 * JavaScriptCore.gypi:
31527 * JavaScriptCore.pro:
31528 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
31529 * JavaScriptCore.xcodeproj/project.pbxproj:
31530 Add JSGlobalThis.cpp.
31532 * runtime/JSGlobalThis.cpp: Added.
31533 (JSC::JSGlobalThis::visitChildren):
31534 (JSC::JSGlobalThis::unwrappedObject):
31535 * runtime/JSGlobalThis.h:
31536 (JSC::JSGlobalThis::createStructure):
31537 Move underlying object from JSDOMWindowShell down to JSGlobalThis
31538 and corresponding visitChildren method.
31540 * runtime/JSObject.cpp:
31541 (JSC::JSObject::unwrappedObject):
31542 Change unwrappedObject from virtual, to just needing an if check.
31544 * runtime/JSObject.h:
31545 (JSC::JSObject::isGlobalThis):
31546 * runtime/JSType.h:
31547 Add isGlobalThis predicate and type.
31549 2011-10-31 Xianzhu Wang <wangxianzhu@chromium.org>
31551 WTF::StringImpl::create(const char*, unsigned) calls itself
31552 https://bugs.webkit.org/show_bug.cgi?id=71206
31554 The original implementation just calls itself, causing infinite recursion.
31555 Cast the first parameter to const LChar* to fix that.
31557 Reviewed by Ryosuke Niwa.
31559 * wtf/text/StringImpl.h:
31560 (WTF::StringImpl::create):
31562 2011-10-31 Andy Wingo <wingo@igalia.com>
31564 Fix DFG JIT compilation on Linux targets.
31565 https://bugs.webkit.org/show_bug.cgi?id=70904
31567 Reviewed by Darin Adler.
31569 * jit/JITStubs.cpp (SYMBOL_STRING_RELOCATION): Simplify this
31572 * dfg/DFGOperations.cpp (SYMBOL_STRING_RELOCATION): Copy the
31573 simplified definition from jit/JITStubs.cpp.
31574 (FUNCTION_WRAPPER_WITH_RETURN_ADDRESS, getHostCallReturnValue):
31575 Use the macro to access trampoline targets through the PLT on PIC
31576 systems, instead of introducing a text relocation. Otherwise, the
31577 library fails to link.
31579 2011-10-31 Mark Hahnenberg <mhahnenberg@apple.com>
31581 De-virtualize JSObject::defineGetter
31582 https://bugs.webkit.org/show_bug.cgi?id=71134
31584 Reviewed by Darin Adler.
31586 Added defineGetter to the MethodTable. Replaced all virtual versions of defineGetter
31587 with static versions. Replaced all call sites with lookups in the MethodTable.
31589 * JavaScriptCore.exp:
31590 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
31591 * debugger/DebuggerActivation.cpp:
31592 (JSC::DebuggerActivation::defineGetter):
31593 * debugger/DebuggerActivation.h:
31594 * interpreter/Interpreter.cpp:
31595 (JSC::Interpreter::privateExecute):
31596 * jit/JITStubs.cpp:
31597 (JSC::DEFINE_STUB_FUNCTION):
31598 * runtime/ClassInfo.h:
31599 * runtime/JSCell.cpp:
31600 (JSC::JSCell::defineGetter):
31601 * runtime/JSCell.h:
31602 * runtime/JSGlobalObject.cpp:
31603 (JSC::JSGlobalObject::defineGetter):
31604 * runtime/JSGlobalObject.h:
31605 * runtime/JSObject.cpp:
31606 (JSC::JSObject::defineGetter):
31607 (JSC::putDescriptor):
31608 * runtime/JSObject.h:
31609 * runtime/ObjectPrototype.cpp:
31610 (JSC::objectProtoFuncDefineGetter):
31612 2011-10-31 Michael Saboff <msaboff@apple.com>
31614 Towards 8-bit Strings: Move Lexer and Parser Objects out of JSGlobalData
31615 https://bugs.webkit.org/show_bug.cgi?id=71138
31617 Restructure and movement of Lexer and Parser code.
31618 Moved Lexer and Parser objects out of JSGlobalData.
31619 Added a new ParserTokens class and instance to JSGlobalData that
31620 have JavaScript token related definitions.
31621 Replaced JSGlobalData arguments to Node classes with lineNumber,
31622 as that was the only use of the JSGlobalData.
31623 Combined JSParser and Parser classes into one class,
31624 eliminating JSParser.h and .cpp.
31625 Various supporting #include changes.
31627 These mostly mechanical changes are done in preparation to
31628 making the Lexer and Parser template classes.
31630 Reviewed by Darin Adler.
31633 * GNUmakefile.list.am:
31634 * JavaScriptCore.gypi:
31635 * JavaScriptCore.pro:
31636 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
31637 * JavaScriptCore.xcodeproj/project.pbxproj:
31638 * bytecompiler/NodesCodegen.cpp:
31639 (JSC::ArrayNode::toArgumentList):
31640 (JSC::ApplyFunctionCallDotNode::emitBytecode):
31641 * parser/ASTBuilder.h:
31642 (JSC::ASTBuilder::ASTBuilder):
31643 (JSC::ASTBuilder::createSourceElements):
31644 (JSC::ASTBuilder::createCommaExpr):
31645 (JSC::ASTBuilder::createLogicalNot):
31646 (JSC::ASTBuilder::createUnaryPlus):
31647 (JSC::ASTBuilder::createVoid):
31648 (JSC::ASTBuilder::thisExpr):
31649 (JSC::ASTBuilder::createResolve):
31650 (JSC::ASTBuilder::createObjectLiteral):
31651 (JSC::ASTBuilder::createArray):
31652 (JSC::ASTBuilder::createNumberExpr):
31653 (JSC::ASTBuilder::createString):
31654 (JSC::ASTBuilder::createBoolean):
31655 (JSC::ASTBuilder::createNull):
31656 (JSC::ASTBuilder::createBracketAccess):
31657 (JSC::ASTBuilder::createDotAccess):
31658 (JSC::ASTBuilder::createRegExp):
31659 (JSC::ASTBuilder::createNewExpr):
31660 (JSC::ASTBuilder::createConditionalExpr):
31661 (JSC::ASTBuilder::createAssignResolve):
31662 (JSC::ASTBuilder::createFunctionExpr):
31663 (JSC::ASTBuilder::createFunctionBody):
31664 (JSC::ASTBuilder::createGetterOrSetterProperty):
31665 (JSC::ASTBuilder::createArguments):
31666 (JSC::ASTBuilder::createArgumentsList):
31667 (JSC::ASTBuilder::createPropertyList):
31668 (JSC::ASTBuilder::createElementList):
31669 (JSC::ASTBuilder::createFormalParameterList):
31670 (JSC::ASTBuilder::createClause):
31671 (JSC::ASTBuilder::createClauseList):
31672 (JSC::ASTBuilder::createFuncDeclStatement):
31673 (JSC::ASTBuilder::createBlockStatement):
31674 (JSC::ASTBuilder::createExprStatement):
31675 (JSC::ASTBuilder::createIfStatement):
31676 (JSC::ASTBuilder::createForLoop):
31677 (JSC::ASTBuilder::createForInLoop):
31678 (JSC::ASTBuilder::createEmptyStatement):
31679 (JSC::ASTBuilder::createVarStatement):
31680 (JSC::ASTBuilder::createReturnStatement):
31681 (JSC::ASTBuilder::createBreakStatement):
31682 (JSC::ASTBuilder::createContinueStatement):
31683 (JSC::ASTBuilder::createTryStatement):
31684 (JSC::ASTBuilder::createSwitchStatement):
31685 (JSC::ASTBuilder::createWhileStatement):
31686 (JSC::ASTBuilder::createDoWhileStatement):
31687 (JSC::ASTBuilder::createLabelStatement):
31688 (JSC::ASTBuilder::createWithStatement):
31689 (JSC::ASTBuilder::createThrowStatement):
31690 (JSC::ASTBuilder::createDebugger):
31691 (JSC::ASTBuilder::createConstStatement):
31692 (JSC::ASTBuilder::appendConstDecl):
31693 (JSC::ASTBuilder::combineCommaNodes):
31694 (JSC::ASTBuilder::appendBinaryOperation):
31695 (JSC::ASTBuilder::createAssignment):
31696 (JSC::ASTBuilder::createNumber):
31697 (JSC::ASTBuilder::makeTypeOfNode):
31698 (JSC::ASTBuilder::makeDeleteNode):
31699 (JSC::ASTBuilder::makeNegateNode):
31700 (JSC::ASTBuilder::makeBitwiseNotNode):
31701 (JSC::ASTBuilder::makeMultNode):
31702 (JSC::ASTBuilder::makeDivNode):
31703 (JSC::ASTBuilder::makeModNode):
31704 (JSC::ASTBuilder::makeAddNode):
31705 (JSC::ASTBuilder::makeSubNode):
31706 (JSC::ASTBuilder::makeLeftShiftNode):
31707 (JSC::ASTBuilder::makeRightShiftNode):
31708 (JSC::ASTBuilder::makeURightShiftNode):
31709 (JSC::ASTBuilder::makeBitOrNode):
31710 (JSC::ASTBuilder::makeBitAndNode):
31711 (JSC::ASTBuilder::makeBitXOrNode):
31712 (JSC::ASTBuilder::makeFunctionCallNode):
31713 (JSC::ASTBuilder::makeBinaryNode):
31714 (JSC::ASTBuilder::makeAssignNode):
31715 (JSC::ASTBuilder::makePrefixNode):
31716 (JSC::ASTBuilder::makePostfixNode):
31717 * parser/JSParser.cpp: Removed.
31718 * parser/JSParser.h: Removed.
31719 * parser/Lexer.cpp:
31720 (JSC::Keywords::Keywords):
31721 (JSC::Lexer::Lexer):
31722 (JSC::Lexer::~Lexer):
31723 (JSC::Lexer::setCode):
31724 (JSC::Lexer::parseIdentifier):
31726 (JSC::Keywords::isKeyword):
31727 (JSC::Keywords::getKeyword):
31728 (JSC::Keywords::~Keywords):
31729 (JSC::Lexer::setIsReparsing):
31730 (JSC::Lexer::isReparsing):
31731 (JSC::Lexer::lineNumber):
31732 (JSC::Lexer::setLastLineNumber):
31733 (JSC::Lexer::lastLineNumber):
31734 (JSC::Lexer::prevTerminator):
31735 (JSC::Lexer::sawError):
31736 (JSC::Lexer::getErrorMessage):
31737 (JSC::Lexer::currentOffset):
31738 (JSC::Lexer::setOffset):
31739 (JSC::Lexer::setLineNumber):
31740 (JSC::Lexer::sourceProvider):
31741 (JSC::Lexer::isWhiteSpace):
31742 (JSC::Lexer::isLineTerminator):
31743 (JSC::Lexer::convertHex):
31744 (JSC::Lexer::convertUnicode):
31745 (JSC::Lexer::makeIdentifier):
31746 (JSC::Lexer::lexExpectIdentifier):
31747 * parser/NodeConstructors.h:
31748 (JSC::ParserArenaFreeable::operator new):
31749 (JSC::ParserArenaDeletable::operator new):
31750 (JSC::ParserArenaRefCounted::ParserArenaRefCounted):
31752 (JSC::ExpressionNode::ExpressionNode):
31753 (JSC::StatementNode::StatementNode):
31754 (JSC::NullNode::NullNode):
31755 (JSC::BooleanNode::BooleanNode):
31756 (JSC::NumberNode::NumberNode):
31757 (JSC::StringNode::StringNode):
31758 (JSC::RegExpNode::RegExpNode):
31759 (JSC::ThisNode::ThisNode):
31760 (JSC::ResolveNode::ResolveNode):
31761 (JSC::ElementNode::ElementNode):
31762 (JSC::ArrayNode::ArrayNode):
31763 (JSC::PropertyNode::PropertyNode):
31764 (JSC::PropertyListNode::PropertyListNode):
31765 (JSC::ObjectLiteralNode::ObjectLiteralNode):
31766 (JSC::BracketAccessorNode::BracketAccessorNode):
31767 (JSC::DotAccessorNode::DotAccessorNode):
31768 (JSC::ArgumentListNode::ArgumentListNode):
31769 (JSC::ArgumentsNode::ArgumentsNode):
31770 (JSC::NewExprNode::NewExprNode):
31771 (JSC::EvalFunctionCallNode::EvalFunctionCallNode):
31772 (JSC::FunctionCallValueNode::FunctionCallValueNode):
31773 (JSC::FunctionCallResolveNode::FunctionCallResolveNode):
31774 (JSC::FunctionCallBracketNode::FunctionCallBracketNode):
31775 (JSC::FunctionCallDotNode::FunctionCallDotNode):
31776 (JSC::CallFunctionCallDotNode::CallFunctionCallDotNode):
31777 (JSC::ApplyFunctionCallDotNode::ApplyFunctionCallDotNode):
31778 (JSC::PrePostResolveNode::PrePostResolveNode):
31779 (JSC::PostfixResolveNode::PostfixResolveNode):
31780 (JSC::PostfixBracketNode::PostfixBracketNode):
31781 (JSC::PostfixDotNode::PostfixDotNode):
31782 (JSC::PostfixErrorNode::PostfixErrorNode):
31783 (JSC::DeleteResolveNode::DeleteResolveNode):
31784 (JSC::DeleteBracketNode::DeleteBracketNode):
31785 (JSC::DeleteDotNode::DeleteDotNode):
31786 (JSC::DeleteValueNode::DeleteValueNode):
31787 (JSC::VoidNode::VoidNode):
31788 (JSC::TypeOfResolveNode::TypeOfResolveNode):
31789 (JSC::TypeOfValueNode::TypeOfValueNode):
31790 (JSC::PrefixResolveNode::PrefixResolveNode):
31791 (JSC::PrefixBracketNode::PrefixBracketNode):
31792 (JSC::PrefixDotNode::PrefixDotNode):
31793 (JSC::PrefixErrorNode::PrefixErrorNode):
31794 (JSC::UnaryOpNode::UnaryOpNode):
31795 (JSC::UnaryPlusNode::UnaryPlusNode):
31796 (JSC::NegateNode::NegateNode):
31797 (JSC::BitwiseNotNode::BitwiseNotNode):
31798 (JSC::LogicalNotNode::LogicalNotNode):
31799 (JSC::BinaryOpNode::BinaryOpNode):
31800 (JSC::MultNode::MultNode):
31801 (JSC::DivNode::DivNode):
31802 (JSC::ModNode::ModNode):
31803 (JSC::AddNode::AddNode):
31804 (JSC::SubNode::SubNode):
31805 (JSC::LeftShiftNode::LeftShiftNode):
31806 (JSC::RightShiftNode::RightShiftNode):
31807 (JSC::UnsignedRightShiftNode::UnsignedRightShiftNode):
31808 (JSC::LessNode::LessNode):
31809 (JSC::GreaterNode::GreaterNode):
31810 (JSC::LessEqNode::LessEqNode):
31811 (JSC::GreaterEqNode::GreaterEqNode):
31812 (JSC::ThrowableBinaryOpNode::ThrowableBinaryOpNode):
31813 (JSC::InstanceOfNode::InstanceOfNode):
31814 (JSC::InNode::InNode):
31815 (JSC::EqualNode::EqualNode):
31816 (JSC::NotEqualNode::NotEqualNode):
31817 (JSC::StrictEqualNode::StrictEqualNode):
31818 (JSC::NotStrictEqualNode::NotStrictEqualNode):
31819 (JSC::BitAndNode::BitAndNode):
31820 (JSC::BitOrNode::BitOrNode):
31821 (JSC::BitXOrNode::BitXOrNode):
31822 (JSC::LogicalOpNode::LogicalOpNode):
31823 (JSC::ConditionalNode::ConditionalNode):
31824 (JSC::ReadModifyResolveNode::ReadModifyResolveNode):
31825 (JSC::AssignResolveNode::AssignResolveNode):
31826 (JSC::ReadModifyBracketNode::ReadModifyBracketNode):
31827 (JSC::AssignBracketNode::AssignBracketNode):
31828 (JSC::AssignDotNode::AssignDotNode):
31829 (JSC::ReadModifyDotNode::ReadModifyDotNode):
31830 (JSC::AssignErrorNode::AssignErrorNode):
31831 (JSC::CommaNode::CommaNode):
31832 (JSC::ConstStatementNode::ConstStatementNode):
31833 (JSC::SourceElements::SourceElements):
31834 (JSC::EmptyStatementNode::EmptyStatementNode):
31835 (JSC::DebuggerStatementNode::DebuggerStatementNode):
31836 (JSC::ExprStatementNode::ExprStatementNode):
31837 (JSC::VarStatementNode::VarStatementNode):
31838 (JSC::IfNode::IfNode):
31839 (JSC::IfElseNode::IfElseNode):
31840 (JSC::DoWhileNode::DoWhileNode):
31841 (JSC::WhileNode::WhileNode):
31842 (JSC::ForNode::ForNode):
31843 (JSC::ContinueNode::ContinueNode):
31844 (JSC::BreakNode::BreakNode):
31845 (JSC::ReturnNode::ReturnNode):
31846 (JSC::WithNode::WithNode):
31847 (JSC::LabelNode::LabelNode):
31848 (JSC::ThrowNode::ThrowNode):
31849 (JSC::TryNode::TryNode):
31850 (JSC::ParameterNode::ParameterNode):
31851 (JSC::FuncExprNode::FuncExprNode):
31852 (JSC::FuncDeclNode::FuncDeclNode):
31853 (JSC::CaseClauseNode::CaseClauseNode):
31854 (JSC::ClauseListNode::ClauseListNode):
31855 (JSC::CaseBlockNode::CaseBlockNode):
31856 (JSC::SwitchNode::SwitchNode):
31857 (JSC::ConstDeclNode::ConstDeclNode):
31858 (JSC::BlockNode::BlockNode):
31859 (JSC::ForInNode::ForInNode):
31860 * parser/NodeInfo.h:
31861 * parser/Nodes.cpp:
31862 (JSC::StatementNode::setLoc):
31863 (JSC::ScopeNode::ScopeNode):
31864 (JSC::ProgramNode::ProgramNode):
31865 (JSC::ProgramNode::create):
31866 (JSC::EvalNode::EvalNode):
31867 (JSC::EvalNode::create):
31868 (JSC::FunctionBodyNode::FunctionBodyNode):
31869 (JSC::FunctionBodyNode::create):
31871 (JSC::Node::lineNo):
31872 * parser/Parser.cpp:
31873 (JSC::Parser::Parser):
31874 (JSC::Parser::~Parser):
31875 (JSC::Parser::parseInner):
31876 (JSC::Parser::allowAutomaticSemicolon):
31877 (JSC::Parser::parseSourceElements):
31878 (JSC::Parser::parseVarDeclaration):
31879 (JSC::Parser::parseConstDeclaration):
31880 (JSC::Parser::parseDoWhileStatement):
31881 (JSC::Parser::parseWhileStatement):
31882 (JSC::Parser::parseVarDeclarationList):
31883 (JSC::Parser::parseConstDeclarationList):
31884 (JSC::Parser::parseForStatement):
31885 (JSC::Parser::parseBreakStatement):
31886 (JSC::Parser::parseContinueStatement):
31887 (JSC::Parser::parseReturnStatement):
31888 (JSC::Parser::parseThrowStatement):
31889 (JSC::Parser::parseWithStatement):
31890 (JSC::Parser::parseSwitchStatement):
31891 (JSC::Parser::parseSwitchClauses):
31892 (JSC::Parser::parseSwitchDefaultClause):
31893 (JSC::Parser::parseTryStatement):
31894 (JSC::Parser::parseDebuggerStatement):
31895 (JSC::Parser::parseBlockStatement):
31896 (JSC::Parser::parseStatement):
31897 (JSC::Parser::parseFormalParameters):
31898 (JSC::Parser::parseFunctionBody):
31899 (JSC::Parser::parseFunctionInfo):
31900 (JSC::Parser::parseFunctionDeclaration):
31901 (JSC::LabelInfo::LabelInfo):
31902 (JSC::Parser::parseExpressionOrLabelStatement):
31903 (JSC::Parser::parseExpressionStatement):
31904 (JSC::Parser::parseIfStatement):
31905 (JSC::Parser::parseExpression):
31906 (JSC::Parser::parseAssignmentExpression):
31907 (JSC::Parser::parseConditionalExpression):
31909 (JSC::Parser::isBinaryOperator):
31910 (JSC::Parser::parseBinaryExpression):
31911 (JSC::Parser::parseProperty):
31912 (JSC::Parser::parseObjectLiteral):
31913 (JSC::Parser::parseStrictObjectLiteral):
31914 (JSC::Parser::parseArrayLiteral):
31915 (JSC::Parser::parsePrimaryExpression):
31916 (JSC::Parser::parseArguments):
31917 (JSC::Parser::parseMemberExpression):
31918 (JSC::Parser::parseUnaryExpression):
31922 (JSC::DepthManager::DepthManager):
31923 (JSC::DepthManager::~DepthManager):
31924 (JSC::ScopeLabelInfo::ScopeLabelInfo):
31925 (JSC::Scope::Scope):
31926 (JSC::Scope::startSwitch):
31927 (JSC::Scope::endSwitch):
31928 (JSC::Scope::startLoop):
31929 (JSC::Scope::endLoop):
31930 (JSC::Scope::inLoop):
31931 (JSC::Scope::breakIsValid):
31932 (JSC::Scope::continueIsValid):
31933 (JSC::Scope::pushLabel):
31934 (JSC::Scope::popLabel):
31935 (JSC::Scope::getLabel):
31936 (JSC::Scope::setIsFunction):
31937 (JSC::Scope::isFunction):
31938 (JSC::Scope::isFunctionBoundary):
31939 (JSC::Scope::declareVariable):
31940 (JSC::Scope::declareWrite):
31941 (JSC::Scope::preventNewDecls):
31942 (JSC::Scope::allowsNewDecls):
31943 (JSC::Scope::declareParameter):
31944 (JSC::Scope::useVariable):
31945 (JSC::Scope::setNeedsFullActivation):
31946 (JSC::Scope::collectFreeVariables):
31947 (JSC::Scope::getUncapturedWrittenVariables):
31948 (JSC::Scope::getCapturedVariables):
31949 (JSC::Scope::setStrictMode):
31950 (JSC::Scope::strictMode):
31951 (JSC::Scope::isValidStrictMode):
31952 (JSC::Scope::shadowsArguments):
31953 (JSC::Scope::copyCapturedVariablesToVector):
31954 (JSC::Scope::saveFunctionInfo):
31955 (JSC::Scope::restoreFunctionInfo):
31956 (JSC::ScopeRef::ScopeRef):
31957 (JSC::ScopeRef::operator->):
31958 (JSC::ScopeRef::index):
31959 (JSC::ScopeRef::hasContainingScope):
31960 (JSC::ScopeRef::containingScope):
31961 (JSC::Parser::AllowInOverride::AllowInOverride):
31962 (JSC::Parser::AllowInOverride::~AllowInOverride):
31963 (JSC::Parser::AutoPopScopeRef::AutoPopScopeRef):
31964 (JSC::Parser::AutoPopScopeRef::~AutoPopScopeRef):
31965 (JSC::Parser::AutoPopScopeRef::setPopped):
31966 (JSC::Parser::currentScope):
31967 (JSC::Parser::pushScope):
31968 (JSC::Parser::popScopeInternal):
31969 (JSC::Parser::popScope):
31970 (JSC::Parser::declareVariable):
31971 (JSC::Parser::declareWrite):
31972 (JSC::Parser::findCachedFunctionInfo):
31973 (JSC::Parser::isFunctionBodyNode):
31974 (JSC::Parser::next):
31975 (JSC::Parser::nextExpectIdentifier):
31976 (JSC::Parser::nextTokenIsColon):
31977 (JSC::Parser::consume):
31978 (JSC::Parser::getToken):
31979 (JSC::Parser::match):
31980 (JSC::Parser::tokenStart):
31981 (JSC::Parser::tokenLine):
31982 (JSC::Parser::tokenEnd):
31983 (JSC::Parser::getTokenName):
31984 (JSC::Parser::updateErrorMessageSpecialCase):
31985 (JSC::Parser::updateErrorMessage):
31986 (JSC::Parser::updateErrorWithNameAndMessage):
31987 (JSC::Parser::startLoop):
31988 (JSC::Parser::endLoop):
31989 (JSC::Parser::startSwitch):
31990 (JSC::Parser::endSwitch):
31991 (JSC::Parser::setStrictMode):
31992 (JSC::Parser::strictMode):
31993 (JSC::Parser::isValidStrictMode):
31994 (JSC::Parser::declareParameter):
31995 (JSC::Parser::breakIsValid):
31996 (JSC::Parser::continueIsValid):
31997 (JSC::Parser::pushLabel):
31998 (JSC::Parser::popLabel):
31999 (JSC::Parser::getLabel):
32000 (JSC::Parser::autoSemiColon):
32001 (JSC::Parser::canRecurse):
32002 (JSC::Parser::lastTokenEnd):
32003 (JSC::Parser::DepthManager::DepthManager):
32004 (JSC::Parser::DepthManager::~DepthManager):
32005 (JSC::Parser::parse):
32007 * parser/ParserTokens.h: Added.
32008 (JSC::JSTokenInfo::JSTokenInfo):
32009 * parser/SourceCode.h:
32010 (JSC::SourceCode::subExpression):
32011 * parser/SourceProviderCacheItem.h:
32012 * parser/SyntaxChecker.h:
32013 (JSC::SyntaxChecker::SyntaxChecker):
32014 (JSC::SyntaxChecker::makeFunctionCallNode):
32015 (JSC::SyntaxChecker::createCommaExpr):
32016 (JSC::SyntaxChecker::makeAssignNode):
32017 (JSC::SyntaxChecker::makePrefixNode):
32018 (JSC::SyntaxChecker::makePostfixNode):
32019 (JSC::SyntaxChecker::makeTypeOfNode):
32020 (JSC::SyntaxChecker::makeDeleteNode):
32021 (JSC::SyntaxChecker::makeNegateNode):
32022 (JSC::SyntaxChecker::makeBitwiseNotNode):
32023 (JSC::SyntaxChecker::createLogicalNot):
32024 (JSC::SyntaxChecker::createUnaryPlus):
32025 (JSC::SyntaxChecker::createVoid):
32026 (JSC::SyntaxChecker::thisExpr):
32027 (JSC::SyntaxChecker::createResolve):
32028 (JSC::SyntaxChecker::createObjectLiteral):
32029 (JSC::SyntaxChecker::createArray):
32030 (JSC::SyntaxChecker::createNumberExpr):
32031 (JSC::SyntaxChecker::createString):
32032 (JSC::SyntaxChecker::createBoolean):
32033 (JSC::SyntaxChecker::createNull):
32034 (JSC::SyntaxChecker::createBracketAccess):
32035 (JSC::SyntaxChecker::createDotAccess):
32036 (JSC::SyntaxChecker::createRegExp):
32037 (JSC::SyntaxChecker::createNewExpr):
32038 (JSC::SyntaxChecker::createConditionalExpr):
32039 (JSC::SyntaxChecker::createAssignResolve):
32040 (JSC::SyntaxChecker::createFunctionExpr):
32041 (JSC::SyntaxChecker::createFunctionBody):
32042 (JSC::SyntaxChecker::createArguments):
32043 (JSC::SyntaxChecker::createArgumentsList):
32044 (JSC::SyntaxChecker::createProperty):
32045 (JSC::SyntaxChecker::createPropertyList):
32046 (JSC::SyntaxChecker::createFuncDeclStatement):
32047 (JSC::SyntaxChecker::createBlockStatement):
32048 (JSC::SyntaxChecker::createExprStatement):
32049 (JSC::SyntaxChecker::createIfStatement):
32050 (JSC::SyntaxChecker::createForLoop):
32051 (JSC::SyntaxChecker::createForInLoop):
32052 (JSC::SyntaxChecker::createEmptyStatement):
32053 (JSC::SyntaxChecker::createVarStatement):
32054 (JSC::SyntaxChecker::createReturnStatement):
32055 (JSC::SyntaxChecker::createBreakStatement):
32056 (JSC::SyntaxChecker::createContinueStatement):
32057 (JSC::SyntaxChecker::createTryStatement):
32058 (JSC::SyntaxChecker::createSwitchStatement):
32059 (JSC::SyntaxChecker::createWhileStatement):
32060 (JSC::SyntaxChecker::createWithStatement):
32061 (JSC::SyntaxChecker::createDoWhileStatement):
32062 (JSC::SyntaxChecker::createLabelStatement):
32063 (JSC::SyntaxChecker::createThrowStatement):
32064 (JSC::SyntaxChecker::createDebugger):
32065 (JSC::SyntaxChecker::createConstStatement):
32066 (JSC::SyntaxChecker::appendConstDecl):
32067 (JSC::SyntaxChecker::createGetterOrSetterProperty):
32068 (JSC::SyntaxChecker::combineCommaNodes):
32069 (JSC::SyntaxChecker::operatorStackPop):
32070 * runtime/Executable.cpp:
32071 (JSC::EvalExecutable::compileInternal):
32072 (JSC::ProgramExecutable::checkSyntax):
32073 (JSC::ProgramExecutable::compileInternal):
32074 (JSC::FunctionExecutable::produceCodeBlockFor):
32075 (JSC::FunctionExecutable::fromGlobalCode):
32076 * runtime/JSGlobalData.cpp:
32077 (JSC::JSGlobalData::JSGlobalData):
32078 (JSC::JSGlobalData::~JSGlobalData):
32079 * runtime/JSGlobalData.h:
32080 * runtime/LiteralParser.cpp:
32081 (JSC::LiteralParser::tryJSONPParse):
32083 2011-10-31 Filip Pizlo <fpizlo@apple.com>
32085 REGRESSION (r97118): Reproducible crash in JSCell::toPrimitive when adding
32086 https://bugs.webkit.org/show_bug.cgi?id=71227
32088 Reviewed by Oliver Hunt.
32090 No new tests, since while I can see exactly where the DFG went wrong on the
32091 site in question from looking at the generated machine code, and while I can
32092 certainly believe that such a scenario would happen, I cannot visualize how
32093 to make it happen reproducibly. It requires an odd combination of double
32094 values getting spilled and then refilled, but then reboxed at just the right
32095 time so that the spilled value is an unboxed double while the in-register
32096 value is a boxed double.
32098 * dfg/DFGJITCodeGenerator.h:
32099 (JSC::DFG::JITCodeGenerator::silentFillGPR):
32101 2011-10-30 Filip Pizlo <fpizlo@apple.com>
32103 JSParser::parsePrimaryExpression should have an overflow check
32104 https://bugs.webkit.org/show_bug.cgi?id=71197
32106 Reviewed by Geoff Garen.
32108 * parser/JSParser.cpp:
32109 (JSC::JSParser::parsePrimaryExpression):
32111 2011-10-30 Filip Pizlo <fpizlo@apple.com>
32113 DFG ValueAdd(string, int) should not fail speculation
32114 https://bugs.webkit.org/show_bug.cgi?id=71195
32116 Reviewed by Geoff Garen.
32121 (JSC::DFG::Node::shouldNotSpeculateInteger):
32122 (JSC::DFG::Node::shouldSpeculateInteger):
32124 2011-10-30 Filip Pizlo <fpizlo@apple.com>
32126 The DFG inliner should not flush the callee
32127 https://bugs.webkit.org/show_bug.cgi?id=71191
32129 Reviewed by Oliver Hunt.
32131 0.6% speed-up on V8.
32133 * bytecode/CodeBlock.cpp:
32134 (JSC::CodeBlock::visitAggregate):
32135 * bytecode/CodeOrigin.h:
32136 * dfg/DFGByteCodeParser.cpp:
32137 (JSC::DFG::ByteCodeParser::flush):
32138 (JSC::DFG::ByteCodeParser::handleInlining):
32139 (JSC::DFG::ByteCodeParser::parseBlock):
32140 (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
32141 (JSC::DFG::ByteCodeParser::parse):
32142 * dfg/DFGJITCompiler.cpp:
32143 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
32144 * dfg/DFGJITCompiler32_64.cpp:
32145 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
32146 * interpreter/CallFrame.cpp:
32147 (JSC::CallFrame::trueCallerFrameSlow):
32149 2011-10-28 Mark Hahnenberg <mhahnenberg@apple.com>
32151 De-virtualize isGlobalObject, isVariableObject, isActivationObject, and isErrorInstance in JSObject
32152 https://bugs.webkit.org/show_bug.cgi?id=70968
32154 Reviewed by Geoffrey Garen.
32156 * API/JSCallbackObject.cpp: Added two specializations for createStructure that use different JSTypes in their
32157 TypeInfo. Had to also create a specialization for JSNonFinalObject, even JSGlobalObject was the only that
32158 needed it because Windows wouldn't build without it.
32159 (JSC::::createStructure):
32160 * API/JSCallbackObject.h:
32161 * JavaScriptCore.exp:
32162 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
32163 * runtime/ErrorInstance.h: Removed virtual function and changed JSType provided to TypeInfo in createStructure.
32164 (JSC::ErrorInstance::createStructure):
32165 * runtime/ErrorPrototype.h: Ditto
32166 (JSC::ErrorPrototype::createStructure):
32167 * runtime/JSActivation.h: Ditto
32168 (JSC::JSActivation::createStructure):
32169 * runtime/JSGlobalObject.h: Ditto
32170 (JSC::JSGlobalObject::createStructure):
32171 * runtime/JSObject.h: De-virtualized functions. They now check the JSType of the object for the corresponding type.
32172 (JSC::JSObject::isGlobalObject):
32173 (JSC::JSObject::isVariableObject):
32174 (JSC::JSObject::isActivationObject):
32175 (JSC::JSObject::isErrorInstance):
32176 * runtime/JSType.h: Added new types for GlobalObject, VariableObject, ActivationObject, and ErrorInstance.
32177 * runtime/JSVariableObject.cpp: Removed virtual function.
32178 * runtime/JSVariableObject.h: Changed JSType provided to TypeInfo in createStructure.
32179 (JSC::JSVariableObject::createStructure):
32181 2011-10-28 Pavel Feldman <pfeldman@google.com>
32183 Reset line numbers for scripts generated with document.write.
32184 https://bugs.webkit.org/show_bug.cgi?id=71099
32186 Reviewed by Yury Semikhatsky.
32188 * wtf/text/TextPosition.h:
32189 (WTF::OrdinalNumber::OrdinalNumber):
32191 2011-10-27 Daniel Bates <dbates@rim.com>
32193 CMake: Add support to optionally install the built JavaScript shell
32194 https://bugs.webkit.org/show_bug.cgi?id=71062
32196 Reviewed by Antonio Gomes.
32198 Generate an installation rule for installing the JavaScript shell in
32199 /bin (with respect to the prefix path) when SHOULD_INSTALL_JS_SHELL
32202 * shell/CMakeLists.txt:
32204 2011-10-27 Kentaro Hara <haraken@chromium.org>
32206 Generate WebKitCSSMatrix constructor for JSC by [Constructor] IDL
32207 https://bugs.webkit.org/show_bug.cgi?id=70215
32209 Reviewed by Adam Barth.
32211 Added a method that judges if a given JSValue is empty.
32213 Tests: transforms/svg-vs-css.xhtml
32214 transforms/cssmatrix-2d-interface.xhtml
32215 transforms/cssmatrix-3d-interface.xhtml
32217 * runtime/JSValue.h:
32218 * runtime/JSValueInlineMethods.h:
32219 (JSC::JSValue::isEmpty):
32221 2011-10-27 Michael Saboff <msaboff@apple.com>
32223 ENH: Add 8 bit string support to JSC JIT
32224 https://bugs.webkit.org/show_bug.cgi?id=71073
32226 Changed the JIT String character access generation to create code
32227 to check the character size and load8() or load16() as approriate.
32229 Reviewed by Gavin Barraclough.
32231 * assembler/MacroAssemblerX86Common.h:
32232 (JSC::MacroAssemblerX86Common::load8):
32233 * assembler/X86Assembler.h:
32234 (JSC::X86Assembler::movzbl_mr):
32235 * dfg/DFGSpeculativeJIT.cpp:
32236 (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt):
32237 (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
32238 * jit/JITInlineMethods.h:
32239 (JSC::JIT::emitLoadCharacterString):
32240 * jit/JITPropertyAccess.cpp:
32241 (JSC::JIT::stringGetByValStubGenerator):
32242 * jit/JITPropertyAccess32_64.cpp:
32243 (JSC::JIT::stringGetByValStubGenerator):
32244 * jit/JSInterfaceJIT.h:
32245 (JSC::ThunkHelpers::stringImplFlagsOffset):
32246 (JSC::ThunkHelpers::stringImpl8BitFlag):
32247 * jit/ThunkGenerators.cpp:
32248 (JSC::stringCharLoad):
32250 2011-10-27 Filip Pizlo <fpizlo@apple.com>
32252 If the bytecode generator emits code after the return in the first basic block,
32253 DFG's inliner crashes
32254 https://bugs.webkit.org/show_bug.cgi?id=71071
32256 Reviewed by Gavin Barraclough.
32258 Removed some cruft dealing with parsing failures due to unsupported functionality
32259 (that's never reached anymore due to it being caught in DFGCapabilities). This
32260 allowed me to repurpose the bool return from parseBlock() to mean: true if we
32261 should continue to parse, or false if we've already parsed all live code.
32263 * dfg/DFGByteCodeParser.cpp:
32264 (JSC::DFG::ByteCodeParser::ByteCodeParser):
32265 (JSC::DFG::ByteCodeParser::parseBlock):
32266 (JSC::DFG::ByteCodeParser::parseCodeBlock):
32268 2011-10-27 Joseph Pecoraro <pecoraro@apple.com>
32270 Reviewed by David Kilzer.
32272 Make FeatureDefines Identical Across OS X Projects
32273 https://bugs.webkit.org/show_bug.cgi?id=71051
32275 * Configurations/FeatureDefines.xcconfig:
32277 2011-10-27 Filip Pizlo <fpizlo@apple.com>
32279 Crash in JSC::Structure::materializePropertyMap when viewing Garden-O-Matic
32280 https://bugs.webkit.org/show_bug.cgi?id=71045
32282 Reviewed by Geoff Garen.
32284 Make sure that if a structure is pinned, it also has a property map.
32286 * runtime/Structure.cpp:
32287 (JSC::Structure::changePrototypeTransition):
32288 (JSC::Structure::despecifyFunctionTransition):
32289 (JSC::Structure::getterSetterTransition):
32290 (JSC::Structure::toDictionaryTransition):
32291 (JSC::Structure::preventExtensionsTransition):
32292 (JSC::Structure::addPropertyWithoutTransition):
32293 (JSC::Structure::removePropertyWithoutTransition):
32294 (JSC::Structure::pin):
32295 (JSC::Structure::copyPropertyTableForPinning):
32296 * runtime/Structure.h:
32297 (JSC::Structure::materializePropertyMapIfNecessaryForPinning):
32299 2011-10-27 Michael Saboff <msaboff@apple.com>
32301 32bit build failure after r98624
32302 https://bugs.webkit.org/show_bug.cgi?id=71064
32304 Disambiguated operator overload with unsigned index (0u).
32306 Reviewed by Sam Weinig.
32308 * runtime/UString.h:
32311 2011-10-27 Gustavo Noronha Silva <gns@gnome.org>
32313 Fix building on GNU/kFreeBSD
32314 https://bugs.webkit.org/show_bug.cgi?id=71005
32316 Reviewed by Darin Adler.
32321 2011-10-27 Michael Saboff <msaboff@apple.com>
32323 Investigate storing strings in 8-bit buffers when possible
32324 https://bugs.webkit.org/show_bug.cgi?id=66161
32326 Investigate storing strings in 8-bit buffers when possible
32327 https://bugs.webkit.org/show_bug.cgi?id=66161
32329 Added support for 8 bit string data in StringImpl. Changed
32330 (UChar*) m_data to m_data16. Added char* m_data8 as a union
32331 with m_data16. Added UChar* m_copyData16 to the other union
32332 to store a 16 bit copy of an 8 bit string when needed.
32333 Added characters8() and characters16() accessor methods
32334 that assume the caller has checked the underlying string type
32335 via the new is8Bit() method. The characters() method will
32336 return a UChar* of the string, materializing a 16 bit copy if the
32337 string is an 8 bit string. Added two flags, one for 8 bit buffer
32338 and a second for a 16 bit copy for an 8 bit string.
32340 Fixed method name typo (StringHasher::defaultCoverter()).
32342 Over time the goal is to eliminate calls to characters() and
32343 us the character8() and characters16() accessors.
32345 This patch does not include changes that actually create 8 bit
32346 strings. This is the first of at least 8 patches. Subsequent
32347 patches will be submitted for JIT changes, making the JSC lexer,
32348 parser and literal parser, JavaScript string changes and
32349 then changes in webcore to take advantage of the 8 bit strings.
32351 This change is performance neutral for SunSpider and V8 when
32352 run from the command line with "jsc".
32354 Reviewed by Geoffrey Garen.
32356 * JavaScriptCore.exp:
32357 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def
32358 * interpreter/Interpreter.cpp:
32359 (JSC::Interpreter::callEval):
32360 * parser/SourceProvider.h:
32361 (JSC::UStringSourceProvider::data):
32362 (JSC::UStringSourceProvider::UStringSourceProvider):
32363 * runtime/Identifier.cpp:
32364 (JSC::IdentifierCStringTranslator::hash):
32365 (JSC::IdentifierCStringTranslator::equal):
32366 (JSC::IdentifierCStringTranslator::translate):
32367 (JSC::Identifier::add):
32368 (JSC::Identifier::toUInt32):
32369 * runtime/Identifier.h:
32370 (JSC::Identifier::equal):
32373 * runtime/JSString.cpp:
32374 (JSC::JSString::resolveRope):
32375 (JSC::JSString::resolveRopeSlowCase):
32376 * runtime/RegExp.cpp:
32377 (JSC::RegExp::match):
32378 * runtime/StringPrototype.cpp:
32379 (JSC::jsSpliceSubstringsWithSeparators):
32380 * runtime/UString.cpp:
32381 (JSC::UString::UString):
32382 (JSC::equalSlowCase):
32383 (JSC::UString::utf8):
32384 * runtime/UString.h:
32385 (JSC::UString::characters):
32386 (JSC::UString::characters8):
32387 (JSC::UString::characters16):
32388 (JSC::UString::is8Bit):
32389 (JSC::UString::operator[]):
32390 (JSC::UString::find):
32392 * wtf/StringHasher.h:
32393 (WTF::StringHasher::computeHash):
32394 (WTF::StringHasher::defaultConverter):
32395 * wtf/text/AtomicString.cpp:
32396 (WTF::CStringTranslator::hash):
32397 (WTF::CStringTranslator::equal):
32398 (WTF::CStringTranslator::translate):
32399 (WTF::AtomicString::add):
32400 * wtf/text/AtomicString.h:
32401 (WTF::AtomicString::AtomicString):
32402 (WTF::AtomicString::contains):
32403 (WTF::AtomicString::find):
32404 (WTF::AtomicString::add):
32407 (WTF::equalIgnoringCase):
32408 * wtf/text/StringConcatenate.h:
32409 * wtf/text/StringHash.h:
32410 (WTF::StringHash::equal):
32411 (WTF::CaseFoldingHash::hash):
32412 * wtf/text/StringImpl.cpp:
32413 (WTF::StringImpl::~StringImpl):
32414 (WTF::StringImpl::createUninitialized):
32415 (WTF::StringImpl::create):
32416 (WTF::StringImpl::getData16SlowCase):
32417 (WTF::StringImpl::containsOnlyWhitespace):
32418 (WTF::StringImpl::substring):
32419 (WTF::StringImpl::characterStartingAt):
32420 (WTF::StringImpl::lower):
32421 (WTF::StringImpl::upper):
32422 (WTF::StringImpl::fill):
32423 (WTF::StringImpl::foldCase):
32424 (WTF::StringImpl::stripMatchedCharacters):
32425 (WTF::StringImpl::removeCharacters):
32426 (WTF::StringImpl::simplifyMatchedCharactersToSpace):
32427 (WTF::StringImpl::toIntStrict):
32428 (WTF::StringImpl::toUIntStrict):
32429 (WTF::StringImpl::toInt64Strict):
32430 (WTF::StringImpl::toUInt64Strict):
32431 (WTF::StringImpl::toIntPtrStrict):
32432 (WTF::StringImpl::toInt):
32433 (WTF::StringImpl::toUInt):
32434 (WTF::StringImpl::toInt64):
32435 (WTF::StringImpl::toUInt64):
32436 (WTF::StringImpl::toIntPtr):
32437 (WTF::StringImpl::toDouble):
32438 (WTF::StringImpl::toFloat):
32440 (WTF::equalIgnoringCase):
32441 (WTF::StringImpl::find):
32442 (WTF::StringImpl::findIgnoringCase):
32443 (WTF::StringImpl::reverseFind):
32444 (WTF::StringImpl::replace):
32445 (WTF::StringImpl::defaultWritingDirection):
32446 (WTF::StringImpl::adopt):
32447 (WTF::StringImpl::createWithTerminatingNullCharacter):
32448 * wtf/text/StringImpl.h:
32449 (WTF::StringImpl::StringImpl):
32450 (WTF::StringImpl::create):
32451 (WTF::StringImpl::create8):
32452 (WTF::StringImpl::tryCreateUninitialized):
32453 (WTF::StringImpl::flagsOffset):
32454 (WTF::StringImpl::flagIs8Bit):
32455 (WTF::StringImpl::dataOffset):
32456 (WTF::StringImpl::is8Bit):
32457 (WTF::StringImpl::characters8):
32458 (WTF::StringImpl::characters16):
32459 (WTF::StringImpl::characters):
32460 (WTF::StringImpl::has16BitShadow):
32461 (WTF::StringImpl::setHash):
32462 (WTF::StringImpl::hash):
32463 (WTF::StringImpl::copyChars):
32464 (WTF::StringImpl::operator[]):
32465 (WTF::StringImpl::find):
32466 (WTF::StringImpl::findIgnoringCase):
32468 (WTF::equalIgnoringCase):
32469 (WTF::StringImpl::isolatedCopy):
32470 * wtf/text/WTFString.cpp:
32471 (WTF::String::String):
32472 (WTF::String::append):
32473 (WTF::String::format):
32474 (WTF::String::fromUTF8):
32475 (WTF::String::fromUTF8WithLatin1Fallback):
32476 * wtf/text/WTFString.h:
32477 (WTF::String::find):
32478 (WTF::String::findIgnoringCase):
32479 (WTF::String::contains):
32480 (WTF::String::append):
32481 (WTF::String::fromUTF8):
32482 (WTF::String::fromUTF8WithLatin1Fallback):
32485 (WTF::equalIgnoringCase):
32486 * wtf/unicode/Unicode.h:
32487 * yarr/YarrJIT.cpp:
32488 (JSC::Yarr::execute):
32490 (JSC::Yarr::YarrCodeBlock::execute):
32491 * yarr/YarrParser.h:
32492 (JSC::Yarr::Parser::Parser):
32494 2011-10-27 Mark Hahnenberg <mhahnenberg@apple.com>
32496 Fixing windows build
32498 Unreviewed build fix
32500 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
32502 2011-10-27 Mark Hahnenberg <mhahnenberg@apple.com>
32504 Add ability to check for presence of static members at compile time
32505 https://bugs.webkit.org/show_bug.cgi?id=70986
32507 Reviewed by Geoffrey Garen.
32509 Added new CREATE_MEMBER_CHECKER macro to instantiate the template and the
32510 HAS_MEMBER_NAMED macro to use that template to check if the specified class
32511 does indeed have a method with that name. This mechanism is not currently
32512 used anywhere, but will be in the future when adding virtual methods from
32513 JSObject to the MethodTable.
32515 * runtime/ClassInfo.h:
32517 2011-10-27 Mark Hahnenberg <mhahnenberg@apple.com>
32519 De-virtualize JSCell::toThisObject
32520 https://bugs.webkit.org/show_bug.cgi?id=70958
32522 Reviewed by Geoffrey Garen.
32524 Converted all instances of toThisObject to static functions,
32525 added toThisObject to the MethodTable, and replaced all call sites
32526 with a corresponding lookup in the MethodTable.
32528 * API/JSContextRef.cpp:
32529 * JavaScriptCore.exp:
32530 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
32531 * runtime/ClassInfo.h:
32532 * runtime/JSActivation.cpp:
32533 (JSC::JSActivation::toThisObject):
32534 * runtime/JSActivation.h:
32535 * runtime/JSCell.cpp:
32536 (JSC::JSCell::toThisObject):
32537 * runtime/JSCell.h:
32538 * runtime/JSObject.cpp:
32539 (JSC::JSObject::put):
32540 (JSC::JSObject::toThisObject):
32541 * runtime/JSObject.h:
32542 (JSC::JSValue::toThisObject):
32543 * runtime/JSStaticScopeObject.cpp:
32544 (JSC::JSStaticScopeObject::toThisObject):
32545 * runtime/JSStaticScopeObject.h:
32546 * runtime/JSString.cpp:
32547 (JSC::JSString::toThisObject):
32548 * runtime/JSString.h:
32549 * runtime/StrictEvalActivation.cpp:
32550 (JSC::StrictEvalActivation::toThisObject):
32551 * runtime/StrictEvalActivation.h:
32553 2011-10-27 Yuqiang Xian <yuqiang.xian@intel.com>
32555 Fix a small bug in callOperation after r98431
32556 https://bugs.webkit.org/show_bug.cgi?id=70984
32558 Reviewed by Geoffrey Garen.
32560 TrustedImmPtr is not expecting "int" type parameters.
32562 * dfg/DFGJITCodeGenerator.h:
32563 (JSC::DFG::callOperation):
32565 2011-10-26 Oliver Hunt <oliver@apple.com>
32567 Restore structure-clearing behaviour of allocateCell<>
32568 https://bugs.webkit.org/show_bug.cgi?id=70976
32570 Reviewed by Geoffrey Garen.
32572 This restores the logic that allows the markstack to filter
32573 live objects that have not yet been initialised.
32575 * runtime/JSCell.h:
32576 (JSC::JSCell::clearStructure):
32577 Validation-safe method to clear a cell's structure.
32578 (JSC::allocateCell):
32579 Call the above method.
32580 * runtime/Structure.h:
32581 (JSC::MarkStack::internalAppend):
32582 Don't visit cells that haven't been initialised.
32584 2011-10-26 Filip Pizlo <fpizlo@apple.com>
32586 REGRESSION (r97030): Cannot log in to progressive.com
32587 https://bugs.webkit.org/show_bug.cgi?id=70094
32589 Reviewed by Oliver Hunt.
32591 * dfg/DFGByteCodeParser.cpp:
32592 (JSC::DFG::ByteCodeParser::handleCall):
32594 2011-10-26 Mark Hahnenberg <mhahnenberg@apple.com>
32596 Remove getOwnPropertySlotVirtual
32597 https://bugs.webkit.org/show_bug.cgi?id=70741
32599 Reviewed by Geoffrey Garen.
32601 Removed all declarations and definitions of getOwnPropertySlotVirtual.
32602 Also replaced all call sites to getOwnPropertyVirtualVirtual with a
32603 corresponding lookup in the MethodTable.
32605 * API/JSCallbackObject.h:
32606 * API/JSCallbackObjectFunctions.h:
32607 (JSC::::getOwnPropertyDescriptor):
32608 * JavaScriptCore.exp:
32609 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
32610 * debugger/DebuggerActivation.cpp:
32611 (JSC::DebuggerActivation::getOwnPropertySlot):
32612 * debugger/DebuggerActivation.h:
32613 * runtime/Arguments.cpp:
32614 * runtime/Arguments.h:
32615 * runtime/ArrayConstructor.cpp:
32616 * runtime/ArrayConstructor.h:
32617 * runtime/ArrayPrototype.cpp:
32618 * runtime/ArrayPrototype.h:
32619 * runtime/BooleanPrototype.cpp:
32620 * runtime/BooleanPrototype.h:
32621 * runtime/DateConstructor.cpp:
32622 * runtime/DateConstructor.h:
32623 * runtime/DatePrototype.cpp:
32624 * runtime/DatePrototype.h:
32625 (JSC::DatePrototype::create):
32626 * runtime/ErrorPrototype.cpp:
32627 * runtime/ErrorPrototype.h:
32628 * runtime/JSActivation.cpp:
32629 * runtime/JSActivation.h:
32630 * runtime/JSArray.cpp:
32631 (JSC::JSArray::getOwnPropertySlotByIndex):
32632 * runtime/JSArray.h:
32633 * runtime/JSByteArray.cpp:
32634 * runtime/JSByteArray.h:
32635 * runtime/JSCell.cpp:
32636 * runtime/JSCell.h:
32637 * runtime/JSFunction.cpp:
32638 (JSC::JSFunction::getOwnPropertyDescriptor):
32639 (JSC::JSFunction::getOwnPropertyNames):
32640 (JSC::JSFunction::put):
32641 * runtime/JSFunction.h:
32642 * runtime/JSGlobalObject.cpp:
32643 * runtime/JSGlobalObject.h:
32644 * runtime/JSNotAnObject.cpp:
32645 * runtime/JSNotAnObject.h:
32646 * runtime/JSONObject.cpp:
32647 (JSC::Stringifier::Holder::appendNextProperty):
32648 (JSC::Walker::walk):
32649 * runtime/JSONObject.h:
32650 * runtime/JSObject.cpp:
32651 (JSC::JSObject::getOwnPropertySlotByIndex):
32652 (JSC::JSObject::hasOwnProperty):
32653 * runtime/JSObject.h:
32654 (JSC::JSCell::fastGetOwnPropertySlot):
32655 (JSC::JSObject::getPropertySlot):
32656 (JSC::JSValue::get):
32657 * runtime/JSStaticScopeObject.cpp:
32658 * runtime/JSStaticScopeObject.h:
32659 * runtime/JSString.cpp:
32660 (JSC::JSString::getOwnPropertySlot):
32661 * runtime/JSString.h:
32662 * runtime/MathObject.cpp:
32663 * runtime/MathObject.h:
32664 (JSC::MathObject::create):
32665 * runtime/NumberConstructor.cpp:
32666 * runtime/NumberConstructor.h:
32667 * runtime/NumberPrototype.cpp:
32668 * runtime/NumberPrototype.h:
32669 * runtime/ObjectConstructor.cpp:
32670 * runtime/ObjectConstructor.h:
32671 * runtime/ObjectPrototype.cpp:
32672 * runtime/ObjectPrototype.h:
32673 * runtime/RegExpConstructor.cpp:
32674 * runtime/RegExpConstructor.h:
32675 * runtime/RegExpMatchesArray.h:
32676 (JSC::RegExpMatchesArray::createStructure):
32677 * runtime/RegExpObject.cpp:
32678 * runtime/RegExpObject.h:
32679 * runtime/RegExpPrototype.cpp:
32680 * runtime/RegExpPrototype.h:
32681 * runtime/StringConstructor.cpp:
32682 * runtime/StringConstructor.h:
32683 * runtime/StringObject.cpp:
32684 * runtime/StringObject.h:
32685 * runtime/StringPrototype.cpp:
32686 * runtime/StringPrototype.h:
32688 2011-10-26 Alejandro G. Castro <alex@igalia.com>
32690 [GTK] [WK2] Add WebKit2 distcheck support
32691 https://bugs.webkit.org/show_bug.cgi?id=70933
32693 Reviewed by Martin Robinson.
32695 * GNUmakefile.list.am: Add MemoryStatistics.h to the sources list.
32697 2011-10-26 Michael Saboff <msaboff@apple.com>
32699 Increase StringImpl Flag Bits for 8 bit Strings
32700 https://bugs.webkit.org/show_bug.cgi?id=70937
32702 Increased the number of bits used for flags in StringImpl
32703 from 6 to 8 bits. This frees up 2 flag bits that will be
32704 used for 8-bit string support. Updated hash methods accordingly.
32705 Changed hash value masking from the low bits to the high
32708 Reviewed by Darin Adler.
32710 * create_hash_table:
32711 * wtf/StringHasher.h:
32712 (WTF::StringHasher::hash):
32713 * wtf/text/StringImpl.h:
32715 2011-10-26 Dan Bernstein <mitz@apple.com>
32719 Reverted r98488, which caused the scripts’ status messages to be included in the generated
32722 * create_hash_table:
32723 * create_jit_stubs:
32725 2011-10-26 Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
32727 Don't print regular output to STDERR when generating hashtables and JIT stubs
32729 Reviewed by Simon Hausmann.
32731 * create_hash_table:
32732 * create_jit_stubs:
32734 2011-10-25 Gavin Barraclough <barraclough@apple.com>
32736 Split DFGJITCodeGenerator::callOperation methods
32737 https://bugs.webkit.org/show_bug.cgi?id=70870
32739 Reviewed by Filip Pizlo.
32741 The DFGJITCodeGenerator currently contains two sets of callOperation methods.
32742 One set works with the JSVALUE64 value representation and passes arguments in
32743 registers (suitable for use on x86-64), and one set works with the JSVALUE32_64
32744 value representation and passes arguments in memory (suitable for use on x86).
32745 By refactoring out the representation and calling convention specific aspects
32746 of the code we can also configure the DFG JIT to operator on platforms that use
32747 the JSVALUE32_64 value representation but pass arguments in registers.
32749 On platforms supported by the JIT, the payload precedes the tag of a value in
32750 argument/result ordering, as such, in order to make the setupResults method
32751 generally applicable to return the results of a function that are returned in
32752 two registers, the ordering of arguments to this function has been reversed -
32753 as is the ordering of augments passed to setupArguments methods, with respect
32754 to the ordering with which they are passed in to callOperation.
32755 This inconsistency will be resolved in a later change when we combine the pairs
32756 of arguments passed into callOperation, such that the function signatures can
32757 be made consistent across the two value representations (the callOperation
32758 methods will be passed a reference to a struct representing the JSValue
32759 temporary, this will consist of two gprs on 32_64 and one on 64).
32761 * dfg/DFGJITCodeGenerator.h:
32762 (JSC::DFG::resetCallArguments):
32763 (JSC::DFG::addCallArgument):
32764 - moved, removed tag,payload version of this method.
32765 (JSC::DFG::setupArguments):
32766 (JSC::DFG::setupArgumentsExecState):
32767 (JSC::DFG::setupArgumentsWithExecState):
32768 - Calling convention specific portion of callOperation refactored out into these methods.
32769 (JSC::DFG::callOperation):
32770 - updated these methods to use setupArguments* methods.
32771 (JSC::DFG::setupResults):
32772 - setupResults is now passed payload,tag.
32773 (JSC::DFG::appendCallWithExceptionCheckSetResult):
32774 - Added fpr versions of this function.
32775 (JSC::DFG::appendCallSetResult):
32776 - Added versions of this function without exception check.
32777 * dfg/DFGJITCodeGenerator32_64.cpp:
32778 (JSC::DFG::JITCodeGenerator::emitCall):
32779 - setupResults is now passed payload,tag.
32781 2011-10-25 Mark Hahnenberg <mhahnenberg@apple.com>
32783 Remove deletePropertyVirtual
32784 https://bugs.webkit.org/show_bug.cgi?id=70738
32786 Reviewed by Geoffrey Garen.
32788 Removed all declarations and definitions of deletePropertyVirtual.
32789 Also replaced all call sites to deletePropertyVirtual with a
32790 corresponding lookup in the MethodTable.
32792 * API/JSCallbackObject.h:
32793 * API/JSCallbackObjectFunctions.h:
32794 (JSC::::deletePropertyByIndex):
32795 * API/JSObjectRef.cpp:
32796 (JSObjectDeleteProperty):
32797 * JavaScriptCore.exp:
32798 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
32799 * debugger/DebuggerActivation.cpp:
32800 (JSC::DebuggerActivation::deleteProperty):
32801 * debugger/DebuggerActivation.h:
32802 * interpreter/Interpreter.cpp:
32803 (JSC::Interpreter::privateExecute):
32804 * jit/JITStubs.cpp:
32805 (JSC::DEFINE_STUB_FUNCTION):
32806 * runtime/Arguments.cpp:
32807 * runtime/Arguments.h:
32808 * runtime/ArrayPrototype.cpp:
32809 (JSC::arrayProtoFuncPop):
32810 (JSC::arrayProtoFuncReverse):
32811 (JSC::arrayProtoFuncShift):
32812 (JSC::arrayProtoFuncSplice):
32813 (JSC::arrayProtoFuncUnShift):
32814 * runtime/JSActivation.cpp:
32815 * runtime/JSActivation.h:
32816 * runtime/JSArray.cpp:
32817 (JSC::JSArray::deleteProperty):
32818 (JSC::JSArray::deletePropertyByIndex):
32819 * runtime/JSArray.h:
32820 * runtime/JSCell.cpp:
32821 (JSC::JSCell::deleteProperty):
32822 (JSC::JSCell::deletePropertyByIndex):
32823 * runtime/JSCell.h:
32824 * runtime/JSFunction.cpp:
32825 * runtime/JSFunction.h:
32826 * runtime/JSNotAnObject.cpp:
32827 * runtime/JSNotAnObject.h:
32828 * runtime/JSONObject.cpp:
32829 (JSC::Walker::walk):
32830 * runtime/JSObject.cpp:
32831 (JSC::JSObject::deletePropertyByIndex):
32832 (JSC::JSObject::defineOwnProperty):
32833 * runtime/JSObject.h:
32834 * runtime/JSVariableObject.cpp:
32835 * runtime/JSVariableObject.h:
32836 * runtime/RegExpMatchesArray.h:
32837 * runtime/StrictEvalActivation.cpp:
32838 * runtime/StrictEvalActivation.h:
32839 * runtime/StringObject.cpp:
32840 * runtime/StringObject.h:
32842 2011-10-25 Mark Hahnenberg <mhahnenberg@apple.com>
32845 https://bugs.webkit.org/show_bug.cgi?id=70740
32847 Reviewed by Geoffrey Garen.
32849 Removed all declarations and definitions of putVirtual.
32850 Also replaced all call sites to putVirtual with a
32851 corresponding lookup in the MethodTable.
32853 * API/JSCallbackObject.h:
32854 * API/JSCallbackObjectFunctions.h:
32855 * API/JSObjectRef.cpp:
32856 (JSObjectSetProperty):
32857 (JSObjectSetPropertyAtIndex):
32858 * JavaScriptCore.exp:
32859 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
32860 * debugger/DebuggerActivation.cpp:
32861 (JSC::DebuggerActivation::put):
32862 * debugger/DebuggerActivation.h:
32863 * dfg/DFGOperations.cpp:
32864 * interpreter/Interpreter.cpp:
32865 (JSC::Interpreter::execute):
32866 (JSC::Interpreter::privateExecute):
32868 (GlobalObject::finishCreation):
32869 * runtime/Arguments.cpp:
32870 * runtime/Arguments.h:
32871 * runtime/ArrayPrototype.cpp:
32872 (JSC::putProperty):
32873 (JSC::arrayProtoFuncConcat):
32874 (JSC::arrayProtoFuncPush):
32875 (JSC::arrayProtoFuncReverse):
32876 (JSC::arrayProtoFuncShift):
32877 (JSC::arrayProtoFuncSlice):
32878 (JSC::arrayProtoFuncSort):
32879 (JSC::arrayProtoFuncSplice):
32880 (JSC::arrayProtoFuncUnShift):
32881 (JSC::arrayProtoFuncFilter):
32882 (JSC::arrayProtoFuncMap):
32883 * runtime/JSActivation.cpp:
32884 * runtime/JSActivation.h:
32885 * runtime/JSArray.cpp:
32886 (JSC::JSArray::putSlowCase):
32887 (JSC::JSArray::push):
32888 (JSC::JSArray::shiftCount):
32889 (JSC::JSArray::unshiftCount):
32890 * runtime/JSArray.h:
32891 * runtime/JSByteArray.cpp:
32892 * runtime/JSByteArray.h:
32893 * runtime/JSCell.cpp:
32894 (JSC::JSCell::put):
32895 (JSC::JSCell::putByIndex):
32896 * runtime/JSCell.h:
32897 * runtime/JSFunction.cpp:
32898 * runtime/JSFunction.h:
32899 * runtime/JSGlobalObject.cpp:
32900 * runtime/JSGlobalObject.h:
32901 * runtime/JSNotAnObject.cpp:
32902 * runtime/JSNotAnObject.h:
32903 * runtime/JSONObject.cpp:
32904 (JSC::Walker::walk):
32905 * runtime/JSObject.cpp:
32906 (JSC::JSObject::putByIndex):
32907 (JSC::JSObject::defineOwnProperty):
32908 * runtime/JSObject.h:
32909 (JSC::JSValue::put):
32910 * runtime/JSStaticScopeObject.cpp:
32911 * runtime/JSStaticScopeObject.h:
32912 * runtime/ObjectPrototype.cpp:
32913 * runtime/ObjectPrototype.h:
32914 * runtime/RegExpConstructor.cpp:
32915 * runtime/RegExpConstructor.h:
32916 * runtime/RegExpMatchesArray.h:
32917 * runtime/RegExpObject.cpp:
32918 * runtime/RegExpObject.h:
32919 * runtime/StringObject.cpp:
32920 * runtime/StringObject.h:
32921 * runtime/StringPrototype.cpp:
32922 (JSC::stringProtoFuncSplit):
32924 2011-10-25 Gavin Barraclough <barraclough@apple.com>
32926 Separate out function linking & exception check data structures.
32927 https://bugs.webkit.org/show_bug.cgi?id=70858
32929 Reviewed by Oliver Hunt.
32931 This will make it easier to refactor the callOperation methods to spilt the value
32932 representation specific handling from the cpu/calling-convention implementation.
32934 * dfg/DFGJITCodeGenerator.h:
32935 (JSC::DFG::appendCallWithExceptionCheck):
32936 * dfg/DFGJITCodeGenerator32_64.cpp:
32937 (JSC::DFG::JITCodeGenerator::emitCall):
32938 * dfg/DFGJITCodeGenerator64.cpp:
32939 (JSC::DFG::JITCodeGenerator::emitCall):
32940 * dfg/DFGJITCompiler.cpp:
32941 (JSC::DFG::JITCompiler::compileBody):
32942 (JSC::DFG::JITCompiler::link):
32943 * dfg/DFGJITCompiler.h:
32944 (JSC::DFG::CallLinkRecord::CallLinkRecord):
32945 (JSC::DFG::CallExceptionRecord::CallExceptionRecord):
32946 (JSC::DFG::JITCompiler::JITCompiler):
32947 (JSC::DFG::JITCompiler::notifyCall):
32948 (JSC::DFG::JITCompiler::appendCall):
32949 (JSC::DFG::JITCompiler::addExceptionCheck):
32950 (JSC::DFG::JITCompiler::addFastExceptionCheck):
32951 * dfg/DFGJITCompiler32_64.cpp:
32952 (JSC::DFG::JITCompiler::compileBody):
32953 (JSC::DFG::JITCompiler::link):
32955 2011-10-25 Filip Pizlo <fpizlo@apple.com>
32957 Tiered compilation may introduce dangling pointers in constant buffers
32958 https://bugs.webkit.org/show_bug.cgi?id=70854
32960 Reviewed by Oliver Hunt.
32962 Tiered compilation now copies constant buffers, which fixes the regression in
32963 https://bugs.webkit.org/show_bug.cgi?id=70246. No new tests because this
32964 regression relies on a subtle interleaving of optimized compilation and garbage
32965 collection, and cannot be reproduced in a simple test.
32967 This also adds some new debug support, which was used to fix this bug and is
32968 likely to be useful in the future.
32970 * bytecode/CodeBlock.cpp:
32971 (JSC::CodeBlock::copyDataFrom):
32972 (JSC::CodeBlock::usesOpcode):
32973 * bytecode/CodeBlock.h:
32974 * dfg/DFGGraph.cpp:
32975 (JSC::DFG::Graph::dump):
32977 2011-10-25 Mark Hahnenberg <mhahnenberg@apple.com>
32979 Fixing Windows build after r98367
32981 Unreviewed build fix
32983 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
32985 2011-10-25 Yuqiang Xian <yuqiang.xian@intel.com>
32987 Add missing DFG file entries to the make lists for GTK and Qt ports
32988 https://bugs.webkit.org/show_bug.cgi?id=70806
32990 Reviewed by Darin Adler.
32992 * GNUmakefile.list.am:
32993 * JavaScriptCore.pro:
32995 2011-10-25 Mark Hahnenberg <mhahnenberg@apple.com>
32997 Add getOwnPropertySlot to MethodTable
32998 https://bugs.webkit.org/show_bug.cgi?id=69807
33000 Reviewed by Oliver Hunt.
33002 * JavaScriptCore.exp:
33003 * runtime/ClassInfo.h: Added both versions of getOwnPropertySlot to the MethodTable.
33004 * runtime/JSCell.h: Changed getOwnPropertySlot to be protected so other classes can
33005 reference it in their MethodTables.
33007 2011-10-25 Oliver Hunt <oliver@apple.com>
33009 Need to support marking of multiple nested codeblocks when compiling
33010 https://bugs.webkit.org/show_bug.cgi?id=70832
33012 Reviewed by Gavin Barraclough.
33014 When inlining a function we end up with multiple codeblocks being
33015 compiled at the same time, so we need to support a list of live
33019 (JSC::Heap::markRoots):
33020 * runtime/JSGlobalData.cpp:
33021 (JSC::JSGlobalData::JSGlobalData):
33022 * runtime/JSGlobalData.h:
33023 (JSC::JSGlobalData::startedCompiling):
33024 (JSC::JSGlobalData::finishedCompiling):
33026 2011-10-24 Yuqiang Xian <yuqiang.xian@intel.com>
33028 DFG JIT 32_64 - fillInteger should accept DataFormatJSInteger
33029 https://bugs.webkit.org/show_bug.cgi?id=70798
33031 Reviewed by Filip Pizlo.
33033 When filling an integer for a known integer node (not speculated), it
33034 should accept DataFormatJSInteger as well.
33036 * dfg/DFGJITCodeGenerator32_64.cpp:
33037 (JSC::DFG::JITCodeGenerator::fillInteger):
33039 2011-10-24 Geoffrey Garen <ggaren@apple.com>
33041 Build fix: removed some cases of threadsafeCopy() that I missed in
33044 * JavaScriptCore.order:
33046 2011-10-24 Geoffrey Garen <ggaren@apple.com>
33048 Removed SharedUChar and tightened language around its previous uses
33049 https://bugs.webkit.org/show_bug.cgi?id=70698
33051 Reviewed by David Levin.
33053 - Removed SharedUChar because most of its functionality has moved into
33054 other abstraction layers, and we want remaining clients to choose their
33055 abstractions explicitly instead of relying on StringImpl to provide this
33056 behavior implicitly, since we think they can sometimes make more efficient
33059 - Renamed "threadSafeCopy" and "crossThreadCopy" to "isolatedCopy" because
33060 the former names could give the impression that the resulting object was
33061 thread-safe, but actually it's just an isolated copy, which is not
33062 thread-safe by itself, but can be used to implement a thread-safe
33063 algorithm through isolation.
33065 * wtf/CrossThreadRefCounted.h: Removed.
33067 * JavaScriptCore.exp: Export!
33069 * wtf/text/StringImpl.cpp:
33070 (WTF::StringImpl::~StringImpl): Removed the stuff mentioned above.
33072 * wtf/text/StringImpl.h:
33073 (WTF::StringImpl::length): Ditto.
33075 (WTF::StringImpl::isolatedCopy): Inlined this, since it's now trivial.
33077 * wtf/text/WTFString.cpp:
33078 (WTF::String::isolatedCopy):
33079 * wtf/text/WTFString.h: Updated for StringImpl changes.
33081 * API/OpaqueJSString.h:
33082 * GNUmakefile.list.am:
33083 * JavaScriptCore.exp:
33084 * JavaScriptCore.gypi:
33085 * JavaScriptCore.order:
33086 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
33087 * JavaScriptCore.xcodeproj/project.pbxproj:
33088 * wtf/CMakeLists.txt:
33089 * wtf/OwnFastMallocPtr.h:
33090 * wtf/RefCounted.h:
33091 * wtf/SizeLimits.cpp:
33092 * wtf/ThreadSafeRefCounted.h:
33094 * yarr/YarrPattern.h: Updated these files to accomodate removal of
33095 CrossThreadRefCounted.h.
33097 2011-10-24 Oliver Hunt <oliver@apple.com>
33099 Crash in void JSC::validateCell<JSC::RegExp*>(JSC::RegExp*)
33100 https://bugs.webkit.org/show_bug.cgi?id=70689
33102 Reviewed by Filip Pizlo.
33104 While performing codegen we need to make the GlobalData explicitly
33105 aware of the codeblock being compiled, as compilation may trigger GC
33106 and CodeBlock holds GC values, but has not yet been assigned to its
33109 * bytecompiler/BytecodeGenerator.cpp:
33110 (JSC::BytecodeGenerator::BytecodeGenerator):
33111 (JSC::BytecodeGenerator::~BytecodeGenerator):
33112 * bytecompiler/BytecodeGenerator.h:
33113 * heap/AllocationSpace.cpp:
33114 (JSC::AllocationSpace::allocateSlowCase):
33116 (JSC::Heap::markRoots):
33117 * runtime/JSGlobalData.cpp:
33118 (JSC::JSGlobalData::JSGlobalData):
33119 * runtime/JSGlobalData.h:
33120 (JSC::JSGlobalData::startedCompiling):
33121 (JSC::JSGlobalData::finishedCompiling):
33123 2011-10-24 Filip Pizlo <fpizlo@apple.com>
33125 Object-or-other branch speculation may corrupt the state for OSR if the child of the
33126 branch is an integer
33127 https://bugs.webkit.org/show_bug.cgi?id=70777
33129 Reviewed by Oliver Hunt.
33131 * dfg/DFGSpeculativeJIT64.cpp:
33132 (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
33134 2011-10-24 Filip Pizlo <fpizlo@apple.com>
33136 op_new_array_buffer is not inlined correctly
33137 https://bugs.webkit.org/show_bug.cgi?id=70770
33139 Reviewed by Oliver Hunt.
33141 Disabled inlining of op_new_array_buffer, for now.
33143 * dfg/DFGCapabilities.h:
33144 (JSC::DFG::canInlineOpcode):
33146 2011-10-24 Yuqiang Xian <yuqiang.xian@intel.com>
33148 Add boolean speculations to DFG JIT 32_64
33149 https://bugs.webkit.org/show_bug.cgi?id=70706
33151 Reviewed by Filip Pizlo.
33153 Different from the boolean speculations in DFG 64, the boolean
33154 speculations in DFG 32_64 will use a 32bit GPR to hold the primitive
33155 boolean instead of a JSBoolean. This choice is not only for
33156 performance, but also to save a register as we're short of registers on
33158 To accomplish this we make use of DataFormatBoolean, allow a value to
33159 be represented as a primitive boolean and converted from/to a
33161 This patch also fixes SpillOrder in 32_64, which should be different
33162 from 64, and fixes needDataFormatConversion logic in 32_64.
33164 * assembler/MacroAssemblerX86Common.h:
33165 (JSC::MacroAssemblerX86Common::branchTest32):
33166 We don't expect byte test actually as it doesn't work for registers
33168 * dfg/DFGGenerationInfo.h:
33169 (JSC::DFG::needDataFormatConversion):
33170 (JSC::DFG::GenerationInfo::initBoolean):
33171 (JSC::DFG::GenerationInfo::gpr):
33172 (JSC::DFG::GenerationInfo::fillInteger):
33173 (JSC::DFG::GenerationInfo::fillBoolean):
33174 * dfg/DFGJITCodeGenerator.cpp:
33175 (JSC::DFG::JITCodeGenerator::checkConsistency):
33176 * dfg/DFGJITCodeGenerator.h:
33177 (JSC::DFG::JITCodeGenerator::use):
33178 (JSC::DFG::JITCodeGenerator::silentSpillGPR):
33179 (JSC::DFG::JITCodeGenerator::silentFillGPR):
33180 (JSC::DFG::JITCodeGenerator::spill):
33181 (JSC::DFG::cellResult):
33182 (JSC::DFG::booleanResult):
33183 * dfg/DFGJITCodeGenerator32_64.cpp:
33184 (JSC::DFG::JITCodeGenerator::fillJSValue):
33185 (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompareNull):
33186 (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare):
33187 (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeStrictEq):
33188 * dfg/DFGJITCompiler32_64.cpp:
33189 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
33190 * dfg/DFGSpeculativeJIT.cpp:
33191 (JSC::DFG::ValueSource::dump):
33192 (JSC::DFG::ValueRecovery::dump):
33193 (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
33194 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
33195 * dfg/DFGSpeculativeJIT.h:
33196 (JSC::DFG::ValueSource::forPrediction):
33197 (JSC::DFG::ValueRecovery::alreadyInRegisterFileAsUnboxedBoolean):
33198 (JSC::DFG::ValueRecovery::inGPR):
33199 (JSC::DFG::ValueRecovery::gpr):
33200 * dfg/DFGSpeculativeJIT32_64.cpp:
33201 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
33202 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
33203 (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
33204 (JSC::DFG::SpeculativeJIT::compileObjectEquality):
33205 (JSC::DFG::SpeculativeJIT::compare):
33206 (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
33207 (JSC::DFG::SpeculativeJIT::compileLogicalNot):
33208 (JSC::DFG::SpeculativeJIT::emitBranch):
33209 (JSC::DFG::SpeculativeJIT::compile):
33211 2011-10-24 Mark Hahnenberg <mhahnenberg@apple.com>
33213 Fixing Windows build
33215 Unreviewed build fix
33217 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
33219 2011-10-24 Yuqiang Xian <yuqiang.xian@intel.com>
33221 BitVector isInline check could fail
33222 https://bugs.webkit.org/show_bug.cgi?id=70691
33224 Reviewed by Geoffrey Garen.
33226 Current BitVector uses the highest bit of m_bitsOrPointer to indicate
33227 whether it's an inlined bit set or a pointer to an outOfLine bit set.
33228 This check may fail in case the pointer also has the highest bit set,
33229 which is surely possible on IA32 (Linux).
33230 In this case the check failure can result in unexpected behaviors,
33231 for example if the BitVector is incorrectly determined as having an
33232 inlined bit set, then setting a bit exceeding maxInlineBits will wrongly
33233 modify the memory adjacent to the BitVector object.
33234 This fix is to use the lowest bit of m_bitsOrPointer to indicate inline
33235 or outofline, based on the assumption that the pointer to OutOfLineBits
33236 should be 4 or 8 byte aligned.
33237 We could mark the lowest bit (bit 0) with 1 for inlined bit set,
33238 and bits 1~bitsInPointer are used for bit set/test.
33239 In this case we need do one bit more shift for bit set/test.
33241 * wtf/BitVector.cpp:
33242 (WTF::BitVector::resizeOutOfLine):
33244 (WTF::BitVector::quickGet):
33245 (WTF::BitVector::quickSet):
33246 (WTF::BitVector::quickClear):
33247 (WTF::BitVector::makeInlineBits):
33248 (WTF::BitVector::isInline):
33250 2011-10-24 Mark Hahnenberg <mhahnenberg@apple.com>
33252 Rename static getOwnPropertySlot to getOwnPropertySlotByIndex
33253 https://bugs.webkit.org/show_bug.cgi?id=70271
33255 Reviewed by Darin Adler.
33257 Renaming versions of getOwnPropertySlot that use an unsigned as the property
33258 name to "getOwnPropertySlotByIndex" in preparation for adding them to the
33259 MethodTable, which requires unique names for each method.
33261 * JavaScriptCore.exp:
33262 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
33263 * runtime/Arguments.cpp:
33264 (JSC::Arguments::getOwnPropertySlotVirtual):
33265 (JSC::Arguments::getOwnPropertySlotByIndex):
33266 * runtime/Arguments.h:
33267 * runtime/JSArray.cpp:
33268 (JSC::JSArray::getOwnPropertySlotVirtual):
33269 (JSC::JSArray::getOwnPropertySlotByIndex):
33270 (JSC::JSArray::getOwnPropertySlot):
33271 * runtime/JSArray.h:
33272 * runtime/JSByteArray.cpp:
33273 (JSC::JSByteArray::getOwnPropertySlotVirtual):
33274 (JSC::JSByteArray::getOwnPropertySlotByIndex):
33275 * runtime/JSByteArray.h:
33276 * runtime/JSCell.cpp:
33277 (JSC::JSCell::getOwnPropertySlotVirtual):
33278 (JSC::JSCell::getOwnPropertySlotByIndex):
33279 * runtime/JSCell.h:
33280 * runtime/JSNotAnObject.cpp:
33281 (JSC::JSNotAnObject::getOwnPropertySlotVirtual):
33282 (JSC::JSNotAnObject::getOwnPropertySlotByIndex):
33283 * runtime/JSNotAnObject.h:
33284 * runtime/JSObject.cpp:
33285 (JSC::JSObject::getOwnPropertySlotVirtual):
33286 (JSC::JSObject::getOwnPropertySlotByIndex):
33287 * runtime/JSObject.h:
33288 * runtime/JSString.cpp:
33289 (JSC::JSString::getOwnPropertySlotVirtual):
33290 (JSC::JSString::getOwnPropertySlotByIndex):
33291 * runtime/JSString.h:
33292 * runtime/ObjectPrototype.cpp:
33293 (JSC::ObjectPrototype::getOwnPropertySlotVirtual):
33294 (JSC::ObjectPrototype::getOwnPropertySlotByIndex):
33295 * runtime/ObjectPrototype.h:
33296 * runtime/RegExpMatchesArray.h:
33297 (JSC::RegExpMatchesArray::getOwnPropertySlotVirtual):
33298 (JSC::RegExpMatchesArray::getOwnPropertySlotByIndex):
33299 * runtime/StringObject.cpp:
33300 (JSC::StringObject::getOwnPropertySlotVirtual):
33301 (JSC::StringObject::getOwnPropertySlotByIndex):
33302 * runtime/StringObject.h:
33304 2011-10-24 Patrick Gansterer <paroga@webkit.org>
33306 Interpreter build fix after r98179.
33308 * bytecode/CodeBlock.h:
33309 Moved CodeBlock::baselineVersion() into ENABLE(JIT) block,
33310 since it is only used there.
33312 2011-10-23 Geoffrey Garen <ggaren@apple.com>
33314 Fixed a typo Darin spotted.
33316 * wtf/StringHasher.h:
33317 (WTF::StringHasher::hash): Expelliarmus!
33319 2011-10-23 Geoffrey Garen <ggaren@apple.com>
33321 Removed StringImpl::createStrippingNullCharacters
33322 https://bugs.webkit.org/show_bug.cgi?id=70700
33324 Reviewed by David Levin.
33328 * JavaScriptCore.exp:
33329 * wtf/text/StringImpl.cpp:
33330 * wtf/text/StringImpl.h:
33332 2011-10-22 Filip Pizlo <fpizlo@apple.com>
33334 DFG should inline constructors
33335 https://bugs.webkit.org/show_bug.cgi?id=70675
33337 Reviewed by Oliver Hunt.
33339 Adds support for inlining constructors. Also fixes two pathologies
33340 uncovered along the way: CheckMethod claimed that it never returned a
33341 result (causing CheckMethod -> SetLocal -> GetLocal sequences to
33342 result in the GetLocal doing OSR exit), and get_by_id parsing never
33343 checked if it was hot in slow path. Also fiddled with inlining
33344 heuristics; it appears that for now, the more inlining, the happier
33345 V8 is. Finally, a bug was uncovered where a silent spill of a boxed
33346 integer that had previously been spilled unboxed causes the silent
33347 fill to forget to unbox.
33349 This appears to be a 4% speed-up on V8 in their harness, or a 1%
33350 speed-up in my harness. The difference is due to warm-up: in my
33351 harness we see significant amounts of time spent in compilation, but
33352 in V8's harness compilation gets amortizes. Profiling indicates that
33353 we have the potential for a 5% win from basic optimizations like
33354 generating OSR exits lazily and holding onto bytecode longer.
33356 * dfg/DFGAbstractState.cpp:
33357 (JSC::DFG::AbstractState::execute):
33358 * dfg/DFGByteCodeParser.cpp:
33359 (JSC::DFG::ByteCodeParser::handleCall):
33360 (JSC::DFG::ByteCodeParser::handleInlining):
33361 (JSC::DFG::ByteCodeParser::handleMinMax):
33362 (JSC::DFG::ByteCodeParser::parseBlock):
33363 (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
33364 (JSC::DFG::ByteCodeParser::parse):
33365 * dfg/DFGCapabilities.h:
33366 (JSC::DFG::mightInlineFunctionForConstruct):
33367 (JSC::DFG::canInlineOpcode):
33368 (JSC::DFG::mightInlineFunctionFor):
33369 (JSC::DFG::canInlineFunctionFor):
33370 * dfg/DFGJITCodeGenerator.h:
33371 (JSC::DFG::JITCodeGenerator::silentFillGPR):
33372 * runtime/Executable.h:
33374 (JSC::ExecutableBase::intrinsicFor):
33375 * runtime/Heuristics.cpp:
33376 (JSC::Heuristics::initializeHeuristics):
33377 * runtime/Heuristics.h:
33379 2011-10-23 Noel Gordon <noel.gordon@gmail.com>
33381 [chromium] Remove RopeImpl.{h,cpp} from the gyp projects
33382 https://bugs.webkit.org/show_bug.cgi?id=70703
33384 Reviewed by Kent Tamura.
33386 runtime/RopeImpl.{h,cpp} were removed in r97872, remove references
33387 to these files from the gyp project files.
33389 * JavaScriptCore.gypi:
33391 2011-10-23 Mark Hahnenberg <mhahnenberg@apple.com>
33393 Add deleteProperty to the MethodTable
33394 https://bugs.webkit.org/show_bug.cgi?id=70162
33396 Reviewed by Sam Weinig.
33398 * JavaScriptCore.exp:
33399 * runtime/ClassInfo.h: Added both versions of deleteProperty to the MethodTable.
33400 * runtime/JSFunction.h: Changed JSFunction::deleteProperty to
33401 be protected rather than private for subclasses who don't provide their own
33404 2011-10-23 Mark Hahnenberg <mhahnenberg@apple.com>
33406 Remove getConstructDataVirtual
33407 https://bugs.webkit.org/show_bug.cgi?id=70638
33409 Reviewed by Darin Adler.
33411 Removed all declarations and definitions of getConstructDataVirtual.
33412 Also replaced all call sites to getConstructDataVirtual with a
33413 corresponding lookup in the MethodTable.
33415 * API/JSCallbackConstructor.cpp:
33416 * API/JSCallbackConstructor.h:
33417 * API/JSCallbackObject.h:
33418 * API/JSCallbackObjectFunctions.h:
33419 * API/JSObjectRef.cpp:
33420 (JSObjectIsConstructor):
33421 (JSObjectCallAsConstructor):
33422 * JavaScriptCore.exp:
33423 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
33424 * dfg/DFGOperations.cpp:
33425 * interpreter/Interpreter.cpp:
33426 (JSC::Interpreter::privateExecute):
33427 * jit/JITStubs.cpp:
33428 (JSC::DEFINE_STUB_FUNCTION):
33429 * runtime/ArrayConstructor.cpp:
33430 * runtime/ArrayConstructor.h:
33431 * runtime/BooleanConstructor.cpp:
33432 * runtime/BooleanConstructor.h:
33433 * runtime/DateConstructor.cpp:
33434 * runtime/DateConstructor.h:
33436 (JSC::StrictModeTypeErrorFunction::getConstructData):
33437 * runtime/ErrorConstructor.cpp:
33438 * runtime/ErrorConstructor.h:
33439 * runtime/FunctionConstructor.cpp:
33440 * runtime/FunctionConstructor.h:
33441 * runtime/JSCell.cpp:
33442 * runtime/JSCell.h:
33443 * runtime/JSFunction.cpp:
33444 * runtime/JSFunction.h:
33445 * runtime/JSObject.h:
33446 (JSC::getConstructData):
33447 * runtime/NativeErrorConstructor.cpp:
33448 * runtime/NativeErrorConstructor.h:
33449 * runtime/NumberConstructor.cpp:
33450 * runtime/NumberConstructor.h:
33451 * runtime/ObjectConstructor.cpp:
33452 * runtime/ObjectConstructor.h:
33453 * runtime/RegExpConstructor.cpp:
33454 * runtime/RegExpConstructor.h:
33455 * runtime/StringConstructor.cpp:
33456 * runtime/StringConstructor.h:
33458 2011-10-23 Geoffrey Garen <ggaren@apple.com>
33460 Try to fix the SL build.
33462 * dfg/DFGByteCodeParser.cpp:
33463 (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry): Cast
33464 away int vs unisgned warning.
33466 2011-10-21 Geoffrey Garen <ggaren@apple.com>
33468 Separated string lifetime bits from character buffer state bits
33469 https://bugs.webkit.org/show_bug.cgi?id=70673
33471 Reviewed by Anders Carlsson.
33473 Moved the static/immortal bit into the bottom bit of the refcount, and
33474 moved all other bits into the high bits of the hash code.
33476 This is the first step toward a new Characters/PassString class, and it
33477 makes ref/deref slightly more efficient.
33479 * create_hash_table:
33480 * wtf/StringHasher.h:
33481 (WTF::StringHasher::hash): Tweaked the string hashing function to leave
33482 the top bits clear, so they can be used as flags.
33484 Fixed some small differences between the PERL copy of this function and
33485 the C++ copy of this function, which could have in theory caused subtle
33488 * wtf/text/StringImpl.cpp:
33489 (WTF::StringImpl::sharedBuffer):
33490 (WTF::StringImpl::createWithTerminatingNullCharacter):
33491 * wtf/text/StringImpl.h:
33492 (WTF::StringImpl::StringImpl):
33493 (WTF::StringImpl::cost): Renamed s_refCountFlagShouldReportedCost to
33494 s_didReportExtraCost, since the original name was both self-contradictory
33495 and used as a double-negative.
33497 (WTF::StringImpl::isIdentifier):
33498 (WTF::StringImpl::setIsIdentifier):
33499 (WTF::StringImpl::hasTerminatingNullCharacter):
33500 (WTF::StringImpl::isAtomic):
33501 (WTF::StringImpl::setIsAtomic):
33502 (WTF::StringImpl::setHash):
33503 (WTF::StringImpl::rawHash):
33504 (WTF::StringImpl::hasHash):
33505 (WTF::StringImpl::existingHash):
33506 (WTF::StringImpl::hash):
33507 (WTF::StringImpl::hasOneRef):
33508 (WTF::StringImpl::ref):
33509 (WTF::StringImpl::deref):
33510 (WTF::StringImpl::bufferOwnership):
33511 (WTF::StringImpl::isStatic): Moved the static/immortal bit into the bottom
33512 bit of the refcount. Now, all lifetime information lives in the refcount
33513 field. Moved the other bits into the hash code field.
33515 2011-10-21 Filip Pizlo <fpizlo@apple.com>
33517 DFG inlining sometimes fails to reset constant references
33518 https://bugs.webkit.org/show_bug.cgi?id=70668
33520 Reviewed by Anders Carlsson.
33522 Reset constant references when we need to (new block created) and not
33523 when we don't (change of inlining depth).
33525 * dfg/DFGByteCodeParser.cpp:
33526 (JSC::DFG::ByteCodeParser::handleInlining):
33527 (JSC::DFG::ByteCodeParser::prepareToParseBlock):
33528 (JSC::DFG::ByteCodeParser::parseBlock):
33529 (JSC::DFG::ByteCodeParser::parseCodeBlock):
33531 2011-10-21 Filip Pizlo <fpizlo@apple.com>
33533 DFG should have inlining
33534 https://bugs.webkit.org/show_bug.cgi?id=69996
33536 Reviewed by Oliver Hunt.
33538 Implements inlining that's hooked into the bytecode parser. Only
33539 works for calls, for now, though nothing fundamentally prevents us
33540 from inlining constructor calls. 2% overall speed-up on all
33541 benchmarks. 7% speed-up on V8 (around 34% and 27% on deltablue and
33542 richards respectively), neutral on Kraken and SunSpider.
33544 * bytecode/CodeBlock.cpp:
33545 (JSC::CodeBlock::visitAggregate):
33546 * bytecode/CodeBlock.h:
33547 (JSC::CodeBlock::baselineVersion):
33548 (JSC::CodeBlock::setInstructionCount):
33549 (JSC::CodeBlock::likelyToTakeSlowCase):
33550 (JSC::CodeBlock::couldTakeSlowCase):
33551 (JSC::CodeBlock::likelyToTakeSpecialFastCase):
33552 (JSC::CodeBlock::likelyToTakeDeepestSlowCase):
33553 (JSC::CodeBlock::likelyToTakeAnySlowCase):
33554 * bytecode/CodeOrigin.h:
33555 (JSC::CodeOrigin::inlineDepthForCallFrame):
33556 (JSC::CodeOrigin::inlineDepth):
33557 (JSC::CodeOrigin::operator==):
33558 (JSC::CodeOrigin::inlineStack):
33559 * bytecompiler/BytecodeGenerator.cpp:
33560 (JSC::BytecodeGenerator::generate):
33561 * dfg/DFGAbstractState.cpp:
33562 (JSC::DFG::AbstractState::beginBasicBlock):
33563 (JSC::DFG::AbstractState::execute):
33564 (JSC::DFG::AbstractState::mergeStateAtTail):
33565 * dfg/DFGBasicBlock.h:
33566 (JSC::DFG::BasicBlock::BasicBlock):
33567 (JSC::DFG::BasicBlock::ensureLocals):
33568 (JSC::DFG::UnlinkedBlock::UnlinkedBlock):
33569 * dfg/DFGByteCodeParser.cpp:
33570 (JSC::DFG::ByteCodeParser::ByteCodeParser):
33571 (JSC::DFG::ByteCodeParser::getDirect):
33572 (JSC::DFG::ByteCodeParser::get):
33573 (JSC::DFG::ByteCodeParser::setDirect):
33574 (JSC::DFG::ByteCodeParser::set):
33575 (JSC::DFG::ByteCodeParser::getLocal):
33576 (JSC::DFG::ByteCodeParser::getArgument):
33577 (JSC::DFG::ByteCodeParser::flush):
33578 (JSC::DFG::ByteCodeParser::InlineStackEntry::~InlineStackEntry):
33579 (JSC::DFG::ByteCodeParser::InlineStackEntry::remapOperand):
33580 (JSC::DFG::ByteCodeParser::handleInlining):
33581 (JSC::DFG::ByteCodeParser::parseBlock):
33582 (JSC::DFG::ByteCodeParser::processPhiStack):
33583 (JSC::DFG::ByteCodeParser::linkBlock):
33584 (JSC::DFG::ByteCodeParser::linkBlocks):
33585 (JSC::DFG::ByteCodeParser::handleSuccessor):
33586 (JSC::DFG::ByteCodeParser::determineReachability):
33587 (JSC::DFG::ByteCodeParser::buildOperandMapsIfNecessary):
33588 (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
33589 (JSC::DFG::ByteCodeParser::parseCodeBlock):
33590 (JSC::DFG::ByteCodeParser::parse):
33591 * dfg/DFGCapabilities.cpp:
33592 (JSC::DFG::canHandleOpcodes):
33593 (JSC::DFG::canCompileOpcodes):
33594 (JSC::DFG::canInlineOpcodes):
33595 * dfg/DFGCapabilities.h:
33596 (JSC::DFG::mightCompileEval):
33597 (JSC::DFG::mightCompileProgram):
33598 (JSC::DFG::mightCompileFunctionForCall):
33599 (JSC::DFG::mightCompileFunctionForConstruct):
33600 (JSC::DFG::mightInlineFunctionForCall):
33601 (JSC::DFG::mightInlineFunctionForConstruct):
33602 (JSC::DFG::canInlineOpcode):
33603 (JSC::DFG::canInlineOpcodes):
33604 (JSC::DFG::canInlineFunctionForCall):
33605 (JSC::DFG::canInlineFunctionForConstruct):
33606 * dfg/DFGGraph.cpp:
33607 (JSC::DFG::printWhiteSpace):
33608 (JSC::DFG::Graph::dumpCodeOrigin):
33609 (JSC::DFG::Graph::dump):
33611 (JSC::DFG::GetBytecodeBeginForBlock::operator()):
33612 (JSC::DFG::Graph::blockIndexForBytecodeOffset):
33613 * dfg/DFGJITCompiler.cpp:
33614 (JSC::DFG::JITCompiler::decodedCodeMapFor):
33615 (JSC::DFG::JITCompiler::linkOSRExits):
33616 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
33617 * dfg/DFGJITCompiler.h:
33618 (JSC::DFG::JITCompiler::debugCall):
33619 (JSC::DFG::JITCompiler::baselineCodeBlockFor):
33620 * dfg/DFGJITCompiler32_64.cpp:
33621 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
33623 (JSC::DFG::Node::hasVariableAccessData):
33624 (JSC::DFG::Node::shouldGenerate):
33625 * dfg/DFGOperands.h:
33626 (JSC::DFG::Operands::ensureLocals):
33627 (JSC::DFG::Operands::setLocal):
33628 (JSC::DFG::Operands::getLocal):
33629 * dfg/DFGPropagator.cpp:
33630 (JSC::DFG::Propagator::propagateNodePredictions):
33631 * dfg/DFGSpeculativeJIT.cpp:
33632 (JSC::DFG::OSRExit::OSRExit):
33633 (JSC::DFG::SpeculativeJIT::compile):
33634 (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
33635 * dfg/DFGSpeculativeJIT.h:
33636 (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
33637 * dfg/DFGSpeculativeJIT32_64.cpp:
33638 (JSC::DFG::SpeculativeJIT::compile):
33639 * dfg/DFGSpeculativeJIT64.cpp:
33640 (JSC::DFG::SpeculativeJIT::compile):
33641 * interpreter/CallFrame.cpp:
33642 (JSC::CallFrame::trueCallerFrameSlow):
33644 (JSC::JIT::compileOpCallSlowCase):
33645 * jit/JITStubs.cpp:
33646 (JSC::DEFINE_STUB_FUNCTION):
33647 * runtime/Executable.cpp:
33648 (JSC::FunctionExecutable::baselineCodeBlockFor):
33649 (JSC::FunctionExecutable::produceCodeBlockFor):
33650 (JSC::FunctionExecutable::compileForCallInternal):
33651 (JSC::FunctionExecutable::compileForConstructInternal):
33652 * runtime/Executable.h:
33653 (JSC::FunctionExecutable::profiledCodeBlockFor):
33654 (JSC::FunctionExecutable::parameterCount):
33655 * runtime/Heuristics.cpp:
33656 (JSC::Heuristics::initializeHeuristics):
33657 * runtime/Heuristics.h:
33658 * runtime/JSFunction.h:
33660 2011-10-21 Mark Hahnenberg <mhahnenberg@apple.com>
33662 Add put to the MethodTable
33663 https://bugs.webkit.org/show_bug.cgi?id=70439
33665 Reviewed by Oliver Hunt.
33667 * JavaScriptCore.exp:
33668 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
33669 * runtime/ClassInfo.h: Added put and putByIndex to the MethodTable.
33670 * runtime/JSFunction.h: Changed access modifier for put to protected since some
33671 subclasses of JSFunction need to reference it in their MethodTables.
33673 2011-10-21 Mark Hahnenberg <mhahnenberg@apple.com>
33675 Add finalizer to JSObject
33676 https://bugs.webkit.org/show_bug.cgi?id=70336
33678 Reviewed by Darin Adler.
33680 * heap/MarkedBlock.cpp:
33681 (JSC::MarkedBlock::callDestructor): Skip the call to the destructor
33682 if we're a JSFinalObject, since the finalizer takes care of things.
33683 * runtime/JSCell.h:
33684 (JSC::JSCell::~JSCell): Remove the GC validation due to a conflict with
33685 future changes and the fact that we no longer always call the destructor, making
33686 the information provided less useful.
33687 * runtime/JSObject.cpp:
33688 (JSC::JSObject::finalize): Add finalizer for JSObject.
33689 (JSC::JSObject::allocatePropertyStorage): The first time we need to allocate out-of-line
33690 property storage, we add a finalizer to ourself.
33691 * runtime/JSObject.h:
33693 2011-10-21 Simon Hausmann <simon.hausmann@nokia.com>
33695 Remove QtScript source code from WebKit.
33696 https://bugs.webkit.org/show_bug.cgi?id=64088
33698 Reviewed by Tor Arne Vestbø.
33700 Removed dead code that isn't developed anymore.
33702 * JavaScriptCore.gypi:
33703 * JavaScriptCore.pri:
33704 * qt/api/QtScript.pro: Removed.
33705 * qt/api/qscriptconverter_p.h: Removed.
33706 * qt/api/qscriptengine.cpp: Removed.
33707 * qt/api/qscriptengine.h: Removed.
33708 * qt/api/qscriptengine_p.cpp: Removed.
33709 * qt/api/qscriptengine_p.h: Removed.
33710 * qt/api/qscriptfunction.cpp: Removed.
33711 * qt/api/qscriptfunction_p.h: Removed.
33712 * qt/api/qscriptoriginalglobalobject_p.h: Removed.
33713 * qt/api/qscriptprogram.cpp: Removed.
33714 * qt/api/qscriptprogram.h: Removed.
33715 * qt/api/qscriptprogram_p.h: Removed.
33716 * qt/api/qscriptstring.cpp: Removed.
33717 * qt/api/qscriptstring.h: Removed.
33718 * qt/api/qscriptstring_p.h: Removed.
33719 * qt/api/qscriptsyntaxcheckresult.cpp: Removed.
33720 * qt/api/qscriptsyntaxcheckresult.h: Removed.
33721 * qt/api/qscriptsyntaxcheckresult_p.h: Removed.
33722 * qt/api/qscriptvalue.cpp: Removed.
33723 * qt/api/qscriptvalue.h: Removed.
33724 * qt/api/qscriptvalue_p.h: Removed.
33725 * qt/api/qscriptvalueiterator.cpp: Removed.
33726 * qt/api/qscriptvalueiterator.h: Removed.
33727 * qt/api/qscriptvalueiterator_p.h: Removed.
33728 * qt/api/qtscriptglobal.h: Removed.
33729 * qt/benchmarks/benchmarks.pri: Removed.
33730 * qt/benchmarks/benchmarks.pro: Removed.
33731 * qt/benchmarks/qscriptengine/qscriptengine.pro: Removed.
33732 * qt/benchmarks/qscriptengine/tst_qscriptengine.cpp: Removed.
33733 * qt/benchmarks/qscriptvalue/qscriptvalue.pro: Removed.
33734 * qt/benchmarks/qscriptvalue/tst_qscriptvalue.cpp: Removed.
33735 * qt/tests/qscriptengine/qscriptengine.pro: Removed.
33736 * qt/tests/qscriptengine/tst_qscriptengine.cpp: Removed.
33737 * qt/tests/qscriptstring/qscriptstring.pro: Removed.
33738 * qt/tests/qscriptstring/tst_qscriptstring.cpp: Removed.
33739 * qt/tests/qscriptvalue/qscriptvalue.pro: Removed.
33740 * qt/tests/qscriptvalue/tst_qscriptvalue.cpp: Removed.
33741 * qt/tests/qscriptvalue/tst_qscriptvalue.h: Removed.
33742 * qt/tests/qscriptvalue/tst_qscriptvalue_generated_comparison.cpp: Removed.
33743 * qt/tests/qscriptvalue/tst_qscriptvalue_generated_init.cpp: Removed.
33744 * qt/tests/qscriptvalue/tst_qscriptvalue_generated_istype.cpp: Removed.
33745 * qt/tests/qscriptvalue/tst_qscriptvalue_generated_totype.cpp: Removed.
33746 * qt/tests/qscriptvalueiterator/qscriptvalueiterator.pro: Removed.
33747 * qt/tests/qscriptvalueiterator/tst_qscriptvalueiterator.cpp: Removed.
33748 * qt/tests/tests.pri: Removed.
33749 * qt/tests/tests.pro: Removed.
33751 2011-10-21 Zheng Liu <zheng.z.liu@intel.com>
33753 bytecompiler sometimes generates incorrect bytecode for put_by_id
33754 https://bugs.webkit.org/show_bug.cgi?id=70403
33756 Reviewed by Filip Pizlo.
33758 * bytecompiler/NodesCodegen.cpp:
33759 (JSC::AssignDotNode::emitBytecode):
33760 (JSC::AssignBracketNode::emitBytecode):
33762 2011-10-20 Filip Pizlo <fpizlo@apple.com>
33764 DFG should not try to predict argument types by looking at the values of
33765 argument registers at the time of compilation
33766 https://bugs.webkit.org/show_bug.cgi?id=70578
33768 Reviewed by Oliver Hunt.
33770 * bytecode/CodeBlock.cpp:
33771 * dfg/DFGDriver.cpp:
33772 (JSC::DFG::compile):
33773 (JSC::DFG::tryCompile):
33774 (JSC::DFG::tryCompileFunction):
33776 (JSC::DFG::tryCompileFunction):
33777 * dfg/DFGGraph.cpp:
33778 (JSC::DFG::Graph::predictArgumentTypes):
33780 * runtime/Executable.cpp:
33781 (JSC::FunctionExecutable::compileOptimizedForCall):
33782 (JSC::FunctionExecutable::compileOptimizedForConstruct):
33783 (JSC::FunctionExecutable::compileForCallInternal):
33784 (JSC::FunctionExecutable::compileForConstructInternal):
33785 * runtime/Executable.h:
33786 (JSC::FunctionExecutable::compileForCall):
33787 (JSC::FunctionExecutable::compileForConstruct):
33788 (JSC::FunctionExecutable::compileFor):
33789 (JSC::FunctionExecutable::compileOptimizedFor):
33791 2011-10-20 Filip Pizlo <fpizlo@apple.com>
33793 DFG call optimization handling will fail if the call had been unlinked due
33794 to the callee being optimized
33795 https://bugs.webkit.org/show_bug.cgi?id=70468
33797 Reviewed by Geoff Garen.
33799 If a call had ever been linked, we remember this fact as well as the function
33800 to which it was linked even if unlinkIncomingCalls() or unlinkCalls() are
33803 * bytecode/CodeBlock.cpp:
33804 (JSC::CodeBlock::visitAggregate):
33805 * bytecode/CodeBlock.h:
33806 * dfg/DFGByteCodeParser.cpp:
33807 (JSC::DFG::ByteCodeParser::parseBlock):
33808 * dfg/DFGRepatch.cpp:
33809 (JSC::DFG::dfgLinkFor):
33811 (JSC::JIT::linkFor):
33813 2011-10-20 Yuqiang Xian <yuqiang.xian@intel.com>
33815 DFG JIT 32_64 - Fix ByteArray speculation
33816 https://bugs.webkit.org/show_bug.cgi?id=70571
33818 Reviewed by Filip Pizlo.
33820 * dfg/DFGSpeculativeJIT.h:
33821 (JSC::DFG::ValueSource::forPrediction):
33822 * dfg/DFGSpeculativeJIT32_64.cpp:
33823 (JSC::DFG::SpeculativeJIT::compile):
33825 2011-10-20 Vincent Scheib <scheib@chromium.org>
33827 MouseLock compile and run time flags.
33828 https://bugs.webkit.org/show_bug.cgi?id=70530
33830 Reviewed by Darin Fisher.
33834 2011-10-20 Mark Hahnenberg <mhahnenberg@apple.com>
33836 Rename static deleteProperty to deletePropertyByIndex
33837 https://bugs.webkit.org/show_bug.cgi?id=70257
33839 Reviewed by Geoffrey Garen.
33841 Renaming versions of deleteProperty that use an unsigned as the property
33842 name to "deletePropertyByIndex" in preparation for adding them to the
33843 MethodTable, which requires unique names for each method.
33845 * API/JSCallbackObject.h:
33846 * API/JSCallbackObjectFunctions.h:
33847 (JSC::::deletePropertyVirtual):
33848 (JSC::::deletePropertyByIndex):
33849 * runtime/Arguments.cpp:
33850 (JSC::Arguments::deletePropertyVirtual):
33851 (JSC::Arguments::deletePropertyByIndex):
33852 * runtime/Arguments.h:
33853 * runtime/JSArray.cpp:
33854 (JSC::JSArray::deletePropertyVirtual):
33855 (JSC::JSArray::deletePropertyByIndex):
33856 * runtime/JSArray.h:
33857 * runtime/JSCell.cpp:
33858 (JSC::JSCell::deletePropertyVirtual):
33859 (JSC::JSCell::deletePropertyByIndex):
33860 * runtime/JSCell.h:
33861 * runtime/JSNotAnObject.cpp:
33862 (JSC::JSNotAnObject::deletePropertyVirtual):
33863 (JSC::JSNotAnObject::deletePropertyByIndex):
33864 * runtime/JSNotAnObject.h:
33865 * runtime/JSObject.cpp:
33866 (JSC::JSObject::deletePropertyVirtual):
33867 (JSC::JSObject::deletePropertyByIndex):
33868 * runtime/JSObject.h:
33869 * runtime/RegExpMatchesArray.h:
33870 (JSC::RegExpMatchesArray::deletePropertyVirtual):
33871 (JSC::RegExpMatchesArray::deletePropertyByIndex):
33873 2011-10-20 Filip Pizlo <fpizlo@apple.com>
33875 https://bugs.webkit.org/show_bug.cgi?id=70482
33876 DFG-related stubs in the old JIT should not be built if the DFG is disabled
33878 Reviewed by Zoltan Herczeg.
33880 Aiming for a slight code size/build time reduction if the DFG is not in
33881 play. This should also make further DFG development slightly easier since
33882 the bodies of these JIT stubs can now safely refer to things that are only
33883 declared when the DFG is enabled.
33885 * jit/JITStubs.cpp:
33888 2011-10-19 Filip Pizlo <fpizlo@apple.com>
33890 DFG ConvertThis emits slow code when the source node is known to be,
33891 but not predicted to be, a final object
33892 https://bugs.webkit.org/show_bug.cgi?id=70466
33894 Reviewed by Oliver Hunt.
33896 Added a new case in ConvertThis compilation.
33898 * dfg/DFGSpeculativeJIT32_64.cpp:
33899 (JSC::DFG::SpeculativeJIT::compile):
33900 * dfg/DFGSpeculativeJIT64.cpp:
33901 (JSC::DFG::SpeculativeJIT::compile):
33903 2011-10-19 Filip Pizlo <fpizlo@apple.com>
33905 Optimization triggers in the old JIT may sometimes fire repeatedly even
33906 though there is no optimization to be done
33907 https://bugs.webkit.org/show_bug.cgi?id=70467
33909 Reviewed by Oliver Hunt.
33911 If optimize_from_ret does nothing, it delays the next optimization trigger.
33912 This is performance-neutral.
33914 * jit/JITStubs.cpp:
33915 (JSC::DEFINE_STUB_FUNCTION):
33916 * runtime/Heuristics.cpp:
33917 (JSC::Heuristics::initializeHeuristics):
33919 2011-10-19 Yuqiang Xian <yuqiang.xian@intel.com>
33921 DFG JIT 32_64 - remove unnecessary double unboxings in fillDouble/fillSpeculateDouble
33922 https://bugs.webkit.org/show_bug.cgi?id=70460
33924 Reviewed by Filip Pizlo.
33926 As pointed out by Gavin in bug #70418, when a value is already in memory
33927 we can avoid loading it to two GPRs at first and then unboxing them to a FPR.
33928 This gives 9% improvement on Kraken if without the change in bug #70418,
33929 and 1% if based on the code with bug #70418 change.
33930 Performance is neutral in V8 and SunSpider.
33932 * dfg/DFGJITCodeGenerator32_64.cpp:
33933 (JSC::DFG::JITCodeGenerator::fillDouble):
33934 * dfg/DFGSpeculativeJIT32_64.cpp:
33935 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
33937 2011-10-19 Gavin Barraclough <barraclough@apple.com>
33939 Poisoning of strict caller,arguments inappropriately poisoning "in"
33940 https://bugs.webkit.org/show_bug.cgi?id=63398
33942 Reviewed by Oliver Hunt.
33944 This fixes the problem by correctly implementing the spec -
33945 the error should actually be being thrown from a standard JS getter/setter.
33946 This implements spec correct behaviour for strict mode JS functions & bound
33947 functions, I'll follow up with a patch to do the same for arguments.
33949 * runtime/JSBoundFunction.cpp:
33950 (JSC::JSBoundFunction::finishCreation):
33951 - Add the poisoned caller/arguments properties.
33952 * runtime/JSBoundFunction.h:
33953 * runtime/JSFunction.cpp:
33954 (JSC::JSFunction::finishCreation):
33955 (JSC::JSFunction::getOwnPropertySlot):
33956 (JSC::JSFunction::getOwnPropertyDescriptor):
33957 (JSC::JSFunction::put):
33958 - If the caller/arguments are accessed on a strict mode function, lazily add the ThrowTypeError getter.
33959 * runtime/JSFunction.h:
33960 * runtime/JSGlobalObject.cpp:
33961 (JSC::JSGlobalObject::createThrowTypeError):
33962 (JSC::JSGlobalObject::visitChildren):
33963 * runtime/JSGlobalObject.h:
33964 (JSC::JSGlobalObject::throwTypeErrorGetterSetter):
33965 - Add a ThrowTypeError type, per ES5 13.2.3.
33966 * runtime/JSGlobalObjectFunctions.cpp:
33967 (JSC::globalFuncThrowTypeError):
33968 * runtime/JSGlobalObjectFunctions.h:
33969 - Implementation of ThrowTypeError.
33970 * runtime/JSObject.cpp:
33971 (JSC::JSObject::initializeGetterSetterProperty):
33972 * runtime/JSObject.h:
33973 - This function adds a new property (must not exist already) that is an initialized getter/setter.
33975 2011-10-19 Yuqiang Xian <yuqiang.xian@intel.com>
33977 DFG JIT 32_64 - improve double boxing/unboxing
33978 https://bugs.webkit.org/show_bug.cgi?id=70418
33980 Reviewed by Gavin Barraclough.
33982 Double boxing/unboxing in DFG JIT 32_64 is currently implemented inefficiently,
33983 which tries to exchange data through memory.
33984 On X86 some SSE instructions can help us on such operations with better performance.
33985 This improves 32-bit DFG performance by 29% on Kraken, 7% on SunSpider,
33986 and 2% on V8, tested on Linux X86 (Core i7 Nehalem).
33988 * assembler/MacroAssemblerX86Common.h:
33989 (JSC::MacroAssemblerX86Common::lshiftPacked):
33990 (JSC::MacroAssemblerX86Common::rshiftPacked):
33991 (JSC::MacroAssemblerX86Common::orPacked):
33992 (JSC::MacroAssemblerX86Common::moveInt32ToPacked):
33993 (JSC::MacroAssemblerX86Common::movePackedToInt32):
33994 * assembler/X86Assembler.h:
33995 (JSC::X86Assembler::movd_rr):
33996 (JSC::X86Assembler::psllq_i8r):
33997 (JSC::X86Assembler::psrlq_i8r):
33998 (JSC::X86Assembler::por_rr):
33999 * dfg/DFGJITCodeGenerator.h:
34000 (JSC::DFG::JITCodeGenerator::boxDouble):
34001 (JSC::DFG::JITCodeGenerator::unboxDouble):
34002 * dfg/DFGJITCodeGenerator32_64.cpp:
34003 (JSC::DFG::JITCodeGenerator::fillDouble):
34004 (JSC::DFG::JITCodeGenerator::fillJSValue):
34005 (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToNumber):
34006 (JSC::DFG::JITCodeGenerator::nonSpeculativeUInt32ToNumber):
34007 (JSC::DFG::JITCodeGenerator::nonSpeculativeKnownConstantArithOp):
34008 (JSC::DFG::JITCodeGenerator::nonSpeculativeBasicArithOp):
34009 * dfg/DFGJITCompiler.h:
34010 (JSC::DFG::JITCompiler::boxDouble):
34011 (JSC::DFG::JITCompiler::unboxDouble):
34012 * dfg/DFGSpeculativeJIT32_64.cpp:
34013 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
34014 (JSC::DFG::SpeculativeJIT::convertToDouble):
34015 (JSC::DFG::SpeculativeJIT::compile):
34017 2011-10-19 Gyuyoung Kim <gyuyoung.kim@samsung.com>
34019 [EFL] Fix DSO linkage of wtf_efl.
34021 Unreviewed build fix.
34023 Need to add -ldl to jsc_efl (requested by dladdr).
34025 * wtf/CMakeListsEfl.txt:
34027 2011-10-19 Geoffrey Garen <ggaren@apple.com>
34029 Removed StringImplBase, fusing it into StringImpl
34030 https://bugs.webkit.org/show_bug.cgi?id=70443
34032 Reviewed by Gavin Barraclough.
34034 * GNUmakefile.list.am:
34035 * JavaScriptCore.gypi:
34036 * JavaScriptCore.order:
34037 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
34038 * JavaScriptCore.xcodeproj/project.pbxproj:
34039 * wtf/CMakeLists.txt:
34040 * wtf/text/StringImpl.h:
34041 (WTF::StringImpl::StringImpl):
34042 (WTF::StringImpl::ref):
34043 (WTF::StringImpl::length):
34044 * wtf/text/StringImplBase.h: Removed.
34045 * wtf/wtf.pri: Removed!
34047 2011-10-19 Mark Hahnenberg <mhahnenberg@apple.com>
34049 Add getConstructData to the MethodTable
34050 https://bugs.webkit.org/show_bug.cgi?id=70163
34052 Reviewed by Geoffrey Garen.
34054 Adding getConstructData to the MethodTable in order to be able to
34055 remove all calls to getConstructDataVirtual soon. Part of the process
34056 of de-virtualizing JSCell.
34058 * JavaScriptCore.exp:
34059 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
34060 * runtime/ClassInfo.h:
34062 2011-10-18 Oliver Hunt <oliver@apple.com>
34064 Support CanvasPixelArray in the DFG
34065 https://bugs.webkit.org/show_bug.cgi?id=70384
34067 Reviewed by Filip Pizlo.
34069 Add support for the old CanvasPixelArray optimisations to the
34070 DFG. This removes the regression seen in the DFG when using
34073 * assembler/MacroAssemblerX86Common.h:
34074 (JSC::MacroAssemblerX86Common::store8):
34075 (JSC::MacroAssemblerX86Common::truncateDoubleToInt32):
34076 * assembler/X86Assembler.h:
34077 (JSC::X86Assembler::movb_rm):
34078 (JSC::X86Assembler::X86InstructionFormatter::oneByteOp8):
34079 * bytecode/PredictedType.cpp:
34080 (JSC::predictionToString):
34081 (JSC::predictionFromClassInfo):
34082 * bytecode/PredictedType.h:
34083 (JSC::isByteArrayPrediction):
34084 * dfg/DFGAbstractState.cpp:
34085 (JSC::DFG::AbstractState::initialize):
34086 (JSC::DFG::AbstractState::execute):
34088 (JSC::DFG::Node::shouldSpeculateByteArray):
34089 * dfg/DFGPropagator.cpp:
34090 (JSC::DFG::Propagator::propagateNodePredictions):
34091 (JSC::DFG::Propagator::fixupNode):
34092 (JSC::DFG::Propagator::performNodeCSE):
34093 * dfg/DFGSpeculativeJIT.cpp:
34094 (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
34095 (JSC::DFG::compileClampDoubleToByte):
34096 (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
34097 (JSC::DFG::SpeculativeJIT::compileGetByValOnByteArray):
34098 * dfg/DFGSpeculativeJIT.h:
34099 * dfg/DFGSpeculativeJIT32_64.cpp:
34100 (JSC::DFG::SpeculativeJIT::compile):
34101 * dfg/DFGSpeculativeJIT64.cpp:
34102 (JSC::DFG::SpeculativeJIT::compile):
34103 * runtime/JSByteArray.h:
34104 (JSC::JSByteArray::offsetOfStorage):
34105 * wtf/ByteArray.cpp:
34107 (WTF::ByteArray::offsetOfSize):
34108 (WTF::ByteArray::offsetOfData):
34110 2011-10-18 Geoffrey Garen <ggaren@apple.com>
34112 Some rope cleanup following r97827
34113 https://bugs.webkit.org/show_bug.cgi?id=70398
34115 Reviewed by Oliver Hunt.
34117 9% speedup on date-format-xparb, neutral overall.
34119 - Removed RopeImpl*.
34120 - Removed JSString::m_fiberCount, since this can be deduced from other data.
34121 - Renamed a jsString() variant to jsStringFromArguments for clarity.
34124 * GNUmakefile.list.am:
34125 * JavaScriptCore.order:
34126 * JavaScriptCore.pro:
34127 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
34128 * JavaScriptCore.xcodeproj/project.pbxproj: Removed RopeImpl*.
34130 * dfg/DFGSpeculativeJIT.cpp:
34131 (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt):
34132 (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
34133 * jit/JITInlineMethods.h:
34134 (JSC::JIT::emitLoadCharacterString):
34135 * jit/JITPropertyAccess.cpp:
34136 (JSC::JIT::stringGetByValStubGenerator):
34137 * jit/JITPropertyAccess32_64.cpp:
34138 (JSC::JIT::stringGetByValStubGenerator):
34139 * jit/SpecializedThunkJIT.h:
34140 (JSC::SpecializedThunkJIT::loadJSStringArgument):
34141 * jit/ThunkGenerators.cpp:
34142 (JSC::stringCharLoad): Use a NULL m_value to signal rope-iness, instead
34143 of testing m_fiberCount, since m_fiberCount is gone now.
34145 * runtime/JSString.cpp:
34146 (JSC::JSString::RopeBuilder::expand):
34147 (JSC::JSString::visitChildren):
34148 (JSC::JSString::resolveRope):
34149 (JSC::JSString::resolveRopeSlowCase):
34150 (JSC::JSString::outOfMemory): Use a NULL fiber to indicate "last fiber
34151 in the vector" instead of testing m_fiberCount, since m_fiberCount is gone now.
34153 * runtime/JSString.h:
34154 (JSC::RopeBuilder::JSString):
34155 (JSC::RopeBuilder::finishCreation):
34156 (JSC::RopeBuilder::offsetOfLength):
34157 (JSC::RopeBuilder::isRope):
34158 (JSC::RopeBuilder::string): Removed m_fiberCount. Renamed
34159 jsString => jsStringFromArguments for clarity.
34161 * runtime/Operations.h:
34162 (JSC::jsStringFromArguments): Renamed.
34164 * runtime/RopeImpl.cpp: Removed.
34165 * runtime/RopeImpl.h: Removed.
34167 * runtime/SmallStrings.cpp:
34168 (JSC::SmallStrings::createEmptyString): Switched to StringImpl::empty,
34169 which is slightly faster.
34171 * runtime/StringPrototype.cpp:
34172 (JSC::stringProtoFuncConcat): Updated for rename.
34174 * wtf/text/StringImplBase.h:
34175 (WTF::StringImplBase::StringImplBase): Removed the concept of an invalid
34176 StringImpl, since this was only used by RopeImpl, which is now gone.
34178 2011-10-19 Rafael Antognolli <antognolli@profusion.mobi>
34180 [EFL] Fix DSO linkage of jsc_efl.
34181 https://bugs.webkit.org/show_bug.cgi?id=70412
34183 Unreviewed build fix.
34185 Need to add -ldl to jsc_efl (requested by dladdr).
34187 * shell/CMakeListsEfl.txt:
34189 2011-10-18 Geoffrey Garen <ggaren@apple.com>
34191 Rolled out last Windows build fix because it was wrong.
34193 2011-10-18 Geoffrey Garen <ggaren@apple.com>
34195 Rolled out last Windows build fix because it was wrong.
34197 2011-10-18 Geoffrey Garen <ggaren@apple.com>
34199 Try to fix part of the Windows build.
34203 2011-10-18 Geoffrey Garen <ggaren@apple.com>
34205 Switched ropes from malloc memory to GC memory
34206 https://bugs.webkit.org/show_bug.cgi?id=70364
34208 Reviewed by Gavin Barraclough.
34210 ~1% SunSpider speedup. Neutral elsewhere. Removes one cause for strings
34211 having C++ destructors.
34213 * heap/MarkStack.cpp:
34214 (JSC::visitChildren): Call the JSString visitChildren function now,
34215 since it's no longer a no-op.
34217 * runtime/JSString.cpp:
34218 (JSC::JSString::~JSString): Moved this destructor out of line because
34219 it's called virtually, so there's no value to inlining.
34221 (JSC::JSString::RopeBuilder::expand): Switched RopeBuilder to be a thin
34222 initializing wrapper around JSString. JSString now represents ropes
34223 directly, rather than relying on an underlying malloc object.
34225 (JSC::JSString::visitChildren): Visit our rope fibers, since they're GC
34228 (JSC::JSString::resolveRope):
34229 (JSC::JSString::resolveRopeSlowCase):
34230 (JSC::JSString::outOfMemory): Updated for operating on JSStrings instead
34233 (JSC::JSString::replaceCharacter): Removed optimizations for substringing
34234 ropes and replacing subsections of ropes. We want to reimplement versions
34235 of these optimizations in the future, but this patch already has good
34236 performance without them.
34238 * runtime/JSString.h:
34239 (JSC::RopeBuilder::JSString):
34240 (JSC::RopeBuilder::finishCreation):
34241 (JSC::RopeBuilder::createNull):
34242 (JSC::RopeBuilder::create):
34243 (JSC::RopeBuilder::createHasOtherOwner):
34244 (JSC::jsSingleCharacterString):
34245 (JSC::jsSingleCharacterSubstring):
34246 (JSC::jsNontrivialString):
34248 (JSC::jsSubstring):
34249 (JSC::jsOwnedString): Lots of mechanical changes here. The two important
34250 things are: (1) The fibers in JSString::m_fibers are JSStrings now, not
34251 malloc objects; (2) I simplified the JSString constructor interface to
34252 only accept PassRefPtr<StringImpl>, instead of variations on that like
34253 UString, reducing refcount churn.
34255 * runtime/JSValue.h:
34256 * runtime/JSValue.cpp:
34257 (JSC::JSValue::toPrimitiveString): Updated this function to return a
34258 JSString instead of a UString, since that's what clients want now.
34260 * runtime/Operations.cpp:
34261 (JSC::jsAddSlowCase):
34262 * runtime/Operations.h:
34264 * runtime/SmallStrings.cpp:
34265 (JSC::SmallStrings::createEmptyString): Updated for interface changes above.
34267 * runtime/StringConstructor.cpp:
34268 (JSC::constructWithStringConstructor):
34269 * runtime/StringObject.h:
34270 (JSC::StringObject::create): Don't create a new JSString if we already
34273 * runtime/StringPrototype.cpp:
34274 (JSC::stringProtoFuncConcat): Updated for interface changes above.
34276 2011-10-18 Gavin Barraclough <barraclough@apple.com>
34278 Errrk, fix partial commit of r97825!
34280 * runtime/DatePrototype.cpp:
34281 (JSC::dateProtoFuncToISOString):
34283 2011-10-18 Gavin Barraclough <barraclough@apple.com>
34285 Date.prototype.toISOString fails to throw exception
34286 https://bugs.webkit.org/show_bug.cgi?id=70394
34288 Reviewed by Sam Weinig.
34290 * runtime/DatePrototype.cpp:
34291 (JSC::dateProtoFuncToISOString):
34292 - Should throw a range error if the internal value is not finite.
34294 2011-10-18 Mark Hahnenberg <mhahnenberg@apple.com>
34296 Rename static put to putByIndex
34297 https://bugs.webkit.org/show_bug.cgi?id=70281
34299 Reviewed by Geoffrey Garen.
34301 Renaming versions of deleteProperty that use an unsigned as the property
34302 name to "deletePropertyByIndex" in preparation for adding them to the
34303 MethodTable, which requires unique names for each method.
34305 * dfg/DFGOperations.cpp:
34306 (JSC::DFG::putByVal):
34307 * jit/JITStubs.cpp:
34308 (JSC::DEFINE_STUB_FUNCTION):
34309 * runtime/Arguments.cpp:
34310 (JSC::Arguments::putVirtual):
34311 (JSC::Arguments::putByIndex):
34312 * runtime/Arguments.h:
34313 * runtime/ArrayPrototype.cpp:
34314 (JSC::arrayProtoFuncMap):
34315 * runtime/JSArray.cpp:
34316 (JSC::JSArray::put):
34317 (JSC::JSArray::putVirtual):
34318 (JSC::JSArray::putByIndex):
34319 * runtime/JSArray.h:
34320 * runtime/JSByteArray.cpp:
34321 (JSC::JSByteArray::putVirtual):
34322 (JSC::JSByteArray::putByIndex):
34323 * runtime/JSByteArray.h:
34324 * runtime/JSCell.cpp:
34325 (JSC::JSCell::putVirtual):
34326 (JSC::JSCell::putByIndex):
34327 * runtime/JSCell.h:
34328 * runtime/JSNotAnObject.cpp:
34329 (JSC::JSNotAnObject::putVirtual):
34330 (JSC::JSNotAnObject::putByIndex):
34331 * runtime/JSNotAnObject.h:
34332 * runtime/JSObject.cpp:
34333 (JSC::JSObject::putVirtual):
34334 (JSC::JSObject::putByIndex):
34335 * runtime/JSObject.h:
34336 * runtime/RegExpConstructor.cpp:
34337 (JSC::RegExpMatchesArray::fillArrayInstance):
34338 * runtime/RegExpMatchesArray.h:
34339 (JSC::RegExpMatchesArray::putVirtual):
34340 (JSC::RegExpMatchesArray::putByIndex):
34342 2011-10-18 Gavin Barraclough <barraclough@apple.com>
34344 Array.prototype methods missing exception checks
34345 https://bugs.webkit.org/show_bug.cgi?id=70360
34347 Reviewed by Geoff Garen.
34349 Missing exception checks after calls to the static getProperty helper,
34350 these may result in the wrong exception being thrown (or an ASSERT being hit,
34351 as is currently the case running test-262).
34353 No performance impact.
34355 * runtime/ArrayPrototype.cpp:
34356 (JSC::arrayProtoFuncConcat):
34357 (JSC::arrayProtoFuncReverse):
34358 (JSC::arrayProtoFuncShift):
34359 (JSC::arrayProtoFuncSlice):
34360 (JSC::arrayProtoFuncSplice):
34361 (JSC::arrayProtoFuncUnShift):
34362 (JSC::arrayProtoFuncReduce):
34363 (JSC::arrayProtoFuncReduceRight):
34364 (JSC::arrayProtoFuncIndexOf):
34365 (JSC::arrayProtoFuncLastIndexOf):
34367 2011-10-18 Adam Barth <abarth@webkit.org>
34369 Always enable ENABLE(XPATH)
34370 https://bugs.webkit.org/show_bug.cgi?id=70217
34372 Reviewed by Eric Seidel.
34374 * Configurations/FeatureDefines.xcconfig:
34376 2011-10-18 Gavin Barraclough <barraclough@apple.com>
34378 Indexed arguments on the Arguments object should be enumerable.
34379 https://bugs.webkit.org/show_bug.cgi?id=70302
34381 Reviewed by Sam Weinig.
34383 See ECMA-262 5.1 chapter 10.6 step 11b.
34384 This is visible through a number of means, including Object.keys, Object.getOwnPropertyDescriptor, and operator in.
34386 * runtime/Arguments.cpp:
34387 (JSC::Arguments::getOwnPropertyDescriptor):
34388 - The 'enumerable' property should be true for indexed arguments.
34389 (JSC::Arguments::getOwnPropertyNames):
34390 - Don't guard the adding of indexed properties with 'IncludeDontEnumProperties'.
34392 2011-10-18 Gustavo Noronha Silva <gns@gnome.org>
34396 * GNUmakefile.list.am: fix a typo and add a missing header to the
34399 2011-10-18 Balazs Kelemen <kbalazs@webkit.org>
34401 ParallelJobs: maximum number of threads should be determined dynamically
34402 https://bugs.webkit.org/show_bug.cgi?id=68540
34404 Reviewed by Zoltan Herczeg.
34406 Add logic to determine the number of cores and use this as
34407 the maximum number of threads. The implementation currently
34408 covers Linux, Darwin, Windows, AIX, Solaris, OpenBSD and NetBSD.
34409 The patch was tested on Linux, Mac and Windows which was enough to
34410 cover all code path. It should work on the rest accoring to the
34411 documentation of those OS's. The hard coded constant is still used
34412 on uncovered OS's which should be fixed in the future.
34414 * wtf/ParallelJobs.h: Removed the default value of the requestedJobNumber
34415 argument because clients should always fill it and the 0 default value
34416 was incorrect anyway.
34417 (WTF::ParallelJobs::ParallelJobs):
34418 * wtf/ParallelJobsGeneric.cpp:
34419 (WTF::ParallelEnvironment::determineMaxNumberOfParallelThreads):
34420 * wtf/ParallelJobsGeneric.h:
34421 (WTF::ParallelEnvironment::ParallelEnvironment):
34423 2011-10-17 Gavin Barraclough <barraclough@apple.com>
34425 Reverted r997709, this caused test failures.
34427 * jit/JITStubs.cpp:
34428 (JSC::DEFINE_STUB_FUNCTION):
34429 * runtime/JSObject.cpp:
34430 (JSC::JSObject::hasProperty):
34431 (JSC::JSObject::hasOwnProperty):
34433 2011-10-17 Ryosuke Niwa <rniwa@webkit.org>
34435 Rename deregister* to unregister*
34436 https://bugs.webkit.org/show_bug.cgi?id=70272
34438 Reviewed by Darin Adler.
34440 Renamed deregisterWeakMap to unregisterWeakMap.
34442 * runtime/JSGlobalObject.h:
34443 (JSC::JSGlobalObject::unregisterWeakMap):
34445 2011-10-17 Gavin Barraclough <barraclough@apple.com>
34447 Poisoning of strict caller/arguments inappropriately poisoning "in"
34448 https://bugs.webkit.org/show_bug.cgi?id=63398
34450 Reviewed by Sam Weinig.
34452 The problem here is that the has[Own]Property methods get the slot rather than
34453 the descriptor, and getting the slot may cause the property to be eagerly accessed.
34455 * jit/JITStubs.cpp:
34456 (JSC::DEFINE_STUB_FUNCTION):
34457 - We don't expect hasProperty to ever throw. If it does, it won't get caught
34458 (since it is after the exception check), so ASSERT to guard against this.
34459 * runtime/JSObject.cpp:
34460 (JSC::JSObject::hasProperty):
34461 (JSC::JSObject::hasOwnProperty):
34462 - These methods should not check for the presence of the descriptor; never get the value.
34464 2011-10-17 Gavin Barraclough <barraclough@apple.com>
34466 Exception ordering in String.prototype.replace
34467 https://bugs.webkit.org/show_bug.cgi?id=70290
34469 If pattern is not a regexp, it should be converted toString before the replacement value has it's toString conversion called.
34471 Reviewed by Oliver Hunt.
34473 * runtime/StringPrototype.cpp:
34474 (JSC::stringProtoFuncReplace):
34476 2011-10-17 Filip Pizlo <fpizlo@apple.com>
34478 DFG bytecode parser should understand inline stacks
34479 https://bugs.webkit.org/show_bug.cgi?id=70278
34481 Reviewed by Oliver Hunt.
34483 The DFG bytecode parser is now capable of parsing multiple code blocks at
34484 once. This remains turned off since not all inlining functionality is
34487 This required making a few changes elsewhere in the system. The bytecode
34488 parser now may do some of the same things that the bytecode generator does,
34489 like allocating constants and identifiers. Basic block linking relies on
34490 bytecode indices, which are only meaningful within the context of one basic
34491 block. This is fine, so long as linking is done eagerly whenever switching
34492 from one code block to another.
34494 * bytecode/CodeOrigin.h:
34495 (JSC::CodeOrigin::CodeOrigin):
34496 * bytecompiler/BytecodeGenerator.h:
34497 * dfg/DFGBasicBlock.h:
34498 * dfg/DFGByteCodeParser.cpp:
34499 (JSC::DFG::ByteCodeParser::ByteCodeParser):
34500 (JSC::DFG::ByteCodeParser::get):
34501 (JSC::DFG::ByteCodeParser::set):
34502 (JSC::DFG::ByteCodeParser::getThis):
34503 (JSC::DFG::ByteCodeParser::setThis):
34504 (JSC::DFG::ByteCodeParser::currentCodeOrigin):
34505 (JSC::DFG::ByteCodeParser::getPrediction):
34506 (JSC::DFG::ByteCodeParser::makeSafe):
34507 (JSC::DFG::ByteCodeParser::makeDivSafe):
34508 (JSC::DFG::ByteCodeParser::InlineStackEntry::executable):
34509 (JSC::DFG::ByteCodeParser::InlineStackEntry::~InlineStackEntry):
34510 (JSC::DFG::ByteCodeParser::InlineStackEntry::remapOperand):
34511 (JSC::DFG::ByteCodeParser::parseBlock):
34512 (JSC::DFG::ByteCodeParser::linkBlock):
34513 (JSC::DFG::ByteCodeParser::linkBlocks):
34514 (JSC::DFG::ByteCodeParser::setupPredecessors):
34515 (JSC::DFG::ByteCodeParser::buildOperandMapsIfNecessary):
34516 (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
34517 (JSC::DFG::ByteCodeParser::parseCodeBlock):
34518 (JSC::DFG::ByteCodeParser::parse):
34520 (JSC::DFG::GetBytecodeBeginForBlock::GetBytecodeBeginForBlock):
34521 (JSC::DFG::GetBytecodeBeginForBlock::operator()):
34522 (JSC::DFG::Graph::blockIndexForBytecodeOffset):
34524 * runtime/Identifier.h:
34525 (JSC::IdentifierMapIndexHashTraits::emptyValue):
34526 * runtime/JSValue.h:
34527 * wtf/StdLibExtras.h:
34528 (WTF::binarySearchWithFunctor):
34530 2011-10-17 Gavin Barraclough <barraclough@apple.com>
34532 Incorrect behavior from String match/search & undefined pattern
34533 https://bugs.webkit.org/show_bug.cgi?id=70286
34535 Reviewed by Sam weinig.
34537 * runtime/StringPrototype.cpp:
34538 (JSC::stringProtoFuncMatch):
34539 - In case of undefined, pattern is "".
34540 (JSC::stringProtoFuncSearch):
34541 - In case of undefined, pattern is "".
34543 2011-10-17 Gavin Barraclough <barraclough@apple.com>
34545 https://bugs.webkit.org/show_bug.cgi?id=70207
34546 After deleting __defineSetter__, it is absent but appears in name list
34548 Reviewed by Darin Adler.
34550 * runtime/JSObject.cpp:
34551 (JSC::JSObject::getOwnPropertyNames):
34552 - This should check whether static functions have been reified.
34554 2011-10-17 Geoffrey Garen <ggaren@apple.com>
34558 * JavaScriptCore.exp: Export!
34560 2011-10-17 Geoffrey Garen <ggaren@apple.com>
34564 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export!
34566 2011-10-17 Geoffrey Garen <ggaren@apple.com>
34570 * heap/HandleStack.cpp: Added a missing #include.
34572 2011-10-17 Geoffrey Garen <ggaren@apple.com>
34576 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Removed no
34577 longer existant symbol.
34579 * heap/MarkStack.cpp:
34580 (JSC::MarkStackArray::shrinkAllocation): Cast to the right type.
34582 2011-10-17 Geoffrey Garen <ggaren@apple.com>
34584 Simplified GC marking logic
34585 https://bugs.webkit.org/show_bug.cgi?id=70258
34587 Reviewed by Filip Pizlo.
34591 This is a first step toward GC allocating string backing stores, starting
34592 with ropes. It also enables future simplifications and optimizations.
34594 - Replaced some complex mark stack logic with a simple linear stack of
34597 - Replaced logic for short-circuiting marking based on JSType and/or
34598 Structure flags with special cases for object, array, and string.
34600 - Fiddled with inlining for better codegen.
34602 * JavaScriptCore.exp:
34603 * heap/HandleStack.cpp: Build!
34606 (JSC::Heap::Heap): Provide more vptrs to SlotVisitor, for use in marking.
34608 * heap/HeapRootVisitor.h: Removed unused functions that no longer build.
34610 * heap/MarkStack.cpp:
34611 (JSC::MarkStackArray::MarkStackArray):
34612 (JSC::MarkStackArray::~MarkStackArray):
34613 (JSC::MarkStackArray::expand):
34614 (JSC::MarkStackArray::shrinkAllocation):
34615 (JSC::MarkStack::reset):
34616 (JSC::visitChildren):
34617 (JSC::SlotVisitor::drain):
34618 * heap/MarkStack.h:
34619 (JSC::MarkStack::MarkStack):
34620 (JSC::MarkStack::~MarkStack):
34621 (JSC::MarkStackArray::append):
34622 (JSC::MarkStackArray::removeLast):
34623 (JSC::MarkStackArray::isEmpty):
34624 (JSC::MarkStack::append):
34625 (JSC::MarkStack::appendUnbarrieredPointer):
34626 (JSC::MarkStack::internalAppend): Replaced complex mark set logic with
34627 simple linear stack.
34629 * heap/SlotVisitor.h:
34630 (JSC::SlotVisitor::SlotVisitor): Updated for above changes.
34632 * runtime/JSArray.cpp:
34633 (JSC::JSArray::visitChildren):
34634 * runtime/JSArray.h:
34635 * runtime/JSObject.cpp:
34636 (JSC::JSObject::visitChildren):
34637 * runtime/JSObject.h: Don't inline visitChildren; it's too big.
34639 * runtime/Structure.h:
34640 (JSC::MarkStack::internalAppend): Nixed the short-circuit for CompoundType
34641 because it prevented strings from owning GC pointers.
34643 * runtime/WriteBarrier.h:
34644 (JSC::MarkStack::appendValues): No need to validate; internalAppend will
34647 2011-10-17 Adam Roben <aroben@apple.com>
34649 Windows build fix after r97536, part 3
34651 * runtime/JSAPIValueWrapper.h:
34652 * runtime/JSObject.h:
34653 Use JS_EXPORTDATA to export the s_info members.
34655 2011-10-17 Adam Roben <aroben@apple.com>
34657 Interpreter build fix after r97564
34659 * runtime/Executable.cpp:
34660 (JSC::FunctionExecutable::compileForCallInternal):
34661 (JSC::FunctionExecutable::compileForConstructInternal):
34662 Moved declaration of globalData variable into ENABLE(JIT) blocks, since it is only used
34665 2011-10-17 Adam Roben <aroben@apple.com>
34667 Windows build fix after r97536, part 2
34669 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Added back
34670 JSC::setUpStaticFunctionSlot with its new mangled name. SOrted the rest of the file while I
34673 2011-10-17 Adam Roben <aroben@apple.com>
34675 Windows build fix after r97536
34677 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Removed export of
34678 JSC::setUpStaticFunctionSlot, which no longer exists. Also removed incorrect exports of
34679 s_info members, which need to be exported via JS_EXPORTDATA instead.
34681 2011-10-17 Patrick Gansterer <paroga@webkit.org>
34683 Interpreter build fix after r97436, r97506, r97532 and r97537.
34685 * interpreter/Interpreter.cpp:
34686 (JSC::Interpreter::privateExecute):
34688 2011-10-16 Adam Barth <abarth@webkit.org>
34690 Always disable ENABLE(ON_FIRST_TEXTAREA_FOCUS_SELECT_ALL) and delete associated code
34691 https://bugs.webkit.org/show_bug.cgi?id=70216
34693 Reviewed by Eric Seidel.
34697 2011-10-16 Noel Gordon <noel.gordon@gmail.com>
34699 [chromium] Remove PageAllocatorSymbian.h, OSAllocatorSymbian.cpp, gtk/ThreadingGtk.cpp from gyp project files
34700 https://bugs.webkit.org/show_bug.cgi?id=70205
34702 Reviewed by James Robinson.
34704 wtf/PageAllocatorSymbian.h and wtf/OSAllocatorSymbian.cpp were removed in r97557.
34705 wtf/gtk/ThreadingGtk.cpp was removed in r97269.
34707 * JavaScriptCore.gypi:
34709 2011-10-16 Adam Barth <abarth@webkit.org>
34711 Always enable ENABLE(DOM_STORAGE)
34712 https://bugs.webkit.org/show_bug.cgi?id=70189
34714 Reviewed by Eric Seidel.
34716 * Configurations/FeatureDefines.xcconfig:
34718 2011-10-15 Dan Horák <dan@danny.cz>
34720 The s390 and s390x architectures both use 64-bit double type
34721 that conforms to the IEEE-754 standard.
34723 https://bugs.webkit.org/show_bug.cgi?id=69940
34725 Reviewed by Gavin Barraclough.
34727 * wtf/dtoa/utils.h:
34729 2011-10-14 Filip Pizlo <fpizlo@apple.com>
34731 FunctionExecutable should expose the ability to create unattached FunctionCodeBlocks
34732 https://bugs.webkit.org/show_bug.cgi?id=70157
34734 Reviewed by Geoff Garen.
34736 Added FunctionExecutable::produceCodeBlockFor() and rewired compileForCallInternal()
34737 and compileForConstructInternal() to use this method. This required more cleanly
34738 exposing some of CodeBlock's tiering functionality and moving the CompilationKind
34739 enum to Executable.h, as this was the easiest way to make it available to the
34740 declarations/definitions of CodeBlock, FunctionExecutable, and BytecodeGenerator.
34742 * bytecode/CodeBlock.cpp:
34743 (JSC::CodeBlock::copyDataFrom):
34744 (JSC::CodeBlock::copyDataFromAlternative):
34745 * bytecode/CodeBlock.h:
34746 (JSC::CodeBlock::setAlternative):
34747 * bytecompiler/BytecodeGenerator.h:
34748 * runtime/Executable.cpp:
34749 (JSC::EvalExecutable::compileInternal):
34750 (JSC::ProgramExecutable::compileInternal):
34751 (JSC::FunctionExecutable::produceCodeBlockFor):
34752 (JSC::FunctionExecutable::compileForCallInternal):
34753 (JSC::FunctionExecutable::compileForConstructInternal):
34754 * runtime/Executable.h:
34755 (JSC::FunctionExecutable::codeBlockFor):
34757 2011-10-15 Laszlo Gombos <laszlo.1.gombos@nokia.com>
34759 [Qt] [Symbian] Remove support for the Symbian platform for the QtWebKit port
34760 https://bugs.webkit.org/show_bug.cgi?id=69920
34762 Reviewed by Kenneth Rohde Christiansen.
34764 * JavaScriptCore.pri:
34765 * JavaScriptCore.pro:
34766 * heap/MarkStack.h:
34767 (JSC::::shrinkAllocation):
34768 * jit/ExecutableAllocator.cpp:
34769 * jit/ExecutableAllocator.h:
34770 (JSC::ExecutableAllocator::cacheFlush):
34771 * jit/JITStubs.cpp:
34773 * runtime/ArrayPrototype.cpp:
34774 (JSC::arrayProtoFuncToString):
34775 * runtime/DatePrototype.cpp:
34776 (JSC::formatLocaleDate):
34777 * runtime/StringPrototype.cpp:
34778 (JSC::stringProtoFuncLastIndexOf):
34779 * runtime/TimeoutChecker.cpp:
34781 * wtf/Assertions.cpp:
34782 * wtf/Assertions.h:
34784 * wtf/MathExtras.h:
34785 * wtf/OSAllocator.h:
34786 (WTF::OSAllocator::decommitAndRelease):
34787 * wtf/OSAllocatorSymbian.cpp: Removed.
34788 * wtf/OSRandomSource.cpp:
34789 (WTF::cryptographicallyRandomValuesFromOS):
34790 * wtf/PageAllocation.h:
34791 * wtf/PageAllocatorSymbian.h: Removed.
34792 * wtf/PageBlock.cpp:
34794 * wtf/StackBounds.cpp:
34797 2011-10-15 Yuqiang Xian <yuqiang.xian@intel.com>
34799 Trivial fix for a missing change in r97512
34800 https://bugs.webkit.org/show_bug.cgi?id=70166
34802 Reviewed by Gavin Barraclough.
34804 * dfg/DFGJITCompiler32_64.cpp:
34805 (JSC::DFG::JITCompiler::link):
34807 2011-10-14 Mark Hahnenberg <mhahnenberg@apple.com>
34809 Rename getOwnPropertySlot to getOwnPropertySlotVirtual
34810 https://bugs.webkit.org/show_bug.cgi?id=69810
34812 Reviewed by Geoffrey Garen.
34814 Renamed the virtual version of getOwnPropertySlot to getOwnPropertySlotVirtual
34815 in preparation for when we add the static getOwnPropertySlot to the MethodTable
34818 Also added a few static getOwnPropertySlot functions where they had been overlooked
34819 before (especially in CodeGeneratorJS.pm).
34821 * API/JSCallbackObject.h:
34822 * API/JSCallbackObjectFunctions.h:
34823 (JSC::::getOwnPropertySlotVirtual):
34824 (JSC::::getOwnPropertySlot):
34825 (JSC::::getOwnPropertyDescriptor):
34826 (JSC::::staticFunctionGetter):
34827 * JavaScriptCore.exp:
34828 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
34829 * debugger/DebuggerActivation.cpp:
34830 (JSC::DebuggerActivation::getOwnPropertySlotVirtual):
34831 (JSC::DebuggerActivation::getOwnPropertySlot):
34832 * debugger/DebuggerActivation.h:
34833 * runtime/Arguments.cpp:
34834 (JSC::Arguments::getOwnPropertySlotVirtual):
34835 (JSC::Arguments::getOwnPropertySlot):
34836 * runtime/Arguments.h:
34837 * runtime/ArrayConstructor.cpp:
34838 (JSC::ArrayConstructor::getOwnPropertySlotVirtual):
34839 (JSC::ArrayConstructor::getOwnPropertySlot):
34840 * runtime/ArrayConstructor.h:
34841 * runtime/ArrayPrototype.cpp:
34842 (JSC::ArrayPrototype::getOwnPropertySlotVirtual):
34843 * runtime/ArrayPrototype.h:
34844 * runtime/BooleanPrototype.cpp:
34845 (JSC::BooleanPrototype::getOwnPropertySlotVirtual):
34846 * runtime/BooleanPrototype.h:
34847 * runtime/DateConstructor.cpp:
34848 (JSC::DateConstructor::getOwnPropertySlotVirtual):
34849 * runtime/DateConstructor.h:
34850 * runtime/DatePrototype.cpp:
34851 (JSC::DatePrototype::getOwnPropertySlotVirtual):
34852 * runtime/DatePrototype.h:
34853 * runtime/ErrorPrototype.cpp:
34854 (JSC::ErrorPrototype::getOwnPropertySlotVirtual):
34855 * runtime/ErrorPrototype.h:
34856 * runtime/JSActivation.cpp:
34857 (JSC::JSActivation::getOwnPropertySlotVirtual):
34858 * runtime/JSActivation.h:
34859 * runtime/JSArray.cpp:
34860 (JSC::JSArray::getOwnPropertySlotVirtual):
34861 (JSC::JSArray::getOwnPropertySlot):
34862 * runtime/JSArray.h:
34863 * runtime/JSBoundFunction.cpp:
34864 (JSC::JSBoundFunction::getOwnPropertySlotVirtual):
34865 * runtime/JSBoundFunction.h:
34866 * runtime/JSByteArray.cpp:
34867 (JSC::JSByteArray::getOwnPropertySlotVirtual):
34868 * runtime/JSByteArray.h:
34869 * runtime/JSCell.cpp:
34870 (JSC::JSCell::getOwnPropertySlotVirtual):
34871 * runtime/JSCell.h:
34872 * runtime/JSFunction.cpp:
34873 (JSC::JSFunction::getOwnPropertySlotVirtual):
34874 (JSC::JSFunction::getOwnPropertyDescriptor):
34875 (JSC::JSFunction::getOwnPropertyNames):
34876 (JSC::JSFunction::put):
34877 * runtime/JSFunction.h:
34878 * runtime/JSGlobalObject.cpp:
34879 (JSC::JSGlobalObject::getOwnPropertySlotVirtual):
34880 * runtime/JSGlobalObject.h:
34881 (JSC::JSGlobalObject::hasOwnPropertyForWrite):
34882 * runtime/JSNotAnObject.cpp:
34883 (JSC::JSNotAnObject::getOwnPropertySlotVirtual):
34884 * runtime/JSNotAnObject.h:
34885 * runtime/JSONObject.cpp:
34886 (JSC::Stringifier::Holder::appendNextProperty):
34887 (JSC::JSONObject::getOwnPropertySlotVirtual):
34888 (JSC::Walker::walk):
34889 * runtime/JSONObject.h:
34890 * runtime/JSObject.cpp:
34891 (JSC::JSObject::getOwnPropertySlotVirtual):
34892 (JSC::JSObject::getOwnPropertySlot):
34893 (JSC::JSObject::hasOwnProperty):
34894 * runtime/JSObject.h:
34895 (JSC::JSObject::getOwnPropertySlotVirtual):
34896 (JSC::JSCell::fastGetOwnPropertySlot):
34897 (JSC::JSObject::getPropertySlot):
34898 (JSC::JSValue::get):
34899 * runtime/JSStaticScopeObject.cpp:
34900 (JSC::JSStaticScopeObject::getOwnPropertySlotVirtual):
34901 * runtime/JSStaticScopeObject.h:
34902 * runtime/JSString.cpp:
34903 (JSC::JSString::getOwnPropertySlotVirtual):
34904 (JSC::JSString::getOwnPropertySlot):
34905 * runtime/JSString.h:
34906 * runtime/Lookup.h:
34907 (JSC::getStaticPropertySlot):
34908 (JSC::getStaticFunctionSlot):
34909 (JSC::getStaticValueSlot):
34910 * runtime/MathObject.cpp:
34911 (JSC::MathObject::getOwnPropertySlotVirtual):
34912 * runtime/MathObject.h:
34913 * runtime/NumberConstructor.cpp:
34914 (JSC::NumberConstructor::getOwnPropertySlotVirtual):
34915 * runtime/NumberConstructor.h:
34916 * runtime/NumberPrototype.cpp:
34917 (JSC::NumberPrototype::getOwnPropertySlotVirtual):
34918 * runtime/NumberPrototype.h:
34919 * runtime/ObjectConstructor.cpp:
34920 (JSC::ObjectConstructor::getOwnPropertySlotVirtual):
34921 * runtime/ObjectConstructor.h:
34922 * runtime/ObjectPrototype.cpp:
34923 (JSC::ObjectPrototype::getOwnPropertySlotVirtual):
34924 * runtime/ObjectPrototype.h:
34925 * runtime/RegExpConstructor.cpp:
34926 (JSC::RegExpConstructor::getOwnPropertySlotVirtual):
34927 * runtime/RegExpConstructor.h:
34928 * runtime/RegExpMatchesArray.h:
34929 (JSC::RegExpMatchesArray::getOwnPropertySlotVirtual):
34930 * runtime/RegExpObject.cpp:
34931 (JSC::RegExpObject::getOwnPropertySlotVirtual):
34932 * runtime/RegExpObject.h:
34933 * runtime/RegExpPrototype.cpp:
34934 (JSC::RegExpPrototype::getOwnPropertySlotVirtual):
34935 * runtime/RegExpPrototype.h:
34936 * runtime/StringConstructor.cpp:
34937 (JSC::StringConstructor::getOwnPropertySlotVirtual):
34938 * runtime/StringConstructor.h:
34939 * runtime/StringObject.cpp:
34940 (JSC::StringObject::getOwnPropertySlotVirtual):
34941 * runtime/StringObject.h:
34942 * runtime/StringPrototype.cpp:
34943 (JSC::StringPrototype::getOwnPropertySlotVirtual):
34944 * runtime/StringPrototype.h:
34946 2011-10-14 Gavin Barraclough <baraclough@apple.com>
34948 Most built-in properties are not deletable
34949 https://bugs.webkit.org/show_bug.cgi?id=61014
34951 Reviewed by Filip Pizlo.
34953 Our static hash tables don't allow for deleting properties.
34954 This is the cause of a bunch of expected failures in LayoutTests/sputnik.
34956 This fixes the problem by reifying all static functions immediately prior
34957 to the first deletion. Reification is tracked by a flag on the structure,
34958 so properties will no longer 'bounce-back' on later access.
34960 Theoretically there could probably also be an issue with custom accessor
34961 properties, but we probably do not really require any of these to be
34962 Configurable anyway. I'll follow up with a separate patch to address this.
34964 * runtime/ClassInfo.h:
34965 (JSC::ClassInfo::hasStaticProperties):
34966 - detects static property tables.
34967 * runtime/JSObject.cpp:
34968 (JSC::JSObject::deleteProperty):
34969 - call reifyStaticFunctions before deletion.
34970 (JSC::JSObject::reifyStaticFunctions):
34971 - If the class has static functions, set them up now.
34972 * runtime/JSObject.h:
34973 (JSC::JSObject::staticFunctionsReified):
34974 - returns true if static functions have been reified,
34975 and as such should no longer be added.
34976 * runtime/Lookup.cpp:
34977 (JSC::setUpStaticFunctionSlot):
34978 - If static functions have been reified do not add.
34979 * runtime/Lookup.h:
34980 (JSC::HashTable::ConstIterator::ConstIterator):
34981 (JSC::HashTable::ConstIterator::operator->):
34982 (JSC::HashTable::ConstIterator::operator*):
34983 (JSC::HashTable::ConstIterator::operator!=):
34984 (JSC::HashTable::ConstIterator::operator++):
34985 (JSC::HashTable::ConstIterator::skipInvalidKeys):
34986 (JSC::HashTable::begin):
34987 (JSC::HashTable::end):
34988 (JSC::getStaticPropertySlot):
34989 (JSC::getStaticPropertyDescriptor):
34990 (JSC::getStaticFunctionSlot):
34991 (JSC::getStaticFunctionDescriptor):
34992 - setUpStaticFunctionSlot may not add, returns a bool.
34994 - remove redundant branch.
34995 * runtime/Structure.cpp:
34996 (JSC::Structure::Structure):
34997 - initialize new flag in constructors.
34998 * runtime/Structure.h:
34999 (JSC::Structure::staticFunctionsReified):
35000 (JSC::Structure::setStaticFunctionsReified):
35003 2011-10-14 Mark Hahnenberg <mhahnenberg@apple.com>
35005 Rename virtual put to putVirtual
35006 https://bugs.webkit.org/show_bug.cgi?id=69851
35008 Reviewed by Darin Adler.
35010 Renamed virtual versions of put to putVirtual in prepration for
35011 adding the static put to the MethodTable in ClassInfo since the
35012 compiler gets mad if the virtual and static versions have the same
35015 * API/JSCallbackObject.h:
35016 * API/JSCallbackObjectFunctions.h:
35017 (JSC::::putVirtual):
35018 * API/JSObjectRef.cpp:
35019 (JSObjectSetProperty):
35020 (JSObjectSetPropertyAtIndex):
35021 * JavaScriptCore.exp:
35022 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
35023 * debugger/DebuggerActivation.cpp:
35024 (JSC::DebuggerActivation::putVirtual):
35025 (JSC::DebuggerActivation::put):
35026 * debugger/DebuggerActivation.h:
35027 * dfg/DFGOperations.cpp:
35028 (JSC::DFG::putByVal):
35029 * interpreter/Interpreter.cpp:
35030 (JSC::Interpreter::execute):
35031 * jit/JITStubs.cpp:
35032 (JSC::DEFINE_STUB_FUNCTION):
35034 (GlobalObject::finishCreation):
35035 * runtime/Arguments.cpp:
35036 (JSC::Arguments::putVirtual):
35037 * runtime/Arguments.h:
35038 * runtime/ArrayPrototype.cpp:
35039 (JSC::putProperty):
35040 (JSC::arrayProtoFuncConcat):
35041 (JSC::arrayProtoFuncPush):
35042 (JSC::arrayProtoFuncReverse):
35043 (JSC::arrayProtoFuncShift):
35044 (JSC::arrayProtoFuncSlice):
35045 (JSC::arrayProtoFuncSort):
35046 (JSC::arrayProtoFuncSplice):
35047 (JSC::arrayProtoFuncUnShift):
35048 (JSC::arrayProtoFuncFilter):
35049 (JSC::arrayProtoFuncMap):
35050 * runtime/JSActivation.cpp:
35051 (JSC::JSActivation::putVirtual):
35052 * runtime/JSActivation.h:
35053 * runtime/JSArray.cpp:
35054 (JSC::JSArray::putVirtual):
35055 (JSC::JSArray::putSlowCase):
35056 (JSC::JSArray::push):
35057 (JSC::JSArray::shiftCount):
35058 (JSC::JSArray::unshiftCount):
35059 * runtime/JSArray.h:
35060 * runtime/JSByteArray.cpp:
35061 (JSC::JSByteArray::putVirtual):
35062 * runtime/JSByteArray.h:
35063 * runtime/JSCell.cpp:
35064 (JSC::JSCell::putVirtual):
35065 (JSC::JSCell::put):
35066 * runtime/JSCell.h:
35067 * runtime/JSFunction.cpp:
35068 (JSC::JSFunction::putVirtual):
35069 * runtime/JSFunction.h:
35070 * runtime/JSGlobalObject.cpp:
35071 (JSC::JSGlobalObject::putVirtual):
35072 (JSC::JSGlobalObject::putWithAttributes):
35073 * runtime/JSGlobalObject.h:
35074 * runtime/JSNotAnObject.cpp:
35075 (JSC::JSNotAnObject::putVirtual):
35076 * runtime/JSNotAnObject.h:
35077 * runtime/JSONObject.cpp:
35078 (JSC::Walker::walk):
35079 * runtime/JSObject.cpp:
35080 (JSC::JSObject::putVirtual):
35081 (JSC::JSObject::put):
35082 (JSC::JSObject::defineOwnProperty):
35083 * runtime/JSObject.h:
35084 (JSC::JSValue::put):
35085 * runtime/JSStaticScopeObject.cpp:
35086 (JSC::JSStaticScopeObject::putVirtual):
35087 * runtime/JSStaticScopeObject.h:
35088 * runtime/Lookup.h:
35090 * runtime/ObjectPrototype.cpp:
35091 (JSC::ObjectPrototype::putVirtual):
35092 * runtime/ObjectPrototype.h:
35093 * runtime/RegExpConstructor.cpp:
35094 (JSC::RegExpMatchesArray::fillArrayInstance):
35095 (JSC::RegExpConstructor::putVirtual):
35096 * runtime/RegExpConstructor.h:
35097 * runtime/RegExpMatchesArray.h:
35098 (JSC::RegExpMatchesArray::putVirtual):
35099 * runtime/RegExpObject.cpp:
35100 (JSC::RegExpObject::putVirtual):
35101 * runtime/RegExpObject.h:
35102 * runtime/StringObject.cpp:
35103 (JSC::StringObject::putVirtual):
35104 * runtime/StringObject.h:
35105 * runtime/StringPrototype.cpp:
35106 (JSC::stringProtoFuncSplit):
35108 2011-10-13 Filip Pizlo <fpizlo@apple.com>
35110 Reflective Arguments retrieval should be hardened for the
35111 possibility of inlining
35112 https://bugs.webkit.org/show_bug.cgi?id=70068
35114 Reviewed by Oliver Hunt.
35116 CodeBlock can now track, as part of its RareData, the virtual inline
35117 stack at callsites. CallFrame walking can now rematerialize "inline"
35118 CallFrames by combining the meta-data in CodeBlock with the information
35119 already in the JS stack. Arguments can now safely retrieve the
35120 arguments from inline CallFrames.
35122 The DFG already had the notion of a "CodeOrigin" in preparation for
35123 inlining. This notion will now be saved into the CodeBlock, if the DFG
35124 had done inlining. So, CodeOrigin has been moved to bytecode/ and has
35125 been changed to behave more like a struct since that is how it's
35128 * GNUmakefile.list.am:
35129 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
35130 * JavaScriptCore.xcodeproj/project.pbxproj:
35131 * bytecode/CodeBlock.h:
35132 (JSC::CodeBlock::inlineCallFrames):
35133 (JSC::CodeBlock::codeOrigins):
35134 (JSC::CodeBlock::hasCodeOrigins):
35135 (JSC::CodeBlock::codeOriginForReturn):
35136 * bytecode/CodeOrigin.h: Added.
35137 (JSC::CodeOrigin::CodeOrigin):
35138 (JSC::CodeOrigin::isSet):
35139 (JSC::getCallReturnOffsetForCodeOrigin):
35140 * dfg/DFGJITCompiler.cpp:
35141 (JSC::DFG::JITCompiler::link):
35143 * dfg/DFGSpeculativeJIT.cpp:
35144 (JSC::DFG::SpeculativeJIT::compile):
35145 * dfg/DFGSpeculativeJIT32_64.cpp:
35146 (JSC::DFG::SpeculativeJIT::compile):
35147 * dfg/DFGSpeculativeJIT64.cpp:
35148 (JSC::DFG::SpeculativeJIT::compile):
35149 * interpreter/CallFrame.cpp:
35150 (JSC::CallFrame::isInlineCallFrame):
35151 (JSC::CallFrame::trueCallerFrame):
35152 * interpreter/CallFrame.h:
35153 (JSC::ExecState::inlineCallFrame):
35154 (JSC::ExecState::setInlineCallFrame):
35155 (JSC::ExecState::isInlineCallFrame):
35156 (JSC::ExecState::trueCallerFrame):
35157 * interpreter/Interpreter.cpp:
35158 (JSC::Interpreter::findFunctionCallFrame):
35159 * interpreter/Register.h:
35160 (JSC::Register::operator=):
35161 (JSC::Register::inlineCallFrame):
35162 * runtime/Arguments.h:
35163 (JSC::Arguments::getArgumentsData):
35164 (JSC::Arguments::finishCreationButDontCopyRegisters):
35165 (JSC::Arguments::finishCreation):
35166 (JSC::Arguments::finishCreationAndCopyRegisters):
35167 * runtime/Executable.h:
35168 (JSC::FunctionExecutable::parameterCount):
35170 2011-10-14 Mark Hahnenberg <mhahnenberg@apple.com>
35172 Rename virtual deleteProperty to deletePropertyVirtual
35173 https://bugs.webkit.org/show_bug.cgi?id=69884
35175 Reviewed by Darin Adler.
35177 Renamed virtual versions of deleteProperty to deletePropertyVirtual in prepration for
35178 adding the static deleteProperty to the MethodTable in ClassInfo since the
35179 compiler gets mad if the virtual and static versions have the same name.
35181 * API/JSCallbackObject.h:
35182 * API/JSCallbackObjectFunctions.h:
35183 (JSC::::deletePropertyVirtual):
35184 (JSC::::deleteProperty):
35185 * API/JSObjectRef.cpp:
35186 (JSObjectDeleteProperty):
35187 * JavaScriptCore.exp:
35188 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
35189 * debugger/DebuggerActivation.cpp:
35190 (JSC::DebuggerActivation::deletePropertyVirtual):
35191 (JSC::DebuggerActivation::deleteProperty):
35192 * debugger/DebuggerActivation.h:
35193 * jit/JITStubs.cpp:
35194 (JSC::DEFINE_STUB_FUNCTION):
35195 * runtime/Arguments.cpp:
35196 (JSC::Arguments::deletePropertyVirtual):
35197 * runtime/Arguments.h:
35198 * runtime/ArrayPrototype.cpp:
35199 (JSC::arrayProtoFuncPop):
35200 (JSC::arrayProtoFuncReverse):
35201 (JSC::arrayProtoFuncShift):
35202 (JSC::arrayProtoFuncSplice):
35203 (JSC::arrayProtoFuncUnShift):
35204 * runtime/JSActivation.cpp:
35205 (JSC::JSActivation::deletePropertyVirtual):
35206 * runtime/JSActivation.h:
35207 * runtime/JSArray.cpp:
35208 (JSC::JSArray::deletePropertyVirtual):
35209 (JSC::JSArray::deleteProperty):
35210 * runtime/JSArray.h:
35211 * runtime/JSCell.cpp:
35212 (JSC::JSCell::deletePropertyVirtual):
35213 (JSC::JSCell::deleteProperty):
35214 * runtime/JSCell.h:
35215 * runtime/JSFunction.cpp:
35216 (JSC::JSFunction::deletePropertyVirtual):
35217 * runtime/JSFunction.h:
35218 * runtime/JSNotAnObject.cpp:
35219 (JSC::JSNotAnObject::deletePropertyVirtual):
35220 * runtime/JSNotAnObject.h:
35221 * runtime/JSONObject.cpp:
35222 (JSC::Walker::walk):
35223 * runtime/JSObject.cpp:
35224 (JSC::JSObject::deletePropertyVirtual):
35225 (JSC::JSObject::deleteProperty):
35226 (JSC::JSObject::defineOwnProperty):
35227 * runtime/JSObject.h:
35228 * runtime/JSVariableObject.cpp:
35229 (JSC::JSVariableObject::deletePropertyVirtual):
35230 * runtime/JSVariableObject.h:
35231 * runtime/RegExpMatchesArray.h:
35232 (JSC::RegExpMatchesArray::deletePropertyVirtual):
35233 * runtime/StrictEvalActivation.cpp:
35234 (JSC::StrictEvalActivation::deletePropertyVirtual):
35235 * runtime/StrictEvalActivation.h:
35236 * runtime/StringObject.cpp:
35237 (JSC::StringObject::deletePropertyVirtual):
35238 * runtime/StringObject.h:
35240 2011-10-14 Peter Beverloo <peter@chromium.org>
35242 [Chromium] Inherit settings from Chromium's envsetup.sh, address a NDK todo
35243 https://bugs.webkit.org/show_bug.cgi?id=70028
35245 Reviewed by Adam Barth.
35247 * JavaScriptCore.gyp/JavaScriptCore.gyp:
35249 2011-10-14 Yuqiang Xian <yuqiang.xian@intel.com>
35251 DFG JIT 32_64 - Performance fix for ResolveGlobal
35252 https://bugs.webkit.org/show_bug.cgi?id=70096
35254 Reviewed by Gavin Barraclough.
35256 Structure check of global object should be a pointer comparison
35257 instead of a tag and payload pair comparison. This fix improves
35258 SunSpider by 7% on Linux 32, with bitops-bitwise-and improved by 4.75X.
35259 Also two trivial fixes for successful 32-bit build are included.
35261 * dfg/DFGSpeculativeJIT.cpp:
35262 * dfg/DFGSpeculativeJIT32_64.cpp:
35263 (JSC::DFG::SpeculativeJIT::compile):
35265 2011-10-13 Filip Pizlo <fpizlo@apple.com>
35267 Speculation failures in ValueToInt32 are causing a 2x slow-down
35268 in Kraken/stanford-crypto-pbkdf2
35269 https://bugs.webkit.org/show_bug.cgi?id=70089
35271 Reviewed by Gavin Barraclough.
35273 If we can't truncate to Int32 using machine code, then don't fail
35274 speculation. Just call JSC::toInt32.
35276 * dfg/DFGJITCodeGenerator.h:
35277 (JSC::DFG::callOperation):
35278 * dfg/DFGOperations.h:
35279 * dfg/DFGSpeculativeJIT.cpp:
35280 (JSC::DFG::SpeculativeJIT::compileValueToInt32):
35281 * dfg/DFGSpeculativeJIT64.cpp:
35282 (JSC::DFG::SpeculativeJIT::compile):
35284 2011-10-13 Mark Hahnenberg <mhahnenberg@apple.com>
35286 Rename virtual getConstructData to getConstructDataVirtual
35287 https://bugs.webkit.org/show_bug.cgi?id=69872
35289 Reviewed by Geoffrey Garen.
35291 Renamed virtual getConstructData functions to getConstructDataVirtual to
35292 avoid conflicts when we add static getConstructData to the MethodTable.
35294 * API/JSCallbackConstructor.cpp:
35295 (JSC::JSCallbackConstructor::getConstructDataVirtual):
35296 * API/JSCallbackConstructor.h:
35297 * API/JSCallbackObject.h:
35298 * API/JSCallbackObjectFunctions.h:
35299 (JSC::::getConstructDataVirtual):
35300 * API/JSObjectRef.cpp:
35301 (JSObjectIsConstructor):
35302 (JSObjectCallAsConstructor):
35303 * JavaScriptCore.exp:
35304 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
35305 * dfg/DFGOperations.cpp:
35306 * jit/JITStubs.cpp:
35307 (JSC::DEFINE_STUB_FUNCTION):
35308 * runtime/ArrayConstructor.cpp:
35309 (JSC::ArrayConstructor::getConstructDataVirtual):
35310 * runtime/ArrayConstructor.h:
35311 * runtime/BooleanConstructor.cpp:
35312 (JSC::BooleanConstructor::getConstructDataVirtual):
35313 * runtime/BooleanConstructor.h:
35314 * runtime/DateConstructor.cpp:
35315 (JSC::DateConstructor::getConstructDataVirtual):
35316 * runtime/DateConstructor.h:
35318 (JSC::StrictModeTypeErrorFunction::getConstructDataVirtual):
35319 * runtime/ErrorConstructor.cpp:
35320 (JSC::ErrorConstructor::getConstructDataVirtual):
35321 * runtime/ErrorConstructor.h:
35322 * runtime/FunctionConstructor.cpp:
35323 (JSC::FunctionConstructor::getConstructDataVirtual):
35324 * runtime/FunctionConstructor.h:
35325 * runtime/JSCell.cpp:
35326 (JSC::JSCell::getConstructDataVirtual):
35327 * runtime/JSCell.h:
35328 (JSC::getConstructData):
35329 * runtime/JSFunction.cpp:
35330 (JSC::JSFunction::getConstructDataVirtual):
35331 * runtime/JSFunction.h:
35332 * runtime/NativeErrorConstructor.cpp:
35333 (JSC::NativeErrorConstructor::getConstructDataVirtual):
35334 * runtime/NativeErrorConstructor.h:
35335 * runtime/NumberConstructor.cpp:
35336 (JSC::NumberConstructor::getConstructDataVirtual):
35337 * runtime/NumberConstructor.h:
35338 * runtime/ObjectConstructor.cpp:
35339 (JSC::ObjectConstructor::getConstructDataVirtual):
35340 * runtime/ObjectConstructor.h:
35341 * runtime/RegExpConstructor.cpp:
35342 (JSC::RegExpConstructor::getConstructDataVirtual):
35343 * runtime/RegExpConstructor.h:
35344 * runtime/StringConstructor.cpp:
35345 (JSC::StringConstructor::getConstructDataVirtual):
35346 * runtime/StringConstructor.h:
35348 2011-10-13 Filip Pizlo <fpizlo@apple.com>
35350 Rubber stamped Stephanie Lewis.
35352 DFG_ENABLE() macro was always returning false.
35356 2011-10-13 Gavin Barraclough <baraclough@apple.com>
35358 Speculative build fix for !DFG builds.
35361 (JSC::JIT::privateCompile):
35363 2011-10-13 Oliver Hunt <oliver@apple.com>
35365 Fix performance of ValueToInt32 node when predicting double
35366 https://bugs.webkit.org/show_bug.cgi?id=70063
35368 Reviewed by Filip Pizlo.
35370 Currently we fail to inline double to int conversion when
35371 performing a ValueToInt32 operation on a value we predict
35374 * dfg/DFGAbstractState.cpp:
35375 (JSC::DFG::AbstractState::execute):
35376 Apply correct filter for the double prediction path
35377 * dfg/DFGJITCodeGenerator32_64.cpp:
35378 (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
35379 * dfg/DFGJITCodeGenerator64.cpp:
35380 (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
35381 Support double parameters even when value has been spilled.
35382 * dfg/DFGSpeculativeJIT.cpp:
35383 (JSC::DFG::SpeculativeJIT::compileValueToInt32):
35384 Moved old valueToInt32 code to this function, and added
35385 path for double prediction
35386 * dfg/DFGSpeculativeJIT.h:
35387 * dfg/DFGSpeculativeJIT32_64.cpp:
35388 (JSC::DFG::SpeculativeJIT::compile):
35389 * dfg/DFGSpeculativeJIT64.cpp:
35390 (JSC::DFG::SpeculativeJIT::compile):
35391 Made the two implementations of ValueToInt32 call a single
35392 shared compileValueToInt32 function.
35394 2011-10-13 Chris Marrin <cmarrin@apple.com>
35396 Sync requestAnimationFrame callback to CVDisplayLink on Mac
35397 https://bugs.webkit.org/show_bug.cgi?id=68911
35399 Reviewed by Simon Fraser.
35401 Add REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR for implementations
35402 that use the DisplayRefreshMonitor logic.
35406 2011-10-13 Gavin Barraclough <baraclough@apple.com>
35408 DFG JIT should not be using ENABLE macro to enable features
35409 https://bugs.webkit.org/show_bug.cgi?id=70060
35411 Reviewed by Oliver Hunt.
35413 The ENABLE macro is only intended to be used to detect features that are configured
35414 in Platform.h. Using its to detect settings defined in other headers is an error.
35416 The problem is that the ENABLE macro checks if the value is defined, so will silently
35417 return false if you fail to include the header defining the switch. This is not a problem
35418 if (1) the settings are defined in the same header that defines the macro that tests them,
35419 or (2) the header is included everywhere. In the case of ENABLE settings defined in
35420 Platform.h, both are true! To make this clear, add an explicit DFG_ENABLE macro.
35422 * bytecode/CodeBlock.cpp:
35423 * dfg/DFGByteCodeParser.cpp:
35424 (JSC::DFG::ByteCodeParser::getPrediction):
35425 (JSC::DFG::ByteCodeParser::makeSafe):
35426 * dfg/DFGCapabilities.h:
35427 (JSC::DFG::canCompileOpcode):
35428 * dfg/DFGGraph.cpp:
35429 (JSC::DFG::Graph::predictArgumentTypes):
35430 * dfg/DFGJITCodeGenerator.cpp:
35431 * dfg/DFGJITCodeGenerator.h:
35432 * dfg/DFGJITCompiler.cpp:
35433 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
35434 (JSC::DFG::JITCompiler::compileBody):
35435 (JSC::DFG::JITCompiler::link):
35436 * dfg/DFGJITCompiler.h:
35437 (JSC::DFG::JITCompiler::noticeOSREntry):
35438 * dfg/DFGJITCompiler32_64.cpp:
35439 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
35440 (JSC::DFG::JITCompiler::compileBody):
35441 (JSC::DFG::JITCompiler::link):
35443 * dfg/DFGOSREntry.cpp:
35444 (JSC::DFG::prepareOSREntry):
35445 * dfg/DFGOperations.cpp:
35446 * dfg/DFGOperations.h:
35447 * dfg/DFGPropagator.cpp:
35448 (JSC::DFG::Propagator::fixpoint):
35449 (JSC::DFG::Propagator::propagateArithNodeFlags):
35450 (JSC::DFG::Propagator::propagateArithNodeFlagsForward):
35451 (JSC::DFG::Propagator::propagateArithNodeFlagsBackward):
35452 (JSC::DFG::Propagator::propagateNodePredictions):
35453 (JSC::DFG::Propagator::propagatePredictionsForward):
35454 (JSC::DFG::Propagator::propagatePredictionsBackward):
35455 (JSC::DFG::Propagator::propagatePredictions):
35456 (JSC::DFG::Propagator::toDouble):
35457 (JSC::DFG::Propagator::fixupNode):
35458 (JSC::DFG::Propagator::fixup):
35459 (JSC::DFG::Propagator::startIndexForChildren):
35460 (JSC::DFG::Propagator::endIndexForPureCSE):
35461 (JSC::DFG::Propagator::setReplacement):
35462 (JSC::DFG::Propagator::eliminate):
35463 (JSC::DFG::Propagator::performNodeCSE):
35464 (JSC::DFG::Propagator::localCSE):
35465 (JSC::DFG::Propagator::allocateVirtualRegisters):
35466 (JSC::DFG::Propagator::performBlockCFA):
35467 (JSC::DFG::Propagator::performForwardCFA):
35468 (JSC::DFG::Propagator::globalCFA):
35469 * dfg/DFGScoreBoard.h:
35470 * dfg/DFGSpeculativeJIT.cpp:
35471 (JSC::DFG::SpeculativeJIT::compile):
35472 * dfg/DFGSpeculativeJIT.h:
35473 (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
35474 * dfg/DFGSpeculativeJIT32_64.cpp:
35475 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
35476 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
35477 (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
35478 (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
35479 (JSC::DFG::SpeculativeJIT::compile):
35480 * dfg/DFGSpeculativeJIT64.cpp:
35481 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
35482 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
35483 (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
35484 (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
35485 (JSC::DFG::SpeculativeJIT::compile):
35487 (JSC::JIT::privateCompile):
35489 2011-10-13 Gavin Barraclough <baraclough@apple.com>
35491 terminateSpeculativeExecution for fillSpeculateDouble with DataFormatCell
35493 Rubber stamped by Filip Pizlo
35495 This is breaking fast/canvas/canvas-composite-alpha.html on 32_64 DFG JIT.
35497 * dfg/DFGSpeculativeJIT32_64.cpp:
35498 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
35499 * dfg/DFGSpeculativeJIT64.cpp:
35500 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
35502 2011-10-13 Mark Hahnenberg <mhahnenberg@apple.com>
35504 De-virtualized JSCell::toNumber
35505 https://bugs.webkit.org/show_bug.cgi?id=69858
35507 Reviewed by Sam Weinig.
35510 Removed JSCallbackObject::toNumber because its no longer necessary since
35511 JSObject::toNumber now suffices since we implicitly add valueOf to an object's
35512 prototype whenever a convertToType callback is provided.
35513 * API/JSCallbackObject.h:
35514 * API/JSCallbackObjectFunctions.h:
35515 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
35517 De-virtualized JSCell::toNumber, JSObject::toNumber, and JSString::toNumber.
35518 * runtime/JSCell.cpp:
35519 (JSC::JSCell::toNumber):
35520 * runtime/JSCell.h:
35521 * runtime/JSObject.h:
35522 * runtime/JSString.h:
35524 Removed JSNotAnObject::toNumber because its result doesn't matter and it implements
35525 defaultValue, therefore JSObject::toNumber can cover its case.
35526 * runtime/JSNotAnObject.cpp:
35527 * runtime/JSNotAnObject.h:
35529 2011-10-13 Xianzhu Wang <wangxianzhu@chromium.org>
35531 Use realloc() to expand/shrink StringBuilder buffer
35532 https://bugs.webkit.org/show_bug.cgi?id=69913
35534 Reviewed by Darin Adler.
35536 * wtf/text/StringBuilder.cpp:
35537 (WTF::StringBuilder::reserveCapacity):
35538 (WTF::StringBuilder::reallocateBuffer):
35539 (WTF::StringBuilder::appendUninitialized):
35540 (WTF::StringBuilder::shrinkToFit):
35541 * wtf/text/StringBuilder.h:
35542 * wtf/text/StringImpl.cpp:
35543 (WTF::StringImpl::reallocate): Added to allow StringBuilder to reallocate the buffer.
35544 * wtf/text/StringImpl.h:
35546 2011-10-12 Filip Pizlo <fpizlo@apple.com>
35548 If an Arguments object is being used to copy the arguments, then
35550 https://bugs.webkit.org/show_bug.cgi?id=69995
35552 Reviewed by Sam Weinig.
35554 * interpreter/Interpreter.cpp:
35555 (JSC::Interpreter::retrieveArguments):
35556 * runtime/Arguments.h:
35557 (JSC::Arguments::createAndCopyRegisters):
35558 (JSC::Arguments::finishCreationButDontCopyRegisters):
35559 (JSC::Arguments::finishCreation):
35560 (JSC::Arguments::finishCreationAndCopyRegisters):
35562 2011-10-12 Filip Pizlo <fpizlo@apple.com>
35564 DFG CFA does not filter structures aggressively enough.
35565 https://bugs.webkit.org/show_bug.cgi?id=69989
35567 Reviewed by Oliver Hunt.
35569 * dfg/DFGAbstractValue.h:
35570 (JSC::DFG::AbstractValue::clear):
35571 (JSC::DFG::AbstractValue::makeTop):
35572 (JSC::DFG::AbstractValue::clobberStructures):
35573 (JSC::DFG::AbstractValue::set):
35574 (JSC::DFG::AbstractValue::merge):
35575 (JSC::DFG::AbstractValue::filter):
35576 (JSC::DFG::AbstractValue::checkConsistency):
35578 2011-10-12 Adam Barth <abarth@webkit.org>
35580 Remove ENABLE(XHTMLMP) and associated code
35581 https://bugs.webkit.org/show_bug.cgi?id=69729
35583 Reviewed by David Levin.
35585 * Configurations/FeatureDefines.xcconfig:
35587 2011-10-12 Gavin Barraclough <baraclough@apple.com>
35589 MacroAssemblerX86 8-bit register ops unsafe on CPU(X86)
35590 https://bugs.webkit.org/show_bug.cgi?id=69978
35592 Reviewed by Filip Pizlo.
35594 Certain ops are unsafe if the register passed is esp..edi (will instead test/set the ).
35596 compare32/test8/test32 Call setCC, which sets an 8-bit register - we can fix this by adding
35597 a couple of xchg instructions.
35599 branchTest8 with a register argument is also affected. In all cases this is currently used
35600 this is testing a value that is correct to 32 or more bits, so we can simply switch these
35601 to branchTest32 & remove the corresponding branchTest8 (this is desirable anyway, since the
35602 32-bit form is cheaper to implement on platforms that don't have an 8-bit compare instruction).
35604 This fixes the remaining fast/js failures with the DFG JIT 32_64.
35606 * assembler/MacroAssemblerARMv7.h
35607 - removed branchTest8.
35608 * assembler/MacroAssemblerX86Common.h:
35609 (JSC::MacroAssemblerX86Common::compare32):
35610 (JSC::MacroAssemblerX86Common::test8):
35611 (JSC::MacroAssemblerX86Common::test32):
35612 (JSC::MacroAssemblerX86Common::set32):
35613 - added set32 helper that is 'h' register safe.
35614 - removed branchTest8.
35615 * dfg/DFGJITCodeGenerator32_64.cpp:
35616 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
35617 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq):
35618 - switch uses of branchTest8 to branchTest32.
35619 * dfg/DFGJITCodeGenerator64.cpp:
35620 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
35621 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq):
35622 - switch uses of branchTest8 to branchTest32.
35623 * dfg/DFGSpeculativeJIT32_64.cpp:
35624 (JSC::DFG::SpeculativeJIT::emitBranch):
35625 - switch uses of branchTest8 to branchTest32.
35626 * dfg/DFGSpeculativeJIT64.cpp:
35627 (JSC::DFG::SpeculativeJIT::emitBranch):
35628 - switch uses of branchTest8 to branchTest32.
35630 2011-10-12 Gavin Barraclough <baraclough@apple.com>
35632 Errrk, revert accidental commit!
35636 2011-10-12 Gavin Barraclough <baraclough@apple.com>
35638 Unreviewed, re-land changes from #69890, #69903.
35640 These were reverted due to bug #69897, but #69903 fixed this problem.
35642 * dfg/DFGJITCodeGenerator.h:
35643 (JSC::DFG::JITCodeGenerator::silentFillGPR):
35645 2011-10-12 Filip Pizlo <fpizlo@apple.com>
35647 ValueProfile::computeUpdatedPrediction doesn't merge statistics correctly
35648 https://bugs.webkit.org/show_bug.cgi?id=69906
35650 Reviewed by Gavin Barraclough.
35652 It turns out that the simplest fix is to switch computeUpdatedPredictions()
35653 to using predictionFromValue() combined with mergePrediction(). Doing so
35654 allowed me to kill off weakBuckets and visitWeakReferences(). Hence this
35655 not only fixes a performance bug but kills off a lot of code that I never
35656 liked to begin with.
35658 This appears to be a 1% win on V8.
35660 * bytecode/CodeBlock.cpp:
35661 (JSC::CodeBlock::visitAggregate):
35662 * bytecode/CodeBlock.h:
35663 * bytecode/PredictedType.cpp:
35664 (JSC::predictionFromValue):
35665 * bytecode/ValueProfile.cpp:
35666 (JSC::ValueProfile::computeStatistics):
35667 (JSC::ValueProfile::computeUpdatedPrediction):
35668 * bytecode/ValueProfile.h:
35669 (JSC::ValueProfile::classInfo):
35670 (JSC::ValueProfile::numberOfSamples):
35671 (JSC::ValueProfile::isLive):
35672 (JSC::ValueProfile::dump):
35674 2011-10-12 Mark Hahnenberg <mhahnenberg@apple.com>
35676 De-virtualize JSCell::toString
35677 https://bugs.webkit.org/show_bug.cgi?id=69677
35679 Reviewed by Sam Weinig.
35681 Removed toString from JSCallbackObject, since it is no
35682 longer necessary since we now implicitly add toString and valueOf
35683 functions to object prototypes when a convertToType callback
35684 is provided, which is now the standard way to override toString
35685 and valueOf in the JSC C API.
35686 * API/JSCallbackObject.h:
35687 * API/JSCallbackObjectFunctions.h:
35688 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
35690 Removed toString from InterruptedExecutionError and
35691 TerminatedExecutionError and replaced it with defaultValue,
35692 which JSObject::toString calls. We'll probably have to de-virtualize
35693 defaultValue eventually, but we'll cross that bridge when we
35695 * runtime/ExceptionHelpers.cpp:
35696 (JSC::InterruptedExecutionError::defaultValue):
35697 (JSC::TerminatedExecutionError::defaultValue):
35698 * runtime/ExceptionHelpers.h:
35700 Removed toString from JSNotAnObject, since its return value doesn't
35701 actually matter and JSObject::toString can cover it.
35702 * runtime/JSNotAnObject.cpp:
35703 * runtime/JSNotAnObject.h:
35705 De-virtualized JSCell::toString, JSObject::toString and JSString::toString.
35706 Added handling of all cases for JSCell to JSCell::toString.
35707 * runtime/JSObject.h:
35708 * runtime/JSString.h:
35709 * runtime/JSCell.cpp:
35710 (JSC::JSCell::toString):
35711 * runtime/JSCell.h:
35713 2011-10-12 Oliver Hunt <oliver@apple.com>
35715 Global stringStructure caches its prototype chain, abandoning a web page
35716 https://bugs.webkit.org/show_bug.cgi?id=69952
35718 Reviewed by Filip Pizlo.
35720 When visiting a structure, we don't keep the prototype chain
35721 alive if we're not the structure for an object type.
35723 * runtime/Structure.cpp:
35724 (JSC::Structure::visitChildren):
35726 2011-10-12 Yuqiang Xian <yuqiang.xian@intel.com>
35728 DFG JIT 32_64 - Fix ArrayPop
35729 https://bugs.webkit.org/show_bug.cgi?id=69918
35731 Reviewed by Filip Pizlo.
35733 The storageLengthGPR is polluted by EmptyValueTag and later used to
35734 index the array, which results in abnormal behaviors in execution.
35735 This fix makes 32_64 DFG pass v8-deltablue and kraken
35736 crypto-sha256-iterative on Linux ia32.
35738 * assembler/MacroAssemblerX86Common.h:
35739 (JSC::MacroAssemblerX86Common::store32):
35740 * assembler/X86Assembler.h:
35741 (JSC::X86Assembler::movl_i32m):
35742 * dfg/DFGSpeculativeJIT32_64.cpp:
35743 (JSC::DFG::SpeculativeJIT::compile):
35745 2011-10-12 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>
35747 Fix build with GLib 2.31
35748 https://bugs.webkit.org/show_bug.cgi?id=69840
35750 Reviewed by Martin Robinson.
35752 * GNUmakefile.list.am: removed ThreadingGtk.cpp.
35753 * wtf/ThreadingPrimitives.h: remove GTK+-specific definitions.
35754 * wtf/gobject/GOwnPtr.cpp: remove GCond and GMutex specializations.
35755 * wtf/gobject/GOwnPtr.h: ditto.
35756 * wtf/gobject/GTypedefs.h: remove GCond and GMutex forward declarations.
35757 * wtf/gtk/ThreadingGtk.cpp: Removed.
35759 2011-10-12 Filip Pizlo <fpizlo@apple.com>
35761 Layout tests crashing in DFG JIT code
35762 https://bugs.webkit.org/show_bug.cgi?id=69897
35764 Reviewed by Gavin Barraclough.
35766 Abstract value filtration didn't take into account cases where a structure
35767 set filter, combined with predicted type knowledge, could lead to a stronger
35768 filter for the structure abstract value.
35770 This bug would have been benign in release builds; it would have just meant
35771 that the analysis was less precise and some optimization opportunities would
35772 be missed. I have an ASSERT that is meant to catch such cases, and it was
35773 triggering sporadically in one of the LayoutTests.
35775 * dfg/DFGAbstractValue.h:
35776 (JSC::DFG::AbstractValue::filter):
35778 2011-10-11 Gavin Barraclough <baraclough@apple.com>
35780 Unreviewed, temporarily reverted r97216 due to bug #69897.
35782 * dfg/DFGJITCodeGenerator.h:
35783 (JSC::DFG::JITCodeGenerator::silentFillGPR):
35785 2011-10-11 Yuqiang Xian <yuqiang.xian@intel.com>
35787 DFG 32_64 - fix silentFillGPR
35788 https://bugs.webkit.org/show_bug.cgi?id=69903
35790 Reviewed by Filip Pizlo.
35792 Fix a small bug in silentFillGPR,
35793 and add the newly introduced DFG file to CMakeListsEfl.
35795 * CMakeListsEfl.txt:
35796 * dfg/DFGJITCodeGenerator.h:
35797 (JSC::DFG::JITCodeGenerator::silentFillGPR):
35799 2011-10-08 Filip Pizlo <fpizlo@apple.com>
35801 DFG does not have flow-sensitive intraprocedural control flow analysis
35802 https://bugs.webkit.org/show_bug.cgi?id=69690
35804 Reviewed by Gavin Barraclough.
35806 Implemented a control flow analysis (CFA). It currently propagates type
35807 proofs only. For example, if all predecessors to a basic block have
35808 checks that variable X is a JSFinalObject with structure 0xabcdef, then
35809 this basic block will now know this fact and will know that it does not
35810 have to emit either JSFinalObject checks or any structure checks since
35811 the structure is precisely known. The CFA takes heap side-effects into
35812 account (though somewhat conservatively), so that if the object pointed
35813 to by variable X could have possibly undergone a structure transition
35814 then this is reflected: the analysis may simply say that X's structure
35817 This also propagates a wealth of other type information which is
35818 currently not being used. For example, we now know when a variable can
35819 only hold doubles. Even if a variable may hold other types at different
35820 points in its live range, we can still prove exactly when it will only
35823 There's a bunch of stuff that the CFA could do that it still does not
35824 do, like precise handling of PutStructure (i.e. structure transitions),
35825 precise handling of CheckFunction and CheckMethod, etc. So this is
35826 very much intended to be a starting point rather than an end unto
35829 This is a 1% win on V8 (mostly due to a 3% win on richards and deltablue)
35830 and a 1% win on Kraken (mostly due to a 6% win on imaging-desaturate).
35831 Neutral on SunSpider.
35833 * GNUmakefile.list.am:
35834 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
35835 * JavaScriptCore.xcodeproj/project.pbxproj:
35836 * bytecode/ActionablePrediction.h: Removed.
35837 * bytecode/PredictedType.cpp:
35838 (JSC::predictionToString):
35839 * bytecode/PredictedType.h:
35840 * dfg/DFGAbstractState.cpp: Added.
35841 (JSC::DFG::AbstractState::AbstractState):
35842 (JSC::DFG::AbstractState::~AbstractState):
35843 (JSC::DFG::AbstractState::beginBasicBlock):
35844 (JSC::DFG::AbstractState::initialize):
35845 (JSC::DFG::AbstractState::endBasicBlock):
35846 (JSC::DFG::AbstractState::reset):
35847 (JSC::DFG::AbstractState::execute):
35848 (JSC::DFG::AbstractState::clobberStructures):
35849 (JSC::DFG::AbstractState::mergeStateAtTail):
35850 (JSC::DFG::AbstractState::merge):
35851 (JSC::DFG::AbstractState::mergeToSuccessors):
35852 (JSC::DFG::AbstractState::mergeVariableBetweenBlocks):
35853 (JSC::DFG::AbstractState::dump):
35854 * dfg/DFGAbstractState.h: Added.
35855 (JSC::DFG::AbstractState::forNode):
35856 (JSC::DFG::AbstractState::isValid):
35857 * dfg/DFGAbstractValue.h: Added.
35858 (JSC::DFG::StructureAbstractValue::StructureAbstractValue):
35859 (JSC::DFG::StructureAbstractValue::clear):
35860 (JSC::DFG::StructureAbstractValue::makeTop):
35861 (JSC::DFG::StructureAbstractValue::top):
35862 (JSC::DFG::StructureAbstractValue::add):
35863 (JSC::DFG::StructureAbstractValue::addAll):
35864 (JSC::DFG::StructureAbstractValue::contains):
35865 (JSC::DFG::StructureAbstractValue::isSubsetOf):
35866 (JSC::DFG::StructureAbstractValue::doesNotContainAnyOtherThan):
35867 (JSC::DFG::StructureAbstractValue::isSupersetOf):
35868 (JSC::DFG::StructureAbstractValue::filter):
35869 (JSC::DFG::StructureAbstractValue::isClear):
35870 (JSC::DFG::StructureAbstractValue::isTop):
35871 (JSC::DFG::StructureAbstractValue::size):
35872 (JSC::DFG::StructureAbstractValue::at):
35873 (JSC::DFG::StructureAbstractValue::operator[]):
35874 (JSC::DFG::StructureAbstractValue::last):
35875 (JSC::DFG::StructureAbstractValue::predictionFromStructures):
35876 (JSC::DFG::StructureAbstractValue::operator==):
35877 (JSC::DFG::StructureAbstractValue::dump):
35878 (JSC::DFG::AbstractValue::AbstractValue):
35879 (JSC::DFG::AbstractValue::clear):
35880 (JSC::DFG::AbstractValue::isClear):
35881 (JSC::DFG::AbstractValue::makeTop):
35882 (JSC::DFG::AbstractValue::clobberStructures):
35883 (JSC::DFG::AbstractValue::isTop):
35884 (JSC::DFG::AbstractValue::top):
35885 (JSC::DFG::AbstractValue::set):
35886 (JSC::DFG::AbstractValue::operator==):
35887 (JSC::DFG::AbstractValue::merge):
35888 (JSC::DFG::AbstractValue::filter):
35889 (JSC::DFG::AbstractValue::validate):
35890 (JSC::DFG::AbstractValue::dump):
35891 * dfg/DFGBasicBlock.h: Added.
35892 (JSC::DFG::BasicBlock::BasicBlock):
35893 (JSC::DFG::BasicBlock::getBytecodeBegin):
35894 * dfg/DFGByteCodeParser.cpp:
35895 (JSC::DFG::ByteCodeParser::getLocal):
35896 (JSC::DFG::ByteCodeParser::setLocal):
35897 (JSC::DFG::ByteCodeParser::getArgument):
35898 (JSC::DFG::ByteCodeParser::setArgument):
35899 (JSC::DFG::ByteCodeParser::parseBlock):
35900 (JSC::DFG::ByteCodeParser::processPhiStack):
35901 (JSC::DFG::ByteCodeParser::setupPredecessors):
35902 * dfg/DFGGraph.cpp:
35903 (JSC::DFG::Graph::dump):
35905 * dfg/DFGJITCodeGenerator.h:
35907 * dfg/DFGJITCodeGenerator32_64.cpp:
35908 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranchNull):
35909 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
35910 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq):
35911 * dfg/DFGJITCodeGenerator64.cpp:
35912 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranchNull):
35913 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
35914 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq):
35915 * dfg/DFGJITCompiler.h:
35916 (JSC::DFG::JITCompiler::noticeOSREntry):
35918 (JSC::DFG::NodeIndexTraits::defaultValue):
35919 (JSC::DFG::Node::variableAccessData):
35920 (JSC::DFG::Node::takenBytecodeOffsetDuringParsing):
35921 (JSC::DFG::Node::notTakenBytecodeOffsetDuringParsing):
35922 (JSC::DFG::Node::setTakenBlockIndex):
35923 (JSC::DFG::Node::setNotTakenBlockIndex):
35924 (JSC::DFG::Node::takenBlockIndex):
35925 (JSC::DFG::Node::notTakenBlockIndex):
35926 * dfg/DFGOSREntry.cpp:
35927 (JSC::DFG::prepareOSREntry):
35928 * dfg/DFGOSREntry.h:
35929 * dfg/DFGOperands.h: Added.
35930 (JSC::DFG::operandIsArgument):
35931 (JSC::DFG::OperandValueTraits::defaultValue):
35932 (JSC::DFG::Operands::Operands):
35933 (JSC::DFG::Operands::numberOfArguments):
35934 (JSC::DFG::Operands::numberOfLocals):
35935 (JSC::DFG::Operands::argument):
35936 (JSC::DFG::Operands::local):
35937 (JSC::DFG::Operands::setLocal):
35938 (JSC::DFG::Operands::setArgumentFirstTime):
35939 (JSC::DFG::Operands::setLocalFirstTime):
35940 (JSC::DFG::Operands::operand):
35941 (JSC::DFG::Operands::setOperand):
35942 (JSC::DFG::Operands::clear):
35943 (JSC::DFG::dumpOperands):
35944 * dfg/DFGPropagator.cpp:
35945 (JSC::DFG::Propagator::fixpoint):
35946 (JSC::DFG::Propagator::propagateArithNodeFlags):
35947 (JSC::DFG::Propagator::propagateNodePredictions):
35948 (JSC::DFG::Propagator::propagatePredictions):
35949 (JSC::DFG::Propagator::performBlockCFA):
35950 (JSC::DFG::Propagator::performForwardCFA):
35951 (JSC::DFG::Propagator::globalCFA):
35952 * dfg/DFGSpeculativeJIT.cpp:
35953 (JSC::DFG::SpeculativeJIT::compilePeepHoleDoubleBranch):
35954 (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
35955 (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
35956 (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
35957 (JSC::DFG::SpeculativeJIT::compile):
35958 (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt):
35959 (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
35960 * dfg/DFGSpeculativeJIT.h:
35961 (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
35962 * dfg/DFGSpeculativeJIT32_64.cpp:
35963 (JSC::DFG::SpeculativeJIT::compileObjectEquality):
35964 (JSC::DFG::SpeculativeJIT::compare):
35965 (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
35966 (JSC::DFG::SpeculativeJIT::compileLogicalNot):
35967 (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
35968 (JSC::DFG::SpeculativeJIT::emitBranch):
35969 (JSC::DFG::SpeculativeJIT::compile):
35970 * dfg/DFGSpeculativeJIT64.cpp:
35971 (JSC::DFG::SpeculativeJIT::compileObjectEquality):
35972 (JSC::DFG::SpeculativeJIT::compare):
35973 (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
35974 (JSC::DFG::SpeculativeJIT::compileLogicalNot):
35975 (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
35976 (JSC::DFG::SpeculativeJIT::emitBranch):
35977 (JSC::DFG::SpeculativeJIT::compile):
35978 * dfg/DFGStructureSet.h:
35979 (JSC::DFG::StructureSet::clear):
35980 (JSC::DFG::StructureSet::predictionFromStructures):
35981 (JSC::DFG::StructureSet::operator==):
35982 (JSC::DFG::StructureSet::dump):
35983 * dfg/DFGVariableAccessData.h: Added.
35985 2011-10-11 Gavin Barraclough <baraclough@apple.com>
35987 DFG JIT 32_64 - Fix silentFillGPR for non-integer constants.
35988 https://bugs.webkit.org/show_bug.cgi?id=69890
35990 Reviewed by Oliver Hunt.
35992 Cell constants are currently hitting the valueOfInt32Constant case, there is no constant handling for JSValues.
35994 * dfg/DFGJITCodeGenerator.h:
35995 (JSC::DFG::JITCodeGenerator::silentFillGPR):
35997 2011-10-11 Ryosuke Niwa <rniwa@webkit.org>
35999 GTK build fix attempt after r97197.
36003 2011-10-11 Oliver Hunt <oliver@apple.com>
36005 Remove unintentional logging.
36009 2011-10-11 Oliver Hunt <oliver@apple.com>
36011 Tidy up card walking logic
36012 https://bugs.webkit.org/show_bug.cgi?id=69883
36014 Reviewed by Gavin Barraclough.
36016 Special case common cell sizes when walking a block's
36020 (JSC::::testAndClear):
36022 (JSC::GCTimer::GCCounter::GCCounter):
36023 (JSC::GCTimer::GCCounter::count):
36024 (JSC::GCTimer::GCCounter::~GCCounter):
36025 (JSC::Heap::markRoots):
36026 * heap/MarkStack.cpp:
36027 (JSC::MarkStack::reset):
36028 * heap/MarkStack.h:
36029 (JSC::MarkStack::visitCount):
36030 (JSC::MarkStack::MarkStack):
36031 (JSC::MarkStack::append):
36032 * heap/MarkedBlock.h:
36033 (JSC::MarkedBlock::gatherDirtyCellsWithSize):
36034 (JSC::MarkedBlock::gatherDirtyCells):
36035 * runtime/Structure.h:
36036 (JSC::MarkStack::internalAppend):
36038 2011-10-11 Filip Pizlo <fpizlo@apple.com>
36040 DFG virtual register allocator should be more aggressive in
36041 reusing temporary slots
36042 https://bugs.webkit.org/show_bug.cgi?id=69868
36044 Reviewed by Oliver Hunt.
36046 1.2% win on V8, neutral elsewhere. The win is probably because it
36047 increases precision of GC conservative scans.
36049 This required making the DFG::ScoreBoard operate over a bitvector
36050 of preserved variables, rather than just a preserved variable
36051 threshold. To do this, I improved the WTF::BitVector class to make
36052 it more user-friendly. It still retains all previous functionality.
36053 Also made changes to PackedIntVector to accomodate those changes.
36054 Finally, this adds more debugging to the virtual register allocator
36055 and to the OSR exit code, as this was necessary to track down bugs
36056 in an earlier version of this patch.
36058 * dfg/DFGByteCodeParser.cpp:
36059 (JSC::DFG::ByteCodeParser::ByteCodeParser):
36060 (JSC::DFG::ByteCodeParser::getLocal):
36062 * dfg/DFGJITCompiler.cpp:
36063 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
36064 * dfg/DFGPropagator.cpp:
36065 (JSC::DFG::Propagator::allocateVirtualRegisters):
36066 * dfg/DFGScoreBoard.h:
36067 (JSC::DFG::ScoreBoard::ScoreBoard):
36068 (JSC::DFG::ScoreBoard::~ScoreBoard):
36069 (JSC::DFG::ScoreBoard::allocate):
36070 (JSC::DFG::ScoreBoard::use):
36071 (JSC::DFG::ScoreBoard::highWatermark):
36072 (JSC::DFG::ScoreBoard::dump):
36073 (JSC::DFG::ScoreBoard::max):
36074 * dfg/DFGSpeculativeJIT.cpp:
36075 (JSC::DFG::ValueRecovery::dump):
36076 * wtf/BitVector.cpp:
36077 (WTF::BitVector::setSlow):
36078 (WTF::BitVector::resizeOutOfLine):
36079 (WTF::BitVector::dump):
36081 (WTF::BitVector::BitVector):
36082 (WTF::BitVector::operator=):
36083 (WTF::BitVector::quickGet):
36084 (WTF::BitVector::quickSet):
36085 (WTF::BitVector::quickClear):
36086 (WTF::BitVector::get):
36087 (WTF::BitVector::set):
36088 (WTF::BitVector::clear):
36089 * wtf/PackedIntVector.h:
36090 (WTF::PackedIntVector::get):
36091 (WTF::PackedIntVector::set):
36093 2011-10-11 Gavin Barraclough <baraclough@apple.com>
36095 DFG JIT 32_64 - Switch to cdecl calling convention.
36096 https://bugs.webkit.org/show_bug.cgi?id=69863
36098 Reviewed by Oliver Hunt.
36100 This makes it easier to keep the stack correctly aligned, which is required on OS X.
36102 * assembler/MacroAssemblerCodeRef.h:
36103 (JSC::FunctionPtr::FunctionPtr):
36104 - Provide default FunctionPtr constructors for CDECL functions on STDCALL platforms.
36105 * dfg/DFGJITCodeGenerator.h:
36106 (JSC::DFG::callOperation):
36107 - Switch calls to poke arguments rather than pushing them.
36108 (JSC::DFG::resetCallArguments):
36109 (JSC::DFG::addCallArgument):
36110 (JSC::DFG::addCallArgumentBoxed):
36111 - Helper functions to stack up call arguments on X86.
36112 * dfg/DFGJITCodeGenerator32_64.cpp:
36113 (JSC::DFG::JITCodeGenerator::emitCall):
36114 - Don't push, poke!
36115 * dfg/DFGJITCompiler32_64.cpp:
36116 (JSC::DFG::JITCompiler::compileBody):
36117 - Don't push, poke!
36118 * dfg/DFGOperations.cpp:
36119 - Switch ReturnAddress wrappers to push return address last, update asm trampolines.
36120 * dfg/DFGOperations.h:
36121 - switch DFG_OPERATION to assert CDECL on STDCALL platforms.
36122 * dfg/DFGSpeculativeJIT32_64.cpp:
36123 (JSC::DFG::fmodWithCDecl):
36124 (JSC::DFG::SpeculativeJIT::compile):
36125 - On STDCALL platforms wrap fmod, since DFG_OPERATION wrappers are CDECL.
36127 2011-10-11 Gavin Barraclough <baraclough@apple.com>
36129 Switch RegisterSizedBoolean/dfgConvertJSValueToInt32 return type to size_t
36130 https://bugs.webkit.org/show_bug.cgi?id=69821
36132 Reviewed by Filip Pizlo.
36134 Operations returning types Z (int32_t) and B (RegisterSizedBoolean - implemented as an
36135 intptr_t) are indistinguishable on 32-bit Linux, preventing the DFG JIT from building.
36137 dfgConvertJSValueToInt32 would be better returning a value known to be register sized, for
36138 JSVALUE64 (we currently zero-extend in JIT code, potentially introducing an unnecessary
36139 move), so by switching all associated operations to return a size_t we can fix the type
36140 problem on Linux & make it a small tweak that removes an unnecessary instruction.
36142 * dfg/DFGJITCodeGenerator.cpp:
36143 (JSC::DFG::JITCodeGenerator::nonSpeculativeCompare):
36144 - comparisons now return a size_t.
36145 * dfg/DFGJITCodeGenerator.h:
36146 (JSC::DFG::callOperation):
36147 - Removed Z_DFGOperation_EJ form.
36148 * dfg/DFGJITCodeGenerator32_64.cpp:
36149 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
36150 (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare):
36151 - comparisons now return a size_t.
36152 * dfg/DFGJITCodeGenerator64.cpp:
36153 (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
36154 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
36155 (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare):
36156 - comparisons now return a size_t.
36157 * dfg/DFGOperations.cpp:
36158 * dfg/DFGOperations.h:
36159 - Change return types for comparison operations & dfgConvertJSValueToInt32 to size_t,
36160 Both need to return values zero extended to fill a register.
36161 * dfg/DFGSpeculativeJIT.cpp:
36162 (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
36163 - comparisons now return a size_t.
36164 * dfg/DFGSpeculativeJIT.h:
36165 * dfg/DFGSpeculativeJIT32_64.cpp:
36166 (JSC::DFG::SpeculativeJIT::compare):
36167 - comparisons now return a size_t.
36168 * dfg/DFGSpeculativeJIT64.cpp:
36169 (JSC::DFG::SpeculativeJIT::compare):
36170 - comparisons now return a size_t.
36172 2011-10-11 Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
36174 [Qt] Remove all references to QTDIR_build and standalone_package
36176 Qt is now modularized, which means we no longer import WebKit into
36177 the Qt source tree. Instead we use git submodules, and building
36178 QtWebKit as "part of Qt" is really building QtWebKit as from trunk.
36180 To decrease the number of buildsystem configurations we also remove
36181 the standalone_package code-path used when we were providing tarballs
36182 with the derived sources pre-generated.
36184 Reviewed by Simon Hausmann.
36186 * DerivedSources.pro:
36187 * JavaScriptCore.pri:
36188 * JavaScriptCore.pro:
36190 2011-10-11 Yuqiang Xian <yuqiang.xian@intel.com>
36192 Add missing copyright notice in DFG JIT files
36193 https://bugs.webkit.org/show_bug.cgi?id=69809
36195 Reviewed by Gavin Barraclough.
36197 * dfg/DFGJITCodeGenerator32_64.cpp:
36198 * dfg/DFGJITCompiler32_64.cpp:
36199 * dfg/DFGJITCompilerInlineMethods.h:
36200 * dfg/DFGSpeculativeJIT32_64.cpp:
36202 2011-10-10 Filip Pizlo <fpizlo@apple.com>
36204 DFG JSVALUE64 spill/fill code should not box integers and doubles
36205 https://bugs.webkit.org/show_bug.cgi?id=69782
36207 Reviewed by Oliver Hunt.
36209 Added the notion of DataFormatInteger and DataFormatDouble to the spillFormat.
36210 This required changing all of the places that spill registers (both silently
36211 and not) and filling registers (both silently and on demand). It also required
36212 changing OSR exit to recognize that a spilled value (DisplacedInRegisterFile)
36213 may have the wrong format for the old JIT (unboxed int or double).
36215 This is a slight win on Kraken (0.25%) and neutral elsewhere.
36217 * dfg/DFGGenerationInfo.h:
36218 (JSC::DFG::GenerationInfo::spill):
36219 * dfg/DFGJITCodeGenerator.h:
36220 (JSC::DFG::JITCodeGenerator::silentFillFPR):
36221 (JSC::DFG::JITCodeGenerator::spill):
36222 * dfg/DFGJITCodeGenerator64.cpp:
36223 (JSC::DFG::JITCodeGenerator::fillInteger):
36224 (JSC::DFG::JITCodeGenerator::fillDouble):
36225 (JSC::DFG::JITCodeGenerator::fillJSValue):
36226 * dfg/DFGJITCompiler.cpp:
36227 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
36228 * dfg/DFGSpeculativeJIT.cpp:
36229 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
36230 * dfg/DFGSpeculativeJIT.h:
36231 (JSC::DFG::ValueRecovery::displacedInRegisterFile):
36232 (JSC::DFG::ValueRecovery::virtualRegister):
36233 * dfg/DFGSpeculativeJIT64.cpp:
36234 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
36235 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
36236 (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
36237 (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
36239 2011-10-10 Gavin Barraclough <baraclough@apple.com>
36241 DFG JIT switch dfgConvert methods to use callOperation
36242 https://bugs.webkit.org/show_bug.cgi?id=69806
36244 Reviewed by Filip Pizlo.
36246 * dfg/DFGJITCodeGenerator.h:
36247 (JSC::DFG::callOperation):
36248 * dfg/DFGJITCodeGenerator32_64.cpp:
36249 (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToNumber):
36250 (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
36251 * dfg/DFGJITCodeGenerator64.cpp:
36252 (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToNumber):
36253 (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
36254 * dfg/DFGOperations.h:
36256 2011-10-10 Gavin Barraclough <baraclough@apple.com>
36258 Remove some unused methods from the DFG JIT.
36260 Rubber stamped by Oliver Hunt
36262 Thee methods were only used by the non-speculative JIT, and can be removed.
36264 * dfg/DFGJITCodeGenerator.h:
36265 * dfg/DFGJITCodeGenerator32_64.cpp:
36266 * dfg/DFGJITCodeGenerator64.cpp:
36269 nonSpeculativeArithSub
36270 nonSpeculativeArithMod
36271 nonSpeculativeCheckHasInstance
36272 nonSpeculativeInstanceOf
36273 * dfg/DFGOperations.cpp:
36274 * dfg/DFGOperations.h:
36277 operationInstanceOf
36278 operationThrowHasInstanceError
36280 2011-10-10 Gavin Barraclough <baraclough@apple.com>
36282 Switch most calls in DFGJITCodeGenerator to use callOperation.
36283 https://bugs.webkit.org/show_bug.cgi?id=69802
36285 Reviewed by Oliver Hunt.
36287 Compares, add, mod are the easy cases.
36289 * dfg/DFGJITCodeGenerator.h:
36290 (JSC::DFG::callOperation):
36291 * dfg/DFGJITCodeGenerator32_64.cpp:
36292 (JSC::DFG::JITCodeGenerator::nonSpeculativeKnownConstantArithOp):
36293 (JSC::DFG::JITCodeGenerator::nonSpeculativeBasicArithOp):
36294 (JSC::DFG::JITCodeGenerator::nonSpeculativeArithMod):
36295 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
36296 (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare):
36297 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq):
36298 (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeStrictEq):
36299 * dfg/DFGJITCodeGenerator64.cpp:
36300 (JSC::DFG::JITCodeGenerator::nonSpeculativeKnownConstantArithOp):
36301 (JSC::DFG::JITCodeGenerator::nonSpeculativeBasicArithOp):
36302 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
36303 (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare):
36304 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq):
36305 (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeStrictEq):
36306 * dfg/DFGOperations.cpp:
36307 * dfg/DFGOperations.h:
36309 2011-10-10 Gavin Barraclough <baraclough@apple.com>
36311 DFG: Switch GetById / PutById to use callOperation
36312 https://bugs.webkit.org/show_bug.cgi?id=69795
36314 Reviewed by Oliver Hunt.
36316 Also make the take base as a cell, so 32_64 doesn't have to set up the cell tag.
36318 * dfg/DFGJITCodeGenerator.h:
36319 (JSC::DFG::callOperation):
36320 * dfg/DFGJITCodeGenerator32_64.cpp:
36321 (JSC::DFG::JITCodeGenerator::cachedGetById):
36322 (JSC::DFG::JITCodeGenerator::cachedPutById):
36323 * dfg/DFGJITCodeGenerator64.cpp:
36324 (JSC::DFG::JITCodeGenerator::cachedGetById):
36325 (JSC::DFG::JITCodeGenerator::cachedPutById):
36326 * dfg/DFGOperations.cpp:
36327 * dfg/DFGOperations.h:
36328 * dfg/DFGRepatch.cpp:
36329 (JSC::DFG::appropriatePutByIdFunction):
36331 2011-10-10 Filip Pizlo <fpizlo@apple.com>
36333 REGRESSIoN (r95399): Web process hangs when opening documents on Google Docs
36334 https://bugs.webkit.org/show_bug.cgi?id=69412
36336 Reviewed by Oliver Hunt.
36338 * dfg/DFGSpeculativeJIT32_64.cpp:
36339 (JSC::DFG::SpeculativeJIT::compile):
36340 * dfg/DFGSpeculativeJIT64.cpp:
36341 (JSC::DFG::SpeculativeJIT::compile):
36343 (JSC::JIT::privateCompile):
36346 2011-10-10 Mark Hahnenberg <mhahnenberg@apple.com>
36348 Remove getCallDataVirtual methods
36349 https://bugs.webkit.org/show_bug.cgi?id=69186
36351 Reviewed by Geoffrey Garen.
36353 Removed all getCallDataVirtual methods and replaced their call sites
36354 with an explicit lookup in the MethodTable.
36356 * API/JSCallbackFunction.cpp:
36357 * API/JSCallbackFunction.h:
36358 * API/JSCallbackObject.h:
36359 * API/JSCallbackObjectFunctions.h:
36360 * API/JSObjectRef.cpp:
36361 (JSObjectIsFunction):
36362 (JSObjectCallAsFunction):
36363 * JavaScriptCore.exp:
36364 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
36365 * interpreter/Interpreter.cpp:
36366 (JSC::Interpreter::privateExecute):
36367 * jit/JITStubs.cpp:
36368 (JSC::DEFINE_STUB_FUNCTION):
36369 * runtime/ArrayConstructor.cpp:
36370 * runtime/ArrayConstructor.h:
36371 * runtime/BooleanConstructor.cpp:
36372 * runtime/BooleanConstructor.h:
36373 * runtime/DateConstructor.cpp:
36374 * runtime/DateConstructor.h:
36376 Moved StrictModeTypeErrorFunction to Error.h in order to be able to include
36377 the class definition in JSGlobalObject.cpp.
36378 * runtime/Error.cpp:
36379 (JSC::createTypeErrorFunction):
36381 (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction):
36382 (JSC::StrictModeTypeErrorFunction::create):
36383 (JSC::StrictModeTypeErrorFunction::constructThrowTypeError):
36384 (JSC::StrictModeTypeErrorFunction::getConstructData):
36385 (JSC::StrictModeTypeErrorFunction::callThrowTypeError):
36386 (JSC::StrictModeTypeErrorFunction::getCallData):
36387 (JSC::StrictModeTypeErrorFunction::createStructure):
36388 * runtime/ErrorConstructor.cpp:
36389 * runtime/ErrorConstructor.h:
36390 * runtime/FunctionConstructor.cpp:
36391 * runtime/FunctionConstructor.h:
36392 * runtime/FunctionPrototype.cpp:
36393 * runtime/FunctionPrototype.h:
36395 To allow subclasses of InternalFunction (e.g. QtRuntimeMethod) to not have
36396 to declare their own ClassInfo if they don't override getCallData, provided
36397 an implementation that calls ASSERT_NOT_REACHED if called, providing roughly the same
36398 functionality as of the pure virtual method InternalFunction used to have.
36399 Also made this new implementation protected rather than private for the same reason.
36400 Also added an ASSERT in InternalFunction::finishCreation to make sure that whatever
36401 object is being created provides their own implementation of getCallData. This
36402 just makes execution fail earlier in a place where the source of the error is
36403 easy to trace. These ASSERTs are better than putting a null in the MethodTable because
36404 they appear much more intentional to anybody who fails to provide their own
36405 implementation or who tries to explicitly call InternalFunction::getCallData.
36406 * runtime/InternalFunction.cpp:
36407 (JSC::InternalFunction::finishCreation):
36408 (JSC::InternalFunction::getCallData):
36409 * runtime/InternalFunction.h:
36410 * runtime/JSCell.cpp:
36411 * runtime/JSCell.h:
36412 * runtime/JSFunction.cpp:
36413 * runtime/JSFunction.h:
36415 Added a global structure to JSGlobalObject for StrictModeTypeErrorFunction to enable
36416 it to be reused rather than creating a new Structure every time we instantiate it.
36417 * runtime/JSGlobalObject.cpp:
36418 (JSC::JSGlobalObject::reset):
36419 (JSC::JSGlobalObject::visitChildren):
36420 * runtime/JSGlobalObject.h:
36421 (JSC::JSGlobalObject::strictModeTypeErrorFunctionStructure):
36422 * runtime/JSONObject.cpp:
36423 (JSC::Stringifier::Stringifier):
36424 (JSC::Stringifier::toJSON):
36425 (JSC::Stringifier::appendStringifiedValue):
36426 * runtime/JSObject.cpp:
36427 (JSC::JSObject::put):
36428 * runtime/JSObject.h:
36429 (JSC::getCallData):
36430 * runtime/NativeErrorConstructor.cpp:
36431 * runtime/NativeErrorConstructor.h:
36432 * runtime/NumberConstructor.cpp:
36433 * runtime/NumberConstructor.h:
36434 * runtime/ObjectConstructor.cpp:
36435 * runtime/ObjectConstructor.h:
36436 * runtime/Operations.cpp:
36437 (JSC::jsTypeStringForValue):
36438 (JSC::jsIsObjectType):
36439 (JSC::jsIsFunctionType):
36440 * runtime/PropertySlot.cpp:
36441 (JSC::PropertySlot::functionGetter):
36442 * runtime/RegExpConstructor.cpp:
36443 * runtime/RegExpConstructor.h:
36444 * runtime/StringConstructor.cpp:
36445 * runtime/StringConstructor.h:
36446 * runtime/Structure.h:
36448 2011-10-10 Gavin Barraclough <barraclough@apple.com>
36450 Switch last calls from DFGSpeculativeJIT to use callOperation.
36451 https://bugs.webkit.org/show_bug.cgi?id=69780
36453 Reviewed by Oliver Hunt.
36455 Also, rename type in operations for booleans from Z to B, since Z is the mathematical symbol for integers.
36457 * dfg/DFGJITCodeGenerator.cpp:
36458 (JSC::DFG::JITCodeGenerator::nonSpeculativeCompare):
36459 * dfg/DFGJITCodeGenerator.h:
36460 (JSC::DFG::callOperation):
36461 * dfg/DFGJITCodeGenerator32_64.cpp:
36462 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
36463 (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare):
36464 * dfg/DFGJITCodeGenerator64.cpp:
36465 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
36466 (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare):
36467 * dfg/DFGOperations.h:
36468 * dfg/DFGSpeculativeJIT.cpp:
36469 (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
36470 * dfg/DFGSpeculativeJIT.h:
36471 * dfg/DFGSpeculativeJIT32_64.cpp:
36472 (JSC::DFG::SpeculativeJIT::compare):
36473 (JSC::DFG::SpeculativeJIT::compile):
36474 * dfg/DFGSpeculativeJIT64.cpp:
36475 (JSC::DFG::SpeculativeJIT::compare):
36476 (JSC::DFG::SpeculativeJIT::compile):
36479 2011-10-10 Yuqiang Xian <yuqiang.xian@intel.com>
36481 JSVALUE32_64 DFG JIT - bug fix for V8 benchmark cases "crypto" and "raytrace"
36482 https://bugs.webkit.org/show_bug.cgi?id=69748
36484 Reviewed by Filip Pizlo.
36486 * dfg/DFGJITCodeGenerator32_64.cpp:
36487 (JSC::DFG::JITCodeGenerator::cachedGetMethod):
36488 * dfg/DFGSpeculativeJIT32_64.cpp:
36489 (JSC::DFG::SpeculativeJIT::compileObjectEquality):
36491 2011-10-10 Adam Roben <aroben@apple.com>
36495 * wtf/MainThread.h: Pull in Platform.h since this file uses PLATFORM() macros.
36497 2011-10-10 Yuqiang Xian <yuqiang.xian@intel.com>
36499 JSVALUE32_64 DFG JIT - Bug fix for BranchNull
36500 https://bugs.webkit.org/show_bug.cgi?id=69743
36502 Reviewed by Darin Adler.
36504 This fixes the error in access-binary-trees. All SunSpider cases passed.
36506 * dfg/DFGJITCodeGenerator32_64.cpp:
36507 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranchNull):
36509 2011-10-07 Gavin Barraclough <barraclough@apple.com>
36511 DFG JIT: callOperation should return the Call.
36512 https://bugs.webkit.org/show_bug.cgi?id=69682
36514 Reviewed by Oliver Hunt.
36516 * dfg/DFGJITCodeGenerator.h:
36517 (JSC::DFG::callOperation):
36518 (JSC::DFG::appendCallWithExceptionCheckSetResult):
36519 * dfg/DFGJITCompiler.h:
36520 (JSC::DFG::JITCompiler::appendCall):
36523 2011-10-10 Sheriff Bot <webkit.review.bot@gmail.com>
36525 Unreviewed, rolling out r97045.
36526 http://trac.webkit.org/changeset/97045
36527 https://bugs.webkit.org/show_bug.cgi?id=69746
36529 makes apple bots very crashy :( (Requested by kling on
36534 2011-10-10 Andreas Kling <kling@webkit.org>
36536 Shrink BorderValue.
36537 https://bugs.webkit.org/show_bug.cgi?id=69521
36539 Reviewed by Antti Koivisto.
36541 * config.h: Touch to force full rebuild.
36543 2011-10-09 Yuqiang Xian <yuqiang.xian@intel.com>
36545 Improve Null or Undefined test in 32_64 DFG
36546 https://bugs.webkit.org/show_bug.cgi?id=69734
36548 Reviewed by Darin Adler.
36550 Currently Null or Undefined value test in 32_64 DFG will check
36551 Null and Undefined tag separately and introduce one more branch.
36552 It can be improved in the way how the baseline JIT is doing - by
36553 relying on the fact that "UndefinedTag + 1 == NullTag and NullTag & 1".
36555 * dfg/DFGJITCodeGenerator32_64.cpp:
36556 (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompareNull):
36557 * dfg/DFGSpeculativeJIT32_64.cpp:
36558 (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
36559 (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
36561 2011-10-09 Yuqiang Xian <yuqiang.xian@intel.com>
36563 JSVALUE32_64 DFG JIT - Bug fix for ConvertThis
36564 https://bugs.webkit.org/show_bug.cgi?id=69721
36566 Reviewed by Darin Adler.
36568 * dfg/DFGSpeculativeJIT32_64.cpp:
36569 (JSC::DFG::SpeculativeJIT::compile):
36571 2011-10-09 Yuqiang Xian <yuqiang.xian@intel.com>
36573 Remove unused callOperation code of DFG JIT on X86
36574 https://bugs.webkit.org/show_bug.cgi?id=69722
36576 Reviewed by Filip Pizlo.
36578 * dfg/DFGJITCodeGenerator.h:
36579 (JSC::DFG::callOperation):
36581 2011-10-09 Yuqiang Xian <yuqiang.xian@intel.com>
36583 JSVALUE32_64 DFG JIT - fillJSValue with a pair of GPRs should not set the registerFormat to be DataFormatJSDouble
36584 https://bugs.webkit.org/show_bug.cgi?id=69720
36586 Reviewed by Filip Pizlo.
36588 In JSVALUE32_64 DFG, DataFormatJSDouble is assumed to be represented by
36589 a FPR and will be used for further optimizations, though we currently
36590 don't fully utilize it. For now when filling a JS value which was
36591 spilled as a JSDouble with a pair of GPRs, we'll set the registerFormat
36592 to DataFormatJS to avoid compilation errors.
36594 * dfg/DFGJITCodeGenerator32_64.cpp:
36595 (JSC::DFG::JITCodeGenerator::fillJSValue):
36597 2011-10-09 Filip Pizlo <fpizlo@apple.com>
36599 DFG should not always speculate that a ByVal access has an integer index
36600 https://bugs.webkit.org/show_bug.cgi?id=69716
36602 Reviewed by Oliver Hunt.
36604 1% win on SunSpider, neutral elsewhere.
36606 * dfg/DFGJITCodeGenerator.h:
36607 (JSC::DFG::callOperation):
36609 * dfg/DFGOperations.cpp:
36610 * dfg/DFGOperations.h:
36611 * dfg/DFGPropagator.cpp:
36612 (JSC::DFG::Propagator::byValHasIntBase):
36613 (JSC::DFG::Propagator::clobbersWorld):
36614 (JSC::DFG::Propagator::getMethodLoadElimination):
36615 (JSC::DFG::Propagator::checkStructureLoadElimination):
36616 (JSC::DFG::Propagator::getByOffsetLoadElimination):
36617 (JSC::DFG::Propagator::getPropertyStorageLoadElimination):
36618 (JSC::DFG::Propagator::performNodeCSE):
36619 * dfg/DFGSpeculativeJIT32_64.cpp:
36620 (JSC::DFG::SpeculativeJIT::compile):
36621 * dfg/DFGSpeculativeJIT64.cpp:
36622 (JSC::DFG::SpeculativeJIT::compile):
36624 2011-10-09 Yuqiang Xian <yuqiang.xian@intel.com>
36626 Fix value profiling in 32_64 JIT
36627 https://bugs.webkit.org/show_bug.cgi?id=69717
36629 Reviewed by Filip Pizlo.
36631 Current value profiling for 32_64 JIT is broken and cannot record
36632 correct predicated types, which results in many speculation failures
36633 in the 32_64 DFG JIT, fallbacks to baseline JIT, and re-optimizations
36635 With this fix 32_64 DFG JIT can demonstrate real performance gains.
36637 * bytecode/ValueProfile.cpp:
36638 (JSC::ValueProfile::computeStatistics):
36639 * bytecode/ValueProfile.h:
36640 (JSC::ValueProfile::classInfo):
36641 (JSC::ValueProfile::numberOfSamples):
36642 (JSC::ValueProfile::isLive):
36643 (JSC::ValueProfile::numberOfInt32s):
36644 (JSC::ValueProfile::numberOfDoubles):
36645 (JSC::ValueProfile::numberOfBooleans):
36646 (JSC::ValueProfile::dump):
36647 Empty value check should be performed on decoded JSValue,
36648 as for 32_64 empty value is not identical to encoded 0.
36650 (JSC::JIT::privateCompile):
36651 * jit/JITInlineMethods.h:
36652 (JSC::JIT::emitValueProfilingSite):
36653 * jit/JITStubCall.h:
36654 (JSC::JITStubCall::callWithValueProfiling):
36655 Record the right profiling result for 32_64.
36657 2011-10-09 Yuqiang Xian <yuqiang.xian@intel.com>
36659 Remove 32 bit restrictions in DFG JIT
36660 https://bugs.webkit.org/show_bug.cgi?id=69711
36662 Reviewed by Filip Pizlo.
36664 op_call/op_construct support was disabled for 32 bit DFG JIT because
36665 there was regression in javascriptcore tests. Now the bugs are fixed
36666 and there should be no regression. This makes 32 bit DFG have the same
36667 capability as 64 bit DFG, and improves the coverage.
36669 * dfg/DFGCapabilities.h:
36670 (JSC::DFG::canCompileOpcode):
36672 2011-10-08 Mark Hahnenberg <mhahnenberg@apple.com>
36674 Add static version of JSCell::getConstructData
36675 https://bugs.webkit.org/show_bug.cgi?id=69673
36677 Reviewed by Geoffrey Garen.
36679 Added static version of getConstructData to all classes that
36680 override it and changed the virtual versions to call the static
36681 versions. This is the first step in de-virtualizing JSCell::getConstructData.
36683 * API/JSCallbackConstructor.cpp:
36684 (JSC::JSCallbackConstructor::getConstructData):
36685 * API/JSCallbackConstructor.h:
36686 * API/JSCallbackObject.h:
36687 * API/JSCallbackObjectFunctions.h:
36688 (JSC::::getConstructData):
36689 * runtime/ArrayConstructor.cpp:
36690 (JSC::ArrayConstructor::getConstructData):
36691 * runtime/ArrayConstructor.h:
36692 * runtime/BooleanConstructor.cpp:
36693 (JSC::BooleanConstructor::getConstructData):
36694 * runtime/BooleanConstructor.h:
36695 * runtime/DateConstructor.cpp:
36696 (JSC::DateConstructor::getConstructData):
36697 * runtime/DateConstructor.h:
36698 * runtime/ErrorConstructor.cpp:
36699 (JSC::ErrorConstructor::getConstructData):
36700 * runtime/ErrorConstructor.h:
36701 * runtime/FunctionConstructor.cpp:
36702 (JSC::FunctionConstructor::getConstructData):
36703 * runtime/FunctionConstructor.h:
36704 * runtime/JSCell.cpp:
36705 (JSC::JSCell::getConstructData):
36706 * runtime/JSCell.h:
36707 * runtime/JSFunction.cpp:
36708 (JSC::JSFunction::getConstructData):
36709 * runtime/JSFunction.h:
36710 * runtime/NativeErrorConstructor.cpp:
36711 (JSC::NativeErrorConstructor::getConstructData):
36712 * runtime/NativeErrorConstructor.h:
36713 * runtime/NumberConstructor.cpp:
36714 (JSC::NumberConstructor::getConstructData):
36715 * runtime/NumberConstructor.h:
36716 * runtime/ObjectConstructor.cpp:
36717 (JSC::ObjectConstructor::getConstructData):
36718 * runtime/ObjectConstructor.h:
36719 * runtime/RegExpConstructor.cpp:
36720 (JSC::RegExpConstructor::getConstructData):
36721 * runtime/RegExpConstructor.h:
36722 * runtime/StringConstructor.cpp:
36723 (JSC::StringConstructor::getConstructData):
36724 * runtime/StringConstructor.h:
36726 2011-10-08 Mark Hahnenberg <mhahnenberg@apple.com>
36728 Add static version of JSCell::getOwnPropertySlot
36729 https://bugs.webkit.org/show_bug.cgi?id=69593
36731 Reviewed by Geoffrey Garen.
36733 Added static version of getOwnPropertySlot to every class that overrides
36734 JSCell::getOwnPropertySlot. The virtual versions now call the static versions.
36735 This is the first step in de-virtualizing JSCell::getOwnPropertySlot.
36737 * JavaScriptCore.exp:
36738 * debugger/DebuggerActivation.cpp:
36739 (JSC::DebuggerActivation::getOwnPropertySlot):
36740 * debugger/DebuggerActivation.h:
36741 * runtime/Arguments.cpp:
36742 (JSC::Arguments::getOwnPropertySlot):
36743 * runtime/Arguments.h:
36744 * runtime/ArrayConstructor.h:
36745 * runtime/ArrayPrototype.cpp:
36746 (JSC::ArrayPrototype::getOwnPropertySlot):
36747 * runtime/ArrayPrototype.h:
36748 * runtime/BooleanPrototype.cpp:
36749 (JSC::BooleanPrototype::getOwnPropertySlot):
36750 * runtime/BooleanPrototype.h:
36751 * runtime/DateConstructor.cpp:
36752 (JSC::DateConstructor::getOwnPropertySlot):
36753 * runtime/DateConstructor.h:
36754 * runtime/DatePrototype.cpp:
36755 (JSC::DatePrototype::getOwnPropertySlot):
36756 * runtime/DatePrototype.h:
36757 * runtime/ErrorPrototype.cpp:
36758 (JSC::ErrorPrototype::getOwnPropertySlot):
36759 * runtime/ErrorPrototype.h:
36760 * runtime/JSActivation.cpp:
36761 (JSC::JSActivation::getOwnPropertySlot):
36762 * runtime/JSActivation.h:
36763 * runtime/JSArray.cpp:
36764 (JSC::JSArray::getOwnPropertySlot):
36765 * runtime/JSArray.h:
36766 * runtime/JSBoundFunction.cpp:
36767 (JSC::JSBoundFunction::getOwnPropertySlot):
36768 * runtime/JSBoundFunction.h:
36769 * runtime/JSByteArray.cpp:
36770 (JSC::JSByteArray::getOwnPropertySlot):
36771 * runtime/JSByteArray.h:
36772 * runtime/JSCell.cpp:
36773 (JSC::JSCell::getOwnPropertySlot):
36774 * runtime/JSCell.h:
36775 * runtime/JSFunction.cpp:
36776 (JSC::JSFunction::getOwnPropertySlot):
36777 * runtime/JSFunction.h:
36778 * runtime/JSGlobalObject.cpp:
36779 (JSC::JSGlobalObject::getOwnPropertySlot):
36780 * runtime/JSGlobalObject.h:
36781 * runtime/JSNotAnObject.cpp:
36782 (JSC::JSNotAnObject::getOwnPropertySlot):
36783 * runtime/JSNotAnObject.h:
36784 * runtime/JSONObject.cpp:
36785 (JSC::JSONObject::getOwnPropertySlot):
36786 * runtime/JSONObject.h:
36787 * runtime/JSObject.cpp:
36788 (JSC::JSObject::getOwnPropertySlot):
36789 * runtime/JSObject.h:
36790 (JSC::JSObject::getOwnPropertySlot):
36791 * runtime/JSStaticScopeObject.cpp:
36792 (JSC::JSStaticScopeObject::getOwnPropertySlot):
36793 * runtime/JSStaticScopeObject.h:
36794 * runtime/JSString.cpp:
36795 (JSC::JSString::getOwnPropertySlot):
36796 * runtime/JSString.h:
36797 * runtime/MathObject.cpp:
36798 (JSC::MathObject::getOwnPropertySlot):
36799 * runtime/MathObject.h:
36800 * runtime/NumberConstructor.cpp:
36801 (JSC::NumberConstructor::getOwnPropertySlot):
36802 * runtime/NumberConstructor.h:
36803 * runtime/NumberPrototype.cpp:
36804 (JSC::NumberPrototype::getOwnPropertySlot):
36805 * runtime/NumberPrototype.h:
36806 * runtime/ObjectConstructor.cpp:
36807 (JSC::ObjectConstructor::getOwnPropertySlot):
36808 * runtime/ObjectConstructor.h:
36809 * runtime/ObjectPrototype.cpp:
36810 (JSC::ObjectPrototype::getOwnPropertySlot):
36811 * runtime/ObjectPrototype.h:
36812 * runtime/RegExpConstructor.cpp:
36813 (JSC::RegExpConstructor::getOwnPropertySlot):
36814 * runtime/RegExpConstructor.h:
36815 * runtime/RegExpMatchesArray.h:
36816 (JSC::RegExpMatchesArray::getOwnPropertySlot):
36817 * runtime/RegExpObject.cpp:
36818 (JSC::RegExpObject::getOwnPropertySlot):
36819 * runtime/RegExpObject.h:
36820 * runtime/RegExpPrototype.cpp:
36821 (JSC::RegExpPrototype::getOwnPropertySlot):
36822 * runtime/RegExpPrototype.h:
36823 * runtime/StringConstructor.cpp:
36824 (JSC::StringConstructor::getOwnPropertySlot):
36825 * runtime/StringConstructor.h:
36826 * runtime/StringObject.cpp:
36827 (JSC::StringObject::getOwnPropertySlot):
36828 * runtime/StringObject.h:
36829 * runtime/StringPrototype.cpp:
36830 (JSC::StringPrototype::getOwnPropertySlot):
36831 * runtime/StringPrototype.h:
36833 2011-10-08 Yuqiang Xian <yuqiang.xian@intel.com>
36835 JSVALUE32_64 DFG JIT - GetLocal should produce a cell result for Array predictions
36836 https://bugs.webkit.org/show_bug.cgi?id=69699
36838 Reviewed by Filip Pizlo.
36840 It should match SetLocal where only payload is stored for array predictions.
36842 * dfg/DFGSpeculativeJIT32_64.cpp:
36843 (JSC::DFG::SpeculativeJIT::compile):
36845 2011-10-08 Yuqiang Xian <yuqiang.xian@intel.com>
36847 JSVALUE32_64 DFG JIT - Bug fixes for Branch and LogicalNot
36848 https://bugs.webkit.org/show_bug.cgi?id=69702
36850 Reviewed by Filip Pizlo.
36852 There are some errors in generating code for Branch and LogicalNot,
36853 when the operand is predicted as ObjectOrOther.
36855 * dfg/DFGSpeculativeJIT32_64.cpp:
36856 (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
36857 (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
36859 2011-10-08 Sheriff Bot <webkit.review.bot@gmail.com>
36861 Unreviewed, rolling out r96996.
36862 http://trac.webkit.org/changeset/96996
36863 https://bugs.webkit.org/show_bug.cgi?id=69697
36865 It broke all tests on the Qt bot (Requested by Ossy_night on
36868 * API/JSCallbackFunction.cpp:
36869 (JSC::JSCallbackFunction::getCallDataVirtual):
36870 * API/JSCallbackFunction.h:
36871 * API/JSCallbackObject.h:
36872 * API/JSCallbackObjectFunctions.h:
36873 (JSC::::getCallDataVirtual):
36874 * API/JSObjectRef.cpp:
36875 (JSObjectIsFunction):
36876 (JSObjectCallAsFunction):
36877 * JavaScriptCore.exp:
36878 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
36879 * interpreter/Interpreter.cpp:
36880 (JSC::Interpreter::privateExecute):
36881 * jit/JITStubs.cpp:
36882 (JSC::DEFINE_STUB_FUNCTION):
36883 * runtime/ArrayConstructor.cpp:
36884 (JSC::ArrayConstructor::getCallDataVirtual):
36885 * runtime/ArrayConstructor.h:
36886 * runtime/BooleanConstructor.cpp:
36887 (JSC::BooleanConstructor::getCallDataVirtual):
36888 * runtime/BooleanConstructor.h:
36889 * runtime/DateConstructor.cpp:
36890 (JSC::DateConstructor::getCallDataVirtual):
36891 * runtime/DateConstructor.h:
36892 * runtime/Error.cpp:
36893 (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction):
36894 (JSC::StrictModeTypeErrorFunction::create):
36895 (JSC::StrictModeTypeErrorFunction::constructThrowTypeError):
36896 (JSC::StrictModeTypeErrorFunction::getConstructData):
36897 (JSC::StrictModeTypeErrorFunction::callThrowTypeError):
36898 (JSC::StrictModeTypeErrorFunction::getCallDataVirtual):
36899 (JSC::StrictModeTypeErrorFunction::getCallData):
36900 (JSC::StrictModeTypeErrorFunction::createStructure):
36901 (JSC::createTypeErrorFunction):
36903 * runtime/ErrorConstructor.cpp:
36904 (JSC::ErrorConstructor::getCallDataVirtual):
36905 * runtime/ErrorConstructor.h:
36906 * runtime/FunctionConstructor.cpp:
36907 (JSC::FunctionConstructor::getCallDataVirtual):
36908 * runtime/FunctionConstructor.h:
36909 * runtime/FunctionPrototype.cpp:
36910 (JSC::FunctionPrototype::getCallDataVirtual):
36911 * runtime/FunctionPrototype.h:
36912 * runtime/InternalFunction.cpp:
36913 (JSC::InternalFunction::finishCreation):
36914 * runtime/InternalFunction.h:
36915 * runtime/JSCell.cpp:
36916 (JSC::JSCell::getCallDataVirtual):
36917 * runtime/JSCell.h:
36918 (JSC::getCallData):
36919 * runtime/JSFunction.cpp:
36920 (JSC::JSFunction::getCallDataVirtual):
36921 * runtime/JSFunction.h:
36922 * runtime/JSGlobalObject.cpp:
36923 (JSC::JSGlobalObject::reset):
36924 (JSC::JSGlobalObject::visitChildren):
36925 * runtime/JSGlobalObject.h:
36926 * runtime/JSONObject.cpp:
36927 (JSC::Stringifier::Stringifier):
36928 (JSC::Stringifier::toJSON):
36929 (JSC::Stringifier::appendStringifiedValue):
36930 * runtime/JSObject.cpp:
36931 (JSC::JSObject::put):
36932 * runtime/JSObject.h:
36933 * runtime/NativeErrorConstructor.cpp:
36934 (JSC::NativeErrorConstructor::getCallDataVirtual):
36935 * runtime/NativeErrorConstructor.h:
36936 * runtime/NumberConstructor.cpp:
36937 (JSC::NumberConstructor::getCallDataVirtual):
36938 * runtime/NumberConstructor.h:
36939 * runtime/ObjectConstructor.cpp:
36940 (JSC::ObjectConstructor::getCallDataVirtual):
36941 * runtime/ObjectConstructor.h:
36942 * runtime/Operations.cpp:
36943 (JSC::jsTypeStringForValue):
36944 (JSC::jsIsObjectType):
36945 (JSC::jsIsFunctionType):
36946 * runtime/PropertySlot.cpp:
36947 (JSC::PropertySlot::functionGetter):
36948 * runtime/RegExpConstructor.cpp:
36949 (JSC::RegExpConstructor::getCallDataVirtual):
36950 * runtime/RegExpConstructor.h:
36951 * runtime/StringConstructor.cpp:
36952 (JSC::StringConstructor::getCallDataVirtual):
36953 * runtime/StringConstructor.h:
36954 * runtime/Structure.h:
36956 2011-10-08 Yuqiang Xian <yuqiang.xian@intel.com>
36958 DFG JIT - only Array predictions can result in unboxed cells in register file
36959 https://bugs.webkit.org/show_bug.cgi?id=69695
36961 Reviewed by Filip Pizlo.
36963 In current DFG JIT, only array predictions can result in unboxed cells
36964 in register file, not for the other cell predictions.
36966 * dfg/DFGSpeculativeJIT.h:
36967 (JSC::DFG::ValueSource::forPrediction):
36969 2011-10-07 Yuqiang Xian <yuqiang.xian@intel.com>
36971 bug fixes for ArrayPush and ArrayPop in 32_64 DFG JIT
36972 https://bugs.webkit.org/show_bug.cgi?id=69696
36974 Reviewed by Filip Pizlo.
36976 On 32-bit, we should use TimesEight (8) instead of ScalePtr (4)
36977 to compute the address of a JS array element.
36979 * dfg/DFGSpeculativeJIT32_64.cpp:
36980 (JSC::DFG::SpeculativeJIT::compile):
36982 2011-10-07 Mark Hahnenberg <mhahnenberg@apple.com>
36984 Add static version of JSCell::deleteProperty
36985 https://bugs.webkit.org/show_bug.cgi?id=69659
36987 Reviewed by Geoffrey Garen.
36989 Added static version of both versions of put to all classes that
36990 override them and changed the virtual versions to call the static
36991 versions. This is the first step in de-virtualizing JSCell::deleteProperty.
36993 * API/JSCallbackObject.h:
36994 * API/JSCallbackObjectFunctions.h:
36995 (JSC::::deleteProperty):
36996 * debugger/DebuggerActivation.cpp:
36997 (JSC::DebuggerActivation::deleteProperty):
36998 * debugger/DebuggerActivation.h:
36999 * runtime/Arguments.cpp:
37000 (JSC::Arguments::deleteProperty):
37001 * runtime/Arguments.h:
37002 * runtime/JSActivation.cpp:
37003 (JSC::JSActivation::deleteProperty):
37004 * runtime/JSActivation.h:
37005 * runtime/JSArray.cpp:
37006 (JSC::JSArray::deleteProperty):
37007 * runtime/JSArray.h:
37008 * runtime/JSCell.cpp:
37009 (JSC::JSCell::deleteProperty):
37010 * runtime/JSCell.h:
37011 * runtime/JSFunction.cpp:
37012 (JSC::JSFunction::deleteProperty):
37013 * runtime/JSFunction.h:
37014 * runtime/JSNotAnObject.cpp:
37015 (JSC::JSNotAnObject::deleteProperty):
37016 * runtime/JSNotAnObject.h:
37017 * runtime/JSObject.cpp:
37018 (JSC::JSObject::deleteProperty):
37019 * runtime/JSObject.h:
37020 * runtime/JSVariableObject.cpp:
37021 (JSC::JSVariableObject::deleteProperty):
37022 * runtime/JSVariableObject.h:
37023 * runtime/RegExpMatchesArray.h:
37024 (JSC::RegExpMatchesArray::deleteProperty):
37025 * runtime/StrictEvalActivation.cpp:
37026 (JSC::StrictEvalActivation::deleteProperty):
37027 * runtime/StrictEvalActivation.h:
37028 * runtime/StringObject.cpp:
37029 (JSC::StringObject::deleteProperty):
37030 * runtime/StringObject.h:
37032 2011-10-07 Mark Hahnenberg <mhahnenberg@apple.com>
37034 Remove getCallDataVirtual methods
37035 https://bugs.webkit.org/show_bug.cgi?id=69186
37037 Reviewed by Geoffrey Garen.
37039 Removed all getCallDataVirtual methods and replaced their call sites
37040 with an explicit lookup in the MethodTable.
37042 * API/JSCallbackFunction.cpp:
37043 * API/JSCallbackFunction.h:
37044 * API/JSCallbackObject.h:
37045 * API/JSCallbackObjectFunctions.h:
37046 * API/JSObjectRef.cpp:
37047 (JSObjectIsFunction):
37048 (JSObjectCallAsFunction):
37049 * JavaScriptCore.exp:
37050 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
37051 * interpreter/Interpreter.cpp:
37052 (JSC::Interpreter::privateExecute):
37053 * jit/JITStubs.cpp:
37054 (JSC::DEFINE_STUB_FUNCTION):
37055 * runtime/ArrayConstructor.cpp:
37056 * runtime/ArrayConstructor.h:
37057 * runtime/BooleanConstructor.cpp:
37058 * runtime/BooleanConstructor.h:
37059 * runtime/DateConstructor.cpp:
37060 * runtime/DateConstructor.h:
37061 * runtime/Error.cpp:
37062 (JSC::createTypeErrorFunction):
37064 Moved StrictModeTypeErrorFunction to Error.h in order to be able to include
37065 the class definition in JSGlobalObject.cpp.
37067 (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction):
37068 (JSC::StrictModeTypeErrorFunction::create):
37069 (JSC::StrictModeTypeErrorFunction::constructThrowTypeError):
37070 (JSC::StrictModeTypeErrorFunction::getConstructData):
37071 (JSC::StrictModeTypeErrorFunction::callThrowTypeError):
37072 (JSC::StrictModeTypeErrorFunction::getCallData):
37073 (JSC::StrictModeTypeErrorFunction::createStructure):
37074 * runtime/ErrorConstructor.cpp:
37075 * runtime/ErrorConstructor.h:
37076 * runtime/FunctionConstructor.cpp:
37077 * runtime/FunctionConstructor.h:
37078 * runtime/FunctionPrototype.cpp:
37079 * runtime/FunctionPrototype.h:
37081 To allow subclasses of InternalFunction (e.g. QtRuntimeMethod) to not have
37082 to declare their own ClassInfo if they don't override getCallData, provided
37083 an implementation that calls ASSERT_NOT_REACHED if called, providing roughly the same
37084 functionality as of the pure virtual method InternalFunction used to have.
37085 Also made this new implementation protected rather than private for the same reason.
37086 Also added an ASSERT in InternalFunction::finishCreation to make sure that whatever
37087 object is being created provides their own implementation of getCallData. This
37088 just makes execution fail earlier in a place where the source of the error is
37089 easy to trace. These ASSERTs are better than putting a null in the MethodTable because
37090 they appear much more intentional to anybody who fails to provide their own
37091 implementation or who tries to explicitly call InternalFunction::getCallData.
37092 * runtime/InternalFunction.cpp:
37093 (JSC::InternalFunction::finishCreation):
37094 (JSC::InternalFunction::getCallData):
37095 * runtime/InternalFunction.h:
37096 * runtime/JSCell.cpp:
37097 * runtime/JSCell.h:
37098 * runtime/JSFunction.cpp:
37099 * runtime/JSFunction.h:
37101 Added a global structure to JSGlobalObject for StrictModeTypeErrorFunction to enable
37102 it to be reused rather than creating a new Structure every time we instantiate it.
37103 * runtime/JSGlobalObject.cpp:
37104 (JSC::JSGlobalObject::reset):
37105 (JSC::JSGlobalObject::visitChildren):
37106 * runtime/JSGlobalObject.h:
37107 (JSC::JSGlobalObject::strictModeTypeErrorFunctionStructure):
37108 * runtime/JSONObject.cpp:
37109 (JSC::Stringifier::Stringifier):
37110 (JSC::Stringifier::toJSON):
37111 (JSC::Stringifier::appendStringifiedValue):
37112 * runtime/JSObject.cpp:
37113 (JSC::JSObject::put):
37114 * runtime/JSObject.h:
37115 (JSC::getCallData):
37116 * runtime/NativeErrorConstructor.cpp:
37117 * runtime/NativeErrorConstructor.h:
37118 * runtime/NumberConstructor.cpp:
37119 * runtime/NumberConstructor.h:
37120 * runtime/ObjectConstructor.cpp:
37121 * runtime/ObjectConstructor.h:
37122 * runtime/Operations.cpp:
37123 (JSC::jsTypeStringForValue):
37124 (JSC::jsIsObjectType):
37125 (JSC::jsIsFunctionType):
37126 * runtime/PropertySlot.cpp:
37127 (JSC::PropertySlot::functionGetter):
37128 * runtime/RegExpConstructor.cpp:
37129 * runtime/RegExpConstructor.h:
37130 * runtime/StringConstructor.cpp:
37131 * runtime/StringConstructor.h:
37132 * runtime/Structure.h:
37134 2011-10-07 Oliver Hunt <oliver@apple.com>
37136 Add missing break statement.
37138 Reviewed by Gavin Barraclough.
37140 * dfg/DFGPropagator.cpp:
37141 (JSC::DFG::Propagator::propagateNodePredictions):
37143 2011-10-07 Oliver Hunt <oliver@apple.com>
37145 Support some string intrinsics in the DFG JIT
37146 https://bugs.webkit.org/show_bug.cgi?id=69678
37148 Reviewed by Gavin Barraclough.
37150 Add support for charAt and charCodeAt intrinsics in the DFG.
37152 * create_hash_table:
37153 * dfg/DFGByteCodeParser.cpp:
37154 (JSC::DFG::ByteCodeParser::handleIntrinsic):
37155 * dfg/DFGIntrinsic.h:
37157 * dfg/DFGPropagator.cpp:
37158 (JSC::DFG::Propagator::propagateNodePredictions):
37159 (JSC::DFG::Propagator::performNodeCSE):
37160 * dfg/DFGSpeculativeJIT.cpp:
37161 (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt):
37162 * dfg/DFGSpeculativeJIT.h:
37163 * dfg/DFGSpeculativeJIT32_64.cpp:
37164 (JSC::DFG::SpeculativeJIT::compile):
37165 * dfg/DFGSpeculativeJIT64.cpp:
37166 (JSC::DFG::SpeculativeJIT::compile):
37168 2011-10-07 Mark Hahnenberg <mhahnenberg@apple.com>
37170 Add static version of JSCell::put
37171 https://bugs.webkit.org/show_bug.cgi?id=69382
37173 Reviewed by Geoffrey Garen.
37175 Added static version of both versions of put to all classes that
37176 override them and changed the virtual versions to call the static
37179 * API/JSCallbackObject.h:
37180 * API/JSCallbackObjectFunctions.h:
37182 * JavaScriptCore.exp:
37183 * debugger/DebuggerActivation.cpp:
37184 (JSC::DebuggerActivation::put):
37185 * debugger/DebuggerActivation.h:
37186 * runtime/Arguments.cpp:
37187 (JSC::Arguments::put):
37188 * runtime/Arguments.h:
37189 * runtime/JSActivation.cpp:
37190 (JSC::JSActivation::put):
37191 * runtime/JSActivation.h:
37192 * runtime/JSArray.cpp:
37193 (JSC::JSArray::put):
37194 * runtime/JSArray.h:
37195 * runtime/JSByteArray.cpp:
37196 (JSC::JSByteArray::put):
37197 * runtime/JSByteArray.h:
37198 * runtime/JSCell.cpp:
37199 (JSC::JSCell::put):
37200 * runtime/JSCell.h:
37201 * runtime/JSFunction.cpp:
37202 (JSC::JSFunction::put):
37203 * runtime/JSFunction.h:
37204 * runtime/JSGlobalObject.cpp:
37205 (JSC::JSGlobalObject::put):
37206 * runtime/JSGlobalObject.h:
37207 * runtime/JSNotAnObject.cpp:
37208 (JSC::JSNotAnObject::put):
37209 * runtime/JSNotAnObject.h:
37210 * runtime/JSObject.cpp:
37211 (JSC::JSObject::put):
37212 * runtime/JSObject.h:
37213 * runtime/JSStaticScopeObject.cpp:
37214 (JSC::JSStaticScopeObject::put):
37215 * runtime/JSStaticScopeObject.h:
37216 * runtime/ObjectPrototype.cpp:
37217 (JSC::ObjectPrototype::put):
37218 * runtime/ObjectPrototype.h:
37219 * runtime/RegExpConstructor.cpp:
37220 (JSC::RegExpConstructor::put):
37221 * runtime/RegExpConstructor.h:
37222 * runtime/RegExpMatchesArray.h:
37223 (JSC::RegExpMatchesArray::put):
37224 * runtime/RegExpObject.cpp:
37225 (JSC::RegExpObject::put):
37226 * runtime/RegExpObject.h:
37227 * runtime/StringObject.cpp:
37228 (JSC::StringObject::put):
37229 * runtime/StringObject.h:
37231 2011-10-07 Gavin Barraclough <barraclough@apple.com>
37233 Refactor DFG to make for use of callOperation
37234 https://bugs.webkit.org/show_bug.cgi?id=69672
37236 Reviewed by Oliver Hunt.
37238 * dfg/DFGJITCodeGenerator.h:
37239 (JSC::DFG::callOperation):
37240 - Added new callOperation calls, don't ASSERT flushed (use helpers for unexpected calls, too).
37241 * dfg/DFGOperations.cpp:
37242 * dfg/DFGOperations.h:
37243 - Switch operationNewObject/operationCreateThis to return Cells,
37244 - Added C_DFGOperation_E/C_DFGOperation_EC/J_DFGOperation_EA/J_DFGOperation_EJA call types.
37245 * dfg/DFGSpeculativeJIT32_64.cpp:
37246 (JSC::DFG::SpeculativeJIT::compileLogicalNot):
37247 (JSC::DFG::SpeculativeJIT::emitBranch):
37248 (JSC::DFG::SpeculativeJIT::compile):
37249 - Replace code plating calls to operations to with calls to callOperation.
37250 * dfg/DFGSpeculativeJIT64.cpp:
37251 (JSC::DFG::SpeculativeJIT::compileLogicalNot):
37252 (JSC::DFG::SpeculativeJIT::emitBranch):
37253 (JSC::DFG::SpeculativeJIT::compile):
37254 - Replace code plating calls to operations to with calls to callOperation.
37256 2011-10-07 Oliver Hunt <oliver@apple.com>
37258 Support string indexing in the DFG
37259 https://bugs.webkit.org/show_bug.cgi?id=69671
37261 Reviewed by Gavin Barraclough.
37263 Emit code to support inline indexing of strings
37265 * dfg/DFGSpeculativeJIT.cpp:
37266 (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
37267 Shared code to perform string indexing.
37268 * dfg/DFGSpeculativeJIT.h:
37269 * dfg/DFGSpeculativeJIT32_64.cpp:
37270 (JSC::DFG::SpeculativeJIT::compile):
37271 * dfg/DFGSpeculativeJIT64.cpp:
37272 (JSC::DFG::SpeculativeJIT::compile):
37273 Use compileGetByValOnString if we predict that the base object
37274 is a string in GetByVal.
37275 * runtime/JSString.h:
37276 (JSC::JSString::offsetOfFiberCount):
37277 (JSC::JSString::offsetOfValue):
37279 2011-10-07 Filip Pizlo <fpizlo@apple.com>
37281 DFG ConvertThis speculation logic is wrong
37282 https://bugs.webkit.org/show_bug.cgi?id=69663
37284 Reviewed by Oliver Hunt.
37286 * dfg/DFGPropagator.cpp:
37287 (JSC::DFG::Propagator::fixupNode):
37288 * dfg/DFGSpeculativeJIT32_64.cpp:
37289 (JSC::DFG::SpeculativeJIT::compile):
37290 * dfg/DFGSpeculativeJIT64.cpp:
37291 (JSC::DFG::SpeculativeJIT::compile):
37293 2011-10-07 Oliver Hunt <oliver@apple.com>
37295 Verify that our call speculation is valid.
37297 Reviewed by Filip Pizlo.
37299 Before specialising an intrinsic we need to verify that
37300 we our speculation is correct.
37302 * dfg/DFGByteCodeParser.cpp:
37303 (JSC::DFG::ByteCodeParser::parseBlock):
37305 2011-10-07 Brent Fulgham <bfulgham@webkit.org>
37307 [WinCairo] Unreviewed build correction for the build bot.
37309 * JavaScriptCore.vcproj/JavaScriptCore.sln: Add the missing
37310 Release_Cairo_CFLite and Debug_Cairo_CFLite targets so that
37311 build-jsc can find the target it needs to run the JSC tests.
37313 2011-10-07 Oliver Hunt <oliver@apple.com>
37317 * jit/JITCall32_64.cpp:
37318 (JSC::JIT::compileOpCall):
37320 2011-10-07 Oliver Hunt <oliver@apple.com>
37322 Support direct calls to intrinsic functions
37323 https://bugs.webkit.org/show_bug.cgi?id=69646
37325 Reviewed by Gavin Barraclough.
37327 Add support for optimising non-method_check calls
37328 to intrinsic functions (eg. when Math.abs, etc are
37329 cached in local variables).
37331 * bytecode/CodeBlock.h:
37332 (JSC::getCallLinkInfoBytecodeIndex):
37333 Support searching CallLinkInfos by bytecode index
37334 * dfg/DFGByteCodeParser.cpp:
37335 (JSC::DFG::ByteCodeParser::parseBlock):
37336 Add support for linked calls in addition to method_check
37337 when searching for intrinsics
37339 (JSC::DFG::Node::hasFunctionCheckData):
37340 (JSC::DFG::Node::function):
37341 Add ability to store a JSFunction* in a node - this is safe
37342 as the function will be marked by the codeblock we're compiling
37343 * dfg/DFGPropagator.cpp:
37344 (JSC::DFG::Propagator::propagateNodePredictions):
37345 (JSC::DFG::Propagator::checkFunctionElimination):
37346 (JSC::DFG::Propagator::performNodeCSE):
37347 Add support for new CheckFunction node, and implement CSE pass.
37348 * dfg/DFGSpeculativeJIT32_64.cpp:
37349 (JSC::DFG::SpeculativeJIT::compile):
37350 * dfg/DFGSpeculativeJIT64.cpp:
37351 (JSC::DFG::SpeculativeJIT::compile):
37352 Rather trivial implementation of CheckFunction
37354 (JSC::JIT::privateCompile):
37357 (JSC::JIT::compileOpCall):
37358 * jit/JITCall32_64.cpp:
37359 (JSC::JIT::compileOpCall):
37360 Need to propagate bytecode index for calls now.
37362 2011-10-07 Dominic Cooney <dominicc@chromium.org>
37364 [JSC] Disable ThreadRestrictionVerifier for JIT ExecutableMemoryHandles
37365 https://bugs.webkit.org/show_bug.cgi?id=69599
37367 Reviewed by Sam Weinig.
37369 DFG JIT manipulates MetaAllocatorHandles across threads, eg in
37370 allocating JITCode buffers on a background thread to execute a
37371 proxy autoconfiguration PAC file but garbage collecting it in
37372 response to allocation on the main thread. Disabling
37373 ThreadRestrictionVerification until there is a verification scheme
37374 that understands this handoff.
37376 * wtf/MetaAllocator.cpp:
37377 (WTF::MetaAllocator::allocate):
37379 2011-10-06 Filip Pizlo <fpizlo@apple.com>
37381 DFG should not always speculate that ConvertThis is operating on an object
37382 https://bugs.webkit.org/show_bug.cgi?id=69570
37384 Reviewed by Oliver Hunt.
37386 Mostly neutral, but with a slight regression in Kraken since it increases
37387 coverage in DFG and thus reveals some performance pathologies (which I
37388 prefer to think of as performance opportunities, in a good way).
37390 * bytecode/PredictedType.cpp:
37391 (JSC::predictionToString):
37392 * bytecode/PredictedType.h:
37393 (JSC::isOtherPrediction):
37394 (JSC::mergePredictions):
37395 * dfg/DFGPropagator.cpp:
37396 (JSC::DFG::Propagator::propagateNodePredictions):
37397 * dfg/DFGSpeculativeJIT32_64.cpp:
37398 (JSC::DFG::SpeculativeJIT::compile):
37399 * dfg/DFGSpeculativeJIT64.cpp:
37400 (JSC::DFG::SpeculativeJIT::compile):
37402 2011-10-06 Mark Hahnenberg <mhahnenberg@apple.com>
37406 Unreviewed build fix. Weird runtime failures on Windows due to
37407 linking issues caused by the ClassInfo struct in JSByteArray not
37408 being declared with JS_EXPORTDATA.
37410 * runtime/JSByteArray.h:
37412 2011-10-06 Filip Pizlo <fpizlo@apple.com>
37414 Structure does not reset m_previous when pinning the property map
37415 https://bugs.webkit.org/show_bug.cgi?id=69583
37417 Reviewed by Gavin Barraclough.
37419 This is an 0.6% performance improvement in V8, and 0.2% overall.
37421 * runtime/Structure.cpp:
37422 (JSC::Structure::changePrototypeTransition):
37423 (JSC::Structure::despecifyFunctionTransition):
37424 (JSC::Structure::getterSetterTransition):
37425 (JSC::Structure::toDictionaryTransition):
37426 (JSC::Structure::preventExtensionsTransition):
37427 (JSC::Structure::addPropertyWithoutTransition):
37428 (JSC::Structure::removePropertyWithoutTransition):
37429 (JSC::Structure::pin):
37430 * runtime/Structure.h:
37432 2011-10-06 Anders Carlsson <andersca@apple.com>
37434 When building with clang, enable -Wglobal-constructors and -Wexit-time-destructors
37435 https://bugs.webkit.org/show_bug.cgi?id=69586
37437 Reviewed by Darin Adler.
37439 * Configurations/Base.xcconfig:
37440 Add -Wglobal-constructors and -Wexit-time-destructors when building with clang.
37442 * JavaScriptCore.xcodeproj/project.pbxproj:
37443 When building with clang, we don't need to run the check-for-global-initializers and
37444 check-for-exit-time-destructors anymore.
37448 Move interpreterName into runInteractive.
37450 * wtf/StdLibExtras.h:
37451 When building with clang, disable the -Wglobal-constructors and -Wexit-time-destructors
37452 warnings around the variable declaration.
37454 2011-10-06 Anders Carlsson <andersca@apple.com>
37456 Add DEFINE_DEBUG_ONLY_GLOBAL for globals that should be defined in debug builds
37457 https://bugs.webkit.org/show_bug.cgi?id=69584
37459 Reviewed by Darin Adler.
37461 Add DEFINE_DEBUG_ONLY_GLOBAL macro.
37463 * wtf/StdLibExtras.h:
37465 2011-10-06 Oliver Hunt <oliver@apple.com>
37467 Write barrier shouldn't allocate temporaries inside control flow
37468 https://bugs.webkit.org/show_bug.cgi?id=69582
37470 Reviewed by Gavin Barraclough.
37472 Reorder the code to avoid spill-related badness.
37474 * dfg/DFGJITCodeGenerator.cpp:
37475 (JSC::DFG::JITCodeGenerator::writeBarrier):
37477 2011-10-06 Filip Pizlo <fpizlo@apple.com>
37479 DFG::shouldSpeculate methods are too complicated
37480 https://bugs.webkit.org/show_bug.cgi?id=69560
37482 Reviewed by Geoffrey Garen.
37484 Moved shouldSpeculate methods to DFG::Node, and cleaned them up to
37485 just use node predictions.
37487 By itself this would have meant that SpeculativeJIT code would have
37488 had to say things like m_jit.graph()[nodeIndex].shouldSpeculateXYZ().
37489 So this adds an at(NodeIndex) method to JITCodeGenerator. I replaced
37490 all uses of the m_jit.graph()[nodeIndex] idiom with at(nodeIndex).
37492 This is an 0.4% progression overall that shows up in all benchmarks,
37493 for reasons unknown.
37495 * dfg/DFGJITCodeGenerator.h:
37496 (JSC::DFG::JITCodeGenerator::at):
37497 (JSC::DFG::JITCodeGenerator::canReuse):
37498 (JSC::DFG::JITCodeGenerator::isFilled):
37499 (JSC::DFG::JITCodeGenerator::isFilledDouble):
37500 (JSC::DFG::JITCodeGenerator::use):
37501 (JSC::DFG::JITCodeGenerator::silentSpillFPR):
37502 (JSC::DFG::JITCodeGenerator::silentFillGPR):
37503 (JSC::DFG::JITCodeGenerator::silentFillFPR):
37504 (JSC::DFG::detectPeepHoleBranch):
37505 (JSC::DFG::integerResult):
37506 (JSC::DFG::noResult):
37507 (JSC::DFG::cellResult):
37508 (JSC::DFG::jsValueResult):
37509 (JSC::DFG::storageResult):
37510 (JSC::DFG::doubleResult):
37511 (JSC::DFG::initConstantInfo):
37512 (JSC::DFG::appendCallWithExceptionCheck):
37513 * dfg/DFGJITCodeGenerator32_64.cpp:
37514 (JSC::DFG::JITCodeGenerator::fillInteger):
37515 (JSC::DFG::JITCodeGenerator::fillDouble):
37516 (JSC::DFG::JITCodeGenerator::fillJSValue):
37517 (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToNumber):
37518 (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
37519 (JSC::DFG::JITCodeGenerator::nonSpeculativeUInt32ToNumber):
37520 (JSC::DFG::JITCodeGenerator::nonSpeculativeKnownConstantArithOp):
37521 (JSC::DFG::JITCodeGenerator::nonSpeculativeBasicArithOp):
37522 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranchNull):
37523 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
37524 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq):
37525 (JSC::DFG::JITCodeGenerator::emitCall):
37526 * dfg/DFGJITCodeGenerator64.cpp:
37527 (JSC::DFG::JITCodeGenerator::fillInteger):
37528 (JSC::DFG::JITCodeGenerator::fillDouble):
37529 (JSC::DFG::JITCodeGenerator::fillJSValue):
37530 (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
37531 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranchNull):
37532 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
37533 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq):
37534 (JSC::DFG::JITCodeGenerator::emitCall):
37536 (JSC::DFG::Node::shouldSpeculateInteger):
37537 (JSC::DFG::Node::shouldSpeculateDouble):
37538 (JSC::DFG::Node::shouldSpeculateNumber):
37539 (JSC::DFG::Node::shouldNotSpeculateInteger):
37540 (JSC::DFG::Node::shouldSpeculateFinalObject):
37541 (JSC::DFG::Node::shouldSpeculateFinalObjectOrOther):
37542 (JSC::DFG::Node::shouldSpeculateArray):
37543 (JSC::DFG::Node::shouldSpeculateArrayOrOther):
37544 (JSC::DFG::Node::shouldSpeculateObject):
37545 (JSC::DFG::Node::shouldSpeculateCell):
37546 (JSC::DFG::Node::canSpeculateInteger):
37547 * dfg/DFGSpeculativeJIT.cpp:
37548 (JSC::DFG::SpeculativeJIT::compilePeepHoleDoubleBranch):
37549 (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
37550 (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
37551 (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
37552 (JSC::DFG::SpeculativeJIT::compile):
37553 (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
37554 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
37555 * dfg/DFGSpeculativeJIT.h:
37556 (JSC::DFG::SpeculativeJIT::isInteger):
37557 (JSC::DFG::SpeculativeJIT::isKnownArray):
37558 (JSC::DFG::SpeculativeJIT::isKnownString):
37559 * dfg/DFGSpeculativeJIT32_64.cpp:
37560 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
37561 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
37562 (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
37563 (JSC::DFG::SpeculativeJIT::convertToDouble):
37564 (JSC::DFG::SpeculativeJIT::compare):
37565 (JSC::DFG::SpeculativeJIT::compileLogicalNot):
37566 (JSC::DFG::SpeculativeJIT::emitBranch):
37567 (JSC::DFG::SpeculativeJIT::compile):
37568 * dfg/DFGSpeculativeJIT64.cpp:
37569 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
37570 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
37571 (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
37572 (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
37573 (JSC::DFG::SpeculativeJIT::compare):
37574 (JSC::DFG::SpeculativeJIT::compileLogicalNot):
37575 (JSC::DFG::SpeculativeJIT::emitBranch):
37576 (JSC::DFG::SpeculativeJIT::compile):
37578 2011-10-06 Gavin Peters <gavinp@chromium.org>
37580 REGRESSION (r96595): First frame in assertion backtraces is no longer labeled "1"
37581 https://bugs.webkit.org/show_bug.cgi?id=69556
37583 Reviewed by Adam Roben.
37585 * wtf/Assertions.cpp:
37587 2011-10-06 Filip Pizlo <fpizlo@apple.com>
37589 DFG implementation of UInt32ToNumber is missing a break statement
37590 https://bugs.webkit.org/show_bug.cgi?id=69552
37592 Reviewed by Oliver Hunt.
37594 * dfg/DFGSpeculativeJIT32_64.cpp:
37595 (JSC::DFG::SpeculativeJIT::compile):
37596 * dfg/DFGSpeculativeJIT64.cpp:
37597 (JSC::DFG::SpeculativeJIT::compile):
37599 2011-10-06 Gavin Barraclough <barraclough@apple.com>
37601 Unreviewed build fix for DFG JIT 32_64 release builds.
37603 * dfg/DFGJITCompiler.cpp:
37604 * dfg/DFGJITCompiler.h:
37605 * dfg/DFGJITCompiler32_64.cpp:
37606 - Remove three unused methods.
37608 2011-10-06 Gavin Barraclough <barraclough@apple.com>
37610 DFG JIT 32_64 should check type of values being filled by fillSpeculateInt
37611 https://bugs.webkit.org/show_bug.cgi?id=69549
37613 Reviewed by Oliver Hunt.
37615 This breaks sunspider/3d-cube.
37617 * dfg/DFGSpeculativeJIT32_64.cpp:
37618 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
37619 - Speculation check on the tag.
37621 2011-10-06 Mark Hahnenberg <mhahnenberg@apple.com>
37623 Snow Leopard build fix
37625 Unreviewed build fix
37627 * JavaScriptCore.exp:
37629 2011-10-05 Gavin Barraclough <barraclough@apple.com>
37631 Add explicit JSGlobalThis type.
37632 https://bugs.webkit.org/show_bug.cgi?id=69478
37634 Reviewed by Darin Adler.
37636 JSC supports a split global object, as used by WebCore for the Window. As a stage
37637 of making this visible to JSC, make it so that if the global this value is not the
37638 global object itself, it must be a subclass of JSGlobalThis.
37640 * API/JSCallbackObjectFunctions.h:
37641 (JSC::::finishCreation):
37642 - Don't pass the thisValue to JSGlobalObject::finishCreation.
37643 * JavaScriptCore.xcodeproj/project.pbxproj:
37644 - Added JSGlobalThis.h
37646 (GlobalObject::finishCreation):
37647 - Don't pass the thisValue to JSGlobalObject::finishCreation.
37648 * runtime/JSGlobalObject.h:
37649 (JSC::JSGlobalObject::create):
37650 (JSC::JSGlobalObject::finishCreation):
37651 - finishCreation takes a JSGlobalThis, or thisValue is implicit.
37652 * runtime/JSGlobalThis.h: Added.
37653 (JSC::JSGlobalThis::create):
37654 (JSC::JSGlobalThis::JSGlobalThis):
37655 (JSC::JSGlobalThis::finishCreation):
37656 - Thin wrapper on JSNonFinalObject to allow type checking.
37658 (GlobalObject::finishCreation):
37659 - Don't pass the thisValue to JSGlobalObject::finishCreation.
37661 2011-10-06 Mark Hahnenberg <mhahnenberg@apple.com>
37663 JSC objects need to know their own cell size at runtime.
37664 https://bugs.webkit.org/show_bug.cgi?id=69390
37666 Reviewed by Geoffrey Garen.
37668 Added the cellSize field to ClassInfo and the static calculation of
37669 size of each class to the CREATE_METHOD_TABLE macro, which will be
37670 renamed in a followup patch to make its name match its broader use.
37672 Also added a few ClassInfo structs so that each object that is allocated has its
37675 * JavaScriptCore.exp:
37676 * runtime/ClassInfo.h:
37678 Changed JSByteArray s_defaultInfo to s_info so that the template will get the
37679 correct ClassInfo struct from it when it's allocated.
37680 * runtime/JSByteArray.cpp:
37681 * runtime/JSByteArray.h:
37682 * runtime/JSCell.h:
37683 (JSC::allocateCell):
37684 * runtime/JSNotAnObject.cpp:
37685 * runtime/JSNotAnObject.h:
37686 * runtime/JSObject.cpp:
37687 * runtime/JSObject.h:
37688 (JSC::JSCell::cellSize):
37689 * runtime/JSStaticScopeObject.cpp:
37690 * runtime/JSStaticScopeObject.h:
37691 * runtime/StrictEvalActivation.cpp:
37692 * runtime/StrictEvalActivation.h:
37694 2011-10-06 Gavin Peters <gavinp@chromium.org>
37696 export new stack dumping method
37697 https://bugs.webkit.org/show_bug.cgi?id=69018
37699 The original landing of bug 69018 didn't export WTFGetBacktrace, so that when bug 69453 landed, the first use
37700 of this function, many builds broke. So here we add the exports, so that the function is usable.
37702 Reviewed by Adam Roben.
37704 * JavaScriptCore.exp:
37705 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
37707 2011-10-06 Csaba Osztrogonác <ossy@webkit.org>
37709 REGRESSION(r96347): Build is broken with MSVC compiler if !PLATFORM(WINDOWS)
37710 https://bugs.webkit.org/show_bug.cgi?id=69413
37712 Reviewed by Darin Adler.
37714 * assembler/MacroAssemblerCodeRef.h: Define STDCALL for MSVC in a proper way.
37716 2011-10-05 Filip Pizlo <fpizlo@apple.com>
37718 SpeculativeJIT::isKnownString() is wrong
37719 https://bugs.webkit.org/show_bug.cgi?id=69501
37721 Reviewed by Oliver Hunt.
37723 Removed the wrong case (GetLocal predicted String) and added a case that
37726 * dfg/DFGSpeculativeJIT.h:
37727 (JSC::DFG::SpeculativeJIT::isKnownString):
37729 2011-10-05 Ryosuke Niwa <rniwa@webkit.org>
37731 Windows build fix attempt after r96760.
37733 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
37735 2011-10-05 Chris Rogers <crogers@google.com>
37737 Define a log2f() function for Windows in wtf/MathExtras.h
37738 https://bugs.webkit.org/show_bug.cgi?id=69491
37740 Reviewed by Darin Adler.
37742 * wtf/MathExtras.h:
37745 2011-10-05 Jer Noble <jer.noble@apple.com>
37747 Enable WEB_AUDIO by default in the WebKit/mac port.
37748 https://bugs.webkit.org/show_bug.cgi?id=68587
37750 Reviewed by Simon Fraser.
37752 * Configurations/FeatureDefines.xcconfig:
37755 2011-10-05 Filip Pizlo <fpizlo@apple.com>
37757 Assertion hit in JSC::DFG::SpeculativeJIT::compile on SL bots
37758 https://bugs.webkit.org/show_bug.cgi?id=69346
37760 Reviewed by Oliver Hunt.
37762 Removed the assertion, since it was completely wrong for op_post_inc.
37763 Short of having specialized PostInc nodes in the DFG, there is no
37764 robust way of asserting what this assertion was trying to assert while
37765 also supporting op_post_inc.
37767 * dfg/DFGByteCodeParser.cpp:
37768 (JSC::DFG::ByteCodeParser::parseBlock):
37769 * dfg/DFGSpeculativeJIT64.cpp:
37770 (JSC::DFG::SpeculativeJIT::compile):
37771 * dfg/DFGSpeculativeJIT32_64.cpp:
37772 (JSC::DFG::SpeculativeJIT::compile):
37774 2011-10-05 Geoffrey Garen <ggaren@apple.com>
37776 Added a simpler mechanism for registering one-off finalizers
37777 https://bugs.webkit.org/show_bug.cgi?id=69466
37779 Reviewed by Oliver Hunt.
37782 (JSC::Heap::addFinalizer):
37783 (JSC::Heap::FinalizerOwner::finalize):
37784 * heap/Heap.h: New function for adding an arbitrary finalizer for an
37785 arbitrary cell without declaring any special classes or Handles yourself.
37787 * JavaScriptCore.exp: Fix build.
37789 * runtime/Executable.cpp:
37790 (JSC::ExecutableBase::clearCode):
37791 (JSC::ExecutableBase::clearCodeVirtual):
37792 (JSC::EvalExecutable::clearCodeVirtual):
37793 (JSC::ProgramExecutable::clearCodeVirtual):
37794 (JSC::FunctionExecutable::discardCode):
37795 (JSC::FunctionExecutable::clearCodeVirtual):
37796 * runtime/Executable.h:
37797 (JSC::ExecutableBase::finishCreation): Use the new mechanism for eager
37798 finalization of executables.
37800 * runtime/JSGlobalObject.cpp:
37801 (JSC::JSGlobalObject::clearRareData):
37802 * runtime/JSGlobalObject.h:
37803 (JSC::JSGlobalObject::createRareDataIfNeeded):
37804 (JSC::JSGlobalObject::registerWeakMap): Use the new mechanism for eager
37805 finalization of weak maps.
37807 2011-10-05 Adam Roben <aroben@apple.com>
37809 Ensure RetainPtr::hashTableDeletedValue returns a pointer, not a pointer to a pointer
37811 RetainPtr's behavior of allowing the template parameter to be either a pointer type or a
37812 pointed-to type confused us when we implemented hashTableDeletedValue.
37814 Fixes <http://webkit.org/b/69414> <rdar://problem/10236833> Using RetainPtr as the key type
37815 in HashMap/HashSet fails to compile
37817 Reviewed by John Sullivan.
37820 (WTF::RetainPtr::hashTableDeletedValue): Changed to use the PtrType typedef rather than T*,
37821 since T might itself be a pointer.
37823 (WTF::PtrHash<RetainPtr<P> >): Updated this to use PtrType everywhere, even though T* didn't
37824 seem to be causing a problem.
37826 2011-10-05 Oliver Hunt <oliver@apple.com>
37828 Remove last vestiges of anonymous storage.
37830 Reviewed by Gavin Barraclough.
37832 One anonymous storage function escaped my prior purge of
37833 this feature, this patch removes it.
37835 * runtime/JSGlobalObject.h:
37836 (JSC::JSGlobalObject::finishCreation):
37837 * runtime/JSObject.h:
37839 2011-10-04 Filip Pizlo <fpizlo@apple.com>
37841 DFG should be capable of a broader range of speculations on branch and not
37842 https://bugs.webkit.org/show_bug.cgi?id=69322
37844 Reviewed by Oliver Hunt.
37846 * bytecode/PredictedType.h:
37847 (JSC::isFinalObjectOrOtherPrediction):
37848 (JSC::isArrayOrOtherPrediction):
37849 * dfg/DFGJITCodeGenerator.cpp:
37850 * dfg/DFGJITCodeGenerator.h:
37851 (JSC::DFG::JITCodeGenerator::JITCodeGenerator):
37852 * dfg/DFGJITCodeGenerator32_64.cpp:
37853 (JSC::DFG::JITCodeGenerator::fillDouble):
37854 (JSC::DFG::JITCodeGenerator::fillJSValue):
37855 * dfg/DFGJITCodeGenerator64.cpp:
37856 (JSC::DFG::JITCodeGenerator::fillDouble):
37857 (JSC::DFG::JITCodeGenerator::fillJSValue):
37858 * dfg/DFGOperations.cpp:
37859 * dfg/DFGSpeculativeJIT.h:
37860 (JSC::DFG::SpeculativeJIT::shouldSpeculateFinalObjectOrOther):
37861 (JSC::DFG::SpeculativeJIT::shouldSpeculateArrayOrOther):
37862 (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
37863 * dfg/DFGSpeculativeJIT32_64.cpp:
37864 (JSC::DFG::SpeculativeJIT::emitBranch):
37865 * dfg/DFGSpeculativeJIT64.cpp:
37866 (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
37867 (JSC::DFG::SpeculativeJIT::compileLogicalNot):
37868 (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
37869 (JSC::DFG::SpeculativeJIT::emitBranch):
37871 2011-10-05 Sheriff Bot <webkit.review.bot@gmail.com>
37873 Unreviewed, rolling out r96733.
37874 http://trac.webkit.org/changeset/96733
37875 https://bugs.webkit.org/show_bug.cgi?id=69454
37877 Broke GCC for some reason (Requested by andersca on #webkit).
37879 * wtf/ListHashSet.h:
37880 (WTF::ListHashSetReverseIterator::ListHashSetReverseIterator):
37881 (WTF::ListHashSetReverseIterator::get):
37882 (WTF::ListHashSetReverseIterator::operator*):
37883 (WTF::ListHashSetReverseIterator::operator->):
37884 (WTF::ListHashSetReverseIterator::operator++):
37885 (WTF::ListHashSetReverseIterator::operator--):
37886 (WTF::ListHashSetReverseIterator::operator==):
37887 (WTF::ListHashSetReverseIterator::operator!=):
37888 (WTF::ListHashSetReverseIterator::operator const_reverse_iterator):
37889 (WTF::ListHashSetReverseIterator::node):
37890 (WTF::ListHashSetConstReverseIterator::ListHashSetConstReverseIterator):
37891 (WTF::ListHashSetConstReverseIterator::get):
37892 (WTF::ListHashSetConstReverseIterator::operator*):
37893 (WTF::ListHashSetConstReverseIterator::operator->):
37894 (WTF::ListHashSetConstReverseIterator::operator++):
37895 (WTF::ListHashSetConstReverseIterator::operator--):
37896 (WTF::ListHashSetConstReverseIterator::operator==):
37897 (WTF::ListHashSetConstReverseIterator::operator!=):
37898 (WTF::ListHashSetConstReverseIterator::node):
37901 (WTF::::makeReverseIterator):
37902 (WTF::::makeConstReverseIterator):
37904 2011-10-04 Oliver Hunt <oliver@apple.com>
37906 Add rudimentary filtering to write barriers
37907 https://bugs.webkit.org/show_bug.cgi?id=69392
37909 Reviewed by Filip Pizlo.
37911 Add approximate filtering for write barriers based on the
37912 target's mark bit. Also add some macros to support dumping
37915 * dfg/DFGJITCodeGenerator.cpp:
37916 (JSC::DFG::JITCodeGenerator::markCellCard):
37918 (JSC::GCTimer::GCTimerScope::GCTimerScope):
37919 (JSC::GCTimer::GCTimerScope::~GCTimerScope):
37920 (JSC::Heap::markRoots):
37921 (JSC::Heap::collect):
37922 Add phase timing information.
37923 * heap/MarkedBlock.h:
37924 (JSC::MarkedBlock::offsetOfMarks):
37925 (JSC::MarkedBlock::gatherDirtyCells):
37926 * jit/JITPropertyAccess.cpp:
37927 (JSC::JIT::emitWriteBarrier):
37929 2011-10-05 Anders Carlsson <andersca@apple.com>
37931 Use std::reverse_iterator for ListHashSet reverse iterators
37932 https://bugs.webkit.org/show_bug.cgi?id=69446
37934 Reviewed by Darin Adler.
37936 * wtf/ListHashSet.h:
37937 Use the std::reverse_iterator iterator adaptor for the ListHashSet reverse iterators
37938 and get rid of the ListHashSetReverseIterator and ListHashSetConstReverseIterator classes.
37940 2011-10-04 Gavin Barraclough <barraclough@apple.com>
37942 Make Object.prototype getter/setter methods match ES5 behaviour
37943 https://bugs.webkit.org/show_bug.cgi?id=69393
37945 Reviewed by Sam Weinig.
37947 The rest of Object.prototype no longer substitute Null/Undefined with the global object,
37948 this is old ES3 behaviour. Remove it here too.
37950 * runtime/ObjectPrototype.cpp:
37951 (JSC::objectProtoFuncDefineGetter):
37952 (JSC::objectProtoFuncDefineSetter):
37953 (JSC::objectProtoFuncLookupGetter):
37954 (JSC::objectProtoFuncLookupSetter):
37956 2011-10-05 Patrick Gansterer <paroga@webkit.org>
37958 Get rid of posixThread in MachineStackMarker::Thread
37959 https://bugs.webkit.org/show_bug.cgi?id=54836
37961 Reviewed by Oliver Hunt.
37963 * heap/MachineStackMarker.cpp:
37964 (JSC::MachineThreads::Thread::Thread):
37965 (JSC::getCurrentPlatformThread):
37966 (JSC::equalThread):
37967 (JSC::MachineThreads::addCurrentThread):
37968 (JSC::MachineThreads::removeCurrentThread):
37969 (JSC::MachineThreads::gatherConservativeRoots):
37971 2011-10-04 Geoffrey Garen <ggaren@apple.com>
37973 Removed JSValue::toJSNumber
37974 https://bugs.webkit.org/show_bug.cgi?id=69399
37978 toJSNumber() used to provide an implicit fast path for immediate numbers,
37979 but those fast paths are all explicit now, so it's just cruft.
37981 * interpreter/Interpreter.cpp:
37982 (JSC::Interpreter::privateExecute):
37983 * jit/JITStubs.cpp:
37984 (JSC::DEFINE_STUB_FUNCTION):
37985 * runtime/JSValue.h:
37986 * runtime/JSValueInlineMethods.h:
37988 2011-10-05 Gavin Peters <gavinp@chromium.org>
37990 REGRESSION (r96595): WTFReportBacktrace listed as the top frame in all assertion backtraces
37991 https://bugs.webkit.org/show_bug.cgi?id=69424
37993 Skip an extra frame in WTFReportBacktrace. As well, I now don't count skipped frames in maxFrames,
37994 so I've updated maxFrames to 31, as with one skipped frame the previous value was effectively
37995 31 reported frames.
37997 Reviewed by Adam Roben.
37999 * wtf/Assertions.cpp:
38000 * wtf/Assertions.h:
38002 2011-10-05 Patrick Gansterer <paroga@webkit.org>
38004 Unreviewed WinCE build fix for r96595.
38006 * wtf/Assertions.cpp:
38007 RtlCaptureStackBackTrace() isn't available on WinCE.
38009 2011-10-04 Kent Tamura <tkent@chromium.org>
38011 Introduce feature flags for incomplete input types
38012 https://bugs.webkit.org/show_bug.cgi?id=68971
38014 Reviewed by Hajime Morita.
38016 * Configurations/FeatureDefines.xcconfig:
38017 Add ENABLE_INPUT_TYPE_* flags. They are enabled only for iOS.
38019 2011-10-04 Geoffrey Garen <ggaren@apple.com>
38023 * jit/JITStubs.cpp:
38024 (JSC::DEFINE_STUB_FUNCTION): Use an explicit cast when shortening.
38026 2011-10-04 Mark Hahnenberg <mhahnenberg@apple.com>
38028 Add static ClassInfo structs to classes that override JSCell::getCallData
38029 https://bugs.webkit.org/show_bug.cgi?id=69311
38031 Reviewed by Darin Adler.
38033 Added ClassInfo structs to each class that defined its own getCallData
38034 function but did not already have its own ClassInfo struct. This is a
38035 necessary addition for when we switch over to looking up getCallData from
38036 the MethodTable in ClassInfo rather than doing the virtual call (which we
38037 are removing). These new ClassInfo structs are public because we often
38038 use these structs in other areas of the code to uniquely identify JSC classes and
38039 to enforce runtime invariants based on those class identities using ASSERTs.
38040 Also added new createStructure methods to those classes that didn't have
38041 them so that the new ClassInfo structs would be used when creating the Structures
38044 * runtime/BooleanConstructor.cpp:
38045 * runtime/BooleanConstructor.h:
38046 (JSC::BooleanConstructor::createStructure):
38048 getCallData was not marked as static in StrictModeTypeErrorFunction.
38049 * runtime/Error.cpp:
38050 (JSC::StrictModeTypeErrorFunction::getCallDataVirtual):
38051 (JSC::StrictModeTypeErrorFunction::getCallData):
38052 (JSC::StrictModeTypeErrorFunction::createStructure):
38053 * runtime/ErrorConstructor.cpp:
38054 * runtime/ErrorConstructor.h:
38055 (JSC::ErrorConstructor::createStructure):
38056 * runtime/FunctionConstructor.cpp:
38057 * runtime/FunctionConstructor.h:
38058 (JSC::FunctionConstructor::createStructure):
38059 * runtime/FunctionPrototype.cpp:
38060 * runtime/FunctionPrototype.h:
38062 2011-10-03 Geoffrey Garen <ggaren@apple.com>
38064 Some JSValue cleanup
38065 https://bugs.webkit.org/show_bug.cgi?id=69320
38067 Reviewed by Darin Adler.
38069 No measurable performance change.
38071 Removed some JSValue::get* functions. get* used to be an optimization
38072 when every value operation was a virtual function call: get* would combine
38073 two virtual calls into one. Now, with non-virtual, inlined functions, get*
38074 isn't faster, and may be slightly slower.
38076 Merged getBoolean(bool&) and getBoolean() into asBoolean().
38078 Merged uncheckedGetNumber(), getJSNumber() and getNumber() into
38081 * runtime/JSValue.h:
38082 * runtime/JSValueInlineMethods.h:
38083 (JSC::JSValue::asNumber):
38084 (JSC::JSValue::asBoolean): As promised!
38086 * runtime/NumberPrototype.cpp:
38087 (JSC::toThisNumber):
38088 (JSC::numberProtoFuncToExponential):
38089 (JSC::numberProtoFuncToFixed):
38090 (JSC::numberProtoFuncToPrecision):
38091 (JSC::numberProtoFuncToString):
38092 (JSC::numberProtoFuncToLocaleString):
38093 (JSC::numberProtoFuncValueOf): Removed a bunch of uses of getJSNumber()
38094 by switching to toThisNumber().
38096 * API/JSCallbackObjectFunctions.h:
38099 (JSC::DFG::Graph::valueOfNumberConstant):
38100 (JSC::DFG::Graph::valueOfBooleanConstant):
38101 * dfg/DFGOperations.cpp:
38102 (JSC::DFG::putByVal):
38103 * interpreter/Interpreter.cpp:
38104 (JSC::Interpreter::privateExecute):
38105 * jit/JITStubs.cpp:
38106 (JSC::DEFINE_STUB_FUNCTION):
38107 * runtime/DateInstance.h:
38108 (JSC::DateInstance::internalNumber):
38109 * runtime/FunctionPrototype.cpp:
38110 (JSC::functionProtoFuncBind):
38111 * runtime/JSArray.cpp:
38112 (JSC::compareNumbersForQSort): Replaced getNumber() => isNumber() / asNumber().
38113 getBoolean() => isBoolean() / asBoolean(), uncheckedGetNumber() => asNumber().
38115 * runtime/JSCell.cpp:
38116 * runtime/JSCell.h: Nixed getJSNumber().
38118 * runtime/JSGlobalObjectFunctions.cpp:
38119 (JSC::globalFuncParseInt):
38120 * runtime/JSONObject.cpp:
38122 (JSC::Stringifier::Stringifier):
38123 (JSC::Stringifier::appendStringifiedValue):
38124 * runtime/NumberObject.cpp:
38125 * runtime/NumberObject.h:
38126 (JSC::NumberObject::createStructure):
38127 * runtime/Operations.h:
38128 (JSC::JSValue::equalSlowCaseInline):
38129 (JSC::JSValue::strictEqual):
38132 (JSC::jsAdd): Replaced getNumber() => isNumber() / asNumber().
38133 getBoolean() => isBoolean() / asBoolean(), uncheckedGetNumber() => asNumber().
38135 2011-10-04 Scott Graham <scottmg@chromium.org>
38137 Add GAMEPAD feature flag
38138 https://bugs.webkit.org/show_bug.cgi?id=66859
38140 Reviewed by Darin Fisher.
38142 * Configurations/FeatureDefines.xcconfig:
38144 2011-10-03 Filip Pizlo <fpizlo@apple.com>
38146 JITCodeGenerator should no longer have code that tries too hard
38147 to be both speculative and non-speculative
38148 https://bugs.webkit.org/show_bug.cgi?id=69321
38150 Reviewed by Gavin Barraclough.
38152 Removed m_isSpeculative and speculationCheck() from JITCodeGenerator.
38153 This required moving emitBranch() to SpeculativeJIT, since it was
38154 the main user of that field and method. Other than trvial clean-ups
38155 in emitBranch(), the code is unchanged (and still has some disparity
38156 between 64 and 32_64, and still lacks some obvious optimizations).
38158 * dfg/DFGJITCodeGenerator.cpp:
38159 * dfg/DFGJITCodeGenerator.h:
38160 (JSC::DFG::JITCodeGenerator::JITCodeGenerator):
38161 * dfg/DFGJITCodeGenerator32_64.cpp:
38162 (JSC::DFG::JITCodeGenerator::fillDouble):
38163 (JSC::DFG::JITCodeGenerator::fillJSValue):
38164 * dfg/DFGJITCodeGenerator64.cpp:
38165 (JSC::DFG::JITCodeGenerator::fillDouble):
38166 (JSC::DFG::JITCodeGenerator::fillJSValue):
38167 * dfg/DFGSpeculativeJIT.h:
38168 (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
38169 * dfg/DFGSpeculativeJIT32_64.cpp:
38170 (JSC::DFG::SpeculativeJIT::emitBranch):
38171 * dfg/DFGSpeculativeJIT64.cpp:
38172 (JSC::DFG::SpeculativeJIT::emitBranch):
38174 2011-10-04 David Hyatt <hyatt@apple.com>
38176 https://bugs.webkit.org/show_bug.cgi?id=69372
38178 [CSS3 Regions] Make sure overflow:visible lets content spill out of regions.
38180 Add support for reverse iteration to ListHashSet to support being able to walk them
38183 Reviewed by Anders Carlsson.
38185 * wtf/ListHashSet.h:
38186 (WTF::ListHashSetReverseIterator::ListHashSetReverseIterator):
38187 (WTF::ListHashSetReverseIterator::get):
38188 (WTF::ListHashSetReverseIterator::operator*):
38189 (WTF::ListHashSetReverseIterator::operator->):
38190 (WTF::ListHashSetReverseIterator::operator++):
38191 (WTF::ListHashSetReverseIterator::operator--):
38192 (WTF::ListHashSetReverseIterator::operator==):
38193 (WTF::ListHashSetReverseIterator::operator!=):
38194 (WTF::ListHashSetReverseIterator::operator const_reverse_iterator):
38195 (WTF::ListHashSetReverseIterator::node):
38196 (WTF::ListHashSetConstReverseIterator::ListHashSetConstReverseIterator):
38197 (WTF::ListHashSetConstReverseIterator::get):
38198 (WTF::ListHashSetConstReverseIterator::operator*):
38199 (WTF::ListHashSetConstReverseIterator::operator->):
38200 (WTF::ListHashSetConstReverseIterator::operator++):
38201 (WTF::ListHashSetConstReverseIterator::operator--):
38202 (WTF::ListHashSetConstReverseIterator::operator==):
38203 (WTF::ListHashSetConstReverseIterator::operator!=):
38204 (WTF::ListHashSetConstReverseIterator::node):
38207 (WTF::::makeReverseIterator):
38208 (WTF::::makeConstReverseIterator):
38209 (WTF::::makeConstIterator):
38211 2011-10-04 Gavin Peters <gavinp@chromium.org>
38213 fix gtk breakage caused by changeset 96595
38214 https://bugs.webkit.org/show_bug.cgi?id=69371
38216 ews did not catch build breakage in the gtk WebKitPluginProcess target; this patch removes
38217 the pretty printer on gtk, which should fix the build on that platform.
38219 Reviewed by NOBODY, this is a build fix.
38221 * wtf/Assertions.cpp:
38223 2011-10-04 Sheriff Bot <webkit.review.bot@gmail.com>
38225 Unreviewed, rolling out r96630.
38226 http://trac.webkit.org/changeset/96630
38227 https://bugs.webkit.org/show_bug.cgi?id=69368
38229 Caused assertion failures in validateCell (Requested by
38230 mhahnenberg on #webkit).
38232 * runtime/BooleanConstructor.cpp:
38233 * runtime/BooleanConstructor.h:
38234 * runtime/Error.cpp:
38235 (JSC::StrictModeTypeErrorFunction::getCallDataVirtual):
38236 (JSC::StrictModeTypeErrorFunction::getCallData):
38237 * runtime/ErrorConstructor.cpp:
38238 * runtime/ErrorConstructor.h:
38239 * runtime/FunctionConstructor.cpp:
38240 * runtime/FunctionConstructor.h:
38241 * runtime/FunctionPrototype.cpp:
38242 * runtime/FunctionPrototype.h:
38244 2011-10-04 Mark Hahnenberg <mhahnenberg@apple.com>
38246 Add static ClassInfo structs to classes that override JSCell::getCallData
38247 https://bugs.webkit.org/show_bug.cgi?id=69311
38249 Reviewed by Darin Adler.
38251 Added ClassInfo structs to each class that defined its own getCallData
38252 function but did not already have its own ClassInfo struct. This is a
38253 necessary addition for when we switch over to looking up getCallData from
38254 the MethodTable in ClassInfo rather than doing the virtual call (which we
38255 are removing). These new ClassInfo structs are public because we often
38256 use these structs in other areas of the code to uniquely identify JSC classes and
38257 to enforce runtime invariants based on those class identities using ASSERTs.
38259 * runtime/BooleanConstructor.cpp:
38260 * runtime/BooleanConstructor.h:
38262 getCallData was not marked as static is StrictModeTypeErrorFunction.
38263 * runtime/Error.cpp:
38264 (JSC::StrictModeTypeErrorFunction::getCallDataVirtual):
38265 (JSC::StrictModeTypeErrorFunction::getCallData):
38266 * runtime/ErrorConstructor.cpp:
38267 * runtime/ErrorConstructor.h:
38268 * runtime/FunctionConstructor.cpp:
38269 * runtime/FunctionConstructor.h:
38270 * runtime/FunctionPrototype.cpp:
38271 * runtime/FunctionPrototype.h:
38273 2011-10-04 Ryosuke Niwa <rniwa@webkit.org>
38275 Leopard build fix after r96613.
38279 2011-10-04 Mark Hahnenberg <mhahnenberg@apple.com>
38281 Implicitly add toString and valueOf to prototype when convertToType callback is provided
38282 https://bugs.webkit.org/show_bug.cgi?id=69156
38284 Reviewed by Geoffrey Garen.
38286 Added callbacks for toString and valueOf which are implicitly added to a client object's
38287 prototype if they provide a convertToType callback when declaring their class through
38290 * API/JSCallbackFunction.cpp:
38291 (JSC::JSCallbackFunction::toStringCallback):
38292 (JSC::JSCallbackFunction::valueOfCallback):
38293 * API/JSCallbackFunction.h:
38294 * API/JSClassRef.cpp:
38295 (OpaqueJSClass::prototype):
38296 * API/tests/testapi.js:
38298 2011-10-03 Jon Lee <jonlee@apple.com>
38300 Extend DOM WheelEvent to differentiate between physical and logical scroll directions
38301 https://bugs.webkit.org/show_bug.cgi?id=68959
38302 <rdar://problem/10036688>
38304 Reviewed by Sam Weinig.
38306 * wtf/Platform.h: Added HAVE_INVERTED_WHEEL_EVENTS for Lion and later.
38308 2011-10-04 Csaba Osztrogonác <ossy@webkit.org>
38310 MinGW warning fix after r96286.
38312 Avoid redefining STDCALL, because STDCALL is also defined in mingw32/include/windef.h:
38313 #define __stdcall __attribute__((stdcall))
38314 #define STDCALL __stdcall
38316 Reviewed by Tor Arne Vestbø.
38318 * assembler/MacroAssemblerCodeRef.h:
38320 2011-10-04 Gavin Peters <gavinp@chromium.org>
38322 add more stack dumping methods
38323 https://bugs.webkit.org/show_bug.cgi?id=69018
38325 In addition to WTFReportBacktrace, this adds the cross-platform WTFGetBacktrace, which lets
38326 WebKit programmatically retrieve the current stack. This is useful if you need to add more
38327 reporting to field crash report uploads, if you're tracking down an irreproducable bug,
38330 Reviewed by Darin Adler.
38332 * wtf/Assertions.cpp:
38333 * wtf/Assertions.h:
38335 2011-10-03 Filip Pizlo <fpizlo@apple.com>
38337 DFG should inline Array.push and Array.pop
38338 https://bugs.webkit.org/show_bug.cgi?id=69314
38340 Reviewed by Geoff Garen.
38344 * dfg/DFGSpeculativeJIT32_64.cpp:
38345 (JSC::DFG::SpeculativeJIT::compile):
38347 2011-10-03 Filip Pizlo <fpizlo@apple.com>
38349 DFG should inline Array.push and Array.pop
38350 https://bugs.webkit.org/show_bug.cgi?id=69314
38352 Reviewed by Oliver Hunt.
38354 1% speed-up in V8 due to 6% speed-up in V8-deltablue.
38356 * assembler/MacroAssemblerX86_64.h:
38357 (JSC::MacroAssemblerX86_64::storePtr):
38358 * create_hash_table:
38359 * dfg/DFGByteCodeParser.cpp:
38360 (JSC::DFG::ByteCodeParser::handleIntrinsic):
38361 (JSC::DFG::ByteCodeParser::parseBlock):
38362 * dfg/DFGGraph.cpp:
38363 (JSC::DFG::Graph::dump):
38364 * dfg/DFGIntrinsic.h:
38366 (JSC::DFG::Node::hasHeapPrediction):
38367 * dfg/DFGOperations.cpp:
38368 * dfg/DFGOperations.h:
38369 * dfg/DFGPropagator.cpp:
38370 (JSC::DFG::Propagator::propagateNodePredictions):
38371 (JSC::DFG::Propagator::getByValLoadElimination):
38372 (JSC::DFG::Propagator::getMethodLoadElimination):
38373 * dfg/DFGSpeculativeJIT32_64.cpp:
38374 (JSC::DFG::SpeculativeJIT::compile):
38375 * dfg/DFGSpeculativeJIT64.cpp:
38376 (JSC::DFG::SpeculativeJIT::compile):
38378 2011-10-03 Filip Pizlo <fpizlo@apple.com>
38380 JSC ASSERT Opening the Web Inspector
38381 https://bugs.webkit.org/show_bug.cgi?id=69293
38383 Reviewed by Oliver Hunt.
38385 If a polymorphic access structure list has a duplicated structure, then
38388 * dfg/DFGByteCodeParser.cpp:
38389 (JSC::DFG::ByteCodeParser::parseBlock):
38391 2011-10-03 Gavin Barraclough <barraclough@apple.com>
38393 On X86, switch bucketCount into a register, timeoutCheck into memory
38394 https://bugs.webkit.org/show_bug.cgi?id=69299
38396 Reviewed by Geoff Garen.
38398 We don't have sufficient registers to keep both in registers, and DFG JIT will trample esi;
38399 it doesn't matter if the bucketCount gets stomped on (in fact it may add to randomness!),
38400 but it if the timeoutCheck gets trashed we may make calls out to the timout_check stub
38401 function too frequently (regressing performance). This patch has no perf impact on sunspider.
38403 * JavaScriptCore.xcodeproj/project.pbxproj:
38404 * assembler/MacroAssemblerX86.h:
38405 (JSC::MacroAssemblerX86::branchAdd32):
38406 (JSC::MacroAssemblerX86::branchSub32):
38407 - Added branchSub32 with AbsoluteAddress.
38409 (JSC::JIT::emitTimeoutCheck):
38410 - Keep timeout count in memory on X86.
38411 * jit/JITInlineMethods.h:
38412 (JSC::JIT::emitValueProfilingSite):
38413 - remove X86 specific code, switch bucket count back into a register.
38414 * jit/JITStubs.cpp:
38415 - Stop initializing esi (it is no longer the timeoutCheck!)
38416 * jit/JSInterfaceJIT.h:
38417 - change definition of esi to be the bucketCountRegister.
38418 * runtime/JSGlobalData.cpp:
38419 (JSC::JSGlobalData::JSGlobalData):
38420 * runtime/JSGlobalData.h:
38421 - Add timeoutCount as a property to global data (the counter should be per-thread).
38423 2011-10-03 Filip Pizlo <fpizlo@apple.com>
38425 DFG backends don't have access to per-node predictions from the propagator
38426 https://bugs.webkit.org/show_bug.cgi?id=69291
38428 Reviewed by Oliver Hunt.
38430 Nodes now have two notion of predictions: the heap prediction, which is
38431 what came directly from value profiling, and the propagator's predictions,
38432 which arise out of abstract interpretation. Every node has a propagator
38433 prediction, but not every node has a heap prediction; and there is no
38434 guarantee that a node that has both will keep them consistent as the
38435 propagator may have additional information available to it.
38437 This is performance neutral.
38439 * dfg/DFGGraph.cpp:
38440 (JSC::DFG::Graph::dump):
38442 * dfg/DFGJITCompiler.h:
38443 (JSC::DFG::JITCompiler::getPrediction):
38445 (JSC::DFG::Node::Node):
38446 (JSC::DFG::Node::hasHeapPrediction):
38447 (JSC::DFG::Node::getHeapPrediction):
38448 (JSC::DFG::Node::predictHeap):
38449 (JSC::DFG::Node::prediction):
38450 (JSC::DFG::Node::predict):
38451 * dfg/DFGPropagator.cpp:
38452 (JSC::DFG::Propagator::Propagator):
38453 (JSC::DFG::Propagator::setPrediction):
38454 (JSC::DFG::Propagator::mergePrediction):
38455 (JSC::DFG::Propagator::propagateNodePredictions):
38456 (JSC::DFG::Propagator::fixupNode):
38457 (JSC::DFG::Propagator::isPredictedNumerical):
38458 (JSC::DFG::Propagator::logicalNotIsPure):
38459 (JSC::DFG::Propagator::setReplacement):
38461 2011-10-03 Jer Noble <jer.noble@apple.com>
38463 Unreviewed, rolling out r96526.
38464 http://trac.webkit.org/changeset/96526
38465 https://bugs.webkit.org/show_bug.cgi?id=68587
38467 WEB_AUDIO has numerous 64->32 bit casting warnings, causing
38468 build breakages where -Wall is enabled.
38470 * Configurations/FeatureDefines.xcconfig:
38473 2011-10-03 Gavin Barraclough <barraclough@apple.com>
38475 Unreviewed build fix for DFG JIT 32_64.
38477 * dfg/DFGJITCompiler32_64.cpp:
38478 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
38479 * dfg/DFGSpeculativeJIT32_64.cpp:
38480 (JSC::DFG::SpeculativeJIT::compile):
38482 2011-10-02 Filip Pizlo <fpizlo@apple.com>
38484 DFG should speculate more aggressively on obvious cases on
38485 polymorphic get_by_id
38486 https://bugs.webkit.org/show_bug.cgi?id=69235
38488 Reviewed by Oliver Hunt.
38490 This implements trivial polymorphic get_by_id. It also fixes
38491 problems in the CSE for CheckStructure in the put_by_id
38494 Doing this required knowing whether a polymorphic get_by_id stub
38495 was doing a direct access rather than a call of some kind.
38497 Slight speed-up on Kraken and SunSpider. 0.5% speed-up in the
38498 scaled mean of all benchmarks.
38500 * GNUmakefile.list.am:
38501 * JavaScriptCore.xcodeproj/project.pbxproj:
38502 * bytecode/Instruction.h:
38503 (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set):
38504 (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList):
38505 * dfg/DFGByteCodeParser.cpp:
38506 (JSC::DFG::ByteCodeParser::cellConstant):
38507 (JSC::DFG::ByteCodeParser::parseBlock):
38508 * dfg/DFGGraph.cpp:
38509 (JSC::DFG::Graph::dump):
38511 (JSC::DFG::Graph::addStructureSet):
38512 (JSC::DFG::Graph::addStructureTransitionData):
38514 (JSC::DFG::StructureTransitionData::StructureTransitionData):
38515 (JSC::DFG::Node::hasStructureTransitionData):
38516 (JSC::DFG::Node::structureTransitionData):
38517 (JSC::DFG::Node::hasStructureSet):
38518 (JSC::DFG::Node::structureSet):
38519 * dfg/DFGPropagator.cpp:
38520 (JSC::DFG::Propagator::checkStructureLoadElimination):
38521 (JSC::DFG::Propagator::performNodeCSE):
38522 * dfg/DFGRepatch.cpp:
38523 (JSC::DFG::tryBuildGetByIDList):
38524 (JSC::DFG::tryBuildGetByIDProtoList):
38525 * dfg/DFGSpeculativeJIT32_64.cpp:
38526 (JSC::DFG::SpeculativeJIT::compile):
38527 * dfg/DFGSpeculativeJIT64.cpp:
38528 (JSC::DFG::SpeculativeJIT::compile):
38529 * dfg/DFGStructureSet.h: Added.
38530 (JSC::DFG::StructureSet::StructureSet):
38531 (JSC::DFG::StructureSet::add):
38532 (JSC::DFG::StructureSet::addAll):
38533 (JSC::DFG::StructureSet::remove):
38534 (JSC::DFG::StructureSet::contains):
38535 (JSC::DFG::StructureSet::isSubsetOf):
38536 (JSC::DFG::StructureSet::isSupersetOf):
38537 (JSC::DFG::StructureSet::size):
38538 (JSC::DFG::StructureSet::at):
38539 (JSC::DFG::StructureSet::operator[]):
38540 (JSC::DFG::StructureSet::last):
38541 * jit/JITPropertyAccess.cpp:
38542 (JSC::JIT::privateCompileGetByIdSelfList):
38543 (JSC::JIT::privateCompileGetByIdProtoList):
38544 (JSC::JIT::privateCompileGetByIdChainList):
38545 * jit/JITPropertyAccess32_64.cpp:
38546 (JSC::JIT::privateCompileGetByIdSelfList):
38547 (JSC::JIT::privateCompileGetByIdProtoList):
38548 (JSC::JIT::privateCompileGetByIdChainList):
38549 * jit/JITStubs.cpp:
38550 (JSC::DEFINE_STUB_FUNCTION):
38551 (JSC::getPolymorphicAccessStructureListSlot):
38553 2011-10-03 Jer Noble <jer.noble@apple.com>
38555 Enable WEB_AUDIO by default in the WebKit/mac port.
38556 https://bugs.webkit.org/show_bug.cgi?id=68587
38558 Reviewed by Simon Fraser.
38560 * Configurations/FeatureDefines.xcconfig:
38563 2011-10-03 Carlos Garcia Campos <cgarcia@igalia.com>
38565 [GTK] Fix make distcheck build
38566 https://bugs.webkit.org/show_bug.cgi?id=69243
38568 Reviewed by Martin Robinson.
38570 * GNUmakefile.list.am:
38572 2011-10-03 Pierre Rossi <pierre.rossi@gmail.com>
38574 [Qt] Build fix: Qt::escape is deprecated in Qt5
38575 https://bugs.webkit.org/show_bug.cgi?id=69162
38577 Use QString::toHtmlEscaped in the Qt5 case.
38579 Reviewed by Andreas Kling.
38581 * JavaScriptCore.pri:
38582 * wtf/qt/UtilsQt.h: Added.
38586 2011-10-03 Balazs Kelemen <kbalazs@webkit.org>
38588 libdispatch based ParallelJobs is not enough parallel
38589 https://bugs.webkit.org/show_bug.cgi?id=66378
38591 Reviewed by Zoltan Herczeg.
38593 Use the appropriate libdispatch API for our use case.
38594 Throw away the hard coded limit of parallel threads
38595 and use dispatch_apply with the default priority normal
38596 queue istead of using our own custom serial queue (which
38597 was a misuse of the API). Enabling PARALLEL_JOBS is now
38598 a 60% win (2.63x as fast) on the methanol benchmark
38599 (https://gitorious.org/methanol) with an SVG centric test set
38600 while the old implementation was almost identical (less than 5% win).
38602 * wtf/ParallelJobsLibdispatch.h:
38603 (WTF::ParallelEnvironment::ParallelEnvironment):
38604 (WTF::ParallelEnvironment::execute):
38606 2011-10-02 Zoltan Herczeg <zherczeg@webkit.org>
38608 [Qt]REGRESSION(r95912): It made sputnik tests flakey
38609 https://bugs.webkit.org/show_bug.cgi?id=68990
38611 Reviewed by Geoffrey Garen.
38613 Changing signed char to int in r96354 solved the
38614 problem. However transitionCount still returns
38615 with a signed char and should be changed to int.
38617 * runtime/Structure.h:
38618 (JSC::Structure::transitionCount):
38620 2011-10-02 Filip Pizlo <fpizlo@apple.com>
38622 DFG misses some obvious opportunities for common subexpression elimination
38623 https://bugs.webkit.org/show_bug.cgi?id=69233
38625 Reviewed by Oliver Hunt.
38627 0.7% speed-up on SunSpider.
38629 * dfg/DFGPropagator.cpp:
38630 (JSC::DFG::Propagator::getByValLoadElimination):
38631 (JSC::DFG::Propagator::getMethodLoadElimination):
38632 (JSC::DFG::Propagator::checkStructureLoadElimination):
38633 (JSC::DFG::Propagator::getByOffsetLoadElimination):
38634 (JSC::DFG::Propagator::getPropertyStorageLoadElimination):
38635 (JSC::DFG::Propagator::performNodeCSE):
38637 2011-10-02 Gavin Barraclough <barraclough@apple.com>
38639 Bug 67455 - Different regular expression result
38641 Reviewed by Darin Adler.
38643 Fix a regression introduced in r72140. A return was added to the backtracking loop for
38644 backtrackParentheses with QuantifierNonGreedy, so it always returns after one iteration.
38645 This is incorrect. The additional return should only trigger to force an early return if
38646 an error has occured.
38648 * yarr/YarrInterpreter.cpp:
38649 (JSC::Yarr::Interpreter::matchParentheses):
38650 - Simplify some nested if else logic.
38651 (JSC::Yarr::Interpreter::backtrackParentheses):
38652 - Simplify some nested if else logic.
38653 - Only return early from backtrackParentheses on success/error, not on failure.
38655 2011-10-01 Geoffrey Garen <ggaren@apple.com>
38657 Removed redundant helper functions for allocating Strong handles
38658 https://bugs.webkit.org/show_bug.cgi?id=69218
38660 Reviewed by Sam Weinig.
38663 (JSC::Heap::handleHeap):
38664 * runtime/JSGlobalData.h: Removed these helper functions, since they
38665 just created indirection.
38667 * heap/StrongInlines.h: Added. Broke out a header for inline functions
38668 to resolve circular dependencies created by inlining. I'm told this is
38669 the future for JavaScriptCore.
38671 * GNUmakefile.list.am:
38672 * JavaScriptCore.gypi:
38673 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
38674 * JavaScriptCore.xcodeproj/project.pbxproj: Go forth and build.
38676 * API/JSCallbackObjectFunctions.h:
38678 * runtime/WeakGCMap.h:
38679 (JSC::WeakGCMap::add):
38680 (JSC::WeakGCMap::set):
38681 * runtime/StructureTransitionTable.h:
38682 (JSC::StructureTransitionTable::setSingleTransition):
38690 (JSC::Weak::set): Allocate handles directly instead of going through a
38691 chain of forwarding functions.
38693 * bytecompiler/BytecodeGenerator.cpp:
38694 * runtime/JSGlobalData.cpp:
38695 * runtime/LiteralParser.cpp:
38696 * runtime/RegExpCache.cpp: Updated for header changes.
38698 2011-09-30 Filip Pizlo <fpizlo@apple.com>
38700 All of JSC's heuristics should be in one place for easier tuning
38701 https://bugs.webkit.org/show_bug.cgi?id=69201
38703 Reviewed by Oliver Hunt.
38705 This makes it possible to change tiered compilation heuristics in
38706 one place (Heuristics.cpp) without recompiling the whole project.
38708 It also makes it possible to enable setting heuristics using
38709 environment variables. This is off by default. When turned on, it
38710 makes tuning the system much easier.
38713 * GNUmakefile.list.am:
38714 * JavaScriptCore.pro:
38715 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
38716 * JavaScriptCore.xcodeproj/project.pbxproj:
38717 * bytecode/CodeBlock.cpp:
38718 (JSC::CodeBlock::shouldOptimizeNow):
38719 * bytecode/CodeBlock.h:
38720 * dfg/DFGJITCompiler.cpp:
38721 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
38723 (JSC::JIT::emitOptimizationCheck):
38724 * runtime/Heuristics.cpp: Added.
38725 (JSC::Heuristics::parse):
38726 (JSC::Heuristics::setHeuristic):
38727 (JSC::Heuristics::initializeHeuristics):
38728 * runtime/Heuristics.h: Added.
38729 * runtime/InitializeThreading.cpp:
38730 (JSC::initializeThreadingOnce):
38732 2011-10-01 Oliver Hunt <oliver@apple.com>
38734 Support string length in the DFG
38735 https://bugs.webkit.org/show_bug.cgi?id=69215
38737 Reviewed by Geoff Garen.
38739 Adds a GetStringLength node to the DFG so that we can support
38740 string.length inline.
38743 * dfg/DFGPropagator.cpp:
38744 (JSC::DFG::Propagator::propagateNodePredictions):
38745 (JSC::DFG::Propagator::fixupNode):
38746 (JSC::DFG::Propagator::performNodeCSE):
38747 * dfg/DFGSpeculativeJIT.h:
38748 (JSC::DFG::SpeculativeJIT::isKnownString):
38749 * dfg/DFGSpeculativeJIT32_64.cpp:
38750 (JSC::DFG::SpeculativeJIT::compile):
38751 * dfg/DFGSpeculativeJIT64.cpp:
38752 (JSC::DFG::SpeculativeJIT::compile):
38753 * runtime/JSString.h:
38754 (JSC::JSString::offsetOfLength):
38756 2011-10-01 Yuqiang Xian <yuqiang.xian@intel.com>
38758 JSVALUE32_64 DFG JIT - unboxed integers and cells in register file must be reboxed before exiting from DFG JIT
38759 https://bugs.webkit.org/show_bug.cgi?id=69205
38761 Reviewed by Gavin Barraclough.
38763 If there are unboxed integers and cells in register file (e.g. by SetLocal),
38764 they must be reboxed before exiting from the speculative DFG JIT execution.
38765 This patch also adds a new ValueSourceKind (CellInRegisterFile) and a new
38766 ValueRecoveryTechnique (AlreadyInRegisterFileAsCell).
38768 * dfg/DFGJITCompiler32_64.cpp:
38769 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
38770 * dfg/DFGSpeculativeJIT.cpp:
38771 (JSC::DFG::ValueSource::dump):
38772 (JSC::DFG::ValueRecovery::dump):
38773 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
38774 * dfg/DFGSpeculativeJIT.h:
38775 (JSC::DFG::ValueSource::forPrediction):
38776 (JSC::DFG::ValueRecovery::alreadyInRegisterFileAsUnboxedCell):
38778 2011-10-01 Sheriff Bot <webkit.review.bot@gmail.com>
38780 Unreviewed, rolling out r96421.
38781 http://trac.webkit.org/changeset/96421
38782 https://bugs.webkit.org/show_bug.cgi?id=69206
38784 It broke Qt-WK2 build (Requested by ossy on #webkit).
38786 * JavaScriptCore.pri:
38787 * wtf/qt/UtilsQt.h: Removed.
38790 2011-09-30 Daniel Bates <dbates@webkit.org>
38792 Attempt to fix the Apple Windows and WinCairo Debug builds after
38793 <http://trac.webkit.org/changeset/96446> (https://bugs.webkit.org/show_bug.cgi?id=69203).
38795 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Remove the symbol
38796 ?toStrictThisObject@JSObject@JSC@@UBE?AVJSValue@2@PAVExecState@2@@Z since the
38797 corresponding function, JSValue::toStrictThisObject(), was removed.
38799 2011-09-30 Yuqiang Xian <yuqiang.xian@intel.com>
38801 DFG operation results are not set correctly in JSVALUE32_64 DFG JIT
38802 https://bugs.webkit.org/show_bug.cgi?id=69126
38804 Reviewed by Gavin Barraclough.
38806 The setupResults routine has the bug of reversing the source and destination.
38807 Also some other trivial (but stupid) bugs need to be fixed in JSVALUE32_64 DFG JIT.
38809 * dfg/DFGJITCodeGenerator.h:
38810 (JSC::DFG::setupTwoStubArgs):
38811 (JSC::DFG::setupResults):
38812 * dfg/DFGJITCodeGenerator32_64.cpp:
38813 (JSC::DFG::JITCodeGenerator::fillJSValue):
38814 (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
38815 (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare):
38817 2011-09-30 Gavin Barraclough <barraclough@apple.com>
38819 Remove toStrictThisObject, toThisString, toThisJSString
38820 https://bugs.webkit.org/show_bug.cgi?id=69203
38822 Rubber stamped by Sam Weinig
38824 These are no longer used.
38826 * JavaScriptCore.exp:
38827 * runtime/JSActivation.cpp:
38828 * runtime/JSActivation.h:
38829 * runtime/JSObject.cpp:
38830 * runtime/JSObject.h:
38831 * runtime/JSStaticScopeObject.cpp:
38832 * runtime/JSStaticScopeObject.h:
38833 * runtime/JSValue.h:
38834 * runtime/StrictEvalActivation.cpp:
38835 * runtime/StrictEvalActivation.h:
38837 2011-09-30 Filip Pizlo <fpizlo@apple.com>
38839 DFG does not speculate aggressively enough on put_by_id
38840 https://bugs.webkit.org/show_bug.cgi?id=69114
38842 Reviewed by Oliver Hunt.
38844 This adds new nodes along with optimizations for those nodes:
38846 GetPropertyStorage: CheckStructure used to do both the structure
38847 check and retrieve the storage pointer. Now CheckStructure just
38848 checks the structure, and GetPropertyStorage retrieves the
38851 PutStructure: Changes the structure, and has the expected store
38852 to load optimization with CheckStructure.
38854 PutByOffset: Directly sets the value. Has store to load
38855 optimization with GetByOffset.
38857 * dfg/DFGByteCodeParser.cpp:
38858 (JSC::DFG::ByteCodeParser::cellConstant):
38859 (JSC::DFG::ByteCodeParser::parseBlock):
38860 * dfg/DFGGraph.cpp:
38861 (JSC::DFG::Graph::dump):
38862 * dfg/DFGJITCodeGenerator.cpp:
38863 (JSC::DFG::JITCodeGenerator::writeBarrier):
38864 * dfg/DFGJITCodeGenerator.h:
38866 (JSC::DFG::Node::hasStructure):
38867 (JSC::DFG::Node::hasStorageAccessData):
38868 * dfg/DFGPropagator.cpp:
38869 (JSC::DFG::Propagator::propagateNodePredictions):
38870 (JSC::DFG::Propagator::impureCSE):
38871 (JSC::DFG::Propagator::checkStructureLoadElimination):
38872 (JSC::DFG::Propagator::getByOffsetLoadElimination):
38873 (JSC::DFG::Propagator::getPropertyStorageLoadElimination):
38874 (JSC::DFG::Propagator::eliminate):
38875 (JSC::DFG::Propagator::performNodeCSE):
38876 * dfg/DFGSpeculativeJIT32_64.cpp:
38877 (JSC::DFG::SpeculativeJIT::compile):
38878 * dfg/DFGSpeculativeJIT64.cpp:
38879 (JSC::DFG::SpeculativeJIT::compile):
38881 2011-09-30 Gavin Barraclough <barraclough@apple.com>
38883 StringRecursionChecker should not work in terms of EncodedJSValue
38884 https://bugs.webkit.org/show_bug.cgi?id=69188
38886 Reviewed by Oliver Hunt.
38888 0 is not the empty value on 32_64.
38889 Code that casts literals to EncodedJSValues may be unsafe if we change our internal representation.
38891 * runtime/ArrayPrototype.cpp:
38892 (JSC::arrayProtoFuncToString):
38893 (JSC::arrayProtoFuncToLocaleString):
38894 (JSC::arrayProtoFuncJoin):
38895 * runtime/ErrorPrototype.cpp:
38896 (JSC::errorProtoFuncToString):
38897 * runtime/RegExpPrototype.cpp:
38898 (JSC::regExpProtoFuncToString):
38899 * runtime/StringRecursionChecker.cpp:
38900 (JSC::StringRecursionChecker::throwStackOverflowError):
38901 (JSC::StringRecursionChecker::emptyString):
38902 * runtime/StringRecursionChecker.h:
38903 (JSC::StringRecursionChecker::performCheck):
38904 (JSC::StringRecursionChecker::earlyReturnValue):
38906 2011-09-30 Gavin Barraclough <barraclough@apple.com>
38908 DFG JIT, Branch on integer can always be a 32-bit compare.
38909 https://bugs.webkit.org/show_bug.cgi?id=69174
38911 Reviewed by Sam Weinig.
38913 if (shouldSpeculateInteger(node.child1()) && !isStrictInt32(node.child1())),
38914 the JSVALUE64 JIT will currently compare all 64bits in the register, but in
38915 these cases the DataFormat is always a JS boxed integer. In these cases we
38916 can just compare the low 32bits anyway - no need to check the tag.
38917 This allows the code to be unified with the JSVALUE32_64 JIT.
38919 * dfg/DFGSpeculativeJIT32_64.cpp:
38920 (JSC::DFG::SpeculativeJIT::compile):
38921 * dfg/DFGSpeculativeJIT64.cpp:
38922 (JSC::DFG::SpeculativeJIT::compile):
38924 2011-09-30 Oliver Hunt <oliver@apple.com>
38926 Need a sensible GGC policy
38928 Reviewed by Geoff Garen.
38930 This replaces the existing random collection policy
38931 with a deterministic policy based on nursery size.
38933 * heap/AllocationSpace.cpp:
38934 (JSC::AllocationSpace::allocateSlowCase):
38937 (JSC::Heap::markRoots):
38938 (JSC::Heap::collect):
38940 * heap/MarkedSpace.cpp:
38941 (JSC::MarkedSpace::MarkedSpace):
38942 (JSC::MarkedSpace::resetAllocator):
38943 * heap/MarkedSpace.h:
38944 (JSC::MarkedSpace::nurseryWaterMark):
38945 (JSC::MarkedSpace::allocate):
38947 2011-09-30 Filip Pizlo <fpizlo@apple.com>
38949 DFG 32-bit support for op_call and op_construct causes
38950 run-javascriptcore-tests to fail
38951 https://bugs.webkit.org/show_bug.cgi?id=69171
38953 Reviewed by Gavin Barraclough.
38955 This fixes one obvious bug that was causing test failures (no
38956 support for dummy slow case for op_add in 32_64), and disables
38957 op_call and op_construct by default.
38959 * dfg/DFGCapabilities.h:
38960 (JSC::DFG::canCompileOpcode):
38961 * jit/JITArithmetic32_64.cpp:
38962 (JSC::JIT::emit_op_add):
38963 (JSC::JIT::emitSlow_op_add):
38965 2011-09-30 Geoffrey Garen <ggaren@apple.com>
38967 Crash due to out of bounds read/write in MarkedSpace
38968 https://bugs.webkit.org/show_bug.cgi?id=69148
38970 This was a case of being surprised by a poorly aritulcated cell size limit,
38971 plus an incorrect ASSERT guarding the cell size limit.
38973 Reviewed by Oliver Hunt.
38975 * heap/MarkedSpace.h:
38976 (JSC::MarkedSpace::sizeClassFor): Changed heap size ranges to be inclusive,
38977 since it makes the ranges easier to understand.
38979 Bumped up the max cell size to support the use case in this bug. Since the
38980 atomSize is much bigger than it used to be, there isn't much accounting
38981 cost to handling more size classes.
38983 Switched to FixedArray, to help catch SizeClass indexing bugs in the future.
38985 * heap/MarkedSpace.cpp:
38986 (JSC::MarkedSpace::MarkedSpace):
38987 (JSC::MarkedSpace::resetAllocator):
38988 (JSC::MarkedSpace::canonicalizeCellLivenessData): Updated for size ranges
38991 2011-09-30 Pierre Rossi <pierre.rossi@gmail.com>
38993 [Qt] Build fix: Qt::escape is deprecated in Qt5
38994 https://bugs.webkit.org/show_bug.cgi?id=69162
38996 Use QString::toHtmlEscaped in the Qt5 case.
38998 Reviewed by Andreas Kling.
39000 * JavaScriptCore.pri:
39001 * wtf/qt/UtilsQt.h: Added.
39005 2011-09-30 Yuqiang Xian <yuqiang.xian@intel.com>
39007 Fix bug in getHostCallReturnValue of DFG JIT on X86
39008 https://bugs.webkit.org/show_bug.cgi?id=69133
39010 Reviewed by Gavin Barraclough.
39012 We need to insert the additional argument in the stack slot before
39013 return address instead of simply pushing it afterwards.
39014 Also getHostCallReturnValue* should be attributed as stdcall
39015 to make the stack cleaned up by the callee.
39017 * dfg/DFGOperations.cpp:
39019 2011-09-30 Pierre Rossi <pierre.rossi@gmail.com>
39021 [Qt] wtf header files are unknown to Qt Creator
39022 https://bugs.webkit.org/show_bug.cgi?id=69158
39024 Adding the HEADERS variable in wtf.pri so that
39025 the header files can be accessed easily.
39027 Reviewed by Andreas Kling.
39031 2011-09-30 Gavin Barraclough <barraclough@apple.com>
39033 Merge some more of DFGSpeculativeJIT 32_64/64
39034 https://bugs.webkit.org/show_bug.cgi?id=69164
39036 Reviewed by Oliver Hunt.
39038 * dfg/DFGJITCodeGenerator.h:
39039 * dfg/DFGJITCodeGenerator32_64.cpp:
39040 * dfg/DFGJITCodeGenerator64.cpp:
39041 * dfg/DFGSpeculativeJIT.cpp:
39042 (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
39043 * dfg/DFGSpeculativeJIT.h:
39044 * dfg/DFGSpeculativeJIT32_64.cpp:
39045 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
39046 (JSC::DFG::SpeculativeJIT::compare):
39047 (JSC::DFG::SpeculativeJIT::compileValueAdd):
39048 (JSC::DFG::SpeculativeJIT::compileLogicalNot):
39049 (JSC::DFG::SpeculativeJIT::compile):
39050 * dfg/DFGSpeculativeJIT64.cpp:
39051 (JSC::DFG::SpeculativeJIT::compare):
39052 (JSC::DFG::SpeculativeJIT::compileValueAdd):
39053 (JSC::DFG::SpeculativeJIT::compileLogicalNot):
39054 (JSC::DFG::SpeculativeJIT::compile):
39056 2011-09-30 Mark Hahnenberg <mhahnenberg@apple.com>
39058 Add getCallData to MethodTable in ClassInfo
39059 https://bugs.webkit.org/show_bug.cgi?id=69024
39061 Reviewed by Sam Weinig.
39063 * JavaScriptCore.exp:
39064 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
39066 Added the getCallData to the MethodTable in the ClassInfo struct.
39067 * runtime/ClassInfo.h:
39069 2011-09-29 Yuqiang Xian <yuqiang.xian@intel.com>
39071 Add op_call/op_constructor support to JSVALUE32_64 DFG JIT
39072 https://bugs.webkit.org/show_bug.cgi?id=69120
39074 Reviewed by Gavin Barraclough.
39076 Improve the coverage of JSVALUE32_64 DFG JIT.
39078 * dfg/DFGByteCodeParser.cpp:
39079 (JSC::DFG::ByteCodeParser::parseBlock):
39080 * dfg/DFGCapabilities.h:
39081 (JSC::DFG::canCompileOpcode):
39082 * dfg/DFGJITCodeGenerator.h:
39083 (JSC::DFG::tagOfCallData):
39084 (JSC::DFG::payloadOfCallData):
39085 * dfg/DFGJITCodeGenerator32_64.cpp:
39086 (JSC::DFG::JITCodeGenerator::emitCall):
39088 2011-09-29 Yuqiang Xian <yuqiang.xian@intel.com>
39090 DFG JIT - register not unlocked after usage in ArithDiv
39091 https://bugs.webkit.org/show_bug.cgi?id=69122
39093 Reviewed by Geoffrey Garen.
39095 Some allocated register is not unlocked after the usage in ArithDiv.
39096 Also there's a typo in "ENBALE_DFG_CONSISTENTCY_CHECK".
39099 * dfg/DFGSpeculativeJIT32_64.cpp:
39100 (JSC::DFG::SpeculativeJIT::compile):
39101 * dfg/DFGSpeculativeJIT64.cpp:
39102 (JSC::DFG::SpeculativeJIT::compile):
39104 2011-09-29 Mark Hahnenberg <mhahnenberg@apple.com>
39106 De-virtualize JSCell::toObject
39107 https://bugs.webkit.org/show_bug.cgi?id=68937
39109 Reviewed by Darin Adler.
39111 * JavaScriptCore.exp:
39112 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
39114 De-virtualized JSCell::toObject and changed its implementation to manually check the
39115 cases for JSString and JSObject rather than leaving it up to the virtual method call.
39116 * runtime/JSCell.cpp:
39117 (JSC::JSCell::toObject):
39118 * runtime/JSCell.h:
39120 Removed JSNotAnObject::toObject because the case for JSObject works for it.
39121 Also removed JSObject::toObject because it was essentially the identity function,
39122 which is not necessary since toObject is no longer virtual.
39123 * runtime/JSNotAnObject.cpp:
39124 * runtime/JSNotAnObject.h:
39125 * runtime/JSObject.cpp:
39126 * runtime/JSObject.h:
39128 De-virtualized JSObject::toObject and JSString::toObject.
39129 * runtime/JSString.h:
39131 2011-09-29 Gavin Barraclough <barraclough@apple.com>
39133 Start refactoring DFGSpeculativeJIT
39134 https://bugs.webkit.org/show_bug.cgi?id=69112
39136 Reviewed by Oliver Hunt.
39138 Again, move JSVALUE64 code into a DFJSpeculativeJIT64.cpp
39140 * JavaScriptCore.xcodeproj/project.pbxproj:
39141 * dfg/DFGSpeculativeJIT.cpp:
39142 (JSC::DFG::ValueSource::dump):
39143 (JSC::DFG::ValueRecovery::dump):
39144 (JSC::DFG::OSRExit::OSRExit):
39145 (JSC::DFG::OSRExit::dump):
39146 (JSC::DFG::SpeculativeJIT::compilePeepHoleDoubleBranch):
39147 (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
39148 (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
39149 (JSC::DFG::SpeculativeJIT::compile):
39150 (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
39151 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
39152 * dfg/DFGSpeculativeJIT.h:
39153 (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject):
39154 * dfg/DFGSpeculativeJIT32_64.cpp:
39155 (JSC::DFG::SpeculativeJIT::compare):
39156 * dfg/DFGSpeculativeJIT64.cpp: Copied from Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp.
39157 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
39158 (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
39159 (JSC::DFG::SpeculativeJIT::compile):
39161 2011-09-29 Gavin Barraclough <barraclough@apple.com>
39163 Refactor out trivially duplicated code in DFGJITCodeGenerator.
39164 https://bugs.webkit.org/show_bug.cgi?id=69109
39166 Reviewed by Oliver Hunt.
39168 Some code is trivially redundant between DFGJITCodeGenerator.cpp & DFGJITCodeGenerator32_64.cpp
39170 Basically move a JSVALUE64 specific code into a new DFGJITCodeGenerator64.cpp, leave common code
39171 in DFGJITCodeGenerator.cpp, and remove copies from DFGJITCodeGenerator32_64.cpp.
39173 For some function differences are trivial & make more sense to ifdef individually, and some
39174 Operand methods make more sense left in DFGJITCodeGenerator.cpp alongside similar constructors.
39176 * JavaScriptCore.xcodeproj/project.pbxproj:
39177 * dfg/DFGJITCodeGenerator.cpp:
39178 (JSC::DFG::JITCodeGenerator::isKnownNotNumber):
39179 (JSC::DFG::JITCodeGenerator::isKnownBoolean):
39180 (JSC::DFG::JITCodeGenerator::writeBarrier):
39181 (JSC::DFG::JITCodeGenerator::dump):
39182 (JSC::DFG::JITCodeGenerator::checkConsistency):
39183 (JSC::DFG::GPRTemporary::GPRTemporary):
39184 (JSC::DFG::FPRTemporary::FPRTemporary):
39185 * dfg/DFGJITCodeGenerator32_64.cpp:
39186 * dfg/DFGJITCodeGenerator64.cpp: Copied from Source/JavaScriptCore/dfg/DFGJITCodeGenerator.cpp.
39187 * dfg/DFGJITCompiler.h:
39188 (JSC::DFG::JITCompiler::branchIfNotCell):
39189 * dfg/DFGJITCompilerInlineMethods.h:
39191 2011-09-28 Filip Pizlo <fpizlo@apple.com>
39193 DFG JIT should infer which uses of a variable are not aliased
39194 https://bugs.webkit.org/show_bug.cgi?id=68593
39196 Reviewed by Oliver Hunt.
39198 This separates how a variable is stored (i.e. its virtual register)
39199 from how it's predicted. Each variable now takes a
39200 VariableAccessData as its operand, instead of the virtual register.
39201 The VariableAccessData stores the operand and the prediction. If
39202 multiple uses of a variable are aliased, their VariableAccessDatas
39205 This also adds tracking of which argument values are used. It
39206 correctly observes that an argument value is not used, if the
39207 argument is assigned to inside the function before being used.
39209 This also adds tracking of which variables are live at the head of
39210 a basic block, and separates that from a variable being live at the
39213 Finally, this communicates to both OSR entry and OSR exit code how
39214 a variable is predicted at a particular point in the code, rather
39215 than just communicating how it was predicted in the entire code
39216 block (since with this patch there is no longer the notion of a
39217 variable having just one prediction for a code block).
39219 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
39220 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
39221 * JavaScriptCore.xcodeproj/project.pbxproj:
39222 * bytecode/ActionablePrediction.h: Added.
39223 (JSC::actionablePredictionFromPredictedType):
39224 (JSC::valueObeysPrediction):
39225 (JSC::actionablePredictionToString):
39226 (JSC::ActionablePredictions::ActionablePredictions):
39227 (JSC::ActionablePredictions::setArgument):
39228 (JSC::ActionablePredictions::argument):
39229 (JSC::ActionablePredictions::setVariable):
39230 (JSC::ActionablePredictions::variable):
39231 (JSC::ActionablePredictions::argumentUpperBound):
39232 (JSC::ActionablePredictions::variableUpperBound):
39233 (JSC::ActionablePredictions::pack):
39234 (JSC::ActionablePredictions::packVector):
39235 * bytecode/CodeBlock.h:
39236 * bytecode/PredictionTracker.h:
39237 * dfg/DFGByteCodeParser.cpp:
39238 (JSC::DFG::ByteCodeParser::newVariableAccessData):
39239 (JSC::DFG::ByteCodeParser::getLocal):
39240 (JSC::DFG::ByteCodeParser::setLocal):
39241 (JSC::DFG::ByteCodeParser::getArgument):
39242 (JSC::DFG::ByteCodeParser::setArgument):
39243 (JSC::DFG::ByteCodeParser::parseBlock):
39244 (JSC::DFG::ByteCodeParser::processPhiStack):
39245 (JSC::DFG::ByteCodeParser::parse):
39246 * dfg/DFGDriver.cpp:
39247 (JSC::DFG::compile):
39248 * dfg/DFGGraph.cpp:
39249 (JSC::DFG::Graph::nameOfVariableAccessData):
39250 (JSC::DFG::Graph::dump):
39251 (JSC::DFG::Graph::predictArgumentTypes):
39253 (JSC::DFG::operandIsArgument):
39254 (JSC::DFG::VariableRecord::setFirstTime):
39255 (JSC::DFG::BasicBlock::BasicBlock):
39256 (JSC::DFG::Graph::predict):
39257 (JSC::DFG::Graph::getPrediction):
39258 * dfg/DFGJITCompiler.h:
39259 (JSC::DFG::JITCompiler::noticeOSREntry):
39261 (JSC::DFG::Node::hasVariableAccessData):
39262 (JSC::DFG::Node::hasLocal):
39263 (JSC::DFG::Node::variableAccessData):
39264 (JSC::DFG::Node::local):
39265 * dfg/DFGOSREntry.cpp:
39266 (JSC::DFG::prepareOSREntry):
39267 * dfg/DFGOSREntry.h:
39268 * dfg/DFGPropagator.cpp:
39269 (JSC::DFG::Propagator::propagateNodePredictions):
39270 * dfg/DFGSpeculativeJIT.cpp:
39271 (JSC::DFG::ValueSource::dump):
39272 (JSC::DFG::OSRExit::OSRExit):
39273 (JSC::DFG::SpeculativeJIT::compile):
39274 (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
39275 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
39276 * dfg/DFGSpeculativeJIT.h:
39277 (JSC::DFG::ValueSource::ValueSource):
39278 (JSC::DFG::ValueSource::forPrediction):
39279 (JSC::DFG::ValueSource::isSet):
39280 (JSC::DFG::ValueSource::kind):
39281 (JSC::DFG::ValueSource::nodeIndex):
39282 (JSC::DFG::ValueSource::nodeIndexFromKind):
39283 (JSC::DFG::ValueSource::kindFromNodeIndex):
39284 (JSC::DFG::SpeculativeJIT::isKnownArray):
39285 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
39286 (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
39287 * dfg/DFGSpeculativeJIT32_64.cpp:
39288 (JSC::DFG::OSRExit::OSRExit):
39289 (JSC::DFG::SpeculativeJIT::compile):
39290 (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
39291 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
39292 * wtf/PackedIntVector.h: Added.
39293 (WTF::PackedIntVector::PackedIntVector):
39294 (WTF::PackedIntVector::operator=):
39295 (WTF::PackedIntVector::size):
39296 (WTF::PackedIntVector::ensureSize):
39297 (WTF::PackedIntVector::resize):
39298 (WTF::PackedIntVector::clearAll):
39299 (WTF::PackedIntVector::get):
39300 (WTF::PackedIntVector::set):
39301 (WTF::PackedIntVector::mask):
39303 * wtf/UnionFind.h: Added.
39304 (WTF::UnionFind::UnionFind):
39305 (WTF::UnionFind::find):
39306 (WTF::UnionFind::unify):
39308 2011-09-29 Oliver Hunt <oliver@apple.com>
39312 * heap/AllocationSpace.h:
39314 2011-09-29 Oliver Hunt <oliver@apple.com>
39316 Add logic to collect dirty objects as roots
39317 https://bugs.webkit.org/show_bug.cgi?id=69100
39319 Reviewed by Geoff Garen.
39321 This gives us the ability to walk all the MarkedBlocks in an
39322 AllocationSpace and collect the dirty objects, and then use
39325 I also rearranged the order of these instructions because it
39326 makes them smaller on some platforms with some card sizes.
39328 * dfg/DFGJITCodeGenerator.cpp:
39329 (JSC::DFG::JITCodeGenerator::markCellCard):
39330 * dfg/DFGJITCodeGenerator32_64.cpp:
39331 (JSC::DFG::JITCodeGenerator::markCellCard):
39332 * heap/AllocationSpace.cpp:
39333 Tidy up the write barrier logic a bit.
39334 (JSC::MarkedBlock::gatherDirtyObjects):
39335 (JSC::TakeIfDirty::returnValue):
39336 (JSC::TakeIfDirty::TakeIfDirty):
39337 (JSC::TakeIfDirty::operator()):
39338 (JSC::AllocationSpace::gatherDirtyObjects):
39339 * heap/AllocationSpace.h:
39341 (JSC::::isCardMarked):
39342 (JSC::::clearCard):
39344 (JSC::Heap::markRoots):
39346 (JSC::Heap::writeBarrier):
39347 * heap/MarkStack.cpp:
39348 (JSC::SlotVisitor::visitChildren):
39349 * heap/MarkedBlock.h:
39350 (JSC::MarkedBlock::setDirtyObject):
39351 (JSC::MarkedBlock::addressOfCardFor):
39352 * heap/SlotVisitor.h:
39353 * jit/JITPropertyAccess.cpp:
39354 (JSC::JIT::emitWriteBarrier):
39355 Tidy the write barrier a bit.
39357 2011-09-29 Gavin Barraclough <barraclough@apple.com>
39359 Unreviewed windows build fix.
39361 * assembler/MacroAssemblerCodeRef.h:
39362 * dfg/DFGOperations.h:
39364 2011-09-29 Filip Pizlo <fpizlo@apple.com>
39366 Structure transitions involving many (> 64) properties sometimes cause structure corruption
39367 https://bugs.webkit.org/show_bug.cgi?id=69102
39369 Reviewed by Darin Adler.
39371 Made m_offset an int instead of a signed char. Changed the code to ensure that transitions
39372 don't lead to the dictionary kind being forgotten.
39374 * runtime/Structure.cpp:
39375 (JSC::Structure::Structure):
39376 * runtime/Structure.h:
39378 2011-09-29 Yuqiang Xian <yuqiang.xian@intel.com>
39380 DFG operation calls should be stdcall in Linux JSVALUE32_64 DFG JIT
39381 https://bugs.webkit.org/show_bug.cgi?id=69058
39383 Reviewed by Gavin Barraclough.
39385 Also Fixed the stdcall FunctionPtr constructors to make them compiled correctly on Linux
39387 * assembler/MacroAssemblerCodeRef.h:
39388 (JSC::FunctionPtr::FunctionPtr):
39390 2011-09-29 Mark Hahnenberg <mhahnenberg@apple.com>
39392 De-virtualize JSCell::visitChildrenVirtual and remove all other visitChildrenVirtual methods
39393 https://bugs.webkit.org/show_bug.cgi?id=68839
39395 Reviewed by Geoffrey Garen.
39397 Removed the remaining visitChildrenVirtual methods. This patch completes the process of
39398 de-virtualizing visitChildren.
39400 * API/JSCallbackObject.h:
39401 * JavaScriptCore.exp:
39402 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
39403 * debugger/DebuggerActivation.cpp:
39404 * debugger/DebuggerActivation.h:
39405 * runtime/Arguments.cpp:
39406 * runtime/Arguments.h:
39407 * runtime/Executable.cpp:
39408 * runtime/Executable.h:
39409 * runtime/GetterSetter.cpp:
39410 * runtime/GetterSetter.h:
39411 * runtime/JSActivation.cpp:
39412 * runtime/JSActivation.h:
39413 * runtime/JSArray.cpp:
39414 * runtime/JSArray.h:
39415 * runtime/JSFunction.cpp:
39416 * runtime/JSFunction.h:
39417 * runtime/JSGlobalObject.cpp:
39418 * runtime/JSGlobalObject.h:
39419 * runtime/JSObject.cpp:
39420 * runtime/JSPropertyNameIterator.cpp:
39421 * runtime/JSPropertyNameIterator.h:
39422 * runtime/JSStaticScopeObject.cpp:
39423 * runtime/JSStaticScopeObject.h:
39424 * runtime/JSValue.h:
39425 * runtime/NativeErrorConstructor.cpp:
39426 * runtime/NativeErrorConstructor.h:
39427 * runtime/RegExpObject.cpp:
39428 * runtime/RegExpObject.h:
39429 * runtime/Structure.cpp:
39430 * runtime/Structure.h:
39431 * runtime/StructureChain.cpp:
39432 * runtime/StructureChain.h:
39434 Inlined the method table access and call to the visitChildren function (the only call sites
39435 to visitChildren are here).
39436 * heap/MarkStack.cpp:
39437 (JSC::SlotVisitor::visitChildren):
39439 Changed the field name for the visitChildren function pointer to visitChildren (from
39440 visitChildrenFunctionPtr) to make call sites less verbose.
39441 * runtime/ClassInfo.h:
39443 Discovered JSBoundFunction doesn't have its own ClassInfo (it used JSFunction's ClassInfo) but
39444 overrides visitChildren, so it needs to have its own ClassInfo.
39445 * runtime/JSBoundFunction.cpp:
39446 * runtime/JSBoundFunction.h:
39448 Had to move className up to make sure that the virtual destructor in JSObject wasn't
39449 the first non-inline virtual method in JSObject (as per the comment in the file).
39450 Also moved JSCell::visitChildrenVirtual into JSObject.h in order for it be inline-able
39451 to mitigate the cost of an extra method call.
39453 Also added a convenience accessor function methodTable() to JSCell to return the MethodTable to make
39454 call sites more concise. Implementation is inline in JSObject.h.
39455 * runtime/JSObject.h:
39456 (JSC::JSCell::methodTable):
39457 * runtime/JSCell.h:
39459 Added an out of line virtual destructor to JSWrapperObject and ScopeChainNode to
39460 appease the vtable gods. It refused to compile if there were no virtual methods in
39461 both of these classes due to the presence of a weak vtable pointer.
39462 * runtime/JSWrapperObject.cpp:
39463 (JSC::JSWrapperObject::~JSWrapperObject):
39464 * runtime/JSWrapperObject.h:
39465 * runtime/ScopeChain.cpp:
39466 (JSC::ScopeChainNode::~ScopeChainNode):
39467 * runtime/ScopeChain.h:
39469 2011-09-29 Yuqiang Xian <yuqiang.xian@intel.com>
39471 Bug fixes for CreateThis, NewObject and GetByOffset in JSVALUE32_64 DFG JIT
39472 https://bugs.webkit.org/show_bug.cgi?id=69075
39474 Reviewed by Gavin Barraclough.
39476 * dfg/DFGSpeculativeJIT32_64.cpp:
39477 (JSC::DFG::SpeculativeJIT::compile):
39479 2011-09-29 Yuqiang Xian <yuqiang.xian@intel.com>
39481 JSVALUE32_64 DFG JIT failed to be built on 32-bit Linux due to incorrect overloaded OpInfo constructor
39482 https://bugs.webkit.org/show_bug.cgi?id=69054
39484 Reviewed by Gavin Barraclough.
39486 size_t is equal to uint32_t on most 32-bit platforms, except for Mac OS.
39490 2011-09-28 Filip Pizlo <fpizlo@apple.com>
39492 DFG checkArgumentTypes fails to check boolean predictions
39493 https://bugs.webkit.org/show_bug.cgi?id=69059
39495 Reviewed by Gavin Barraclough.
39497 * dfg/DFGSpeculativeJIT.cpp:
39498 (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
39499 * dfg/DFGSpeculativeJIT32_64.cpp:
39500 (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
39502 2011-09-28 Gavin Barraclough <barraclough@apple.com>
39504 Build fix pt 2 for r96286.
39506 * assembler/MacroAssemblerCodeRef.h:
39508 2011-09-28 Ryosuke Niwa <rniwa@webkit.org>
39510 Build fix attempt for r96286.
39512 * assembler/MacroAssemblerCodeRef.h:
39514 2011-09-28 Gavin Barraclough <barraclough@apple.com>
39516 DFG JIT Operations on 32_64 should use stdcall calling convention.
39517 https://bugs.webkit.org/show_bug.cgi?id=69046
39519 Reviewed by Sam Weinig.
39521 All calls out are expecting stdcall conventions, but the default on OS X are cdecl.
39522 Leave D_DFGOperation_DD calls as the one exception, since we want to be able to link
39523 directly to std library functions like fmod - leave these calls obeying the default
39524 platform calling convention.
39526 * assembler/MacroAssemblerCodeRef.h:
39527 (JSC::FunctionPtr::FunctionPtr):
39528 - Add implicit constructors for std calls.
39529 * dfg/DFGJITCodeGenerator.h:
39530 (JSC::DFG::callOperation):
39531 - Make this work non-Mac platforms.
39532 * dfg/DFGOperations.cpp:
39533 (JSC::DFG::operationPutByValInternal):
39534 * dfg/DFGOperations.h:
39535 - Mark all operations as stdcalls.
39537 2011-09-28 Filip Pizlo <fpizlo@apple.com>
39539 DFG JIT falls back on numerical comparisons when it does not
39540 recognize a prediction
39541 https://bugs.webkit.org/show_bug.cgi?id=68977
39543 Reviewed by Geoffrey Garen.
39545 This fixes both the way comparison implementations are selected. It
39546 also fixes a bug where comparisons other than equality (like < or >)
39547 on objects are compiled as if the comparison was equality.
39549 * dfg/DFGSpeculativeJIT.cpp:
39550 (JSC::DFG::SpeculativeJIT::compare):
39552 2011-09-28 Gavin Barraclough <barraclough@apple.com>
39554 Implement callOperation(D_DFGOperation_DD) for DFG JIT 32_64
39555 https://bugs.webkit.org/show_bug.cgi?id=69026
39557 Reviewed by Sam Weinig.
39559 * assembler/X86Assembler.h:
39560 (JSC::X86Assembler::fstpl):
39561 * dfg/DFGJITCodeGenerator.h:
39562 (JSC::DFG::callOperation):
39564 2011-09-28 Gavin Barraclough <barraclough@apple.com>
39566 Merge bug#68580, bug#68932 for DFG JIT with JSVALUE32_64
39567 https://bugs.webkit.org/show_bug.cgi?id=69017
39569 Reviewed by Oliver Hunt.
39571 * dfg/DFGJITCodeGenerator.h:
39572 (JSC::DFG::callOperation):
39573 * dfg/DFGOperations.cpp:
39574 * dfg/DFGSpeculativeJIT.cpp:
39575 (JSC::DFG::SpeculativeJIT::compile):
39576 * dfg/DFGSpeculativeJIT32_64.cpp:
39577 (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject):
39578 (JSC::DFG::SpeculativeJIT::compile):
39580 2011-09-28 Gavin Barraclough <barraclough@apple.com>
39582 https://bugs.webkit.org/show_bug.cgi?id=64679
39583 Fix bugs in Array.prototype this handling.
39585 Reviewed by Oliver Hunt.
39587 * runtime/ArrayPrototype.cpp:
39588 (JSC::arrayProtoFuncJoin):
39589 (JSC::arrayProtoFuncConcat):
39590 (JSC::arrayProtoFuncPop):
39591 (JSC::arrayProtoFuncPush):
39592 (JSC::arrayProtoFuncReverse):
39593 (JSC::arrayProtoFuncShift):
39594 (JSC::arrayProtoFuncSlice):
39595 (JSC::arrayProtoFuncSort):
39596 (JSC::arrayProtoFuncSplice):
39597 (JSC::arrayProtoFuncUnShift):
39598 (JSC::arrayProtoFuncFilter):
39599 (JSC::arrayProtoFuncMap):
39600 (JSC::arrayProtoFuncEvery):
39601 (JSC::arrayProtoFuncForEach):
39602 (JSC::arrayProtoFuncSome):
39603 (JSC::arrayProtoFuncReduce):
39604 (JSC::arrayProtoFuncReduceRight):
39605 (JSC::arrayProtoFuncIndexOf):
39606 (JSC::arrayProtoFuncLastIndexOf):
39607 - These methods should throw if this value is undefined.
39609 2011-09-27 Yuqiang Xian <yuqiang.xian@intel.com>
39611 Value profiling in baseline JIT for JSVALUE32_64
39612 https://bugs.webkit.org/show_bug.cgi?id=68750
39614 Reviewed by Geoff Garen.
39616 * jit/JITArithmetic32_64.cpp:
39617 (JSC::JIT::emit_op_mul):
39618 (JSC::JIT::emit_op_div):
39619 * jit/JITCall32_64.cpp:
39620 (JSC::JIT::emit_op_call_put_result):
39621 * jit/JITOpcodes32_64.cpp:
39622 (JSC::JIT::emit_op_resolve):
39623 (JSC::JIT::emit_op_resolve_base):
39624 (JSC::JIT::emit_op_resolve_skip):
39625 (JSC::JIT::emit_op_resolve_global):
39626 (JSC::JIT::emitSlow_op_resolve_global):
39627 (JSC::JIT::emit_op_resolve_with_base):
39628 (JSC::JIT::emit_op_resolve_with_this):
39629 * jit/JITPropertyAccess32_64.cpp:
39630 (JSC::JIT::emit_op_method_check):
39631 (JSC::JIT::emit_op_get_by_val):
39632 (JSC::JIT::emitSlow_op_get_by_val):
39633 (JSC::JIT::emit_op_get_by_id):
39634 (JSC::JIT::emitSlow_op_get_by_id):
39635 (JSC::JIT::emit_op_get_scoped_var):
39636 (JSC::JIT::emit_op_get_global_var):
39637 * jit/JITStubCall.h:
39638 (JSC::JITStubCall::callWithValueProfiling):
39640 2011-09-28 Yuqiang Xian <yuqiang.xian@intel.com>
39642 Wrong integer checks in JSVALUE32_64 DFG JIT
39643 https://bugs.webkit.org/show_bug.cgi?id=68985
39645 Reviewed by Geoffrey Garen.
39647 * dfg/DFGJITCodeGenerator32_64.cpp:
39648 (JSC::DFG::JITCodeGenerator::fillDouble):
39649 * dfg/DFGSpeculativeJIT32_64.cpp:
39650 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
39652 2011-09-28 Adam Barth <abarth@webkit.org>
39654 Remove empty directories.
39656 * wtf/brew: Removed.
39657 * wtf/unicode/brew: Removed.
39659 2011-09-27 Filip Pizlo <fpizlo@apple.com>
39661 DFG JIT cannot compile op_new_object, op_new_array,
39662 op_new_array_buffer, or op_new_regexp
39663 https://bugs.webkit.org/show_bug.cgi?id=68580
39665 Reviewed by Oliver Hunt.
39667 This implements all four opcodes, but has op_new_regexp turns off
39668 by default because it unveils some bad speculation logic when
39669 compiling string-validate-input.
39671 With op_new_regexp turned off, this is a 5% win on Kraken and a
39672 0.7% speed-up on V8. Neutral on SunSpider.
39674 * dfg/DFGByteCodeParser.cpp:
39675 (JSC::DFG::ByteCodeParser::parseBlock):
39676 * dfg/DFGCapabilities.h:
39677 (JSC::DFG::canCompileOpcode):
39678 * dfg/DFGJITCodeGenerator.h:
39679 (JSC::DFG::callOperation):
39681 (JSC::DFG::Node::hasConstantBuffer):
39682 (JSC::DFG::Node::startConstant):
39683 (JSC::DFG::Node::numConstants):
39684 (JSC::DFG::Node::hasRegexpIndex):
39685 (JSC::DFG::Node::regexpIndex):
39686 * dfg/DFGOperations.cpp:
39687 * dfg/DFGOperations.h:
39688 * dfg/DFGPropagator.cpp:
39689 (JSC::DFG::Propagator::propagateNodePredictions):
39690 * dfg/DFGSpeculativeJIT.cpp:
39691 (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject):
39692 (JSC::DFG::SpeculativeJIT::compile):
39693 * dfg/DFGSpeculativeJIT.h:
39694 (JSC::DFG::SpeculativeJIT::isKnownArray):
39696 2011-09-27 Filip Pizlo <fpizlo@apple.com>
39698 DFG JIT should speculate more aggressively on reads of array.length
39699 https://bugs.webkit.org/show_bug.cgi?id=68932
39701 Reviewed by Oliver Hunt.
39703 This is a 2% speed-up on Kraken, neutral elsewhere.
39706 * dfg/DFGPropagator.cpp:
39707 (JSC::DFG::Propagator::propagateNodePredictions):
39708 (JSC::DFG::Propagator::fixupNode):
39709 (JSC::DFG::Propagator::performNodeCSE):
39710 * dfg/DFGSpeculativeJIT.cpp:
39711 (JSC::DFG::SpeculativeJIT::compile):
39713 2011-09-27 Gavin Barraclough <barraclough@apple.com>
39715 DFG JIT - merge changes between 95905 - 96175
39716 https://bugs.webkit.org/show_bug.cgi?id=68963
39718 Reviewed by Sam Weinig.
39720 Merge missing changes from bug#68677, bug#68784, bug#68785.
39722 * dfg/DFGJITCompiler32_64.cpp:
39723 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
39724 (JSC::DFG::JITCompiler::compileEntry):
39725 (JSC::DFG::JITCompiler::compileBody):
39726 * dfg/DFGSpeculativeJIT32_64.cpp:
39727 (JSC::DFG::SpeculativeJIT::compile):
39729 2011-09-27 Gavin Barraclough <barraclough@apple.com>
39731 Get JSVALUE32_64 DFG JIT building on OS X.
39732 https://bugs.webkit.org/show_bug.cgi?id=68961
39734 Reviewed by Geoff Garen.
39736 * Merge bug #68763 (DFG JIT should not eagerly initialize integer tags in the register file).
39737 * Forward-declare functions in DFGOperations.cpp
39738 * UNUSED_PARAM for unused arguments
39739 * NO_RETURN for unimplemented function that ASSERT_NOT_REACHED
39740 * Fix argument types handled by OpInfo constructor.
39741 * Use SYMBOL_STRING instead of STRINGIZE for asm symbols.
39742 * Add files to Xcode project.
39744 2011-09-27 Yuqiang Xian <yuqiang.xian@intel.com>
39746 Bug fixes for GetById, PutById, and GetByOffset in JSVALUE32_64 DFG JIT
39747 https://bugs.webkit.org/show_bug.cgi?id=68755
39749 Reviewed by Gavin Barraclough.
39751 We need to load/store and repatch both tag and payload of a property
39752 for GetById/PutById. Also reorder the loads of tag and payload for
39753 GetByOffset as the result tag GPR could reuse the storage GPR.
39755 * bytecode/StructureStubInfo.h:
39756 * dfg/DFGJITCodeGenerator32_64.cpp:
39757 (JSC::DFG::JITCodeGenerator::cachedGetById):
39758 (JSC::DFG::JITCodeGenerator::cachedPutById):
39759 * dfg/DFGJITCompiler.h:
39760 (JSC::DFG::JITCompiler::addPropertyAccess):
39761 (JSC::DFG::JITCompiler::PropertyAccessRecord::PropertyAccessRecord):
39762 * dfg/DFGJITCompiler32_64.cpp:
39763 (JSC::DFG::JITCompiler::link):
39764 * dfg/DFGRepatch.cpp:
39765 (JSC::DFG::dfgRepatchByIdSelfAccess):
39766 * dfg/DFGSpeculativeJIT32_64.cpp:
39767 (JSC::DFG::SpeculativeJIT::compile):
39769 2011-09-24 Gavin Barraclough <barraclough@apple.com>
39771 Macro assembler branch8 & 16 methods vary in treatment of upper bits
39772 https://bugs.webkit.org/show_bug.cgi?id=68301
39774 Reviewed by Sam Weinig.
39776 Fix for branch16 - remove it!
39777 No performance impact.
39779 * assembler/MacroAssembler.h:
39780 * assembler/MacroAssemblerARM.h:
39781 * assembler/MacroAssemblerARMv7.h:
39782 * assembler/MacroAssemblerMIPS.h:
39783 * assembler/MacroAssemblerSH4.h:
39784 * assembler/MacroAssemblerX86Common.h:
39785 * yarr/YarrJIT.cpp:
39786 (JSC::Yarr::YarrGenerator::jumpIfCharNotEquals):
39787 (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
39788 (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed):
39789 (JSC::Yarr::YarrGenerator::generatePatternCharacterGreedy):
39790 (JSC::Yarr::YarrGenerator::backtrackPatternCharacterNonGreedy):
39792 2011-09-27 Mark Hahnenberg <mhahnenberg@apple.com>
39794 Add static version of JSCell::getCallData
39795 https://bugs.webkit.org/show_bug.cgi?id=68741
39797 Reviewed by Darin Adler.
39799 In this patch we just extract the bodies of the virtual getCallData methods
39800 throughout the JSCell inheritance hierarchy out into static methods, which are
39801 now called from the virtual methods. This is an intermediate step in trying to
39802 move the virtual-ness of getCallData into our own method table stored in
39803 ClassInfo. We need to convert the methods to static methods because static methods
39804 can be represented as function pointers rather than pointers to member functions, and
39805 function pointers are smaller and faster to call than pointers to member functions.
39807 * API/JSCallbackFunction.cpp:
39808 (JSC::JSCallbackFunction::getCallDataVirtual):
39809 (JSC::JSCallbackFunction::getCallData):
39810 * API/JSCallbackFunction.h:
39811 * API/JSCallbackObject.h:
39812 * API/JSCallbackObjectFunctions.h:
39813 (JSC::::getCallDataVirtual):
39814 (JSC::::getCallData):
39815 * API/JSObjectRef.cpp:
39816 (JSObjectIsFunction):
39817 (JSObjectCallAsFunction):
39818 * JavaScriptCore.exp:
39819 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
39820 * interpreter/Interpreter.cpp:
39821 (JSC::Interpreter::privateExecute):
39822 * jit/JITStubs.cpp:
39823 (JSC::DEFINE_STUB_FUNCTION):
39824 * runtime/ArrayConstructor.cpp:
39825 (JSC::ArrayConstructor::getCallDataVirtual):
39826 (JSC::ArrayConstructor::getCallData):
39827 * runtime/ArrayConstructor.h:
39828 * runtime/BooleanConstructor.cpp:
39829 (JSC::BooleanConstructor::getCallDataVirtual):
39830 (JSC::BooleanConstructor::getCallData):
39831 * runtime/BooleanConstructor.h:
39832 * runtime/DateConstructor.cpp:
39833 (JSC::DateConstructor::getCallDataVirtual):
39834 (JSC::DateConstructor::getCallData):
39835 * runtime/DateConstructor.h:
39836 * runtime/Error.cpp:
39837 (JSC::StrictModeTypeErrorFunction::getCallDataVirtual):
39838 (JSC::StrictModeTypeErrorFunction::getCallData):
39839 * runtime/ErrorConstructor.cpp:
39840 (JSC::ErrorConstructor::getCallDataVirtual):
39841 (JSC::ErrorConstructor::getCallData):
39842 * runtime/ErrorConstructor.h:
39843 * runtime/FunctionConstructor.cpp:
39844 (JSC::FunctionConstructor::getCallDataVirtual):
39845 (JSC::FunctionConstructor::getCallData):
39846 * runtime/FunctionConstructor.h:
39847 * runtime/FunctionPrototype.cpp:
39848 (JSC::FunctionPrototype::getCallDataVirtual):
39849 (JSC::FunctionPrototype::getCallData):
39850 * runtime/FunctionPrototype.h:
39851 * runtime/InternalFunction.h:
39852 * runtime/JSCell.cpp:
39853 (JSC::JSCell::getCallDataVirtual):
39854 (JSC::JSCell::getCallData):
39855 * runtime/JSCell.h:
39856 (JSC::getCallData):
39857 * runtime/JSFunction.cpp:
39858 (JSC::JSFunction::getCallDataVirtual):
39859 (JSC::JSFunction::getCallData):
39860 * runtime/JSFunction.h:
39861 * runtime/JSONObject.cpp:
39862 (JSC::Stringifier::Stringifier):
39863 (JSC::Stringifier::toJSON):
39864 (JSC::Stringifier::appendStringifiedValue):
39865 * runtime/JSObject.cpp:
39866 (JSC::JSObject::put):
39867 * runtime/NativeErrorConstructor.cpp:
39868 (JSC::NativeErrorConstructor::getCallDataVirtual):
39869 (JSC::NativeErrorConstructor::getCallData):
39870 * runtime/NativeErrorConstructor.h:
39871 * runtime/NumberConstructor.cpp:
39872 (JSC::NumberConstructor::getCallDataVirtual):
39873 (JSC::NumberConstructor::getCallData):
39874 * runtime/NumberConstructor.h:
39875 * runtime/ObjectConstructor.cpp:
39876 (JSC::ObjectConstructor::getCallDataVirtual):
39877 (JSC::ObjectConstructor::getCallData):
39878 * runtime/ObjectConstructor.h:
39879 * runtime/Operations.cpp:
39880 (JSC::jsTypeStringForValue):
39881 (JSC::jsIsObjectType):
39882 (JSC::jsIsFunctionType):
39883 * runtime/PropertySlot.cpp:
39884 (JSC::PropertySlot::functionGetter):
39885 * runtime/RegExpConstructor.cpp:
39886 (JSC::RegExpConstructor::getCallDataVirtual):
39887 (JSC::RegExpConstructor::getCallData):
39888 * runtime/RegExpConstructor.h:
39889 * runtime/StringConstructor.cpp:
39890 (JSC::StringConstructor::getCallDataVirtual):
39891 (JSC::StringConstructor::getCallData):
39892 * runtime/StringConstructor.h:
39894 2011-09-27 Tim Horton <timothy_horton@apple.com>
39896 Rapidly refreshing a feMorphology[erode] with r=0 can sometimes cause display corruption
39897 https://bugs.webkit.org/show_bug.cgi?id=68816
39898 <rdar://problem/10186468>
39900 Reviewed by Simon Fraser.
39902 Add ByteArray::clear, which zeros the memory in the ByteArray.
39905 (WTF::ByteArray::clear): Added.
39907 2011-09-27 Sheriff Bot <webkit.review.bot@gmail.com>
39909 Unreviewed, rolling out r96131.
39910 http://trac.webkit.org/changeset/96131
39911 https://bugs.webkit.org/show_bug.cgi?id=68927
39913 It made 18+ tests crash on all platform (Requested by
39914 Ossy_night on #webkit).
39916 * JavaScriptCore.exp:
39917 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
39918 * interpreter/Interpreter.cpp:
39919 (JSC::Interpreter::throwException):
39920 * interpreter/Interpreter.h:
39922 (GlobalObject::finishCreation):
39924 (JSC::Parser::parse):
39925 * runtime/CommonIdentifiers.h:
39926 * runtime/Error.cpp:
39927 (JSC::addErrorInfo):
39930 2011-09-27 Mark Hahnenberg <mhahnenberg@apple.com>
39932 De-virtualize JSCell::getPrimitiveNumber
39933 https://bugs.webkit.org/show_bug.cgi?id=68851
39935 Reviewed by Darin Adler.
39937 * JavaScriptCore.exp:
39938 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
39940 Changed JSCell::getPrimitiveNumber to manually handle the dispatch for
39941 JSCells (JSObject and JSString in this case).
39942 * runtime/JSCell.cpp:
39943 (JSC::JSCell::getPrimitiveNumber):
39944 * runtime/JSCell.h:
39946 Removed JSNotAnObject::getPrimitiveNumber since its return value doesn't
39947 matter and it already implements defaultValue, so JSObject::getPrimitiveNumber
39948 can cover the case for JSNotAnObject.
39949 * runtime/JSNotAnObject.cpp:
39950 * runtime/JSNotAnObject.h:
39952 De-virtualized JSObject::getPrimitiveNumber and JSString::getPrimitiveNumber
39953 and changed them to be const. Also made JSString::getPrimitiveNumber public
39954 because it needs to be called from JSCell::getPrimitiveNumber and also since it's
39955 no longer virtual, we want people who have a more specific pointer (JSString*
39956 instead of JSCell*) to not have to pay the cost of a virtual method call.
39957 * runtime/JSObject.cpp:
39958 (JSC::JSObject::getPrimitiveNumber):
39959 * runtime/JSObject.h:
39960 * runtime/JSString.cpp:
39961 (JSC::JSString::getPrimitiveNumber):
39962 * runtime/JSString.h:
39964 2011-09-27 Juan Carlos Montemayor Elosua <j.mont@me.com>
39966 Implement Error.stack
39967 https://bugs.webkit.org/show_bug.cgi?id=66994
39969 Reviewed by Oliver Hunt.
39971 This patch utilizes topCallFrame to create a stack trace when
39972 an error is thrown. Users will also be able to use the stack()
39973 command in jsc to get arrays with stack trace information.
39975 * JavaScriptCore.exp:
39976 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
39977 * interpreter/Interpreter.cpp:
39978 (JSC::getCallerLine):
39979 (JSC::getSourceURLFromCallFrame):
39980 (JSC::getStackFrameCodeType):
39981 (JSC::Interpreter::getStackTrace):
39982 (JSC::Interpreter::throwException):
39983 * interpreter/Interpreter.h:
39984 (JSC::StackFrame::toString):
39986 (GlobalObject::finishCreation):
39987 (functionJSCStack):
39989 (JSC::Parser::parse):
39990 * runtime/CommonIdentifiers.h:
39991 * runtime/Error.cpp:
39992 (JSC::addErrorInfo):
39995 2011-09-27 Carlos Garcia Campos <cgarcia@igalia.com>
39997 [GTK] Reorganize header files
39998 https://bugs.webkit.org/show_bug.cgi?id=65616
40000 Reviewed by Martin Robinson.
40002 Install header files under $libwebkitgtkincludedir/JavaScriptCore.
40004 * GNUmakefile.am: Use $libwebkitgtkincludedir.
40005 * javascriptcoregtk.pc.in: Use webkitgtk-<api-version> as include dir.
40007 2011-09-26 Geoffrey Garen <ggaren@apple.com>
40009 REGRESSION (r95912): Conservative marking doesn't filter out pointers to
40010 MarkedBlock metadata
40011 https://bugs.webkit.org/show_bug.cgi?id=68860
40013 Reviewed by Oliver Hunt.
40015 Bencher says no performance change, maybe a 7% speedup on kraken-imaging-darkroom.
40017 * heap/MarkedBlock.h:
40018 (JSC::MarkedBlock::isAtomAligned): Renamed atomMask to atomAlignment mask
40019 because the mask doesn't produce the actual atom number.
40021 (JSC::MarkedBlock::isLiveCell): Testing just for alignment isn't good
40022 enough; we also need to test that a pointer is beyond the metadata section
40023 of a MarkedBlock, to avoid treating random metadata as a JSCell.
40025 2011-09-26 Mark Hahnenberg <mhahnenberg@apple.com>
40027 Make JSCell::toBoolean non-virtual
40028 https://bugs.webkit.org/show_bug.cgi?id=67727
40030 Reviewed by Geoffrey Garen.
40032 JSCell::toBoolean now manually performs the toBoolean check for objects and strings (where
40033 before it was simply virtual and would crash if its implementation was called).
40034 Its descendants in JSObject and JSString have also been made non-virtual. JSCell now
40035 explicitly covers all cases of toBoolean, so having a virtual implementation of
40036 JSCell::toBoolean is no longer necessary. This is part of a larger process of un-virtualizing JSCell.
40038 * JavaScriptCore.exp:
40039 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
40040 * runtime/JSCell.cpp:
40041 * runtime/JSCell.h:
40042 * runtime/JSNotAnObject.cpp:
40043 * runtime/JSNotAnObject.h:
40044 * runtime/JSObject.h:
40045 * runtime/JSString.h:
40046 (JSC::JSCell::toBoolean):
40047 (JSC::JSValue::toBoolean):
40049 2011-09-26 Chris Marrin <cmarrin@apple.com>
40051 Enable requestAnimationFrame on Windows
40052 https://bugs.webkit.org/show_bug.cgi?id=68397
40054 Reviewed by Simon Fraser.
40056 Enabled REQUEST_ANIMATION_FRAME_TIMER for Windows
40060 2011-09-26 Noel Gordon <noel.gordon@gmail.com>
40062 [Chromium] Remove DFGAliasTracker.h references from gyp project files
40063 https://bugs.webkit.org/show_bug.cgi?id=68787
40065 Reviewed by Geoffrey Garen.
40067 DFG/DFGAliasTracker.h was removed in r95389. Cleanup (remove) references
40068 to that file from the gyp project files.
40070 * JavaScriptCore.gypi:
40072 2011-09-26 Zoltan Herczeg <zherczeg@webkit.org>
40074 [Qt]REGRESSION(r95865): It made 4 tests crash
40075 https://bugs.webkit.org/show_bug.cgi?id=68780
40077 Reviewed by Oliver Hunt.
40079 emitJumpSlowCaseIfNotJSCell(...) cannot be moved
40080 away since the next load depends on it.
40082 * jit/JITPropertyAccess32_64.cpp:
40083 (JSC::JIT::emit_op_put_by_val):
40085 2011-09-25 Mark Hahnenberg <mhahnenberg@apple.com>
40087 Add custom vtable struct to ClassInfo struct
40088 https://bugs.webkit.org/show_bug.cgi?id=68567
40090 Reviewed by Oliver Hunt.
40092 Declared/defined the MethodTable struct and added it to the ClassInfo struct.
40093 Also defined the CREATE_METHOD_TABLE macro to generate these method tables
40094 succinctly where they need to be defined.
40096 Also added to it the first function to use this macro, visitChildren.
40098 This is part of the process of getting rid of all C++ virtual methods in JSCell.
40099 Eventually all virtual functions in JSCell that can't easily be converted to
40100 non-virtual functions will be put into this custom vtable structure.
40101 * runtime/ClassInfo.h:
40103 Added the CREATE_METHOD_TABLE macro call as the last argument to each of the
40104 ClassInfo structs declared in these classes. This saves us from having to visit
40105 each s_info definition in the future when we add more methods to the MethodTable.
40106 * API/JSCallbackConstructor.cpp:
40107 * API/JSCallbackFunction.cpp:
40108 * API/JSCallbackObject.cpp:
40109 * JavaScriptCore.exp:
40110 * runtime/Arguments.cpp:
40111 * runtime/ArrayConstructor.cpp:
40112 * runtime/ArrayPrototype.cpp:
40113 * runtime/BooleanObject.cpp:
40114 * runtime/BooleanPrototype.cpp:
40115 * runtime/DateConstructor.cpp:
40116 * runtime/DateInstance.cpp:
40117 * runtime/DatePrototype.cpp:
40118 * runtime/ErrorInstance.cpp:
40119 * runtime/ErrorPrototype.cpp:
40120 * runtime/ExceptionHelpers.cpp:
40121 * runtime/Executable.cpp:
40122 * runtime/GetterSetter.cpp:
40123 * runtime/InternalFunction.cpp:
40124 * runtime/JSAPIValueWrapper.cpp:
40125 * runtime/JSActivation.cpp:
40126 * runtime/JSArray.cpp:
40127 * runtime/JSByteArray.cpp:
40128 * runtime/JSFunction.cpp:
40129 * runtime/JSGlobalObject.cpp:
40130 * runtime/JSONObject.cpp:
40131 * runtime/JSObject.cpp:
40132 * runtime/JSPropertyNameIterator.cpp:
40133 * runtime/JSString.cpp:
40134 * runtime/MathObject.cpp:
40135 * runtime/NativeErrorConstructor.cpp:
40136 * runtime/NumberConstructor.cpp:
40137 * runtime/NumberObject.cpp:
40138 * runtime/NumberPrototype.cpp:
40139 * runtime/ObjectConstructor.cpp:
40140 * runtime/ObjectPrototype.cpp:
40141 * runtime/RegExp.cpp:
40142 * runtime/RegExpConstructor.cpp:
40143 * runtime/RegExpObject.cpp:
40144 * runtime/RegExpPrototype.cpp:
40145 * runtime/ScopeChain.cpp:
40146 * runtime/StringConstructor.cpp:
40147 * runtime/StringObject.cpp:
40148 * runtime/StringPrototype.cpp:
40149 * runtime/Structure.cpp:
40150 * runtime/StructureChain.cpp:
40152 Had to make visitChildren and visitChildrenVirtual protected instead of private
40153 because some of the subclasses of JSWrapperObject need access to JSWrapperObject's
40154 visitChildren function pointer in their vtable since they don't provide their own
40155 implementation. Same for RegExpObject.
40156 * runtime/JSWrapperObject.h:
40157 * runtime/RegExpObject.h:
40159 2011-09-25 Adam Barth <abarth@webkit.org>
40161 Finish removing PLATFORM(BREWMP) by removing associated code
40162 https://bugs.webkit.org/show_bug.cgi?id=68779
40164 Reviewed by Sam Weinig.
40166 * JavaScriptCore.gyp/JavaScriptCore.gyp:
40167 * JavaScriptCore.gypi:
40168 * gyp/JavaScriptCore.gyp:
40170 * wtf/FastMalloc.cpp:
40171 (WTF::fastMallocSize):
40173 * wtf/brew: Removed.
40174 * wtf/brew/MainThreadBrew.cpp: Removed.
40175 * wtf/brew/OwnPtrBrew.cpp: Removed.
40176 * wtf/brew/RefPtrBrew.h: Removed.
40177 * wtf/brew/ShellBrew.h: Removed.
40178 * wtf/brew/StringBrew.cpp: Removed.
40179 * wtf/brew/SystemMallocBrew.h: Removed.
40180 * wtf/unicode/brew: Removed.
40181 * wtf/unicode/brew/UnicodeBrew.cpp: Removed.
40182 * wtf/unicode/brew/UnicodeBrew.h: Removed.
40184 2011-09-25 Filip Pizlo <fpizlo@apple.com>
40186 DFG JIT does not count speculation successes correctly
40187 https://bugs.webkit.org/show_bug.cgi?id=68785
40189 Reviewed by Geoffrey Garen.
40191 * dfg/DFGJITCompiler.cpp:
40192 (JSC::DFG::JITCompiler::compileEntry):
40193 (JSC::DFG::JITCompiler::compileBody):
40194 * dfg/DFGOperations.cpp:
40196 2011-09-25 Filip Pizlo <fpizlo@apple.com>
40198 DFG support for op_resolve_global is not enabled
40199 https://bugs.webkit.org/show_bug.cgi?id=68786
40201 Reviewed by Geoffrey Garen.
40203 * dfg/DFGCapabilities.h:
40204 (JSC::DFG::canCompileOpcode):
40206 2011-09-25 Filip Pizlo <fpizlo@apple.com>
40208 DFG static prediction code is no longer needed and should be removed
40209 https://bugs.webkit.org/show_bug.cgi?id=68784
40211 Reviewed by Oliver Hunt.
40213 This gets rid of static prediction code, and ensures that we do not
40214 try to compile code where dynamic predictions are not available.
40215 This is accomplished by immediately performing an OSR exit wherever
40216 a value is retrieved for which no predictions exist.
40218 This also adds value profiling for this on functions used for calls.
40220 The heuristics for deciding when to optimize code are also tweaked,
40221 since it is now profitable to optimize sooner. This may need to be
40222 tweaked further, but this patch only makes minimal changes.
40224 This results in a 16% speed-up on Kraken/ai-astar, leading to a 3%
40225 overall win on Kraken. It's neutral elsewhere.
40227 * bytecode/CodeBlock.cpp:
40228 (JSC::CodeBlock::shouldOptimizeNow):
40229 (JSC::CodeBlock::dumpValueProfiles):
40230 * bytecode/CodeBlock.h:
40231 * bytecode/PredictedType.cpp:
40232 (JSC::predictionToString):
40233 * bytecode/PredictedType.h:
40234 (JSC::isCellPrediction):
40235 (JSC::isObjectPrediction):
40236 (JSC::isFinalObjectPrediction):
40237 (JSC::isStringPrediction):
40238 (JSC::isArrayPrediction):
40239 (JSC::isInt32Prediction):
40240 (JSC::isDoublePrediction):
40241 (JSC::isNumberPrediction):
40242 (JSC::isBooleanPrediction):
40243 (JSC::mergePredictions):
40244 * bytecode/PredictionTracker.h:
40245 (JSC::PredictionTracker::predictArgument):
40246 (JSC::PredictionTracker::predict):
40247 (JSC::PredictionTracker::predictGlobalVar):
40248 * bytecode/ValueProfile.cpp:
40249 (JSC::ValueProfile::computeUpdatedPrediction):
40250 * dfg/DFGByteCodeParser.cpp:
40251 (JSC::DFG::ByteCodeParser::set):
40252 (JSC::DFG::ByteCodeParser::addCall):
40253 (JSC::DFG::ByteCodeParser::getPrediction):
40254 (JSC::DFG::ByteCodeParser::parseBlock):
40255 * dfg/DFGGraph.cpp:
40256 (JSC::DFG::Graph::predictArgumentTypes):
40258 (JSC::DFG::Graph::predict):
40259 (JSC::DFG::Graph::predictGlobalVar):
40260 (JSC::DFG::Graph::getMethodCheckPrediction):
40261 (JSC::DFG::Graph::getJSConstantPrediction):
40262 (JSC::DFG::Graph::getPrediction):
40263 * dfg/DFGJITCodeGenerator.cpp:
40264 (JSC::DFG::JITCodeGenerator::writeBarrier):
40265 (JSC::DFG::JITCodeGenerator::emitBranch):
40266 * dfg/DFGJITCompiler.h:
40267 (JSC::DFG::JITCompiler::getPrediction):
40269 (JSC::DFG::Node::valueOfJSConstantNode):
40270 (JSC::DFG::Node::isInt32Constant):
40271 (JSC::DFG::Node::isDoubleConstant):
40272 (JSC::DFG::Node::isNumberConstant):
40273 (JSC::DFG::Node::isBooleanConstant):
40274 (JSC::DFG::Node::predict):
40275 * dfg/DFGPropagator.cpp:
40276 (JSC::DFG::Propagator::Propagator):
40277 (JSC::DFG::Propagator::propagateNodePredictions):
40278 (JSC::DFG::Propagator::fixupNode):
40279 (JSC::DFG::Propagator::isPredictedNumerical):
40280 (JSC::DFG::Propagator::logicalNotIsPure):
40281 * dfg/DFGSpeculativeJIT.cpp:
40282 (JSC::DFG::SpeculativeJIT::compile):
40283 * dfg/DFGSpeculativeJIT.h:
40284 (JSC::DFG::SpeculativeJIT::shouldSpeculateInteger):
40285 (JSC::DFG::SpeculativeJIT::shouldSpeculateDouble):
40286 (JSC::DFG::SpeculativeJIT::shouldSpeculateNumber):
40287 (JSC::DFG::SpeculativeJIT::shouldNotSpeculateInteger):
40288 (JSC::DFG::SpeculativeJIT::shouldSpeculateFinalObject):
40289 (JSC::DFG::SpeculativeJIT::shouldSpeculateArray):
40290 (JSC::DFG::SpeculativeJIT::shouldSpeculateObject):
40291 (JSC::DFG::SpeculativeJIT::shouldSpeculateCell):
40293 (JSC::JIT::privateCompile):
40295 2011-09-25 Filip Pizlo <fpizlo@apple.com>
40297 DFG JIT Construct opcode takes a this argument even though it's
40299 https://bugs.webkit.org/show_bug.cgi?id=68782
40301 Reviewed by Oliver Hunt.
40303 This is performance-neutral, mostly. It's a slight speed-up on
40306 * dfg/DFGByteCodeParser.cpp:
40307 (JSC::DFG::ByteCodeParser::addCall):
40308 * dfg/DFGJITCodeGenerator.cpp:
40309 (JSC::DFG::JITCodeGenerator::emitCall):
40311 2011-09-25 Filip Pizlo <fpizlo@apple.com>
40313 DFG tracking of the value in cachedResultRegister does not handle
40315 https://bugs.webkit.org/show_bug.cgi?id=68781
40317 Reviewed by Oliver Hunt.
40319 This takes the simplest approach: it makes the old JIT dumber rather
40320 than making the DFG JIT smarter. This is performance-neutral.
40323 (JSC::JIT::canBeOptimized):
40324 * jit/JITOpcodes.cpp:
40325 (JSC::JIT::emit_op_mov):
40327 2011-09-25 Adam Barth <abarth@webkit.org>
40329 Remove PLATFORM(HAIKU) and associated code
40330 https://bugs.webkit.org/show_bug.cgi?id=68774
40332 Reviewed by Sam Weinig.
40334 * JavaScriptCore.gyp/JavaScriptCore.gyp:
40335 * JavaScriptCore.gypi:
40336 * gyp/JavaScriptCore.gyp:
40337 * heap/MachineStackMarker.cpp:
40338 * wtf/PageAllocation.h:
40340 * wtf/StackBounds.cpp:
40341 * wtf/haiku: Removed.
40342 * wtf/haiku/MainThreadHaiku.cpp: Removed.
40343 * wtf/haiku/StringHaiku.cpp: Removed.
40344 * wtf/text/WTFString.h:
40346 2011-09-24 Adam Barth <abarth@webkit.org>
40348 Always enable ENABLE(OFFLINE_WEB_APPLICATIONS)
40349 https://bugs.webkit.org/show_bug.cgi?id=68767
40351 Reviewed by Eric Seidel.
40353 * Configurations/FeatureDefines.xcconfig:
40355 2011-09-24 Filip Pizlo <fpizlo@apple.com>
40357 JIT implementation of put_by_val increments m_length instead of setting
40359 https://bugs.webkit.org/show_bug.cgi?id=68766
40361 Reviewed by Geoffrey Garen.
40363 * jit/JITPropertyAccess.cpp:
40364 (JSC::JIT::emit_op_put_by_val):
40366 2011-09-24 Geoffrey Garen <ggaren@apple.com>
40370 * heap/ConservativeRoots.cpp: Our system of #includes, it is chaos.
40372 2011-09-24 Filip Pizlo <fpizlo@apple.com>
40374 The DFG should not attempt to guess types in the absence of value
40376 https://bugs.webkit.org/show_bug.cgi?id=68677
40378 Reviewed by Oliver Hunt.
40380 This adds the ForceOSRExit node, which is ignored by the propagator
40381 and virtual register allocator (and hence ensuring that liveness analysis
40382 works correctly), but forces terminateSpeculativeExecution() in the
40383 back-end. This appears to be a slight speed-up on benchmark averages,
40384 with ~5% swings on individual benchmarks, in both directions. But it's
40385 never a regression on any average, and appears to be a ~1% progression
40386 in the SunSpider average.
40388 This also adds a bit better debugging support in the old JIT and in DFG,
40389 as this was necessary to debug the much more frequent OSR transitions
40390 that occur with this change.
40392 * dfg/DFGByteCodeParser.cpp:
40393 (JSC::DFG::ByteCodeParser::addCall):
40394 (JSC::DFG::ByteCodeParser::getStrongPrediction):
40395 (JSC::DFG::ByteCodeParser::parseBlock):
40396 * dfg/DFGJITCompiler.cpp:
40397 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
40399 * dfg/DFGPropagator.cpp:
40400 (JSC::DFG::Propagator::propagateNodePredictions):
40401 * dfg/DFGSpeculativeJIT.cpp:
40402 (JSC::DFG::SpeculativeJIT::compile):
40404 (JSC::JIT::privateCompileMainPass):
40405 (JSC::JIT::privateCompileSlowCases):
40406 (JSC::JIT::privateCompile):
40409 2011-09-24 Geoffrey Garen <ggaren@apple.com>
40411 Some Windows build fixage.
40413 * heap/MarkedBlock.cpp:
40414 (JSC::MarkedBlock::sweep):
40415 * heap/MarkedBlock.h:
40416 (JSC::MarkedBlock::isLive): Show the compiler that all control paths
40417 return a value. There, there, compiler. Everything's going to be OK.
40419 * runtime/JSCell.h:
40420 (JSC::JSCell::setVPtr): Oops! Unrename this function.
40422 2011-09-24 Geoffrey Garen <ggaren@apple.com>
40424 Allocate new objects unmarked
40425 https://bugs.webkit.org/show_bug.cgi?id=68764
40427 Reviewed by Oliver Hunt.
40429 This is a pre-requisite to using the mark bit to determine object age.
40431 ~2% v8 speedup, mostly due to a 12% v8-splay speedup.
40433 * heap/MarkedBlock.h:
40434 (JSC::MarkedBlock::isLive):
40435 (JSC::MarkedBlock::isLiveCell): These two functions are the reason for
40436 this patch. They can now determine object liveness without relying on
40437 newly allocated objects having their mark bits set. Each MarkedBlock
40438 now has a state variable that tells us how to determine whether its
40439 cells are live. (This new state variable supercedes the old one about
40440 destructor state. The rest of this patch is just refactoring to support
40441 the invariants of this new state variable without introducing a
40442 performance regression.)
40444 (JSC::MarkedBlock::didConsumeFreeList): New function for updating interal
40445 state when a block becomes fully allocated.
40447 (JSC::MarkedBlock::clearMarks): Folded a state change to 'Marked' into
40448 this function because, logically, clearing all mark bits is the first
40449 step in saying "mark bits now exactly reflect object liveness".
40451 (JSC::MarkedBlock::markCountIsZero): Renamed from isEmpty() to clarify
40452 that this function only tells you about the mark bits, so it's only
40453 meaningful if you've put the mark bits into a meaningful state before
40456 (JSC::MarkedBlock::forEachCell): Changed to use isLive() helper function
40457 instead of testing mark bits, since mark bits are not always the right
40458 way to find out if an object is live anymore. (New objects are live, but
40461 * heap/MarkedBlock.cpp:
40462 (JSC::MarkedBlock::recycle):
40463 (JSC::MarkedBlock::MarkedBlock): Folded all initialization -- even
40464 initialization when recycling an old block -- into the MarkedBlock
40465 constructor, for simplicity.
40467 (JSC::MarkedBlock::callDestructor): Inlined for speed. Always check for
40468 a zapped cell before running a destructor, and always zap after
40469 running a destructor. This does not seem to be expensive, and the
40470 alternative just creates a too-confusing matrix of possible cell states
40471 ((zombie undestructed cell + zombie destructed cell + zapped destructed
40472 cell) * 5! permutations for progressing through block states = "Oh my!").
40474 (JSC::MarkedBlock::specializedSweep):
40475 (JSC::MarkedBlock::sweep): Maintained and expanded a pre-existing
40476 optimization to use template specialization to constant fold lots of
40477 branches and elide certain operations entirely during a sweep. Merged
40478 four or five functions that were logically about sweeping into this one
40479 function pair, so there's only one way to do things now, it's
40480 automatically correct, and it's always fast.
40482 (JSC::MarkedBlock::zapFreeList): Renamed this function to be more explicit
40483 about exactly what it does, and to honor the new block state system.
40485 * heap/AllocationSpace.cpp:
40486 (JSC::AllocationSpace::allocateBlock): Updated for rename.
40488 (JSC::AllocationSpace::freeBlocks): Updated for changed interface.
40490 (JSC::TakeIfUnmarked::TakeIfUnmarked):
40491 (JSC::TakeIfUnmarked::operator()):
40492 (JSC::TakeIfUnmarked::returnValue): Just like isEmpty() above, renamed
40493 to clarify that this functor only tests the mark bits, so it's only
40494 valid if you've put the mark bits into a meaningful state before
40497 (JSC::AllocationSpace::shrink): Updated for rename.
40499 * heap/AllocationSpace.h:
40500 (JSC::AllocationSpace::canonicalizeCellLivenessData): Renamed to be a
40501 little more specific about what we're making canonical.
40503 (JSC::AllocationSpace::forEachCell): Updated for rename.
40505 (JSC::AllocationSpace::forEachBlock): No need to canonicalize cell
40506 liveness data before iterating blocks -- clients that want iterated
40507 blocks to have valid cell lieveness data should make this call for
40508 themselves. (And not all clients want it.)
40510 * heap/ConservativeRoots.cpp:
40511 (JSC::ConservativeRoots::genericAddPointer): Updated for rename. Removed
40515 (JSC::CountFunctor::ClearMarks::operator()): Removed call to notify...()
40516 because clearMarks() now does that implicitly.
40518 (JSC::Heap::destroy): Make sure to canonicalize before tear-down, since
40519 tear-down tests cell liveness when running destructors.
40521 (JSC::Heap::markRoots):
40522 (JSC::Heap::collect): Moved weak reference harvesting out of markRoots()
40523 and into collect, since it strictly depends on root marking, and does
40524 not contribute to root marking.
40526 (JSC::Heap::canonicalizeCellLivenessData): Renamed to be a little more
40527 specific about what we're making canonical.
40530 (JSC::Heap::forEachProtectedCell): No need to canonicalize cell liveness
40531 data before iterating protected cells, since we know they're all live,
40532 and don't need to test for it.
40535 (JSC::::set): Can't make the same ASSERT we used to because we just don't
40536 have the mark bits for it anymore. Perhaps we can bring this ASSERT back
40537 in a weaker form in the future.
40539 * heap/MarkedSpace.cpp:
40540 (JSC::MarkedSpace::addBlock):
40541 (JSC::MarkedSpace::removeBlock): Updated for interface change.
40542 (JSC::MarkedSpace::canonicalizeCellLivenessData): Renamed to be a little more
40543 specific about what we're making canonical.
40545 * heap/MarkedSpace.h:
40546 (JSC::MarkedSpace::allocate):
40547 (JSC::MarkedSpace::SizeClass::SizeClass):
40548 (JSC::MarkedSpace::SizeClass::resetAllocator):
40549 (JSC::MarkedSpace::SizeClass::zapFreeList): Simplified this allocator
40550 functionality a bit. We now track only one block -- "currentBlock" --
40551 and rely on its internal state to know whether it has more cells to
40555 (JSC::Weak::set): Can't make the same ASSERT we used to because we just don't
40556 have the mark bits for it anymore. Perhaps we can bring this ASSERT back
40557 in a weaker form in the future.
40559 * runtime/JSCell.h:
40560 (JSC::JSCell::vptr):
40561 (JSC::JSCell::zap):
40562 (JSC::JSCell::isZapped):
40563 (JSC::isZapped): Made zapping a property of JSCell, for a little abstraction.
40564 In the future, exactly how a JSCell zaps itself will change, as the
40565 internal representation of JSCell changes.
40567 2011-09-24 Filip Pizlo <fpizlo@apple.com>
40569 DFG JIT should not eagerly initialize integer tags in the register file
40570 https://bugs.webkit.org/show_bug.cgi?id=68763
40572 Reviewed by Oliver Hunt.
40574 * dfg/DFGJITCompiler.cpp:
40575 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
40576 * dfg/DFGSpeculativeJIT.cpp:
40577 (JSC::DFG::ValueRecovery::dump):
40578 (JSC::DFG::OSRExit::OSRExit):
40579 (JSC::DFG::SpeculativeJIT::compile):
40580 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
40581 * dfg/DFGSpeculativeJIT.h:
40582 (JSC::DFG::ValueRecovery::alreadyInRegisterFileAsUnboxedInt32):
40583 (JSC::DFG::OSRExit::operandForArgument):
40584 (JSC::DFG::OSRExit::operandForIndex):
40585 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
40587 2011-09-23 Yuqiang Xian <yuqiang.xian@intel.com>
40589 Add JSVALUE32_64 support to DFG JIT
40590 https://bugs.webkit.org/show_bug.cgi?id=67460
40592 Reviewed by Gavin Barraclough.
40594 This is the initial attempt to add JSVALUE32_64 support to DFG JIT.
40595 It's tested on IA32 Linux EFL port currently. It still cannot run
40596 all the test cases and benchmarks so should be turned off now.
40598 The major work includes:
40599 1) dealing with JSVALUE32_64 data format in DFG JIT;
40600 2) bindings between 64-bit JS Value and 32-bit registers;
40601 3) handling of function calls. Currently for DFG operation function
40602 calls we follow the X86 cdecl calling convention on Linux, and the
40603 implementation is in a naive way by pushing the arguments into stack
40606 The known issues include:
40607 1) some code duplicates unnecessarily, especially in Speculative JIT
40608 code generation, where most of the operations on SpeculataInteger /
40609 SpeculateDouble should be identical to the JSVALUE64 code. Refactoring
40610 is needed in the future;
40611 2) lack of op_call and op_construct support, comparing to current
40613 3) currently integer speculations assume to be StrictInt32;
40614 4) lack of JSBoolean speculations;
40615 5) boxing and unboxing doubles could be improved;
40616 6) DFG X86 register description is different with the baseline JIT,
40617 the timeoutCheckRegister is used for general purpose usage;
40618 7) calls to runtime functions with primitive double parameters (e.g.
40619 fmod) don't work. Support needs to be added to the assembler to
40620 implement the mechanism of passing double parameters for X86 cdecl
40623 And there should be many other hidden bugs which should be exposed and
40624 resolved in later debugging process.
40626 * CMakeListsEfl.txt:
40627 * assembler/MacroAssemblerX86.h:
40628 (JSC::MacroAssemblerX86::loadDouble):
40629 (JSC::MacroAssemblerX86::storeDouble):
40630 * assembler/X86Assembler.h:
40631 (JSC::X86Assembler::movsd_rm):
40632 * bytecode/StructureStubInfo.h:
40633 * dfg/DFGByteCodeParser.cpp:
40634 (JSC::DFG::ByteCodeParser::parseBlock):
40635 * dfg/DFGCapabilities.h:
40636 (JSC::DFG::canCompileOpcode):
40637 * dfg/DFGFPRInfo.h:
40638 (JSC::DFG::FPRInfo::debugName):
40639 * dfg/DFGGPRInfo.h:
40640 (JSC::DFG::GPRInfo::toRegister):
40641 (JSC::DFG::GPRInfo::toIndex):
40642 (JSC::DFG::GPRInfo::debugName):
40643 * dfg/DFGGenerationInfo.h:
40644 (JSC::DFG::needDataFormatConversion):
40645 (JSC::DFG::GenerationInfo::initJSValue):
40646 (JSC::DFG::GenerationInfo::initDouble):
40647 (JSC::DFG::GenerationInfo::gpr):
40648 (JSC::DFG::GenerationInfo::tagGPR):
40649 (JSC::DFG::GenerationInfo::payloadGPR):
40650 (JSC::DFG::GenerationInfo::fpr):
40651 (JSC::DFG::GenerationInfo::fillJSValue):
40652 (JSC::DFG::GenerationInfo::fillCell):
40653 (JSC::DFG::GenerationInfo::fillDouble):
40654 * dfg/DFGJITCodeGenerator.cpp:
40655 * dfg/DFGJITCodeGenerator.h:
40656 (JSC::DFG::JITCodeGenerator::allocate):
40657 (JSC::DFG::JITCodeGenerator::use):
40658 (JSC::DFG::JITCodeGenerator::registersMatched):
40659 (JSC::DFG::JITCodeGenerator::silentSpillGPR):
40660 (JSC::DFG::JITCodeGenerator::silentFillGPR):
40661 (JSC::DFG::JITCodeGenerator::silentFillFPR):
40662 (JSC::DFG::JITCodeGenerator::silentSpillAllRegisters):
40663 (JSC::DFG::JITCodeGenerator::silentFillAllRegisters):
40664 (JSC::DFG::JITCodeGenerator::boxDouble):
40665 (JSC::DFG::JITCodeGenerator::unboxDouble):
40666 (JSC::DFG::JITCodeGenerator::spill):
40667 (JSC::DFG::addressOfDoubleConstant):
40668 (JSC::DFG::integerResult):
40669 (JSC::DFG::jsValueResult):
40670 (JSC::DFG::setupResults):
40671 (JSC::DFG::callOperation):
40672 (JSC::JSValueOperand::JSValueOperand):
40673 (JSC::JSValueOperand::~JSValueOperand):
40674 (JSC::JSValueOperand::isDouble):
40675 (JSC::JSValueOperand::fill):
40676 (JSC::JSValueOperand::tagGPR):
40677 (JSC::JSValueOperand::payloadGPR):
40678 (JSC::JSValueOperand::fpr):
40679 (JSC::GPRTemporary::~GPRTemporary):
40680 (JSC::GPRTemporary::gpr):
40681 (JSC::GPRResult2::GPRResult2):
40682 * dfg/DFGJITCodeGenerator32_64.cpp: Added.
40683 (JSC::DFG::JITCodeGenerator::clearGenerationInfo):
40684 (JSC::DFG::JITCodeGenerator::fillInteger):
40685 (JSC::DFG::JITCodeGenerator::fillDouble):
40686 (JSC::DFG::JITCodeGenerator::fillJSValue):
40687 (JSC::DFG::JITCodeGenerator::fillStorage):
40688 (JSC::DFG::JITCodeGenerator::useChildren):
40689 (JSC::DFG::JITCodeGenerator::isStrictInt32):
40690 (JSC::DFG::JITCodeGenerator::isKnownInteger):
40691 (JSC::DFG::JITCodeGenerator::isKnownNumeric):
40692 (JSC::DFG::JITCodeGenerator::isKnownCell):
40693 (JSC::DFG::JITCodeGenerator::isKnownNotInteger):
40694 (JSC::DFG::JITCodeGenerator::isKnownNotNumber):
40695 (JSC::DFG::JITCodeGenerator::isKnownBoolean):
40696 (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToNumber):
40697 (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
40698 (JSC::DFG::JITCodeGenerator::nonSpeculativeUInt32ToNumber):
40699 (JSC::DFG::JITCodeGenerator::nonSpeculativeKnownConstantArithOp):
40700 (JSC::DFG::JITCodeGenerator::nonSpeculativeBasicArithOp):
40701 (JSC::DFG::JITCodeGenerator::nonSpeculativeArithMod):
40702 (JSC::DFG::JITCodeGenerator::nonSpeculativeCheckHasInstance):
40703 (JSC::DFG::JITCodeGenerator::nonSpeculativeInstanceOf):
40704 (JSC::DFG::JITCodeGenerator::cachedGetById):
40705 (JSC::DFG::JITCodeGenerator::writeBarrier):
40706 (JSC::DFG::JITCodeGenerator::cachedPutById):
40707 (JSC::DFG::JITCodeGenerator::cachedGetMethod):
40708 (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompareNull):
40709 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranchNull):
40710 (JSC::DFG::JITCodeGenerator::nonSpeculativeCompareNull):
40711 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
40712 (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare):
40713 (JSC::DFG::JITCodeGenerator::nonSpeculativeCompare):
40714 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq):
40715 (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeStrictEq):
40716 (JSC::DFG::JITCodeGenerator::nonSpeculativeStrictEq):
40717 (JSC::DFG::JITCodeGenerator::emitBranch):
40718 (JSC::DFG::JITCodeGenerator::nonSpeculativeLogicalNot):
40719 (JSC::DFG::JITCodeGenerator::emitCall):
40720 (JSC::DFG::JITCodeGenerator::speculationCheck):
40721 (JSC::DFG::dataFormatString):
40722 (JSC::DFG::JITCodeGenerator::dump):
40723 (JSC::DFG::JITCodeGenerator::checkConsistency):
40724 (JSC::DFG::GPRTemporary::GPRTemporary):
40725 (JSC::DFG::FPRTemporary::FPRTemporary):
40726 * dfg/DFGJITCompiler.cpp:
40727 * dfg/DFGJITCompiler.h:
40728 (JSC::DFG::JITCompiler::tagForGlobalVar):
40729 (JSC::DFG::JITCompiler::payloadForGlobalVar):
40730 (JSC::DFG::JITCompiler::appendCallWithExceptionCheck):
40731 (JSC::DFG::JITCompiler::addressOfDoubleConstant):
40732 (JSC::DFG::JITCompiler::boxDouble):
40733 (JSC::DFG::JITCompiler::unboxDouble):
40734 (JSC::DFG::JITCompiler::addPropertyAccess):
40735 (JSC::DFG::JITCompiler::PropertyAccessRecord::PropertyAccessRecord):
40736 * dfg/DFGJITCompiler32_64.cpp: Added.
40737 (JSC::DFG::JITCompiler::fillNumericToDouble):
40738 (JSC::DFG::JITCompiler::fillInt32ToInteger):
40739 (JSC::DFG::JITCompiler::fillToJS):
40740 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
40741 (JSC::DFG::JITCompiler::linkOSRExits):
40742 (JSC::DFG::JITCompiler::compileEntry):
40743 (JSC::DFG::JITCompiler::compileBody):
40744 (JSC::DFG::JITCompiler::link):
40745 (JSC::DFG::JITCompiler::compile):
40746 (JSC::DFG::JITCompiler::compileFunction):
40747 (JSC::DFG::JITCompiler::jitAssertIsInt32):
40748 (JSC::DFG::JITCompiler::jitAssertIsJSInt32):
40749 (JSC::DFG::JITCompiler::jitAssertIsJSNumber):
40750 (JSC::DFG::JITCompiler::jitAssertIsJSDouble):
40751 (JSC::DFG::JITCompiler::jitAssertIsCell):
40752 (JSC::DFG::JITCompiler::emitCount):
40753 (JSC::DFG::JITCompiler::setSamplingFlag):
40754 (JSC::DFG::JITCompiler::clearSamplingFlag):
40755 * dfg/DFGJITCompilerInlineMethods.h: Added.
40756 (JSC::DFG::JITCompiler::emitLoadTag):
40757 (JSC::DFG::JITCompiler::emitLoadPayload):
40758 (JSC::DFG::JITCompiler::emitLoad):
40759 (JSC::DFG::JITCompiler::emitLoad2):
40760 (JSC::DFG::JITCompiler::emitLoadDouble):
40761 (JSC::DFG::JITCompiler::emitLoadInt32ToDouble):
40762 (JSC::DFG::JITCompiler::emitStore):
40763 (JSC::DFG::JITCompiler::emitStoreInt32):
40764 (JSC::DFG::JITCompiler::emitStoreCell):
40765 (JSC::DFG::JITCompiler::emitStoreBool):
40766 (JSC::DFG::JITCompiler::emitStoreDouble):
40768 * dfg/DFGOperations.cpp:
40769 * dfg/DFGRepatch.cpp:
40770 (JSC::DFG::generateProtoChainAccessStub):
40771 (JSC::DFG::tryCacheGetByID):
40772 (JSC::DFG::tryBuildGetByIDList):
40773 (JSC::DFG::tryCachePutByID):
40774 * dfg/DFGSpeculativeJIT.cpp:
40775 * dfg/DFGSpeculativeJIT.h:
40776 (JSC::DFG::ValueRecovery::inGPR):
40777 (JSC::DFG::ValueRecovery::inPair):
40778 (JSC::DFG::ValueRecovery::tagGPR):
40779 (JSC::DFG::ValueRecovery::payloadGPR):
40780 * dfg/DFGSpeculativeJIT32_64.cpp: Added.
40781 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
40782 (JSC::DFG::ValueSource::dump):
40783 (JSC::DFG::ValueRecovery::dump):
40784 (JSC::DFG::OSRExit::OSRExit):
40785 (JSC::DFG::OSRExit::dump):
40786 (JSC::DFG::SpeculativeJIT::fillSpeculateInt):
40787 (JSC::DFG::SpeculativeJIT::fillSpeculateIntStrict):
40788 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
40789 (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
40790 (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
40791 (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
40792 (JSC::DFG::SpeculativeJIT::convertToDouble):
40793 (JSC::DFG::SpeculativeJIT::compilePeepHoleDoubleBranch):
40794 (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
40795 (JSC::DFG::SpeculativeJIT::compileObjectEquality):
40796 (JSC::DFG::SpeculativeJIT::compare):
40797 (JSC::DFG::SpeculativeJIT::compile):
40798 (JSC::DFG::SpeculativeJIT::compileMovHint):
40799 (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
40800 (JSC::DFG::SpeculativeJIT::initializeVariableTypes):
40801 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
40802 * runtime/JSValue.h:
40804 2011-09-23 Filip Pizlo <fpizlo@apple.com>
40806 wtf/BitVector.h has a variety of bugs which manifest when the
40807 vector grows beyond 63 bits
40808 https://bugs.webkit.org/show_bug.cgi?id=68746
40810 Reviewed by Oliver Hunt.
40812 Out-of-lined slow path code in BitVector so that not every user
40813 of CodeBlock ends up having to compile it. Fixed a variety of
40814 index computation and size computation bugs.
40816 I have not seen these issues manifest themselves, but they are
40817 blocking a patch that uses BitVector more aggressively.
40819 * GNUmakefile.list.am:
40820 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
40821 * JavaScriptCore.xcodeproj/project.pbxproj:
40822 * wtf/BitVector.cpp: Added.
40823 (BitVector::BitVector):
40824 (BitVector::operator=):
40825 (BitVector::resize):
40826 (BitVector::clearAll):
40827 (BitVector::OutOfLineBits::create):
40828 (BitVector::OutOfLineBits::destroy):
40829 (BitVector::resizeOutOfLine):
40831 (WTF::BitVector::ensureSize):
40832 (WTF::BitVector::get):
40833 (WTF::BitVector::set):
40834 (WTF::BitVector::clear):
40835 (WTF::BitVector::byteCount):
40836 (WTF::BitVector::OutOfLineBits::numWords):
40837 (WTF::BitVector::OutOfLineBits::bits):
40838 (WTF::BitVector::outOfLineBits):
40839 * wtf/CMakeLists.txt:
40842 2011-09-23 Adam Klein <adamk@chromium.org>
40844 Add ENABLE_MUTATION_OBSERVERS feature flag
40845 https://bugs.webkit.org/show_bug.cgi?id=68732
40847 Reviewed by Ojan Vafai.
40849 This flag will guard an implementation of the "Mutation Observers" proposed in
40850 http://lists.w3.org/Archives/Public/public-webapps/2011JulSep/1622.html
40852 * Configurations/FeatureDefines.xcconfig:
40854 2011-09-23 Mark Hahnenberg <mhahnenberg@apple.com>
40856 De-virtualize JSCell::getJSNumber
40857 https://bugs.webkit.org/show_bug.cgi?id=68651
40859 Reviewed by Oliver Hunt.
40861 Added a new JSType to check whether or not something is a
40862 NumberObject (which includes NumberPrototype) in TypeInfo::isNumberObject because there's not
40863 currently a better way to determine whether something is indeed a NumberObject.
40864 Also de-virtualized JSCell::getJSNumber, having it check the TypeInfo
40865 for whether the object is a NumberObject or not. This patch is part of
40866 the larger process of de-virtualizing JSCell.
40868 * JavaScriptCore.exp:
40869 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
40870 * runtime/JSCell.cpp:
40871 (JSC::JSCell::getJSNumber):
40872 * runtime/JSCell.h:
40873 (JSC::JSValue::getJSNumber):
40874 * runtime/JSType.h:
40875 * runtime/JSTypeInfo.h:
40876 (JSC::TypeInfo::isNumberObject):
40877 * runtime/JSValue.h:
40878 * runtime/NumberObject.cpp:
40879 (JSC::NumberObject::getJSNumber):
40880 * runtime/NumberObject.h:
40881 (JSC::NumberObject::createStructure):
40882 * runtime/NumberPrototype.h:
40883 (JSC::NumberPrototype::createStructure):
40885 2011-09-23 Filip Pizlo <fpizlo@apple.com>
40887 Resolve opcodes should have value profiling.
40888 https://bugs.webkit.org/show_bug.cgi?id=68723
40890 Reviewed by Oliver Hunt.
40892 This adds value profiling to all forms of op_resolve in the
40893 old JIT, and patches that information into the DFG along with
40894 performing the appropriate type propagation.
40896 * dfg/DFGByteCodeParser.cpp:
40897 (JSC::DFG::ByteCodeParser::parseBlock):
40899 (JSC::DFG::Graph::predict):
40901 (JSC::DFG::Node::hasIdentifier):
40902 (JSC::DFG::Node::resolveGlobalDataIndex):
40903 (JSC::DFG::Node::hasPrediction):
40904 * dfg/DFGPropagator.cpp:
40905 (JSC::DFG::Propagator::propagateNodePredictions):
40906 * dfg/DFGSpeculativeJIT.cpp:
40907 (JSC::DFG::SpeculativeJIT::compile):
40908 * jit/JITOpcodes.cpp:
40909 (JSC::JIT::emit_op_resolve):
40910 (JSC::JIT::emit_op_resolve_base):
40911 (JSC::JIT::emit_op_resolve_skip):
40912 (JSC::JIT::emit_op_resolve_global):
40913 (JSC::JIT::emitSlow_op_resolve_global):
40914 (JSC::JIT::emit_op_resolve_with_base):
40915 (JSC::JIT::emit_op_resolve_with_this):
40916 (JSC::JIT::emitSlow_op_resolve_global_dynamic):
40917 * jit/JITStubCall.h:
40918 (JSC::JITStubCall::callWithValueProfiling):
40920 2011-09-23 Oliver Hunt <oliver@apple.com>
40924 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
40926 2011-09-23 Gavin Barraclough <barraclough@apple.com>
40928 Strict mode does not work in non-trivial nested functions.
40929 https://bugs.webkit.org/show_bug.cgi?id=68740
40931 Reviewed by Oliver Hunt.
40933 Function-info caching does not preserve all state that it should.
40935 * parser/JSParser.cpp:
40936 (JSC::JSParser::Scope::saveFunctionInfo):
40937 (JSC::JSParser::Scope::restoreFunctionInfo):
40938 (JSC::JSParser::parseFunctionInfo):
40939 * parser/SourceProviderCacheItem.h:
40941 2011-09-23 Filip Pizlo <fpizlo@apple.com>
40943 ValueToDouble handling in prediction propagation should be ASSERT_NOT_REACHED
40944 https://bugs.webkit.org/show_bug.cgi?id=68724
40946 Reviewed by Oliver Hunt.
40948 * dfg/DFGPropagator.cpp:
40949 (JSC::DFG::Propagator::propagateNodePredictions):
40951 2011-09-23 Oliver Hunt <oliver@apple.com>
40955 * JavaScriptCore.xcodeproj/project.pbxproj:
40957 2011-09-23 Filip Pizlo <fpizlo@apple.com>
40959 DFG implementation of PutScopedVar corrupts register allocation
40960 https://bugs.webkit.org/show_bug.cgi?id=68735
40962 Reviewed by Oliver Hunt.
40964 * dfg/DFGSpeculativeJIT.cpp:
40965 (JSC::DFG::SpeculativeJIT::compile):
40967 2011-09-23 Oliver Hunt <oliver@apple.com>
40969 Make write barriers actually do something when enabled
40970 https://bugs.webkit.org/show_bug.cgi?id=68717
40972 Reviewed by Geoffrey Garen.
40974 Add a basic card marking style write barrier to JSC (currently
40975 turned off). This requires two scratch registers in the JIT
40976 so there was some register re-arranging to satisfy that requirement.
40977 Happily this produced a minor perf bump in sunspider (~0.5%).
40979 Turning the barriers on causes an overall regression of around 1.5%
40981 * JavaScriptCore.exp:
40982 * JavaScriptCore.xcodeproj/project.pbxproj:
40983 * assembler/MacroAssemblerX86Common.h:
40984 (JSC::MacroAssemblerX86Common::store8):
40985 * assembler/X86Assembler.h:
40986 (JSC::X86Assembler::movb_i8m):
40987 * dfg/DFGJITCodeGenerator.cpp:
40988 (JSC::DFG::JITCodeGenerator::isKnownNotCell):
40989 (JSC::DFG::JITCodeGenerator::writeBarrier):
40990 (JSC::DFG::JITCodeGenerator::markCellCard):
40991 (JSC::DFG::JITCodeGenerator::cachedPutById):
40992 * dfg/DFGJITCodeGenerator.h:
40993 * dfg/DFGRepatch.cpp:
40994 (JSC::DFG::tryCachePutByID):
40995 * dfg/DFGSpeculativeJIT.cpp:
40996 (JSC::DFG::SpeculativeJIT::compile):
40997 * heap/CardSet.h: Added.
40998 (JSC::CardSet::CardSet):
40999 (JSC::::cardForAtom):
41000 (JSC::::cardMarkedForAtom):
41001 (JSC::::markCardForAtom):
41004 (JSC::Heap::addressOfCardFor):
41005 (JSC::Heap::writeBarrierFastCase):
41006 * heap/MarkedBlock.h:
41007 (JSC::MarkedBlock::setDirtyObject):
41008 (JSC::MarkedBlock::addressOfCardFor):
41009 (JSC::MarkedBlock::offsetOfCards):
41011 * jit/JITPropertyAccess.cpp:
41012 (JSC::JIT::emit_op_put_by_val):
41013 (JSC::JIT::emit_op_put_by_id):
41014 (JSC::JIT::privateCompilePutByIdTransition):
41015 (JSC::JIT::emit_op_put_scoped_var):
41016 (JSC::JIT::emit_op_put_global_var):
41017 (JSC::JIT::emitWriteBarrier):
41018 * jit/JITPropertyAccess32_64.cpp:
41019 (JSC::JIT::emit_op_put_by_val):
41020 (JSC::JIT::emit_op_put_by_id):
41021 (JSC::JIT::emitSlow_op_put_by_id):
41022 (JSC::JIT::privateCompilePutByIdTransition):
41023 (JSC::JIT::emit_op_put_scoped_var):
41024 (JSC::JIT::emit_op_put_global_var):
41026 2011-09-23 Thouraya ANDOLSI <thouraya.andolsi@st.com>
41028 https://bugs.webkit.org/show_bug.cgi?id=68077
41029 SH4 assemblers doesn't refer to executable memory handle.
41031 Reviewed by Gavin Barraclough.
41033 * assembler/MacroAssemblerSH4.h:
41034 (JSC::MacroAssemblerSH4::branch8):
41035 * assembler/SH4Assembler.h:
41036 (JSC::SH4Assembler::executableCopy):
41038 2011-09-23 Oliver Hunt <oliver@apple.com>
41040 PutScopedVar nodes should report that it has a var number
41041 https://bugs.webkit.org/show_bug.cgi?id=68721
41043 Reviewed by Anders Carlsson.
41045 Another assertion fix.
41048 (JSC::DFG::Node::hasVarNumber):
41050 2011-09-23 Oliver Hunt <oliver@apple.com>
41052 Add a bunch of unhandled node types to the propagator
41053 https://bugs.webkit.org/show_bug.cgi?id=68716
41055 Reviewed by Darin Adler.
41057 Remove the ASSERT_NOT_REACHED() default for debug builds in the
41058 prediction propagator, this way unhandled nodes will just cause
41059 compile time failures rather than failing at some point in the
41062 * dfg/DFGPropagator.cpp:
41063 (JSC::DFG::Propagator::propagateNodePredictions):
41065 2011-09-23 Mark Hahnenberg <mhahnenberg@apple.com>
41067 Add static version of JSCell::visitChildren
41068 https://bugs.webkit.org/show_bug.cgi?id=68404
41070 Reviewed by Darin Adler.
41072 In this patch we just extract the bodies of the virtual visitChildren methods
41073 throughout the JSCell inheritance hierarchy out into static methods, which are
41074 now called from the virtual methods. This is an intermediate step in trying to
41075 move the virtual-ness of visitChildren into our own custom vtable stored in
41076 ClassInfo. We need to convert the methods to static methods in order to be
41077 able to more easily store and refer to them in our custom vtable since normal
41078 member methods store some implicit information in their types, making it
41079 impossible to store them generically in ClassInfo.
41081 * API/JSCallbackObject.h:
41082 (JSC::JSCallbackObject::visitChildrenVirtual):
41083 (JSC::JSCallbackObject::visitChildren):
41084 * JavaScriptCore.exp:
41085 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
41086 * debugger/DebuggerActivation.cpp:
41087 (JSC::DebuggerActivation::visitChildrenVirtual):
41088 (JSC::DebuggerActivation::visitChildren):
41089 * debugger/DebuggerActivation.h:
41090 * heap/MarkStack.cpp:
41091 (JSC::SlotVisitor::visitChildren):
41092 (JSC::SlotVisitor::drain):
41093 * runtime/Arguments.cpp:
41094 (JSC::Arguments::visitChildrenVirtual):
41095 (JSC::Arguments::visitChildren):
41096 * runtime/Arguments.h:
41097 * runtime/Executable.cpp:
41098 (JSC::EvalExecutable::visitChildrenVirtual):
41099 (JSC::EvalExecutable::visitChildren):
41100 (JSC::ProgramExecutable::visitChildrenVirtual):
41101 (JSC::ProgramExecutable::visitChildren):
41102 (JSC::FunctionExecutable::visitChildrenVirtual):
41103 (JSC::FunctionExecutable::visitChildren):
41104 * runtime/Executable.h:
41105 * runtime/GetterSetter.cpp:
41106 (JSC::GetterSetter::visitChildrenVirtual):
41107 (JSC::GetterSetter::visitChildren):
41108 * runtime/GetterSetter.h:
41109 * runtime/JSActivation.cpp:
41110 (JSC::JSActivation::visitChildrenVirtual):
41111 (JSC::JSActivation::visitChildren):
41112 * runtime/JSActivation.h:
41113 * runtime/JSArray.cpp:
41114 (JSC::JSArray::visitChildrenVirtual):
41115 (JSC::JSArray::visitChildren):
41116 * runtime/JSArray.h:
41117 * runtime/JSBoundFunction.cpp:
41118 (JSC::JSBoundFunction::visitChildrenVirtual):
41119 (JSC::JSBoundFunction::visitChildren):
41120 * runtime/JSBoundFunction.h:
41121 * runtime/JSCell.h:
41122 (JSC::JSCell::visitChildrenVirtual):
41123 (JSC::JSCell::visitChildren):
41124 * runtime/JSFunction.cpp:
41125 (JSC::JSFunction::visitChildrenVirtual):
41126 (JSC::JSFunction::visitChildren):
41127 * runtime/JSFunction.h:
41128 * runtime/JSGlobalObject.cpp:
41129 (JSC::JSGlobalObject::visitChildrenVirtual):
41130 (JSC::JSGlobalObject::visitChildren):
41131 * runtime/JSGlobalObject.h:
41132 * runtime/JSObject.cpp:
41133 (JSC::JSObject::visitChildrenVirtual):
41134 (JSC::JSObject::visitChildren):
41135 * runtime/JSObject.h:
41136 (JSC::JSObject::visitChildrenDirect):
41137 * runtime/JSPropertyNameIterator.cpp:
41138 (JSC::JSPropertyNameIterator::visitChildrenVirtual):
41139 (JSC::JSPropertyNameIterator::visitChildren):
41140 * runtime/JSPropertyNameIterator.h:
41141 * runtime/JSStaticScopeObject.cpp:
41142 (JSC::JSStaticScopeObject::visitChildrenVirtual):
41143 (JSC::JSStaticScopeObject::visitChildren):
41144 * runtime/JSStaticScopeObject.h:
41145 * runtime/JSWrapperObject.cpp:
41146 (JSC::JSWrapperObject::visitChildrenVirtual):
41147 (JSC::JSWrapperObject::visitChildren):
41148 * runtime/JSWrapperObject.h:
41149 * runtime/NativeErrorConstructor.cpp:
41150 (JSC::NativeErrorConstructor::visitChildrenVirtual):
41151 (JSC::NativeErrorConstructor::visitChildren):
41152 * runtime/NativeErrorConstructor.h:
41153 * runtime/RegExpObject.cpp:
41154 (JSC::RegExpObject::visitChildrenVirtual):
41155 (JSC::RegExpObject::visitChildren):
41156 * runtime/RegExpObject.h:
41157 * runtime/ScopeChain.cpp:
41158 (JSC::ScopeChainNode::visitChildrenVirtual):
41159 (JSC::ScopeChainNode::visitChildren):
41160 * runtime/ScopeChain.h:
41161 * runtime/Structure.cpp:
41162 (JSC::Structure::visitChildrenVirtual):
41163 (JSC::Structure::visitChildren):
41164 * runtime/Structure.h:
41165 * runtime/StructureChain.cpp:
41166 (JSC::StructureChain::visitChildrenVirtual):
41167 (JSC::StructureChain::visitChildren):
41168 * runtime/StructureChain.h:
41170 2011-09-23 Oliver Hunt <oliver@apple.com>
41172 Node propagation doesn't handle PutScopedVar
41173 https://bugs.webkit.org/show_bug.cgi?id=68713
41175 Reviewed by Sam Weinig.
41177 This was causing assertion failures.
41179 * dfg/DFGPropagator.cpp:
41180 (JSC::DFG::Propagator::propagateNodePredictions):
41182 2011-09-23 Anders Carlsson <andersca@apple.com>
41184 Make sure to define OVERRIDE and FINAL for older builds of clang.
41188 2011-09-23 Gavin Barraclough <barraclough@apple.com>
41190 Implement op_resolve_global in the DFG JIT
41191 https://bugs.webkit.org/show_bug.cgi?id=68704
41193 Reviewed by Oliver Hunt.
41195 This is performance neutral, but increases coverage.
41197 * dfg/DFGByteCodeParser.cpp:
41198 (JSC::DFG::ByteCodeParser::ByteCodeParser):
41199 (JSC::DFG::ByteCodeParser::parseBlock):
41201 (JSC::DFG::Node::hasIdentifier):
41202 (JSC::DFG::Node::resolveInfoIndex):
41203 * dfg/DFGOperations.cpp:
41204 * dfg/DFGOperations.h:
41205 * dfg/DFGSpeculativeJIT.cpp:
41206 (JSC::DFG::SpeculativeJIT::compile):
41208 2011-09-23 Mark Rowe <mrowe@apple.com>
41210 Define BUILDING_ON_LION / TARGETING_LION when appropriate in Platform.h.
41214 2011-09-22 Anders Carlsson <andersca@apple.com>
41216 We should add support for OVERRIDE and FINAL annotations
41217 https://bugs.webkit.org/show_bug.cgi?id=68654
41219 Reviewed by David Hyatt.
41221 Add OVERRIDE and FINAL macros for compilers that support them.
41225 2011-09-22 Filip Pizlo <fpizlo@apple.com>
41227 GetScopedVar should have value profiling
41228 https://bugs.webkit.org/show_bug.cgi?id=68676
41230 Reviewed by Oliver Hunt.
41232 Added GetScopedVar value profiling and predictin propagation.
41233 Added GetScopeChain to CSE.
41235 * dfg/DFGByteCodeParser.cpp:
41236 (JSC::DFG::ByteCodeParser::parseBlock):
41238 (JSC::DFG::Graph::predict):
41240 (JSC::DFG::Node::hasPrediction):
41241 * dfg/DFGPropagator.cpp:
41242 (JSC::DFG::Propagator::propagateNodePredictions):
41243 (JSC::DFG::Propagator::getScopeChainLoadElimination):
41244 (JSC::DFG::Propagator::performNodeCSE):
41245 * jit/JITPropertyAccess.cpp:
41246 (JSC::JIT::emit_op_get_scoped_var):
41248 2011-09-22 Filip Pizlo <fpizlo@apple.com>
41250 PPC build fix, part 3.
41252 * runtime/Executable.cpp:
41253 (JSC::FunctionExecutable::compileForConstructInternal):
41255 2011-09-22 Filip Pizlo <fpizlo@apple.com>
41257 Another PPC build fix.
41259 * runtime/Executable.cpp:
41260 * runtime/Executable.h:
41262 2011-09-22 Dean Jackson <dino@apple.com>
41264 Add ENABLE_CSS_FILTERS
41265 https://bugs.webkit.org/show_bug.cgi?id=68652
41267 Reviewed by Simon Fraser.
41269 * Configurations/FeatureDefines.xcconfig:
41271 2011-09-22 Gavin Barraclough <barraclough@apple.com>
41273 Incorrect this value passed to callbacks.
41274 https://bugs.webkit.org/show_bug.cgi?id=68668
41276 Reviewed by Oliver Hunt.
41278 From Array/String prototype function. Should be undefined, but
41279 global object is passed instead (this is visible for strict callbacks).
41281 * runtime/ArrayPrototype.cpp:
41282 (JSC::arrayProtoFuncSort):
41283 (JSC::arrayProtoFuncFilter):
41284 (JSC::arrayProtoFuncMap):
41285 (JSC::arrayProtoFuncEvery):
41286 (JSC::arrayProtoFuncForEach):
41287 (JSC::arrayProtoFuncSome):
41288 * runtime/JSArray.cpp:
41289 (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key):
41290 (JSC::JSArray::sort):
41291 * runtime/StringPrototype.cpp:
41292 (JSC::stringProtoFuncReplace):
41294 2011-09-22 Gavin Barraclough <barraclough@apple.com>
41296 Function.prototype.bind.length shoudl be 1.
41298 Rubber stamped by Olier Hunt.
41300 * runtime/FunctionPrototype.cpp:
41301 (JSC::FunctionPrototype::addFunctionProperties):
41303 2011-09-22 Filip Pizlo <fpizlo@apple.com>
41307 * bytecode/CodeBlock.h:
41309 2011-09-22 Gavin Barraclough <barraclough@apple.com>
41311 Windows build fix pt. 2
41313 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
41315 2011-09-22 Gavin Barraclough <barraclough@apple.com>
41317 Windows build fix pt. 1
41319 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
41321 2011-09-21 Filip Pizlo <fpizlo@apple.com>
41323 DFG JIT does not support to_primitive or strcat
41324 https://bugs.webkit.org/show_bug.cgi?id=68582
41326 Reviewed by Darin Adler.
41328 This adds functional support for to_primitive and strcat. It focuses
41329 on minimizing the amount of code emitted on to_primitive (if we know
41330 that it is a primitive or can speculate cheaply, then we omit the
41331 slow path) and on keeping the implementation of strcat simple while
41332 leveraging whatever optimizations we have already. In particular,
41333 unlike the Call and Construct nodes which require extending the size
41334 of the DFG's callee registers, StrCat takes advantage of the fact
41335 that no JS code can run while StrCat is in progress and uses a
41336 scratch buffer, rather than the register file, to store the list of
41337 values to concatenate. This was done mainly to keep the code simple,
41338 but there are probably other benefits to keeping call frame sizes
41339 down. Essentially, this patch ensures that the presence of an
41340 op_strcat does not mess up any other optimizations we might do while
41341 ensuring that if you do execute it, it'll work about as well as you'd
41344 When combined with the previous patch for integer division, this is a
41345 14% speed-up on Kraken. Without it, it would have been a 2% loss.
41347 * assembler/AbstractMacroAssembler.h:
41348 (JSC::AbstractMacroAssembler::TrustedImmPtr::TrustedImmPtr):
41349 * dfg/DFGByteCodeParser.cpp:
41350 (JSC::DFG::ByteCodeParser::parseBlock):
41351 * dfg/DFGCapabilities.h:
41352 (JSC::DFG::canCompileOpcode):
41353 * dfg/DFGJITCodeGenerator.h:
41354 (JSC::DFG::JITCodeGenerator::callOperation):
41355 * dfg/DFGJITCompiler.cpp:
41356 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
41358 * dfg/DFGOperations.cpp:
41359 * dfg/DFGOperations.h:
41360 * dfg/DFGPropagator.cpp:
41361 (JSC::DFG::Propagator::propagateNodePredictions):
41362 (JSC::DFG::Propagator::performNodeCSE):
41363 * dfg/DFGSpeculativeJIT.cpp:
41364 (JSC::DFG::SpeculativeJIT::compile):
41365 * runtime/JSGlobalData.cpp:
41366 (JSC::JSGlobalData::JSGlobalData):
41367 (JSC::JSGlobalData::~JSGlobalData):
41368 * runtime/JSGlobalData.h:
41369 (JSC::JSGlobalData::scratchBufferForSize):
41371 2011-09-22 Filip Pizlo <fpizlo@apple.com>
41373 DFG JIT should support integer division
41374 https://bugs.webkit.org/show_bug.cgi?id=68597
41376 Reviewed by Darin Adler.
41378 This adds support for ArithDiv speculating integer, and speculating
41379 that the result is integer (i.e. remainder = 0).
41381 This is a 4% win on Kraken and a 1% loss on V8.
41383 * bytecode/CodeBlock.h:
41384 * dfg/DFGByteCodeParser.cpp:
41385 (JSC::DFG::ByteCodeParser::makeDivSafe):
41386 (JSC::DFG::ByteCodeParser::parseBlock):
41388 (JSC::DFG::Node::hasArithNodeFlags):
41389 * dfg/DFGPropagator.cpp:
41390 (JSC::DFG::Propagator::propagateArithNodeFlags):
41391 (JSC::DFG::Propagator::propagateNodePredictions):
41392 (JSC::DFG::Propagator::fixupNode):
41393 * dfg/DFGSpeculativeJIT.cpp:
41394 (JSC::DFG::SpeculativeJIT::compile):
41395 * jit/JITArithmetic.cpp:
41396 (JSC::JIT::emit_op_div):
41398 2011-09-22 Oliver Hunt <oliver@apple.com>
41400 Implement put_scoped_var in the DFG jit
41401 https://bugs.webkit.org/show_bug.cgi?id=68653
41403 Reviewed by Gavin Barraclough.
41405 Naive implementation of put_scoped_var. Same story as the
41406 get_scoped_var implementation, although I've hoisted scope
41407 object acquisition into a separate dfg node. Ideally in the
41408 future we would reuse the resolved scope chain object, but
41411 * dfg/DFGByteCodeParser.cpp:
41412 (JSC::DFG::ByteCodeParser::parseBlock):
41413 * dfg/DFGCapabilities.h:
41414 (JSC::DFG::canCompileOpcode):
41416 (JSC::DFG::Node::hasScopeChainDepth):
41417 (JSC::DFG::Node::scopeChainDepth):
41418 * dfg/DFGPropagator.cpp:
41419 (JSC::DFG::Propagator::propagateNodePredictions):
41420 * dfg/DFGSpeculativeJIT.cpp:
41421 (JSC::DFG::SpeculativeJIT::compile):
41423 2011-09-22 Gavin Barraclough <barraclough@apple.com>
41425 Implement Function.prototype.bind
41426 https://bugs.webkit.org/show_bug.cgi?id=26382
41428 Reviewed by Sam Weinig.
41430 This patch provides a basic functional implementation
41431 for Function.bind. It should (hopefully!) be fully
41432 functionally correct, and the bound functions can be
41433 called to quickly (since they are a subclass of
41434 JSFunction, not InternalFunction), but we'll probably
41435 want to follow up with some optimization work to keep
41436 bound calls in JIT code.
41438 * JavaScriptCore.JSVALUE32_64only.exp:
41439 * JavaScriptCore.JSVALUE64only.exp:
41440 * JavaScriptCore.exp:
41441 * JavaScriptCore.xcodeproj/project.pbxproj:
41442 * jit/JITStubs.cpp:
41443 (JSC::JITThunks::hostFunctionStub):
41446 (GlobalObject::addFunction):
41447 * runtime/CommonIdentifiers.h:
41448 * runtime/ConstructData.h:
41449 * runtime/Executable.h:
41450 (JSC::NativeExecutable::NativeExecutable):
41451 * runtime/FunctionPrototype.cpp:
41452 (JSC::FunctionPrototype::addFunctionProperties):
41453 (JSC::functionProtoFuncBind):
41454 * runtime/FunctionPrototype.h:
41455 * runtime/JSBoundFunction.cpp: Added.
41456 (JSC::boundFunctionCall):
41457 (JSC::boundFunctionConstruct):
41458 (JSC::JSBoundFunction::create):
41459 (JSC::JSBoundFunction::hasInstance):
41460 (JSC::JSBoundFunction::getOwnPropertySlot):
41461 (JSC::JSBoundFunction::getOwnPropertyDescriptor):
41462 (JSC::JSBoundFunction::JSBoundFunction):
41463 (JSC::JSBoundFunction::finishCreation):
41464 * runtime/JSBoundFunction.h: Added.
41465 (JSC::JSBoundFunction::targetFunction):
41466 (JSC::JSBoundFunction::boundThis):
41467 (JSC::JSBoundFunction::boundArgs):
41468 (JSC::JSBoundFunction::createStructure):
41469 * runtime/JSFunction.cpp:
41470 (JSC::JSFunction::create):
41471 (JSC::JSFunction::finishCreation):
41472 (JSC::createDescriptorForThrowingProperty):
41473 (JSC::JSFunction::getOwnPropertySlot):
41474 * runtime/JSFunction.h:
41475 * runtime/JSGlobalData.cpp:
41476 (JSC::JSGlobalData::getHostFunction):
41477 * runtime/JSGlobalData.h:
41478 * runtime/JSGlobalObject.cpp:
41479 (JSC::JSGlobalObject::reset):
41480 (JSC::JSGlobalObject::visitChildren):
41481 * runtime/JSGlobalObject.h:
41482 (JSC::JSGlobalObject::boundFunctionStructure):
41483 * runtime/Lookup.cpp:
41484 (JSC::setUpStaticFunctionSlot):
41486 2011-09-22 Oliver Hunt <oliver@apple.com>
41488 Implement get_scoped_var in the DFG
41489 https://bugs.webkit.org/show_bug.cgi?id=68640
41491 Reviewed by Gavin Barraclough.
41493 Naive implementation of get_scoped_var in the DFG. Essentially this
41494 is the bare minimum required to get correct behaviour, so there's no
41495 load/store coalescing or type profiling involved, even though these
41496 would be wins. No impact on SunSpider or V8.
41498 * dfg/DFGByteCodeParser.cpp:
41499 (JSC::DFG::ByteCodeParser::parseBlock):
41500 * dfg/DFGCapabilities.h:
41501 (JSC::DFG::canCompileOpcode):
41503 (JSC::DFG::Node::hasVarNumber):
41504 (JSC::DFG::Node::hasScopeChainDepth):
41505 (JSC::DFG::Node::scopeChainDepth):
41506 * dfg/DFGPropagator.cpp:
41507 (JSC::DFG::Propagator::propagateNodePredictions):
41508 * dfg/DFGSpeculativeJIT.cpp:
41509 (JSC::DFG::SpeculativeJIT::compile):
41511 2011-09-22 Adam Roben <aroben@apple.com>
41513 Remove FindSafari from all our .sln files
41515 It isn't used anymore, so there's no point in building it.
41517 Part of <http://webkit.org/b/68628> Remove FindSafari
41519 Reviewed by Steve Falkenburg.
41521 * JavaScriptCore.vcproj/JavaScriptCore.sln:
41523 2011-09-22 Filip Pizlo <fpizlo@apple.com>
41525 32-bit call code clobbers the function cell tag
41526 https://bugs.webkit.org/show_bug.cgi?id=68606
41528 Reviewed by Csaba Osztrogonác.
41530 This is a minimalistic fix: it simply emits code to restore the
41531 cell tag on the slow path, if we know that we failed due to
41534 * jit/JITCall32_64.cpp:
41535 (JSC::JIT::compileOpCallVarargsSlowCase):
41536 (JSC::JIT::compileOpCallSlowCase):
41538 2011-09-21 Gavin Barraclough <barraclough@apple.com>
41540 Add missing addPtr->add32 mapping for X86.
41542 Rubber stamped by Sam Weinig.
41544 * assembler/MacroAssembler.h:
41545 (JSC::MacroAssembler::addPtr):
41547 2011-09-21 Gavin Barraclough <barraclough@apple.com>
41549 Add missing addDouble for AbsoluteAddress to X86
41551 Rubber stamped by Geoff Garen.
41553 * assembler/MacroAssemblerX86.h:
41554 (JSC::MacroAssemblerX86::addDouble):
41555 * assembler/X86Assembler.h:
41556 (JSC::X86Assembler::addsd_mr):
41557 (JSC::X86Assembler::cvtsi2sd_rr):
41558 (JSC::X86Assembler::cvtsi2sd_mr):
41560 2011-09-21 Gavin Barraclough <barraclough@apple.com>
41562 Build fix following fix for bug #68586.
41565 * jit/JITInlineMethods.h:
41567 2011-09-21 Filip Pizlo <fpizlo@apple.com>
41569 DFG JIT should be able to compile op_throw
41570 https://bugs.webkit.org/show_bug.cgi?id=68571
41572 Reviewed by Geoffrey Garen.
41574 This compiles op_throw in the simplest way possible: it's an OSR
41575 point back to the old JIT. This is a good step towards increasing
41576 coverage, particularly on Kraken, but it's neutral because the
41577 same functions that do throw also use some other unsupported
41580 * dfg/DFGByteCodeParser.cpp:
41581 (JSC::DFG::ByteCodeParser::parseBlock):
41582 * dfg/DFGCapabilities.h:
41583 (JSC::DFG::canCompileOpcode):
41585 * dfg/DFGPropagator.cpp:
41586 (JSC::DFG::Propagator::propagateNodePredictions):
41587 * dfg/DFGSpeculativeJIT.cpp:
41588 (JSC::DFG::SpeculativeJIT::compile):
41590 2011-09-21 Filip Pizlo <fpizlo@apple.com>
41592 DFG should support continuous optimization
41593 https://bugs.webkit.org/show_bug.cgi?id=68329
41595 Reviewed by Geoffrey Garen.
41597 This adds the ability to reoptimize a code block if speculation
41598 failures happen frequently. 6% speed-up on Kraken, 1% slow-down
41599 on V8, neutral on SunSpider.
41602 * GNUmakefile.list.am:
41603 * JavaScriptCore.pro:
41604 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
41605 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
41606 * JavaScriptCore.xcodeproj/project.pbxproj:
41607 * bytecode/CodeBlock.cpp:
41608 (JSC::CodeBlock::CodeBlock):
41609 (JSC::ProgramCodeBlock::jettison):
41610 (JSC::EvalCodeBlock::jettison):
41611 (JSC::FunctionCodeBlock::jettison):
41612 (JSC::CodeBlock::shouldOptimizeNow):
41613 (JSC::CodeBlock::dumpValueProfiles):
41614 * bytecode/CodeBlock.h:
41615 * dfg/DFGByteCodeParser.cpp:
41616 (JSC::DFG::ByteCodeParser::getStrongPrediction):
41617 * dfg/DFGJITCompiler.cpp:
41618 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
41619 (JSC::DFG::JITCompiler::compileEntry):
41620 (JSC::DFG::JITCompiler::compileBody):
41621 * dfg/DFGJITCompiler.h:
41622 (JSC::DFG::JITCompiler::noticeOSREntry):
41623 * dfg/DFGOSREntry.cpp:
41624 (JSC::DFG::prepareOSREntry):
41625 * dfg/DFGOSREntry.h:
41626 (JSC::DFG::getOSREntryDataBytecodeIndex):
41627 * dfg/DFGSpeculativeJIT.cpp:
41628 (JSC::DFG::SpeculativeJIT::compile):
41629 * heap/ConservativeRoots.cpp:
41630 (JSC::ConservativeRoots::ConservativeRoots):
41631 (JSC::ConservativeRoots::~ConservativeRoots):
41632 (JSC::DummyMarkHook::mark):
41633 (JSC::ConservativeRoots::genericAddPointer):
41634 (JSC::ConservativeRoots::genericAddSpan):
41635 (JSC::ConservativeRoots::add):
41636 * heap/ConservativeRoots.h:
41638 (JSC::Heap::addJettisonCodeBlock):
41639 (JSC::Heap::markRoots):
41641 * heap/JettisonedCodeBlocks.cpp: Added.
41642 (JSC::JettisonedCodeBlocks::JettisonedCodeBlocks):
41643 (JSC::JettisonedCodeBlocks::~JettisonedCodeBlocks):
41644 (JSC::JettisonedCodeBlocks::addCodeBlock):
41645 (JSC::JettisonedCodeBlocks::clearMarks):
41646 (JSC::JettisonedCodeBlocks::deleteUnmarkedCodeBlocks):
41647 (JSC::JettisonedCodeBlocks::traceCodeBlocks):
41648 * heap/JettisonedCodeBlocks.h: Added.
41649 (JSC::JettisonedCodeBlocks::mark):
41650 * interpreter/RegisterFile.cpp:
41651 (JSC::RegisterFile::gatherConservativeRoots):
41652 * interpreter/RegisterFile.h:
41653 * jit/JITStubs.cpp:
41654 (JSC::DEFINE_STUB_FUNCTION):
41655 * runtime/Executable.cpp:
41656 (JSC::jettisonCodeBlock):
41657 (JSC::EvalExecutable::jettisonOptimizedCode):
41658 (JSC::ProgramExecutable::jettisonOptimizedCode):
41659 (JSC::FunctionExecutable::jettisonOptimizedCodeForCall):
41660 (JSC::FunctionExecutable::jettisonOptimizedCodeForConstruct):
41661 * runtime/Executable.h:
41662 (JSC::FunctionExecutable::jettisonOptimizedCodeFor):
41663 * wtf/BitVector.h: Added.
41664 (WTF::BitVector::BitVector):
41665 (WTF::BitVector::~BitVector):
41666 (WTF::BitVector::operator=):
41667 (WTF::BitVector::size):
41668 (WTF::BitVector::ensureSize):
41669 (WTF::BitVector::resize):
41670 (WTF::BitVector::clearAll):
41671 (WTF::BitVector::get):
41672 (WTF::BitVector::set):
41673 (WTF::BitVector::clear):
41674 (WTF::BitVector::bitsInPointer):
41675 (WTF::BitVector::maxInlineBits):
41676 (WTF::BitVector::byteCount):
41677 (WTF::BitVector::makeInlineBits):
41678 (WTF::BitVector::OutOfLineBits::numBits):
41679 (WTF::BitVector::OutOfLineBits::numWords):
41680 (WTF::BitVector::OutOfLineBits::bits):
41681 (WTF::BitVector::OutOfLineBits::create):
41682 (WTF::BitVector::OutOfLineBits::destroy):
41683 (WTF::BitVector::OutOfLineBits::OutOfLineBits):
41684 (WTF::BitVector::isInline):
41685 (WTF::BitVector::outOfLineBits):
41686 (WTF::BitVector::resizeOutOfLine):
41687 (WTF::BitVector::bits):
41689 2011-09-21 Gavin Barraclough <barraclough@apple.com>
41691 Add X86 GPRInfo for DFG JIT.
41692 https://bugs.webkit.org/show_bug.cgi?id=68586
41694 Reviewed by Geoff Garen.
41696 * dfg/DFGGPRInfo.h:
41697 (JSC::DFG::GPRInfo::toRegister):
41698 (JSC::DFG::GPRInfo::toIndex):
41699 (JSC::DFG::GPRInfo::debugName):
41701 2011-09-21 Gavin Barraclough <barraclough@apple.com>
41703 Should support value profiling on CPU(X86)
41704 https://bugs.webkit.org/show_bug.cgi?id=68575
41706 Reviewed by Sam Weinig.
41708 Fix verbose profiling in ToT (SlowCaseProfile had been
41709 partially renamed to RareCaseProfile), add in-memory
41710 bucket counter for CPU(X86), move JIT::m_canBeOptimized
41711 out of the DFG_JIT ifdef.
41713 * bytecode/CodeBlock.cpp:
41714 (JSC::CodeBlock::resetRareCaseProfiles):
41715 (JSC::CodeBlock::dumpValueProfiles):
41716 * bytecode/CodeBlock.h:
41717 * dfg/DFGByteCodeParser.cpp:
41718 (JSC::DFG::ByteCodeParser::makeSafe):
41720 (JSC::JIT::privateCompileSlowCases):
41721 (JSC::JIT::privateCompile):
41723 * jit/JITInlineMethods.h:
41724 (JSC::JIT::emitValueProfilingSite):
41726 2011-09-21 Filip Pizlo <fpizlo@apple.com>
41728 DFG does not support compiling functions as constructors
41729 https://bugs.webkit.org/show_bug.cgi?id=68500
41731 Reviewed by Oliver Hunt.
41733 This adds support for compiling constructors to the DFG. It's a
41734 1% speed-up on V8, mostly due to a 6% speed-up on early-boyer.
41735 It's also a 13% win on access-binary-trees, but it's neutral in
41736 the SunSpider and Kraken averages.
41738 * dfg/DFGByteCodeParser.cpp:
41739 (JSC::DFG::ByteCodeParser::parseBlock):
41740 * dfg/DFGCapabilities.h:
41741 (JSC::DFG::mightCompileFunctionForConstruct):
41742 (JSC::DFG::canCompileOpcode):
41744 * dfg/DFGOperations.cpp:
41745 * dfg/DFGOperations.h:
41746 * dfg/DFGPropagator.cpp:
41747 (JSC::DFG::Propagator::propagateNodePredictions):
41748 (JSC::DFG::Propagator::performNodeCSE):
41749 * dfg/DFGSpeculativeJIT.cpp:
41750 (JSC::DFG::SpeculativeJIT::compile):
41751 * runtime/Executable.cpp:
41752 (JSC::FunctionExecutable::compileOptimizedForConstruct):
41753 (JSC::FunctionExecutable::compileForConstructInternal):
41754 * runtime/Executable.h:
41755 (JSC::FunctionExecutable::compileForConstruct):
41756 (JSC::FunctionExecutable::compileFor):
41757 (JSC::FunctionExecutable::compileOptimizedFor):
41759 2011-09-21 Gavin Barraclough <barraclough@apple.com>
41761 Replace jsFunctionVPtr compares with a type check on the Structure.
41762 https://bugs.webkit.org/show_bug.cgi?id=68557
41764 Reviewed by Oliver Hunt.
41766 This will permit calls to still optimize to subclasses of JSFunction
41767 that have the correct type (but a different C++ vptr).
41769 This patch stops passing the globalData into numerous functions.
41771 * dfg/DFGByteCodeParser.cpp:
41772 (JSC::DFG::ByteCodeParser::parseBlock):
41774 (JSC::DFG::Graph::isFunctionConstant):
41775 (JSC::DFG::Graph::valueOfFunctionConstant):
41776 * dfg/DFGJITCompiler.h:
41777 (JSC::DFG::JITCompiler::isFunctionConstant):
41778 (JSC::DFG::JITCompiler::valueOfFunctionConstant):
41779 * dfg/DFGOperations.cpp:
41780 * interpreter/Interpreter.cpp:
41781 (JSC::Interpreter::privateExecute):
41784 (JSC::JIT::compileOpCallVarargs):
41785 (JSC::JIT::compileOpCallSlowCase):
41786 * jit/JITCall32_64.cpp:
41787 (JSC::JIT::compileOpCallVarargs):
41788 (JSC::JIT::compileOpCallSlowCase):
41789 * jit/JITInlineMethods.h:
41790 (JSC::JIT::emitJumpIfNotType):
41791 * jit/JITStubs.cpp:
41792 (JSC::DEFINE_STUB_FUNCTION):
41793 * runtime/Executable.h:
41794 (JSC::isHostFunction):
41795 * runtime/JSFunction.h:
41796 (JSC::JSFunction::createStructure):
41797 * runtime/JSObject.cpp:
41798 (JSC::JSObject::put):
41799 (JSC::JSObject::putWithAttributes):
41800 * runtime/JSObject.h:
41801 (JSC::getJSFunction):
41802 (JSC::JSObject::putDirect):
41803 (JSC::JSObject::putDirectWithoutTransition):
41804 * runtime/JSType.h:
41806 2011-09-21 Geoffrey Garen <ggaren@apple.com>
41808 Removed WTFTHREADDATA_MULTITHREADED, making it always true
41809 https://bugs.webkit.org/show_bug.cgi?id=68549
41811 Reviewed by Darin Adler.
41813 Another part of making threads exist in WebKit.
41815 * wtf/WTFThreadData.cpp:
41816 * wtf/WTFThreadData.h:
41817 (WTF::wtfThreadData):
41819 2011-09-21 Dan Bernstein <mitz@apple.com>
41821 JavaScriptCore Part of: Prevent the WebKit frameworks from defining inappropriately-named Objective-C classes
41822 https://bugs.webkit.org/show_bug.cgi?id=68451
41824 Reviewed by Darin Adler.
41826 * JavaScriptCore.xcodeproj/project.pbxproj: Added a script build phase that invokes
41827 check-for-inappropriate-objc-class-names, allowing only class names prefixed with "JS".
41829 2011-09-20 Gavin Barraclough <barraclough@apple.com>
41831 MacroAssembler fixes.
41832 https://bugs.webkit.org/show_bug.cgi?id=68494
41834 Reviewed by Sam Weinig.
41836 Add X86-64's 3 operand or32 to other MacroAssembler, fix load32's [const] void* mismatch
41838 * assembler/MacroAssembler.h:
41839 (JSC::MacroAssembler::orPtr):
41840 (JSC::MacroAssembler::loadPtr):
41841 * assembler/MacroAssemblerARM.h:
41842 (JSC::MacroAssemblerARM::or32):
41843 * assembler/MacroAssemblerARMv7.h:
41844 (JSC::MacroAssemblerARMv7::or32):
41845 * assembler/MacroAssemblerMIPS.h:
41846 (JSC::MacroAssemblerMIPS::or32):
41847 * assembler/MacroAssemblerSH4.h:
41848 (JSC::MacroAssemblerSH4::or32):
41849 (JSC::MacroAssemblerSH4::load32):
41850 * assembler/MacroAssemblerX86.h:
41851 (JSC::MacroAssemblerX86::load32):
41852 * assembler/MacroAssemblerX86_64.h:
41853 (JSC::MacroAssemblerX86_64::load32):
41855 2011-09-20 Geoffrey Garen <ggaren@apple.com>
41859 Reviewed by Beth Dakin.
41861 * heap/MarkedBlock.cpp:
41862 (JSC::MarkedBlock::blessNewBlock): Removed blessNewBlockForSlowPath()
41863 because it was unused; renamed blessNewBlockForFastPath() to blessNewBlock()
41864 since there is only one now.
41866 * heap/MarkedBlock.h: Removed ownerSet-related stuff since it was unused.
41867 Updated mark bit overhead calculation. Deployed atomsPerBlock in one
41868 place where we were recalculating it.
41870 * heap/MarkedSpace.cpp:
41871 (JSC::MarkedSpace::addBlock): Updated for rename.
41873 2011-09-20 Filip Pizlo <fpizlo@apple.com>
41875 DFG JIT always speculates integer on modulo
41876 https://bugs.webkit.org/show_bug.cgi?id=68485
41878 Reviewed by Oliver Hunt.
41880 Added support for double modulo, which is a call to fmod().
41881 Also added support for recording the old JIT's statistics
41882 on op_mod and propagating them along the graph. Finally,
41883 fixed a goof in the ArithNodeFlags propagation logic that
41884 was made obvious when I started testing ArithMod.
41886 * dfg/DFGByteCodeParser.cpp:
41887 (JSC::DFG::ByteCodeParser::makeSafe):
41888 (JSC::DFG::ByteCodeParser::parseBlock):
41890 (JSC::DFG::Node::hasArithNodeFlags):
41891 * dfg/DFGPropagator.cpp:
41892 (JSC::DFG::Propagator::propagateArithNodeFlags):
41893 (JSC::DFG::Propagator::propagateNodePredictions):
41894 (JSC::DFG::Propagator::fixupNode):
41895 * dfg/DFGSpeculativeJIT.cpp:
41896 (JSC::DFG::SpeculativeJIT::compile):
41898 2011-09-20 ChangSeok Oh <shivamidow@gmail.com>
41900 [GTK] requestAnimationFrame support for gtk port
41901 https://bugs.webkit.org/show_bug.cgi?id=66280
41903 Reviewed by Martin Robinson.
41905 Let GTK port use REQUEST_ANIMATION_FRAME_TIMER.
41909 2011-09-20 Filip Pizlo <fpizlo@apple.com>
41911 DFG JIT performs too many negative zero checks, and too many
41913 https://bugs.webkit.org/show_bug.cgi?id=68430
41915 Reviewed by Oliver Hunt.
41917 This adds comprehensive support for deciding how to perform an
41918 arithmetic operations based on a combination of overflow profiling,
41919 negative zero profiling, value profiling, and a static analysis of
41920 how the results of these operations get used.
41922 This is a 72% speed-up on stanford-crypto-sha256-iterative, and a
41923 2.5% speed-up on the Kraken average, a 1.4% speed-up on the V8
41924 geomean, and neutral on SunSpider. It's also an 8.5% speed-up on
41925 V8-crypto, because apparenty everything we do speeds up crypto.
41927 * dfg/DFGByteCodeParser.cpp:
41928 (JSC::DFG::ByteCodeParser::toInt32):
41929 (JSC::DFG::ByteCodeParser::toNumber):
41930 (JSC::DFG::ByteCodeParser::isSmallInt32Constant):
41931 (JSC::DFG::ByteCodeParser::valueOfInt32Constant):
41932 (JSC::DFG::ByteCodeParser::weaklyPredictInt32):
41933 (JSC::DFG::ByteCodeParser::makeSafe):
41934 (JSC::DFG::ByteCodeParser::handleMinMax):
41935 (JSC::DFG::ByteCodeParser::handleIntrinsic):
41936 (JSC::DFG::ByteCodeParser::parseBlock):
41937 (JSC::DFG::ByteCodeParser::processPhiStack):
41938 (JSC::DFG::ByteCodeParser::parse):
41939 * dfg/DFGGraph.cpp:
41940 (JSC::DFG::Graph::dump):
41941 * dfg/DFGJITCodeGenerator.cpp:
41942 (JSC::DFG::JITCodeGenerator::nonSpeculativeBasicArithOp):
41944 (JSC::DFG::nodeUsedAsNumber):
41945 (JSC::DFG::nodeCanTruncateInteger):
41946 (JSC::DFG::nodeCanIgnoreNegativeZero):
41947 (JSC::DFG::nodeCanSpeculateInteger):
41948 (JSC::DFG::arithNodeFlagsAsString):
41949 (JSC::DFG::Node::Node):
41950 (JSC::DFG::Node::hasArithNodeFlags):
41951 (JSC::DFG::Node::rawArithNodeFlags):
41952 (JSC::DFG::Node::arithNodeFlags):
41953 (JSC::DFG::Node::arithNodeFlagsForCompare):
41954 (JSC::DFG::Node::setArithNodeFlag):
41955 (JSC::DFG::Node::mergeArithNodeFlags):
41956 * dfg/DFGPropagator.cpp:
41957 (JSC::DFG::Propagator::fixpoint):
41958 (JSC::DFG::Propagator::isNotNegZero):
41959 (JSC::DFG::Propagator::isNotZero):
41960 (JSC::DFG::Propagator::propagateArithNodeFlags):
41961 (JSC::DFG::Propagator::propagateArithNodeFlagsForward):
41962 (JSC::DFG::Propagator::propagateArithNodeFlagsBackward):
41963 (JSC::DFG::Propagator::propagateNodePredictions):
41964 (JSC::DFG::Propagator::propagatePredictionsForward):
41965 (JSC::DFG::Propagator::propagatePredictionsBackward):
41966 (JSC::DFG::Propagator::toDouble):
41967 (JSC::DFG::Propagator::fixupNode):
41968 (JSC::DFG::Propagator::fixup):
41969 (JSC::DFG::Propagator::startIndexForChildren):
41970 (JSC::DFG::Propagator::endIndexForPureCSE):
41971 (JSC::DFG::Propagator::pureCSE):
41972 (JSC::DFG::Propagator::clobbersWorld):
41973 (JSC::DFG::Propagator::setReplacement):
41974 (JSC::DFG::Propagator::performNodeCSE):
41975 (JSC::DFG::Propagator::localCSE):
41976 * dfg/DFGSpeculativeJIT.cpp:
41977 (JSC::DFG::SpeculativeJIT::compile):
41978 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
41980 2011-09-19 Oliver Hunt <oliver@apple.com>
41982 Refactor Heap allocation logic into separate AllocationSpace class
41983 https://bugs.webkit.org/show_bug.cgi?id=68409
41985 Reviewed by Gavin Barraclough.
41987 This patch hoists direct manipulation of the MarkedSpace and related
41988 data out of Heap and into a separate class. This will allow us to
41989 have multiple allocation spaces in future, so easing the way towards
41990 having GC'd backing stores for objects.
41993 * GNUmakefile.list.am:
41994 * JavaScriptCore.exp:
41995 * JavaScriptCore.gypi:
41996 * JavaScriptCore.pro:
41997 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
41998 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
41999 * JavaScriptCore.xcodeproj/project.pbxproj:
42000 * debugger/Debugger.cpp:
42001 (JSC::Debugger::recompileAllJSFunctions):
42002 * heap/AllocationSpace.cpp: Added.
42003 (JSC::AllocationSpace::tryAllocate):
42004 (JSC::AllocationSpace::allocateSlowCase):
42005 (JSC::AllocationSpace::allocateBlock):
42006 (JSC::AllocationSpace::freeBlocks):
42007 (JSC::TakeIfEmpty::TakeIfEmpty):
42008 (JSC::TakeIfEmpty::operator()):
42009 (JSC::TakeIfEmpty::returnValue):
42010 (JSC::AllocationSpace::shrink):
42011 * heap/AllocationSpace.h: Added.
42012 (JSC::AllocationSpace::AllocationSpace):
42013 (JSC::AllocationSpace::blocks):
42014 (JSC::AllocationSpace::sizeClassFor):
42015 (JSC::AllocationSpace::setHighWaterMark):
42016 (JSC::AllocationSpace::highWaterMark):
42017 (JSC::AllocationSpace::canonicalizeBlocks):
42018 (JSC::AllocationSpace::resetAllocator):
42019 (JSC::AllocationSpace::forEachCell):
42020 (JSC::AllocationSpace::forEachBlock):
42021 (JSC::AllocationSpace::allocate):
42024 (JSC::Heap::reportExtraMemoryCostSlowCase):
42025 (JSC::Heap::getConservativeRegisterRoots):
42026 (JSC::Heap::markRoots):
42027 (JSC::Heap::clearMarks):
42028 (JSC::Heap::sweep):
42029 (JSC::Heap::objectCount):
42031 (JSC::Heap::capacity):
42032 (JSC::Heap::globalObjectCount):
42033 (JSC::Heap::objectTypeCounts):
42034 (JSC::Heap::collect):
42035 (JSC::Heap::canonicalizeBlocks):
42036 (JSC::Heap::resetAllocator):
42037 (JSC::Heap::freeBlocks):
42038 (JSC::Heap::shrink):
42040 (JSC::Heap::objectSpace):
42041 (JSC::Heap::sizeClassForObject):
42042 (JSC::Heap::allocate):
42043 * jit/JITInlineMethods.h:
42044 (JSC::JIT::emitAllocateBasicJSObject):
42045 * runtime/JSGlobalData.cpp:
42046 (JSC::JSGlobalData::recompileAllJSFunctions):
42047 (JSC::JSGlobalData::releaseExecutableMemory):
42049 2011-09-19 Geoffrey Garen <ggaren@apple.com>
42051 Removed BREWMP* platform #ifdefs
42052 https://bugs.webkit.org/show_bug.cgi?id=68425
42054 BREWMP* has no maintainer, and this is dead code.
42056 Reviewed by Darin Adler.
42058 * heap/MarkStack.h:
42059 (JSC::::shrinkAllocation):
42060 * jit/ExecutableAllocator.h:
42061 (JSC::ExecutableAllocator::cacheFlush):
42062 * runtime/TimeoutChecker.cpp:
42064 * wtf/Assertions.cpp:
42065 * wtf/Assertions.h:
42066 * wtf/CurrentTime.cpp:
42067 * wtf/DateMath.cpp:
42068 (WTF::calculateUTCOffset):
42069 * wtf/FastMalloc.cpp:
42072 (WTF::fastMallocSize):
42073 * wtf/FastMalloc.h:
42074 * wtf/MainThread.cpp:
42075 * wtf/MathExtras.h:
42076 * wtf/OwnPtrCommon.h:
42078 * wtf/RandomNumber.cpp:
42079 (WTF::randomNumber):
42080 * wtf/RandomNumberSeed.h:
42081 (WTF::initializeRandomNumberGenerator):
42082 * wtf/text/WTFString.h:
42083 * wtf/unicode/Unicode.h:
42085 2011-09-20 Adam Roben <aroben@apple.com>
42087 Windows build fix after r95523
42089 * wtf/CheckedArithmetic.h: Added stdint.h so we can have int64_t defined.
42091 2011-09-18 Filip Pizlo <fpizlo@apple.com>
42093 DFG JIT does not speculate aggressively enough on GetById
42094 https://bugs.webkit.org/show_bug.cgi?id=68320
42096 Reviewed by Oliver Hunt.
42098 This adds the ability to access properties directly, by offset.
42099 This optimization kicks in when at the time of DFG compilation,
42100 it appears that the given get_by_id is self-cached by the old JIT.
42101 Two new opcodes get introduced: CheckStructure and GetByOffset.
42102 CheckStructure performs a speculation check on the object's
42103 structure, and returns the storage pointer. GetByOffset performs
42104 a direct read of the field from the storage pointer. Both
42105 CheckStructure and GetByOffset can be CSE'd, so that we can
42106 eliminate redundant structure checks, and redundant reads of the
42109 This is a 4% speed-up on V8, a 2% slow-down on Kraken, and
42110 neutral on SunSpider.
42112 * bytecode/PredictedType.cpp:
42113 (JSC::predictionFromClassInfo):
42114 (JSC::predictionFromStructure):
42115 (JSC::predictionFromCell):
42116 * bytecode/PredictedType.h:
42117 * dfg/DFGByteCodeParser.cpp:
42118 (JSC::DFG::ByteCodeParser::parseBlock):
42119 * dfg/DFGGenerationInfo.h:
42120 (JSC::DFG::dataFormatToString):
42121 (JSC::DFG::needDataFormatConversion):
42122 (JSC::DFG::GenerationInfo::initStorage):
42123 (JSC::DFG::GenerationInfo::spill):
42124 (JSC::DFG::GenerationInfo::fillStorage):
42126 (JSC::DFG::Graph::predict):
42127 (JSC::DFG::Graph::getPrediction):
42128 * dfg/DFGJITCodeGenerator.cpp:
42129 (JSC::DFG::JITCodeGenerator::fillInteger):
42130 (JSC::DFG::JITCodeGenerator::fillDouble):
42131 (JSC::DFG::JITCodeGenerator::fillJSValue):
42132 (JSC::DFG::JITCodeGenerator::fillStorage):
42133 (JSC::DFG::GPRTemporary::GPRTemporary):
42134 * dfg/DFGJITCodeGenerator.h:
42135 (JSC::DFG::JITCodeGenerator::silentSpillGPR):
42136 (JSC::DFG::JITCodeGenerator::silentFillGPR):
42137 (JSC::DFG::JITCodeGenerator::spill):
42138 (JSC::DFG::JITCodeGenerator::storageResult):
42139 (JSC::DFG::StorageOperand::StorageOperand):
42140 (JSC::DFG::StorageOperand::~StorageOperand):
42141 (JSC::DFG::StorageOperand::index):
42142 (JSC::DFG::StorageOperand::gpr):
42143 (JSC::DFG::StorageOperand::use):
42145 (JSC::DFG::OpInfo::OpInfo):
42146 (JSC::DFG::Node::Node):
42147 (JSC::DFG::Node::hasPrediction):
42148 (JSC::DFG::Node::hasStructure):
42149 (JSC::DFG::Node::structure):
42150 (JSC::DFG::Node::hasStorageAccessData):
42151 (JSC::DFG::Node::storageAccessDataIndex):
42152 * dfg/DFGPropagator.cpp:
42153 (JSC::DFG::Propagator::propagateNode):
42154 (JSC::DFG::Propagator::globalVarLoadElimination):
42155 (JSC::DFG::Propagator::getMethodLoadElimination):
42156 (JSC::DFG::Propagator::checkStructureLoadElimination):
42157 (JSC::DFG::Propagator::getByOffsetLoadElimination):
42158 (JSC::DFG::Propagator::performNodeCSE):
42159 * dfg/DFGSpeculativeJIT.cpp:
42160 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
42161 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
42162 (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
42163 (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
42164 (JSC::DFG::SpeculativeJIT::compile):
42165 * wtf/StdLibExtras.h:
42168 2011-09-19 Mark Hahnenberg <mhahnenberg@apple.com>
42170 Remove toPrimitive from JSCell
42171 https://bugs.webkit.org/show_bug.cgi?id=67875
42173 Reviewed by Darin Adler.
42175 Part of the refactoring process to un-virtualize JSCell. We move
42176 all of the implicit functionality provided by the virtual toPrimitive method
42177 in JSCell to be explicit in JSValue::toPrimitive and JSCell:toPrimitive while
42178 also de-virtualizing JSCell::toPrimitive.
42180 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
42181 * runtime/JSCell.cpp:
42182 (JSC::JSCell::toPrimitive):
42183 * runtime/JSCell.h:
42185 We replace JSNotAnObject::toPrimitive with defaultValue, which it overrides from
42186 JSObject. This pushes the virtual method further down, enabling us to get rid
42187 of the virtual call in JSCell. Eventually we'll probably have to deal with this
42188 again, but we'll cross that bridge when we come to it.
42189 * runtime/JSNotAnObject.cpp:
42190 (JSC::JSNotAnObject::defaultValue):
42191 * runtime/JSNotAnObject.h:
42192 * runtime/JSObject.h:
42193 * runtime/JSString.h:
42195 2011-09-19 Geoffrey Garen <ggaren@apple.com>
42197 Removed ENABLE_LAZY_BLOCK_FREEING and related #ifdefs
42198 https://bugs.webkit.org/show_bug.cgi?id=68424
42200 As discussed on webkit-dev. All ports build with threads enabled in JSC now.
42202 This may break WinCE and other ports that have not built and tested with
42203 this configuration. I've filed bugs for port maintainers. It's time for
42204 WebKit to move forward.
42206 Reviewed by Mark Rowe.
42210 (JSC::Heap::~Heap):
42211 (JSC::Heap::destroy):
42212 (JSC::Heap::blockFreeingThreadMain):
42213 (JSC::Heap::allocateBlock):
42214 (JSC::Heap::freeBlocks):
42215 (JSC::Heap::releaseFreeBlocks):
42219 2011-09-19 Geoffrey Garen <ggaren@apple.com>
42221 Removed ENABLE_WTF_MULTIPLE_THREADS and related #ifdefs
42222 https://bugs.webkit.org/show_bug.cgi?id=68423
42224 As discussed on webkit-dev. All ports build with threads enabled in WTF now.
42226 This may break WinCE and other ports that have not built and tested with
42227 this configuration. I've filed bugs for port maintainers. It's time for
42228 WebKit to move forward.
42230 Reviewed by Mark Rowe.
42232 * wtf/CryptographicallyRandomNumber.cpp:
42233 (WTF::ARC4Stream::ARC4RandomNumberGenerator::randomNumber):
42234 (WTF::ARC4Stream::ARC4RandomNumberGenerator::randomValues):
42235 * wtf/FastMalloc.cpp:
42237 * wtf/RandomNumber.cpp:
42238 (WTF::randomNumber):
42239 * wtf/RefCountedLeakCounter.cpp:
42240 (WTF::RefCountedLeakCounter::increment):
42241 (WTF::RefCountedLeakCounter::decrement):
42242 * wtf/ThreadingPthreads.cpp:
42243 (WTF::initializeThreading):
42244 * wtf/ThreadingWin.cpp:
42245 (WTF::initializeThreading):
42248 * wtf/gtk/ThreadingGtk.cpp:
42249 (WTF::initializeThreading):
42250 * wtf/qt/ThreadingQt.cpp:
42251 (WTF::initializeThreading):
42253 2011-09-19 Geoffrey Garen <ggaren@apple.com>
42255 Removed ENABLE_JSC_MULTIPLE_THREADS and related #ifdefs.
42256 https://bugs.webkit.org/show_bug.cgi?id=68422
42258 As discussed on webkit-dev. All ports build with threads enabled in JSC now.
42260 This may break WinCE and other ports that have not built and tested with
42261 this configuration. I've filed bugs for port maintainers. It's time for
42262 WebKit to move forward.
42264 Reviewed by Sam Weinig.
42267 (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
42268 * API/JSContextRef.cpp:
42269 * heap/MachineStackMarker.cpp:
42270 (JSC::MachineThreads::MachineThreads):
42271 (JSC::MachineThreads::~MachineThreads):
42272 (JSC::MachineThreads::gatherConservativeRoots):
42273 * heap/MachineStackMarker.h:
42274 * runtime/InitializeThreading.cpp:
42275 (JSC::initializeThreadingOnce):
42276 (JSC::initializeThreading):
42277 * runtime/JSGlobalData.cpp:
42278 (JSC::JSGlobalData::sharedInstance):
42279 * runtime/JSGlobalData.h:
42280 (JSC::JSGlobalData::makeUsableFromMultipleThreads):
42281 * runtime/JSLock.cpp:
42282 * runtime/Structure.cpp:
42285 2011-09-19 Sheriff Bot <webkit.review.bot@gmail.com>
42287 Unreviewed, rolling out r95493 and r95496.
42288 http://trac.webkit.org/changeset/95493
42289 http://trac.webkit.org/changeset/95496
42290 https://bugs.webkit.org/show_bug.cgi?id=68418
42292 Broke Windows build (Requested by rniwa on #webkit).
42295 * GNUmakefile.list.am:
42296 * JavaScriptCore.exp:
42297 * JavaScriptCore.gypi:
42298 * JavaScriptCore.pro:
42299 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
42300 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
42301 * JavaScriptCore.xcodeproj/project.pbxproj:
42302 * debugger/Debugger.cpp:
42303 (JSC::Debugger::recompileAllJSFunctions):
42304 * heap/AllocationSpace.cpp: Removed.
42305 * heap/AllocationSpace.h: Removed.
42307 (JSC::CountFunctor::TakeIfEmpty::TakeIfEmpty):
42308 (JSC::CountFunctor::TakeIfEmpty::operator()):
42309 (JSC::CountFunctor::TakeIfEmpty::returnValue):
42311 (JSC::Heap::reportExtraMemoryCostSlowCase):
42312 (JSC::Heap::tryAllocate):
42313 (JSC::Heap::allocateSlowCase):
42314 (JSC::Heap::getConservativeRegisterRoots):
42315 (JSC::Heap::markRoots):
42316 (JSC::Heap::clearMarks):
42317 (JSC::Heap::sweep):
42318 (JSC::Heap::objectCount):
42320 (JSC::Heap::capacity):
42321 (JSC::Heap::globalObjectCount):
42322 (JSC::Heap::objectTypeCounts):
42323 (JSC::Heap::collect):
42324 (JSC::Heap::canonicalizeBlocks):
42325 (JSC::Heap::resetAllocator):
42326 (JSC::Heap::allocateBlock):
42327 (JSC::Heap::freeBlocks):
42328 (JSC::Heap::shrink):
42330 (JSC::Heap::markedSpace):
42331 (JSC::Heap::forEachCell):
42332 (JSC::Heap::forEachBlock):
42333 (JSC::Heap::sizeClassFor):
42334 (JSC::Heap::allocate):
42335 * jit/JITInlineMethods.h:
42336 (JSC::JIT::emitAllocateBasicJSObject):
42337 * runtime/JSGlobalData.cpp:
42338 (JSC::JSGlobalData::recompileAllJSFunctions):
42339 (JSC::JSGlobalData::releaseExecutableMemory):
42341 2011-09-19 Gavin Barraclough <barraclough@apple.com>
42343 Errrk, missed stylebot comments in last commit.
42345 * runtime/StringPrototype.cpp:
42346 (JSC::stringProtoFuncSplit):
42348 2011-09-19 Gavin Barraclough <barraclough@apple.com>
42350 String#split is buggy
42351 https://bugs.webkit.org/show_bug.cgi?id=68348
42353 Reviewed by Sam Weinig.
42355 * runtime/StringPrototype.cpp:
42356 (JSC::jsStringWithReuse):
42357 - added helper function to reuse original JSString value.
42358 (JSC::stringProtoFuncSplit):
42359 - Rewritten from the spec.
42360 * tests/mozilla/ecma/String/15.5.4.8-2.js:
42362 - This test is not ES5 compliant.
42364 2011-09-19 Geoffrey Garen <ggaren@apple.com>
42366 Removed lots of friend declarations from JSCell, so we can more
42367 effectively make use of private and protected.
42369 Reviewed by Sam Weinig.
42371 * runtime/JSCell.h: Removed MSVCBugWorkaround because it was a lot of
42372 confusion for not much safety.
42373 (JSC::JSCell::operator new): Made this public because it is used by a
42374 few clients, and not really dangerous.
42376 * runtime/JSObject.cpp:
42377 (JSC::JSObject::put):
42378 (JSC::JSObject::deleteProperty):
42379 (JSC::JSObject::defineGetter):
42380 (JSC::JSObject::defineSetter):
42381 (JSC::JSObject::getPropertySpecificValue):
42382 (JSC::JSObject::getOwnPropertyNames):
42383 (JSC::JSObject::seal):
42384 (JSC::JSObject::freeze):
42385 (JSC::JSObject::preventExtensions):
42386 (JSC::JSObject::removeDirect):
42387 (JSC::JSObject::createInheritorID):
42388 (JSC::JSObject::allocatePropertyStorage):
42389 (JSC::JSObject::getOwnPropertyDescriptor):
42390 * runtime/JSObject.h:
42391 (JSC::JSObject::getDirect):
42392 (JSC::JSObject::getDirectLocation):
42393 (JSC::JSObject::hasCustomProperties):
42394 (JSC::JSObject::hasGetterSetterProperties):
42395 (JSC::JSObject::isSealed):
42396 (JSC::JSObject::isFrozen):
42397 (JSC::JSObject::isExtensible):
42398 (JSC::JSObject::flattenDictionaryObject):
42399 (JSC::JSObject::finishCreation):
42400 (JSC::JSObject::prototype):
42401 (JSC::JSObject::setPrototype):
42402 (JSC::JSObject::inlineGetOwnPropertySlot):
42403 (JSC::JSCell::fastGetOwnProperty):
42404 (JSC::JSObject::putDirectInternal):
42405 (JSC::JSObject::putDirectWithoutTransition):
42406 (JSC::JSObject::transitionTo):
42407 (JSC::JSObject::visitChildrenDirect): Changed all use of m_structure to
42408 structure() / setStructure(), so we don't have to be a friend of JSCell.
42410 * runtime/Structure.h:
42411 (JSC::JSCell::setStructure): Added, to avoid direct access by JSObject
42412 to JSCell::m_structure.
42414 2011-09-19 Adam Barth <abarth@webkit.org>
42416 Always enable ENABLE(EVENTSOURCE)
42417 https://bugs.webkit.org/show_bug.cgi?id=68414
42419 Reviewed by Eric Seidel.
42421 * Configurations/FeatureDefines.xcconfig:
42423 2011-09-19 Eli Fidler <efidler@rim.com>
42425 Enable JSC_MULTIPLE_THREADS for OS(QNX).
42426 https://bugs.webkit.org/show_bug.cgi?id=68047
42428 Reviewed by Daniel Bates.
42430 SA_RESTART was required for SIGUSR2-based debugging, but is not
42431 present on QNX. This debugging doesn't seem critical to
42432 JSC_MULTIPLE_THREADS, so allow it to proceed.
42434 * heap/MachineStackMarker.cpp:
42435 (JSC::MachineThreads::Thread::Thread):
42436 (JSC::getPlatformThreadRegisters):
42437 (JSC::otherThreadStackPointer):
42438 (JSC::freePlatformThreadRegisters):
42439 * wtf/Platform.h: enable PTHREADS for OS(QNX)
42441 2011-09-19 Oliver Hunt <oliver@apple.com>
42445 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
42447 2011-09-19 Oliver Hunt <oliver@apple.com>
42449 Refactor Heap allocation logic into separate AllocationSpace class
42450 https://bugs.webkit.org/show_bug.cgi?id=68409
42452 Reviewed by Gavin Barraclough.
42454 This patch hoists direct manipulation of the MarkedSpace and related
42455 data out of Heap and into a separate class. This will allow us to
42456 have multiple allocation spaces in future, so easing the way towards
42457 having GC'd backing stores for objects.
42460 * GNUmakefile.list.am:
42461 * JavaScriptCore.exp:
42462 * JavaScriptCore.gypi:
42463 * JavaScriptCore.pro:
42464 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
42465 * JavaScriptCore.xcodeproj/project.pbxproj:
42466 * debugger/Debugger.cpp:
42467 (JSC::Debugger::recompileAllJSFunctions):
42468 * heap/AllocationSpace.cpp: Added.
42469 (JSC::AllocationSpace::tryAllocate):
42470 (JSC::AllocationSpace::allocateSlowCase):
42471 (JSC::AllocationSpace::allocateBlock):
42472 (JSC::AllocationSpace::freeBlocks):
42473 (JSC::TakeIfEmpty::TakeIfEmpty):
42474 (JSC::TakeIfEmpty::operator()):
42475 (JSC::TakeIfEmpty::returnValue):
42476 (JSC::AllocationSpace::shrink):
42477 * heap/AllocationSpace.h: Added.
42478 (JSC::AllocationSpace::AllocationSpace):
42479 (JSC::AllocationSpace::blocks):
42480 (JSC::AllocationSpace::sizeClassFor):
42481 (JSC::AllocationSpace::setHighWaterMark):
42482 (JSC::AllocationSpace::highWaterMark):
42483 (JSC::AllocationSpace::canonicalizeBlocks):
42484 (JSC::AllocationSpace::resetAllocator):
42485 (JSC::AllocationSpace::forEachCell):
42486 (JSC::AllocationSpace::forEachBlock):
42487 (JSC::AllocationSpace::allocate):
42490 (JSC::Heap::reportExtraMemoryCostSlowCase):
42491 (JSC::Heap::getConservativeRegisterRoots):
42492 (JSC::Heap::markRoots):
42493 (JSC::Heap::clearMarks):
42494 (JSC::Heap::sweep):
42495 (JSC::Heap::objectCount):
42497 (JSC::Heap::capacity):
42498 (JSC::Heap::globalObjectCount):
42499 (JSC::Heap::objectTypeCounts):
42500 (JSC::Heap::collect):
42501 (JSC::Heap::canonicalizeBlocks):
42502 (JSC::Heap::resetAllocator):
42503 (JSC::Heap::freeBlocks):
42504 (JSC::Heap::shrink):
42506 (JSC::Heap::objectSpace):
42507 (JSC::Heap::sizeClassForObject):
42508 (JSC::Heap::allocate):
42509 * jit/JITInlineMethods.h:
42510 (JSC::JIT::emitAllocateBasicJSObject):
42511 * runtime/JSGlobalData.cpp:
42512 (JSC::JSGlobalData::recompileAllJSFunctions):
42513 (JSC::JSGlobalData::releaseExecutableMemory):
42515 2011-09-19 Adam Roben <aroben@apple.com>
42517 Windows build fix after r95310
42519 * JavaScriptCore.vcproj/testRegExp/testRegExpCommon.vsprops: Added
42520 include\private\JavaScriptCore to the include path so DFGIntrinsic.h can be found.
42522 2011-09-19 Filip Pizlo <fpizlo@apple.com>
42524 DFG speculation failures should act as additional value profiles
42525 https://bugs.webkit.org/show_bug.cgi?id=68335
42527 Reviewed by Oliver Hunt.
42529 This adds slow-case counters to the old JIT. It also ensures that
42530 negative zero in multiply is handled carefully. The old JIT
42531 previously took slow path if the result of a multiply was zero,
42532 which, without any changes, would cause the DFG to think that
42533 every such multiply produced a double result.
42535 This also fixes a bug in the old JIT's handling of decrements. It
42536 would take the slow path if the result was zero, but not if it
42539 By itself, this would be a 1% slow-down on V8 and Kraken. But then
42540 I wrote optimizations in the DFG that take advantage of this new
42541 information. It's no longer the case that every multiply needs to
42542 do a check for negative zero; it only happens if the negative
42545 This results in a 12% speed-up on v8-crypto, for a 1.4% geomean
42546 speed-up in V8. It's mostly neutral on Kraken. I can see an
42547 0.5% slow-down and it appears to be significant.
42549 * bytecode/CodeBlock.cpp:
42550 (JSC::CodeBlock::resetRareCaseProfiles):
42551 (JSC::CodeBlock::dumpValueProfiles):
42552 * bytecode/CodeBlock.h:
42553 * bytecode/ValueProfile.h:
42554 (JSC::RareCaseProfile::RareCaseProfile):
42555 (JSC::getRareCaseProfileBytecodeOffset):
42556 * dfg/DFGByteCodeParser.cpp:
42557 (JSC::DFG::ByteCodeParser::toInt32):
42558 (JSC::DFG::ByteCodeParser::makeSafe):
42559 (JSC::DFG::ByteCodeParser::parseBlock):
42560 * dfg/DFGJITCodeGenerator.cpp:
42561 (JSC::DFG::GPRTemporary::GPRTemporary):
42562 * dfg/DFGJITCodeGenerator.h:
42564 * dfg/DFGPropagator.cpp:
42565 (JSC::DFG::Propagator::propagateNode):
42566 (JSC::DFG::Propagator::fixupNode):
42567 (JSC::DFG::Propagator::clobbersWorld):
42568 (JSC::DFG::Propagator::performNodeCSE):
42569 * dfg/DFGSpeculativeJIT.cpp:
42570 (JSC::DFG::SpeculativeJIT::compile):
42571 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
42573 (JSC::JIT::privateCompileSlowCases):
42575 (JSC::JIT::linkDummySlowCase):
42576 * jit/JITArithmetic.cpp:
42577 (JSC::JIT::emit_op_post_dec):
42578 (JSC::JIT::emit_op_pre_dec):
42579 (JSC::JIT::compileBinaryArithOp):
42580 (JSC::JIT::emit_op_add):
42581 (JSC::JIT::emitSlow_op_add):
42582 * jit/JITInlineMethods.h:
42583 (JSC::JIT::addSlowCase):
42585 2011-09-19 Adam Roben <aroben@apple.com>
42587 Windows build fix after r94575
42589 * JavaScriptCore.vcproj/JavaScriptCore.sln: Relinearized project dependencies. testRegExp
42590 now builds just before FindSafari.
42592 2011-09-19 Sheriff Bot <webkit.review.bot@gmail.com>
42594 Unreviewed, rolling out r95466.
42595 http://trac.webkit.org/changeset/95466
42596 https://bugs.webkit.org/show_bug.cgi?id=68389
42598 Incorrect version of the patch. (Requested by mhahnenberg on
42601 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
42602 * runtime/JSCell.cpp:
42603 (JSC::JSCell::toPrimitive):
42604 * runtime/JSCell.h:
42605 (JSC::JSCell::JSValue::toPrimitive):
42606 * runtime/JSNotAnObject.cpp:
42607 (JSC::JSNotAnObject::toPrimitive):
42608 * runtime/JSNotAnObject.h:
42609 * runtime/JSObject.h:
42610 * runtime/JSString.h:
42612 2011-09-19 Mark Hahnenberg <mhahnenberg@apple.com>
42614 Remove toPrimitive from JSCell
42615 https://bugs.webkit.org/show_bug.cgi?id=67875
42617 Reviewed by Geoffrey Garen.
42619 Part of the refactoring process to un-virtualize JSCell. We move
42620 all of the implicit functionality provided by the virtual toPrimitive method
42621 in JSCell to be explicit in JSValue::toPrimitive and JSCell:toPrimitive while
42622 also de-virtualizing JSCell::toPrimitive.
42624 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
42625 * runtime/JSCell.cpp:
42626 (JSC::JSCell::toPrimitive):
42627 * runtime/JSCell.h:
42629 We replace JSNotAnObject::toPrimitive with defaultValue, which it overrides from
42630 JSObject. This pushes the virtual method further down, enabling us to get rid
42631 of the virtual call in JSCell. Eventually we'll probably have to deal with this
42632 again, but we'll cross that bridge when we come to it.
42633 * runtime/JSNotAnObject.cpp:
42634 (JSC::JSNotAnObject::defaultValue):
42635 * runtime/JSNotAnObject.h:
42636 * runtime/JSObject.h:
42637 * runtime/JSString.h:
42638 (JSC::JSValue::toPrimitive):
42640 2011-09-19 Oliver Hunt <oliver@apple.com>
42644 * jit/JITPropertyAccess32_64.cpp:
42645 (JSC::JIT::compileGetDirectOffset):
42647 2011-09-19 Oliver Hunt <oliver@apple.com>
42649 Rename NewSpace.{h,cpp} to MarkedSpace.{h,cpp}
42650 https://bugs.webkit.org/show_bug.cgi?id=68376
42652 Reviewed by Gavin Barraclough.
42654 Renamed the the MarkedSpace files to match new name, and
42655 updated the relevant references.
42658 * GNUmakefile.list.am:
42659 * JavaScriptCore.gypi:
42660 * JavaScriptCore.pro:
42661 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
42662 * JavaScriptCore.xcodeproj/project.pbxproj:
42664 * heap/MarkedSpace.cpp: Renamed from Source/JavaScriptCore/heap/NewSpace.cpp.
42665 (JSC::MarkedSpace::MarkedSpace):
42666 (JSC::MarkedSpace::addBlock):
42667 (JSC::MarkedSpace::removeBlock):
42668 (JSC::MarkedSpace::resetAllocator):
42669 (JSC::MarkedSpace::canonicalizeBlocks):
42670 * heap/MarkedSpace.h: Renamed from Source/JavaScriptCore/heap/NewSpace.h.
42671 (JSC::MarkedSpace::waterMark):
42672 (JSC::MarkedSpace::highWaterMark):
42673 (JSC::MarkedSpace::setHighWaterMark):
42674 (JSC::MarkedSpace::sizeClassFor):
42675 (JSC::MarkedSpace::allocate):
42676 (JSC::MarkedSpace::forEachBlock):
42677 (JSC::MarkedSpace::SizeClass::SizeClass):
42678 (JSC::MarkedSpace::SizeClass::resetAllocator):
42679 (JSC::MarkedSpace::SizeClass::canonicalizeBlock):
42680 * runtime/JSCell.h:
42682 2011-09-19 Oliver Hunt <oliver@apple.com>
42684 Rename NewSpace to MarkedSpace
42685 https://bugs.webkit.org/show_bug.cgi?id=68375
42687 Reviewed by Gavin Barraclough.
42689 Rename NewSpace to a more accurate name, and update all uses.
42690 This patch doesn't rename the files themselves as that will
42691 just make the patch appear bigger than it is.
42693 * JavaScriptCore.exp:
42694 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
42696 (JSC::CountFunctor::TakeIfEmpty::TakeIfEmpty):
42697 (JSC::CountFunctor::TakeIfEmpty::operator()):
42699 (JSC::Heap::reportExtraMemoryCostSlowCase):
42700 (JSC::Heap::tryAllocate):
42701 (JSC::Heap::allocateSlowCase):
42702 (JSC::Heap::collect):
42703 (JSC::Heap::canonicalizeBlocks):
42704 (JSC::Heap::resetAllocator):
42705 (JSC::Heap::isValidAllocation):
42706 (JSC::Heap::shrink):
42708 (JSC::Heap::markedSpace):
42709 (JSC::Heap::sizeClassFor):
42710 (JSC::Heap::allocate):
42711 * heap/NewSpace.cpp:
42712 (JSC::MarkedSpace::MarkedSpace):
42713 (JSC::MarkedSpace::addBlock):
42714 (JSC::MarkedSpace::removeBlock):
42715 (JSC::MarkedSpace::resetAllocator):
42716 (JSC::MarkedSpace::canonicalizeBlocks):
42718 (JSC::MarkedSpace::waterMark):
42719 (JSC::MarkedSpace::highWaterMark):
42720 (JSC::MarkedSpace::setHighWaterMark):
42721 (JSC::MarkedSpace::sizeClassFor):
42722 (JSC::MarkedSpace::allocate):
42723 (JSC::MarkedSpace::forEachBlock):
42724 (JSC::MarkedSpace::SizeClass::SizeClass):
42725 (JSC::MarkedSpace::SizeClass::resetAllocator):
42726 (JSC::MarkedSpace::SizeClass::canonicalizeBlock):
42727 * jit/JITInlineMethods.h:
42728 (JSC::JIT::emitAllocateBasicJSObject):
42730 2011-09-19 Peter Rybin <peter.rybin@gmail.com>
42732 TextPosition refactoring: Merge ZeroBasedNumber and OneBasedNumber classes
42733 https://bugs.webkit.org/show_bug.cgi?id=63541
42735 Reviewed by Adam Barth.
42737 * parser/SourceProvider.h:
42738 (JSC::SourceProvider::startPosition):
42739 * wtf/text/TextPosition.h:
42740 (WTF::OrdinalNumber::fromZeroBasedInt):
42741 (WTF::OrdinalNumber::fromOneBasedInt):
42742 (WTF::OrdinalNumber::OrdinalNumber):
42743 (WTF::OrdinalNumber::zeroBasedInt):
42744 (WTF::OrdinalNumber::oneBasedInt):
42745 (WTF::OrdinalNumber::operator==):
42746 (WTF::OrdinalNumber::operator!=):
42747 (WTF::OrdinalNumber::first):
42748 (WTF::OrdinalNumber::beforeFirst):
42749 (WTF::TextPosition::TextPosition):
42750 (WTF::TextPosition::minimumPosition):
42751 (WTF::TextPosition::belowRangePosition):
42753 2011-09-19 Dan Bernstein <mitz@apple.com>
42755 JavaScriptCore part of [mac] WebKit contains Objective-C classes that are not prefixed with its standard prefixes
42756 https://bugs.webkit.org/show_bug.cgi?id=68323
42758 Reviewed by Sam Weinig.
42760 Renamed WTFMainThreadCaller to JSWTFMainThreadCaller.
42762 * wtf/mac/MainThreadMac.mm:
42763 (WTF::initializeMainThreadPlatform):
42764 (WTF::initializeMainThreadToProcessMainThreadPlatform):
42766 2011-09-19 Oliver Hunt <oliver@apple.com>
42768 Remove direct property slot pointers from the instruction stream
42769 https://bugs.webkit.org/show_bug.cgi?id=68373
42771 Reviewed by Gavin Barraclough.
42773 Use an indirect load to access prototype properties rather than directly
42774 storing the property address in the instruction stream. This should allow
42775 further optimisations in future, and also provides a 0.5% win to sunspider.
42777 * dfg/DFGRepatch.cpp:
42778 (JSC::DFG::generateProtoChainAccessStub):
42779 * jit/JITPropertyAccess.cpp:
42780 (JSC::JIT::compileGetDirectOffset):
42781 * jit/JITPropertyAccess32_64.cpp:
42782 (JSC::JIT::compileGetDirectOffset):
42783 * runtime/JSObject.h:
42784 (JSC::JSObject::addressOfPropertyStorage):
42786 2011-09-19 Oliver Hunt <oliver@apple.com>
42788 Remove bump allocator
42789 https://bugs.webkit.org/show_bug.cgi?id=68370
42791 Reviewed by Sam Weinig.
42793 Can't do anything with this allocator currently, and it's
42794 increasing the complexity of the GC code. Slight progression
42795 on SunSpider, slight regression (undoing the original progression)
42799 (JSC::Heap::collect):
42801 * heap/NewSpace.cpp:
42802 (JSC::NewSpace::NewSpace):
42804 (JSC::NewSpace::allocate):
42805 * runtime/JSObject.cpp:
42806 (JSC::JSObject::allocatePropertyStorage):
42807 * runtime/JSObject.h:
42808 (JSC::JSObject::~JSObject):
42809 (JSC::JSObject::visitChildrenDirect):
42810 * runtime/StorageBarrier.h:
42811 (JSC::StorageBarrier::set):
42813 2011-09-19 Carlos Garcia Campos <cgarcia@igalia.com>
42815 [GTK] Fix distcheck build
42816 https://bugs.webkit.org/show_bug.cgi?id=68346
42818 Reviewed by Philippe Normand.
42820 * GNUmakefile.list.am:
42822 2011-09-19 Carlos Garcia Campos <cgarcia@igalia.com>
42824 [GTK] Fix distcheck build
42825 https://bugs.webkit.org/show_bug.cgi?id=68241
42827 Reviewed by Martin Robinson.
42829 * GNUmakefile.list.am:
42831 2011-09-18 Dan Bernstein <mitz@apple.com>
42833 Removed ProfilerServer.
42835 Reviewed by Mark Rowe.
42837 * JavaScriptCore.gypi:
42838 * JavaScriptCore.xcodeproj/project.pbxproj:
42839 * profiler/ProfilerServer.h: Removed.
42840 * profiler/ProfilerServer.mm: Removed.
42841 * runtime/JSGlobalData.cpp:
42842 (JSC::JSGlobalData::JSGlobalData):
42845 2011-09-17 Filip Pizlo <fpizlo@apple.com>
42847 DFG JIT should inline Math.min, Math.max, and Math.sqrt
42848 https://bugs.webkit.org/show_bug.cgi?id=68318
42850 Reviewed by Gavin Barraclough.
42852 Adds Math.min, Math.max, and Math.sqrt intrinsics. Adds support for
42853 a function to have an intrinsic but not a thunk generator. This is
42854 a 7% speed-up on access-nbody, and neutral elsewhere, mainly because
42855 we're still not DFG compiling the bulk of the hot code in Kraken audio
42858 * create_hash_table:
42859 * dfg/DFGByteCodeParser.cpp:
42860 (JSC::DFG::ByteCodeParser::handleMinMax):
42861 (JSC::DFG::ByteCodeParser::handleIntrinsic):
42862 * dfg/DFGIntrinsic.h:
42864 * dfg/DFGPropagator.cpp:
42865 (JSC::DFG::Propagator::propagateNode):
42866 (JSC::DFG::Propagator::fixupNode):
42867 * dfg/DFGSpeculativeJIT.cpp:
42868 (JSC::DFG::SpeculativeJIT::compile):
42869 * jit/JITStubs.cpp:
42870 (JSC::JITThunks::hostFunctionStub):
42871 * runtime/Lookup.cpp:
42872 (JSC::setUpStaticFunctionSlot):
42874 2011-09-18 Nico Weber <thakis@chromium.org>
42876 Remove two files from JavaScriptCore.gypi that were removed in r95240
42877 https://bugs.webkit.org/show_bug.cgi?id=68327
42879 Unreviewed, build warning fix.
42881 * JavaScriptCore.gypi:
42883 2011-09-17 Oliver Hunt <oliver@apple.com>
42885 Remove special case handling of inline storage from the JIT
42886 https://bugs.webkit.org/show_bug.cgi?id=68319
42888 Reviewed by Gavin Barraclough.
42890 Simplify logic used for reading and writing to property storage
42891 by removing the special cases for inline storage. This has no
42894 * dfg/DFGRepatch.cpp:
42895 (JSC::DFG::generateProtoChainAccessStub):
42896 (JSC::DFG::tryBuildGetByIDList):
42898 * jit/JITPropertyAccess.cpp:
42899 (JSC::JIT::compilePutDirectOffset):
42900 (JSC::JIT::compileGetDirectOffset):
42901 (JSC::JIT::privateCompilePutByIdTransition):
42902 (JSC::JIT::privateCompileGetByIdSelfList):
42903 * jit/JITPropertyAccess32_64.cpp:
42904 (JSC::JIT::compilePutDirectOffset):
42905 (JSC::JIT::compileGetDirectOffset):
42906 (JSC::JIT::privateCompilePutByIdTransition):
42907 (JSC::JIT::privateCompileGetByIdSelfList):
42909 2011-09-17 Filip Pizlo <fpizlo@apple.com>
42911 DFG JIT does not have full block-local CSE
42912 https://bugs.webkit.org/show_bug.cgi?id=68316
42914 Reviewed by Oliver Hunt.
42916 This adds block-local CSE to the DFG. CSE runs in the propagator just after
42917 type propagation. It is part of the propagator itself because it needs to
42918 use the propagator's internal data structures to determine which operations
42919 may have side effects. Because it changes the live-ranges of nodes, the
42920 virtual register allocator had to be moved into the propagator so that it
42921 runs after CSE. To ensure that the back-end knows to keep the inputs to
42922 any eliminated node alive for OSR, a new node type, Phantom, was introduced.
42923 It is a no-op but prolonges the live-range of its inputs.
42925 This is an 80% speed-up on imaging-gaussian-blur, and a 10% speed-up on
42928 * JavaScriptCore.xcodeproj/project.pbxproj:
42929 * dfg/DFGAliasTracker.h: Removed.
42930 * dfg/DFGByteCodeParser.cpp:
42931 (JSC::DFG::ByteCodeParser::parseBlock):
42932 (JSC::DFG::ByteCodeParser::parse):
42933 * dfg/DFGGraph.cpp:
42934 (JSC::DFG::Graph::dump):
42936 (JSC::DFG::MethodCheckData::operator==):
42937 (JSC::DFG::MethodCheckData::operator!=):
42939 (JSC::DFG::Node::hasVirtualRegister):
42940 (JSC::DFG::Node::setRefCount):
42941 * dfg/DFGPropagator.cpp:
42942 (JSC::DFG::Propagator::Propagator):
42943 (JSC::DFG::Propagator::fixpoint):
42944 (JSC::DFG::Propagator::propagateNode):
42945 (JSC::DFG::Propagator::canonicalize):
42946 (JSC::DFG::Propagator::computeStartIndex):
42947 (JSC::DFG::Propagator::startIndex):
42948 (JSC::DFG::Propagator::pureCSE):
42949 (JSC::DFG::Propagator::globalVarLoadElimination):
42950 (JSC::DFG::Propagator::getByValLoadElimination):
42951 (JSC::DFG::Propagator::getMethodLoadElimination):
42952 (JSC::DFG::Propagator::performSubstitution):
42953 (JSC::DFG::Propagator::setReplacement):
42954 (JSC::DFG::Propagator::performNodeCSE):
42955 (JSC::DFG::Propagator::performBlockCSE):
42956 (JSC::DFG::Propagator::localCSE):
42957 (JSC::DFG::Propagator::allocateVirtualRegisters):
42958 (JSC::DFG::propagate):
42959 * dfg/DFGSpeculativeJIT.cpp:
42960 (JSC::DFG::SpeculativeJIT::compile):
42962 2011-09-16 Filip Pizlo <fpizlo@apple.com>
42964 method_check should repatch itself if it finds that the new structure(s)
42965 are the result of transitions from the old structure(s)
42966 https://bugs.webkit.org/show_bug.cgi?id=68294
42968 Reviewed by Gavin Barraclough.
42970 Previously a patched method_check would slow-path to get_by_id. Now it
42971 slow-paths to method_check_update, which attempts to correct the
42972 method_check due to structure transitions before bailing to get_by_id.
42974 This is a 1-2% speed-up on some benchmarks and is not a slow-down
42975 anywhere, leading to a 0.6% speed-up on the Kraken geomean.
42977 * jit/JITPropertyAccess.cpp:
42978 (JSC::JIT::patchMethodCallProto):
42979 * jit/JITStubs.cpp:
42980 (JSC::DEFINE_STUB_FUNCTION):
42982 * runtime/Structure.h:
42983 (JSC::Structure::transitivelyTransitionedFrom):
42985 2011-09-16 Ryosuke Niwa <rniwa@webkit.org>
42987 Touch Platform.h in the hope to fix SnowLeopard Intel Release (WebKit2 Tests).
42991 2011-09-16 Sam Weinig <sam@webkit.org>
42993 Rename APIValueWrapper type to APIValueWrapperType for consistency
42994 https://bugs.webkit.org/show_bug.cgi?id=68306
42996 Reviewed by Anders Carlsson.
42998 * runtime/JSAPIValueWrapper.h:
42999 (JSC::JSAPIValueWrapper::createStructure):
43002 * runtime/JSType.h:
43003 Update name and un-indent.
43005 * runtime/Structure.h:
43006 (JSC::JSCell::isAPIValueWrapper):
43009 2011-09-16 Sam Weinig <sam@webkit.org>
43011 Remove unused isStrictModeFunction function
43012 https://bugs.webkit.org/show_bug.cgi?id=68305
43014 Reviewed by Anders Carlsson.
43016 * runtime/JSObject.h:
43017 (JSC::JSObject::isStrictModeFunction):
43019 2011-09-16 Sam Weinig <sam@webkit.org>
43021 Cleanup JSTypeInfo a bit
43022 https://bugs.webkit.org/show_bug.cgi?id=68289
43024 Reviewed by Anders Carlsson.
43026 * dfg/DFGOperations.cpp:
43027 * jit/JITStubs.cpp:
43028 (JSC::DEFINE_STUB_FUNCTION):
43029 Replace direct access to flags() with predicate.
43031 * runtime/JSObject.h:
43032 (JSC::JSFinalObject::createStructure):
43033 Pass FinalObjectType instead of using special IsJSFinalObject.
43035 * runtime/JSTypeInfo.h:
43036 (JSC::TypeInfo::TypeInfo):
43037 Add additional assert that you should no object should OverridesHasInstance but not have ImplementsHasInstance set.
43039 (JSC::TypeInfo::isFinalObject):
43042 (JSC::TypeInfo::masqueradesAsUndefined):
43043 (JSC::TypeInfo::implementsHasInstance):
43044 (JSC::TypeInfo::isEnvironmentRecord):
43045 (JSC::TypeInfo::overridesHasInstance):
43046 (JSC::TypeInfo::implementsDefaultHasInstance):
43047 (JSC::TypeInfo::overridesGetOwnPropertySlot):
43048 (JSC::TypeInfo::overridesVisitChildren):
43049 (JSC::TypeInfo::overridesGetPropertyNames):
43050 (JSC::TypeInfo::prohibitsPropertyCaching):
43051 (JSC::TypeInfo::isSetOnFlags1):
43052 (JSC::TypeInfo::isSetOnFlags2):
43053 Replace direct bit twiddling with helper functions.
43055 * runtime/Structure.cpp:
43056 (JSC::Structure::Structure):
43057 Use new isFinalObject() predicate.
43059 2011-09-16 Gavin Barraclough <barraclough@apple.com>
43061 Unsigned bit shift fails under certain conditions in 32 bit builds
43062 https://bugs.webkit.org/show_bug.cgi?id=68166
43064 Reviewed by Geoff Garen.
43066 The major bug here is that the slow case (which handles shifts of
43067 doubles) doesn't check for negative results from an unsigned shift
43068 (which should be unsigned, and as such can't be represented by a
43069 signed integer immediate). The implementation is also flawed for
43070 shifts by negative shift amounts (treats as shift by zero).
43072 * jit/JITArithmetic32_64.cpp:
43073 (JSC::JIT::emitRightShift):
43074 (JSC::JIT::emitRightShiftSlowCase):
43076 2011-09-16 Geoffrey Garen <ggaren@apple.com>
43078 Removed undetectable style.filter.
43080 Reviewed by Sam Weinig.
43082 This feature was added in http://trac.webkit.org/changeset/15557 to
43083 support housingmaps.com. But housingmaps.com no longer needs this hack,
43084 we don't know of other websites that need it, and we don't know of
43085 any other browsers that have implemented this feature.
43087 * GNUmakefile.list.am:
43088 * JavaScriptCore.gypi:
43089 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
43090 * JavaScriptCore.xcodeproj/project.pbxproj:
43091 * runtime/JSTypeInfo.h:
43092 * runtime/StringObjectThatMasqueradesAsUndefined.h: Removed.
43094 2011-09-15 Sam Weinig <sam@webkit.org>
43096 Prepare JSTypes for more Object subtypes
43097 https://bugs.webkit.org/show_bug.cgi?id=68200
43099 Reviewed by Gavin Barraclough.
43101 * dfg/DFGJITCompiler.h:
43102 (JSC::DFG::JITCompiler::branchIfNotObject):
43103 * jit/JITInlineMethods.h:
43104 (JSC::JIT::emitJumpIfNotObject):
43105 * runtime/JSGlobalObject.h:
43106 (JSC::Structure::prototypeForLookup):
43107 * runtime/JSObject.h:
43108 (JSC::JSObject::finishCreation):
43109 * runtime/JSType.h:
43110 * runtime/JSTypeInfo.h:
43111 (JSC::TypeInfo::type):
43112 (JSC::TypeInfo::isObject):
43113 (JSC::TypeInfo::isFinal):
43114 (JSC::TypeInfo::prohibitsPropertyCaching):
43115 * runtime/NativeErrorConstructor.h:
43116 (JSC::NativeErrorConstructor::finishCreation):
43117 * runtime/Operations.cpp:
43118 (JSC::jsIsObjectType):
43119 * runtime/Structure.cpp:
43120 (JSC::Structure::addPropertyTransitionToExistingStructure):
43121 (JSC::Structure::addPropertyTransition):
43122 * runtime/Structure.h:
43123 (JSC::Structure::isObject):
43124 (JSC::JSCell::isObject):
43126 2011-09-16 Geoffrey Garen <ggaren@apple.com>
43128 Rolled back in r95201 with test failure fixed.
43130 I missed two cases of jumpSlowToHot in rshift -- these cases need to be
43131 sure to initialize regT1 to the int tag, since it will otherwise hold
43132 the top 32 bits of a double.
43135 * jit/JITArithmetic32_64.cpp:
43136 (JSC::JIT::emit_op_lshift):
43137 (JSC::JIT::emitRightShift):
43138 (JSC::JIT::emitRightShiftSlowCase):
43139 (JSC::JIT::emit_op_bitand):
43140 (JSC::JIT::emit_op_bitor):
43141 (JSC::JIT::emit_op_bitxor):
43142 (JSC::JIT::emit_op_bitnot):
43143 (JSC::JIT::emit_op_post_inc):
43144 (JSC::JIT::emit_op_post_dec):
43145 (JSC::JIT::emit_op_pre_inc):
43146 (JSC::JIT::emit_op_pre_dec):
43147 * jit/JITInlineMethods.h:
43148 (JSC::JIT::emitStoreAndMapInt32):
43150 2011-09-16 Filip Pizlo <fpizlo@apple.com>
43152 Unreviewed Windows build fix after 95318.
43154 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
43156 2011-09-16 Adam Roben <aroben@apple.com>
43158 Windows build fix after r95310
43160 * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Added include\private\JavaScriptCore to the
43161 include path so DFGIntrinsic.h can be found.
43163 2011-09-16 Gavin Barraclough <barraclough@apple.com>
43165 Rationalize JSObject::putDirect* methods
43166 https://bugs.webkit.org/show_bug.cgi?id=68274
43168 Reviewed by Sam Weinig.
43170 Delete the *Function variants. These are overall inefficient,
43171 in the way they get the name back from the function rather
43172 than just passing it in.
43174 * JavaScriptCore.exp:
43176 (GlobalObject::finishCreation):
43177 (GlobalObject::addFunction):
43178 * runtime/FunctionPrototype.cpp:
43179 (JSC::FunctionPrototype::addFunctionProperties):
43180 * runtime/JSGlobalObject.cpp:
43181 (JSC::JSGlobalObject::reset):
43182 * runtime/JSObject.cpp:
43183 (JSC::JSObject::put):
43184 (JSC::JSObject::putWithAttributes):
43185 (JSC::JSObject::defineGetter):
43186 (JSC::JSObject::defineSetter):
43187 * runtime/JSObject.h:
43188 (JSC::JSObject::putDirect):
43189 (JSC::JSObject::putDirectWithoutTransition):
43190 * runtime/Lookup.cpp:
43191 (JSC::setUpStaticFunctionSlot):
43192 * runtime/Lookup.h:
43195 2011-09-16 Filip Pizlo <fpizlo@apple.com>
43197 Unreviewed build fix for Windows.
43199 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
43201 2011-09-16 Filip Pizlo <fpizlo@apple.com>
43203 Unreviewed build fix for non-DFG builds.
43205 * runtime/Executable.h:
43206 (JSC::NativeExecutable::finishCreation):
43208 2011-09-16 Filip Pizlo <fpizlo@apple.com>
43210 DFG JIT should inline Math.abs
43211 https://bugs.webkit.org/show_bug.cgi?id=68227
43213 Reviewed by Oliver Hunt.
43215 This adds the ability to track intrinsic functions throughout the
43216 host function infrastructure, so that the DFG can easily query
43217 whether or not a call's target is intrinsic, and if so, which
43220 On top of this, it adds Math.abs intrinsics to DFG. Call(Math.abs)
43221 is transformed into ValueToNumber<-ArithAbs nodes. These nodes
43222 then get optimized using the usual tricks.
43224 Also had to make a completely unrelated change to
43225 DateInstanceCache.h in order to fix a preexisting alphabetical
43226 sorting problem in JSGlobalData.h
43228 This results in a big win in imaging-gaussian-blur: 61% faster
43229 than before. The net win on Kraken is around 13%.
43231 * JavaScriptCore.xcodeproj/project.pbxproj:
43232 * create_hash_table:
43233 * dfg/DFGByteCodeParser.cpp:
43234 (JSC::DFG::ByteCodeParser::parseBlock):
43236 (JSC::DFG::Graph::isFunctionConstant):
43237 (JSC::DFG::Graph::valueOfFunctionConstant):
43238 * dfg/DFGIntrinsic.h: Added.
43239 * dfg/DFGJITCodeGenerator.h:
43240 (JSC::DFG::JITCodeGenerator::isFunctionConstant):
43241 (JSC::DFG::JITCodeGenerator::valueOfFunctionConstant):
43242 * dfg/DFGJITCompiler.h:
43243 (JSC::DFG::JITCompiler::isFunctionConstant):
43244 (JSC::DFG::JITCompiler::valueOfFunctionConstant):
43246 * dfg/DFGPropagator.cpp:
43247 (JSC::DFG::Propagator::propagateNode):
43248 * dfg/DFGSpeculativeJIT.cpp:
43249 (JSC::DFG::SpeculativeJIT::compile):
43250 * jit/JITStubs.cpp:
43251 (JSC::JITThunks::hostFunctionStub):
43253 * runtime/DateInstanceCache.h:
43254 * runtime/Executable.cpp:
43255 (JSC::ExecutableBase::intrinsic):
43256 (JSC::NativeExecutable::intrinsic):
43257 * runtime/Executable.h:
43258 (JSC::NativeExecutable::create):
43259 (JSC::NativeExecutable::finishCreation):
43260 * runtime/JSGlobalData.cpp:
43261 (JSC::JSGlobalData::getHostFunction):
43262 * runtime/JSGlobalData.h:
43263 * runtime/Lookup.cpp:
43264 (JSC::HashTable::createTable):
43265 (JSC::setUpStaticFunctionSlot):
43266 * runtime/Lookup.h:
43267 (JSC::HashEntry::initialize):
43268 (JSC::HashEntry::intrinsic):
43270 2011-09-16 Filip Pizlo <fpizlo@apple.com>
43272 REGRESSION: Reproducible crash below SlotVisitor::harvestWeakReferences
43273 using Domino's online ordering
43274 https://bugs.webkit.org/show_bug.cgi?id=68220
43276 Reviewed by Oliver Hunt.
43278 Weak handle processing can result in new objects being marked, which
43279 results in new WeakReferencesHarvesters being added. But weak
43280 reference harvesters are only processed before weak handle processing,
43281 so there's the risk that a weak reference harvester will persist
43282 until the next collection, by which time it may have been deleted.
43285 (JSC::Heap::markRoots):
43287 2011-09-16 Csaba Osztrogonác <ossy@webkit.org>
43289 REGRESSION(r95201): It made two tests fail
43290 https://bugs.webkit.org/show_bug.cgi?id=68230
43292 Unreviewed rolling out r95201.
43295 * jit/JITArithmetic32_64.cpp:
43296 (JSC::JIT::emit_op_lshift):
43297 (JSC::JIT::emitRightShift):
43298 (JSC::JIT::emit_op_bitand):
43299 (JSC::JIT::emit_op_bitor):
43300 (JSC::JIT::emit_op_bitxor):
43301 (JSC::JIT::emit_op_bitnot):
43302 (JSC::JIT::emit_op_post_inc):
43303 (JSC::JIT::emit_op_post_dec):
43304 (JSC::JIT::emit_op_pre_inc):
43305 (JSC::JIT::emit_op_pre_dec):
43306 * jit/JITInlineMethods.h:
43308 2011-09-15 Filip Pizlo <fpizlo@apple.com>
43310 DFG JIT does not optimize method_check
43311 https://bugs.webkit.org/show_bug.cgi?id=68215
43313 Reviewed by Oliver Hunt.
43315 MethodCallLinkInfo and StructureStubInfo are now searchable by
43316 bytecodeIndex, so that DFG::ByteCodeParser can use that information
43317 to determine how to optimize GetMethod.
43319 A new node op has been added to DFG: CheckMethod. This is a variant
43320 of GetMethod that has been optimized for the case that GetMethod
43321 always takes the fast path. CheckMethod results in only a very
43322 small amount of code (two loads and two branches in the worst case,
43323 one load and one branch in the best case). CheckMethod behaves as
43324 if it were a constant.
43326 Introduced the notion that a DFG node that is not JSConstant
43327 behaves as a constant. CheckMethod uses this functionality.
43329 This is a 3% speed-up on Kraken, and a small speed-up on V8.
43330 Appears to be neutral on SunSpider.
43332 * bytecode/CodeBlock.h:
43333 (JSC::getStructureStubInfoBytecodeIndex):
43334 (JSC::getMethodCallLinkInfoBytecodeIndex):
43335 * bytecode/PredictedType.cpp:
43336 (JSC::predictionFromCell):
43337 (JSC::predictionFromValue):
43338 * bytecode/PredictedType.h:
43339 * bytecode/StructureStubInfo.h:
43340 * dfg/DFGAliasTracker.h:
43341 (JSC::DFG::AliasTracker::recordGetMethod):
43342 * dfg/DFGByteCodeParser.cpp:
43343 (JSC::DFG::ByteCodeParser::parseBlock):
43344 * dfg/DFGGraph.cpp:
43345 (JSC::DFG::Graph::dump):
43347 (JSC::DFG::Graph::getMethodCheckPrediction):
43348 (JSC::DFG::Graph::getPrediction):
43349 (JSC::DFG::Graph::isConstant):
43350 (JSC::DFG::Graph::isJSConstant):
43351 (JSC::DFG::Graph::valueOfJSConstant):
43352 (JSC::DFG::Graph::valueOfInt32Constant):
43353 (JSC::DFG::Graph::valueOfNumberConstant):
43354 (JSC::DFG::Graph::valueOfBooleanConstant):
43355 (JSC::DFG::Graph::valueOfJSConstantNode):
43356 * dfg/DFGJITCodeGenerator.cpp:
43357 (JSC::DFG::JITCodeGenerator::fillInteger):
43358 (JSC::DFG::JITCodeGenerator::fillDouble):
43359 (JSC::DFG::JITCodeGenerator::fillJSValue):
43360 (JSC::DFG::JITCodeGenerator::isKnownNotInteger):
43361 (JSC::DFG::JITCodeGenerator::isKnownNotNumber):
43362 * dfg/DFGJITCodeGenerator.h:
43363 (JSC::DFG::JITCodeGenerator::silentSpillFPR):
43364 (JSC::DFG::JITCodeGenerator::silentFillGPR):
43365 (JSC::DFG::JITCodeGenerator::silentFillFPR):
43366 * dfg/DFGJITCompiler.cpp:
43367 (JSC::DFG::JITCompiler::fillNumericToDouble):
43368 (JSC::DFG::JITCompiler::fillInt32ToInteger):
43369 (JSC::DFG::JITCompiler::fillToJS):
43371 (JSC::DFG::Node::hasConstant):
43372 (JSC::DFG::Node::hasIdentifier):
43373 (JSC::DFG::Node::hasMethodCheckData):
43374 (JSC::DFG::Node::methodCheckDataIndex):
43375 (JSC::DFG::Node::valueOfJSConstant):
43376 * dfg/DFGPropagator.cpp:
43377 (JSC::DFG::Propagator::propagateNode):
43378 * dfg/DFGSpeculativeJIT.cpp:
43379 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
43380 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
43381 (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
43382 (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
43383 (JSC::DFG::SpeculativeJIT::compile):
43385 (JSC::JIT::privateCompile):
43387 (JSC::PropertyStubCompilationInfo::PropertyStubCompilationInfo):
43388 (JSC::MethodCallCompilationInfo::MethodCallCompilationInfo):
43389 * jit/JITPropertyAccess.cpp:
43390 (JSC::JIT::emit_op_method_check):
43391 (JSC::JIT::compileGetByIdHotPath):
43392 (JSC::JIT::emit_op_put_by_id):
43393 * jit/JITPropertyAccess32_64.cpp:
43394 (JSC::JIT::emit_op_method_check):
43395 (JSC::JIT::compileGetByIdHotPath):
43396 (JSC::JIT::emit_op_put_by_id):
43397 * runtime/JSCell.h:
43398 (JSC::JSCell::JSCell::structureAddress):
43400 2011-09-15 Adam Barth <abarth@webkit.org>
43402 Rename ENABLE(DATABASE) to ENABLE(SQL_DATABASE)
43403 https://bugs.webkit.org/show_bug.cgi?id=68205
43405 Reviewed by Eric Seidel.
43407 * Configurations/FeatureDefines.xcconfig:
43410 2011-09-15 Mark Hahnenberg <mhahnenberg@apple.com>
43412 Unzip initialization lists and constructors in JSCell hierarchy (7/7)
43413 https://bugs.webkit.org/show_bug.cgi?id=68122
43415 Reviewed by Geoffrey Garen.
43417 Completed the seventh and final level of the refactoring to add finishCreation()
43418 methods to all classes within the JSCell hierarchy with non-trivial
43419 constructor bodies.
43421 JSCallbackObject was missed in previous patches due to the fact that
43422 it's non-obvious (at least to my script) that it is in the JSCell hierarchy, so
43423 this is just a bit of retroactive cleanup.
43425 * API/JSCallbackObject.h:
43426 (JSC::JSCallbackObject::create):
43427 * API/JSCallbackObjectFunctions.h:
43428 (JSC::::JSCallbackObject):
43430 2011-09-15 Filip Pizlo <fpizlo@apple.com>
43432 The DFG non-speculative JIT is no longer used and should be removed.
43433 https://bugs.webkit.org/show_bug.cgi?id=68177
43435 Reviewed by Geoffrey Garen.
43437 This removes the non-speculative JIT and everything that relied on it,
43438 including the ability to turn on DFG but not tiered compilation the,
43439 ability to perform speculation failure into non-speculative JIT code,
43440 and the ability to statically terminate speculation.
43442 * GNUmakefile.list.am:
43443 * JavaScriptCore.pro:
43444 * JavaScriptCore.xcodeproj/project.pbxproj:
43445 * bytecode/CodeBlock.h:
43446 * bytecompiler/BytecodeGenerator.cpp:
43447 (JSC::BytecodeGenerator::emitLoopHint):
43448 * dfg/DFGByteCodeParser.cpp:
43449 (JSC::DFG::ByteCodeParser::ByteCodeParser):
43450 (JSC::DFG::ByteCodeParser::getStrongPrediction):
43451 (JSC::DFG::ByteCodeParser::parseBlock):
43452 * dfg/DFGDriver.cpp:
43453 (JSC::DFG::compile):
43454 * dfg/DFGGenerationInfo.h:
43455 * dfg/DFGGraph.cpp:
43456 (JSC::DFG::Graph::predictArgumentTypes):
43457 * dfg/DFGJITCodeGenerator.cpp:
43458 * dfg/DFGJITCompiler.cpp:
43459 (JSC::DFG::JITCompiler::linkOSRExits):
43460 (JSC::DFG::JITCompiler::compileBody):
43461 * dfg/DFGJITCompiler.h:
43463 * dfg/DFGNonSpeculativeJIT.cpp: Removed.
43464 * dfg/DFGNonSpeculativeJIT.h: Removed.
43465 * dfg/DFGOSREntry.cpp:
43466 (JSC::DFG::prepareOSREntry):
43467 * dfg/DFGPropagator.cpp:
43468 * dfg/DFGPropagator.h:
43469 * dfg/DFGSpeculativeJIT.cpp:
43470 (JSC::DFG::SpeculativeJIT::compile):
43471 * dfg/DFGSpeculativeJIT.h:
43472 (JSC::DFG::SpeculativeJIT::osrExits):
43473 (JSC::DFG::SpeculativeJIT::speculationRecovery):
43474 (JSC::DFG::SpeculativeJIT::speculationCheck):
43475 (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
43477 (JSC::JIT::privateCompileMainPass):
43478 (JSC::JIT::privateCompile):
43481 (JSC::JITCode::bottomTierJIT):
43482 * runtime/JSGlobalData.cpp:
43483 (JSC::JSGlobalData::JSGlobalData):
43484 (JSC::JSGlobalData::~JSGlobalData):
43485 * runtime/JSGlobalData.h:
43488 2011-09-15 Eric Seidel <eric@webkit.org>
43490 Remove ENABLE(SVG_AS_IMAGE) since all major ports have it on by default
43491 https://bugs.webkit.org/show_bug.cgi?id=68182
43493 Reviewed by Adam Barth.
43495 * Configurations/FeatureDefines.xcconfig:
43497 2011-09-15 Filip Pizlo <fpizlo@apple.com>
43499 DFG speculative JIT sometimes asserts that a value is not a number
43500 even when it doesn't know anything about the number
43501 https://bugs.webkit.org/show_bug.cgi?id=68189
43503 Reviewed by Oliver Hunt.
43505 * dfg/DFGGenerationInfo.h:
43506 (JSC::DFG::GenerationInfo::isUnknownJS):
43507 * dfg/DFGJITCodeGenerator.cpp:
43508 (JSC::DFG::JITCodeGenerator::isKnownNotNumber):
43510 2011-09-15 Filip Pizlo <fpizlo@apple.com>
43512 All of the functionality in the non-speculative JIT should be
43513 available to the speculative JIT via helper methods
43514 https://bugs.webkit.org/show_bug.cgi?id=68186
43516 Reviewed by Oliver Hunt.
43518 Stole all of the goodness from NonSpeculativeJIT and placed it
43519 in JITCodeGenerator. Left all of the badness (i.e. subtle code
43520 duplication with SpeculativeJIT, etc). This is in preparation
43521 for removing the NonSpeculativeJIT entirely, but having its
43522 goodness available for reuse in the SpeculativeJIT if necessary.
43524 * dfg/DFGJITCodeGenerator.cpp:
43525 (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToNumber):
43526 (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
43527 (JSC::DFG::JITCodeGenerator::nonSpeculativeUInt32ToNumber):
43528 (JSC::DFG::JITCodeGenerator::nonSpeculativeKnownConstantArithOp):
43529 (JSC::DFG::JITCodeGenerator::nonSpeculativeBasicArithOp):
43530 (JSC::DFG::JITCodeGenerator::nonSpeculativeArithMod):
43531 (JSC::DFG::JITCodeGenerator::nonSpeculativeCheckHasInstance):
43532 (JSC::DFG::JITCodeGenerator::nonSpeculativeInstanceOf):
43533 * dfg/DFGJITCodeGenerator.h:
43534 (JSC::DFG::JITCodeGenerator::nonSpeculativeAdd):
43535 (JSC::DFG::JITCodeGenerator::nonSpeculativeArithSub):
43536 * dfg/DFGNonSpeculativeJIT.cpp:
43537 (JSC::DFG::NonSpeculativeJIT::compile):
43538 * dfg/DFGNonSpeculativeJIT.h:
43540 2011-09-15 Sheriff Bot <webkit.review.bot@gmail.com>
43542 Unreviewed, rolling out r95167.
43543 http://trac.webkit.org/changeset/95167
43544 https://bugs.webkit.org/show_bug.cgi?id=68191
43546 Patch needs further work. (Requested by mhahnenberg on
43549 * JavaScriptCore.exp:
43550 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
43551 * runtime/JSCell.cpp:
43552 (JSC::JSCell::toBoolean):
43553 * runtime/JSCell.h:
43554 (JSC::JSCell::JSValue::toBoolean):
43555 * runtime/JSNotAnObject.cpp:
43556 (JSC::JSNotAnObject::toBoolean):
43557 * runtime/JSNotAnObject.h:
43558 * runtime/JSObject.h:
43559 * runtime/JSString.h:
43560 * runtime/StringObjectThatMasqueradesAsUndefined.h:
43561 (JSC::StringObjectThatMasqueradesAsUndefined::toBoolean):
43563 2011-09-15 Filip Pizlo <fpizlo@apple.com>
43565 Unreviewed build fix for platforms that expect a linkable symbol
43566 for primitive static const's.
43568 * bytecode/CodeBlock.h:
43570 (JSC::JIT::emitOptimizationCheck):
43572 2011-09-15 Filip Pizlo <fpizlo@apple.com>
43574 Unreviewed build fix for assertion on existence of alternative
43577 * dfg/DFGGraph.cpp:
43578 (JSC::DFG::Graph::predictArgumentTypes):
43580 2011-09-14 Filip Pizlo <fpizlo@apple.com>
43582 Value profiles collect no information for global variables
43583 https://bugs.webkit.org/show_bug.cgi?id=68143
43585 Reviewed by Geoffrey Garen.
43587 17% speed-up on string-fasta. Neutral elsewhere.
43589 * dfg/DFGByteCodeParser.cpp:
43590 (JSC::DFG::ByteCodeParser::getStrongPrediction):
43591 (JSC::DFG::ByteCodeParser::stronglyPredict):
43592 (JSC::DFG::ByteCodeParser::parseBlock):
43593 * jit/JITPropertyAccess.cpp:
43594 (JSC::JIT::emit_op_get_global_var):
43596 2011-09-15 Eric Seidel <eric@webkit.org>
43598 Remove ENABLE_SVG_ANIMATION as all major ports have it on by default
43599 https://bugs.webkit.org/show_bug.cgi?id=68022
43601 Reviewed by Ryosuke Niwa.
43603 * Configurations/FeatureDefines.xcconfig:
43605 2011-09-15 Gavin Barraclough <barraclough@apple.com>
43607 Ooops, revert accidentally commited unreviewed changes.
43609 * jit/JITOpcodes32_64.cpp:
43610 (JSC::JIT::emit_op_jfalse):
43611 (JSC::JIT::emit_op_jtrue):
43612 * jit/JSInterfaceJIT.h:
43613 * runtime/JSValue.h:
43615 2011-09-15 Sheriff Bot <webkit.review.bot@gmail.com>
43617 Unreviewed, rolling out r95163.
43618 http://trac.webkit.org/changeset/95163
43619 https://bugs.webkit.org/show_bug.cgi?id=68180
43621 [Qt] The QT_GCC_X variables were removed in Qt5 by accident.
43622 (Requested by darktears on #webkit).
43624 * JavaScriptCore.pro:
43626 2011-09-15 Gavin Barraclough <barraclough@apple.com>
43628 Windows build fix p1.
43630 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
43631 * jit/JITOpcodes32_64.cpp:
43632 (JSC::JIT::emit_op_jfalse):
43633 (JSC::JIT::emit_op_jtrue):
43634 * jit/JSInterfaceJIT.h:
43635 * runtime/JSValue.h:
43637 2011-09-14 Filip Pizlo <fpizlo@apple.com>
43639 Tiered compilation should be enabled by default on platforms
43640 that support the DFG JIT
43641 https://bugs.webkit.org/show_bug.cgi?id=68136
43643 Reviewed by Sam Weinig.
43645 Neutral on SunSpider, 4% speed-up on V8, and 19% speed-up on
43646 Kraken. Large progressions on some benchmarks, including
43647 3x on imaging-desaturate.
43651 2011-09-15 Gavin Barraclough <barraclough@apple.com>
43653 devirtualize preventExtensions
43654 https://bugs.webkit.org/show_bug.cgi?id=68176
43656 Reviewed by Oliver Hunt.
43658 This is virtual due to problems in JSFunction putting the prototype
43659 property, but we can fix this problem a different way, just setting
43660 the checkReadOnly flag to false in the put.
43662 * runtime/JSFunction.cpp:
43663 (JSC::JSFunction::getOwnPropertySlot):
43664 * runtime/JSFunction.h:
43665 * runtime/JSObject.h:
43667 2011-09-15 Geoffrey Garen <ggaren@apple.com>
43669 Value chaining for JSValue32_64 bitops.
43671 Reviewed by Sam Weinig.
43673 SunSpider says 2.3% faster, v8 ~1% faster (mostly due to crypto).
43676 * jit/JITInlineMethods.h:
43677 (JSC::JIT::emitStoreAndMapInt32): New int32 helper function for stores
43678 that can chain their results, which is the common case.
43680 * jit/JITArithmetic32_64.cpp:
43681 (JSC::JIT::emit_op_lshift):
43682 (JSC::JIT::emitRightShift):
43683 (JSC::JIT::emit_op_bitand):
43684 (JSC::JIT::emit_op_bitor):
43685 (JSC::JIT::emit_op_bitxor):
43686 (JSC::JIT::emit_op_bitnot):
43687 (JSC::JIT::emit_op_pre_inc):
43688 (JSC::JIT::emit_op_pre_dec): Deployed new function.
43689 (JSC::JIT::emit_op_post_inc):
43690 (JSC::JIT::emit_op_post_dec): Had to reorder these functions so they
43691 computed their result values last, to make them elligible for chaining.
43693 2011-09-15 Adam Roben <aroben@apple.com>
43695 Clang build fix after r95172
43697 * dfg/DFGSpeculativeJIT.h:
43698 (JSC::DFG::SpeculativeJIT::shouldSpeculateFinalObject):
43699 (JSC::DFG::SpeculativeJIT::shouldSpeculateArray):
43700 Added parentheses to make precendence clear.
43702 2011-09-14 Filip Pizlo <fpizlo@apple.com>
43704 DFG does not speculate aggressively enough on comparisons
43705 https://bugs.webkit.org/show_bug.cgi?id=68138
43707 Reviewed by Oliver Hunt.
43709 This is a 75% speed-up on Kraken/ai-astar. It's a 1% win on
43710 V8 and an 8.5% win on Kraken. Neutral on SunSpider.
43712 * dfg/DFGSpeculativeJIT.cpp:
43713 (JSC::DFG::SpeculativeJIT::compilePeepHoleDoubleBranch):
43714 (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
43715 (JSC::DFG::SpeculativeJIT::compileObjectEquality):
43716 (JSC::DFG::SpeculativeJIT::compare):
43717 * dfg/DFGSpeculativeJIT.h:
43718 (JSC::DFG::SpeculativeJIT::shouldSpeculateFinalObject):
43719 (JSC::DFG::SpeculativeJIT::shouldSpeculateArray):
43720 (JSC::DFG::SpeculativeJIT::shouldSpeculateObject):
43721 (JSC::DFG::SpeculativeJIT::shouldSpeculateCell):
43723 2011-09-14 Filip Pizlo <fpizlo@apple.com>
43725 DFG JIT does not leverage integer speculations on branches
43726 https://bugs.webkit.org/show_bug.cgi?id=68140
43728 Reviewed by Oliver Hunt.
43730 * dfg/DFGJITCodeGenerator.cpp:
43731 (JSC::DFG::JITCodeGenerator::isStrictInt32):
43732 * dfg/DFGJITCodeGenerator.h:
43733 * dfg/DFGSpeculativeJIT.cpp:
43734 (JSC::DFG::SpeculativeJIT::compile):
43736 2011-09-14 Gavin Barraclough <barraclough@apple.com>
43738 [n]stricteq code is bogus in JSValue32_64 JIT
43739 https://bugs.webkit.org/show_bug.cgi?id=68141
43741 Reviewed by Sam Weinig.
43743 The code tries to check for both ints or cells, but this check also
43744 catches cases where values that are undefined, null, etc (probably
43745 was incorrectly assuming cell was the 2nd highest tag?).
43747 Also, there is no need not to handle int on the fast path.
43748 stricteq is just a case of comparing the payloads, if we:
43749 * handle cases of differing tags on a slow path
43750 * handle doubles a slow path
43751 * handle both-are-string on a slow path
43753 * jit/JITOpcodes32_64.cpp:
43754 (JSC::JIT::compileOpStrictEq):
43755 (JSC::JIT::emitSlow_op_stricteq):
43756 (JSC::JIT::emitSlow_op_nstricteq):
43758 2011-09-14 Mark Hahnenberg <mhahnenberg@apple.com>
43760 Make JSCell::toBoolean non-virtual
43761 https://bugs.webkit.org/show_bug.cgi?id=67727
43763 Reviewed by Sam Weinig.
43765 JSCell::toBoolean now manually performs the toBoolean check for objects and strings (where
43766 before it was simply virtual and would crash if its implementation was called).
43767 Its descendants in JSObject and JSString have also been made non-virtual. JSCell now
43768 explicitly covers all cases of toBoolean, so having a virtual implementation of
43769 JSCell::toBoolean is no longer necessary. This is part of a larger process of un-virtualizing JSCell.
43771 * JavaScriptCore.exp:
43772 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
43773 * runtime/JSCell.cpp:
43774 * runtime/JSCell.h:
43775 * runtime/JSNotAnObject.cpp:
43776 * runtime/JSNotAnObject.h:
43777 * runtime/JSObject.h:
43778 * runtime/JSString.h:
43779 (JSC::JSCell::toBoolean):
43780 (JSC::JSValue::toBoolean):
43781 * runtime/StringObjectThatMasqueradesAsUndefined.h:
43783 2011-09-14 Alexis Menard <alexis.menard@openbossa.org>
43785 [Qt] Replace QT_GCC_X as they don't exist in Qt5 anymore.
43786 https://bugs.webkit.org/show_bug.cgi?id=68114
43788 Reviewed by Kenneth Rohde Christiansen.
43790 Use the new GCC_X variables defined in WebKit.pri to replace
43791 the usage of QT_GCC_X.
43793 * JavaScriptCore.pro:
43795 2011-09-14 Sheriff Bot <webkit.review.bot@gmail.com>
43797 Unreviewed, rolling out r95145.
43798 http://trac.webkit.org/changeset/95145
43799 https://bugs.webkit.org/show_bug.cgi?id=68139
43801 The GTK+ build is working now, so revert this trial build fix.
43802 (Requested by mrobinson on #webkit).
43804 * GNUmakefile.list.am:
43806 2011-09-14 Patrick Gansterer <paroga@webkit.org>
43808 Port MachineStackMarker to Windows ARM and MIPS
43809 https://bugs.webkit.org/show_bug.cgi?id=68068
43811 Reviewed by Geoffrey Garen.
43813 Use the correct memeber of the CONTEXT struct for the stackpointer for CPU(ARM) and CPU(MIPS).
43814 Only query CONTEXT_INTEGER and CONTEXT_CONTROL, since CONTEXT_SEGMENTS isn't defined for
43815 CPU(ARM) and CPU(MIPS) and the stackpointer is defined in the CONTEXT_CONTROL section for
43816 CPU(ARM), CPU(X86) and CPU(X86_64) and in the CONTEXT_INTEGER section for CPU(MIPS).
43818 * heap/MachineStackMarker.cpp:
43819 (JSC::getPlatformThreadRegisters):
43820 (JSC::otherThreadStackPointer):
43822 2011-09-12 Filip Pizlo <fpizlo@apple.com>
43824 DFG JIT always speculates that ValueAdd is a numeric addition
43825 https://bugs.webkit.org/show_bug.cgi?id=67956
43827 Reviewed by Geoffrey Garen.
43829 * dfg/DFGJITCodeGenerator.cpp:
43830 (JSC::DFG::JITCodeGenerator::isKnownNotNumber):
43831 * dfg/DFGJITCodeGenerator.h:
43832 * dfg/DFGNonSpeculativeJIT.cpp:
43833 (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp):
43834 (JSC::DFG::NonSpeculativeJIT::basicArithOp):
43835 * dfg/DFGOperations.cpp:
43836 * dfg/DFGOperations.h:
43837 * dfg/DFGSpeculativeJIT.cpp:
43838 (JSC::DFG::SpeculativeJIT::compile):
43839 * dfg/DFGSpeculativeJIT.h:
43840 (JSC::DFG::SpeculativeJIT::shouldSpeculateNumber):
43842 2011-09-14 Anders Carlsson <andersca@apple.com>
43844 Stop building BinarySemaphore to see if that's what's breaking the GTK+ build.
43846 * GNUmakefile.list.am:
43848 2011-09-14 Anders Carlsson <andersca@apple.com>
43850 This is getting old. Yet another build fix attempt.
43852 * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
43854 2011-09-14 Anders Carlsson <andersca@apple.com>
43856 Yet another build fix attempt.
43858 * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:
43860 2011-09-14 Anders Carlsson <andersca@apple.com>
43862 How I "love" Visual Studio...
43864 Try to fix build again.
43866 * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
43868 2011-09-14 Anders Carlsson <andersca@apple.com>
43870 Try to fix Windows build.
43872 * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
43874 2011-09-14 Anders Carlsson <andersca@apple.com>
43876 Add BinarySemaphore class from WebKit2 to WTF
43877 https://bugs.webkit.org/show_bug.cgi?id=68132
43879 Reviewed by Sam Weinig.
43881 * GNUmakefile.list.am:
43882 * JavaScriptCore.gypi:
43883 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
43884 * JavaScriptCore.xcodeproj/project.pbxproj:
43885 * wtf/CMakeLists.txt:
43886 Update build systems.
43888 * wtf/threads: Added.
43889 * wtf/threads/BinarySemaphore.cpp: Copied from Source/WebKit2/Platform/CoreIPC/BinarySemaphore.cpp.
43890 * wtf/threads/BinarySemaphore.h: Copied from Source/WebKit2/Platform/CoreIPC/BinarySemaphore.h.
43891 * wtf/threads/win: Added.
43892 * wtf/threads/win/BinarySemaphoreWin.cpp: Copied from Source/WebKit2/Platform/CoreIPC/win/BinarySemaphoreWin.cpp.
43894 2011-09-14 Filip Pizlo <fpizlo@apple.com>
43896 Unreviewed build fix for Interpreter.
43898 * interpreter/Interpreter.cpp:
43899 (JSC::Interpreter::privateExecute):
43901 2011-09-14 Anders Carlsson <andersca@apple.com>
43903 Add wtf/threads and wtf/threads/win, so we can be sure that the EWS
43904 bots can correctly build the patch in https://bugs.webkit.org/show_bug.cgi?id=68132
43906 Rubber-stamped by Sam Weinig.
43908 * wtf/threads: Added.
43909 * wtf/threads/win: Added.
43911 2011-09-14 Filip Pizlo <fpizlo@apple.com>
43913 DFG JIT should not speculate integer if the value is always going to be
43914 used as a double anyway
43915 https://bugs.webkit.org/show_bug.cgi?id=68127
43917 Reviewed by Oliver Hunt.
43919 Added a ValueToDouble node, which is a variant of ValueToNumber that
43920 hints that it will only be used as a double and never as an integer.
43921 Thus, it turns off integer speculation even if the value profiler
43922 told us that the value source is an int. The logic for converting a
43923 ValueToNumber into a ValueToDouble is found in Propagator.
43925 This appears to be a 22% speed-up in imaging-darkroom.
43928 * dfg/DFGNonSpeculativeJIT.cpp:
43929 (JSC::DFG::NonSpeculativeJIT::compile):
43930 * dfg/DFGPropagator.cpp:
43931 (JSC::DFG::Propagator::fixpoint):
43932 (JSC::DFG::Propagator::toDouble):
43933 (JSC::DFG::Propagator::fixupNode):
43934 (JSC::DFG::Propagator::fixup):
43935 * dfg/DFGSpeculativeJIT.cpp:
43936 (JSC::DFG::SpeculativeJIT::compile):
43937 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
43939 2011-09-14 Filip Pizlo <fpizlo@apple.com>
43941 Tiered compilation heuristics do not account for value profile fullness
43942 https://bugs.webkit.org/show_bug.cgi?id=68116
43944 Reviewed by Oliver Hunt.
43946 Tiered compilation avoids invoking the DFG JIT if it finds that value
43947 profiles contain insufficient information. Instead, it produces a
43948 prediction from the current value profile, and then clears the value
43949 profile. This allows the value profile to heat up from scratch for
43950 some number of additional executions. The new profiles will then be
43951 merged with the previous prediction. Once the amount of information
43952 in predictions is enough according to heuristics in CodeBlock.cpp,
43953 DFG optimization is allowed to proceed.
43956 * GNUmakefile.list.am:
43957 * JavaScriptCore.pro:
43958 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
43959 * JavaScriptCore.xcodeproj/project.pbxproj:
43960 * bytecode/CodeBlock.cpp:
43961 (JSC::CodeBlock::CodeBlock):
43962 (JSC::CodeBlock::~CodeBlock):
43963 (JSC::CodeBlock::visitAggregate):
43964 (JSC::CodeBlock::visitWeakReferences):
43965 (JSC::CodeBlock::shouldOptimizeNow):
43966 (JSC::CodeBlock::dumpValueProfiles):
43967 * bytecode/CodeBlock.h:
43968 * bytecode/PredictedType.cpp:
43969 (JSC::predictionToString):
43970 * bytecode/PredictedType.h:
43971 * bytecode/ValueProfile.cpp: Added.
43972 (JSC::ValueProfile::computeStatistics):
43973 (JSC::ValueProfile::computeUpdatedPrediction):
43974 * bytecode/ValueProfile.h:
43975 (JSC::ValueProfile::ValueProfile):
43976 (JSC::ValueProfile::classInfo):
43977 (JSC::ValueProfile::numberOfSamples):
43978 (JSC::ValueProfile::totalNumberOfSamples):
43979 (JSC::ValueProfile::isLive):
43980 (JSC::ValueProfile::numberOfInt32s):
43981 (JSC::ValueProfile::numberOfDoubles):
43982 (JSC::ValueProfile::numberOfBooleans):
43983 (JSC::ValueProfile::dump):
43984 (JSC::getValueProfileBytecodeOffset):
43985 * dfg/DFGByteCodeParser.cpp:
43986 (JSC::DFG::ByteCodeParser::stronglyPredict):
43987 * dfg/DFGGraph.cpp:
43988 (JSC::DFG::Graph::predictArgumentTypes):
43989 * dfg/DFGJITCompiler.cpp:
43990 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
43991 (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):
43993 (JSC::JIT::emitOptimizationCheck):
43994 * jit/JITInlineMethods.h:
43995 (JSC::JIT::emitValueProfilingSite):
43996 * jit/JITStubs.cpp:
43997 (JSC::DEFINE_STUB_FUNCTION):
43999 2011-09-14 Filip Pizlo <fpizlo@apple.com>
44001 DFG should not speculate that the child of LogicalNot is a boolean if
44002 predictions tell us otherwise
44003 https://bugs.webkit.org/show_bug.cgi?id=68118
44005 Reviewed by Geoffrey Garen.
44007 * dfg/DFGJITCodeGenerator.cpp:
44008 (JSC::DFG::JITCodeGenerator::nonSpeculativeLogicalNot):
44009 * dfg/DFGJITCodeGenerator.h:
44010 * dfg/DFGNonSpeculativeJIT.cpp:
44011 (JSC::DFG::NonSpeculativeJIT::compile):
44012 * dfg/DFGSpeculativeJIT.cpp:
44013 (JSC::DFG::SpeculativeJIT::compile):
44015 2011-09-14 Filip Pizlo <fpizlo@apple.com>
44017 Unreviewed build fix. Turn off tiered compilation.
44021 2011-09-13 Filip Pizlo <fpizlo@apple.com>
44023 Prediction tracking is not precise enough
44024 https://bugs.webkit.org/show_bug.cgi?id=67993
44026 Reviewed by Oliver Hunt.
44028 Added a richer set of type predictions, including JSFinalObject, JSString,
44029 object that is not a JSFinalObject or JSArray (ObjectOther), some object
44030 but we don't or care know what kind (SomeObject), definitely an object,
44031 cell that is not an object or JSString, an value that is none of the above
44032 (so either Undefined or Null). Made the propagator and value profiler work
44033 with the new types.
44035 Performance is neutral, because the DFG JIT does not take advantage of this
44038 In the process of writing predictionToString() (which is now considerably
44039 more complex) I decided to finally add a BoundsCheckedPointer, which
44040 should come in handy in other places, like at least the OSR scratch buffer
44041 and the CompactJITCodeMap. It's great for cases where you want to
44042 do pointer arithmetic, you want to have assertions about the
44043 pointer not going out of bounds, but you don't want to write those
44044 assertions yourself.
44046 This also required refactoring inherits(), since the ValueProfiler may
44047 want to do the equivalent of inherits() but given two ClassInfo's.
44049 * GNUmakefile.list.am:
44050 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
44051 * JavaScriptCore.xcodeproj/project.pbxproj:
44052 * bytecode/PredictedType.cpp: Added.
44053 (JSC::predictionToString):
44054 (JSC::makePrediction):
44055 (JSC::predictionFromValue):
44056 * bytecode/PredictedType.h:
44057 (JSC::isCellPrediction):
44058 (JSC::isObjectPrediction):
44059 (JSC::isFinalObjectPrediction):
44060 (JSC::isStringPrediction):
44061 (JSC::mergePredictions):
44062 * bytecode/ValueProfile.h:
44063 (JSC::ValueProfile::numberOfObjects):
44064 (JSC::ValueProfile::numberOfFinalObjects):
44065 (JSC::ValueProfile::numberOfStrings):
44066 (JSC::ValueProfile::probabilityOfObject):
44067 (JSC::ValueProfile::probabilityOfFinalObject):
44068 (JSC::ValueProfile::probabilityOfString):
44069 (JSC::ValueProfile::dump):
44070 (JSC::ValueProfile::Statistics::Statistics):
44071 (JSC::ValueProfile::computeStatistics):
44072 * dfg/DFGByteCodeParser.cpp:
44073 (JSC::DFG::ByteCodeParser::stronglyPredict):
44074 * dfg/DFGGraph.cpp:
44075 (JSC::DFG::Graph::dump):
44076 (JSC::DFG::Graph::predictArgumentTypes):
44078 (JSC::DFG::Node::predict):
44079 * dfg/DFGPropagator.cpp:
44080 (JSC::DFG::Propagator::propagateNode):
44081 * runtime/ClassInfo.h:
44082 (JSC::ClassInfo::isSubClassOf):
44083 * runtime/JSObject.h:
44084 (JSC::JSCell::inherits):
44085 * wtf/BoundsCheckedPointer.h: Added.
44086 (WTF::BoundsCheckedPointer::BoundsCheckedPointer):
44087 (WTF::BoundsCheckedPointer::operator=):
44088 (WTF::BoundsCheckedPointer::operator+=):
44089 (WTF::BoundsCheckedPointer::operator-=):
44090 (WTF::BoundsCheckedPointer::operator+):
44091 (WTF::BoundsCheckedPointer::operator-):
44092 (WTF::BoundsCheckedPointer::operator++):
44093 (WTF::BoundsCheckedPointer::operator--):
44094 (WTF::BoundsCheckedPointer::operator<):
44095 (WTF::BoundsCheckedPointer::operator<=):
44096 (WTF::BoundsCheckedPointer::operator>):
44097 (WTF::BoundsCheckedPointer::operator>=):
44098 (WTF::BoundsCheckedPointer::operator==):
44099 (WTF::BoundsCheckedPointer::operator!=):
44100 (WTF::BoundsCheckedPointer::operator!):
44101 (WTF::BoundsCheckedPointer::get):
44102 (WTF::BoundsCheckedPointer::operator*):
44103 (WTF::BoundsCheckedPointer::operator[]):
44104 (WTF::BoundsCheckedPointer::strcat):
44105 (WTF::BoundsCheckedPointer::validate):
44106 * wtf/CMakeLists.txt:
44108 2011-09-14 Csaba Osztrogonác <ossy@webkit.org>
44110 [Qt] Win32 builds with threads turned off
44111 https://bugs.webkit.org/show_bug.cgi?id=67864
44113 Reviewed by Geoffrey Garen.
44115 * JavaScriptCore.pri: Link pthread library on Windows platform.
44116 * wtf/Platform.h: Enable multiple threads.
44118 2011-09-14 Mark Hahnenberg <mhahnenberg@apple.com>
44120 Unzip initialization lists and constructors in JSCell hierarchy (6/7)
44121 https://bugs.webkit.org/show_bug.cgi?id=67692
44123 Reviewed by Geoffrey Garen.
44125 Completed the sixth level of the refactoring to add finishCreation()
44126 methods to all classes within the JSCell hierarchy with non-trivial
44127 constructor bodies.
44129 This primarily consists of pushing the calls to finishCreation() down
44130 into the constructors of the subclasses of the fifth level of the hierarchy
44131 as well as pulling the finishCreation() calls out into the class's corresponding
44132 create() method if it has one. Doing both simultaneously allows us to
44133 maintain the invariant that the finishCreation() method chain is called exactly
44134 once during the creation of an object, since calling it any other number of
44135 times (0, 2, or more) will cause an assertion failure.
44137 * API/JSCallbackFunction.cpp:
44138 (JSC::JSCallbackFunction::JSCallbackFunction):
44139 * API/JSCallbackFunction.h:
44140 (JSC::JSCallbackFunction::create):
44142 (GlobalObject::create):
44143 (GlobalObject::GlobalObject):
44144 * runtime/ArrayConstructor.cpp:
44145 (JSC::ArrayConstructor::ArrayConstructor):
44146 * runtime/ArrayConstructor.h:
44147 (JSC::ArrayConstructor::create):
44148 * runtime/BooleanConstructor.cpp:
44149 (JSC::BooleanConstructor::BooleanConstructor):
44150 * runtime/BooleanConstructor.h:
44151 (JSC::BooleanConstructor::create):
44152 * runtime/BooleanPrototype.cpp:
44153 (JSC::BooleanPrototype::BooleanPrototype):
44154 * runtime/BooleanPrototype.h:
44155 (JSC::BooleanPrototype::create):
44156 * runtime/DateConstructor.cpp:
44157 (JSC::DateConstructor::DateConstructor):
44158 * runtime/DateConstructor.h:
44159 (JSC::DateConstructor::create):
44160 * runtime/DatePrototype.cpp:
44161 (JSC::DatePrototype::DatePrototype):
44162 * runtime/DatePrototype.h:
44163 (JSC::DatePrototype::create):
44164 * runtime/Error.cpp:
44165 (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction):
44166 (JSC::StrictModeTypeErrorFunction::create):
44167 * runtime/ErrorConstructor.cpp:
44168 (JSC::ErrorConstructor::ErrorConstructor):
44169 * runtime/ErrorConstructor.h:
44170 (JSC::ErrorConstructor::create):
44171 * runtime/FunctionConstructor.cpp:
44172 (JSC::FunctionConstructor::FunctionConstructor):
44173 * runtime/FunctionConstructor.h:
44174 (JSC::FunctionConstructor::create):
44175 * runtime/FunctionPrototype.cpp:
44176 (JSC::FunctionPrototype::FunctionPrototype):
44177 * runtime/FunctionPrototype.h:
44178 (JSC::FunctionPrototype::create):
44179 * runtime/NativeErrorConstructor.cpp:
44180 (JSC::NativeErrorConstructor::NativeErrorConstructor):
44181 * runtime/NativeErrorConstructor.h:
44182 (JSC::NativeErrorConstructor::create):
44183 * runtime/NativeErrorPrototype.cpp:
44184 (JSC::NativeErrorPrototype::NativeErrorPrototype):
44185 (JSC::NativeErrorPrototype::finishCreation):
44186 * runtime/NativeErrorPrototype.h:
44187 (JSC::NativeErrorPrototype::create):
44188 * runtime/NumberConstructor.cpp:
44189 (JSC::NumberConstructor::NumberConstructor):
44190 * runtime/NumberConstructor.h:
44191 (JSC::NumberConstructor::create):
44192 * runtime/NumberPrototype.cpp:
44193 (JSC::NumberPrototype::NumberPrototype):
44194 * runtime/NumberPrototype.h:
44195 (JSC::NumberPrototype::create):
44196 * runtime/ObjectConstructor.cpp:
44197 (JSC::ObjectConstructor::ObjectConstructor):
44198 * runtime/ObjectConstructor.h:
44199 (JSC::ObjectConstructor::create):
44200 * runtime/RegExpConstructor.cpp:
44201 (JSC::RegExpConstructor::RegExpConstructor):
44202 * runtime/RegExpConstructor.h:
44203 (JSC::RegExpConstructor::create):
44204 * runtime/RegExpPrototype.cpp:
44205 (JSC::RegExpPrototype::RegExpPrototype):
44206 * runtime/RegExpPrototype.h:
44207 (JSC::RegExpPrototype::create):
44208 * runtime/StringConstructor.cpp:
44209 (JSC::StringConstructor::StringConstructor):
44210 * runtime/StringConstructor.h:
44211 (JSC::StringConstructor::create):
44212 * runtime/StringObjectThatMasqueradesAsUndefined.h:
44213 (JSC::StringObjectThatMasqueradesAsUndefined::create):
44214 (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
44215 * runtime/StringPrototype.cpp:
44216 (JSC::StringPrototype::StringPrototype):
44217 * runtime/StringPrototype.h:
44218 (JSC::StringPrototype::create):
44220 2011-09-13 Eric Seidel <eric@webkit.org>
44222 Remove ENABLE_SVG_USE as <use> is required by HTML5
44223 https://bugs.webkit.org/show_bug.cgi?id=68019
44225 Reviewed by Ryosuke Niwa.
44227 * Configurations/FeatureDefines.xcconfig:
44229 2011-09-14 Iain Merrick <husky@google.com>
44231 HashTraits.h should include template specialization for WTF::String
44232 https://bugs.webkit.org/show_bug.cgi?id=67851
44234 Ensure that the template specialization for HashTraits<String> is always
44235 picked up. (Previously it was possible to include HashSet and String but
44236 not the correct HashTraits, so you would get an inefficient template
44239 Reviewed by Darin Adler.
44241 * wtf/HashTraits.h:
44242 * wtf/text/StringHash.h:
44244 2011-09-13 Filip Pizlo <fpizlo@apple.com>
44246 SpeculativeJIT::shouldSpeculateInteger(NodeIndex, NodeIndex) should
44247 return false if either node can be double
44248 https://bugs.webkit.org/show_bug.cgi?id=67985
44250 Reviewed by Geoffrey Garen.
44252 This is a 17% speed-up on 3d-cube.
44254 This required allowing us to check if a constant is double but not
44255 integer, and making the shouldSpeculateInteger() check test for
44256 any hints of doubly-ness in its operands. This also required
44257 changing some terminology: previously "isDouble" often meant
44258 "isDouble or isInt32". Now "isDouble" means exactly what the name
44259 suggests, and "isNumber" means "isDouble or isInt32".
44261 * dfg/DFGByteCodeParser.cpp:
44262 (JSC::DFG::ByteCodeParser::toNumber):
44263 (JSC::DFG::ByteCodeParser::parseBlock):
44264 * dfg/DFGGenerationInfo.h:
44265 (JSC::DFG::isJSFormat):
44266 (JSC::DFG::isJSInteger):
44267 (JSC::DFG::isJSDouble):
44268 (JSC::DFG::isJSCell):
44269 (JSC::DFG::isJSBoolean):
44270 (JSC::DFG::GenerationInfo::isJSFormat):
44271 (JSC::DFG::GenerationInfo::isJSInteger):
44272 (JSC::DFG::GenerationInfo::isJSDouble):
44273 (JSC::DFG::GenerationInfo::isJSCell):
44274 (JSC::DFG::GenerationInfo::isJSBoolean):
44276 (JSC::DFG::Graph::isNumberConstant):
44277 (JSC::DFG::Graph::valueOfNumberConstant):
44278 * dfg/DFGJITCodeGenerator.cpp:
44279 (JSC::DFG::JITCodeGenerator::fillInteger):
44280 (JSC::DFG::JITCodeGenerator::fillDouble):
44281 (JSC::DFG::JITCodeGenerator::fillJSValue):
44282 (JSC::DFG::JITCodeGenerator::isKnownInteger):
44283 (JSC::DFG::JITCodeGenerator::isKnownNumeric):
44284 (JSC::DFG::JITCodeGenerator::isKnownCell):
44285 (JSC::DFG::JITCodeGenerator::isKnownNotInteger):
44286 (JSC::DFG::JITCodeGenerator::isKnownBoolean):
44287 * dfg/DFGJITCodeGenerator.h:
44288 (JSC::DFG::JITCodeGenerator::silentFillFPR):
44289 (JSC::DFG::JITCodeGenerator::isNumberConstant):
44290 (JSC::DFG::JITCodeGenerator::valueOfNumberConstant):
44291 (JSC::DFG::JITCodeGenerator::initConstantInfo):
44292 * dfg/DFGJITCompiler.cpp:
44293 (JSC::DFG::JITCompiler::fillNumericToDouble):
44294 (JSC::DFG::JITCompiler::fillToJS):
44295 * dfg/DFGJITCompiler.h:
44296 (JSC::DFG::JITCompiler::isNumberConstant):
44297 (JSC::DFG::JITCompiler::valueOfNumberConstant):
44299 (JSC::DFG::Node::isDoubleConstant):
44300 (JSC::DFG::Node::isNumberConstant):
44301 (JSC::DFG::Node::valueOfNumberConstant):
44302 (JSC::DFG::Node::hasNumberResult):
44303 * dfg/DFGNonSpeculativeJIT.cpp:
44304 (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp):
44305 (JSC::DFG::NonSpeculativeJIT::compile):
44306 * dfg/DFGSpeculativeJIT.cpp:
44307 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
44308 * dfg/DFGSpeculativeJIT.h:
44309 (JSC::DFG::SpeculativeJIT::isInteger):
44310 (JSC::DFG::SpeculativeJIT::shouldSpeculateDouble):
44311 (JSC::DFG::SpeculativeJIT::shouldNotSpeculateInteger):
44312 (JSC::DFG::SpeculativeJIT::shouldSpeculateInteger):
44314 2011-09-13 Anders Carlsson <andersca@apple.com>
44316 Disable C++ exceptions when building with clang
44317 https://bugs.webkit.org/show_bug.cgi?id=68031
44318 <rdar://problem/9556880>
44320 Reviewed by Mark Rowe.
44322 * Configurations/Base.xcconfig:
44324 2011-09-13 Eric Seidel <eric@webkit.org>
44326 Remove ENABLE_SVG_FOREIGN_OBJECT as it is a required part of HTML5
44327 https://bugs.webkit.org/show_bug.cgi?id=68018
44329 Reviewed by Ryosuke Niwa.
44331 * Configurations/FeatureDefines.xcconfig:
44333 2011-09-13 Sam Weinig <sam@webkit.org>
44335 Object.getPrototypeOf should use JSValue::get()
44336 https://bugs.webkit.org/show_bug.cgi?id=67973
44338 Reviewed by Darin Adler.
44340 * runtime/ObjectConstructor.cpp:
44341 (JSC::objectConstructorGetPrototypeOf):
44342 Pipe through JSValue::get() to allow overrides.
44344 2011-09-12 Filip Pizlo <fpizlo@apple.com>
44346 JavaScriptCore does not have baseline->speculative OSR
44347 https://bugs.webkit.org/show_bug.cgi?id=67920
44349 Reviewed by Oliver Hunt.
44351 This adds the ability to on-stack-replace (OSR) from code that is
44352 running hot in the old JIT to code compiled by the new JIT. This
44353 ensures that long-running loops benefit from DFG optimization.
44354 It also ensures that if code experiences a speculation failure
44355 in DFG code, it has an opportunity to reenter the DFG once every
44356 1,000 loop iterations or so.
44358 This results in a 2.88x speed-up on Kraken/imaging-desaturate,
44359 and is a pure win on the main three benchmark suites (SunSpider,
44360 V8, Kraken), when tiered compilation is enabled.
44362 * JavaScriptCore.xcodeproj/project.pbxproj:
44363 * bytecode/CodeBlock.cpp:
44364 (JSC::CodeBlock::dump):
44365 (JSC::CodeBlock::CodeBlock):
44366 (JSC::ProgramCodeBlock::compileOptimized):
44367 (JSC::EvalCodeBlock::compileOptimized):
44368 (JSC::FunctionCodeBlock::compileOptimized):
44369 * bytecode/CodeBlock.h:
44370 * bytecode/Opcode.h:
44371 * bytecode/PredictedType.h: Added.
44372 (JSC::isCellPrediction):
44373 (JSC::isArrayPrediction):
44374 (JSC::isInt32Prediction):
44375 (JSC::isDoublePrediction):
44376 (JSC::isNumberPrediction):
44377 (JSC::isBooleanPrediction):
44378 (JSC::isStrongPrediction):
44379 (JSC::predictionToString):
44380 (JSC::mergePredictions):
44381 (JSC::mergePrediction):
44382 (JSC::makePrediction):
44383 * bytecode/PredictionTracker.h: Added.
44384 (JSC::operandIsArgument):
44385 (JSC::PredictionSlot::PredictionSlot):
44386 (JSC::PredictionTracker::PredictionTracker):
44387 (JSC::PredictionTracker::initializeSimilarTo):
44388 (JSC::PredictionTracker::copyLocalsFrom):
44389 (JSC::PredictionTracker::numberOfArguments):
44390 (JSC::PredictionTracker::numberOfVariables):
44391 (JSC::PredictionTracker::argumentOffsetForOperand):
44392 (JSC::PredictionTracker::predictArgument):
44393 (JSC::PredictionTracker::predict):
44394 (JSC::PredictionTracker::predictGlobalVar):
44395 (JSC::PredictionTracker::getArgumentPrediction):
44396 (JSC::PredictionTracker::getPrediction):
44397 (JSC::PredictionTracker::getGlobalVarPrediction):
44398 * bytecompiler/BytecodeGenerator.cpp:
44399 (JSC::BytecodeGenerator::emitLoopHint):
44400 * bytecompiler/BytecodeGenerator.h:
44401 * bytecompiler/NodesCodegen.cpp:
44402 (JSC::DoWhileNode::emitBytecode):
44403 (JSC::WhileNode::emitBytecode):
44404 (JSC::ForNode::emitBytecode):
44405 (JSC::ForInNode::emitBytecode):
44406 * dfg/DFGByteCodeParser.cpp:
44407 (JSC::DFG::ByteCodeParser::parseBlock):
44408 * dfg/DFGCapabilities.h:
44409 (JSC::DFG::canCompileOpcode):
44410 * dfg/DFGDriver.cpp:
44411 (JSC::DFG::compile):
44412 * dfg/DFGGraph.cpp:
44413 (JSC::DFG::Graph::dump):
44415 (JSC::DFG::BasicBlock::BasicBlock):
44416 (JSC::DFG::Graph::predict):
44417 (JSC::DFG::Graph::getPrediction):
44418 * dfg/DFGJITCompiler.cpp:
44419 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
44420 (JSC::DFG::JITCompiler::compileEntry):
44421 (JSC::DFG::JITCompiler::compileBody):
44422 * dfg/DFGJITCompiler.h:
44423 (JSC::DFG::JITCompiler::noticeOSREntry):
44425 * dfg/DFGOSREntry.cpp: Added.
44426 (JSC::DFG::predictionIsValid):
44427 (JSC::DFG::prepareOSREntry):
44428 * dfg/DFGOSREntry.h: Added.
44429 (JSC::DFG::prepareOSREntry):
44430 * dfg/DFGPredictionTracker.h: Removed.
44431 * dfg/DFGPropagator.cpp:
44432 (JSC::DFG::Propagator::mergeUse):
44433 (JSC::DFG::Propagator::mergePrediction):
44434 * dfg/DFGSpeculativeJIT.cpp:
44435 (JSC::DFG::SpeculativeJIT::compile):
44436 * jit/CompactJITCodeMap.h:
44437 (JSC::CompactJITCodeMap::numberOfEntries):
44438 (JSC::CompactJITCodeMap::decode):
44439 (JSC::CompactJITCodeMap::Decoder::Decoder):
44440 (JSC::CompactJITCodeMap::Decoder::numberOfEntriesRemaining):
44441 (JSC::CompactJITCodeMap::Decoder::read):
44443 (JSC::JIT::emitOptimizationCheck):
44444 (JSC::JIT::emitTimeoutCheck):
44445 (JSC::JIT::privateCompileMainPass):
44447 (JSC::JIT::emit_op_loop_hint):
44448 * jit/JITStubs.cpp:
44449 (JSC::DEFINE_STUB_FUNCTION):
44450 * runtime/Executable.cpp:
44451 (JSC::EvalExecutable::compileInternal):
44452 (JSC::ProgramExecutable::compileInternal):
44453 (JSC::FunctionExecutable::compileForCallInternal):
44454 (JSC::FunctionExecutable::compileForConstructInternal):
44456 2011-09-12 Sam Weinig <sam@webkit.org>
44458 Don't allow setting __proto__ to be a getter or setter
44459 https://bugs.webkit.org/show_bug.cgi?id=67982
44461 Reviewed by Gavin Barraclough.
44463 * runtime/JSObject.cpp:
44464 (JSC::JSObject::defineGetter):
44465 (JSC::JSObject::defineSetter):
44466 Disallow setting a getter or setter on __proto__.
44468 2011-09-12 James Robinson <jamesr@chromium.org>
44470 Unreviewed build fix for chromium.
44472 Guard access to UString::latin1() with USE(JSC) since it is defined in JavaScriptCore/runtime/UString.cpp, which
44473 is currently only compiled in by ports that use JavaScriptCore. This code is currently unreachable in builds so
44474 no change in functionality.
44476 * yarr/YarrInterpreter.cpp:
44477 (JSC::Yarr::Interpreter::CharAccess::CharAccess):
44479 2011-09-09 Filip Pizlo <fpizlo@apple.com>
44481 JavaScriptCore does not have speculative->baseline OSR
44482 https://bugs.webkit.org/show_bug.cgi?id=67826
44484 Reviewed by Oliver Hunt.
44486 This adds the ability to bail out of DFG speculative JIT execution by
44487 performing an on-stack replacement (OSR) that results in the control
44488 flow going to the equivalent code generated by the old JIT.
44490 This required a number of new features, as well as taking advantage of
44491 some features that happened to already be present:
44493 We already had a policy of storing the bytecode index for which a DFG
44494 node was generated inside the DFG::Node class. This was previously
44495 called exceptionInfo. It's now renamed to codeOrigin to reflect that
44496 it's used for more than just excpetions. OSR uses this to figure out
44497 which bytecode index to use to look up the machine code location in
44498 the code generated by the old JIT that we should be jumping to.
44500 CodeBlock now stores a mapping between bytecode indices and machine
44501 code offsets for code generated by the old JIT. This is implemented
44502 by CompactJITCodeMap, which tries to compress this data a bit. The
44503 OSR compiler decodes this and uses it to find the machine code
44504 locations it should be jumping to.
44506 We already had a mechanism that emitted SetLocal nodes in the DFG graph
44507 that told us the time at which the old JIT would have stored something
44508 into its register file, and the DFG::Node that corresponds to the value
44509 that it would have stored. These SetLocal's were mostly dead-code-
44510 eliminated, but our DCE leaves the nodes intact except for making them
44511 have 0 as the ref count. This allows the OSR compiler to construct a
44512 mapping between the state as it would have been seen by the old JIT
44513 and the state as the DFG JIT sees it. The OSR compiler uses this to
44514 generate code that reshapes the call frame so that it is like what the
44515 old JIT would expect.
44517 Finally, when DFG_OSR is enabled (the default for TIERED_COMPILATION)
44518 we no longer emit the non-speculative path.
44520 * JavaScriptCore.xcodeproj/project.pbxproj:
44521 * bytecode/CodeBlock.h:
44522 * dfg/DFGByteCodeParser.cpp:
44523 (JSC::DFG::ByteCodeParser::currentCodeOrigin):
44524 (JSC::DFG::ByteCodeParser::addToGraph):
44525 * dfg/DFGGPRInfo.h:
44526 * dfg/DFGGenerationInfo.h:
44527 (JSC::DFG::GenerationInfo::alive):
44528 * dfg/DFGGraph.cpp:
44529 (JSC::DFG::Graph::dump):
44530 * dfg/DFGJITCodeGenerator.cpp:
44531 (JSC::DFG::JITCodeGenerator::emitCall):
44532 * dfg/DFGJITCodeGenerator.h:
44533 (JSC::DFG::JITCodeGenerator::appendCallWithExceptionCheck):
44534 * dfg/DFGJITCompiler.cpp:
44535 (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
44536 (JSC::DFG::JITCompiler::linkOSRExits):
44537 (JSC::DFG::JITCompiler::compileBody):
44538 (JSC::DFG::JITCompiler::link):
44539 * dfg/DFGJITCompiler.h:
44540 (JSC::DFG::CallRecord::CallRecord):
44541 (JSC::DFG::JITCompiler::notifyCall):
44542 (JSC::DFG::JITCompiler::appendCallWithExceptionCheck):
44543 (JSC::DFG::JITCompiler::appendCallWithFastExceptionCheck):
44544 (JSC::DFG::JITCompiler::addJSCall):
44545 (JSC::DFG::JITCompiler::JSCallRecord::JSCallRecord):
44547 (JSC::DFG::CodeOrigin::CodeOrigin):
44548 (JSC::DFG::CodeOrigin::isSet):
44549 (JSC::DFG::CodeOrigin::bytecodeIndex):
44550 (JSC::DFG::Node::Node):
44551 (JSC::DFG::Node::child1Unchecked):
44552 * dfg/DFGNonSpeculativeJIT.cpp:
44553 (JSC::DFG::NonSpeculativeJIT::compile):
44554 * dfg/DFGSpeculativeJIT.cpp:
44555 (JSC::DFG::ValueSource::dump):
44556 (JSC::DFG::ValueRecovery::dump):
44557 (JSC::DFG::OSRExit::OSRExit):
44558 (JSC::DFG::SpeculativeJIT::compile):
44559 (JSC::DFG::SpeculativeJIT::compileMovHint):
44560 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
44561 * dfg/DFGSpeculativeJIT.h:
44562 (JSC::DFG::ValueSource::ValueSource):
44563 (JSC::DFG::ValueSource::isSet):
44564 (JSC::DFG::ValueSource::nodeIndex):
44565 (JSC::DFG::ValueRecovery::ValueRecovery):
44566 (JSC::DFG::ValueRecovery::alreadyInRegisterFile):
44567 (JSC::DFG::ValueRecovery::inGPR):
44568 (JSC::DFG::ValueRecovery::inFPR):
44569 (JSC::DFG::ValueRecovery::displacedInRegisterFile):
44570 (JSC::DFG::ValueRecovery::constant):
44571 (JSC::DFG::ValueRecovery::technique):
44572 (JSC::DFG::ValueRecovery::gpr):
44573 (JSC::DFG::ValueRecovery::fpr):
44574 (JSC::DFG::ValueRecovery::virtualRegister):
44575 (JSC::DFG::OSRExit::numberOfRecoveries):
44576 (JSC::DFG::OSRExit::valueRecovery):
44577 (JSC::DFG::OSRExit::isArgument):
44578 (JSC::DFG::OSRExit::argumentForIndex):
44579 (JSC::DFG::OSRExit::variableForIndex):
44580 (JSC::DFG::OSRExit::operandForIndex):
44581 (JSC::DFG::SpeculativeJIT::osrExits):
44582 (JSC::DFG::SpeculativeJIT::speculationCheck):
44583 (JSC::DFG::SpeculativeJIT::valueSourceForOperand):
44584 (JSC::DFG::SpeculativeJIT::setNodeIndexForOperand):
44585 (JSC::DFG::SpeculativeJIT::valueSourceReferenceForOperand):
44586 (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
44587 (JSC::DFG::SpeculationCheckIndexIterator::SpeculationCheckIndexIterator):
44588 (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
44589 * jit/CompactJITCodeMap.h: Added.
44590 (JSC::BytecodeAndMachineOffset::BytecodeAndMachineOffset):
44591 (JSC::BytecodeAndMachineOffset::getBytecodeIndex):
44592 (JSC::BytecodeAndMachineOffset::getMachineCodeOffset):
44593 (JSC::CompactJITCodeMap::~CompactJITCodeMap):
44594 (JSC::CompactJITCodeMap::decode):
44595 (JSC::CompactJITCodeMap::CompactJITCodeMap):
44596 (JSC::CompactJITCodeMap::at):
44597 (JSC::CompactJITCodeMap::decodeNumber):
44598 (JSC::CompactJITCodeMap::Encoder::Encoder):
44599 (JSC::CompactJITCodeMap::Encoder::~Encoder):
44600 (JSC::CompactJITCodeMap::Encoder::append):
44601 (JSC::CompactJITCodeMap::Encoder::finish):
44602 (JSC::CompactJITCodeMap::Encoder::appendByte):
44603 (JSC::CompactJITCodeMap::Encoder::encodeNumber):
44604 (JSC::CompactJITCodeMap::Encoder::ensureCapacityFor):
44606 (JSC::JIT::privateCompileMainPass):
44607 (JSC::JIT::privateCompile):
44609 * runtime/JSGlobalData.cpp:
44610 (JSC::JSGlobalData::JSGlobalData):
44611 (JSC::JSGlobalData::~JSGlobalData):
44612 * runtime/JSGlobalData.h:
44613 (JSC::JSGlobalData::osrScratchBufferForSize):
44614 * runtime/JSValue.cpp:
44615 (JSC::JSValue::description):
44617 2011-09-12 Geoffrey Garen <ggaren@apple.com>
44619 Re-enabled ENABLE(LAZY_BLOCK_FREEING).
44621 Reviewed by Stephanie Lewis.
44623 I accidentally disabled this in r94890, causing a big performance regression.
44627 2011-09-12 Michael Saboff <msaboff@apple.com>
44629 Broken Build for ARM - lshift32() needs TrustedImm32 arg
44630 https://bugs.webkit.org/show_bug.cgi?id=67965
44632 Change lshift32(16, ARMRegisters::S1); to lshift32(TrustedImm32(16), ARMRegisters::S1);
44634 Reviewed by Anders Carlsson.
44636 * assembler/MacroAssemblerARM.h:
44637 (JSC::MacroAssemblerARM::branch16):
44639 2011-09-12 Michael Saboff <msaboff@apple.com>
44641 Broken ARM build - missing semicolon in JavaScriptCore/assembler/MacroAssemblerARM.h
44642 https://bugs.webkit.org/show_bug.cgi?id=67961
44644 Added missing semicolon.
44646 Reviewed by Ryosuke Niwa.
44648 * assembler/MacroAssemblerARM.h:
44649 (JSC::MacroAssemblerARM::branch16):
44651 2011-09-12 Michael Saboff <msaboff@apple.com>
44653 Update RegExp and related classes to use 8 bit strings when available
44654 https://bugs.webkit.org/show_bug.cgi?id=67337
44656 Modified both the Yarr interpreter and JIT to handle 8 bit subject strings.
44657 The code paths are triggered by the UString::is8bit() method which currently
44658 returns false. Implemented JIT changes for all current architectures.
44659 Tested X86_64 and ARM v7.
44661 This includes some code that will likely change as we complete the
44662 8 bit string changes. This includes the way the raw buffer pointers
44663 are accessed as well as replacing the CharAccess class with a
44664 string interator returned from UString.
44666 Fixed build breakage in testRegExp.cpp due to globalObject construction
44669 Reviewed by Gavin Barraclough.
44671 * JavaScriptCore.exp:
44672 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
44674 (GlobalObject::finishCreation):
44675 (GlobalObject::GlobalObject):
44676 * assembler/ARMAssembler.cpp:
44677 (JSC::ARMAssembler::baseIndexTransfer32):
44678 * assembler/ARMAssembler.h:
44679 * assembler/ARMv7Assembler.h:
44680 (JSC::ARMv7Assembler::ubfx):
44681 (JSC::ARMv7Assembler::ARMInstructionFormatter::twoWordOp12Reg40Imm3Reg4Imm20Imm5):
44682 * assembler/MacroAssemblerARM.h:
44683 (JSC::MacroAssemblerARM::load8):
44684 (JSC::MacroAssemblerARM::branch8):
44685 (JSC::MacroAssemblerARM::branch16):
44686 * assembler/MacroAssemblerARMv7.h:
44687 (JSC::MacroAssemblerARMv7::load8):
44688 (JSC::MacroAssemblerARMv7::branch16):
44689 (JSC::MacroAssemblerARMv7::branch8):
44690 * assembler/MacroAssemblerMIPS.h:
44691 (JSC::MacroAssemblerMIPS::load8):
44692 (JSC::MacroAssemblerMIPS::branch8):
44693 (JSC::MacroAssemblerMIPS::branch16):
44694 * assembler/MacroAssemblerSH4.h:
44695 (JSC::MacroAssemblerSH4::load8):
44696 (JSC::MacroAssemblerSH4::branch8):
44697 (JSC::MacroAssemblerSH4::branch16):
44698 * assembler/MacroAssemblerX86Common.h:
44699 (JSC::MacroAssemblerX86Common::load8):
44700 (JSC::MacroAssemblerX86Common::branch16):
44701 (JSC::MacroAssemblerX86Common::branch8):
44702 * assembler/SH4Assembler.h:
44703 (JSC::SH4Assembler::extub):
44704 (JSC::SH4Assembler::printInstr):
44705 * assembler/X86Assembler.h:
44706 (JSC::X86Assembler::cmpw_ir):
44707 (JSC::X86Assembler::movzbl_mr):
44708 * runtime/RegExp.cpp:
44709 (JSC::RegExp::compile):
44710 (JSC::RegExp::compileIfNecessary):
44711 (JSC::RegExp::match):
44712 (JSC::RegExp::matchCompareWithInterpreter):
44713 * runtime/RegExp.h:
44714 * runtime/UString.h:
44715 (JSC::UString::is8Bit):
44717 * yarr/YarrInterpreter.cpp:
44718 (JSC::Yarr::Interpreter::CharAccess::CharAccess):
44719 (JSC::Yarr::Interpreter::CharAccess::~CharAccess):
44720 (JSC::Yarr::Interpreter::CharAccess::operator[]):
44721 (JSC::Yarr::Interpreter::InputStream::InputStream):
44722 (JSC::Yarr::Interpreter::Interpreter):
44723 (JSC::Yarr::interpret):
44724 * yarr/YarrJIT.cpp:
44725 (JSC::Yarr::YarrGenerator::jumpIfCharNotEquals):
44726 (JSC::Yarr::YarrGenerator::readCharacter):
44727 (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
44728 (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed):
44729 (JSC::Yarr::YarrGenerator::generatePatternCharacterGreedy):
44730 (JSC::Yarr::YarrGenerator::backtrackPatternCharacterNonGreedy):
44731 (JSC::Yarr::YarrGenerator::generateCharacterClassFixed):
44732 (JSC::Yarr::YarrGenerator::generateDotStarEnclosure):
44733 (JSC::Yarr::YarrGenerator::YarrGenerator):
44734 (JSC::Yarr::YarrGenerator::compile):
44735 (JSC::Yarr::jitCompile):
44736 (JSC::Yarr::execute):
44738 (JSC::Yarr::YarrCodeBlock::has8BitCode):
44739 (JSC::Yarr::YarrCodeBlock::has16BitCode):
44740 (JSC::Yarr::YarrCodeBlock::set8BitCode):
44741 (JSC::Yarr::YarrCodeBlock::set16BitCode):
44742 (JSC::Yarr::YarrCodeBlock::execute):
44743 * yarr/YarrParser.h:
44744 (JSC::Yarr::Parser::Parser):
44746 2011-09-12 Andras Becsi <andras.becsi@nokia.com>
44748 [Qt] Build fails after r94920 with strict compiler
44749 https://bugs.webkit.org/show_bug.cgi?id=67928
44751 Reviewed by Csaba Osztrogonác.
44753 * wtf/RedBlackTree.h:
44754 (WTF::RedBlackTree::insert): Remove dead variables updateStart and newSubTreeRoot.
44756 2011-09-12 Patrick Gansterer <paroga@webkit.org>
44758 Unreviewed build fix after r94871.
44760 * runtime/InitializeThreading.cpp:
44761 (JSC::initializeThreadingOnce):
44762 * wtf/FastMalloc.cpp:
44763 * wtf/RefCountedLeakCounter.h:
44765 2011-09-11 Filip Pizlo <fpizlo@apple.com>
44767 DFGNode.h has macros that indicate the enabling of a feature, but
44768 they do not use the ENABLE() idiom.
44769 https://bugs.webkit.org/show_bug.cgi?id=67907
44771 Reviewed by Oliver Hunt.
44773 * dfg/DFGByteCodeParser.cpp:
44774 (JSC::DFG::ByteCodeParser::stronglyPredict):
44775 (JSC::DFG::ByteCodeParser::parse):
44776 * dfg/DFGGraph.cpp:
44777 (JSC::DFG::Graph::predictArgumentTypes):
44778 * dfg/DFGJITCodeGenerator.cpp:
44779 * dfg/DFGJITCodeGenerator.h:
44780 * dfg/DFGJITCompiler.cpp:
44781 (JSC::DFG::JITCompiler::fillInt32ToInteger):
44782 (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):
44783 (JSC::DFG::JITCompiler::compileBody):
44784 (JSC::DFG::JITCompiler::link):
44785 * dfg/DFGJITCompiler.h:
44787 * dfg/DFGNonSpeculativeJIT.cpp:
44788 (JSC::DFG::NonSpeculativeJIT::compile):
44789 * dfg/DFGOperations.cpp:
44790 * dfg/DFGOperations.h:
44791 * dfg/DFGPropagator.cpp:
44792 (JSC::DFG::Propagator::fixpoint):
44793 (JSC::DFG::Propagator::propagateNode):
44794 (JSC::DFG::Propagator::propagateForward):
44795 (JSC::DFG::Propagator::propagateBackward):
44796 (JSC::DFG::propagate):
44797 * dfg/DFGScoreBoard.h:
44798 * dfg/DFGSpeculativeJIT.cpp:
44799 (JSC::DFG::SpeculativeJIT::compile):
44800 * dfg/DFGSpeculativeJIT.h:
44801 (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
44803 (JSC::JIT::privateCompile):
44805 2011-09-11 Fumitoshi Ukai <ukai@chromium.org>
44807 Unreviewed build fix for chromium/mac & clang.
44809 Fix the macro redefinition error by r94927, because chromium set
44810 ENABLE_JSC_MULTIPLE_THREADS=0 in WebKit/chromium/features.gypi and
44811 it is not PLATFORM(QT).
44812 ../../JavaScriptCore/wtf/Platform.h:512:9: error: 'ENABLE_JSC_MULTIPLE_THREADS' macro redefined [-Werror]
44813 #define ENABLE_JSC_MULTIPLE_THREADS 1
44814 <command line>:43:9: note: previous definition is here
44815 #define ENABLE_JSC_MULTIPLE_THREADS 0
44820 2011-09-11 Sam Weinig <sam@webkit.org>
44822 Remove JSCell::isPropertyNameIterator(), it is unused
44823 https://bugs.webkit.org/show_bug.cgi?id=67911
44825 Reviewed by Oliver Hunt.
44827 * runtime/JSCell.h:
44828 * runtime/JSPropertyNameIterator.h:
44830 2011-09-11 Sam Weinig <sam@webkit.org>
44832 De-virtualize JSCell::isAPIValueWrapper
44833 https://bugs.webkit.org/show_bug.cgi?id=67909
44835 Reviewed by Oliver Hunt.
44837 * runtime/JSAPIValueWrapper.h:
44838 (JSC::JSAPIValueWrapper::createStructure):
44839 Set the correct type on structure creation.
44841 * runtime/JSCell.h:
44842 Remove virtual keyword and default implementation.
44844 * runtime/JSType.h:
44845 Add type for APIValueWrapper. It must come after CompoundType since
44846 the APIValueWrapper has children in need of marking.
44848 * runtime/Structure.h:
44849 (JSC::JSCell::isAPIValueWrapper):
44850 Implement predicate using type info.
44852 2011-09-10 Sam Weinig <sam@webkit.org>
44854 De-virtualize JSCell::isGetterSetter, type information is available for it
44855 https://bugs.webkit.org/show_bug.cgi?id=67902
44857 Reviewed by Dan Bernstein.
44859 * runtime/GetterSetter.cpp:
44860 * runtime/GetterSetter.h:
44861 Remove override of isGetterSetter.
44863 * runtime/JSCell.cpp:
44864 * runtime/JSCell.h:
44865 De-virtualize and remove silly base implementation.
44867 * runtime/Structure.h:
44868 (JSC::JSCell::isGetterSetter):
44869 Use type info to determine getter-setter-hood.
44871 2011-09-09 Oliver Hunt <oliver@apple.com>
44873 Remove support for anonymous storage from jsobjects
44874 https://bugs.webkit.org/show_bug.cgi?id=67881
44876 Reviewed by Sam Weinig.
44878 Remove all use of anonymous slots, essentially a mechanical change
44881 * API/JSCallbackConstructor.h:
44882 (JSC::JSCallbackConstructor::createStructure):
44883 * API/JSCallbackFunction.h:
44884 (JSC::JSCallbackFunction::createStructure):
44885 * API/JSCallbackObject.h:
44886 (JSC::JSCallbackObject::createStructure):
44887 * JavaScriptCore.exp:
44888 * debugger/DebuggerActivation.h:
44889 (JSC::DebuggerActivation::createStructure):
44890 * heap/MarkStack.cpp:
44891 (JSC::MarkStack::validateValue):
44892 * heap/MarkStack.h:
44893 * runtime/Arguments.h:
44894 (JSC::Arguments::createStructure):
44895 * runtime/ArrayConstructor.h:
44896 (JSC::ArrayConstructor::createStructure):
44897 * runtime/ArrayPrototype.cpp:
44898 (JSC::ArrayPrototype::finishCreation):
44899 * runtime/ArrayPrototype.h:
44900 (JSC::ArrayPrototype::createStructure):
44901 * runtime/BooleanObject.h:
44902 (JSC::BooleanObject::createStructure):
44903 * runtime/BooleanPrototype.cpp:
44904 (JSC::BooleanPrototype::BooleanPrototype):
44905 * runtime/BooleanPrototype.h:
44906 (JSC::BooleanPrototype::createStructure):
44907 * runtime/DateConstructor.h:
44908 (JSC::DateConstructor::createStructure):
44909 * runtime/DateInstance.h:
44910 (JSC::DateInstance::createStructure):
44911 * runtime/DatePrototype.cpp:
44912 (JSC::DatePrototype::DatePrototype):
44913 * runtime/DatePrototype.h:
44914 (JSC::DatePrototype::createStructure):
44915 * runtime/ErrorInstance.h:
44916 (JSC::ErrorInstance::createStructure):
44917 * runtime/ErrorPrototype.cpp:
44918 (JSC::ErrorPrototype::finishCreation):
44919 * runtime/ErrorPrototype.h:
44920 (JSC::ErrorPrototype::createStructure):
44921 * runtime/ExceptionHelpers.h:
44922 (JSC::InterruptedExecutionError::createStructure):
44923 (JSC::TerminatedExecutionError::createStructure):
44924 * runtime/Executable.h:
44925 (JSC::ExecutableBase::createStructure):
44926 (JSC::NativeExecutable::createStructure):
44927 (JSC::EvalExecutable::createStructure):
44928 (JSC::ProgramExecutable::createStructure):
44929 (JSC::FunctionExecutable::createStructure):
44930 * runtime/FunctionPrototype.h:
44931 (JSC::FunctionPrototype::createStructure):
44932 * runtime/GetterSetter.h:
44933 (JSC::GetterSetter::createStructure):
44934 * runtime/InternalFunction.h:
44935 (JSC::InternalFunction::createStructure):
44936 * runtime/JSAPIValueWrapper.h:
44937 (JSC::JSAPIValueWrapper::createStructure):
44938 * runtime/JSActivation.h:
44939 (JSC::JSActivation::createStructure):
44940 * runtime/JSArray.h:
44941 (JSC::JSArray::createStructure):
44942 * runtime/JSByteArray.cpp:
44943 (JSC::JSByteArray::createStructure):
44944 * runtime/JSCell.h:
44945 * runtime/JSFunction.h:
44946 (JSC::JSFunction::createStructure):
44947 * runtime/JSGlobalObject.h:
44948 (JSC::JSGlobalObject::finishCreation):
44949 (JSC::JSGlobalObject::createStructure):
44950 * runtime/JSNotAnObject.h:
44951 (JSC::JSNotAnObject::createStructure):
44952 * runtime/JSONObject.h:
44953 (JSC::JSONObject::createStructure):
44954 * runtime/JSObject.h:
44955 (JSC::JSObject::createStructure):
44956 (JSC::JSNonFinalObject::createStructure):
44957 (JSC::JSFinalObject::createStructure):
44958 * runtime/JSPropertyNameIterator.cpp:
44959 (JSC::JSPropertyNameIterator::create):
44960 * runtime/JSPropertyNameIterator.h:
44961 (JSC::JSPropertyNameIterator::createStructure):
44962 * runtime/JSStaticScopeObject.h:
44963 (JSC::JSStaticScopeObject::createStructure):
44964 * runtime/JSString.h:
44965 (JSC::RopeBuilder::createStructure):
44966 * runtime/JSVariableObject.h:
44967 (JSC::JSVariableObject::createStructure):
44968 * runtime/JSWrapperObject.h:
44969 (JSC::JSWrapperObject::createStructure):
44970 * runtime/MathObject.h:
44971 (JSC::MathObject::createStructure):
44972 * runtime/NativeErrorConstructor.h:
44973 (JSC::NativeErrorConstructor::createStructure):
44974 * runtime/NumberConstructor.h:
44975 (JSC::NumberConstructor::createStructure):
44976 * runtime/NumberObject.h:
44977 (JSC::NumberObject::createStructure):
44978 * runtime/NumberPrototype.cpp:
44979 (JSC::NumberPrototype::NumberPrototype):
44980 * runtime/NumberPrototype.h:
44981 (JSC::NumberPrototype::createStructure):
44982 * runtime/ObjectConstructor.h:
44983 (JSC::ObjectConstructor::createStructure):
44984 * runtime/ObjectPrototype.cpp:
44985 (JSC::ObjectPrototype::finishCreation):
44986 * runtime/ObjectPrototype.h:
44987 (JSC::ObjectPrototype::createStructure):
44988 * runtime/RegExp.h:
44989 (JSC::RegExp::createStructure):
44990 * runtime/RegExpConstructor.h:
44991 (JSC::RegExpConstructor::createStructure):
44992 * runtime/RegExpObject.h:
44993 (JSC::RegExpObject::createStructure):
44994 * runtime/RegExpPrototype.h:
44995 (JSC::RegExpPrototype::createStructure):
44996 * runtime/ScopeChain.h:
44997 (JSC::ScopeChainNode::createStructure):
44998 * runtime/StrictEvalActivation.h:
44999 (JSC::StrictEvalActivation::createStructure):
45000 * runtime/StringConstructor.h:
45001 (JSC::StringConstructor::createStructure):
45002 * runtime/StringObject.h:
45003 (JSC::StringObject::createStructure):
45004 * runtime/StringObjectThatMasqueradesAsUndefined.h:
45005 (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
45006 * runtime/StringPrototype.cpp:
45007 (JSC::StringPrototype::StringPrototype):
45008 * runtime/StringPrototype.h:
45009 (JSC::StringPrototype::createStructure):
45010 * runtime/Structure.cpp:
45011 (JSC::Structure::Structure):
45012 (JSC::Structure::materializePropertyMap):
45013 (JSC::Structure::addPropertyTransitionToExistingStructure):
45014 (JSC::Structure::addPropertyTransition):
45015 (JSC::Structure::removePropertyTransition):
45016 (JSC::Structure::changePrototypeTransition):
45017 (JSC::Structure::despecifyFunctionTransition):
45018 (JSC::Structure::getterSetterTransition):
45019 (JSC::Structure::toDictionaryTransition):
45020 (JSC::Structure::preventExtensionsTransition):
45021 (JSC::Structure::flattenDictionaryStructure):
45022 (JSC::Structure::addPropertyWithoutTransition):
45023 (JSC::Structure::removePropertyWithoutTransition):
45024 (JSC::Structure::get):
45025 (JSC::Structure::putSpecificValue):
45026 (JSC::Structure::remove):
45027 (JSC::Structure::checkConsistency):
45028 * runtime/Structure.h:
45029 (JSC::Structure::create):
45030 (JSC::Structure::propertyStorageSize):
45031 (JSC::Structure::get):
45032 * runtime/StructureChain.h:
45033 (JSC::StructureChain::createStructure):
45035 2011-09-11 Jarred Nicholls <jarred@sencha.com>
45037 [Qt] Win32 build broken due to MachineStackMarker.cpp/.o failing to link against pthreads library
45038 https://bugs.webkit.org/show_bug.cgi?id=67864
45040 Qt Win32 is not pthread compatible and cannot participate in multithreaded JSC or it fails to build.
45042 Reviewed by Csaba Osztrogonác.
45046 2011-09-11 Filip Pizlo <fpizlo@apple.com>
45048 ARM and MIPS assemblers still refer to executable pools.
45049 https://bugs.webkit.org/show_bug.cgi?id=67903
45051 Reviewed by Csaba Osztrogonác.
45053 * assembler/ARMAssembler.cpp:
45054 (JSC::ARMAssembler::executableCopy):
45055 * assembler/ARMAssembler.h:
45056 * assembler/AssemblerBufferWithConstantPool.h:
45057 * assembler/MIPSAssembler.h:
45058 (JSC::MIPSAssembler::executableCopy):
45060 2011-09-08 Filip Pizlo <fpizlo@apple.com>
45062 The executable allocator makes it difficult to free individual
45063 chunks of executable memory
45064 https://bugs.webkit.org/show_bug.cgi?id=66363
45066 Reviewed by Oliver Hunt.
45068 Introduced a best-fit, balanced-tree based allocator. The allocator
45069 required a balanced tree that does not allocate memory and that
45070 permits the removal of individual nodes directly (as opposed to by
45071 key); neither AVLTree nor WebCore's PODRedBlackTree supported this.
45072 Changed all references to executable code to use a reference counted
45075 * GNUmakefile.list.am:
45076 * JavaScriptCore.exp:
45077 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
45078 * JavaScriptCore.xcodeproj/project.pbxproj:
45079 * assembler/AssemblerBuffer.h:
45080 (JSC::AssemblerBuffer::executableCopy):
45081 * assembler/LinkBuffer.h:
45082 (JSC::LinkBuffer::LinkBuffer):
45083 (JSC::LinkBuffer::finalizeCode):
45084 (JSC::LinkBuffer::linkCode):
45085 * assembler/MacroAssemblerCodeRef.h:
45086 (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef):
45087 (JSC::MacroAssemblerCodeRef::createSelfManagedCodeRef):
45088 (JSC::MacroAssemblerCodeRef::executableMemory):
45089 (JSC::MacroAssemblerCodeRef::code):
45090 (JSC::MacroAssemblerCodeRef::size):
45091 (JSC::MacroAssemblerCodeRef::operator!):
45092 * assembler/X86Assembler.h:
45093 (JSC::X86Assembler::executableCopy):
45094 (JSC::X86Assembler::X86InstructionFormatter::executableCopy):
45095 * bytecode/CodeBlock.h:
45096 * bytecode/Instruction.h:
45097 * bytecode/StructureStubInfo.h:
45098 * dfg/DFGJITCompiler.cpp:
45099 (JSC::DFG::JITCompiler::compile):
45100 (JSC::DFG::JITCompiler::compileFunction):
45101 * dfg/DFGRepatch.cpp:
45102 (JSC::DFG::generateProtoChainAccessStub):
45103 (JSC::DFG::tryCacheGetByID):
45104 (JSC::DFG::tryBuildGetByIDList):
45105 (JSC::DFG::tryBuildGetByIDProtoList):
45106 (JSC::DFG::tryCachePutByID):
45107 * jit/ExecutableAllocator.cpp:
45108 (JSC::ExecutableAllocator::initializeAllocator):
45109 (JSC::ExecutableAllocator::ExecutableAllocator):
45110 (JSC::ExecutableAllocator::allocate):
45111 (JSC::ExecutableAllocator::committedByteCount):
45112 (JSC::ExecutableAllocator::dumpProfile):
45113 * jit/ExecutableAllocator.h:
45114 (JSC::ExecutableAllocator::dumpProfile):
45115 * jit/ExecutableAllocatorFixedVMPool.cpp:
45116 (JSC::ExecutableAllocator::initializeAllocator):
45117 (JSC::ExecutableAllocator::ExecutableAllocator):
45118 (JSC::ExecutableAllocator::isValid):
45119 (JSC::ExecutableAllocator::underMemoryPressure):
45120 (JSC::ExecutableAllocator::allocate):
45121 (JSC::ExecutableAllocator::committedByteCount):
45122 (JSC::ExecutableAllocator::dumpProfile):
45124 (JSC::JIT::privateCompile):
45126 (JSC::JIT::compileCTIMachineTrampolines):
45127 (JSC::JIT::compileCTINativeCall):
45129 (JSC::JITCode::operator !):
45130 (JSC::JITCode::addressForCall):
45131 (JSC::JITCode::offsetOf):
45132 (JSC::JITCode::execute):
45133 (JSC::JITCode::start):
45134 (JSC::JITCode::size):
45135 (JSC::JITCode::getExecutableMemory):
45136 (JSC::JITCode::HostFunction):
45137 (JSC::JITCode::JITCode):
45138 * jit/JITOpcodes.cpp:
45139 (JSC::JIT::privateCompileCTIMachineTrampolines):
45140 (JSC::JIT::privateCompileCTINativeCall):
45141 * jit/JITOpcodes32_64.cpp:
45142 (JSC::JIT::privateCompileCTIMachineTrampolines):
45143 (JSC::JIT::privateCompileCTINativeCall):
45144 * jit/JITPropertyAccess.cpp:
45145 (JSC::JIT::stringGetByValStubGenerator):
45146 (JSC::JIT::emitSlow_op_get_by_val):
45147 (JSC::JIT::privateCompilePutByIdTransition):
45148 (JSC::JIT::privateCompilePatchGetArrayLength):
45149 (JSC::JIT::privateCompileGetByIdProto):
45150 (JSC::JIT::privateCompileGetByIdSelfList):
45151 (JSC::JIT::privateCompileGetByIdProtoList):
45152 (JSC::JIT::privateCompileGetByIdChainList):
45153 (JSC::JIT::privateCompileGetByIdChain):
45154 * jit/JITPropertyAccess32_64.cpp:
45155 (JSC::JIT::stringGetByValStubGenerator):
45156 (JSC::JIT::emitSlow_op_get_by_val):
45157 (JSC::JIT::privateCompilePutByIdTransition):
45158 (JSC::JIT::privateCompilePatchGetArrayLength):
45159 (JSC::JIT::privateCompileGetByIdProto):
45160 (JSC::JIT::privateCompileGetByIdSelfList):
45161 (JSC::JIT::privateCompileGetByIdProtoList):
45162 (JSC::JIT::privateCompileGetByIdChainList):
45163 (JSC::JIT::privateCompileGetByIdChain):
45164 * jit/JITStubs.cpp:
45165 (JSC::JITThunks::JITThunks):
45166 (JSC::DEFINE_STUB_FUNCTION):
45167 (JSC::getPolymorphicAccessStructureListSlot):
45168 (JSC::JITThunks::ctiStub):
45169 (JSC::JITThunks::hostFunctionStub):
45171 * jit/SpecializedThunkJIT.h:
45172 (JSC::SpecializedThunkJIT::SpecializedThunkJIT):
45173 (JSC::SpecializedThunkJIT::finalize):
45174 * jit/ThunkGenerators.cpp:
45175 (JSC::charCodeAtThunkGenerator):
45176 (JSC::charAtThunkGenerator):
45177 (JSC::fromCharCodeThunkGenerator):
45178 (JSC::sqrtThunkGenerator):
45179 (JSC::floorThunkGenerator):
45180 (JSC::ceilThunkGenerator):
45181 (JSC::roundThunkGenerator):
45182 (JSC::expThunkGenerator):
45183 (JSC::logThunkGenerator):
45184 (JSC::absThunkGenerator):
45185 (JSC::powThunkGenerator):
45186 * jit/ThunkGenerators.h:
45187 * runtime/Executable.h:
45188 (JSC::NativeExecutable::create):
45189 * runtime/InitializeThreading.cpp:
45190 (JSC::initializeThreadingOnce):
45191 * runtime/JSGlobalData.cpp:
45192 (JSC::JSGlobalData::JSGlobalData):
45193 (JSC::JSGlobalData::dumpSampleData):
45194 * runtime/JSGlobalData.h:
45195 (JSC::JSGlobalData::getCTIStub):
45196 * wtf/CMakeLists.txt:
45197 * wtf/MetaAllocator.cpp: Added.
45198 (WTF::MetaAllocatorHandle::MetaAllocatorHandle):
45199 (WTF::MetaAllocatorHandle::~MetaAllocatorHandle):
45200 (WTF::MetaAllocatorHandle::shrink):
45201 (WTF::MetaAllocator::MetaAllocator):
45202 (WTF::MetaAllocator::allocate):
45203 (WTF::MetaAllocator::currentStatistics):
45204 (WTF::MetaAllocator::findAndRemoveFreeSpace):
45205 (WTF::MetaAllocator::addFreeSpaceFromReleasedHandle):
45206 (WTF::MetaAllocator::addFreshFreeSpace):
45207 (WTF::MetaAllocator::debugFreeSpaceSize):
45208 (WTF::MetaAllocator::addFreeSpace):
45209 (WTF::MetaAllocator::incrementPageOccupancy):
45210 (WTF::MetaAllocator::decrementPageOccupancy):
45211 (WTF::MetaAllocator::roundUp):
45212 (WTF::MetaAllocator::allocFreeSpaceNode):
45213 (WTF::MetaAllocator::freeFreeSpaceNode):
45214 (WTF::MetaAllocator::dumpProfile):
45215 * wtf/MetaAllocator.h: Added.
45216 (WTF::MetaAllocator::bytesAllocated):
45217 (WTF::MetaAllocator::bytesReserved):
45218 (WTF::MetaAllocator::bytesCommitted):
45219 (WTF::MetaAllocator::dumpProfile):
45220 (WTF::MetaAllocator::~MetaAllocator):
45221 * wtf/MetaAllocatorHandle.h: Added.
45222 * wtf/RedBlackTree.h: Added.
45223 (WTF::RedBlackTree::Node::Node):
45224 (WTF::RedBlackTree::Node::successor):
45225 (WTF::RedBlackTree::Node::predecessor):
45226 (WTF::RedBlackTree::Node::reset):
45227 (WTF::RedBlackTree::Node::parent):
45228 (WTF::RedBlackTree::Node::setParent):
45229 (WTF::RedBlackTree::Node::left):
45230 (WTF::RedBlackTree::Node::setLeft):
45231 (WTF::RedBlackTree::Node::right):
45232 (WTF::RedBlackTree::Node::setRight):
45233 (WTF::RedBlackTree::Node::color):
45234 (WTF::RedBlackTree::Node::setColor):
45235 (WTF::RedBlackTree::RedBlackTree):
45236 (WTF::RedBlackTree::insert):
45237 (WTF::RedBlackTree::remove):
45238 (WTF::RedBlackTree::findExact):
45239 (WTF::RedBlackTree::findLeastGreaterThanOrEqual):
45240 (WTF::RedBlackTree::findGreatestLessThanOrEqual):
45241 (WTF::RedBlackTree::first):
45242 (WTF::RedBlackTree::last):
45243 (WTF::RedBlackTree::size):
45244 (WTF::RedBlackTree::isEmpty):
45245 (WTF::RedBlackTree::treeMinimum):
45246 (WTF::RedBlackTree::treeMaximum):
45247 (WTF::RedBlackTree::treeInsert):
45248 (WTF::RedBlackTree::leftRotate):
45249 (WTF::RedBlackTree::rightRotate):
45250 (WTF::RedBlackTree::removeFixup):
45252 * yarr/YarrJIT.cpp:
45253 (JSC::Yarr::YarrGenerator::compile):
45255 (JSC::Yarr::YarrCodeBlock::execute):
45256 (JSC::Yarr::YarrCodeBlock::getAddr):
45258 2011-09-10 Sam Weinig <sam@webkit.org>
45260 Remove JSC::isZombie() function, it did nothing and was called by no-one.
45261 https://bugs.webkit.org/show_bug.cgi?id=67901
45263 Reviewed by Andy Estes.
45265 * JavaScriptCore.exp:
45266 * runtime/JSCell.cpp:
45267 * runtime/JSValue.h:
45269 2011-09-10 Sam Weinig <sam@webkit.org>
45271 Add isInterruptedExecutionException and isTerminatedExecutionException predicates
45272 https://bugs.webkit.org/show_bug.cgi?id=67892
45274 Reviewed by Andy "First Time Reviewer" Estes.
45276 * JavaScriptCore.exp:
45279 * interpreter/Interpreter.cpp:
45280 (JSC::Interpreter::throwException):
45281 Use new predicates.
45283 * runtime/ExceptionHelpers.cpp:
45284 (JSC::createInterruptedExecutionException):
45285 (JSC::isInterruptedExecutionException):
45286 (JSC::createTerminatedExecutionException):
45287 (JSC::isTerminatedExecutionException):
45288 * runtime/ExceptionHelpers.h:
45289 (JSC::InterruptedExecutionError::InterruptedExecutionError):
45292 2011-09-10 Filip Pizlo <fpizlo@apple.com>
45294 DFG JIT completely undoes speculative compilation even in the case of
45295 a partial static speculation failure
45296 https://bugs.webkit.org/show_bug.cgi?id=67798
45298 Reviewed by Geoffrey Garen.
45300 This is a regression with static speculation, so it is turned off by
45301 default. But it is a necessary prerequisite for further work on
45302 dynamic speculation.
45304 * dfg/DFGJITCodeGenerator.cpp:
45305 (JSC::DFG::JITCodeGenerator::clearGenerationInfo):
45306 * dfg/DFGJITCodeGenerator.h:
45307 * dfg/DFGSpeculativeJIT.cpp:
45308 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
45309 (JSC::DFG::SpeculativeJIT::compile):
45310 * dfg/DFGSpeculativeJIT.h:
45311 (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
45313 2011-09-09 Chris Marrin <cmarrin@apple.com>
45315 requestAnimationFrame doesn't throttle on Mac
45316 https://bugs.webkit.org/show_bug.cgi?id=67171
45318 Reviewed by Simon Fraser.
45320 Added WTF_USE_REQUEST_ANIMATION_FRAME_TIMER to allow any platform to run
45321 requestAnimationFrame callbacks on a Timer defined in ScriptedAnimationController.
45322 Currently only enabled for PLATFORM(MAC)
45326 2011-09-09 Geoffrey Garen <ggaren@apple.com>
45328 Reviewed by Dan Bernstein.
45330 Removed ENABLE(SINGLE_THREADED) support, since it is always false
45331 https://bugs.webkit.org/show_bug.cgi?id=67862
45333 Next step toward making the baseline platform assumption that threads exist.
45336 * JavaScriptCore.gypi:
45337 * JavaScriptCore.vcproj/WTF/WTF.vcproj: Removed references to
45338 ThreadingNone.cpp, which was only compiled in single-threaded mode.
45341 * wtf/ThreadSpecific.h:
45343 * wtf/qt/ThreadingQt.cpp: Removed now-dead code.
45345 * wtf/ThreadingNone.cpp: Removed.
45347 2011-09-09 Mark Hahnenberg <mhahnenberg@apple.com>
45349 Unzip initialization lists and constructors in JSCell hierarchy (5/7)
45350 https://bugs.webkit.org/show_bug.cgi?id=67420
45352 Reviewed by Geoffrey Garen.
45354 Completed the fifth level of the refactoring to add finishCreation()
45355 methods to all classes within the JSCell hierarchy with non-trivial
45356 constructor bodies.
45358 This primarily consists of pushing the calls to finishCreation() down
45359 into the constructors of the subclasses of the second level of the hierarchy
45360 as well as pulling the finishCreation() calls out into the class's corresponding
45361 create() method if it has one. Doing both simultaneously allows us to
45362 maintain the invariant that the finishCreation() method chain is called exactly
45363 once during the creation of an object, since calling it any other number of
45364 times (0, 2, or more) will cause an assertion failure.
45366 * API/JSCallbackConstructor.cpp:
45367 (JSC::JSCallbackConstructor::JSCallbackConstructor):
45368 * API/JSCallbackConstructor.h:
45369 (JSC::JSCallbackConstructor::create):
45370 * API/JSCallbackFunction.cpp:
45371 (JSC::JSCallbackFunction::JSCallbackFunction):
45372 (JSC::JSCallbackFunction::finishCreation):
45373 * API/JSCallbackFunction.h:
45374 * API/JSCallbackObject.h:
45375 * API/JSCallbackObjectFunctions.h:
45376 (JSC::::JSCallbackObject):
45377 (JSC::::finishCreation):
45378 * JavaScriptCore.exp:
45379 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
45380 * debugger/DebuggerActivation.cpp:
45381 * debugger/DebuggerActivation.h:
45382 (JSC::DebuggerActivation::create):
45384 (GlobalObject::finishCreation):
45385 (GlobalObject::GlobalObject):
45386 * runtime/ArrayConstructor.cpp:
45387 (JSC::ArrayConstructor::ArrayConstructor):
45388 (JSC::ArrayConstructor::finishCreation):
45389 * runtime/ArrayConstructor.h:
45390 * runtime/ArrayPrototype.cpp:
45391 (JSC::ArrayPrototype::ArrayPrototype):
45392 * runtime/ArrayPrototype.h:
45393 (JSC::ArrayPrototype::create):
45394 * runtime/BooleanConstructor.cpp:
45395 (JSC::BooleanConstructor::BooleanConstructor):
45396 (JSC::BooleanConstructor::finishCreation):
45397 * runtime/BooleanConstructor.h:
45398 * runtime/BooleanObject.cpp:
45399 (JSC::BooleanObject::BooleanObject):
45400 * runtime/BooleanObject.h:
45401 (JSC::BooleanObject::create):
45402 * runtime/BooleanPrototype.cpp:
45403 (JSC::BooleanPrototype::BooleanPrototype):
45404 (JSC::BooleanPrototype::finishCreation):
45405 * runtime/BooleanPrototype.h:
45406 * runtime/DateConstructor.cpp:
45407 (JSC::DateConstructor::DateConstructor):
45408 (JSC::DateConstructor::finishCreation):
45409 * runtime/DateConstructor.h:
45410 * runtime/DateInstance.cpp:
45411 (JSC::DateInstance::DateInstance):
45412 * runtime/DateInstance.h:
45413 (JSC::DateInstance::create):
45414 * runtime/DatePrototype.cpp:
45415 (JSC::DatePrototype::DatePrototype):
45416 (JSC::DatePrototype::finishCreation):
45417 * runtime/DatePrototype.h:
45418 * runtime/Error.cpp:
45419 (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction):
45420 * runtime/ErrorConstructor.cpp:
45421 (JSC::ErrorConstructor::ErrorConstructor):
45422 (JSC::ErrorConstructor::finishCreation):
45423 * runtime/ErrorConstructor.h:
45424 * runtime/ErrorPrototype.cpp:
45425 (JSC::ErrorPrototype::ErrorPrototype):
45426 * runtime/ErrorPrototype.h:
45427 (JSC::ErrorPrototype::create):
45428 * runtime/FunctionConstructor.cpp:
45429 (JSC::FunctionConstructor::FunctionConstructor):
45430 (JSC::FunctionConstructor::finishCreation):
45431 * runtime/FunctionConstructor.h:
45432 * runtime/FunctionPrototype.cpp:
45433 (JSC::FunctionPrototype::FunctionPrototype):
45434 (JSC::FunctionPrototype::finishCreation):
45435 * runtime/FunctionPrototype.h:
45436 * runtime/InternalFunction.cpp:
45437 (JSC::InternalFunction::InternalFunction):
45438 * runtime/InternalFunction.h:
45439 * runtime/JSActivation.cpp:
45440 (JSC::JSActivation::JSActivation):
45441 * runtime/JSActivation.h:
45442 (JSC::JSActivation::create):
45443 * runtime/JSGlobalObject.h:
45444 (JSC::JSGlobalObject::create):
45445 (JSC::JSGlobalObject::JSGlobalObject):
45446 * runtime/JSONObject.cpp:
45447 (JSC::JSONObject::JSONObject):
45448 * runtime/JSONObject.h:
45449 (JSC::JSONObject::create):
45450 * runtime/JSStaticScopeObject.h:
45451 (JSC::JSStaticScopeObject::create):
45452 (JSC::JSStaticScopeObject::JSStaticScopeObject):
45453 * runtime/JSString.cpp:
45454 (JSC::StringObject::create):
45455 * runtime/MathObject.cpp:
45456 (JSC::MathObject::MathObject):
45457 * runtime/MathObject.h:
45458 (JSC::MathObject::create):
45459 * runtime/NativeErrorConstructor.cpp:
45460 (JSC::NativeErrorConstructor::NativeErrorConstructor):
45461 * runtime/NativeErrorConstructor.h:
45462 (JSC::NativeErrorConstructor::finishCreation):
45463 * runtime/NativeErrorPrototype.cpp:
45464 (JSC::NativeErrorPrototype::NativeErrorPrototype):
45465 (JSC::NativeErrorPrototype::finishCreation):
45466 * runtime/NativeErrorPrototype.h:
45467 * runtime/NumberConstructor.cpp:
45468 (JSC::NumberConstructor::NumberConstructor):
45469 (JSC::NumberConstructor::finishCreation):
45470 * runtime/NumberConstructor.h:
45471 * runtime/NumberObject.cpp:
45472 (JSC::NumberObject::NumberObject):
45473 * runtime/NumberObject.h:
45474 (JSC::NumberObject::create):
45475 * runtime/NumberPrototype.cpp:
45476 (JSC::NumberPrototype::NumberPrototype):
45477 (JSC::NumberPrototype::finishCreation):
45478 * runtime/NumberPrototype.h:
45479 * runtime/ObjectConstructor.cpp:
45480 (JSC::ObjectConstructor::ObjectConstructor):
45481 (JSC::ObjectConstructor::finishCreation):
45482 * runtime/ObjectConstructor.h:
45483 * runtime/RegExpConstructor.cpp:
45484 (JSC::RegExpConstructor::RegExpConstructor):
45485 (JSC::RegExpConstructor::finishCreation):
45486 (JSC::RegExpMatchesArray::RegExpMatchesArray):
45487 * runtime/RegExpConstructor.h:
45488 * runtime/RegExpMatchesArray.h:
45489 (JSC::RegExpMatchesArray::create):
45490 * runtime/RegExpObject.cpp:
45491 (JSC::RegExpObject::RegExpObject):
45492 * runtime/RegExpObject.h:
45493 (JSC::RegExpObject::create):
45494 * runtime/RegExpPrototype.cpp:
45495 (JSC::RegExpPrototype::RegExpPrototype):
45496 * runtime/StringConstructor.cpp:
45497 (JSC::StringConstructor::StringConstructor):
45498 (JSC::StringConstructor::finishCreation):
45499 * runtime/StringConstructor.h:
45500 * runtime/StringObject.cpp:
45501 (JSC::StringObject::StringObject):
45502 * runtime/StringObject.h:
45503 (JSC::StringObject::create):
45504 * runtime/StringObjectThatMasqueradesAsUndefined.h:
45505 (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
45506 * runtime/StringPrototype.cpp:
45507 (JSC::StringPrototype::StringPrototype):
45508 (JSC::StringPrototype::finishCreation):
45509 * runtime/StringPrototype.h:
45511 2011-09-09 Geoffrey Garen <ggaren@apple.com>
45513 Build fix: Guard against double-#define for something already #defined
45514 by the build system.
45518 2011-09-09 Geoffrey Garen <ggaren@apple.com>
45520 Reviewed by Dan Bernstein.
45522 Never #define ENABLE_SINGLE_THREADED, !ENABLE_JSC_MULTIPLE_THREADS, or
45523 !ENABLE_WTF_MULTIPLE_THREADS
45524 https://bugs.webkit.org/show_bug.cgi?id=67860
45526 First step toward making the baseline platform assumption that threads
45527 exist: Never #define ENABLE_SINGLE_THREADED, !ENABLE_JSC_MULTIPLE_THREADS,
45528 or !ENABLE_WTF_MULTIPLE_THREADS.
45532 2011-09-09 Laszlo Gombos <laszlo.1.gombos@nokia.com>
45534 [Qt] Remove common.pri
45535 https://bugs.webkit.org/show_bug.cgi?id=67814
45537 Reviewed by Andreas Kling.
45539 * JavaScriptCore.pri:
45541 2011-09-08 Mark Hahnenberg <mhahnenberg@apple.com>
45543 REGRESSION(r94811): Assertion failure in 2 worker tests
45544 https://bugs.webkit.org/show_bug.cgi?id=67829
45546 Reviewed by Sam Weinig.
45548 Fixing a couple tests that were broken due to the wrong values being
45549 set in the parent class pointers in the ClassInfo structs for
45550 TerminatedExecutionError and InterruptedExecutionError.
45552 * runtime/ExceptionHelpers.cpp:
45554 2011-09-08 Oliver Hunt <oliver@apple.com>
45556 Use bump allocator for initial property storage
45557 https://bugs.webkit.org/show_bug.cgi?id=67494
45559 Reviewed by Geoffrey Garen.
45561 Use a bump allocator for initial allocation of property storage,
45562 and promote to fastMalloc memory only if it survives a GC pass.
45564 Comes out as a 1% win on v8, and is a useful step on the way to
45565 GC allocation of all property storage.
45567 * JavaScriptCore.exp:
45568 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
45569 * JavaScriptCore.xcodeproj/project.pbxproj:
45571 (JSC::Heap::collect):
45573 (JSC::Heap::allocatePropertyStorage):
45574 (JSC::Heap::inPropertyStorageNursery):
45575 * heap/MarkedBlock.h:
45576 * heap/NewSpace.cpp:
45577 (JSC::NewSpace::NewSpace):
45579 (JSC::NewSpace::resetPropertyStorageNursery):
45580 (JSC::NewSpace::allocatePropertyStorage):
45581 (JSC::NewSpace::inPropertyStorageNursery):
45582 * jit/JITStubs.cpp:
45583 (JSC::DEFINE_STUB_FUNCTION):
45584 * runtime/JSObject.cpp:
45585 (JSC::JSObject::allocatePropertyStorage):
45586 * runtime/JSObject.h:
45587 (JSC::JSObject::isUsingInlineStorage):
45588 (JSC::JSObject::JSObject):
45589 (JSC::JSObject::propertyStorage):
45590 (JSC::JSObject::~JSObject):
45591 (JSC::JSObject::putDirectInternal):
45592 (JSC::JSObject::putDirectWithoutTransition):
45593 (JSC::JSObject::putDirectFunctionWithoutTransition):
45594 (JSC::JSObject::transitionTo):
45595 (JSC::JSObject::visitChildrenDirect):
45596 * runtime/StorageBarrier.h: Added.
45597 (JSC::StorageBarrier::StorageBarrier):
45598 (JSC::StorageBarrier::set):
45599 (JSC::StorageBarrier::operator->):
45600 (JSC::StorageBarrier::operator*):
45601 (JSC::StorageBarrier::operator[]):
45602 (JSC::StorageBarrier::get):
45604 2011-09-08 Sam Weinig <sam@webkit.org>
45606 Remove the Completion object from JSC, I have never liked it
45607 https://bugs.webkit.org/show_bug.cgi?id=67755
45609 Reviewed by Gavin Barraclough.
45611 - Removes the Completion object and replaces its use with out parameter exceptions.
45612 - Remove ComplType and virtual exceptionType() function on JSObject. Replace with
45613 ClassInfo for InterruptedExecutionError and TerminatedExecutionError.
45616 (JSEvaluateScript):
45617 (JSCheckScriptSyntax):
45618 * JavaScriptCore.exp:
45619 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
45620 * interpreter/Interpreter.cpp:
45621 (JSC::Interpreter::throwException):
45624 (functionCheckSyntax):
45627 * runtime/Completion.cpp:
45628 (JSC::checkSyntax):
45630 * runtime/Completion.h:
45631 * runtime/ExceptionHelpers.cpp:
45632 (JSC::InterruptedExecutionError::toString):
45633 (JSC::TerminatedExecutionError::toString):
45634 (JSC::createInterruptedExecutionException):
45635 * runtime/ExceptionHelpers.h:
45636 (JSC::InterruptedExecutionError::InterruptedExecutionError):
45637 (JSC::InterruptedExecutionError::create):
45638 (JSC::InterruptedExecutionError::createStructure):
45639 (JSC::TerminatedExecutionError::TerminatedExecutionError):
45640 (JSC::TerminatedExecutionError::create):
45641 (JSC::TerminatedExecutionError::createStructure):
45642 * runtime/JSGlobalData.cpp:
45643 (JSC::JSGlobalData::JSGlobalData):
45644 * runtime/JSObject.h:
45646 2011-09-08 Ryosuke Niwa <rniwa@webkit.org>
45650 * dfg/DFGCapabilities.cpp:
45652 2011-09-08 Filip Pizlo <fpizlo@apple.com>
45654 Value profling and execution count profiling is performed even for
45655 code that cannot be optimized
45656 https://bugs.webkit.org/show_bug.cgi?id=67694
45658 Reviewed by Gavin Barraclough.
45660 This is a 2% speed-up on V8 when tiered compilation is enabled.
45662 * JavaScriptCore.xcodeproj/project.pbxproj:
45663 * bytecode/CodeBlock.cpp:
45664 (JSC::ProgramCodeBlock::canCompileWithDFG):
45665 (JSC::EvalCodeBlock::canCompileWithDFG):
45666 (JSC::FunctionCodeBlock::canCompileWithDFG):
45667 * bytecode/CodeBlock.h:
45668 * dfg/DFGCapabilities.cpp: Added.
45669 (JSC::DFG::canCompileOpcodes):
45670 * dfg/DFGCapabilities.h: Added.
45671 (JSC::DFG::mightCompileEval):
45672 (JSC::DFG::mightCompileProgram):
45673 (JSC::DFG::mightCompileFunctionForCall):
45674 (JSC::DFG::mightCompileFunctionForConstruct):
45675 (JSC::DFG::canCompileOpcode):
45676 (JSC::DFG::canCompileEval):
45677 (JSC::DFG::canCompileProgram):
45678 (JSC::DFG::canCompileFunctionForCall):
45679 (JSC::DFG::canCompileFunctionForConstruct):
45681 (JSC::JIT::emitOptimizationCheck):
45682 (JSC::JIT::privateCompile):
45684 (JSC::JIT::shouldEmitProfiling):
45685 * jit/JITInlineMethods.h:
45686 (JSC::JIT::emitValueProfilingSite):
45688 2011-09-08 Filip Pizlo <fpizlo@apple.com>
45690 DFG speculative JIT does not initialize integer tags for PredictInt32 temporaries
45691 https://bugs.webkit.org/show_bug.cgi?id=67840
45693 Reviewed by Gavin Barraclough.
45695 * dfg/DFGSpeculativeJIT.cpp:
45696 (JSC::DFG::SpeculativeJIT::initializeVariableTypes):
45698 2011-09-08 Thouraya ANDOLSI <thouraya.andolsi@st.com>
45700 https://bugs.webkit.org/show_bug.cgi?id=67771
45702 Fix sequenceGetByIdSlowCaseInstructionSpace, sequenceGetByIdSlowCaseConstantSpace
45703 and patchOffsetGetByIdSlowCaseCall
45704 and enables DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS flag for SH4 platforms.
45706 Reviewed by Gavin Barraclough.
45709 * wtf/dtoa/utils.h:
45711 2011-09-08 Mark Hahnenberg <mhahnenberg@apple.com>
45713 Remove getUInt32 from JSCell
45714 https://bugs.webkit.org/show_bug.cgi?id=67691
45716 Reviewed by Oliver Hunt.
45718 We don't use JSCell::getUInt32 anymore, so it has been removed.
45720 * JavaScriptCore.exp:
45721 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
45722 * runtime/JSCell.cpp:
45723 * runtime/JSCell.h:
45725 2011-09-07 Filip Pizlo <fpizlo@apple.com>
45729 * bytecode/CodeBlock.cpp:
45730 (JSC::CodeBlock::~CodeBlock):
45732 2011-09-07 Oliver Hunt <oliver@apple.com>
45734 Release mode build fix.
45736 * API/JSCallbackObject.h:
45737 (JSC::JSCallbackObject::create):
45739 2011-09-06 Oliver Hunt <oliver@apple.com>
45741 Remove JSObjectWithGlobalObject
45742 https://bugs.webkit.org/show_bug.cgi?id=67689
45744 Reviewed by Geoff Garen.
45746 Remove JSObjectWithGlobalObject, and update code to stop using anonymous
45747 storage to access the global object that a JSObject comes from. Largely
45748 mechanical change to remove the use of anonymous storage and JSObjectWithGlobalObject.
45750 * API/JSCallbackConstructor.cpp:
45751 (JSC::JSCallbackConstructor::JSCallbackConstructor):
45752 (JSC::JSCallbackConstructor::finishCreation):
45753 * API/JSCallbackConstructor.h:
45754 * API/JSCallbackObject.cpp:
45755 * API/JSCallbackObject.h:
45756 (JSC::JSCallbackObject::create):
45757 * API/JSCallbackObjectFunctions.h:
45758 (JSC::::JSCallbackObject):
45759 (JSC::::finishCreation):
45760 (JSC::::staticFunctionGetter):
45761 * API/JSClassRef.cpp:
45762 (OpaqueJSClass::prototype):
45763 * API/JSObjectRef.cpp:
45765 (JSObjectGetPrivate):
45766 (JSObjectSetPrivate):
45767 (JSObjectGetPrivateProperty):
45768 (JSObjectSetPrivateProperty):
45769 (JSObjectDeletePrivateProperty):
45770 * API/JSValueRef.cpp:
45771 (JSValueIsObjectOfClass):
45772 * API/JSWeakObjectMapRefPrivate.cpp:
45773 * JavaScriptCore.exp:
45774 * JavaScriptCore.xcodeproj/project.pbxproj:
45775 * bytecode/CodeBlock.h:
45776 * dfg/DFGRepatch.cpp:
45777 (JSC::DFG::dfgRepatchGetMethodFast):
45778 (JSC::DFG::tryCacheGetMethod):
45780 * jit/JITInlineMethods.h:
45781 (JSC::JIT::emitAllocateJSFunction):
45782 * jit/JITPropertyAccess.cpp:
45783 (JSC::JIT::patchMethodCallProto):
45784 * jit/JITStubs.cpp:
45785 (JSC::DEFINE_STUB_FUNCTION):
45786 * runtime/DatePrototype.cpp:
45787 * runtime/InternalFunction.cpp:
45788 (JSC::InternalFunction::InternalFunction):
45789 (JSC::InternalFunction::finishCreation):
45790 * runtime/InternalFunction.h:
45791 * runtime/JSFunction.cpp:
45792 (JSC::JSFunction::JSFunction):
45793 (JSC::JSFunction::finishCreation):
45794 * runtime/JSFunction.h:
45795 (JSC::JSFunction::create):
45796 (JSC::JSFunction::createStructure):
45797 * runtime/JSGlobalObject.cpp:
45798 (JSC::JSGlobalObject::reset):
45799 * runtime/JSONObject.cpp:
45800 (JSC::JSONObject::JSONObject):
45801 (JSC::JSONObject::finishCreation):
45802 * runtime/JSONObject.h:
45803 * runtime/JSObject.h:
45804 (JSC::JSObject::globalObject):
45805 * runtime/JSObjectWithGlobalObject.cpp: Removed.
45806 * runtime/JSObjectWithGlobalObject.h: Removed.
45807 * runtime/JSValue.cpp:
45808 (JSC::JSValue::isValidCallee):
45809 * runtime/Lookup.cpp:
45810 (JSC::setUpStaticFunctionSlot):
45811 * runtime/Lookup.h:
45812 * runtime/MathObject.cpp:
45813 (JSC::MathObject::MathObject):
45814 (JSC::MathObject::finishCreation):
45815 * runtime/MathObject.h:
45816 * runtime/NumberPrototype.cpp:
45817 * runtime/RegExpObject.cpp:
45818 (JSC::RegExpObject::RegExpObject):
45819 (JSC::RegExpObject::finishCreation):
45820 * runtime/RegExpObject.h:
45821 * runtime/Structure.cpp:
45822 (JSC::Structure::Structure):
45823 * runtime/Structure.h:
45824 (JSC::Structure::create):
45825 (JSC::Structure::globalObject):
45827 2011-09-07 Gavin Barraclough <barraclough@apple.com>
45829 Refactor JIT checks for ObjectType into helper functions.
45831 Rubber stamped by Sam Weinig.
45833 * dfg/DFGJITCompiler.h:
45834 (JSC::DFG::JITCompiler::branchIfNotObject):
45835 * dfg/DFGNonSpeculativeJIT.cpp:
45836 (JSC::DFG::NonSpeculativeJIT::compile):
45837 * dfg/DFGSpeculativeJIT.cpp:
45838 (JSC::DFG::SpeculativeJIT::compile):
45840 * jit/JITCall32_64.cpp:
45841 (JSC::JIT::emit_op_ret_object_or_this):
45842 * jit/JITInlineMethods.h:
45843 (JSC::JIT::emitJumpIfNotObject):
45844 * jit/JITOpcodes.cpp:
45845 (JSC::JIT::emit_op_instanceof):
45846 (JSC::JIT::emit_op_ret_object_or_this):
45847 (JSC::JIT::emit_op_get_pnames):
45848 (JSC::JIT::emit_op_create_this):
45849 * jit/JITOpcodes32_64.cpp:
45850 (JSC::JIT::emit_op_instanceof):
45851 (JSC::JIT::emit_op_get_pnames):
45852 (JSC::JIT::emit_op_create_this):
45854 2011-09-07 Sheriff Bot <webkit.review.bot@gmail.com>
45856 Unreviewed, rolling out r94627 and r94632.
45857 http://trac.webkit.org/changeset/94627
45858 http://trac.webkit.org/changeset/94632
45859 https://bugs.webkit.org/show_bug.cgi?id=67698
45861 It broke tests on GTK and Qt (Requested by Ossy on #webkit).
45863 * API/JSCallbackConstructor.cpp:
45864 (JSC::JSCallbackConstructor::JSCallbackConstructor):
45865 * API/JSCallbackConstructor.h:
45866 (JSC::JSCallbackConstructor::create):
45867 * API/JSCallbackFunction.cpp:
45868 (JSC::JSCallbackFunction::JSCallbackFunction):
45869 * API/JSCallbackFunction.h:
45870 * JavaScriptCore.exp:
45871 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
45872 * debugger/DebuggerActivation.cpp:
45873 (JSC::DebuggerActivation::create):
45874 * debugger/DebuggerActivation.h:
45876 (GlobalObject::constructorBody):
45877 (GlobalObject::GlobalObject):
45878 * runtime/ArrayConstructor.cpp:
45879 (JSC::ArrayConstructor::ArrayConstructor):
45880 * runtime/ArrayConstructor.h:
45881 * runtime/ArrayPrototype.cpp:
45882 (JSC::ArrayPrototype::ArrayPrototype):
45883 * runtime/ArrayPrototype.h:
45884 (JSC::ArrayPrototype::create):
45885 * runtime/BooleanConstructor.cpp:
45886 (JSC::BooleanConstructor::BooleanConstructor):
45887 * runtime/BooleanConstructor.h:
45888 * runtime/BooleanObject.cpp:
45889 (JSC::BooleanObject::BooleanObject):
45890 * runtime/BooleanObject.h:
45891 (JSC::BooleanObject::create):
45892 * runtime/BooleanPrototype.cpp:
45893 (JSC::BooleanPrototype::BooleanPrototype):
45894 * runtime/BooleanPrototype.h:
45895 * runtime/DateConstructor.cpp:
45896 (JSC::DateConstructor::DateConstructor):
45897 * runtime/DateConstructor.h:
45898 * runtime/DateInstance.cpp:
45899 (JSC::DateInstance::DateInstance):
45900 * runtime/DateInstance.h:
45901 (JSC::DateInstance::create):
45902 * runtime/DatePrototype.cpp:
45903 (JSC::DatePrototype::DatePrototype):
45904 * runtime/DatePrototype.h:
45905 * runtime/Error.cpp:
45906 (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction):
45907 * runtime/ErrorConstructor.cpp:
45908 (JSC::ErrorConstructor::ErrorConstructor):
45909 * runtime/ErrorConstructor.h:
45910 (JSC::ErrorConstructor::create):
45911 * runtime/ErrorPrototype.cpp:
45912 (JSC::ErrorPrototype::ErrorPrototype):
45913 * runtime/ErrorPrototype.h:
45914 (JSC::ErrorPrototype::create):
45915 * runtime/FunctionConstructor.cpp:
45916 (JSC::FunctionConstructor::FunctionConstructor):
45917 * runtime/FunctionConstructor.h:
45918 * runtime/FunctionPrototype.cpp:
45919 (JSC::FunctionPrototype::FunctionPrototype):
45920 * runtime/FunctionPrototype.h:
45921 * runtime/InternalFunction.cpp:
45922 (JSC::InternalFunction::InternalFunction):
45923 * runtime/InternalFunction.h:
45924 * runtime/JSActivation.cpp:
45925 (JSC::JSActivation::JSActivation):
45926 * runtime/JSActivation.h:
45927 (JSC::JSActivation::create):
45928 * runtime/JSGlobalObject.h:
45929 (JSC::JSGlobalObject::create):
45930 (JSC::JSGlobalObject::JSGlobalObject):
45931 * runtime/JSONObject.cpp:
45932 (JSC::JSONObject::JSONObject):
45933 * runtime/JSONObject.h:
45934 (JSC::JSONObject::create):
45935 * runtime/JSStaticScopeObject.h:
45936 (JSC::JSStaticScopeObject::create):
45937 (JSC::JSStaticScopeObject::JSStaticScopeObject):
45938 * runtime/JSString.cpp:
45939 (JSC::StringObject::create):
45940 * runtime/MathObject.cpp:
45941 (JSC::MathObject::MathObject):
45942 * runtime/MathObject.h:
45943 (JSC::MathObject::create):
45944 * runtime/NativeErrorConstructor.cpp:
45945 (JSC::NativeErrorConstructor::NativeErrorConstructor):
45946 * runtime/NativeErrorConstructor.h:
45947 (JSC::NativeErrorConstructor::constructorBody):
45948 * runtime/NativeErrorPrototype.cpp:
45949 (JSC::NativeErrorPrototype::NativeErrorPrototype):
45950 (JSC::NativeErrorPrototype::constructorBody):
45951 * runtime/NativeErrorPrototype.h:
45952 * runtime/NumberConstructor.cpp:
45953 (JSC::NumberConstructor::NumberConstructor):
45954 * runtime/NumberConstructor.h:
45955 * runtime/NumberObject.cpp:
45956 (JSC::NumberObject::NumberObject):
45957 * runtime/NumberObject.h:
45958 (JSC::NumberObject::create):
45959 * runtime/NumberPrototype.cpp:
45960 (JSC::NumberPrototype::NumberPrototype):
45961 * runtime/NumberPrototype.h:
45962 * runtime/ObjectConstructor.cpp:
45963 (JSC::ObjectConstructor::ObjectConstructor):
45964 * runtime/ObjectConstructor.h:
45965 * runtime/RegExpConstructor.cpp:
45966 (JSC::RegExpConstructor::RegExpConstructor):
45967 (JSC::RegExpMatchesArray::RegExpMatchesArray):
45968 * runtime/RegExpConstructor.h:
45969 * runtime/RegExpMatchesArray.h:
45970 (JSC::RegExpMatchesArray::create):
45971 * runtime/RegExpObject.cpp:
45972 (JSC::RegExpObject::RegExpObject):
45973 * runtime/RegExpObject.h:
45974 (JSC::RegExpObject::create):
45975 * runtime/RegExpPrototype.cpp:
45976 (JSC::RegExpPrototype::RegExpPrototype):
45977 * runtime/StringConstructor.cpp:
45978 (JSC::StringConstructor::StringConstructor):
45979 * runtime/StringConstructor.h:
45980 * runtime/StringObject.cpp:
45981 (JSC::StringObject::StringObject):
45982 * runtime/StringObject.h:
45983 (JSC::StringObject::create):
45984 * runtime/StringObjectThatMasqueradesAsUndefined.h:
45985 (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
45986 * runtime/StringPrototype.cpp:
45987 (JSC::StringPrototype::StringPrototype):
45988 * runtime/StringPrototype.h:
45990 2011-09-06 Xianzhu Wang <wangxianzhu@chromium.org>
45992 Replace usages of Vector<UChar> with existing StringBuilder
45993 https://bugs.webkit.org/show_bug.cgi?id=67079
45995 Reviewed by Gavin Barraclough.
45997 This is part of work to support 8-bit string buffers.
45998 Adds StringBuilder::characters() because the original Vector<UChar>::data()
46000 Sets the minimum size of buffer to 16 to prevent possible performance
46001 regression. Further performance investigation should be done in
46002 https://bugs.webkit.org/show_bug.cgi?id=67084.
46005 * wtf/text/StringBuilder.cpp:
46006 (WTF::StringBuilder::appendUninitialized): Sets minimum buffer size to 16 bytes.
46007 * wtf/text/StringBuilder.h:
46008 (WTF::StringBuilder::operator[]):
46009 (WTF::StringBuilder::characters): Added.
46011 2011-09-06 Mark Hahnenberg <mhahnenberg@apple.com>
46013 Fix broken snow leopard build
46014 https://bugs.webkit.org/show_bug.cgi?id=67693
46016 Reviewed by Daniel Bates.
46018 Removed unnecessary symbol export.
46020 * JavaScriptCore.exp:
46022 2011-09-06 Filip Pizlo <fpizlo@apple.com>
46024 DFG JIT does not optimize booleans
46025 https://bugs.webkit.org/show_bug.cgi?id=67670
46027 Reviewed by Gavin Barraclough.
46029 This adds boolean value profiling, boolean prediction in the DFG,
46030 boolean forward flow propagation in the DFGPropagator, boolean
46031 data format in DFG generation info, and comprehensive optimizations
46032 based on both boolean prediction and boolean generation info.
46033 This is brings the speed-up on v8-richards to 12%, and gives slight
46034 speed-ups elsewhere as well.
46036 Making this work right required navigating some subtleties in
46037 value profiling. Some functions get compiled with insufficient
46038 information because some important path of the function never
46039 executed. In these cases, we wish to fall back on static
46040 speculation. But to do so, we need to ensure that predictions that
46041 are inherent in the code (like that GetById almost certainly takes
46042 a cell operand) are reflected in predictions that we make in
46043 DFGPropagator. Thus, DFGPropagator now does both backward and
46044 forward flow, using a both forward and backward fixpoint.
46046 The backward flow in DFGPropagator is a separate static analysis,
46047 and needs to keep a set of backward flow abstract values for
46048 variables, arguments, and globals. To make this easy, this patch
46049 factors out DFGGraph's prediction tracking capability into
46050 DFGPredictionTracker, which now gets used by both DFGGraph (for
46051 forward flow predictions) and DFGPropagator (for backward flow
46052 predictions). Backward flow predictions eventually get merged
46053 into forward flow ones, but the two are not equivalent: a forward
46054 flow prediction is a superset of the backward flow prediction.
46056 Debugging these prediction issues required a better understanding
46057 of where we fail speculation, and what our value predictions look
46058 like. This patch also adds optional verbose speculation failure
46059 (so an informative printf fires whenever speculation failure occurs)
46060 and slight improvements to the verbosity in other places.
46062 * bytecode/ValueProfile.h:
46063 (JSC::ValueProfile::numberOfBooleans):
46064 (JSC::ValueProfile::probabilityOfBoolean):
46065 (JSC::ValueProfile::dump):
46066 (JSC::ValueProfile::computeStatistics):
46067 * dfg/DFGByteCodeParser.cpp:
46068 (JSC::DFG::ByteCodeParser::stronglyPredict):
46069 (JSC::DFG::ByteCodeParser::parseBlock):
46070 * dfg/DFGGenerationInfo.h:
46071 (JSC::DFG::dataFormatToString):
46072 (JSC::DFG::needDataFormatConversion):
46073 * dfg/DFGGraph.cpp:
46074 (JSC::DFG::Graph::dump):
46075 (JSC::DFG::Graph::predictArgumentTypes):
46077 (JSC::DFG::Graph::Graph):
46078 (JSC::DFG::Graph::predictions):
46079 (JSC::DFG::Graph::predict):
46080 (JSC::DFG::Graph::predictGlobalVar):
46081 (JSC::DFG::Graph::getPrediction):
46082 (JSC::DFG::Graph::getGlobalVarPrediction):
46083 (JSC::DFG::Graph::isBooleanConstant):
46084 (JSC::DFG::Graph::valueOfBooleanConstant):
46085 * dfg/DFGJITCodeGenerator.cpp:
46086 (JSC::DFG::JITCodeGenerator::fillInteger):
46087 (JSC::DFG::JITCodeGenerator::fillDouble):
46088 (JSC::DFG::JITCodeGenerator::fillJSValue):
46089 (JSC::DFG::JITCodeGenerator::isKnownNotInteger):
46090 (JSC::DFG::JITCodeGenerator::isKnownBoolean):
46091 (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompareNull):
46092 (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare):
46093 (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeStrictEq):
46094 (JSC::DFG::JITCodeGenerator::emitBranch):
46095 (JSC::DFG::JITCodeGenerator::speculationCheck):
46096 (JSC::DFG::GPRTemporary::GPRTemporary):
46097 * dfg/DFGJITCodeGenerator.h:
46098 (JSC::DFG::JITCodeGenerator::isBooleanConstant):
46099 (JSC::DFG::JITCodeGenerator::valueOfBooleanConstant):
46100 * dfg/DFGJITCompiler.cpp:
46101 (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):
46102 (JSC::DFG::JITCompiler::link):
46103 * dfg/DFGJITCompiler.h:
46104 (JSC::DFG::JITCompiler::debugCall):
46105 (JSC::DFG::JITCompiler::isBooleanConstant):
46106 (JSC::DFG::JITCompiler::valueOfBooleanConstant):
46108 (JSC::DFG::isBooleanPrediction):
46109 (JSC::DFG::predictionToString):
46110 (JSC::DFG::mergePredictions):
46111 (JSC::DFG::makePrediction):
46112 (JSC::DFG::Node::isBooleanConstant):
46113 (JSC::DFG::Node::valueOfBooleanConstant):
46114 (JSC::DFG::Node::hasBooleanResult):
46115 (JSC::DFG::Node::hasNumericResult):
46116 (JSC::DFG::Node::predict):
46117 * dfg/DFGOperations.cpp:
46118 * dfg/DFGOperations.h:
46119 * dfg/DFGPredictionTracker.h: Added.
46120 (JSC::DFG::operandIsArgument):
46121 (JSC::DFG::PredictionSlot::PredictionSlot):
46122 (JSC::DFG::PredictionTracker::PredictionTracker):
46123 (JSC::DFG::PredictionTracker::initializeSimilarTo):
46124 (JSC::DFG::PredictionTracker::numberOfArguments):
46125 (JSC::DFG::PredictionTracker::numberOfVariables):
46126 (JSC::DFG::PredictionTracker::argumentOffsetForOperand):
46127 (JSC::DFG::PredictionTracker::predictArgument):
46128 (JSC::DFG::PredictionTracker::predict):
46129 (JSC::DFG::PredictionTracker::predictGlobalVar):
46130 (JSC::DFG::PredictionTracker::getArgumentPrediction):
46131 (JSC::DFG::PredictionTracker::getPrediction):
46132 (JSC::DFG::PredictionTracker::getGlobalVarPrediction):
46133 * dfg/DFGPropagator.cpp:
46134 (JSC::DFG::Propagator::Propagator):
46135 (JSC::DFG::Propagator::fixpoint):
46136 (JSC::DFG::Propagator::setPrediction):
46137 (JSC::DFG::Propagator::mergeUse):
46138 (JSC::DFG::Propagator::mergePrediction):
46139 (JSC::DFG::Propagator::propagateNode):
46140 * dfg/DFGSpeculativeJIT.cpp:
46141 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
46142 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
46143 (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
46144 (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
46145 (JSC::DFG::SpeculativeJIT::compare):
46146 (JSC::DFG::SpeculativeJIT::compile):
46147 * dfg/DFGSpeculativeJIT.h:
46148 (JSC::DFG::SpeculateBooleanOperand::SpeculateBooleanOperand):
46149 (JSC::DFG::SpeculateBooleanOperand::~SpeculateBooleanOperand):
46150 (JSC::DFG::SpeculateBooleanOperand::index):
46151 (JSC::DFG::SpeculateBooleanOperand::gpr):
46152 (JSC::DFG::SpeculateBooleanOperand::use):
46153 * runtime/JSGlobalData.h:
46154 * runtime/JSValue.cpp:
46155 (JSC::JSValue::description):
46157 2011-09-06 Mark Hahnenberg <mhahnenberg@apple.com>
46159 Unzip initialization lists and constructors in JSCell hierarchy (5/7)
46160 https://bugs.webkit.org/show_bug.cgi?id=67420
46162 Reviewed by Geoffrey Garen.
46164 Completed the fifth level of the refactoring to add finishCreation()
46165 methods to all classes within the JSCell hierarchy with non-trivial
46166 constructor bodies.
46168 This primarily consists of pushing the calls to finishCreation() down
46169 into the constructors of the subclasses of the second level of the hierarchy
46170 as well as pulling the finishCreation() calls out into the class's corresponding
46171 create() method if it has one. Doing both simultaneously allows us to
46172 maintain the invariant that the finishCreation() method chain is called exactly
46173 once during the creation of an object, since calling it any other number of
46174 times (0, 2, or more) will cause an assertion failure.
46176 * API/JSCallbackConstructor.cpp:
46177 (JSC::JSCallbackConstructor::JSCallbackConstructor):
46178 * API/JSCallbackConstructor.h:
46179 (JSC::JSCallbackConstructor::create):
46180 * API/JSCallbackFunction.cpp:
46181 (JSC::JSCallbackFunction::JSCallbackFunction):
46182 (JSC::JSCallbackFunction::finishCreation):
46183 * API/JSCallbackFunction.h:
46184 * JavaScriptCore.exp:
46185 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
46186 * debugger/DebuggerActivation.cpp:
46187 * debugger/DebuggerActivation.h:
46188 (JSC::DebuggerActivation::create):
46190 (GlobalObject::finishCreation):
46191 (GlobalObject::GlobalObject):
46192 * runtime/ArrayConstructor.cpp:
46193 (JSC::ArrayConstructor::ArrayConstructor):
46194 (JSC::ArrayConstructor::finishCreation):
46195 * runtime/ArrayConstructor.h:
46196 * runtime/ArrayPrototype.cpp:
46197 (JSC::ArrayPrototype::ArrayPrototype):
46198 * runtime/ArrayPrototype.h:
46199 (JSC::ArrayPrototype::create):
46200 * runtime/BooleanConstructor.cpp:
46201 (JSC::BooleanConstructor::BooleanConstructor):
46202 (JSC::BooleanConstructor::finishCreation):
46203 * runtime/BooleanConstructor.h:
46204 * runtime/BooleanObject.cpp:
46205 (JSC::BooleanObject::BooleanObject):
46206 * runtime/BooleanObject.h:
46207 (JSC::BooleanObject::create):
46208 * runtime/BooleanPrototype.cpp:
46209 (JSC::BooleanPrototype::BooleanPrototype):
46210 (JSC::BooleanPrototype::finishCreation):
46211 * runtime/BooleanPrototype.h:
46212 * runtime/DateConstructor.cpp:
46213 (JSC::DateConstructor::DateConstructor):
46214 (JSC::DateConstructor::finishCreation):
46215 * runtime/DateConstructor.h:
46216 * runtime/DateInstance.cpp:
46217 (JSC::DateInstance::DateInstance):
46218 * runtime/DateInstance.h:
46219 (JSC::DateInstance::create):
46220 * runtime/DatePrototype.cpp:
46221 (JSC::DatePrototype::DatePrototype):
46222 (JSC::DatePrototype::finishCreation):
46223 * runtime/DatePrototype.h:
46224 * runtime/Error.cpp:
46225 (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction):
46226 * runtime/ErrorConstructor.cpp:
46227 (JSC::ErrorConstructor::ErrorConstructor):
46228 (JSC::ErrorConstructor::finishCreation):
46229 * runtime/ErrorConstructor.h:
46230 * runtime/ErrorPrototype.cpp:
46231 (JSC::ErrorPrototype::ErrorPrototype):
46232 * runtime/ErrorPrototype.h:
46233 (JSC::ErrorPrototype::create):
46234 * runtime/FunctionConstructor.cpp:
46235 (JSC::FunctionConstructor::FunctionConstructor):
46236 (JSC::FunctionConstructor::finishCreation):
46237 * runtime/FunctionConstructor.h:
46238 * runtime/FunctionPrototype.cpp:
46239 (JSC::FunctionPrototype::FunctionPrototype):
46240 (JSC::FunctionPrototype::finishCreation):
46241 * runtime/FunctionPrototype.h:
46242 * runtime/InternalFunction.cpp:
46243 (JSC::InternalFunction::InternalFunction):
46244 * runtime/InternalFunction.h:
46245 * runtime/JSActivation.cpp:
46246 (JSC::JSActivation::JSActivation):
46247 * runtime/JSActivation.h:
46248 (JSC::JSActivation::create):
46249 * runtime/JSGlobalObject.h:
46250 (JSC::JSGlobalObject::create):
46251 (JSC::JSGlobalObject::JSGlobalObject):
46252 * runtime/JSONObject.cpp:
46253 (JSC::JSONObject::JSONObject):
46254 * runtime/JSONObject.h:
46255 (JSC::JSONObject::create):
46256 * runtime/JSStaticScopeObject.h:
46257 (JSC::JSStaticScopeObject::create):
46258 (JSC::JSStaticScopeObject::JSStaticScopeObject):
46259 * runtime/JSString.cpp:
46260 (JSC::StringObject::create):
46261 * runtime/MathObject.cpp:
46262 (JSC::MathObject::MathObject):
46263 * runtime/MathObject.h:
46264 (JSC::MathObject::create):
46265 * runtime/NativeErrorConstructor.cpp:
46266 (JSC::NativeErrorConstructor::NativeErrorConstructor):
46267 * runtime/NativeErrorConstructor.h:
46268 (JSC::NativeErrorConstructor::finishCreation):
46269 * runtime/NativeErrorPrototype.cpp:
46270 (JSC::NativeErrorPrototype::NativeErrorPrototype):
46271 (JSC::NativeErrorPrototype::finishCreation):
46272 * runtime/NativeErrorPrototype.h:
46273 * runtime/NumberConstructor.cpp:
46274 (JSC::NumberConstructor::NumberConstructor):
46275 (JSC::NumberConstructor::finishCreation):
46276 * runtime/NumberConstructor.h:
46277 * runtime/NumberObject.cpp:
46278 (JSC::NumberObject::NumberObject):
46279 * runtime/NumberObject.h:
46280 (JSC::NumberObject::create):
46281 * runtime/NumberPrototype.cpp:
46282 (JSC::NumberPrototype::NumberPrototype):
46283 (JSC::NumberPrototype::finishCreation):
46284 * runtime/NumberPrototype.h:
46285 * runtime/ObjectConstructor.cpp:
46286 (JSC::ObjectConstructor::ObjectConstructor):
46287 (JSC::ObjectConstructor::finishCreation):
46288 * runtime/ObjectConstructor.h:
46289 * runtime/RegExpConstructor.cpp:
46290 (JSC::RegExpConstructor::RegExpConstructor):
46291 (JSC::RegExpConstructor::finishCreation):
46292 (JSC::RegExpMatchesArray::RegExpMatchesArray):
46293 * runtime/RegExpConstructor.h:
46294 * runtime/RegExpMatchesArray.h:
46295 (JSC::RegExpMatchesArray::create):
46296 * runtime/RegExpObject.cpp:
46297 (JSC::RegExpObject::RegExpObject):
46298 * runtime/RegExpObject.h:
46299 (JSC::RegExpObject::create):
46300 * runtime/RegExpPrototype.cpp:
46301 (JSC::RegExpPrototype::RegExpPrototype):
46302 * runtime/StringConstructor.cpp:
46303 (JSC::StringConstructor::StringConstructor):
46304 (JSC::StringConstructor::finishCreation):
46305 * runtime/StringConstructor.h:
46306 * runtime/StringObject.cpp:
46307 (JSC::StringObject::StringObject):
46308 * runtime/StringObject.h:
46309 (JSC::StringObject::create):
46310 * runtime/StringObjectThatMasqueradesAsUndefined.h:
46311 (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
46312 * runtime/StringPrototype.cpp:
46313 (JSC::StringPrototype::StringPrototype):
46314 (JSC::StringPrototype::finishCreation):
46315 * runtime/StringPrototype.h:
46317 2011-09-06 Filip Pizlo <fpizlo@apple.com>
46319 Accessibility tests crashing in BasicRawSentinelNode code
46320 https://bugs.webkit.org/show_bug.cgi?id=67682
46322 Reviewed by Geoffrey Garen.
46324 A CodeBlock should ensure that no other CodeBlocks have references to it after
46327 * bytecode/CodeBlock.cpp:
46328 (JSC::CodeBlock::~CodeBlock):
46330 2011-09-06 Yong Li <yoli@rim.com>
46332 https://bugs.webkit.org/show_bug.cgi?id=67486
46333 This reverts r65993 which gives wrong results for rshift
46334 in some corner cases (see the test).
46336 Reviewed by Gavin Barraclough.
46338 New test: fast/js/floating-point-truncate-rshift.html
46340 * assembler/ARMAssembler.h:
46341 * assembler/MacroAssemblerARM.h:
46342 (JSC::MacroAssemblerARM::supportsFloatingPointTruncate):
46343 (JSC::MacroAssemblerARM::branchTruncateDoubleToInt32):
46345 2011-09-06 Filip Pizlo <fpizlo@apple.com>
46347 Unreviewed build fix for r94559.
46349 Marked the relevant parameters as unused if !ENABLE(JIT), and surrounded
46350 new out-of-line JIT-specific method definitions with !ENABLE(JIT).
46352 * bytecode/CodeBlock.cpp:
46353 * runtime/Executable.cpp:
46354 (JSC::EvalExecutable::compileInternal):
46355 (JSC::ProgramExecutable::compileInternal):
46356 (JSC::FunctionExecutable::compileForCallInternal):
46358 2011-09-06 Mark Hahnenberg <mhahnenberg@apple.com>
46360 Fix broken PPC build due to new dtoa library
46361 https://bugs.webkit.org/show_bug.cgi?id=67654
46363 Reviewed by Dan Bernstein.
46365 Added condition for PPC in the new dtoa compatibility check so that
46366 building won't fail.
46368 * wtf/dtoa/utils.h:
46370 2011-09-05 Oliver Hunt <oliver@apple.com>
46372 An object's structure should reference the global object responsible for its creation
46373 https://bugs.webkit.org/show_bug.cgi?id=67624
46375 Reviewed by Gavin Barraclough.
46377 Add a reference to a GlobalObject to Structure, and update all calls to
46378 Structure::create() to pass the global object that is the origin for that
46379 structure. For objects where the appropriate global object isn't available
46380 at construction time (global object prototypes, etc), or objects that
46381 logically don't have a global object (strings, etc) we just pass null.
46383 This change is largely mechanical (passing a new globalObject parameter
46386 * API/JSCallbackConstructor.h:
46387 (JSC::JSCallbackConstructor::createStructure):
46388 * API/JSCallbackFunction.h:
46389 (JSC::JSCallbackFunction::createStructure):
46390 * API/JSCallbackObject.h:
46391 (JSC::JSCallbackObject::createStructure):
46392 * API/JSContextRef.cpp:
46393 * JavaScriptCore.exp:
46394 * debugger/DebuggerActivation.h:
46395 (JSC::DebuggerActivation::createStructure):
46396 * runtime/Arguments.h:
46397 (JSC::Arguments::createStructure):
46398 * runtime/ArrayConstructor.h:
46399 (JSC::ArrayConstructor::createStructure):
46400 * runtime/ArrayPrototype.h:
46401 (JSC::ArrayPrototype::createStructure):
46402 * runtime/BooleanObject.h:
46403 (JSC::BooleanObject::createStructure):
46404 * runtime/BooleanPrototype.h:
46405 (JSC::BooleanPrototype::createStructure):
46406 * runtime/DateConstructor.h:
46407 (JSC::DateConstructor::createStructure):
46408 * runtime/DateInstance.h:
46409 (JSC::DateInstance::createStructure):
46410 * runtime/DatePrototype.h:
46411 (JSC::DatePrototype::createStructure):
46412 * runtime/ErrorInstance.h:
46413 (JSC::ErrorInstance::createStructure):
46414 * runtime/ErrorPrototype.h:
46415 (JSC::ErrorPrototype::createStructure):
46416 * runtime/Executable.h:
46417 (JSC::ExecutableBase::createStructure):
46418 (JSC::NativeExecutable::createStructure):
46419 (JSC::EvalExecutable::createStructure):
46420 (JSC::ProgramExecutable::createStructure):
46421 (JSC::FunctionExecutable::createStructure):
46422 * runtime/FunctionPrototype.h:
46423 (JSC::FunctionPrototype::createStructure):
46424 * runtime/GetterSetter.h:
46425 (JSC::GetterSetter::createStructure):
46426 * runtime/InternalFunction.h:
46427 (JSC::InternalFunction::createStructure):
46428 * runtime/JSAPIValueWrapper.h:
46429 (JSC::JSAPIValueWrapper::createStructure):
46430 * runtime/JSActivation.h:
46431 (JSC::JSActivation::createStructure):
46432 * runtime/JSArray.h:
46433 (JSC::JSArray::createStructure):
46434 * runtime/JSByteArray.cpp:
46435 (JSC::JSByteArray::createStructure):
46436 * runtime/JSByteArray.h:
46437 * runtime/JSFunction.h:
46438 (JSC::JSFunction::createStructure):
46439 * runtime/JSGlobalData.cpp:
46440 (JSC::JSGlobalData::JSGlobalData):
46441 * runtime/JSGlobalObject.cpp:
46442 (JSC::JSGlobalObject::reset):
46443 * runtime/JSGlobalObject.h:
46444 (JSC::JSGlobalObject::finishCreation):
46445 (JSC::JSGlobalObject::createStructure):
46446 * runtime/JSNotAnObject.h:
46447 (JSC::JSNotAnObject::createStructure):
46448 * runtime/JSONObject.h:
46449 (JSC::JSONObject::createStructure):
46450 * runtime/JSObject.cpp:
46451 (JSC::JSObject::createInheritorID):
46452 * runtime/JSObject.h:
46453 (JSC::JSObject::createStructure):
46454 (JSC::JSNonFinalObject::createStructure):
46455 (JSC::JSFinalObject::createStructure):
46456 (JSC::createEmptyObjectStructure):
46457 * runtime/JSObjectWithGlobalObject.h:
46458 (JSC::JSObjectWithGlobalObject::createStructure):
46459 * runtime/JSPropertyNameIterator.h:
46460 (JSC::JSPropertyNameIterator::createStructure):
46461 * runtime/JSStaticScopeObject.h:
46462 (JSC::JSStaticScopeObject::createStructure):
46463 * runtime/JSString.h:
46464 (JSC::RopeBuilder::createStructure):
46465 * runtime/JSVariableObject.h:
46466 (JSC::JSVariableObject::createStructure):
46467 * runtime/JSWrapperObject.h:
46468 (JSC::JSWrapperObject::createStructure):
46469 * runtime/MathObject.h:
46470 (JSC::MathObject::createStructure):
46471 * runtime/NativeErrorConstructor.h:
46472 (JSC::NativeErrorConstructor::createStructure):
46473 (JSC::NativeErrorConstructor::constructorBody):
46474 * runtime/NumberConstructor.h:
46475 (JSC::NumberConstructor::createStructure):
46476 * runtime/NumberObject.h:
46477 (JSC::NumberObject::createStructure):
46478 * runtime/NumberPrototype.h:
46479 (JSC::NumberPrototype::createStructure):
46480 * runtime/ObjectConstructor.h:
46481 (JSC::ObjectConstructor::createStructure):
46482 * runtime/ObjectPrototype.h:
46483 (JSC::ObjectPrototype::createStructure):
46484 * runtime/RegExp.h:
46485 (JSC::RegExp::createStructure):
46486 * runtime/RegExpConstructor.h:
46487 (JSC::RegExpConstructor::createStructure):
46488 * runtime/RegExpObject.h:
46489 (JSC::RegExpObject::createStructure):
46490 * runtime/RegExpPrototype.h:
46491 (JSC::RegExpPrototype::createStructure):
46492 * runtime/ScopeChain.h:
46493 (JSC::ScopeChainNode::createStructure):
46494 * runtime/StrictEvalActivation.h:
46495 (JSC::StrictEvalActivation::createStructure):
46496 * runtime/StringConstructor.h:
46497 (JSC::StringConstructor::createStructure):
46498 * runtime/StringObject.h:
46499 (JSC::StringObject::createStructure):
46500 * runtime/StringObjectThatMasqueradesAsUndefined.h:
46501 (JSC::StringObjectThatMasqueradesAsUndefined::create):
46502 (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
46503 * runtime/StringPrototype.h:
46504 (JSC::StringPrototype::createStructure):
46505 * runtime/Structure.cpp:
46506 (JSC::Structure::Structure):
46507 (JSC::Structure::visitChildren):
46508 * runtime/Structure.h:
46509 (JSC::Structure::create):
46510 (JSC::Structure::globalObject):
46511 (JSC::Structure::setGlobalObject):
46512 * runtime/StructureChain.h:
46513 (JSC::StructureChain::createStructure):
46515 2011-09-06 Michael Saboff <msaboff@apple.com>
46517 Add windows changes for JSC:RegExp functional tests
46518 https://bugs.webkit.org/show_bug.cgi?id=67521
46520 Windows build changes for regular expression functional test.
46522 Rubber-stamped by Gavin Barraclough.
46524 * JavaScriptCore.vcproj/JavaScriptCore.sln:
46525 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
46526 * JavaScriptCore.vcproj/testRegExp: Added.
46527 * JavaScriptCore.vcproj/testRegExp/testRegExp.vcproj: Added.
46528 * JavaScriptCore.vcproj/testRegExp/testRegExpCommon.vsprops: Added.
46529 * JavaScriptCore.vcproj/testRegExp/testRegExpDebug.vsprops: Added.
46530 * JavaScriptCore.vcproj/testRegExp/testRegExpDebugAll.vsprops: Added.
46531 * JavaScriptCore.vcproj/testRegExp/testRegExpDebugCairoCFLite.vsprops: Added.
46532 * JavaScriptCore.vcproj/testRegExp/testRegExpPostBuild.cmd: Added.
46533 * JavaScriptCore.vcproj/testRegExp/testRegExpPreBuild.cmd: Added.
46534 * JavaScriptCore.vcproj/testRegExp/testRegExpPreLink.cmd: Added.
46535 * JavaScriptCore.vcproj/testRegExp/testRegExpProduction.vsprops: Added.
46536 * JavaScriptCore.vcproj/testRegExp/testRegExpRelease.vsprops: Added.
46537 * JavaScriptCore.vcproj/testRegExp/testRegExpReleaseCairoCFLite.vsprops: Added.
46538 * JavaScriptCore.vcproj/testRegExp/testRegExpReleasePGO.vsprops: Added.
46540 2011-09-06 Filip Pizlo <fpizlo@apple.com>
46542 JavaScriptCore does not have tiered compilation
46543 https://bugs.webkit.org/show_bug.cgi?id=67176
46545 Reviewed by Gavin Barraclough.
46547 This adds the ability to have multiple CodeBlocks associated with
46548 a particular role in an Executable. These are stored in
46549 descending order of compiler tier. CodeBlocks are optimized when
46550 a counter (m_executeCounter) that is incremented in loops and
46551 epilogues becomes positive. Optimizing means that all calls to
46552 the old CodeBlock are unlinked.
46554 The DFG can now pull in predictions from ValueProfiles, and
46555 propagate them along the graph. To support the new phase while
46556 maintaing some level of abstraction, a DFGDriver was introduced
46557 that encapsulates how to run the DFG compiler.
46559 This is turned off by default because it's not yet a performance
46560 win on all benchmarks. It speeds up crypto and richards by
46561 10% and 6% respectively, but still does not do as good of a job
46562 as it could. Notably, the DFG backend has not changed, and
46563 is largely oblivious to the new information being made available
46566 When turned off (the default), this patch is performance neutral.
46570 * GNUmakefile.list.am:
46571 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
46572 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
46573 * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:
46574 * JavaScriptCore.xcodeproj/project.pbxproj:
46575 * assembler/MacroAssemblerX86.h:
46576 (JSC::MacroAssemblerX86::branchAdd32):
46577 * assembler/MacroAssemblerX86_64.h:
46578 (JSC::MacroAssemblerX86_64::branchAdd32):
46579 * bytecode/CodeBlock.cpp:
46580 (JSC::CodeBlock::CodeBlock):
46581 (JSC::CodeBlock::~CodeBlock):
46582 (JSC::CodeBlock::visitAggregate):
46583 (JSC::CallLinkInfo::unlink):
46584 (JSC::CodeBlock::unlinkCalls):
46585 (JSC::CodeBlock::unlinkIncomingCalls):
46586 (JSC::CodeBlock::clearEvalCache):
46587 (JSC::replaceExistingEntries):
46588 (JSC::CodeBlock::copyDataFromAlternative):
46589 (JSC::ProgramCodeBlock::replacement):
46590 (JSC::EvalCodeBlock::replacement):
46591 (JSC::FunctionCodeBlock::replacement):
46592 (JSC::ProgramCodeBlock::compileOptimized):
46593 (JSC::EvalCodeBlock::compileOptimized):
46594 (JSC::FunctionCodeBlock::compileOptimized):
46595 * bytecode/CodeBlock.h:
46596 (JSC::GlobalCodeBlock::GlobalCodeBlock):
46597 (JSC::ProgramCodeBlock::ProgramCodeBlock):
46598 (JSC::EvalCodeBlock::EvalCodeBlock):
46599 (JSC::FunctionCodeBlock::FunctionCodeBlock):
46600 * bytecode/ValueProfile.h:
46601 (JSC::ValueProfile::dump):
46602 (JSC::ValueProfile::computeStatistics):
46603 * bytecompiler/BytecodeGenerator.cpp:
46604 (JSC::BytecodeGenerator::BytecodeGenerator):
46605 * bytecompiler/BytecodeGenerator.h:
46606 * dfg/DFGByteCodeParser.cpp:
46607 (JSC::DFG::ByteCodeParser::ByteCodeParser):
46608 (JSC::DFG::ByteCodeParser::addCall):
46609 (JSC::DFG::ByteCodeParser::dynamicallyPredict):
46610 (JSC::DFG::ByteCodeParser::parseBlock):
46612 * dfg/DFGDriver.cpp: Added.
46613 (JSC::DFG::compile):
46614 (JSC::DFG::tryCompile):
46615 (JSC::DFG::tryCompileFunction):
46616 * dfg/DFGDriver.h: Added.
46617 (JSC::DFG::tryCompile):
46618 (JSC::DFG::tryCompileFunction):
46619 * dfg/DFGGraph.cpp:
46620 (JSC::DFG::Graph::dump):
46621 (JSC::DFG::Graph::predictArgumentTypes):
46623 (JSC::DFG::Graph::predict):
46624 (JSC::DFG::Graph::predictGlobalVar):
46625 (JSC::DFG::Graph::isConstant):
46626 (JSC::DFG::Graph::isJSConstant):
46627 (JSC::DFG::Graph::isInt32Constant):
46628 (JSC::DFG::Graph::isDoubleConstant):
46629 (JSC::DFG::Graph::valueOfJSConstant):
46630 (JSC::DFG::Graph::valueOfInt32Constant):
46631 (JSC::DFG::Graph::valueOfDoubleConstant):
46632 * dfg/DFGJITCompiler.cpp:
46633 (JSC::DFG::JITCompiler::link):
46634 * dfg/DFGJITCompiler.h:
46635 (JSC::DFG::JITCompiler::isConstant):
46636 (JSC::DFG::JITCompiler::isJSConstant):
46637 (JSC::DFG::JITCompiler::isInt32Constant):
46638 (JSC::DFG::JITCompiler::isDoubleConstant):
46639 (JSC::DFG::JITCompiler::valueOfJSConstant):
46640 (JSC::DFG::JITCompiler::valueOfInt32Constant):
46641 (JSC::DFG::JITCompiler::valueOfDoubleConstant):
46643 (JSC::DFG::isCellPrediction):
46644 (JSC::DFG::isNumberPrediction):
46645 (JSC::DFG::predictionToString):
46646 (JSC::DFG::mergePrediction):
46647 (JSC::DFG::makePrediction):
46648 (JSC::DFG::Node::valueOfJSConstant):
46649 (JSC::DFG::Node::isInt32Constant):
46650 (JSC::DFG::Node::isDoubleConstant):
46651 (JSC::DFG::Node::valueOfInt32Constant):
46652 (JSC::DFG::Node::valueOfDoubleConstant):
46653 (JSC::DFG::Node::predict):
46654 * dfg/DFGPropagation.cpp: Added.
46655 (JSC::DFG::Propagator::Propagator):
46656 (JSC::DFG::Propagator::fixpoint):
46657 (JSC::DFG::Propagator::setPrediction):
46658 (JSC::DFG::Propagator::mergePrediction):
46659 (JSC::DFG::Propagator::propagateNode):
46660 (JSC::DFG::Propagator::propagateForward):
46661 (JSC::DFG::Propagator::propagateBackward):
46662 (JSC::DFG::propagate):
46663 * dfg/DFGPropagation.h: Added.
46664 (JSC::DFG::propagate):
46665 * dfg/DFGRepatch.cpp:
46666 (JSC::DFG::dfgLinkFor):
46667 * heap/HandleHeap.h:
46668 (JSC::HandleHeap::Node::Node):
46670 (JSC::JIT::emitOptimizationCheck):
46671 (JSC::JIT::emitTimeoutCheck):
46672 (JSC::JIT::privateCompile):
46673 (JSC::JIT::linkFor):
46675 (JSC::JIT::emitOptimizationCheck):
46676 * jit/JITCall32_64.cpp:
46677 (JSC::JIT::emit_op_ret):
46678 (JSC::JIT::emit_op_ret_object_or_this):
46680 (JSC::JITCode::JITCode):
46681 (JSC::JITCode::bottomTierJIT):
46682 (JSC::JITCode::topTierJIT):
46683 (JSC::JITCode::nextTierJIT):
46684 * jit/JITOpcodes.cpp:
46685 (JSC::JIT::emit_op_ret):
46686 (JSC::JIT::emit_op_ret_object_or_this):
46687 * jit/JITStubs.cpp:
46688 (JSC::DEFINE_STUB_FUNCTION):
46690 * runtime/Executable.cpp:
46691 (JSC::EvalExecutable::compileOptimized):
46692 (JSC::EvalExecutable::compileInternal):
46693 (JSC::ProgramExecutable::compileOptimized):
46694 (JSC::ProgramExecutable::compileInternal):
46695 (JSC::FunctionExecutable::compileOptimizedForCall):
46696 (JSC::FunctionExecutable::compileOptimizedForConstruct):
46697 (JSC::FunctionExecutable::compileForCallInternal):
46698 (JSC::FunctionExecutable::compileForConstructInternal):
46699 * runtime/Executable.h:
46700 (JSC::EvalExecutable::compile):
46701 (JSC::ProgramExecutable::compile):
46702 (JSC::FunctionExecutable::compileForCall):
46703 (JSC::FunctionExecutable::compileForConstruct):
46704 (JSC::FunctionExecutable::compileOptimizedFor):
46706 * wtf/SentinelLinkedList.h:
46707 (WTF::BasicRawSentinelNode::BasicRawSentinelNode):
46708 (WTF::BasicRawSentinelNode::setPrev):
46709 (WTF::BasicRawSentinelNode::setNext):
46710 (WTF::BasicRawSentinelNode::prev):
46711 (WTF::BasicRawSentinelNode::next):
46712 (WTF::BasicRawSentinelNode::isOnList):
46714 (WTF::::SentinelLinkedList):
46719 2011-09-05 Sheriff Bot <webkit.review.bot@gmail.com>
46721 Unreviewed, rolling out r94445 and r94448.
46722 http://trac.webkit.org/changeset/94445
46723 http://trac.webkit.org/changeset/94448
46724 https://bugs.webkit.org/show_bug.cgi?id=67595
46726 It broke everything (Requested by ossy on #webkit).
46728 * JavaScriptCore.exp:
46729 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
46731 (JSC::Heap::collect):
46733 * heap/NewSpace.cpp:
46734 (JSC::NewSpace::NewSpace):
46736 * jit/JITStubs.cpp:
46737 (JSC::DEFINE_STUB_FUNCTION):
46738 * runtime/JSObject.cpp:
46739 (JSC::JSObject::allocatePropertyStorage):
46740 * runtime/JSObject.h:
46741 (JSC::JSObject::~JSObject):
46742 (JSC::JSObject::putDirectInternal):
46743 (JSC::JSObject::putDirectWithoutTransition):
46744 (JSC::JSObject::putDirectFunctionWithoutTransition):
46745 (JSC::JSObject::transitionTo):
46746 (JSC::JSObject::visitChildrenDirect):
46748 2011-09-05 Patrick Gansterer <paroga@webkit.org>
46750 Unreviewed build fix for r94452.
46752 Add config.h as the first header to the cc files as required by the coding style.
46753 Reuse macros from Assertions.h instead of adding addional #ifdefs.
46755 * wtf/dtoa/bignum-dtoa.cc:
46756 * wtf/dtoa/bignum.cc:
46757 * wtf/dtoa/cached-powers.cc:
46758 * wtf/dtoa/diy-fp.cc:
46759 * wtf/dtoa/double-conversion.cc:
46760 * wtf/dtoa/fast-dtoa.cc:
46761 * wtf/dtoa/fixed-dtoa.cc:
46762 * wtf/dtoa/strtod.cc:
46763 * wtf/dtoa/utils.h:
46765 2011-09-05 Andras Becsi <andras.becsi@nokia.com>
46767 [Qt][WK2] Fix the build
46769 Rubber-stamped by Csaba Osztrogonác.
46771 * wtf/dtoa/double-conversion.cc: Remove dead variable in file added in r94452.
46772 The variable fractional_part is only set but never used.
46774 2011-09-04 Mark Hahnenberg <mhahnenberg@apple.com>
46776 REGRESSION (r94452): 20 http/tests tests failing on Qt Linux Release
46777 https://bugs.webkit.org/show_bug.cgi?id=67562
46779 Reviewed by Darin Adler.
46781 Fixing the build (again which was broken by the dtoa patch. Needed
46782 to make sure WTF::double_conversion::initialize() is called for Qt
46783 as well as adding a check for WinCE in dtoa/utils.h
46785 * runtime/InitializeThreading.cpp:
46786 (JSC::initializeThreadingOnce):
46787 * wtf/dtoa/cached-powers.cc:
46788 * wtf/dtoa/utils.h:
46790 2011-09-03 Filip Pizlo <fpizlo@apple.com>
46792 ThunkGenerators does not convert positive double zero into integer zero
46793 https://bugs.webkit.org/show_bug.cgi?id=67553
46795 Reviewed by Gavin Barraclough.
46797 This is an 0.5% speed-up on V8 and neutral elsewhere.
46799 * jit/SpecializedThunkJIT.h:
46800 (JSC::SpecializedThunkJIT::returnDouble):
46802 2011-09-03 Kevin Ollivier <kevino@theolliviers.com>
46804 [wx] Unreviewed build fix. Add wtf/dtoa directory to build.
46808 2011-09-03 Filip Pizlo <fpizlo@apple.com>
46810 DFG variable predictions only work for local variables, not temporaries
46811 https://bugs.webkit.org/show_bug.cgi?id=67554
46813 Reviewed by Gavin Barraclough.
46815 This appears to be a slight speed-up in Kraken (0.3% but significant)
46816 and neutral elsewhere.
46819 (JSC::DFG::Graph::predict):
46821 2011-09-02 Filip Pizlo <fpizlo@apple.com>
46823 DFG JIT speculation failure does recovery of additions in reverse and
46825 https://bugs.webkit.org/show_bug.cgi?id=67551
46827 Reviewed by Sam Weinig.
46829 * dfg/DFGJITCompiler.cpp:
46830 (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):
46832 2011-09-02 Filip Pizlo <fpizlo@apple.com>
46834 ValueProfile does not make it safe to introspect cell values
46835 after garbage collection
46836 https://bugs.webkit.org/show_bug.cgi?id=67354
46838 Reviewed by Gavin Barraclough.
46840 ValueProfile buckets are now weak references, implemented using a
46841 light-weight weak reference mechanism that this patch also adds (the
46842 WeakReferenceHarvester). If a cell stored in a ValueProfile bucket
46843 is not marked, then the bucket is transformed into a Structure
46844 pointer. If the Structure is not marked either, then it is turned
46845 into a ClassInfo pointer.
46847 * JavaScriptCore.xcodeproj/project.pbxproj:
46848 * bytecode/CodeBlock.cpp:
46849 (JSC::CodeBlock::~CodeBlock):
46850 (JSC::CodeBlock::visitAggregate):
46851 (JSC::CodeBlock::visitWeakReferences):
46852 * bytecode/CodeBlock.h:
46853 * bytecode/ValueProfile.h:
46854 (JSC::ValueProfile::ValueProfile):
46855 (JSC::ValueProfile::classInfo):
46856 (JSC::ValueProfile::numberOfInt32s):
46857 (JSC::ValueProfile::numberOfDoubles):
46858 (JSC::ValueProfile::numberOfCells):
46859 (JSC::ValueProfile::numberOfArrays):
46860 (JSC::ValueProfile::probabilityOfArray):
46861 (JSC::ValueProfile::WeakBucket::WeakBucket):
46862 (JSC::ValueProfile::WeakBucket::operator!):
46863 (JSC::ValueProfile::WeakBucket::isEmpty):
46864 (JSC::ValueProfile::WeakBucket::isClassInfo):
46865 (JSC::ValueProfile::WeakBucket::isStructure):
46866 (JSC::ValueProfile::WeakBucket::asStructure):
46867 (JSC::ValueProfile::WeakBucket::asClassInfo):
46868 (JSC::ValueProfile::WeakBucket::getClassInfo):
46870 (JSC::Heap::harvestWeakReferences):
46871 (JSC::Heap::markRoots):
46873 * heap/MarkStack.cpp:
46874 (JSC::SlotVisitor::drain):
46875 (JSC::SlotVisitor::harvestWeakReferences):
46876 * heap/MarkStack.h:
46877 (JSC::MarkStack::addWeakReferenceHarvester):
46878 (JSC::MarkStack::MarkStack):
46879 (JSC::MarkStack::appendUnbarrieredPointer):
46880 * heap/SlotVisitor.h:
46881 * heap/WeakReferenceHarvester.h: Added.
46882 (JSC::WeakReferenceHarvester::WeakReferenceHarvester):
46883 (JSC::WeakReferenceHarvester::~WeakReferenceHarvester):
46885 2011-09-02 Michael Saboff <msaboff@apple.com>
46887 Replace local implementation of string equals() methods with UString versions
46888 https://bugs.webkit.org/show_bug.cgi?id=67342
46890 In preparation to allowing StringImpl to be backed by 8 bit
46891 characters when appropriate, we need to eliminate or change the
46892 usage of StringImpl::characters(). Change the uses of characters()
46893 that are used to implement redundant equals() methods.
46895 Reviewed by Gavin Barraclough.
46897 * runtime/Identifier.cpp:
46898 (JSC::Identifier::equal):
46899 * runtime/Identifier.h:
46900 (JSC::Identifier::equal):
46901 * wtf/text/AtomicString.cpp:
46902 (WTF::CStringTranslator::equal): Moved an optimized method to here.
46904 * wtf/text/StringImpl.cpp:
46906 * wtf/text/StringImpl.h:
46908 2011-09-02 Michael Saboff <msaboff@apple.com>
46910 Add JSC:RegExp functional tests
46911 https://bugs.webkit.org/show_bug.cgi?id=67339
46913 Added new test driver program (testRegExp) and corresponding data file
46914 along with build scripts changes.
46916 Reviewed by Gavin Barraclough.
46918 * JavaScriptCore.exp:
46919 * JavaScriptCore.xcodeproj/project.pbxproj:
46920 * testRegExp.cpp: Added.
46921 (Options::Options):
46922 (StopWatch::start):
46924 (StopWatch::getElapsedMS):
46925 (RegExpTest::RegExpTest):
46926 (GlobalObject::create):
46927 (GlobalObject::className):
46928 (GlobalObject::GlobalObject):
46930 (cleanupGlobalData):
46936 (printUsageStatement):
46939 * tests/regexp: Added.
46940 * tests/regexp/RegExpTest.data: Added.
46942 2011-09-02 Michael Saboff <msaboff@apple.com>
46944 Add JSC:RegExp functional test data generator
46945 https://bugs.webkit.org/show_bug.cgi?id=67519
46947 Add a data generator for regular expressions. To enable, change the
46948 #undef REGEXP_FUNC_TEST_DATA_GEN to #define. Then compile and use
46949 regular expressions. The resulting data will be in /tmp/RegExpTestsData.
46951 Reviewed by Gavin Barraclough.
46953 * runtime/RegExp.cpp:
46954 (JSC::regExpFlags):
46955 (JSC::RegExpFunctionalTestCollector::clearRegExp):
46956 (JSC::RegExpFunctionalTestCollector::get):
46957 (JSC::RegExpFunctionalTestCollector::outputOneTest):
46958 (JSC::RegExpFunctionalTestCollector::RegExpFunctionalTestCollector):
46959 (JSC::RegExpFunctionalTestCollector::~RegExpFunctionalTestCollector):
46960 (JSC::RegExpFunctionalTestCollector::outputEscapedUString):
46961 (JSC::RegExp::~RegExp):
46962 (JSC::RegExp::compile):
46963 (JSC::RegExp::match):
46964 (JSC::RegExp::matchCompareWithInterpreter):
46966 2011-09-02 Mark Hahnenberg <mhahnenberg@apple.com>
46968 Fix the broken build due to dtoa patch
46969 https://bugs.webkit.org/show_bug.cgi?id=67534
46971 Reviewed by Oliver Hunt.
46975 * GNUmakefile.list.am:
46976 * wtf/dtoa/bignum.cc:
46977 * wtf/dtoa/fast-dtoa.cc:
46978 * wtf/dtoa/utils.h:
46980 2011-09-02 Oliver Hunt <oliver@apple.com>
46982 Remove OldSpace classes
46983 https://bugs.webkit.org/show_bug.cgi?id=67533
46985 Reviewed by Gavin Barraclough.
46987 Remove the unused OldSpace classes
46990 * GNUmakefile.list.am:
46991 * JavaScriptCore.gypi:
46992 * JavaScriptCore.pro:
46993 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
46994 * JavaScriptCore.xcodeproj/project.pbxproj:
46996 (JSC::Heap::writeBarrierSlowCase):
46997 * heap/MarkedBlock.h:
46998 * heap/OldSpace.cpp: Removed.
46999 * heap/OldSpace.h: Removed.
47001 2011-09-02 James Robinson <jamesr@chromium.org>
47003 Compile fix for mac build.
47005 * wtf/CheckedArithmetic.h:
47010 2011-08-30 Matthew Delaney <mdelaney@apple.com>
47012 Read out of bounds in sUnpremultiplyData_RGBA8888 / ImageBufferData::getData
47013 https://bugs.webkit.org/show_bug.cgi?id=65352
47015 Reviewed by Simon Fraser.
47017 New test: fast/canvas/canvas-getImageData-large-crash.html
47019 This patch prevents overflows from happening in getImageData, createImageData, and canvas creation
47020 calls that specify widths and heights that end up overflowing the ints that we store those values in
47021 as well as derived values such as area and maxX / maxY of the bounding rects involved. Overflow of integer
47022 arithmetic is detected via the use of the new Checked type that was introduced in r94207. The change to JSC
47023 is just to add a new helper method described below.
47025 * wtf/MathExtras.h:
47026 (isWithinIntRange): Reports if a float's value is within the range expressible by an int.
47028 2011-09-02 Mark Hahnenberg <mhahnenberg@apple.com>
47030 Incorporate newer, faster dtoa library
47031 https://bugs.webkit.org/show_bug.cgi?id=66346
47033 Reviewed by Oliver Hunt.
47035 Added new dtoa library at http://code.google.com/p/double-conversion/.
47036 Replaced old call to dtoa. The new library is much faster than the old one.
47037 We still use the old dtoa for some stuff in WebCore as well as the old strtod,
47038 but we can phase these out eventually as well.
47040 * GNUmakefile.list.am:
47041 * JavaScriptCore.exp:
47042 * JavaScriptCore.gypi:
47043 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
47044 * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:
47045 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
47046 * JavaScriptCore.xcodeproj/project.pbxproj:
47047 * runtime/InitializeThreading.cpp:
47048 * runtime/NumberPrototype.cpp:
47049 (JSC::numberProtoFuncToExponential):
47050 (JSC::numberProtoFuncToFixed):
47051 (JSC::numberProtoFuncToPrecision):
47052 * runtime/UString.cpp:
47053 (JSC::UString::number):
47054 * wtf/CMakeLists.txt:
47055 * wtf/ThreadingPthreads.cpp:
47056 (WTF::initializeThreading):
47057 * wtf/ThreadingWin.cpp:
47058 (WTF::initializeThreading):
47062 * wtf/dtoa/COPYING: Added.
47063 * wtf/dtoa/LICENSE: Added.
47064 * wtf/dtoa/README: Added.
47065 * wtf/dtoa/bignum-dtoa.cc: Added.
47066 * wtf/dtoa/bignum-dtoa.h: Added.
47067 * wtf/dtoa/bignum.cc: Added.
47068 * wtf/dtoa/bignum.h: Added.
47069 (WTF::double_conversion::Bignum::Times10):
47070 (WTF::double_conversion::Bignum::Equal):
47071 (WTF::double_conversion::Bignum::LessEqual):
47072 (WTF::double_conversion::Bignum::Less):
47073 (WTF::double_conversion::Bignum::PlusEqual):
47074 (WTF::double_conversion::Bignum::PlusLessEqual):
47075 (WTF::double_conversion::Bignum::PlusLess):
47076 (WTF::double_conversion::Bignum::EnsureCapacity):
47077 (WTF::double_conversion::Bignum::BigitLength):
47078 * wtf/dtoa/cached-powers.cc: Added.
47079 * wtf/dtoa/cached-powers.h: Added.
47080 * wtf/dtoa/diy-fp.cc: Added.
47081 * wtf/dtoa/diy-fp.h: Added.
47082 (WTF::double_conversion::DiyFp::DiyFp):
47083 (WTF::double_conversion::DiyFp::Subtract):
47084 (WTF::double_conversion::DiyFp::Minus):
47085 (WTF::double_conversion::DiyFp::Times):
47086 (WTF::double_conversion::DiyFp::Normalize):
47087 (WTF::double_conversion::DiyFp::f):
47088 (WTF::double_conversion::DiyFp::e):
47089 (WTF::double_conversion::DiyFp::set_f):
47090 (WTF::double_conversion::DiyFp::set_e):
47091 * wtf/dtoa/double-conversion.cc: Added.
47092 * wtf/dtoa/double-conversion.h: Added.
47093 (WTF::double_conversion::DoubleToStringConverter::DoubleToStringConverter):
47094 (WTF::double_conversion::StringToDoubleConverter::StringToDoubleConverter):
47095 * wtf/dtoa/double.h: Added.
47096 (WTF::double_conversion::double_to_uint64):
47097 (WTF::double_conversion::uint64_to_double):
47098 (WTF::double_conversion::Double::Double):
47099 (WTF::double_conversion::Double::AsDiyFp):
47100 (WTF::double_conversion::Double::AsNormalizedDiyFp):
47101 (WTF::double_conversion::Double::AsUint64):
47102 (WTF::double_conversion::Double::NextDouble):
47103 (WTF::double_conversion::Double::Exponent):
47104 (WTF::double_conversion::Double::Significand):
47105 (WTF::double_conversion::Double::IsDenormal):
47106 (WTF::double_conversion::Double::IsSpecial):
47107 (WTF::double_conversion::Double::IsNan):
47108 (WTF::double_conversion::Double::IsInfinite):
47109 (WTF::double_conversion::Double::Sign):
47110 (WTF::double_conversion::Double::UpperBoundary):
47111 (WTF::double_conversion::Double::NormalizedBoundaries):
47112 (WTF::double_conversion::Double::value):
47113 (WTF::double_conversion::Double::SignificandSizeForOrderOfMagnitude):
47114 (WTF::double_conversion::Double::Infinity):
47115 (WTF::double_conversion::Double::NaN):
47116 (WTF::double_conversion::Double::DiyFpToUint64):
47117 * wtf/dtoa/fast-dtoa.cc: Added.
47118 * wtf/dtoa/fast-dtoa.h: Added.
47119 * wtf/dtoa/fixed-dtoa.cc: Added.
47120 * wtf/dtoa/fixed-dtoa.h: Added.
47121 * wtf/dtoa/strtod.cc: Added.
47122 * wtf/dtoa/strtod.h: Added.
47123 * wtf/dtoa/utils.h: Added.
47124 (WTF::double_conversion::Max):
47125 (WTF::double_conversion::Min):
47126 (WTF::double_conversion::StrLength):
47127 (WTF::double_conversion::Vector::Vector):
47128 (WTF::double_conversion::Vector::SubVector):
47129 (WTF::double_conversion::Vector::length):
47130 (WTF::double_conversion::Vector::is_empty):
47131 (WTF::double_conversion::Vector::start):
47132 (WTF::double_conversion::Vector::operator[]):
47133 (WTF::double_conversion::Vector::first):
47134 (WTF::double_conversion::Vector::last):
47135 (WTF::double_conversion::StringBuilder::StringBuilder):
47136 (WTF::double_conversion::StringBuilder::~StringBuilder):
47137 (WTF::double_conversion::StringBuilder::size):
47138 (WTF::double_conversion::StringBuilder::position):
47139 (WTF::double_conversion::StringBuilder::Reset):
47140 (WTF::double_conversion::StringBuilder::AddCharacter):
47141 (WTF::double_conversion::StringBuilder::AddString):
47142 (WTF::double_conversion::StringBuilder::AddSubstring):
47143 (WTF::double_conversion::StringBuilder::AddPadding):
47144 (WTF::double_conversion::StringBuilder::Finalize):
47145 (WTF::double_conversion::StringBuilder::is_finalized):
47146 (WTF::double_conversion::BitCast):
47149 2011-09-02 Filip Pizlo <fpizlo@apple.com>
47151 DFG graph has no way of distinguishing or reconciling between static
47152 and dynamic predictions
47153 https://bugs.webkit.org/show_bug.cgi?id=67343
47155 Reviewed by Gavin Barraclough.
47157 PredictedType now stores the source of the prediction. Merging predictions,
47158 which was previously done with a bitwise or, is now done via the
47159 mergePredictions (equivalent to |) and mergePrediction (equivalent to |=)
47160 functions, which correctly handle combinations of static and dynamic.
47162 This is performance-neutral, since all predictions are currently static and
47163 so the code has no visible effects.
47165 * dfg/DFGByteCodeParser.cpp:
47166 (JSC::DFG::ByteCodeParser::set):
47167 (JSC::DFG::ByteCodeParser::staticallyPredictArray):
47168 (JSC::DFG::ByteCodeParser::staticallyPredictInt32):
47169 (JSC::DFG::ByteCodeParser::parseBlock):
47171 (JSC::DFG::Graph::predict):
47172 (JSC::DFG::Graph::predictGlobalVar):
47174 (JSC::DFG::isArrayPrediction):
47175 (JSC::DFG::isInt32Prediction):
47176 (JSC::DFG::isDoublePrediction):
47177 (JSC::DFG::isDynamicPrediction):
47178 (JSC::DFG::mergePredictions):
47179 (JSC::DFG::mergePrediction):
47180 (JSC::DFG::makePrediction):
47181 (JSC::DFG::Node::predict):
47183 2011-09-02 Oliver Hunt <oliver@apple.com>
47188 (JSC::NewSpace::allocatePropertyStorage):
47189 (JSC::NewSpace::inPropertyStorageNursery):
47191 2011-09-02 Oliver Hunt <oliver@apple.com>
47193 Use bump allocator for initial property storage
47194 https://bugs.webkit.org/show_bug.cgi?id=67494
47196 Reviewed by Gavin Barraclough.
47198 Switch to a bump allocator for the initial out of line
47199 property storage. This gives us slightly faster allocation
47200 for short lived objects that need out of line storage at
47201 the cost of an additional memcpy when the object survives
47204 No performance impact.
47206 * JavaScriptCore.exp:
47208 (JSC::Heap::collect):
47210 (JSC::Heap::allocatePropertyStorage):
47211 (JSC::Heap::inPropertyStorageNursary):
47212 * heap/NewSpace.cpp:
47213 (JSC::NewSpace::NewSpace):
47215 (JSC::NewSpace::resetPropertyStorageNursary):
47216 (JSC::NewSpace::allocatePropertyStorage):
47217 (JSC::NewSpace::inPropertyStorageNursary):
47218 * jit/JITStubs.cpp:
47219 (JSC::DEFINE_STUB_FUNCTION):
47220 * runtime/JSObject.cpp:
47221 (JSC::JSObject::allocatePropertyStorage):
47222 * runtime/JSObject.h:
47223 (JSC::JSObject::~JSObject):
47224 (JSC::JSObject::putDirectInternal):
47225 (JSC::JSObject::putDirectWithoutTransition):
47226 (JSC::JSObject::putDirectFunctionWithoutTransition):
47227 (JSC::JSObject::transitionTo):
47228 (JSC::JSObject::visitChildrenDirect):
47230 2011-09-01 Mark Rowe <mrowe@apple.com>
47234 * JavaScriptCore.JSVALUE32_64only.exp:
47235 * JavaScriptCore.JSVALUE64only.exp:
47236 * JavaScriptCore.exp:
47238 2011-09-01 Mark Hahnenberg <mhahnenberg@apple.com>
47240 Unzip initialization lists and constructors in JSCell hierarchy (4/7)
47241 https://bugs.webkit.org/show_bug.cgi?id=67174
47243 Reviewed by Oliver Hunt.
47245 Completed the fourth level of the refactoring to add finishCreation()
47246 methods to all classes within the JSCell hierarchy with non-trivial
47247 constructor bodies.
47249 This primarily consists of pushing the calls to finishCreation() down
47250 into the constructors of the subclasses of the second level of the hierarchy
47251 as well as pulling the finishCreation() calls out into the class's corresponding
47252 create() method if it has one. Doing both simultaneously allows us to
47253 maintain the invariant that the finishCreation() method chain is called exactly
47254 once during the creation of an object, since calling it any other number of
47255 times (0, 2, or more) will cause an assertion failure.
47257 * API/JSCallbackConstructor.cpp:
47258 (JSC::JSCallbackConstructor::JSCallbackConstructor):
47259 (JSC::JSCallbackConstructor::finishCreation):
47260 * API/JSCallbackConstructor.h:
47261 * API/JSCallbackObject.h:
47262 (JSC::JSCallbackObject::create):
47263 * API/JSCallbackObjectFunctions.h:
47264 (JSC::::JSCallbackObject):
47265 (JSC::::finishCreation):
47266 * JavaScriptCore.JSVALUE64only.exp:
47267 * JavaScriptCore.exp:
47268 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
47269 * debugger/DebuggerActivation.cpp:
47270 (JSC::DebuggerActivation::DebuggerActivation):
47271 (JSC::DebuggerActivation::create):
47272 * debugger/DebuggerActivation.h:
47273 * runtime/Arguments.h:
47274 (JSC::Arguments::create):
47275 (JSC::Arguments::createNoParameters):
47276 (JSC::Arguments::Arguments):
47277 * runtime/ArrayPrototype.cpp:
47278 (JSC::ArrayPrototype::ArrayPrototype):
47279 (JSC::ArrayPrototype::finishCreation):
47280 * runtime/ArrayPrototype.h:
47281 * runtime/BooleanObject.cpp:
47282 (JSC::BooleanObject::BooleanObject):
47283 (JSC::BooleanObject::finishCreation):
47284 * runtime/BooleanObject.h:
47285 * runtime/DateInstance.cpp:
47286 (JSC::DateInstance::DateInstance):
47287 (JSC::DateInstance::finishCreation):
47288 * runtime/DateInstance.h:
47289 * runtime/ErrorInstance.cpp:
47290 (JSC::ErrorInstance::ErrorInstance):
47291 * runtime/ErrorInstance.h:
47292 (JSC::ErrorInstance::create):
47293 * runtime/ErrorPrototype.cpp:
47294 (JSC::ErrorPrototype::ErrorPrototype):
47295 (JSC::ErrorPrototype::finishCreation):
47296 * runtime/ErrorPrototype.h:
47297 * runtime/ExceptionHelpers.cpp:
47298 (JSC::InterruptedExecutionError::InterruptedExecutionError):
47299 (JSC::InterruptedExecutionError::create):
47300 (JSC::TerminatedExecutionError::TerminatedExecutionError):
47301 (JSC::TerminatedExecutionError::create):
47302 * runtime/Executable.cpp:
47303 (JSC::EvalExecutable::EvalExecutable):
47304 (JSC::ProgramExecutable::ProgramExecutable):
47305 (JSC::FunctionExecutable::FunctionExecutable):
47306 * runtime/Executable.h:
47307 (JSC::NativeExecutable::create):
47308 (JSC::NativeExecutable::NativeExecutable):
47309 (JSC::EvalExecutable::create):
47310 (JSC::ProgramExecutable::create):
47311 (JSC::FunctionExecutable::create):
47312 * runtime/InternalFunction.cpp:
47313 (JSC::InternalFunction::InternalFunction):
47314 (JSC::InternalFunction::finishCreation):
47315 * runtime/InternalFunction.h:
47316 * runtime/JSActivation.cpp:
47317 (JSC::JSActivation::JSActivation):
47318 (JSC::JSActivation::finishCreation):
47319 * runtime/JSActivation.h:
47320 * runtime/JSArray.cpp:
47321 (JSC::JSArray::JSArray):
47322 * runtime/JSArray.h:
47323 (JSC::JSArray::create):
47324 * runtime/JSByteArray.cpp:
47325 (JSC::JSByteArray::JSByteArray):
47326 * runtime/JSByteArray.h:
47327 (JSC::JSByteArray::create):
47328 * runtime/JSFunction.cpp:
47329 (JSC::JSFunction::JSFunction):
47330 (JSC::JSFunction::finishCreation):
47331 * runtime/JSFunction.h:
47332 (JSC::JSFunction::create):
47333 * runtime/JSGlobalObject.h:
47334 (JSC::JSGlobalObject::JSGlobalObject):
47335 (JSC::JSGlobalObject::finishCreation):
47336 * runtime/JSNotAnObject.h:
47337 (JSC::JSNotAnObject::JSNotAnObject):
47338 (JSC::JSNotAnObject::create):
47339 * runtime/JSONObject.cpp:
47340 (JSC::JSONObject::JSONObject):
47341 (JSC::JSONObject::finishCreation):
47342 * runtime/JSONObject.h:
47343 * runtime/JSObjectWithGlobalObject.cpp:
47344 (JSC::JSObjectWithGlobalObject::JSObjectWithGlobalObject):
47345 * runtime/JSObjectWithGlobalObject.h:
47346 * runtime/JSStaticScopeObject.h:
47347 (JSC::JSStaticScopeObject::create):
47348 (JSC::JSStaticScopeObject::finishCreation):
47349 (JSC::JSStaticScopeObject::JSStaticScopeObject):
47350 * runtime/JSVariableObject.h:
47351 (JSC::JSVariableObject::JSVariableObject):
47352 * runtime/JSWrapperObject.h:
47353 (JSC::JSWrapperObject::JSWrapperObject):
47354 * runtime/MathObject.cpp:
47355 (JSC::MathObject::MathObject):
47356 (JSC::MathObject::finishCreation):
47357 * runtime/MathObject.h:
47358 * runtime/NumberObject.cpp:
47359 (JSC::NumberObject::NumberObject):
47360 (JSC::NumberObject::finishCreation):
47361 * runtime/NumberObject.h:
47362 * runtime/ObjectPrototype.cpp:
47363 (JSC::ObjectPrototype::ObjectPrototype):
47364 * runtime/ObjectPrototype.h:
47365 (JSC::ObjectPrototype::create):
47366 * runtime/RegExpConstructor.cpp:
47367 (JSC::RegExpMatchesArray::RegExpMatchesArray):
47368 (JSC::RegExpMatchesArray::finishCreation):
47369 * runtime/RegExpMatchesArray.h:
47370 * runtime/RegExpObject.cpp:
47371 (JSC::RegExpObject::RegExpObject):
47372 (JSC::RegExpObject::finishCreation):
47373 * runtime/RegExpObject.h:
47374 * runtime/StrictEvalActivation.cpp:
47375 (JSC::StrictEvalActivation::StrictEvalActivation):
47376 * runtime/StrictEvalActivation.h:
47377 (JSC::StrictEvalActivation::create):
47378 * runtime/StringObject.cpp:
47379 (JSC::StringObject::StringObject):
47380 (JSC::StringObject::finishCreation):
47381 * runtime/StringObject.h:
47383 2011-09-01 Daniel Bates <dbates@rim.com>
47385 QNX GCC distribution doesn't support vasprintf()
47386 https://bugs.webkit.org/show_bug.cgi?id=67423
47388 Reviewed by Antonio Gomes.
47390 * wtf/Platform.h: Don't enable HAVE_VASPRINTF when building with GCC on QNX.
47392 2011-09-01 Michael Saboff <msaboff@apple.com>
47394 Remove simple usage of UString::characters() from JavaScriptCore
47395 https://bugs.webkit.org/show_bug.cgi?id=67340
47397 In preparation to allowing StringImpl to be backed by 8 bit
47398 characters when appropriate, we need to eliminate or change the
47399 usage of StringImpl::characters(). Most of the changes below
47400 change s->characters()[0] to s[0].
47402 Reviewed by Geoffrey Garen.
47404 * bytecompiler/BytecodeGenerator.cpp:
47405 (JSC::keyForCharacterSwitch):
47406 * bytecompiler/NodesCodegen.cpp:
47407 (JSC::processClauseList):
47408 * interpreter/Interpreter.cpp:
47409 (JSC::Interpreter::privateExecute):
47410 * jit/JITStubs.cpp:
47411 (JSC::DEFINE_STUB_FUNCTION):
47412 * runtime/Identifier.cpp:
47413 (JSC::Identifier::addSlowCase):
47414 * runtime/JSGlobalObjectFunctions.cpp:
47417 * runtime/JSString.cpp:
47418 (JSC::JSString::substringFromRope):
47419 * runtime/JSString.h:
47420 (JSC::jsSingleCharacterSubstring):
47422 (JSC::jsSubstring):
47423 (JSC::jsOwnedString):
47424 * runtime/RegExp.cpp:
47425 (JSC::regExpFlags):
47426 * wtf/text/StringBuilder.h:
47427 (WTF::StringBuilder::operator[]):
47429 2011-09-01 Ada Chan <adachan@apple.com>
47431 Export fastMallocStatistics and Heap::objectTypeCounts for https://bugs.webkit.org/show_bug.cgi?id=67160.
47433 Reviewed by Darin Adler.
47435 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
47437 2011-09-01 Hao Zheng <zhenghao@chromium.org>
47439 Define PTHREAD_KEYS_MAX to fix Android port build.
47440 https://bugs.webkit.org/show_bug.cgi?id=67362
47442 Reviewed by Adam Barth.
47444 PTHREAD_KEYS_MAX is not defined in bionic, so explicitly define it.
47446 * wtf/ThreadIdentifierDataPthreads.cpp:
47448 2011-08-31 Oliver Hunt <oliver@apple.com>
47452 * wtf/CheckedArithmetic.h:
47453 (WTF::Checked::Checked):
47454 (WTF::Checked::operator=):
47456 2011-08-31 Oliver Hunt <oliver@apple.com>
47458 fast/regex/overflow.html asserts in debug builds
47459 https://bugs.webkit.org/show_bug.cgi?id=67326
47461 Reviewed by Gavin Barraclough.
47463 The deliberate overflows in these expressions don't interact nicely
47464 with Checked<32bit-type> so we just bump up to Checked<int64_t> for the
47465 intermediate calculations.
47467 * yarr/YarrJIT.cpp:
47468 (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed):
47469 (JSC::Yarr::YarrGenerator::generateCharacterClassFixed):
47471 2011-08-31 Jeff Miller <jeffm@apple.com>
47473 REGRESSION(92210): AVFoundation media engine is disabled on OS X
47474 https://bugs.webkit.org/show_bug.cgi?id=67316
47476 Move the definition of WTF_USE_AVFOUNDATION on the Mac back to JavaScriptCore/wtf/Platform.h,
47477 since WebKit2 doesn't have access to WebCore/config.h on this platform. This reverts the
47478 changes that were made in r92210.
47480 Reviewed by Darin Adler.
47482 * wtf/Platform.h: Added definition of WTF_USE_AVFOUNDATION on the Mac.
47484 2011-08-31 Peter Beverloo <peter@chromium.org>
47486 Add Android's platform specification and the right atomic functions.
47487 https://bugs.webkit.org/show_bug.cgi?id=66687
47489 Reviewed by Adam Barth.
47492 (WTF::atomicIncrement):
47493 (WTF::atomicDecrement):
47496 2011-08-30 Oliver Hunt <oliver@apple.com>
47498 Add support for checked arithmetic
47499 https://bugs.webkit.org/show_bug.cgi?id=67095
47501 Reviewed by Sam Weinig.
47503 Add a checked arithmetic class Checked<T> that provides overflow-safe
47504 arithmetic over all integral types. Checked<T> supports addition, subtraction
47505 and multiplication, along with "bool" conversions and equality operators.
47507 Checked<> can be used in either CRASH() on overflow or delayed failure modes,
47508 although the default is to CRASH().
47510 To ensure the code is actually in use (rather than checking in dead code) I've
47511 made a couple of properties in YARR use Checked<int> and Checked<unsigned>
47512 instead of raw value arithmetic. This has resulted in a moderate set of changes,
47513 to YARR - mostly adding .get() calls, but a couple of casts from unsigned long
47514 to unsigned for some uses of sizeof, as Checked<> currently does not support
47515 mixed signed-ness of types wider that 32 bits.
47517 Happily the increased type safety of Checked<> means that it's not possible to
47518 accidentally assign away precision, nor accidentally call integer overload of
47519 a function instead of the bool version.
47521 No measurable regression in performance, and SunSpider claims this patch to be
47522 a progression of 0.3%.
47524 * GNUmakefile.list.am:
47525 * JavaScriptCore.gypi:
47526 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
47527 * JavaScriptCore.xcodeproj/project.pbxproj:
47528 * wtf/CheckedArithmetic.h: Added.
47529 (WTF::CrashOnOverflow::overflowed):
47530 (WTF::CrashOnOverflow::clearOverflow):
47531 (WTF::CrashOnOverflow::hasOverflowed):
47532 (WTF::RecordOverflow::RecordOverflow):
47533 (WTF::RecordOverflow::overflowed):
47534 (WTF::RecordOverflow::clearOverflow):
47535 (WTF::RecordOverflow::hasOverflowed):
47539 (WTF::safeMultiply):
47541 (WTF::workAroundClangBug):
47542 (WTF::Checked::Checked):
47543 (WTF::Checked::operator=):
47544 (WTF::Checked::operator++):
47545 (WTF::Checked::operator--):
47546 (WTF::Checked::operator!):
47547 (WTF::Checked::operator UnspecifiedBoolType*):
47548 (WTF::Checked::get):
47549 (WTF::Checked::operator+=):
47550 (WTF::Checked::operator-=):
47551 (WTF::Checked::operator*=):
47552 (WTF::Checked::operator==):
47553 (WTF::Checked::operator!=):
47557 * yarr/YarrInterpreter.cpp:
47558 (JSC::Yarr::ByteCompiler::atomPatternCharacter):
47559 (JSC::Yarr::ByteCompiler::atomCharacterClass):
47560 (JSC::Yarr::ByteCompiler::atomBackReference):
47561 (JSC::Yarr::ByteCompiler::atomParentheticalAssertionEnd):
47562 (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternEnd):
47563 (JSC::Yarr::ByteCompiler::atomParenthesesOnceEnd):
47564 (JSC::Yarr::ByteCompiler::atomParenthesesTerminalEnd):
47565 * yarr/YarrInterpreter.h:
47566 (JSC::Yarr::ByteTerm::ByteTerm):
47567 (JSC::Yarr::ByteTerm::CheckInput):
47568 (JSC::Yarr::ByteTerm::UncheckInput):
47569 * yarr/YarrJIT.cpp:
47570 (JSC::Yarr::YarrGenerator::generateAssertionEOL):
47571 (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed):
47572 (JSC::Yarr::YarrGenerator::generatePatternCharacterGreedy):
47573 (JSC::Yarr::YarrGenerator::backtrackPatternCharacterNonGreedy):
47574 (JSC::Yarr::YarrGenerator::generateCharacterClassOnce):
47575 (JSC::Yarr::YarrGenerator::generateCharacterClassFixed):
47576 (JSC::Yarr::YarrGenerator::generateCharacterClassGreedy):
47577 (JSC::Yarr::YarrGenerator::backtrackCharacterClassNonGreedy):
47578 * yarr/YarrPattern.cpp:
47579 (JSC::Yarr::YarrPatternConstructor::setupAlternativeOffsets):
47580 * yarr/YarrPattern.h:
47582 2011-08-31 Andrei Popescu <andreip@google.com>
47584 Investigate current uses of OS(ANDROID)
47585 https://bugs.webkit.org/show_bug.cgi?id=66761
47587 Unreviewed, build fix for ARM platforms.
47591 2011-08-31 Andrei Popescu <andreip@google.com>
47593 Investigate current uses of OS(ANDROID)
47594 https://bugs.webkit.org/show_bug.cgi?id=66761
47596 Reviewed by Darin Adler.
47598 Remove the last legacy Android code.
47600 No new tests needed as the code wasn't tested in the first place.
47604 * wtf/ThreadingPthreads.cpp:
47605 (WTF::createThreadInternal):
47607 2011-08-30 Aaron Colwell <acolwell@chromium.org>
47609 Add MediaSource API to HTMLMediaElement
47610 https://bugs.webkit.org/show_bug.cgi?id=64731
47612 Reviewed by Eric Carlson.
47614 * Configurations/FeatureDefines.xcconfig:
47616 2011-08-30 Oliver Hunt <oliver@apple.com>
47618 TypedArrays don't ensure that denormalised values are normalised
47619 https://bugs.webkit.org/show_bug.cgi?id=67178
47621 Reviewed by Gavin Barraclough.
47623 Add a couple of assertions to jsNumber() to ensure that
47624 we block signaling NaNs
47626 * runtime/JSValue.h:
47627 (JSC::jsDoubleNumber):
47630 2011-08-30 Ademar de Souza Reis Jr. <ademar.reis@openbossa.org>
47632 [Qt] Do not unconditionally use pkg-config in .pro files
47633 https://bugs.webkit.org/show_bug.cgi?id=67055
47635 Reviewed by Andreas Kling.
47637 Original patch from Rohan McGovern <rohan.mcgovern@nokia.com>
47639 Using the first pkg-config in PATH is prone to errors when cross
47640 compiling inside the Qt repository (using Qt's build-system).
47642 This patch protect calls for pkg-config with
47643 !contains(QT_CONFIG, no-pkg-config). no-pkg-config is added to
47644 QT_CONFIG by Qt's 'configure' when cross-compiling on systems
47645 without pkg-config.
47647 The respective change in Qt's configure has been submited already.
47649 No new tests as this is just a build change.
47651 * wtf/wtf.pri: protect pkg-config calls
47653 2011-08-29 Daniel Bates <dbates@webkit.org>
47655 Add HAVE(VASPRINTF) macro to test for vasprintf() support
47656 https://bugs.webkit.org/show_bug.cgi?id=67156
47658 Reviewed by Darin Adler.
47660 Encapsulate testing of vasprintf() support in a HAVE macro
47661 instead of hardcoding the list of supported/unsupported
47662 compilers at the call site.
47666 2011-08-29 Mark Hahnenberg <mhahnenberg@apple.com>
47668 Unzip initialization lists and constructors in JSCell hierarchy (3/7)
47669 https://bugs.webkit.org/show_bug.cgi?id=67064
47671 Reviewed by Darin Adler.
47673 Completed the third level of the refactoring to add finishCreation()
47674 methods to all classes within the JSCell hierarchy with non-trivial
47675 constructor bodies.
47677 This primarily consists of pushing the calls to finishCreation() down
47678 into the constructors of the subclasses of the second level of the hierarchy
47679 as well as pulling the finishCreation() calls out into the class's corresponding
47680 create() method if it has one. Doing both simultaneously allows us to
47681 maintain the invariant that the finishCreation() method chain is called exactly
47682 once during the creation of an object, since calling it any other number of
47683 times (0, 2, or more) will cause an assertion failure.
47685 * debugger/DebuggerActivation.cpp:
47686 (JSC::DebuggerActivation::DebuggerActivation):
47687 (JSC::DebuggerActivation::finishCreation):
47688 * debugger/DebuggerActivation.h:
47689 (JSC::DebuggerActivation::create):
47690 * runtime/Arguments.h:
47691 (JSC::Arguments::create):
47692 (JSC::Arguments::createNoParameters):
47693 (JSC::Arguments::Arguments):
47694 (JSC::Arguments::finishCreation):
47695 * runtime/ErrorInstance.cpp:
47696 (JSC::ErrorInstance::ErrorInstance):
47697 * runtime/ErrorInstance.h:
47698 (JSC::ErrorInstance::finishCreation):
47699 * runtime/ExceptionHelpers.cpp:
47700 (JSC::InterruptedExecutionError::InterruptedExecutionError):
47701 (JSC::TerminatedExecutionError::TerminatedExecutionError):
47702 * runtime/Executable.cpp:
47703 (JSC::EvalExecutable::EvalExecutable):
47704 (JSC::ProgramExecutable::ProgramExecutable):
47705 (JSC::FunctionExecutable::FunctionExecutable):
47706 Moved the assignment of m_firstLine and m_lastLine into the
47707 FunctionExecutable::finishCreation() method in Executable.h
47708 * runtime/Executable.h:
47709 (JSC::ScriptExecutable::ScriptExecutable):
47710 (JSC::EvalExecutable::create):
47711 (JSC::ProgramExecutable::create):
47712 (JSC::FunctionExecutable::create):
47713 (JSC::FunctionExecutable::finishCreation):
47714 * runtime/JSArray.cpp:
47715 (JSC::JSArray::JSArray):
47716 (JSC::JSArray::finishCreation):
47717 * runtime/JSArray.h:
47718 * runtime/JSByteArray.cpp:
47719 (JSC::JSByteArray::JSByteArray):
47720 * runtime/JSByteArray.h:
47721 (JSC::JSByteArray::finishCreation):
47722 * runtime/JSNotAnObject.h:
47723 (JSC::JSNotAnObject::JSNotAnObject):
47724 * runtime/JSObject.h:
47725 (JSC::JSNonFinalObject::JSNonFinalObject):
47726 * runtime/JSObjectWithGlobalObject.cpp:
47727 (JSC::JSObjectWithGlobalObject::JSObjectWithGlobalObject):
47728 (JSC::JSObjectWithGlobalObject::finishCreation):
47729 * runtime/JSObjectWithGlobalObject.h:
47730 * runtime/JSVariableObject.h:
47731 (JSC::JSVariableObject::JSVariableObject):
47732 (JSC::JSVariableObject::finishCreation):
47733 * runtime/JSWrapperObject.h:
47734 (JSC::JSWrapperObject::JSWrapperObject):
47735 * runtime/ObjectPrototype.cpp:
47736 (JSC::ObjectPrototype::ObjectPrototype):
47737 (JSC::ObjectPrototype::finishCreation):
47738 * runtime/ObjectPrototype.h:
47739 * runtime/StrictEvalActivation.cpp:
47740 (JSC::StrictEvalActivation::StrictEvalActivation):
47742 2011-08-29 Andreas Kling <kling@webkit.org>
47744 Unreviewed build fix after r93990.
47748 2011-08-29 Andreas Kling <kling@webkit.org>
47750 Viewing a post on reddit.com wastes a lot of memory on event listeners.
47751 https://bugs.webkit.org/show_bug.cgi?id=67133
47753 Reviewed by Darin Adler.
47755 Add a minimum table size to the HashTraits, instead of having it hard coded.
47756 The default value remains at 64, but can now be specialized.
47758 * runtime/StructureTransitionTable.h:
47760 (WTF::HashTable::shouldShrink):
47762 (WTF::::checkTableConsistencyExceptSize):
47763 * wtf/HashTraits.h:
47765 2011-08-28 Jonathan Liu <net147@gmail.com>
47767 Fix build error when compiling with MinGW-w64 by disabling JIT
47769 https://bugs.webkit.org/show_bug.cgi?id=61235
47771 Reviewed by Gavin Barraclough.
47773 The fixed mmap executable allocator for JIT on x86_64 requires
47774 sys/mman.h which is not available on Windows.
47778 2011-08-27 Filip Pizlo <fpizlo@apple.com>
47780 JSC::Executable is inconsistent about using weak handle finalizers
47781 and destructors for releasing memory
47782 https://bugs.webkit.org/show_bug.cgi?id=67072
47784 Reviewed by Darin Adler.
47786 Moved more of the destruction of Executable state into the finalizer,
47787 which also resulted in an opportunity to mostly combine this with
47788 discardCode(). This also means that the finalizer is now enabled even
47789 when the JIT is turned off. This is performance neutral on SunSpider,
47792 * runtime/Executable.cpp:
47793 (JSC::ExecutableBase::clearCode):
47794 (JSC::ExecutableFinalizer::finalize):
47795 (JSC::EvalExecutable::clearCode):
47796 (JSC::ProgramExecutable::clearCode):
47797 (JSC::FunctionExecutable::discardCode):
47798 (JSC::FunctionExecutable::clearCode):
47799 * runtime/Executable.h:
47800 (JSC::ExecutableBase::finishCreation):
47802 2011-08-26 Gavin Barraclough <barraclough@apple.com>
47804 DFG JIT - ArithMod may clobber operands.
47805 https://bugs.webkit.org/show_bug.cgi?id=67085
47807 Reviewed by Sam Weinig.
47809 unboxDouble must be called on a temporary.
47811 * dfg/DFGJITCodeGenerator.cpp:
47812 (JSC::DFG::JITCodeGenerator::fillDouble):
47813 * dfg/DFGJITCodeGenerator.h:
47814 (JSC::DFG::JITCodeGenerator::boxDouble):
47815 * dfg/DFGNonSpeculativeJIT.cpp:
47816 (JSC::DFG::NonSpeculativeJIT::compile):
47817 * dfg/DFGSpeculativeJIT.cpp:
47818 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
47820 2011-08-26 Mark Hahnenberg <mhahnenberg@apple.com>
47822 Unzip initialization lists and constructors in JSCell hierarchy (2/7)
47823 https://bugs.webkit.org/show_bug.cgi?id=66957
47825 Reviewed by Darin Adler.
47827 Completed the second level of the refactoring to add finishCreation()
47828 methods to all classes within the JSCell hierarchy with non-trivial
47829 constructor bodies.
47831 * runtime/Executable.h:
47832 (JSC::ExecutableBase::ExecutableBase):
47833 (JSC::ExecutableBase::create):
47834 (JSC::NativeExecutable::create):
47835 (JSC::NativeExecutable::finishCreation):
47836 (JSC::NativeExecutable::NativeExecutable):
47837 (JSC::ScriptExecutable::ScriptExecutable):
47838 (JSC::ScriptExecutable::finishCreation):
47839 * runtime/GetterSetter.h:
47840 (JSC::GetterSetter::GetterSetter):
47841 (JSC::GetterSetter::create):
47842 * runtime/JSAPIValueWrapper.h:
47843 (JSC::JSAPIValueWrapper::create):
47844 (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
47845 * runtime/JSObject.h:
47846 (JSC::JSNonFinalObject::JSNonFinalObject):
47847 (JSC::JSNonFinalObject::finishCreation):
47848 (JSC::JSFinalObject::create):
47849 (JSC::JSFinalObject::finishCreation):
47850 (JSC::JSFinalObject::JSFinalObject):
47851 (JSC::JSObject::JSObject):
47852 * runtime/JSPropertyNameIterator.cpp:
47853 (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
47854 (JSC::JSPropertyNameIterator::create):
47855 * runtime/JSPropertyNameIterator.h:
47856 (JSC::JSPropertyNameIterator::create):
47857 * runtime/RegExp.cpp:
47858 (JSC::RegExp::RegExp):
47859 (JSC::RegExp::createWithoutCaching):
47860 * runtime/ScopeChain.h:
47861 (JSC::ScopeChainNode::ScopeChainNode):
47862 (JSC::ScopeChainNode::create):
47863 * runtime/Structure.cpp:
47864 (JSC::Structure::Structure):
47865 * runtime/Structure.h:
47866 (JSC::Structure::create):
47867 (JSC::Structure::finishCreation):
47868 (JSC::Structure::createStructure):
47869 * runtime/StructureChain.cpp:
47870 (JSC::StructureChain::StructureChain):
47871 * runtime/StructureChain.h:
47872 (JSC::StructureChain::create):
47874 2011-08-26 Filip Pizlo <fpizlo@apple.com>
47876 The GC does not have a facility for profiling the kinds of objects
47877 that occupy the heap
47878 https://bugs.webkit.org/show_bug.cgi?id=66849
47880 Reviewed by Geoffrey Garen.
47882 Destructor calls and object scans are now optionally counted, per
47883 vtable. When the heap is destroyed and profiling is enabled, the
47884 counts are dumped, with care taken to print the names of classes
47885 (modulo C++ mangling) sorted in descending commonality.
47887 * GNUmakefile.list.am:
47888 * JavaScriptCore.exp:
47889 * JavaScriptCore.pro:
47890 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
47891 * JavaScriptCore.xcodeproj/project.pbxproj:
47893 (JSC::Heap::destroy):
47895 * heap/MarkStack.cpp:
47896 (JSC::SlotVisitor::visitChildren):
47897 (JSC::SlotVisitor::drain):
47898 * heap/MarkStack.h:
47899 * heap/MarkedBlock.cpp:
47900 (JSC::MarkedBlock::callDestructor):
47901 * heap/MarkedBlock.h:
47902 * heap/VTableSpectrum.cpp: Added.
47903 (JSC::VTableSpectrum::VTableSpectrum):
47904 (JSC::VTableSpectrum::~VTableSpectrum):
47905 (JSC::VTableSpectrum::countVPtr):
47906 (JSC::VTableSpectrum::count):
47907 (JSC::VTableAndCount::VTableAndCount):
47908 (JSC::VTableAndCount::operator<):
47909 (JSC::VTableSpectrum::dump):
47910 * heap/VTableSpectrum.h: Added.
47913 2011-08-26 Juan C. Montemayor <jmont@apple.com>
47915 Update topCallFrame when calling host functions in the JIT
47916 https://bugs.webkit.org/show_bug.cgi?id=67010
47918 Reviewed by Oliver Hunt.
47920 The topCallFrame is not being updated when a host function is
47921 called by the JIT. This causes problems when trying to create a
47922 stack trace (https://bugs.webkit.org/show_bug.cgi?id=66994).
47924 * jit/JITOpcodes.cpp:
47925 (JSC::JIT::privateCompileCTIMachineTrampolines):
47926 (JSC::JIT::privateCompileCTINativeCall):
47928 2011-08-26 Alexey Proskuryakov <ap@apple.com>
47930 Get rid of frame life support timer
47931 https://bugs.webkit.org/show_bug.cgi?id=66874
47933 Reviewed by Geoff Garen.
47935 * runtime/JSGlobalObject.h:
47936 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
47937 globalExec() no longer needs to be virtual, its only override was in JSDOMWindowBase.
47939 2011-08-26 Chao-ying Fu <fu@mips.com>
47941 Fix MIPS patchOffsetGetByIdSlowCaseCall
47942 https://bugs.webkit.org/show_bug.cgi?id=67046
47944 Reviewed by Gavin Barraclough.
47948 2011-08-25 Mark Hahnenberg <mhahnenberg@apple.com>
47950 Fixing broken build due to unused variables in release mode
47951 https://bugs.webkit.org/show_bug.cgi?id=67004
47953 Unreviewed, release build fix.
47955 Fixing broken build due to unused variables in ASSERTs in release build.
47957 * runtime/JSObject.h:
47958 (JSC::JSObject::finishCreation):
47959 * runtime/JSString.h:
47960 (JSC::RopeBuilder::finishCreation):
47961 * runtime/ScopeChain.h:
47962 (JSC::ScopeChainNode::finishCreation):
47964 2011-08-25 Mark Hahnenberg <mhahnenberg@apple.com>
47966 Unzip initialization lists and constructors in JSCell hierarchy (1/7)
47967 https://bugs.webkit.org/show_bug.cgi?id=66827
47969 Reviewed by Geoffrey Garen.
47971 Added finishCreation() methods to all immediately subclasses of JSCell with
47972 non-empty constructors. Part of a larger refactoring to "unzip" initialization
47973 lists and constructor bodies. Also renamed JSCell's constructorBody() method
47974 to finishCreation().
47976 * runtime/Executable.h:
47977 (JSC::ExecutableBase::ExecutableBase):
47978 (JSC::ExecutableBase::constructorBody):
47979 * runtime/GetterSetter.h:
47980 (JSC::GetterSetter::GetterSetter):
47981 * runtime/JSAPIValueWrapper.h:
47982 (JSC::JSAPIValueWrapper::constructorBody):
47983 (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
47984 * runtime/JSCell.h:
47985 (JSC::JSCell::JSCell::JSCell):
47986 (JSC::JSCell::JSCell::constructorBody):
47987 * runtime/JSObject.h:
47988 (JSC::JSObject::constructorBody):
47989 (JSC::JSObject::JSObject):
47990 * runtime/JSPropertyNameIterator.h:
47991 (JSC::JSPropertyNameIterator::constructorBody):
47992 * runtime/JSString.h:
47993 (JSC::RopeBuilder::JSString):
47994 (JSC::RopeBuilder::constructorBody):
47995 * runtime/RegExp.cpp:
47996 (JSC::RegExp::RegExp):
47997 (JSC::RegExp::constructorBody):
47998 * runtime/RegExp.h:
47999 * runtime/ScopeChain.h:
48000 (JSC::ScopeChainNode::ScopeChainNode):
48001 (JSC::ScopeChainNode::constructorBody):
48002 * runtime/Structure.cpp:
48003 (JSC::Structure::Structure):
48004 * runtime/StructureChain.cpp:
48005 (JSC::StructureChain::StructureChain):
48006 * runtime/StructureChain.h:
48007 (JSC::StructureChain::create):
48008 (JSC::StructureChain::constructorBody):
48010 2011-08-25 Gabor Loki <loki@webkit.org>
48012 REGRESSION(r93755): It made 14 jsc test and ~500 layout test fail on Qt-ARM bot
48013 https://bugs.webkit.org/show_bug.cgi?id=66956
48015 Rebaseline constants for patching GetByIdSlowCaseCall on ARM.
48017 Reviewed by Oliver Hunt.
48021 2011-08-24 Juan C. Montemayor <jmont@apple.com>
48023 Keep track of topCallFrame for Stack traces
48024 https://bugs.webkit.org/show_bug.cgi?id=66571
48026 Reviewed by Geoffrey Garen.
48028 This patch adds a TopCallFrame to JSC in order to have that information
48029 when an error is thrown to create a stack trace. The TopCallFrame is
48030 updated throughout select points in the Interpreter and the JSC.
48032 * interpreter/Interpreter.cpp:
48033 (JSC::Interpreter::unwindCallFrame):
48034 (JSC::Interpreter::throwException):
48035 (JSC::Interpreter::execute):
48036 (JSC::Interpreter::executeCall):
48037 (JSC::Interpreter::executeConstruct):
48038 (JSC::Interpreter::privateExecute):
48039 * interpreter/Interpreter.h:
48040 (JSC::TopCallFrameSetter::TopCallFrameSetter):
48041 (JSC::TopCallFrameSetter::~TopCallFrameSetter):
48043 * jit/JITInlineMethods.h:
48044 (JSC::JIT::updateTopCallFrame):
48045 * jit/JITStubCall.h:
48046 (JSC::JITStubCall::call):
48047 * jit/JITStubs.cpp:
48048 (JSC::throwExceptionFromOpCall):
48049 (JSC::DEFINE_STUB_FUNCTION):
48050 (JSC::arityCheckFor):
48051 * runtime/JSGlobalData.cpp:
48052 (JSC::JSGlobalData::JSGlobalData):
48053 * runtime/JSGlobalData.h:
48055 2011-08-24 Filip Pizlo <fpizlo@apple.com>
48057 ErrorInstance::create sometimes has two heap object constructions
48059 https://bugs.webkit.org/show_bug.cgi?id=66845
48061 Reviewed by Darin Adler.
48063 The fix is simple since there is already a second create() method
48064 that takes a UString.
48066 * runtime/ErrorInstance.cpp:
48067 (JSC::ErrorInstance::create):
48069 2011-08-24 Filip Pizlo <fpizlo@apple.com>
48071 There is no facility for profiling how the write barrier is used
48072 https://bugs.webkit.org/show_bug.cgi?id=66747
48074 Reviewed by Geoffrey Garen.
48076 Added facilities for the JIT to specify the kind of write barrier
48077 being executed. Added code for profiling the number of each kind
48078 of barrier encountered.
48080 * GNUmakefile.list.am:
48081 * JavaScriptCore.exp:
48082 * JavaScriptCore.pro:
48083 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
48084 * JavaScriptCore.xcodeproj/project.pbxproj:
48085 * dfg/DFGJITCodeGenerator.cpp:
48086 (JSC::DFG::JITCodeGenerator::writeBarrier):
48087 (JSC::DFG::JITCodeGenerator::cachedPutById):
48088 * dfg/DFGJITCodeGenerator.h:
48089 * dfg/DFGJITCompiler.cpp:
48090 (JSC::DFG::JITCompiler::emitCount):
48091 * dfg/DFGJITCompiler.h:
48092 (JSC::DFG::JITCompiler::emitCount):
48093 * dfg/DFGNonSpeculativeJIT.cpp:
48094 (JSC::DFG::NonSpeculativeJIT::compile):
48095 * dfg/DFGRepatch.cpp:
48096 (JSC::DFG::tryCachePutByID):
48097 * dfg/DFGSpeculativeJIT.cpp:
48098 (JSC::DFG::SpeculativeJIT::compile):
48100 (JSC::Heap::writeBarrier):
48101 * heap/WriteBarrierSupport.cpp: Added.
48102 (JSC::WriteBarrierCounters::initialize):
48103 * heap/WriteBarrierSupport.h: Added.
48104 (JSC::WriteBarrierCounters::WriteBarrierCounters):
48105 (JSC::WriteBarrierCounters::jitCounterFor):
48106 (JSC::WriteBarrierCounters::countWriteBarrier):
48108 * jit/JITPropertyAccess.cpp:
48109 (JSC::JIT::emit_op_put_by_id):
48110 (JSC::JIT::privateCompilePutByIdTransition):
48111 (JSC::JIT::emit_op_put_scoped_var):
48112 (JSC::JIT::emit_op_put_global_var):
48113 (JSC::JIT::emitWriteBarrier):
48114 * jit/JITPropertyAccess32_64.cpp:
48115 (JSC::JIT::emit_op_put_by_val):
48116 (JSC::JIT::emit_op_put_by_id):
48117 (JSC::JIT::privateCompilePutByIdTransition):
48118 (JSC::JIT::emit_op_put_scoped_var):
48119 (JSC::JIT::emit_op_put_global_var):
48120 (JSC::JIT::emitWriteBarrier):
48121 * runtime/InitializeThreading.cpp:
48122 (JSC::initializeThreadingOnce):
48123 * runtime/WriteBarrier.h:
48124 (JSC::WriteBarrierBase::setWithoutWriteBarrier):
48126 2011-08-23 Mark Hahnenberg <mhahnenberg@apple.com>
48128 Add checks to ensure allocation does not take place during initialization of GC-managed objects
48129 https://bugs.webkit.org/show_bug.cgi?id=65288
48131 Reviewed by Darin Adler.
48133 Adding the new validation functionality. In its current state, it will performs checks,
48134 but they don't fail unless you do allocation in the arguments to the parent constructor in the
48135 initialization list of a class. The allocateCell() method turns on the global flag disallowing any new
48136 allocations, and the constructorBody() method in JSCell turns it off. This way, allocation is still
48137 allowed in constructor bodies while other refactoring efforts continue.
48139 * runtime/JSCell.h:
48140 (JSC::JSCell::JSCell::constructorBody):
48141 (JSC::JSCell::JSCell::JSCell):
48142 (JSC::JSCell::allocateCell):
48143 * runtime/JSGlobalData.cpp:
48144 (JSC::JSGlobalData::JSGlobalData):
48145 * runtime/JSGlobalData.h:
48146 (JSC::JSGlobalData::isInitializingObject):
48147 (JSC::JSGlobalData::setInitializingObject):
48148 * runtime/StringObjectThatMasqueradesAsUndefined.h:
48149 (JSC::StringObjectThatMasqueradesAsUndefined::create):
48151 2011-08-23 Gavin Barraclough <barraclough@apple.com>
48153 https://bugs.webkit.org/show_bug.cgi?id=55347
48154 "name" and "message" enumerable on *Error.prototype
48156 Reviewed by Sam Weinig.
48158 The default value of a NativeErrorPrototype's message
48159 property is "", not the name of the error.
48161 * runtime/NativeErrorConstructor.cpp:
48162 (JSC::NativeErrorConstructor::NativeErrorConstructor):
48163 * runtime/NativeErrorConstructor.h:
48164 (JSC::NativeErrorConstructor::create):
48165 (JSC::NativeErrorConstructor::constructorBody):
48166 * runtime/NativeErrorPrototype.cpp:
48167 (JSC::NativeErrorPrototype::NativeErrorPrototype):
48168 (JSC::NativeErrorPrototype::constructorBody):
48169 * runtime/NativeErrorPrototype.h:
48170 (JSC::NativeErrorPrototype::create):
48171 * runtime/StringPrototype.cpp:
48172 (JSC::StringPrototype::StringPrototype):
48173 * runtime/StringPrototype.h:
48174 (JSC::StringPrototype::create):
48176 2011-08-23 Steve Block <steveblock@google.com>
48178 Remove last occurrences of PLATFORM(ANDROID)
48179 https://bugs.webkit.org/show_bug.cgi?id=66763
48181 Reviewed by Tony Gentilcore.
48185 2011-08-23 Steve Block <steveblock@google.com>
48187 Remove all mention of removed Android files from build scripts
48188 https://bugs.webkit.org/show_bug.cgi?id=66755
48190 Reviewed by Tony Gentilcore.
48192 * JavaScriptCore.gyp/JavaScriptCore.gyp:
48193 * JavaScriptCore.gypi:
48194 * gyp/JavaScriptCore.gyp:
48196 2011-08-23 Adam Barth <abarth@webkit.org>
48198 Remove WebCore/editing/android and other Android-specific directories
48199 https://bugs.webkit.org/show_bug.cgi?id=66739
48201 Reviewed by Steve Block.
48203 Now that Android shares more code with Chromium, we don't need these
48204 Android-specific files.
48206 * wtf/android: Removed.
48207 * wtf/android/AndroidThreading.h: Removed.
48208 * wtf/android/MainThreadAndroid.cpp: Removed.
48210 2011-08-23 Ilya Tikhonovsky <loislo@chromium.org>
48212 Unreviewed build fix for compile error on Windows for r93560.
48214 * runtime/SamplingCounter.h:
48216 2011-08-22 Filip Pizlo <fpizlo@apple.com>
48218 Sampling counter support is in the bytecode directory
48219 https://bugs.webkit.org/show_bug.cgi?id=66724
48221 Reviewed by Darin Adler.
48223 Moved SamplingCounter to a separate header in runtime/.
48225 * GNUmakefile.list.am:
48226 * JavaScriptCore.pro:
48227 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
48228 * JavaScriptCore.xcodeproj/project.pbxproj:
48229 * bytecode/SamplingTool.cpp:
48230 * bytecode/SamplingTool.h:
48231 * runtime/SamplingCounter.cpp: Added.
48232 (JSC::AbstractSamplingCounter::dump):
48233 * runtime/SamplingCounter.h: Added.
48234 (JSC::AbstractSamplingCounter::count):
48235 (JSC::AbstractSamplingCounter::addressOfCounter):
48236 (JSC::AbstractSamplingCounter::init):
48237 (JSC::SamplingCounter::SamplingCounter):
48238 (JSC::GlobalSamplingCounter::name):
48239 (JSC::DeletableSamplingCounter::DeletableSamplingCounter):
48240 (JSC::DeletableSamplingCounter::~DeletableSamplingCounter):
48242 2011-08-21 Martin Robinson <mrobinson@igalia.com>
48244 Fix 'make dist' for WebKitGTK+.
48246 * GNUmakefile.list.am: Add a missing header to the sources list.
48248 2011-08-20 Filip Pizlo <fpizlo@apple.com>
48250 JavaScriptCore bytecompiler does not compute scope depth correctly
48251 in the case of constant declarations
48252 https://bugs.webkit.org/show_bug.cgi?id=66572
48254 Reviewed by Oliver Hunt.
48256 Changed the handling of const to add the dynamic scope depth.
48258 * bytecompiler/NodesCodegen.cpp:
48259 (JSC::ConstDeclNode::emitCodeSingle):
48261 2011-08-19 Daniel Bates <dbates@webkit.org>
48263 Only #include <signal.h> and require SA_RESTART when building with JSC_MULTIPLE_THREADS
48264 https://bugs.webkit.org/show_bug.cgi?id=66617
48266 Both <signal.h> and SA_RESTART usage are guarded behind ENABLE(JSC_MULTIPLE_THREADS).
48267 But we cause a compile error if the platform doesn't support SA_RESTART regardless of
48268 whether JSC_MULTIPLE_THREADS is enabled for the port. Instead, we shouldn't require
48269 SA_RESTART support unless we are building with JSC_MULTIPLE_THREADS enabled.
48271 Reviewed by Antonio Gomes.
48273 * heap/MachineStackMarker.cpp:
48275 2011-08-19 Filip Pizlo <fpizlo@apple.com>
48277 The JSC JIT currently has no facility to profile and report
48278 the types of values
48279 https://bugs.webkit.org/show_bug.cgi?id=65901
48281 Reviewed by Gavin Barraclough.
48283 Added the ability to profile the values seen at function calls (both
48284 arguments and results) and heap loads. This is done with emphasis
48285 on performance. A value profiling site consists of: add, and,
48286 move, and store; no branching is necessary. Each value profiling
48287 site (called a ValueProfile) has a ring buffer of 8 recently-seen
48288 values. ValueProfiles are stored in the CodeBlock; there will be
48289 one for each argument (excluding this) and each heap load or callsite.
48290 Each time a value profiling site executes, it stores the value into
48291 a pseudo-random element in the ValueProfile buffer. The point is
48292 that for frequently executed code, we will have 8 somewhat recent
48293 values in the buffer and will be able to not only figure out what
48294 type it is, but also to be able to reason about the actual values
48295 if we wish to do so.
48297 This feature is currently disabled by default. When enabled, it
48298 results in a 3.7% slow-down on SunSpider.
48300 * JavaScriptCore.xcodeproj/project.pbxproj:
48301 * bytecode/CodeBlock.cpp:
48302 (JSC::CodeBlock::~CodeBlock):
48303 * bytecode/CodeBlock.h:
48304 (JSC::CodeBlock::addValueProfile):
48305 (JSC::CodeBlock::numberOfValueProfiles):
48306 (JSC::CodeBlock::valueProfile):
48307 (JSC::CodeBlock::valueProfileForBytecodeOffset):
48308 * bytecode/ValueProfile.h: Added.
48309 (JSC::ValueProfile::ValueProfile):
48310 (JSC::ValueProfile::numberOfSamples):
48311 (JSC::ValueProfile::computeProbability):
48312 (JSC::ValueProfile::numberOfInt32s):
48313 (JSC::ValueProfile::numberOfDoubles):
48314 (JSC::ValueProfile::numberOfCells):
48315 (JSC::ValueProfile::probabilityOfInt32):
48316 (JSC::ValueProfile::probabilityOfDouble):
48317 (JSC::ValueProfile::probabilityOfCell):
48318 (JSC::getValueProfileBytecodeOffset):
48320 (JSC::JIT::privateCompileSlowCases):
48321 (JSC::JIT::privateCompile):
48323 (JSC::JIT::emitValueProfilingSite):
48325 (JSC::JIT::emit_op_call_put_result):
48326 * jit/JITInlineMethods.h:
48327 (JSC::JIT::emitValueProfilingSite):
48328 * jit/JITPropertyAccess.cpp:
48329 (JSC::JIT::emit_op_get_by_val):
48330 (JSC::JIT::emitSlow_op_get_by_val):
48331 (JSC::JIT::emit_op_method_check):
48332 (JSC::JIT::emit_op_get_by_id):
48333 (JSC::JIT::emitSlow_op_get_by_id):
48334 * jit/JSInterfaceJIT.h:
48336 * wtf/StdLibExtras.h:
48337 (WTF::binarySearch):
48338 (WTF::genericBinarySearch):
48340 2011-08-19 Daniel Bates <dbates@webkit.org>
48342 Don't include DisallowCType.h when building on QNX
48343 https://bugs.webkit.org/show_bug.cgi?id=66616
48345 Reviewed by Antonio Gomes.
48349 2011-08-19 Daniel Bates <dbates@webkit.org>
48351 Implement ExecutableAllocator::cacheFlush() for QNX
48352 https://bugs.webkit.org/show_bug.cgi?id=66611
48354 Reviewed by Antonio Gomes.
48356 * jit/ExecutableAllocator.h:
48357 (JSC::ExecutableAllocator::cacheFlush):
48359 2011-08-19 Daniel Bates <dbates@webkit.org>
48361 Implement WTF::atomic{Increment, Decrement}() for QNX
48362 https://bugs.webkit.org/show_bug.cgi?id=66605
48364 Reviewed by Darin Adler.
48367 (WTF::atomicIncrement):
48368 (WTF::atomicDecrement):
48370 2011-08-19 Beth Dakin <bdakin@apple.com>
48372 https://bugs.webkit.org/show_bug.cgi?id=66590
48373 Re-name scrollbar painter types
48375 Reviewed by Sam Weinig.
48377 WTF_USE_WK_SCROLLBAR_PAINTER is now WTF_USE_SCROLLBAR_PAINTER since WK no longer
48381 2011-08-18 Mark Hahnenberg <mhahnenberg@apple.com>
48383 Move allocation in constructors into separate constructorBody() methods
48384 https://bugs.webkit.org/show_bug.cgi?id=66265
48386 Reviewed by Oliver Hunt.
48388 Refactoring to put all allocations that need to be done after the object's
48389 initialization list has executed but before the object is ready for use
48390 into a separate constructorBody() method. This method is still called by the constructor,
48391 so the patch doesn't resolve any potential issues, it's just to set up the code for further refactoring.
48393 * JavaScriptCore.exp:
48394 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
48396 (GlobalObject::constructorBody):
48397 (GlobalObject::GlobalObject):
48398 * runtime/ErrorInstance.cpp:
48399 (JSC::ErrorInstance::ErrorInstance):
48400 * runtime/ErrorInstance.h:
48401 (JSC::ErrorInstance::constructorBody):
48402 * runtime/ErrorPrototype.cpp:
48403 (JSC::ErrorPrototype::ErrorPrototype):
48404 (JSC::ErrorPrototype::constructorBody):
48405 * runtime/ErrorPrototype.h:
48406 * runtime/Executable.cpp:
48407 (JSC::FunctionExecutable::FunctionExecutable):
48408 * runtime/Executable.h:
48409 (JSC::FunctionExecutable::constructorBody):
48410 * runtime/InternalFunction.cpp:
48411 (JSC::InternalFunction::InternalFunction):
48412 * runtime/InternalFunction.h:
48413 (JSC::InternalFunction::constructorBody):
48414 * runtime/JSByteArray.cpp:
48415 (JSC::JSByteArray::JSByteArray):
48416 * runtime/JSByteArray.h:
48417 (JSC::JSByteArray::constructorBody):
48418 * runtime/JSFunction.cpp:
48419 (JSC::JSFunction::JSFunction):
48420 (JSC::JSFunction::constructorBody):
48421 * runtime/JSFunction.h:
48422 * runtime/JSGlobalObject.h:
48423 (JSC::JSGlobalObject::JSGlobalObject):
48424 (JSC::JSGlobalObject::constructorBody):
48425 * runtime/JSPropertyNameIterator.cpp:
48426 (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
48427 * runtime/JSPropertyNameIterator.h:
48428 (JSC::JSPropertyNameIterator::constructorBody):
48429 * runtime/JSString.h:
48430 (JSC::RopeBuilder::JSString):
48431 (JSC::RopeBuilder::constructorBody):
48432 * runtime/NativeErrorConstructor.cpp:
48433 (JSC::NativeErrorConstructor::NativeErrorConstructor):
48434 * runtime/NativeErrorConstructor.h:
48435 (JSC::NativeErrorConstructor::constructorBody):
48436 * runtime/NativeErrorPrototype.cpp:
48437 (JSC::NativeErrorPrototype::NativeErrorPrototype):
48438 (JSC::NativeErrorPrototype::constructorBody):
48439 * runtime/NativeErrorPrototype.h:
48440 * runtime/StringObject.cpp:
48441 * runtime/StringObject.h:
48442 (JSC::StringObject::create):
48443 * runtime/StringObjectThatMasqueradesAsUndefined.h:
48444 (JSC::StringObjectThatMasqueradesAsUndefined::create):
48445 (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
48446 * runtime/StringPrototype.cpp:
48447 (JSC::StringPrototype::StringPrototype):
48448 * runtime/StringPrototype.h:
48449 (JSC::StringPrototype::create):
48451 2011-08-10 Filip Pizlo <fpizlo@apple.com>
48453 DFG non-speculative JIT does not inline the double case of ValueAdd
48454 https://bugs.webkit.org/show_bug.cgi?id=66025
48456 Reviewed by Gavin Barraclough.
48458 This is a 1.3% win on Kraken overall, with >=8% speed-ups on a few
48459 benchmarks (imaging-darkroom, stanford-crypto-pbkdf2,
48460 stanford-crypto-sha256-iterative). It looks like it might have
48461 a speed-up in SunSpider (though not statistically significant or
48462 particularly reproducible) and a slight slow-down in V8 (0.14%,
48463 not statistically significant). It does slow down v8-crypto by
48466 * dfg/DFGJITCodeGenerator.cpp:
48467 (JSC::DFG::JITCodeGenerator::isKnownInteger):
48468 (JSC::DFG::JITCodeGenerator::isKnownNumeric):
48469 * dfg/DFGNonSpeculativeJIT.cpp:
48470 (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp):
48471 (JSC::DFG::NonSpeculativeJIT::basicArithOp):
48472 * dfg/DFGOperations.cpp:
48474 2011-08-18 Filip Pizlo <fpizlo@apple.com>
48476 [jsfunfuzz] DFG speculative JIT does divide-by-zero checks incorrectly
48477 https://bugs.webkit.org/show_bug.cgi?id=66426
48479 Reviewed by Oliver Hunt.
48481 Changed the branchTestPtr to branchTest32.
48483 * dfg/DFGSpeculativeJIT.cpp:
48484 (JSC::DFG::SpeculativeJIT::compile):
48486 2011-08-17 Thouraya ANDOLSI <thouraya.andolsi@st.com>
48488 https://bugs.webkit.org/show_bug.cgi?id=66379
48489 implements load32WithCompactAddressOffsetPatch function
48490 and fixes store32 and moveWithPatch functions for SH4 platforms.
48492 Reviewed by Gavin Barraclough.
48494 * assembler/MacroAssemblerSH4.h:
48495 (JSC::MacroAssemblerSH4::rshift32):
48496 (JSC::MacroAssemblerSH4::store32):
48497 (JSC::MacroAssemblerSH4::load32WithCompactAddressOffsetPatch):
48498 (JSC::MacroAssemblerSH4::moveWithPatch):
48499 * assembler/SH4Assembler.h:
48500 (JSC::SH4Assembler::movlMemRegCompact):
48501 (JSC::SH4Assembler::readPointer):
48502 (JSC::SH4Assembler::repatchCompact):
48505 2011-08-17 Filip Pizlo <fpizlo@apple.com>
48507 JSC verbose debugging output sometimes doesn't work as expected.
48508 https://bugs.webkit.org/show_bug.cgi?id=66107
48510 Reviewed by Gavin Barraclough.
48512 Hardened the CodeBlock::dump() code so that it no longer crashes. Improved
48513 the DFG verbose code so that it prints slightly more useful information.
48515 * assembler/LinkBuffer.h:
48516 (JSC::LinkBuffer::debugSize):
48517 * bytecode/CodeBlock.cpp:
48518 (JSC::valueToSourceString):
48519 (JSC::CodeBlock::dump):
48520 * bytecode/CodeBlock.h:
48521 (JSC::CodeBlock::numberOfRegExps):
48522 * dfg/DFGJITCompiler.cpp:
48523 (JSC::DFG::JITCompiler::link):
48525 2011-08-16 Michael Saboff <msaboff@apple.com>
48527 Crash in Structure::visitChildren running iAd.js regression test suite under memory pressure
48528 https://bugs.webkit.org/show_bug.cgi?id=66351
48530 JIT::privateCompilePutByIdTransition expects that regT0 and regT1
48531 have the basePayload and baseTag respectively. In some cases,
48532 we may get to this generated code with one or both of these
48533 registers trash. One know case is that regT0 on ARM may be
48534 trashed as regT0 (r0) is also arg0 and can be overrun with sp due
48535 to calls to JIT::restoreReturnAddress(). This patch uses the
48536 values on the stack. A longer term solution is to work out all
48537 cases so that the register entry assumptions can assured.
48539 While fixing this, also determined that the additional stack offset
48540 of sizeof(void*) is not needed for ARM.
48542 Reviewed by Gavin Barraclough.
48544 * jit/JITPropertyAccess32_64.cpp:
48545 (JSC::JIT::privateCompilePutByIdTransition):
48547 2011-08-15 Gavin Barraclough <barraclough@apple.com>
48549 https://bugs.webkit.org/show_bug.cgi?id=66263
48550 DFG JIT does not always zero extend boolean result of DFG operations
48552 Reviewed by Sam Weinig.
48554 * dfg/DFGOperations.cpp:
48555 * dfg/DFGOperations.h:
48556 - Change bool return values to a 64-bit type.
48558 2011-08-15 Gavin Barraclough <barraclough@apple.com>
48560 Crash accessing static property on sealed object
48561 https://bugs.webkit.org/show_bug.cgi?id=66242
48563 Reviewed by Sam Weinig.
48565 * runtime/JSObject.h:
48566 (JSC::JSObject::putDirectInternal):
48567 - should only check isExtensible if checkReadOnly.
48569 2011-08-15 Sam Weinig <sam@webkit.org>
48571 Fix release build when building with Clang.
48573 Reviewed by Anders Carlsson.
48575 * runtime/Identifier.cpp:
48576 (JSC::Identifier::checkCurrentIdentifierTable):
48577 Add NO_RETURN_DUE_TO_CRASH.
48579 2011-08-15 Oliver Varga <Varga.Oliver@stud.u-szeged.hu>
48581 Reviewed by Nikolas Zimmermann.
48583 Speed up SVGSMILElement::findInstanceTime.
48584 https://bugs.webkit.org/show_bug.cgi?id=61025
48586 Add a new parameter to StdlibExtras.h::binarySerarch function
48587 to also handle cases when the array does not contain the key value.
48588 This is needed for an svg function.
48590 * wtf/StdLibExtras.h:
48591 (WTF::binarySearch):
48593 2011-08-13 Sam Weinig <sam@webkit.org>
48595 Add back 0xbbadbeef to CRASH to allow for old habits
48596 https://bugs.webkit.org/show_bug.cgi?id=66190
48598 Reviewed by David Kilzer.
48600 * wtf/Assertions.h:
48601 Add back the assignment to the memory address 0xbbadbeef in the CRASH
48602 macro, as it does not cause issue in the clang static analyzer and many
48603 people use its presence in crash reports to easily identify ASSERTs.
48605 2011-08-13 Sam Weinig <sam@webkit.org>
48607 Fix a bunch of minor bugs caught by the clang static analyzer in JavaScriptCore
48608 https://bugs.webkit.org/show_bug.cgi?id=66182
48610 Reviewed by Dan Bernstein.
48612 Fixes 10 warnings in JavaScriptCore and 2 in testapi.
48614 * API/tests/testapi.c:
48616 Remove dead variables.
48618 * dfg/DFGGraph.cpp:
48619 (JSC::DFG::Graph::dump):
48620 Initialize hasPrinted and silence an unused warning by casting to void (Ok here
48621 since it is debug code and I want to keep it clear that if other cases are added,
48622 the hasPrinted flag would be needed).
48626 The variable "de" in the else block is always zero, so there is no reason to
48629 2011-08-12 Sam Weinig <sam@webkit.org>
48631 Use __builtin_trap() for CRASH when building with clang
48632 https://bugs.webkit.org/show_bug.cgi?id=66152
48634 Reviewed by Anders Carlsson.
48636 * wtf/Assertions.h:
48637 Add Clang specific CRASH macro that calls __builtin_trap() instead
48638 of silly techniques to crash. This allows the static analyzer to understand
48639 that we are intentionally crashing. As a result, we need to mark some functions
48642 Also adds a macros that annotates a function as never returning due to ASSERT or CRASH.
48645 Add COMPILIER(CLANG) and fix some formatting and spelling mistakes.
48647 * wtf/FastMalloc.cpp:
48648 (WTF::Internal::fastMallocMatchFailed):
48649 Add NO_RETURN_DUE_TO_CRASH.
48651 * yarr/YarrParser.h:
48652 (JSC::Yarr::Parser::CharacterClassParserDelegate::assertionWordBoundary):
48653 (JSC::Yarr::Parser::CharacterClassParserDelegate::atomBackReference):
48654 Add NO_RETURN_DUE_TO_ASSERT.
48656 2011-08-12 Filip Pizlo <fpizlo@apple.com>
48658 DFG JIT has inconsistent use of boxDouble and unboxDouble,
48659 inconsistent use of assertions regarding doubles, and those
48660 assertions are not turned on in debug builds
48661 https://bugs.webkit.org/show_bug.cgi?id=66160
48663 Reviewed by Gavin Barraclough.
48665 JIT assertions are now turned on in debug builds. JIT
48666 assertions are now used for boxing and unboxing doubles, and boxing
48667 and unboxing no longer involves code duplication.
48669 * dfg/DFGJITCodeGenerator.cpp:
48670 (JSC::DFG::JITCodeGenerator::fillDouble):
48671 * dfg/DFGJITCodeGenerator.h:
48672 (JSC::DFG::JITCodeGenerator::boxDouble):
48673 (JSC::DFG::JITCodeGenerator::unboxDouble):
48674 * dfg/DFGJITCompiler.cpp:
48675 (JSC::DFG::JITCompiler::fillNumericToDouble):
48676 (JSC::DFG::GeneralizedRegister::moveTo):
48677 (JSC::DFG::GeneralizedRegister::swapWith):
48678 * dfg/DFGJITCompiler.h:
48679 (JSC::DFG::JITCompiler::boxDouble):
48680 (JSC::DFG::JITCompiler::unboxDouble):
48682 * dfg/DFGNonSpeculativeJIT.cpp:
48683 (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp):
48684 (JSC::DFG::NonSpeculativeJIT::compile):
48685 * dfg/DFGSpeculativeJIT.cpp:
48686 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
48687 (JSC::DFG::SpeculativeJIT::convertToDouble):
48689 2011-08-12 Mark Rowe <mrowe@apple.com>
48691 Be more forward-looking in the choice of compiler.
48693 Rubber-stamped by Jon Honeycutt.
48695 * Configurations/CompilerVersion.xcconfig:
48697 2011-08-12 Kalev Lember <kalevlember@gmail.com>
48699 [GTK] Fix non-pthreads build after r91906.
48700 https://bugs.webkit.org/show_bug.cgi?id=66151
48702 Reviewed by David Levin.
48704 r91906 broke the non-pthreads GTK+ build by including a header which
48705 doesn't exist. Fix it by including DateMath.h instead of DateMap.h.
48707 * wtf/gtk/ThreadingGtk.cpp:
48709 2011-08-12 Mark Rowe <mrowe@apple.com>
48711 Update some configuration settings that were missed back in r92432.
48713 * Configurations/CompilerVersion.xcconfig:
48715 2011-08-12 Filip Pizlo <fpizlo@apple.com>
48717 REGRESSION (r91610?): Bing Maps fail to initialize (InvalidOperation:
48719 https://bugs.webkit.org/show_bug.cgi?id=66038
48721 Reviewed by Gavin Barraclough.
48723 Simplest and lowest-impact fix for the case where the spilled format
48724 of a DFG node differs from the register format: if the format is
48725 converted then indicate that the spilled value is no longer valid
48726 ("kill the spill").
48728 * dfg/DFGGenerationInfo.h:
48729 (JSC::DFG::GenerationInfo::killSpilled):
48730 * dfg/DFGJITCodeGenerator.cpp:
48731 (JSC::DFG::JITCodeGenerator::fillDouble):
48732 * dfg/DFGSpeculativeJIT.cpp:
48733 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
48735 2011-08-12 Sam Weinig <sam@webkit.org>
48737 Move compiler specific macros to their own header
48738 https://bugs.webkit.org/show_bug.cgi?id=66119
48740 Reviewed by Anders Carlsson.
48742 * JavaScriptCore.gypi:
48743 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
48744 * JavaScriptCore.xcodeproj/project.pbxproj:
48745 * wtf/CMakeLists.txt:
48748 * wtf/AlwaysInline.h:
48749 Move the contents of this file (which no longer was just about ALWAYS_INLINE) to
48750 Compiler.h. We can remove this file in a later commit.
48752 * wtf/Compiler.h: Added.
48753 Put all compiler specific checks and features in this file.
48756 Move COMPILER macro and definitions (and the odd WARN_UNUSED_RETURN compiler feature)
48757 to Compiler.h. Include Compiler.h since it is necessary.
48759 2011-08-11 Filip Pizlo <fpizlo@apple.com>
48761 DFG JIT-specific structure stub info code offset fields are signed
48762 8-bit, but it is possible for the offsets to be greater than 127
48763 https://bugs.webkit.org/show_bug.cgi?id=66122
48765 Reviewed by Gavin Barraclough.
48767 * bytecode/StructureStubInfo.h:
48768 * dfg/DFGJITCodeGenerator.cpp:
48769 (JSC::DFG::JITCodeGenerator::cachedGetById):
48770 (JSC::DFG::JITCodeGenerator::cachedPutById):
48772 2011-08-11 Filip Pizlo <fpizlo@apple.com>
48774 DFG JIT speculation failure code sometimes picks the wrong register
48775 as a scratch register.
48776 https://bugs.webkit.org/show_bug.cgi?id=66104
48778 Reviewed by Gavin Barraclough.
48780 Hardened the code with more assertions and fixed the bug. Now a
48781 spilled register is only used for scratch if it also isn't being
48782 used for shuffling.
48784 * dfg/DFGJITCompiler.cpp:
48785 (JSC::DFG::ShuffledRegister::handleNonCyclingPermutation):
48786 (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):
48788 2011-08-11 Sheriff Bot <webkit.review.bot@gmail.com>
48790 Unreviewed, rolling out r92880.
48791 http://trac.webkit.org/changeset/92880
48792 https://bugs.webkit.org/show_bug.cgi?id=66123
48794 Breaks compile in VS2010 (Requested by jamesr_ on #webkit).
48796 * wtf/PassRefPtr.h:
48798 2011-08-11 Mark Rowe <mrowe@apple.com>
48800 Don't conditionalize the use of -fomit-frame-pointer on compiler version as
48801 all of our supported compilers are now new enough to have the same, sane behavior.
48803 Rubber-stamped by Sam Weinig.
48805 * Configurations/JavaScriptCore.xcconfig:
48807 2011-08-11 Filip Pizlo <fpizlo@apple.com>
48809 DFG JIT verbose mode does not report the generated types of nodes
48810 https://bugs.webkit.org/show_bug.cgi?id=65830
48812 Reviewed by Sam Weinig.
48814 Added code that prints the type selected for each node's result.
48816 * dfg/DFGGenerationInfo.h:
48817 (JSC::DFG::dataFormatToString):
48818 * dfg/DFGNonSpeculativeJIT.cpp:
48819 (JSC::DFG::NonSpeculativeJIT::compile):
48820 * dfg/DFGSpeculativeJIT.cpp:
48821 (JSC::DFG::SpeculativeJIT::compile):
48823 2011-08-11 James Robinson <jamesr@chromium.org>
48825 nullptr can't be used for PassRefPtr
48826 https://bugs.webkit.org/show_bug.cgi?id=66024
48828 Reviewed by Anders Carlsson.
48830 * wtf/PassRefPtr.h:
48831 (WTF::PassRefPtr::PassRefPtr):
48833 2011-08-11 Daniel Bates <dbates@rim.com>
48835 Removed unused variable in StackBounds::initialize() to resolve
48836 compiler warning when building on QNX.
48837 https://bugs.webkit.org/show_bug.cgi?id=66072
48839 Reviewed by Antonio Gomes.
48841 * wtf/StackBounds.cpp:
48842 (WTF::StackBounds::initialize):
48844 2011-08-11 Devdatta Deshpande <pwjd73@motorola.com>
48846 Implementation of monotonically increasing clock on GTK
48847 https://bugs.webkit.org/show_bug.cgi?id=62175
48849 Reviewed by Martin Robinson.
48851 * wtf/CurrentTime.cpp:
48852 (WTF::monotonicallyIncreasingTime):
48853 The default implementation of monotonicallyIncreasingTime only
48854 guarantees the result to be non-decreasing.
48855 If the system time is changed to past then default implementation will
48856 still fail and WebCore timers will not fire.
48858 2011-08-10 Geoffrey Garen <ggaren@apple.com>
48860 Removed some incorrect code that was dead.
48862 Reviewed by Oliver Hunt.
48864 clearSingleTransition() wasn't resetting m_data. Luckily,
48865 no one cares, because its caller was unused. Removed both.
48867 * runtime/Structure.cpp:
48868 * runtime/StructureTransitionTable.h:
48869 (JSC::StructureTransitionTable::~StructureTransitionTable):
48871 2011-08-10 Filip Pizlo <fpizlo@apple.com>
48873 REGRESSION(r92670-r92744): WebKit crashes when opening Gmail
48874 https://bugs.webkit.org/show_bug.cgi?id=66010
48876 Reviewed by Oliver Hunt.
48878 Made sure that Construct calls use() on the this argument.
48880 * dfg/DFGJITCodeGenerator.cpp:
48881 (JSC::DFG::JITCodeGenerator::emitCall):
48883 2011-08-10 Mark Hahnenberg <mhahnenberg@apple.com>
48885 JSC should always throw when function arg list is too long
48886 https://bugs.webkit.org/show_bug.cgi?id=65869
48888 Reviewed by Oliver Hunt.
48890 Changed the behavior of the interpreter and JIT to throw an exception
48891 when too many arguments are passed rather than truncating the list. Added
48892 a new method to create a "Too many arguments." exception used by this
48895 * interpreter/Interpreter.cpp:
48896 (JSC::Interpreter::privateExecute):
48897 * jit/JITStubs.cpp:
48898 (JSC::DEFINE_STUB_FUNCTION):
48899 * runtime/ExceptionHelpers.cpp:
48900 (JSC::createTooManyParamsError):
48901 * runtime/ExceptionHelpers.h:
48903 2011-08-10 Oliver Hunt <oliver@apple.com>
48905 Make GC checks more aggressive in release builds
48906 https://bugs.webkit.org/show_bug.cgi?id=66001
48908 Reviewed by Gavin Barraclough.
48910 * heap/HandleHeap.cpp:
48911 (JSC::HandleHeap::visitStrongHandles):
48912 (JSC::HandleHeap::visitWeakHandles):
48913 (JSC::HandleHeap::finalizeWeakHandles):
48914 (JSC::HandleHeap::writeBarrier):
48915 (JSC::HandleHeap::isLiveNode):
48916 (JSC::HandleHeap::isValidWeakNode):
48917 Increase handle heap validation logic, and make some of
48918 the crashes trigger in release builds as well as debug.
48919 * heap/HandleHeap.h:
48920 (JSC::HandleHeap::allocate):
48921 (JSC::HandleHeap::makeWeak):
48923 * runtime/JSGlobalData.cpp:
48924 (WTF::Recompiler::operator()):
48925 * runtime/JSGlobalObject.cpp:
48926 (JSC::JSGlobalObject::visitChildren):
48927 Fix GC bugs found while testing this patch
48929 2011-08-10 Oliver Hunt <oliver@apple.com>
48931 JSEvaluteScript does not return the correct object when given JSONP data
48932 https://bugs.webkit.org/show_bug.cgi?id=66003
48934 Reviewed by Gavin Barraclough.
48936 Make sure we propagate the result of the function call rather than the
48939 * interpreter/Interpreter.cpp:
48940 (JSC::Interpreter::execute):
48942 2011-08-10 Filip Pizlo <fpizlo@apple.com>
48944 DFG JIT heap prediction causes regressions when combined with
48945 aggressive integer prediction
48946 https://bugs.webkit.org/show_bug.cgi?id=65954
48948 Reviewed by Gavin Barraclough.
48950 Disabled heap prediction, but did not remove the capability.
48951 This improves V8 crypto performance by 20%.
48954 (JSC::DFG::Graph::predict):
48956 2011-08-09 Filip Pizlo <fpizlo@apple.com>
48958 DFG JIT does not speculative integers as aggressively as it should
48959 https://bugs.webkit.org/show_bug.cgi?id=65949
48961 Reviewed by Gavin Barraclough.
48963 Added a tree walk to propagate integer predictions through arithmetic
48966 This is a 71% speed-up on Kraken's imaging-gaussian-blur, which
48967 translates to a 19% speed-up on Kraken overall. It's neutral on
48970 * dfg/DFGByteCodeParser.cpp:
48971 (JSC::DFG::ByteCodeParser::predictInt32):
48973 2011-08-09 Filip Pizlo <fpizlo@apple.com>
48975 DFG JIT has no way of propagating predictions to loads and calls
48976 https://bugs.webkit.org/show_bug.cgi?id=65883
48978 Reviewed by Gavin Barraclough.
48980 This introduces the capability to store predictions on graph
48981 nodes. To save space while being somewhat consistent, the
48982 prediction is always stored in the second OpInfo slot (since
48983 a GetById will use the first one for the identifier). This
48984 change is a natural extension of r92593 (global variable
48987 This is a 1.5% win on V8 in the arithmetic mean, and a 0.6%
48988 win on V8 in the geometric mean. It is neutral on SunSpider
48989 and Kraken. Interestingly, on V8 it regresses crypto by 3%
48990 while progressing deltablue and richards by 2.6% and 4.3%,
48993 * dfg/DFGByteCodeParser.cpp:
48994 (JSC::DFG::ByteCodeParser::addToGraph):
48995 (JSC::DFG::ByteCodeParser::addCall):
48996 (JSC::DFG::ByteCodeParser::parseBlock):
48997 * dfg/DFGGraph.cpp:
48998 (JSC::DFG::Graph::dump):
49000 (JSC::DFG::Graph::predict):
49001 (JSC::DFG::Graph::getPrediction):
49003 (JSC::DFG::isCellPrediction):
49004 (JSC::DFG::isArrayPrediction):
49005 (JSC::DFG::isInt32Prediction):
49006 (JSC::DFG::isDoublePrediction):
49007 (JSC::DFG::isNumberPrediction):
49008 (JSC::DFG::predictionToString):
49009 (JSC::DFG::Node::Node):
49010 (JSC::DFG::Node::hasPrediction):
49011 (JSC::DFG::Node::getPrediction):
49012 (JSC::DFG::Node::predict):
49014 2011-08-09 Filip Pizlo <fpizlo@apple.com>
49016 DFG JIT passes the this argument to constructors even though
49018 https://bugs.webkit.org/show_bug.cgi?id=65943
49020 Reviewed by Gavin Barraclough.
49022 * dfg/DFGJITCodeGenerator.cpp:
49023 (JSC::DFG::JITCodeGenerator::emitCall):
49025 2011-08-09 Chao-ying Fu <fu@mips.com>
49027 Fix one MIPS instruction to call JITStubThunked_##op
49028 https://bugs.webkit.org/show_bug.cgi?id=65942
49030 Reviewed by Gavin Barraclough.
49032 Changed "bal" to "jalr" for a possible processor mode change from
49035 * jit/JITStubs.cpp:
49037 2011-08-09 Filip Pizlo <fpizlo@apple.com>
49039 DFG JIT failure loading web site
49040 https://bugs.webkit.org/show_bug.cgi?id=65930
49042 Reviewed by Oliver Hunt.
49044 Put the use() call after the fpr()/gpr() calls, since doing otherwise
49045 breaks the register allocator.
49047 * dfg/DFGNonSpeculativeJIT.cpp:
49048 (JSC::DFG::NonSpeculativeJIT::compile):
49050 2011-08-09 Mark Hahnenberg <mhahnenberg@apple.com>
49052 Add ParentClass typedef in all JSC classes
49053 https://bugs.webkit.org/show_bug.cgi?id=65731
49055 Reviewed by Oliver Hunt.
49057 Just added the Base typedefs in all the classes that are a subclass of JSCell
49058 to point at their parent classes. This is a change to support future changes to the way
49059 constructors and destructors are implemented in JS objects, among other things.
49061 * API/JSCallbackConstructor.h:
49062 * API/JSCallbackFunction.h:
49063 * API/JSCallbackObject.h:
49064 (JSC::JSCallbackObject::createStructure):
49065 (JSC::JSCallbackObject::visitChildren):
49066 * API/JSCallbackObjectFunctions.h:
49067 (JSC::::asCallbackObject):
49068 (JSC::::JSCallbackObject):
49070 (JSC::::className):
49071 (JSC::::getOwnPropertySlot):
49072 (JSC::::getOwnPropertyDescriptor):
49074 (JSC::::deleteProperty):
49075 (JSC::::getConstructData):
49076 (JSC::::construct):
49077 (JSC::::hasInstance):
49078 (JSC::::getCallData):
49080 (JSC::::getOwnPropertyNames):
49083 (JSC::::setPrivate):
49084 (JSC::::getPrivate):
49086 (JSC::::getStaticValue):
49087 (JSC::::staticFunctionGetter):
49088 (JSC::::callbackGetter):
49089 * debugger/DebuggerActivation.h:
49091 * runtime/Arguments.h:
49092 * runtime/ArrayConstructor.h:
49093 * runtime/ArrayPrototype.h:
49094 * runtime/BooleanConstructor.h:
49095 * runtime/BooleanObject.h:
49096 * runtime/BooleanPrototype.h:
49097 * runtime/DateConstructor.h:
49098 * runtime/DateInstance.h:
49099 * runtime/DatePrototype.h:
49100 * runtime/Error.cpp:
49101 * runtime/ErrorConstructor.h:
49102 * runtime/ErrorInstance.h:
49103 * runtime/ErrorPrototype.h:
49104 * runtime/ExceptionHelpers.cpp:
49105 * runtime/Executable.h:
49106 * runtime/FunctionConstructor.h:
49107 * runtime/FunctionPrototype.h:
49108 * runtime/GetterSetter.h:
49109 * runtime/InternalFunction.h:
49110 * runtime/JSAPIValueWrapper.h:
49111 * runtime/JSActivation.h:
49112 * runtime/JSArray.h:
49113 * runtime/JSFunction.h:
49114 * runtime/JSGlobalObject.h:
49115 * runtime/JSNotAnObject.h:
49116 * runtime/JSONObject.h:
49117 * runtime/JSObject.h:
49118 * runtime/JSPropertyNameIterator.h:
49119 * runtime/JSStaticScopeObject.h:
49120 * runtime/JSString.h:
49121 * runtime/JSVariableObject.h:
49122 * runtime/JSWrapperObject.h:
49123 * runtime/MathObject.h:
49124 * runtime/NativeErrorConstructor.h:
49125 * runtime/NativeErrorPrototype.h:
49126 * runtime/NumberConstructor.h:
49127 * runtime/NumberObject.h:
49128 * runtime/NumberPrototype.h:
49129 * runtime/ObjectConstructor.h:
49130 * runtime/ObjectPrototype.h:
49131 * runtime/RegExp.h:
49132 * runtime/RegExpConstructor.h:
49133 * runtime/RegExpMatchesArray.h:
49134 * runtime/RegExpObject.h:
49135 (JSC::RegExpObject::create):
49136 * runtime/RegExpPrototype.h:
49137 * runtime/ScopeChain.h:
49138 * runtime/StrictEvalActivation.h:
49139 * runtime/StringConstructor.h:
49140 * runtime/StringObject.h:
49141 * runtime/StringObjectThatMasqueradesAsUndefined.h:
49142 * runtime/StringPrototype.h:
49143 * runtime/Structure.h:
49144 * runtime/StructureChain.h:
49146 2011-08-08 Oliver Hunt <oliver@apple.com>
49148 Using mprotect to create guard pages breaks our use of madvise to release executable memory
49149 https://bugs.webkit.org/show_bug.cgi?id=65870
49151 Reviewed by Gavin Barraclough.
49153 Use mmap rather than mprotect to clear guard page permissions.
49155 * wtf/OSAllocatorPosix.cpp:
49156 (WTF::OSAllocator::reserveAndCommit):
49158 2011-08-08 Oliver Hunt <oliver@apple.com>
49160 Non-extensibility does not prevent mutating [[Prototype]]
49161 https://bugs.webkit.org/show_bug.cgi?id=65832
49163 Reviewed by Gavin Barraclough.
49165 Disallow mutation of __proto__ on objects that are not extensible.
49167 * runtime/JSObject.cpp:
49168 (JSC::JSObject::put):
49170 2011-08-08 Filip Pizlo <fpizlo@apple.com>
49172 DFG JIT does not track speculation decisions for global variables
49173 https://bugs.webkit.org/show_bug.cgi?id=65825
49175 Reviewed by Gavin Barraclough.
49177 Added the capability to track predictions for global variables, and
49178 ensured that code can abstract over the source of prediction (local
49179 versus global variable) wherever it is appropriate to do so. Also
49180 cleaned up the code in SpeculativeJIT that decides how to speculate
49181 based on recorded predictions (for example instead of using isInteger,
49182 which makes sense for local predictions where the GetLocal would
49183 return an integer value, we now tend to use shouldSpeculateInteger,
49184 which checks if the value is either already an integer or should be
49185 speculated to be an integer).
49187 This is an 0.8% win on SunSpider, almost entirely thanks to a 25%
49188 win on controlflow-recursive. It's also a 4.8% win on v8-crypto.
49190 * dfg/DFGByteCodeParser.cpp:
49191 (JSC::DFG::ByteCodeParser::predictArray):
49192 (JSC::DFG::ByteCodeParser::predictInt32):
49193 (JSC::DFG::ByteCodeParser::parseBlock):
49194 * dfg/DFGGraph.cpp:
49195 (JSC::DFG::Graph::dump):
49197 (JSC::DFG::Graph::predictGlobalVar):
49198 (JSC::DFG::Graph::predict):
49199 (JSC::DFG::Graph::getGlobalVarPrediction):
49200 (JSC::DFG::Graph::getPrediction):
49201 * dfg/DFGSpeculativeJIT.cpp:
49202 (JSC::DFG::SpeculativeJIT::compile):
49203 * dfg/DFGSpeculativeJIT.h:
49204 (JSC::DFG::SpeculativeJIT::shouldSpeculateInteger):
49205 (JSC::DFG::SpeculativeJIT::shouldSpeculateDouble):
49207 2011-08-07 Martin Robinson <mrobinson@igalia.com>
49209 Distribution fix for GTK+.
49211 * GNUmakefile.list.am: Strip removed files from the source list.
49213 2011-08-06 Gavin Barraclough <barraclough@apple.com>
49215 https://bugs.webkit.org/show_bug.cgi?id=65821
49216 Don't form identifiers the first time a string is used as a property name.
49218 Reviewed by Oliver Hunt.
49220 This is a 1% win on SunSpider.
49222 * dfg/DFGOperations.cpp:
49223 - Use fastGetOwnProperty.
49224 * jit/JITStubs.cpp:
49225 (JSC::DEFINE_STUB_FUNCTION):
49226 - Use fastGetOwnProperty.
49227 * runtime/JSCell.h:
49228 * runtime/JSObject.h:
49229 (JSC::JSCell::fastGetOwnProperty):
49230 - Fast call to get a property without creating an identifier the first time.
49231 * runtime/PropertyMapHashTable.h:
49232 (JSC::PropertyTable::find):
49233 (JSC::PropertyTable::findWithString):
49234 - Add interface to look up by either strinsg or identifiers.
49235 * runtime/Structure.h:
49236 (JSC::Structure::get):
49237 - Add a get() call that takes a UString, not an Identifier.
49238 * wtf/text/StringImpl.h:
49239 (WTF::StringImpl::hasHash):
49240 - Add a call to check if the has has been set (to detect the first use as a property name).
49242 2011-08-06 Aron Rosenberg <arosenberg@logitech.com>
49244 Reviewed by Benjamin Poulain.
49246 [Qt] Fix build with Intel compiler on Windows
49247 https://bugs.webkit.org/show_bug.cgi?id=65088
49249 Intel compiler needs .lib suffixes instead of .a
49250 Intel compiler doesn't support nullptr
49251 Intel compiler supports unsized arrays
49253 * JavaScriptCore.pri:
49258 2011-08-05 Gavin Barraclough <barraclough@apple.com>
49260 String replace with the empty string means string removal
49261 https://bugs.webkit.org/show_bug.cgi?id=65799
49263 Reviewed by Sam Weinig.
49265 Optimization for String.prototype.replace([RegExp], ""), this improves v8-regexp by ~3%.
49267 * runtime/StringPrototype.cpp:
49268 (JSC::jsSpliceSubstrings):
49269 (JSC::stringProtoFuncReplace):
49271 2011-08-05 Noel Gordon <noel.gordon@gmail.com>
49273 [Chromium] Remove JSZombie references from gyp project files.
49274 https://bugs.webkit.org/show_bug.cgi?id=65798
49276 JSC runtime/JSZombie.{cpp,h} were removed in r92046. Remove references to these
49277 file names from the gyp projects.
49279 Reviewed by Darin Adler.
49281 * JavaScriptCore.gypi: zombies be gone.
49283 2011-08-05 Mark Rowe <mrowe@apple.com>
49285 <http://webkit.org/b/65785> ThreadRestrictionVerifier needs a mode where an object
49286 is tied to a particular dispatch queue
49288 A RefCounted object can be opted in to this mode by calling setDispatchQueueForVerifier
49289 with the dispatch queue it will be tied to. This will cause ThreadRestrictionVerifier
49290 to ensure that all operations are performed on the given dispatch queue.
49292 Reviewed by Anders Carlsson.
49294 * wtf/RefCounted.h:
49295 (WTF::RefCountedBase::setDispatchQueueForVerifier):
49296 * wtf/ThreadRestrictionVerifier.h:
49297 (WTF::ThreadRestrictionVerifier::ThreadRestrictionVerifier):
49298 (WTF::ThreadRestrictionVerifier::~ThreadRestrictionVerifier):
49299 (WTF::ThreadRestrictionVerifier::setDispatchQueueMode):
49300 (WTF::ThreadRestrictionVerifier::setShared):
49301 (WTF::ThreadRestrictionVerifier::isSafeToUse):
49303 2011-08-05 Oliver Hunt <oliver@apple.com>
49305 Inline allocation of function objects
49306 https://bugs.webkit.org/show_bug.cgi?id=65779
49308 Reviewed by Gavin Barraclough.
49310 Inline allocation and initilisation of function objects
49311 in generated code. This ended up being a 60-70% improvement
49312 in function allocation performance. This improvement shows
49313 up as a ~2% improvement in 32bit sunspider and V8, but is a
49316 We currently don't inline the allocation of named function
49317 expressions, as that requires being able to gc allocate a
49321 (JSC::JIT::privateCompileSlowCases):
49323 (JSC::JIT::emitStoreCell):
49324 * jit/JITInlineMethods.h:
49325 (JSC::JIT::emitAllocateBasicJSObject):
49326 (JSC::JIT::emitAllocateJSFinalObject):
49327 (JSC::JIT::emitAllocateJSFunction):
49328 * jit/JITOpcodes.cpp:
49329 (JSC::JIT::emit_op_new_func):
49330 (JSC::JIT::emitSlow_op_new_func):
49331 (JSC::JIT::emit_op_new_func_exp):
49332 (JSC::JIT::emitSlow_op_new_func_exp):
49333 * jit/JITOpcodes32_64.cpp:
49334 Removed duplicate implementation of op_new_func and op_new_func_exp
49335 * runtime/JSFunction.h:
49336 (JSC::JSFunction::offsetOfScopeChain):
49337 (JSC::JSFunction::offsetOfExecutable):
49339 2011-08-04 David Levin <levin@chromium.org>
49341 CStringBuffer should have thread safety checks turned on.
49342 https://bugs.webkit.org/show_bug.cgi?id=58093
49344 Reviewed by Dmitry Titov.
49346 * wtf/text/CString.h:
49347 (WTF::CStringBuffer::CStringBuffer): Removed the ifdef that
49348 turned this off for Chromium.
49350 2011-08-04 Mark Rowe <mrowe@apple.com>
49352 Future-proof Xcode configuration settings.
49354 * Configurations/Base.xcconfig:
49355 * Configurations/DebugRelease.xcconfig:
49356 * Configurations/JavaScriptCore.xcconfig:
49357 * Configurations/Version.xcconfig:
49359 2011-08-04 Mark Hahnenberg <mhahnenberg@apple.com>
49361 Interpreter can potentially GC in the middle of initializing a structure chain
49362 https://bugs.webkit.org/show_bug.cgi?id=65638
49364 Reviewed by Oliver Hunt.
49366 Moved the allocation of a prototype StructureChain before the initialization of
49367 the structure chain within the interpreter that was causing intermittent GC crashes.
49369 * interpreter/Interpreter.cpp:
49370 (JSC::Interpreter::tryCachePutByID):
49373 2011-08-04 Filip Pizlo <fpizlo@apple.com>
49375 Eval handling attempts literal parsing even when the eval
49376 string is in the cache
49377 https://bugs.webkit.org/show_bug.cgi?id=65675
49379 Reviewed by Oliver Hunt.
49381 This is a 25% speed-up on date-format-tofte and a 1.5% speed-up overall
49382 in SunSpider. It's neutral on V8.
49384 * bytecode/EvalCodeCache.h:
49385 (JSC::EvalCodeCache::tryGet):
49386 (JSC::EvalCodeCache::getSlow):
49387 (JSC::EvalCodeCache::get):
49388 * interpreter/Interpreter.cpp:
49389 (JSC::Interpreter::callEval):
49391 2011-08-03 Mark Rowe <mrowe@apple.com>
49393 Bring some order to FeatureDefines.xcconfig to make it easier to follow.
49395 Reviewed by Sam Weinig.
49397 * Configurations/FeatureDefines.xcconfig:
49399 2011-08-03 Mark Rowe <mrowe@apple.com>
49401 Clean up FeatureDefines.xcconfig to remove some unnecessary conditional settings
49403 Reviewed by Dave Kilzer.
49405 * Configurations/FeatureDefines.xcconfig:
49407 2011-08-03 Filip Pizlo <fpizlo@apple.com>
49409 JSC GC heap size improvement breaks build on some platforms due to
49411 https://bugs.webkit.org/show_bug.cgi?id=65641
49413 Reviewed by Darin Adler.
49415 Fix build on non-x86 platforms, by ensuring that the relevant
49416 parameter always appears to be used even when it isn't.
49420 2011-08-03 Carlos Garcia Campos <cgarcia@igalia.com>
49422 [GTK] Reorganize pkg-config files
49423 https://bugs.webkit.org/show_bug.cgi?id=65548
49425 Reviewed by Martin Robinson.
49428 * javascriptcoregtk.pc.in: Renamed from Source/WebKit/gtk/javascriptcoregtk.pc.in.
49430 2011-08-01 David Levin <levin@chromium.org>
49432 Add asserts to RefCounted to make sure ref/deref happens on the right thread.
49433 https://bugs.webkit.org/show_bug.cgi?id=31639
49435 Reviewed by Dmitry Titov.
49437 * GNUmakefile.list.am: Added new files to the build.
49438 * JavaScriptCore.gypi: Ditto.
49439 * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto.
49440 * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
49441 * jit/ExecutableAllocator.h:
49442 (JSC::ExecutablePool::ExecutablePool): Turned off checks for this
49443 due to not being able to figure out what was guarding it (bug 58091).
49444 * parser/SourceProvider.h:
49445 (JSC::SourceProvider::SourceProvider): Ditto.
49446 * wtf/CMakeLists.txt: Added new files to the build.
49447 * wtf/ThreadRestrictionVerifier.h: Added.
49448 Everything is done in the header to avoid the issue with exports
49449 that are only useful in debug but still needing to export them.
49450 * wtf/RefCounted.h:
49451 (WTF::RefCountedBase::ref): Added checks using the non thread safe verifier.
49452 and filed bug 58171 about making it stricter.
49453 (WTF::RefCountedBase::hasOneRef): Ditto.
49454 (WTF::RefCountedBase::refCount): Ditto.
49455 (WTF::RefCountedBase::setMutexForVerifier): Expose a way to change the checks to be based
49456 on a mutex. This is in the header to avoid adding more exports from JavaScriptCore.
49457 (WTF::RefCountedBase::deprecatedTurnOffVerifier): Temporary way to turn off verification.
49458 Filed bug 58174 to remove this method.
49459 (WTF::RefCountedBase::derefBase):
49460 * wtf/SizeLimits.cpp: Adjusted the debug size check for RefCounted.
49461 * wtf/text/CString.h:
49462 (WTF::CStringBuffer::CStringBuffer): Turned off checks for this while a fix is being
49463 done in Chromium (bug 58093).
49465 2011-08-02 Filip Pizlo <fpizlo@apple.com>
49467 JSC GC may not be able to reuse partially-free blocks after a
49469 https://bugs.webkit.org/show_bug.cgi?id=65585
49471 Reviewed by Darin Adler.
49473 This fixes the linked list management bug. This fix is performance
49474 neutral on SunSpider.
49476 * heap/NewSpace.cpp:
49477 (JSC::NewSpace::removeBlock):
49479 2011-07-30 Oliver Hunt <oliver@apple.com>
49481 Simplify JSFunction creation for functions written in JS
49482 https://bugs.webkit.org/show_bug.cgi?id=65422
49484 Reviewed by Gavin Barraclough.
49486 Remove hash lookups used to write name property and transition
49487 function structure by caching the resultant structure and property
49488 offset in JSGlobalObject. This doesn't impact performance, but
49489 we can use this change to make other improvements later.
49491 * runtime/Executable.cpp:
49492 (JSC::FunctionExecutable::FunctionExecutable):
49493 * runtime/Executable.h:
49494 (JSC::ScriptExecutable::ScriptExecutable):
49495 (JSC::FunctionExecutable::jsName):
49496 * runtime/JSFunction.cpp:
49497 (JSC::JSFunction::JSFunction):
49498 * runtime/JSGlobalObject.cpp:
49499 (JSC::JSGlobalObject::reset):
49500 * runtime/JSGlobalObject.h:
49501 (JSC::JSGlobalObject::namedFunctionStructure):
49502 (JSC::JSGlobalObject::functionNameOffset):
49504 2011-08-02 Filip Pizlo <fpizlo@apple.com>
49506 JSC GC uses dummy cells to avoid having to remember which cells
49507 it has already destroyed
49508 https://bugs.webkit.org/show_bug.cgi?id=65556
49510 Reviewed by Oliver Hunt.
49512 This gets rid of dummy cells, and ensures that it's not necessary
49513 to invoke a destructor on cells that have already been swept. In
49514 the common case, a block knows that either all of its free cells
49515 still need to have destructors called, or none of them do, which
49516 minimizes the amount of branching that needs to happen per cell
49517 when performing a sweep.
49519 This is performance neutral on SunSpider and V8. It is meant as
49520 a stepping stone to simplify the implementation of more
49521 sophisticated sweeping algorithms.
49524 (JSC::CountFunctor::ClearMarks::operator()):
49525 * heap/MarkedBlock.cpp:
49526 (JSC::MarkedBlock::initForCellSize):
49527 (JSC::MarkedBlock::callDestructor):
49528 (JSC::MarkedBlock::specializedReset):
49529 (JSC::MarkedBlock::reset):
49530 (JSC::MarkedBlock::specializedSweep):
49531 (JSC::MarkedBlock::sweep):
49532 (JSC::MarkedBlock::produceFreeList):
49533 (JSC::MarkedBlock::lazySweep):
49534 (JSC::MarkedBlock::blessNewBlockForFastPath):
49535 (JSC::MarkedBlock::blessNewBlockForSlowPath):
49536 (JSC::MarkedBlock::canonicalizeBlock):
49537 * heap/MarkedBlock.h:
49538 (JSC::MarkedBlock::FreeCell::setNoObject):
49539 (JSC::MarkedBlock::setDestructorState):
49540 (JSC::MarkedBlock::destructorState):
49541 (JSC::MarkedBlock::notifyMayHaveFreshFreeCells):
49542 * runtime/JSCell.cpp:
49543 * runtime/JSCell.h:
49544 (JSC::JSCell::JSCell::JSCell):
49545 * runtime/JSGlobalData.cpp:
49546 (JSC::JSGlobalData::JSGlobalData):
49547 (JSC::JSGlobalData::clearBuiltinStructures):
49548 * runtime/JSGlobalData.h:
49549 * runtime/Structure.h:
49551 2011-08-01 Michael Saboff <msaboff@apple.com>
49553 Virtual copying of FastMalloc allocated memory causes madvise MADV_FREE_REUSABLE errors
49554 https://bugs.webkit.org/show_bug.cgi?id=65502
49556 Reviewed by Anders Carlsson.
49558 With the fix of the issues causing madvise MADV_FREE_REUSABLE to fail,
49559 added an assert to the return code of madvise to catch any regressions.
49561 * wtf/TCSystemAlloc.cpp:
49562 (TCMalloc_SystemRelease):
49564 2011-08-02 Anders Carlsson <andersca@apple.com>
49568 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
49570 2011-08-02 Anders Carlsson <andersca@apple.com>
49572 Fix a Windows build error.
49574 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
49576 2011-08-02 Filip Pizlo <fpizlo@apple.com>
49578 JSC GC is far too conservative about growing the heap size, particularly
49579 on desktop platforms
49580 https://bugs.webkit.org/show_bug.cgi?id=65438
49582 Reviewed by Oliver Hunt.
49584 The minimum heap size is now 16MB instead of 512KB, provided all of the
49585 following are true:
49586 a) ENABLE(LARGE_HEAP) is set, which currently only happens on
49587 x86 targets, but could reasonably happen on any platform that is
49588 known to have a decent amount of RAM.
49589 b) JSGlobalData is initialized with HeapSize = LargeHeap, which
49590 currently only happens when it's the JSDOMWindowBase in WebCore or
49591 in the jsc command-line tool.
49593 This is a 4.1% speed-up on SunSpider.
49595 * JavaScriptCore.exp:
49598 (JSC::Heap::collect):
49602 * runtime/JSGlobalData.cpp:
49603 (JSC::JSGlobalData::JSGlobalData):
49604 (JSC::JSGlobalData::createContextGroup):
49605 (JSC::JSGlobalData::create):
49606 (JSC::JSGlobalData::createLeaked):
49607 (JSC::JSGlobalData::sharedInstance):
49608 * runtime/JSGlobalData.h:
49611 2011-08-02 Filip Pizlo <fpizlo@apple.com>
49613 JSC does a GC even when the heap still has free pages
49614 https://bugs.webkit.org/show_bug.cgi?id=65445
49616 Reviewed by Oliver Hunt.
49618 If the high watermark is not reached, then we allocate new blocks as
49619 before. If the current watermark does reach (or exceed) the high
49620 watermark, then we check if there is a block on the free block pool.
49621 If there is, we simply allocation from it. If there isn't, we
49622 invoke a collectin as before. This effectively couples the elastic
49623 scavenging to the collector's decision function. That is, if an
49624 application rapidly varies its heap usage (sometimes using more and
49625 sometimes less) then the collector will not thrash as it used to.
49626 But if heap usage drops and stays low then the scavenger thread and
49627 the GC will eventually reach a kind of consensus: the GC will set
49628 the watermark low because of low heap usage, and the scavenger thread
49629 will steadily eliminate pages from the free page pool, until the size
49630 of the free pool is below the high watermark.
49632 On command-line, this is neutral on SunSpider and Kraken and a 3% win
49633 on V8. In browser, this is a 1% win on V8 and neutral on the other
49637 (JSC::Heap::allocateSlowCase):
49638 (JSC::Heap::allocateBlock):
49641 2011-08-02 Jeff Miller <jeffm@apple.com>
49643 Move WTF_USE_AVFOUNDATION from JavaScriptCore/wtf/platform.h to WebCore/config.h
49644 https://bugs.webkit.org/show_bug.cgi?id=65552
49646 Since this is a WebCore feature, there's no need to define it in JavaScriptCore/wtf/platform.h.
49648 Reviewed by Adam Roben.
49650 * wtf/Platform.h: Removed WTF_USE_AVFOUNDATION.
49652 2011-08-01 Jean-luc Brouillet <jeanluc@chromium.org>
49654 Removing old source files in gyp files that slow build
49655 https://bugs.webkit.org/show_bug.cgi?id=65503
49657 Reviewed by Adam Barth.
49659 A number of stale files are listed in the gyp files. These slow the
49660 build on Visual Studio 2010. Removing them.
49662 * JavaScriptCore.gypi:
49664 2011-07-14 David Levin <levin@chromium.org>
49666 currentThread is too slow!
49667 https://bugs.webkit.org/show_bug.cgi?id=64577
49669 Reviewed by Darin Adler and Dmitry Titov.
49671 The problem is that currentThread results in a pthread_once call which always takes a lock.
49672 With this change, currentThread is 10% faster than isMainThread in release mode and only
49673 5% slower than isMainThread in debug.
49675 * wtf/ThreadIdentifierDataPthreads.cpp:
49676 (WTF::ThreadIdentifierData::initializeOnce): Remove the pthread once stuff
49677 which is no longer needed because this is called from initializeThreading().
49678 (WTF::ThreadIdentifierData::identifier): Remove the initializeKeyOnce call because
49679 intialization of the pthread key should already be done.
49680 (WTF::ThreadIdentifierData::initialize): Ditto.
49681 * wtf/ThreadIdentifierDataPthreads.h:
49682 * wtf/ThreadingPthreads.cpp:
49683 (WTF::initializeThreading): Acquire the pthread key here.
49685 2011-08-01 Filip Pizlo <fpizlo@apple.com>
49687 DFG JIT sometimes creates speculation check data structures that have
49688 invalid information about the format of a register
49689 https://bugs.webkit.org/show_bug.cgi?id=65490
49691 Reviewed by Gavin Barraclough.
49693 The code now makes sure to (1) always have correct and up-to-date
49694 information about register format at the time that a speculation
49695 check is emitted, (2) assert that speculation data is correct
49696 inside the speculation check implementation, and (3) avoid creating
49697 speculation data altogether if compilation has already failed, since
49698 at that point the format data is almost guaranteed to be bogus.
49700 * dfg/DFGNonSpeculativeJIT.cpp:
49701 (JSC::DFG::EntryLocation::EntryLocation):
49702 * dfg/DFGSpeculativeJIT.cpp:
49703 (JSC::DFG::SpeculationCheck::SpeculationCheck):
49704 (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
49705 (JSC::DFG::SpeculativeJIT::compile):
49706 * dfg/DFGSpeculativeJIT.h:
49707 (JSC::DFG::SpeculativeJIT::speculationCheck):
49709 2011-08-01 Filip Pizlo <fpizlo@apple.com>
49711 REGRESSION(r92092): Build fails on 64 bit
49712 https://bugs.webkit.org/show_bug.cgi?id=65458
49714 Reviewed by Oliver Hunt.
49716 The build was broken because some compilers were smart enough to see
49717 an array index out of bounds due to the decision fuction for when to
49718 go from precise size classes to imprecise size classes being broken:
49719 it would assume that sizes in the range 97..128 belonged to a precise
49720 size class when in fact they belonged to an imprecise one.
49722 In fact, the code would have run correctly, by way of a fluke, because
49723 though the 4th precise size class (for 97..128) didn't exist, the next
49724 array over from m_preciseSizeClasses was m_impreciseSizeClasses, and
49725 its first entry would have been a size class that is appropriate for
49726 allocations in the range 97..128. However, this relies on specific
49727 ordering of fields in NewSpace, so it's still a bug.
49729 This fixes the bug by ensuring that allocations larger than 96 use
49730 the imprecise size classes.
49733 (JSC::NewSpace::sizeClassFor):
49735 2011-07-31 Gavin Barraclough <barraclough@apple.com>
49737 https://bugs.webkit.org/show_bug.cgi?id=64679
49738 Fix bugs in Array.prototype this handling.
49740 Unreviewed - rolling out r91290.
49742 Looks like the wild wild web isn't ready for this yet.
49744 This change broke http://slides.html5rocks.com/#landing-slide.
49745 Interestingly, this might only be due to our lack of bind support -
49746 it looks like this site is calling Array.prototype.slice as a part
49747 of its bind implementation.
49749 * runtime/ArrayPrototype.cpp:
49750 (JSC::arrayProtoFuncJoin):
49751 (JSC::arrayProtoFuncConcat):
49752 (JSC::arrayProtoFuncPop):
49753 (JSC::arrayProtoFuncPush):
49754 (JSC::arrayProtoFuncReverse):
49755 (JSC::arrayProtoFuncShift):
49756 (JSC::arrayProtoFuncSlice):
49757 (JSC::arrayProtoFuncSort):
49758 (JSC::arrayProtoFuncSplice):
49759 (JSC::arrayProtoFuncUnShift):
49760 (JSC::arrayProtoFuncFilter):
49761 (JSC::arrayProtoFuncMap):
49762 (JSC::arrayProtoFuncEvery):
49763 (JSC::arrayProtoFuncForEach):
49764 (JSC::arrayProtoFuncSome):
49765 (JSC::arrayProtoFuncReduce):
49766 (JSC::arrayProtoFuncReduceRight):
49767 (JSC::arrayProtoFuncIndexOf):
49768 (JSC::arrayProtoFuncLastIndexOf):
49770 2011-07-31 Filip Pizlo <fpizlo@apple.com>
49772 JSC GC lays out size classes under wrong assumptions about expected
49774 https://bugs.webkit.org/show_bug.cgi?id=65437
49776 Reviewed by Oliver Hunt.
49778 Changed the atom size - which is both the smallest allocation size and
49779 the smallest possible stepping unit for size class spacing - from
49780 8 bytes to 4 pointer-size words. This is a 1% win on SunSpider.
49782 * heap/MarkedBlock.h:
49784 2011-07-31 Filip Pizlo <fpizlo@apple.com>
49786 DFG non-speculative JIT does not optimize PutByVal
49787 https://bugs.webkit.org/show_bug.cgi?id=65424
49789 Reviewed by Gavin Barraclough.
49791 Added code to emit PutByVal inline fast path.
49793 * dfg/DFGNonSpeculativeJIT.cpp:
49794 (JSC::DFG::NonSpeculativeJIT::compile):
49796 2011-07-31 Filip Pizlo <fpizlo@apple.com>
49798 The JSC garbage collector returns memory to the operating system too
49800 https://bugs.webkit.org/show_bug.cgi?id=65382
49802 Reviewed by Oliver Hunt.
49804 This introduces a memory reuse model similar to the one in FastMalloc.
49805 A periodic scavenger thread runs in the background and returns half the
49806 free memory to the OS on each timer fire. New block allocations first
49807 attempt to get the memory from the collector's internal pool, reverting
49808 to OS allocation only when this pool is empty.
49812 (JSC::Heap::~Heap):
49813 (JSC::Heap::destroy):
49814 (JSC::Heap::waitForRelativeTimeWhileHoldingLock):
49815 (JSC::Heap::waitForRelativeTime):
49816 (JSC::Heap::blockFreeingThreadStartFunc):
49817 (JSC::Heap::blockFreeingThreadMain):
49818 (JSC::Heap::allocateBlock):
49819 (JSC::Heap::freeBlocks):
49820 (JSC::Heap::releaseFreeBlocks):
49822 * heap/MarkedBlock.cpp:
49823 (JSC::MarkedBlock::destroy):
49824 (JSC::MarkedBlock::MarkedBlock):
49825 (JSC::MarkedBlock::initForCellSize):
49826 (JSC::MarkedBlock::reset):
49827 * heap/MarkedBlock.h:
49830 2011-07-30 Filip Pizlo <fpizlo@apple.com>
49832 DFG JIT speculation failure pass sometimes forgets to emit code to
49833 move certain registers.
49834 https://bugs.webkit.org/show_bug.cgi?id=65421
49836 Reviewed by Oliver Hunt.
49838 Restructured the offending loops (for gprs and fprs). It's once again
49839 possible to use spreadsheets on docs.google.com.
49841 * dfg/DFGJITCompiler.cpp:
49842 (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):
49844 2011-07-30 Patrick Gansterer <paroga@webkit.org>
49846 Remove inclusion of MainThread.h from Threading.h
49847 https://bugs.webkit.org/show_bug.cgi?id=65081
49849 Reviewed by Darin Adler.
49851 Add missing and remove unneeded include statements for MainThread.
49853 * wtf/CryptographicallyRandomNumber.cpp:
49855 * wtf/ThreadingPthreads.cpp:
49856 * wtf/text/StringStatics.cpp:
49858 2011-07-30 Oliver Hunt <oliver@apple.com>
49860 Reduce the size of JSGlobalObject slightly
49861 https://bugs.webkit.org/show_bug.cgi?id=65417
49863 Reviewed by Dan Bernstein.
49865 Push a few members that either aren't commonly used,
49866 or aren't frequently accessed into a separate struct.
49868 * runtime/JSGlobalObject.cpp:
49869 (JSC::JSGlobalObject::init):
49870 (JSC::JSGlobalObject::WeakMapsFinalizer::finalize):
49871 * runtime/JSGlobalObject.h:
49872 (JSC::JSGlobalObject::JSGlobalObjectRareData::JSGlobalObjectRareData):
49873 (JSC::JSGlobalObject::createRareDataIfNeeded):
49874 (JSC::JSGlobalObject::setProfileGroup):
49875 (JSC::JSGlobalObject::profileGroup):
49876 (JSC::JSGlobalObject::registerWeakMap):
49877 (JSC::JSGlobalObject::deregisterWeakMap):
49879 2011-07-30 Balazs Kelemen <kbalazs@webkit.org>
49881 MessageQueue::waitForMessageFilteredWithTimeout can triggers an assertion
49882 https://bugs.webkit.org/show_bug.cgi?id=65263
49884 Reviewed by Dmitry Titov.
49887 (WTF::::operator): Don't check the validity of an iterator
49888 that will be reassigned right now.
49889 * wtf/MessageQueue.h:
49890 (WTF::::removeIf): Revert r51198 as I beleave this is the better
49891 solution for the problem that was solved by that.
49893 2011-07-29 Filip Pizlo <fpizlo@apple.com>
49895 JSC GC zombie support no longer works, and is likely no longer needed.
49896 https://bugs.webkit.org/show_bug.cgi?id=65404
49898 Reviewed by Darin Adler.
49900 This removes zombies, because they no longer work, are not tested, are
49901 probably not needed, and are getting in the way of GC optimization
49904 * JavaScriptCore.xcodeproj/project.pbxproj:
49906 (JSC::HandleConverter::operator->):
49907 (JSC::HandleConverter::operator*):
49908 * heap/HandleHeap.cpp:
49909 (JSC::HandleHeap::isValidWeakNode):
49911 (JSC::Heap::destroy):
49912 (JSC::Heap::collect):
49913 * heap/MarkedBlock.cpp:
49914 (JSC::MarkedBlock::sweep):
49915 * heap/MarkedBlock.h:
49916 (JSC::MarkedBlock::clearMarks):
49917 * interpreter/Register.h:
49918 (JSC::Register::Register):
49919 (JSC::Register::operator=):
49920 * runtime/ArgList.h:
49921 (JSC::MarkedArgumentBuffer::append):
49922 (JSC::ArgList::ArgList):
49923 * runtime/JSCell.cpp:
49925 * runtime/JSCell.h:
49926 * runtime/JSGlobalData.cpp:
49927 (JSC::JSGlobalData::JSGlobalData):
49928 (JSC::JSGlobalData::clearBuiltinStructures):
49929 * runtime/JSGlobalData.h:
49930 * runtime/JSValue.h:
49931 * runtime/JSValueInlineMethods.h:
49932 (JSC::JSValue::JSValue):
49933 * runtime/JSZombie.cpp: Removed.
49934 * runtime/JSZombie.h: Removed.
49935 * runtime/WriteBarrier.h:
49936 (JSC::WriteBarrierBase::setEarlyValue):
49937 (JSC::WriteBarrierBase::operator*):
49938 (JSC::WriteBarrierBase::setWithoutWriteBarrier):
49941 2011-07-29 Filip Pizlo <fpizlo@apple.com>
49943 DFG JIT verbose mode provides no details about predictions
49944 https://bugs.webkit.org/show_bug.cgi?id=65389
49946 Reviewed by Darin Adler.
49948 Added a print-out of the predictions to the IR dump, with names as follows:
49949 "p-bottom" = the parser made no predictions
49950 "p-int32" = the parser predicted int32
49951 ... (same for array, cell, double, number)
49952 "p-top" = the parser made conflicting predictions which will be ignored.
49954 * dfg/DFGGraph.cpp:
49955 (JSC::DFG::Graph::dump):
49957 (JSC::DFG::predictionToString):
49959 2011-07-29 Filip Pizlo <fpizlo@apple.com>
49961 DFG JIT does not have any way of undoing double speculation.
49962 https://bugs.webkit.org/show_bug.cgi?id=65334
49964 Reviewed by Gavin Barraclough.
49966 This adds code to do a branchConvertDoubleToInt on specualtion failure.
49967 This is performance-neutral on most benchmarks but does result in
49968 a slight improvement in Kraken.
49970 * dfg/DFGJITCompiler.cpp:
49971 (JSC::DFG::GeneralizedRegister::moveTo):
49972 (JSC::DFG::GeneralizedRegister::swapWith):
49973 (JSC::DFG::ShuffledRegister::handleNonCyclingPermutation):
49974 (JSC::DFG::ShuffledRegister::handleCyclingPermutation):
49975 (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):
49977 2011-07-29 Filip Pizlo <fpizlo@apple.com>
49979 Crash when opening docs.google.com
49980 https://bugs.webkit.org/show_bug.cgi?id=65327
49982 Reviewed by Gavin Barraclough.
49984 The speculative JIT was only checking whether a value is an array when
49985 we had already checked that it was, rather then when we hadn't.
49987 * dfg/DFGSpeculativeJIT.cpp:
49988 (JSC::DFG::SpeculativeJIT::compile):
49990 2011-07-28 Oliver Hunt <oliver@apple.com>
49992 *_list instructions are only used in one place, where the code is wrong.
49993 https://bugs.webkit.org/show_bug.cgi?id=65348
49995 Reviewed by Darin Adler.
49997 Simply remove the instructions and all users. Speeds up the interpreter
49998 slightly due to code motion, but otherwise has no effect (because none
49999 of the _list instructions are ever used).
50001 * bytecode/CodeBlock.cpp:
50002 (JSC::isPropertyAccess):
50003 (JSC::CodeBlock::dump):
50004 (JSC::CodeBlock::visitStructures):
50005 * bytecode/Instruction.h:
50006 * bytecode/Opcode.h:
50007 * interpreter/Interpreter.cpp:
50008 (JSC::Interpreter::privateExecute):
50010 (JSC::JIT::privateCompileMainPass):
50012 2011-07-28 Gavin Barraclough <barraclough@apple.com>
50014 https://bugs.webkit.org/show_bug.cgi?id=65325
50015 Performance tweak to parseInt
50017 Reviewed by Oliver Hunt.
50019 * runtime/JSGlobalObjectFunctions.cpp:
50020 (JSC::globalFuncParseInt):
50021 - This change may an existing optimization redundant,
50022 cleanup from Darin's comments, plus fix existing bugs.
50024 2011-07-28 Gavin Barraclough <barraclough@apple.com>
50026 https://bugs.webkit.org/show_bug.cgi?id=65325
50027 Performance tweak to parseInt
50029 Reviewed by Oliver Hunt.
50031 * runtime/JSGlobalObjectFunctions.cpp:
50032 (JSC::globalFuncParseInt):
50033 - parseInt applied to small positive numbers = floor.
50035 2011-07-28 Dan Bernstein <mitz@apple.com>
50039 * runtime/Executable.cpp:
50040 (JSC::FunctionExecutable::compileForCallInternal):
50042 2011-07-28 Kent Tamura <tkent@chromium.org>
50044 Improve StringImpl::stripWhiteSpace() and simplifyWhiteSpace().
50045 https://bugs.webkit.org/show_bug.cgi?id=65300
50047 Reviewed by Darin Adler.
50049 r91837 had performance regression of StringImpl::stripWhiteSpace()
50050 and simplifyWhiteSpace(). This changes the code so that compilers
50051 generates code equivalent to r91836 or piror.
50053 * wtf/text/StringImpl.cpp:
50054 (WTF::StringImpl::stripMatchedCharacters):
50055 A template member function for stripWhiteSpace(). This function takes a functor.
50056 (WTF::UCharPredicate):
50057 A functor for generic predicate for single UChar argument.
50058 (WTF::SpaceOrNewlinePredicate):
50059 A special functor for isSpaceOrNewline().
50060 (WTF::StringImpl::stripWhiteSpace):
50061 Use stripmatchedCharacters().
50062 (WTF::StringImpl::simplifyMatchedCharactersToSpace):
50063 A template member function for simplifyWhiteSpace().
50064 (WTF::StringImpl::simplifyWhiteSpace):
50065 Use simplifyMatchedCharactersToSpace().
50066 * wtf/text/StringImpl.h:
50068 2011-07-27 Dmitry Lomov <dslomov@google.com>
50070 [chromium] Turn on WTF_MULTIPLE_THREADS.
50071 https://bugs.webkit.org/show_bug.cgi?id=61017
50072 The patch turns on WTF_MULTIPLE_THREADS in chromium and
50073 pushes some relevant initializations from JSC::initializeThreading
50074 to WTF::initializeThreading.
50076 Reviewed by David Levin.
50078 * runtime/InitializeThreading.cpp:
50079 (JSC::initializeThreadingOnce):
50080 * wtf/FastMalloc.cpp:
50081 (WTF::isForbidden):
50082 (WTF::fastMallocForbid):
50083 (WTF::fastMallocAllow):
50085 * wtf/ThreadingPthreads.cpp:
50086 (WTF::initializeThreading):
50087 * wtf/ThreadingWin.cpp:
50088 (WTF::initializeThreading):
50089 * wtf/gtk/ThreadingGtk.cpp:
50090 (WTF::initializeThreading):
50091 * wtf/qt/ThreadingQt.cpp:
50092 (WTF::initializeThreading):
50094 2011-07-27 Mark Hahnenberg <mhahnenberg@apple.com>
50096 Remove operator new from JSCell
50097 https://bugs.webkit.org/show_bug.cgi?id=64999
50099 Reviewed by Oliver Hunt.
50101 Removed the implementation of operator new in JSCell, so any further uses
50102 will not successfully link. Also removed any remaining uses of operator new.
50104 * API/JSContextRef.cpp:
50105 * debugger/DebuggerActivation.h:
50106 (JSC::DebuggerActivation::create):
50107 * interpreter/Interpreter.cpp:
50108 (JSC::Interpreter::execute):
50109 (JSC::Interpreter::createExceptionScope):
50110 (JSC::Interpreter::privateExecute):
50111 * jit/JITStubs.cpp:
50112 (JSC::DEFINE_STUB_FUNCTION):
50113 * runtime/JSCell.h:
50114 * runtime/JSGlobalObject.h:
50115 (JSC::JSGlobalObject::create):
50116 * runtime/JSStaticScopeObject.h:
50117 (JSC::JSStaticScopeObject::create):
50118 (JSC::JSStaticScopeObject::JSStaticScopeObject):
50119 * runtime/StrictEvalActivation.h:
50120 (JSC::StrictEvalActivation::create):
50122 2011-07-27 Filip Pizlo <fpizlo@apple.com>
50124 DFG graph has no notion of double prediction.
50125 https://bugs.webkit.org/show_bug.cgi?id=65234
50127 Reviewed by Gavin Barraclough.
50129 Added the notion of PredictDouble, and PredictNumber, which is the least
50130 upper bound of PredictInt32 and PredictDouble. Least upper bound is
50131 defined as the bitwise-or of two predictions. Bottom is defined as 0,
50132 and Top is defined as all bits being set. Added the ability to explicitly
50133 distinguish between a node having had a prediction associated with it,
50134 and that prediction still being valid (i.e. no conflicting predictions
50135 have also been added). Used this to guard the speculative JIT from
50136 speculating Int32 in cases where the graph knows that the value is
50137 double, which currently only happens for GetLocal nodes on arguments
50138 which were double at compile-time.
50140 * dfg/DFGGraph.cpp:
50141 (JSC::DFG::Graph::predictArgumentTypes):
50143 (JSC::DFG::isCellPrediction):
50144 (JSC::DFG::isArrayPrediction):
50145 (JSC::DFG::isInt32Prediction):
50146 (JSC::DFG::isDoublePrediction):
50147 (JSC::DFG::isNumberPrediction):
50148 * dfg/DFGSpeculativeJIT.cpp:
50149 (JSC::DFG::SpeculativeJIT::compile):
50150 (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
50151 (JSC::DFG::SpeculativeJIT::initializeVariableTypes):
50152 * dfg/DFGSpeculativeJIT.h:
50153 (JSC::DFG::SpeculativeJIT::isRegisterDataFormatDouble):
50155 2011-07-27 Gavin Barraclough <barraclough@apple.com>
50157 https://bugs.webkit.org/show_bug.cgi?id=65294
50158 DFG JIT - may speculate based on wrong arguments.
50160 Reviewed by Oliver Hunt
50162 In the case of a DFG compiled function calling to and compiling a second function that
50163 also compiles through the DFG JIT (i.e. compilation triggered with DFGOperations.cpp),
50164 we call compileFor passing the caller functions exec state, rather than the callee's.
50165 This may lead to mis-optimization, since the DFG compiler will example the exec state's
50166 arguments on the assumption that these will be passed to the callee - it is wanting the
50167 callee exec state, not the caller's exec state.
50169 Fixing this for all cases of compilation is tricksy, due to the way the numeric sort
50170 function is compiled, & the structure of the calls in the Interpreter::execute methods.
50171 Only fix for compilation from the JIT, in other calls don't speculate based on arguments
50174 * dfg/DFGOperations.cpp:
50175 * runtime/Executable.cpp:
50176 (JSC::tryDFGCompile):
50177 (JSC::tryDFGCompileFunction):
50178 (JSC::FunctionExecutable::compileForCallInternal):
50179 * runtime/Executable.h:
50180 (JSC::FunctionExecutable::compileForCall):
50181 (JSC::FunctionExecutable::compileFor):
50183 2011-07-27 Oliver Hunt <oliver@apple.com>
50185 Handle callback oriented JSONP
50186 https://bugs.webkit.org/show_bug.cgi?id=65271
50188 Reviewed by Gavin Barraclough.
50190 Handle the callback oriented versions of JSONP. The Literal parser
50191 now handles <Identifier> (. <Identifier>)* (jsonData).
50193 * interpreter/Interpreter.cpp:
50194 (JSC::Interpreter::execute):
50195 * runtime/LiteralParser.cpp:
50196 (JSC::LiteralParser::tryJSONPParse):
50197 (JSC::LiteralParser::Lexer::lex):
50198 * runtime/LiteralParser.h:
50200 2011-07-27 Stephanie Lewis <slewis@apple.com>
50202 Revert http://trac.webkit.org/changeset/90415.
50203 Caused a 5% sunspider regression in-browser.
50205 Unreviewed rollout.
50207 * bytecode/CodeBlock.cpp:
50208 (JSC::CodeBlock::visitAggregate):
50210 (JSC::Heap::collectAllGarbage):
50211 * heap/MarkStack.h:
50212 (JSC::MarkStack::MarkStack):
50213 * runtime/JSGlobalData.cpp:
50214 (JSC::JSGlobalData::releaseExecutableMemory):
50215 * runtime/RegExp.cpp:
50216 (JSC::RegExp::compile):
50217 (JSC::RegExp::invalidateCode):
50218 * runtime/RegExp.h:
50220 2011-07-27 Shinya Kawanaka <shinyak@google.com>
50222 Added an interface to take IsWhiteSpaceFunctionPtr.
50223 https://bugs.webkit.org/show_bug.cgi?id=57746
50225 Reviewed by Kent Tamura.
50227 * wtf/text/StringImpl.cpp:
50228 (WTF::StringImpl::stripWhiteSpace):
50229 Added an interface to take IsWhiteSpaceFunctionPtr.
50230 (WTF::StringImpl::simplifyWhiteSpace): ditto.
50231 * wtf/text/StringImpl.h:
50232 * wtf/text/WTFString.cpp:
50233 (WTF::String::stripWhiteSpace): ditto.
50234 (WTF::String::simplifyWhiteSpace): ditto.
50235 * wtf/text/WTFString.h:
50237 2011-07-27 Filip Pizlo <fpizlo@apple.com>
50239 DFG JIT speculation failure code performs incorrect conversions in
50240 the case where two registers need to be swapped.
50241 https://bugs.webkit.org/show_bug.cgi?id=65233
50243 Reviewed by Gavin Barraclough.
50245 * dfg/DFGJITCompiler.cpp:
50246 (JSC::DFG::GeneralizedRegister::swapWith):
50248 2011-07-26 Mark Hahnenberg <mhahnenberg@apple.com>
50250 reduce and reduceRight bind callback's this to null rather than undefined
50251 https://bugs.webkit.org/show_bug.cgi?id=62264
50253 Reviewed by Oliver Hunt.
50255 Fixed Array.prototype.reduce and Array.prototype.reduceRight so that they behave correctly
50256 when calling the callback function without an argument for this, which means it should
50257 be undefined according to ES 15.4.4.21 and 15.4.4.22.
50259 * runtime/ArrayPrototype.cpp:
50260 (JSC::arrayProtoFuncReduce):
50261 (JSC::arrayProtoFuncReduceRight):
50263 2011-07-26 Filip Pizlo <fpizlo@apple.com>
50265 JSC command-line tool does not come with any facility for
50266 measuring time precisely.
50267 https://bugs.webkit.org/show_bug.cgi?id=65223
50269 Reviewed by Gavin Barraclough.
50271 Exposed WTF::currentTime() as currentTimePrecise().
50274 (GlobalObject::GlobalObject):
50275 (functionPreciseTime):
50277 2011-07-26 Filip Pizlo <fpizlo@apple.com>
50279 DFG speculative JIT never emits inline double comparisons, even when it
50280 would be obvious more efficient to do so.
50281 https://bugs.webkit.org/show_bug.cgi?id=65212
50283 Reviewed by Gavin Barraclough.
50285 This handles the obvious case of inlining double comparisons: it only addresses
50286 the speculative JIT, and only for fused compare/branch sequences. But it does
50287 handle the case where both operands are double (and there is no slow path),
50288 or where one operand is double and the other is unknown type (in which case it
50289 attempts to unbox the double, otherwise taking slow path). This is an 0.8%
50290 speed-up on SunSpider.
50292 * dfg/DFGSpeculativeJIT.cpp:
50293 (JSC::DFG::SpeculativeJIT::convertToDouble):
50294 (JSC::DFG::SpeculativeJIT::compilePeepHoleDoubleBranch):
50295 (JSC::DFG::SpeculativeJIT::compare):
50296 (JSC::DFG::SpeculativeJIT::compile):
50297 * dfg/DFGSpeculativeJIT.h:
50298 (JSC::DFG::SpeculativeJIT::isRegisterDataFormatDouble):
50299 (JSC::DFG::SpeculativeJIT::shouldSpeculateInteger):
50301 2011-07-26 Filip Pizlo <fpizlo@apple.com>
50303 https://bugs.webkit.org/show_bug.cgi?id=64969
50304 DFG JIT generates inefficient code for speculation failures.
50306 Reviewed by Gavin Barraclough.
50308 This implements a speculation failure strategy where (1) values spilled on
50309 non-speculative but not spilled on speculative are spilled, (2) values that
50310 are in registers on both paths are rearranged without ever touching memory,
50311 and (3) values spilled on speculative but not spilled on non-speculative are
50314 The register shuffling is the most interesting part of this patch. It
50315 constructs a permutation graph for registers. Each node represents a
50316 register, and each directed edge corresponds to the register's value having
50317 to be moved to a different register as part of the shuffling. This is a
50318 directed graph where each node may only have 0 or 1 incoming edges, and
50319 0 or 1 outgoing edges. The algorithm then first finds maximal non-cyclic
50320 subgraphs where all nodes in the subgraph are reachable from a start node.
50321 Such subgraphs always resemble linked lists, and correspond to simply
50322 moving the value in the second-to-last register into the last register, and
50323 then moving the value in the third-to-last register into the second-to-last
50324 register, and so on. Once these subgraphs are taken care of, the remaining
50325 subgraphs are cycles, and are handled using either (a) conversion or no-op
50326 if the cycle involves one node, (b) swap if it involves two nodes, or (c)
50327 a cyclic shuffle involving a scratch register if there are three or more
50330 * dfg/DFGGenerationInfo.h:
50331 (JSC::DFG::needDataFormatConversion):
50332 * dfg/DFGJITCompiler.cpp:
50333 (JSC::DFG::GeneralizedRegister::GeneralizedRegister):
50334 (JSC::DFG::GeneralizedRegister::createGPR):
50335 (JSC::DFG::GeneralizedRegister::createFPR):
50336 (JSC::DFG::GeneralizedRegister::dump):
50337 (JSC::DFG::GeneralizedRegister::findInSpeculationCheck):
50338 (JSC::DFG::GeneralizedRegister::findInEntryLocation):
50339 (JSC::DFG::GeneralizedRegister::previousDataFormat):
50340 (JSC::DFG::GeneralizedRegister::nextDataFormat):
50341 (JSC::DFG::GeneralizedRegister::convert):
50342 (JSC::DFG::GeneralizedRegister::moveTo):
50343 (JSC::DFG::GeneralizedRegister::swapWith):
50344 (JSC::DFG::ShuffledRegister::ShuffledRegister):
50345 (JSC::DFG::ShuffledRegister::isEndOfNonCyclingPermutation):
50346 (JSC::DFG::ShuffledRegister::handleNonCyclingPermutation):
50347 (JSC::DFG::ShuffledRegister::handleCyclingPermutation):
50348 (JSC::DFG::ShuffledRegister::lookup):
50349 (JSC::DFG::lookupForRegister):
50350 (JSC::DFG::NodeToRegisterMap::Tuple::Tuple):
50351 (JSC::DFG::NodeToRegisterMap::NodeToRegisterMap):
50352 (JSC::DFG::NodeToRegisterMap::set):
50353 (JSC::DFG::NodeToRegisterMap::end):
50354 (JSC::DFG::NodeToRegisterMap::find):
50355 (JSC::DFG::NodeToRegisterMap::clear):
50356 (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):
50357 (JSC::DFG::JITCompiler::linkSpeculationChecks):
50358 * dfg/DFGJITCompiler.h:
50359 * dfg/DFGNonSpeculativeJIT.cpp:
50360 (JSC::DFG::EntryLocation::EntryLocation):
50361 * dfg/DFGNonSpeculativeJIT.h:
50362 * dfg/DFGSpeculativeJIT.cpp:
50363 (JSC::DFG::SpeculationCheck::SpeculationCheck):
50364 * dfg/DFGSpeculativeJIT.h:
50366 2011-07-26 Oliver Hunt <oliver@apple.com>
50368 Buffer overflow creating error messages for JSON.parse
50369 https://bugs.webkit.org/show_bug.cgi?id=65211
50371 Reviewed by Darin Adler.
50373 Parse string length to the UString constructor.
50375 * runtime/LiteralParser.cpp:
50376 (JSC::LiteralParser::parse):
50378 2011-07-26 Mark Hahnenberg <mhahnenberg@apple.com>
50380 Refactor automatically generated JS DOM bindings to replace operator new with static create methods
50381 https://bugs.webkit.org/show_bug.cgi?id=64732
50383 Reviewed by Oliver Hunt.
50385 Replacing the public constructors in the automatically generated JS DOM bindings with static
50386 create methods. JSByteArray is used by several of these bindings in WebCore.
50388 * JavaScriptCore.exp:
50389 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
50390 * runtime/JSByteArray.cpp:
50391 (JSC::JSByteArray::create):
50392 * runtime/JSByteArray.h:
50394 2011-07-26 Alexis Menard <alexis.menard@openbossa.org>
50396 Unreviewed build fix for Qt/Linux.
50398 On platforms with no glib and gstreamer we should not build javascriptcore
50399 with the Glib support. This is related to http://trac.webkit.org/changeset/91752.
50403 2011-07-26 Juan C. Montemayor <jmont@apple.com>
50405 JSON errors should be informative
50406 https://bugs.webkit.org/show_bug.cgi?id=63339
50408 Added error messages to the JSON Parser.
50410 Reviewed by Oliver Hunt.
50412 * runtime/JSONObject.cpp:
50413 (JSC::JSONProtoFuncParse):
50414 * runtime/LiteralParser.cpp:
50415 (JSC::LiteralParser::Lexer::lex):
50416 (JSC::LiteralParser::Lexer::lexString):
50417 (JSC::LiteralParser::Lexer::lexNumber):
50418 (JSC::LiteralParser::parse):
50419 * runtime/LiteralParser.h:
50420 (JSC::LiteralParser::getErrorMessage):
50421 (JSC::LiteralParser::Lexer::sawError):
50422 (JSC::LiteralParser::Lexer::getErrorMessage):
50424 2011-07-26 Sheriff Bot <webkit.review.bot@gmail.com>
50426 Unreviewed, rolling out r91746.
50427 http://trac.webkit.org/changeset/91746
50428 https://bugs.webkit.org/show_bug.cgi?id=65180
50430 It broke SL build (Requested by Ossy on #webkit).
50432 * wtf/text/StringImpl.cpp:
50433 (WTF::StringImpl::stripWhiteSpace):
50434 (WTF::StringImpl::simplifyWhiteSpace):
50435 * wtf/text/StringImpl.h:
50436 * wtf/text/WTFString.cpp:
50437 * wtf/text/WTFString.h:
50439 2011-07-26 Alexis Menard <alexis.menard@openbossa.org>
50441 Reviewed by Andreas Kling.
50443 [Qt] Change default backend to use GStreamer on Linux and QuickTime on Mac.
50444 https://bugs.webkit.org/show_bug.cgi?id=63472
50446 Enable the bits needed for GStreamer only when QtMultimedia is not used.
50450 2011-07-26 Shinya Kawanaka <shinyak@google.com>
50452 Added an interface to take IsWhiteSpaceFunctionPtr.
50453 https://bugs.webkit.org/show_bug.cgi?id=57746
50455 Reviewed by Kent Tamura.
50457 * wtf/text/StringImpl.cpp:
50458 (WTF::StringImpl::stripWhiteSpace):
50459 Added an interface to take IsWhiteSpaceFunctionPtr.
50460 (WTF::StringImpl::simplifyWhiteSpace): ditto.
50461 * wtf/text/StringImpl.h:
50462 * wtf/text/WTFString.cpp:
50463 (WTF::String::stripWhiteSpace): ditto.
50464 (WTF::String::simplifyWhiteSpace): ditto.
50465 * wtf/text/WTFString.h:
50467 2011-07-25 Filip Pizlo <fpizlo@apple.com>
50469 DFG non-speculative JIT emits inefficient code for arithmetic
50470 involving two registers
50471 https://bugs.webkit.org/show_bug.cgi?id=65160
50473 Reviewed by Gavin Barraclough.
50475 The non-speculative JIT now emits inline code for double arithmetic, but
50476 still attempts integer arithmetic first. This is a speed-up on SunSpider
50477 (albeit a small one), and a large speed-up on Kraken.
50479 * dfg/DFGNonSpeculativeJIT.cpp:
50480 (JSC::DFG::NonSpeculativeJIT::basicArithOp):
50482 2011-07-25 Ryuan Choi <ryuan.choi@samsung.com>
50484 [EFL] Build break with --debug after r89153.
50485 https://bugs.webkit.org/show_bug.cgi?id=65150
50487 Unreviewed build fix.
50489 * wtf/CMakeListsEfl.txt: Add missing libraries.
50491 2011-07-25 Filip Pizlo <fpizlo@apple.com>
50493 DFG non-speculative JIT emits obviously inefficient code for arithmetic
50494 where one operand is a constant.
50495 https://bugs.webkit.org/show_bug.cgi?id=65146
50497 Reviewed by Gavin Barraclough.
50499 Changed the code to emit double arithmetic inline.
50501 * dfg/DFGNonSpeculativeJIT.cpp:
50502 (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp):
50504 2011-07-25 Filip Pizlo <fpizlo@apple.com>
50506 DFG JIT bytecode parser misuses pointers into objects allocated as part of a
50508 https://bugs.webkit.org/show_bug.cgi?id=65128
50510 Reviewed by Gavin Barraclough.
50512 The bytecode parser code seems to be right to have a DFGNode& phiNode reference
50513 into the graph, since this makes the code greatly more readable. This patch
50514 thus makes the minimal change necessary to make the code right: it uses a
50515 pointer (to disambiguate between reloading the pointer and performing a
50516 copy from one location of the vector to another) and reloads it after the
50517 calls to addToGraph().
50519 * dfg/DFGByteCodeParser.cpp:
50520 (JSC::DFG::ByteCodeParser::processPhiStack):
50522 2011-07-25 Sheriff Bot <webkit.review.bot@gmail.com>
50524 Unreviewed, rolling out r91686.
50525 http://trac.webkit.org/changeset/91686
50526 https://bugs.webkit.org/show_bug.cgi?id=65144
50528 1.5% regression in JSC (Requested by jmontemayor on #webkit).
50530 * runtime/JSONObject.cpp:
50531 (JSC::JSONProtoFuncParse):
50532 * runtime/LiteralParser.cpp:
50533 (JSC::LiteralParser::Lexer::lex):
50534 (JSC::LiteralParser::Lexer::lexString):
50535 (JSC::LiteralParser::Lexer::lexNumber):
50536 (JSC::LiteralParser::parse):
50537 * runtime/LiteralParser.h:
50539 2011-07-25 Jon Lee <jonlee@apple.com>
50541 Assertion called in ExecutableBase::generatedJITCodeForCall() when JIT is not available
50542 https://bugs.webkit.org/show_bug.cgi?id=65132
50543 <rdar://problem/9836297>
50545 Reviewed by Oliver Hunt.
50547 Make sure the JIT is available to use before running the following calls:
50549 * bytecode/CodeBlock.cpp:
50550 (JSC::CodeBlock::unlinkCalls): Added check, return early if JIT is not available.
50551 * bytecode/CodeBlock.h:
50552 (JSC::CodeBlock::addMethodCallLinkInfos): Added assertion.
50554 2011-07-25 Juan C. Montemayor <jmont@apple.com>
50556 JSON errors should be informative
50557 https://bugs.webkit.org/show_bug.cgi?id=63339
50559 Added error messages to the JSON Parser.
50561 Reviewed by Oliver Hunt.
50563 * runtime/JSONObject.cpp:
50564 (JSC::JSONProtoFuncParse):
50565 * runtime/LiteralParser.cpp:
50566 (JSC::LiteralParser::Lexer::lex):
50567 (JSC::LiteralParser::Lexer::lexString):
50568 (JSC::LiteralParser::Lexer::lexNumber):
50569 (JSC::LiteralParser::parse):
50570 * runtime/LiteralParser.h:
50571 (JSC::LiteralParser::getErrorMessage):
50572 (JSC::LiteralParser::Lexer::sawError):
50573 (JSC::LiteralParser::Lexer::getErrorMessage):
50575 2011-07-25 Filip Pizlo <fpizlo@apple.com>
50577 X86-64 assembler emits three instructions instead of two for certain
50579 https://bugs.webkit.org/show_bug.cgi?id=65095
50581 Reviewed by Gavin Barraclough.
50583 Simply made these four methods in the assembler use the scratch register,
50584 which they were previously avoiding. It still optimizes for the case where
50585 an absolute address memory accesses is using EAX. This results in a slight
50586 performance improvement.
50588 * assembler/MacroAssemblerX86_64.h:
50589 (JSC::MacroAssemblerX86_64::load32):
50590 (JSC::MacroAssemblerX86_64::store32):
50591 (JSC::MacroAssemblerX86_64::loadPtr):
50592 (JSC::MacroAssemblerX86_64::storePtr):
50594 2011-07-25 Ryuan Choi <ryuan.choi@samsung.com>
50596 [EFL] Implement EFL-specific current time and monotonicallyIncreasingTime.
50597 https://bugs.webkit.org/show_bug.cgi?id=64354
50599 Use ecore_time_unix_get which returns unix time as double type for currentTime
50600 and ecore_time_get which uses monotonic clock for monotonicallyIncreasingTime.
50602 Reviewed by Kent Tamura.
50604 * wtf/CurrentTime.cpp:
50605 (WTF::currentTime):
50606 (WTF::monotonicallyIncreasingTime):
50608 2011-07-22 Sommer Panage <panage@apple.com>
50610 Reviewed by Oliver Hunt.
50612 export JSContextCreateBacktrace as SPI in JSContextRefPrivate.h
50613 https://bugs.webkit.org/show_bug.cgi?id=64981
50615 UIAutomation for iOS would like to support a Javascript backtrace in our error logs.
50616 Currently, the C API does not provide the tools to do this. However, the private API
50617 does expose the necessary functionality to get a backtrace
50618 (via Interpreter::retrieveLastCaller). We recognize this information may result in
50619 failure in the cases of programs run by 'eval', stack frames beneath host function
50620 call frames, and in programs run from other programs. Thus, we propose exporting our
50621 JSContextCreateBacktrace in JSContextRefPrivate.h. This will provide us with the tools
50622 we need while not advertising an API that isn't really ready for full use.
50624 * API/JSContextRef.cpp:
50625 * API/JSContextRefPrivate.h:
50626 * JavaScriptCore.exp:
50629 2011-07-22 Gavin Barraclough <barraclough@apple.com>
50631 https://bugs.webkit.org/show_bug.cgi?id=65051
50632 DFG JIT - Enable by default for mac platform on x86-64.
50634 Rubber Stamped by Geoff Garen.
50636 This is now a performance progression.
50639 - Removed definition of ENABLE_DFG_JIT_RESTRICTIONS.
50641 2011-07-22 Gavin Barraclough <barraclough@apple.com>
50643 https://bugs.webkit.org/show_bug.cgi?id=65047
50644 DFG JIT - Add support for op_resolve/op_resolve_base
50646 Reviewed by Sam Weinig.
50648 These are necessary for any significant eval code coverage
50649 (and as such increase LayoutTest coverage).
50651 * dfg/DFGAliasTracker.h:
50652 (JSC::DFG::AliasTracker::recordResolve):
50653 - Conservatively blow aliasing optimizations for now.
50654 * dfg/DFGByteCodeParser.cpp:
50655 (JSC::DFG::ByteCodeParser::parseBlock):
50656 - Add support for op_resolve/op_resolve_base.
50657 * dfg/DFGJITCodeGenerator.h:
50658 (JSC::DFG::JITCodeGenerator::callOperation):
50659 - Add call with exec, identifer aguments.
50661 - Add new node types.
50662 (JSC::DFG::Node::hasIdentifier):
50663 - Resolve nodes have identifiers, too!
50664 * dfg/DFGNonSpeculativeJIT.cpp:
50665 (JSC::DFG::NonSpeculativeJIT::compile):
50666 - Add generation for new Nodes.
50667 * dfg/DFGOperations.cpp:
50668 * dfg/DFGOperations.h:
50669 - Added new operations.
50670 * dfg/DFGSpeculativeJIT.cpp:
50671 (JSC::DFG::SpeculativeJIT::compile):
50672 - Add generation for new Nodes.
50674 2011-07-22 Gavin Barraclough <barraclough@apple.com>
50676 https://bugs.webkit.org/show_bug.cgi?id=65036
50677 Messing with the register allocation within flow control = badness.
50679 Reviewed by Sam Weinig.
50681 * dfg/DFGNonSpeculativeJIT.cpp:
50682 (JSC::DFG::NonSpeculativeJIT::compile):
50683 - Fix register allocation.
50685 2011-07-22 Mark Hahnenberg <mhahnenberg@apple.com>
50687 Date.prototype.toISOString doesn't handle negative years or years > 9999 correctly.
50688 https://bugs.webkit.org/show_bug.cgi?id=63986
50690 Reviewed by Geoffrey Garen.
50692 Changed the implementation of Date.prototype.toISOString() to use the extended year
50693 format (+/-yyyyyy) for years outside of [0,9999] to be in compliance with ES 15.9.1.15.1.
50695 * runtime/DatePrototype.cpp:
50696 (JSC::dateProtoFuncToISOString):
50698 2011-07-21 Gavin Barraclough <barraclough@apple.com>
50702 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
50704 2011-07-21 Ryosuke Niwa <rniwa@webkit.org>
50706 Build fix after r91555.
50708 * JavaScriptCore.exp:
50710 2011-07-21 Gavin Barraclough <barraclough@apple.com>
50712 https://bugs.webkit.org/show_bug.cgi?id=19271
50713 eliminate PIC branches by changing NaN handling in JSValue::toNumber
50715 Reviewed by Sam Weinig.
50717 Moving the non-numeric cases out of line seems to be a consistent
50718 win on SunSpider for me, to the order of about 0.5%.
50720 * runtime/JSCell.h:
50721 (JSC::JSCell::JSValue::toNumber):
50722 - Changed to only handle values that are already numbers, moce non-numeric cases out of line.
50723 * runtime/JSValue.cpp:
50724 (JSC::JSValue::toNumberSlowCase):
50725 - Added toNumberSlowCase, handling non-numeric cases.
50726 * runtime/JSValue.h:
50727 - Add declaration of toNumberSlowCase.
50729 2011-07-21 Gavin Barraclough <barraclough@apple.com>
50731 https://bugs.webkit.org/show_bug.cgi?id=64875
50732 Use of `yield` keyword is broken
50734 Reviewed by Sam Weinig.
50736 * parser/Lexer.cpp:
50737 (JSC::Lexer::parseIdentifier):
50738 - The bug here is that a successful match of a RESERVED_IF_STRICT token from
50739 parseKeyword is being nullified back to IDENT. The problem is that in the
50740 case of IDENT matches parseKeyword should not move the lexer's input
50741 position, but in the case of RESERVED_IF_STRICT it has done so.
50743 2011-07-21 Gavin Barraclough <barraclough@apple.com>
50745 https://bugs.webkit.org/show_bug.cgi?id=64900
50746 Function.prototype.apply should accept an array-like object as its second argument
50748 Reviewed by Sam Weinig.
50750 * interpreter/Interpreter.cpp:
50751 (JSC::Interpreter::privateExecute):
50752 * jit/JITStubs.cpp:
50753 (JSC::DEFINE_STUB_FUNCTION):
50754 * runtime/FunctionPrototype.cpp:
50755 (JSC::functionProtoFuncApply):
50756 - Remove the type error if object is not an array.
50758 2011-07-21 Gavin Barraclough <barraclough@apple.com>
50760 https://bugs.webkit.org/show_bug.cgi?id=64964
50761 DFG JIT - Enable support for eval code
50763 Reviewed by Sam Weinig.
50765 This is basically the same as program code, to the JIT!
50767 * bytecode/Opcode.cpp:
50768 * bytecode/Opcode.h:
50769 - Enable opcodeNames in !NDEBUG builds.
50770 * dfg/DFGOperations.cpp:
50771 - Fix a bug exposed by eval support, throw correct type error for new.
50772 * runtime/Executable.cpp:
50773 (JSC::EvalExecutable::compileInternal):
50774 - Enable DFG JIT for eval code.
50776 2011-07-20 Sheriff Bot <webkit.review.bot@gmail.com>
50778 Unreviewed, rolling out r91380.
50779 http://trac.webkit.org/changeset/91380
50780 https://bugs.webkit.org/show_bug.cgi?id=64924
50782 Caused assertion failures in Chromium's IndexedDB tests
50783 (Requested by rniwa on #webkit).
50785 * wtf/ThreadIdentifierDataPthreads.cpp:
50786 (WTF::ThreadIdentifierData::identifier):
50787 (WTF::ThreadIdentifierData::initialize):
50788 (WTF::ThreadIdentifierData::initializeKeyOnceHelper):
50789 (WTF::ThreadIdentifierData::initializeKeyOnce):
50790 * wtf/ThreadIdentifierDataPthreads.h:
50791 * wtf/ThreadingPthreads.cpp:
50792 (WTF::initializeThreading):
50794 2011-07-20 Filip Pizlo <fpizlo@apple.com>
50796 DFG non-speculative JIT does not use() the aliased GetByVal,
50797 resulting in bloated use counts.
50798 https://bugs.webkit.org/show_bug.cgi?id=64911
50800 Reviewed by Gavin Barraclough.
50802 Inserted a call to use() for the aliased GetByVal.
50804 * dfg/DFGNonSpeculativeJIT.cpp:
50805 (JSC::DFG::NonSpeculativeJIT::compile):
50807 2011-07-20 Gavin Barraclough <barraclough@apple.com>
50809 https://bugs.webkit.org/show_bug.cgi?id=64909
50810 DFG JIT - Missing ToInt32 conversions for double constants.
50812 Reviewed by Sam Weinig.
50814 * dfg/DFGByteCodeParser.cpp:
50815 (JSC::DFG::ByteCodeParser::toInt32):
50816 - We cannot trivially omit ToInt32 conversions on double constants.
50818 2011-07-20 Filip Pizlo <fpizlo@apple.com>
50820 DFG speculative JIT sometimes claims to use compare operands twice, leading to
50821 use count corruption.
50822 https://bugs.webkit.org/show_bug.cgi?id=64903
50824 Reviewed by Gavin Barraclough.
50826 Move the calls to use() in SpeculativeJIT::compare() so that they only happen
50827 if the JITCodeGenerator's helper method (which also calls use()) is not called.
50829 * dfg/DFGSpeculativeJIT.cpp:
50830 (JSC::DFG::SpeculativeJIT::compare):
50832 2011-07-20 Oliver Hunt <oliver@apple.com>
50834 Don't throw away code when JSGarbageCollect API is called
50835 https://bugs.webkit.org/show_bug.cgi?id=64894
50837 Reviewed by Sam Weinig.
50839 Just call collectAllGarbage. That will clean up all unneeded
50840 code without causing any pathological recompilation problems.
50843 (JSGarbageCollect):
50845 2011-07-20 Oliver Hunt <oliver@apple.com>
50847 Codeblock doesn't visit cached structures in global resolve instructions
50848 https://bugs.webkit.org/show_bug.cgi?id=64889
50850 Reviewed by Sam Weinig.
50852 Visit the global resolve instructions. This fixes a couple
50853 of random crashes seen in the jquery tests when using the
50856 * bytecode/CodeBlock.cpp:
50857 (JSC::CodeBlock::visitAggregate):
50859 2011-07-20 James Robinson <jamesr@chromium.org>
50861 Revert worker and WebKit2 runloops to use currentTime() for scheduling instead of the monotonic clock
50862 https://bugs.webkit.org/show_bug.cgi?id=64841
50864 Reviewed by Mark Rowe.
50866 http://trac.webkit.org/changeset/91206 converted most of WebKit's deferred work scheduling to using the
50867 monotonic clock instead of WTF::currentTime(). This broke many plugin tests on WebKit2 for reasons that are
50868 unclear. This reverts everything except for WebCore::ThreadTimers back to the previous behavior.
50870 * wtf/ThreadingPthreads.cpp:
50871 (WTF::ThreadCondition::timedWait):
50872 * wtf/ThreadingWin.cpp:
50873 (WTF::absoluteTimeToWaitTimeoutInterval):
50874 * wtf/gtk/ThreadingGtk.cpp:
50875 (WTF::ThreadCondition::timedWait):
50876 * wtf/qt/ThreadingQt.cpp:
50877 (WTF::ThreadCondition::timedWait):
50879 2011-07-14 David Levin <levin@chromium.org>
50881 currentThread is too slow!
50882 https://bugs.webkit.org/show_bug.cgi?id=64577
50884 Reviewed by Darin Adler and Dmitry Titov.
50886 The problem is that currentThread results in a pthread_once call which always takes a lock.
50887 With this change, currentThread is 10% faster than isMainThread in release mode and only
50888 5% slower than isMainThread in debug.
50890 * wtf/ThreadIdentifierDataPthreads.cpp:
50891 (WTF::ThreadIdentifierData::initializeOnce): Remove the pthread once stuff
50892 which is no longer needed because this is called from initializeThreading().
50893 (WTF::ThreadIdentifierData::identifier): Remove the initializeKeyOnce call because
50894 intialization of the pthread key should already be done.
50895 (WTF::ThreadIdentifierData::initialize): Ditto.
50896 * wtf/ThreadIdentifierDataPthreads.h:
50897 * wtf/ThreadingPthreads.cpp:
50898 (WTF::initializeThreading): Acquire the pthread key here.
50900 2011-07-20 Mark Rowe <mrowe@apple.com>
50902 Fix the 32-bit build.
50904 * runtime/ObjectPrototype.cpp:
50905 (JSC::objectProtoFuncToString):
50907 2011-07-19 Gavin Barraclough <barraclough@apple.com>
50909 https://bugs.webkit.org/show_bug.cgi?id=64678
50910 Fix bugs in Object.prototype this handling.
50912 Reviewed by Darin Adler.
50914 Fix ES5.1 correctness issues identified by Mads Ager.
50916 * runtime/ObjectPrototype.cpp:
50917 (JSC::objectProtoFuncToString):
50918 - ES5.1 expects toString of undefined/null to produce "[object Undefined]"/"[object Null]".
50920 2011-07-19 Mark Hahnenberg <mhahnenberg@apple.com>
50922 [JSC] WebKit allocates gigabytes of memory when doing repeated string concatenation
50923 https://bugs.webkit.org/show_bug.cgi?id=63918
50925 Reviewed by Darin Adler.
50927 When allocating JSStrings during concatenation, we needed to call the Heap's reportExtraMemoryCost
50928 method due to additional string copying within several of the constructors when dealing with
50929 UStrings. This has been added to the UString version of the appendStringInConstruct method
50930 within the JSString class.
50932 * runtime/JSString.h:
50933 (JSC::RopeBuilder::JSString):
50934 (JSC::RopeBuilder::appendStringInConstruct):
50936 2011-07-19 Gavin Barraclough <barraclough@apple.com>
50938 https://bugs.webkit.org/show_bug.cgi?id=64679
50939 Fix bugs in Array.prototype this handling.
50941 Reviewed by Oliver Hunt.
50943 * runtime/ArrayPrototype.cpp:
50944 (JSC::arrayProtoFuncJoin):
50945 (JSC::arrayProtoFuncConcat):
50946 (JSC::arrayProtoFuncPop):
50947 (JSC::arrayProtoFuncPush):
50948 (JSC::arrayProtoFuncReverse):
50949 (JSC::arrayProtoFuncShift):
50950 (JSC::arrayProtoFuncSlice):
50951 (JSC::arrayProtoFuncSort):
50952 (JSC::arrayProtoFuncSplice):
50953 (JSC::arrayProtoFuncUnShift):
50954 (JSC::arrayProtoFuncFilter):
50955 (JSC::arrayProtoFuncMap):
50956 (JSC::arrayProtoFuncEvery):
50957 (JSC::arrayProtoFuncForEach):
50958 (JSC::arrayProtoFuncSome):
50959 (JSC::arrayProtoFuncReduce):
50960 (JSC::arrayProtoFuncReduceRight):
50961 (JSC::arrayProtoFuncIndexOf):
50962 (JSC::arrayProtoFuncLastIndexOf):
50963 - These methods should throw if this value is undefined.
50965 2011-07-19 Gavin Barraclough <barraclough@apple.com>
50967 https://bugs.webkit.org/show_bug.cgi?id=64677
50968 Fix bugs in String.prototype this handling.
50970 Reviewed by Oliver Hunt.
50972 undefined/null this values should throw TypeErrors, not convert to
50973 the global object, and primitive values should not be converted via
50976 * runtime/StringPrototype.cpp:
50977 (JSC::stringProtoFuncReplace):
50978 (JSC::stringProtoFuncCharAt):
50979 (JSC::stringProtoFuncCharCodeAt):
50980 (JSC::stringProtoFuncIndexOf):
50981 (JSC::stringProtoFuncLastIndexOf):
50982 (JSC::stringProtoFuncMatch):
50983 (JSC::stringProtoFuncSearch):
50984 (JSC::stringProtoFuncSlice):
50985 (JSC::stringProtoFuncSplit):
50986 (JSC::stringProtoFuncSubstr):
50987 (JSC::stringProtoFuncSubstring):
50988 (JSC::stringProtoFuncToLowerCase):
50989 (JSC::stringProtoFuncToUpperCase):
50990 (JSC::stringProtoFuncLocaleCompare):
50991 (JSC::stringProtoFuncBig):
50992 (JSC::stringProtoFuncSmall):
50993 (JSC::stringProtoFuncBlink):
50994 (JSC::stringProtoFuncBold):
50995 (JSC::stringProtoFuncFixed):
50996 (JSC::stringProtoFuncItalics):
50997 (JSC::stringProtoFuncStrike):
50998 (JSC::stringProtoFuncSub):
50999 (JSC::stringProtoFuncSup):
51000 (JSC::stringProtoFuncFontcolor):
51001 (JSC::stringProtoFuncFontsize):
51002 (JSC::stringProtoFuncAnchor):
51003 (JSC::stringProtoFuncLink):
51005 - These methods should throw if this value is undefined,
51006 convert ToString directly, not via ToObject.
51008 2011-07-19 Filip Pizlo <fpizlo@apple.com>
51010 DFG JIT sometimes emits spill code even when the respective values
51012 https://bugs.webkit.org/show_bug.cgi?id=64774
51014 Reviewed by Gavin Barraclough.
51016 The main high-level change is that it is now easier to call use() on a
51017 virtual register. JSValueOperand and its other-typed relatives now have
51018 a handy use() method, and jsValueResult() and friends now make it easier to
51019 pass UseChildrenCalledExplicitly.
51021 The rest of this patch hoists the call to use() as high as possible for
51022 all of those cases where either flushRegisters() or silentSpillAllRegisters()
51025 * dfg/DFGJITCodeGenerator.cpp:
51026 (JSC::DFG::JITCodeGenerator::cachedGetById):
51027 (JSC::DFG::JITCodeGenerator::cachedGetMethod):
51028 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
51029 (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare):
51030 (JSC::DFG::JITCodeGenerator::nonSpeculativeCompare):
51031 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq):
51032 (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeStrictEq):
51033 (JSC::DFG::JITCodeGenerator::nonSpeculativeStrictEq):
51034 (JSC::DFG::JITCodeGenerator::emitBranch):
51035 * dfg/DFGJITCodeGenerator.h:
51036 (JSC::DFG::JITCodeGenerator::use):
51037 (JSC::DFG::JITCodeGenerator::integerResult):
51038 (JSC::DFG::JITCodeGenerator::jsValueResult):
51039 (JSC::DFG::IntegerOperand::use):
51040 (JSC::DFG::DoubleOperand::use):
51041 (JSC::DFG::JSValueOperand::use):
51042 * dfg/DFGNonSpeculativeJIT.cpp:
51043 (JSC::DFG::NonSpeculativeJIT::valueToNumber):
51044 (JSC::DFG::NonSpeculativeJIT::valueToInt32):
51045 (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp):
51046 (JSC::DFG::NonSpeculativeJIT::basicArithOp):
51047 (JSC::DFG::NonSpeculativeJIT::compile):
51048 * dfg/DFGSpeculativeJIT.cpp:
51049 (JSC::DFG::SpeculativeJIT::compile):
51050 * dfg/DFGSpeculativeJIT.h:
51051 (JSC::DFG::SpeculateStrictInt32Operand::use):
51052 (JSC::DFG::SpeculateCellOperand::use):
51054 2011-07-19 Xan Lopez <xlopez@igalia.com>
51056 ARMv7 backend broken, lacks 3 parameter rshift32 method
51057 https://bugs.webkit.org/show_bug.cgi?id=64571
51059 Reviewed by Zoltan Herczeg.
51061 * assembler/MacroAssemblerARMv7.h:
51062 (JSC::MacroAssemblerARMv7::rshift32): add missing rshift32 method.
51064 2011-07-18 Filip Pizlo <fpizlo@apple.com>
51066 DFG JIT does not optimize strict equality as effectively as the old JIT does.
51067 https://bugs.webkit.org/show_bug.cgi?id=64759
51069 Reviewed by Gavin Barraclough.
51071 This adds a more complete set of strict equality optimizations. If either
51072 operand is known numeric, then the code reverts to the old style of optimizing
51073 (first try integer comparison). Otherwise it uses the old JIT's trick of
51074 first simultaneously checking if both operands are either numbers or cells;
51075 if not then a fast path is taken.
51077 * dfg/DFGJITCodeGenerator.cpp:
51078 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq):
51079 (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeStrictEq):
51080 (JSC::DFG::JITCodeGenerator::nonSpeculativeStrictEq):
51081 * dfg/DFGJITCodeGenerator.h:
51082 * dfg/DFGNonSpeculativeJIT.cpp:
51083 (JSC::DFG::NonSpeculativeJIT::compile):
51084 * dfg/DFGOperations.cpp:
51085 * dfg/DFGOperations.h:
51086 * dfg/DFGSpeculativeJIT.cpp:
51087 (JSC::DFG::SpeculativeJIT::compile):
51089 2011-07-18 Gavin Barraclough <barraclough@apple.com>
51091 https://bugs.webkit.org/show_bug.cgi?id=64760
51092 DFG JIT - Should be able to compile program code.
51094 Reviewed by Geoff Garen.
51096 Add support for op_end, hooks to compile program code in Executable.cpp.
51098 * dfg/DFGByteCodeParser.cpp:
51099 (JSC::DFG::ByteCodeParser::parseBlock):
51100 - Add support for op_end
51101 * dfg/DFGJITCompiler.cpp:
51102 (JSC::DFG::JITCompiler::compileEntry):
51103 (JSC::DFG::JITCompiler::compileBody):
51104 (JSC::DFG::JITCompiler::link):
51105 - Added, separate out steps of compileFunction.
51106 (JSC::DFG::JITCompiler::compile):
51107 - Added, compile program code.
51108 (JSC::DFG::JITCompiler::compileFunction):
51109 - Sections separated out to helper functions.
51110 * dfg/DFGJITCompiler.h:
51111 (JSC::DFG::JITCompiler::JITCompiler):
51112 - Added m_exceptionCheckCount.
51113 * runtime/Executable.cpp:
51114 (JSC::tryDFGCompile):
51115 (JSC::tryDFGCompileFunction):
51116 (JSC::ProgramExecutable::compileInternal):
51117 (JSC::FunctionExecutable::compileForCallInternal):
51118 - Renamed tryDFGCompile to tryDFGCompileFunction, added tryDFGCompile to compile program code.
51120 2011-07-18 Gavin Barraclough <barraclough@apple.com>
51122 https://bugs.webkit.org/show_bug.cgi?id=64678
51123 Fix bugs in Object.prototype this handling.
51125 Reviewed by Oliver Hunt.
51127 undefined/null this values should throw TypeErrors, not convert to the global object,
51128 also, to toLocaleString should be calling the ToObject & invoking the object's toString
51129 function, even for values that are already strings.
51131 * runtime/ObjectPrototype.cpp:
51132 (JSC::objectProtoFuncValueOf):
51133 (JSC::objectProtoFuncHasOwnProperty):
51134 (JSC::objectProtoFuncIsPrototypeOf):
51135 (JSC::objectProtoFuncPropertyIsEnumerable):
51136 (JSC::objectProtoFuncToLocaleString):
51137 (JSC::objectProtoFuncToString):
51139 2011-07-18 Filip Pizlo <fpizlo@apple.com>
51141 JSC GC lazy sweep does not inline the common cases of cell destruction.
51142 https://bugs.webkit.org/show_bug.cgi?id=64745
51144 Reviewed by Oliver Hunt.
51146 This inlines the case of JSFinalObject destruction.
51148 * heap/MarkedBlock.cpp:
51149 (JSC::MarkedBlock::lazySweep):
51151 2011-07-18 Oliver Hunt <oliver@apple.com>
51153 Interpreter build-fix
51155 * interpreter/Interpreter.cpp:
51156 (JSC::Interpreter::privateExecute):
51158 2011-07-18 Filip Pizlo <fpizlo@apple.com>
51160 DFG JIT does not optimize equal-null comparisons and branches.
51161 https://bugs.webkit.org/show_bug.cgi?id=64659
51163 Reviewed by Gavin Barraclough.
51165 Added a peephole-aware compare-to-null implementation to JITCodeGenerator,
51166 which is used by both the speculative and non-speculative JIT. Through
51167 the use of the new isNullConstant helper, the two JITs invoke the
51168 nonSpecualtiveCompareNull() helper instead of their regular comparison
51169 helpers when compiling CompareEq. Through the use of the new isKnownCell
51170 helper, the compare-null code will skip the is-a-cell check if the
51171 speculative JIT had been speculating cell.
51173 * dfg/DFGJITCodeGenerator.cpp:
51174 (JSC::DFG::JITCodeGenerator::isKnownCell):
51175 (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompareNull):
51176 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranchNull):
51177 (JSC::DFG::JITCodeGenerator::nonSpeculativeCompareNull):
51178 * dfg/DFGJITCodeGenerator.h:
51179 (JSC::DFG::JITCodeGenerator::isNullConstant):
51180 * dfg/DFGNonSpeculativeJIT.cpp:
51181 (JSC::DFG::NonSpeculativeJIT::compile):
51182 * dfg/DFGOperations.cpp:
51183 * dfg/DFGSpeculativeJIT.cpp:
51184 (JSC::DFG::SpeculativeJIT::compile):
51186 2011-07-18 James Robinson <jamesr@chromium.org>
51188 Timer scheduling should be based off the monotonic clock
51189 https://bugs.webkit.org/show_bug.cgi?id=64544
51191 Reviewed by Darin Adler.
51193 Switches ThreadCondition::timedWait and related utility functions from currentTime() to
51194 monotonicallyIncreasingTime().
51196 Add WTF::monotonicallyIncreasingTime() to list of exported functions so it can be accessed from WebCore/WebKit.
51198 * JavaScriptCore.exp:
51199 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
51200 * wtf/ThreadingPthreads.cpp:
51201 (WTF::ThreadCondition::timedWait):
51202 * wtf/ThreadingWin.cpp:
51203 (WTF::absoluteTimeToWaitTimeoutInterval):
51204 * wtf/gtk/ThreadingGtk.cpp:
51205 (WTF::ThreadCondition::timedWait):
51206 * wtf/qt/ThreadingQt.cpp:
51207 (WTF::ThreadCondition::timedWait):
51209 2011-07-18 Filip Pizlo <fpizlo@apple.com>
51211 JSC JIT does not inline GC allocation fast paths
51212 https://bugs.webkit.org/show_bug.cgi?id=64582
51214 Reviewed by Oliver Hunt.
51216 This addresses inlining allocation for the easiest-to-allocate cases:
51217 op_new_object and op_create_this. Inlining GC allocation fast paths
51218 required three changes. First, the JSGlobalData now saves the vtable
51219 pointer of JSFinalObject, since that's what op_new_object and
51220 op_create_this allocate. Second, the Heap exposes a reference to
51221 the appropriate SizeClass, so that the JIT may inline accesses
51222 directly to the SizeClass for JSFinalObject allocations. And third,
51223 the JIT is extended with code to emit inline fast paths for GC
51224 allocation. A stub call is emitted in the case where the inline fast
51228 (JSC::Heap::sizeClassFor):
51229 (JSC::Heap::allocate):
51231 (JSC::JIT::privateCompileSlowCases):
51233 * jit/JITInlineMethods.h:
51234 (JSC::JIT::emitAllocateJSFinalObject):
51235 * jit/JITOpcodes.cpp:
51236 (JSC::JIT::emit_op_new_object):
51237 (JSC::JIT::emitSlow_op_new_object):
51238 (JSC::JIT::emit_op_create_this):
51239 (JSC::JIT::emitSlow_op_create_this):
51240 * jit/JITOpcodes32_64.cpp:
51241 (JSC::JIT::emit_op_new_object):
51242 (JSC::JIT::emitSlow_op_new_object):
51243 (JSC::JIT::emit_op_create_this):
51244 (JSC::JIT::emitSlow_op_create_this):
51245 * runtime/JSGlobalData.cpp:
51246 (JSC::JSGlobalData::storeVPtrs):
51247 * runtime/JSGlobalData.h:
51248 * runtime/JSObject.h:
51249 (JSC::JSFinalObject::JSFinalObject):
51250 (JSC::JSObject::offsetOfInheritorID):
51252 2011-07-18 Mark Hahnenberg <mhahnenberg@apple.com>
51254 Refactor JSC to replace JSCell::operator new with static create method
51255 https://bugs.webkit.org/show_bug.cgi?id=64466
51257 Reviewed by Oliver Hunt (oliver@apple.com) and Darin Adler (darin@apple.com).
51259 First step in a longer refactoring process to remove the use of
51260 operator new overloading in order to allocate GC objects and to replace
51261 this method with static create methods for each individual type of heap-allocated
51262 JS object. This particular patch only deals with replacing uses of
51263 operator new within JSC proper. Future patches will remove it from the
51264 parts that interface with the DOM. Due to the DOM's continued dependence
51265 on it, operator new has not actually been removed from JSCell.
51267 * API/JSCallbackConstructor.h:
51268 (JSC::JSCallbackConstructor::create):
51269 * API/JSCallbackFunction.h:
51270 (JSC::JSCallbackFunction::create):
51271 * API/JSCallbackObject.h:
51272 (JSC::JSCallbackObject::operator new):
51273 (JSC::JSCallbackObject::create):
51274 * API/JSCallbackObjectFunctions.h:
51275 (JSC::::staticFunctionGetter):
51276 * API/JSClassRef.cpp:
51277 (OpaqueJSClass::prototype):
51278 * API/JSContextRef.cpp:
51279 * API/JSObjectRef.cpp:
51281 (JSObjectMakeFunctionWithCallback):
51282 (JSObjectMakeConstructor):
51283 * JavaScriptCore.exp:
51284 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
51285 * bytecode/CodeBlock.cpp:
51286 (JSC::CodeBlock::createActivation):
51287 * bytecompiler/BytecodeGenerator.cpp:
51288 (JSC::BytecodeGenerator::BytecodeGenerator):
51289 * bytecompiler/BytecodeGenerator.h:
51290 (JSC::BytecodeGenerator::makeFunction):
51291 * bytecompiler/NodesCodegen.cpp:
51292 (JSC::RegExpNode::emitBytecode):
51293 * interpreter/Interpreter.cpp:
51294 (JSC::Interpreter::privateExecute):
51295 (JSC::Interpreter::retrieveArguments):
51296 * jit/JITStubs.cpp:
51297 (JSC::DEFINE_STUB_FUNCTION):
51299 (GlobalObject::create):
51300 (GlobalObject::GlobalObject):
51303 * runtime/Arguments.h:
51304 (JSC::Arguments::create):
51305 (JSC::Arguments::createNoParameters):
51306 * runtime/ArrayConstructor.cpp:
51307 (JSC::constructArrayWithSizeQuirk):
51308 * runtime/ArrayConstructor.h:
51309 (JSC::ArrayConstructor::create):
51310 * runtime/ArrayPrototype.cpp:
51311 (JSC::arrayProtoFuncSplice):
51312 * runtime/ArrayPrototype.h:
51313 (JSC::ArrayPrototype::create):
51314 * runtime/BooleanConstructor.cpp:
51315 (JSC::constructBoolean):
51316 (JSC::constructBooleanFromImmediateBoolean):
51317 * runtime/BooleanConstructor.h:
51318 (JSC::BooleanConstructor::create):
51319 * runtime/BooleanObject.h:
51320 (JSC::BooleanObject::create):
51321 * runtime/BooleanPrototype.h:
51322 (JSC::BooleanPrototype::create):
51323 * runtime/DateConstructor.cpp:
51324 (JSC::constructDate):
51325 * runtime/DateConstructor.h:
51326 (JSC::DateConstructor::create):
51327 * runtime/DateInstance.h:
51328 (JSC::DateInstance::create):
51329 * runtime/DatePrototype.h:
51330 (JSC::DatePrototype::create):
51331 * runtime/Error.cpp:
51332 (JSC::createError):
51333 (JSC::createEvalError):
51334 (JSC::createRangeError):
51335 (JSC::createReferenceError):
51336 (JSC::createSyntaxError):
51337 (JSC::createTypeError):
51338 (JSC::createURIError):
51339 (JSC::StrictModeTypeErrorFunction::create):
51340 (JSC::createTypeErrorFunction):
51341 * runtime/ErrorConstructor.h:
51342 (JSC::ErrorConstructor::create):
51343 * runtime/ErrorInstance.cpp:
51344 (JSC::ErrorInstance::ErrorInstance):
51345 (JSC::ErrorInstance::create):
51346 * runtime/ErrorInstance.h:
51347 * runtime/ErrorPrototype.cpp:
51348 (JSC::ErrorPrototype::ErrorPrototype):
51349 * runtime/ErrorPrototype.h:
51350 (JSC::ErrorPrototype::create):
51351 * runtime/ExceptionHelpers.cpp:
51352 (JSC::InterruptedExecutionError::InterruptedExecutionError):
51353 (JSC::InterruptedExecutionError::create):
51354 (JSC::createInterruptedExecutionException):
51355 (JSC::TerminatedExecutionError::TerminatedExecutionError):
51356 (JSC::TerminatedExecutionError::create):
51357 (JSC::createTerminatedExecutionException):
51358 * runtime/Executable.cpp:
51359 (JSC::FunctionExecutable::FunctionExecutable):
51360 (JSC::FunctionExecutable::fromGlobalCode):
51361 * runtime/Executable.h:
51362 (JSC::ExecutableBase::create):
51363 (JSC::NativeExecutable::create):
51364 (JSC::ScriptExecutable::ScriptExecutable):
51365 (JSC::EvalExecutable::create):
51366 (JSC::ProgramExecutable::create):
51367 (JSC::FunctionExecutable::create):
51368 (JSC::FunctionExecutable::make):
51369 * runtime/FunctionConstructor.cpp:
51370 (JSC::constructFunctionSkippingEvalEnabledCheck):
51371 * runtime/FunctionConstructor.h:
51372 (JSC::FunctionConstructor::create):
51373 * runtime/FunctionPrototype.cpp:
51374 (JSC::FunctionPrototype::addFunctionProperties):
51375 * runtime/FunctionPrototype.h:
51376 (JSC::FunctionPrototype::create):
51377 * runtime/GetterSetter.h:
51378 (JSC::GetterSetter::create):
51379 * runtime/JSAPIValueWrapper.h:
51380 (JSC::JSAPIValueWrapper::create):
51381 (JSC::jsAPIValueWrapper):
51382 * runtime/JSActivation.cpp:
51383 (JSC::JSActivation::argumentsGetter):
51384 * runtime/JSActivation.h:
51385 (JSC::JSActivation::create):
51386 * runtime/JSArray.h:
51387 (JSC::JSArray::create):
51388 * runtime/JSCell.h:
51389 (JSC::JSCell::allocateCell):
51390 * runtime/JSFunction.h:
51391 (JSC::JSFunction::create):
51392 * runtime/JSGlobalObject.cpp:
51393 (JSC::JSGlobalObject::init):
51394 (JSC::JSGlobalObject::reset):
51395 * runtime/JSGlobalObject.h:
51396 (JSC::constructEmptyArray):
51397 (JSC::constructArray):
51398 * runtime/JSNotAnObject.h:
51399 (JSC::JSNotAnObject::create):
51400 * runtime/JSONObject.h:
51401 (JSC::JSONObject::create):
51402 * runtime/JSObject.cpp:
51403 (JSC::JSObject::defineGetter):
51404 (JSC::JSObject::defineSetter):
51405 (JSC::putDescriptor):
51406 * runtime/JSObject.h:
51407 (JSC::JSFinalObject::create):
51408 * runtime/JSPropertyNameIterator.cpp:
51409 (JSC::JSPropertyNameIterator::create):
51410 * runtime/JSPropertyNameIterator.h:
51411 (JSC::JSPropertyNameIterator::create):
51412 * runtime/JSString.cpp:
51413 (JSC::JSString::substringFromRope):
51414 (JSC::JSString::replaceCharacter):
51415 (JSC::StringObject::create):
51416 * runtime/JSString.h:
51417 (JSC::RopeBuilder::JSString):
51418 (JSC::RopeBuilder::create):
51419 (JSC::RopeBuilder::createHasOtherOwner):
51420 (JSC::jsSingleCharacterString):
51421 (JSC::jsSingleCharacterSubstring):
51422 (JSC::jsNontrivialString):
51424 (JSC::jsSubstring):
51425 (JSC::jsOwnedString):
51426 * runtime/JSValue.cpp:
51427 (JSC::JSValue::toObjectSlowCase):
51428 (JSC::JSValue::synthesizeObject):
51429 (JSC::JSValue::synthesizePrototype):
51430 * runtime/Lookup.cpp:
51431 (JSC::setUpStaticFunctionSlot):
51432 * runtime/MathObject.h:
51433 (JSC::MathObject::create):
51434 * runtime/NativeErrorConstructor.cpp:
51435 (JSC::NativeErrorConstructor::NativeErrorConstructor):
51436 * runtime/NativeErrorConstructor.h:
51437 (JSC::NativeErrorConstructor::create):
51438 * runtime/NativeErrorPrototype.h:
51439 (JSC::NativeErrorPrototype::create):
51440 * runtime/NumberConstructor.cpp:
51441 (JSC::constructWithNumberConstructor):
51442 * runtime/NumberConstructor.h:
51443 (JSC::NumberConstructor::create):
51444 * runtime/NumberObject.cpp:
51445 (JSC::constructNumber):
51446 * runtime/NumberObject.h:
51447 (JSC::NumberObject::create):
51448 * runtime/NumberPrototype.h:
51449 (JSC::NumberPrototype::create):
51450 * runtime/ObjectConstructor.h:
51451 (JSC::ObjectConstructor::create):
51452 * runtime/ObjectPrototype.h:
51453 (JSC::ObjectPrototype::create):
51454 * runtime/Operations.h:
51456 * runtime/RegExp.cpp:
51457 (JSC::RegExp::RegExp):
51458 (JSC::RegExp::createWithoutCaching):
51459 (JSC::RegExp::create):
51460 * runtime/RegExp.h:
51461 * runtime/RegExpCache.cpp:
51462 (JSC::RegExpCache::lookupOrCreate):
51463 * runtime/RegExpConstructor.cpp:
51464 (JSC::RegExpConstructor::arrayOfMatches):
51465 (JSC::constructRegExp):
51466 * runtime/RegExpConstructor.h:
51467 (JSC::RegExpConstructor::create):
51468 * runtime/RegExpMatchesArray.h:
51469 (JSC::RegExpMatchesArray::create):
51470 * runtime/RegExpObject.h:
51471 (JSC::RegExpObject::create):
51472 * runtime/RegExpPrototype.cpp:
51473 (JSC::regExpProtoFuncCompile):
51474 * runtime/RegExpPrototype.h:
51475 (JSC::RegExpPrototype::create):
51476 * runtime/ScopeChain.h:
51477 (JSC::ScopeChainNode::create):
51478 (JSC::ScopeChainNode::push):
51479 * runtime/SmallStrings.cpp:
51480 (JSC::SmallStrings::createEmptyString):
51481 (JSC::SmallStrings::createSingleCharacterString):
51482 * runtime/StringConstructor.cpp:
51483 (JSC::constructWithStringConstructor):
51484 * runtime/StringConstructor.h:
51485 (JSC::StringConstructor::create):
51486 * runtime/StringObject.h:
51487 (JSC::StringObject::create):
51488 * runtime/StringObjectThatMasqueradesAsUndefined.h:
51489 (JSC::StringObjectThatMasqueradesAsUndefined::create):
51490 * runtime/StringPrototype.cpp:
51491 (JSC::stringProtoFuncMatch):
51492 (JSC::stringProtoFuncSearch):
51493 * runtime/StringPrototype.h:
51494 (JSC::StringPrototype::create):
51495 * runtime/Structure.h:
51496 (JSC::Structure::create):
51497 (JSC::Structure::createStructure):
51498 * runtime/StructureChain.h:
51499 (JSC::StructureChain::create):
51501 2011-07-17 Ryuan Choi <ryuan.choi@samsung.com>
51503 [EFL] Refactor scheduleDispatchFunctionsOnMainThread to fix crash.
51504 https://bugs.webkit.org/show_bug.cgi?id=64337
51506 Replace ecore_timer_add to Ecore_Pipe.
51507 This is needed because ecore_timer should not be called in a child thread,
51508 but in the main thread.
51510 Reviewed by Antonio Gomes.
51512 * wtf/efl/MainThreadEfl.cpp:
51514 (WTF::monitorDispatchFunctions):
51515 (WTF::initializeMainThreadPlatform):
51516 (WTF::scheduleDispatchFunctionsOnMainThread):
51518 2011-07-17 Filip Pizlo <fpizlo@apple.com>
51520 DFG JIT operationCompareEqual does not inline JSValue::equalSlowCaseInline.
51521 https://bugs.webkit.org/show_bug.cgi?id=64637
51523 Reviewed by Gavin Barraclough.
51525 * dfg/DFGOperations.cpp:
51527 2011-07-16 Gavin Barraclough <barraclough@apple.com>
51529 https://bugs.webkit.org/show_bug.cgi?id=64657
51530 Converted this value not preserved when accessed via direct eval.
51532 Reviewed by Oliver Hunt.
51534 Upon entry into a non-strict function, primitive this values should be boxed as Object types
51535 (or substituted with the global object) - which is done by op_convert_this. However we only
51536 do so where this is used lexically within the function (we omit the conversion op if not).
51537 The problem comes if a direct eval (running within the function's scope) accesses the this
51540 We are safe in the case of a single eval, since the this object will be converted within
51541 callEval, however the converted value is not preserved, and a new wrapper object is allocated
51542 each time eval is invoked. This is inefficient and incorrect, since any changes to the wrapper
51543 object will be lost between eval statements.
51545 * bytecompiler/BytecodeGenerator.cpp:
51546 (JSC::BytecodeGenerator::BytecodeGenerator):
51547 - If a function uses eval, we always need to convert this.
51548 * interpreter/Interpreter.cpp:
51549 (JSC::Interpreter::execute):
51550 - Don't convert primitive values here - this is too late!
51551 (JSC::Interpreter::privateExecute):
51552 - Changed op_convert_this to call new isPrimitive method.
51553 * jit/JITStubs.cpp:
51554 (JSC::DEFINE_STUB_FUNCTION):
51555 - Changed op_convert_this to call new isPrimitive method.
51556 * runtime/JSCell.h:
51557 (JSC::JSCell::JSValue::isPrimitive):
51558 - Added JSValue::isPrimitive.
51559 * runtime/JSValue.h:
51560 - Added JSValue::isPrimitive.
51562 2011-07-16 Filip Pizlo <fpizlo@apple.com>
51564 DFG JIT compare/branch code emits is-integer tests even when a value is
51565 definitely not an integer.
51566 https://bugs.webkit.org/show_bug.cgi?id=64654
51568 Reviewed by Gavin Barraclough.
51570 Added the isKnownNotInteger() method, which returns true if a node is
51571 definitely not an integer and will always fail any is-integer test. Then
51572 modified the compare and branch code to use this method; if it returns
51573 true then is-int tests are omitted and the compiler always emits a slow
51576 * dfg/DFGJITCodeGenerator.cpp:
51577 (JSC::DFG::JITCodeGenerator::isKnownNotInteger):
51578 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
51579 (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare):
51580 (JSC::DFG::JITCodeGenerator::nonSpeculativeCompare):
51581 * dfg/DFGJITCodeGenerator.h:
51582 * dfg/DFGSpeculativeJIT.cpp:
51583 (JSC::DFG::SpeculativeJIT::compare):
51585 2011-07-16 Filip Pizlo <fpizlo@apple.com>
51587 DFG speculative JIT has dead code for slow calls for branches.
51588 https://bugs.webkit.org/show_bug.cgi?id=64653
51590 Reviewed by Gavin Barraclough.
51592 Removed SpeculativeJIT::compilePeepHoleCall.
51594 * dfg/DFGSpeculativeJIT.cpp:
51595 * dfg/DFGSpeculativeJIT.h:
51597 2011-07-15 Mark Rowe <mrowe@apple.com>
51603 2011-07-15 Gavin Barraclough <barraclough@apple.com>
51605 NativeError.prototype objects have [[Class]] of "Object" but should be "Error"
51606 https://bugs.webkit.org/show_bug.cgi?id=55346
51608 Reviewed by Sam Weinig.
51610 * runtime/ErrorPrototype.cpp:
51611 (JSC::ErrorPrototype::ErrorPrototype):
51612 - Switch to putDirect since we're not the only ones tranitioning this Structure now.
51613 * runtime/NativeErrorPrototype.cpp:
51614 (JSC::NativeErrorPrototype::NativeErrorPrototype):
51615 * runtime/NativeErrorPrototype.h:
51616 - Switch base class to ErrorPrototype.
51618 2011-07-15 Gavin Barraclough <barraclough@apple.com>
51620 DFG JIT - Where arguments passed are integers, speculate this.
51621 https://bugs.webkit.org/show_bug.cgi?id=64630
51623 Reviewed by Sam Weinig.
51625 Presently the DFG JIT is overly aggressively predicting double.
51626 Use a bit of dynamic information, and curtail this a little.
51628 * dfg/DFGGraph.cpp:
51629 (JSC::DFG::Graph::predictArgumentTypes):
51630 - Check for integer arguments.
51632 - Function declaration.
51633 * runtime/Executable.cpp:
51634 (JSC::tryDFGCompile):
51635 (JSC::FunctionExecutable::compileForCallInternal):
51636 - Add call to predictArgumentTypes.
51638 2011-07-15 Filip Pizlo <fpizlo@apple.com>
51640 DFG JIT is inconsistent about fusing branches and speculating
51641 integer comparisons for branches.
51642 https://bugs.webkit.org/show_bug.cgi?id=64573
51644 Reviewed by Gavin Barraclough.
51646 This patch moves some of NonSpeculativeJIT's functionality up into the
51647 JITCodeGenerator superclass so that it can be used from both JITs. Now,
51648 in cases where the speculative JIT doesn't want to speculate but still
51649 wants to emit good code, it can reliably emit the same code sequence as
51650 the non-speculative JIT. This patch also extends the non-speculative
51651 JIT's compare optimizations to include compare/branch fusing, and
51652 extends the speculative JIT's compare optimizations to cover StrictEqual.
51654 * dfg/DFGJITCodeGenerator.cpp:
51655 (JSC::DFG::JITCodeGenerator::isKnownInteger):
51656 (JSC::DFG::JITCodeGenerator::isKnownNumeric):
51657 (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
51658 (JSC::DFG::JITCodeGenerator::nonSpeculativeCompare):
51659 * dfg/DFGJITCodeGenerator.h:
51660 (JSC::DFG::JITCodeGenerator::detectPeepHoleBranch):
51661 * dfg/DFGNonSpeculativeJIT.cpp:
51662 (JSC::DFG::NonSpeculativeJIT::compile):
51663 * dfg/DFGNonSpeculativeJIT.h:
51664 * dfg/DFGOperations.cpp:
51665 * dfg/DFGSpeculativeJIT.cpp:
51666 (JSC::DFG::SpeculativeJIT::compare):
51667 (JSC::DFG::SpeculativeJIT::compile):
51668 * dfg/DFGSpeculativeJIT.h:
51671 2011-07-14 Gavin Barraclough <barraclough@apple.com>
51673 https://bugs.webkit.org/show_bug.cgi?id=64250
51674 Global strict mode function leaking global object as "this".
51676 Reviewed by Oliver Hunt.
51678 The root problem here is that we pass the wrong values into
51679 calls, and then try to fix them up in the callee. Correct
51680 behaviour per the spec is to pass in the value undefined,
51681 as this unless either (1) the function call is based on an
51682 explicit property access or (2) the base of the call comes
51683 directly from a 'with'.
51685 This change does away with the need for this conversion of
51686 objects (non strict code should only box primitives), and
51687 does away with all this conversion for strict functions.
51689 This patch may have web compatibility ramifications, and may
51690 require some advocacy.
51692 * bytecode/CodeBlock.cpp:
51693 (JSC::CodeBlock::dump):
51694 - Removed op_convert_this_strict, added op_resolve_with_this.
51695 * bytecode/Opcode.h:
51696 - Removed op_convert_this_strict, added op_resolve_with_this.
51697 * bytecompiler/BytecodeGenerator.cpp:
51698 (JSC::BytecodeGenerator::BytecodeGenerator):
51699 (JSC::BytecodeGenerator::emitResolveWithThis):
51700 - Removed op_convert_this_strict, added op_resolve_with_this.
51701 * bytecompiler/BytecodeGenerator.h:
51702 - Removed op_convert_this_strict, added op_resolve_with_this.
51703 * bytecompiler/NodesCodegen.cpp:
51704 (JSC::EvalFunctionCallNode::emitBytecode):
51705 (JSC::FunctionCallResolveNode::emitBytecode):
51706 - Removed op_convert_this_strict, added op_resolve_with_this.
51707 * dfg/DFGSpeculativeJIT.cpp:
51708 (JSC::DFG::SpeculativeJIT::compile):
51709 - Change NeedsThisConversion check to test for JSString's vptr
51710 (objects no longer need conversion).
51711 * interpreter/Interpreter.cpp:
51712 (JSC::Interpreter::resolveThisAndProperty):
51713 - Based on resolveBaseAndProperty, but produce correct this value.
51714 (JSC::Interpreter::privateExecute):
51715 - Removed op_convert_this_strict, added op_resolve_with_this.
51716 * interpreter/Interpreter.h:
51718 (JSC::JIT::privateCompileMainPass):
51719 (JSC::JIT::privateCompileSlowCases):
51720 - Removed op_convert_this_strict, added op_resolve_with_this.
51722 * jit/JITOpcodes.cpp:
51723 (JSC::JIT::emit_op_resolve_with_this):
51724 - Removed op_convert_this_strict, added op_resolve_with_this.
51725 (JSC::JIT::emit_op_convert_this):
51726 (JSC::JIT::emitSlow_op_convert_this):
51727 - Change NeedsThisConversion check to test for JSString's vptr
51728 (objects no longer need conversion).
51729 * jit/JITOpcodes32_64.cpp:
51730 (JSC::JIT::emit_op_resolve_with_this):
51731 - Removed op_convert_this_strict, added op_resolve_with_this.
51732 (JSC::JIT::emit_op_convert_this):
51733 (JSC::JIT::emitSlow_op_convert_this):
51734 - Change NeedsThisConversion check to test for JSString's vptr
51735 (objects no longer need conversion).
51736 * jit/JITStubs.cpp:
51737 (JSC::DEFINE_STUB_FUNCTION):
51738 - Removed op_convert_this_strict, added op_resolve_with_this.
51740 - Removed op_convert_this_strict, added op_resolve_with_this.
51741 * runtime/JSActivation.h:
51742 - removed NeedsThisConversion flag, added IsEnvironmentRecord.
51743 * runtime/JSStaticScopeObject.h:
51744 - removed NeedsThisConversion flag, added IsEnvironmentRecord.
51745 * runtime/JSString.h:
51746 (JSC::RopeBuilder::createStructure):
51747 - removed NeedsThisConversion.
51748 * runtime/JSTypeInfo.h:
51749 (JSC::TypeInfo::isEnvironmentRecord):
51750 (JSC::TypeInfo::overridesHasInstance):
51751 - removed NeedsThisConversion flag, added IsEnvironmentRecord.
51752 * runtime/JSValue.h:
51753 - removed NeedsThisConversion.
51754 * runtime/JSVariableObject.h:
51755 - Corrected StructureFlags inheritance.
51756 * runtime/StrictEvalActivation.h:
51757 (JSC::StrictEvalActivation::createStructure):
51758 - Added IsEnvironmentRecord to StructureFlags, addded createStructure.
51759 * runtime/Structure.h:
51760 - removed NeedsThisConversion.
51761 * tests/mozilla/ecma/String/15.5.4.6-2.js:
51763 - Removed invalid test case.
51765 2011-07-15 Sheriff Bot <webkit.review.bot@gmail.com>
51767 Unreviewed, rolling out r91082, r91087, and r91089.
51768 http://trac.webkit.org/changeset/91082
51769 http://trac.webkit.org/changeset/91087
51770 http://trac.webkit.org/changeset/91089
51771 https://bugs.webkit.org/show_bug.cgi?id=64616
51773 gtk tests are failing a lot after this change. (Requested by
51774 dave_levin on #webkit).
51776 * wtf/ThreadIdentifierDataPthreads.cpp:
51777 (WTF::ThreadIdentifierData::identifier):
51778 (WTF::ThreadIdentifierData::initialize):
51779 (WTF::ThreadIdentifierData::initializeKeyOnceHelper):
51780 (WTF::ThreadIdentifierData::initializeKeyOnce):
51781 * wtf/ThreadIdentifierDataPthreads.h:
51782 * wtf/ThreadingPthreads.cpp:
51783 (WTF::initializeThreading):
51785 2011-07-15 David Levin <levin@chromium.org>
51787 Another attempted build fix.
51789 * wtf/ThreadIdentifierDataPthreads.cpp: Add include to pick
51790 up the definition of PTHREAD_KEYS_MAX.
51792 2011-07-15 David Levin <levin@chromium.org>
51794 Chromium build fix.
51796 * wtf/ThreadIdentifierDataPthreads.cpp: Add include to pick
51797 up the definition of PTHREAD_KEYS_MAX.
51799 2011-07-14 David Levin <levin@chromium.org>
51801 currentThread is too slow!
51802 https://bugs.webkit.org/show_bug.cgi?id=64577
51804 Reviewed by Darin Adler and Dmitry Titov.
51806 The problem is that currentThread results in a pthread_once call which always takes a lock.
51807 With this change, currentThread is 10% faster than isMainThread in release mode and only
51808 5% slower than isMainThread in debug.
51810 * wtf/ThreadIdentifierDataPthreads.cpp:
51811 (WTF::ThreadIdentifierData::initializeOnce): Remove the pthread once stuff
51812 which is no longer needed because this is called from initializeThreading().
51813 (WTF::ThreadIdentifierData::identifier): Remove the initializeKeyOnce call because
51814 intialization of the pthread key should already be done.
51815 (WTF::ThreadIdentifierData::initialize): Ditto.
51816 * wtf/ThreadIdentifierDataPthreads.h:
51817 * wtf/ThreadingPthreads.cpp:
51818 (WTF::initializeThreading): Acquire the pthread key here.
51820 2011-07-14 Filip Pizlo <fpizlo@apple.com>
51822 DFG JIT does not optimize Branch as well as it could.
51823 https://bugs.webkit.org/show_bug.cgi?id=64574
51825 Reviewed by Gavin Barraclough.
51827 This creates a common code path for emitting unfused branches, which does
51828 no speculation, and only performs a slow call if absolutely necessary.
51830 * dfg/DFGJITCodeGenerator.cpp:
51831 (JSC::DFG::JITCodeGenerator::emitBranch):
51832 * dfg/DFGJITCodeGenerator.h:
51833 * dfg/DFGNonSpeculativeJIT.cpp:
51834 (JSC::DFG::NonSpeculativeJIT::compile):
51835 * dfg/DFGSpeculativeJIT.cpp:
51836 (JSC::DFG::SpeculativeJIT::compile):
51838 2011-07-14 Filip Pizlo <fpizlo@apple.com>
51840 GC allocation fast path has too many operations.
51841 https://bugs.webkit.org/show_bug.cgi?id=64493
51843 Reviewed by Darin Adler.
51845 Changed the timing of the lazy sweep so that it occurs when we land on
51846 a previously-unsweeped block, rather than whenever we land on an unsweeped
51847 cell. After the per-block lazy sweep occurs, the block is turned into a
51848 singly linked list of free cells. The allocation fast path is now just a
51849 load-branch-store to remove a cell from the head of the list.
51851 Additionally, this changes the way new blocks are allocated. Previously,
51852 they would be populated with dummy cells. With this patch, they are
51853 turned into a free list, which means that there will never be destructor
51854 calls for allocations in fresh blocks.
51856 These changes result in a 1.9% speed-up on V8, and a 0.6% speed-up on
51857 SunSpider. There are no observed statistically significant slow-downs
51858 on any individual benchmark.
51860 * JavaScriptCore.exp:
51862 (JSC::Heap::allocateSlowCase):
51863 (JSC::Heap::collect):
51864 (JSC::Heap::canonicalizeBlocks):
51865 (JSC::Heap::resetAllocator):
51867 (JSC::Heap::forEachProtectedCell):
51868 (JSC::Heap::forEachCell):
51869 (JSC::Heap::forEachBlock):
51870 (JSC::Heap::allocate):
51871 * heap/MarkedBlock.cpp:
51872 (JSC::MarkedBlock::MarkedBlock):
51873 (JSC::MarkedBlock::lazySweep):
51874 (JSC::MarkedBlock::blessNewBlockForFastPath):
51875 (JSC::MarkedBlock::blessNewBlockForSlowPath):
51876 (JSC::MarkedBlock::canonicalizeBlock):
51877 * heap/MarkedBlock.h:
51878 * heap/NewSpace.cpp:
51879 (JSC::NewSpace::addBlock):
51880 (JSC::NewSpace::canonicalizeBlocks):
51882 (JSC::NewSpace::allocate):
51883 (JSC::NewSpace::SizeClass::SizeClass):
51884 (JSC::NewSpace::SizeClass::canonicalizeBlock):
51885 * heap/OldSpace.cpp:
51886 (JSC::OldSpace::addBlock):
51888 2011-07-14 Filip Pizlo <fpizlo@apple.com>
51890 DFG JIT crashes on host constructor calls in debug mode.
51891 https://bugs.webkit.org/show_bug.cgi?id=64562
51893 Reviewed by Gavin Barraclough.
51895 Fixed the relevant ASSERT.
51897 * dfg/DFGOperations.cpp:
51899 2011-07-14 Filip Pizlo <fpizlo@apple.com>
51901 DFG speculative JIT contains a FIXME for rewinding speculative code generation that
51902 has already been fixed.
51903 https://bugs.webkit.org/show_bug.cgi?id=64022
51905 Reviewed by Gavin Barraclough.
51907 * dfg/DFGSpeculativeJIT.h:
51908 (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
51910 2011-07-14 Ryuan Choi <ryuan.choi@samsung.com>
51912 [EFL] Add OwnPtr specialization for Ecore_Pipe.
51913 https://bugs.webkit.org/show_bug.cgi?id=64515
51915 Add an overload for deleteOwnedPtr(Ecore_Pipe*) on EFL port.
51917 Reviewed by Xan Lopez.
51919 * wtf/OwnPtrCommon.h:
51920 * wtf/efl/OwnPtrEfl.cpp:
51921 (WTF::deleteOwnedPtr):
51923 2011-07-14 Filip Pizlo <fpizlo@apple.com>
51925 DFG JIT unnecessarily boxes and unboxes values during silent spilling.
51926 https://bugs.webkit.org/show_bug.cgi?id=64068
51928 Reviewed by Gavin Barraclough.
51930 Silent spilling and filling of registers is done during slow-path C
51931 function calls. The silent spill/fill logic does not affect register
51932 allocation on paths that don't involve the C function call.
51934 This changes the silent spilling code to spill in unboxed form. The
51935 silent fill will refill in whatever form the register was spilled in.
51936 For example, the silent spill code may choose not to spill the register
51937 because it was already spilled previously, which would imply that it
51938 was spilled in boxed form. The filling code detects this and either
51939 unboxes, or not, depending on what is appropriate.
51941 This change also results in a simplification of the silent spill/fill
51942 API: silent spilling no longer needs to know about the set of registers
51943 that cannot be trampled, since it never does boxing and hence does not
51944 need a temporary register.
51946 * dfg/DFGJITCodeGenerator.cpp:
51947 (JSC::DFG::JITCodeGenerator::cachedGetById):
51948 (JSC::DFG::JITCodeGenerator::cachedPutById):
51949 * dfg/DFGJITCodeGenerator.h:
51950 (JSC::DFG::JITCodeGenerator::silentSpillGPR):
51951 (JSC::DFG::JITCodeGenerator::silentSpillFPR):
51952 (JSC::DFG::JITCodeGenerator::silentFillFPR):
51953 (JSC::DFG::JITCodeGenerator::silentSpillAllRegisters):
51954 * dfg/DFGNonSpeculativeJIT.cpp:
51955 (JSC::DFG::NonSpeculativeJIT::valueToNumber):
51956 (JSC::DFG::NonSpeculativeJIT::valueToInt32):
51957 (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp):
51958 (JSC::DFG::NonSpeculativeJIT::basicArithOp):
51959 (JSC::DFG::NonSpeculativeJIT::compare):
51960 (JSC::DFG::NonSpeculativeJIT::compile):
51961 * dfg/DFGSpeculativeJIT.cpp:
51962 (JSC::DFG::SpeculativeJIT::compile):
51964 2011-07-13 Michael Saboff <msaboff@apple.com>
51966 https://bugs.webkit.org/show_bug.cgi?id=64202
51967 Enh: Improve handling of RegExp in the form of /.*blah.*/
51969 Reviewed by Gavin Barraclough.
51971 Added code to both the Yarr interpreter and JIT to handle
51972 these expressions a little differently. First off, the terms
51973 in between the leading and trailing .*'s cannot capture and
51974 also this enhancement is limited to single alternative expressions.
51975 If an expression is of the right form with the aforementioned
51976 restrictions, we process the inner terms and then look for the
51977 beginning of the string and end of the string. There is handling
51978 for multiline expressions to allow the beginning and end to be
51979 right after and right before newlines.
51981 This enhancement speeds up expressions of this type 12x on
51984 Cleaned up 'case' statement indentation.
51986 A new set of tests was added as LayoutTests/fast/regex/dotstar.html
51988 * yarr/YarrInterpreter.cpp:
51989 (JSC::Yarr::Interpreter::InputStream::end):
51990 (JSC::Yarr::Interpreter::matchDotStarEnclosure):
51991 (JSC::Yarr::Interpreter::matchDisjunction):
51992 (JSC::Yarr::ByteCompiler::assertionDotStarEnclosure):
51993 (JSC::Yarr::ByteCompiler::emitDisjunction):
51994 * yarr/YarrInterpreter.h:
51995 (JSC::Yarr::ByteTerm::DotStarEnclosure):
51996 * yarr/YarrJIT.cpp:
51997 (JSC::Yarr::YarrGenerator::generateDotStarEnclosure):
51998 (JSC::Yarr::YarrGenerator::backtrackDotStarEnclosure):
51999 (JSC::Yarr::YarrGenerator::generateTerm):
52000 (JSC::Yarr::YarrGenerator::backtrackTerm):
52001 * yarr/YarrPattern.cpp:
52002 (JSC::Yarr::YarrPatternConstructor::setupAlternativeOffsets):
52003 (JSC::Yarr::YarrPatternConstructor::containsCapturingTerms):
52004 (JSC::Yarr::YarrPatternConstructor::optimizeDotStarWrappedExpressions):
52005 (JSC::Yarr::YarrPattern::compile):
52006 * yarr/YarrPattern.h:
52007 (JSC::Yarr::PatternTerm::PatternTerm):
52009 2011-07-13 Xan Lopez <xlopez@igalia.com>
52011 [GTK] Fix distcheck
52013 Reviewed by Martin Robinson.
52015 * GNUmakefile.list.am: add missing files.
52017 2011-07-13 Filip Pizlo <fpizlo@apple.com>
52019 DFG JIT does not implement prototype chain or list caching for get_by_id.
52020 https://bugs.webkit.org/show_bug.cgi?id=64147
52022 Reviewed by Gavin Barraclough.
52024 This implements unified support for prototype caching, prototype chain
52025 caching, and polymorphic (i.e. list) prototype and prototype chain
52026 caching. This is done by creating common code for emitting prototype
52027 or chain access stubs, and having it factored out into
52028 generateProtoChainAccessStub(). This function is called by
52029 tryCacheGetByID once the latter determines that some form of prototype
52030 access caching is necessary (i.e. the slot being accessed is not on the
52031 base value but on some other object).
52033 Direct prototype list, and prototype chain list, caching is implemented by
52034 linking the slow path to operationGetByIdProtoBuildList(), which uses the
52035 same helper function (generateProtoChainAccessStub()) as tryCacheGetByID.
52037 This change required ensuring that the value in the scratchGPR field in
52038 StructureStubInfo is preserved even after the stub info is in the
52039 chain, or proto_list, states. Hence scratchGPR was moved out of the union
52040 and into the top-level of StructureStubInfo.
52042 * bytecode/StructureStubInfo.h:
52043 * dfg/DFGJITCompiler.cpp:
52044 (JSC::DFG::JITCompiler::compileFunction):
52045 * dfg/DFGOperations.cpp:
52046 * dfg/DFGOperations.h:
52047 * dfg/DFGRepatch.cpp:
52048 (JSC::DFG::emitRestoreScratch):
52049 (JSC::DFG::linkRestoreScratch):
52050 (JSC::DFG::generateProtoChainAccessStub):
52051 (JSC::DFG::tryCacheGetByID):
52052 (JSC::DFG::tryBuildGetByIDProtoList):
52053 (JSC::DFG::dfgBuildGetByIDProtoList):
52054 (JSC::DFG::tryCachePutByID):
52055 * dfg/DFGRepatch.h:
52057 2011-07-12 Brent Fulgham <bfulgham@webkit.org>
52059 Standardize WinCairo conditionalized code under PLATFORM macro.
52060 https://bugs.webkit.org/show_bug.cgi?id=64377
52062 Reviewed by Maciej Stachowiak.
52064 * wtf/Platform.h: Update to use PLATFORM(WIN_CAIRO) for tests.
52066 2011-07-13 David Levin <levin@chromium.org>
52068 Possible race condition in ThreadIdentifierData::initializeKeyOnce and shouldCallRealDebugger.
52069 https://bugs.webkit.org/show_bug.cgi?id=64465
52071 Reviewed by Dmitry Titov.
52073 There isn't a good way to test this as it is very highly unlikely to occur.
52075 * wtf/ThreadIdentifierDataPthreads.cpp:
52076 (WTF::ThreadIdentifierData::initializeKeyOnce): Since scoped static initialization
52077 isn't thread-safe, change the initialization to be global.
52079 2011-07-12 Gavin Barraclough <barraclough@apple.com>
52081 https://bugs.webkit.org/show_bug.cgi?id=64424
52082 Our direct eval behaviour deviates slightly from the spec.
52084 Reviewed by Oliver Hunt.
52086 The ES5 spec defines a concept of 'Direct Call to Eval' (see section 15.1.2.1.1), where
52087 behaviour will differ from that of an indirect call (e.g. " { eval: window.eval }.eval();"
52088 or "var a = eval; a();" are indirect calls), particularly in non-strict scopes variables
52089 may be introduced into the caller's environment.
52091 ES5 direct calls are any call where the callee function is provided by a reference, a base
52092 of that Reference is an EnvironmentRecord (this corresponds to all productions
52093 "PrimaryExpression: Identifier", see 10.2.2.1 GetIdentifierReference), and where the name
52094 of the reference is "eval". This means any expression of the form "eval(...)", and that
52095 calls the standard built in eval method from on the Global Object, is considered to be
52098 In JavaScriptCore we are currently overly restrictive. We also check that the
52099 EnvironmentRecord that is the base of the reference is the Declaractive Environment Record
52100 at the root of the scope chain, corresponding to the Global Object - an "eval(..)" statement
52101 that hits a var eval in a nested scope is not considered to be direct. This behaviour does
52102 not emanate from the spec, and is incorrect.
52104 * interpreter/Interpreter.cpp:
52105 (JSC::Interpreter::privateExecute):
52106 - Fixed direct eval check in op_call_eval.
52107 * jit/JITStubs.cpp:
52108 (JSC::DEFINE_STUB_FUNCTION):
52109 - Fixed direct eval check in op_call_eval.
52110 * runtime/Executable.h:
52111 (JSC::isHostFunction):
52112 - Added check for host function with specific NativeFunction.
52114 2011-07-13 Ademar de Souza Reis Jr. <ademar.reis@openbossa.org>
52116 Reviewed by Andreas Kling.
52118 Broken build on QNX
52119 https://bugs.webkit.org/show_bug.cgi?id=63717
52121 QNX doesn't support pthread's SA_RESTART (required by
52122 JSC_MULTIPLE_THREADS), JIT is broken at runtime and there a
52123 few minor compilation errors here and there.
52125 Original patch by Ritt Konstantin <ritt.ks@gmail.com>, also
52126 tested by him on QNX v6.5 (x86)
52128 * wtf/DateMath.cpp: fix usage of abs/labs
52129 * wtf/Platform.h: Disable JIT and JSC_MULTIPLE_THREADS
52130 * wtf/StackBounds.cpp: Add a couple of missing includes (and sort them)
52132 2011-07-12 Anders Carlsson <andersca@apple.com>
52134 If a compiler has nullptr support, include <cstddef> to get the nullptr_t definition
52135 https://bugs.webkit.org/show_bug.cgi?id=64429
52137 Include the cstddef which has the nullptr_t typedef according to the C++0x standard.
52141 2011-07-13 MORITA Hajime <morrita@google.com>
52143 Refactoring: Ignored ExceptionCode value should be less annoying.
52144 https://bugs.webkit.org/show_bug.cgi?id=63688
52146 Added ASSERT_AT macro.
52148 Reviewed by Darin Adler.
52150 * wtf/Assertions.h:
52152 2011-07-12 Filip Pizlo <fpizlo@apple.com>
52154 DFG JIT does not implement op_construct.
52155 https://bugs.webkit.org/show_bug.cgi?id=64066
52157 Reviewed by Gavin Barraclough.
52159 This is a fixed implementation of op_construct. Constructor calls are implemented
52160 by reusing almost all of the code for Call, with care taken to make sure that
52161 where the are differences (like selecting different code blocks), those differences
52162 are respected. The two fixes over the last patch are: (1) make sure the
52163 CodeBlock::unlinkCalls respects differences between Call and Construct, and (2)
52164 make sure that virtualFor() in DFGOperations respects the CodeSpecializationKind
52165 (either CodeForCall or CodeForConstruct) when invoking the compiler.
52167 * dfg/DFGAliasTracker.h:
52168 (JSC::DFG::AliasTracker::recordConstruct):
52169 * dfg/DFGByteCodeParser.cpp:
52170 (JSC::DFG::ByteCodeParser::addCall):
52171 (JSC::DFG::ByteCodeParser::parseBlock):
52172 * dfg/DFGJITCodeGenerator.cpp:
52173 (JSC::DFG::JITCodeGenerator::emitCall):
52175 * dfg/DFGNonSpeculativeJIT.cpp:
52176 (JSC::DFG::NonSpeculativeJIT::compile):
52177 * dfg/DFGOperations.cpp:
52178 * dfg/DFGOperations.h:
52179 * dfg/DFGRepatch.cpp:
52180 (JSC::DFG::dfgLinkFor):
52181 * dfg/DFGRepatch.h:
52182 * dfg/DFGSpeculativeJIT.cpp:
52183 (JSC::DFG::SpeculativeJIT::compile):
52184 * runtime/CodeBlock.cpp:
52185 (JSC::CodeBlock::unlinkCalls):
52187 2011-07-12 Oliver Hunt <oliver@apple.com>
52189 Overzealous type validation in method_check
52190 https://bugs.webkit.org/show_bug.cgi?id=64415
52192 Reviewed by Gavin Barraclough.
52194 method_check is essentially just a value look up
52195 optimisation, but it internally stores the value
52196 as a JSFunction, even though it never relies on
52197 this fact. Under GC validation however we end up
52198 trying to enforce that assumption. The fix is
52199 simply to store the value as a correct supertype.
52201 * bytecode/CodeBlock.h:
52202 * dfg/DFGRepatch.cpp:
52203 (JSC::DFG::dfgRepatchGetMethodFast):
52204 (JSC::DFG::tryCacheGetMethod):
52206 * jit/JITPropertyAccess.cpp:
52207 (JSC::JIT::patchMethodCallProto):
52208 * jit/JITStubs.cpp:
52209 (JSC::DEFINE_STUB_FUNCTION):
52211 2011-07-12 Filip Pizlo <fpizlo@apple.com>
52213 COLLECT_ON_EVERY_ALLOCATION no longer works.
52214 https://bugs.webkit.org/show_bug.cgi?id=64388
52216 Reviewed by Oliver Hunt.
52218 Added a flag to Heap that determines if it's safe to collect (which for now means that
52219 JSGlobalObject has actually been initialized, but it should work for other things, too).
52220 This allows JSGlobalObject to allocate even if the allocator wants to GC; instead of
52221 GCing it just grows the heap, if necessary.
52223 Then changed Heap::allocate() to not recurse ad infinitum when
52224 COLLECT_ON_EVERY_ALLOCATION is set. This also makes the allocator generally more
52225 resilient against bugs; this change allowed me to put in handy assertions, such as that
52226 an allocation must succeed after either a collection or after a new block was added.
52230 (JSC::Heap::tryAllocate):
52231 (JSC::Heap::allocate):
52232 (JSC::Heap::collectAllGarbage):
52233 (JSC::Heap::collect):
52235 (JSC::Heap::notifyIsSafeToCollect):
52236 * runtime/JSGlobalData.cpp:
52237 (JSC::JSGlobalData::JSGlobalData):
52239 2011-07-12 Filip Pizlo <fpizlo@apple.com>
52241 DFG JIT put_by_id transition caching does not inform the GC about the structure and
52242 prototype chain that it is referencing.
52243 https://bugs.webkit.org/show_bug.cgi?id=64387
52245 Reviewed by Gavin Barraclough.
52247 Fixed the relevant code in DFGRepatch to call StructureStubInfo::initPutByIdTransition().
52249 * dfg/DFGRepatch.cpp:
52250 (JSC::DFG::tryCachePutByID):
52252 2011-07-12 Adam Roben <aroben@apple.com>
52254 Ensure no intermediate WTF::Strings are created when concatenating with string literals
52256 Fixes <http://webkit.org/b/63330> Concatenating string literals and WTF::Strings using
52257 operator+ is suboptimal
52259 Reviewed by Darin Adler.
52261 * wtf/text/StringConcatenate.h:
52262 (WTF::StringTypeAdapter<String>::writeTo): Added a macro that can be used for testing how
52263 many WTF::Strings get copied while evaluating an operator+ expression.
52265 * wtf/text/StringOperators.h:
52266 (WTF::operator+): Changed the overload that takes a StringAppend to take it on the left-hand
52267 side, since operator+ is left-associative. Having the StringAppend on the right-hand side
52268 was causing us to make intermediate WTF::Strings when evaluating expressions that contained
52269 multiple calls to operator+. Added some more overloads for that take a left-hand side of
52270 const char* to resolve overload ambiguity for certain expressions. Added overloads that take
52271 a left-hand side of const UChar* (matching the const char* overloads) so that wide string
52272 literals don't first have to be converted to a WTF::String in operator+ expressions.
52274 2011-07-12 Adam Roben <aroben@apple.com>
52276 Unreviewed, rolling out r90811.
52277 http://trac.webkit.org/changeset/90811
52278 https://bugs.webkit.org/show_bug.cgi?id=61025
52280 Several svg tests failing assertions beneath
52281 SVGSMILElement::findInstanceTime
52283 * wtf/StdLibExtras.h:
52284 (WTF::binarySearch):
52286 2011-07-12 Oliver Varga <Varga.Oliver@stud.u-szeged.hu>
52288 Reviewed by Nikolas Zimmermann.
52290 Speed up SVGSMILElement::findInstanceTime.
52291 https://bugs.webkit.org/show_bug.cgi?id=61025
52293 Add a new parameter to StdlibExtras.h::binarySerarch function
52294 to also handle cases when the array does not contain the key value.
52295 This is needed for an svg function.
52297 * wtf/StdLibExtras.h:
52298 (WTF::binarySearch):
52300 2011-07-11 Filip Pizlo <fpizlo@apple.com>
52302 DFG speculative JIT does not guard itself against floating point speculation
52303 failures on non-floating-point constants.
52304 https://bugs.webkit.org/show_bug.cgi?id=64330
52306 Reviewed by Gavin Barraclough.
52308 Made fillSpeculateDouble immediate invoke terminateSpeculativeExecution() as
52309 soon as it notices that it's speculating on something that is a non-numeric
52312 * dfg/DFGSpeculativeJIT.cpp:
52313 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
52315 2011-07-11 Filip Pizlo <fpizlo@apple.com>
52317 DFG Speculative JIT does not always insert speculation checks when speculating
52319 https://bugs.webkit.org/show_bug.cgi?id=64254
52321 Reviewed by Gavin Barraclough.
52323 Changed the SetLocal instruction to always validate that the value being stored
52324 into the local variable is an array, if that variable was marked PredictArray.
52325 This is necessary since uses of arrays assume that if a PredictArray value is
52326 in a local variable then the speculation check validating that the value is an
52327 array was already performed.
52329 * dfg/DFGSpeculativeJIT.cpp:
52330 (JSC::DFG::SpeculativeJIT::compile):
52332 2011-07-11 Gabor Loki <loki@webkit.org>
52334 Fix the condition of the optimized code in doubleTransfer
52335 https://bugs.webkit.org/show_bug.cgi?id=64261
52337 Reviewed by Zoltan Herczeg.
52339 The condition of the optimized code in doubleTransfer is wrong. The
52340 data transfer should be executed with four bytes aligned address.
52341 VFP cannot perform unaligned memory access.
52343 Reported by Jacob Bramley.
52345 * assembler/ARMAssembler.cpp:
52346 (JSC::ARMAssembler::doubleTransfer):
52348 2011-07-11 Gabor Loki <loki@webkit.org>
52350 Signed arithmetic bug in dataTransfer32.
52351 https://bugs.webkit.org/show_bug.cgi?id=64257
52353 Reviewed by Zoltan Herczeg.
52355 An arithmetic bug is fixed. If the offset of dataTransfer is half of the
52356 addressable memory space on a 32-bit machine (-2147483648 = 0x80000000)
52357 a load instruction is emitted with a wrong zero offset.
52359 Inspired by Jacob Bramley's patch from JaegerMonkey.
52361 * assembler/ARMAssembler.cpp:
52362 (JSC::ARMAssembler::dataTransfer32):
52364 2011-07-09 Thouraya Andolsi <thouraya.andolsi@st.com>
52366 Fix unaligned userspace access for SH4 platforms.
52367 https://bugs.webkit.org/show_bug.cgi?id=62993
52371 2011-07-09 Chao-ying Fu <fu@mips.com>
52373 Fix MIPS build due to readInt32 and readPointer
52374 https://bugs.webkit.org/show_bug.cgi?id=63962
52376 * assembler/MIPSAssembler.h:
52377 (JSC::MIPSAssembler::readInt32):
52378 (JSC::MIPSAssembler::readPointer):
52379 * assembler/MacroAssemblerMIPS.h:
52380 (JSC::MacroAssemblerMIPS::rshift32):
52382 2011-07-08 Gavin Barraclough <barraclough@apple.com>
52384 https://bugs.webkit.org/show_bug.cgi?id=64181
52385 REGRESSION (r90602): Gmail doesn't load
52387 Rolling out r90601, r90602.
52389 * dfg/DFGAliasTracker.h:
52390 * dfg/DFGByteCodeParser.cpp:
52391 (JSC::DFG::ByteCodeParser::addVarArgChild):
52392 (JSC::DFG::ByteCodeParser::parseBlock):
52393 * dfg/DFGJITCodeGenerator.cpp:
52394 (JSC::DFG::JITCodeGenerator::emitCall):
52396 * dfg/DFGNonSpeculativeJIT.cpp:
52397 (JSC::DFG::NonSpeculativeJIT::compile):
52398 * dfg/DFGOperations.cpp:
52399 * dfg/DFGOperations.h:
52400 * dfg/DFGRepatch.cpp:
52401 (JSC::DFG::tryCacheGetByID):
52402 (JSC::DFG::dfgLinkCall):
52403 * dfg/DFGRepatch.h:
52404 * dfg/DFGSpeculativeJIT.cpp:
52405 (JSC::DFG::SpeculativeJIT::compile):
52406 * runtime/JSObject.h:
52407 (JSC::JSObject::isUsingInlineStorage):
52409 2011-07-08 Kalev Lember <kalev@smartlink.ee>
52411 Reviewed by Adam Roben.
52413 Add missing _WIN32_WINNT and WINVER definitions
52414 https://bugs.webkit.org/show_bug.cgi?id=59702
52416 Moved _WIN32_WINNT and WINVER definitions to config.h so that they are
52417 available for all source files.
52419 In particular, wtf/FastMalloc.cpp uses CreateTimerQueueTimer and
52420 DeleteTimerQueueTimer which are both guarded by
52421 #if (_WIN32_WINNT >= 0x0500)
52425 * wtf/Assertions.cpp:
52427 2011-07-08 Chang Shu <cshu@webkit.org>
52429 Rename "makeSecure" to "fill" and remove the support for displaying last character
52430 to avoid layering violatation.
52431 https://bugs.webkit.org/show_bug.cgi?id=59114
52433 Reviewed by Alexey Proskuryakov.
52435 * JavaScriptCore.exp:
52436 * JavaScriptCore.order:
52437 * wtf/text/StringImpl.cpp:
52438 (WTF::StringImpl::fill):
52439 * wtf/text/StringImpl.h:
52440 * wtf/text/WTFString.h:
52441 (WTF::String::fill):
52443 2011-07-08 Benjamin Poulain <benjamin@webkit.org>
52445 [WK2] Do not forward touch events to the web process when it does not need them
52446 https://bugs.webkit.org/show_bug.cgi?id=64164
52448 Reviewed by Kenneth Rohde Christiansen.
52450 Add a convenience function to obtain a reference to the last element of a Deque.
52453 (WTF::Deque::last):
52455 2011-07-07 Filip Pizlo <fpizlo@apple.com>
52457 DFG JIT does not implement op_construct.
52458 https://bugs.webkit.org/show_bug.cgi?id=64066
52460 Reviewed by Gavin Barraclough.
52462 * dfg/DFGAliasTracker.h:
52463 (JSC::DFG::AliasTracker::recordConstruct):
52464 * dfg/DFGByteCodeParser.cpp:
52465 (JSC::DFG::ByteCodeParser::addCall):
52466 (JSC::DFG::ByteCodeParser::parseBlock):
52467 * dfg/DFGJITCodeGenerator.cpp:
52468 (JSC::DFG::JITCodeGenerator::emitCall):
52470 * dfg/DFGNonSpeculativeJIT.cpp:
52471 (JSC::DFG::NonSpeculativeJIT::compile):
52472 * dfg/DFGOperations.cpp:
52473 * dfg/DFGOperations.h:
52474 * dfg/DFGRepatch.cpp:
52475 (JSC::DFG::dfgLinkFor):
52476 * dfg/DFGRepatch.h:
52477 * dfg/DFGSpeculativeJIT.cpp:
52478 (JSC::DFG::SpeculativeJIT::compile):
52480 2011-07-07 Filip Pizlo <fpizlo@apple.com>
52482 DFG JIT does not implement get_by_id prototype caching.
52483 https://bugs.webkit.org/show_bug.cgi?id=64077
52485 Reviewed by Gavin Barraclough.
52487 * dfg/DFGRepatch.cpp:
52488 (JSC::DFG::emitRestoreScratch):
52489 (JSC::DFG::linkRestoreScratch):
52490 (JSC::DFG::tryCacheGetByID):
52491 * runtime/JSObject.h:
52492 (JSC::JSObject::addressOfPropertyAtOffset):
52494 2011-07-07 Filip Pizlo <fpizlo@apple.com>
52496 DFG JIT method_check implementation does not link to optimized get_by_id
52498 https://bugs.webkit.org/show_bug.cgi?id=64073
52500 Reviewed by Gavin Barraclough.
52502 * dfg/DFGRepatch.cpp:
52503 (JSC::DFG::dfgRepatchGetMethodFast):
52505 2011-07-07 Oliver Hunt <oliver@apple.com>
52507 Encode jump and link sizes into the appropriate enums
52508 https://bugs.webkit.org/show_bug.cgi?id=64123
52510 Reviewed by Sam Weinig.
52512 Finally kill off the out of line jump and link size arrays,
52513 so we can avoid icky loads and constant fold the linking arithmetic.
52515 * assembler/ARMv7Assembler.cpp:
52516 * assembler/ARMv7Assembler.h:
52517 (JSC::ARMv7Assembler::jumpSizeDelta):
52518 (JSC::ARMv7Assembler::computeJumpType):
52520 2011-07-06 Juan C. Montemayor <jmont@apple.com>
52522 ASSERT_NOT_REACHED running test 262
52523 https://bugs.webkit.org/show_bug.cgi?id=63951
52525 Added a case to the switch statement where the code was failing. Fixed
52526 some logic as well that gave faulty error messages.
52528 Reviewed by Gavin Barraclough.
52530 * parser/JSParser.cpp:
52531 (JSC::JSParser::getTokenName):
52532 (JSC::JSParser::updateErrorMessageSpecialCase):
52533 (JSC::JSParser::updateErrorMessage):
52535 2011-07-06 Filip Pizlo <fpizlo@apple.com>
52537 DFG JIT implementation of op_call results in regressions on sunspider
52538 controlflow-recursive.
52539 https://bugs.webkit.org/show_bug.cgi?id=64039
52541 Reviewed by Gavin Barraclough.
52543 * dfg/DFGByteCodeParser.cpp:
52544 (JSC::DFG::ByteCodeParser::isSmallInt32Constant):
52545 (JSC::DFG::ByteCodeParser::parseBlock):
52546 * dfg/DFGSpeculativeJIT.h:
52547 (JSC::DFG::SpeculativeJIT::isInteger):
52549 2011-07-06 Filip Pizlo <fpizlo@apple.com>
52551 DFG JIT does not support method_check
52552 https://bugs.webkit.org/show_bug.cgi?id=63972
52554 Reviewed by Gavin Barraclough.
52556 * assembler/CodeLocation.h:
52557 (JSC::CodeLocationPossiblyNearCall::CodeLocationPossiblyNearCall):
52558 * bytecode/CodeBlock.cpp:
52559 (JSC::CodeBlock::visitAggregate):
52560 * bytecode/CodeBlock.h:
52561 (JSC::MethodCallLinkInfo::MethodCallLinkInfo):
52562 (JSC::MethodCallLinkInfo::seenOnce):
52563 (JSC::MethodCallLinkInfo::setSeen):
52564 * dfg/DFGAliasTracker.h:
52565 (JSC::DFG::AliasTracker::recordGetMethod):
52566 * dfg/DFGByteCodeParser.cpp:
52567 (JSC::DFG::ByteCodeParser::parseBlock):
52568 * dfg/DFGJITCodeGenerator.cpp:
52569 (JSC::DFG::JITCodeGenerator::cachedGetById):
52570 (JSC::DFG::JITCodeGenerator::cachedGetMethod):
52571 * dfg/DFGJITCodeGenerator.h:
52572 * dfg/DFGJITCompiler.cpp:
52573 (JSC::DFG::JITCompiler::compileFunction):
52574 * dfg/DFGJITCompiler.h:
52575 (JSC::DFG::JITCompiler::addMethodGet):
52576 (JSC::DFG::JITCompiler::MethodGetRecord::MethodGetRecord):
52578 (JSC::DFG::Node::hasIdentifier):
52579 * dfg/DFGNonSpeculativeJIT.cpp:
52580 (JSC::DFG::NonSpeculativeJIT::compile):
52581 * dfg/DFGOperations.cpp:
52582 * dfg/DFGOperations.h:
52583 * dfg/DFGRepatch.cpp:
52584 (JSC::DFG::dfgRepatchGetMethodFast):
52585 (JSC::DFG::tryCacheGetMethod):
52586 (JSC::DFG::dfgRepatchGetMethod):
52587 * dfg/DFGRepatch.h:
52588 * dfg/DFGSpeculativeJIT.cpp:
52589 (JSC::DFG::SpeculativeJIT::compile):
52590 * jit/JITWriteBarrier.h:
52591 (JSC::JITWriteBarrier::set):
52593 2011-07-06 Filip Pizlo <fpizlo@apple.com>
52595 DFG JIT op_call implementation will flush registers even when those registers are dead
52596 https://bugs.webkit.org/show_bug.cgi?id=64023
52598 Reviewed by Gavin Barraclough.
52600 * dfg/DFGJITCodeGenerator.cpp:
52601 (JSC::DFG::JITCodeGenerator::emitCall):
52602 * dfg/DFGJITCodeGenerator.h:
52603 (JSC::DFG::JITCodeGenerator::integerResult):
52604 (JSC::DFG::JITCodeGenerator::noResult):
52605 (JSC::DFG::JITCodeGenerator::cellResult):
52606 (JSC::DFG::JITCodeGenerator::jsValueResult):
52607 (JSC::DFG::JITCodeGenerator::doubleResult):
52608 * dfg/DFGNonSpeculativeJIT.cpp:
52609 (JSC::DFG::NonSpeculativeJIT::compile):
52610 * dfg/DFGSpeculativeJIT.cpp:
52611 (JSC::DFG::SpeculativeJIT::compile):
52613 2011-07-06 Filip Pizlo <fpizlo@apple.com>
52615 DFG speculative JIT may crash when speculating int on a non-int JSConstant.
52616 https://bugs.webkit.org/show_bug.cgi?id=64017
52618 Reviewed by Gavin Barraclough.
52620 * dfg/DFGSpeculativeJIT.cpp:
52621 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
52622 (JSC::DFG::SpeculativeJIT::compile):
52624 2011-07-06 Dmitriy Vyukov <dvyukov@google.com>
52626 Reviewed by David Levin.
52628 Allow substitution of dynamic annotations and prevent identical code folding by the linker.
52629 https://bugs.webkit.org/show_bug.cgi?id=62443
52631 * wtf/DynamicAnnotations.cpp:
52632 (WTFAnnotateBenignRaceSized):
52633 (WTFAnnotateHappensBefore):
52634 (WTFAnnotateHappensAfter):
52636 2011-07-06 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
52638 Calls on 32 bit machines are failed after r90423
52639 https://bugs.webkit.org/show_bug.cgi?id=63980
52641 Reviewed by Gavin Barraclough.
52643 Copy the necessary lines from JITCall.cpp.
52645 * jit/JITCall32_64.cpp:
52646 (JSC::JIT::compileOpCall):
52648 2011-07-05 Filip Pizlo <fpizlo@apple.com>
52650 DFG JIT virtual call implementation is inefficient.
52651 https://bugs.webkit.org/show_bug.cgi?id=63974
52653 Reviewed by Gavin Barraclough.
52655 * dfg/DFGOperations.cpp:
52656 * runtime/Executable.h:
52657 (JSC::ExecutableBase::generatedJITCodeForCallWithArityCheck):
52658 (JSC::ExecutableBase::generatedJITCodeForConstructWithArityCheck):
52659 (JSC::ExecutableBase::generatedJITCodeWithArityCheckFor):
52660 (JSC::ExecutableBase::hasJITCodeForCall):
52661 (JSC::ExecutableBase::hasJITCodeForConstruct):
52662 (JSC::ExecutableBase::hasJITCodeFor):
52663 * runtime/JSFunction.h:
52664 (JSC::JSFunction::scopeUnchecked):
52666 2011-07-05 Oliver Hunt <oliver@apple.com>
52668 Force inlining of simple functions that show up as not being inlined
52669 https://bugs.webkit.org/show_bug.cgi?id=63964
52671 Reviewed by Gavin Barraclough.
52673 Looking at profile data indicates the gcc is failing to inline a
52674 number of trivial functions. This patch hits the ones that show
52675 up in profiles with the ALWAYS_INLINE hammer.
52677 We also replace the memcpy() call in linking with a manual loop.
52678 Apparently memcpy() is almost never faster than an inlined loop.
52680 * assembler/ARMv7Assembler.h:
52681 (JSC::ARMv7Assembler::add):
52682 (JSC::ARMv7Assembler::add_S):
52683 (JSC::ARMv7Assembler::ARM_and):
52684 (JSC::ARMv7Assembler::asr):
52685 (JSC::ARMv7Assembler::b):
52686 (JSC::ARMv7Assembler::blx):
52687 (JSC::ARMv7Assembler::bx):
52688 (JSC::ARMv7Assembler::clz):
52689 (JSC::ARMv7Assembler::cmn):
52690 (JSC::ARMv7Assembler::cmp):
52691 (JSC::ARMv7Assembler::eor):
52692 (JSC::ARMv7Assembler::it):
52693 (JSC::ARMv7Assembler::ldr):
52694 (JSC::ARMv7Assembler::ldrCompact):
52695 (JSC::ARMv7Assembler::ldrh):
52696 (JSC::ARMv7Assembler::ldrb):
52697 (JSC::ARMv7Assembler::lsl):
52698 (JSC::ARMv7Assembler::lsr):
52699 (JSC::ARMv7Assembler::movT3):
52700 (JSC::ARMv7Assembler::mov):
52701 (JSC::ARMv7Assembler::movt):
52702 (JSC::ARMv7Assembler::mvn):
52703 (JSC::ARMv7Assembler::neg):
52704 (JSC::ARMv7Assembler::orr):
52705 (JSC::ARMv7Assembler::orr_S):
52706 (JSC::ARMv7Assembler::ror):
52707 (JSC::ARMv7Assembler::smull):
52708 (JSC::ARMv7Assembler::str):
52709 (JSC::ARMv7Assembler::sub):
52710 (JSC::ARMv7Assembler::sub_S):
52711 (JSC::ARMv7Assembler::tst):
52712 (JSC::ARMv7Assembler::linkRecordSourceComparator):
52713 (JSC::ARMv7Assembler::link):
52714 (JSC::ARMv7Assembler::ARMInstructionFormatter::oneWordOp5Reg3Imm8):
52715 (JSC::ARMv7Assembler::ARMInstructionFormatter::oneWordOp5Imm5Reg3Reg3):
52716 (JSC::ARMv7Assembler::ARMInstructionFormatter::oneWordOp7Reg3Reg3Reg3):
52717 (JSC::ARMv7Assembler::ARMInstructionFormatter::oneWordOp8Imm8):
52718 (JSC::ARMv7Assembler::ARMInstructionFormatter::oneWordOp8RegReg143):
52719 (JSC::ARMv7Assembler::ARMInstructionFormatter::oneWordOp9Imm7):
52720 (JSC::ARMv7Assembler::ARMInstructionFormatter::oneWordOp10Reg3Reg3):
52721 (JSC::ARMv7Assembler::ARMInstructionFormatter::twoWordOp12Reg4FourFours):
52722 (JSC::ARMv7Assembler::ARMInstructionFormatter::twoWordOp16FourFours):
52723 (JSC::ARMv7Assembler::ARMInstructionFormatter::twoWordOp16Op16):
52724 (JSC::ARMv7Assembler::ARMInstructionFormatter::twoWordOp5i6Imm4Reg4EncodedImm):
52725 (JSC::ARMv7Assembler::ARMInstructionFormatter::twoWordOp12Reg4Reg4Imm12):
52726 (JSC::ARMv7Assembler::ARMInstructionFormatter::vfpOp):
52727 (JSC::ARMv7Assembler::ARMInstructionFormatter::vfpMemOp):
52728 * assembler/LinkBuffer.h:
52729 (JSC::LinkBuffer::linkCode):
52730 * assembler/MacroAssemblerARMv7.h:
52731 (JSC::MacroAssemblerARMv7::nearCall):
52732 (JSC::MacroAssemblerARMv7::call):
52733 (JSC::MacroAssemblerARMv7::ret):
52734 (JSC::MacroAssemblerARMv7::moveWithPatch):
52735 (JSC::MacroAssemblerARMv7::branchPtrWithPatch):
52736 (JSC::MacroAssemblerARMv7::storePtrWithPatch):
52737 (JSC::MacroAssemblerARMv7::tailRecursiveCall):
52738 (JSC::MacroAssemblerARMv7::makeTailRecursiveCall):
52739 (JSC::MacroAssemblerARMv7::jump):
52740 (JSC::MacroAssemblerARMv7::makeBranch):
52742 2011-07-05 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
52744 Make "Add optimised paths for a few maths functions" work on Qt
52745 https://bugs.webkit.org/show_bug.cgi?id=63893
52747 Reviewed by Oliver Hunt.
52749 Move the generated code to the .text section instead of .data section.
52750 Fix alignment for the 32 bit thunk code.
52752 * jit/ThunkGenerators.cpp:
52754 2011-07-05 Filip Pizlo <fpizlo@apple.com>
52756 DFG JIT does not implement op_call.
52757 https://bugs.webkit.org/show_bug.cgi?id=63858
52759 Reviewed by Gavin Barraclough.
52761 * bytecode/CodeBlock.cpp:
52762 (JSC::CodeBlock::unlinkCalls):
52763 * bytecode/CodeBlock.h:
52764 (JSC::CodeBlock::setNumberOfCallLinkInfos):
52765 (JSC::CodeBlock::numberOfCallLinkInfos):
52766 * bytecompiler/BytecodeGenerator.cpp:
52767 (JSC::BytecodeGenerator::emitCall):
52768 (JSC::BytecodeGenerator::emitConstruct):
52769 * dfg/DFGAliasTracker.h:
52770 (JSC::DFG::AliasTracker::lookupGetByVal):
52771 (JSC::DFG::AliasTracker::recordCall):
52772 (JSC::DFG::AliasTracker::equalIgnoringLaterNumericConversion):
52773 * dfg/DFGByteCodeParser.cpp:
52774 (JSC::DFG::ByteCodeParser::ByteCodeParser):
52775 (JSC::DFG::ByteCodeParser::getLocal):
52776 (JSC::DFG::ByteCodeParser::getArgument):
52777 (JSC::DFG::ByteCodeParser::toInt32):
52778 (JSC::DFG::ByteCodeParser::addToGraph):
52779 (JSC::DFG::ByteCodeParser::addVarArgChild):
52780 (JSC::DFG::ByteCodeParser::predictInt32):
52781 (JSC::DFG::ByteCodeParser::parseBlock):
52782 (JSC::DFG::ByteCodeParser::processPhiStack):
52783 (JSC::DFG::ByteCodeParser::allocateVirtualRegisters):
52784 * dfg/DFGGraph.cpp:
52785 (JSC::DFG::Graph::opName):
52786 (JSC::DFG::Graph::dump):
52787 (JSC::DFG::Graph::refChildren):
52789 * dfg/DFGJITCodeGenerator.cpp:
52790 (JSC::DFG::JITCodeGenerator::useChildren):
52791 (JSC::DFG::JITCodeGenerator::emitCall):
52792 * dfg/DFGJITCodeGenerator.h:
52793 (JSC::DFG::JITCodeGenerator::addressOfCallData):
52794 * dfg/DFGJITCompiler.cpp:
52795 (JSC::DFG::JITCompiler::compileFunction):
52796 * dfg/DFGJITCompiler.h:
52797 (JSC::DFG::CallRecord::CallRecord):
52798 (JSC::DFG::JITCompiler::notifyCall):
52799 (JSC::DFG::JITCompiler::appendCallWithFastExceptionCheck):
52800 (JSC::DFG::JITCompiler::addJSCall):
52801 (JSC::DFG::JITCompiler::PropertyAccessRecord::PropertyAccessRecord):
52802 (JSC::DFG::JITCompiler::JSCallRecord::JSCallRecord):
52804 (JSC::DFG::Node::Node):
52805 (JSC::DFG::Node::child1):
52806 (JSC::DFG::Node::child2):
52807 (JSC::DFG::Node::child3):
52808 (JSC::DFG::Node::firstChild):
52809 (JSC::DFG::Node::numChildren):
52810 * dfg/DFGNonSpeculativeJIT.cpp:
52811 (JSC::DFG::NonSpeculativeJIT::basicArithOp):
52812 (JSC::DFG::NonSpeculativeJIT::compare):
52813 (JSC::DFG::NonSpeculativeJIT::compile):
52814 * dfg/DFGOperations.cpp:
52815 * dfg/DFGOperations.h:
52816 * dfg/DFGRepatch.cpp:
52817 (JSC::DFG::dfgLinkCall):
52818 * dfg/DFGRepatch.h:
52819 * dfg/DFGSpeculativeJIT.cpp:
52820 (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
52821 (JSC::DFG::SpeculativeJIT::compilePeepHoleCall):
52822 (JSC::DFG::SpeculativeJIT::compile):
52823 * dfg/DFGSpeculativeJIT.h:
52824 (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch):
52825 * interpreter/CallFrame.h:
52826 (JSC::ExecState::calleeAsValue):
52829 (JSC::JIT::privateCompileMainPass):
52830 (JSC::JIT::privateCompileSlowCases):
52831 (JSC::JIT::privateCompile):
52832 (JSC::JIT::linkCall):
52833 (JSC::JIT::linkConstruct):
52835 (JSC::JIT::compileOpCall):
52837 (JSC::JITCode::JITCode):
52838 (JSC::JITCode::jitType):
52839 (JSC::JITCode::HostFunction):
52840 * runtime/JSFunction.h:
52841 * runtime/JSGlobalData.h:
52843 2011-07-05 Oliver Hunt <oliver@apple.com>
52845 Initialize new MarkStack member
52847 * heap/MarkStack.h:
52848 (JSC::MarkStack::MarkStack):
52850 2011-07-05 Oliver Hunt <oliver@apple.com>
52852 Don't throw out compiled code repeatedly
52853 https://bugs.webkit.org/show_bug.cgi?id=63960
52855 Reviewed by Gavin Barraclough.
52857 Stop throwing away all compiled code every time
52858 we're told to do a full GC. Instead unlink all
52859 callsites during such GC passes to maximise the
52860 number of collectable functions, but otherwise
52861 leave compiled functions alone.
52864 (JSGarbageCollect):
52865 * bytecode/CodeBlock.cpp:
52866 (JSC::CodeBlock::visitAggregate):
52868 (JSC::Heap::collectAllGarbage):
52869 * heap/MarkStack.h:
52870 (JSC::MarkStack::shouldUnlinkCalls):
52871 (JSC::MarkStack::setShouldUnlinkCalls):
52872 * runtime/JSGlobalData.cpp:
52873 (JSC::JSGlobalData::recompileAllJSFunctions):
52874 (JSC::JSGlobalData::releaseExecutableMemory):
52875 * runtime/RegExp.cpp:
52876 (JSC::RegExp::compile):
52877 (JSC::RegExp::invalidateCode):
52878 * runtime/RegExp.h:
52880 2011-07-05 Filip Pizlo <fpizlo@apple.com>
52882 JSC JIT has code duplication for the handling of call and construct
52883 https://bugs.webkit.org/show_bug.cgi?id=63957
52885 Reviewed by Gavin Barraclough.
52888 (JSC::JIT::linkFor):
52890 * jit/JITStubs.cpp:
52891 (JSC::jitCompileFor):
52892 (JSC::DEFINE_STUB_FUNCTION):
52893 (JSC::arityCheckFor):
52894 (JSC::lazyLinkFor):
52895 * runtime/Executable.h:
52896 (JSC::ExecutableBase::generatedJITCodeFor):
52897 (JSC::FunctionExecutable::compileFor):
52898 (JSC::FunctionExecutable::isGeneratedFor):
52899 (JSC::FunctionExecutable::generatedBytecodeFor):
52900 (JSC::FunctionExecutable::generatedJITCodeWithArityCheckFor):
52902 2011-07-05 Gavin Barraclough <barraclough@apple.com>
52904 Build fix following last patch.
52906 * runtime/JSFunction.cpp:
52907 (JSC::createPrototypeProperty):
52909 2011-07-05 Gavin Barraclough <barraclough@apple.com>
52911 https://bugs.webkit.org/show_bug.cgi?id=63947
52912 ASSERT running Object.preventExtensions(Math.sin)
52914 Reviewed by Oliver Hunt.
52916 This is due to calling scope() on a hostFunction as a part of
52917 calling createPrototypeProperty to reify the prototype property.
52918 But host functions don't have a prototype property anyway!
52920 Prevent callling createPrototypeProperty on a host function.
52922 * runtime/JSFunction.cpp:
52923 (JSC::JSFunction::createPrototypeProperty):
52924 (JSC::JSFunction::preventExtensions):
52926 2011-07-04 Gavin Barraclough <barraclough@apple.com>
52928 https://bugs.webkit.org/show_bug.cgi?id=63880
52929 Evaluation order of conversions of operands to >, >= incorrect.
52931 Reviewed by Sam Weinig.
52933 Add 'leftFirst' parameter to jsLess, jsLessEq matching that described in the ES5
52934 spec. This allows these methods to be reused to perform >, >= relational compares
52935 with correct ordering of type conversions.
52937 * dfg/DFGOperations.cpp:
52938 * interpreter/Interpreter.cpp:
52939 (JSC::Interpreter::privateExecute):
52940 * jit/JITStubs.cpp:
52941 (JSC::DEFINE_STUB_FUNCTION):
52942 * runtime/Operations.h:
52946 2011-07-04 Gavin Barraclough <barraclough@apple.com>
52948 Reviewed by Sam Weinig.
52950 https://bugs.webkit.org/show_bug.cgi?id=16652
52951 Firefox and JavaScriptCore differ in Number.toString(integer)
52953 Our arbitrary radix (2..36) toString conversion is inaccurate.
52954 This is partly because it uses doubles to perform math that requires
52955 higher accuracy, and partly becasue it does not attempt to correctly
52956 detect where to terminate, instead relying on a simple 'epsilon'.
52958 * runtime/NumberPrototype.cpp:
52959 (JSC::decomposeDouble):
52960 - helper function to extract sign, exponent, mantissa from IEEE doubles.
52961 (JSC::Uint16WithFraction::Uint16WithFraction):
52962 - helper class, u16int with infinite precision fraction, used to convert
52963 the fractional part of the number to a string.
52964 (JSC::Uint16WithFraction::operator*=):
52965 - Multiply by a uint16.
52966 (JSC::Uint16WithFraction::operator<):
52967 - Compare two Uint16WithFractions.
52968 (JSC::Uint16WithFraction::floorAndSubtract):
52969 - Extract the integer portion of the number, and subtract it (clears the integer portion).
52970 (JSC::Uint16WithFraction::comparePoint5):
52972 (JSC::Uint16WithFraction::sumGreaterThanOne):
52973 - Passed a second Uint16WithFraction, returns true if the result of adding
52974 the two values would be greater than one.
52975 (JSC::Uint16WithFraction::isNormalized):
52976 - Used by ASSERTs to consistency check internal representation.
52977 (JSC::BigInteger::BigInteger):
52978 - helper class, unbounded integer value, used to convert the integer part
52979 of the number to a string.
52980 (JSC::BigInteger::divide):
52981 - Divide this value through by a uint32.
52982 (JSC::BigInteger::operator!):
52984 (JSC::toStringWithRadix):
52985 - Performs number to string conversion, with the given radix (2..36).
52986 (JSC::numberProtoFuncToString):
52987 - Changed to use toStringWithRadix.
52989 2011-07-04 Gavin Barraclough <barraclough@apple.com>
52991 https://bugs.webkit.org/show_bug.cgi?id=63881
52992 Need separate bytecodes for handling >, >= comparisons.
52994 Reviewed by Oliver Hunt.
52996 This clears the way to fix Bug#63880. We currently handle greater-than comparisons
52997 as being using the corresponding op_less, etc opcodes. This is incorrect with
52998 respect to evaluation ordering of the implicit conversions performed on operands -
52999 we should be calling ToPrimitive on the LHS and RHS operands to the greater than,
53000 but instead convert RHS then LHS.
53002 This patch adds opcodes for greater-than comparisons mirroring existing ones used
53005 * bytecode/CodeBlock.cpp:
53006 (JSC::CodeBlock::dump):
53007 * bytecode/Opcode.h:
53008 * bytecompiler/BytecodeGenerator.cpp:
53009 (JSC::BytecodeGenerator::emitJumpIfTrue):
53010 (JSC::BytecodeGenerator::emitJumpIfFalse):
53011 * bytecompiler/NodesCodegen.cpp:
53012 * dfg/DFGByteCodeParser.cpp:
53013 (JSC::DFG::ByteCodeParser::parseBlock):
53015 * dfg/DFGNonSpeculativeJIT.cpp:
53016 (JSC::DFG::NonSpeculativeJIT::compare):
53017 (JSC::DFG::NonSpeculativeJIT::compile):
53018 * dfg/DFGNonSpeculativeJIT.h:
53019 * dfg/DFGOperations.cpp:
53020 * dfg/DFGOperations.h:
53021 * dfg/DFGSpeculativeJIT.cpp:
53022 (JSC::DFG::SpeculativeJIT::compare):
53023 (JSC::DFG::SpeculativeJIT::compile):
53024 * dfg/DFGSpeculativeJIT.h:
53025 * interpreter/Interpreter.cpp:
53026 (JSC::Interpreter::privateExecute):
53028 (JSC::JIT::privateCompileMainPass):
53029 (JSC::JIT::privateCompileSlowCases):
53031 (JSC::JIT::emit_op_loop_if_greater):
53032 (JSC::JIT::emitSlow_op_loop_if_greater):
53033 (JSC::JIT::emit_op_loop_if_greatereq):
53034 (JSC::JIT::emitSlow_op_loop_if_greatereq):
53035 * jit/JITArithmetic.cpp:
53036 (JSC::JIT::emit_op_jgreater):
53037 (JSC::JIT::emit_op_jgreatereq):
53038 (JSC::JIT::emit_op_jngreater):
53039 (JSC::JIT::emit_op_jngreatereq):
53040 (JSC::JIT::emitSlow_op_jgreater):
53041 (JSC::JIT::emitSlow_op_jgreatereq):
53042 (JSC::JIT::emitSlow_op_jngreater):
53043 (JSC::JIT::emitSlow_op_jngreatereq):
53044 (JSC::JIT::emit_compareAndJumpSlow):
53045 * jit/JITArithmetic32_64.cpp:
53046 (JSC::JIT::emitBinaryDoubleOp):
53047 * jit/JITStubs.cpp:
53048 (JSC::DEFINE_STUB_FUNCTION):
53050 * parser/NodeConstructors.h:
53051 (JSC::GreaterNode::GreaterNode):
53052 (JSC::GreaterEqNode::GreaterEqNode):
53055 2011-07-03 Gavin Barraclough <barraclough@apple.com>
53057 https://bugs.webkit.org/show_bug.cgi?id=63879
53058 Reduce code duplication for op_jless, op_jlesseq, op_jnless, op_jnlesseq.
53060 Reviewed by Sam Weinig.
53062 There is a lot of copy & paste code here; we can reduce duplication by making
53063 a shared implementation.
53065 * assembler/MacroAssembler.h:
53066 (JSC::MacroAssembler::branch32):
53067 (JSC::MacroAssembler::commute):
53068 - Make these function platform agnostic.
53069 * assembler/MacroAssemblerX86Common.h:
53070 - Moved branch32/commute up to MacroAssembler.
53072 (JSC::JIT::emit_op_loop_if_lesseq):
53073 (JSC::JIT::emitSlow_op_loop_if_lesseq):
53074 - Add an implementation matching that for op_loop_if_less, which just calls op_jless.
53075 * jit/JITArithmetic.cpp:
53076 (JSC::JIT::emit_op_jless):
53077 (JSC::JIT::emit_op_jlesseq):
53078 (JSC::JIT::emit_op_jnless):
53079 (JSC::JIT::emit_op_jnlesseq):
53080 (JSC::JIT::emitSlow_op_jless):
53081 (JSC::JIT::emitSlow_op_jlesseq):
53082 (JSC::JIT::emitSlow_op_jnless):
53083 (JSC::JIT::emitSlow_op_jnlesseq):
53084 - Common implmentations of these methods for JSVALUE64 & JSVALUE32_64.
53085 (JSC::JIT::emit_compareAndJump):
53086 (JSC::JIT::emit_compareAndJumpSlow):
53087 - Internal implmementation of jless etc for JSVALUE64.
53088 * jit/JITArithmetic32_64.cpp:
53089 (JSC::JIT::emit_compareAndJump):
53090 (JSC::JIT::emit_compareAndJumpSlow):
53091 - Internal implmementation of jless etc for JSVALUE32_64.
53092 * jit/JITOpcodes.cpp:
53093 * jit/JITOpcodes32_64.cpp:
53094 * jit/JITStubs.cpp:
53096 - Remove old implementation of emit_op_loop_if_lesseq.
53098 2011-07-03 Sheriff Bot <webkit.review.bot@gmail.com>
53100 Unreviewed, rolling out r90347.
53101 http://trac.webkit.org/changeset/90347
53102 https://bugs.webkit.org/show_bug.cgi?id=63886
53104 Build breaks on Leopard, Chromium-win, WinCairo, and WinCE.
53105 (Requested by tkent on #webkit).
53107 * JavaScriptCore.xcodeproj/project.pbxproj:
53108 * runtime/BigInteger.h: Removed.
53109 * runtime/NumberPrototype.cpp:
53110 (JSC::numberProtoFuncToPrecision):
53111 (JSC::numberProtoFuncToString):
53112 * runtime/Uint16WithFraction.h: Removed.
53113 * wtf/MathExtras.h:
53115 2011-06-30 Gavin Barraclough <barraclough@apple.com>
53117 Reviewed by Sam Weinig.
53119 https://bugs.webkit.org/show_bug.cgi?id=16652
53120 Firefox and JavaScriptCore differ in Number.toString(integer)
53122 Our arbitrary radix (2..36) toString conversion is inaccurate.
53123 This is partly because it uses doubles to perform math that requires
53124 higher accuracy, and partly becasue it does not attempt to correctly
53125 detect where to terminate, instead relying on a simple 'epsilon'.
53127 * runtime/NumberPrototype.cpp:
53128 (JSC::decomposeDouble):
53129 - helper function to extract sign, exponent, mantissa from IEEE doubles.
53130 (JSC::Uint16WithFraction::Uint16WithFraction):
53131 - helper class, u16int with infinite precision fraction, used to convert
53132 the fractional part of the number to a string.
53133 (JSC::Uint16WithFraction::operator*=):
53134 - Multiply by a uint16.
53135 (JSC::Uint16WithFraction::operator<):
53136 - Compare two Uint16WithFractions.
53137 (JSC::Uint16WithFraction::floorAndSubtract):
53138 - Extract the integer portion of the number, and subtract it (clears the integer portion).
53139 (JSC::Uint16WithFraction::comparePoint5):
53141 (JSC::Uint16WithFraction::sumGreaterThanOne):
53142 - Passed a second Uint16WithFraction, returns true if the result of adding
53143 the two values would be greater than one.
53144 (JSC::Uint16WithFraction::isNormalized):
53145 - Used by ASSERTs to consistency check internal representation.
53146 (JSC::BigInteger::BigInteger):
53147 - helper class, unbounded integer value, used to convert the integer part
53148 of the number to a string.
53149 (JSC::BigInteger::divide):
53150 - Divide this value through by a uint32.
53151 (JSC::BigInteger::operator!):
53153 (JSC::toStringWithRadix):
53154 - Performs number to string conversion, with the given radix (2..36).
53155 (JSC::numberProtoFuncToString):
53156 - Changed to use toStringWithRadix.
53158 2011-07-02 Gavin Barraclough <barraclough@apple.com>
53160 https://bugs.webkit.org/show_bug.cgi?id=63866
53161 DFG JIT - implement instanceof
53163 Reviewed by Sam Weinig.
53165 Add ops CheckHasInstance & InstanceOf to implement bytecodes
53166 op_check_has_instance & op_instanceof. This is an initial
53167 functional implementation, performance is a wash. We can
53168 follow up with changes to fuse the InstanceOf node with
53169 a subsequant branch, as we do with other comparisons.
53171 * dfg/DFGByteCodeParser.cpp:
53172 (JSC::DFG::ByteCodeParser::parseBlock):
53173 * dfg/DFGJITCompiler.cpp:
53174 (JSC::DFG::JITCompiler::jitAssertIsCell):
53175 * dfg/DFGJITCompiler.h:
53176 (JSC::DFG::JITCompiler::jitAssertIsCell):
53178 * dfg/DFGNonSpeculativeJIT.cpp:
53179 (JSC::DFG::NonSpeculativeJIT::compile):
53180 * dfg/DFGOperations.cpp:
53181 * dfg/DFGOperations.h:
53182 * dfg/DFGSpeculativeJIT.cpp:
53183 (JSC::DFG::SpeculativeJIT::compile):
53185 2011-07-01 Oliver Hunt <oliver@apple.com>
53187 IE Web Workers demo crashes in JSC::SlotVisitor::visitChildren()
53188 https://bugs.webkit.org/show_bug.cgi?id=63732
53190 Reviewed by Gavin Barraclough.
53192 Initialise the memory at the head of the new storage so that
53193 GC is safe if triggered by reportExtraMemoryCost.
53195 * runtime/JSArray.cpp:
53196 (JSC::JSArray::increaseVectorPrefixLength):
53198 2011-07-01 Oliver Hunt <oliver@apple.com>
53200 GC sweep can occur before an object is completely initialised
53201 https://bugs.webkit.org/show_bug.cgi?id=63836
53203 Reviewed by Gavin Barraclough.
53205 In rare cases it's possible for a GC sweep to occur while a
53206 live, but not completely initialised object is on the stack.
53207 In such a case we may incorrectly choose to mark it, even
53208 though it has no children that need marking.
53210 We resolve this by always zeroing out the structure of any
53211 value returned from JSCell::operator new(), and making the
53212 markstack tolerant of a null structure.
53214 * runtime/JSCell.h:
53215 (JSC::JSCell::JSCell::~JSCell):
53216 (JSC::JSCell::JSCell::operator new):
53217 * runtime/Structure.h:
53218 (JSC::MarkStack::internalAppend):
53220 2011-07-01 Filip Pizlo <fpizlo@apple.com>
53222 Reviewed by Gavin Barraclough.
53224 DFG non-speculative JIT always performs slow C calls for div and mod.
53225 https://bugs.webkit.org/show_bug.cgi?id=63684
53227 * dfg/DFGNonSpeculativeJIT.cpp:
53228 (JSC::DFG::NonSpeculativeJIT::compile):
53230 2011-07-01 Juan C. Montemayor <jmont@apple.com>
53232 Reviewed by Oliver Hunt.
53234 Lexer error messages are currently appalling
53235 https://bugs.webkit.org/show_bug.cgi?id=63340
53237 Added error messages for the Lexer. These messages will be displayed
53238 instead of the lexer error messages from the parser that are currently
53241 * parser/Lexer.cpp:
53242 (JSC::Lexer::getInvalidCharMessage):
53243 (JSC::Lexer::setCode):
53244 (JSC::Lexer::parseString):
53246 (JSC::Lexer::clear):
53248 (JSC::Lexer::getErrorMessage):
53249 (JSC::Lexer::setOffset):
53250 * parser/Parser.cpp:
53251 (JSC::Parser::parse):
53253 2011-07-01 Jungshik Shin <jshin@chromium.org>
53255 Reviewed by Alexey Proskuryakov.
53257 Add ScriptCodesFromICU.h to wtf/unicode and make necessary changes in
53258 build files for ports not using ICU.
53259 Add icu/unicode/uscript.h for ports using ICU. It's taken from
53260 ICU 3.6 (the version used on Mac OS 10.5)
53262 http://bugs.webkit.org/show_bug.cgi?id=20797
53264 * GNUmakefile.list.am:
53265 * JavaScriptCore.gypi:
53266 * icu/unicode/uscript.h: Added for UScriptCode enum.
53267 * wtf/unicode/ScriptCodesFromICU.h: UScriptCode enum added.
53268 * wtf/unicode/icu/UnicodeIcu.h:
53269 * wtf/unicode/brew/UnicodeBrew.h:
53270 * wtf/unicode/glib/UnicodeGLib.h:
53271 * wtf/unicode/qt4/UnicodeQt4.h:
53272 * wtf/unicode/wince/UnicodeWinCE.h:
53274 2011-07-01 Gavin Barraclough <barraclough@apple.com>
53276 Reviewed by Sam Weinig.
53278 https://bugs.webkit.org/show_bug.cgi?id=63819
53279 Escaping of forwardslashes in strings incorrect if multiple exist.
53281 The bug is in the parameters passed to a substring - should be
53282 start & length, but we're passing start & end indices!
53284 * runtime/RegExpObject.cpp:
53285 (JSC::regExpObjectSource):
53287 2011-07-01 Adam Roben <aroben@apple.com>
53290 http://trac.webkit.org/changeset/90194
53291 https://bugs.webkit.org/show_bug.cgi?id=63778
53293 Fixes <http://webkit.org/b/63812> REGRESSION (r90194): Multiple tests intermittently failing
53294 assertions in WriteBarrierBase<JSC::Structure>::get
53296 * runtime/JSCell.h:
53297 (JSC::JSCell::JSCell::~JSCell):
53299 2011-06-30 Oliver Hunt <oliver@apple.com>
53301 Reviewed by Gavin Barraclough.
53303 Add optimised paths for a few maths functions
53304 https://bugs.webkit.org/show_bug.cgi?id=63757
53306 Relanding as a Mac only patch.
53308 This adds specialised thunks for Math.abs, Math.round, Math.ceil,
53309 Math.floor, Math.log, and Math.exp as they are apparently more
53310 important in real web content than we thought, which is somewhat
53311 mind-boggling. On average doubles the performance of the common
53312 cases (eg. actually passing numbers in). They're not as efficient
53313 as they could be, but this way gives them the most portability.
53315 * assembler/MacroAssemblerARM.h:
53316 (JSC::MacroAssemblerARM::supportsDoubleBitops):
53317 (JSC::MacroAssemblerARM::andnotDouble):
53318 * assembler/MacroAssemblerARMv7.h:
53319 (JSC::MacroAssemblerARMv7::supportsDoubleBitops):
53320 (JSC::MacroAssemblerARMv7::andnotDouble):
53321 * assembler/MacroAssemblerMIPS.h:
53322 (JSC::MacroAssemblerMIPS::andnotDouble):
53323 (JSC::MacroAssemblerMIPS::supportsDoubleBitops):
53324 * assembler/MacroAssemblerSH4.h:
53325 (JSC::MacroAssemblerSH4::supportsDoubleBitops):
53326 (JSC::MacroAssemblerSH4::andnotDouble):
53327 * assembler/MacroAssemblerX86.h:
53328 (JSC::MacroAssemblerX86::supportsDoubleBitops):
53329 * assembler/MacroAssemblerX86Common.h:
53330 (JSC::MacroAssemblerX86Common::andnotDouble):
53331 * assembler/MacroAssemblerX86_64.h:
53332 (JSC::MacroAssemblerX86_64::supportsDoubleBitops):
53333 * assembler/X86Assembler.h:
53334 (JSC::X86Assembler::andnpd_rr):
53335 * create_hash_table:
53336 * jit/SpecializedThunkJIT.h:
53337 (JSC::SpecializedThunkJIT::finalize):
53338 (JSC::SpecializedThunkJIT::callDoubleToDouble):
53339 * jit/ThunkGenerators.cpp:
53340 (JSC::floorThunkGenerator):
53341 (JSC::ceilThunkGenerator):
53342 (JSC::roundThunkGenerator):
53343 (JSC::expThunkGenerator):
53344 (JSC::logThunkGenerator):
53345 (JSC::absThunkGenerator):
53346 * jit/ThunkGenerators.h:
53348 2011-07-01 David Kilzer <ddkilzer@apple.com>
53350 <http://webkit.org/b/63814> Fix clang build error in JITOpcodes32_64.cpp
53352 Fixes the following build error in clang:
53354 JavaScriptCore/jit/JITOpcodes32_64.cpp:741:36:{741:9-741:35}: error: operator '?:' has lower precedence than '+'; '+' will be evaluated first [-Werror,-Wparentheses,3]
53355 map(m_bytecodeOffset + dynamic ? OPCODE_LENGTH(op_resolve_global_dynamic) : OPCODE_LENGTH(op_resolve_global), dst, regT1, regT0);
53356 ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^
53357 JavaScriptCore/jit/JITOpcodes32_64.cpp:741:36: note: place parentheses around the '+' expression to silence this warning [3]
53358 map(m_bytecodeOffset + dynamic ? OPCODE_LENGTH(op_resolve_global_dynamic) : OPCODE_LENGTH(op_resolve_global), dst, regT1, regT0);
53361 fix-it:"JavaScriptCore/jit/JITOpcodes32_64.cpp":{741:9-741:9}:"("
53362 fix-it:"JavaScriptCore/jit/JITOpcodes32_64.cpp":{741:35-741:35}:")"
53363 JavaScriptCore/jit/JITOpcodes32_64.cpp:741:36:{741:28-741:94}: note: place parentheses around the '?:' expression to evaluate it first [3]
53364 map(m_bytecodeOffset + dynamic ? OPCODE_LENGTH(op_resolve_global_dynamic) : OPCODE_LENGTH(op_resolve_global), dst, regT1, regT0);
53365 ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
53368 * jit/JITOpcodes32_64.cpp:
53369 (JSC::JIT::emit_op_resolve_global): Add parenthesis to make the
53370 tertiary expression evaluate first.
53372 2011-07-01 Sheriff Bot <webkit.review.bot@gmail.com>
53374 Unreviewed, rolling out r90177 and r90179.
53375 http://trac.webkit.org/changeset/90177
53376 http://trac.webkit.org/changeset/90179
53377 https://bugs.webkit.org/show_bug.cgi?id=63790
53379 It caused crashes on Qt in debug mode (Requested by Ossy on
53382 * assembler/MacroAssemblerARM.h:
53383 (JSC::MacroAssemblerARM::rshift32):
53384 (JSC::MacroAssemblerARM::supportsFloatingPointSqrt):
53385 (JSC::MacroAssemblerARM::sqrtDouble):
53386 * assembler/MacroAssemblerARMv7.h:
53387 (JSC::MacroAssemblerARMv7::supportsFloatingPointSqrt):
53388 (JSC::MacroAssemblerARMv7::sqrtDouble):
53389 * assembler/MacroAssemblerMIPS.h:
53390 (JSC::MacroAssemblerMIPS::sqrtDouble):
53391 (JSC::MacroAssemblerMIPS::supportsFloatingPointSqrt):
53392 * assembler/MacroAssemblerSH4.h:
53393 (JSC::MacroAssemblerSH4::sqrtDouble):
53394 * assembler/MacroAssemblerX86.h:
53395 * assembler/MacroAssemblerX86Common.h:
53396 * assembler/MacroAssemblerX86_64.h:
53397 * assembler/X86Assembler.h:
53398 * create_hash_table:
53399 * jit/JSInterfaceJIT.h:
53400 (JSC::JSInterfaceJIT::emitLoadDouble):
53401 * jit/SpecializedThunkJIT.h:
53402 (JSC::SpecializedThunkJIT::finalize):
53403 * jit/ThunkGenerators.cpp:
53404 * jit/ThunkGenerators.h:
53406 2011-06-30 Oliver Hunt <oliver@apple.com>
53408 Reviewed by Beth Dakin.
53410 Make GC validation clear cell structure on destruction
53411 https://bugs.webkit.org/show_bug.cgi?id=63778
53413 * runtime/JSCell.h:
53414 (JSC::JSCell::JSCell::~JSCell):
53416 2011-06-30 Geoffrey Garen <ggaren@apple.com>
53418 Reviewed by Gavin Barraclough.
53420 Added write barrier that was missing from put_by_id_transition
53421 https://bugs.webkit.org/show_bug.cgi?id=63775
53423 * dfg/DFGJITCodeGenerator.cpp:
53424 (JSC::DFG::JITCodeGenerator::writeBarrier): Made this static with a
53425 MacroAssembler& argument so our patching functions could use it.
53427 (JSC::DFG::JITCodeGenerator::cachedPutById):
53428 * dfg/DFGJITCodeGenerator.h:
53429 * dfg/DFGNonSpeculativeJIT.cpp:
53430 (JSC::DFG::NonSpeculativeJIT::compile): Updated for signature change.
53432 * dfg/DFGRepatch.cpp:
53433 (JSC::DFG::tryCachePutByID): Missing barrier!
53435 * dfg/DFGSpeculativeJIT.cpp:
53436 (JSC::DFG::SpeculativeJIT::compile): Updated for signature change.
53438 * jit/JITPropertyAccess.cpp:
53439 (JSC::JIT::privateCompilePutByIdTransition):
53440 * jit/JITPropertyAccess32_64.cpp:
53441 (JSC::JIT::privateCompilePutByIdTransition):
53442 * jit/JSInterfaceJIT.h: Same game here. Removed storePtrWithWriteBarrier
53443 because its meaning isn't clear -- maybe in the future we'll have a
53444 clear way to pass all stores through a common function that guarantees
53445 a write barrier, but that's not the case right now.
53447 2011-06-30 Filip Pizlo <fpizlo@apple.com>
53449 Reviewed by Gavin Barraclough.
53451 DFG non-speculative JIT does not reuse registers when compiling comparisons.
53452 https://bugs.webkit.org/show_bug.cgi?id=63565
53454 * dfg/DFGNonSpeculativeJIT.cpp:
53455 (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp):
53456 (JSC::DFG::NonSpeculativeJIT::basicArithOp):
53457 (JSC::DFG::NonSpeculativeJIT::compare):
53459 2011-06-30 Geoffrey Garen <ggaren@apple.com>
53461 Reviewed by Gavin Barraclough.
53463 Added empty write barrier stubs in all the right places in the DFG JIT
53464 https://bugs.webkit.org/show_bug.cgi?id=63764
53466 SunSpider thinks this might be a 0.5% speedup. Meh.
53468 * dfg/DFGJITCodeGenerator.cpp:
53469 (JSC::DFG::JITCodeGenerator::writeBarrier): Le stub.
53471 (JSC::DFG::JITCodeGenerator::cachedPutById): Don't do anything special
53472 for the case where base == scratch, since we now require base and scratch
53473 to be not equal, for the sake of the write barrier.
53475 * dfg/DFGJITCodeGenerator.h: Le stub.
53477 * dfg/DFGNonSpeculativeJIT.cpp:
53478 (JSC::DFG::NonSpeculativeJIT::compile): Don't reuse the base register
53479 as the scratch register, since that's incompatible with the write barrier,
53480 which needs a distinct base and scratch.
53482 Do put the global object into a register before loading its var storage,
53483 since it needs to be in a register for the write barrier to operate on it.
53485 * dfg/DFGSpeculativeJIT.cpp:
53486 (JSC::DFG::SpeculativeJIT::compile):
53487 * jit/JITPropertyAccess.cpp:
53488 (JSC::JIT::emitWriteBarrier): Second verse, same as the first.
53490 * jit/JITPropertyAccess.cpp:
53491 (JSC::JIT::emit_op_get_scoped_var):
53492 (JSC::JIT::emit_op_put_scoped_var):
53493 (JSC::JIT::emit_op_put_global_var): Deployed offsetOfRegisters() to more
53496 (JSC::JIT::emitWriteBarrier): Added a teeny tiny ASSERT so this function
53497 is a little more than meaningless.
53499 * jit/JITPropertyAccess32_64.cpp:
53500 (JSC::JIT::emit_op_get_scoped_var):
53501 (JSC::JIT::emit_op_put_scoped_var):
53502 (JSC::JIT::emit_op_put_global_var): Deployed offsetOfRegisters() to more
53505 (JSC::JIT::emitWriteBarrier): Added a teeny tiny ASSERT so this function
53506 is a little more than meaningless.
53508 * runtime/JSVariableObject.h:
53509 (JSC::JSVariableObject::offsetOfRegisters): Now used by the JIT, since
53510 we put the global object in a register and only then load its var storage
53513 (JSC::JIT::emitWriteBarrier):
53515 2011-06-30 Oliver Hunt <oliver@apple.com>
53519 * assembler/MacroAssemblerARM.h:
53520 (JSC::MacroAssemblerARM::rshift32):
53522 2011-06-30 Oliver Hunt <oliver@apple.com>
53524 Reviewed by Gavin Barraclough.
53526 Add optimised paths for a few maths functions
53527 https://bugs.webkit.org/show_bug.cgi?id=63757
53529 This adds specialised thunks for Math.abs, Math.round, Math.ceil,
53530 Math.floor, Math.log, and Math.exp as they are apparently more
53531 important in real web content than we thought, which is somewhat
53532 mind-boggling. On average doubles the performance of the common
53533 cases (eg. actually passing numbers in). They're not as efficient
53534 as they could be, but this way gives them the most portability.
53536 * assembler/MacroAssemblerARM.h:
53537 (JSC::MacroAssemblerARM::supportsDoubleBitops):
53538 (JSC::MacroAssemblerARM::andnotDouble):
53539 * assembler/MacroAssemblerARMv7.h:
53540 (JSC::MacroAssemblerARMv7::supportsDoubleBitops):
53541 (JSC::MacroAssemblerARMv7::andnotDouble):
53542 * assembler/MacroAssemblerMIPS.h:
53543 (JSC::MacroAssemblerMIPS::andnotDouble):
53544 (JSC::MacroAssemblerMIPS::supportsDoubleBitops):
53545 * assembler/MacroAssemblerSH4.h:
53546 (JSC::MacroAssemblerSH4::supportsDoubleBitops):
53547 (JSC::MacroAssemblerSH4::andnotDouble):
53548 * assembler/MacroAssemblerX86.h:
53549 (JSC::MacroAssemblerX86::supportsDoubleBitops):
53550 * assembler/MacroAssemblerX86Common.h:
53551 (JSC::MacroAssemblerX86Common::andnotDouble):
53552 * assembler/MacroAssemblerX86_64.h:
53553 (JSC::MacroAssemblerX86_64::supportsDoubleBitops):
53554 * assembler/X86Assembler.h:
53555 (JSC::X86Assembler::andnpd_rr):
53556 * create_hash_table:
53557 * jit/SpecializedThunkJIT.h:
53558 (JSC::SpecializedThunkJIT::finalize):
53559 (JSC::SpecializedThunkJIT::callDoubleToDouble):
53560 * jit/ThunkGenerators.cpp:
53561 (JSC::floorThunkGenerator):
53562 (JSC::ceilThunkGenerator):
53563 (JSC::roundThunkGenerator):
53564 (JSC::expThunkGenerator):
53565 (JSC::logThunkGenerator):
53566 (JSC::absThunkGenerator):
53567 * jit/ThunkGenerators.h:
53569 2011-06-30 Cary Clark <caryclark@google.com>
53571 Reviewed by James Robinson.
53573 Use Skia if Skia on Mac Chrome is enabled
53574 https://bugs.webkit.org/show_bug.cgi?id=62999
53577 Add switch to use Skia if, externally,
53578 Skia has been enabled by a gyp define.
53580 2011-06-30 Juan C. Montemayor <jmont@apple.com>
53582 Reviewed by Geoffrey Garen.
53584 Web Inspector fails to display source for eval with syntax error
53585 https://bugs.webkit.org/show_bug.cgi?id=63583
53587 Web Inspector now displays a link to an eval statement that contains
53593 (JSC::Parser::parse):
53595 2011-06-30 Filip Pizlo <fpizlo@apple.com>
53597 Reviewed by Gavin Barraclough.
53599 X86Assembler does not encode byte registers in 64-bit mode correctly.
53600 https://bugs.webkit.org/show_bug.cgi?id=63665
53602 * assembler/X86Assembler.h:
53603 (JSC::X86Assembler::testb_rr):
53604 (JSC::X86Assembler::X86InstructionFormatter::oneByteOp8):
53606 2011-06-30 Sheriff Bot <webkit.review.bot@gmail.com>
53608 Unreviewed, rolling out r90102.
53609 http://trac.webkit.org/changeset/90102
53610 https://bugs.webkit.org/show_bug.cgi?id=63714
53612 Lots of tests asserting beneath
53613 SVGSMILElement::findInstanceTime (Requested by aroben on
53616 * wtf/StdLibExtras.h:
53617 (WTF::binarySearch):
53619 2011-06-30 Oliver Varga <Varga.Oliver@stud.u-szeged.hu>
53621 Reviewed by Nikolas Zimmermann.
53623 Speed up SVGSMILElement::findInstanceTime.
53624 https://bugs.webkit.org/show_bug.cgi?id=61025
53626 Add a new parameter to StdlibExtras.h::binarySerarch function
53627 to also handle cases when the array does not contain the key value.
53628 This is needed for an svg function.
53630 * wtf/StdLibExtras.h:
53631 (WTF::binarySearch):
53633 2011-06-29 Gavin Barraclough <barraclough@apple.com>
53635 Reviewed by Geoff Garen.
53637 https://bugs.webkit.org/show_bug.cgi?id=63669
53638 DFG JIT - fix spectral-norm regression
53640 The problem is a mis-speculation leading to us falling off the speculative path.
53641 Make the speculation logic slightly smarter, don't predict int if one of the
53642 operands is already loaded as a double (we use this logic already for compares).
53644 * dfg/DFGSpeculativeJIT.cpp:
53645 (JSC::DFG::SpeculativeJIT::compile):
53646 * dfg/DFGSpeculativeJIT.h:
53647 (JSC::DFG::SpeculativeJIT::shouldSpeculateInteger):
53649 2011-06-29 Filip Pizlo <fpizlo@apple.com>
53651 Reviewed by Gavin Barraclough.
53653 DFG JIT does not do put_by_id transition caching.
53654 https://bugs.webkit.org/show_bug.cgi?id=63662
53656 * dfg/DFGJITCodeGenerator.cpp:
53657 (JSC::DFG::JITCodeGenerator::cachedPutById):
53658 * dfg/DFGJITCompiler.h:
53659 (JSC::DFG::JITCompiler::addPropertyAccess):
53660 * dfg/DFGRepatch.cpp:
53661 (JSC::DFG::testPrototype):
53662 (JSC::DFG::tryCachePutByID):
53664 2011-06-29 Geoffrey Garen <ggaren@apple.com>
53666 Reviewed by Oliver Hunt.
53668 Added a dummy write barrier emitting function in all the right places in the old JIT
53669 https://bugs.webkit.org/show_bug.cgi?id=63667
53671 SunSpider reports no change.
53674 * jit/JITPropertyAccess.cpp:
53675 (JSC::JIT::emit_op_put_by_id):
53676 (JSC::JIT::emit_op_put_scoped_var): Do it.
53678 (JSC::JIT::emit_op_put_global_var): Global object needs to be in a register
53679 for the sake of the write barrier.
53681 (JSC::JIT::emitWriteBarrier): Empty for now. Not for long!
53683 * jit/JITPropertyAccess32_64.cpp:
53684 (JSC::JIT::emit_op_put_by_val):
53685 (JSC::JIT::emit_op_put_by_id):
53686 (JSC::JIT::emit_op_put_scoped_var): Do it.
53688 (JSC::JIT::emit_op_put_global_var): Global object needs to be in a register
53689 for the sake of the write barrier.
53691 (JSC::JIT::emitWriteBarrier): Empty for now. Not for long!
53693 2011-06-29 Filip Pizlo <fpizlo@apple.com>
53695 Reviewed by Gavin Barraclough.
53697 DFG JIT does not perform get_by_id self list caching.
53698 https://bugs.webkit.org/show_bug.cgi?id=63605
53700 * bytecode/StructureStubInfo.h:
53701 * dfg/DFGJITCompiler.cpp:
53702 (JSC::DFG::JITCompiler::compileFunction):
53703 * dfg/DFGOperations.cpp:
53704 * dfg/DFGOperations.h:
53705 * dfg/DFGRepatch.cpp:
53706 (JSC::DFG::tryCacheGetByID):
53707 (JSC::DFG::tryBuildGetByIDList):
53708 (JSC::DFG::dfgBuildGetByIDList):
53709 * dfg/DFGRepatch.h:
53711 2011-06-28 Filip Pizlo <fpizlo@apple.com>
53713 Reviewed by Gavin Barraclough.
53715 DFG JIT lacks array.length caching.
53716 https://bugs.webkit.org/show_bug.cgi?id=63505
53718 * bytecode/StructureStubInfo.h:
53719 * dfg/DFGJITCodeGenerator.cpp:
53720 (JSC::DFG::JITCodeGenerator::cachedGetById):
53721 (JSC::DFG::JITCodeGenerator::cachedPutById):
53722 * dfg/DFGJITCodeGenerator.h:
53723 (JSC::DFG::JITCodeGenerator::tryAllocate):
53724 (JSC::DFG::JITCodeGenerator::selectScratchGPR):
53725 (JSC::DFG::JITCodeGenerator::silentSpillAllRegisters):
53726 * dfg/DFGJITCompiler.cpp:
53727 (JSC::DFG::JITCompiler::compileFunction):
53728 * dfg/DFGJITCompiler.h:
53729 (JSC::DFG::JITCompiler::addPropertyAccess):
53730 (JSC::DFG::JITCompiler::PropertyAccessRecord::PropertyAccessRecord):
53731 * dfg/DFGRegisterBank.h:
53732 (JSC::DFG::RegisterBank::tryAllocate):
53733 * dfg/DFGRepatch.cpp:
53734 (JSC::DFG::tryCacheGetByID):
53736 2011-06-28 Pierre Rossi <pierre.rossi@gmail.com>
53738 Reviewed by Eric Seidel.
53740 Warnings in JSC's JIT on 32 bit
53741 https://bugs.webkit.org/show_bug.cgi?id=63259
53743 Fairly straightforward, just use ASSERT_JIT_OFFSET_UNUSED when it applies.
53745 * jit/JITPropertyAccess32_64.cpp:
53746 (JSC::JIT::emit_op_method_check):
53747 (JSC::JIT::compileGetByIdHotPath):
53748 (JSC::JIT::emit_op_put_by_id):
53750 2011-06-28 Sheriff Bot <webkit.review.bot@gmail.com>
53752 Unreviewed, rolling out r89968.
53753 http://trac.webkit.org/changeset/89968
53754 https://bugs.webkit.org/show_bug.cgi?id=63581
53756 Broke chromium windows compile (Requested by jamesr on
53761 2011-06-28 Oliver Hunt <oliver@apple.com>
53763 Reviewed by Gavin Barraclough.
53766 https://bugs.webkit.org/show_bug.cgi?id=63579
53768 Gets opcode sampling building again, doesn't seem to work alas
53770 * bytecode/SamplingTool.cpp:
53771 (JSC::SamplingTool::notifyOfScope):
53772 * bytecode/SamplingTool.h:
53773 (JSC::SamplingTool::SamplingTool):
53774 * interpreter/Interpreter.cpp:
53775 (JSC::Interpreter::enableSampler):
53776 * runtime/Executable.h:
53777 (JSC::ScriptExecutable::ScriptExecutable):
53779 2011-06-28 Cary Clark <caryclark@google.com>
53781 Reviewed by James Robinson.
53783 Use Skia if Skia on Mac Chrome is enabled
53784 https://bugs.webkit.org/show_bug.cgi?id=62999
53787 Add switch to use Skia if, externally,
53788 Skia has been enabled by a gyp define.
53790 2011-06-28 Oliver Hunt <oliver@apple.com>
53792 Reviewed by Gavin Barraclough.
53794 ASSERT when launching debug builds with interpreter and jit enabled
53795 https://bugs.webkit.org/show_bug.cgi?id=63566
53797 Add appropriate guards to the various Executable's memory reporting
53800 * runtime/Executable.cpp:
53801 (JSC::EvalExecutable::compileInternal):
53802 (JSC::ProgramExecutable::compileInternal):
53803 (JSC::FunctionExecutable::compileForCallInternal):
53804 (JSC::FunctionExecutable::compileForConstructInternal):
53806 2011-06-28 Gavin Barraclough <barraclough@apple.com>
53808 Reviewed by Oliver Hunt.
53810 https://bugs.webkit.org/show_bug.cgi?id=63563
53811 DFG JIT - add support for double arith to speculative path
53813 Add integer support for div & mod, add double support for div, mod,
53814 add, sub & mul, dynamically selecting based on operand types.
53816 * dfg/DFGJITCodeGenerator.cpp:
53817 (JSC::DFG::FPRTemporary::FPRTemporary):
53818 * dfg/DFGJITCodeGenerator.h:
53819 * dfg/DFGJITCompiler.h:
53820 (JSC::DFG::JITCompiler::assembler):
53821 * dfg/DFGSpeculativeJIT.cpp:
53822 (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
53823 (JSC::DFG::SpeculativeJIT::compile):
53824 * dfg/DFGSpeculativeJIT.h:
53825 (JSC::DFG::SpeculateDoubleOperand::SpeculateDoubleOperand):
53826 (JSC::DFG::SpeculateDoubleOperand::~SpeculateDoubleOperand):
53827 (JSC::DFG::SpeculateDoubleOperand::index):
53828 (JSC::DFG::SpeculateDoubleOperand::fpr):
53830 2011-06-28 Oliver Hunt <oliver@apple.com>
53832 Fix interpreter build.
53834 * interpreter/Interpreter.cpp:
53835 (JSC::Interpreter::privateExecute):
53837 2011-06-28 Gavin Barraclough <barraclough@apple.com>
53839 Reviewed by Oliver Hunt.
53841 https://bugs.webkit.org/show_bug.cgi?id=63561
53842 DFG JIT - don't always assume integer in relational compare
53844 If neither operand is known integer, or either is in double representation,
53845 then at least use a function call (don't bail off the speculative path).
53847 * dfg/DFGSpeculativeJIT.cpp:
53848 (JSC::DFG::SpeculativeJIT::compilePeepHoleCall):
53849 (JSC::DFG::SpeculativeJIT::compile):
53850 * dfg/DFGSpeculativeJIT.h:
53851 (JSC::DFG::SpeculativeJIT::isDataFormatDouble):
53852 (JSC::DFG::SpeculativeJIT::compareIsInteger):
53854 2011-06-28 Oliver Hunt <oliver@apple.com>
53856 Reviewed by Gavin Barraclough.
53858 Make constant array optimisation less strict about what constitutes a constant
53859 https://bugs.webkit.org/show_bug.cgi?id=63554
53861 Now allow string constants in array literals to actually be considered constant,
53862 and so avoid codegen in array literals with strings in them.
53864 * bytecode/CodeBlock.h:
53865 (JSC::CodeBlock::addConstantBuffer):
53866 (JSC::CodeBlock::constantBuffer):
53867 * bytecompiler/BytecodeGenerator.cpp:
53868 (JSC::BytecodeGenerator::addConstantBuffer):
53869 (JSC::BytecodeGenerator::addStringConstant):
53870 (JSC::BytecodeGenerator::emitNewArray):
53871 * bytecompiler/BytecodeGenerator.h:
53872 * interpreter/Interpreter.cpp:
53873 (JSC::Interpreter::privateExecute):
53874 * jit/JITStubs.cpp:
53875 (JSC::DEFINE_STUB_FUNCTION):
53877 2011-06-28 Gavin Barraclough <barraclough@apple.com>
53879 Reviewed by Oliver Hunt.
53881 https://bugs.webkit.org/show_bug.cgi?id=63560
53882 DFG_JIT allow allocation of specific machine registers
53884 This allow us to allocate the registers necessary to perform x86
53885 idiv instructions for div/mod, and may be useful for shifts, too.
53887 * dfg/DFGJITCodeGenerator.cpp:
53888 (JSC::DFG::GPRTemporary::GPRTemporary):
53889 * dfg/DFGJITCodeGenerator.h:
53890 (JSC::DFG::JITCodeGenerator::allocate):
53891 (JSC::DFG::GPRResult::GPRResult):
53892 * dfg/DFGRegisterBank.h:
53893 (JSC::DFG::RegisterBank::allocateSpecific):
53894 * dfg/DFGSpeculativeJIT.h:
53895 (JSC::DFG::SpeculativeJIT::isInteger):
53897 2011-06-28 Gavin Barraclough <barraclough@apple.com>
53899 Reviewed by Oliver Hunt.
53901 https://bugs.webkit.org/show_bug.cgi?id=55040
53902 RegExp constructor returns the argument regexp instead of a new object
53904 Per 15.10.3.1, our current behaviour is correct if called as a function,
53905 but incorrect when called as a constructor.
53907 * runtime/RegExpConstructor.cpp:
53908 (JSC::constructRegExp):
53909 (JSC::constructWithRegExpConstructor):
53910 * runtime/RegExpConstructor.h:
53912 2011-06-28 Luke Macpherson <macpherson@chromium.org>
53914 Reviewed by Darin Adler.
53916 Clean up integer clamping functions in MathExtras.h and support arbitrary numeric types and limits.
53917 https://bugs.webkit.org/show_bug.cgi?id=63469
53919 * wtf/MathExtras.h:
53920 (defaultMinimumForClamp):
53921 Version of std::numeric_limits::min() that returns the largest negative value for floating point types.
53922 (defaultMaximumForClamp):
53923 Symmetric alias for std::numeric_limits::max()
53925 New templated clamping function that supports arbitrary output types.
53927 Use new clampTo template.
53929 Use new clampTo template.
53930 (clampToPositiveInteger):
53931 Use new clampTo template.
53933 2011-06-28 Adam Roben <aroben@apple.com>
53935 Windows Debug build fix after r89885
53937 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Exported
53938 JSGlobalData::releaseExecutableMemory for jsc.exe's benefit.
53940 2011-06-28 Shinya Kawanaka <shinyak@google.com>
53942 Reviewed by Kent Tamura.
53944 Add const to show() method in WTFString and AtomicString.
53945 https://bugs.webkit.org/show_bug.cgi?id=63515
53947 The lack of const in show() method is painful when
53948 doing something like printf-debug.
53950 * wtf/text/AtomicString.cpp:
53951 (WTF::AtomicString::show):
53952 * wtf/text/AtomicString.h:
53953 * wtf/text/WTFString.cpp:
53955 * wtf/text/WTFString.h:
53957 2011-06-27 Ryosuke Niwa <rniwa@webkit.org>
53959 Build fix attempt after r89885.
53961 * JavaScriptCore.exp:
53964 2011-06-27 Oliver Hunt <oliver@apple.com>
53966 Reviewed by Geoffrey Garen.
53968 Support throwing away non-running code even while other code is running
53969 https://bugs.webkit.org/show_bug.cgi?id=63485
53971 Add a function to CodeBlock to support unlinking direct linked callsites,
53972 and then with that in place add logic to discard code from any function
53973 that is not currently on the stack.
53975 The unlinking completely reverts any optimized call sites, such that they
53976 may be relinked again in future.
53978 * JavaScriptCore.exp:
53979 * bytecode/CodeBlock.cpp:
53980 (JSC::CodeBlock::unlinkCalls):
53981 (JSC::CodeBlock::clearEvalCache):
53982 * bytecode/CodeBlock.h:
53983 (JSC::CallLinkInfo::CallLinkInfo):
53984 (JSC::CallLinkInfo::unlink):
53985 * bytecode/EvalCodeCache.h:
53986 (JSC::EvalCodeCache::clear):
53988 (JSC::Heap::getConservativeRegisterRoots):
53991 (JSC::JIT::privateCompile):
53994 (JSC::JIT::compileOpCall):
53995 * jit/JITWriteBarrier.h:
53996 (JSC::JITWriteBarrierBase::clear):
53998 (GlobalObject::GlobalObject):
53999 (functionReleaseExecutableMemory):
54000 * runtime/Executable.cpp:
54001 (JSC::EvalExecutable::unlinkCalls):
54002 (JSC::ProgramExecutable::unlinkCalls):
54003 (JSC::FunctionExecutable::discardCode):
54004 (JSC::FunctionExecutable::unlinkCalls):
54005 * runtime/Executable.h:
54006 * runtime/JSGlobalData.cpp:
54007 (JSC::SafeRecompiler::returnValue):
54008 (JSC::SafeRecompiler::operator()):
54009 (JSC::JSGlobalData::releaseExecutableMemory):
54011 2011-06-27 Gavin Barraclough <barraclough@apple.com>
54013 Reviewed by Darin Adler & Oliver Hunt.
54015 https://bugs.webkit.org/show_bug.cgi?id=50554
54016 RegExp.prototype.toString does not escape slashes
54018 The problem here is that we don't escape forwards slashes when converting
54019 a RegExp to a string. This means that RegExp("/").toString() is "///",
54020 which is not a valid RegExp literal. Also, we return an invalid literal
54021 for RegExp.prototype.toString() ("//", which is an empty single-line comment).
54024 "NOTE: The returned String has the form of a RegularExpressionLiteral that
54025 evaluates to another RegExp object with the same behaviour as this object."
54027 * runtime/RegExpObject.cpp:
54028 (JSC::regExpObjectSource):
54029 - Escape forward slashes when getting the source of a RegExp.
54030 * runtime/RegExpPrototype.cpp:
54031 (JSC::regExpProtoFuncToString):
54032 - Remove unnecessary and erroneous hack to return "//" as the string
54033 representation of RegExp.prototype. This is not a valid RegExp literal
54034 (it is an empty single-line comment).
54036 2011-06-27 Gavin Barraclough <barraclough@apple.com>
54038 Reviewed by Oliver Hunt.
54040 https://bugs.webkit.org/show_bug.cgi?id=63497
54041 Add DEBUG_WITH_BREAKPOINT support to the DFG JIT.
54043 * dfg/DFGByteCodeParser.cpp:
54044 (JSC::DFG::ByteCodeParser::parseBlock):
54046 * dfg/DFGNonSpeculativeJIT.cpp:
54047 (JSC::DFG::NonSpeculativeJIT::compile):
54048 * dfg/DFGSpeculativeJIT.cpp:
54049 (JSC::DFG::SpeculativeJIT::compile):
54051 2011-06-27 Juan C. Montemayor <jmont@apple.com>
54053 Reviewed by Mark Rowe.
54055 Indirectly including TextPosition.h and XPathGrammar.h causes compile errors
54056 https://bugs.webkit.org/show_bug.cgi?id=63392
54058 When both TextPosition.h and XPathGrammar.h are included a compile-error
54059 is caused, since XPathGrammar.h defines a macro called NUMBER and
54060 TextPosition has a typedef named NUMBER.
54062 * wtf/text/TextPosition.h:
54063 (WTF::TextPosition::TextPosition):
54064 (WTF::TextPosition::minimumPosition):
54065 (WTF::TextPosition::belowRangePosition):
54067 2011-06-27 Filip Pizlo <fpizlo@apple.com>
54069 Reviewed by Gavin Barraclough.
54071 DFG JIT does not perform put_by_id caching.
54072 https://bugs.webkit.org/show_bug.cgi?id=63409
54074 * bytecode/StructureStubInfo.h:
54075 * dfg/DFGJITCodeGenerator.cpp:
54076 (JSC::DFG::JITCodeGenerator::cachedPutById):
54077 * dfg/DFGJITCodeGenerator.h:
54078 * dfg/DFGJITCompiler.cpp:
54079 (JSC::DFG::JITCompiler::compileFunction):
54080 * dfg/DFGJITCompiler.h:
54081 (JSC::DFG::JITCompiler::addPropertyAccess):
54082 (JSC::DFG::JITCompiler::PropertyAccessRecord::PropertyAccessRecord):
54083 * dfg/DFGNonSpeculativeJIT.cpp:
54084 (JSC::DFG::NonSpeculativeJIT::compile):
54085 * dfg/DFGOperations.cpp:
54086 * dfg/DFGOperations.h:
54087 * dfg/DFGRepatch.cpp:
54088 (JSC::DFG::dfgRepatchByIdSelfAccess):
54089 (JSC::DFG::tryCacheGetByID):
54090 (JSC::DFG::appropriatePutByIdFunction):
54091 (JSC::DFG::tryCachePutByID):
54092 (JSC::DFG::dfgRepatchPutByID):
54093 * dfg/DFGRepatch.h:
54094 * dfg/DFGSpeculativeJIT.cpp:
54095 (JSC::DFG::SpeculativeJIT::compile):
54097 2011-06-27 Gustavo Noronha Silva <gns@gnome.org>
54099 Unreviewed build fix. One more filed missing during distcheck, for
54102 * GNUmakefile.list.am:
54104 2011-06-26 Filip Pizlo <fpizlo@apple.com>
54106 Reviewed by Gavin Barraclough.
54108 DFG non-speculative JIT has potentially harmful speculations with respect to arithmetic operations.
54109 https://bugs.webkit.org/show_bug.cgi?id=63347
54111 * dfg/DFGNonSpeculativeJIT.cpp:
54112 - Changed arithmetic operations to speculate in favor of integers.
54113 (JSC::DFG::NonSpeculativeJIT::valueToNumber):
54114 (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp):
54115 (JSC::DFG::NonSpeculativeJIT::basicArithOp):
54116 (JSC::DFG::NonSpeculativeJIT::compile):
54117 * dfg/DFGNonSpeculativeJIT.h:
54118 * dfg/DFGOperations.cpp:
54119 - Added slow-path routines for arithmetic that perform no speculation; the
54120 non-speculative JIT will generate calls to these in cases where its
54122 * dfg/DFGOperations.h:
54124 2011-06-24 Nikolas Zimmermann <nzimmermann@rim.com>
54126 Reviewed by Rob Buis.
54128 Integrate SVG Fonts within GlyphPage concept, removing the special SVG code paths from Font, making it possible to reuse the simple text code path for SVG Fonts
54129 https://bugs.webkit.org/show_bug.cgi?id=59085
54131 * wtf/Platform.h: Force Qt-EWS into a full rebuild, otherwhise this patch breaks the EWS.
54133 2011-06-24 Michael Saboff <msaboff@apple.com>
54135 Reviewed by Gavin Barraclough.
54137 Arm Assembler, Immediate stack offset values truncated to 8 bits for add & sub
54138 https://bugs.webkit.org/show_bug.cgi?id=63345
54140 The methods ARMThumbImmediate::getUInt9 and ARMThumbImmediate::getUInt10
54141 return 9 and 10 bit quantities, therefore changed their return type from
54142 uint8_t to uint16_t. Also casted the places where they are used as they
54143 are currently shifted and used as 7 or 8 bit values.
54145 These methods are currently used for literals for stack offsets,
54146 including creating and destroying stack frames. The prior truncation of
54147 the upper bits caused stack frames to be too small, thus allowing a
54148 JIT'ed function to access and overwrite stack space outside of the
54149 incorrectly sized stack frame.
54151 * assembler/ARMv7Assembler.h:
54152 (JSC::ARMThumbImmediate::getUInt9):
54153 (JSC::ARMThumbImmediate::getUInt10):
54154 (JSC::ARMv7Assembler::add):
54155 (JSC::ARMv7Assembler::ldr):
54156 (JSC::ARMv7Assembler::str):
54157 (JSC::ARMv7Assembler::sub):
54158 (JSC::ARMv7Assembler::sub_S):
54160 2011-06-24 Michael Saboff <msaboff@apple.com>
54162 Reviewed by Geoffrey Garen.
54164 releaseFastMallocFreeMemory doesn't adjust free counts for scavenger
54165 https://bugs.webkit.org/show_bug.cgi?id=63015
54167 Added code to adjust class TCMalloc_PageHeap variables free_committed_pages_ and
54168 min_free_committed_pages_since_last_scavenge_ in ReleaseFreeList(). These
54169 adjustments are a bug. These need to reflect the pages that are released
54170 in ReleaseFreeLsit so that scavenge doesn't try to free that many pages as well.
54171 Made ReleaseFreeList a member of TCMalloc_PageHeap in the process. Updated
54172 Check() and helper method CheckList() to check the number of actual free pages
54173 with free_committed_pages_.
54175 The symptom of the problem of the existing code is that the scavenger may
54176 run unneccesarily without any real work to do, i.e. pages on the free lists.
54177 The scanvenger would also end up freeing too many pages, that is going below
54178 the current 528 target free pages.
54180 Note that the style of the changes was kept consistent with the
54183 * wtf/FastMalloc.cpp:
54184 (WTF::TCMalloc_PageHeap::Check):
54185 (WTF::TCMalloc_PageHeap::CheckList):
54186 (WTF::TCMalloc_PageHeap::ReleaseFreeList):
54188 2011-06-24 Abhishek Arya <inferno@chromium.org>
54190 Reviewed by Darin Adler.
54192 Match other clampTo* functions in style with clampToInteger(float)
54194 https://bugs.webkit.org/show_bug.cgi?id=53449
54196 * wtf/MathExtras.h:
54199 (clampToPositiveInteger):
54201 2011-06-24 Sheriff Bot <webkit.review.bot@gmail.com>
54203 Unreviewed, rolling out r89594.
54204 http://trac.webkit.org/changeset/89594
54205 https://bugs.webkit.org/show_bug.cgi?id=63316
54207 It broke 5 tests on the Qt bot (Requested by Ossy_DC on
54210 * GNUmakefile.list.am:
54211 * JavaScriptCore.gypi:
54212 * icu/unicode/uscript.h: Removed.
54213 * wtf/unicode/ScriptCodesFromICU.h: Removed.
54214 * wtf/unicode/brew/UnicodeBrew.h:
54215 * wtf/unicode/glib/UnicodeGLib.h:
54216 * wtf/unicode/icu/UnicodeIcu.h:
54217 * wtf/unicode/qt4/UnicodeQt4.h:
54218 * wtf/unicode/wince/UnicodeWinCE.h:
54220 2011-06-23 Filip Pizlo <fpizlo@apple.com>
54222 Reviewed by Gavin Barraclough.
54224 DFG non-speculative JIT should have obvious optimizations for GetById and GetByVal
54225 https://bugs.webkit.org/show_bug.cgi?id=63173
54227 * dfg/DFGJITCodeGenerator.cpp:
54228 (JSC::DFG::JITCodeGenerator::cachedGetById):
54229 * dfg/DFGJITCodeGenerator.h:
54230 * dfg/DFGNonSpeculativeJIT.cpp:
54231 (JSC::DFG::NonSpeculativeJIT::compile):
54232 * dfg/DFGSpeculativeJIT.cpp:
54233 (JSC::DFG::SpeculativeJIT::compile):
54235 2011-06-23 Oliver Hunt <oliver@apple.com>
54239 * assembler/ARMAssembler.h:
54240 (JSC::ARMAssembler::readPointer):
54242 2011-06-23 Oliver Hunt <oliver@apple.com>
54246 * assembler/ARMAssembler.h:
54247 (JSC::ARMAssembler::readPointer):
54249 2011-06-23 Stephanie Lewis <slewis@apple.com>
54251 Reviewed by Darin Adler.
54253 https://bugs.webkit.org/show_bug.cgi?id=63298
54254 Replace Malloc with FastMalloc to match the rest of wtf.
54256 * wtf/BlockStack.h:
54257 (WTF::::~BlockStack):
54261 2011-06-23 Oliver Hunt <oliver@apple.com>
54263 Reviewed by Gavin Barraclough.
54265 Add the ability to dynamically modify linked call sites
54266 https://bugs.webkit.org/show_bug.cgi?id=63291
54268 Add JITWriteBarrier as a writebarrier class that allows
54269 reading and writing directly into the code stream.
54271 This required adding logic to all the assemblers to allow
54272 us to read values back out of the instruction stream.
54274 * JavaScriptCore.xcodeproj/project.pbxproj:
54275 * assembler/ARMAssembler.h:
54276 (JSC::ARMAssembler::readPointer):
54277 * assembler/ARMv7Assembler.h:
54278 (JSC::ARMv7Assembler::readPointer):
54279 (JSC::ARMv7Assembler::readInt32):
54280 (JSC::ARMv7Assembler::decodeTwoWordOp5i6Imm4Reg4EncodedImmFirst):
54281 (JSC::ARMv7Assembler::decodeTwoWordOp5i6Imm4Reg4EncodedImmSecond):
54282 * assembler/AbstractMacroAssembler.h:
54283 (JSC::AbstractMacroAssembler::readPointer):
54284 * assembler/MIPSAssembler.h:
54285 (JSC::MIPSAssembler::readInt32):
54286 (JSC::MIPSAssembler::readPointer):
54287 * assembler/MacroAssemblerCodeRef.h:
54288 (JSC::MacroAssemblerCodePtr::operator!):
54289 * assembler/SH4Assembler.h:
54290 (JSC::SH4Assembler::readPCrelativeAddress):
54291 (JSC::SH4Assembler::readPointer):
54292 (JSC::SH4Assembler::readInt32):
54293 * assembler/X86Assembler.h:
54294 (JSC::X86Assembler::readPointer):
54295 * bytecode/CodeBlock.cpp:
54296 (JSC::CodeBlock::visitAggregate):
54297 * bytecode/CodeBlock.h:
54298 (JSC::MethodCallLinkInfo::seenOnce):
54299 (JSC::MethodCallLinkInfo::setSeen):
54300 * heap/MarkStack.h:
54302 (JSC::JIT::privateCompile):
54303 (JSC::JIT::linkCall):
54304 (JSC::JIT::linkConstruct):
54305 * jit/JITPropertyAccess.cpp:
54306 (JSC::JIT::patchMethodCallProto):
54307 * jit/JITPropertyAccess32_64.cpp:
54308 * jit/JITWriteBarrier.h: Added.
54309 (JSC::JITWriteBarrierBase::operator UnspecifiedBoolType*):
54310 (JSC::JITWriteBarrierBase::operator!):
54311 (JSC::JITWriteBarrierBase::setFlagOnBarrier):
54312 (JSC::JITWriteBarrierBase::isFlagged):
54313 (JSC::JITWriteBarrierBase::setLocation):
54314 (JSC::JITWriteBarrierBase::location):
54315 (JSC::JITWriteBarrierBase::JITWriteBarrierBase):
54316 (JSC::JITWriteBarrierBase::set):
54317 (JSC::JITWriteBarrierBase::get):
54318 (JSC::JITWriteBarrier::JITWriteBarrier):
54319 (JSC::JITWriteBarrier::set):
54320 (JSC::JITWriteBarrier::get):
54321 (JSC::MarkStack::append):
54323 2011-06-23 Gavin Barraclough <barraclough@apple.com>
54325 Reviewed by Oliver Hunt.
54327 https://bugs.webkit.org/show_bug.cgi?id=61585
54328 Crash running regexp /(?:(?=g))|(?:m).{2147483648,}/
54330 This is due to use of int instead of unsigned, bad math around
54333 * yarr/YarrInterpreter.cpp:
54334 (JSC::Yarr::ByteCompiler::emitDisjunction):
54335 - Change some uses of int to unsigned, refactor compare logic to
54336 restrict to the range 0..2^32-1 (rather than -2^32-1..2^32-1).
54337 * yarr/YarrJIT.cpp:
54338 (JSC::Yarr::YarrGenerator::generate):
54339 (JSC::Yarr::YarrGenerator::backtrack):
54342 2011-06-22 Gavin Barraclough <barraclough@apple.com>
54344 Reviewed by Sam Weinig.
54346 https://bugs.webkit.org/show_bug.cgi?id=63218
54347 DFG JIT - remove machine type guarantees from graph
54349 The DFG JIT currently makes assumptions about the types of machine registers
54350 that certain nodes will be loaded into. This will be broken as we generate
54351 nodes to produce both integer and double code paths. Remove int<->double
54352 conversions nodes. This design decision also gave rise to multiple types of
54353 constant nodes, requiring separate handling for each type. Merge these back
54356 * dfg/DFGAliasTracker.h:
54357 (JSC::DFG::AliasTracker::equalIgnoringLaterNumericConversion):
54358 * dfg/DFGByteCodeParser.cpp:
54359 (JSC::DFG::ByteCodeParser::getToInt32):
54360 (JSC::DFG::ByteCodeParser::getToNumber):
54361 (JSC::DFG::ByteCodeParser::toInt32):
54362 (JSC::DFG::ByteCodeParser::toNumber):
54363 (JSC::DFG::ByteCodeParser::isInt32Constant):
54364 (JSC::DFG::ByteCodeParser::isDoubleConstant):
54365 (JSC::DFG::ByteCodeParser::valueOfInt32Constant):
54366 (JSC::DFG::ByteCodeParser::valueOfDoubleConstant):
54367 (JSC::DFG::ByteCodeParser::one):
54368 (JSC::DFG::ByteCodeParser::predictInt32):
54369 * dfg/DFGGraph.cpp:
54370 (JSC::DFG::Graph::dump):
54371 * dfg/DFGJITCodeGenerator.h:
54372 (JSC::DFG::JITCodeGenerator::silentFillGPR):
54373 (JSC::DFG::JITCodeGenerator::silentFillFPR):
54374 (JSC::DFG::JITCodeGenerator::isJSConstant):
54375 (JSC::DFG::JITCodeGenerator::isDoubleConstant):
54376 (JSC::DFG::JITCodeGenerator::valueOfJSConstantAsImmPtr):
54377 * dfg/DFGJITCompiler.cpp:
54378 (JSC::DFG::JITCompiler::fillNumericToDouble):
54379 (JSC::DFG::JITCompiler::fillInt32ToInteger):
54380 * dfg/DFGJITCompiler.h:
54381 (JSC::DFG::JITCompiler::isJSConstant):
54382 (JSC::DFG::JITCompiler::isInt32Constant):
54383 (JSC::DFG::JITCompiler::isDoubleConstant):
54384 (JSC::DFG::JITCompiler::valueOfJSConstant):
54385 (JSC::DFG::JITCompiler::valueOfInt32Constant):
54386 (JSC::DFG::JITCompiler::valueOfDoubleConstant):
54388 (JSC::DFG::Node::Node):
54389 (JSC::DFG::Node::isConstant):
54390 (JSC::DFG::Node::notTakenBytecodeOffset):
54391 * dfg/DFGNonSpeculativeJIT.cpp:
54392 (JSC::DFG::NonSpeculativeJIT::isKnownInteger):
54393 (JSC::DFG::NonSpeculativeJIT::isKnownNumeric):
54394 (JSC::DFG::NonSpeculativeJIT::compile):
54395 * dfg/DFGSpeculativeJIT.cpp:
54396 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
54397 (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
54398 (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
54399 (JSC::DFG::SpeculativeJIT::compile):
54401 2011-06-23 Jungshik Shin <jshin@chromium.org>
54403 Reviewed by Alexey Proskuryakov.
54405 Add ScriptCodesFromICU.h to wtf/unicode and make necessary changes in
54406 build files for ports not using ICU.
54407 Add icu/unicode/uscript.h for ports using ICU. It's taken from
54408 ICU 3.6 (the version used on Mac OS 10.5)
54410 http://bugs.webkit.org/show_bug.cgi?id=20797
54412 * GNUmakefile.list.am:
54413 * JavaScriptCore.gypi:
54414 * icu/unicode/uscript.h: Added for UScriptCode enum.
54415 * wtf/unicode/ScriptCodesFromICU.h: UScriptCode enum added.
54416 * wtf/unicode/icu/UnicodeIcu.h:
54417 * wtf/unicode/brew/UnicodeBrew.h:
54418 * wtf/unicode/glib/UnicodeGLib.h:
54419 * wtf/unicode/qt4/UnicodeQt4.h:
54420 * wtf/unicode/wince/UnicodeWinCE.h:
54422 2011-06-23 Ryuan Choi <ryuan.choi@samsung.com>
54424 Reviewed by Andreas Kling.
54426 [EFL][WK2] Add PLATFORM(EFL) to use UNIX_DOMAIN_SOCKETS.
54427 https://bugs.webkit.org/show_bug.cgi?id=63228
54429 * wtf/Platform.h: Add PLATFORM(EFL) guard.
54431 2011-06-23 Sheriff Bot <webkit.review.bot@gmail.com>
54433 Unreviewed, rolling out r89547.
54434 http://trac.webkit.org/changeset/89547
54435 https://bugs.webkit.org/show_bug.cgi?id=63252
54437 "Chrmium crash on start" (Requested by yurys on #webkit).
54439 * wtf/DynamicAnnotations.cpp:
54440 (WTFAnnotateBenignRaceSized):
54441 (WTFAnnotateHappensBefore):
54442 (WTFAnnotateHappensAfter):
54443 * wtf/DynamicAnnotations.h:
54445 2011-06-23 Timur Iskhodzhanov <timurrrr@google.com>
54447 Reviewed by David Levin.
54449 Make dynamic annotations weak symbols and prevent identical code folding by the linker
54450 https://bugs.webkit.org/show_bug.cgi?id=62443
54452 * wtf/DynamicAnnotations.cpp:
54453 (WTFAnnotateBenignRaceSized):
54454 (WTFAnnotateHappensBefore):
54455 (WTFAnnotateHappensAfter):
54456 * wtf/DynamicAnnotations.h:
54458 2011-06-22 Yael Aharon <yael.aharon@nokia.com>
54460 Reviewed by Andreas Kling.
54462 [Qt] Add a build flag for building with libxml2 and libxslt.
54463 https://bugs.webkit.org/show_bug.cgi?id=63113
54467 2011-06-22 Sheriff Bot <webkit.review.bot@gmail.com>
54469 Unreviewed, rolling out r89489.
54470 http://trac.webkit.org/changeset/89489
54471 https://bugs.webkit.org/show_bug.cgi?id=63203
54473 Broke chromium mac build on build.webkit.org (Requested by
54474 abarth on #webkit).
54478 2011-06-22 Cary Clark <caryclark@google.com>
54480 Reviewed by Darin Fisher.
54482 Use Skia if Skia on Mac Chrome is enabled
54483 https://bugs.webkit.org/show_bug.cgi?id=62999
54486 Add switch to use Skia if, externally,
54487 Skia has been enabled by a gyp define.
54489 2011-06-22 Geoffrey Garen <ggaren@apple.com>
54491 Reviewed by Oliver Hunt.
54493 * interpreter/RegisterFile.h: Removed unnecessary #include <stdio.h>.
54495 2011-06-22 Geoffrey Garen <ggaren@apple.com>
54497 Reviewed by Oliver Hunt.
54499 Removed the conceit that global variables are local variables when running global code
54500 https://bugs.webkit.org/show_bug.cgi?id=63106
54502 This is required for write barrier correctness.
54504 SunSpider reports about a 0.5% regression, mostly from bitops-bitwise-and.js.
54505 I was able to reduce the regression with a tiny peephole optimization in
54506 the bytecompiler, but not eliminate it. I'm committing this assuming
54507 that turning on generational GC will win back at least 0.5%.
54509 (FWIW, the DFG JIT can easily eliminate any regression by sharing loads of
54510 the global object's var storage. I considered doing the same kind of
54511 optimization in the existing JIT, but it seemed like moving in the wrong
54514 * bytecompiler/BytecodeGenerator.cpp:
54515 (JSC::BytecodeGenerator::addGlobalVar):
54516 (JSC::BytecodeGenerator::BytecodeGenerator): Don't give global variables
54517 negative indices, since they're no longer negatively offset from the
54518 current stack frame.
54520 Do give global variables monotonically increasing positive indices, since
54521 that's much easier to work with.
54523 Don't limit the number of optimizable global variables, since it's no
54524 longer limited by the register file, since they're no longer stored in
54527 (JSC::BytecodeGenerator::registerFor): Global code never has any local
54528 registers because a var in global code is actually a property of the
54531 (JSC::BytecodeGenerator::constRegisterFor): Ditto.
54533 (JSC::BytecodeGenerator::emitResolve): Did a tiny bit of constant
54534 propagation and dead code elimination to speed up our compiles and
54535 reduce WTFs / minute.
54537 * bytecompiler/BytecodeGenerator.h:
54538 (JSC::BytecodeGenerator::registerFor): Removed special handling of globals.
54540 (JSC::BytecodeGenerator::shouldOptimizeLocals): Don't optimize locals in
54541 global code, since there are none.
54543 (JSC::BytecodeGenerator::canOptimizeNonLocals): Do optimize non-locals
54544 in global code (i.e., global vars), since there are some.
54546 * interpreter/Interpreter.cpp:
54547 (JSC::Interpreter::callEval):
54548 (JSC::Interpreter::Interpreter):
54549 (JSC::Interpreter::dumpRegisters):
54550 (JSC::Interpreter::execute):
54551 * interpreter/Interpreter.h: Updated for deleted / renamed code.
54553 * interpreter/RegisterFile.cpp:
54554 (JSC::RegisterFile::gatherConservativeRoots):
54555 (JSC::RegisterFile::releaseExcessCapacity): Updated for deleted / renamed
54558 * interpreter/RegisterFile.h:
54559 (JSC::RegisterFile::begin):
54560 (JSC::RegisterFile::size):
54561 (JSC::RegisterFile::RegisterFile):
54562 (JSC::RegisterFile::shrink): Removed all code and comments dealing with
54563 global variables stored in the register file.
54565 (JSC::RegisterFile::grow): Updated for same.
54567 Also, a slight correctness fix: Test the VM commit end, and not just the
54568 in-use end, when checking for stack overflow. In theory, it's invalid to
54569 commit past the end of your allocation, even if you never touch that
54570 memory. This makes the usable size of the stack slightly smaller. No test
54571 because we don't know of any case in practice where this crashes.
54573 * runtime/JSGlobalData.cpp:
54574 (JSC::JSGlobalData::JSGlobalData): Updated for changes above.
54576 * runtime/JSGlobalObject.cpp:
54577 (JSC::JSGlobalObject::resizeRegisters):
54578 (JSC::JSGlobalObject::addStaticGlobals):
54579 * runtime/JSGlobalObject.h: Simplified globals to have monotonically
54580 increasing indexes, always located in our external storage.
54582 2011-06-21 MORITA Hajime <morrita@google.com>
54584 Unreviewed, rolling out r89401 and r89403.
54585 http://trac.webkit.org/changeset/89401
54586 http://trac.webkit.org/changeset/89403
54587 https://bugs.webkit.org/show_bug.cgi?id=62970
54589 Breaks mac build and mistakenly enables the spellcheck API
54591 * Configurations/FeatureDefines.xcconfig:
54592 * JavaScriptCore.xcodeproj/project.pbxproj:
54594 2011-06-21 Kent Tamura <tkent@chromium.org>
54596 [Mac] Sort Xcode project files.
54598 * JavaScriptCore.xcodeproj/project.pbxproj:
54600 2011-06-20 MORITA Hajime <morrita@google.com>
54602 Reviewed by Kent Tamura.
54604 Spellcheck API should be build-able.
54605 https://bugs.webkit.org/show_bug.cgi?id=62970
54607 No new tests, changing only build related files
54609 * Configurations/FeatureDefines.xcconfig:
54611 2011-06-21 Geoffrey Garen <ggaren@apple.com>
54613 Reviewed by Oliver Hunt.
54615 Moved 'const' off the global-variable-as-local-variable crack pipe
54616 https://bugs.webkit.org/show_bug.cgi?id=63105
54618 This is necessary for moving the rest of the code off of same.
54620 Many problems remain in our handling of const. I have fixed none of them.
54622 * bytecompiler/BytecodeGenerator.h:
54623 (JSC::BytecodeGenerator::scopeChain): New accessor, needed to enable
54624 const to directly implement its unique scoping rules.
54626 * bytecompiler/NodesCodegen.cpp:
54627 (JSC::PrefixResolveNode::emitBytecode): Do specify that our resolve is
54628 for writing, so we don't overwrite const variables.
54630 (JSC::ConstDeclNode::emitCodeSingle): Don't assume that all declared const
54631 variables are available as local variables, since this won't be the case
54632 once global variables are not available as local variables. Instead, use
54633 put_scoped_var in the case where there is no local variable. Like a local
54634 variable, put_scoped_var succeeds even though const properties are
54635 read-only, since put_scoped_var skips read-only checks. (Yay?)
54637 2011-06-21 Oliver Hunt <oliver@apple.com>
54639 Reviewed by Alexey Proskuryakov.
54641 REGRESSION(r89257): It broke 2 jscore tests (Requested by Ossy_away on #webkit).
54642 https://bugs.webkit.org/show_bug.cgi?id=63052
54644 Release mode only failure, the stack overflow guards were getting there error
54645 handling inlined, so that they were essentially causing their own demise.
54647 * parser/JSParser.cpp:
54648 (JSC::JSParser::updateErrorMessage):
54649 (JSC::JSParser::updateErrorWithNameAndMessage):
54651 2011-06-20 Kenneth Russell <kbr@google.com>
54655 Rolled out r89233 and r89235 because of crashes in http/tests/misc/acid3.html on Snow Leopard and other platforms
54656 https://bugs.webkit.org/show_bug.cgi?id=63022
54660 2011-06-18 Anders Carlsson <andersca@apple.com>
54662 Reviewed by Darin Adler.
54664 Disallow assigning into PassOwnArrayPtr, PassOwnPtr and PassRefPtr
54665 https://bugs.webkit.org/show_bug.cgi?id=62940
54667 Remove clear() and all assignment operators except one which now has a COMPILE_ASSERT.
54669 * wtf/PassOwnArrayPtr.h:
54670 (WTF::PassOwnArrayPtr::operator=):
54671 * wtf/PassOwnPtr.h:
54672 (WTF::PassOwnPtr::operator=):
54673 * wtf/PassRefPtr.h:
54674 (WTF::PassRefPtr::operator=):
54675 (WTF::NonNullPassRefPtr::operator=):
54677 2011-06-20 Oliver Hunt <oliver@apple.com>
54679 Reviewed by Darin Adler.
54681 REGRESSION (r79060): Searching for a flight at united.com fails
54682 https://bugs.webkit.org/show_bug.cgi?id=63003
54684 This original change also broke Twitter, and we attempted to refine the fix to
54685 address that problem (http://trac.webkit.org/changeset/80542), but since it still breaks United,
54686 we need to revert the change until we understand the problem better.
54688 * wtf/DateMath.cpp:
54689 (WTF::parseDateFromNullTerminatedCharacters):
54691 2011-06-20 Juan C. Montemayor <jmont@apple.com>
54693 Reviewed by Oliver Hunt.
54695 No context for javascript parse errors.
54696 https://bugs.webkit.org/show_bug.cgi?id=62613
54698 Parse errors now show more details like:
54699 "Unexpected token: ]"
54701 "Expected token: while"
54703 For reserved names, numbers, indentifiers, strings, lexer errors,
54704 and EOFs, the following error messages are printed:
54706 "Use of reserved word: super"
54707 "Unexpected number: 42"
54708 "Unexpected identifier: "
54709 "Unexpected string: "foobar""
54710 "Invalid token character sequence: \u4023"
54713 * parser/JSParser.cpp:
54714 (JSC::JSParser::consume):
54715 (JSC::JSParser::getToken):
54716 (JSC::JSParser::getTokenName):
54717 (JSC::JSParser::updateErrorMessageSpecialCase):
54718 (JSC::JSParser::updateErrorMessage):
54719 (JSC::JSParser::updateErrorWithNameAndMessage):
54721 (JSC::JSParser::JSParser):
54722 (JSC::JSParser::parseProgram):
54723 (JSC::JSParser::parseVarDeclarationList):
54724 (JSC::JSParser::parseForStatement):
54725 (JSC::JSParser::parseBreakStatement):
54726 (JSC::JSParser::parseContinueStatement):
54727 (JSC::JSParser::parseWithStatement):
54728 (JSC::JSParser::parseTryStatement):
54729 (JSC::JSParser::parseStatement):
54730 (JSC::JSParser::parseFormalParameters):
54731 (JSC::JSParser::parseFunctionInfo):
54732 (JSC::JSParser::parseAssignmentExpression):
54733 (JSC::JSParser::parsePrimaryExpression):
54734 (JSC::JSParser::parseMemberExpression):
54735 (JSC::JSParser::parseUnaryExpression):
54736 * parser/JSParser.h:
54737 * parser/Lexer.cpp:
54739 * parser/Parser.cpp:
54740 (JSC::Parser::parse):
54742 2011-06-20 Nikolas Zimmermann <nzimmermann@rim.com>
54744 Reviewed by Rob Buis.
54746 Integrate SVG Fonts within GlyphPage concept, removing the special SVG code paths from Font, making it possible to reuse the simple text code path for SVG Fonts
54747 https://bugs.webkit.org/show_bug.cgi?id=59085
54749 * wtf/Platform.h: Force Qt-EWS into a full rebuild, otherwhise this patch breaks the EWS.
54751 2011-06-19 Oliver Hunt <oliver@apple.com>
54753 Reviewed by Sam Weinig.
54755 Correct logic for putting errors on the correct line when handling JSONP
54756 https://bugs.webkit.org/show_bug.cgi?id=62962
54758 Minor fix for the minor fix. *sigh*
54760 * interpreter/Interpreter.cpp:
54761 (JSC::Interpreter::execute):
54763 2011-06-19 Oliver Hunt <oliver@apple.com>
54765 Minor fix to correct layout test results.
54767 * interpreter/Interpreter.cpp:
54768 (JSC::Interpreter::execute):
54770 2011-06-17 Oliver Hunt <oliver@apple.com>
54772 Reviewed by Gavin Barraclough.
54774 JSONP is unnecessarily slow
54775 https://bugs.webkit.org/show_bug.cgi?id=62920
54777 JSONP has unfortunately become a fairly common idiom online, yet
54778 it triggers very poor performance in JSC as we end up doing codegen
54779 for a large number of property accesses that will
54780 * only be run once, so the vast amount of logic we dump to handle
54781 caching of accesses is unnecessary.
54782 * We are doing codegen that is directly proportional to just
54783 creating the object in the first place.
54785 This patch extends the use of the literal parser to JSONP-like structures
54786 in global code, handling a number of different forms I have seen online.
54787 In an extreme case this improves performance of JSONP by more than 2x
54788 due to removal of code generation and execution time, and a few optimisations
54789 that I made to the parser itself.
54791 * API/JSValueRef.cpp:
54792 (JSValueMakeFromJSONString):
54793 * interpreter/Interpreter.cpp:
54794 (JSC::Interpreter::callEval):
54795 (JSC::Interpreter::execute):
54796 * parser/Lexer.cpp:
54797 (JSC::Lexer::isKeyword):
54799 * runtime/JSGlobalObjectFunctions.cpp:
54800 (JSC::globalFuncEval):
54801 * runtime/JSONObject.cpp:
54802 (JSC::JSONProtoFuncParse):
54803 * runtime/LiteralParser.cpp:
54804 (JSC::LiteralParser::tryJSONPParse):
54805 (JSC::LiteralParser::makeIdentifier):
54806 (JSC::LiteralParser::Lexer::lex):
54807 (JSC::LiteralParser::Lexer::next):
54808 (JSC::isSafeStringCharacter):
54809 (JSC::LiteralParser::Lexer::lexString):
54810 (JSC::LiteralParser::Lexer::lexNumber):
54811 (JSC::LiteralParser::parse):
54812 * runtime/LiteralParser.h:
54813 (JSC::LiteralParser::LiteralParser):
54814 (JSC::LiteralParser::tryLiteralParse):
54815 (JSC::LiteralParser::Lexer::Lexer):
54817 2011-06-18 Sheriff Bot <webkit.review.bot@gmail.com>
54819 Unreviewed, rolling out r89184.
54820 http://trac.webkit.org/changeset/89184
54821 https://bugs.webkit.org/show_bug.cgi?id=62927
54823 It broke 22 tests on all bot (Requested by Ossy_weekend on
54826 * API/JSValueRef.cpp:
54827 (JSValueMakeFromJSONString):
54828 * interpreter/Interpreter.cpp:
54829 (JSC::Interpreter::callEval):
54830 (JSC::Interpreter::execute):
54831 * parser/Lexer.cpp:
54833 * runtime/JSGlobalObjectFunctions.cpp:
54834 (JSC::globalFuncEval):
54835 * runtime/JSONObject.cpp:
54836 (JSC::JSONProtoFuncParse):
54837 * runtime/LiteralParser.cpp:
54838 (JSC::LiteralParser::Lexer::lex):
54839 (JSC::isSafeStringCharacter):
54840 (JSC::LiteralParser::Lexer::lexString):
54841 (JSC::LiteralParser::Lexer::lexNumber):
54842 (JSC::LiteralParser::parse):
54843 * runtime/LiteralParser.h:
54844 (JSC::LiteralParser::LiteralParser):
54845 (JSC::LiteralParser::tryLiteralParse):
54846 (JSC::LiteralParser::Lexer::Lexer):
54847 (JSC::LiteralParser::Lexer::next):
54849 2011-06-17 Oliver Hunt <oliver@apple.com>
54851 Reviewed by Gavin Barraclough.
54853 JSONP is unnecessarily slow
54854 https://bugs.webkit.org/show_bug.cgi?id=62920
54856 JSONP has unfortunately become a fairly common idiom online, yet
54857 it triggers very poor performance in JSC as we end up doing codegen
54858 for a large number of property accesses that will
54859 * only be run once, so the vast amount of logic we dump to handle
54860 caching of accesses is unnecessary.
54861 * We are doing codegen that is directly proportional to just
54862 creating the object in the first place.
54864 This patch extends the use of the literal parser to JSONP-like structures
54865 in global code, handling a number of different forms I have seen online.
54866 In an extreme case this improves performance of JSONP by more than 2x
54867 due to removal of code generation and execution time, and a few optimisations
54868 that I made to the parser itself.
54870 * API/JSValueRef.cpp:
54871 (JSValueMakeFromJSONString):
54872 * interpreter/Interpreter.cpp:
54873 (JSC::Interpreter::callEval):
54874 (JSC::Interpreter::execute):
54875 * parser/Lexer.cpp:
54876 (JSC::Lexer::isKeyword):
54878 * runtime/JSGlobalObjectFunctions.cpp:
54879 (JSC::globalFuncEval):
54880 * runtime/JSONObject.cpp:
54881 (JSC::JSONProtoFuncParse):
54882 * runtime/LiteralParser.cpp:
54883 (JSC::LiteralParser::tryJSONPParse):
54884 (JSC::LiteralParser::makeIdentifier):
54885 (JSC::LiteralParser::Lexer::lex):
54886 (JSC::LiteralParser::Lexer::next):
54887 (JSC::isSafeStringCharacter):
54888 (JSC::LiteralParser::Lexer::lexString):
54889 (JSC::LiteralParser::Lexer::lexNumber):
54890 (JSC::LiteralParser::parse):
54891 * runtime/LiteralParser.h:
54892 (JSC::LiteralParser::LiteralParser):
54893 (JSC::LiteralParser::tryLiteralParse):
54894 (JSC::LiteralParser::Lexer::Lexer):
54896 2011-06-17 Geoffrey Garen <ggaren@apple.com>
54898 Reviewed by Oliver Hunt.
54900 Moved some property access JIT code into property access JIT files
54901 https://bugs.webkit.org/show_bug.cgi?id=62906
54903 * jit/JITOpcodes.cpp:
54904 * jit/JITOpcodes32_64.cpp:
54905 * jit/JITPropertyAccess.cpp:
54906 (JSC::JIT::emitSlow_op_put_by_val):
54907 (JSC::JIT::emit_op_get_scoped_var):
54908 (JSC::JIT::emit_op_put_scoped_var):
54909 (JSC::JIT::emit_op_get_global_var):
54910 (JSC::JIT::emit_op_put_global_var):
54911 * jit/JITPropertyAccess32_64.cpp:
54912 (JSC::JIT::emit_op_get_scoped_var):
54913 (JSC::JIT::emit_op_put_scoped_var):
54914 (JSC::JIT::emit_op_get_global_var):
54915 (JSC::JIT::emit_op_put_global_var):
54917 2011-06-17 Anders Carlsson <andersca@apple.com>
54921 * JavaScriptCore.xcodeproj/project.pbxproj:
54923 2011-06-17 Geoffrey Garen <ggaren@apple.com>
54925 Try to fix the Leopard build?
54927 * JavaScriptCore.xcodeproj/project.pbxproj:
54929 2011-06-16 Geoffrey Garen <ggaren@apple.com>
54931 Reviewed by Oliver Hunt.
54933 Added some write barrier action, compiled out by default
54934 https://bugs.webkit.org/show_bug.cgi?id=62844
54936 * JavaScriptCore.exp: Build!
54938 * JavaScriptCore.xcodeproj/project.pbxproj: Fixed an incremental build
54939 issue with Heap.cpp.
54942 (JSC::Heap::writeBarrierSlowCase):
54944 (JSC::Heap::writeBarrier):
54945 * heap/MarkedBlock.h:
54946 (JSC::MarkedBlock::isAtomAligned):
54947 (JSC::MarkedBlock::blockFor):
54948 (JSC::MarkedBlock::atomNumber):
54949 (JSC::MarkedBlock::ownerSetNumber):
54950 (JSC::MarkedBlock::addOldSpaceOwner):
54951 (JSC::MarkedBlock::OwnerSet::OwnerSet):
54952 (JSC::MarkedBlock::OwnerSet::add):
54953 (JSC::MarkedBlock::OwnerSet::clear):
54954 (JSC::MarkedBlock::OwnerSet::size):
54955 (JSC::MarkedBlock::OwnerSet::didOverflow):
54956 (JSC::MarkedBlock::OwnerSet::owners): Added a basic write barrier that
54957 tracks owners for regions within blocks. Currently unused.
54959 2011-06-17 Raphael Kubo da Costa <kubo@profusion.mobi>
54961 Reviewed by Eric Seidel.
54963 [EFL] Add some OwnPtr specializations for EFL types.
54964 For now there are specializations for Ecore_Evas and Evas_Object.
54965 https://bugs.webkit.org/show_bug.cgi?id=62877
54967 * wtf/CMakeListsEfl.txt:
54968 * wtf/OwnPtrCommon.h:
54969 * wtf/efl/OwnPtrEfl.cpp: Added.
54970 (WTF::deleteOwnedPtr):
54972 2011-06-17 Joone Hur <joone.hur@collabora.co.uk>
54974 Reviewed by Martin Robinson.
54976 [GTK] Replace GdkRectangle by cairo_rectangle_int_t
54977 https://bugs.webkit.org/show_bug.cgi?id=60687
54979 Replace GdkRectangle by cairo_rectangle_int_t.
54981 * wtf/gobject/GTypedefs.h: Replace GdkRectangle by cairo_rectangle_int_t.
54983 2011-06-16 Gavin Barraclough <barraclough@apple.com>
54985 Reviewed by Oliver Hunt.
54987 https://bugs.webkit.org/show_bug.cgi?id=53014
54988 ES5 strict mode keyword restrictions aren't implemented
54990 The following are future restricted words is strict mode code:
54991 implements, interface, let, package, private, protected, public, static, yield
54993 * parser/JSParser.h:
54994 - Add RESERVED_IF_STRICT token.
54995 * parser/Keywords.table:
54996 - Add new future restricted words.
54997 * parser/Lexer.cpp:
54998 (JSC::Lexer::parseIdentifier):
54999 - Check for RESERVED_IF_STRICT; in nonstrict code this is converted to IDENT.
55001 - Pass strictMode flag to parseIdentifier.
55003 - parseIdentifier needs a strictMode flag.
55004 * runtime/CommonIdentifiers.h:
55005 - Add identifiers for new reserved words.
55007 2011-06-16 Gavin Barraclough <barraclough@apple.com>
55009 Reviewed by Oliver Hunt.
55011 https://bugs.webkit.org/show_bug.cgi?id=23611
55012 Multiline Javascript comments cause incorrect parsing of following script.
55015 "A MultiLineComment [is] simply discarded if it contains no line terminator,
55016 but if a MultiLineComment contains one or more line terminators, then it is
55017 replaced with a single line terminator, which becomes part of the stream of
55018 inputs for the syntactic grammar."
55020 This may result in behavioural changes, due to automatic semicolon insertion.
55022 * parser/Lexer.cpp:
55023 (JSC::Lexer::parseMultilineComment):
55024 - Set m_terminator is we see a line terminator in a multiline comment.
55026 2011-06-16 Gavin Barraclough <barraclough@apple.com>
55028 Reviewed by Sam Weinig.
55030 https://bugs.webkit.org/show_bug.cgi?id=62824
55031 DFG JIT - add support for branch-fusion of compareEq, JSValue comparisons in SpeculativeJIT
55033 CompareEq of non-integer values is the most common cause of speculation failure.
55035 * dfg/DFGSpeculativeJIT.cpp:
55036 (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
55038 (JSC::DFG::SpeculativeJIT::compilePeepHoleEq):
55039 - new! - peephole optimized Eq of JSValues.
55040 (JSC::DFG::SpeculativeJIT::compile):
55041 - Add peephole optimization for CompareEq.
55042 * dfg/DFGSpeculativeJIT.h:
55043 (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch):
55044 - Add support for dead nodes between compare & branch.
55045 (JSC::DFG::SpeculativeJIT::isInteger):
55046 - Added to determine which form of peephole to do in CompareEq.
55048 2011-06-16 Geoffrey Garen <ggaren@apple.com>
55050 Try to fix the Windows build.
55052 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export another
55055 * bytecode/EvalCodeCache.h:
55056 * heap/HandleHeap.h:
55057 * heap/HeapRootVisitor.h:
55059 * runtime/ArgList.h:
55060 * runtime/ScopeChain.h:
55061 * runtime/SmallStrings.h:
55062 * runtime/Structure.h: Stop forward-declaring things that don't really
55065 2011-06-16 Geoffrey Garen <ggaren@apple.com>
55067 Try to fix the Mac build: Removed and re-added SlotVisitor.h to the Xcode
55068 project while crossing my fingers and facing west.
55070 * JavaScriptCore.xcodeproj/project.pbxproj:
55072 2011-06-16 Geoffrey Garen <ggaren@apple.com>
55074 Build fix: Removed an incorrect symbol on Windows.
55076 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
55078 2011-06-16 Geoffrey Garen <ggaren@apple.com>
55080 Build fix: Removed an accidental commit from the future.
55084 2011-06-16 Geoffrey Garen <ggaren@apple.com>
55086 Reviewed by Oliver Hunt.
55088 Introduced SlotVisitor into the project
55089 https://bugs.webkit.org/show_bug.cgi?id=62820
55091 This resolves a class vs typedef forward declaration issue, and gives all
55092 exported symbols the correct names.
55095 * GNUmakefile.list.am:
55096 * JavaScriptCore.exp:
55097 * JavaScriptCore.gypi:
55098 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
55099 * JavaScriptCore.xcodeproj/project.pbxproj: Build!
55101 * bytecode/EvalCodeCache.h:
55102 * heap/HandleHeap.h:
55105 (JSC::Heap::markRoots):
55107 * heap/HeapRootVisitor.h: Replaced MarkStack with SlotVisitor. Now no
55108 clients operate on a MarkStack.
55110 * heap/MarkStack.cpp:
55111 (JSC::SlotVisitor::visitChildren):
55112 (JSC::SlotVisitor::drain):
55113 * heap/SlotVisitor.h: Added.
55114 (JSC::SlotVisitor::SlotVisitor): Used 'protected' and a little cheesy
55115 inheritance to give SlotVisitor all the attributes of MarkStack without
55116 making this change giant. Over time, we will move more behavior into
55117 SlotVisitor and its subclasses.
55119 * heap/MarkStack.h:
55120 * heap/NewSpace.h: Replaced MarkStack with SlotVisitor. Now no
55121 clients operate on a MarkStack.
55123 * runtime/ArgList.h:
55124 * runtime/JSCell.h:
55125 * runtime/JSObject.h:
55126 * runtime/ScopeChain.h:
55127 * runtime/SmallStrings.h:
55128 * runtime/Structure.h: Replaced MarkStack with SlotVisitor. Now no
55129 clients operate on a MarkStack.
55131 2011-06-15 Oliver Hunt <oliver@apple.com>
55133 Reviewed by Geoffrey Garen.
55135 Reduce memory usage of resolve_global
55136 https://bugs.webkit.org/show_bug.cgi?id=62765
55138 If we have a large number of resolve_globals in a single
55139 block start planting plain resolve instructions instead
55140 whenever we aren't in a loop. This allows us to reduce
55141 the code size for extremely large functions without
55142 losing the performance benefits of op_resolve_global.
55144 * bytecode/CodeBlock.h:
55145 (JSC::CodeBlock::globalResolveInfoCount):
55146 * bytecompiler/BytecodeGenerator.cpp:
55147 (JSC::BytecodeGenerator::shouldAvoidResolveGlobal):
55148 (JSC::BytecodeGenerator::emitResolve):
55149 (JSC::BytecodeGenerator::emitResolveWithBase):
55150 * bytecompiler/BytecodeGenerator.h:
55152 2011-06-16 Qi Zhang <qi.2.zhang@nokia.com>
55154 Reviewed by Laszlo Gombos.
55156 [Qt] Fix building with CONFIG(use_system_icu)
55157 https://bugs.webkit.org/show_bug.cgi?id=62744
55159 Do not define WTF_USE_QT4_UNICODE if WTF_USE_ICU_UNICODE is set.
55163 2011-06-15 Darin Adler <darin@apple.com>
55165 Reviewed by Adam Barth.
55167 Remove obsolete LOOSE_OWN_PTR code
55168 https://bugs.webkit.org/show_bug.cgi?id=59909
55170 The internal Apple dependency on this is gone now.
55172 * wtf/OwnArrayPtr.h: Removed constructor that takes a raw pointer,
55173 set function that takes a raw pointer.
55175 * wtf/OwnPtr.h: Removed constructor that takes a raw pointer,
55176 set functino that takes a raw pointer.
55178 * wtf/PassOwnArrayPtr.h: Made constructor that takes a nullptr
55179 and assignment operator that takes a nullptr unconditional.
55180 Made constructor that takes a raw pointer private and explicit,
55181 and removed assignment operator that takes a raw pointer.
55183 * wtf/PassOwnPtr.h: Made assignment operator that takes a nullptr
55184 unconditional. Made constructor that takes a raw pointer private
55185 and explicit, and removed assignment operator that takes a raw pointer.
55187 2011-06-15 Sam Weinig <sam@webkit.org>
55189 Reviewed by Geoffrey Garen and Gavin Barraclough.
55191 Make access-nseive ~9x faster on the non-speculative path by
55192 adding special casing for doubles that can lossless-ly be converted
55193 to a uint32_t in getByVal and putByVal. This avoids calls to stringification
55194 and the hash lookup. Long term, we should try and get property of a getByVal
55195 and putByVal to be an integer immediate even in the non-speculative path.
55197 * dfg/DFGOperations.cpp:
55198 (JSC::DFG::putByVal):
55199 (JSC::DFG::operationPutByValInternal):
55201 2011-06-15 Oliver Hunt <oliver@apple.com>
55203 Reviewed by Darin Adler.
55205 REGRESSION (r88719): 5by5.tv schedule is not visible
55206 https://bugs.webkit.org/show_bug.cgi?id=62720
55208 Problem here is that the lexer wasn't considering '$' to be
55209 a valid character in an identifier.
55212 (JSC::Lexer::lexExpectIdentifier):
55214 2011-06-15 Oliver Hunt <oliver@apple.com>
55216 Reviewed by Sam Weinig.
55218 Reduce the size of global_resolve
55219 https://bugs.webkit.org/show_bug.cgi?id=62738
55221 Reduce the code size of global_resolve in the JIT by replacing
55222 multiple pointer loads with a single pointer move + two offset
55225 * jit/JITOpcodes.cpp:
55226 (JSC::JIT::emit_op_resolve_global):
55227 * jit/JITOpcodes32_64.cpp:
55228 (JSC::JIT::emit_op_resolve_global):
55230 2011-06-14 Geoffrey Garen <ggaren@apple.com>
55232 Reviewed by Dan Bernstein.
55234 Fixed an inavlid ASSERT I found while investigating
55235 <rdar://problem/9580254> Crash in JSC::HandleHeap::finalizeWeakHandles + 92
55236 https://bugs.webkit.org/show_bug.cgi?id=62699
55238 No test since we don't know of a way to get WebCore to deallocate the
55239 next-to-finalize handle, which is also the last handle in the list,
55240 while finalizing the second-to-last handle in the list.
55242 * heap/HandleHeap.h:
55243 (JSC::HandleHeap::deallocate): Don't ASSERT that m_nextToFinalize has a
55244 non-0 next() after updating it, since it is valid to update m_nextToFinalize
55245 to point to the tail sentinel.
55247 Do ASSERT that m_nextToFinalize has a non-0 next() before updating it,
55248 since it is not valid to update m_nextToFinalize to point past the tail
55251 Also, use m_nextToFinalize consistently for clarity.
55253 2011-06-14 Gavin Barraclough <barraclough@apple.com>
55255 Reviewed by Sam Weinig.
55257 https://bugs.webkit.org/show_bug.cgi?id=43841
55258 SegmentedVector::operator== typo
55260 * wtf/SegmentedVector.h:
55261 (WTF::SegmentedVectorIterator::operator==):
55262 (WTF::SegmentedVectorIterator::operator!=):
55264 2011-06-14 Oliver Hunt <oliver@apple.com>
55266 Reviewed by Gavin Barraclough.
55268 Constant array literals result in unnecessarily large amounts of code
55269 https://bugs.webkit.org/show_bug.cgi?id=62658
55271 Add a new version of op_new_array that simply copies values from a buffer
55272 we hang off of the CodeBlock, rather than generating code to place each
55273 entry into the registerfile, and then copying it from the registerfile into
55274 the array. This is a slight improvement on some sunspider tests, but no
55275 measurable overall change. That's okay though as our goal was to reduce
55276 code size without hurting performance.
55278 * bytecode/CodeBlock.cpp:
55279 (JSC::CodeBlock::dump):
55280 * bytecode/CodeBlock.h:
55281 (JSC::CodeBlock::addImmediateBuffer):
55282 (JSC::CodeBlock::immediateBuffer):
55283 * bytecode/Opcode.h:
55284 * bytecompiler/BytecodeGenerator.cpp:
55285 (JSC::BytecodeGenerator::addImmediateBuffer):
55286 (JSC::BytecodeGenerator::emitNewArray):
55287 * bytecompiler/BytecodeGenerator.h:
55288 * bytecompiler/NodesCodegen.cpp:
55289 (JSC::ArrayNode::emitBytecode):
55290 * interpreter/Interpreter.cpp:
55291 (JSC::Interpreter::privateExecute):
55293 (JSC::JIT::privateCompileMainPass):
55295 * jit/JITOpcodes.cpp:
55296 (JSC::JIT::emit_op_new_array):
55297 (JSC::JIT::emit_op_new_array_buffer):
55298 * jit/JITOpcodes32_64.cpp:
55299 * jit/JITStubs.cpp:
55300 (JSC::DEFINE_STUB_FUNCTION):
55303 2011-06-14 Sheriff Bot <webkit.review.bot@gmail.com>
55305 Unreviewed, rolling out r88841.
55306 http://trac.webkit.org/changeset/88841
55307 https://bugs.webkit.org/show_bug.cgi?id=62672
55309 Caused many tests to crash (Requested by rniwa on #webkit).
55311 * bytecode/CodeBlock.cpp:
55312 (JSC::CodeBlock::dump):
55313 * bytecode/CodeBlock.h:
55314 * bytecode/Opcode.h:
55315 * bytecompiler/BytecodeGenerator.cpp:
55316 (JSC::BytecodeGenerator::emitNewArray):
55317 * bytecompiler/BytecodeGenerator.h:
55318 * bytecompiler/NodesCodegen.cpp:
55319 (JSC::ArrayNode::emitBytecode):
55320 * interpreter/Interpreter.cpp:
55321 (JSC::Interpreter::privateExecute):
55323 (JSC::JIT::privateCompileMainPass):
55325 * jit/JITOpcodes.cpp:
55326 (JSC::JIT::emit_op_new_array):
55327 * jit/JITOpcodes32_64.cpp:
55328 (JSC::JIT::emit_op_new_array):
55329 * jit/JITStubs.cpp:
55332 2011-06-14 Oliver Hunt <oliver@apple.com>
55334 Reviewed by Gavin Barraclough.
55336 Constant array literals result in unnecessarily large amounts of code
55337 https://bugs.webkit.org/show_bug.cgi?id=62658
55339 Add a new version of op_new_array that simply copies values from a buffer
55340 we hang off of the CodeBlock, rather than generating code to place each
55341 entry into the registerfile, and then copying it from the registerfile into
55342 the array. This is a slight improvement on some sunspider tests, but no
55343 measurable overall change. That's okay though as our goal was to reduce
55344 code size without hurting performance.
55346 * bytecode/CodeBlock.cpp:
55347 (JSC::CodeBlock::dump):
55348 * bytecode/CodeBlock.h:
55349 (JSC::CodeBlock::addImmediateBuffer):
55350 (JSC::CodeBlock::immediateBuffer):
55351 * bytecode/Opcode.h:
55352 * bytecompiler/BytecodeGenerator.cpp:
55353 (JSC::BytecodeGenerator::addImmediateBuffer):
55354 (JSC::BytecodeGenerator::emitNewArray):
55355 * bytecompiler/BytecodeGenerator.h:
55356 * bytecompiler/NodesCodegen.cpp:
55357 (JSC::ArrayNode::emitBytecode):
55358 * interpreter/Interpreter.cpp:
55359 (JSC::Interpreter::privateExecute):
55361 (JSC::JIT::privateCompileMainPass):
55363 * jit/JITOpcodes.cpp:
55364 (JSC::JIT::emit_op_new_array):
55365 (JSC::JIT::emit_op_new_array_buffer):
55366 * jit/JITOpcodes32_64.cpp:
55367 * jit/JITStubs.cpp:
55368 (JSC::DEFINE_STUB_FUNCTION):
55371 2011-06-14 Stephanie Lewis <slewis@apple.com>
55373 Rubber stamped by Oliver Hunt.
55375 <rdar://problem/9511169>
55376 Update order files.
55378 * JavaScriptCore.order:
55380 2011-06-14 Sam Weinig <sam@webkit.org>
55382 Reviewed by Geoffrey Garen.
55384 Fix dumping of constants to have the correct constant number.
55386 * bytecode/CodeBlock.cpp:
55387 (JSC::CodeBlock::dump):
55389 2011-06-14 Benjamin Poulain <benjamin@webkit.org>
55391 Reviewed by Eric Seidel.
55393 KeywordLookupGenerator's Trie does not work with Python 3
55394 https://bugs.webkit.org/show_bug.cgi?id=62635
55396 With Python 3, dict.items() return an iterator. Since the iterator
55397 protocol changed between Python 2 and 3, the easiest way to get the
55398 values is to have something that use the iterator implicitely, like a
55401 * KeywordLookupGenerator.py:
55403 2011-06-13 Oliver Hunt <oliver@apple.com>
55405 Reviewed by Gavin Barraclough.
55407 Fix llocp and lvalp names in the lexer to something more meaningful
55408 https://bugs.webkit.org/show_bug.cgi?id=62605
55412 * parser/Lexer.cpp:
55413 (JSC::Lexer::parseIdentifier):
55414 (JSC::Lexer::parseString):
55417 (JSC::Lexer::lexExpectIdentifier):
55419 2011-06-13 Oliver Hunt <oliver@apple.com>
55421 Reviewed by Gavin Barraclough.
55423 Make it possible to inline the common case of identifier lexing
55424 https://bugs.webkit.org/show_bug.cgi?id=62600
55426 Add a lexing function that expects to lex an "normal" alpha numeric
55427 identifier (that ignores keywords) so it's possible to inline the
55428 common parsing cases. This comes out as a reasonable parsing speed
55431 * parser/JSParser.cpp:
55432 (JSC::JSParser::nextExpectIdentifier):
55433 (JSC::JSParser::parseProperty):
55434 (JSC::JSParser::parseMemberExpression):
55435 * parser/Lexer.cpp:
55437 (JSC::Lexer::makeIdentifier):
55438 (JSC::Lexer::lexExpectIdentifier):
55440 2011-06-13 Xan Lopez <xlopez@igalia.com>
55442 Reviewed by Martin Robinson.
55447 * GNUmakefile.list.am:
55449 2011-06-13 Oliver Hunt <oliver@apple.com>
55451 Reviewed by Simon Fraser.
55453 Make it possible to inline Identifier::equal
55454 https://bugs.webkit.org/show_bug.cgi?id=62584
55456 Move Identifier::equal to the Identifier header file.
55458 * runtime/Identifier.cpp:
55459 * runtime/Identifier.h:
55460 (JSC::Identifier::equal):
55462 2011-06-13 Tony Chang <tony@chromium.org>
55464 Reviewed by Dimitri Glazkov.
55466 rename ENABLE_NEW_FLEXBOX to ENABLE_CSS3_FLEXBOX
55467 https://bugs.webkit.org/show_bug.cgi?id=62578
55469 * Configurations/FeatureDefines.xcconfig:
55471 2011-06-13 Tony Chang <tony@chromium.org>
55473 Reviewed by Adam Barth.
55475 rename ENABLE_FLEXBOX to ENABLE_NEW_FLEXBOX
55476 https://bugs.webkit.org/show_bug.cgi?id=62545
55478 * Configurations/FeatureDefines.xcconfig:
55480 2011-06-12 Patrick Gansterer <paroga@webkit.org>
55482 Unreviewed. Build fix for !ENABLE(JIT) after r88604.
55484 * bytecode/CodeBlock.cpp:
55485 (JSC::CodeBlock::visitAggregate):
55487 2011-06-11 Gavin Barraclough <barraclough@apple.com>
55489 Reviewed by Darin Adler.
55491 https://bugs.webkit.org/show_bug.cgi?id=16777
55493 Remove #define NaN per Darin's comments.
55495 * runtime/JSGlobalObjectFunctions.cpp:
55496 (JSC::parseIntOverflow):
55498 (JSC::jsStrDecimalLiteral):
55501 * wtf/DateMath.cpp:
55502 (WTF::equivalentYearForDST):
55503 (WTF::parseES5DateFromNullTerminatedCharacters):
55504 (WTF::parseDateFromNullTerminatedCharacters):
55506 (JSC::parseDateFromNullTerminatedCharacters):
55508 2011-06-11 Gavin Barraclough <barraclough@apple.com>
55510 Rubber stamped by Geoff Garen.
55512 https://bugs.webkit.org/show_bug.cgi?id=62503
55513 Remove JIT_OPTIMIZE_* switches
55515 The alternative code paths are untested, and not well maintained.
55516 These were useful when there was more churn in the JIT, but now
55517 are a maintenance overhead. Time to move on, removing.
55519 * bytecode/CodeBlock.cpp:
55520 (JSC::CodeBlock::visitAggregate):
55522 (JSC::JIT::privateCompileSlowCases):
55523 (JSC::JIT::privateCompile):
55524 (JSC::JIT::linkConstruct):
55527 * jit/JITCall32_64.cpp:
55528 * jit/JITOpcodes.cpp:
55529 (JSC::JIT::privateCompileCTIMachineTrampolines):
55530 (JSC::JIT::privateCompileCTINativeCall):
55531 * jit/JITOpcodes32_64.cpp:
55532 (JSC::JIT::privateCompileCTIMachineTrampolines):
55533 (JSC::JIT::privateCompileCTINativeCall):
55534 (JSC::JIT::softModulo):
55535 * jit/JITPropertyAccess.cpp:
55536 * jit/JITPropertyAccess32_64.cpp:
55537 * jit/JITStubs.cpp:
55538 (JSC::DEFINE_STUB_FUNCTION):
55539 * runtime/Lookup.cpp:
55540 (JSC::setUpStaticFunctionSlot):
55541 * runtime/Lookup.h:
55544 2011-06-10 Gavin Barraclough <barraclough@apple.com>
55546 Reviewed by Sam Weinig.
55548 https://bugs.webkit.org/show_bug.cgi?id=16777
55549 Eliminate JSC::NaN and JSC::Inf
55551 There's no good reason for -K-J-S- JSC to have its own NAN and infinity constants.
55552 The ones in std::numeric_limits are perfectly good.
55553 Remove JSC::Inf, JSC::NaN, switch some cases of (isnan || isinf) to !isfinite.
55555 * API/JSCallbackObjectFunctions.h:
55557 * API/JSValueRef.cpp:
55558 (JSValueMakeNumber):
55560 * JavaScriptCore.exp:
55561 * runtime/CachedTranscendentalFunction.h:
55562 (JSC::CachedTranscendentalFunction::initialize):
55563 * runtime/DateConstructor.cpp:
55564 (JSC::constructDate):
55565 * runtime/DateInstanceCache.h:
55566 (JSC::DateInstanceData::DateInstanceData):
55567 (JSC::DateInstanceCache::reset):
55568 * runtime/JSCell.cpp:
55569 * runtime/JSCell.h:
55570 (JSC::JSCell::JSValue::getPrimitiveNumber):
55571 (JSC::JSCell::JSValue::toNumber):
55572 * runtime/JSGlobalData.cpp:
55573 (JSC::JSGlobalData::JSGlobalData):
55574 (JSC::JSGlobalData::resetDateCache):
55575 * runtime/JSGlobalObject.cpp:
55576 (JSC::JSGlobalObject::reset):
55577 * runtime/JSGlobalObjectFunctions.cpp:
55578 (JSC::globalFuncParseInt):
55579 (JSC::globalFuncIsFinite):
55580 * runtime/JSNotAnObject.cpp:
55581 (JSC::JSNotAnObject::toNumber):
55582 * runtime/JSValue.cpp:
55583 * runtime/JSValue.h:
55584 * runtime/JSValueInlineMethods.h:
55586 * runtime/MathObject.cpp:
55587 (JSC::mathProtoFuncMax):
55588 (JSC::mathProtoFuncMin):
55589 * runtime/NumberConstructor.cpp:
55590 (JSC::numberConstructorNegInfinity):
55591 (JSC::numberConstructorPosInfinity):
55592 * runtime/NumberPrototype.cpp:
55593 (JSC::numberProtoFuncToExponential):
55594 (JSC::numberProtoFuncToFixed):
55595 (JSC::numberProtoFuncToPrecision):
55596 (JSC::numberProtoFuncToString):
55597 * runtime/UString.cpp:
55598 * wtf/DecimalNumber.h:
55599 (WTF::DecimalNumber::DecimalNumber):
55603 2011-06-10 Tony Chang <tony@chromium.org>
55605 Reviewed by Ojan Vafai.
55607 add a compile guard ENABLE(FLEXBOX)
55608 https://bugs.webkit.org/show_bug.cgi?id=62049
55610 * Configurations/FeatureDefines.xcconfig:
55612 2011-06-10 Gavin Barraclough <barraclough@apple.com>
55614 Reviewed by Sam Weinig.
55616 https://bugs.webkit.org/show_bug.cgi?id=55347
55617 "name" and "message" enumerable on *Error.prototype
55619 This arises from chapter 15 of the spec:
55620 "Every other property described in this clause has the attributes
55621 { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true }
55622 unless otherwise specified."
55623 Standardized properties are not enumerable.
55625 * runtime/ErrorInstance.cpp:
55626 (JSC::ErrorInstance::ErrorInstance):
55627 * runtime/NativeErrorPrototype.cpp:
55628 (JSC::NativeErrorPrototype::NativeErrorPrototype):
55630 2011-06-09 Geoffrey Garen <ggaren@apple.com>
55632 Build fix: Corrected header spelling.
55636 2011-06-09 Geoffrey Garen <ggaren@apple.com>
55638 Reviewed by Oliver Hunt.
55640 Added OldSpace to the project
55641 https://bugs.webkit.org/show_bug.cgi?id=62417
55645 Added OldSpace, the ability to iterate NewSpace vs OldSpace, and a
55646 per-block flag for testing whether you're in NewSpace vs OldSpace.
55649 * GNUmakefile.list.am:
55650 * JavaScriptCore.gypi:
55651 * JavaScriptCore.pro:
55652 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
55653 * JavaScriptCore.xcodeproj/project.pbxproj: Build!
55655 * heap/MarkedBlock.cpp:
55656 (JSC::MarkedBlock::MarkedBlock):
55657 * heap/MarkedBlock.h:
55658 (JSC::MarkedBlock::inNewSpace):
55659 (JSC::MarkedBlock::setInNewSpace): Added inNewSpace flag, for use in
55662 * heap/NewSpace.cpp:
55663 (JSC::NewSpace::addBlock):
55664 (JSC::NewSpace::removeBlock):
55666 (JSC::NewSpace::forEachBlock): Added forEachBlock, to use for
55667 NewSpace-specific operations.
55669 * heap/OldSpace.cpp: Added.
55670 (JSC::OldSpace::OldSpace):
55671 (JSC::OldSpace::addBlock):
55672 (JSC::OldSpace::removeBlock):
55673 * heap/OldSpace.h: Added.
55674 (JSC::OldSpace::forEachBlock): New class for holding promoted blocks.
55677 2011-06-09 Hyowon Kim <hw1008.kim@samsung.com>
55679 Reviewed by Antonio Gomes.
55681 [EFL] Make accelerated compositing build in Webkit-EFL
55682 https://bugs.webkit.org/show_bug.cgi?id=62361
55684 Add PLATFORM(EFL) to enable ACCELERATED_COMPOSITING on EFL port.
55688 2011-06-09 Gavin Barraclough <barraclough@apple.com>
55690 Reviewed by Geoff Garen.
55692 Bug 62405 - Fix integer overflow in Array.prototype.push
55694 Fix geoff's review comments re static_cast.
55696 * runtime/ArrayPrototype.cpp:
55697 (JSC::arrayProtoFuncPush):
55699 2011-06-09 Geoffrey Garen <ggaren@apple.com>
55701 Reviewed by Oliver Hunt.
55703 Factored MarkedBlock set management into a helper class with a fast case Bloom filter
55704 https://bugs.webkit.org/show_bug.cgi?id=62413
55706 SunSpider reports a small speedup.
55708 This is in preparation for having ConservativeSet operate on arbitrary
55709 sets of MarkedBlocks, and in preparation for conservative scanning
55710 becoming proportionally more important than other GC activities.
55712 * GNUmakefile.list.am:
55713 * JavaScriptCore.gypi:
55714 * JavaScriptCore.xcodeproj/project.pbxproj: Build-o.
55716 * heap/ConservativeRoots.cpp:
55717 (JSC::ConservativeRoots::add):
55718 * heap/ConservativeRoots.h:
55719 (JSC::ConservativeRoots::ConservativeRoots): Operate on a MarkedBlockSet
55720 directly, instead of a Heap, so we can operate on subsets of the Heap
55723 Use a TinyBloomFilter for single-cycle exclusion of most pointers. This
55724 is particularly important since we expect not to find our subject pointer
55725 in the MarkedBlock hash, and hash misses are more expensive than typical
55726 hash lookups because they have high collision rates.
55728 No need for single-pointer add() to be public anymore, since nobody uses it.
55731 (JSC::Heap::markRoots):
55733 (JSC::Heap::forEachCell):
55734 (JSC::Heap::forEachBlock): Use MarkedBlockSet since that's what
55735 ConservativeRoots relies on.
55737 Nixed contains(), since nobody uses it anymore.
55739 * heap/MarkedBlock.h:
55740 (WTF::MarkedBlockHash::hash): Added a faster hash taking advantage of
55741 the VM layout properties of MarkedBlocks.
55743 * heap/MarkedBlockSet.h: Added.
55744 (JSC::MarkedBlockSet::add):
55745 (JSC::MarkedBlockSet::remove):
55746 (JSC::MarkedBlockSet::recomputeFilter):
55747 (JSC::MarkedBlockSet::filter):
55748 (JSC::MarkedBlockSet::set):
55749 * heap/TinyBloomFilter.h: Added.
55750 (JSC::TinyBloomFilter::TinyBloomFilter):
55751 (JSC::TinyBloomFilter::add):
55752 (JSC::TinyBloomFilter::ruleOut): New helper class, used above.
55754 * interpreter/RegisterFile.cpp:
55755 (JSC::RegisterFile::gatherConservativeRoots): No need to specifically
55756 exclude values by tag -- the tiny bloom filter is already a register-register
55757 compare, so adding another "rule out" factor just slows things down.
55759 2011-06-09 Gavin Barraclough <barraclough@apple.com>
55761 Reviewed by Oliver Hunt.
55763 Bug 62405 - Fix integer overflow in Array.prototype.push
55765 There are three integer overflows here, leading to safe (not a security risk)
55766 but incorrect (non-spec-compliant) behaviour.
55768 Two overflows occur when calculating the new length after pushing (one in the
55769 fast version of push in JSArray, one in the generic version in ArrayPrototype).
55770 The other occurs calculating indices to write to when multiple items are pushed.
55772 These errors result in three test-262 failures.
55774 * runtime/ArrayPrototype.cpp:
55775 (JSC::arrayProtoFuncPush):
55776 * runtime/JSArray.cpp:
55777 (JSC::JSArray::put):
55778 (JSC::JSArray::push):
55780 2011-06-09 Dan Bernstein <mitz@apple.com>
55782 Reviewed by Anders Carlsson.
55784 Add Vector::reverse()
55785 https://bugs.webkit.org/show_bug.cgi?id=62393
55788 (WTF::Vector::reverse): Added
55790 2011-06-08 Geoffrey Garen <ggaren@apple.com>
55792 Reviewed by Oliver Hunt.
55794 Factored a bunch of Heap functionality into stand-alone functors
55795 https://bugs.webkit.org/show_bug.cgi?id=62337
55797 This is in preparation for making these functors operate on arbitrary
55798 sets of MarkedBlocks.
55800 * JavaScriptCore.exp: This file is a small tragedy.
55802 * debugger/Debugger.cpp:
55803 (JSC::Debugger::recompileAllJSFunctions): Updated for type change and rename.
55805 * heap/HandleHeap.h:
55806 (JSC::HandleHeap::forEachStrongHandle): New function for iterating all
55807 strong handles, so we can play along in the functor game.
55810 (JSC::CountFunctor::CountFunctor::CountFunctor):
55811 (JSC::CountFunctor::CountFunctor::count):
55812 (JSC::CountFunctor::CountFunctor::returnValue):
55813 (JSC::CountFunctor::ClearMarks::operator()):
55814 (JSC::CountFunctor::ResetAllocator::operator()):
55815 (JSC::CountFunctor::Sweep::operator()):
55816 (JSC::CountFunctor::MarkCount::operator()):
55817 (JSC::CountFunctor::Size::operator()):
55818 (JSC::CountFunctor::Capacity::operator()):
55819 (JSC::CountFunctor::Count::operator()):
55820 (JSC::CountFunctor::CountIfGlobalObject::operator()):
55821 (JSC::CountFunctor::TakeIfEmpty::TakeIfEmpty):
55822 (JSC::CountFunctor::TakeIfEmpty::operator()):
55823 (JSC::CountFunctor::TakeIfEmpty::returnValue):
55824 (JSC::CountFunctor::RecordType::RecordType):
55825 (JSC::CountFunctor::RecordType::typeName):
55826 (JSC::CountFunctor::RecordType::operator()):
55827 (JSC::CountFunctor::RecordType::returnValue): These functors factor out
55828 behavior that used to be in the functions below.
55830 (JSC::Heap::clearMarks):
55831 (JSC::Heap::sweep):
55832 (JSC::Heap::objectCount):
55834 (JSC::Heap::capacity):
55835 (JSC::Heap::protectedGlobalObjectCount):
55836 (JSC::Heap::protectedObjectCount):
55837 (JSC::Heap::protectedObjectTypeCounts):
55838 (JSC::Heap::objectTypeCounts):
55839 (JSC::Heap::resetAllocator):
55840 (JSC::Heap::freeBlocks):
55841 (JSC::Heap::shrink): Factored out behavior into the functors above.
55844 (JSC::Heap::forEachProtectedCell):
55845 (JSC::Heap::forEachCell):
55846 (JSC::Heap::forEachBlock): Added forEach* iteration templates. I chose
55847 functor-based templates instead of plain iterators because they're simpler
55848 to implement in this case and they require a lot less code at the call site.
55850 * heap/MarkedBlock.h:
55851 (JSC::MarkedBlock::VoidFunctor::returnValue): Default parent class for
55854 (JSC::MarkedBlock::forEachCell): Renamed forEach to forEachCell because
55855 we have a few different kind of "for each" now.
55857 * runtime/JSGlobalData.cpp:
55858 (WTF::Recompile::operator()):
55859 (JSC::JSGlobalData::JSGlobalData):
55860 (JSC::JSGlobalData::recompileAllJSFunctions): Updated for type change and rename.
55862 * runtime/JSGlobalData.h: Removed globalObjectCount because it was unused.
55864 2011-06-08 Mikołaj Małecki <m.malecki@samsung.com>
55866 Reviewed by Pavel Feldman.
55868 Web Inspector: Crash by buffer overrun crash when serializing inspector object tree.
55869 https://bugs.webkit.org/show_bug.cgi?id=52791
55871 No new tests. The problem can be reproduced by trying to create InspectorValue
55872 from 1.0e-100 and call ->toJSONString() on this.
55874 * JavaScriptCore.exp:
55875 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
55876 export 2 functions DecimalNumber::bufferLengthForStringExponential and
55877 DecimalNumber::toStringExponential.
55879 2011-06-08 Sheriff Bot <webkit.review.bot@gmail.com>
55881 Unreviewed, rolling out r88404.
55882 http://trac.webkit.org/changeset/88404
55883 https://bugs.webkit.org/show_bug.cgi?id=62342
55885 broke win and mac build (Requested by tony^work on #webkit).
55887 * JavaScriptCore.gyp/JavaScriptCore.gyp:
55889 2011-06-08 Evan Martin <evan@chromium.org>
55891 Reviewed by Adam Barth.
55893 [chromium] use gyp 'settings' type for settings target
55894 https://bugs.webkit.org/show_bug.cgi?id=62323
55896 The 'settings' gyp target type is for targets that exist solely
55897 for their settings (no build rules). The comment above this target
55898 says it's for this, but it incorrectly uses 'none'.
55900 * JavaScriptCore.gyp/JavaScriptCore.gyp:
55902 2011-06-08 Sailesh Agrawal <sail@chromium.org>
55904 Reviewed by Mihai Parparita.
55906 Chromium Mac: Enable overlay scrollbars
55907 https://bugs.webkit.org/show_bug.cgi?id=59756
55909 Enable WTF_USE_WK_SCROLLBAR_PAINTER for Chromium Mac. This allows us to use overlay scrollbars on future versions of Mac OS X.
55913 2011-06-08 Oliver Hunt <oliver@apple.com>
55915 Reviewed by Geoffrey Garen.
55917 Add faster lookup cache for multi character identifiers
55918 https://bugs.webkit.org/show_bug.cgi?id=62327
55920 Add a non-hash lookup for mutiple character identifiers. This saves us from
55921 adding repeated identifiers to the ParserArena's identifier list as people
55922 tend to not start all their variables and properties with the same character
55923 and happily identifier locality works in our favour.
55925 * parser/ParserArena.h:
55926 (JSC::IdentifierArena::isEmpty):
55927 (JSC::IdentifierArena::clear):
55928 (JSC::IdentifierArena::makeIdentifier):
55930 2011-06-08 Geoffrey Garen <ggaren@apple.com>
55932 Reviewed by Oliver Hunt.
55934 Took some responsibilities away from NewSpace
55935 https://bugs.webkit.org/show_bug.cgi?id=62325
55937 NewSpace is basically just an allocator now.
55939 Heap acts as a controller, responsible for managing the set of all
55942 This is in preparation for moving parts of the controller logic into
55943 separate helper classes that can act on arbitrary sets of MarkedBlocks
55944 that may or may not be in NewSpace.
55948 (JSC::Heap::destroy):
55949 (JSC::Heap::allocate):
55950 (JSC::Heap::markRoots):
55951 (JSC::Heap::clearMarks):
55952 (JSC::Heap::sweep):
55953 (JSC::Heap::objectCount):
55955 (JSC::Heap::capacity):
55956 (JSC::Heap::collect):
55957 (JSC::Heap::resetAllocator):
55958 (JSC::Heap::allocateBlock):
55959 (JSC::Heap::freeBlocks):
55960 (JSC::Heap::shrink): Moved the set of MarkedBlocks from NewSpace to Heap,
55961 along with all functions that operate on the set of MarkedBlocks. Also
55962 moved responsibility for deciding whether to allocate a new MarkedBlock,
55963 and for allocating it.
55966 (JSC::Heap::contains):
55967 (JSC::Heap::forEach): Ditto.
55969 * heap/NewSpace.cpp:
55970 (JSC::NewSpace::addBlock):
55971 (JSC::NewSpace::removeBlock):
55972 (JSC::NewSpace::resetAllocator):
55974 (JSC::NewSpace::waterMark):
55975 (JSC::NewSpace::allocate): Ditto.
55977 2011-06-08 Geoffrey Garen <ggaren@apple.com>
55979 Reviewed by Oliver Hunt.
55981 Some more MarkedSpace => NewSpace renaming
55982 https://bugs.webkit.org/show_bug.cgi?id=62305
55984 * JavaScriptCore.exp:
55985 * JavaScriptCore.order:
55986 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
55989 (JSC::Heap::destroy):
55990 (JSC::Heap::reportExtraMemoryCostSlowCase):
55991 (JSC::Heap::allocate):
55992 (JSC::Heap::markRoots):
55993 (JSC::Heap::objectCount):
55995 (JSC::Heap::capacity):
55996 (JSC::Heap::collect):
55997 (JSC::Heap::isValidAllocation):
55999 (JSC::Heap::markedSpace):
56000 (JSC::Heap::contains):
56001 (JSC::Heap::forEach):
56002 (JSC::Heap::allocate):
56003 * runtime/JSCell.h:
56005 2011-06-08 Kevin Ollivier <kevino@theolliviers.com>
56007 Reviewed by Eric Seidel.
56009 Add export macros to profiler headers.
56010 https://bugs.webkit.org/show_bug.cgi?id=27551
56012 * profiler/Profiler.h:
56014 2011-06-08 Kevin Ollivier <kevino@theolliviers.com>
56016 Reviewed by Eric Seidel.
56018 Add export symbols to parser headers.
56019 https://bugs.webkit.org/show_bug.cgi?id=27551
56021 * parser/SourceProviderCache.h:
56023 2011-06-08 Kevin Ollivier <kevino@theolliviers.com>
56025 Reviewed by Eric Seidel.
56027 Add export symbols to interpreter headers.
56028 https://bugs.webkit.org/show_bug.cgi?id=27551
56030 * interpreter/Interpreter.h:
56032 2011-06-08 Kevin Ollivier <kevino@theolliviers.com>
56034 Reviewed by Eric Seidel.
56036 Add export symbols to debugger headers.
56037 https://bugs.webkit.org/show_bug.cgi?id=27551
56039 * debugger/Debugger.h:
56040 * debugger/DebuggerCallFrame.h:
56042 2011-06-08 Geoffrey Garen <ggaren@apple.com>
56044 Reviewed by Darin Adler.
56046 Moved MarkedSpace.* to NewSpace.* in preparation for more renaming
56047 https://bugs.webkit.org/show_bug.cgi?id=62268
56050 * GNUmakefile.list.am:
56051 * JavaScriptCore.gypi:
56052 * JavaScriptCore.pro:
56053 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
56054 * JavaScriptCore.xcodeproj/project.pbxproj:
56056 * heap/MarkedBlock.h:
56057 * heap/MarkedSpace.cpp: Removed.
56058 * heap/MarkedSpace.h: Removed.
56059 * heap/NewSpace.cpp: Copied from Source/JavaScriptCore/heap/MarkedSpace.cpp.
56060 * heap/NewSpace.h: Copied from Source/JavaScriptCore/heap/MarkedSpace.h.
56062 2011-06-08 Sheriff Bot <webkit.review.bot@gmail.com>
56064 Unreviewed, rolling out r88365.
56065 http://trac.webkit.org/changeset/88365
56066 https://bugs.webkit.org/show_bug.cgi?id=62301
56068 windows bots broken (Requested by loislo_ on #webkit).
56070 * JavaScriptCore.exp:
56072 2011-06-08 Ryan Sleevi <rsleevi@chromium.org>
56074 Reviewed by Tony Chang.
56076 Suppress C++0x compat warnings when compiling Chromium port with GCC 4.6
56078 Compiling Chromium port under GCC 4.6 produces warnings about nullptr
56079 https://bugs.webkit.org/show_bug.cgi?id=62242
56081 * JavaScriptCore.gyp/JavaScriptCore.gyp:
56083 2011-06-08 Ademar de Souza Reis Jr. <ademar.reis@openbossa.org>
56085 Reviewed by Andreas Kling.
56087 Webkit on SPARC Solaris has wrong endian
56088 https://bugs.webkit.org/show_bug.cgi?id=29407
56090 Bug 57256 fixed one crash on misaligned reads on sparc/solaris, but
56091 there are more ocurrences of the same code pattern in webkit.
56093 This patch includes the check on these other parts of the code.
56095 This is a speculative fix, I don't have a sparc machine to test and
56096 don't know which kind of test would trigger a crash (but it's quite
56097 obvious that it's the same code duplicated in different files).
56099 * runtime/UString.h:
56100 (JSC::UStringHash::equal):
56101 * wtf/text/StringHash.h:
56102 (WTF::StringHash::equal):
56104 2011-06-08 Yael Aharon <yael.aharon@nokia.com>
56106 Reviewed by Andreas Kling.
56108 [Qt] Build fix for building QtWebKit inside of Qt.
56109 https://bugs.webkit.org/show_bug.cgi?id=62280
56111 Remove CONFIG=staticlib, because it causes the configure script to add -ljavascriptcore
56114 No new tests, as this is just a build fix.
56116 * JavaScriptCore.pri:
56118 2011-06-07 Geoffrey Garen <ggaren@apple.com>
56120 Reviewed by Oliver Hunt.
56122 Split 'reset' into 'collect' and 'resetAllocator'
56123 https://bugs.webkit.org/show_bug.cgi?id=62267
56126 (JSC::Heap::allocate):
56127 (JSC::Heap::collectAllGarbage):
56128 (JSC::Heap::collect):
56130 * heap/MarkedBlock.h:
56131 (JSC::MarkedBlock::resetAllocator):
56132 * heap/MarkedSpace.cpp:
56133 (JSC::MarkedSpace::resetAllocator):
56134 * heap/MarkedSpace.h:
56135 (JSC::MarkedSpace::SizeClass::resetAllocator):
56137 2011-06-07 Geoffrey Garen <ggaren@apple.com>
56139 Reviewed by Sam Weinig.
56141 Renamed some more marks to visits
56142 https://bugs.webkit.org/show_bug.cgi?id=62254
56144 * heap/HandleHeap.cpp:
56145 (JSC::HandleHeap::visitStrongHandles):
56146 (JSC::HandleHeap::visitWeakHandles):
56147 * heap/HandleHeap.h:
56148 * heap/HandleStack.cpp:
56149 (JSC::HandleStack::visit):
56150 * heap/HandleStack.h:
56152 (JSC::Heap::markProtectedObjects):
56153 (JSC::Heap::markTempSortVectors):
56154 (JSC::Heap::markRoots):
56155 * heap/HeapRootVisitor.h:
56156 (JSC::HeapRootVisitor::visit):
56157 * runtime/ArgList.cpp:
56158 (JSC::MarkedArgumentBuffer::markLists):
56160 2011-06-07 Gavin Barraclough <barraclough@apple.com>
56162 Reviewed by Sam Weinig
56164 https://bugs.webkit.org/show_bug.cgi?id=55537
56165 Functions claim to have 'callee' which they actually don't (and shouldn't)
56167 * JavaScriptCore.xcodeproj/project.pbxproj:
56168 * runtime/JSFunction.cpp:
56169 (JSC::JSFunction::getOwnPropertyNames):
56171 2011-06-07 Juan C. Montemayor <jmont@apple.com>
56173 Reviewed by Darin Adler.
56175 Make JSStaticFunction and JSStaticValue less "const"
56176 https://bugs.webkit.org/show_bug.cgi?id=62222
56178 * API/JSObjectRef.h:
56179 * API/tests/testapi.c:
56180 (checkConstnessInJSObjectNames):
56182 * JavaScriptCore.xcodeproj/project.pbxproj:
56184 2011-06-07 Gavin Barraclough <barraclough@apple.com>
56186 Reviewed by Sam Weinig.
56188 https://bugs.webkit.org/show_bug.cgi?id=62240
56189 DFG JIT - add support for for-loop array initialization.
56191 Support put by val beyond vector length.
56192 Add a operationPutByValBeyondArrayBounds operation, make
56193 PutValVal call this if the vector length check fails.
56195 * dfg/DFGJITCodeGenerator.h:
56196 (JSC::DFG::JITCodeGenerator::silentSpillGPR):
56197 (JSC::DFG::JITCodeGenerator::silentFillGPR):
56198 (JSC::DFG::JITCodeGenerator::silentSpillAllRegisters):
56199 (JSC::DFG::JITCodeGenerator::isDoubleConstantWithInt32Value):
56200 (JSC::DFG::JITCodeGenerator::isJSConstantWithInt32Value):
56201 (JSC::DFG::JITCodeGenerator::isIntegerConstant):
56202 (JSC::DFG::JITCodeGenerator::valueOfIntegerConstant):
56203 * dfg/DFGOperations.cpp:
56204 (JSC::DFG::operationPutByValInternal):
56205 * dfg/DFGOperations.h:
56206 * dfg/DFGSpeculativeJIT.cpp:
56207 (JSC::DFG::SpeculativeJIT::compile):
56208 * dfg/DFGSpeculativeJIT.h:
56210 2011-06-06 James Simonsen <simonjam@chromium.org>
56212 Reviewed by James Robinson.
56214 Add monotonicallyIncreasingTime() to get monotonically increasing time
56215 https://bugs.webkit.org/show_bug.cgi?id=37743
56217 * wtf/CurrentTime.cpp: Add monotonicallyIncreasingTime() for mac and a fallback implementation that just wraps currentTime().
56218 (WTF::monotonicallyIncreasingTime):
56219 * wtf/CurrentTime.h: Add monotonicallyIncreasingTime().
56221 2011-06-06 Alexandru Chiculita <achicu@adobe.com>
56223 Reviewed by Kent Tamura.
56225 Add ENABLE_CSS_EXCLUSIONS support for build-webkit script
56226 https://bugs.webkit.org/show_bug.cgi?id=61628
56228 * Configurations/FeatureDefines.xcconfig:
56230 2011-06-06 Mihnea Ovidenie <mihnea@adobe.com>
56232 Reviewed by Kent Tamura.
56234 Add ENABLE(CSS_REGIONS) guard for CSS Regions support
56235 https://bugs.webkit.org/show_bug.cgi?id=61631
56237 * Configurations/FeatureDefines.xcconfig:
56239 2011-06-06 Carlos Garcia Campos <cgarcia@igalia.com>
56241 Unreviewed. Fix the GTK+ build.
56243 * GNUmakefile.am: Add javascriptcore_cflags variable.
56245 2011-06-04 Kevin Ollivier <kevino@theolliviers.com>
56247 [wx] Unreviewed build fix. Restore the PPC build and allow users to specify architectures
56252 2011-06-04 Gustavo Noronha Silva <gns@gnome.org>
56254 Unreviewed, MIPS build fix.
56256 WebKitGTK+ tarball fails to build on MIPS.
56257 https://buildd.debian.org/status/fetch.php?pkg=webkitgtk%2B&arch=mips&ver=1.4.0-1&stamp=1304786691
56259 * GNUmakefile.list.am: Add missing MIPS-related file to the list
56260 of files that are added to the tarball on make dist, and fix
56263 2011-06-04 Sam Weinig <sam@webkit.org>
56265 Reviewed by Darin Adler.
56267 Fix formatting of the output generated by KeywordLookupGenerator.py
56268 https://bugs.webkit.org/show_bug.cgi?id=62083
56270 - Uses correct year for copyright.
56271 - Puts ending brace on same line as "else if"
56272 - Puts starting brace of function on its own line.
56273 - Adds some tasteful whitespace.
56274 - Adds comments to make clear that scopes are ending
56275 - Make macros actually split on two lines.
56277 * KeywordLookupGenerator.py:
56279 2011-06-04 Adam Barth <abarth@webkit.org>
56281 Reviewed by Eric Seidel.
56283 KeywordLookupGenerator.py spams stdout in Chromium Linux build
56284 https://bugs.webkit.org/show_bug.cgi?id=62087
56286 This action does not appear to be needed.
56288 * JavaScriptCore.gyp/JavaScriptCore.gyp:
56290 2011-06-03 Oliver Hunt <oliver@apple.com>
56292 Reviewed by Maciej Stachowiak.
56294 Lexer needs to provide Identifier for reserved words
56295 https://bugs.webkit.org/show_bug.cgi?id=62086
56297 Alas it is necessary to provide an Identifier reference for keywords
56298 so that we can do the right thing when they're used in object literals.
56299 We now keep Identifiers for all reserved words in the CommonIdentifiers
56300 structure so that we can access them without a hash lookup.
56302 * KeywordLookupGenerator.py:
56303 * parser/Lexer.cpp:
56304 (JSC::Lexer::parseIdentifier):
56306 * runtime/CommonIdentifiers.cpp:
56307 (JSC::CommonIdentifiers::CommonIdentifiers):
56308 * runtime/CommonIdentifiers.h:
56310 2011-06-03 Gavin Barraclough <barraclough@apple.com>
56312 Reviewed by Sam Weinig.
56314 Add debug code to break on speculation failures.
56316 * dfg/DFGJITCompiler.cpp:
56317 (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):
56318 (JSC::DFG::JITCompiler::compileFunction):
56321 2011-06-03 Gavin Barraclough <barraclough@apple.com>
56323 Reviewed by Sam Weinig.
56325 https://bugs.webkit.org/show_bug.cgi?id=62082
56326 DFG JIT - bug passing arguments that need swap
56328 This is really just a typo.
56329 When setting up the arguments for a call out to a C operation, we'll
56330 fail to swap arguments where this is necessary. For example, in the
56331 case of 2 arg calls, where the first argument is in %rdx & the second
56332 is in %rsi we should swap (exec will be passed in %rdi), but we don't.
56334 This can also affect function calls passing three arguments.
56336 * dfg/DFGJITCodeGenerator.h:
56337 (JSC::DFG::JITCodeGenerator::setupTwoStubArgs):
56338 - Call swap with the correct arguments.
56340 2011-06-03 Oliver Hunt <oliver@apple.com>
56342 Reviewed by Gavin Barraclough.
56344 Force inlining of some hot lexer functions
56345 https://bugs.webkit.org/show_bug.cgi?id=62079
56347 Fix more GCC stupidity
56350 (JSC::Lexer::isWhiteSpace):
56351 (JSC::Lexer::isLineTerminator):
56353 2011-06-03 Oliver Hunt <oliver@apple.com>
56355 Reviewed by Gavin Barraclough.
56357 GCC not inlining some functions that it really should be
56358 https://bugs.webkit.org/show_bug.cgi?id=62075
56360 Add ALWAYS_INLINE to a number of parsing and lexing functions
56361 that should always be inlined. This gets us ~1.4% on my ad hoc
56364 * KeywordLookupGenerator.py:
56365 * parser/JSParser.cpp:
56366 (JSC::JSParser::next):
56367 (JSC::JSParser::nextTokenIsColon):
56368 (JSC::JSParser::consume):
56369 (JSC::JSParser::match):
56370 (JSC::JSParser::tokenStart):
56371 (JSC::JSParser::tokenLine):
56372 (JSC::JSParser::tokenEnd):
56373 * parser/Lexer.cpp:
56374 (JSC::isIdentPart):
56376 2011-06-03 Oliver Hunt <oliver@apple.com>
56378 Whoops, fix last minute bug.
56380 * parser/Lexer.cpp:
56381 (JSC::Lexer::parseIdentifier):
56383 2011-06-03 Martin Robinson <mrobinson@igalia.com>
56385 Try to fix the GTK+ build.
56387 * GNUmakefile.am: Clean up some spaces that should be tabs.
56388 * GNUmakefile.list.am: Add KeywordLookup.h to the source list
56389 and clean up some spaces that should be tabs.
56391 2011-06-03 Oliver Hunt <oliver@apple.com>
56393 Reviewed by Geoffrey Garen.
56395 Improve keyword lookup
56396 https://bugs.webkit.org/show_bug.cgi?id=61913
56398 Rather than doing multiple hash lookups as we currently
56399 do when trying to identify keywords we now use an
56400 automatically generated decision tree (essentially it's
56401 a hard coded patricia trie). We still use the regular
56402 lookup table for the last few characters of an input as
56403 this allows us to completely skip all bounds checks.
56406 * DerivedSources.make:
56407 * DerivedSources.pro:
56409 * JavaScriptCore.gyp/JavaScriptCore.gyp:
56410 * JavaScriptCore.xcodeproj/project.pbxproj:
56411 * KeywordLookupGenerator.py: Added.
56412 * make-generated-sources.sh:
56413 * parser/Lexer.cpp:
56414 (JSC::Lexer::internalShift):
56415 (JSC::Lexer::shift):
56416 (JSC::Lexer::parseIdentifier):
56419 2011-06-03 Siddharth Mathur <siddharth.mathur@nokia.com>
56421 Reviewed by Benjamin Poulain.
56423 [Qt] Build flag for experimental ICU library support
56424 https://bugs.webkit.org/show_bug.cgi?id=60786
56426 Adds a build-time flag (CONFIG+=use_system_icu) that enables experimental
56427 ICU powered Unicode support.
56429 * JavaScriptCore.pri: Support for use_system_icu CONFIG flag.
56430 * wtf/unicode/qt4/UnicodeQt4.h: Guard an include file with USE(ICU_UNICODE).
56432 2011-06-03 Alexis Menard <alexis.menard@openbossa.org>
56434 Reviewed by Benjamin Poulain.
56436 [Qt] Build fix of QtWebKit 2.2 when inside Qt tree with GCC 4.6.
56437 https://bugs.webkit.org/show_bug.cgi?id=61957
56439 When building inside the Qt source tree, qmake always append the mkspecs
56440 defines after ours. We have to workaround and make sure that we append
56441 our flags after the qmake variable used inside Qt. This workaround was provided
56442 by our qmake folks. We need to append in both case because qmake behave differently
56443 when called with -spec or via SUBDIR+=. This patch unbreak r87950 on Mac for Qt port.
56445 * JavaScriptCore.pro:
56447 2011-06-02 Jay Civelli <jcivelli@chromium.org>
56449 Reviewed by Adam Barth.
56451 Added a method to generate RFC 2822 compliant date strings.
56452 https://bugs.webkit.org/show_bug.cgi?id=7169
56454 * wtf/DateMath.cpp:
56455 (WTF::twoDigitStringFromNumber):
56456 (WTF::makeRFC2822DateString):
56459 2011-06-02 Alexis Menard <alexis.menard@openbossa.org>
56461 Reviewed by Andreas Kling.
56463 [Qt] Build fix of QtWebKit 2.2 when inside Qt tree with GCC 4.6.
56464 https://bugs.webkit.org/show_bug.cgi?id=61957
56466 When building inside the Qt source tree, qmake always append the mkspecs
56467 defines after ours. We have to workaround and make sure that we append
56468 our flags after the qmake variable used inside Qt. This workaround was provided
56469 by our qmake folks.
56471 * JavaScriptCore.pro:
56473 2011-06-01 Oliver Hunt <oliver@apple.com>
56475 Reviewed by Geoffrey Garen.
56477 Add single character lookup cache to IdentifierArena
56478 https://bugs.webkit.org/show_bug.cgi?id=61879
56480 Add a simple lookup cache for single ascii character
56481 identifiers. Produces around a 2% improvement in parse
56482 time for my adhoc parser test.
56484 * parser/ParserArena.h:
56485 (JSC::IdentifierArena::IdentifierArena):
56486 (JSC::IdentifierArena::clear):
56487 (JSC::IdentifierArena::makeIdentifier):
56489 2011-05-31 Oliver Hunt <oliver@apple.com>
56491 Reviewed by Geoffrey Garen.
56493 Freezing a function and its prototype causes browser to crash.
56494 https://bugs.webkit.org/show_bug.cgi?id=61758
56496 Make JSObject::preventExtensions virtual so that we can override it
56497 and instantiate all lazy
56499 * JavaScriptCore.exp:
56500 * runtime/JSFunction.cpp:
56501 (JSC::createPrototypeProperty):
56502 (JSC::JSFunction::preventExtensions):
56503 (JSC::JSFunction::getOwnPropertySlot):
56504 * runtime/JSFunction.h:
56505 * runtime/JSObject.h:
56506 * runtime/JSObject.cpp:
56507 (JSC::JSObject::seal):
56508 (JSC::JSObject::seal):
56510 2011-06-01 Sheriff Bot <webkit.review.bot@gmail.com>
56512 Unreviewed, rolling out r87788.
56513 http://trac.webkit.org/changeset/87788
56514 https://bugs.webkit.org/show_bug.cgi?id=61856
56516 breaks windows chromium canary (Requested by jknotten on
56519 * wtf/DateMath.cpp:
56523 2011-06-01 Jay Civelli <jcivelli@chromium.org>
56525 Reviewed by Adam Barth.
56527 Added a method to generate RFC 2822 compliant date strings.
56528 https://bugs.webkit.org/show_bug.cgi?id=7169
56530 * wtf/DateMath.cpp:
56531 (WTF::twoDigitStringFromNumber):
56532 (WTF::makeRFC2822DateString):
56535 2011-05-31 Yong Li <yoli@rim.com>
56537 Reviewed by Eric Seidel.
56539 https://bugs.webkit.org/show_bug.cgi?id=54807
56540 We have been assuming plain bitfields (like "int a : 31") are always signed integers.
56541 However some compilers can treat them as unsigned. For example, RVCT 4.0 states plain
56542 bitfields (declared without either signed or unsigned qualifiers) are treats as unsigned.
56543 http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0348c/Babjddhe.html
56544 Although we can use "--signed-bitfields" flag to make RVCT 4.0 behave as most other compilers,
56545 always using "signed"/"unsigned" qualifier to declare integral type bitfields is still a good
56546 rule we should have in order to make our code independent from compilers and compiler flags.
56548 No new test added because this change is not known to fix any issue.
56550 * bytecode/StructureStubInfo.h:
56552 2011-05-30 Hojong Han <hojong.han@samsung.com>
56554 Reviewed by Geoffrey Garen.
56556 [JSC] malfunction during arithmetic condition check with negative number (-2147483648)
56557 https://bugs.webkit.org/show_bug.cgi?id=61416
56559 * assembler/MacroAssemblerARM.h:
56560 (JSC::MacroAssemblerARM::branch32):
56561 * tests/mozilla/ecma/Expressions/11.12-1.js:
56564 2011-05-29 Geoffrey Garen <ggaren@apple.com>
56566 Reviewed by Sam Weinig.
56568 Some heap refactoring
56569 https://bugs.webkit.org/show_bug.cgi?id=61704
56571 SunSpider says no change.
56573 * JavaScriptCore.exp: Export!
56575 * heap/Heap.cpp: COLLECT_ON_EVERY_ALLOCATION can actually do so now.
56577 (JSC::Heap::Heap): Changed Heap sub-objects to point to the heap.
56579 (JSC::Heap::allocate): Changed inline allocation code to only select the
56580 size class, since this can be optimized out at compile time -- everything
56581 else is now inlined into this out-of-line function.
56583 No need to duplicate ASSERTs made in our caller.
56587 (JSC::Heap::isMarked):
56588 (JSC::Heap::testAndSetMarked):
56589 (JSC::Heap::testAndClearMarked):
56590 (JSC::Heap::setMarked): Call directly into MarkedBlock instead of adding
56591 a layer of indirection through MarkedSpace.
56593 (JSC::Heap::allocate): See above.
56595 * heap/MarkedBlock.cpp:
56596 (JSC::MarkedBlock::create):
56597 (JSC::MarkedBlock::MarkedBlock):
56598 * heap/MarkedBlock.h: Changed Heap sub-objects to point to the heap.
56600 * heap/MarkedSpace.cpp:
56601 (JSC::MarkedSpace::MarkedSpace):
56602 (JSC::MarkedSpace::allocateBlock):
56603 * heap/MarkedSpace.h:
56604 (JSC::MarkedSpace::allocate): Updated to match changes above.
56606 2011-05-28 David Kilzer <ddkilzer@apple.com>
56608 BUILD FIX when building only the interpreter
56610 Fixes the following compiler warning:
56612 JavaScriptCore/runtime/JSGlobalData.cpp:462:6: error: no previous prototype for function 'releaseExecutableMemory' [-Werror,-Wmissing-prototypes,3]
56613 void releaseExecutableMemory(JSGlobalData& globalData)
56616 * jit/ExecutableAllocator.h: Moved declaration of
56617 JSC::releaseExecutableMemory().
56619 2011-05-28 David Kilzer <ddkilzer@apple.com>
56621 BUILD FIX after r87527 with ENABLE(BRANCH_COMPACTION)
56623 * assembler/LinkBuffer.h:
56624 (JSC::LinkBuffer::linkCode): Added missing argument.
56626 2011-05-27 Geoffrey Garen <ggaren@apple.com>
56628 Reviewed by Oliver Hunt.
56630 JS API is too aggressive about throwing exceptions for NULL get or set operations
56631 https://bugs.webkit.org/show_bug.cgi?id=61678
56633 * API/JSCallbackObject.h: Changed our staticValueGetter to a regular
56634 function that returns a JSValue, so it can fail and still forward to
56635 normal property lookup.
56637 * API/JSCallbackObjectFunctions.h:
56638 (JSC::::getOwnPropertySlot): Don't throw an exception when failing to
56639 access a static property -- just forward the access. This allows objects
56640 to observe get/set operations but still let the JS object manage lifetime.
56642 (JSC::::put): Ditto.
56644 (JSC::::getStaticValue): Same as JSCallbackObject.h.
56646 * API/tests/testapi.c:
56647 (MyObject_set_nullGetForwardSet):
56648 * API/tests/testapi.js: Updated tests to reflect slightly less strict
56649 behavior, which matches headerdoc claims.
56651 2011-05-27 Geoffrey Garen <ggaren@apple.com>
56653 Reviewed by Oliver Hunt.
56655 Property caching is too aggressive for API objects
56656 https://bugs.webkit.org/show_bug.cgi?id=61677
56658 * API/JSCallbackObject.h: Opt in to ProhibitsPropertyCaching, since our
56659 callback APIs allow the client to change its mind about our propertis at
56662 * API/tests/testapi.c:
56663 (PropertyCatchalls_getProperty):
56664 (PropertyCatchalls_setProperty):
56665 (PropertyCatchalls_getPropertyNames):
56666 (PropertyCatchalls_class):
56668 * API/tests/testapi.js: Some tests for dynamic API objects.
56670 * interpreter/Interpreter.cpp:
56671 (JSC::Interpreter::tryCachePutByID):
56672 (JSC::Interpreter::tryCacheGetByID):
56673 * jit/JITStubs.cpp:
56674 (JSC::JITThunks::tryCachePutByID):
56675 (JSC::JITThunks::tryCacheGetByID):
56676 (JSC::DEFINE_STUB_FUNCTION): Opt out of property caching if the client
56679 * runtime/JSTypeInfo.h:
56680 (JSC::TypeInfo::TypeInfo):
56681 (JSC::TypeInfo::isFinal):
56682 (JSC::TypeInfo::prohibitsPropertyCaching):
56683 (JSC::TypeInfo::flags): Added a flag to track opting out of property
56684 caching. Fixed an "&&" vs "&" typo that was previously harmless, but
56685 is now harmful since m_flags2 can have more than one bit set.
56687 2011-05-27 Stephanie Lewis <slewis@apple.com>
56691 Fix a typo in the order_file flag.
56693 * Configurations/Base.xcconfig:
56695 2011-05-27 Patrick Gansterer <paroga@webkit.org>
56697 Unreviewed. Build fix for !ENABLE(ASSEMBLER) after r87527.
56699 * runtime/JSGlobalData.cpp:
56700 (JSGlobalData::JSGlobalData):
56702 2011-05-27 Oliver Hunt <oliver@apple.com>
56704 Reviewed by Geoffrey Garen.
56706 Add a few validity assertions to JSCallbackObject
56707 https://bugs.webkit.org/show_bug.cgi?id=61659
56709 * API/JSCallbackObject.h:
56710 (JSC::JSCallbackObject::visitChildren):
56712 2011-05-27 Oliver Hunt <oliver@apple.com>
56716 * runtime/RegExpCache.cpp:
56717 (JSC::RegExpCache::invalidateCode):
56719 2011-05-27 Oliver Hunt <oliver@apple.com>
56721 Reviewed by Geoffrey Garen.
56723 Try to release unused executable memory when the FixedVMPool allocator is under pressure
56724 https://bugs.webkit.org/show_bug.cgi?id=61651
56726 Rather than crashing when full the FixedVMPool allocator now returns a null
56727 allocation. We replace the code that used to CRASH() on null allocations
56728 with logic that asks the provided globalData to release any executable memory
56729 that it can. Currently this just means throwing away all regexp code, but
56730 in future we'll try to be more aggressive.
56732 * assembler/ARMAssembler.cpp:
56733 (JSC::ARMAssembler::executableCopy):
56734 * assembler/ARMAssembler.h:
56735 * assembler/AssemblerBuffer.h:
56736 (JSC::AssemblerBuffer::executableCopy):
56737 * assembler/AssemblerBufferWithConstantPool.h:
56738 * assembler/LinkBuffer.h:
56739 (JSC::LinkBuffer::LinkBuffer):
56740 (JSC::LinkBuffer::linkCode):
56741 * assembler/MIPSAssembler.h:
56742 (JSC::MIPSAssembler::executableCopy):
56743 * assembler/SH4Assembler.h:
56744 (JSC::SH4Assembler::executableCopy):
56745 * assembler/X86Assembler.h:
56746 (JSC::X86Assembler::executableCopy):
56747 (JSC::X86Assembler::X86InstructionFormatter::executableCopy):
56748 * dfg/DFGJITCompiler.cpp:
56749 (JSC::DFG::JITCompiler::compileFunction):
56750 * jit/ExecutableAllocator.h:
56751 (JSC::ExecutablePool::create):
56752 (JSC::ExecutablePool::alloc):
56753 (JSC::ExecutableAllocator::ExecutableAllocator):
56754 (JSC::ExecutableAllocator::poolForSize):
56755 (JSC::ExecutablePool::ExecutablePool):
56756 (JSC::ExecutablePool::poolAllocate):
56757 * jit/ExecutableAllocatorFixedVMPool.cpp:
56758 (JSC::FixedVMPoolAllocator::alloc):
56760 (JSC::JIT::privateCompile):
56761 * jit/JITOpcodes.cpp:
56762 (JSC::JIT::privateCompileCTIMachineTrampolines):
56763 * jit/JITOpcodes32_64.cpp:
56764 (JSC::JIT::privateCompileCTIMachineTrampolines):
56765 (JSC::JIT::privateCompileCTINativeCall):
56766 * jit/JITPropertyAccess.cpp:
56767 (JSC::JIT::stringGetByValStubGenerator):
56768 (JSC::JIT::privateCompilePutByIdTransition):
56769 (JSC::JIT::privateCompilePatchGetArrayLength):
56770 (JSC::JIT::privateCompileGetByIdProto):
56771 (JSC::JIT::privateCompileGetByIdSelfList):
56772 (JSC::JIT::privateCompileGetByIdProtoList):
56773 (JSC::JIT::privateCompileGetByIdChainList):
56774 (JSC::JIT::privateCompileGetByIdChain):
56775 * jit/JITPropertyAccess32_64.cpp:
56776 (JSC::JIT::stringGetByValStubGenerator):
56777 (JSC::JIT::privateCompilePutByIdTransition):
56778 (JSC::JIT::privateCompilePatchGetArrayLength):
56779 (JSC::JIT::privateCompileGetByIdProto):
56780 (JSC::JIT::privateCompileGetByIdSelfList):
56781 (JSC::JIT::privateCompileGetByIdProtoList):
56782 (JSC::JIT::privateCompileGetByIdChainList):
56783 (JSC::JIT::privateCompileGetByIdChain):
56784 * jit/SpecializedThunkJIT.h:
56785 (JSC::SpecializedThunkJIT::finalize):
56786 * jit/ThunkGenerators.cpp:
56787 (JSC::charCodeAtThunkGenerator):
56788 (JSC::charAtThunkGenerator):
56789 (JSC::fromCharCodeThunkGenerator):
56790 (JSC::sqrtThunkGenerator):
56791 (JSC::powThunkGenerator):
56792 * runtime/JSGlobalData.cpp:
56793 (JSC::JSGlobalData::JSGlobalData):
56794 (JSC::JSGlobalData::releaseExecutableMemory):
56795 (JSC::releaseExecutableMemory):
56796 * runtime/JSGlobalData.h:
56797 * runtime/RegExpCache.cpp:
56798 (JSC::RegExpCache::invalidateCode):
56799 * runtime/RegExpCache.h:
56800 * yarr/YarrJIT.cpp:
56801 (JSC::Yarr::YarrGenerator::compile):
56803 2011-05-26 Geoffrey Garen <ggaren@apple.com>
56805 Reviewed by Oliver Hunt.
56807 Optimized ConservativeSet to avoid double-visiting objects
56808 https://bugs.webkit.org/show_bug.cgi?id=61592
56810 SunSpider thinks this might be a 1% speedup
56812 * heap/ConservativeRoots.h:
56813 (JSC::ConservativeRoots::add): Use testAndClearMarked to avoid double-visiting
56817 (JSC::Heap::isMarked):
56818 (JSC::Heap::testAndSetMarked):
56819 (JSC::Heap::testAndClearMarked):
56820 (JSC::Heap::setMarked): Added testAndClearMarked. Changed argument type
56821 to void*, since clients want to ask questions about arbitrary pointers
56822 into the heap, even when they aren't known to be JSCells.
56824 * heap/MarkedBlock.h:
56825 (JSC::MarkedBlock::testAndClearMarked):
56826 * heap/MarkedSpace.h:
56827 (JSC::MarkedSpace::isMarked):
56828 (JSC::MarkedSpace::testAndSetMarked):
56829 (JSC::MarkedSpace::testAndClearMarked):
56830 (JSC::MarkedSpace::setMarked):
56831 (JSC::MarkedSpace::contains): Ditto.
56834 (WTF::::testAndClear): New function for ConservativeRoots's inverted
56837 2011-05-27 Stephanie Lewis <slewis@apple.com>
56839 Rubber Stamped by Adam Roben.
56841 Update Order Files. Use -order_file flag since it can order more of the binary.
56843 * Configurations/Base.xcconfig:
56844 * JavaScriptCore.order:
56846 2011-05-26 Geoffrey Garen <ggaren@apple.com>
56848 Reviewed by Oliver Hunt.
56850 Renamed heapRootMarker to heapRootVisitor to match its class name
56851 https://bugs.webkit.org/show_bug.cgi?id=61584
56854 (JSC::Heap::markProtectedObjects):
56855 (JSC::Heap::markTempSortVectors):
56856 (JSC::Heap::markRoots):
56858 2011-05-26 Geoffrey Garen <ggaren@apple.com>
56860 Reviewed by Oliver Hunt.
56862 Removed some interdependency between Heap and SmallStrings by simplifying
56863 the SmallStrings lifetime model
56864 https://bugs.webkit.org/show_bug.cgi?id=61579
56866 SunSpider reports no change.
56868 Using Weak<T> could accomplish this too, but we're not sure it will give
56869 us the performance we need. This is a first step, and it accomplishes
56870 most of the value of using Weak<T>.
56873 (JSC::Heap::destroy):
56874 (JSC::Heap::markRoots):
56875 (JSC::Heap::reset): Finalize small strings just like other weak handles.
56877 * runtime/SmallStrings.cpp:
56879 (JSC::SmallStrings::finalizeSmallStrings):
56880 * runtime/SmallStrings.h: Make all small strings trivially weak, instead
56881 of having an "all for one, one for all" memory model.
56883 2011-05-26 Oliver Hunt <oliver@apple.com>
56885 Reviewed by Geoffrey Garen.
56887 Make RegExpCache a weak map
56888 https://bugs.webkit.org/show_bug.cgi?id=61554
56890 Switch to a weak map for the regexp cache, and hide that
56891 behaviour behind RegExp::create.
56893 When a RegExp is compiled it attempts to add itself to
56894 the "strong" cache. This cache is a simple round-robin
56895 buffer as was the old strong cache. Happily this can
56896 be smaller than the old strong cache as RegExps are only
56897 added when they're compiled so it is under less pressure
56900 * bytecompiler/NodesCodegen.cpp:
56901 (JSC::RegExpNode::emitBytecode):
56902 * runtime/RegExp.cpp:
56903 (JSC::RegExp::RegExp):
56904 (JSC::RegExp::create):
56905 (JSC::RegExp::match):
56906 * runtime/RegExp.h:
56907 (JSC::RegExp::gcShouldInvalidateCode):
56908 (JSC::RegExp::hasCode):
56909 (JSC::RegExp::key):
56910 * runtime/RegExpCache.cpp:
56911 (JSC::RegExpCache::lookupOrCreate):
56912 (JSC::RegExpCache::RegExpCache):
56913 (JSC::RegExpCache::isReachableFromOpaqueRoots):
56914 (JSC::RegExpCache::finalize):
56915 * runtime/RegExpCache.h:
56916 * runtime/RegExpConstructor.cpp:
56917 (JSC::constructRegExp):
56918 * runtime/RegExpPrototype.cpp:
56919 (JSC::regExpProtoFuncCompile):
56920 * runtime/StringPrototype.cpp:
56921 (JSC::stringProtoFuncMatch):
56922 (JSC::stringProtoFuncSearch):
56924 2011-05-26 Geoffrey Garen <ggaren@apple.com>
56926 Reviewed by Oliver Hunt.
56928 Moved Heap-related functions out of JSCell.h and into respective header files
56929 https://bugs.webkit.org/show_bug.cgi?id=61567
56932 (JSC::Heap::allocate):
56934 * heap/MarkedBlock.h:
56935 (JSC::MarkedBlock::allocate):
56936 * heap/MarkedSpace.h:
56937 (JSC::MarkedSpace::sizeClassFor):
56938 (JSC::MarkedSpace::allocate):
56939 * runtime/JSCell.h:
56940 (JSC::JSCell::destructor):
56942 2011-05-26 Geoffrey Garen <ggaren@apple.com>
56944 Try to fix Windows build.
56946 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
56948 2011-05-26 Ryosuke Niwa <rniwa@webkit.org>
56950 Reviewed by Eric Seidel.
56952 [debug feature] WTFString should have show() method
56953 https://bugs.webkit.org/show_bug.cgi?id=61149
56955 Added String::show and AtomicString::show in NDEBUG.
56957 * wtf/text/AtomicString.cpp:
56958 (WTF::AtomicString::show):
56959 * wtf/text/AtomicString.h:
56960 * wtf/text/WTFString.cpp:
56962 * wtf/text/WTFString.h:
56964 2011-05-26 Geoffrey Garen <ggaren@apple.com>
56966 Reviewed by Geoffrey Garen.
56968 Factored out some Heap ASSERTs
56969 https://bugs.webkit.org/show_bug.cgi?id=61565
56971 * JavaScriptCore.exp:
56973 (JSC::isValidSharedInstanceThreadState):
56974 (JSC::isValidThreadState):
56975 (JSC::Heap::markRoots):
56976 (JSC::Heap::isValidAllocation):
56978 * runtime/JSCell.h:
56979 (JSC::JSCell::Heap::allocate):
56981 2011-05-26 Gavin Barraclough <barraclough@apple.com>
56983 Reviewed by Geoff Garen.
56985 https://bugs.webkit.org/show_bug.cgi?id=61508
56986 DFG JIT - Add support for get by id self caching.
56988 Change the call out to be an unexpected call (using silent spill/fill functions),
56989 add a structure check & compact load to the JIT code, and add repatching mechanisms.
56990 Since DFGOperations may want to be be implemented in asm, make these symbols be extern
56991 "C". Add an asm wrapper to pass the return address to the optimizing get-by-id operation,
56992 so that it can look up its StructureStubInfo.
56994 * JavaScriptCore.xcodeproj/project.pbxproj:
56996 * bytecode/StructureStubInfo.h:
56997 - Added 'unset' entries to union.
56998 * dfg/DFGJITCodeGenerator.h:
56999 (JSC::DFG::JITCodeGenerator::appendCallWithExceptionCheck):
57000 - Return the call, we need this to populate the StructureStubInfo.
57001 * dfg/DFGJITCompiler.cpp:
57002 (JSC::DFG::JITCompiler::compileFunction):
57003 - Populate the CodebBlock's StructureStubInfo Vector.
57004 * dfg/DFGJITCompiler.h:
57005 (JSC::DFG::JITCompiler::appendCallWithExceptionCheck):
57006 - Return the call, we need this to populate the StructureStubInfo.
57007 (JSC::DFG::JITCompiler::addPropertyAccess):
57008 (JSC::DFG::JITCompiler::PropertyAccessRecord::PropertyAccessRecord):
57009 - Add structures to record property access info during compilation.
57010 * dfg/DFGOperations.cpp:
57011 - Made all external methods extern "C".
57012 (JSC::DFG::operationPutByValInternal):
57013 - Moved outside of the extern "C" block.
57014 * dfg/DFGOperations.h:
57015 - Made all external methods extern "C".
57016 * dfg/DFGRepatch.cpp: Added.
57017 (JSC::DFG::dfgRepatchCall):
57018 - repatch a call to link to a new callee function.
57019 (JSC::DFG::dfgRepatchGetByIdSelf):
57020 - Modify the JIT code to optimize self accesses.
57021 (JSC::DFG::tryCacheGetByID):
57022 - Internal implementation of dfgRepatchGetByID (factor out failing cases).
57023 (JSC::DFG::dfgRepatchGetByID):
57024 - Used to optimize 'operationGetByIdOptimize' - repatches to 'operationGetById', and tries to optimize self accesses!
57025 * dfg/DFGRepatch.h: Added.
57026 - Expose dfgRepatchGetByID.
57027 * dfg/DFGSpeculativeJIT.cpp:
57028 (JSC::DFG::SpeculativeJIT::compile):
57029 - Changed implementation of GetById ops.
57031 2011-05-26 Geoffrey Garen <ggaren@apple.com>
57033 Rolled back in http://trac.webkit.org/changeset/87408 with Windows build fixed.
57035 * heap/MarkedBlock.cpp:
57036 (JSC::MarkedBlock::MarkedBlock):
57037 * heap/MarkedBlock.h:
57038 * wtf/DoublyLinkedList.h:
57039 (WTF::::DoublyLinkedListNode):
57044 (WTF::::DoublyLinkedList):
57051 (WTF::::removeHead):
57053 2011-05-26 Geoffrey Garen <ggaren@apple.com>
57055 Rolled out http://trac.webkit.org/changeset/87408 because it broke the
57058 * heap/MarkedBlock.cpp:
57059 (JSC::MarkedBlock::MarkedBlock):
57060 * heap/MarkedBlock.h:
57061 (JSC::MarkedBlock::setPrev):
57062 (JSC::MarkedBlock::setNext):
57063 (JSC::MarkedBlock::prev):
57064 (JSC::MarkedBlock::next):
57065 * wtf/DoublyLinkedList.h:
57066 (WTF::::DoublyLinkedList):
57072 2011-05-26 Geoffrey Garen <ggaren@apple.com>
57074 Reviewed by Oliver Hunt.
57076 Provide a real owner when copying a property table, for the sake of
57078 https://bugs.webkit.org/show_bug.cgi?id=61547
57080 No test because we can't enable the writeBarrier() ASSERT just yet.
57082 * runtime/Structure.cpp:
57083 (JSC::Structure::addPropertyTransition):
57085 2011-05-26 Adam Roben <aroben@apple.com>
57087 Windows build fix after r87346
57089 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Fixed up exports to match
57092 2011-05-26 Patrick Gansterer <paroga@webkit.org>
57094 Reviewed by Adam Barth.
57096 ASSERT(isMainThread()) when using single threaded jsc executable
57097 https://bugs.webkit.org/show_bug.cgi?id=60846
57099 Remove the ASSERT since we do not have the concept of MainThread in JSC.
57101 * wtf/CryptographicallyRandomNumber.cpp:
57102 (WTF::ARC4Stream::ARC4RandomNumberGenerator::randomNumber):
57103 (WTF::ARC4Stream::ARC4RandomNumberGenerator::randomValues):
57105 2011-05-25 Gavin Barraclough <barraclough@apple.com>
57107 Reviewed by Sam Weinig.
57109 https://bugs.webkit.org/show_bug.cgi?id=61506
57111 Move the silent spill/fill methods in the DFG JIT to the JITCodeGenerator
57112 so that they are available to the SpeculativeJIT.
57114 * dfg/DFGJITCodeGenerator.h:
57115 (JSC::DFG::JITCodeGenerator::silentSpillGPR):
57116 (JSC::DFG::JITCodeGenerator::silentSpillFPR):
57117 (JSC::DFG::JITCodeGenerator::silentFillGPR):
57118 (JSC::DFG::JITCodeGenerator::silentFillFPR):
57119 (JSC::DFG::JITCodeGenerator::silentSpillAllRegisters):
57120 (JSC::DFG::JITCodeGenerator::silentFillAllRegisters):
57121 * dfg/DFGNonSpeculativeJIT.h:
57123 2011-05-25 Ryosuke Niwa <rniwa@webkit.org>
57125 An attempt to revive Windows bots.
57127 * runtime/RegExp.cpp:
57128 * runtime/RegExp.h:
57130 2011-05-25 Gavin Barraclough <barraclough@apple.com>
57132 Reviewed by Sam Weinig.
57134 Bug 61503 - Move population of CodeBlock::m_structureStubInfos into JIT
57136 This data structure, used at runtime by the JIT, is currently unnecessarily populated
57137 with default entries during byte compilation.
57139 Aside from meaning that there is JIT specific code in the bytecompiler, this also ties
57140 us to one entry per corresponding bytecode op, which may be undesirable. Instead,
57141 populate this array from the JIT.
57143 The type StructureStubInfo has two unused states, one for gets & one for puts. Unify
57144 these, so that the class can have a default constructor (and to simply switch statements
57145 in code walking over the table).
57147 This change has ramification for the DFG JIT, in that the DFG JIT used this datastructure
57148 to check for functions containing property access. Instead do so in the DFGByteCodeParser.
57150 * bytecode/CodeBlock.cpp:
57151 (JSC::printStructureStubInfo):
57152 * bytecode/CodeBlock.h:
57153 (JSC::CodeBlock::setNumberOfStructureStubInfos):
57154 (JSC::CodeBlock::numberOfStructureStubInfos):
57155 * bytecode/StructureStubInfo.cpp:
57156 (JSC::StructureStubInfo::deref):
57157 (JSC::StructureStubInfo::visitAggregate):
57158 * bytecode/StructureStubInfo.h:
57159 (JSC::StructureStubInfo::StructureStubInfo):
57160 * bytecompiler/BytecodeGenerator.cpp:
57161 (JSC::BytecodeGenerator::emitGetById):
57162 (JSC::BytecodeGenerator::emitPutById):
57163 (JSC::BytecodeGenerator::emitDirectPutById):
57164 * dfg/DFGByteCodeParser.cpp:
57165 (JSC::DFG::ByteCodeParser::parseBlock):
57168 (JSC::JIT::privateCompileMainPass):
57169 (JSC::JIT::privateCompileSlowCases):
57170 (JSC::JIT::privateCompile):
57172 * jit/JITPropertyAccess.cpp:
57173 (JSC::JIT::emit_op_get_by_id):
57174 (JSC::JIT::emit_op_put_by_id):
57175 (JSC::JIT::emit_op_method_check):
57176 (JSC::JIT::compileGetByIdHotPath):
57177 (JSC::JIT::compileGetByIdSlowCase):
57178 (JSC::JIT::emitSlow_op_put_by_id):
57179 * jit/JITPropertyAccess32_64.cpp:
57180 (JSC::JIT::emit_op_get_by_id):
57181 (JSC::JIT::emitSlow_op_get_by_id):
57182 (JSC::JIT::emit_op_put_by_id):
57183 (JSC::JIT::emitSlow_op_put_by_id):
57184 (JSC::JIT::emit_op_method_check):
57185 (JSC::JIT::compileGetByIdHotPath):
57186 (JSC::JIT::compileGetByIdSlowCase):
57187 * runtime/Executable.cpp:
57188 (JSC::tryDFGCompile):
57190 2011-05-25 Gavin Barraclough <barraclough@apple.com>
57192 Reviewed by Sam Weinig.
57194 Bug 61501 - Unify AbstractMacroAssembler::differenceBetween methods.
57196 * assembler/AbstractMacroAssembler.h:
57197 (JSC::AbstractMacroAssembler::Call::Call):
57198 (JSC::AbstractMacroAssembler::Call::fromTailJump):
57199 (JSC::AbstractMacroAssembler::Jump::Jump):
57200 (JSC::AbstractMacroAssembler::Jump::link):
57201 (JSC::AbstractMacroAssembler::Jump::linkTo):
57202 (JSC::AbstractMacroAssembler::Jump::isSet):
57203 (JSC::AbstractMacroAssembler::differenceBetween):
57204 (JSC::AbstractMacroAssembler::linkJump):
57205 (JSC::AbstractMacroAssembler::getLinkerCallReturnOffset):
57206 * assembler/LinkBuffer.h:
57207 (JSC::LinkBuffer::link):
57208 (JSC::LinkBuffer::locationOf):
57209 (JSC::LinkBuffer::locationOfNearCall):
57210 (JSC::LinkBuffer::returnAddressOffset):
57211 * assembler/MacroAssemblerARM.h:
57212 (JSC::MacroAssemblerARM::linkCall):
57213 * assembler/MacroAssemblerARMv7.h:
57214 (JSC::MacroAssemblerARMv7::linkCall):
57215 * assembler/MacroAssemblerMIPS.h:
57216 (JSC::MacroAssemblerMIPS::linkCall):
57217 * assembler/MacroAssemblerSH4.cpp:
57218 (JSC::MacroAssemblerSH4::linkCall):
57219 * assembler/MacroAssemblerX86.h:
57220 (JSC::MacroAssemblerX86::linkCall):
57221 * assembler/MacroAssemblerX86_64.h:
57222 (JSC::MacroAssemblerX86_64::linkCall):
57224 2011-05-25 Gavin Barraclough <barraclough@apple.com>
57226 Reviewed by Sam Weinig.
57228 https://bugs.webkit.org/show_bug.cgi?id=61500
57229 Add JSObject::offsetOfPropertyStorage
57231 * jit/JITPropertyAccess.cpp:
57232 (JSC::JIT::compileGetDirectOffset):
57233 (JSC::JIT::compileGetByIdHotPath):
57234 (JSC::JIT::emit_op_put_by_id):
57235 (JSC::JIT::compilePutDirectOffset):
57236 * jit/JITPropertyAccess32_64.cpp:
57237 (JSC::JIT::compileGetByIdHotPath):
57238 (JSC::JIT::emit_op_put_by_id):
57239 (JSC::JIT::compilePutDirectOffset):
57240 (JSC::JIT::compileGetDirectOffset):
57241 * runtime/JSObject.h:
57242 (JSC::JSObject::offsetOfPropertyStorage):
57244 2011-05-25 Oliver Hunt <oliver@apple.com>
57246 Reviewed by Geoffrey Garen.
57248 Make RegExp GC allocated
57249 https://bugs.webkit.org/show_bug.cgi?id=61490
57251 Make RegExp GC allocated. Basically mechanical change to replace
57252 most use of [Pass]RefPtr<RegExp> with RegExp* or WriteBarrier<RegExp>
57253 where actual ownership happens.
57255 Made the RegExpCache use Strong<> references currently to avoid any
57256 changes in behaviour.
57258 * JavaScriptCore.exp:
57259 * bytecode/CodeBlock.cpp:
57260 (JSC::CodeBlock::visitAggregate):
57261 * bytecode/CodeBlock.h:
57262 (JSC::CodeBlock::addRegExp):
57263 * bytecompiler/BytecodeGenerator.cpp:
57264 (JSC::BytecodeGenerator::addRegExp):
57265 (JSC::BytecodeGenerator::emitNewRegExp):
57266 * bytecompiler/BytecodeGenerator.h:
57267 * runtime/JSCell.h:
57268 * runtime/JSGlobalData.cpp:
57269 (JSC::JSGlobalData::JSGlobalData):
57270 (JSC::JSGlobalData::clearBuiltinStructures):
57271 (JSC::JSGlobalData::addRegExpToTrace):
57272 * runtime/JSGlobalData.h:
57273 * runtime/JSGlobalObject.cpp:
57274 (JSC::JSGlobalObject::reset):
57275 * runtime/RegExp.cpp:
57276 (JSC::RegExp::RegExp):
57277 (JSC::RegExp::create):
57278 (JSC::RegExp::invalidateCode):
57279 * runtime/RegExp.h:
57280 (JSC::RegExp::createStructure):
57281 * runtime/RegExpCache.cpp:
57282 (JSC::RegExpCache::lookupOrCreate):
57283 (JSC::RegExpCache::create):
57284 * runtime/RegExpCache.h:
57285 * runtime/RegExpConstructor.cpp:
57286 (JSC::constructRegExp):
57287 * runtime/RegExpObject.cpp:
57288 (JSC::RegExpObject::RegExpObject):
57289 (JSC::RegExpObject::visitChildren):
57290 * runtime/RegExpObject.h:
57291 (JSC::RegExpObject::setRegExp):
57292 (JSC::RegExpObject::RegExpObjectData::RegExpObjectData):
57293 * runtime/RegExpPrototype.cpp:
57294 (JSC::RegExpPrototype::RegExpPrototype):
57295 (JSC::regExpProtoFuncCompile):
57296 * runtime/RegExpPrototype.h:
57297 * runtime/StringPrototype.cpp:
57298 (JSC::stringProtoFuncMatch):
57299 (JSC::stringProtoFuncSearch):
57301 2011-05-25 Oliver Hunt <oliver@apple.com>
57303 Reviewed by Geoffrey Garen.
57305 Generate regexp code lazily
57306 https://bugs.webkit.org/show_bug.cgi?id=61476
57308 RegExp construction now simply validates the RegExp, it does
57309 not perform actual codegen.
57311 * runtime/RegExp.cpp:
57312 (JSC::RegExp::RegExp):
57313 (JSC::RegExp::recompile):
57314 (JSC::RegExp::compile):
57315 (JSC::RegExp::match):
57316 * runtime/RegExp.h:
57317 (JSC::RegExp::recompileIfNecessary):
57318 * runtime/RegExpConstructor.h:
57319 (JSC::RegExpConstructor::performMatch):
57320 * runtime/RegExpObject.cpp:
57321 (JSC::RegExpObject::match):
57322 * runtime/StringPrototype.cpp:
57323 (JSC::stringProtoFuncReplace):
57324 (JSC::stringProtoFuncMatch):
57325 (JSC::stringProtoFuncSearch):
57326 (JSC::stringProtoFuncSplit):
57328 2011-05-24 Geoffrey Garen <ggaren@apple.com>
57330 Reviewed by Geoffrey Garen.
57332 Removed MarkSetProperties because it was unused
57333 https://bugs.webkit.org/show_bug.cgi?id=61418
57335 * heap/MarkStack.h:
57336 (JSC::MarkSet::MarkSet):
57337 (JSC::MarkStack::append):
57338 * runtime/JSActivation.cpp:
57339 (JSC::JSActivation::visitChildren):
57340 * runtime/JSArray.h:
57341 (JSC::JSArray::visitChildrenDirect):
57342 * runtime/JSPropertyNameIterator.cpp:
57343 (JSC::JSPropertyNameIterator::visitChildren):
57344 * runtime/WriteBarrier.h:
57345 (JSC::MarkStack::appendValues):
57347 2011-05-25 Oliver Hunt <oliver@apple.com>
57349 Reviewed by Geoffrey Garen.
57351 Make allocations with guard pages ensure that the allocation succeeded
57352 https://bugs.webkit.org/show_bug.cgi?id=61453
57354 Add null checks, and make PageBlock's operator bool() use
57355 the realbase, rather than the start of usable memory.
57357 * wtf/OSAllocatorPosix.cpp:
57358 (WTF::OSAllocator::reserveAndCommit):
57360 (WTF::PageBlock::operator bool):
57361 (WTF::PageBlock::PageBlock):
57363 2011-04-10 Kevin Ollivier <kevino@theolliviers.com>
57365 Reviewed by Eric Seidel.
57367 Add JS_EXPORT_PRIVATE macro for exported methods in bytecompiler headers.
57369 https://bugs.webkit.org/show_bug.cgi?id=27551
57371 * bytecompiler/BytecodeGenerator.h:
57373 2011-05-24 Keishi Hattori <keishi@webkit.org>
57375 Reviewed by Kent Tamura.
57377 Disable textfield implementation of <input type=color>. Add INPUT_COLOR feature flag. Add input color sanitizer.
57378 https://bugs.webkit.org/show_bug.cgi?id=61273
57380 * Configurations/FeatureDefines.xcconfig: Added COLOR_INPUT feature flag.
57382 2011-05-24 Kevin Ollivier <kevino@theolliviers.com>
57384 Reviewed by Eric Seidel.
57386 Add export macros to WTFString.h.
57388 https://bugs.webkit.org/show_bug.cgi?id=27551
57390 * wtf/text/WTFString.h:
57391 (WTF::String::String):
57392 (WTF::String::findIgnoringCase):
57393 (WTF::String::isHashTableDeletedValue):
57395 2011-05-24 Geoffrey Garen <ggaren@apple.com>
57397 Maybe fix the Mac build now?
57399 * JavaScriptCore.xcodeproj/project.pbxproj:
57401 2011-05-24 Geoffrey Garen <ggaren@apple.com>
57403 Maybe fix the Mac build?
57405 * JavaScriptCore.xcodeproj/project.pbxproj:
57407 2011-05-24 Geoffrey Garen <ggaren@apple.com>
57409 Reviewed by Oliver Hunt.
57411 Split HeapRootVisitor into its own class
57412 https://bugs.webkit.org/show_bug.cgi?id=61399
57414 * GNUmakefile.list.am:
57415 * JavaScriptCore.gypi:
57416 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
57417 * JavaScriptCore.xcodeproj/project.pbxproj:
57418 * heap/HandleHeap.cpp:
57419 * heap/HandleStack.cpp:
57421 * heap/HeapRootVisitor.h: Copied from Source/JavaScriptCore/heap/MarkStack.h.
57422 * heap/MarkStack.h:
57423 * runtime/ArgList.cpp:
57424 * runtime/SmallStrings.cpp:
57426 2011-05-24 Jay Civelli <jcivelli@chromium.org>
57428 Rubberstamped by David Kilzer.
57430 Updated some files that I forgot in my previous MHTML CL.
57432 * Configurations/FeatureDefines.xcconfig:
57434 2011-05-24 Geoffrey Garen <ggaren@apple.com>
57436 Fix the Mac build: Yes, please do remove these files, svn.
57438 * JavaScriptCore.xcodeproj/project.pbxproj:
57440 2011-05-24 Geoffrey Garen <ggaren@apple.com>
57442 Reviewed by Oliver Hunt.
57444 Let's just have one way to get the system page size, bokay?
57445 https://bugs.webkit.org/show_bug.cgi?id=61384
57447 * CMakeListsEfl.txt:
57448 * CMakeListsWinCE.txt:
57449 * GNUmakefile.list.am:
57450 * JavaScriptCore.exp:
57451 * JavaScriptCore.gypi:
57452 * JavaScriptCore.pro:
57453 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: MarkStack[Platform].cpp
57454 is gone completely now, since it only existed to provide a duplicate way
57455 to access the system page size.
57457 * heap/MarkStack.cpp:
57458 (JSC::MarkStack::reset):
57459 * heap/MarkStack.h:
57460 (JSC::::MarkStackArray):
57461 (JSC::::shrinkAllocation): Use WTF::pageSize.
57463 * heap/MarkStackPosix.cpp:
57464 * heap/MarkStackSymbian.cpp:
57465 * heap/MarkStackWin.cpp: Removed now-empty files.
57467 * jit/ExecutableAllocator.cpp:
57468 (JSC::ExecutableAllocator::reprotectRegion):
57469 * jit/ExecutableAllocator.h:
57470 (JSC::ExecutableAllocator::ExecutableAllocator):
57471 (JSC::ExecutablePool::ExecutablePool):
57472 (JSC::ExecutablePool::poolAllocate):
57473 * jit/ExecutableAllocatorFixedVMPool.cpp: Use WTF::pageSize.
57475 * wscript: Removed now-empty files.
57477 * wtf/PageBlock.cpp:
57478 (WTF::systemPageSize): Integrated questionable Symbian page size rule
57479 from ExecutableAllocator, because that seems like what the original
57480 author should have done.
57482 2011-05-24 Oliver Hunt <oliver@apple.com>
57484 Reviewed by Gavin Barraclough.
57486 Interpreter crashes with gc validation enabled due to failure to mark initial cache structure
57487 https://bugs.webkit.org/show_bug.cgi?id=61385
57489 The interpreter uses the structure slot of get_by_id and put_by_id to hold
57490 the initial structure it encountered so that it can identify whether a
57491 given access is stable.
57493 When marking though we only visit the slot when we've decided to cache, and
57494 so this value could die. This was "safe" as the value was only used for a
57495 pointer compare, but it was incorrect. We now just mark the slot like we
57496 should have been doing already.
57498 * bytecode/CodeBlock.cpp:
57499 (JSC::CodeBlock::visitStructures):
57501 2011-05-24 Adam Roben <aroben@apple.com>
57505 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Removed now-inline functions.
57507 2011-05-24 Geoffrey Garen <ggaren@apple.com>
57509 Windows build fix: update the #if OS(WINDOWS) section to match my last patch.
57511 * heap/MarkStack.h:
57512 (JSC::::shrinkAllocation):
57514 2011-05-24 Geoffrey Garen <ggaren@apple.com>
57516 Rubber-stamped by Oliver Hunt.
57518 Split out function definitions and class definitions from class
57519 declarations in MarkStack.h, for readability.
57521 * heap/MarkStack.h:
57522 (JSC::MarkStack::MarkStack):
57523 (JSC::MarkStack::~MarkStack):
57524 (JSC::MarkStack::addOpaqueRoot):
57525 (JSC::MarkStack::containsOpaqueRoot):
57526 (JSC::MarkStack::opaqueRootCount):
57527 (JSC::MarkSet::MarkSet):
57528 (JSC::MarkStack::allocateStack):
57529 (JSC::MarkStack::releaseStack):
57530 (JSC::MarkStack::pageSize):
57531 (JSC::::MarkStackArray):
57532 (JSC::::~MarkStackArray):
57535 (JSC::::removeLast):
57539 (JSC::::shrinkAllocation):
57541 2011-05-24 Oliver Hunt <oliver@apple.com>
57543 Reviewed by Geoffrey Garen.
57545 Avoid creating unnecessary identifiers and strings in the syntax checker
57546 https://bugs.webkit.org/show_bug.cgi?id=61378
57548 Selectively tell the lexer that there are some places it does not need to
57549 do the real work of creating Identifiers for IDENT and STRING tokens.
57551 Make parseString and parseIdentifier templatized on whether they should
57552 do real work, or merely validate the tokens.
57554 SunSpider --parse-only reports ~5-8% win depending on hardware.
57556 * parser/ASTBuilder.h:
57557 (JSC::ASTBuilder::createDotAccess):
57558 * parser/JSParser.cpp:
57559 (JSC::JSParser::next):
57560 (JSC::JSParser::consume):
57561 (JSC::JSParser::parseVarDeclarationList):
57562 (JSC::JSParser::parseConstDeclarationList):
57563 (JSC::JSParser::parseExpression):
57564 (JSC::JSParser::parseAssignmentExpression):
57565 (JSC::JSParser::parseConditionalExpression):
57566 (JSC::JSParser::parseBinaryExpression):
57567 (JSC::JSParser::parseProperty):
57568 (JSC::JSParser::parseObjectLiteral):
57569 (JSC::JSParser::parseArrayLiteral):
57570 (JSC::JSParser::parseArguments):
57571 (JSC::JSParser::parseMemberExpression):
57572 * parser/Lexer.cpp:
57573 (JSC::Lexer::parseIdentifier):
57574 (JSC::Lexer::parseString):
57577 * parser/SyntaxChecker.h:
57578 (JSC::SyntaxChecker::createDotAccess):
57579 (JSC::SyntaxChecker::createProperty):
57581 2011-05-23 Michael Saboff <msaboff@apple.com>
57583 Reviewed by Mark Rowe.
57585 Safari often freezes when clicking "Return free memory" in Caches dialog
57586 https://bugs.webkit.org/show_bug.cgi?id=61325
57588 There are two fixes and improvement in instrumentation code used to find
57589 one of the problems.
57590 Changed ReleaseFreeList() to set the "decommitted" bit when releasing
57591 pages to the system and moving Spans from the normal list to the returned
57593 Added a "not making forward progress" check to TCMalloc_PageHeap::scavenge
57594 to eliminate an infinite loop if we can't meet the pagesToRelease target.
57595 Added a check for the decommitted bit being set properly in
57596 TCMalloc_PageHeap::CheckList.
57598 * wtf/FastMalloc.cpp:
57599 (WTF::TCMalloc_PageHeap::scavenge):
57600 (WTF::TCMalloc_PageHeap::Check):
57601 (WTF::TCMalloc_PageHeap::CheckList):
57602 (WTF::ReleaseFreeList):
57604 2011-05-23 Gavin Barraclough <barraclough@apple.com>
57606 Reviewed by Geoff Garen.
57608 https://bugs.webkit.org/show_bug.cgi?id=61306
57610 The begin characters optimization currently has issues (#61129),
57611 and does not appear to still be a performance win. The prudent
57612 next step seems to be to disable while we ascertain whether this
57613 is still a useful performance optimization.
57615 * yarr/YarrInterpreter.cpp:
57616 (JSC::Yarr::Interpreter::matchDisjunction):
57617 (JSC::Yarr::Interpreter::interpret):
57618 * yarr/YarrInterpreter.h:
57619 (JSC::Yarr::BytecodePattern::BytecodePattern):
57620 * yarr/YarrPattern.cpp:
57621 (JSC::Yarr::YarrPatternConstructor::YarrPatternConstructor):
57622 (JSC::Yarr::YarrPattern::compile):
57623 (JSC::Yarr::YarrPattern::YarrPattern):
57624 * yarr/YarrPattern.h:
57625 (JSC::Yarr::YarrPattern::reset):
57627 2011-05-23 Matthew Delaney <mdelaney@apple.com>
57629 Reviewed by Simon Fraser.
57631 Remove safeFloatToInt() in FloatRect.cpp and replace with working version of clampToInteger()
57632 https://bugs.webkit.org/show_bug.cgi?id=58216
57634 * wtf/MathExtras.h:
57636 (clampToPositiveInteger):
57638 2011-05-23 Ruben <chromium@hybridsource.org>
57640 Reviewed by Tony Chang.
57642 Chromium gyp patch to use new POSIX defines toolkit_uses_gtk and os_posix
57643 https://bugs.webkit.org/show_bug.cgi?id=61219
57645 * JavaScriptCore.gyp/JavaScriptCore.gyp:
57647 2011-05-23 Thouraya ANDOLSI <thouraya.andolsi@st.com>
57649 Reviewed by Gavin Barraclough.
57651 [SH4] AssemblerLabel does not name a type
57652 https://bugs.webkit.org/show_bug.cgi?id=59927
57654 SH4Assembler.h file shoold be included before AbstractMacroAssembler.h.
57656 * assembler/MacroAssemblerSH4.h:
57658 2011-05-23 Ryuan Choi <ryuan.choi@samsung.com>
57660 Rubber stamped by Eric Seidel.
57662 [CMAKE] Refactoring wtf related code.
57663 https://bugs.webkit.org/show_bug.cgi?id=60146
57665 Move wtf-files to Source/JavaScriptCore/wtf/CMakeLists.txt.
57668 * CMakeListsEfl.txt:
57669 * wtf/CMakeLists.txt:
57670 * wtf/CMakeListsEfl.txt:
57672 2011-05-22 Adam Barth <abarth@webkit.org>
57674 Enable strict PassOwnPtr for everyone. I expect this patch will need
57675 some followups to make the GTK and EFL bots green again.
57677 * wtf/PassOwnPtr.h:
57679 2011-05-20 Oliver Hunt <oliver@apple.com>
57681 Reviewed by Gavin Barraclough.
57683 Reduce size of inline cache path of get_by_id on ARMv7
57684 https://bugs.webkit.org/show_bug.cgi?id=61221
57686 This reduces the code size of get_by_id by 20 bytes
57688 * assembler/ARMv7Assembler.h:
57689 (JSC::ARMv7Assembler::ldrCompact):
57690 (JSC::ARMv7Assembler::repatchCompact):
57691 (JSC::ARMv7Assembler::setUInt7ForLoad):
57692 * assembler/MacroAssemblerARMv7.h:
57693 (JSC::MacroAssemblerARMv7::load32WithCompactAddressOffsetPatch):
57696 2011-05-20 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
57698 Reviewed by Oliver Hunt.
57700 Zombies should "live" forever
57701 https://bugs.webkit.org/show_bug.cgi?id=61170
57703 Reusing zombie cells could still hide garbage
57704 collected cell related bugs.
57706 * JavaScriptCore.pro:
57707 * heap/MarkedBlock.cpp:
57708 (JSC::MarkedBlock::clearMarks):
57709 * heap/MarkedBlock.h:
57710 * heap/MarkedSpace.cpp:
57711 (JSC::MarkedSpace::destroy):
57712 * runtime/JSCell.h:
57713 (JSC::JSCell::JSValue::isZombie):
57714 * runtime/JSZombie.h:
57715 (JSC::JSZombie::~JSZombie):
57716 * runtime/WriteBarrier.h:
57717 (JSC::WriteBarrierBase::setWithoutWriteBarrier):
57719 2011-05-20 Brady Eidson <beidson@apple.com>
57721 Reviewed by Sam Weinig.
57723 <rdar://problem/9472883> and https://bugs.webkit.org/show_bug.cgi?id=61203
57724 Horrendous bug in callOnMainThreadAndWait
57726 * wtf/MainThread.cpp:
57727 (WTF::dispatchFunctionsFromMainThread): Before signaling the background thread with the
57728 syncFlag condition, reacquire the mutex first.
57730 2011-05-20 Oliver Hunt <oliver@apple.com>
57732 Reviewed by Sam Weinig.
57734 Remove unnecessary double->int conversion at the end of op_div
57735 https://bugs.webkit.org/show_bug.cgi?id=61198
57737 We don't attempt this conversion on 64bit, removing it actually speeds
57738 up sunspider and v8 slightly, and it reduces code size.
57740 * jit/JITArithmetic32_64.cpp:
57741 (JSC::JIT::emit_op_div):
57743 2011-05-19 Evan Martin <evan@chromium.org>
57745 Reviewed by Tony Chang.
57747 [chromium] remove <(library) variable
57748 https://bugs.webkit.org/show_bug.cgi?id=61158
57750 This was for a build experiment; we can just use the correct value now.
57752 * JavaScriptCore.gyp/JavaScriptCore.gyp:
57754 2011-05-20 Oliver Hunt <oliver@apple.com>
57756 Reviewed by Sam Weinig.
57758 Interpreter uses wrong bytecode offset for determining exception handler
57759 https://bugs.webkit.org/show_bug.cgi?id=61191
57761 The bytecode offset given for the returnPC from the JIT is
57762 actually the offset for the start of the instruction triggering
57763 the call, whereas in the interpreter it is the actual return
57764 VPC. This means if the next instruction following a call was
57765 in an exception region we would incorrectly redirect to its
57766 handler. Long term we want to completely redo how exceptions
57767 are handled anyway so the simplest and lowest risk fix here is
57768 to simply subtract one from the return vPC so that we have an
57769 offset in the triggering instruction.
57771 It turns out this is caught by a couple of tests already.
57773 * interpreter/Interpreter.cpp:
57774 (JSC::Interpreter::unwindCallFrame):
57776 2011-05-20 Xan Lopez <xlopez@igalia.com>
57778 Reviewed by Oliver Hunt.
57780 JIT requires VM overcommit (particularly on x86-64), Linux does not by default support this without swap?
57781 https://bugs.webkit.org/show_bug.cgi?id=42756
57783 Use the MAP_NORESERVE flag for mmap on Linux to skip the kernel
57784 check of the available memory. This should give us an
57785 overcommit-like behavior in most systems, which is what we want.
57787 * wtf/OSAllocatorPosix.cpp:
57788 (WTF::OSAllocator::reserveAndCommit): pass MAP_NORSERVE to mmap.
57790 2011-05-19 Gabor Loki <loki@webkit.org>
57792 Fix ARM build after r86919
57794 * assembler/ARMAssembler.h:
57795 (JSC::ARMAssembler::nop):
57797 2011-05-19 Oliver Hunt <oliver@apple.com>
57799 Reviewed by Gavin Barraclough.
57801 Randomise code starting location a little
57802 https://bugs.webkit.org/show_bug.cgi?id=61161
57804 Add a nop() function to the Assemblers so that we
57805 can randomise code offsets slightly at no real cost.
57807 * assembler/ARMAssembler.h:
57808 (JSC::ARMAssembler::nop):
57809 * assembler/ARMv7Assembler.h:
57810 (JSC::ARMv7Assembler::nop):
57811 * assembler/MacroAssemblerARM.h:
57812 (JSC::MacroAssemblerARM::nop):
57813 * assembler/MacroAssemblerARMv7.h:
57814 (JSC::MacroAssemblerARMv7::nop):
57815 * assembler/MacroAssemblerMIPS.h:
57816 (JSC::MacroAssemblerMIPS::nop):
57817 * assembler/MacroAssemblerSH4.h:
57818 (JSC::MacroAssemblerSH4::nop):
57819 * assembler/MacroAssemblerX86Common.h:
57820 (JSC::MacroAssemblerX86Common::nop):
57821 * assembler/X86Assembler.h:
57822 (JSC::X86Assembler::nop):
57825 (JSC::JIT::privateCompile):
57827 * runtime/WeakRandom.h:
57828 (JSC::WeakRandom::getUint32):
57830 2011-05-19 Oliver Hunt <oliver@apple.com>
57834 * wtf/OSAllocatorWin.cpp:
57835 (WTF::OSAllocator::reserveUncommitted):
57836 (WTF::OSAllocator::reserveAndCommit):
57838 2011-05-19 Oliver Hunt <oliver@apple.com>
57840 Reviewed by Gavin Barraclough.
57842 Add guard pages to each end of the memory region used by the fixedvm allocator
57843 https://bugs.webkit.org/show_bug.cgi?id=61150
57845 Add mechanism to notify the OSAllocator that pages at either end of an
57846 allocation should be considered guard pages. Update PageReservation,
57847 PageAllocation, etc to handle this.
57849 * JavaScriptCore.exp:
57850 * jit/ExecutableAllocatorFixedVMPool.cpp:
57851 (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
57852 * wtf/OSAllocator.h:
57853 * wtf/OSAllocatorPosix.cpp:
57854 (WTF::OSAllocator::reserveUncommitted):
57855 (WTF::OSAllocator::reserveAndCommit):
57856 * wtf/PageAllocation.h:
57857 (WTF::PageAllocation::PageAllocation):
57858 * wtf/PageAllocationAligned.h:
57859 (WTF::PageAllocationAligned::PageAllocationAligned):
57861 (WTF::PageBlock::PageBlock):
57862 * wtf/PageReservation.h:
57863 (WTF::PageReservation::reserve):
57864 (WTF::PageReservation::reserveWithGuardPages):
57865 Add a new function to make a reservation that will add guard
57866 pages to the ends of an allocation.
57867 (WTF::PageReservation::PageReservation):
57869 2011-05-19 Oliver Hunt <oliver@apple.com>
57871 Reviewed by Geoffrey Garen.
57873 Make Executables release their JIT code as soon as they become dead
57874 https://bugs.webkit.org/show_bug.cgi?id=61134
57876 Add an ability to clear an Executable's jit code without requiring
57877 it to be destroyed, and then call that from a finalizer.
57883 (JSC::JITCode::clear):
57884 * runtime/Executable.cpp:
57885 (JSC::ExecutableFinalizer::finalize):
57886 (JSC::ExecutableBase::executableFinalizer):
57887 * runtime/Executable.h:
57888 (JSC::ExecutableBase::ExecutableBase):
57889 (JSC::ExecutableBase::clearExecutableCode):
57891 2011-05-19 Adam Roben <aroben@apple.com>
57893 Remove a redundant and broken data export
57895 Data can't be exported from JavaScriptCore.dll by listing it in the .def file. The
57896 JS_EXPORTDATA macro must be used instead. (In this case it was already being used, leading
57897 to a linker warning about multiple definitions.)
57899 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Removed JSGlobalData::s_info.
57901 2011-05-18 Oliver Hunt <oliver@apple.com>
57903 Reviewed by Gavin Barraclough.
57905 Some tests crashing in JSC::MarkStack::validateValue beneath ScriptController::clearWindowShell on SnowLeopard Intel Release (WebKit2 Tests)
57906 https://bugs.webkit.org/show_bug.cgi?id=61064
57908 Switch NonFinalObject to using WriteBarrier<> rather than WriteBarrierBase<>
57909 for its inline storage. This resolves the problem of GC occurring before
57910 a subclass has initialised its anonymous storage.
57912 * runtime/JSObject.h:
57914 2011-05-18 Adam Barth <abarth@webkit.org>
57916 Reviewed by Sam Weinig.
57919 https://bugs.webkit.org/show_bug.cgi?id=61084
57921 It's been a year and we've failed to complete this project. It's time
57922 to throw in the towel.
57924 * JavaScriptCore.xcodeproj/project.pbxproj:
57925 * wtf/url: Removed.
57926 * wtf/url/api: Removed.
57927 * wtf/url/api/ParsedURL.cpp: Removed.
57928 * wtf/url/api/ParsedURL.h: Removed.
57929 * wtf/url/api/URLString.h: Removed.
57930 * wtf/url/src: Removed.
57931 * wtf/url/src/RawURLBuffer.h: Removed.
57932 * wtf/url/src/URLBuffer.h: Removed.
57933 * wtf/url/src/URLCharacterTypes.cpp: Removed.
57934 * wtf/url/src/URLCharacterTypes.h: Removed.
57935 * wtf/url/src/URLComponent.h: Removed.
57936 * wtf/url/src/URLEscape.cpp: Removed.
57937 * wtf/url/src/URLEscape.h: Removed.
57938 * wtf/url/src/URLParser.h: Removed.
57939 * wtf/url/src/URLQueryCanonicalizer.h: Removed.
57940 * wtf/url/src/URLSegments.cpp: Removed.
57941 * wtf/url/src/URLSegments.h: Removed.
57942 * wtf/url/wtfurl.gyp: Removed.
57944 2011-05-18 Oliver Hunt <oliver@apple.com>
57946 Reviewed by Sam Weinig.
57948 JSGlobalObject and some others do GC allocation during initialization, which can cause heap corruption
57949 https://bugs.webkit.org/show_bug.cgi?id=61090
57951 Remove the Structure-free JSGlobalObject constructor and instead always
57952 pass the structure into the JSGlobalObject constructor.
57953 Stop DebuggerActivation creating a new structure every time, and simply
57954 use a single shared structure held by the GlobalData.
57956 * API/JSContextRef.cpp:
57957 * debugger/DebuggerActivation.cpp:
57958 (JSC::DebuggerActivation::DebuggerActivation):
57960 (GlobalObject::GlobalObject):
57963 * runtime/JSGlobalData.cpp:
57964 (JSC::JSGlobalData::JSGlobalData):
57965 (JSC::JSGlobalData::clearBuiltinStructures):
57966 * runtime/JSGlobalData.h:
57967 * runtime/JSGlobalObject.h:
57969 2011-05-18 Oliver Hunt <oliver@apple.com>
57971 Reviewed by Adam Roben.
57973 Disable gc validation in release builds
57974 https://bugs.webkit.org/show_bug.cgi?id=60680
57976 Add back the NDEBUG check
57980 2011-05-17 Geoffrey Garen <ggaren@apple.com>
57982 Rolled out attempts to fix EFL build because they're not enough -- the
57983 build script needs to be fixed.
57985 * runtime/BooleanPrototype.cpp:
57986 * runtime/DateConstructor.cpp:
57987 * runtime/ErrorPrototype.cpp:
57989 2011-05-17 Geoffrey Garen <ggaren@apple.com>
57991 More attempts to work around the EFL build system being borken.
57993 * runtime/DateConstructor.cpp:
57994 * runtime/ErrorPrototype.cpp:
57996 2011-05-17 Geoffrey Garen <ggaren@apple.com>
57998 Try to fix the EFL build.
58000 * runtime/BooleanPrototype.cpp:
58002 2011-05-16 Geoffrey Garen <ggaren@apple.com>
58004 Rolling back in r86653 with build fixed.
58006 Reviewed by Gavin Barraclough and Oliver Hunt.
58008 Global object initialization is expensive
58009 https://bugs.webkit.org/show_bug.cgi?id=60933
58011 Changed a bunch of globals to allocate their properties lazily, and changed
58012 the global object to allocate a bunch of its globals lazily.
58014 This reduces the footprint of a global object from 287 objects with 58
58015 functions for 24K to 173 objects with 20 functions for 15K.
58017 Large patch, but it's all mechanical.
58019 * DerivedSources.make:
58020 * JavaScriptCore.exp: Build!
58022 * create_hash_table: Added a special case for fromCharCode, since it uses
58023 a custom "thunk generator".
58026 (JSC::TypeCounter::operator()): Fixed a bug where the type counter would
58027 overcount objects that were owned through more than one mechanism because
58028 it was getting in the way of counting the results for this patch.
58030 * interpreter/CallFrame.h:
58031 (JSC::ExecState::arrayConstructorTable):
58032 (JSC::ExecState::arrayPrototypeTable):
58033 (JSC::ExecState::booleanPrototypeTable):
58034 (JSC::ExecState::dateConstructorTable):
58035 (JSC::ExecState::errorPrototypeTable):
58036 (JSC::ExecState::globalObjectTable):
58037 (JSC::ExecState::numberConstructorTable):
58038 (JSC::ExecState::numberPrototypeTable):
58039 (JSC::ExecState::objectPrototypeTable):
58040 (JSC::ExecState::regExpPrototypeTable):
58041 (JSC::ExecState::stringConstructorTable): Added new tables.
58043 * runtime/ArrayConstructor.cpp:
58044 (JSC::ArrayConstructor::ArrayConstructor):
58045 (JSC::ArrayConstructor::getOwnPropertySlot):
58046 (JSC::ArrayConstructor::getOwnPropertyDescriptor):
58047 * runtime/ArrayConstructor.h:
58048 (JSC::ArrayConstructor::createStructure):
58049 * runtime/ArrayPrototype.cpp:
58050 (JSC::ArrayPrototype::getOwnPropertySlot):
58051 (JSC::ArrayPrototype::getOwnPropertyDescriptor):
58052 * runtime/ArrayPrototype.h:
58053 * runtime/BooleanPrototype.cpp:
58054 (JSC::BooleanPrototype::BooleanPrototype):
58055 (JSC::BooleanPrototype::getOwnPropertySlot):
58056 (JSC::BooleanPrototype::getOwnPropertyDescriptor):
58057 * runtime/BooleanPrototype.h:
58058 (JSC::BooleanPrototype::createStructure):
58059 * runtime/DateConstructor.cpp:
58060 (JSC::DateConstructor::DateConstructor):
58061 (JSC::DateConstructor::getOwnPropertySlot):
58062 (JSC::DateConstructor::getOwnPropertyDescriptor):
58063 * runtime/DateConstructor.h:
58064 (JSC::DateConstructor::createStructure):
58065 * runtime/ErrorPrototype.cpp:
58066 (JSC::ErrorPrototype::ErrorPrototype):
58067 (JSC::ErrorPrototype::getOwnPropertySlot):
58068 (JSC::ErrorPrototype::getOwnPropertyDescriptor):
58069 * runtime/ErrorPrototype.h:
58070 (JSC::ErrorPrototype::createStructure): Standardized these objects
58071 to use static tables for function properties.
58073 * runtime/JSGlobalData.cpp:
58074 (JSC::JSGlobalData::JSGlobalData):
58075 (JSC::JSGlobalData::~JSGlobalData):
58076 * runtime/JSGlobalData.h: Added new tables.
58078 * runtime/JSGlobalObject.cpp:
58079 (JSC::JSGlobalObject::reset):
58080 (JSC::JSGlobalObject::addStaticGlobals):
58081 (JSC::JSGlobalObject::getOwnPropertySlot):
58082 (JSC::JSGlobalObject::getOwnPropertyDescriptor):
58083 * runtime/JSGlobalObject.h:
58084 * runtime/JSGlobalObjectFunctions.cpp:
58085 * runtime/JSGlobalObjectFunctions.h: Changed JSGlobalObject to use a
58086 static table for its global functions. This required uninlining some
58087 things to avoid a circular header dependency. However, those things
58088 probably shouldn't have been inlined in the first place.
58090 Even more global object properties can be made lazy, but that requires
58091 more in-depth changes.
58093 * runtime/MathObject.cpp:
58094 * runtime/NumberConstructor.cpp:
58095 (JSC::NumberConstructor::getOwnPropertySlot):
58096 (JSC::NumberConstructor::getOwnPropertyDescriptor):
58097 * runtime/NumberPrototype.cpp:
58098 (JSC::NumberPrototype::NumberPrototype):
58099 (JSC::NumberPrototype::getOwnPropertySlot):
58100 (JSC::NumberPrototype::getOwnPropertyDescriptor):
58101 * runtime/NumberPrototype.h:
58102 (JSC::NumberPrototype::createStructure):
58103 * runtime/ObjectPrototype.cpp:
58104 (JSC::ObjectPrototype::ObjectPrototype):
58105 (JSC::ObjectPrototype::put):
58106 (JSC::ObjectPrototype::getOwnPropertySlot):
58107 (JSC::ObjectPrototype::getOwnPropertyDescriptor):
58108 * runtime/ObjectPrototype.h:
58109 (JSC::ObjectPrototype::createStructure):
58110 * runtime/RegExpPrototype.cpp:
58111 (JSC::RegExpPrototype::RegExpPrototype):
58112 (JSC::RegExpPrototype::getOwnPropertySlot):
58113 (JSC::RegExpPrototype::getOwnPropertyDescriptor):
58114 * runtime/RegExpPrototype.h:
58115 (JSC::RegExpPrototype::createStructure):
58116 * runtime/StringConstructor.cpp:
58117 (JSC::StringConstructor::StringConstructor):
58118 (JSC::StringConstructor::getOwnPropertySlot):
58119 (JSC::StringConstructor::getOwnPropertyDescriptor):
58120 * runtime/StringConstructor.h:
58121 (JSC::StringConstructor::createStructure): Standardized these objects
58122 to use static tables for function properties.
58124 2011-05-17 Sam Weinig <sam@webkit.org>
58126 Reviewed by Oliver Hunt.
58128 JSGlobalContextRelease should not trigger a synchronous garbage collection
58129 https://bugs.webkit.org/show_bug.cgi?id=60990
58131 * API/JSContextRef.cpp:
58132 Change synchronous call to collectAllGarbage to a call to trigger the
58135 2011-05-16 Oliver Hunt <oliver@apple.com>
58137 Reviewed by Gavin Barraclough.
58139 Reduce code size for inline cache
58140 https://bugs.webkit.org/show_bug.cgi?id=60942
58142 This patch introduces the concept of a "compact" address that
58143 allows individual architectures to control the maximum offset
58144 used for the inline path of get_by_id. This reduces the code
58145 size of get_by_id by 3 bytes on x86 and x86_64 and slightly
58146 improves performance on v8 tests.
58148 * assembler/ARMAssembler.h:
58149 (JSC::ARMAssembler::repatchCompact):
58150 * assembler/ARMv7Assembler.h:
58151 (JSC::ARMv7Assembler::repatchCompact):
58152 * assembler/AbstractMacroAssembler.h:
58153 (JSC::AbstractMacroAssembler::DataLabelCompact::DataLabelCompact):
58154 (JSC::AbstractMacroAssembler::differenceBetween):
58155 (JSC::AbstractMacroAssembler::repatchCompact):
58156 * assembler/CodeLocation.h:
58157 (JSC::CodeLocationDataLabelCompact::CodeLocationDataLabelCompact):
58158 (JSC::CodeLocationCommon::dataLabelCompactAtOffset):
58159 * assembler/LinkBuffer.h:
58160 (JSC::LinkBuffer::locationOf):
58161 * assembler/MIPSAssembler.h:
58162 (JSC::MIPSAssembler::repatchCompact):
58163 * assembler/MacroAssembler.h:
58164 (JSC::MacroAssembler::loadPtrWithCompactAddressOffsetPatch):
58165 * assembler/MacroAssemblerARM.h:
58166 (JSC::MacroAssemblerARM::load32WithCompactAddressOffsetPatch):
58167 * assembler/MacroAssemblerARMv7.h:
58168 (JSC::MacroAssemblerARMv7::load32WithCompactAddressOffsetPatch):
58169 * assembler/MacroAssemblerMIPS.h:
58170 (JSC::MacroAssemblerMIPS::load32WithCompactAddressOffsetPatch):
58171 * assembler/MacroAssemblerSH4.h:
58172 (JSC::MacroAssemblerSH4::load32WithAddressOffsetPatch):
58173 * assembler/MacroAssemblerX86.h:
58174 (JSC::MacroAssemblerX86::repatchCompact):
58175 * assembler/MacroAssemblerX86Common.h:
58176 (JSC::MacroAssemblerX86Common::loadCompactWithAddressOffsetPatch):
58177 * assembler/MacroAssemblerX86_64.h:
58178 (JSC::MacroAssemblerX86_64::loadPtrWithCompactAddressOffsetPatch):
58179 * assembler/RepatchBuffer.h:
58180 (JSC::RepatchBuffer::repatch):
58181 * assembler/SH4Assembler.h:
58182 (JSC::SH4Assembler::repatchCompact):
58183 * assembler/X86Assembler.h:
58184 (JSC::X86Assembler::movl_mr_disp8):
58185 (JSC::X86Assembler::movq_mr_disp8):
58186 (JSC::X86Assembler::repatchCompact):
58187 (JSC::X86Assembler::setInt8):
58188 (JSC::X86Assembler::X86InstructionFormatter::oneByteOp_disp8):
58189 (JSC::X86Assembler::X86InstructionFormatter::oneByteOp64_disp8):
58190 (JSC::X86Assembler::X86InstructionFormatter::memoryModRM):
58192 * jit/JITPropertyAccess.cpp:
58193 (JSC::JIT::compileGetByIdHotPath):
58194 (JSC::JIT::emit_op_put_by_id):
58195 (JSC::JIT::patchGetByIdSelf):
58196 * jit/JITPropertyAccess32_64.cpp:
58197 (JSC::JIT::compileGetByIdHotPath):
58198 (JSC::JIT::emit_op_put_by_id):
58199 (JSC::JIT::patchGetByIdSelf):
58200 * jit/JITStubs.cpp:
58201 (JSC::JITThunks::tryCacheGetByID):
58203 2011-05-16 Sheriff Bot <webkit.review.bot@gmail.com>
58205 Unreviewed, rolling out r86653.
58206 http://trac.webkit.org/changeset/86653
58207 https://bugs.webkit.org/show_bug.cgi?id=60944
58209 "Caused regressions on Windows, OSX and EFL" (Requested by
58212 * DerivedSources.make:
58213 * DerivedSources.pro:
58215 * GNUmakefile.list.am:
58216 * JavaScriptCore.exp:
58217 * JavaScriptCore.gypi:
58218 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
58219 * create_hash_table:
58221 (JSC::TypeCounter::operator()):
58222 * interpreter/CallFrame.h:
58223 (JSC::ExecState::arrayTable):
58224 (JSC::ExecState::numberTable):
58225 * runtime/ArrayConstructor.cpp:
58226 (JSC::ArrayConstructor::ArrayConstructor):
58227 * runtime/ArrayConstructor.h:
58228 * runtime/ArrayPrototype.cpp:
58229 (JSC::ArrayPrototype::getOwnPropertySlot):
58230 (JSC::ArrayPrototype::getOwnPropertyDescriptor):
58231 * runtime/ArrayPrototype.h:
58232 * runtime/BooleanPrototype.cpp:
58233 (JSC::BooleanPrototype::BooleanPrototype):
58234 * runtime/BooleanPrototype.h:
58235 * runtime/DateConstructor.cpp:
58236 (JSC::DateConstructor::DateConstructor):
58237 * runtime/DateConstructor.h:
58238 * runtime/ErrorPrototype.cpp:
58239 (JSC::ErrorPrototype::ErrorPrototype):
58240 * runtime/ErrorPrototype.h:
58241 * runtime/JSGlobalData.cpp:
58242 (JSC::JSGlobalData::JSGlobalData):
58243 (JSC::JSGlobalData::~JSGlobalData):
58244 * runtime/JSGlobalData.h:
58245 * runtime/JSGlobalObject.cpp:
58246 (JSC::JSGlobalObject::reset):
58247 * runtime/JSGlobalObject.h:
58248 (JSC::JSGlobalObject::addStaticGlobals):
58249 (JSC::JSGlobalObject::getOwnPropertySlot):
58250 (JSC::JSGlobalObject::getOwnPropertyDescriptor):
58251 * runtime/JSGlobalObjectFunctions.cpp:
58252 (JSC::globalFuncJSCPrint):
58253 * runtime/JSGlobalObjectFunctions.h:
58254 * runtime/MathObject.cpp:
58255 * runtime/NumberConstructor.cpp:
58256 (JSC::NumberConstructor::getOwnPropertySlot):
58257 (JSC::NumberConstructor::getOwnPropertyDescriptor):
58258 * runtime/NumberPrototype.cpp:
58259 (JSC::NumberPrototype::NumberPrototype):
58260 * runtime/NumberPrototype.h:
58261 * runtime/ObjectPrototype.cpp:
58262 (JSC::ObjectPrototype::ObjectPrototype):
58263 (JSC::ObjectPrototype::put):
58264 (JSC::ObjectPrototype::getOwnPropertySlot):
58265 * runtime/ObjectPrototype.h:
58266 * runtime/RegExpPrototype.cpp:
58267 (JSC::RegExpPrototype::RegExpPrototype):
58268 * runtime/RegExpPrototype.h:
58269 * runtime/StringConstructor.cpp:
58270 (JSC::StringConstructor::StringConstructor):
58271 * runtime/StringConstructor.h:
58273 2011-05-16 Geoffrey Garen <ggaren@apple.com>
58275 Reviewed by Geoffrey Garen.
58277 Global object initialization is expensive
58278 https://bugs.webkit.org/show_bug.cgi?id=60933
58280 Changed a bunch of globals to allocate their properties lazily, and changed
58281 the global object to allocate a bunch of its globals lazily.
58283 This reduces the footprint of a global object from 287 objects with 58
58284 functions for 24K to 173 objects with 20 functions for 15K.
58286 Large patch, but it's all mechanical.
58288 * DerivedSources.make:
58289 * JavaScriptCore.exp: Build!
58291 * create_hash_table: Added a special case for fromCharCode, since it uses
58292 a custom "thunk generator".
58295 (JSC::TypeCounter::operator()): Fixed a bug where the type counter would
58296 overcount objects that were owned through more than one mechanism because
58297 it was getting in the way of counting the results for this patch.
58299 * interpreter/CallFrame.h:
58300 (JSC::ExecState::arrayConstructorTable):
58301 (JSC::ExecState::arrayPrototypeTable):
58302 (JSC::ExecState::booleanPrototypeTable):
58303 (JSC::ExecState::dateConstructorTable):
58304 (JSC::ExecState::errorPrototypeTable):
58305 (JSC::ExecState::globalObjectTable):
58306 (JSC::ExecState::numberConstructorTable):
58307 (JSC::ExecState::numberPrototypeTable):
58308 (JSC::ExecState::objectPrototypeTable):
58309 (JSC::ExecState::regExpPrototypeTable):
58310 (JSC::ExecState::stringConstructorTable): Added new tables.
58312 * runtime/ArrayConstructor.cpp:
58313 (JSC::ArrayConstructor::ArrayConstructor):
58314 (JSC::ArrayConstructor::getOwnPropertySlot):
58315 (JSC::ArrayConstructor::getOwnPropertyDescriptor):
58316 * runtime/ArrayConstructor.h:
58317 (JSC::ArrayConstructor::createStructure):
58318 * runtime/ArrayPrototype.cpp:
58319 (JSC::ArrayPrototype::getOwnPropertySlot):
58320 (JSC::ArrayPrototype::getOwnPropertyDescriptor):
58321 * runtime/ArrayPrototype.h:
58322 * runtime/BooleanPrototype.cpp:
58323 (JSC::BooleanPrototype::BooleanPrototype):
58324 (JSC::BooleanPrototype::getOwnPropertySlot):
58325 (JSC::BooleanPrototype::getOwnPropertyDescriptor):
58326 * runtime/BooleanPrototype.h:
58327 (JSC::BooleanPrototype::createStructure):
58328 * runtime/DateConstructor.cpp:
58329 (JSC::DateConstructor::DateConstructor):
58330 (JSC::DateConstructor::getOwnPropertySlot):
58331 (JSC::DateConstructor::getOwnPropertyDescriptor):
58332 * runtime/DateConstructor.h:
58333 (JSC::DateConstructor::createStructure):
58334 * runtime/ErrorPrototype.cpp:
58335 (JSC::ErrorPrototype::ErrorPrototype):
58336 (JSC::ErrorPrototype::getOwnPropertySlot):
58337 (JSC::ErrorPrototype::getOwnPropertyDescriptor):
58338 * runtime/ErrorPrototype.h:
58339 (JSC::ErrorPrototype::createStructure): Standardized these objects
58340 to use static tables for function properties.
58342 * runtime/JSGlobalData.cpp:
58343 (JSC::JSGlobalData::JSGlobalData):
58344 (JSC::JSGlobalData::~JSGlobalData):
58345 * runtime/JSGlobalData.h: Added new tables.
58347 * runtime/JSGlobalObject.cpp:
58348 (JSC::JSGlobalObject::reset):
58349 (JSC::JSGlobalObject::addStaticGlobals):
58350 (JSC::JSGlobalObject::getOwnPropertySlot):
58351 (JSC::JSGlobalObject::getOwnPropertyDescriptor):
58352 * runtime/JSGlobalObject.h:
58353 * runtime/JSGlobalObjectFunctions.cpp:
58354 * runtime/JSGlobalObjectFunctions.h: Changed JSGlobalObject to use a
58355 static table for its global functions. This required uninlining some
58356 things to avoid a circular header dependency. However, those things
58357 probably shouldn't have been inlined in the first place.
58359 Even more global object properties can be made lazy, but that requires
58360 more in-depth changes.
58362 * runtime/MathObject.cpp:
58363 * runtime/NumberConstructor.cpp:
58364 (JSC::NumberConstructor::getOwnPropertySlot):
58365 (JSC::NumberConstructor::getOwnPropertyDescriptor):
58366 * runtime/NumberPrototype.cpp:
58367 (JSC::NumberPrototype::NumberPrototype):
58368 (JSC::NumberPrototype::getOwnPropertySlot):
58369 (JSC::NumberPrototype::getOwnPropertyDescriptor):
58370 * runtime/NumberPrototype.h:
58371 (JSC::NumberPrototype::createStructure):
58372 * runtime/ObjectPrototype.cpp:
58373 (JSC::ObjectPrototype::ObjectPrototype):
58374 (JSC::ObjectPrototype::put):
58375 (JSC::ObjectPrototype::getOwnPropertySlot):
58376 (JSC::ObjectPrototype::getOwnPropertyDescriptor):
58377 * runtime/ObjectPrototype.h:
58378 (JSC::ObjectPrototype::createStructure):
58379 * runtime/RegExpPrototype.cpp:
58380 (JSC::RegExpPrototype::RegExpPrototype):
58381 (JSC::RegExpPrototype::getOwnPropertySlot):
58382 (JSC::RegExpPrototype::getOwnPropertyDescriptor):
58383 * runtime/RegExpPrototype.h:
58384 (JSC::RegExpPrototype::createStructure):
58385 * runtime/StringConstructor.cpp:
58386 (JSC::StringConstructor::StringConstructor):
58387 (JSC::StringConstructor::getOwnPropertySlot):
58388 (JSC::StringConstructor::getOwnPropertyDescriptor):
58389 * runtime/StringConstructor.h:
58390 (JSC::StringConstructor::createStructure): Standardized these objects
58391 to use static tables for function properties.
58393 2011-05-16 David Kilzer <ddkilzer@apple.com>
58395 <http://webkit.org/b/60913> C++ exceptions should not be enabled when building with llvm-gcc-4.2
58396 <rdar://problem/9446430>
58398 Reviewed by Mark Rowe.
58400 * Configurations/Base.xcconfig: Fixed typo.
58402 2011-05-16 Oliver Hunt <oliver@apple.com>
58404 Reviewed by Geoffrey Garen.
58406 JSWeakObjectMap finalisation may occur while gc is in inconsistent state
58407 https://bugs.webkit.org/show_bug.cgi?id=60908
58408 <rdar://problem/9409491>
58410 We need to ensure that we have called all the weak map finalizers while
58411 the global object (and hence global context) is still in a consistent
58412 state. The best way to achieve this is to simply use a weak handle and
58413 finalizer on the global object.
58415 * JavaScriptCore.exp:
58416 * runtime/JSGlobalObject.cpp:
58417 (JSC::JSGlobalObject::WeakMapFinalizer::finalize):
58418 * runtime/JSGlobalObject.h:
58419 (JSC::JSGlobalObject::registerWeakMap):
58421 2011-05-16 Siddharth Mathur <siddharth.mathur@nokia.com>
58423 Reviewed by Laszlo Gombos.
58425 [Qt][WK2][Symbian] Shared memory implementation for Symbian
58426 https://bugs.webkit.org/show_bug.cgi?id=55875
58428 * wtf/Platform.h: Exclude Symbian OS from USE(UNIX_DOMAIN_SOCKETS) users
58430 2011-05-16 Gavin Barraclough <barraclough@apple.com>
58432 Rubber stamped by Geoff Garen.
58434 https://bugs.webkit.org/show_bug.cgi?id=60866
58435 Evaluation order broken for empty alternatives in subpatterns
58437 Reverting https://bugs.webkit.org/show_bug.cgi?id=51395
58439 * yarr/YarrPattern.cpp:
58440 (JSC::Yarr::YarrPatternConstructor::atomParenthesesEnd):
58442 2011-05-15 Gavin Barraclough <barraclough@apple.com>
58444 Reviewed by Geoff Garen & Michael Saboff.
58446 https://bugs.webkit.org/show_bug.cgi?id=60860
58447 Simplify backtracking in YARR JIT
58449 YARR JIT currently performs a single pass of code generation over the pattern,
58450 with special handling to allow the code generation for some backtracking code
58451 out of line. We can simplify things by moving to a common mechanism whereby all
58452 forwards matching code is generated in one pass, and all backtracking code is
58453 generated in another. Backtracking code can be generated in reverse order, to
58454 optimized the common fall-through case.
58456 To make it easier to walk over the pattern, we can first convert to a more
58457 byte-code like format before JIT generating. In time we should unify this with
58458 the YARR interpreter to more closely unify the two.
58460 * yarr/YarrJIT.cpp:
58461 (JSC::Yarr::YarrGenerator::jumpIfNoAvailableInput):
58462 (JSC::Yarr::YarrGenerator::YarrOp::YarrOp):
58463 (JSC::Yarr::YarrGenerator::BacktrackingState::BacktrackingState):
58464 (JSC::Yarr::YarrGenerator::BacktrackingState::append):
58465 (JSC::Yarr::YarrGenerator::BacktrackingState::fallthrough):
58466 (JSC::Yarr::YarrGenerator::BacktrackingState::link):
58467 (JSC::Yarr::YarrGenerator::BacktrackingState::linkTo):
58468 (JSC::Yarr::YarrGenerator::BacktrackingState::takeBacktracksToJumpList):
58469 (JSC::Yarr::YarrGenerator::BacktrackingState::isEmpty):
58470 (JSC::Yarr::YarrGenerator::BacktrackingState::linkDataLabels):
58471 (JSC::Yarr::YarrGenerator::BacktrackingState::ReturnAddressRecord::ReturnAddressRecord):
58472 (JSC::Yarr::YarrGenerator::generateAssertionBOL):
58473 (JSC::Yarr::YarrGenerator::backtrackAssertionBOL):
58474 (JSC::Yarr::YarrGenerator::generateAssertionEOL):
58475 (JSC::Yarr::YarrGenerator::backtrackAssertionEOL):
58476 (JSC::Yarr::YarrGenerator::matchAssertionWordchar):
58477 (JSC::Yarr::YarrGenerator::generateAssertionWordBoundary):
58478 (JSC::Yarr::YarrGenerator::backtrackAssertionWordBoundary):
58479 (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
58480 (JSC::Yarr::YarrGenerator::backtrackPatternCharacterOnce):
58481 (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed):
58482 (JSC::Yarr::YarrGenerator::backtrackPatternCharacterFixed):
58483 (JSC::Yarr::YarrGenerator::generatePatternCharacterGreedy):
58484 (JSC::Yarr::YarrGenerator::backtrackPatternCharacterGreedy):
58485 (JSC::Yarr::YarrGenerator::generatePatternCharacterNonGreedy):
58486 (JSC::Yarr::YarrGenerator::backtrackPatternCharacterNonGreedy):
58487 (JSC::Yarr::YarrGenerator::generateCharacterClassOnce):
58488 (JSC::Yarr::YarrGenerator::backtrackCharacterClassOnce):
58489 (JSC::Yarr::YarrGenerator::generateCharacterClassFixed):
58490 (JSC::Yarr::YarrGenerator::backtrackCharacterClassFixed):
58491 (JSC::Yarr::YarrGenerator::generateCharacterClassGreedy):
58492 (JSC::Yarr::YarrGenerator::backtrackCharacterClassGreedy):
58493 (JSC::Yarr::YarrGenerator::generateCharacterClassNonGreedy):
58494 (JSC::Yarr::YarrGenerator::backtrackCharacterClassNonGreedy):
58495 (JSC::Yarr::YarrGenerator::generateTerm):
58496 (JSC::Yarr::YarrGenerator::backtrackTerm):
58497 (JSC::Yarr::YarrGenerator::generate):
58498 (JSC::Yarr::YarrGenerator::backtrack):
58499 (JSC::Yarr::YarrGenerator::opCompileParenthesesSubpattern):
58500 (JSC::Yarr::YarrGenerator::opCompileParentheticalAssertion):
58501 (JSC::Yarr::YarrGenerator::opCompileAlternative):
58502 (JSC::Yarr::YarrGenerator::opCompileBody):
58503 (JSC::Yarr::YarrGenerator::YarrGenerator):
58504 (JSC::Yarr::YarrGenerator::compile):
58506 2011-05-15 Adam Barth <abarth@webkit.org>
58508 Enable strict PassOwnPtr on Qt. (Build fixes to follow.)
58510 * wtf/PassOwnPtr.h:
58512 2011-05-15 Geoffrey Garen <ggaren@apple.com>
58514 Reviewed by Maciej Stachowiak.
58516 Partial fix for <rdar://problem/9417875> REGRESSION: SunSpider ~17% slower
58517 in browser than on command line
58519 This patch fixes a few issues in generated code that could unreasonably
58520 prolong object lifetimes.
58523 (JSC::Heap::collectAllGarbage): Throw away all function code before doing
58524 a major collection. We want to clear polymorphic caches, since they can
58525 keep alive large object graphs that have gone "stale". For the same reason,
58526 but to a lesser extent, we also want to clear linked functions and other
58529 This has the side-benefit of reducing memory footprint from run-once
58530 functions, and of allowing predictions and caches that have failed to
58533 Eventually, if compilation costs rise far enough, we may want a more
58534 limited strategy for de-specializing code without throwing it away
58535 completely, but this works for now, and it's the simplest solution.
58537 * jit/JITStubs.cpp:
58538 (JSC::JITThunks::hostFunctionStub):
58540 * runtime/JSFunction.cpp: Made the host function stub cache weak --
58541 otherwise it's effectively a memory leak that can seriously fragment the
58544 (JSC::JSFunction::JSFunction):
58545 (JSC::JSFunction::visitChildren): Cleared up some comments that confused
58546 me when working with this code.
58548 2011-05-13 Oliver Hunt <oliver@apple.com>
58550 Reviewed by Geoffrey Garen.
58552 Make GC validation more aggressive
58553 https://bugs.webkit.org/show_bug.cgi?id=60802
58555 This patch makes the checks performed under GC_VALIDATION
58556 much more aggressive, and adds the checks to more places
58557 in order to allow us to catch GC bugs much closer to the
58560 * JavaScriptCore.exp:
58561 * JavaScriptCore.xcodeproj/project.pbxproj:
58562 * debugger/DebuggerActivation.cpp:
58563 (JSC::DebuggerActivation::visitChildren):
58564 * heap/MarkedBlock.cpp:
58565 (JSC::MarkedBlock::MarkedBlock):
58566 * heap/MarkedSpace.cpp:
58567 * runtime/Arguments.cpp:
58568 (JSC::Arguments::visitChildren):
58569 * runtime/Executable.cpp:
58570 (JSC::EvalExecutable::visitChildren):
58571 (JSC::ProgramExecutable::visitChildren):
58572 (JSC::FunctionExecutable::visitChildren):
58573 * runtime/Executable.h:
58574 * runtime/GetterSetter.cpp:
58575 (JSC::GetterSetter::visitChildren):
58576 * runtime/GetterSetter.h:
58577 * runtime/JSAPIValueWrapper.h:
58578 (JSC::JSAPIValueWrapper::createStructure):
58579 (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
58580 * runtime/JSActivation.cpp:
58581 (JSC::JSActivation::visitChildren):
58582 * runtime/JSArray.cpp:
58583 (JSC::JSArray::visitChildren):
58584 * runtime/JSCell.cpp:
58585 (JSC::slowValidateCell):
58586 * runtime/JSCell.h:
58587 (JSC::JSCell::JSCell::unvalidatedStructure):
58588 (JSC::JSCell::JSCell::JSCell):
58589 * runtime/JSFunction.cpp:
58590 (JSC::JSFunction::visitChildren):
58591 * runtime/JSGlobalObject.cpp:
58592 (JSC::JSGlobalObject::visitChildren):
58593 (JSC::slowValidateCell):
58594 * runtime/JSONObject.h:
58595 * runtime/JSObject.cpp:
58596 (JSC::JSObject::visitChildren):
58597 * runtime/JSPropertyNameIterator.cpp:
58598 (JSC::JSPropertyNameIterator::visitChildren):
58599 * runtime/JSPropertyNameIterator.h:
58600 * runtime/JSStaticScopeObject.cpp:
58601 (JSC::JSStaticScopeObject::visitChildren):
58602 * runtime/JSString.h:
58603 (JSC::RopeBuilder::JSString):
58604 * runtime/JSWrapperObject.cpp:
58605 (JSC::JSWrapperObject::visitChildren):
58606 * runtime/NativeErrorConstructor.cpp:
58607 (JSC::NativeErrorConstructor::visitChildren):
58608 * runtime/PropertyMapHashTable.h:
58609 (JSC::PropertyMapEntry::PropertyMapEntry):
58610 * runtime/RegExpObject.cpp:
58611 (JSC::RegExpObject::visitChildren):
58612 * runtime/ScopeChain.cpp:
58613 (JSC::ScopeChainNode::visitChildren):
58614 * runtime/ScopeChain.h:
58615 (JSC::ScopeChainNode::ScopeChainNode):
58616 * runtime/Structure.cpp:
58617 (JSC::Structure::Structure):
58618 (JSC::Structure::addPropertyTransition):
58619 (JSC::Structure::visitChildren):
58620 * runtime/Structure.h:
58621 (JSC::JSCell::classInfo):
58622 * runtime/StructureChain.cpp:
58623 (JSC::StructureChain::visitChildren):
58624 * runtime/StructureChain.h:
58625 * runtime/WriteBarrier.h:
58626 (JSC::validateCell):
58628 (JSC::JSGlobalObject):
58629 (JSC::WriteBarrierBase::set):
58630 (JSC::WriteBarrierBase::setMayBeNull):
58631 (JSC::WriteBarrierBase::setEarlyValue):
58632 (JSC::WriteBarrierBase::get):
58633 (JSC::WriteBarrierBase::operator*):
58634 (JSC::WriteBarrierBase::operator->):
58635 (JSC::WriteBarrierBase::unvalidatedGet):
58636 (JSC::WriteBarrier::WriteBarrier):
58637 * wtf/Assertions.h:
58639 2011-05-13 Oliver Hunt <oliver@apple.com>
58641 Reviewed by Geoffrey Garen.
58643 Make GC validation more aggressive
58644 https://bugs.webkit.org/show_bug.cgi?id=60802
58646 This patch makes the checks performed under GC_VALIDATION
58647 much more aggressive, and adds the checks to more places
58648 in order to allow us to catch GC bugs much closer to the
58651 * JavaScriptCore.exp:
58652 * JavaScriptCore.xcodeproj/project.pbxproj:
58653 * debugger/DebuggerActivation.cpp:
58654 (JSC::DebuggerActivation::visitChildren):
58655 * heap/MarkedBlock.cpp:
58656 (JSC::MarkedBlock::MarkedBlock):
58657 * heap/MarkedSpace.cpp:
58658 * runtime/Arguments.cpp:
58659 (JSC::Arguments::visitChildren):
58660 * runtime/Executable.cpp:
58661 (JSC::EvalExecutable::visitChildren):
58662 (JSC::ProgramExecutable::visitChildren):
58663 (JSC::FunctionExecutable::visitChildren):
58664 * runtime/Executable.h:
58665 * runtime/GetterSetter.cpp:
58666 (JSC::GetterSetter::visitChildren):
58667 * runtime/GetterSetter.h:
58668 * runtime/JSAPIValueWrapper.h:
58669 (JSC::JSAPIValueWrapper::createStructure):
58670 (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
58671 * runtime/JSActivation.cpp:
58672 (JSC::JSActivation::visitChildren):
58673 * runtime/JSArray.cpp:
58674 (JSC::JSArray::visitChildren):
58675 * runtime/JSCell.cpp:
58676 (JSC::slowValidateCell):
58677 * runtime/JSCell.h:
58678 (JSC::JSCell::JSCell::unvalidatedStructure):
58679 (JSC::JSCell::JSCell::JSCell):
58680 * runtime/JSFunction.cpp:
58681 (JSC::JSFunction::visitChildren):
58682 * runtime/JSGlobalObject.cpp:
58683 (JSC::JSGlobalObject::visitChildren):
58684 (JSC::slowValidateCell):
58685 * runtime/JSONObject.h:
58686 * runtime/JSObject.cpp:
58687 (JSC::JSObject::visitChildren):
58688 * runtime/JSPropertyNameIterator.cpp:
58689 (JSC::JSPropertyNameIterator::visitChildren):
58690 * runtime/JSPropertyNameIterator.h:
58691 * runtime/JSStaticScopeObject.cpp:
58692 (JSC::JSStaticScopeObject::visitChildren):
58693 * runtime/JSString.h:
58694 (JSC::RopeBuilder::JSString):
58695 * runtime/JSWrapperObject.cpp:
58696 (JSC::JSWrapperObject::visitChildren):
58697 * runtime/NativeErrorConstructor.cpp:
58698 (JSC::NativeErrorConstructor::visitChildren):
58699 * runtime/PropertyMapHashTable.h:
58700 (JSC::PropertyMapEntry::PropertyMapEntry):
58701 * runtime/RegExpObject.cpp:
58702 (JSC::RegExpObject::visitChildren):
58703 * runtime/ScopeChain.cpp:
58704 (JSC::ScopeChainNode::visitChildren):
58705 * runtime/ScopeChain.h:
58706 (JSC::ScopeChainNode::ScopeChainNode):
58707 * runtime/Structure.cpp:
58708 (JSC::Structure::Structure):
58709 (JSC::Structure::addPropertyTransition):
58710 (JSC::Structure::visitChildren):
58711 * runtime/Structure.h:
58712 (JSC::JSCell::classInfo):
58713 * runtime/StructureChain.cpp:
58714 (JSC::StructureChain::visitChildren):
58715 * runtime/StructureChain.h:
58716 * runtime/WriteBarrier.h:
58717 (JSC::validateCell):
58719 (JSC::JSGlobalObject):
58720 (JSC::WriteBarrierBase::set):
58721 (JSC::WriteBarrierBase::setMayBeNull):
58722 (JSC::WriteBarrierBase::setEarlyValue):
58723 (JSC::WriteBarrierBase::get):
58724 (JSC::WriteBarrierBase::operator*):
58725 (JSC::WriteBarrierBase::operator->):
58726 (JSC::WriteBarrierBase::unvalidatedGet):
58727 (JSC::WriteBarrier::WriteBarrier):
58728 * wtf/Assertions.h:
58730 2011-05-14 Csaba Osztrogonác <ossy@webkit.org>
58732 Unreviewed, rolling out r86469 and r86471, because they made hundreds tests crash on Qt.
58734 Make GC validation more aggressive
58735 https://bugs.webkit.org/show_bug.cgi?id=60802
58737 * JavaScriptCore.exp:
58738 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
58739 * JavaScriptCore.xcodeproj/project.pbxproj:
58740 * debugger/DebuggerActivation.cpp:
58741 (JSC::DebuggerActivation::visitChildren):
58742 * heap/MarkedBlock.cpp:
58743 (JSC::MarkedBlock::MarkedBlock):
58744 * heap/MarkedSpace.cpp:
58745 * runtime/Arguments.cpp:
58746 (JSC::Arguments::visitChildren):
58747 * runtime/Executable.cpp:
58748 (JSC::EvalExecutable::visitChildren):
58749 (JSC::ProgramExecutable::visitChildren):
58750 (JSC::FunctionExecutable::visitChildren):
58751 * runtime/Executable.h:
58752 (JSC::ProgramExecutable::createStructure):
58753 (JSC::FunctionExecutable::createStructure):
58754 * runtime/GetterSetter.cpp:
58755 (JSC::GetterSetter::visitChildren):
58756 * runtime/GetterSetter.h:
58757 (JSC::GetterSetter::createStructure):
58758 * runtime/JSAPIValueWrapper.h:
58759 (JSC::JSAPIValueWrapper::createStructure):
58760 * runtime/JSActivation.cpp:
58761 (JSC::JSActivation::visitChildren):
58762 * runtime/JSArray.cpp:
58763 (JSC::JSArray::visitChildren):
58764 * runtime/JSCell.cpp:
58765 * runtime/JSCell.h:
58766 (JSC::JSCell::JSCell::JSCell):
58767 * runtime/JSFunction.cpp:
58768 (JSC::JSFunction::visitChildren):
58769 * runtime/JSGlobalObject.cpp:
58770 (JSC::JSGlobalObject::visitChildren):
58771 * runtime/JSONObject.h:
58772 (JSC::JSONObject::createStructure):
58773 * runtime/JSObject.cpp:
58774 (JSC::JSObject::visitChildren):
58775 * runtime/JSPropertyNameIterator.cpp:
58776 (JSC::JSPropertyNameIterator::visitChildren):
58777 * runtime/JSPropertyNameIterator.h:
58778 * runtime/JSStaticScopeObject.cpp:
58779 (JSC::JSStaticScopeObject::visitChildren):
58780 * runtime/JSString.h:
58781 (JSC::RopeBuilder::createStructure):
58782 * runtime/JSWrapperObject.cpp:
58783 (JSC::JSWrapperObject::visitChildren):
58784 * runtime/NativeErrorConstructor.cpp:
58785 (JSC::NativeErrorConstructor::visitChildren):
58786 * runtime/PropertyMapHashTable.h:
58787 (JSC::PropertyMapEntry::PropertyMapEntry):
58788 * runtime/RegExpObject.cpp:
58789 (JSC::RegExpObject::visitChildren):
58790 * runtime/ScopeChain.cpp:
58791 (JSC::ScopeChainNode::visitChildren):
58792 * runtime/ScopeChain.h:
58793 (JSC::ScopeChainNode::ScopeChainNode):
58794 * runtime/Structure.cpp:
58795 (JSC::Structure::Structure):
58796 (JSC::Structure::addPropertyTransition):
58797 (JSC::Structure::visitChildren):
58798 * runtime/Structure.h:
58799 (JSC::Structure::createStructure):
58800 (JSC::JSCell::classInfo):
58801 * runtime/StructureChain.cpp:
58802 (JSC::StructureChain::visitChildren):
58803 * runtime/StructureChain.h:
58804 * runtime/WriteBarrier.h:
58805 (JSC::WriteBarrierBase::set):
58806 (JSC::WriteBarrierBase::get):
58807 (JSC::WriteBarrierBase::operator*):
58808 (JSC::WriteBarrierBase::operator->):
58809 (JSC::WriteBarrier::WriteBarrier):
58810 * wtf/Assertions.h:
58812 2011-05-13 Oliver Hunt <oliver@apple.com>
58814 Reviewed by Geoffrey Garen.
58816 Make GC validation more aggressive
58817 https://bugs.webkit.org/show_bug.cgi?id=60802
58819 This patch makes the checks performed under GC_VALIDATION
58820 much more aggressive, and adds the checks to more places
58821 in order to allow us to catch GC bugs much closer to the
58824 * JavaScriptCore.exp:
58825 * JavaScriptCore.xcodeproj/project.pbxproj:
58826 * debugger/DebuggerActivation.cpp:
58827 (JSC::DebuggerActivation::visitChildren):
58828 * heap/MarkedBlock.cpp:
58829 (JSC::MarkedBlock::MarkedBlock):
58830 * heap/MarkedSpace.cpp:
58831 * runtime/Arguments.cpp:
58832 (JSC::Arguments::visitChildren):
58833 * runtime/Executable.cpp:
58834 (JSC::EvalExecutable::visitChildren):
58835 (JSC::ProgramExecutable::visitChildren):
58836 (JSC::FunctionExecutable::visitChildren):
58837 * runtime/Executable.h:
58838 * runtime/GetterSetter.cpp:
58839 (JSC::GetterSetter::visitChildren):
58840 * runtime/GetterSetter.h:
58841 * runtime/JSAPIValueWrapper.h:
58842 (JSC::JSAPIValueWrapper::createStructure):
58843 (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
58844 * runtime/JSActivation.cpp:
58845 (JSC::JSActivation::visitChildren):
58846 * runtime/JSArray.cpp:
58847 (JSC::JSArray::visitChildren):
58848 * runtime/JSCell.cpp:
58849 (JSC::slowValidateCell):
58850 * runtime/JSCell.h:
58851 (JSC::JSCell::JSCell::unvalidatedStructure):
58852 (JSC::JSCell::JSCell::JSCell):
58853 * runtime/JSFunction.cpp:
58854 (JSC::JSFunction::visitChildren):
58855 * runtime/JSGlobalObject.cpp:
58856 (JSC::JSGlobalObject::visitChildren):
58857 (JSC::slowValidateCell):
58858 * runtime/JSONObject.h:
58859 * runtime/JSObject.cpp:
58860 (JSC::JSObject::visitChildren):
58861 * runtime/JSPropertyNameIterator.cpp:
58862 (JSC::JSPropertyNameIterator::visitChildren):
58863 * runtime/JSPropertyNameIterator.h:
58864 * runtime/JSStaticScopeObject.cpp:
58865 (JSC::JSStaticScopeObject::visitChildren):
58866 * runtime/JSString.h:
58867 (JSC::RopeBuilder::JSString):
58868 * runtime/JSWrapperObject.cpp:
58869 (JSC::JSWrapperObject::visitChildren):
58870 * runtime/NativeErrorConstructor.cpp:
58871 (JSC::NativeErrorConstructor::visitChildren):
58872 * runtime/PropertyMapHashTable.h:
58873 (JSC::PropertyMapEntry::PropertyMapEntry):
58874 * runtime/RegExpObject.cpp:
58875 (JSC::RegExpObject::visitChildren):
58876 * runtime/ScopeChain.cpp:
58877 (JSC::ScopeChainNode::visitChildren):
58878 * runtime/ScopeChain.h:
58879 (JSC::ScopeChainNode::ScopeChainNode):
58880 * runtime/Structure.cpp:
58881 (JSC::Structure::Structure):
58882 (JSC::Structure::addPropertyTransition):
58883 (JSC::Structure::visitChildren):
58884 * runtime/Structure.h:
58885 (JSC::JSCell::classInfo):
58886 * runtime/StructureChain.cpp:
58887 (JSC::StructureChain::visitChildren):
58888 * runtime/StructureChain.h:
58889 * runtime/WriteBarrier.h:
58890 (JSC::validateCell):
58892 (JSC::JSGlobalObject):
58893 (JSC::WriteBarrierBase::set):
58894 (JSC::WriteBarrierBase::setMayBeNull):
58895 (JSC::WriteBarrierBase::setEarlyValue):
58896 (JSC::WriteBarrierBase::get):
58897 (JSC::WriteBarrierBase::operator*):
58898 (JSC::WriteBarrierBase::operator->):
58899 (JSC::WriteBarrierBase::unvalidatedGet):
58900 (JSC::WriteBarrier::WriteBarrier):
58901 * wtf/Assertions.h:
58903 2011-05-01 Holger Hans Peter Freyther <holger@moiji-mobile.com>
58905 Reviewed by Steve Block.
58907 [android] OS(ANDROID) does not imply PLATFORM(ANDROID)
58908 https://bugs.webkit.org/show_bug.cgi?id=59888
58910 It is possible to build QtWebKit and others for OS(ANDROID). Let
58911 the buildsystem decide which platform is to be build.
58915 2011-05-12 Maciej Stachowiak <mjs@apple.com>
58917 Reviewed by Darin Adler.
58919 XMLDocumentParserLibxml2 should play nice with strict OwnPtrs
58920 https://bugs.webkit.org/show_bug.cgi?id=59394
58922 This portion of the change introduces a PassTraits template, which
58923 is used to enable takeFirst() to work for a Deque holding OwnPtrs,
58924 and optimize it for a Deque holding RefPtrs. In the future it can
58925 be deployed elsewhere to make our data structures work better with
58926 our smart pointers.
58928 * GNUmakefile.list.am:
58929 * JavaScriptCore.gypi:
58930 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
58931 * JavaScriptCore.xcodeproj/project.pbxproj:
58932 * wtf/CMakeLists.txt:
58934 (WTF::::takeFirst):
58935 * wtf/PassTraits.h: Added.
58936 (WTF::PassTraits::transfer):
58938 2011-05-12 Nikolas Zimmermann <nzimmermann@rim.com>
58942 Revert r86334, it broke the win build. WinCE build is fixed even without this patch. WinCairo remains broken atm, everything else works.
58944 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
58946 2011-05-12 Nikolas Zimmermann <nzimmermann@rim.com>
58950 String operator+ reallocates unnecessarily when concatting > 2 strings
58951 https://bugs.webkit.org/show_bug.cgi?id=58420
58953 Try to fix WinCE/WinCairo linking by exporting three symbols, not sure whether it's correct though. Win worked just fine before.
58955 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
58957 2011-05-12 Nikolas Zimmermann <nzimmermann@rim.com>
58959 Reviewed by Darin Adler.
58961 String operator+ reallocates unnecessarily when concatting > 2 strings
58962 https://bugs.webkit.org/show_bug.cgi?id=58420
58964 Provide a faster String append operator.
58965 Up until now, "String operator+(const String& a, const String& b)" copied String a into a temporary
58966 object, and used a.append(b), which reallocates a new buffer of aLength+bLength. When concatting
58967 N strings using operator+, this leads to N-1 reallocations.
58969 Replace this with a flexible operator+ implementation, that avoids these reallocations.
58970 When concatting a 'String' with any string type (char*, UChar, Vector<char>, String, AtomicString, etc..)
58971 a StringAppend<String, T> object is created, which holds the intermediate string objects, and delays
58972 creation of the final string, until operator String() is invoked.
58974 template<typename T>
58975 StringAppend<String, T> operator+(const String& string1, T string2)
58977 return StringAppend<String, T>(string1, string2);
58980 template<typename U, typename V, typename W>
58981 StringAppend<U, StringAppend<V, W> > operator+(U string1, const StringAppend<V, W>& string2)
58983 return StringAppend<U, StringAppend<V, W> >(string1, string2);
58986 When concatting three strings - "String a, b, c; String result = a + b + c;" following happens:
58987 first a StringAppend<String, String> object is created by operator+(const String& string1, String string2).
58988 Then operator+(String string1, const StringAppend<String, String>& string2) is invoked, which returns
58989 a StringAppend<String, StringAppend<String, String> > object.
58990 Then operator String() is invoked, which allocates a StringImpl object, once, large enough to hold the
58991 final string - it uses tryMakeString provided by StringConcatenate.h under the hoods, which guards us
58992 against too big string allocations, etc.
58994 Note that the second template, defines a recursive way to concat an arbitary number of strings
58995 into a single String with just one allocation.
58997 * GNUmakefile.list.am: Add StringOperators.h to build.
58998 * JavaScriptCore.exp: Export WTF::emptyString(). Remove no longer needed symbols.
58999 * JavaScriptCore.gypi: Add StringOperators.h to build.
59000 * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto.
59001 * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
59002 * wtf/text/AtomicString.h: Pull in StringConcatenate.h at the end of the file.
59003 * wtf/text/StringConcatenate.h: Conditionally include AtomicString.h to avoid a cyclic dependency. Pull in StringOperators.h at the end of the file.
59004 * wtf/text/StringOperators.h: Added. This is never meant to be included directly, including either WTFString.h or AtomicString.h automatically pulls in this file.
59005 (WTF::StringAppend::StringAppend):
59006 (WTF::StringAppend::operator String):
59007 (WTF::StringAppend::operator AtomicString):
59008 (WTF::StringAppend::writeTo):
59009 (WTF::StringAppend::length):
59011 * wtf/text/WTFString.cpp: Remove operator+ implementations that use String::append().
59012 (WTF::emptyString): Add new shared empty string free function.
59013 * wtf/text/WTFString.h: Replace operator+ implementations by StringAppend template solution. Pull in AtomicString.h at the end of the file.
59015 2011-05-12 Philippe Normand <pnormand@igalia.com>
59017 Unreviewed, GTK build fix.
59021 2011-05-12 Keith Kyzivat <keith.kyzivat@nokia.com>
59023 Reviewed by Csaba Osztrogonác.
59025 [Qt] Arm debug build failing on ARMAssembler::debugOffset()
59026 https://bugs.webkit.org/show_bug.cgi?id=60688
59028 Related to svn rev 85523
59030 * assembler/ARMAssembler.h:
59031 (JSC::ARMAssembler::debugOffset):
59033 2011-05-11 Igor Oliveira <igor.oliveira@openbossa.org>
59035 Reviewed by Eric Seidel.
59037 WebKit does not build with GCCE
59038 https://bugs.webkit.org/show_bug.cgi?id=60667
59040 Allow compile WebKit with GCCE
59045 2011-05-11 Adam Barth <abarth@webkit.org>
59047 Reviewed by Eric Seidel.
59049 Enable strict PassOwnPtr on Mac
59050 https://bugs.webkit.org/show_bug.cgi?id=60684
59052 This should build cleanly now.
59054 * wtf/PassOwnPtr.h:
59056 2011-05-11 Oliver Hunt <oliver@apple.com>
59058 Reviewed by Darin Adler.
59060 Protect JSC from WebCore executing JS during JS wrapper finalization
59061 https://bugs.webkit.org/show_bug.cgi?id=60672
59062 <rdar://problem/9350997>
59064 Detect when we're trying to execute JS during GC and prevent the
59065 execution from happening. We also assert that this isn't happening
59066 as it implies incorrect behaviour of an object's destructor.
59068 * JavaScriptCore.exp:
59071 (JSC::Heap::isBusy):
59072 * interpreter/Interpreter.cpp:
59073 (JSC::Interpreter::execute):
59074 (JSC::Interpreter::executeCall):
59075 (JSC::Interpreter::executeConstruct):
59076 * runtime/JSGlobalData.h:
59077 (JSC::JSGlobalData::isCollectorBusy):
59079 2011-05-11 Oliver Hunt <oliver@apple.com>
59081 Reviewed by Gavin Barraclough.
59083 Enable gc mark validation in temporarily in release builds
59084 https://bugs.webkit.org/show_bug.cgi?id=60678
59086 Make it easier to turn the gc mark validation on and off, and
59087 temporarily turn it on for all builds.
59089 * heap/MarkStack.cpp:
59090 * heap/MarkStack.h:
59091 (JSC::MarkStack::append):
59092 (JSC::MarkStack::internalAppend):
59093 * runtime/WriteBarrier.h:
59094 (JSC::MarkStack::appendValues):
59097 2011-05-11 Geoffrey Garen <ggaren@apple.com>
59099 Reviewed by Oliver Hunt.
59101 <rdar://problem/9331651> REGRESSION: RPRVT grows by 1MB / sec @ dvd2blu.com
59103 SunSpider reports no change.
59105 This bug was caused by changing Structure and Executable to being GC
59106 objects, and by a long-standing bug that would thrash the global object
59107 between dictionary and non-dictionary states.
59109 * runtime/BatchedTransitionOptimizer.h:
59110 (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer): Don't
59111 eagerly transition to dictionary -- this can cause pathological dictionary
59112 churn, and it's not necessary, since objects know how to automatically
59113 transition to dictionary when necessary.
59115 * runtime/Executable.cpp:
59116 (JSC::EvalExecutable::compileInternal):
59117 (JSC::ProgramExecutable::compileInternal):
59118 (JSC::FunctionExecutable::compileForCallInternal):
59119 (JSC::FunctionExecutable::compileForConstructInternal): Be sure to report
59120 extra cost from compilation, because it can be quite high. This is especially
59121 important for program code, since DOM timers can repeatedly allocate
59122 program code without allocating any other objects.
59124 * runtime/JSObject.cpp:
59125 (JSC::JSObject::removeDirect): Don't transition to the uncacheable state
59126 if the thing we're trying to remove doesn't exist. This can happen during
59127 compilation, since the compiler needs to ensure that no pre-existing
59128 conflicting definitions exist for certain declarations.
59130 2011-05-11 Oliver Hunt <oliver@apple.com>
59132 Reviewed by Gavin Barraclough.
59134 Make mark stack validation functions do something useful in a release build
59135 https://bugs.webkit.org/show_bug.cgi?id=60645
59137 Turn ASSERTs into actual if(...) CRASH(); statements.
59139 * heap/MarkStack.cpp:
59140 (JSC::MarkStack::validateValue):
59142 2011-05-11 Xan Lopez <xlopez@igalia.com>
59144 Reviewed by Martin Robinson.
59146 Fix copy&paste error in comment.
59148 * jit/JITPropertyAccess.cpp:
59149 (JSC::JIT::stringGetByValStubGenerator): the value is stored in
59152 2011-05-11 Adam Roben <aroben@apple.com>
59154 WinCE build fixes for strict PassOwnPtr
59156 * wtf/unicode/CollatorDefault.cpp:
59157 (WTF::Collator::userDefault): Use adoptPtr.
59159 2011-05-11 Holger Hans Peter Freyther <holger@moiji-mobile.com>
59161 Unreviewed build fix.
59163 [MIPS] Fix compilation of the MIPS JIT
59165 Include the MIPSAssembler.h first to indirectly include
59166 AssemblerBuffer.h before the AbstractMacroAssembler.h. This
59167 order is used for the ARM and X86 MacroAssembler*.h
59169 * assembler/MacroAssemblerMIPS.h:
59171 2011-05-11 Adam Roben <aroben@apple.com>
59173 Turn on strict PassOwnPtr on Windows
59175 Fixes <http://webkit.org/b/60632> Windows should build with strict PassOwnPtr enabled
59177 Reviewed by Adam Barth.
59179 * wtf/PassOwnPtr.h:
59181 2011-05-10 Stephanie Lewis <slewis@apple.com>
59185 Revert accidental JavaScriptCore change in http://trac.webkit.org/changeset/86130
59187 * Configurations/JavaScriptCore.xcconfig:
59189 2011-05-10 Adam Barth <abarth@webkit.org>
59191 Reviewed by David Levin.
59193 Enable strict PassOwnPtr on Chromium
59194 https://bugs.webkit.org/show_bug.cgi?id=60502
59196 Other platforms to follow.
59198 * wtf/PassOwnPtr.h:
59200 2011-05-10 Geoffrey Garen <ggaren@apple.com>
59202 Reviewed by Darin Adler.
59204 Fixed up some #include dependencies so the WriteBarrier class can actually call Heap::writeBarrier
59205 https://bugs.webkit.org/show_bug.cgi?id=60532
59207 * GNUmakefile.list.am:
59208 * JavaScriptCore.gypi:
59209 * JavaScriptCore.xcodeproj/project.pbxproj: Build!
59211 * heap/Handle.h: Moved HandleTypes to its own header because that's the
59212 WebKit style, and it was necessary to resolve a circular dependency
59213 between Handle.h and WriteBarrier.h.
59216 (JSC::Heap::writeBarrier): Added an inline no-op writeBarrier(), to
59217 verify that all the code is in the right place.
59219 * heap/MarkStack.h: Moved WriteBarrier operations to WriteBarrier.h to
59220 resolve a circular dependency.
59222 * runtime/ArgList.h:
59223 * runtime/JSCell.h: #include WriteBarrier.h since we don't get it for
59226 * runtime/PropertyMapHashTable.h:
59227 (JSC::PropertyTable::PropertyTable): Call the real writeBarrier()
59228 function, now that it exists.
59230 * runtime/SmallStrings.h: Removed a stray #include to resolve a circular
59233 * runtime/WriteBarrier.h:
59234 (JSC::WriteBarrierBase::set):
59235 (JSC::MarkStack::append):
59236 (JSC::MarkStack::appendValues): Updated to match the changes above.
59238 2011-05-10 Oliver Hunt <oliver@apple.com>
59242 * heap/MarkStack.cpp:
59243 (JSC::MarkStack::validateValue):
59245 2011-05-10 Oliver Hunt <oliver@apple.com>
59247 Reviewed by Gavin Barraclough.
59249 Add some aggressive GC validation to debug builds.
59250 https://bugs.webkit.org/show_bug.cgi?id=60601
59252 When assertions are enabled we now do some validity checking
59253 of objects being added to the mark stack.
59255 * bytecode/Instruction.h:
59256 (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::PolymorphicStubInfo):
59257 (JSC::PolymorphicAccessStructureList::visitAggregate):
59258 * heap/MarkStack.cpp:
59259 (JSC::MarkStack::validateSet):
59260 (JSC::MarkStack::validateValue):
59261 * heap/MarkStack.h:
59262 (JSC::MarkStack::appendValues):
59263 (JSC::MarkStack::append):
59264 (JSC::MarkStack::internalAppend):
59266 2011-05-09 Darin Adler <darin@apple.com>
59268 Reviewed by Oliver Hunt.
59270 http://bugs.webkit.org/show_bug.cgi?id=60509
59271 Wrong type used for return value from strlen
59273 * wtf/FastMalloc.cpp:
59274 (WTF::fastStrDup): Use size_t. Also don't bother checking for failure since
59275 fastMalloc won't return if it fails.
59277 2011-05-09 Adam Barth <abarth@webkit.org>
59279 Reviewed by Eric Seidel.
59281 CSP should block Function constructor
59282 https://bugs.webkit.org/show_bug.cgi?id=60240
59284 When eval is disabled, we need to block the use of the function
59285 constructor. However, the WebCore JSC bindings call the function
59286 constructor directly to create inline event listeners. To support that
59287 use, this patch adds an entrypoint that bypasses the check for whether
59290 * JavaScriptCore.exp:
59291 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
59292 * runtime/FunctionConstructor.cpp:
59293 (JSC::constructFunction):
59294 (JSC::constructFunctionSkippingEvalEnabledCheck):
59295 * runtime/FunctionConstructor.h:
59297 2011-05-09 Adam Roben <aroben@apple.com>
59299 Automatically touch WebKit.idl whenever any other WebKit1 IDL file changes
59301 Fixes <http://webkit.org/b/60468> WebKit.idl needs to be manually touched whenever any other
59302 WebKit1 IDL file changes to avoid build errors
59304 Reviewed by Tim Hatcher.
59306 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
59307 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
59308 Updated for script rename.
59310 * JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py: Removed.
59311 * JavaScriptCore.vcproj/JavaScriptCore/work-around-vs-dependency-tracking-bugs.py: Renamed
59312 from react-to-vsprops-changes.py.
59313 (top level): Moved a constant here from main.
59314 (main): Moved most code from here to react_to_vsprops_changes. Added a call to the new
59315 react_to_webkit1_interface_changes function.
59316 (react_to_vsprops_changes): Moved code here from main. Updated to use the
59317 TOP_LEVEL_DIRECTORY global. Moved some code from here to mtime_of_newest_file_matching_globa
59318 and touch_if_older_than.
59319 (react_to_webkit1_interface_changes): Added. Touches WebKit.idl if any other WebKit1 IDL
59321 (mtime_of_newest_file_matching_glob): Added. Code came from main.
59322 (touch_if_older_than): Added. Code came from main.
59324 2011-05-08 Jessie Berlin <jberlin@apple.com>
59326 Reviewed by Dan Bernstein.
59328 Make JSRetainPtr work with JSGlobalContextRefs.
59329 https://bugs.webkit.org/show_bug.cgi?id=60452
59331 Add specialized functions for JSRetain and JSRelease when dealing with JSGlobalContextRefs.
59333 * API/JSRetainPtr.h:
59337 2011-05-07 Dawit Alemayehu <adawit@kde.org>
59339 Reviewed by Daniel Bates.
59341 Fix compile with GCC 4.6.0
59342 https://bugs.webkit.org/show_bug.cgi?id=60380
59344 Remove unused local variable from code.
59346 * runtime/StringPrototype.cpp:
59347 (JSC::stringProtoFuncMatch):
59349 2011-05-06 Alexis Menard <alexis.menard@openbossa.org>
59351 Unreviewed build fix with gcc 4.6.0 on linux and c++0x support.
59353 std::tr1::has_trivial_constructor is in <tr1/memory>.
59355 * wtf/TypeTraits.h:
59357 2011-05-05 Jay Civelli <jcivelli@chromium.org>
59359 Reviewed by Adam Barth.
59361 Added convenience methods to convert from a byte to hex ASCII digit
59362 characters and vice-versa.
59363 https://bugs.webkit.org/show_bug.cgi?id=59834
59365 * wtf/ASCIICType.h:
59366 (WTF::toASCIIHexValue):
59367 (WTF::lowerNibbleToASCIIHexDigit):
59368 (WTF::upperNibbleToASCIIHexDigit):
59370 2011-05-05 Alexis Menard <alexis.menard@openbossa.org>
59372 Reviewed by Benjamin Poulain.
59374 [Qt] Make QtWebKit build when using gcc 4.6.0
59375 https://bugs.webkit.org/show_bug.cgi?id=60265
59377 If QtWebKit is compiled with gcc 4.6.0 or later we don't want to deactivate
59378 the c++0x support because it works.
59380 * JavaScriptCore.pro:
59382 2011-05-04 Fridrich Strba <fridrich.strba@bluewin.ch>
59384 Reviewed by Geoffrey Garen.
59386 Port MachineStackMarker.cpp to Windows x64
59387 https://bugs.webkit.org/show_bug.cgi?id=60216
59389 * heap/MachineStackMarker.cpp:
59390 (JSC::getPlatformThreadRegisters): the CONTEXT struct is usable also
59392 (JSC::otherThreadStackPointer): return the Rsp register on Windows x64.
59394 2011-05-04 Fridrich Strba <fridrich.strba@bluewin.ch>
59396 Reviewed by Martin Robinson.
59398 Link libjavascriptcoregtk on Windows with winmm.dll
59399 https://bugs.webkit.org/show_bug.cgi?id=60215
59403 2011-05-04 Tao Bai <michaelbai@chromium.org>
59405 Reviewed by David Kilzer.
59407 Populate touch-icon url to FrameLoaderClient
59408 https://bugs.webkit.org/show_bug.cgi?id=59143
59410 * Configurations/FeatureDefines.xcconfig:
59412 2011-05-03 Geoffrey Garen <ggaren@apple.com>
59414 Reviewed by Darin Adler.
59416 <rdar://problem/9366557> Various crashes due to bad DFG codegen at canalplus.fr
59418 * dfg/DFGSpeculativeJIT.cpp:
59419 (JSC::DFG::SpeculativeJIT::checkArgumentTypes): Removed a stray line of
59420 code that accidentally survived the conversion to a switch statement,
59421 causing a lot of important code not to run most of the time.
59423 Since this is not a trivial finger-picking mistake, I will not call it a
59426 2011-05-04 Adam Roben <aroben@apple.com>
59428 Another attempted build fix
59431 (WTF::OwnPtr::operator==):
59432 (WTF::OwnPtr::operator!=):
59433 * wtf/PassOwnPtr.h:
59434 (WTF::PassOwnPtr::operator==):
59435 (WTF::PassOwnPtr::operator!=):
59436 Added a return statement. And made a tweak based on a suggestion from Anders Carlsson.
59438 2011-05-04 Adam Roben <aroben@apple.com>
59440 Try to fix Leopard, Qt, and probably others
59443 (WTF::OwnPtr::operator==):
59444 (WTF::OwnPtr::operator!=):
59445 * wtf/PassOwnPtr.h:
59446 (WTF::PassOwnPtr::operator==):
59447 (WTF::PassOwnPtr::operator!=):
59448 Try to get the compiler not to instantiate these function templates unnecessarily.
59450 2011-05-03 Adam Roben <aroben@apple.com>
59452 Disallow equality comparisons between [Pass]OwnPtrs
59454 If you have two OwnPtrs that are equal, you've already lost. (Unless you're doing something
59455 really sneaky, in which case you should stop!)
59457 Fixes <http://webkit.org/b/60053> Testing OwnPtrs for equality should cause a compiler error
59459 Reviewed by Anders Carlsson and Antti Koivisto.
59462 (WTF::OwnPtr::operator==):
59463 (WTF::OwnPtr::operator!=):
59464 * wtf/PassOwnPtr.h:
59465 (WTF::PassOwnPtr::operator==):
59466 (WTF::PassOwnPtr::operator!=):
59467 Added private equality operators that fail to compile when used. (When not used, the
59468 compiler will skip over them because they are function templates.)
59470 2011-05-04 Alexis Menard <alexis.menard@openbossa.org>
59472 Reviewed by Gavin Barraclough.
59474 JITArithmetic.cpp produces a warning on a unused variable.
59475 https://bugs.webkit.org/show_bug.cgi?id=60060
59477 Just properly use what we already have converted.
59479 * jit/JITArithmetic.cpp:
59480 (JSC::JIT::emitSlow_op_add):
59481 (JSC::JIT::emitSlow_op_mul):
59483 2011-05-04 Alexis Menard <alexis.menard@openbossa.org>
59485 Reviewed by Geoffrey Garen.
59487 JITPropertyAccess produces a unused but set variable warning in gcc 4.6.0.
59488 https://bugs.webkit.org/show_bug.cgi?id=60050
59490 This patch fix a compilation warning. The new warning scenario -Wunused-but-set-variable
59491 in gcc 4.6.0 is included in -Wall and therefore stops the compilation when warnings are treated
59492 as errors. The patch introduces a new macro ASSERT_JIT_OFFSET_UNUSED and ASSERT_WITH_MESSAGE_UNUSED
59493 which copy the idea of ASSERT_UNUSED.
59496 * jit/JITPropertyAccess.cpp:
59497 (JSC::JIT::emit_op_method_check):
59498 (JSC::JIT::compileGetByIdHotPath):
59499 (JSC::JIT::emit_op_put_by_id):
59500 * wtf/Assertions.h:
59501 (assertWithMessageUnused):
59503 2011-04-29 Jer Noble <jer.noble@apple.com>
59505 Reviewed by Eric Seidel.
59507 Implement FULLSCREEN_API on Windows, Part 4: Enable it
59508 https://bugs.webkit.org/show_bug.cgi?id=59798
59510 * wtf/Platform.h: Set ENABLE_FULLSCREEN_API on win.
59512 2011-05-03 Alexis Menard <alexis.menard@openbossa.org>
59514 Reviewed by Eric Seidel.
59516 Unused but set variable warning in MacroAssemberX86_64
59517 https://bugs.webkit.org/show_bug.cgi?id=59482
59519 * assembler/MacroAssemblerX86_64.h:
59520 (JSC::MacroAssemblerX86_64::call):
59521 (JSC::MacroAssemblerX86_64::tailRecursiveCall):
59522 (JSC::MacroAssemblerX86_64::makeTailRecursiveCall):
59524 2011-05-03 Oliver Hunt <oliver@apple.com>
59526 Reviewed by Geoffrey Garen.
59528 Make malloc validation useful
59529 https://bugs.webkit.org/show_bug.cgi?id=57502
59531 Reland this patch (rolled out in 82905) without
59532 turning it on by default.
59534 * JavaScriptCore.exp:
59535 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
59536 * wtf/FastMalloc.cpp:
59537 (WTF::tryFastMalloc):
59539 (WTF::tryFastCalloc):
59542 (WTF::tryFastRealloc):
59543 (WTF::fastRealloc):
59544 (WTF::fastMallocSize):
59545 (WTF::TCMalloc_PageHeap::isScavengerSuspended):
59546 (WTF::TCMalloc_PageHeap::scheduleScavenger):
59547 (WTF::TCMalloc_PageHeap::suspendScavenger):
59548 (WTF::TCMalloc_PageHeap::signalScavenger):
59549 (WTF::TCMallocStats::malloc):
59550 (WTF::TCMallocStats::free):
59551 (WTF::TCMallocStats::fastCalloc):
59552 (WTF::TCMallocStats::tryFastCalloc):
59553 (WTF::TCMallocStats::calloc):
59554 (WTF::TCMallocStats::fastRealloc):
59555 (WTF::TCMallocStats::tryFastRealloc):
59556 (WTF::TCMallocStats::realloc):
59557 (WTF::TCMallocStats::fastMallocSize):
59558 * wtf/FastMalloc.h:
59559 (WTF::Internal::fastMallocValidationHeader):
59560 (WTF::Internal::fastMallocValidationSuffix):
59561 (WTF::Internal::fastMallocMatchValidationType):
59562 (WTF::Internal::setFastMallocMatchValidationType):
59563 (WTF::fastMallocMatchValidateFree):
59564 (WTF::fastMallocValidate):
59566 2011-05-03 Xan Lopez <xlopez@igalia.com>
59568 Reviewed by Anders Carlsson.
59570 Compile error with GCC 4.6.0, tries to assign unsigned& to bitfield
59571 https://bugs.webkit.org/show_bug.cgi?id=59261
59573 Use unary '+' to force proper type detection in template arguments
59574 with GCC 4.6.0. See bug report for more details.
59576 * runtime/Structure.cpp:
59577 (JSC::StructureTransitionTable::remove): Use '+' to force precise type detection.
59578 (JSC::StructureTransitionTable::add): ditto.
59579 * runtime/Structure.h:
59580 (JSC::StructureTransitionTable::keyForWeakGCMapFinalizer): ditto.
59582 2011-05-03 Jessie Berlin <jberlin@apple.com>
59584 Rubber-stamped by Adam Roben.
59586 Revert r85550 and r85575.
59588 Variables cannot be exported via the .def file. Instead, they should be annotated with
59591 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
59592 * runtime/Structure.cpp:
59593 (JSC::Structure::materializePropertyMap):
59594 * runtime/Structure.h:
59595 (JSC::Structure::typeInfo):
59596 (JSC::Structure::previousID):
59597 (JSC::Structure::propertyStorageCapacity):
59598 (JSC::Structure::propertyStorageSize):
59599 (JSC::Structure::get):
59600 (JSC::Structure::materializePropertyMapIfNecessary):
59602 2011-05-02 Adam Roben <aroben@apple.com>
59604 Allow implicit conversion from nullptr_t to PassOwnPtr
59606 This makes it a lot easier to write code that just wants a null PassOwnPtr, especially in
59607 strict PassOwnPtr mode.
59609 Fixes <http://webkit.org/b/59964> Implicit conversion from std::nullptr_t to PassOwnPtr
59610 doesn't work, but should
59612 Reviewed by Adam Barth.
59614 * wtf/PassOwnPtr.h:
59615 (WTF::PassOwnPtr::PassOwnPtr): Added a non-explicit constructor that takes a nullptr_t.
59617 * wtf/MessageQueue.h:
59618 (WTF::::waitForMessageFilteredWithTimeout):
59619 (WTF::::tryGetMessage):
59620 Use the new implicit conversion.
59622 2011-05-02 Jessie Berlin <jberlin@apple.com>
59624 Rubber-stamped by Oliver Hunt.
59626 Remove an assertion that Windows was hitting on launch.
59628 * runtime/Structure.cpp:
59629 (JSC::Structure::materializePropertyMap):
59630 * runtime/Structure.h:
59631 (JSC::Structure::typeInfo):
59632 (JSC::Structure::previousID):
59633 (JSC::Structure::propertyStorageCapacity):
59634 (JSC::Structure::propertyStorageSize):
59635 (JSC::Structure::get):
59636 (JSC::Structure::materializePropertyMapIfNecessary):
59638 2011-05-02 Mark Rowe <mrowe@apple.com>
59640 Reviewed by Geoff Garen.
59642 <rdar://problem/9371948> JavaScriptCore should build with GCC 4.2
59644 * Configurations/CompilerVersion.xcconfig:
59646 2011-05-02 Gavin Barraclough <barraclough@apple.com>
59650 * assembler/AbstractMacroAssembler.h:
59651 (JSC::AbstractMacroAssembler::Jump::link):
59652 (JSC::AbstractMacroAssembler::Jump::linkTo):
59654 2011-05-02 Oliver Hunt <oliver@apple.com>
59658 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
59660 2011-05-02 Michael Saboff <msaboff@apple.com>
59662 Reviewed by Geoffrey Garen.
59664 crash in JSC::RegExp::match
59665 https://bugs.webkit.org/show_bug.cgi?id=58922
59667 Cleared chained backtrack data label when linking label even if that
59668 label doesn't chain itself. This is needed so that subsequent
59669 backtrack data labels point to the next outer paren and not within
59672 * yarr/YarrJIT.cpp:
59673 (JSC::Yarr::YarrGenerator::TermGenerationState::linkDataLabelToBacktrackIfExists):
59675 2011-05-02 Geoffrey Garen <ggaren@apple.com>
59677 Reviewed by Oliver Hunt.
59679 Tiny bit of heap cleanup.
59681 * heap/MarkedBlock.h:
59682 (JSC::MarkedBlock::contains): Tightened up an assertion and a comment.
59684 * heap/MarkedSpace.h:
59685 (JSC::MarkedSpace::globalData):
59686 (JSC::MarkedSpace::highWaterMark):
59687 (JSC::MarkedSpace::setHighWaterMark): Moved inlines out of the class
59688 definition, for better clarity.
59690 2011-05-02 Oliver Hunt <oliver@apple.com>
59692 Reviewed by Gavin Barraclough.
59694 Correct marking of interpreter data in mixed mode builds
59695 https://bugs.webkit.org/show_bug.cgi?id=59962
59697 We had a few places in mixed mode builds where we would not
59698 track data used by the interpreter for marking. This patch
59699 corrects the problem and adds a number of assertions to catch
59700 live Structures being collected.
59702 * JavaScriptCore.exp:
59703 * assembler/ARMv7Assembler.h:
59704 (JSC::ARMv7Assembler::ARMInstructionFormatter::debugOffset):
59705 * bytecode/CodeBlock.cpp:
59706 (JSC::CodeBlock::dump):
59707 * bytecode/CodeBlock.h:
59708 (JSC::CodeBlock::addPropertyAccessInstruction):
59709 (JSC::CodeBlock::addGlobalResolveInstruction):
59710 (JSC::CodeBlock::addStructureStubInfo):
59711 (JSC::CodeBlock::addGlobalResolveInfo):
59712 * bytecompiler/BytecodeGenerator.cpp:
59713 (JSC::BytecodeGenerator::emitResolve):
59714 (JSC::BytecodeGenerator::emitResolveWithBase):
59715 (JSC::BytecodeGenerator::emitGetById):
59716 (JSC::BytecodeGenerator::emitPutById):
59717 (JSC::BytecodeGenerator::emitDirectPutById):
59718 * runtime/Structure.cpp:
59719 (JSC::Structure::materializePropertyMap):
59720 * runtime/Structure.h:
59721 (JSC::Structure::typeInfo):
59722 (JSC::Structure::previousID):
59723 (JSC::Structure::propertyStorageCapacity):
59724 (JSC::Structure::propertyStorageSize):
59725 (JSC::Structure::get):
59726 (JSC::Structure::materializePropertyMapIfNecessary):
59728 2011-05-02 Xan Lopez <xlopez@igalia.com>
59730 Reviewed by Alexey Proskuryakov.
59732 Use native NullPtr when using GCC 4.6.0 and C++0x
59733 https://bugs.webkit.org/show_bug.cgi?id=59252
59735 GCC 4.6.0 has nullptr support, use it when possible.
59737 * wtf/NullPtr.cpp: include config.h to pull in Platform.h before
59738 NullPtr.h, since we need the GCC_VERSION_AT_LEAST definition.
59739 * wtf/NullPtr.h: check for GCC >= 4.6.0 and C++0x in order to
59740 use native nullptr.
59742 2011-05-02 Gavin Barraclough <barraclough@apple.com>
59744 Reviewed by Oliver Hunt.
59746 https://bugs.webkit.org/show_bug.cgi?id=59950
59747 Clean up AssemblerBuffer to use a Vector internally.
59749 AssemblerBuffer handles reallocing a byte array itself - stop that.
59751 * assembler/ARMAssembler.cpp:
59752 (JSC::ARMAssembler::executableCopy):
59753 * assembler/AssemblerBuffer.h:
59754 (JSC::AssemblerLabel::AssemblerLabel):
59755 (JSC::AssemblerLabel::labelAtOffset):
59756 (JSC::AssemblerBuffer::AssemblerBuffer):
59757 (JSC::AssemblerBuffer::~AssemblerBuffer):
59758 (JSC::AssemblerBuffer::isAvailable):
59759 (JSC::AssemblerBuffer::ensureSpace):
59760 (JSC::AssemblerBuffer::isAligned):
59761 (JSC::AssemblerBuffer::putIntegral):
59762 (JSC::AssemblerBuffer::putIntegralUnchecked):
59763 (JSC::AssemblerBuffer::putByteUnchecked):
59764 (JSC::AssemblerBuffer::putByte):
59765 (JSC::AssemblerBuffer::putShortUnchecked):
59766 (JSC::AssemblerBuffer::putShort):
59767 (JSC::AssemblerBuffer::putIntUnchecked):
59768 (JSC::AssemblerBuffer::putInt):
59769 (JSC::AssemblerBuffer::putInt64Unchecked):
59770 (JSC::AssemblerBuffer::putInt64):
59771 (JSC::AssemblerBuffer::codeSize):
59772 (JSC::AssemblerBuffer::label):
59773 (JSC::AssemblerBuffer::executableCopy):
59774 (JSC::AssemblerBuffer::rewindToLabel):
59775 (JSC::AssemblerBuffer::debugOffset):
59776 (JSC::AssemblerBuffer::append):
59777 (JSC::AssemblerBuffer::grow):
59778 * assembler/AssemblerBufferWithConstantPool.h:
59779 * assembler/MacroAssemblerX86_64.h:
59780 (JSC::MacroAssemblerX86_64::linkCall):
59781 * assembler/X86Assembler.h:
59782 (JSC::X86Assembler::X86InstructionFormatter::rewindToLabel):
59784 2011-05-02 Jeff Miller <jeffm@apple.com>
59786 Reviewed by Alexy Proskuryakov.
59788 Avoid potential buffer overflow in WTFLog() and WTFLogVerbose()
59789 https://bugs.webkit.org/show_bug.cgi?id=59949
59791 * wtf/Assertions.cpp: Check for 0 or empty format string in WTFLog() and WTFLogVerbose().
59793 2011-05-02 Adam Barth <abarth@webkit.org>
59795 Reviewed by Alexey Proskuryakov.
59797 StringImpl::endsWith has some insane code
59798 https://bugs.webkit.org/show_bug.cgi?id=59900
59800 * wtf/text/StringImpl.cpp:
59801 (WTF::StringImpl::endsWith):
59802 - m_data shadows a member variable of the same name.
59804 2011-05-02 Gabor Loki <loki@webkit.org>
59806 Buildfix for ARM after r85448
59808 * assembler/ARMAssembler.h:
59809 (JSC::ARMAssembler::loadBranchTarget):
59811 2011-05-01 Oliver Hunt <oliver@apple.com>
59813 Reviewed by Gavin Barraclough.
59815 Strict-mode only reserved words not reserved
59816 https://bugs.webkit.org/show_bug.cgi?id=55342
59818 Fix line number tracking when we rollback the lexer.
59820 * parser/JSParser.cpp:
59821 (JSC::JSParser::parseSourceElements):
59823 2011-05-01 Oliver Hunt <oliver@apple.com>
59825 Reviewed by Gavin Barraclough.
59827 ES5 Strict mode does not allow getter and setter for same propId
59828 https://bugs.webkit.org/show_bug.cgi?id=57295
59830 Simplify and correct the logic for strict mode object literals.
59832 * parser/JSParser.cpp:
59833 (JSC::JSParser::parseStrictObjectLiteral):
59835 2011-05-01 Oliver Hunt <oliver@apple.com>
59837 Reviewed by Gavin Barraclough.
59839 Assigning to function identifier under strict should throw
59840 https://bugs.webkit.org/show_bug.cgi?id=59289
59842 Add logic to StaticScopeObject to ensure we don't silently consume
59843 writes to constant properties.
59845 * runtime/JSStaticScopeObject.cpp:
59846 (JSC::JSStaticScopeObject::put):
59848 2011-05-01 Gavin Barraclough <barraclough@apple.com>
59850 Reviewed by Sam Weinig.
59852 https://bugs.webkit.org/show_bug.cgi?id=59903
59853 Use AssemblerLabel throughout Assembler classes, AssemblerBuffer
59855 Creating a lable() into the AssemblerBuffer should return an AssemblerLabel,
59856 not an unsigned int.
59858 * assembler/ARMAssembler.cpp:
59859 (JSC::ARMAssembler::executableCopy):
59860 * assembler/ARMAssembler.h:
59861 (JSC::ARMAssembler::blx):
59862 (JSC::ARMAssembler::label):
59863 (JSC::ARMAssembler::loadBranchTarget):
59864 * assembler/ARMv7Assembler.h:
59865 (JSC::ARMv7Assembler::b):
59866 (JSC::ARMv7Assembler::blx):
59867 (JSC::ARMv7Assembler::bx):
59868 (JSC::ARMv7Assembler::label):
59869 (JSC::ARMv7Assembler::ARMInstructionFormatter::label):
59870 * assembler/AssemblerBuffer.h:
59871 (JSC::AssemblerBuffer::label):
59872 * assembler/AssemblerBufferWithConstantPool.h:
59873 * assembler/MIPSAssembler.h:
59874 (JSC::MIPSAssembler::label):
59875 (JSC::MIPSAssembler::relocateJumps):
59876 * assembler/SH4Assembler.h:
59877 (JSC::SH4Assembler::loadConstant):
59878 (JSC::SH4Assembler::loadConstantUnReusable):
59879 (JSC::SH4Assembler::call):
59880 (JSC::SH4Assembler::jmp):
59881 (JSC::SH4Assembler::jne):
59882 (JSC::SH4Assembler::je):
59883 (JSC::SH4Assembler::label):
59884 (JSC::SH4Assembler::oneShortOp):
59885 * assembler/X86Assembler.h:
59886 (JSC::X86Assembler::call):
59887 (JSC::X86Assembler::jmp_r):
59888 (JSC::X86Assembler::label):
59889 (JSC::X86Assembler::X86InstructionFormatter::immediateRel32):
59890 (JSC::X86Assembler::X86InstructionFormatter::label):
59892 2011-05-01 Adam Barth <abarth@webkit.org>
59894 Reviewed by David Levin.
59896 Enable strict mode for OwnPtr and PassOwnPtr
59897 https://bugs.webkit.org/show_bug.cgi?id=59428
59901 2011-05-01 Patrick Gansterer <paroga@webkit.org>
59903 Reviewed by Adam Barth.
59905 Enable strict OwnPtr for PLATFORM(WIN)
59906 https://bugs.webkit.org/show_bug.cgi?id=59881
59910 2011-05-01 Gavin Barraclough <barraclough@apple.com>
59912 Reviewed by Sam Weinig.
59914 https://bugs.webkit.org/show_bug.cgi?id=59896
59915 Remove JmpSrc/JmpDst types.
59917 The JmpSrc/JmpDst classes predate the MacroAssembler interface. Having these
59918 object be per-assembler in unhelpful, causes unnecessary code duplication,
59919 and prevents the AssemblerBuffer from providing a richer type for labels.
59920 The limited semantic meaning that they did convey is undermined by the manner
59921 in which their meanings have been overloaded (use of JmpSrc for Call, JmpDst
59924 Jumps on ARMv7 have had additional information added to the object via the
59925 ARMv7 JmpSrc. This data should probably be in the instruction stream. This
59926 patch does not fix the problem, and moves the data (ifdefed) to
59927 AbstractMacroAssembler::Jump (which is effectively where it was before!).
59928 This at least closes the hole such that no further data may be added to JmpSrc,
59929 but this is unfortunate, and should be cleaned up.
59931 * assembler/ARMAssembler.h:
59932 (JSC::ARMAssembler::blx):
59933 (JSC::ARMAssembler::label):
59934 (JSC::ARMAssembler::align):
59935 (JSC::ARMAssembler::loadBranchTarget):
59936 (JSC::ARMAssembler::jmp):
59937 (JSC::ARMAssembler::linkPointer):
59938 (JSC::ARMAssembler::linkJump):
59939 (JSC::ARMAssembler::linkCall):
59940 (JSC::ARMAssembler::getRelocatedAddress):
59941 (JSC::ARMAssembler::getDifferenceBetweenLabels):
59942 (JSC::ARMAssembler::getCallReturnOffset):
59943 * assembler/ARMv7Assembler.h:
59944 (JSC::ARMv7Assembler::b):
59945 (JSC::ARMv7Assembler::blx):
59946 (JSC::ARMv7Assembler::bx):
59947 (JSC::ARMv7Assembler::label):
59948 (JSC::ARMv7Assembler::align):
59949 (JSC::ARMv7Assembler::getRelocatedAddress):
59950 (JSC::ARMv7Assembler::getDifferenceBetweenLabels):
59951 (JSC::ARMv7Assembler::getCallReturnOffset):
59952 (JSC::ARMv7Assembler::linkJump):
59953 (JSC::ARMv7Assembler::linkCall):
59954 (JSC::ARMv7Assembler::linkPointer):
59955 * assembler/AbstractMacroAssembler.h:
59956 (JSC::AbstractMacroAssembler::Label::isSet):
59957 (JSC::AbstractMacroAssembler::Call::Call):
59958 (JSC::AbstractMacroAssembler::Jump::Jump):
59959 (JSC::AbstractMacroAssembler::Jump::link):
59960 (JSC::AbstractMacroAssembler::Jump::linkTo):
59961 (JSC::AbstractMacroAssembler::linkPointer):
59962 (JSC::AbstractMacroAssembler::getLinkerAddress):
59963 * assembler/AssemblerBuffer.h:
59964 (JSC::AssemblerLabel::AssemblerLabel):
59965 (JSC::AssemblerLabel::isSet):
59966 * assembler/LinkBuffer.h:
59967 (JSC::LinkBuffer::patch):
59968 * assembler/MIPSAssembler.h:
59969 (JSC::MIPSAssembler::label):
59970 (JSC::MIPSAssembler::align):
59971 (JSC::MIPSAssembler::getRelocatedAddress):
59972 (JSC::MIPSAssembler::getDifferenceBetweenLabels):
59973 (JSC::MIPSAssembler::getCallReturnOffset):
59974 (JSC::MIPSAssembler::linkJump):
59975 (JSC::MIPSAssembler::linkCall):
59976 (JSC::MIPSAssembler::linkPointer):
59977 * assembler/MacroAssemblerARMv7.h:
59978 (JSC::MacroAssemblerARMv7::branchDouble):
59979 (JSC::MacroAssemblerARMv7::branchDoubleZeroOrNaN):
59980 (JSC::MacroAssemblerARMv7::jump):
59981 (JSC::MacroAssemblerARMv7::nearCall):
59982 (JSC::MacroAssemblerARMv7::call):
59983 (JSC::MacroAssemblerARMv7::ret):
59984 (JSC::MacroAssemblerARMv7::tailRecursiveCall):
59985 (JSC::MacroAssemblerARMv7::makeBranch):
59986 * assembler/MacroAssemblerMIPS.h:
59987 (JSC::MacroAssemblerMIPS::nearCall):
59988 (JSC::MacroAssemblerMIPS::call):
59989 (JSC::MacroAssemblerMIPS::tailRecursiveCall):
59990 (JSC::MacroAssemblerMIPS::branchTrue):
59991 (JSC::MacroAssemblerMIPS::branchFalse):
59992 (JSC::MacroAssemblerMIPS::branchEqual):
59993 (JSC::MacroAssemblerMIPS::branchNotEqual):
59994 * assembler/SH4Assembler.h:
59995 (JSC::SH4Assembler::call):
59996 (JSC::SH4Assembler::jmp):
59997 (JSC::SH4Assembler::jne):
59998 (JSC::SH4Assembler::je):
59999 (JSC::SH4Assembler::label):
60000 (JSC::SH4Assembler::align):
60001 (JSC::SH4Assembler::linkJump):
60002 (JSC::SH4Assembler::linkCall):
60003 (JSC::SH4Assembler::linkPointer):
60004 (JSC::SH4Assembler::getCallReturnOffset):
60005 (JSC::SH4Assembler::getRelocatedAddress):
60006 (JSC::SH4Assembler::getDifferenceBetweenLabels):
60007 (JSC::SH4Assembler::patchPointer):
60008 * assembler/X86Assembler.h:
60009 (JSC::X86Assembler::call):
60010 (JSC::X86Assembler::jmp):
60011 (JSC::X86Assembler::jmp_r):
60012 (JSC::X86Assembler::jne):
60013 (JSC::X86Assembler::jnz):
60014 (JSC::X86Assembler::je):
60015 (JSC::X86Assembler::jz):
60016 (JSC::X86Assembler::jl):
60017 (JSC::X86Assembler::jb):
60018 (JSC::X86Assembler::jle):
60019 (JSC::X86Assembler::jbe):
60020 (JSC::X86Assembler::jge):
60021 (JSC::X86Assembler::jg):
60022 (JSC::X86Assembler::ja):
60023 (JSC::X86Assembler::jae):
60024 (JSC::X86Assembler::jo):
60025 (JSC::X86Assembler::jp):
60026 (JSC::X86Assembler::js):
60027 (JSC::X86Assembler::jCC):
60028 (JSC::X86Assembler::label):
60029 (JSC::X86Assembler::labelFor):
60030 (JSC::X86Assembler::align):
60031 (JSC::X86Assembler::linkJump):
60032 (JSC::X86Assembler::linkCall):
60033 (JSC::X86Assembler::linkPointer):
60034 (JSC::X86Assembler::getCallReturnOffset):
60035 (JSC::X86Assembler::getRelocatedAddress):
60036 (JSC::X86Assembler::getDifferenceBetweenLabels):
60037 (JSC::X86Assembler::rewindToLabel):
60038 (JSC::X86Assembler::X86InstructionFormatter::immediateRel32):
60039 (JSC::X86Assembler::X86InstructionFormatter::rewindToLabel):
60041 (JSC::JIT::privateCompileMainPass):
60043 * jit/JITInlineMethods.h:
60044 (JSC::JIT::atJumpTarget):
60045 (JSC::JIT::emitGetVirtualRegister):
60046 * jit/JITOpcodes.cpp:
60047 (JSC::JIT::emit_op_jmp):
60048 (JSC::JIT::emit_op_jfalse):
60049 (JSC::JIT::emit_op_jeq_null):
60050 (JSC::JIT::emit_op_jneq_null):
60051 (JSC::JIT::emit_op_jneq_ptr):
60052 (JSC::JIT::emit_op_jsr):
60053 (JSC::JIT::emit_op_jtrue):
60054 (JSC::JIT::emit_op_jmp_scopes):
60056 2011-05-01 Chao-ying Fu <fu@mips.com>
60058 Reviewed by Eric Seidel.
60060 Fix MIPS build due to the split of "Condition" enum
60061 https://bugs.webkit.org/show_bug.cgi?id=59407
60063 * assembler/MIPSAssembler.h:
60064 (JSC::MIPSAssembler::debugOffset):
60065 * assembler/MacroAssemblerMIPS.h:
60066 (JSC::MacroAssemblerMIPS::branch32):
60067 (JSC::MacroAssemblerMIPS::compare32):
60069 2011-04-30 Adam Barth <abarth@webkit.org>
60071 Reviewed by Adam Barth.
60073 Enable strict OwnPtr for GTK
60074 https://bugs.webkit.org/show_bug.cgi?id=59861
60078 2011-04-30 Gavin Barraclough <barraclough@apple.com>
60082 * assembler/AssemblerBufferWithConstantPool.h:
60084 2011-04-30 Gavin Barraclough <barraclough@apple.com>
60086 Reviewed by Oliver Hunt.
60088 Bug 59869 - AssemblerBuffer cleanup - disambiguate size()
60090 The method size() is called on the AssemblerBuffer both to acquire
60091 the complete size of the code, and to get a position to use as a
60092 label into the code. Instead, add an explicit 'label' method.
60094 * assembler/ARMAssembler.cpp:
60095 (JSC::ARMAssembler::executableCopy):
60096 * assembler/ARMAssembler.h:
60097 (JSC::ARMAssembler::blx):
60098 (JSC::ARMAssembler::codeSize):
60099 (JSC::ARMAssembler::label):
60100 (JSC::ARMAssembler::loadBranchTarget):
60101 * assembler/ARMv7Assembler.h:
60102 (JSC::ARMv7Assembler::b):
60103 (JSC::ARMv7Assembler::blx):
60104 (JSC::ARMv7Assembler::bx):
60105 (JSC::ARMv7Assembler::label):
60106 (JSC::ARMv7Assembler::codeSize):
60107 (JSC::ARMv7Assembler::ARMInstructionFormatter::codeSize):
60108 (JSC::ARMv7Assembler::ARMInstructionFormatter::data):
60109 * assembler/AbstractMacroAssembler.h:
60110 * assembler/AssemblerBuffer.h:
60111 (JSC::AssemblerBuffer::codeSize):
60112 (JSC::AssemblerBuffer::label):
60113 * assembler/AssemblerBufferWithConstantPool.h:
60114 * assembler/LinkBuffer.h:
60115 (JSC::LinkBuffer::LinkBuffer):
60116 (JSC::LinkBuffer::linkCode):
60117 * assembler/MIPSAssembler.h:
60118 (JSC::MIPSAssembler::newJmpSrc):
60119 (JSC::MIPSAssembler::appendJump):
60120 (JSC::MIPSAssembler::label):
60121 (JSC::MIPSAssembler::codeSize):
60122 (JSC::MIPSAssembler::relocateJumps):
60123 * assembler/SH4Assembler.h:
60124 (JSC::SH4Assembler::loadConstant):
60125 (JSC::SH4Assembler::loadConstantUnReusable):
60126 (JSC::SH4Assembler::call):
60127 (JSC::SH4Assembler::jmp):
60128 (JSC::SH4Assembler::jne):
60129 (JSC::SH4Assembler::je):
60130 (JSC::SH4Assembler::label):
60131 (JSC::SH4Assembler::executableCopy):
60132 (JSC::SH4Assembler::oneShortOp):
60133 (JSC::SH4Assembler::codeSize):
60134 * assembler/X86Assembler.h:
60135 (JSC::X86Assembler::call):
60136 (JSC::X86Assembler::jmp_r):
60137 (JSC::X86Assembler::codeSize):
60138 (JSC::X86Assembler::label):
60139 (JSC::X86Assembler::executableCopy):
60140 (JSC::X86Assembler::X86InstructionFormatter::immediateRel32):
60141 (JSC::X86Assembler::X86InstructionFormatter::codeSize):
60142 (JSC::X86Assembler::X86InstructionFormatter::label):
60143 (JSC::X86Assembler::X86InstructionFormatter::executableCopy):
60144 * dfg/DFGJITCompiler.cpp:
60145 (JSC::DFG::JITCompiler::compileFunction):
60147 (JSC::JIT::privateCompile):
60148 * jit/JITOpcodes.cpp:
60149 (JSC::JIT::privateCompileCTIMachineTrampolines):
60150 * jit/JITOpcodes32_64.cpp:
60151 (JSC::JIT::privateCompileCTIMachineTrampolines):
60152 * yarr/YarrJIT.cpp:
60153 (JSC::Yarr::YarrGenerator::compile):
60155 2011-04-29 Adam Barth <abarth@webkit.org>
60157 Attempt to fix the Windows build.
60159 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
60161 2011-04-29 Adam Barth <abarth@webkit.org>
60163 Reviewed by Eric Seidel.
60165 CSP script-src should block eval
60166 https://bugs.webkit.org/show_bug.cgi?id=59850
60168 ggaren recommend a different approach to this patch, essentially
60169 installing a new function for function-eval and changing the AST
60170 representation of operator-eval to call function-eval. However, I'm
60171 not sure that approach is workable because the ASTBuilder doesn't know
60172 about global objects, and there is added complication due to the cache.
60174 This approach is more dynamic, adding a branch in EvalExecutable to
60175 detect whether eval is current disabled in the lexical scope. The spec
60176 is slightly unclear about whether we should return undefined or throw
60177 an exception. I've asked Brandon to clarify the spec, but throwing an
60178 exception seems natural.
60180 * JavaScriptCore.exp:
60181 * runtime/Executable.cpp:
60182 (JSC::EvalExecutable::compileInternal):
60183 * runtime/JSGlobalObject.cpp:
60184 (JSC::JSGlobalObject::disableEval):
60185 * runtime/JSGlobalObject.h:
60186 (JSC::JSGlobalObject::JSGlobalObject):
60187 (JSC::JSGlobalObject::isEvalEnabled):
60189 2011-04-29 Gavin Barraclough <barraclough@apple.com>
60191 Reviewed by Oliver Hunt.
60193 https://bugs.webkit.org/show_bug.cgi?id=59847
60194 Remove linkOffset from LinkBuffer
60196 This is redundant since removal of recompilation for exception info.
60198 * assembler/LinkBuffer.h:
60199 (JSC::LinkBuffer::LinkBuffer):
60200 (JSC::LinkBuffer::linkCode):
60201 * dfg/DFGJITCompiler.cpp:
60202 (JSC::DFG::JITCompiler::compileFunction):
60205 (JSC::JIT::privateCompile):
60207 (JSC::JIT::compile):
60208 (JSC::JIT::compileCTIMachineTrampolines):
60209 (JSC::JIT::compileCTINativeCall):
60210 * jit/JITOpcodes.cpp:
60211 (JSC::JIT::privateCompileCTIMachineTrampolines):
60212 * jit/JITOpcodes32_64.cpp:
60213 (JSC::JIT::privateCompileCTIMachineTrampolines):
60214 (JSC::JIT::privateCompileCTINativeCall):
60215 * jit/JITPropertyAccess.cpp:
60216 (JSC::JIT::stringGetByValStubGenerator):
60217 (JSC::JIT::privateCompilePutByIdTransition):
60218 (JSC::JIT::privateCompilePatchGetArrayLength):
60219 (JSC::JIT::privateCompileGetByIdProto):
60220 (JSC::JIT::privateCompileGetByIdSelfList):
60221 (JSC::JIT::privateCompileGetByIdProtoList):
60222 (JSC::JIT::privateCompileGetByIdChainList):
60223 (JSC::JIT::privateCompileGetByIdChain):
60224 * jit/JITPropertyAccess32_64.cpp:
60225 (JSC::JIT::stringGetByValStubGenerator):
60226 (JSC::JIT::privateCompilePutByIdTransition):
60227 (JSC::JIT::privateCompilePatchGetArrayLength):
60228 (JSC::JIT::privateCompileGetByIdProto):
60229 (JSC::JIT::privateCompileGetByIdSelfList):
60230 (JSC::JIT::privateCompileGetByIdProtoList):
60231 (JSC::JIT::privateCompileGetByIdChainList):
60232 (JSC::JIT::privateCompileGetByIdChain):
60233 * jit/SpecializedThunkJIT.h:
60234 (JSC::SpecializedThunkJIT::finalize):
60235 * yarr/YarrJIT.cpp:
60236 (JSC::Yarr::YarrGenerator::compile):
60238 2011-04-29 Gavin Barraclough <barraclough@apple.com>
60240 Reviewed by Oliver Hunt & Geoff Garen.
60242 https://bugs.webkit.org/show_bug.cgi?id=59221
60243 [RegexFuzz] Regression blocking testing
60245 Okay, so the bug here is that when, in the case of a TypeParentheticalAssertion
60246 node, emitDisjunction recursively calls to itself to emit the nested disjunction
60247 the value of parenthesesInputCountAlreadyChecked is bogus (doesn't take into
60248 account the uncheck that has just taken place).
60250 Also, the special handling given to countToCheck in the case of parenthetical
60251 assertions is nonsense, delete it, along with the isParentheticalAssertion argument.
60253 * yarr/YarrInterpreter.cpp:
60254 (JSC::Yarr::ByteCompiler::emitDisjunction):
60256 2011-04-29 Csaba Osztrogonác <ossy@webkit.org>
60258 Reviewed by Adam Barth.
60260 Enable strict OwnPtr for Qt
60261 https://bugs.webkit.org/show_bug.cgi?id=59667
60265 2011-04-29 Dean Jackson <dino@apple.com>
60267 Reviewed by Simon Fraser.
60269 Add ENABLE macro for WebKitAnimation
60270 https://bugs.webkit.org/show_bug.cgi?id=59729
60272 Add new feature to toggle WebKit Animation API.
60274 * Configurations/FeatureDefines.xcconfig:
60276 2011-04-28 Sam Weinig <sam@webkit.org>
60278 Reviewed by Mark Rowe.
60280 Install testapi.js along side testapi
60281 https://bugs.webkit.org/show_bug.cgi?id=59773
60283 * JavaScriptCore.xcodeproj/project.pbxproj:
60284 Add new build phase to copy testapi.js to install path of testapi
60287 2011-04-28 David Levin <levin@chromium.org>
60289 Reviewed by Adam Barth.
60291 Remove IMAGE_RESIZER related code.
60292 https://bugs.webkit.org/show_bug.cgi?id=59735
60294 * Configurations/FeatureDefines.xcconfig:
60296 2011-04-28 Gavin Barraclough <barraclough@apple.com>
60298 Reviewed by Oliver Hunt.
60300 https://bugs.webkit.org/show_bug.cgi?id=59763
60301 DFG JIT - Unify FPRReg & FPRegisterID
60303 (Following on from GPRReg/RegisterID unification).
60305 * dfg/DFGFPRInfo.h:
60306 (JSC::DFG::FPRInfo::toRegister):
60307 (JSC::DFG::FPRInfo::debugName):
60308 * dfg/DFGGPRInfo.h:
60309 * dfg/DFGJITCodeGenerator.cpp:
60310 (JSC::DFG::JITCodeGenerator::fillDouble):
60311 (JSC::DFG::JITCodeGenerator::checkConsistency):
60312 * dfg/DFGJITCodeGenerator.h:
60313 (JSC::DFG::JITCodeGenerator::boxDouble):
60314 (JSC::DFG::JITCodeGenerator::unboxDouble):
60315 (JSC::DFG::JITCodeGenerator::flushRegisters):
60316 (JSC::DFG::JITCodeGenerator::isFlushed):
60317 (JSC::DFG::JITCodeGenerator::setupTwoStubArgs):
60318 (JSC::DFG::JITCodeGenerator::setupStubArguments):
60319 (JSC::DFG::JITCodeGenerator::callOperation):
60320 (JSC::DFG::GPRResult::lockedResult):
60321 (JSC::DFG::FPRResult::lockedResult):
60322 * dfg/DFGJITCompiler.cpp:
60323 (JSC::DFG::JITCompiler::fillNumericToDouble):
60324 (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):
60325 (JSC::DFG::JITCompiler::compileFunction):
60326 * dfg/DFGJITCompiler.h:
60328 * dfg/DFGNonSpeculativeJIT.cpp:
60329 (JSC::DFG::EntryLocation::EntryLocation):
60330 (JSC::DFG::NonSpeculativeJIT::valueToNumber):
60331 (JSC::DFG::NonSpeculativeJIT::valueToInt32):
60332 (JSC::DFG::NonSpeculativeJIT::numberToInt32):
60333 (JSC::DFG::NonSpeculativeJIT::compile):
60334 * dfg/DFGNonSpeculativeJIT.h:
60335 (JSC::DFG::NonSpeculativeJIT::silentSpillAllRegisters):
60336 (JSC::DFG::NonSpeculativeJIT::silentFillAllRegisters):
60337 * dfg/DFGRegisterBank.h:
60338 (JSC::DFG::RegisterBank::iterator::regID):
60339 (JSC::DFG::RegisterBank::iterator::debugName):
60340 * dfg/DFGSpeculativeJIT.cpp:
60341 (JSC::DFG::SpeculationCheck::SpeculationCheck):
60342 (JSC::DFG::SpeculativeJIT::compile):
60343 * dfg/DFGSpeculativeJIT.h:
60345 2011-04-28 David Kilzer <ddkilzer@apple.com>
60347 Revert "<http://webkit.org/b/59705> WTF::postTimer() leaks a CFRunLoopTimerRef every time it's called"
60349 This reverts commit r85195. It was crashing DumpRenderTree on Lion.
60351 * wtf/mac/MainThreadMac.mm:
60354 2011-04-28 Adam Barth <abarth@webkit.org>
60356 Reviewed by Eric Seidel.
60359 https://bugs.webkit.org/show_bug.cgi?id=59678
60361 Remove the WML configuration option from the Mac build system.
60363 * Configurations/FeatureDefines.xcconfig:
60365 2011-04-28 Sheriff Bot <webkit.review.bot@gmail.com>
60367 Unreviewed, rolling out r85233 and r85235.
60368 http://trac.webkit.org/changeset/85233
60369 http://trac.webkit.org/changeset/85235
60370 https://bugs.webkit.org/show_bug.cgi?id=59754
60372 Causes issues with jsc. (Requested by dave_levin on #webkit).
60374 * GNUmakefile.list.am:
60375 * JavaScriptCore.gypi:
60376 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
60377 * JavaScriptCore.xcodeproj/project.pbxproj:
60378 * jit/ExecutableAllocator.h:
60379 (JSC::ExecutablePool::ExecutablePool):
60380 * parser/SourceProvider.h:
60381 (JSC::SourceProvider::SourceProvider):
60382 * runtime/RegExp.cpp:
60383 (JSC::RegExp::RegExp):
60384 * wtf/CMakeLists.txt:
60385 * wtf/RefCounted.h:
60386 (WTF::RefCountedBase::ref):
60387 (WTF::RefCountedBase::hasOneRef):
60388 (WTF::RefCountedBase::refCount):
60389 (WTF::RefCountedBase::derefBase):
60390 * wtf/SizeLimits.cpp:
60391 * wtf/ThreadRestrictionVerifier.h: Removed.
60392 * wtf/text/CString.h:
60393 (WTF::CStringBuffer::CStringBuffer):
60395 2011-04-28 Gavin Barraclough <barraclough@apple.com>
60397 Reviewed by Oliver Hunt.
60399 Bug 59740 - DFG JIT - Unify GPRReg & RegisterID
60401 Currently we use a mix of enum values throughout the DFG JIT to represent
60402 gpr registers - the RegisterID provided by the MacroAssembler, and the
60403 GPRReg enum giving the sequential register set over which the RegisterBank
60404 allocates. Unify the two.
60406 Patch to unify FPRReg in a similar fashion will follow.
60408 * JavaScriptCore.xcodeproj/project.pbxproj:
60409 * dfg/DFGFPRInfo.h: Added.
60411 (JSC::DFG::FPRBankInfo::toRegister):
60412 (JSC::DFG::FPRBankInfo::toIndex):
60413 * dfg/DFGGPRInfo.h: Added.
60414 (JSC::DFG::GPRInfo::toRegister):
60415 (JSC::DFG::GPRInfo::toIndex):
60416 (JSC::DFG::GPRInfo::debugName):
60417 * dfg/DFGJITCodeGenerator.cpp:
60418 (JSC::DFG::JITCodeGenerator::fillInteger):
60419 (JSC::DFG::JITCodeGenerator::fillDouble):
60420 (JSC::DFG::JITCodeGenerator::fillJSValue):
60421 (JSC::DFG::JITCodeGenerator::dump):
60422 (JSC::DFG::JITCodeGenerator::checkConsistency):
60423 (JSC::DFG::GPRTemporary::GPRTemporary):
60424 (JSC::DFG::FPRTemporary::FPRTemporary):
60425 * dfg/DFGJITCodeGenerator.h:
60426 (JSC::DFG::JITCodeGenerator::boxDouble):
60427 (JSC::DFG::JITCodeGenerator::unboxDouble):
60428 (JSC::DFG::JITCodeGenerator::spill):
60429 (JSC::DFG::JITCodeGenerator::flushRegisters):
60430 (JSC::DFG::JITCodeGenerator::isFlushed):
60431 (JSC::DFG::JITCodeGenerator::bitOp):
60432 (JSC::DFG::JITCodeGenerator::shiftOp):
60433 (JSC::DFG::JITCodeGenerator::setupTwoStubArgs):
60434 (JSC::DFG::JITCodeGenerator::setupStubArguments):
60435 (JSC::DFG::JITCodeGenerator::callOperation):
60436 (JSC::DFG::IntegerOperand::gpr):
60437 (JSC::DFG::DoubleOperand::gpr):
60438 (JSC::DFG::GPRTemporary::gpr):
60439 (JSC::DFG::FPRTemporary::gpr):
60440 (JSC::DFG::GPRResult::lockedResult):
60441 * dfg/DFGJITCompiler.cpp:
60442 (JSC::DFG::JITCompiler::fillNumericToDouble):
60443 (JSC::DFG::JITCompiler::fillInt32ToInteger):
60444 (JSC::DFG::JITCompiler::fillToJS):
60445 (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):
60446 (JSC::DFG::JITCompiler::compileFunction):
60447 (JSC::DFG::JITCompiler::jitAssertIsInt32):
60448 (JSC::DFG::JITCompiler::jitAssertIsJSInt32):
60449 (JSC::DFG::JITCompiler::jitAssertIsJSNumber):
60450 (JSC::DFG::JITCompiler::jitAssertIsJSDouble):
60451 * dfg/DFGJITCompiler.h:
60452 (JSC::DFG::JITCompiler::preserveReturnAddressAfterCall):
60453 (JSC::DFG::JITCompiler::restoreReturnAddressBeforeReturn):
60454 (JSC::DFG::JITCompiler::emitGetFromCallFrameHeaderPtr):
60455 (JSC::DFG::JITCompiler::emitPutToCallFrameHeader):
60456 (JSC::DFG::JITCompiler::emitPutImmediateToCallFrameHeader):
60457 (JSC::DFG::JITCompiler::addressForGlobalVar):
60458 (JSC::DFG::JITCompiler::addressFor):
60459 (JSC::DFG::JITCompiler::tagFor):
60460 (JSC::DFG::JITCompiler::payloadFor):
60461 * dfg/DFGNonSpeculativeJIT.cpp:
60462 (JSC::DFG::EntryLocation::EntryLocation):
60463 (JSC::DFG::NonSpeculativeJIT::valueToNumber):
60464 (JSC::DFG::NonSpeculativeJIT::valueToInt32):
60465 (JSC::DFG::NonSpeculativeJIT::numberToInt32):
60466 (JSC::DFG::NonSpeculativeJIT::compile):
60467 * dfg/DFGNonSpeculativeJIT.h:
60468 (JSC::DFG::NonSpeculativeJIT::silentSpillGPR):
60469 (JSC::DFG::NonSpeculativeJIT::silentSpillFPR):
60470 (JSC::DFG::NonSpeculativeJIT::silentFillGPR):
60471 (JSC::DFG::NonSpeculativeJIT::silentFillFPR):
60472 (JSC::DFG::NonSpeculativeJIT::silentSpillAllRegisters):
60473 (JSC::DFG::NonSpeculativeJIT::silentFillAllRegisters):
60474 * dfg/DFGRegisterBank.h:
60475 (JSC::DFG::RegisterBank::allocate):
60476 (JSC::DFG::RegisterBank::retain):
60477 (JSC::DFG::RegisterBank::release):
60478 (JSC::DFG::RegisterBank::lock):
60479 (JSC::DFG::RegisterBank::unlock):
60480 (JSC::DFG::RegisterBank::isLocked):
60481 (JSC::DFG::RegisterBank::name):
60482 (JSC::DFG::RegisterBank::iterator::name):
60483 (JSC::DFG::RegisterBank::iterator::isLocked):
60484 (JSC::DFG::RegisterBank::iterator::release):
60485 (JSC::DFG::RegisterBank::iterator::gpr):
60486 (JSC::DFG::RegisterBank::iterator::debugName):
60487 (JSC::DFG::RegisterBank::iterator::operator++):
60488 (JSC::DFG::RegisterBank::iterator::operator!=):
60489 (JSC::DFG::RegisterBank::iterator::index):
60490 (JSC::DFG::RegisterBank::iterator::iterator):
60491 (JSC::DFG::RegisterBank::begin):
60492 (JSC::DFG::RegisterBank::end):
60493 (JSC::DFG::RegisterBank::isLockedAtIndex):
60494 (JSC::DFG::RegisterBank::nameAtIndex):
60495 (JSC::DFG::RegisterBank::releaseAtIndex):
60496 (JSC::DFG::RegisterBank::allocateInternal):
60497 (JSC::DFG::RegisterBank::MapEntry::MapEntry):
60498 * dfg/DFGScoreBoard.h:
60499 (JSC::DFG::ScoreBoard::~ScoreBoard):
60500 * dfg/DFGSpeculativeJIT.cpp:
60501 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
60502 (JSC::DFG::SpeculationCheck::SpeculationCheck):
60503 (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
60504 (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
60505 (JSC::DFG::SpeculativeJIT::compile):
60506 (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
60507 (JSC::DFG::SpeculativeJIT::initializeVariableTypes):
60508 * dfg/DFGSpeculativeJIT.h:
60509 (JSC::DFG::SpeculateIntegerOperand::gpr):
60511 2011-04-28 Oliver Hunt <oliver@apple.com>
60513 Reviewed by Gavin Barraclough.
60515 Remove evil addressOfStructure() function
60516 https://bugs.webkit.org/show_bug.cgi?id=59739
60518 Remove the addressOfStructure function from JSCell, and update
60519 callsites to use the same logic as testPrototype()
60521 * jit/JITPropertyAccess.cpp:
60522 (JSC::JIT::privateCompileGetByIdProto):
60523 (JSC::JIT::privateCompileGetByIdProtoList):
60524 * jit/JITPropertyAccess32_64.cpp:
60525 (JSC::JIT::privateCompileGetByIdProto):
60526 (JSC::JIT::privateCompileGetByIdProtoList):
60527 * runtime/JSCell.h:
60529 2011-04-28 Oliver Hunt <oliver@apple.com>
60531 Reviewed by Gavin Barraclough.
60533 Clean up testPrototype()
60534 https://bugs.webkit.org/show_bug.cgi?id=59734
60536 Remove direct pointer to the inside of a GC object and just do
60537 the indirect load manually. Doesn't effect sunspider but does
60538 clean up the code quite a bit, and simplifies the handling of
60541 * jit/JITPropertyAccess.cpp:
60542 (JSC::JIT::testPrototype):
60544 2011-04-28 David Levin <levin@chromium.org>
60548 * wtf/RefCounted.h: Fix inverted ifdef.
60550 2011-04-07 David Levin <levin@chromium.org>
60552 Reviewed by Darin Adler.
60554 Add asserts to RefCounted to make sure ref/deref happens on the right thread.
60555 https://bugs.webkit.org/show_bug.cgi?id=31639
60557 * GNUmakefile.list.am: Added new files to the build.
60558 * JavaScriptCore.gypi: Ditto.
60559 * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto.
60560 * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
60561 * jit/ExecutableAllocator.h:
60562 (JSC::ExecutablePool::ExecutablePool): Turned off checks for this
60563 due to not being able to figure out what was guarding it (bug 58091).
60564 * parser/SourceProvider.h:
60565 (JSC::SourceProvider::SourceProvider): Ditto.
60566 * runtime/RegExp.cpp:
60567 (JSC::RegExp::RegExp): Ditto.
60568 * wtf/CMakeLists.txt: Added new files to the build.
60569 * wtf/ThreadRestrictionVerifier.h: Added.
60570 Everything is done in the header to avoid the issue with exports
60571 that are only useful in debug but still needing to export them.
60572 * wtf/RefCounted.h:
60573 (WTF::RefCountedBase::ref): Added checks using the non thread safe verifier.
60574 and filed bug 58171 about making it stricter.
60575 (WTF::RefCountedBase::hasOneRef): Ditto.
60576 (WTF::RefCountedBase::refCount): Ditto.
60577 (WTF::RefCountedBase::setMutexForVerifier): Expose a way to change the checks to be based
60578 on a mutex. This is in the header to avoid adding more exports from JavaScriptCore.
60579 (WTF::RefCountedBase::deprecatedTurnOffVerifier): Temporary way to turn off verification.
60580 Filed bug 58174 to remove this method.
60581 (WTF::RefCountedBase::derefBase):
60582 * wtf/SizeLimits.cpp: Adjusted the debug size check for RefCounted.
60583 * wtf/text/CString.h:
60584 (WTF::CStringBuffer::CStringBuffer): Turned off checks for this while a fix is being
60585 done in Chromium's test_shell (bug 58093).
60587 2011-04-28 Xan Lopez <xlopez@igalia.com>
60589 Unreviewed attempt to fix the build.
60591 * GNUmakefile.am: add -lpthread.
60593 2011-04-28 Oliver Hunt <oliver@apple.com>
60595 Reviewed by Gavin Barraclough.
60597 Only need a single implementation of testPrototype
60598 https://bugs.webkit.org/show_bug.cgi?id=59724
60600 Remove excess copy of identical testPrototype() code
60602 * jit/JITPropertyAccess.cpp:
60603 (JSC::JIT::testPrototype):
60604 * jit/JITPropertyAccess32_64.cpp:
60606 2011-04-28 Xan Lopez <xlopez@igalia.com>
60608 Reviewed by Martin Robinson.
60610 [Gtk] Split JSC and WebCore builds
60611 https://bugs.webkit.org/show_bug.cgi?id=19428
60613 Build JavaScriptCore as a libtool shared library instead of a
60614 private convenience library.
60616 * GNUmakefile.am: define new jsc library and adapt to new name for
60617 javascriptcore target.
60618 * GNUmakefile.list.am: ditto.
60620 2011-04-28 David Kilzer <ddkilzer@apple.com>
60622 <http://webkit.org/b/59705> WTF::postTimer() leaks a CFRunLoopTimerRef every time it's called
60624 Reviewed by Simon Fraser.
60626 * wtf/mac/MainThreadMac.mm:
60627 (WTF::postTimer): Use RetainPtr to plug the leak.
60629 2011-04-27 Sam Weinig <sam@webkit.org>
60631 Reviewed by David Kilzer.
60633 Add way to install testapi in production builds
60634 https://bugs.webkit.org/show_bug.cgi?id=59674
60636 * Configurations/TestAPI.xcconfig: Copied from Configurations/JavaScriptCore.xcconfig.
60637 Add configuration file for TestAPI. In addition to name, we now specify an install path
60638 and allow SKIP_INSTALL to be overridden by setting FORCE_TOOL_INSTALL.
60640 * JavaScriptCore.xcodeproj/project.pbxproj:
60641 Remove in-project build settings and add missing configuration files. Added missing CompilerVersion.xcconfig
60644 2011-04-27 Adam Barth <abarth@webkit.org>
60646 Reviewed by David Levin.
60648 Enable strict OwnPtrs for Chromium
60649 https://bugs.webkit.org/show_bug.cgi?id=59666
60653 2011-04-27 Oliver Hunt <oliver@apple.com>
60655 Reviewed by Geoffrey Garen.
60657 Add ability to remove keys from weakmap API
60658 https://bugs.webkit.org/show_bug.cgi?id=59645
60660 Add JSWeakObjectMapRemove API
60662 * API/JSWeakObjectMapRefPrivate.cpp:
60663 * API/JSWeakObjectMapRefPrivate.h:
60664 * JavaScriptCore.exp:
60666 2011-04-27 Adam Barth <abarth@webkit.org>
60668 Reviewed by David Levin.
60670 Enable strict mode for OwnPtr
60671 https://bugs.webkit.org/show_bug.cgi?id=59428
60673 This patch enables strict mode for OwnPtr on PLATFORM(MAC) only.
60677 2011-04-27 Steve Block <steveblock@google.com>
60679 Reviewed by David Levin.
60681 Remove Android build system
60682 https://bugs.webkit.org/show_bug.cgi?id=48111
60684 This is to avoid the maintenance burden until the Android port is
60687 * Android.mk: Removed.
60688 * Android.v8.wtf.mk: Removed.
60690 2011-04-27 Mark Rowe <mrowe@apple.com>
60692 Fix 32-bit build after r85036.
60694 * wtf/Platform.h: USE(PLUGIN_HOST_PROCESS) is only true for 64-bit.
60696 2011-04-27 Csaba Osztrogonác <ossy@webkit.org>
60698 Unreviewed buildfix after r85036.
60700 Readd non-dead code.
60702 * wtf/OSAllocatorPosix.cpp:
60703 (WTF::OSAllocator::reserveAndCommit):
60705 2011-04-27 Adam Barth <abarth@webkit.org>
60707 Reviewed by Kenneth Russell.
60709 OwnPtr assignment operator should be private
60710 https://bugs.webkit.org/show_bug.cgi?id=59487
60712 Unfortunately we can't remove the copy constructor because of some
60713 detail about gcc. (The issue is documented in a comment already.)
60717 2011-04-26 Sheriff Bot <webkit.review.bot@gmail.com>
60719 Unreviewed, rolling out r84977.
60720 http://trac.webkit.org/changeset/84977
60721 https://bugs.webkit.org/show_bug.cgi?id=59568
60723 caused crashes on the SL WK2 bots (Requested by jessieberlin
60726 * assembler/MacroAssemblerX86_64.h:
60727 (JSC::MacroAssemblerX86_64::call):
60728 (JSC::MacroAssemblerX86_64::tailRecursiveCall):
60729 (JSC::MacroAssemblerX86_64::makeTailRecursiveCall):
60731 2011-04-26 Kevin Ollivier <kevino@theolliviers.com>
60733 Rubberstamped by Eric Seidel.
60735 Enable waf to be used to build other ports
60736 https://bugs.webkit.org/show_bug.cgi?id=58213
60740 2011-04-26 Sam Weinig <sam@webkit.org>
60742 Reviewed by David Hyatt.
60744 Remove Datagrid from the tree
60745 https://bugs.webkit.org/show_bug.cgi?id=59543
60747 * Configurations/FeatureDefines.xcconfig:
60750 2011-04-26 Adrienne Walker <enne@google.com>
60752 Reviewed by Geoffrey Garen.
60754 Fix incorrect use of OwnPtr<T*> in GCActivityCallback
60755 https://bugs.webkit.org/show_bug.cgi?id=59559
60757 * runtime/GCActivityCallback.h:
60759 2011-04-26 Xan Lopez <xlopez@igalia.com>
60761 Reviewed by Daniel Bates.
60763 Unused but set variable warning in MacroAssembelX86_64
60764 https://bugs.webkit.org/show_bug.cgi?id=59482
60766 * assembler/MacroAssemblerX86_64.h:
60767 (JSC::MacroAssemblerX86_64::call): do not declare the label
60768 variable if we are not going to use it.
60769 (JSC::MacroAssemblerX86_64::tailRecursiveCall): ditto.
60770 (JSC::MacroAssemblerX86_64::makeTailRecursiveCall): ditto.
60772 2011-04-26 Dan Bernstein <mitz@apple.com>
60774 Reviewed by Mark Rowe.
60776 Choose the compiler based on the Xcode version for Snow Leopard debug builds.
60778 * Configurations/Base.xcconfig:
60779 * Configurations/CompilerVersion.xcconfig: Added.
60781 2011-04-25 Geoffrey Garen <ggaren@apple.com>
60783 Reviewed by Oliver Hunt.
60785 Nixed special finalizer handling for WebCore strings
60786 https://bugs.webkit.org/show_bug.cgi?id=59425
60788 SunSpider reports no change.
60790 Not needed anymore, since weak handles have finalizers.
60792 * runtime/JSString.cpp:
60793 (JSC::JSString::resolveRope):
60794 (JSC::JSString::resolveRopeSlowCase):
60795 (JSC::JSString::outOfMemory):
60796 (JSC::JSString::substringFromRope):
60797 (JSC::JSString::replaceCharacter): Updated for removal of union.
60799 * runtime/JSString.h:
60800 (JSC::RopeBuilder::JSString):
60801 (JSC::RopeBuilder::~JSString):
60802 (JSC::RopeBuilder::appendStringInConstruct):
60803 (JSC::RopeBuilder::appendValueInConstructAndIncrementLength): No need for
60804 union or special constructor anymore.
60806 2011-04-26 Gabor Loki <loki@webkit.org>
60808 Reviewed by Csaba Osztrogonác.
60810 Speeding up SVG filters with multicore (SMP) support
60811 https://bugs.webkit.org/show_bug.cgi?id=43903
60813 Some SVG filters execute a huge number of pixel manipulations, which
60814 cannot be sped up by graphics accelerators, since their algorithm is
60815 too complex. Using the power of Symmetric Multi Processing (SMP) we
60816 can split up a task to smaller (data independent) tasks, which can be
60817 executed independently.
60819 The ParallelJobs framework provides a simple way for distributed
60820 programming. The framework is based on WebKit's threading infrastructure,
60821 Open Multi-Processing's (OpenMP) API, and libdispatch API.
60823 * GNUmakefile.list.am:
60824 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
60825 * JavaScriptCore.xcodeproj/project.pbxproj:
60826 * wtf/CMakeLists.txt:
60827 * wtf/ParallelJobs.h: Added.
60828 (WTF::ParallelJobs::ParallelJobs):
60829 (WTF::ParallelJobs::numberOfJobs):
60830 (WTF::ParallelJobs::parameterForJob):
60831 (WTF::ParallelJobs::executeJobs):
60832 * wtf/ParallelJobsGeneric.cpp: Added.
60833 (WTF::ParallelEnvironment::ThreadPrivate::tryLockFor):
60834 (WTF::ParallelEnvironment::ThreadPrivate::executeJob):
60835 (WTF::ParallelEnvironment::ThreadPrivate::waitForFinish):
60836 (WTF::ParallelEnvironment::ThreadPrivate::workerThread):
60837 * wtf/ParallelJobsGeneric.h: Added.
60838 (WTF::ParallelEnvironment::ParallelEnvironment):
60839 (WTF::ParallelEnvironment::numberOfJobs):
60840 (WTF::ParallelEnvironment::parameterForJob):
60841 (WTF::ParallelEnvironment::executeJobs):
60842 (WTF::ParallelEnvironment::ThreadPrivate::ThreadPrivate):
60843 (WTF::ParallelEnvironment::ThreadPrivate::create):
60844 * wtf/ParallelJobsLibdispatch.h: Added.
60845 (WTF::ParallelEnvironment::ParallelEnvironment):
60846 (WTF::ParallelEnvironment::numberOfJobs):
60847 (WTF::ParallelEnvironment::parameterForJob):
60848 (WTF::ParallelEnvironment::executeJobs):
60849 * wtf/ParallelJobsOpenMP.h: Added.
60850 (WTF::ParallelEnvironment::ParallelEnvironment):
60851 (WTF::ParallelEnvironment::numberOfJobs):
60852 (WTF::ParallelEnvironment::parameterForJob):
60853 (WTF::ParallelEnvironment::executeJobs):
60857 2011-04-26 Mihai Parparita <mihaip@chromium.org>
60859 Reviewed by Adam Barth.
60861 Turn off make built-in implicit rules for derived sources makefile
60862 https://bugs.webkit.org/show_bug.cgi?id=59418
60864 We don't use any of make's built-in implicit rules, turning them off
60865 speeds up parsing of the makefile.
60867 * JavaScriptCore.xcodeproj/project.pbxproj:
60868 * gyp/generate-derived-sources.sh:
60870 2011-04-25 Geoffrey Garen <ggaren@apple.com>
60872 Reviewed by Oliver Hunt.
60874 Custom prototypes on DOM objects don't persist after garbage collection
60875 https://bugs.webkit.org/show_bug.cgi?id=59412
60877 SunSpider reports no change.
60879 The hasCustomProperties() check didn't check for a custom prototype.
60881 * runtime/JSObject.h:
60882 (JSC::JSObject::hasCustomProperties): Changed to delegate to Structure
60883 because it is the "truth" about an object's pedigree.
60885 * runtime/Structure.cpp:
60886 (JSC::Structure::Structure):
60887 * runtime/Structure.h:
60888 (JSC::Structure::didTransition): Track whether a Structure has ever
60889 transitioned for any reason. If so, we have to assume that the object
60890 holding it is custom in some way.
60892 2011-04-25 Gavin Barraclough <barraclough@apple.com>
60894 Reviewed by Geoff Garen.
60896 https://bugs.webkit.org/show_bug.cgi?id=59405
60897 DFG JIT - add type speculation for integer & array types, for vars & args.
60899 If a var or argument is used as the base for a GetByVal or PutByVal access
60900 we are speculating that it is of type Array (we only generate code on the
60901 speculative path to perform array accesses). By typing the var or args slot
60902 as Array, and checking on entry to the function (in the case of args), and
60903 each time the local is written to, we can avoid a type check at each point
60904 the array is accessed. This will typically hoist type checks out of loops.
60906 Similarly, any local that is incremented or decremented, or is the input or
60907 output or a bitwise operator, is likely to be an integer. By typing the
60908 local as int32 we can avoid speculation checks on access, and tagging when
60909 writing to the slot. All accesses can become 32bit instead of 64.
60911 * dfg/DFGByteCodeParser.cpp:
60912 (JSC::DFG::ByteCodeParser::set):
60913 (JSC::DFG::ByteCodeParser::predictArray):
60914 (JSC::DFG::ByteCodeParser::predictInt32):
60915 (JSC::DFG::ByteCodeParser::parseBlock):
60917 (JSC::DFG::PredictionSlot::PredictionSlot):
60918 (JSC::DFG::Graph::Graph):
60919 (JSC::DFG::Graph::predict):
60920 (JSC::DFG::Graph::getPrediction):
60921 * dfg/DFGJITCompiler.cpp:
60922 (JSC::DFG::JITCompiler::compileFunction):
60923 * dfg/DFGJITCompiler.h:
60924 (JSC::DFG::JITCompiler::tagFor):
60925 (JSC::DFG::JITCompiler::payloadFor):
60927 * dfg/DFGNonSpeculativeJIT.cpp:
60928 (JSC::DFG::NonSpeculativeJIT::compile):
60929 * dfg/DFGSpeculativeJIT.cpp:
60930 (JSC::DFG::SpeculativeJIT::compile):
60931 (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
60932 (JSC::DFG::SpeculativeJIT::initializeVariableTypes):
60933 * dfg/DFGSpeculativeJIT.h:
60934 * runtime/Executable.cpp:
60935 (JSC::tryDFGCompile):
60937 2011-04-25 David Levin <levin@chromium.org>
60939 Reviewed by James Robinson.
60941 Fix OwnPtr strict mode violation in MessageQueue.h
60942 https://bugs.webkit.org/show_bug.cgi?id=59400
60944 * wtf/MessageQueue.h:
60945 (WTF::::waitForMessage):
60946 (WTF::::waitForMessageFilteredWithTimeout):
60947 (WTF::::tryGetMessage):
60949 2011-04-25 Adam Barth <abarth@webkit.org>
60951 Reviewed by Darin Adler.
60953 JavaScriptCore should play nice strict OwnPtrs
60954 https://bugs.webkit.org/show_bug.cgi?id=59401
60956 * dfg/DFGByteCodeParser.cpp:
60957 (JSC::DFG::ByteCodeParser::parse):
60959 (JSC::TypeCounter::TypeCounter):
60960 * jit/JITStubs.cpp:
60961 (JSC::JITThunks::JITThunks):
60962 * parser/JSParser.cpp:
60963 (JSC::JSParser::Scope::Scope):
60964 * yarr/YarrJIT.cpp:
60965 (JSC::Yarr::YarrGenerator::GenerationState::addParenthesesTail):
60967 2011-04-25 Mark Rowe <mrowe@apple.com>
60971 * wtf/ListHashSet.h:
60973 2011-04-25 Gavin Barraclough <barraclough@apple.com>
60975 Reviewed by Oliver Hunt.
60977 Bug 59370 - DFG JIT - fix leak of BlocksBlocks
60978 (put the blocks immediately into an OwnPtr).
60980 * dfg/DFGByteCodeParser.cpp:
60981 (JSC::DFG::ByteCodeParser::parse):
60983 2011-04-25 James Robinson <jamesr@chromium.org>
60985 Reviewed by David Levin.
60987 Fix strict OwnPtr violations in ListHashSet and RenderLayerCompositor
60988 https://bugs.webkit.org/show_bug.cgi?id=59353
60990 * wtf/ListHashSet.h:
60991 (WTF::::ListHashSet):
60993 2011-04-25 David Levin <levin@chromium.org>
60995 Reviewed by Adam Barth.
60997 Fix PassOwnPtr issues in Structure and JSGlobalData.cpp
60998 https://bugs.webkit.org/show_bug.cgi?id=59347
61000 * runtime/JSGlobalData.cpp:
61001 (JSC::JSGlobalData::JSGlobalData):
61002 * runtime/Structure.cpp:
61003 (JSC::Structure::copyPropertyTable):
61004 (JSC::Structure::createPropertyMap):
61005 * runtime/Structure.h:
61007 2011-04-25 Oliver Hunt <oliver@apple.com>
61009 Reviewed by Geoffrey Garen.
61011 Make ClassInfo required when creating a Structure
61012 https://bugs.webkit.org/show_bug.cgi?id=59340
61014 Add ClassInfo to all those types which currently don't
61015 have it, and add an assertion to Structure::create to
61016 ensure that the provided classInfo is not null.
61018 * runtime/Executable.h:
61019 (JSC::EvalExecutable::createStructure):
61020 (JSC::ProgramExecutable::createStructure):
61021 (JSC::FunctionExecutable::createStructure):
61022 * runtime/GetterSetter.cpp:
61023 * runtime/GetterSetter.h:
61024 (JSC::GetterSetter::createStructure):
61025 * runtime/JSAPIValueWrapper.cpp:
61026 * runtime/JSAPIValueWrapper.h:
61027 (JSC::JSAPIValueWrapper::createStructure):
61028 * runtime/JSCell.cpp:
61029 * runtime/JSCell.h:
61030 * runtime/JSString.cpp:
61031 * runtime/JSString.h:
61032 (JSC::RopeBuilder::createStructure):
61033 * runtime/Structure.h:
61034 (JSC::Structure::create):
61035 (JSC::JSCell::createDummyStructure):
61037 2011-04-25 David Levin <levin@chromium.org>
61039 Reviewed by Adam Barth.
61041 PropertyMapHashTable.h should use adoptPtr instead of implicit conversions to PassRefPtr.
61042 https://bugs.webkit.org/show_bug.cgi?id=59342
61044 This patch is to prepare for the strict OwnPtr hack-a-thon.
61046 * runtime/PropertyMapHashTable.h:
61047 (JSC::PropertyTable::copy):
61049 2011-04-25 Thouraya ANDOLSI <thouraya.andolsi@st.com>
61051 Reviewed by Gavin Barraclough.
61053 Rationalize MacroAssembler branch methods
61054 https://bugs.webkit.org/show_bug.cgi?id=58950
61056 split out the 'Condition' enum into 'RelationalCondition' and 'ResultCondition'
61057 and apply related changes (only for SH4 platforms).
61059 * assembler/MacroAssemblerSH4.cpp:
61060 * assembler/MacroAssemblerSH4.h:
61061 (JSC::MacroAssemblerSH4::compare32):
61062 (JSC::MacroAssemblerSH4::branch32WithUnalignedHalfWords):
61063 (JSC::MacroAssemblerSH4::branchDouble):
61064 (JSC::MacroAssemblerSH4::branch32):
61065 (JSC::MacroAssemblerSH4::branchTest8):
61066 (JSC::MacroAssemblerSH4::branch8):
61067 (JSC::MacroAssemblerSH4::branchTruncateDoubleToInt32):
61068 (JSC::MacroAssemblerSH4::test8):
61069 (JSC::MacroAssemblerSH4::branch16):
61070 (JSC::MacroAssemblerSH4::branchTest32):
61071 (JSC::MacroAssemblerSH4::branchAdd32):
61072 (JSC::MacroAssemblerSH4::branchMul32):
61073 (JSC::MacroAssemblerSH4::branchSub32):
61074 (JSC::MacroAssemblerSH4::branchOr32):
61075 (JSC::MacroAssemblerSH4::branchConvertDoubleToInt32):
61076 (JSC::MacroAssemblerSH4::branchPtrWithPatch):
61077 (JSC::MacroAssemblerSH4::SH4Condition):
61078 * assembler/SH4Assembler.h:
61079 (JSC::SH4Assembler::cmpEqImmR0):
61081 2011-04-25 Adam Barth <abarth@webkit.org>
61083 Reviewed by Eric Seidel.
61085 PropertyMapHashTable should work with strict OwnPtr
61086 https://bugs.webkit.org/show_bug.cgi?id=59337
61088 This patch is in preparation for the strict OwnPtr hack-a-thon.
61090 * runtime/PropertyMapHashTable.h:
61091 (JSC::PropertyTable::PropertyTable):
61092 (JSC::PropertyTable::addDeletedOffset):
61094 2011-04-25 Geoffrey Garen <ggaren@apple.com>
61096 Reviewed by Sam Weinig.
61098 Nixed MarkStack::deprecatedAppend, since it has no clients left.
61100 * heap/MarkStack.h:
61102 2011-04-23 Gavin Barraclough <barraclough@apple.com>
61104 Reviewed by Oliver Hunt.
61106 Bug 59287 - DFG JIT - Handle temporaries as vars, allowing support for ?:
61108 SetLocals to temporaries will only be generated if they are used within other
61109 blocks, due to the SSA based DCE.
61111 * dfg/DFGByteCodeParser.cpp:
61112 (JSC::DFG::ByteCodeParser::ByteCodeParser):
61113 (JSC::DFG::ByteCodeParser::get):
61114 (JSC::DFG::ByteCodeParser::set):
61115 (JSC::DFG::ByteCodeParser::getLocal):
61116 (JSC::DFG::ByteCodeParser::setLocal):
61117 (JSC::DFG::ByteCodeParser::parseBlock):
61118 (JSC::DFG::ByteCodeParser::processPhiStack):
61119 (JSC::DFG::ByteCodeParser::allocateVirtualRegisters):
61120 (JSC::DFG::ByteCodeParser::parse):
61122 (JSC::DFG::BasicBlock::BasicBlock):
61124 2011-04-22 Gavin Barraclough <barraclough@apple.com>
61126 Reviewed by Sam Weinig & Geoff Garen.
61128 Bug 59266 - DFG JIT - Add SSA style DCE
61130 This works by making GetLocal nodes reference SetLocal nodes from prior blocks,
61131 via intermediate Phi nodes. Whenever we add a GetLocal to the graph, also add a
61132 matching child Phi, and add the Phi to a work queue to add references to prior
61133 definitions once we have the full CFG & can determine predecessors. This process
61134 is iterative, inserting new phis into predecessors as necessary.
61136 * dfg/DFGByteCodeParser.cpp:
61137 (JSC::DFG::ByteCodeParser::getVariable):
61138 (JSC::DFG::ByteCodeParser::setVariable):
61139 (JSC::DFG::ByteCodeParser::getArgument):
61140 (JSC::DFG::ByteCodeParser::setArgument):
61141 (JSC::DFG::ByteCodeParser::parseBlock):
61142 (JSC::DFG::ByteCodeParser::processWorkQueue):
61143 (JSC::DFG::ByteCodeParser::allocateVirtualRegisters):
61144 (JSC::DFG::ByteCodeParser::parse):
61145 * dfg/DFGGraph.cpp:
61146 (JSC::DFG::Graph::dump):
61147 (JSC::DFG::Graph::refChildren):
61149 (JSC::DFG::Graph::ref):
61151 (JSC::DFG::Node::ref):
61152 * dfg/DFGNonSpeculativeJIT.cpp:
61153 (JSC::DFG::NonSpeculativeJIT::compile):
61154 * dfg/DFGScoreBoard.h:
61155 (JSC::DFG::ScoreBoard::~ScoreBoard):
61156 (JSC::DFG::ScoreBoard::dump):
61157 * dfg/DFGSpeculativeJIT.cpp:
61158 (JSC::DFG::SpeculativeJIT::compile):
61160 2011-04-22 Vitaly Repeshko <vitalyr@chromium.org>
61162 Reviewed by Adam Barth.
61164 Add missing default constructors for HashMap iterator specializations.
61165 https://bugs.webkit.org/show_bug.cgi?id=59250
61167 * wtf/HashIterators.h:
61169 (WTF::HashTableConstIterator::HashTableConstIterator): Added cast
61170 to help compiler find the function template.
61172 2011-04-22 Gavin Barraclough <barraclough@apple.com>
61174 Reviewed by Sam Weinig.
61176 Bug 59262 - DFG JIT - reduce size of VariableRecord
61178 We never need both the get & set node, only the most recent
61179 (which is always a set, if both exist).
61181 * dfg/DFGByteCodeParser.cpp:
61182 (JSC::DFG::ByteCodeParser::getVariable):
61183 (JSC::DFG::ByteCodeParser::setVariable):
61184 (JSC::DFG::ByteCodeParser::getArgument):
61185 (JSC::DFG::ByteCodeParser::setArgument):
61186 (JSC::DFG::ByteCodeParser::parseBlock):
61188 (JSC::DFG::VariableRecord::VariableRecord):
61190 2011-04-22 Gavin Barraclough <barraclough@apple.com>
61192 Reviewed by Geoffrey Garen.
61194 Bug 59254 - DFG JIT - retain VariableRecords for args/var in all basic blocks,
61195 such that this information is available for DCE. Also, since this enlarges the
61196 size of BasicBlock, make Graph hold a vector of pointers to basic blocks, not a
61199 * dfg/DFGByteCodeParser.cpp:
61200 (JSC::DFG::ByteCodeParser::ByteCodeParser):
61201 (JSC::DFG::ByteCodeParser::get):
61202 (JSC::DFG::ByteCodeParser::set):
61203 (JSC::DFG::ByteCodeParser::getVariable):
61204 (JSC::DFG::ByteCodeParser::setVariable):
61205 (JSC::DFG::ByteCodeParser::getArgument):
61206 (JSC::DFG::ByteCodeParser::setArgument):
61207 (JSC::DFG::ByteCodeParser::parseBlock):
61208 (JSC::DFG::ByteCodeParser::setupPredecessors):
61209 (JSC::DFG::ByteCodeParser::allocateVirtualRegisters):
61210 (JSC::DFG::ByteCodeParser::parse):
61211 * dfg/DFGGraph.cpp:
61212 (JSC::DFG::Graph::dump):
61214 (JSC::DFG::VariableRecord::VariableRecord):
61215 (JSC::DFG::BasicBlock::BasicBlock):
61216 (JSC::DFG::BasicBlock::getBytecodeBegin):
61217 (JSC::DFG::Graph::blockIndexForBytecodeOffset):
61218 (JSC::DFG::Graph::blockForBytecodeOffset):
61219 * dfg/DFGNonSpeculativeJIT.cpp:
61220 (JSC::DFG::NonSpeculativeJIT::compile):
61221 * dfg/DFGSpeculativeJIT.cpp:
61222 (JSC::DFG::SpeculativeJIT::compile):
61223 * dfg/DFGSpeculativeJIT.h:
61224 (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch):
61226 2011-04-22 Gavin Barraclough <barraclough@apple.com>
61230 * dfg/DFGSpeculativeJIT.cpp:
61231 (JSC::DFG::SpeculativeJIT::compile):
61233 2011-04-22 Gavin Barraclough <barraclough@apple.com>
61235 Reviewed by Sam Weinig.
61237 Quick cleanup to SpeculativeJIT/NonSpeculativeJIT compile loop,
61238 move out the call to checkConsistency().
61240 * dfg/DFGNonSpeculativeJIT.cpp:
61241 (JSC::DFG::NonSpeculativeJIT::compile):
61242 * dfg/DFGSpeculativeJIT.cpp:
61243 (JSC::DFG::SpeculativeJIT::compile):
61244 * dfg/DFGSpeculativeJIT.h:
61245 (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
61246 (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
61248 2011-04-21 Vitaly Repeshko <vitalyr@chromium.org>
61250 Reviewed by Adam Barth.
61252 Provide default constructors for HashMap iterators.
61253 https://bugs.webkit.org/show_bug.cgi?id=59151
61255 These will be used to implement an iterator over EventTarget's
61259 (WTF::HashTableConstIteratorAdapter::HashTableConstIteratorAdapter):
61260 (WTF::HashTableIteratorAdapter::HashTableIteratorAdapter):
61262 2011-04-22 Gavin Barraclough <barraclough@apple.com>
61264 Reviewed by Geoff Garen.
61266 Bug 59232 - DFG JIT - Add predecessor links to BasicBlocks
61268 These will be necessary for DCE support.
61269 Also factor allocateVirtualRegisters out into its own method.
61271 * dfg/DFGByteCodeParser.cpp:
61272 (JSC::DFG::ByteCodeParser::setupPredecessors):
61273 (JSC::DFG::ByteCodeParser::allocateVirtualRegisters):
61274 (JSC::DFG::ByteCodeParser::parse):
61276 (JSC::DFG::Graph::blockForBytecodeOffset):
61278 (JSC::DFG::Node::isTerminal):
61280 2011-04-22 Oliver Hunt <oliver@apple.com>
61282 Reviewed by Geoffrey Garen.
61284 Object.create creates uncachable objects
61285 https://bugs.webkit.org/show_bug.cgi?id=59164
61287 Use the prototype object's inheritorID, as we
61288 should always have done
61290 * runtime/JSGlobalObject.cpp:
61291 (JSC::JSGlobalObject::reset):
61292 (JSC::JSGlobalObject::visitChildren):
61293 * runtime/JSGlobalObject.h:
61294 (JSC::JSGlobalObject::nullPrototypeObjectStructure):
61295 * runtime/ObjectConstructor.cpp:
61296 (JSC::objectConstructorCreate):
61298 2011-04-22 Gavin Barraclough <barraclough@apple.com>
61300 Reviewed by Sam Weinig.
61302 Bug 59222 - DFG JIT - don't allocate virtual registers to nodes with no result
61304 We currently allocate virtual registers to nodes which have no result - these are
61305 clearly unused, and may result in us allocating a larger than necessary stack frame.
61307 Encapsulate Node::virtualRegister such that we can ASSERT this is only called on
61308 nodes that have results, and improve the quality of output from the consistency check.
61310 * dfg/DFGByteCodeParser.cpp:
61311 (JSC::DFG::ByteCodeParser::parse):
61312 * dfg/DFGGraph.cpp:
61313 (JSC::DFG::Graph::dump):
61315 (JSC::DFG::Graph::ref):
61316 (JSC::DFG::Graph::deref):
61317 * dfg/DFGJITCodeGenerator.cpp:
61318 (JSC::DFG::JITCodeGenerator::fillInteger):
61319 (JSC::DFG::JITCodeGenerator::fillDouble):
61320 (JSC::DFG::JITCodeGenerator::fillJSValue):
61321 (JSC::DFG::JITCodeGenerator::dump):
61322 (JSC::DFG::JITCodeGenerator::checkConsistency):
61323 * dfg/DFGJITCodeGenerator.h:
61324 (JSC::DFG::JITCodeGenerator::canReuse):
61325 (JSC::DFG::JITCodeGenerator::isFilled):
61326 (JSC::DFG::JITCodeGenerator::isFilledDouble):
61327 (JSC::DFG::JITCodeGenerator::use):
61328 (JSC::DFG::JITCodeGenerator::integerResult):
61329 (JSC::DFG::JITCodeGenerator::noResult):
61330 (JSC::DFG::JITCodeGenerator::cellResult):
61331 (JSC::DFG::JITCodeGenerator::jsValueResult):
61332 (JSC::DFG::JITCodeGenerator::doubleResult):
61333 (JSC::DFG::JITCodeGenerator::initConstantInfo):
61334 * dfg/DFGJITCompiler.cpp:
61335 (JSC::DFG::JITCompiler::fillNumericToDouble):
61336 (JSC::DFG::JITCompiler::fillInt32ToInteger):
61337 (JSC::DFG::JITCompiler::fillToJS):
61338 (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):
61340 (JSC::DFG::Node::Node):
61341 (JSC::DFG::Node::hasResult):
61342 (JSC::DFG::Node::virtualRegister):
61343 (JSC::DFG::Node::setVirtualRegister):
61344 (JSC::DFG::Node::refCount):
61345 (JSC::DFG::Node::ref):
61346 (JSC::DFG::Node::deref):
61347 (JSC::DFG::Node::adjustedRefCount):
61348 * dfg/DFGNonSpeculativeJIT.cpp:
61349 (JSC::DFG::NonSpeculativeJIT::isKnownInteger):
61350 (JSC::DFG::NonSpeculativeJIT::isKnownNumeric):
61351 (JSC::DFG::NonSpeculativeJIT::compile):
61352 * dfg/DFGScoreBoard.h:
61353 (JSC::DFG::ScoreBoard::use):
61354 * dfg/DFGSpeculativeJIT.cpp:
61355 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
61356 (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
61357 (JSC::DFG::SpeculativeJIT::compile):
61359 2011-04-22 Sam Weinig <sam@webkit.org>
61361 Reviewed by Gavin Barraclough and Oliver Hunt.
61363 Arrays should participate in global object forwarding fun
61364 https://bugs.webkit.org/show_bug.cgi?id=59215
61366 * runtime/JSGlobalObject.h:
61367 (JSC::constructEmptyArray):
61368 (JSC::constructArray):
61369 Add variants of constructArray that take a global object.
61371 2011-04-22 Sheriff Bot <webkit.review.bot@gmail.com>
61373 Unreviewed, rolling out r84650 and r84654.
61374 http://trac.webkit.org/changeset/84650
61375 http://trac.webkit.org/changeset/84654
61376 https://bugs.webkit.org/show_bug.cgi?id=59218
61378 Broke Windows build (Requested by bweinstein on #webkit).
61380 * API/JSCallbackObjectFunctions.h:
61382 * JavaScriptCore.exp:
61383 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
61385 (JSC::HandleBase::operator!):
61386 (JSC::HandleBase::operator UnspecifiedBoolType*):
61387 (JSC::HandleTypes::getFromSlot):
61388 * heap/HandleHeap.cpp:
61389 (JSC::HandleHeap::markStrongHandles):
61390 (JSC::HandleHeap::markWeakHandles):
61391 (JSC::HandleHeap::finalizeWeakHandles):
61392 (JSC::HandleHeap::writeBarrier):
61393 (JSC::HandleHeap::protectedGlobalObjectCount):
61394 (JSC::HandleHeap::isValidWeakNode):
61395 * heap/HandleHeap.h:
61396 (JSC::HandleHeap::copyWeak):
61397 (JSC::HandleHeap::makeWeak):
61398 (JSC::HandleHeap::Node::slot):
61399 * heap/HandleStack.cpp:
61400 (JSC::HandleStack::mark):
61401 (JSC::HandleStack::grow):
61402 * heap/HandleStack.h:
61403 (JSC::HandleStack::zapTo):
61404 (JSC::HandleStack::push):
61406 (JSC::HandleHeap::protectedObjectTypeCounts):
61410 (JSC::Strong::set):
61413 * runtime/StructureTransitionTable.h:
61414 (JSC::StructureTransitionTable::singleTransition):
61415 (JSC::StructureTransitionTable::setSingleTransition):
61416 * runtime/WeakGCMap.h:
61417 (JSC::WeakGCMap::add):
61418 (JSC::WeakGCMap::set):
61419 * runtime/WriteBarrier.h:
61421 2011-04-22 Brian Weinstein <bweinstein@apple.com>
61423 Part of Windows build fix from r84650.
61425 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
61427 2011-04-22 Oliver Hunt <oliver@apple.com>
61429 Reviewed by Geoffrey Garen.
61431 Make it harder to use HandleSlot incorrectly
61432 https://bugs.webkit.org/show_bug.cgi?id=59205
61434 Just add a little type fudging to make it harder to
61435 incorrectly assign through a HandleSlot.
61437 * API/JSCallbackObjectFunctions.h:
61439 * JavaScriptCore.exp:
61441 (JSC::HandleBase::operator!):
61442 (JSC::HandleBase::operator UnspecifiedBoolType*):
61443 (JSC::HandleTypes::getFromSlot):
61444 * heap/HandleHeap.cpp:
61445 (JSC::HandleHeap::markStrongHandles):
61446 (JSC::HandleHeap::markWeakHandles):
61447 (JSC::HandleHeap::finalizeWeakHandles):
61448 (JSC::HandleHeap::writeBarrier):
61449 (JSC::HandleHeap::protectedGlobalObjectCount):
61450 (JSC::HandleHeap::isValidWeakNode):
61451 * heap/HandleHeap.h:
61452 (JSC::HandleHeap::copyWeak):
61453 (JSC::HandleHeap::makeWeak):
61454 (JSC::HandleHeap::Node::slot):
61455 * heap/HandleStack.cpp:
61456 (JSC::HandleStack::mark):
61457 (JSC::HandleStack::grow):
61458 * heap/HandleStack.h:
61459 (JSC::HandleStack::zapTo):
61460 (JSC::HandleStack::push):
61462 (JSC::HandleHeap::protectedObjectTypeCounts):
61466 (JSC::Strong::set):
61469 * runtime/StructureTransitionTable.h:
61470 (JSC::StructureTransitionTable::singleTransition):
61471 (JSC::StructureTransitionTable::setSingleTransition):
61472 * runtime/WeakGCMap.h:
61473 (JSC::WeakGCMap::add):
61474 (JSC::WeakGCMap::set):
61475 * runtime/WriteBarrier.h:
61476 (JSC::OpaqueJSValue::toJSValue):
61477 (JSC::OpaqueJSValue::toJSValueRef):
61478 (JSC::OpaqueJSValue::fromJSValue):
61480 2011-04-22 Patrick Gansterer <paroga@webkit.org>
61482 Unreviewed. Build fix for ENABLE(INTERPRETER) after r84556.
61484 * bytecode/CodeBlock.cpp:
61485 (JSC::CodeBlock::visitAggregate):
61487 2011-04-21 Sheriff Bot <webkit.review.bot@gmail.com>
61489 Unreviewed, rolling out r84583.
61490 http://trac.webkit.org/changeset/84583
61491 https://bugs.webkit.org/show_bug.cgi?id=59173
61494 http://trac.webkit.org/export/84593/trunk/LayoutTests/fast/js
61495 /Object-create.html" (Requested by ggaren on #webkit).
61497 * runtime/ObjectConstructor.cpp:
61498 (JSC::objectConstructorCreate):
61500 2011-04-21 Maciej Stachowiak <mjs@apple.com>
61502 Reviewed by Adam Roben.
61504 Add a feature define to allow <details> and <summary> to be disabled
61505 https://bugs.webkit.org/show_bug.cgi?id=59118
61506 <rdar://problem/9257045>
61508 * Configurations/FeatureDefines.xcconfig:
61510 2011-04-21 Oliver Hunt <oliver@apple.com>
61512 Reviewed by Geoffrey Garen.
61514 Object.create creates uncachable objects
61515 https://bugs.webkit.org/show_bug.cgi?id=59164
61517 Use the prototype object's inheritorID, as we
61518 should always have done
61520 * runtime/ObjectConstructor.cpp:
61521 (JSC::objectConstructorCreate):
61523 2011-04-21 Oliver Hunt <oliver@apple.com>
61525 Reviewed by Geoffrey Garen.
61527 Start moving to a general visitor pattern for GC traversal
61528 https://bugs.webkit.org/show_bug.cgi?id=59141
61530 This is just a rename:
61531 markChildren -> visitChildren
61532 markAggregate -> visitAggregate
61533 markStack -> visitor
61534 MarkStack -> typedef'd to SlotVisitor
61536 * API/JSCallbackObject.h:
61537 (JSC::JSCallbackObjectData::visitChildren):
61538 (JSC::JSCallbackObjectData::JSPrivatePropertyMap::visitChildren):
61539 (JSC::JSCallbackObject::visitChildren):
61540 * JavaScriptCore.exp:
61541 * bytecode/CodeBlock.cpp:
61542 (JSC::CodeBlock::visitStructures):
61543 (JSC::EvalCodeCache::visitAggregate):
61544 (JSC::CodeBlock::visitAggregate):
61545 * bytecode/CodeBlock.h:
61546 * bytecode/EvalCodeCache.h:
61547 * bytecode/Instruction.h:
61548 (JSC::PolymorphicAccessStructureList::visitAggregate):
61549 * bytecode/StructureStubInfo.cpp:
61550 (JSC::StructureStubInfo::visitAggregate):
61551 * bytecode/StructureStubInfo.h:
61552 * debugger/DebuggerActivation.cpp:
61553 (JSC::DebuggerActivation::visitChildren):
61554 * debugger/DebuggerActivation.h:
61555 * heap/HandleHeap.cpp:
61556 (JSC::WeakHandleOwner::isReachableFromOpaqueRoots):
61557 (JSC::HandleHeap::markStrongHandles):
61558 (JSC::HandleHeap::markWeakHandles):
61559 * heap/HandleHeap.h:
61560 * heap/HandleStack.cpp:
61561 (JSC::HandleStack::mark):
61562 * heap/HandleStack.h:
61564 (JSC::Heap::markProtectedObjects):
61565 (JSC::Heap::markTempSortVectors):
61566 (JSC::Heap::markRoots):
61568 * heap/MarkStack.cpp:
61569 (JSC::MarkStack::visitChildren):
61570 (JSC::MarkStack::drain):
61571 * heap/MarkStack.h:
61572 (JSC::HeapRootVisitor::HeapRootVisitor):
61573 (JSC::HeapRootVisitor::mark):
61574 (JSC::HeapRootVisitor::visitor):
61575 * heap/MarkedSpace.h:
61576 * runtime/ArgList.cpp:
61577 (JSC::MarkedArgumentBuffer::markLists):
61578 * runtime/ArgList.h:
61579 * runtime/Arguments.cpp:
61580 (JSC::Arguments::visitChildren):
61581 * runtime/Arguments.h:
61582 * runtime/Executable.cpp:
61583 (JSC::EvalExecutable::visitChildren):
61584 (JSC::ProgramExecutable::visitChildren):
61585 (JSC::FunctionExecutable::visitChildren):
61586 * runtime/Executable.h:
61587 * runtime/GetterSetter.cpp:
61588 (JSC::GetterSetter::visitChildren):
61589 * runtime/GetterSetter.h:
61590 (JSC::GetterSetter::createStructure):
61591 * runtime/JSAPIValueWrapper.h:
61592 (JSC::JSAPIValueWrapper::createStructure):
61593 * runtime/JSActivation.cpp:
61594 (JSC::JSActivation::visitChildren):
61595 * runtime/JSActivation.h:
61596 * runtime/JSArray.cpp:
61597 (JSC::JSArray::visitChildren):
61598 * runtime/JSArray.h:
61599 (JSC::JSArray::visitDirect):
61600 * runtime/JSCell.h:
61601 (JSC::JSCell::JSCell::visitChildren):
61602 * runtime/JSFunction.cpp:
61603 (JSC::JSFunction::visitChildren):
61604 * runtime/JSFunction.h:
61605 * runtime/JSGlobalObject.cpp:
61606 (JSC::visitIfNeeded):
61607 (JSC::JSGlobalObject::visitChildren):
61608 * runtime/JSGlobalObject.h:
61609 * runtime/JSONObject.cpp:
61610 * runtime/JSObject.cpp:
61611 (JSC::JSObject::visitChildren):
61612 * runtime/JSObject.h:
61613 (JSC::JSObject::visitDirect):
61614 * runtime/JSPropertyNameIterator.cpp:
61615 (JSC::JSPropertyNameIterator::visitChildren):
61616 * runtime/JSPropertyNameIterator.h:
61617 (JSC::JSPropertyNameIterator::createStructure):
61618 * runtime/JSStaticScopeObject.cpp:
61619 (JSC::JSStaticScopeObject::visitChildren):
61620 * runtime/JSStaticScopeObject.h:
61621 * runtime/JSTypeInfo.h:
61622 (JSC::TypeInfo::TypeInfo):
61623 (JSC::TypeInfo::overridesVisitChildren):
61624 * runtime/JSWrapperObject.cpp:
61625 (JSC::JSWrapperObject::visitChildren):
61626 * runtime/JSWrapperObject.h:
61627 * runtime/JSZombie.h:
61628 (JSC::JSZombie::visitChildren):
61629 * runtime/NativeErrorConstructor.cpp:
61630 (JSC::NativeErrorConstructor::visitChildren):
61631 * runtime/NativeErrorConstructor.h:
61632 * runtime/RegExpObject.cpp:
61633 (JSC::RegExpObject::visitChildren):
61634 * runtime/RegExpObject.h:
61635 * runtime/ScopeChain.cpp:
61636 (JSC::ScopeChainNode::visitChildren):
61637 * runtime/ScopeChain.h:
61638 * runtime/SmallStrings.cpp:
61639 (JSC::SmallStrings::visitChildren):
61640 * runtime/SmallStrings.h:
61641 * runtime/Structure.cpp:
61642 (JSC::Structure::Structure):
61643 (JSC::Structure::visitChildren):
61644 * runtime/Structure.h:
61645 * runtime/StructureChain.cpp:
61646 (JSC::StructureChain::visitChildren):
61647 * runtime/StructureChain.h:
61648 (JSC::StructureChain::createStructure):
61650 2011-04-21 Sheriff Bot <webkit.review.bot@gmail.com>
61652 Unreviewed, rolling out r84548.
61653 http://trac.webkit.org/changeset/84548
61654 https://bugs.webkit.org/show_bug.cgi?id=59144
61656 Broke chromium-win build (Requested by aklein on #webkit).
61660 2011-04-21 Adam Klein <adamk@chromium.org>
61662 Reviewed by David Levin.
61664 [fileapi] Worker File API calls that create Blobs fail in debug builds due to random number generator thread assertion
61665 https://bugs.webkit.org/show_bug.cgi?id=55728
61667 Enable WTF_MULTIPLE_THREADS for Chromium.
61671 2011-04-20 Michael Saboff <msaboff@apple.com>
61673 Reviewed by Geoff Garen.
61675 JSString::resolveRope inefficient for common 2 fiber case
61676 https://bugs.webkit.org/show_bug.cgi?id=58994
61678 Split JSString::resolveRope into three routines.
61679 resolveRope allocates the new buffer and handles the 1 or 2
61680 fiber case with single level fibers.
61681 resolveRopeSlowCase handles the general case.
61682 outOfMemory handles the rare out of memory exception case.
61684 * runtime/JSString.cpp:
61685 (JSC::JSString::resolveRope):
61686 (JSC::JSString::resolveRopeSlowCase):
61687 (JSC::JSString::outOfMemory):
61688 * runtime/JSString.h:
61690 2011-04-20 Adam Klein <adamk@chromium.org>
61692 Reviewed by David Levin.
61694 Rename all uses of JSC_MULTIPLE_THREADS under wtf/... to WTF_MULTIPLE_THREADS
61695 https://bugs.webkit.org/show_bug.cgi?id=59040
61697 This will be used to fix https://bugs.webkit.org/show_bug.cgi?id=55728
61698 by enabling WTF_MULTIPLE_THREADS for Chromium.
61700 * wtf/CryptographicallyRandomNumber.cpp:
61701 (WTF::ARC4Stream::ARC4RandomNumberGenerator::randomNumber):
61702 (WTF::ARC4Stream::ARC4RandomNumberGenerator::randomValues):
61703 * wtf/FastMalloc.cpp:
61705 Enable WTF_MULTIPLE_THREADS whenever JSC_MULTIPLE_THREADS is enabled.
61706 * wtf/RandomNumber.cpp:
61707 (WTF::randomNumber):
61708 * wtf/RefCountedLeakCounter.cpp:
61709 (WTF::RefCountedLeakCounter::increment):
61710 (WTF::RefCountedLeakCounter::decrement):
61714 2011-04-20 Gavin Barraclough <barraclough@apple.com>
61716 Rubber stamped by Geoff Garen
61718 Bug 59069 - DFG JIT - register allocate r8, r9, r10
61720 * dfg/DFGJITCompiler.h:
61721 (JSC::DFG::JITCompiler::gprToRegisterID):
61723 2011-04-20 Gavin Barraclough <barraclough@apple.com>
61725 Build fix - revert accidental change.
61729 2011-04-20 Gavin Barraclough <barraclough@apple.com>
61731 Reviewed by Sam Weinig.
61733 Add SAMPLING_FLAGS tool to DFG JIT.
61735 * bytecode/SamplingTool.h:
61736 (JSC::SamplingFlags::addressOfFlags):
61737 * dfg/DFGJITCompiler.cpp:
61738 (JSC::DFG::JITCompiler::setSamplingFlag):
61739 (JSC::DFG::JITCompiler::clearSamplingFlag):
61740 * dfg/DFGJITCompiler.h:
61741 * jit/JITInlineMethods.h:
61742 (JSC::JIT::setSamplingFlag):
61743 (JSC::JIT::clearSamplingFlag):
61746 2011-04-20 Gavin Barraclough <barraclough@apple.com>
61748 Reviewed by Oliver Hunt.
61750 Bug 59022 - DFG JIT - Optimize branch-on-relational-compare
61752 If a relational compare (< or <=) is immediately followed by a branch,
61753 we can combine the two, avoiding generation of a boolean into a register.
61755 * assembler/MacroAssemblerX86Common.h:
61756 (JSC::MacroAssemblerX86Common::branch32):
61757 (JSC::MacroAssemblerX86Common::invert):
61758 (JSC::MacroAssemblerX86Common::commute):
61760 (JSC::DFG::Node::adjustedRefCount):
61761 * dfg/DFGSpeculativeJIT.cpp:
61762 (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
61763 (JSC::DFG::SpeculativeJIT::compile):
61764 * dfg/DFGSpeculativeJIT.h:
61765 (JSC::DFG::SpeculativeJIT::isJSConstantWithInt32Value):
61766 (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch):
61768 2011-04-20 Gavin Barraclough <barraclough@apple.com>
61770 ARMv7 build fix II.
61772 * jit/JITOpcodes32_64.cpp:
61773 (JSC::JIT::softModulo):
61775 2011-04-20 Gavin Barraclough <barraclough@apple.com>
61779 * assembler/MacroAssemblerARM.h:
61780 (JSC::MacroAssemblerARM::test8):
61782 2011-04-19 Gavin Barraclough <barraclough@apple.com>
61784 Reviewed by Oliver Hunt.
61786 Rationalize MacroAssembler branch methods
61787 https://bugs.webkit.org/show_bug.cgi?id=58950
61789 The MacroAssembler currently exposes x86's weird behaviour that the 'setcc'
61790 instruction only sets the low 8 bits of a register. Stop that.
61792 Having done so, to clarify remove the 'set32' prefix from test & compare
61793 instructions - these methods all now set a full 32/64 bit register (Ptr size).
61794 The size in the function name should indicate the amount of data being compared.
61796 Also split out the 'Condition' enum into 'RelationalCondition' and
61797 'ResultCondition'. The former is used in binary comparison, the latter is a unary
61798 condition check on the result of an operation.
61800 * JavaScriptCore.xcodeproj/project.pbxproj:
61801 * assembler/MacroAssembler.h:
61802 (JSC::MacroAssembler::branchPtr):
61803 (JSC::MacroAssembler::branch32):
61804 (JSC::MacroAssembler::branch16):
61805 (JSC::MacroAssembler::branchTestPtr):
61806 (JSC::MacroAssembler::comparePtr):
61807 (JSC::MacroAssembler::branchAddPtr):
61808 (JSC::MacroAssembler::branchSubPtr):
61809 (JSC::MacroAssembler::branchTest8):
61810 * assembler/MacroAssemblerARM.h:
61811 (JSC::MacroAssemblerARM::branch8):
61812 (JSC::MacroAssemblerARM::branch32):
61813 (JSC::MacroAssemblerARM::branch32WithUnalignedHalfWords):
61814 (JSC::MacroAssemblerARM::branch16):
61815 (JSC::MacroAssemblerARM::branchTest8):
61816 (JSC::MacroAssemblerARM::branchTest32):
61817 (JSC::MacroAssemblerARM::branchAdd32):
61818 (JSC::MacroAssemblerARM::branchMul32):
61819 (JSC::MacroAssemblerARM::branchSub32):
61820 (JSC::MacroAssemblerARM::branchNeg32):
61821 (JSC::MacroAssemblerARM::branchOr32):
61822 (JSC::MacroAssemblerARM::compare32):
61823 (JSC::MacroAssemblerARM::test32):
61824 (JSC::MacroAssemblerARM::test8):
61825 (JSC::MacroAssemblerARM::branchPtrWithPatch):
61826 (JSC::MacroAssemblerARM::ARMCondition):
61827 * assembler/MacroAssemblerARMv7.h:
61828 (JSC::MacroAssemblerARMv7::branch32):
61829 (JSC::MacroAssemblerARMv7::branch32WithUnalignedHalfWords):
61830 (JSC::MacroAssemblerARMv7::branch16):
61831 (JSC::MacroAssemblerARMv7::branch8):
61832 (JSC::MacroAssemblerARMv7::branchTest32):
61833 (JSC::MacroAssemblerARMv7::branchTest8):
61834 (JSC::MacroAssemblerARMv7::branchAdd32):
61835 (JSC::MacroAssemblerARMv7::branchMul32):
61836 (JSC::MacroAssemblerARMv7::branchOr32):
61837 (JSC::MacroAssemblerARMv7::branchSub32):
61838 (JSC::MacroAssemblerARMv7::compare32):
61839 (JSC::MacroAssemblerARMv7::test32):
61840 (JSC::MacroAssemblerARMv7::test8):
61841 (JSC::MacroAssemblerARMv7::branchPtrWithPatch):
61842 (JSC::MacroAssemblerARMv7::makeBranch):
61843 (JSC::MacroAssemblerARMv7::armV7Condition):
61844 * assembler/MacroAssemblerMIPS.h:
61845 (JSC::MacroAssemblerMIPS::branch8):
61846 (JSC::MacroAssemblerMIPS::branch32):
61847 (JSC::MacroAssemblerMIPS::branch32WithUnalignedHalfWords):
61848 (JSC::MacroAssemblerMIPS::branch16):
61849 (JSC::MacroAssemblerMIPS::branchTest32):
61850 (JSC::MacroAssemblerMIPS::branchTest8):
61851 (JSC::MacroAssemblerMIPS::branchAdd32):
61852 (JSC::MacroAssemblerMIPS::branchMul32):
61853 (JSC::MacroAssemblerMIPS::branchSub32):
61854 (JSC::MacroAssemblerMIPS::branchOr32):
61855 (JSC::MacroAssemblerMIPS::compare32):
61856 (JSC::MacroAssemblerMIPS::test8):
61857 (JSC::MacroAssemblerMIPS::test32):
61858 (JSC::MacroAssemblerMIPS::branchPtrWithPatch):
61859 * assembler/MacroAssemblerX86.h:
61860 (JSC::MacroAssemblerX86::branch32):
61861 (JSC::MacroAssemblerX86::branchPtrWithPatch):
61862 * assembler/MacroAssemblerX86Common.h:
61863 (JSC::MacroAssemblerX86Common::branch8):
61864 (JSC::MacroAssemblerX86Common::branch32):
61865 (JSC::MacroAssemblerX86Common::branch32WithUnalignedHalfWords):
61866 (JSC::MacroAssemblerX86Common::branch16):
61867 (JSC::MacroAssemblerX86Common::branchTest32):
61868 (JSC::MacroAssemblerX86Common::branchTest8):
61869 (JSC::MacroAssemblerX86Common::branchAdd32):
61870 (JSC::MacroAssemblerX86Common::branchMul32):
61871 (JSC::MacroAssemblerX86Common::branchSub32):
61872 (JSC::MacroAssemblerX86Common::branchNeg32):
61873 (JSC::MacroAssemblerX86Common::branchOr32):
61874 (JSC::MacroAssemblerX86Common::compare32):
61875 (JSC::MacroAssemblerX86Common::test8):
61876 (JSC::MacroAssemblerX86Common::test32):
61877 (JSC::MacroAssemblerX86Common::x86Condition):
61878 * assembler/MacroAssemblerX86_64.h:
61879 (JSC::MacroAssemblerX86_64::comparePtr):
61880 (JSC::MacroAssemblerX86_64::branchPtr):
61881 (JSC::MacroAssemblerX86_64::branchTestPtr):
61882 (JSC::MacroAssemblerX86_64::branchAddPtr):
61883 (JSC::MacroAssemblerX86_64::branchSubPtr):
61884 (JSC::MacroAssemblerX86_64::branchPtrWithPatch):
61885 (JSC::MacroAssemblerX86_64::branchTest8):
61886 * dfg/DFGSpeculativeJIT.cpp:
61887 (JSC::DFG::SpeculativeJIT::compile):
61888 * jit/JITOpcodes.cpp:
61889 (JSC::JIT::emit_op_eq):
61890 (JSC::JIT::emit_op_neq):
61891 (JSC::JIT::compileOpStrictEq):
61892 (JSC::JIT::emit_op_eq_null):
61893 (JSC::JIT::emit_op_neq_null):
61894 * jit/JITOpcodes32_64.cpp:
61895 (JSC::JIT::emit_op_eq):
61896 (JSC::JIT::emit_op_neq):
61897 (JSC::JIT::compileOpStrictEq):
61898 (JSC::JIT::emit_op_eq_null):
61899 (JSC::JIT::emit_op_neq_null):
61901 2011-04-20 Balazs Kelemen <kbalazs@webkit.org>
61903 Reviewed by Csaba Osztrogonác.
61905 [Qt] Cleanup includepath adjustment for generated files
61906 https://bugs.webkit.org/show_bug.cgi?id=58869
61908 * JavaScriptCore.pri: Add the directory of generated files to the include
61909 path with absolute path to make it valid in the final build step.
61911 2011-04-19 Oliver Hunt <oliver@apple.com>
61913 Reviewed by Gavin Barraclough.
61915 Remove unneeded deprecated methods from MarkStack
61916 https://bugs.webkit.org/show_bug.cgi?id=58853
61918 Remove deprecated methods
61920 * heap/MarkStack.h:
61922 2011-04-19 Mark Rowe <mrowe@apple.com>
61924 Things work best when the Xcode project refers to the file at a path that exists.
61926 * JavaScriptCore.xcodeproj/project.pbxproj:
61928 2011-04-19 Renata Hodovan <reni@webkit.org>
61930 Reviewed by Eric Seidel.
61932 Move the alignment related macros in Vector.h to new Alignment.h.
61933 https://bugs.webkit.org/show_bug.cgi?id=56000
61935 * JavaScriptCore.gypi:
61936 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
61937 * JavaScriptCore.xcodeproj/project.pbxproj:
61938 * wtf/Alignment.h: Added.
61939 * wtf/CMakeLists.txt:
61942 2011-04-19 Oliver Hunt <oliver@apple.com>
61944 Reviewed by Gavin Barraclough.
61946 Remove DeprecatedPtr
61947 https://bugs.webkit.org/show_bug.cgi?id=58718
61949 Remove the class an all functions that still exist to support it.
61951 * heap/MarkStack.h:
61952 (JSC::MarkStack::append):
61953 * runtime/JSValue.h:
61954 * runtime/WriteBarrier.h:
61956 2011-04-19 Jungshik Shin <jshin@chromium.org>
61958 Reviewed by David Levin
61960 Add U+FEFF (Zero width no-break space) to CharacterNames.h.
61961 It's added to the list of characters to treat as zero-width
61964 https://bugs.webkit.org/show_bug.cgi?id=48860
61966 * wtf/unicode/CharacterNames.h:
61968 2011-04-19 Csaba Osztrogonác <ossy@webkit.org>
61970 [Qt] REGRESSION(84176): http/tests/xmlhttprequest/event-listener-gc.html fails
61971 https://bugs.webkit.org/show_bug.cgi?id=58871
61973 Unreviewed, rolling out r84176, r84178, r84186, r84212 and r84231.
61974 http://trac.webkit.org/changeset/84176 (original patch)
61975 http://trac.webkit.org/changeset/84178 (original patch - part 2)
61976 http://trac.webkit.org/changeset/84186 (build fix)
61977 http://trac.webkit.org/changeset/84212
61978 http://trac.webkit.org/changeset/84231 (skip failing test)
61981 - https://bugs.webkit.org/show_bug.cgi?id=58718
61982 - https://bugs.webkit.org/show_bug.cgi?id=58853
61984 * heap/MarkStack.h:
61985 (JSC::MarkStack::deprecatedAppendValues):
61986 (JSC::MarkStack::append):
61987 (JSC::MarkStack::deprecatedAppend):
61988 * runtime/JSValue.h:
61989 * runtime/WriteBarrier.h:
61990 (JSC::DeprecatedPtr::DeprecatedPtr):
61991 (JSC::DeprecatedPtr::get):
61992 (JSC::DeprecatedPtr::operator*):
61993 (JSC::DeprecatedPtr::operator->):
61994 (JSC::DeprecatedPtr::slot):
61995 (JSC::DeprecatedPtr::operator UnspecifiedBoolType*):
61996 (JSC::DeprecatedPtr::operator!):
61999 2011-04-18 Oliver Hunt <oliver@apple.com>
62001 Reviewed by Gavin Barraclough.
62003 Remove unneeded deprecated methods from MarkStack
62004 https://bugs.webkit.org/show_bug.cgi?id=58853
62006 Remove deprecated methods
62008 * heap/MarkStack.h:
62010 2011-04-18 Oliver Hunt <oliver@apple.com>
62012 Reviewed by Adam Roben.
62014 Off by one initialising repeat callframe
62015 https://bugs.webkit.org/show_bug.cgi?id=58838
62016 <rdar://problem/8756810>
62018 If the end of a callframe made for a repeat call landed on
62019 a page boundary the following page may not have been committed
62020 which means that the off by one could lead to a crash. However
62021 it could only happen in this case and only on windows which is
62022 why it was so hard to repro. Alas given the steps needed to
62023 reproduce are such that it's not really possible to make a
62026 This fix makes the code a little less squirrely by not trying
62027 to avoid the unnecessary initialisation of |this|.
62029 * interpreter/Interpreter.cpp:
62030 (JSC::Interpreter::prepareForRepeatCall):
62032 2011-04-18 Gavin Barraclough <barraclough@apple.com>
62034 Reviewed by Geoff Garen.
62036 Bug 58829 - DFG JIT - Optimize add/sub immediate, multiply.
62038 Add code generation for add/subtract instruction with immediate operands
62039 (where a child is a constant), and don't bail to non-speculative if an
62040 integer multiple results in a +0 result (only if it should be generating -0).
62042 * dfg/DFGSpeculativeJIT.cpp:
62043 (JSC::DFG::SpeculativeJIT::compile):
62044 * dfg/DFGSpeculativeJIT.h:
62045 (JSC::DFG::SpeculativeJIT::isDoubleConstantWithInt32Value):
62047 2011-04-18 Gavin Barraclough <barraclough@apple.com>
62049 Reviewed by Geoff Garen.
62051 Bug 58817 - DFG JIT - if speculative compilation fails, throw away code.
62053 If we detect a logical conflict, throw away generated code,
62054 and only compile through the NonSpeculativeJIT.
62056 * assembler/AbstractMacroAssembler.h:
62057 (JSC::AbstractMacroAssembler::rewindToLabel):
62058 * assembler/AssemblerBuffer.h:
62059 (JSC::AssemblerBuffer::rewindToOffset):
62060 * assembler/MacroAssemblerX86Common.h:
62061 (JSC::MacroAssemblerX86Common::branchAdd32):
62062 (JSC::MacroAssemblerX86Common::branchSub32):
62063 * assembler/X86Assembler.h:
62064 (JSC::X86Assembler::rewindToLabel):
62065 (JSC::X86Assembler::X86InstructionFormatter::rewindToLabel):
62066 * dfg/DFGJITCompiler.cpp:
62067 (JSC::DFG::JITCompiler::linkSpeculationChecks):
62068 (JSC::DFG::JITCompiler::compileFunction):
62070 * dfg/DFGNonSpeculativeJIT.cpp:
62071 (JSC::DFG::NonSpeculativeJIT::compile):
62072 * dfg/DFGSpeculativeJIT.cpp:
62073 (JSC::DFG::SpeculativeJIT::compile):
62074 * dfg/DFGSpeculativeJIT.h:
62075 (JSC::DFG::SpeculationCheckIndexIterator::SpeculationCheckIndexIterator):
62077 2011-04-18 Oliver Hunt <oliver@apple.com>
62079 Reviewed by Gavin Barraclough.
62081 Remove DeprecatedPtr
62082 https://bugs.webkit.org/show_bug.cgi?id=58718
62084 As simple as it sounds.
62086 * runtime/JSValue.h:
62087 * runtime/WriteBarrier.h:
62089 2011-04-17 Cameron Zwarich <zwarich@apple.com>
62091 Reviewed by Dan Bernstein.
62093 JSC no longer builds with Clang due to -Woverloaded-virtual warning
62094 https://bugs.webkit.org/show_bug.cgi?id=58760
62096 Rename Structure's specificValue overload of put to putSpecificValue to avoid
62097 Clang's warning for overloading a virtual function.
62099 * runtime/Structure.cpp:
62100 (JSC::Structure::addPropertyTransition):
62101 (JSC::Structure::addPropertyWithoutTransition):
62102 (JSC::Structure::putSpecificValue):
62103 * runtime/Structure.h:
62105 2011-04-17 Patrick Gansterer <paroga@webkit.org>
62107 Reviewed by Adam Barth.
62109 Remove WTF_PLATFORM_SGL
62110 https://bugs.webkit.org/show_bug.cgi?id=58743
62112 WTF_PLATFORM_SGL and PLATFORM(SGL) are not used in the code anywhere.
62116 2011-04-17 Patrick Gansterer <paroga@webkit.org>
62118 Reviewed by Adam Barth.
62120 Rename PLATFORM(CA) to USE(CA)
62121 https://bugs.webkit.org/show_bug.cgi?id=58742
62125 2011-04-17 Patrick Gansterer <paroga@webkit.org>
62127 Reviewed by Adam Barth.
62129 Rename PLATFORM(CG) to USE(CG)
62130 https://bugs.webkit.org/show_bug.cgi?id=58729
62134 2011-04-16 Patrick Gansterer <paroga@webkit.org>
62136 Reviewed by Eric Seidel.
62138 Rename PLATFORM(CAIRO) to USE(CAIRO)
62139 https://bugs.webkit.org/show_bug.cgi?id=55192
62142 * wtf/gobject/GTypedefs.h:
62144 2011-04-15 Sheriff Bot <webkit.review.bot@gmail.com>
62146 Unreviewed, rolling out r84067.
62147 http://trac.webkit.org/changeset/84067
62148 https://bugs.webkit.org/show_bug.cgi?id=58724
62150 qt build are failing. (Requested by loislo2 on #webkit).
62152 * heap/MarkStack.h:
62153 (JSC::MarkStack::append):
62154 * runtime/JSValue.h:
62155 * runtime/WriteBarrier.h:
62156 (JSC::DeprecatedPtr::DeprecatedPtr):
62157 (JSC::DeprecatedPtr::get):
62158 (JSC::DeprecatedPtr::operator*):
62159 (JSC::DeprecatedPtr::operator->):
62160 (JSC::DeprecatedPtr::slot):
62161 (JSC::DeprecatedPtr::operator UnspecifiedBoolType*):
62162 (JSC::DeprecatedPtr::operator!):
62165 2011-04-15 Shishir Agrawal <shishir@chromium.org>
62167 Reviewed by James Robinson.
62169 Add a flag to guard Page Visibility API changes.
62170 https://bugs.webkit.org/show_bug.cgi?id=58464
62172 * Configurations/FeatureDefines.xcconfig:
62174 2011-04-15 Gavin Barraclough <barraclough@apple.com>
62176 Errrk! - build fix from !x86-64.
62180 2011-04-15 David Levin <levin@chromium.org>
62184 JavaScriptCore shouldn't depend on ../ThirdParty/gtest/xcode/gtest.xcodeproj
62185 https://bugs.webkit.org/show_bug.cgi?id=58716
62187 * JavaScriptCore.xcodeproj/project.pbxproj:
62188 * wtf/tests/RunAllWtfTests.cpp: Removed.
62189 * wtf/tests/StringTests.cpp: Removed.
62191 2011-04-15 Oliver Hunt <oliver@apple.com>
62193 Reviewed by Gavin Barraclough.
62195 Remove DeprecatedPtr
62196 https://bugs.webkit.org/show_bug.cgi?id=58718
62198 As simple as it sounds.
62200 * heap/MarkStack.h:
62201 (JSC::MarkStack::append):
62202 * runtime/JSValue.h:
62203 * runtime/WriteBarrier.h:
62205 2011-04-15 Gavin Barraclough <barraclough@apple.com>
62207 Reviewed by Oliver Hunt.
62209 Add a simple tool to gather statistics on whether functions
62210 are completed through the new or old JIT.
62213 * dfg/DFGNonSpeculativeJIT.cpp:
62214 (JSC::DFG::NonSpeculativeJIT::compile):
62215 * dfg/DFGSpeculativeJIT.cpp:
62216 (JSC::DFG::SpeculativeJIT::compile):
62218 (JSC::JIT::privateCompile):
62220 2011-04-15 Oliver Hunt <oliver@apple.com>
62222 GC allocate Structure
62223 https://bugs.webkit.org/show_bug.cgi?id=58483
62225 Rolling r83894 r83827 r83810 r83809 r83808 back in with
62226 a workaround for the gcc bug seen by the gtk bots
62228 * API/JSCallbackConstructor.cpp:
62229 (JSC::JSCallbackConstructor::JSCallbackConstructor):
62230 * API/JSCallbackConstructor.h:
62231 (JSC::JSCallbackConstructor::createStructure):
62232 * API/JSCallbackFunction.h:
62233 (JSC::JSCallbackFunction::createStructure):
62234 * API/JSCallbackObject.h:
62235 (JSC::JSCallbackObject::createStructure):
62236 * API/JSCallbackObjectFunctions.h:
62237 (JSC::::JSCallbackObject):
62238 * API/JSContextRef.cpp:
62239 * JavaScriptCore.JSVALUE32_64only.exp:
62240 * JavaScriptCore.JSVALUE64only.exp:
62241 * JavaScriptCore.exp:
62242 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
62243 * bytecode/CodeBlock.cpp:
62244 (JSC::CodeBlock::~CodeBlock):
62245 (JSC::CodeBlock::markStructures):
62246 (JSC::CodeBlock::markAggregate):
62247 * bytecode/CodeBlock.h:
62248 (JSC::MethodCallLinkInfo::setSeen):
62249 (JSC::GlobalResolveInfo::GlobalResolveInfo):
62250 * bytecode/Instruction.h:
62251 (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set):
62252 (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList):
62253 (JSC::PolymorphicAccessStructureList::markAggregate):
62254 (JSC::Instruction::Instruction):
62255 * bytecode/StructureStubInfo.cpp:
62256 (JSC::StructureStubInfo::deref):
62257 (JSC::StructureStubInfo::markAggregate):
62258 * bytecode/StructureStubInfo.h:
62259 (JSC::StructureStubInfo::initGetByIdSelf):
62260 (JSC::StructureStubInfo::initGetByIdProto):
62261 (JSC::StructureStubInfo::initGetByIdChain):
62262 (JSC::StructureStubInfo::initPutByIdTransition):
62263 (JSC::StructureStubInfo::initPutByIdReplace):
62264 * debugger/DebuggerActivation.cpp:
62265 (JSC::DebuggerActivation::DebuggerActivation):
62266 * debugger/DebuggerActivation.h:
62267 (JSC::DebuggerActivation::createStructure):
62269 * heap/MarkStack.cpp:
62270 (JSC::MarkStack::markChildren):
62271 (JSC::MarkStack::drain):
62272 * heap/MarkedBlock.cpp:
62273 (JSC::MarkedBlock::MarkedBlock):
62274 (JSC::MarkedBlock::sweep):
62276 (JSC::Strong::Strong):
62277 (JSC::Strong::set):
62278 * interpreter/Interpreter.cpp:
62279 (JSC::Interpreter::resolveGlobal):
62280 (JSC::Interpreter::resolveGlobalDynamic):
62281 (JSC::Interpreter::tryCachePutByID):
62282 (JSC::Interpreter::uncachePutByID):
62283 (JSC::Interpreter::tryCacheGetByID):
62284 (JSC::Interpreter::uncacheGetByID):
62285 (JSC::Interpreter::privateExecute):
62287 * jit/JITPropertyAccess.cpp:
62288 (JSC::JIT::privateCompilePutByIdTransition):
62289 (JSC::JIT::patchMethodCallProto):
62290 (JSC::JIT::privateCompileGetByIdProto):
62291 (JSC::JIT::privateCompileGetByIdSelfList):
62292 (JSC::JIT::privateCompileGetByIdProtoList):
62293 (JSC::JIT::privateCompileGetByIdChainList):
62294 (JSC::JIT::privateCompileGetByIdChain):
62295 * jit/JITPropertyAccess32_64.cpp:
62296 (JSC::JIT::privateCompilePutByIdTransition):
62297 (JSC::JIT::patchMethodCallProto):
62298 (JSC::JIT::privateCompileGetByIdProto):
62299 (JSC::JIT::privateCompileGetByIdSelfList):
62300 (JSC::JIT::privateCompileGetByIdProtoList):
62301 (JSC::JIT::privateCompileGetByIdChainList):
62302 (JSC::JIT::privateCompileGetByIdChain):
62303 * jit/JITStubs.cpp:
62304 (JSC::JITThunks::tryCachePutByID):
62305 (JSC::JITThunks::tryCacheGetByID):
62306 (JSC::DEFINE_STUB_FUNCTION):
62307 (JSC::getPolymorphicAccessStructureListSlot):
62308 * jit/JSInterfaceJIT.h:
62309 (JSC::JSInterfaceJIT::storePtrWithWriteBarrier):
62311 (cleanupGlobalData):
62312 * runtime/Arguments.h:
62313 (JSC::Arguments::createStructure):
62314 (JSC::Arguments::Arguments):
62315 (JSC::JSActivation::copyRegisters):
62316 * runtime/ArrayConstructor.cpp:
62317 (JSC::ArrayConstructor::ArrayConstructor):
62318 (JSC::constructArrayWithSizeQuirk):
62319 * runtime/ArrayConstructor.h:
62320 * runtime/ArrayPrototype.cpp:
62321 (JSC::ArrayPrototype::ArrayPrototype):
62322 (JSC::arrayProtoFuncSplice):
62323 * runtime/ArrayPrototype.h:
62324 (JSC::ArrayPrototype::createStructure):
62325 * runtime/BatchedTransitionOptimizer.h:
62326 (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
62327 * runtime/BooleanConstructor.cpp:
62328 (JSC::BooleanConstructor::BooleanConstructor):
62329 * runtime/BooleanConstructor.h:
62330 * runtime/BooleanObject.cpp:
62331 (JSC::BooleanObject::BooleanObject):
62332 * runtime/BooleanObject.h:
62333 (JSC::BooleanObject::createStructure):
62334 * runtime/BooleanPrototype.cpp:
62335 (JSC::BooleanPrototype::BooleanPrototype):
62336 * runtime/BooleanPrototype.h:
62337 * runtime/DateConstructor.cpp:
62338 (JSC::DateConstructor::DateConstructor):
62339 * runtime/DateConstructor.h:
62340 * runtime/DateInstance.cpp:
62341 (JSC::DateInstance::DateInstance):
62342 * runtime/DateInstance.h:
62343 (JSC::DateInstance::createStructure):
62344 * runtime/DatePrototype.cpp:
62345 (JSC::DatePrototype::DatePrototype):
62346 * runtime/DatePrototype.h:
62347 (JSC::DatePrototype::createStructure):
62348 * runtime/Error.cpp:
62349 (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction):
62350 * runtime/ErrorConstructor.cpp:
62351 (JSC::ErrorConstructor::ErrorConstructor):
62352 * runtime/ErrorConstructor.h:
62353 * runtime/ErrorInstance.cpp:
62354 (JSC::ErrorInstance::ErrorInstance):
62355 (JSC::ErrorInstance::create):
62356 * runtime/ErrorInstance.h:
62357 (JSC::ErrorInstance::createStructure):
62358 * runtime/ErrorPrototype.cpp:
62359 (JSC::ErrorPrototype::ErrorPrototype):
62360 * runtime/ErrorPrototype.h:
62361 * runtime/ExceptionHelpers.cpp:
62362 (JSC::InterruptedExecutionError::InterruptedExecutionError):
62363 (JSC::TerminatedExecutionError::TerminatedExecutionError):
62364 * runtime/Executable.cpp:
62365 * runtime/Executable.h:
62366 (JSC::ExecutableBase::ExecutableBase):
62367 (JSC::ExecutableBase::createStructure):
62368 (JSC::NativeExecutable::createStructure):
62369 (JSC::NativeExecutable::NativeExecutable):
62370 (JSC::ScriptExecutable::ScriptExecutable):
62371 (JSC::EvalExecutable::createStructure):
62372 (JSC::ProgramExecutable::createStructure):
62373 (JSC::FunctionExecutable::createStructure):
62374 * runtime/FunctionConstructor.cpp:
62375 (JSC::FunctionConstructor::FunctionConstructor):
62376 * runtime/FunctionConstructor.h:
62377 * runtime/FunctionPrototype.cpp:
62378 (JSC::FunctionPrototype::FunctionPrototype):
62379 * runtime/FunctionPrototype.h:
62380 (JSC::FunctionPrototype::createStructure):
62381 * runtime/GetterSetter.h:
62382 (JSC::GetterSetter::GetterSetter):
62383 (JSC::GetterSetter::createStructure):
62384 * runtime/InitializeThreading.cpp:
62385 (JSC::initializeThreadingOnce):
62386 * runtime/InternalFunction.cpp:
62387 (JSC::InternalFunction::InternalFunction):
62388 * runtime/InternalFunction.h:
62389 (JSC::InternalFunction::createStructure):
62390 * runtime/JSAPIValueWrapper.h:
62391 (JSC::JSAPIValueWrapper::createStructure):
62392 (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
62393 * runtime/JSActivation.cpp:
62394 (JSC::JSActivation::JSActivation):
62395 * runtime/JSActivation.h:
62396 (JSC::JSActivation::createStructure):
62397 * runtime/JSArray.cpp:
62398 (JSC::JSArray::JSArray):
62399 * runtime/JSArray.h:
62400 (JSC::JSArray::createStructure):
62401 * runtime/JSByteArray.cpp:
62402 (JSC::JSByteArray::JSByteArray):
62403 (JSC::JSByteArray::createStructure):
62404 * runtime/JSByteArray.h:
62405 (JSC::JSByteArray::JSByteArray):
62406 * runtime/JSCell.cpp:
62408 * runtime/JSCell.h:
62409 (JSC::JSCell::JSCell::JSCell):
62410 (JSC::JSCell::JSCell::addressOfStructure):
62411 (JSC::JSCell::JSCell::structure):
62412 (JSC::JSCell::JSCell::markChildren):
62413 (JSC::JSCell::JSValue::isZombie):
62414 * runtime/JSFunction.cpp:
62415 (JSC::JSFunction::JSFunction):
62416 * runtime/JSFunction.h:
62417 (JSC::JSFunction::createStructure):
62418 * runtime/JSGlobalData.cpp:
62419 (JSC::JSGlobalData::storeVPtrs):
62420 (JSC::JSGlobalData::JSGlobalData):
62421 (JSC::JSGlobalData::clearBuiltinStructures):
62422 (JSC::JSGlobalData::createLeaked):
62423 * runtime/JSGlobalData.h:
62424 (JSC::allocateGlobalHandle):
62425 * runtime/JSGlobalObject.cpp:
62426 (JSC::JSGlobalObject::reset):
62427 (JSC::JSGlobalObject::markChildren):
62428 (JSC::JSGlobalObject::copyGlobalsFrom):
62429 * runtime/JSGlobalObject.h:
62430 (JSC::JSGlobalObject::JSGlobalObject):
62431 (JSC::JSGlobalObject::createStructure):
62432 (JSC::Structure::prototypeChain):
62433 (JSC::Structure::isValid):
62434 (JSC::constructEmptyArray):
62435 * runtime/JSNotAnObject.h:
62436 (JSC::JSNotAnObject::JSNotAnObject):
62437 (JSC::JSNotAnObject::createStructure):
62438 * runtime/JSONObject.cpp:
62439 (JSC::JSONObject::JSONObject):
62440 * runtime/JSONObject.h:
62441 (JSC::JSONObject::createStructure):
62442 * runtime/JSObject.cpp:
62443 (JSC::JSObject::defineGetter):
62444 (JSC::JSObject::defineSetter):
62445 (JSC::JSObject::seal):
62446 (JSC::JSObject::freeze):
62447 (JSC::JSObject::preventExtensions):
62448 (JSC::JSObject::removeDirect):
62449 (JSC::JSObject::createInheritorID):
62450 * runtime/JSObject.h:
62451 (JSC::JSObject::createStructure):
62452 (JSC::JSObject::JSObject):
62453 (JSC::JSNonFinalObject::createStructure):
62454 (JSC::JSNonFinalObject::JSNonFinalObject):
62455 (JSC::JSFinalObject::create):
62456 (JSC::JSFinalObject::createStructure):
62457 (JSC::JSFinalObject::JSFinalObject):
62458 (JSC::constructEmptyObject):
62459 (JSC::createEmptyObjectStructure):
62460 (JSC::JSObject::~JSObject):
62461 (JSC::JSObject::setPrototype):
62462 (JSC::JSObject::setStructure):
62463 (JSC::JSObject::inheritorID):
62464 (JSC::JSObject::putDirectInternal):
62465 (JSC::JSObject::transitionTo):
62466 (JSC::JSObject::markChildrenDirect):
62467 * runtime/JSObjectWithGlobalObject.cpp:
62468 (JSC::JSObjectWithGlobalObject::JSObjectWithGlobalObject):
62469 * runtime/JSObjectWithGlobalObject.h:
62470 (JSC::JSObjectWithGlobalObject::createStructure):
62471 (JSC::JSObjectWithGlobalObject::JSObjectWithGlobalObject):
62472 * runtime/JSPropertyNameIterator.cpp:
62473 (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
62474 (JSC::JSPropertyNameIterator::create):
62475 (JSC::JSPropertyNameIterator::get):
62476 * runtime/JSPropertyNameIterator.h:
62477 (JSC::JSPropertyNameIterator::createStructure):
62478 (JSC::JSPropertyNameIterator::setCachedStructure):
62479 (JSC::Structure::setEnumerationCache):
62480 * runtime/JSStaticScopeObject.h:
62481 (JSC::JSStaticScopeObject::JSStaticScopeObject):
62482 (JSC::JSStaticScopeObject::createStructure):
62483 * runtime/JSString.h:
62484 (JSC::RopeBuilder::JSString):
62485 (JSC::RopeBuilder::createStructure):
62486 * runtime/JSType.h:
62487 * runtime/JSTypeInfo.h:
62488 (JSC::TypeInfo::TypeInfo):
62489 * runtime/JSValue.h:
62490 * runtime/JSVariableObject.h:
62491 (JSC::JSVariableObject::createStructure):
62492 (JSC::JSVariableObject::JSVariableObject):
62493 (JSC::JSVariableObject::copyRegisterArray):
62494 * runtime/JSWrapperObject.h:
62495 (JSC::JSWrapperObject::createStructure):
62496 (JSC::JSWrapperObject::JSWrapperObject):
62497 * runtime/JSZombie.cpp:
62498 * runtime/JSZombie.h:
62499 (JSC::JSZombie::JSZombie):
62500 (JSC::JSZombie::createStructure):
62501 * runtime/MathObject.cpp:
62502 (JSC::MathObject::MathObject):
62503 * runtime/MathObject.h:
62504 (JSC::MathObject::createStructure):
62505 * runtime/NativeErrorConstructor.cpp:
62506 (JSC::NativeErrorConstructor::NativeErrorConstructor):
62507 (JSC::NativeErrorConstructor::markChildren):
62508 (JSC::constructWithNativeErrorConstructor):
62509 * runtime/NativeErrorConstructor.h:
62510 (JSC::NativeErrorConstructor::createStructure):
62511 * runtime/NativeErrorPrototype.cpp:
62512 (JSC::NativeErrorPrototype::NativeErrorPrototype):
62513 * runtime/NativeErrorPrototype.h:
62514 * runtime/NumberConstructor.cpp:
62515 (JSC::NumberConstructor::NumberConstructor):
62516 * runtime/NumberConstructor.h:
62517 (JSC::NumberConstructor::createStructure):
62518 * runtime/NumberObject.cpp:
62519 (JSC::NumberObject::NumberObject):
62520 * runtime/NumberObject.h:
62521 (JSC::NumberObject::createStructure):
62522 * runtime/NumberPrototype.cpp:
62523 (JSC::NumberPrototype::NumberPrototype):
62524 * runtime/NumberPrototype.h:
62525 * runtime/ObjectConstructor.cpp:
62526 (JSC::ObjectConstructor::ObjectConstructor):
62527 * runtime/ObjectConstructor.h:
62528 (JSC::ObjectConstructor::createStructure):
62529 * runtime/ObjectPrototype.cpp:
62530 (JSC::ObjectPrototype::ObjectPrototype):
62531 * runtime/ObjectPrototype.h:
62532 * runtime/PropertyMapHashTable.h:
62533 (JSC::PropertyTable::PropertyTable):
62534 * runtime/RegExpConstructor.cpp:
62535 (JSC::RegExpConstructor::RegExpConstructor):
62536 (JSC::RegExpMatchesArray::RegExpMatchesArray):
62537 * runtime/RegExpConstructor.h:
62538 (JSC::RegExpConstructor::createStructure):
62539 * runtime/RegExpObject.cpp:
62540 (JSC::RegExpObject::RegExpObject):
62541 * runtime/RegExpObject.h:
62542 (JSC::RegExpObject::createStructure):
62543 * runtime/RegExpPrototype.cpp:
62544 (JSC::RegExpPrototype::RegExpPrototype):
62545 * runtime/RegExpPrototype.h:
62546 * runtime/ScopeChain.h:
62547 (JSC::ScopeChainNode::ScopeChainNode):
62548 (JSC::ScopeChainNode::createStructure):
62549 * runtime/StrictEvalActivation.cpp:
62550 (JSC::StrictEvalActivation::StrictEvalActivation):
62551 * runtime/StringConstructor.cpp:
62552 (JSC::StringConstructor::StringConstructor):
62553 * runtime/StringConstructor.h:
62554 * runtime/StringObject.cpp:
62555 (JSC::StringObject::StringObject):
62556 * runtime/StringObject.h:
62557 (JSC::StringObject::createStructure):
62558 * runtime/StringObjectThatMasqueradesAsUndefined.h:
62559 (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
62560 (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
62561 * runtime/StringPrototype.cpp:
62562 (JSC::StringPrototype::StringPrototype):
62563 * runtime/StringPrototype.h:
62564 (JSC::StringPrototype::createStructure):
62565 * runtime/Structure.cpp:
62566 (JSC::StructureTransitionTable::remove):
62567 (JSC::StructureTransitionTable::add):
62568 (JSC::Structure::Structure):
62569 (JSC::Structure::~Structure):
62570 (JSC::Structure::materializePropertyMap):
62571 (JSC::Structure::addPropertyTransitionToExistingStructure):
62572 (JSC::Structure::addPropertyTransition):
62573 (JSC::Structure::removePropertyTransition):
62574 (JSC::Structure::changePrototypeTransition):
62575 (JSC::Structure::despecifyFunctionTransition):
62576 (JSC::Structure::getterSetterTransition):
62577 (JSC::Structure::toDictionaryTransition):
62578 (JSC::Structure::toCacheableDictionaryTransition):
62579 (JSC::Structure::toUncacheableDictionaryTransition):
62580 (JSC::Structure::sealTransition):
62581 (JSC::Structure::freezeTransition):
62582 (JSC::Structure::preventExtensionsTransition):
62583 (JSC::Structure::flattenDictionaryStructure):
62584 (JSC::Structure::copyPropertyTable):
62585 (JSC::Structure::put):
62586 (JSC::Structure::markChildren):
62587 * runtime/Structure.h:
62588 (JSC::Structure::create):
62589 (JSC::Structure::setPrototypeWithoutTransition):
62590 (JSC::Structure::createStructure):
62591 (JSC::JSCell::createDummyStructure):
62592 (JSC::StructureTransitionTable::keyForWeakGCMapFinalizer):
62593 * runtime/StructureChain.cpp:
62594 (JSC::StructureChain::StructureChain):
62595 (JSC::StructureChain::markChildren):
62596 * runtime/StructureChain.h:
62597 (JSC::StructureChain::create):
62598 (JSC::StructureChain::head):
62599 (JSC::StructureChain::createStructure):
62600 * runtime/StructureTransitionTable.h:
62601 (JSC::StructureTransitionTable::WeakGCMapFinalizerCallback::finalizerContextFor):
62602 (JSC::StructureTransitionTable::WeakGCMapFinalizerCallback::keyForFinalizer):
62603 (JSC::StructureTransitionTable::~StructureTransitionTable):
62604 (JSC::StructureTransitionTable::slot):
62605 (JSC::StructureTransitionTable::setMap):
62606 (JSC::StructureTransitionTable::singleTransition):
62607 (JSC::StructureTransitionTable::clearSingleTransition):
62608 (JSC::StructureTransitionTable::setSingleTransition):
62609 * runtime/WeakGCMap.h:
62610 (JSC::DefaultWeakGCMapFinalizerCallback::finalizerContextFor):
62611 (JSC::DefaultWeakGCMapFinalizerCallback::keyForFinalizer):
62612 (JSC::WeakGCMap::contains):
62613 (JSC::WeakGCMap::find):
62614 (JSC::WeakGCMap::remove):
62615 (JSC::WeakGCMap::add):
62616 (JSC::WeakGCMap::set):
62617 (JSC::WeakGCMap::finalize):
62618 * runtime/WriteBarrier.h:
62619 (JSC::writeBarrier):
62620 (JSC::WriteBarrierBase::set):
62621 (JSC::WriteBarrierBase::operator*):
62622 (JSC::WriteBarrierBase::operator->):
62623 (JSC::WriteBarrierBase::setWithoutWriteBarrier):
62625 2011-04-15 Fridrich Strba <fridrich.strba@bluewin.ch>
62627 Reviewed by Gavin Barraclough.
62629 Correctly prefix symbols. Since gcc 4.5.0, Windows x64 symbols
62630 are not prefixed by underscore anymore. This is consistent with
62632 https://bugs.webkit.org/show_bug.cgi?id=58573
62634 * jit/JITStubs.cpp:
62636 2011-04-15 Gavin Barraclough <barraclough@apple.com>
62638 Reviewed by Geoff Garen.
62640 Bug 58705 - DFG JIT Add support for flow control (branch, jump).
62642 Add support for control flow by breaking the CodeBlock up into multiple
62643 basic blocks, generating code for each basic block in turn through the
62644 speculative JIT & then the non-speculative JIT.
62646 * dfg/DFGByteCodeParser.cpp:
62647 (JSC::DFG::ByteCodeParser::setTemporary):
62648 (JSC::DFG::ByteCodeParser::addToGraph):
62649 (JSC::DFG::ByteCodeParser::parseBlock):
62650 (JSC::DFG::ByteCodeParser::parse):
62651 * dfg/DFGGraph.cpp:
62652 (JSC::DFG::Graph::dump):
62654 (JSC::DFG::BasicBlock::BasicBlock):
62655 (JSC::DFG::BasicBlock::getBytecodeOffset):
62656 (JSC::DFG::Graph::blockIndexForBytecodeOffset):
62657 * dfg/DFGJITCodeGenerator.h:
62658 (JSC::DFG::JITCodeGenerator::JITCodeGenerator):
62659 (JSC::DFG::JITCodeGenerator::addBranch):
62660 (JSC::DFG::JITCodeGenerator::linkBranches):
62661 (JSC::DFG::JITCodeGenerator::BranchRecord::BranchRecord):
62663 (JSC::DFG::Node::Node):
62664 (JSC::DFG::Node::isJump):
62665 (JSC::DFG::Node::isBranch):
62666 (JSC::DFG::Node::takenBytecodeOffset):
62667 (JSC::DFG::Node::notTakenBytecodeOffset):
62668 * dfg/DFGNonSpeculativeJIT.cpp:
62669 (JSC::DFG::NonSpeculativeJIT::compile):
62670 * dfg/DFGNonSpeculativeJIT.h:
62671 * dfg/DFGSpeculativeJIT.cpp:
62672 (JSC::DFG::SpeculativeJIT::compile):
62673 * dfg/DFGSpeculativeJIT.h:
62675 2011-04-15 Gavin Barraclough <barraclough@apple.com>
62677 Reviewed by Geoff Garen.
62679 Bug 58701 - DFG JIT - add GetLocal/SetLocal nodes
62681 Use these for both access to arguments & local variables, adds ability
62682 to set locals, such that values will persist between basic blocks.
62684 * dfg/DFGByteCodeParser.cpp:
62685 (JSC::DFG::ByteCodeParser::ByteCodeParser):
62686 (JSC::DFG::ByteCodeParser::get):
62687 (JSC::DFG::ByteCodeParser::set):
62688 (JSC::DFG::ByteCodeParser::getVariable):
62689 (JSC::DFG::ByteCodeParser::setVariable):
62690 (JSC::DFG::ByteCodeParser::getArgument):
62691 (JSC::DFG::ByteCodeParser::setArgument):
62692 (JSC::DFG::ByteCodeParser::getThis):
62693 (JSC::DFG::ByteCodeParser::setThis):
62694 (JSC::DFG::ByteCodeParser::VariableRecord::VariableRecord):
62695 (JSC::DFG::ByteCodeParser::parseBlock):
62696 * dfg/DFGGraph.cpp:
62697 (JSC::DFG::Graph::dump):
62698 (JSC::DFG::Graph::derefChildren):
62700 (JSC::DFG::Graph::ref):
62701 (JSC::DFG::Graph::deref):
62703 (JSC::DFG::Node::hasLocal):
62704 (JSC::DFG::Node::local):
62705 * dfg/DFGNonSpeculativeJIT.cpp:
62706 (JSC::DFG::NonSpeculativeJIT::compile):
62707 * dfg/DFGSpeculativeJIT.cpp:
62708 (JSC::DFG::SpeculativeJIT::compile):
62710 2011-04-15 Gavin Barraclough <barraclough@apple.com>
62712 Reviewed by Sam Weinig.
62714 Bug 58696 - DFG JIT split handling of vars/temporaries
62716 Presently all callee registers are treated as having single block scope,
62717 since the DFG JIT can only compile single block functions. In order to
62718 expand the JIT to support control flow we will need to change to retaining
62719 locals (but not temporaries) across basic block boundaries.
62721 * dfg/DFGByteCodeParser.cpp:
62722 (JSC::DFG::ByteCodeParser::ByteCodeParser):
62723 (JSC::DFG::ByteCodeParser::get):
62724 (JSC::DFG::ByteCodeParser::set):
62725 (JSC::DFG::ByteCodeParser::getVariable):
62726 (JSC::DFG::ByteCodeParser::setVariable):
62727 (JSC::DFG::ByteCodeParser::getTemporary):
62728 (JSC::DFG::ByteCodeParser::setTemporary):
62729 (JSC::DFG::ByteCodeParser::getArgument):
62730 (JSC::DFG::ByteCodeParser::getInt32Constant):
62731 (JSC::DFG::ByteCodeParser::getDoubleConstant):
62732 (JSC::DFG::ByteCodeParser::getJSConstant):
62733 (JSC::DFG::ByteCodeParser::constantUndefined):
62734 (JSC::DFG::ByteCodeParser::constantNull):
62735 (JSC::DFG::ByteCodeParser::one):
62736 (JSC::DFG::ByteCodeParser::parseBlock):
62737 (JSC::DFG::ByteCodeParser::parse):
62740 * dfg/DFGScoreBoard.h:
62741 (JSC::DFG::ScoreBoard::ScoreBoard):
62742 (JSC::DFG::ScoreBoard::~ScoreBoard):
62743 (JSC::DFG::ScoreBoard::allocate):
62744 (JSC::DFG::ScoreBoard::use):
62746 2011-04-15 Michael Saboff <msaboff@apple.com>
62748 Reviewed by Oliver Hunt.
62750 globalObject moved to JSObjectWithGlobalObject.cpp inhibits inlining
62751 https://bugs.webkit.org/show_bug.cgi?id=58677
62753 Moved JSObjectWithGlobalObject::globalObject() to
62754 runtime/JSObjectWithGlobalObject.h to allow the compiler to inline
62755 it for a performance benefit. An equivalent instance had been in
62756 a header file before r60057.
62758 * JavaScriptCore.exp:
62759 * runtime/JSObjectWithGlobalObject.cpp:
62760 * runtime/JSObjectWithGlobalObject.h:
62761 (JSC::JSObjectWithGlobalObject::globalObject):
62763 2011-04-14 Oliver Hunt <oliver@apple.com>
62765 Reviewed by Geoffrey Garen.
62767 Make JSNodeFilterCondition handle its lifetime correctly
62768 https://bugs.webkit.org/show_bug.cgi?id=58622
62772 * JavaScriptCore.exp:
62774 2011-04-14 Alexey Proskuryakov <ap@apple.com>
62776 Reviewed by Dan Bernstein.
62778 WebKit2: Password field input does not switch to ASCII-compatible source
62779 https://bugs.webkit.org/show_bug.cgi?id=58583
62780 <rdar://problem/9059651>
62782 * wtf/Platform.h: Removed WTF_USE_CARBON_SECURE_INPUT_MODE. It's now only used by Chromium,
62783 and shouldn't be enabled on any other platforms, so there is no reason to make it
62784 configurable via Platform.h.
62786 2011-04-15 Dmitry Lomov <dslomov@google.com>
62788 Reviewed by David Levin.
62790 Add a sample test case for GTest framework
62791 https://bugs.webkit.org/show_bug.cgi?id=58509
62793 Add an example of GTest testcase, complete with a runner, to JavaScriptCore.
62795 * JavaScriptCore.xcodeproj/project.pbxproj:
62796 * wtf/tests/RunAllWtfTests.cpp: Added.
62798 * wtf/tests/StringTests.cpp: Added.
62800 2011-04-15 Anna Cavender <annacc@chromium.org>
62802 Reviewed by Eric Carlson.
62804 Renaming TRACK feature define to VIDEO_TRACK
62805 https://bugs.webkit.org/show_bug.cgi?id=53556
62807 * Configurations/FeatureDefines.xcconfig:
62809 2011-04-14 Gavin Barraclough <barraclough@apple.com>
62811 Rubber stamped by Geoffrey Garen.
62813 Hide DFG_JIT_RESTRICTIONS behind ARITHMETIC_OP() macro, and rename
62814 m_regressionGuard to m_parseFailed, such that it can be reused for
62815 other failure cases.
62817 * dfg/DFGByteCodeParser.cpp:
62818 (JSC::DFG::ByteCodeParser::ByteCodeParser):
62819 (JSC::DFG::ByteCodeParser::parse):
62821 2011-04-14 Gavin Barraclough <barraclough@apple.com>
62823 Reviewed by Geoffrey Garen.
62825 Bug 58620 - DFG JIT - loading of arguments should not be lazy
62827 This optimization is overly simplistic. It only works because we never
62828 write out definitions to arguments (since we currently only compile
62829 single block functions). Revert this for now, we may want to reintroduce
62830 something like this again in the future, but it will need to be aware
62831 how to schedule definitions to arguments versus lazy loads that have not
62832 yet been performed.
62834 * dfg/DFGGenerationInfo.h:
62835 (JSC::DFG::GenerationInfo::needsSpill):
62836 * dfg/DFGGraph.cpp:
62837 (JSC::DFG::Graph::dump):
62839 * dfg/DFGJITCodeGenerator.cpp:
62840 (JSC::DFG::JITCodeGenerator::fillInteger):
62841 (JSC::DFG::JITCodeGenerator::fillDouble):
62842 (JSC::DFG::JITCodeGenerator::fillJSValue):
62843 * dfg/DFGJITCodeGenerator.h:
62844 (JSC::DFG::JITCodeGenerator::initConstantInfo):
62845 * dfg/DFGJITCompiler.cpp:
62846 (JSC::DFG::JITCompiler::fillNumericToDouble):
62847 (JSC::DFG::JITCompiler::fillInt32ToInteger):
62848 (JSC::DFG::JITCompiler::fillToJS):
62849 * dfg/DFGNonSpeculativeJIT.cpp:
62850 (JSC::DFG::NonSpeculativeJIT::isKnownInteger):
62851 (JSC::DFG::NonSpeculativeJIT::isKnownNumeric):
62852 (JSC::DFG::NonSpeculativeJIT::compile):
62853 * dfg/DFGSpeculativeJIT.cpp:
62854 (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
62855 (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
62856 (JSC::DFG::SpeculativeJIT::compile):
62858 2011-04-14 Gavin Barraclough <barraclough@apple.com>
62860 Reviewed by Geoffrey Garen.
62862 Bug 58600 - DFG JIT bugs in ValueToInt, PutByVal
62864 The bug in PutByVal is that an operand is in JSValueOperand - when this
62865 locks an integer into a register it will always retag the value without
62866 checking if the register is already locked. This is a problem where the
62867 value being stored by a PutByVal is the same as the subscript.
62868 The subscript is locked into a register first, as a strict integer.
62869 Locking the value results in the subscript being modified.
62871 The bug in ValueToInt related to the function of sillentFillAllRegisters.
62872 The problem is that this method will restore all register values from
62873 prior to the call, overwriting the result of the call out. Allow a
62874 register to be passed to specifically be excluded from being preserved.
62876 * assembler/ARMAssembler.h:
62877 (JSC::ARMAssembler::debugOffset):
62878 * assembler/ARMv7Assembler.h:
62879 (JSC::ARMv7Assembler::ARMInstructionFormatter::debugOffset):
62880 * assembler/AbstractMacroAssembler.h:
62881 (JSC::AbstractMacroAssembler::debugOffset):
62882 * assembler/AssemblerBuffer.h:
62883 (JSC::AssemblerBuffer::debugOffset):
62884 * assembler/LinkBuffer.h:
62885 (JSC::LinkBuffer::debugAddress):
62886 * assembler/MIPSAssembler.h:
62887 (JSC::MIPSAssembler::debugOffset):
62888 * assembler/MacroAssemblerX86_64.h:
62889 (JSC::MacroAssemblerX86_64::orPtr):
62890 * assembler/X86Assembler.h:
62891 (JSC::X86Assembler::debugOffset):
62892 (JSC::X86Assembler::X86InstructionFormatter::debugOffset):
62893 * dfg/DFGByteCodeParser.cpp:
62894 (JSC::DFG::ByteCodeParser::parse):
62895 * dfg/DFGGenerationInfo.h:
62896 * dfg/DFGJITCodeGenerator.cpp:
62897 (JSC::DFG::JITCodeGenerator::fillJSValue):
62898 * dfg/DFGJITCodeGenerator.h:
62899 (JSC::DFG::JITCodeGenerator::isConstant):
62900 * dfg/DFGJITCompiler.cpp:
62901 (JSC::DFG::JITCompiler::compileFunction):
62902 * dfg/DFGJITCompiler.h:
62903 (JSC::DFG::JITCompiler::isConstant):
62904 * dfg/DFGNonSpeculativeJIT.cpp:
62905 (JSC::DFG::NonSpeculativeJIT::valueToNumber):
62906 (JSC::DFG::NonSpeculativeJIT::valueToInt32):
62907 (JSC::DFG::NonSpeculativeJIT::numberToInt32):
62908 (JSC::DFG::NonSpeculativeJIT::isKnownInteger):
62909 (JSC::DFG::NonSpeculativeJIT::isKnownNumeric):
62910 (JSC::DFG::NonSpeculativeJIT::compile):
62911 * dfg/DFGNonSpeculativeJIT.h:
62912 (JSC::DFG::NonSpeculativeJIT::silentSpillGPR):
62913 (JSC::DFG::NonSpeculativeJIT::silentSpillFPR):
62914 (JSC::DFG::NonSpeculativeJIT::silentFillGPR):
62915 (JSC::DFG::NonSpeculativeJIT::silentFillFPR):
62916 (JSC::DFG::NonSpeculativeJIT::silentSpillAllRegisters):
62917 (JSC::DFG::NonSpeculativeJIT::silentFillAllRegisters):
62918 * dfg/DFGSpeculativeJIT.cpp:
62919 (JSC::DFG::SpeculativeJIT::compile):
62921 2011-04-14 Geoffrey Garen <ggaren@apple.com>
62923 Reviewed by Oliver Hunt.
62925 Drain the mark stack while marking weak handles, not after.
62926 https://bugs.webkit.org/show_bug.cgi?id=58574
62928 Otherwise, items that would have caused more weak handle marking are
62929 processed after all weak handle marking has finished, and referenced
62930 weak handles get recycled.
62932 * heap/HandleHeap.cpp:
62933 (JSC::HandleHeap::markWeakHandles): Removed looping from here, since we
62934 want Heap::markRoots to be responsible for draining the mark stack.
62937 (JSC::Heap::markRoots): Moved looping to here, as explained above.
62939 For efficiency's sake, drain the mark stack before starting to mark weak
62940 handles. Otherwise, items drained while marking weak handles may force
62941 an extra trip through the weak handle list.
62943 For correctness's sake, drain the mark stack each time through the weak
62944 handle list. Otherwise, opaque roots that would make weak handles reachable
62945 are not discovered until after weak handle marking is over.
62947 2011-04-14 Oliver Hunt <oliver@apple.com>
62949 Reviewed by Geoffrey Garen.
62951 Make protected object list in caches window reflect reality
62952 https://bugs.webkit.org/show_bug.cgi?id=58565
62954 Make sure the heap includes objects protected by Strong handles
62955 in its list of protected objects.
62957 * heap/HandleHeap.h:
62959 (JSC::HandleHeap::protectedObjectTypeCounts):
62961 2011-04-14 Satish Sampath <satish@chromium.org>
62963 Reviewed by Anders Carlsson.
62965 Don't emit RegExp tables for chromium where they are not used
62966 https://bugs.webkit.org/show_bug.cgi?id=58544
62968 * JavaScriptCore.gyp/JavaScriptCore.gyp:
62969 * create_regex_tables: Added the "--notables" command line argument.
62971 2011-04-13 Geoffrey Garen <ggaren@apple.com>
62973 Try to fix ASSERTs seen on Windows bots.
62976 (WTF::hashTableSwap): Force MSVC to use the right version of swap.
62978 2011-04-13 Ryuan Choi <ryuan.choi@samsung.com>
62980 Reviewed by Kenneth Rohde Christiansen.
62982 [CMAKE] Separate DerivedSources.
62983 https://bugs.webkit.org/show_bug.cgi?id=58427
62985 * CMakeLists.txt: Change DERIVED_SOURCES_DIR to DERIVED_SOURCES_JAVASCRIPTCORE_DIR.
62987 2011-04-13 Geoffrey Garen <ggaren@apple.com>
62989 Reviewed by Oliver Hunt.
62991 Switched DOM wrappers to use HashMap of Weak<T> instead of WeakGCMap<T>
62992 https://bugs.webkit.org/show_bug.cgi?id=58482
62994 This will allow wrappers to make individual decisions about their lifetimes.
62996 * heap/HandleHeap.h:
62997 (JSC::HandleHeap::copyWeak): New function for copying a weak handle.
62998 It's wasn't previously possible to perform this operation using HandleHeap
62999 API because the HandleHeap doesn't expose its underlying Node structure.
63004 (JSC::Strong::set): Added ASSERTs to verify that dead objects are not
63005 resurrected by placement into handles.
63007 (JSC::swap): Added a swap helper, so use of Strong<T> inside a hash table
63011 (JSC::Weak::Weak): Fixed a bug where copying a weak pointer would not
63012 copy its weak callback and context.
63014 (JSC::Weak::operator=): Added an assignment operator, since the default
63015 C++ assignment operator did the wrong thing.
63017 (JSC::Weak::set): Added ASSERTs to verify that dead objects are not
63018 resurrected by placement into handles.
63020 (JSC::swap): Added a swap helper, so use of Strong<T> inside a hash table
63021 is efficient, and can be done without copying, which is illegal during
63022 the handle finalization phase.
63024 2011-04-13 Oliver Hunt <oliver@apple.com>
63026 Reviewed by Gavin Barraclough.
63028 Make PropertyMapEntry use a WriteBarrier for specificValue
63029 https://bugs.webkit.org/show_bug.cgi?id=58407
63031 Make PropertyMapEntry use a WriteBarrier for specificValue, and then
63032 propagate the required JSGlobalData through all the methods it ends
63035 * API/JSClassRef.cpp:
63036 (OpaqueJSClass::prototype):
63037 * API/JSContextRef.cpp:
63038 * API/JSObjectRef.cpp:
63040 (JSObjectSetPrototype):
63041 * JavaScriptCore.exp:
63042 * bytecompiler/BytecodeGenerator.cpp:
63043 (JSC::BytecodeGenerator::BytecodeGenerator):
63044 * interpreter/Interpreter.cpp:
63045 (JSC::appendSourceToError):
63046 (JSC::Interpreter::tryCacheGetByID):
63047 (JSC::Interpreter::privateExecute):
63048 * jit/JITStubs.cpp:
63049 (JSC::JITThunks::tryCacheGetByID):
63050 (JSC::DEFINE_STUB_FUNCTION):
63051 * runtime/BatchedTransitionOptimizer.h:
63052 (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
63053 * runtime/InternalFunction.cpp:
63054 (JSC::InternalFunction::name):
63055 (JSC::InternalFunction::displayName):
63056 * runtime/JSActivation.cpp:
63057 (JSC::JSActivation::getOwnPropertySlot):
63058 * runtime/JSFunction.cpp:
63059 (JSC::JSFunction::name):
63060 (JSC::JSFunction::displayName):
63061 (JSC::JSFunction::getOwnPropertySlot):
63062 * runtime/JSGlobalObject.cpp:
63063 (JSC::JSGlobalObject::putWithAttributes):
63064 (JSC::JSGlobalObject::reset):
63065 (JSC::JSGlobalObject::resetPrototype):
63066 * runtime/JSGlobalObject.h:
63067 * runtime/JSObject.cpp:
63068 (JSC::JSObject::put):
63069 (JSC::JSObject::deleteProperty):
63070 (JSC::JSObject::defineGetter):
63071 (JSC::JSObject::defineSetter):
63072 (JSC::JSObject::lookupGetter):
63073 (JSC::JSObject::lookupSetter):
63074 (JSC::JSObject::getPropertySpecificValue):
63075 (JSC::JSObject::getOwnPropertyNames):
63076 (JSC::JSObject::seal):
63077 (JSC::JSObject::freeze):
63078 (JSC::JSObject::preventExtensions):
63079 (JSC::JSObject::removeDirect):
63080 (JSC::JSObject::getOwnPropertyDescriptor):
63081 (JSC::JSObject::defineOwnProperty):
63082 * runtime/JSObject.h:
63083 (JSC::JSObject::getDirect):
63084 (JSC::JSObject::getDirectLocation):
63085 (JSC::JSObject::isSealed):
63086 (JSC::JSObject::isFrozen):
63087 (JSC::JSObject::setPrototypeWithCycleCheck):
63088 (JSC::JSObject::setPrototype):
63089 (JSC::JSObject::inlineGetOwnPropertySlot):
63090 (JSC::JSObject::putDirectInternal):
63091 (JSC::JSObject::putDirectWithoutTransition):
63092 (JSC::JSObject::putDirectFunctionWithoutTransition):
63093 * runtime/Lookup.cpp:
63094 (JSC::setUpStaticFunctionSlot):
63095 * runtime/ObjectConstructor.cpp:
63096 (JSC::objectConstructorCreate):
63097 (JSC::objectConstructorSeal):
63098 (JSC::objectConstructorFreeze):
63099 (JSC::objectConstructorPreventExtensions):
63100 (JSC::objectConstructorIsSealed):
63101 (JSC::objectConstructorIsFrozen):
63102 * runtime/Operations.h:
63103 (JSC::normalizePrototypeChain):
63104 * runtime/PropertyMapHashTable.h:
63105 (JSC::PropertyMapEntry::PropertyMapEntry):
63106 (JSC::PropertyTable::PropertyTable):
63107 (JSC::PropertyTable::copy):
63108 * runtime/Structure.cpp:
63109 (JSC::Structure::materializePropertyMap):
63110 (JSC::Structure::despecifyDictionaryFunction):
63111 (JSC::Structure::addPropertyTransition):
63112 (JSC::Structure::removePropertyTransition):
63113 (JSC::Structure::changePrototypeTransition):
63114 (JSC::Structure::despecifyFunctionTransition):
63115 (JSC::Structure::getterSetterTransition):
63116 (JSC::Structure::toDictionaryTransition):
63117 (JSC::Structure::toCacheableDictionaryTransition):
63118 (JSC::Structure::toUncacheableDictionaryTransition):
63119 (JSC::Structure::sealTransition):
63120 (JSC::Structure::freezeTransition):
63121 (JSC::Structure::preventExtensionsTransition):
63122 (JSC::Structure::isSealed):
63123 (JSC::Structure::isFrozen):
63124 (JSC::Structure::addPropertyWithoutTransition):
63125 (JSC::Structure::removePropertyWithoutTransition):
63126 (JSC::Structure::copyPropertyTable):
63127 (JSC::Structure::get):
63128 (JSC::Structure::despecifyFunction):
63129 (JSC::Structure::despecifyAllFunctions):
63130 (JSC::Structure::put):
63131 (JSC::Structure::getPropertyNames):
63132 * runtime/Structure.h:
63133 (JSC::Structure::get):
63134 (JSC::Structure::materializePropertyMapIfNecessary):
63136 2011-04-13 Paul Knight <pknight@apple.com>
63138 Reviewed by Gavin Barraclough.
63140 BACKTRACE() macro should check for Debug configuration in macro, not WTFReportBacktrace definition
63141 https://bugs.webkit.org/show_bug.cgi?id=58405
63143 The BACKTRACE() macro requires JavaScriptCore be built with a Debug
63144 configuration in order for it to be enabled. Move the NDEBUG check to
63145 the header so it will be enabled when the calling framework or
63146 application is built with a Debug configuration, similar to how
63147 ASSERT() and friends work.
63149 * wtf/Assertions.cpp:
63150 * wtf/Assertions.h:
63152 2011-04-12 Ben Taylor <bentaylor.solx86@gmail.com>
63154 Reviewed by Alexey Proskuryakov.
63156 https://bugs.webkit.org/show_bug.cgi?id=58131
63158 Provide a workaround for an obscure Studio 12 compiler bug, which
63159 couldn't call src->~T() on a const T *src.
63163 2011-04-12 Gavin Barraclough <barraclough@apple.com>
63165 Reviewed by Oliver Hunt.
63167 https://bugs.webkit.org/show_bug.cgi?id=58395
63168 Exceptions thrown from property getters called from Array prototype functions can be missed
63170 This is caught by an ASSERT in the top of Interpreter::executeCall.
63171 Check for exceptions after accessing properties that could be getters.
63173 * runtime/ArrayPrototype.cpp:
63174 (JSC::arrayProtoFuncSort):
63175 (JSC::arrayProtoFuncFilter):
63176 (JSC::arrayProtoFuncMap):
63177 (JSC::arrayProtoFuncEvery):
63178 (JSC::arrayProtoFuncForEach):
63179 (JSC::arrayProtoFuncSome):
63180 (JSC::arrayProtoFuncReduce):
63181 (JSC::arrayProtoFuncReduceRight):
63182 - Add exception checks.
63184 2011-04-12 Oliver Hunt <oliver@apple.com>
63186 Reviewed by Geoffrey Garen.
63188 Make API callback objects use weak handles to run their finalizers
63189 https://bugs.webkit.org/show_bug.cgi?id=58389
63191 Make the API object's private data struct act as a finalizer for
63192 an api object if the callback object has a API defined finalizer.
63194 * API/JSCallbackObject.cpp:
63195 (JSC::JSCallbackObjectData::finalize):
63196 * API/JSCallbackObject.h:
63197 * API/JSCallbackObjectFunctions.h:
63201 2011-04-12 Geoffrey Garen <ggaren@apple.com>
63203 Reviewed by Geoffrey Garen.
63205 Cleaned up hash traits, and added hash traits for handles
63206 https://bugs.webkit.org/show_bug.cgi?id=58381
63209 (JSC::HandleBase::swap):
63210 (JSC::Handle::Handle):
63211 (JSC::Handle::swap): Implemented swap, so we can rehash efficiently, and
63212 without creating new handles (which is not allowed during handle finalization).
63215 (JSC::Strong::swap): Use new SimpleClassHashTraits to avoid duplication.
63218 (JSC::Weak::isHashTableDeletedValue):
63221 (JSC::Weak::hashTableDeletedValue): Ditto.
63223 * wtf/HashTraits.h:
63224 (WTF::SimpleClassHashTraits::constructDeletedValue):
63225 (WTF::SimpleClassHashTraits::isDeletedValue): Added SimpleClassHashTraits,
63226 which are analogous to SimpleClassVectorTraits, since they are used in a
63229 * wtf/RetainPtr.h: Use new SimpleClassHashTraits to avoid duplication.
63231 * wtf/text/StringHash.h: Use new SimpleClassHashTraits to avoid duplication.
63233 2011-04-12 Geoffrey Garen <ggaren@apple.com>
63235 Reviewed by Sam Weinig.
63237 Cleaned up some Vector traits, and added missing Vector traits for handles
63238 https://bugs.webkit.org/show_bug.cgi?id=58372
63240 * heap/Local.h: Inherit from SimpleClassVectorTraits to avoid duplication.
63242 * heap/Strong.h: Ditto.
63244 * heap/Weak.h: Ditto.
63246 * parser/JSParser.cpp: Fixed a traits error. No test case because this
63247 particular trait is not currently exercised by the parser.
63249 * runtime/UString.h: No need to override canInitializeWithMemset, since
63250 our base class sets it to true.
63252 * wtf/VectorTraits.h: Inherit from VectorTraitsBase to avoid duplication.
63254 * wtf/text/WTFString.h: No need to override canInitializeWithMemset, since
63255 our base class sets it to true.
63257 2011-04-12 Thouraya ANDOLSI <thouraya.andolsi@st.com>
63259 Reviewed by Eric Seidel.
63261 [Qt] Enable JIT build for SH4 platforms.
63262 https://bugs.webkit.org/show_bug.cgi?id=58317
63263 enable JIT build for QT backend for SH4 platforms.
63265 * JavaScriptCore.pro:
63268 2011-04-11 Ben Taylor <bentaylor.solx86@gmail.com>
63270 Reviewed by Alexey Proskuryakov.
63272 https://bugs.webkit.org/show_bug.cgi?id=58289
63274 Fix compilation on Solaris/Studio 12 C++ in wtf/FastMalloc.cpp,
63275 WTF::TCMalloc_PageHeap::runScavengerThread(void*) expected to return a value.
63277 * wtf/FastMalloc.cpp:
63278 (WTF::TCMalloc_PageHeap::runScavengerThread):
63280 2011-04-11 Mark Rowe <mrowe@apple.com>
63284 * JavaScriptCore.xcodeproj/project.pbxproj: Headers used outside of JavaScriptCore need to be marked as private.
63286 2011-04-11 Anna Cavender <annacc@chromium.org>
63288 Reviewed by Eric Carlson.
63290 Setup ENABLE(TRACK) feature define
63291 https://bugs.webkit.org/show_bug.cgi?id=53556
63294 * Configurations/FeatureDefines.xcconfig:
63296 2011-04-11 Geoffrey Garen <ggaren@apple.com>
63298 Try to fix a few builds.
63300 Updated a few more build configurations for file moves.
63302 * CMakeListsWinCE.txt:
63304 2011-04-11 Gavin Barraclough <barraclough@apple.com>
63306 Reviewed by Sam Weinig.
63308 Bug 58263 - Use EncodedValueDescriptor on both JSVALUE32_64, JSVALUE64
63310 The JSJITInterface already uses EncodedValueDescriptor to access the tag/payload
63311 separately on JSVALUE64, even though EncodedValueDescriptor is not used in
63312 JSVALUE64's implementation of JSValue. Remove the separate definition for m_ptr
63313 on X86_64. Using the union allows us to remove a layer of makeImmediate()/
63314 immedaiteValue() methods.
63316 * dfg/DFGNonSpeculativeJIT.cpp:
63317 (JSC::DFG::NonSpeculativeJIT::compile):
63318 * dfg/DFGSpeculativeJIT.cpp:
63319 (JSC::DFG::SpeculativeJIT::compile):
63320 * jit/JITInlineMethods.h:
63321 (JSC::JIT::emitTagAsBoolImmediate):
63322 * jit/JITOpcodes.cpp:
63323 (JSC::JIT::emit_op_not):
63324 (JSC::JIT::emit_op_jeq_null):
63325 (JSC::JIT::emit_op_jneq_null):
63326 (JSC::JIT::emit_op_get_pnames):
63327 (JSC::JIT::emit_op_eq_null):
63328 (JSC::JIT::emit_op_neq_null):
63329 (JSC::JIT::emitSlow_op_not):
63330 * runtime/JSCell.h:
63331 * runtime/JSValue.h:
63332 * runtime/JSValueInlineMethods.h:
63333 (JSC::JSValue::encode):
63334 (JSC::JSValue::decode):
63335 (JSC::JSValue::operator==):
63336 (JSC::JSValue::operator!=):
63337 (JSC::JSValue::JSValue):
63338 (JSC::JSValue::operator bool):
63339 (JSC::JSValue::asInt32):
63340 (JSC::JSValue::isUndefinedOrNull):
63341 (JSC::JSValue::isBoolean):
63342 (JSC::JSValue::isCell):
63343 (JSC::JSValue::isInt32):
63344 (JSC::JSValue::asDouble):
63345 (JSC::JSValue::isNumber):
63346 (JSC::JSValue::asCell):
63348 2011-04-11 Geoffrey Garen <ggaren@apple.com>
63350 Try to fix a few builds.
63352 Updated a few more build configurations for file moves.
63354 * CMakeListsEfl.txt:
63357 2011-04-11 Geoffrey Garen <ggaren@apple.com>
63359 Build fix: Updated a file name.
63363 2011-04-11 Geoffrey Garen <ggaren@apple.com>
63365 Rubber-stamped by Sam Weinig.
63367 Moved remaining heap implementation files to the heap folder.
63371 * GNUmakefile.list.am:
63372 * JavaScriptCore.gypi:
63373 * JavaScriptCore.pro:
63374 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
63375 * JavaScriptCore.xcodeproj/project.pbxproj:
63376 * heap/ConservativeRoots.cpp: Copied from runtime/ConservativeSet.cpp.
63377 * heap/ConservativeRoots.h: Copied from runtime/ConservativeSet.h.
63380 * heap/MachineStackMarker.cpp: Copied from runtime/MachineStackMarker.cpp.
63381 * heap/MachineStackMarker.h: Copied from runtime/MachineStackMarker.h.
63382 * heap/MarkStack.cpp: Copied from runtime/MarkStack.cpp.
63383 * heap/MarkStack.h: Copied from runtime/MarkStack.h.
63384 * heap/MarkStackPosix.cpp: Copied from runtime/MarkStackPosix.cpp.
63385 * heap/MarkStackSymbian.cpp: Copied from runtime/MarkStackSymbian.cpp.
63386 * heap/MarkStackWin.cpp: Copied from runtime/MarkStackWin.cpp.
63387 * heap/MarkedBlock.cpp: Copied from runtime/MarkedBlock.cpp.
63388 * heap/MarkedBlock.h: Copied from runtime/MarkedBlock.h.
63389 * heap/MarkedSpace.cpp: Copied from runtime/MarkedSpace.cpp.
63390 * heap/MarkedSpace.h: Copied from runtime/MarkedSpace.h.
63391 * interpreter/RegisterFile.cpp:
63392 * runtime/ConservativeSet.cpp: Removed.
63393 * runtime/ConservativeSet.h: Removed.
63394 * runtime/MachineStackMarker.cpp: Removed.
63395 * runtime/MachineStackMarker.h: Removed.
63396 * runtime/MarkStack.cpp: Removed.
63397 * runtime/MarkStack.h: Removed.
63398 * runtime/MarkStackPosix.cpp: Removed.
63399 * runtime/MarkStackSymbian.cpp: Removed.
63400 * runtime/MarkStackWin.cpp: Removed.
63401 * runtime/MarkedBlock.cpp: Removed.
63402 * runtime/MarkedBlock.h: Removed.
63403 * runtime/MarkedSpace.cpp: Removed.
63404 * runtime/MarkedSpace.h: Removed.
63406 2011-04-11 Gavin Barraclough <barraclough@apple.com>
63410 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
63412 2011-04-09 Gavin Barraclough <barraclough@apple.com>
63414 Reviewed by Sam Weinig.
63416 Bug 58198 - Clean up JSValue implementation for JSVALUE64
63418 Remove JSNumberCell, JSImmediate, unify some methods between JSVALUE32_64/JSVALUE64
63420 JSNumberCell.h largely just contained the constructors for JSValue on JSVALUE64,
63421 which should not have been here. JSImmediate mostly contained uncalled methods,
63422 along with the internal implementation of the JSValue constructors split unnecessarily
63423 across a number of layers of function calls. These could largely be merged back
63424 together. Many methods and constructors from JSVALUE32_64 and JSVALUE64 can by unified.
63426 The .cpp files were empty.
63428 Moving all these methods into JSValue.h seems to be a repro measurable regression, so
63429 I have kept these methods in a separate JSValueInlineMethods.h. Adding the 64-bit tag
63430 values as static const members of JSValue also measures as a repro regression, so I
63431 have made these #defines.
63435 * GNUmakefile.list.am:
63436 * JavaScriptCore.exp:
63437 * JavaScriptCore.gypi:
63438 * JavaScriptCore.pro:
63439 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
63440 * JavaScriptCore.xcodeproj/project.pbxproj:
63441 - Removed JSImmediate.h, JSNumberCell.h.
63442 * bytecompiler/BytecodeGenerator.cpp:
63443 (JSC::BytecodeGenerator::emitLoad):
63444 - Removed class JSImmediate.
63445 * dfg/DFGNonSpeculativeJIT.cpp:
63446 (JSC::DFG::NonSpeculativeJIT::compile):
63447 - Removed class JSImmediate.
63448 * dfg/DFGSpeculativeJIT.cpp:
63449 (JSC::DFG::SpeculativeJIT::compile):
63450 - Removed class JSImmediate.
63451 * jit/JITArithmetic.cpp:
63452 (JSC::JIT::compileBinaryArithOpSlowCase):
63453 - Removed class JSImmediate.
63454 * jit/JITInlineMethods.h:
63455 (JSC::JIT::emitJumpIfJSCell):
63456 (JSC::JIT::emitJumpIfNotJSCell):
63457 (JSC::JIT::emitJumpIfImmediateInteger):
63458 (JSC::JIT::emitJumpIfNotImmediateInteger):
63459 (JSC::JIT::emitFastArithDeTagImmediate):
63460 (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
63461 (JSC::JIT::emitFastArithReTagImmediate):
63462 (JSC::JIT::emitTagAsBoolImmediate):
63463 - Removed class JSImmediate.
63464 * jit/JITOpcodes.cpp:
63465 (JSC::JIT::emit_op_not):
63466 (JSC::JIT::emit_op_jeq_null):
63467 (JSC::JIT::emit_op_jneq_null):
63468 (JSC::JIT::emit_op_get_pnames):
63469 (JSC::JIT::emit_op_eq_null):
63470 (JSC::JIT::emit_op_neq_null):
63471 (JSC::JIT::emitSlow_op_not):
63472 - Removed class JSImmediate.
63473 * jit/JSInterfaceJIT.h:
63474 - Removed class JSImmediate.
63475 * runtime/JSCell.h:
63476 - Removed JSImmediate.h, JSNumberCell.h.
63477 * runtime/JSImmediate.cpp: Removed.
63478 * runtime/JSImmediate.h: Removed.
63479 * runtime/JSNumberCell.cpp: Removed.
63480 * runtime/JSNumberCell.h: Removed.
63482 * runtime/JSObject.h:
63483 - Removed JSImmediate.h, JSNumberCell.h.
63484 * runtime/JSString.h:
63485 - Removed JSImmediate.h, JSNumberCell.h.
63486 * runtime/JSValue.h:
63487 - Added tags for JSVALUE64, moved out some JSVALUE32_64 methods, unified with JSVALUE64.
63488 * runtime/JSValueInlineMethods.h: Added.
63489 (JSC::JSValue::toInt32):
63490 (JSC::JSValue::toUInt32):
63491 (JSC::JSValue::isUInt32):
63492 (JSC::JSValue::asUInt32):
63493 (JSC::JSValue::uncheckedGetNumber):
63494 (JSC::JSValue::toJSNumber):
63496 (JSC::JSValue::getNumber):
63497 (JSC::JSValue::getBoolean):
63498 (JSC::JSValue::JSValue):
63499 (JSC::JSValue::encode):
63500 (JSC::JSValue::decode):
63501 (JSC::JSValue::operator bool):
63502 (JSC::JSValue::operator==):
63503 (JSC::JSValue::operator!=):
63504 (JSC::JSValue::isUndefined):
63505 (JSC::JSValue::isNull):
63506 (JSC::JSValue::isUndefinedOrNull):
63507 (JSC::JSValue::isCell):
63508 (JSC::JSValue::isInt32):
63509 (JSC::JSValue::isDouble):
63510 (JSC::JSValue::isTrue):
63511 (JSC::JSValue::isFalse):
63512 (JSC::JSValue::tag):
63513 (JSC::JSValue::payload):
63514 (JSC::JSValue::asInt32):
63515 (JSC::JSValue::asDouble):
63516 (JSC::JSValue::asCell):
63517 (JSC::JSValue::isNumber):
63518 (JSC::JSValue::isBoolean):
63519 (JSC::JSValue::makeImmediate):
63520 (JSC::JSValue::immediateValue):
63521 (JSC::reinterpretDoubleToIntptr):
63522 (JSC::reinterpretIntptrToDouble):
63523 - Methods moved here from JSImmediate.h/JSNumberCell.h/JSValue.h.
63524 * runtime/Operations.h:
63525 - Removed JSImmediate.h, JSNumberCell.h.
63526 * wtf/StdLibExtras.h:
63527 - Export bitwise_cast.
63529 2011-04-11 Thouraya ANDOLSI <thouraya.andolsi@st.com>
63531 Reviewed by Oliver Hunt.
63534 https://bugs.webkit.org/show_bug.cgi?id=44329
63536 Add JIT remaining part for SH4 platforms.
63538 * assembler/MacroAssemblerSH4.h:
63540 * jit/JITInlineMethods.h:
63541 * jit/JITOpcodes32_64.cpp:
63542 * jit/JITPropertyAccess32_64.cpp:
63543 * jit/JITStubs.cpp:
63545 * jit/JSInterfaceJIT.h:
63547 2011-04-10 Geoffrey Garen <ggaren@apple.com>
63549 Rubber-stamped by Beth Dakin.
63551 Moved Heap.h and Heap.cpp to the heap folder, because anything less
63552 would be uncivilized.
63556 * GNUmakefile.list.am:
63557 * JavaScriptCore.gypi:
63558 * JavaScriptCore.pro:
63559 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
63560 * JavaScriptCore.xcodeproj/project.pbxproj:
63561 * heap/Heap.cpp: Copied from JavaScriptCore/runtime/Heap.cpp.
63562 * heap/Heap.h: Copied from JavaScriptCore/runtime/Heap.h.
63563 * runtime/Heap.cpp: Removed.
63564 * runtime/Heap.h: Removed.
63566 2011-04-10 Patrick Gansterer <paroga@webkit.org>
63568 Reviewed by Darin Adler.
63570 Remove duplicated code from AtomicString::fromUTF8()
63571 https://bugs.webkit.org/show_bug.cgi?id=53711
63573 * JavaScriptCore.exp:
63574 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
63575 * wtf/text/AtomicString.cpp:
63576 (WTF::AtomicString::fromUTF8Internal):
63577 * wtf/text/AtomicString.h:
63578 (WTF::AtomicString::fromUTF8):
63579 * wtf/unicode/UTF8.cpp:
63580 (WTF::Unicode::calculateStringHashAndLengthFromUTF8):
63581 * wtf/unicode/UTF8.h:
63583 2011-04-10 Maciej Stachowiak <mjs@apple.com>
63587 Fix build (at least on Lion) by adding some newish header files to
63590 * JavaScriptCore.xcodeproj/project.pbxproj:
63592 2011-04-09 Geoffrey Garen <ggaren@apple.com>
63596 Try recommitting some things svn left out of its last commit.
63599 (JSC::HandleBase::operator!):
63600 (JSC::HandleBase::HandleBase):
63601 (JSC::HandleBase::slot):
63602 (JSC::HandleBase::setSlot):
63603 (JSC::Handle::Handle):
63604 * heap/HandleHeap.cpp:
63605 (JSC::HandleHeap::markWeakHandles):
63606 (JSC::HandleHeap::finalizeWeakHandles):
63607 (JSC::HandleHeap::isValidWeakNode):
63608 * heap/HandleHeap.h:
63609 (JSC::HandleHeap::globalData):
63611 2011-04-08 Geoffrey Garen <ggaren@apple.com>
63613 Reviewed by Oliver Hunt.
63615 A few heap-related renames and file moves.
63617 WeakGCPtr<T> => Weak<T>
63618 Global<T> => Strong<T>
63619 collector/ => heap/
63620 collector/* => heap/*
63621 runtime/WeakGCPtr.h => heap/Weak.h
63623 (Eventually, even more files should move into the heap directory. Like
63624 Heap.h and Heap.cpp, for example.)
63626 * API/JSClassRef.h:
63629 * GNUmakefile.list.am:
63630 * JavaScriptCore.gypi:
63631 * JavaScriptCore.pri:
63632 * JavaScriptCore.pro:
63633 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
63634 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
63635 * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:
63636 * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
63637 * JavaScriptCore.xcodeproj/project.pbxproj:
63638 * bytecode/SamplingTool.h:
63639 * bytecompiler/BytecodeGenerator.h:
63640 * collector: Removed.
63641 * collector/handles: Removed.
63642 * collector/handles/Global.h: Removed.
63643 * collector/handles/Handle.h: Removed.
63644 * collector/handles/HandleHeap.cpp: Removed.
63645 * collector/handles/HandleHeap.h: Removed.
63646 * collector/handles/HandleStack.cpp: Removed.
63647 * collector/handles/HandleStack.h: Removed.
63648 * collector/handles/Local.h: Removed.
63649 * collector/handles/LocalScope.h: Removed.
63650 * heap: Copied from collector.
63651 * heap/Handle.h: Copied from collector/handles/Handle.h.
63652 * heap/HandleHeap.cpp: Copied from collector/handles/HandleHeap.cpp.
63653 * heap/HandleHeap.h: Copied from collector/handles/HandleHeap.h.
63654 * heap/HandleStack.cpp: Copied from collector/handles/HandleStack.cpp.
63655 * heap/HandleStack.h: Copied from collector/handles/HandleStack.h.
63656 * heap/Local.h: Copied from collector/handles/Local.h.
63657 * heap/LocalScope.h: Copied from collector/handles/LocalScope.h.
63658 * heap/Strong.h: Copied from collector/handles/Global.h.
63659 (JSC::Strong::Strong):
63660 (JSC::Strong::~Strong):
63661 (JSC::Strong::operator=):
63662 * heap/Weak.h: Copied from runtime/WeakGCPtr.h.
63664 (JSC::Weak::~Weak):
63665 * heap/handles: Removed.
63666 * interpreter/RegisterFile.h:
63667 * jit/JITStubs.cpp:
63668 (JSC::JITThunks::hostFunctionStub):
63670 * runtime/Structure.h:
63671 * runtime/WeakGCPtr.h: Removed.
63673 2011-04-08 Alpha Lam <hclam@chromium.org>
63675 Unreviewed, rolling out r83335.
63676 http://trac.webkit.org/changeset/83335
63677 https://bugs.webkit.org/show_bug.cgi?id=53556
63679 GTK and QT bots are broken
63681 * Configurations/FeatureDefines.xcconfig:
63683 2011-04-08 Gavin Barraclough <barraclough@apple.com>
63685 Ooops, typo, build fix.
63687 * dfg/DFGByteCodeParser.cpp:
63688 (JSC::DFG::ByteCodeParser::parse):
63690 2011-04-08 Gavin Barraclough <barraclough@apple.com>
63692 Reviewed by Oliver Hunt.
63694 Bug 58154 - Add support for comparison operators to the DFG JIT.
63696 Add support for <, <=, ==, ===, and also !. Add support for all corresponding
63697 bytecode ops, including the not- and -null forms. Initially add functionally
63698 correct support, we'll revisit the performance.
63700 * dfg/DFGByteCodeParser.cpp:
63701 (JSC::DFG::ByteCodeParser::ByteCodeParser):
63702 (JSC::DFG::ByteCodeParser::constantNull):
63703 (JSC::DFG::ByteCodeParser::parse):
63704 - Add support for parsing of bytecode opcodes,
63705 * dfg/DFGJITCodeGenerator.h:
63706 (JSC::DFG::JITCodeGenerator::callOperation):
63707 - Add new operation call types, return bool values.
63709 - Add new node types.
63710 * dfg/DFGNonSpeculativeJIT.cpp:
63711 (JSC::DFG::NonSpeculativeJIT::compile):
63712 - Add code generation for new nodes.
63713 * dfg/DFGOperations.cpp:
63714 (JSC::DFG::operationCompareLess):
63715 (JSC::DFG::operationCompareLessEq):
63716 (JSC::DFG::operationCompareEq):
63717 (JSC::DFG::operationCompareStrictEq):
63718 (JSC::DFG::dfgConvertJSValueToBoolean):
63719 * dfg/DFGOperations.h:
63720 - Add operation callbacks to implement new ops.
63721 * dfg/DFGSpeculativeJIT.cpp:
63722 (JSC::DFG::SpeculativeJIT::compile):
63723 - Add code generation for new nodes.
63724 * jit/JITOpcodes.cpp:
63725 (JSC::JIT::privateCompileCTIMachineTrampolines):
63726 - Switched to a simpler <0 check, rather than relying on an internal value in JSImmediate.
63727 * jit/JITPropertyAccess.cpp:
63728 (JSC::JIT::privateCompilePatchGetArrayLength):
63729 - Switched to a simpler <0 check, rather than relying on an internal value in JSImmediate.
63730 * runtime/JSImmediate.h:
63731 - Make tag values public, rather than relying on a friend - this matches JSVALUE32_64.
63733 2011-04-07 Anna Cavender <annacc@chromium.org>
63735 Reviewed by Eric Carlson.
63737 Setup ENABLE(TRACK) feature define
63738 https://bugs.webkit.org/show_bug.cgi?id=53556
63741 * Configurations/FeatureDefines.xcconfig:
63743 2011-04-07 Balazs Kelemen <kbalazs@webkit.org>
63745 Reviewed by Kenneth Rohde Christiansen.
63747 [WK2][Qt][GTK] Introduce common use flag for the shared UNIX domain socket IPC implementation
63748 https://bugs.webkit.org/show_bug.cgi?id=58030
63750 * wtf/Platform.h: Introduce USE(UNIX_DOMAIN_SOCKETS) for WebKit2.
63752 2011-04-08 Adam Roben <aroben@apple.com>
63756 * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd: Don't try to delete directories that
63757 don't exist. Also switched from del /s to rmdir /s, which has the benefit of deleting the
63758 directory itself in addition to the files it contains.
63760 2011-04-07 Geoffrey Garen <ggaren@apple.com>
63762 Reviewed by Maciej Stachowiak.
63764 Some Handle<T> cleanup
63765 https://bugs.webkit.org/show_bug.cgi?id=58109
63767 * bytecode/SamplingTool.h: Sorted alphabetically because that's the
63768 WebKit style. Added a Global.h #include that was previously missing
63771 * collector/handles/Global.h:
63772 (JSC::Global::Global): Added a null constructor. No need for a special
63773 tag, and the tag is incompatible with some data structures.
63775 (JSC::Global::isHashTableDeletedValue):
63776 (JSC::Global::~Global):
63777 (JSC::Global::set):
63778 (JSC::Global::operator=):
63779 (JSC::Global::clear):
63780 (JSC::Global::hashTableDeletedValue): Reordered constructors to be near
63783 (JSC::Global::setWithWriteBarrier): Renamed internalSet to
63784 setWithWriteBarrier for clarity, and funneled more code into using set
63785 and setWithWriteBarrier to reduce duplication.
63787 * collector/handles/Handle.h:
63788 (JSC::HandleBase::operator!):
63789 (JSC::HandleBase::HandleBase): Removed isEmpty(), since we already have
63790 boolean and ! operators.
63792 (JSC::HandleBase::slot):
63793 (JSC::HandleBase::setSlot):
63794 (JSC::Handle::Handle): Added general support for null Handles. This was
63795 previously outlawed by ASSERTs, but our code has grown to support and
63796 rely on null Handles.
63798 * collector/handles/HandleHeap.cpp:
63799 (JSC::HandleHeap::markWeakHandles):
63800 (JSC::HandleHeap::finalizeWeakHandles):
63801 (JSC::HandleHeap::isValidWeakNode): Migrated from isValidWeakHandle,
63802 and beefed this up a bit.
63804 * collector/handles/HandleHeap.h:
63805 (JSC::HandleHeap::globalData): Added accessor, used by some new set functions.
63807 * collector/handles/Local.h: Moved hash traits to the bottom of the file,
63808 since this file is about the Local class, not the traits.
63810 (JSC::::Local): Updated for removal of invalidate().
63812 (JSC::::operator): Deployed "using" to avoid a lot of this->
63813 template funny business.
63815 (JSC::::setWithSlotCheck): Renamed from internalSet, more specific now.
63817 * interpreter/RegisterFile.h:
63818 (JSC::RegisterFile::RegisterFile): Updated to use null constructor.
63820 * jit/JITStubs.cpp:
63821 (JSC::JITThunks::hostFunctionStub):
63823 * runtime/JSPropertyNameIterator.h:
63824 (JSC::Structure::setEnumerationCache):
63825 * runtime/Structure.h: Removed clearEnumerationCache
63826 because it was an unused holdover from when the enumeration cache was
63829 * runtime/WeakGCMap.h:
63830 (JSC::WeakGCMap::set): Finish initializing our handle before putting it
63831 in the table. This seemed more logical, and at one point was required
63832 to avoid triggering an ASSERT.
63834 * runtime/WeakGCPtr.h: Inherit from Handle instead of rolling our own
63835 handle-like behavior, to avoid duplication.
63837 (JSC::WeakGCPtr::WeakGCPtr):
63838 (JSC::WeakGCPtr::~WeakGCPtr):
63839 (JSC::WeakGCPtr::get):
63840 (JSC::WeakGCPtr::clear):
63841 (JSC::WeakGCPtr::set):
63842 (JSC::WeakGCPtr::setWithWriteBarrier): Removed duplicate code and
63843 standardized on Handle idioms.
63845 2011-04-07 Adam Barth <abarth@webkit.org>
63847 Reviewed by Martin Robinson.
63849 Refactor Gtk build system to separate list of files
63850 https://bugs.webkit.org/show_bug.cgi?id=58090
63852 This is the first step towards generating part of the GTK build system
63853 using GYP. In the first iteration, our plan is to just generate the
63854 list of files. This patch is the first step, which is to separate out
63855 the part of JavaScriptCore build system that we intend to generate from
63856 the rest of the build system.
63859 * GNUmakefile.list.am: Added.
63861 2011-04-07 Zoltan Herczeg <zherczeg@webkit.org>
63863 Reviewed by Gavin Barraclough.
63865 Mapping booleans the same way as integers
63866 https://bugs.webkit.org/show_bug.cgi?id=56913
63868 Instead of having a seperate tag field for booleans,
63869 the logical values are stored in the payload field
63870 (for JSValue32_64 representation).
63872 1.007x speedup on SunSpider.
63875 * jit/JITInlineMethods.h:
63876 (JSC::JIT::emitStoreBool):
63877 * jit/JITOpcodes32_64.cpp:
63878 (JSC::JIT::emit_op_instanceof):
63879 (JSC::JIT::emit_op_not):
63880 (JSC::JIT::emit_op_jfalse):
63881 (JSC::JIT::emitSlow_op_jfalse):
63882 (JSC::JIT::emit_op_jtrue):
63883 (JSC::JIT::emitSlow_op_jtrue):
63884 (JSC::JIT::emit_op_jeq_null):
63885 (JSC::JIT::emit_op_jneq_null):
63886 (JSC::JIT::emit_op_eq):
63887 (JSC::JIT::emitSlow_op_eq):
63888 (JSC::JIT::emit_op_neq):
63889 (JSC::JIT::emitSlow_op_neq):
63890 (JSC::JIT::compileOpStrictEq):
63891 (JSC::JIT::emit_op_eq_null):
63892 (JSC::JIT::emit_op_neq_null):
63893 * jit/JSInterfaceJIT.h:
63894 * runtime/JSValue.h:
63895 (JSC::JSValue::JSValue):
63896 (JSC::JSValue::isTrue):
63897 (JSC::JSValue::isFalse):
63898 (JSC::JSValue::getBoolean):
63900 2011-04-07 Eric Seidel <eric@webkit.org>
63902 Reviewed by Adam Barth.
63904 Add stub support for generating Gtk build system from gyp
63905 https://bugs.webkit.org/show_bug.cgi?id=58086
63907 This does not produce a buildable JavaScriptCore, but it
63908 does allow running gyp/configure --port=gtk and having
63909 it generate a gtk.Makefile which we can use for testing
63910 the rest of the plumbing.
63912 * gyp/gtk.gyp: Added.
63914 2011-04-07 Andrew Scherkus <scherkus@chromium.org>
63916 Revert ENABLE_TRACK patch due to compile failures.
63918 * Configurations/FeatureDefines.xcconfig:
63920 2011-04-07 Adam Barth <abarth@webkit.org>
63922 Fix whitespace in GNUmakefile.am.
63926 2011-04-07 Gavin Barraclough <barraclough@apple.com>
63928 Fix a couple of typos in comments that Darin spotted.
63930 * jit/JITOpcodes.cpp:
63931 (JSC::JIT::emit_op_not):
63932 * runtime/JSImmediate.h:
63934 2011-04-06 Gavin Barraclough <barraclough@apple.com>
63936 Reviewed by Geoff Garen.
63937 Bug 58057 - Store boolean payload in low bit of JSImmediate
63939 And remove some uncalled functions from JSImmediate.h
63941 * jit/JITInlineMethods.h:
63942 (JSC::JIT::emitTagAsBoolImmediate):
63943 * jit/JITOpcodes.cpp:
63944 (JSC::JIT::emit_op_not):
63945 * runtime/JSImmediate.h:
63946 (JSC::JSImmediate::makeInt):
63947 (JSC::JSImmediate::makeBool):
63948 (JSC::JSImmediate::intValue):
63949 (JSC::JSImmediate::boolValue):
63950 (JSC::JSImmediate::asInt32):
63951 (JSC::JSImmediate::toDouble):
63952 (JSC::JSValue::asInt32):
63953 (JSC::JSValue::isUInt32):
63954 (JSC::JSValue::asUInt32):
63956 2011-04-07 Liang Qi <liang.qi@nokia.com>
63958 Reviewed by Laszlo Gombos.
63960 [Qt][Symbian] Enable webkit build with GCCE on Symbian.
63961 https://bugs.webkit.org/show_bug.cgi?id=57841
63963 * wtf/MathExtras.h: GCCE compiler doesn't support those std static functions.
63965 2011-04-06 Dai Mikurube <dmikurube@chromium.org>
63967 Reviewed by David Levin.
63969 Add QUOTA build flag for unified quota API
63970 https://bugs.webkit.org/show_bug.cgi?id=57918
63972 * Configurations/FeatureDefines.xcconfig: Added QUOTA build flag
63974 2011-04-06 Kevin Ollivier <kevino@theolliviers.com>
63976 Reviewed by Darin Adler.
63978 Make sure JS_EXPORT_PRIVATE is an empty define when we aren't using the export macros.
63980 https://bugs.webkit.org/show_bug.cgi?id=27551
63984 2011-04-06 Oliver Hunt <oliver@apple.com>
63986 Reviewed by Gavin Barraclough.
63988 Stop JSObject::isUsingInlineStorage() from using the structure
63989 https://bugs.webkit.org/show_bug.cgi?id=57986
63991 Make the isUsingInlineStorage() implementation just look at
63992 whether the property storage is inside the object.
63994 * runtime/JSObject.h:
63995 (JSC::JSObject::isUsingInlineStorage):
63996 (JSC::JSObject::JSObject):
63998 2011-04-06 Gavin Barraclough <barraclough@apple.com>
64000 Rubber stamped by Geoff Garen.
64002 Update comments documenting JSVALUE64/JSVALUE32_64 JSValue representations.
64004 * runtime/JSImmediate.h:
64005 * runtime/JSValue.h:
64007 2011-04-06 Lucas De Marchi <lucas.demarchi@profusion.mobi>
64009 cmake: Fix build for ARMv7
64011 * CMakeLists.txt: add missing file.
64013 2011-04-06 Liang Qi <liang.qi@nokia.com>
64015 Reviewed by Benjamin Poulain.
64017 Correct a include file name.
64018 https://bugs.webkit.org/show_bug.cgi?id=57839
64020 * wtf/PageAllocatorSymbian.h: It should be case sensitive. This fix
64021 builds on Unix hosts.
64023 2011-04-06 Adam Roben <aroben@apple.com>
64025 Build fix after r83056
64027 * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd: Added property svn:executable.
64029 2011-04-06 Adam Roben <aroben@apple.com>
64031 Move JavaScriptCoreGenerated's file-copying logic out to a new script
64033 Hopefully this will make it easier to modify this logic in the future. I also made the
64034 script much quieter than the old logic, since it didn't seem helpful to see long lists of
64035 filenames during the copying phase.
64037 If we like this new style, we could copy it for our other projects.
64039 Fixes <http://webkit.org/b/57950> JavaScriptCoreGenerated's file-copying logic is hard to
64042 Reviewed by Steve Falkenburg.
64044 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: Moved logic to copy
64046 * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd: ...to here. (Added.)
64048 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: Added copy-files.cmd
64051 2011-04-05 Geoffrey Garen <ggaren@apple.com>
64053 Try to fix the Windows build.
64055 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Who likes export files? I do!
64057 2011-04-05 Geoffrey Garen <ggaren@apple.com>
64059 Reviewed by Oliver Hunt.
64061 Introduced the concept of opaque roots, in preparation for marking the DOM with them
64062 https://bugs.webkit.org/show_bug.cgi?id=57903
64064 * JavaScriptCore.exp: Who likes export files? I do!
64066 * collector/handles/HandleHeap.cpp:
64067 (JSC::isValidWeakHandle): Factored out a helper function for ASSERTs.
64069 (JSC::WeakHandleOwner::~WeakHandleOwner): Moved from header to avoid
64070 weak linkage problems.
64072 (JSC::WeakHandleOwner::isReachableFromOpaqueRoots): New callback.
64075 (JSC::WeakHandleOwner::finalize): Switched from pure virtual to a
64076 default empty implementation, since not all clients necessarily want
64077 or need non-trivial finalizers.
64079 (JSC::HandleHeap::markWeakHandles): Split updateWeakHandles into two
64080 passes. The first pass marks all reachable weak handles. The second pass
64081 finalizes all unreachable weak handles. This must be two passes because
64082 we don't know the set of finalizable weak handles until we're done
64083 marking all weak handles.
64085 (JSC::HandleHeap::finalizeWeakHandles): Use new helper function.
64087 * collector/handles/HandleHeap.h: Ditto.
64089 * runtime/Heap.cpp:
64090 (JSC::Heap::destroy):
64091 (JSC::Heap::markRoots):
64092 (JSC::Heap::reset): Split out handle marking from handle finalization.
64094 * runtime/MarkStack.cpp:
64095 (JSC::MarkStack::reset):
64096 * runtime/MarkStack.h:
64097 (JSC::MarkStack::addOpaqueRoot):
64098 (JSC::MarkStack::containsOpaqueRoot):
64099 (JSC::MarkStack::opaqueRootCount):
64100 (JSC::HeapRootMarker::markStack): New helper functions for managing the
64101 set of opaque roots.
64103 * runtime/WeakGCMap.h:
64104 (JSC::WeakGCMap::finalize): Renamed to match parent class declaration.
64106 2011-04-05 Balazs Kelemen <kbalazs@webkit.org>
64108 Reviewed by Darin Adler.
64110 Build fix for YarrParser.h
64111 https://bugs.webkit.org/show_bug.cgi?id=57822
64113 * yarr/YarrParser.h:
64114 (JSC::Yarr::Parser::CharacterClassParserDelegate::CharacterClassParserDelegate):
64116 2011-04-05 Steve Falkenburg <sfalken@apple.com>
64118 Follow-up Windows build fix.
64119 Don't skip react-to-vsprops-changes.py for all production builds,
64120 only those initiated via JavaScriptCore.make.
64122 * JavaScriptCore.vcproj/JavaScriptCore.make:
64123 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
64125 2011-04-05 Oliver Hunt <oliver@apple.com>
64127 Reviewed by Darin Adler.
64129 REGRESSION (r82849): 85,000+ JSC-related leaks seen on SnowLeopard Intel Leaks
64130 https://bugs.webkit.org/show_bug.cgi?id=57857
64132 Whoops, accidentally removed a deref().
64134 * bytecode/StructureStubInfo.cpp:
64135 (JSC::StructureStubInfo::deref):
64137 2011-04-05 Steve Falkenburg <sfalken@apple.com>
64141 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: Add per-configuration vsprops files.
64142 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedCommon.vsprops: Removed inheritance from common.vsprops.
64143 Set production environment variable before calling make.
64144 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebug.vsprops: Added.
64145 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebugAll.vsprops: Added.
64146 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebugCairoCFLite.vsprops: Added.
64147 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedProduction.vsprops: Added.
64148 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedRelease.vsprops: Added.
64149 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedReleaseCairoCFLite.vsprops: Added.
64150 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedReleasePGO.vsprops: Added.
64152 2011-04-05 Oliver Hunt <oliver@apple.com>
64154 Reviewed by Gavin Barraclough.
64156 Make caches window show more info about non-jsobject GC values
64157 https://bugs.webkit.org/show_bug.cgi?id=57874
64159 Add ClassInfo to the various internal JS types that currently
64160 don't have any, and make the text for caches window show the
64161 classname for non-JSObject instances.
64163 * runtime/Executable.cpp:
64164 * runtime/Executable.h:
64165 (JSC::ExecutableBase::createStructure):
64166 (JSC::NativeExecutable::createStructure):
64167 (JSC::NativeExecutable::NativeExecutable):
64168 (JSC::EvalExecutable::createStructure):
64169 (JSC::ProgramExecutable::createStructure):
64170 (JSC::FunctionExecutable::createStructure):
64171 * runtime/Heap.cpp:
64172 (JSC::TypeCounter::typeName):
64173 * runtime/JSGlobalData.cpp:
64174 (JSC::JSGlobalData::JSGlobalData):
64175 * runtime/JSGlobalData.h:
64176 * runtime/ScopeChain.cpp:
64177 * runtime/ScopeChain.h:
64178 (JSC::ScopeChainNode::createStructure):
64179 * runtime/StructureChain.cpp:
64180 * runtime/StructureChain.h:
64181 (JSC::StructureChain::createStructure):
64183 2011-04-05 Nikolas Zimmermann <nzimmermann@rim.com>
64185 Reviewed by Andreas Kling.
64187 Cleanup StringConcatenate
64188 https://bugs.webkit.org/show_bug.cgi?id=57836
64190 Don't use PassRefPtr in local variables, properly store in RefPtrs and release on return.
64191 Add a makeString() variant taking 9 arguments, needed by a follow-up patch.
64193 * wtf/text/StringConcatenate.h:
64194 (WTF::tryMakeString):
64197 2011-04-04 Sheriff Bot <webkit.review.bot@gmail.com>
64199 Unreviewed, rolling out r82876.
64200 http://trac.webkit.org/changeset/82876
64201 https://bugs.webkit.org/show_bug.cgi?id=57816
64203 Caused a lot of test crashes (Requested by tkent on #webkit).
64205 * JavaScriptCore.exp:
64206 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
64207 * wtf/FastMalloc.cpp:
64208 (WTF::tryFastMalloc):
64210 (WTF::tryFastCalloc):
64213 (WTF::tryFastRealloc):
64214 (WTF::fastRealloc):
64215 (WTF::fastMallocSize):
64216 (WTF::TCMalloc_PageHeap::isScavengerSuspended):
64217 (WTF::TCMalloc_PageHeap::scheduleScavenger):
64218 (WTF::TCMalloc_PageHeap::suspendScavenger):
64219 (WTF::TCMalloc_PageHeap::signalScavenger):
64220 (WTF::TCMallocStats::malloc):
64221 (WTF::TCMallocStats::free):
64222 (WTF::TCMallocStats::fastCalloc):
64223 (WTF::TCMallocStats::tryFastCalloc):
64224 (WTF::TCMallocStats::calloc):
64225 (WTF::TCMallocStats::fastRealloc):
64226 (WTF::TCMallocStats::tryFastRealloc):
64227 (WTF::TCMallocStats::realloc):
64228 (WTF::TCMallocStats::fastMallocSize):
64229 * wtf/FastMalloc.h:
64230 (WTF::Internal::fastMallocMatchValidationType):
64231 (WTF::Internal::fastMallocMatchValidationValue):
64232 (WTF::Internal::setFastMallocMatchValidationType):
64233 (WTF::fastMallocMatchValidateFree):
64236 2011-04-04 Oliver Hunt <oliver@apple.com>
64238 Reviewed by Antti Koivisto.
64240 Stop JSCell.h from including Structure.h
64241 https://bugs.webkit.org/show_bug.cgi?id=57809
64243 * runtime/GetterSetter.h:
64244 * runtime/JSAPIValueWrapper.h:
64245 * runtime/JSCell.h:
64246 (JSC::JSCell::JSValue::toThisObject):
64247 * runtime/JSString.h:
64248 * runtime/ScopeChain.h:
64249 * runtime/Structure.h:
64250 (JSC::JSCell::isObject):
64251 (JSC::JSCell::isString):
64252 (JSC::JSCell::classInfo):
64253 (JSC::JSCell::createDummyStructure):
64254 (JSC::JSValue::needsThisConversion):
64255 (JSC::MarkStack::internalAppend):
64256 * runtime/StructureChain.h:
64258 2011-04-04 Oliver Hunt <oliver@apple.com>
64262 * wtf/FastMalloc.cpp:
64265 (WTF::fastRealloc):
64267 2011-04-04 Oliver Hunt <oliver@apple.com>
64269 Remove accidental change to Platform.h
64273 2011-04-04 Geoffrey Garen <ggaren@apple.com>
64275 Reviewed by Oliver Hunt.
64277 Fixed a weak-handle-related leak in RegisterFile
64278 https://bugs.webkit.org/show_bug.cgi?id=57793
64280 * interpreter/RegisterFile.cpp: Nixed leaky GlobalObjectNotifier.
64281 * interpreter/RegisterFile.h:
64282 (JSC::RegisterFile::GlobalObjectOwner::finalize):
64283 (JSC::RegisterFile::RegisterFile): Replaced GlobalObjectNotifier with
64284 a per-RegisterFile weak handle owner, which does not leak.
64286 * runtime/WeakGCPtr.h:
64287 (JSC::WeakGCPtr::set): Allow set() to take a context argument, since
64288 RegisterFile now needs this. (Seems like it was an accidental omission
64291 2011-04-04 Oliver Hunt <oliver@apple.com>
64293 Reviewed by Geoffrey Garen.
64295 Make malloc validation useful
64296 https://bugs.webkit.org/show_bug.cgi?id=57502
64298 This patch changes FAST_MALLOC_MATCH_VALIDATION with a general
64299 corruption check that tags the beginning and end of all allocations
64300 to check for write overflows and overwrites the contents of
64301 memory on free in order to (hopefully) show up use-after-free issues
64304 We also turn it on by default for debug builds.
64306 * JavaScriptCore.exp:
64307 * wtf/FastMalloc.cpp:
64308 (WTF::tryFastMalloc):
64310 (WTF::tryFastCalloc):
64313 (WTF::tryFastRealloc):
64314 (WTF::fastRealloc):
64315 (WTF::TCMalloc_PageHeap::isScavengerSuspended):
64316 (WTF::TCMalloc_PageHeap::scheduleScavenger):
64317 (WTF::TCMalloc_PageHeap::suspendScavenger):
64318 (WTF::TCMalloc_PageHeap::signalScavenger):
64319 (WTF::TCMallocStats::malloc):
64320 (WTF::TCMallocStats::free):
64321 (WTF::TCMallocStats::fastCalloc):
64322 (WTF::TCMallocStats::tryFastCalloc):
64323 (WTF::TCMallocStats::calloc):
64324 (WTF::TCMallocStats::fastRealloc):
64325 (WTF::TCMallocStats::tryFastRealloc):
64326 (WTF::TCMallocStats::realloc):
64327 * wtf/FastMalloc.h:
64328 (WTF::Internal::fastMallocValidationHeader):
64329 (WTF::Internal::fastMallocValidationSuffix):
64330 (WTF::Internal::fastMallocMatchValidationType):
64331 (WTF::Internal::setFastMallocMatchValidationType):
64332 (WTF::fastMallocMatchValidateFree):
64333 (WTF::fastMallocValidate):
64336 2011-04-04 Geoffrey Garen <ggaren@apple.com>
64338 Reviewed by Oliver Hunt.
64340 Renamed clearWeakPointers => updateWeakHandles and removed misleading comment
64341 https://bugs.webkit.org/show_bug.cgi?id=57790
64343 * collector/handles/HandleHeap.cpp:
64344 (JSC::HandleHeap::updateWeakHandles): Updated for rename.
64346 * collector/handles/HandleHeap.h: Removed comment claiming that this
64347 function should only be called during teardown, because it's actually
64348 called after every GC pass.
64350 * runtime/Heap.cpp:
64351 (JSC::Heap::destroy):
64352 (JSC::Heap::markRoots): Updated for rename.
64354 2011-04-04 Geoffrey Garen <ggaren@apple.com>
64356 Reviewed by Oliver Hunt.
64358 Standardized handling of handles for immediate values
64359 https://bugs.webkit.org/show_bug.cgi?id=57788
64361 * collector/handles/HandleHeap.cpp:
64362 (JSC::HandleHeap::clearWeakPointers): Don't check for null or non-cell
64363 values here, because our write barrier guarantees that such values are
64364 not in the weak list.
64366 (JSC::HandleHeap::writeBarrier): Standardized on checking for null before
64367 checking for cell, and on using early return instead of if/else.
64369 * collector/handles/HandleHeap.h:
64370 (JSC::HandleHeap::deallocate):
64371 (JSC::HandleHeap::makeWeak): Ditto.
64373 2011-04-04 Geoffrey Garen <ggaren@apple.com>
64377 Removed a redundant variable from HandleHeap
64378 https://bugs.webkit.org/show_bug.cgi?id=57786
64380 Forgot to commit the file that actually removes the data member!
64382 * collector/handles/HandleHeap.h:
64384 2011-04-04 Geoffrey Garen <ggaren@apple.com>
64386 Reviewed by Oliver Hunt.
64388 Removed a redundant variable from HandleHeap
64389 https://bugs.webkit.org/show_bug.cgi?id=57786
64391 We don't need a specific variable to indicate that we're in the middle
64392 of the finalization phase, since m_nextToFinalize already does this.
64394 * collector/handles/HandleHeap.cpp:
64395 (JSC::HandleHeap::HandleHeap):
64396 (JSC::HandleHeap::clearWeakPointers):
64397 (JSC::HandleHeap::writeBarrier):
64399 2011-04-04 Geoffrey Garen <ggaren@apple.com>
64401 Reviewed by Oliver Hunt.
64403 Renamed Finalizer => WeakHandleOwner (in preparation for adding a reachability callback)
64404 https://bugs.webkit.org/show_bug.cgi?id=57775
64406 Also renamed noFinalizer => emptyWeakOwner, since this is really an
64407 optimization for a weak owner with empty callbacks.
64409 * collector/handles/HandleHeap.cpp:
64410 (JSC::HandleHeap::clearWeakPointers): Updated for renames. Removed
64411 redundant initialization of m_nextToFinalize. Moved deletion check inside
64412 weak owner check, since the weak owner can't delete the node if there is
64415 * collector/handles/HandleHeap.h:
64416 (JSC::WeakHandleOwner::~WeakHandleOwner):
64417 (JSC::HandleHeap::makeWeak): Updated for renames.
64419 (JSC::HandleHeap::hasWeakOwner): Changed getFinalizer to hasWeakOwner,
64420 to clarify this function's role in assertions.
64422 (JSC::HandleHeap::Node::Node):
64423 (JSC::HandleHeap::Node::makeWeak):
64424 (JSC::HandleHeap::Node::isWeak):
64425 (JSC::HandleHeap::Node::weakOwner):
64426 (JSC::HandleHeap::Node::weakOwnerContext):
64427 (JSC::HandleHeap::Node::emptyWeakOwner):
64428 * interpreter/RegisterFile.cpp:
64429 (JSC::RegisterFile::globalObjectCollectedNotifier):
64430 * interpreter/RegisterFile.h:
64431 * runtime/WeakGCMap.h:
64432 * runtime/WeakGCPtr.h:
64433 (JSC::WeakGCPtr::WeakGCPtr):
64434 (JSC::WeakGCPtr::set): Updated for renames.
64436 2011-04-04 Oliver Hunt <oliver@apple.com>
64440 * bytecode/Instruction.h:
64441 * interpreter/Interpreter.cpp:
64442 (JSC::Interpreter::tryCachePutByID):
64443 (JSC::Interpreter::tryCacheGetByID):
64445 2011-04-04 Adam Roben <aroben@apple.com>
64447 Delete mt.dep files when doing a clean build due to .vsprops file changes
64449 Apparently this is yet another file that Visual Studio can't figure out it needs to rebuild.
64451 Fixes <http://webkit.org/b/57777> r82850 failed to build on Windows Debug (Build)
64453 Reviewed by Brian Weinstein.
64455 * JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py:
64456 (main): Added dep to the list of extensions we look for when choosing files to delete.
64458 2011-04-01 Oliver Hunt <oliver@apple.com>
64460 Reviewed by Geoffrey Garen.
64462 Make StructureChain GC allocated
64463 https://bugs.webkit.org/show_bug.cgi?id=56695
64465 Make StructureChain GC allocated, and make the various owners
64468 * JavaScriptCore.exp:
64469 * bytecode/CodeBlock.cpp:
64470 (JSC::CodeBlock::dump):
64471 (JSC::CodeBlock::derefStructures):
64472 (JSC::CodeBlock::refStructures):
64473 (JSC::CodeBlock::markAggregate):
64474 * bytecode/Instruction.h:
64475 (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set):
64476 (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList):
64477 (JSC::PolymorphicAccessStructureList::derefStructures):
64478 (JSC::PolymorphicAccessStructureList::markAggregate):
64479 (JSC::Instruction::Instruction):
64480 * bytecode/StructureStubInfo.cpp:
64481 (JSC::StructureStubInfo::deref):
64482 (JSC::StructureStubInfo::markAggregate):
64483 * bytecode/StructureStubInfo.h:
64484 (JSC::StructureStubInfo::initGetByIdChain):
64485 (JSC::StructureStubInfo::initPutByIdTransition):
64486 * bytecompiler/BytecodeGenerator.cpp:
64487 (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
64488 (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
64489 * collector/handles/Handle.h:
64490 (JSC::HandleConverter::operator->):
64491 (JSC::HandleConverter::operator*):
64492 * interpreter/Interpreter.cpp:
64493 (JSC::Interpreter::privateExecute):
64494 * jit/JITOpcodes.cpp:
64495 (JSC::JIT::emit_op_jneq_ptr):
64496 * jit/JITOpcodes32_64.cpp:
64497 (JSC::JIT::emit_op_jneq_ptr):
64498 * jit/JITPropertyAccess.cpp:
64499 (JSC::JIT::privateCompileGetByIdChainList):
64500 * jit/JITPropertyAccess32_64.cpp:
64501 (JSC::JIT::privateCompileGetByIdChainList):
64502 * jit/JITStubs.cpp:
64503 (JSC::JITThunks::tryCachePutByID):
64504 (JSC::JITThunks::tryCacheGetByID):
64505 (JSC::getPolymorphicAccessStructureListSlot):
64506 (JSC::DEFINE_STUB_FUNCTION):
64507 * runtime/JSCell.h:
64508 * runtime/JSGlobalData.cpp:
64509 (JSC::JSGlobalData::JSGlobalData):
64510 * runtime/JSGlobalData.h:
64511 * runtime/JSGlobalObject.cpp:
64512 (JSC::markIfNeeded):
64513 * runtime/JSGlobalObject.h:
64514 (JSC::Structure::prototypeChain):
64515 * runtime/JSObject.h:
64516 (JSC::JSObject::putDirectInternal):
64517 (JSC::JSObject::markChildrenDirect):
64518 * runtime/JSPropertyNameIterator.cpp:
64519 (JSC::JSPropertyNameIterator::create):
64520 (JSC::JSPropertyNameIterator::get):
64521 (JSC::JSPropertyNameIterator::markChildren):
64522 * runtime/JSPropertyNameIterator.h:
64523 (JSC::JSPropertyNameIterator::setCachedPrototypeChain):
64524 * runtime/JSZombie.cpp:
64525 (JSC::JSZombie::leakedZombieStructure):
64526 * runtime/JSZombie.h:
64527 * runtime/MarkStack.h:
64528 (JSC::MarkStack::append):
64529 * runtime/MarkedBlock.cpp:
64530 (JSC::MarkedBlock::sweep):
64531 * runtime/Structure.cpp:
64532 (JSC::Structure::addPropertyTransition):
64533 * runtime/Structure.h:
64534 (JSC::Structure::markAggregate):
64535 * runtime/StructureChain.cpp:
64536 (JSC::StructureChain::StructureChain):
64537 (JSC::StructureChain::~StructureChain):
64538 (JSC::StructureChain::markChildren):
64539 * runtime/StructureChain.h:
64540 (JSC::StructureChain::create):
64541 (JSC::StructureChain::createStructure):
64542 * runtime/WriteBarrier.h:
64543 (JSC::WriteBarrierBase::get):
64544 (JSC::WriteBarrierBase::operator*):
64545 (JSC::WriteBarrierBase::operator->):
64547 2011-04-01 Geoffrey Garen <ggaren@apple.com>
64549 Reviewed by Oliver Hunt.
64551 Removed some complexity from HandleHeap
64552 https://bugs.webkit.org/show_bug.cgi?id=57650
64554 Eliminated pointer-tagging flags.
64556 Tied being weak to having a finalizer (or at least a finalizer sentinel).
64558 * collector/handles/HandleHeap.cpp:
64559 (JSC::HandleHeap::clearWeakPointers): Removed the special self-destroying
64560 flag. It was unused. If we bring it back, we'll probably use a shared
64561 autodeallocating finalizer instead.
64563 * collector/handles/HandleHeap.h:
64564 (JSC::HandleHeap::makeWeak): makeWeak and adding a finalizer are now
64565 a single, atomic operation -- this makes the relationship between
64566 finalizers and weak pointers clearer, and impossible to get wrong.
64568 (JSC::HandleHeap::Node::Node):
64569 (JSC::HandleHeap::Node::handleHeap): No more flags.
64571 (JSC::HandleHeap::Node::makeWeak):
64572 (JSC::HandleHeap::Node::isWeak): Ditto above. We use a special sentienl
64573 value in the finalizer slot to indicate that a handle is weak but doesn't
64574 require an external function call for finalization.
64576 2011-04-01 Geoffrey Garen <ggaren@apple.com>
64578 Reviewed by Oliver Hunt.
64580 Removed WeakGCMap::deprecatedRemove because it was deprecated and unused
64581 https://bugs.webkit.org/show_bug.cgi?id=57648
64583 * runtime/WeakGCMap.h:
64585 2011-04-01 Adam Roben <aroben@apple.com>
64587 Maintain the invariant that Lexer::m_current is set to -1 when at the end of the code buffer
64589 Covered by existing tests.
64591 Fixes <http://webkit.org/b/56699>.
64593 Reviewed by Oliver Hunt.
64596 (JSC::Lexer::setOffset): Copied code from Lexer::shift to update m_current, because
64597 supposedly the idiom that function uses is fast.
64599 2011-03-31 Thouraya ANDOLSI <thouraya.andolsi@st.com>
64601 Reviewed by Oliver Hunt.
64604 https://bugs.webkit.org/show_bug.cgi?id=44329
64606 Add YARR support for SH4 platforms (disabled by default).
64609 * assembler/MacroAssembler.h:
64610 * assembler/MacroAssemblerSH4.cpp: Added.
64611 * assembler/MacroAssemblerSH4.h: Added.
64612 * assembler/SH4Assembler.h: Added.
64613 * yarr/YarrJIT.cpp:
64615 2011-03-30 Adam Roben <aroben@apple.com>
64619 * JavaScriptCore.vcproj/JavaScriptCore.sln: Serialized project dependencies so projects
64620 don't try to build in parallel (which doesn't mesh with our buildfailed mechanism).
64622 2011-03-30 Oliver Hunt <oliver@apple.com>
64626 * bytecode/CodeBlock.cpp:
64627 (JSC::CodeBlock::dump):
64628 (JSC::CodeBlock::derefStructures):
64629 (JSC::CodeBlock::refStructures):
64630 (JSC::CodeBlock::markAggregate):
64631 * bytecode/Instruction.h:
64632 (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set):
64633 (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList):
64634 (JSC::PolymorphicAccessStructureList::derefStructures):
64635 (JSC::Instruction::Instruction):
64636 * bytecode/StructureStubInfo.cpp:
64637 (JSC::StructureStubInfo::deref):
64638 * bytecode/StructureStubInfo.h:
64639 (JSC::StructureStubInfo::initGetByIdChain):
64640 (JSC::StructureStubInfo::initPutByIdTransition):
64641 * bytecompiler/BytecodeGenerator.cpp:
64642 (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
64643 (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
64644 * interpreter/Interpreter.cpp:
64645 (JSC::Interpreter::privateExecute):
64646 * jit/JITOpcodes.cpp:
64647 (JSC::JIT::emit_op_jneq_ptr):
64648 * jit/JITOpcodes32_64.cpp:
64649 (JSC::JIT::emit_op_jneq_ptr):
64650 * jit/JITPropertyAccess.cpp:
64651 (JSC::JIT::privateCompileGetByIdChainList):
64652 * jit/JITPropertyAccess32_64.cpp:
64653 (JSC::JIT::privateCompileGetByIdChainList):
64654 * jit/JITStubs.cpp:
64655 (JSC::getPolymorphicAccessStructureListSlot):
64656 (JSC::DEFINE_STUB_FUNCTION):
64657 * runtime/JSCell.h:
64658 * runtime/JSGlobalData.cpp:
64659 (JSC::JSGlobalData::JSGlobalData):
64660 * runtime/JSGlobalData.h:
64661 * runtime/JSGlobalObject.cpp:
64662 (JSC::markIfNeeded):
64663 * runtime/JSGlobalObject.h:
64664 (JSC::Structure::prototypeChain):
64665 * runtime/JSObject.h:
64666 (JSC::JSObject::markChildrenDirect):
64667 * runtime/JSPropertyNameIterator.cpp:
64668 (JSC::JSPropertyNameIterator::create):
64669 (JSC::JSPropertyNameIterator::get):
64670 (JSC::JSPropertyNameIterator::markChildren):
64671 * runtime/JSPropertyNameIterator.h:
64672 (JSC::JSPropertyNameIterator::setCachedPrototypeChain):
64673 * runtime/MarkStack.h:
64674 (JSC::MarkStack::append):
64675 * runtime/Structure.h:
64676 * runtime/StructureChain.cpp:
64677 (JSC::StructureChain::StructureChain):
64678 * runtime/StructureChain.h:
64679 (JSC::StructureChain::create):
64681 2011-03-29 Matthew Delaney <mdelaney@apple.com>
64683 Reviewed by Simon Fraser.
64685 Use the Accelerate vImage vectorized (un)premultiplyImageData functions for ImageBufferCG
64687 https://bugs.webkit.org/show_bug.cgi?id=53134
64689 * wtf/Platform.h: Added in WTF flag for using the Accelerate framework
64691 2011-03-30 Steve Falkenburg <sfalken@apple.com>
64693 Reviewed by Adam Roben.
64695 Share most vsprops between Release and Production builds in releaseproduction.vsprops
64696 https://bugs.webkit.org/show_bug.cgi?id=57508
64698 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreProduction.vsprops:
64699 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreRelease.vsprops:
64700 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleaseCairoCFLite.vsprops:
64701 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGO.vsprops:
64702 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGOOptimize.vsprops:
64703 * JavaScriptCore.vcproj/WTF/WTFProduction.vsprops:
64704 * JavaScriptCore.vcproj/WTF/WTFRelease.vsprops:
64705 * JavaScriptCore.vcproj/WTF/WTFReleaseCairoCFLite.vsprops:
64706 * JavaScriptCore.vcproj/WTF/WTFReleasePGO.vsprops:
64707 * JavaScriptCore.vcproj/jsc/jscProduction.vsprops:
64708 * JavaScriptCore.vcproj/jsc/jscRelease.vsprops:
64709 * JavaScriptCore.vcproj/jsc/jscReleaseCairoCFLite.vsprops:
64710 * JavaScriptCore.vcproj/jsc/jscReleasePGO.vsprops:
64711 * JavaScriptCore.vcproj/testapi/testapiProduction.vsprops:
64712 * JavaScriptCore.vcproj/testapi/testapiRelease.vsprops:
64713 * JavaScriptCore.vcproj/testapi/testapiReleaseCairoCFLite.vsprops:
64715 2011-03-30 Mark Rowe <mrowe@apple.com>
64717 Reviewed by Adam Roben.
64719 Explicitly prevent testapi and minidom from being installed rather than relying
64720 on Xcode's current behavior of not installing if INSTALL_PATH is not explicitly
64721 set at the target level.
64723 <rdar://problem/9206357>
64725 * JavaScriptCore.xcodeproj/project.pbxproj:
64727 2011-03-30 Timur Iskhodzhanov <timurrrr@google.com>
64729 Reviewed by Alexey Proskuryakov.
64731 Add some dynamic annotations to JavaScriptCore/wtf
64732 https://bugs.webkit.org/show_bug.cgi?id=53747
64734 By using these annotations we can improve the precision of finding
64735 WebKit errors using dynamic analysis tools like ThreadSanitizer and Valgrind.
64736 These annotations don't affect the compiled binaries unless USE(DYNAMIC_ANNOTATIONS) is "1".
64738 These files don't add new functionality, so don't need extra tests.
64741 * JavaScriptCore.gypi:
64742 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
64743 * JavaScriptCore.xcodeproj/project.pbxproj:
64744 * wtf/CMakeLists.txt:
64745 * wtf/DynamicAnnotations.cpp: Added.
64746 (WTFAnnotateBenignRaceSized):
64747 (WTFAnnotateHappensBefore):
64748 (WTFAnnotateHappensAfter):
64749 * wtf/DynamicAnnotations.h: Added.
64750 * wtf/ThreadSafeRefCounted.h:
64751 (WTF::ThreadSafeRefCountedBase::derefBase):
64752 * wtf/text/StringStatics.cpp:
64753 (WTF::StringImpl::empty):
64755 2011-03-30 Oliver Hunt <oliver@apple.com>
64757 Reviewed by Geoffrey Garen.
64759 Make StructureChain GC allocated
64760 https://bugs.webkit.org/show_bug.cgi?id=56695
64762 Make StructureChain GC allocated, and make the various owners
64765 * bytecode/CodeBlock.cpp:
64766 (JSC::CodeBlock::dump):
64767 (JSC::CodeBlock::derefStructures):
64768 (JSC::CodeBlock::refStructures):
64769 (JSC::CodeBlock::markAggregate):
64770 * bytecode/Instruction.h:
64771 (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set):
64772 (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList):
64773 (JSC::PolymorphicAccessStructureList::derefStructures):
64774 (JSC::PolymorphicAccessStructureList::markAggregate):
64775 (JSC::Instruction::Instruction):
64776 * bytecode/StructureStubInfo.cpp:
64777 (JSC::StructureStubInfo::deref):
64778 (JSC::StructureStubInfo::markAggregate):
64779 * bytecode/StructureStubInfo.h:
64780 (JSC::StructureStubInfo::initGetByIdChain):
64781 (JSC::StructureStubInfo::initPutByIdTransition):
64782 * bytecompiler/BytecodeGenerator.cpp:
64783 (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
64784 (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
64785 * interpreter/Interpreter.cpp:
64786 (JSC::Interpreter::privateExecute):
64787 * jit/JITOpcodes.cpp:
64788 (JSC::JIT::emit_op_jneq_ptr):
64789 * jit/JITOpcodes32_64.cpp:
64790 (JSC::JIT::emit_op_jneq_ptr):
64791 * jit/JITPropertyAccess.cpp:
64792 (JSC::JIT::privateCompileGetByIdChainList):
64793 * jit/JITPropertyAccess32_64.cpp:
64794 (JSC::JIT::privateCompileGetByIdChainList):
64795 * jit/JITStubs.cpp:
64796 (JSC::getPolymorphicAccessStructureListSlot):
64797 (JSC::DEFINE_STUB_FUNCTION):
64798 * runtime/JSCell.h:
64799 * runtime/JSGlobalData.cpp:
64800 (JSC::JSGlobalData::JSGlobalData):
64801 * runtime/JSGlobalData.h:
64802 * runtime/JSGlobalObject.cpp:
64803 (JSC::markIfNeeded):
64804 * runtime/JSGlobalObject.h:
64805 (JSC::Structure::prototypeChain):
64806 * runtime/JSObject.h:
64807 (JSC::JSObject::markChildrenDirect):
64808 * runtime/JSPropertyNameIterator.cpp:
64809 (JSC::JSPropertyNameIterator::create):
64810 (JSC::JSPropertyNameIterator::get):
64811 (JSC::JSPropertyNameIterator::markChildren):
64812 * runtime/JSPropertyNameIterator.h:
64813 (JSC::JSPropertyNameIterator::setCachedPrototypeChain):
64814 * runtime/MarkStack.h:
64815 (JSC::MarkStack::append):
64816 * runtime/Structure.h:
64817 (JSC::Structure::cachedPrototypeChainSlot):
64818 * runtime/StructureChain.cpp:
64819 (JSC::StructureChain::StructureChain):
64820 * runtime/StructureChain.h:
64821 (JSC::StructureChain::create):
64822 (JSC::StructureChain::createStructure):
64824 2011-03-30 Steve Falkenburg <sfalken@apple.com>
64826 Reviewed by Adam Roben.
64828 Update Windows production build logic for new production configurations
64829 https://bugs.webkit.org/show_bug.cgi?id=57494
64831 * JavaScriptCore.vcproj/JavaScriptCore.make:
64832 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreProduction.vsprops:
64833 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGO.vsprops:
64834 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGOOptimize.vsprops:
64835 * JavaScriptCore.vcproj/WTF/WTFProduction.vsprops:
64836 * JavaScriptCore.vcproj/WTF/WTFReleasePGO.vsprops:
64837 * JavaScriptCore.vcproj/jsc/jscProduction.vsprops:
64838 * JavaScriptCore.vcproj/jsc/jscReleasePGO.vsprops:
64839 * JavaScriptCore.vcproj/testapi/testapiProduction.vsprops:
64841 2011-03-30 Steve Falkenburg <sfalken@apple.com>
64843 Reviewed by Adam Roben.
64845 Rename Windows configuration Release_LTCG to Production for clarity
64846 https://bugs.webkit.org/show_bug.cgi?id=57465
64848 * JavaScriptCore.vcproj/JavaScriptCore.sln:
64849 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
64850 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
64851 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreProduction.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleaseLTCG.vsprops.
64852 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleaseLTCG.vsprops: Removed.
64853 * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:
64854 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
64855 * JavaScriptCore.vcproj/WTF/WTFProduction.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFReleaseLTCG.vsprops.
64856 * JavaScriptCore.vcproj/WTF/WTFReleaseLTCG.vsprops: Removed.
64857 * JavaScriptCore.vcproj/jsc/jsc.vcproj:
64858 * JavaScriptCore.vcproj/jsc/jscProduction.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/jsc/jscReleaseLTCG.vsprops.
64859 * JavaScriptCore.vcproj/jsc/jscReleaseLTCG.vsprops: Removed.
64860 * JavaScriptCore.vcproj/testapi/testapi.vcproj:
64861 * JavaScriptCore.vcproj/testapi/testapiProduction.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapiReleaseLTCG.vsprops.
64862 * JavaScriptCore.vcproj/testapi/testapiReleaseLTCG.vsprops: Removed.
64864 2011-03-30 Zoltan Herczeg <zherczeg@inf.u-szeged.hu>
64866 Reviewed by Maciej Stachowiak.
64868 Add the NEXT_OPCODE() macro to the DFG-JIT parser
64869 https://bugs.webkit.org/show_bug.cgi?id=57322
64871 In JavaScriptCore we use macros to jump to the next opcode
64872 (both in interpreter and JIT). This macro is added to the
64873 DFG-JIT parser as well.
64875 * dfg/DFGByteCodeParser.cpp:
64876 (JSC::DFG::ByteCodeParser::parse):
64878 2011-03-29 Geoffrey Garen <ggaren@apple.com>
64880 Reviewed by Darin Adler.
64882 ~25% regression on v8-splay in the SunSpider harness
64883 https://bugs.webkit.org/show_bug.cgi?id=56128
64885 I'm not sure if this is the root cause of the regression Stephanie
64886 measured, but it seems to get us back to previous v8-splay times.
64888 SunSpider reports no change. v8-splay says 41% faster.
64890 * runtime/Heap.cpp:
64891 (JSC::Heap::reset): Make marking proportional to 1X the size of the heap,
64892 not .5X the size of the heap. When the heap is large, this makes a big
64893 difference. (Our old heap growth policy matched this. You can see by
64894 looking at resizeBlocks in revisions prior to r77699.)
64896 2011-03-29 Steve Falkenburg <sfalken@apple.com>
64898 Reviewed by Darin Adler.
64900 Use per-configuration vsprops in JavaScriptCore to avoid WebKitVSPropsRedirectionDir removal by MSVC IDE
64901 https://bugs.webkit.org/show_bug.cgi?id=57350
64903 Visual Studio's IDE was removing instances of $(WebKitVSPropsRedirectionDir) from
64904 InheritedPropertySheet rules in our vcproj files when the vcproj was edited from within
64905 the IDE. To avoid this, add a separate vsprops file for each project configuration that
64906 contains the required inherited property sheets.
64908 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
64909 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreDebug.vsprops: Added.
64910 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreDebugAll.vsprops: Added.
64911 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreDebugCairoCFLite.vsprops: Added.
64912 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreRelease.vsprops: Added.
64913 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleaseCairoCFLite.vsprops: Added.
64914 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleaseLTCG.vsprops: Added.
64915 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGO.vsprops: Added.
64916 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGOOptimize.vsprops: Added.
64917 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
64918 * JavaScriptCore.vcproj/WTF/WTFDebug.vsprops: Added.
64919 * JavaScriptCore.vcproj/WTF/WTFDebugAll.vsprops: Added.
64920 * JavaScriptCore.vcproj/WTF/WTFDebugCairoCFLite.vsprops: Added.
64921 * JavaScriptCore.vcproj/WTF/WTFRelease.vsprops: Added.
64922 * JavaScriptCore.vcproj/WTF/WTFReleaseCairoCFLite.vsprops: Added.
64923 * JavaScriptCore.vcproj/WTF/WTFReleaseLTCG.vsprops: Added.
64924 * JavaScriptCore.vcproj/WTF/WTFReleasePGO.vsprops: Added.
64925 * JavaScriptCore.vcproj/jsc/jsc.vcproj:
64926 * JavaScriptCore.vcproj/jsc/jscDebug.vsprops: Added.
64927 * JavaScriptCore.vcproj/jsc/jscDebugAll.vsprops: Added.
64928 * JavaScriptCore.vcproj/jsc/jscDebugCairoCFLite.vsprops: Added.
64929 * JavaScriptCore.vcproj/jsc/jscRelease.vsprops: Added.
64930 * JavaScriptCore.vcproj/jsc/jscReleaseCairoCFLite.vsprops: Added.
64931 * JavaScriptCore.vcproj/jsc/jscReleaseLTCG.vsprops: Added.
64932 * JavaScriptCore.vcproj/jsc/jscReleasePGO.vsprops: Added.
64933 * JavaScriptCore.vcproj/testapi/testapi.vcproj:
64934 * JavaScriptCore.vcproj/testapi/testapiDebug.vsprops: Added.
64935 * JavaScriptCore.vcproj/testapi/testapiDebugAll.vsprops: Added.
64936 * JavaScriptCore.vcproj/testapi/testapiDebugCairoCFLite.vsprops: Added.
64937 * JavaScriptCore.vcproj/testapi/testapiRelease.vsprops: Added.
64938 * JavaScriptCore.vcproj/testapi/testapiReleaseCairoCFLite.vsprops: Added.
64939 * JavaScriptCore.vcproj/testapi/testapiReleaseLTCG.vsprops: Added.
64941 2011-03-29 Oliver Hunt <oliver@apple.com>
64943 Reviewed by Eric Seidel.
64945 REGRESSION(r82173): Causes assertion and test failures in run-javascriptcore-tests on Windows (Requested by aroben on #webkit).
64946 https://bugs.webkit.org/show_bug.cgi?id=57333
64948 constructDate now takes the global object explicitly as it may be called
64949 by functions other than the constructor itself.
64951 * API/JSObjectRef.cpp:
64952 (JSObjectMakeDate):
64953 * runtime/DateConstructor.cpp:
64954 (JSC::constructDate):
64955 (JSC::constructWithDateConstructor):
64956 * runtime/DateConstructor.h:
64958 2011-03-29 Ben Taylor <bentaylor.solx86@gmail.com>
64960 Reviewed by Benjamin Poulain.
64962 https://bugs.webkit.org/show_bug.cgi?id=41953
64964 Fix compile error on Solaris 10/Sun Studio 12 CC emanating from MathExtras.h
64966 * wtf/MathExtras.h:
64968 2011-03-29 Ben Taylor <bentaylor.solx86@gmail.com>
64970 Reviewed by Darin Adler.
64972 https://bugs.webkit.org/show_bug.cgi?id=57231
64973 Add conditional for SUNCC supporting alignment macros
64975 Compile fix for Solaris 10/Sun Studio 12 CC
64979 2011-03-29 Ben Taylor <bentaylor.solx86@gmail.com>
64981 Reviewed by Darin Adler.
64983 https://bugs.webkit.org/show_bug.cgi?id=57256
64985 Fix crash on misaligned reads on Solaris 10/Sparc
64987 * wtf/text/AtomicString.cpp:
64990 2011-03-28 Oliver Hunt <oliver@apple.com>
64992 Reviewed by Geoffrey Garen.
64994 instanceof Array test fails when using iframes
64995 https://bugs.webkit.org/show_bug.cgi?id=17250
64997 This is a problem with all built in constructors, the use of
64998 lexicalGlobalObject rather than the constructors own
64999 global object reference means that a builtin will always use
65000 the prototype from the lexical global object rather than that
65001 of the constructors origin.
65003 * API/JSObjectRef.cpp:
65004 (JSObjectMakeFunction):
65005 (JSObjectMakeRegExp):
65006 * JavaScriptCore.exp:
65007 * runtime/ArrayConstructor.cpp:
65008 (JSC::constructArrayWithSizeQuirk):
65009 * runtime/BooleanConstructor.cpp:
65010 (JSC::constructBoolean):
65011 (JSC::constructBooleanFromImmediateBoolean):
65012 * runtime/BooleanConstructor.h:
65013 * runtime/DateConstructor.cpp:
65014 (JSC::constructDate):
65015 * runtime/DateInstance.cpp:
65016 * runtime/DateInstance.h:
65017 * runtime/ErrorConstructor.cpp:
65018 (JSC::constructWithErrorConstructor):
65019 (JSC::callErrorConstructor):
65020 * runtime/FunctionConstructor.cpp:
65021 (JSC::constructWithFunctionConstructor):
65022 (JSC::callFunctionConstructor):
65023 (JSC::constructFunction):
65024 * runtime/FunctionConstructor.h:
65025 * runtime/JSCell.cpp:
65026 (JSC::JSCell::getOwnPropertySlot):
65027 (JSC::JSCell::put):
65028 (JSC::JSCell::deleteProperty):
65029 (JSC::JSCell::toThisObject):
65030 (JSC::JSCell::toObject):
65031 * runtime/JSCell.h:
65032 (JSC::JSCell::JSValue::toObject):
65033 * runtime/JSNotAnObject.cpp:
65034 (JSC::JSNotAnObject::toObject):
65035 * runtime/JSNotAnObject.h:
65036 * runtime/JSObject.cpp:
65037 (JSC::JSObject::toObject):
65038 * runtime/JSObject.h:
65039 * runtime/JSString.cpp:
65040 (JSC::StringObject::create):
65041 (JSC::JSString::toObject):
65042 (JSC::JSString::toThisObject):
65043 * runtime/JSString.h:
65044 * runtime/JSValue.cpp:
65045 (JSC::JSValue::toObjectSlowCase):
65046 (JSC::JSValue::toThisObjectSlowCase):
65047 (JSC::JSValue::synthesizeObject):
65048 * runtime/JSValue.h:
65049 * runtime/NumberConstructor.cpp:
65050 (JSC::constructWithNumberConstructor):
65051 * runtime/NumberObject.cpp:
65052 (JSC::constructNumber):
65053 * runtime/NumberObject.h:
65054 * runtime/ObjectConstructor.cpp:
65055 (JSC::constructObject):
65056 (JSC::constructWithObjectConstructor):
65057 (JSC::callObjectConstructor):
65058 * runtime/RegExpConstructor.cpp:
65059 (JSC::constructRegExp):
65060 (JSC::constructWithRegExpConstructor):
65061 (JSC::callRegExpConstructor):
65062 * runtime/RegExpConstructor.h:
65063 * runtime/StringConstructor.cpp:
65064 (JSC::constructWithStringConstructor):
65065 * runtime/StringObject.h:
65067 2011-03-28 Geoffrey Garen <ggaren@apple.com>
65069 Reviewed by Oliver Hunt.
65071 REGRESSION [r78794-r79249] Allocation of memory is slow when number of active objects is large
65072 https://bugs.webkit.org/show_bug.cgi?id=56823
65074 Partial fix for most of the problem. (TOT still shows a regression, though.)
65076 * runtime/Heap.cpp:
65077 (JSC::Heap::reportExtraMemoryCostSlowCase): Use highWaterMark(), instead of
65078 capacity(), since capacity() is O(n) relative to the size of the heap.
65080 In limited circumstances, capacity() is also worse than highWaterMark()
65081 for measuring extra cost relative to heap size, since capacity() only
65082 measures the *current* capacity of the heap, but the heap will grow if
65083 necessary to attain highWaterMark().
65085 2011-03-28 Oliver Hunt <oliver@apple.com>
65087 REGRESSION(r82130): It made all tests crash (Requested by Ossy on #webkit).
65088 https://bugs.webkit.org/show_bug.cgi?id=57251
65090 Build fix, had remnant of another patch in r82130
65092 * jit/JITPropertyAccess.cpp:
65093 (JSC::JIT::privateCompileGetByIdChainList):
65095 2011-03-27 Oliver Hunt <oliver@apple.com>
65097 Reviewed by Maciej Stachowiak.
65099 Add additional immediate types to allow us to distinguish the source of a JIT immediate
65100 https://bugs.webkit.org/show_bug.cgi?id=57190
65102 Allow us to distinguish whether a JIT immediate is a value that we
65103 control (TrustedImm32 and TrustedImmPtr) vs. ones that can be controlled
65104 or influenced by code we are compiling. Currently we do nothing with this
65105 information -- this change is large and mechanical but would obscure any
65106 logic changes that we would have made.
65108 * assembler/AbstractMacroAssembler.h:
65109 (JSC::AbstractMacroAssembler::TrustedImmPtr::TrustedImmPtr):
65110 (JSC::AbstractMacroAssembler::ImmPtr::ImmPtr):
65111 (JSC::AbstractMacroAssembler::TrustedImm32::TrustedImm32):
65112 (JSC::AbstractMacroAssembler::Imm32::Imm32):
65113 * assembler/MacroAssembler.h:
65114 (JSC::MacroAssembler::pop):
65115 (JSC::MacroAssembler::poke):
65116 (JSC::MacroAssembler::branchPtr):
65117 (JSC::MacroAssembler::branch32):
65118 (JSC::MacroAssembler::addPtr):
65119 (JSC::MacroAssembler::andPtr):
65120 (JSC::MacroAssembler::orPtr):
65121 (JSC::MacroAssembler::subPtr):
65122 (JSC::MacroAssembler::xorPtr):
65123 (JSC::MacroAssembler::setPtr):
65124 (JSC::MacroAssembler::storePtr):
65125 (JSC::MacroAssembler::branchTestPtr):
65126 (JSC::MacroAssembler::branchSubPtr):
65127 (JSC::MacroAssembler::branchTest8):
65128 * assembler/MacroAssemblerARM.h:
65129 (JSC::MacroAssemblerARM::add32):
65130 (JSC::MacroAssemblerARM::and32):
65131 (JSC::MacroAssemblerARM::lshift32):
65132 (JSC::MacroAssemblerARM::mul32):
65133 (JSC::MacroAssemblerARM::or32):
65134 (JSC::MacroAssemblerARM::rshift32):
65135 (JSC::MacroAssemblerARM::urshift32):
65136 (JSC::MacroAssemblerARM::sub32):
65137 (JSC::MacroAssemblerARM::xor32):
65138 (JSC::MacroAssemblerARM::store32):
65139 (JSC::MacroAssemblerARM::push):
65140 (JSC::MacroAssemblerARM::move):
65141 (JSC::MacroAssemblerARM::branch8):
65142 (JSC::MacroAssemblerARM::branch32):
65143 (JSC::MacroAssemblerARM::branch32WithUnalignedHalfWords):
65144 (JSC::MacroAssemblerARM::branch16):
65145 (JSC::MacroAssemblerARM::branchTest8):
65146 (JSC::MacroAssemblerARM::branchTest32):
65147 (JSC::MacroAssemblerARM::branchAdd32):
65148 (JSC::MacroAssemblerARM::branchMul32):
65149 (JSC::MacroAssemblerARM::branchSub32):
65150 (JSC::MacroAssemblerARM::set32Compare32):
65151 (JSC::MacroAssemblerARM::set8Compare32):
65152 (JSC::MacroAssemblerARM::set32Test32):
65153 (JSC::MacroAssemblerARM::set32Test8):
65154 (JSC::MacroAssemblerARM::moveWithPatch):
65155 (JSC::MacroAssemblerARM::branchPtrWithPatch):
65156 (JSC::MacroAssemblerARM::storePtrWithPatch):
65157 * assembler/MacroAssemblerARMv7.h:
65158 (JSC::MacroAssemblerARMv7::add32):
65159 (JSC::MacroAssemblerARMv7::and32):
65160 (JSC::MacroAssemblerARMv7::lshift32):
65161 (JSC::MacroAssemblerARMv7::mul32):
65162 (JSC::MacroAssemblerARMv7::or32):
65163 (JSC::MacroAssemblerARMv7::rshift32):
65164 (JSC::MacroAssemblerARMv7::urshift32):
65165 (JSC::MacroAssemblerARMv7::sub32):
65166 (JSC::MacroAssemblerARMv7::xor32):
65167 (JSC::MacroAssemblerARMv7::load32):
65168 (JSC::MacroAssemblerARMv7::load32WithAddressOffsetPatch):
65169 (JSC::MacroAssemblerARMv7::load16):
65170 (JSC::MacroAssemblerARMv7::store32WithAddressOffsetPatch):
65171 (JSC::MacroAssemblerARMv7::store32):
65172 (JSC::MacroAssemblerARMv7::loadDouble):
65173 (JSC::MacroAssemblerARMv7::storeDouble):
65174 (JSC::MacroAssemblerARMv7::push):
65175 (JSC::MacroAssemblerARMv7::move):
65176 (JSC::MacroAssemblerARMv7::compare32):
65177 (JSC::MacroAssemblerARMv7::test32):
65178 (JSC::MacroAssemblerARMv7::branch32):
65179 (JSC::MacroAssemblerARMv7::branch32WithUnalignedHalfWords):
65180 (JSC::MacroAssemblerARMv7::branch16):
65181 (JSC::MacroAssemblerARMv7::branch8):
65182 (JSC::MacroAssemblerARMv7::branchTest32):
65183 (JSC::MacroAssemblerARMv7::branchTest8):
65184 (JSC::MacroAssemblerARMv7::branchAdd32):
65185 (JSC::MacroAssemblerARMv7::branchMul32):
65186 (JSC::MacroAssemblerARMv7::branchSub32):
65187 (JSC::MacroAssemblerARMv7::nearCall):
65188 (JSC::MacroAssemblerARMv7::call):
65189 (JSC::MacroAssemblerARMv7::set32Compare32):
65190 (JSC::MacroAssemblerARMv7::set8Compare32):
65191 (JSC::MacroAssemblerARMv7::set32Test32):
65192 (JSC::MacroAssemblerARMv7::set32Test8):
65193 (JSC::MacroAssemblerARMv7::moveWithPatch):
65194 (JSC::MacroAssemblerARMv7::branchPtrWithPatch):
65195 (JSC::MacroAssemblerARMv7::storePtrWithPatch):
65196 (JSC::MacroAssemblerARMv7::tailRecursiveCall):
65197 (JSC::MacroAssemblerARMv7::makeJump):
65198 (JSC::MacroAssemblerARMv7::makeBranch):
65199 (JSC::MacroAssemblerARMv7::setupArmAddress):
65200 (JSC::MacroAssemblerARMv7::makeBaseIndexBase):
65201 (JSC::MacroAssemblerARMv7::moveFixedWidthEncoding):
65202 * assembler/MacroAssemblerMIPS.h:
65203 (JSC::MacroAssemblerMIPS::add32):
65204 (JSC::MacroAssemblerMIPS::and32):
65205 (JSC::MacroAssemblerMIPS::lshift32):
65206 (JSC::MacroAssemblerMIPS::mul32):
65207 (JSC::MacroAssemblerMIPS::or32):
65208 (JSC::MacroAssemblerMIPS::rshift32):
65209 (JSC::MacroAssemblerMIPS::urshift32):
65210 (JSC::MacroAssemblerMIPS::sub32):
65211 (JSC::MacroAssemblerMIPS::xor32):
65212 (JSC::MacroAssemblerMIPS::load32):
65213 (JSC::MacroAssemblerMIPS::load32WithAddressOffsetPatch):
65214 (JSC::MacroAssemblerMIPS::store32WithAddressOffsetPatch):
65215 (JSC::MacroAssemblerMIPS::store32):
65216 (JSC::MacroAssemblerMIPS::push):
65217 (JSC::MacroAssemblerMIPS::move):
65218 (JSC::MacroAssemblerMIPS::branch8):
65219 (JSC::MacroAssemblerMIPS::branch32):
65220 (JSC::MacroAssemblerMIPS::branch32WithUnalignedHalfWords):
65221 (JSC::MacroAssemblerMIPS::branch16):
65222 (JSC::MacroAssemblerMIPS::branchTest32):
65223 (JSC::MacroAssemblerMIPS::branchTest8):
65224 (JSC::MacroAssemblerMIPS::branchAdd32):
65225 (JSC::MacroAssemblerMIPS::branchMul32):
65226 (JSC::MacroAssemblerMIPS::branchSub32):
65227 (JSC::MacroAssemblerMIPS::set8Compare32):
65228 (JSC::MacroAssemblerMIPS::set32Compare32):
65229 (JSC::MacroAssemblerMIPS::set32Test8):
65230 (JSC::MacroAssemblerMIPS::set32Test32):
65231 (JSC::MacroAssemblerMIPS::moveWithPatch):
65232 (JSC::MacroAssemblerMIPS::branchPtrWithPatch):
65233 (JSC::MacroAssemblerMIPS::storePtrWithPatch):
65234 (JSC::MacroAssemblerMIPS::tailRecursiveCall):
65235 (JSC::MacroAssemblerMIPS::loadDouble):
65236 (JSC::MacroAssemblerMIPS::storeDouble):
65237 (JSC::MacroAssemblerMIPS::branchTruncateDoubleToInt32):
65238 * assembler/MacroAssemblerX86.h:
65239 (JSC::MacroAssemblerX86::add32):
65240 (JSC::MacroAssemblerX86::addWithCarry32):
65241 (JSC::MacroAssemblerX86::and32):
65242 (JSC::MacroAssemblerX86::or32):
65243 (JSC::MacroAssemblerX86::sub32):
65244 (JSC::MacroAssemblerX86::store32):
65245 (JSC::MacroAssemblerX86::branch32):
65246 (JSC::MacroAssemblerX86::moveWithPatch):
65247 (JSC::MacroAssemblerX86::branchPtrWithPatch):
65248 (JSC::MacroAssemblerX86::storePtrWithPatch):
65249 * assembler/MacroAssemblerX86Common.h:
65250 (JSC::MacroAssemblerX86Common::add32):
65251 (JSC::MacroAssemblerX86Common::and32):
65252 (JSC::MacroAssemblerX86Common::lshift32):
65253 (JSC::MacroAssemblerX86Common::mul32):
65254 (JSC::MacroAssemblerX86Common::or32):
65255 (JSC::MacroAssemblerX86Common::rshift32):
65256 (JSC::MacroAssemblerX86Common::urshift32):
65257 (JSC::MacroAssemblerX86Common::sub32):
65258 (JSC::MacroAssemblerX86Common::xor32):
65259 (JSC::MacroAssemblerX86Common::store32):
65260 (JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32):
65261 (JSC::MacroAssemblerX86Common::push):
65262 (JSC::MacroAssemblerX86Common::move):
65263 (JSC::MacroAssemblerX86Common::branch8):
65264 (JSC::MacroAssemblerX86Common::branch32):
65265 (JSC::MacroAssemblerX86Common::branch32WithUnalignedHalfWords):
65266 (JSC::MacroAssemblerX86Common::branch16):
65267 (JSC::MacroAssemblerX86Common::branchTest32):
65268 (JSC::MacroAssemblerX86Common::branchTest8):
65269 (JSC::MacroAssemblerX86Common::branchAdd32):
65270 (JSC::MacroAssemblerX86Common::branchMul32):
65271 (JSC::MacroAssemblerX86Common::branchSub32):
65272 (JSC::MacroAssemblerX86Common::set8Compare32):
65273 (JSC::MacroAssemblerX86Common::set32Compare32):
65274 (JSC::MacroAssemblerX86Common::set32Test8):
65275 (JSC::MacroAssemblerX86Common::set32Test32):
65276 * assembler/MacroAssemblerX86_64.h:
65277 (JSC::MacroAssemblerX86_64::add32):
65278 (JSC::MacroAssemblerX86_64::and32):
65279 (JSC::MacroAssemblerX86_64::or32):
65280 (JSC::MacroAssemblerX86_64::sub32):
65281 (JSC::MacroAssemblerX86_64::loadDouble):
65282 (JSC::MacroAssemblerX86_64::addDouble):
65283 (JSC::MacroAssemblerX86_64::convertInt32ToDouble):
65284 (JSC::MacroAssemblerX86_64::store32):
65285 (JSC::MacroAssemblerX86_64::call):
65286 (JSC::MacroAssemblerX86_64::tailRecursiveCall):
65287 (JSC::MacroAssemblerX86_64::makeTailRecursiveCall):
65288 (JSC::MacroAssemblerX86_64::addPtr):
65289 (JSC::MacroAssemblerX86_64::andPtr):
65290 (JSC::MacroAssemblerX86_64::orPtr):
65291 (JSC::MacroAssemblerX86_64::subPtr):
65292 (JSC::MacroAssemblerX86_64::xorPtr):
65293 (JSC::MacroAssemblerX86_64::storePtr):
65294 (JSC::MacroAssemblerX86_64::setPtr):
65295 (JSC::MacroAssemblerX86_64::branchPtr):
65296 (JSC::MacroAssemblerX86_64::branchTestPtr):
65297 (JSC::MacroAssemblerX86_64::branchSubPtr):
65298 (JSC::MacroAssemblerX86_64::moveWithPatch):
65299 (JSC::MacroAssemblerX86_64::branchPtrWithPatch):
65300 (JSC::MacroAssemblerX86_64::storePtrWithPatch):
65301 (JSC::MacroAssemblerX86_64::branchTest8):
65302 * dfg/DFGJITCodeGenerator.h:
65303 (JSC::DFG::JITCodeGenerator::callOperation):
65304 * dfg/DFGJITCompiler.cpp:
65305 (JSC::DFG::JITCompiler::jitAssertIsInt32):
65306 (JSC::DFG::JITCompiler::emitCount):
65307 * dfg/DFGJITCompiler.h:
65308 (JSC::DFG::JITCompiler::emitPutImmediateToCallFrameHeader):
65309 * dfg/DFGNonSpeculativeJIT.cpp:
65310 (JSC::DFG::NonSpeculativeJIT::compile):
65311 * dfg/DFGSpeculativeJIT.cpp:
65312 (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
65313 (JSC::DFG::SpeculativeJIT::compile):
65315 (JSC::JIT::emitTimeoutCheck):
65316 (JSC::JIT::privateCompile):
65318 * jit/JITArithmetic.cpp:
65319 (JSC::JIT::emit_op_urshift):
65320 (JSC::JIT::emitSlow_op_urshift):
65321 (JSC::JIT::emit_op_post_inc):
65322 (JSC::JIT::emit_op_post_dec):
65323 (JSC::JIT::emit_op_pre_inc):
65324 (JSC::JIT::emit_op_pre_dec):
65325 (JSC::JIT::emit_op_mod):
65326 * jit/JITArithmetic32_64.cpp:
65327 (JSC::JIT::emit_op_negate):
65328 (JSC::JIT::emit_op_jnless):
65329 (JSC::JIT::emit_op_jless):
65330 (JSC::JIT::emit_op_jlesseq):
65331 (JSC::JIT::emit_op_lshift):
65332 (JSC::JIT::emitRightShift):
65333 (JSC::JIT::emitRightShiftSlowCase):
65334 (JSC::JIT::emit_op_bitand):
65335 (JSC::JIT::emit_op_bitor):
65336 (JSC::JIT::emit_op_bitxor):
65337 (JSC::JIT::emit_op_bitnot):
65338 (JSC::JIT::emit_op_post_inc):
65339 (JSC::JIT::emit_op_post_dec):
65340 (JSC::JIT::emitSlow_op_post_dec):
65341 (JSC::JIT::emit_op_pre_inc):
65342 (JSC::JIT::emit_op_pre_dec):
65343 (JSC::JIT::emit_op_add):
65344 (JSC::JIT::emitAdd32Constant):
65345 (JSC::JIT::emit_op_sub):
65346 (JSC::JIT::emitSub32Constant):
65347 (JSC::JIT::emitBinaryDoubleOp):
65348 (JSC::JIT::emit_op_mul):
65349 (JSC::JIT::emitSlow_op_mul):
65350 (JSC::JIT::emit_op_div):
65351 (JSC::JIT::emit_op_mod):
65353 (JSC::JIT::compileOpCallVarargs):
65354 (JSC::JIT::compileOpCall):
65355 (JSC::JIT::compileOpCallSlowCase):
65356 * jit/JITCall32_64.cpp:
65357 (JSC::JIT::compileOpCallVarargs):
65358 (JSC::JIT::emit_op_ret_object_or_this):
65359 (JSC::JIT::compileOpCall):
65360 (JSC::JIT::compileOpCallSlowCase):
65361 * jit/JITInlineMethods.h:
65362 (JSC::JIT::emitPutCellToCallFrameHeader):
65363 (JSC::JIT::emitPutIntToCallFrameHeader):
65364 (JSC::JIT::emitPutImmediateToCallFrameHeader):
65365 (JSC::JIT::emitLoadCharacterString):
65366 (JSC::JIT::restoreArgumentReferenceForTrampoline):
65367 (JSC::JIT::checkStructure):
65368 (JSC::JIT::setSamplingFlag):
65369 (JSC::JIT::clearSamplingFlag):
65370 (JSC::JIT::emitCount):
65371 (JSC::JIT::sampleInstruction):
65372 (JSC::JIT::sampleCodeBlock):
65373 (JSC::JIT::emitStoreInt32):
65374 (JSC::JIT::emitStoreCell):
65375 (JSC::JIT::emitStoreBool):
65376 (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
65377 (JSC::JIT::emitInitRegister):
65378 (JSC::JIT::emitJumpIfJSCell):
65379 (JSC::JIT::emitJumpIfNotJSCell):
65380 (JSC::JIT::emitJumpIfImmediateInteger):
65381 (JSC::JIT::emitJumpIfNotImmediateInteger):
65382 (JSC::JIT::emitFastArithDeTagImmediate):
65383 (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
65384 (JSC::JIT::emitFastArithReTagImmediate):
65385 (JSC::JIT::emitTagAsBoolImmediate):
65386 * jit/JITOpcodes.cpp:
65387 (JSC::JIT::privateCompileCTIMachineTrampolines):
65388 (JSC::JIT::privateCompileCTINativeCall):
65389 (JSC::JIT::emit_op_check_has_instance):
65390 (JSC::JIT::emit_op_instanceof):
65391 (JSC::JIT::emit_op_ret_object_or_this):
65392 (JSC::JIT::emit_op_resolve):
65393 (JSC::JIT::emit_op_to_primitive):
65394 (JSC::JIT::emit_op_resolve_base):
65395 (JSC::JIT::emit_op_ensure_property_exists):
65396 (JSC::JIT::emit_op_resolve_skip):
65397 (JSC::JIT::emit_op_resolve_global):
65398 (JSC::JIT::emitSlow_op_resolve_global):
65399 (JSC::JIT::emit_op_not):
65400 (JSC::JIT::emit_op_jfalse):
65401 (JSC::JIT::emit_op_jeq_null):
65402 (JSC::JIT::emit_op_jneq_null):
65403 (JSC::JIT::emit_op_jneq_ptr):
65404 (JSC::JIT::emit_op_jsr):
65405 (JSC::JIT::emit_op_resolve_with_base):
65406 (JSC::JIT::emit_op_new_func_exp):
65407 (JSC::JIT::emit_op_jtrue):
65408 (JSC::JIT::emit_op_get_pnames):
65409 (JSC::JIT::emit_op_next_pname):
65410 (JSC::JIT::emit_op_to_jsnumber):
65411 (JSC::JIT::emit_op_push_new_scope):
65412 (JSC::JIT::emit_op_catch):
65413 (JSC::JIT::emit_op_eq_null):
65414 (JSC::JIT::emit_op_neq_null):
65415 (JSC::JIT::emit_op_init_lazy_reg):
65416 (JSC::JIT::emit_op_convert_this):
65417 (JSC::JIT::emit_op_convert_this_strict):
65418 (JSC::JIT::emitSlow_op_not):
65419 (JSC::JIT::emitSlow_op_neq):
65420 (JSC::JIT::emit_op_get_arguments_length):
65421 (JSC::JIT::emitSlow_op_get_arguments_length):
65422 (JSC::JIT::emit_op_get_argument_by_val):
65423 (JSC::JIT::emitSlow_op_resolve_global_dynamic):
65424 (JSC::JIT::emit_op_new_regexp):
65425 (JSC::JIT::emit_op_load_varargs):
65426 (JSC::JIT::emitSlow_op_load_varargs):
65427 (JSC::JIT::emit_op_new_func):
65428 * jit/JITOpcodes32_64.cpp:
65429 (JSC::JIT::privateCompileCTIMachineTrampolines):
65430 (JSC::JIT::privateCompileCTINativeCall):
65431 (JSC::JIT::emit_op_loop_if_lesseq):
65432 (JSC::JIT::emit_op_check_has_instance):
65433 (JSC::JIT::emit_op_instanceof):
65434 (JSC::JIT::emit_op_get_scoped_var):
65435 (JSC::JIT::emit_op_put_scoped_var):
65436 (JSC::JIT::emit_op_tear_off_activation):
65437 (JSC::JIT::emit_op_tear_off_arguments):
65438 (JSC::JIT::emit_op_resolve):
65439 (JSC::JIT::emit_op_to_primitive):
65440 (JSC::JIT::emit_op_resolve_base):
65441 (JSC::JIT::emit_op_ensure_property_exists):
65442 (JSC::JIT::emit_op_resolve_skip):
65443 (JSC::JIT::emit_op_resolve_global):
65444 (JSC::JIT::emitSlow_op_resolve_global):
65445 (JSC::JIT::emit_op_not):
65446 (JSC::JIT::emit_op_jfalse):
65447 (JSC::JIT::emit_op_jtrue):
65448 (JSC::JIT::emit_op_jeq_null):
65449 (JSC::JIT::emit_op_jneq_null):
65450 (JSC::JIT::emit_op_jneq_ptr):
65451 (JSC::JIT::emit_op_jsr):
65452 (JSC::JIT::emit_op_eq):
65453 (JSC::JIT::emitSlow_op_eq):
65454 (JSC::JIT::emit_op_neq):
65455 (JSC::JIT::emitSlow_op_neq):
65456 (JSC::JIT::compileOpStrictEq):
65457 (JSC::JIT::emit_op_eq_null):
65458 (JSC::JIT::emit_op_neq_null):
65459 (JSC::JIT::emit_op_resolve_with_base):
65460 (JSC::JIT::emit_op_new_func_exp):
65461 (JSC::JIT::emit_op_get_pnames):
65462 (JSC::JIT::emit_op_next_pname):
65463 (JSC::JIT::emit_op_to_jsnumber):
65464 (JSC::JIT::emit_op_push_new_scope):
65465 (JSC::JIT::emit_op_catch):
65466 (JSC::JIT::emit_op_create_activation):
65467 (JSC::JIT::emit_op_create_arguments):
65468 (JSC::JIT::emit_op_convert_this):
65469 (JSC::JIT::emit_op_convert_this_strict):
65470 (JSC::JIT::emit_op_get_arguments_length):
65471 (JSC::JIT::emitSlow_op_get_arguments_length):
65472 (JSC::JIT::emit_op_get_argument_by_val):
65473 (JSC::JIT::softModulo):
65474 * jit/JITPropertyAccess.cpp:
65475 (JSC::JIT::stringGetByValStubGenerator):
65476 (JSC::JIT::emit_op_get_by_val):
65477 (JSC::JIT::emitSlow_op_get_by_val):
65478 (JSC::JIT::emit_op_get_by_pname):
65479 (JSC::JIT::emit_op_put_by_val):
65480 (JSC::JIT::emit_op_put_by_index):
65481 (JSC::JIT::emit_op_put_getter):
65482 (JSC::JIT::emit_op_put_setter):
65483 (JSC::JIT::emit_op_del_by_id):
65484 (JSC::JIT::emit_op_get_by_id):
65485 (JSC::JIT::emit_op_put_by_id):
65486 (JSC::JIT::emit_op_method_check):
65487 (JSC::JIT::compileGetByIdHotPath):
65488 (JSC::JIT::compileGetByIdSlowCase):
65489 (JSC::JIT::emitSlow_op_put_by_id):
65490 (JSC::JIT::testPrototype):
65491 (JSC::JIT::privateCompilePutByIdTransition):
65492 (JSC::JIT::privateCompilePatchGetArrayLength):
65493 (JSC::JIT::privateCompileGetByIdProto):
65494 (JSC::JIT::privateCompileGetByIdSelfList):
65495 (JSC::JIT::privateCompileGetByIdProtoList):
65496 (JSC::JIT::privateCompileGetByIdChainList):
65497 (JSC::JIT::privateCompileGetByIdChain):
65498 * jit/JITPropertyAccess32_64.cpp:
65499 (JSC::JIT::emit_op_put_getter):
65500 (JSC::JIT::emit_op_put_setter):
65501 (JSC::JIT::emit_op_del_by_id):
65502 (JSC::JIT::emit_op_get_by_id):
65503 (JSC::JIT::emit_op_put_by_id):
65504 (JSC::JIT::emit_op_method_check):
65505 (JSC::JIT::stringGetByValStubGenerator):
65506 (JSC::JIT::emit_op_get_by_val):
65507 (JSC::JIT::emitSlow_op_get_by_val):
65508 (JSC::JIT::emit_op_put_by_val):
65509 (JSC::JIT::compileGetByIdHotPath):
65510 (JSC::JIT::compileGetByIdSlowCase):
65511 (JSC::JIT::emitSlow_op_put_by_id):
65512 (JSC::JIT::testPrototype):
65513 (JSC::JIT::privateCompilePutByIdTransition):
65514 (JSC::JIT::privateCompilePatchGetArrayLength):
65515 (JSC::JIT::privateCompileGetByIdProto):
65516 (JSC::JIT::privateCompileGetByIdSelfList):
65517 (JSC::JIT::privateCompileGetByIdProtoList):
65518 (JSC::JIT::privateCompileGetByIdChainList):
65519 (JSC::JIT::privateCompileGetByIdChain):
65520 (JSC::JIT::emit_op_get_by_pname):
65521 * jit/JITStubCall.h:
65522 (JSC::JITStubCall::addArgument):
65523 * jit/JITStubs.cpp:
65524 (JSC::getPolymorphicAccessStructureListSlot):
65525 (JSC::DEFINE_STUB_FUNCTION):
65526 * jit/JSInterfaceJIT.h:
65527 (JSC::JSInterfaceJIT::emitJumpIfNotJSCell):
65528 (JSC::JSInterfaceJIT::emitLoadInt32):
65529 (JSC::JSInterfaceJIT::emitLoadDouble):
65530 * jit/SpecializedThunkJIT.h:
65531 (JSC::SpecializedThunkJIT::SpecializedThunkJIT):
65532 (JSC::SpecializedThunkJIT::loadJSStringArgument):
65533 (JSC::SpecializedThunkJIT::tagReturnAsInt32):
65534 (JSC::SpecializedThunkJIT::tagReturnAsJSCell):
65535 * jit/ThunkGenerators.cpp:
65536 (JSC::charToString):
65537 (JSC::powThunkGenerator):
65538 * yarr/YarrJIT.cpp:
65539 (JSC::Yarr::YarrGenerator::matchCharacterClass):
65540 (JSC::Yarr::YarrGenerator::storeToFrame):
65541 (JSC::Yarr::YarrGenerator::storeToFrameWithPatch):
65542 (JSC::Yarr::YarrGenerator::ParenthesesTail::generateCode):
65543 (JSC::Yarr::YarrGenerator::generatePatternCharacterSingle):
65544 (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed):
65545 (JSC::Yarr::YarrGenerator::generatePatternCharacterGreedy):
65546 (JSC::Yarr::YarrGenerator::generatePatternCharacterNonGreedy):
65547 (JSC::Yarr::YarrGenerator::generateCharacterClassFixed):
65548 (JSC::Yarr::YarrGenerator::generateCharacterClassGreedy):
65549 (JSC::Yarr::YarrGenerator::generateCharacterClassNonGreedy):
65550 (JSC::Yarr::YarrGenerator::generateParenthesesSingle):
65551 (JSC::Yarr::YarrGenerator::generateDisjunction):
65553 2011-03-28 Andras Becsi <abecsi@webkit.org>
65555 Reviewed by Csaba Osztrogonác.
65557 [Qt] Fix the linking of jsc with MinGW after r81963.
65559 * jsc.pro: add -l and remove the lib suffix.
65561 2011-03-27 Ben Taylor <bentaylor.solx86@gmail.com>
65563 Reviewed by Alexey Proskuryakov.
65565 https://bugs.webkit.org/show_bug.cgi?id=57170 Fix last elements
65566 in an enum to remove a trailing comma. Sun Studio 12 CC errors out.
65568 Compile fix only, no actual code change.
65570 * wtf/MessageQueue.h:
65572 2011-03-25 Oliver Hunt <oliver@apple.com>
65574 Reviewed by Darin Adler.
65576 Allow defineOwnProperty to work on DOMObjects
65577 https://bugs.webkit.org/show_bug.cgi?id=57129
65579 Fix a couple of places where we uses getter()/setter() rather
65580 than [gs]etterPresent().
65582 * runtime/JSObject.cpp:
65583 (JSC::JSObject::defineOwnProperty):
65585 2011-03-25 Geoffrey Garen <ggaren@apple.com>
65587 Reviewed by Oliver Hunt.
65589 Crash when paused at a breakpoint caused by inaccurate Activation records.
65590 https://bugs.webkit.org/show_bug.cgi?id=57120
65592 * runtime/JSActivation.cpp:
65593 (JSC::JSActivation::symbolTableGet):
65594 (JSC::JSActivation::symbolTablePut):
65595 (JSC::JSActivation::getOwnPropertyNames):
65596 (JSC::JSActivation::symbolTablePutWithAttributes):
65598 2011-03-24 Geoffrey Garen <ggaren@apple.com>
65600 Reviewed by Oliver Hunt.
65602 Crash in debugger beneath MarkStack::drain @ me.com, ibm.com
65603 https://bugs.webkit.org/show_bug.cgi?id=57080
65604 <rdar://problem/8525907>
65606 The crash was caused by changes in the executable after recompilation.
65608 The fix is for the activation to copy the data it needs instead of
65609 relying on the data in the executable.
65611 SunSpider and v8 report no change.
65613 * runtime/Arguments.h:
65614 (JSC::JSActivation::copyRegisters): Use our own data members instead of
65615 reading data out of the executable.
65617 * runtime/JSActivation.cpp:
65618 (JSC::JSActivation::JSActivation): Initialize our data members.
65620 (JSC::JSActivation::markChildren):
65621 (JSC::JSActivation::symbolTableGet):
65622 (JSC::JSActivation::symbolTablePut):
65623 (JSC::JSActivation::getOwnPropertyNames):
65624 (JSC::JSActivation::symbolTablePutWithAttributes):
65625 (JSC::JSActivation::isDynamicScope):
65626 (JSC::JSActivation::argumentsGetter): Use our own data members instead of
65627 reading data out of the executable.
65629 * runtime/JSActivation.h: Added new data members to track data previously
65630 tracked by the executable. Since I've removed the executable pointer,
65631 on a 64bit system, I've only made activations bigger by an int.
65633 2011-03-25 David Kilzer <ddkilzer@apple.com>
65635 Remove duplicate entry from JavaScriptCore.exp
65637 JSC::createStackOverflowError(JSC::ExecState*) was originally
65638 exported in r60057, then duplicated in r60392.
65640 * JavaScriptCore.exp: Removed duplicate entry.
65642 2011-03-25 Jarred Nicholls <jarred@sencha.com>
65644 Reviewed by Ariya Hidayat.
65646 [Qt] MSVC Build Error - need to link advapi32.lib for jsc.exe
65647 https://bugs.webkit.org/show_bug.cgi?id=56098
65649 Need to link advapi32.lib for jsc.exe since wtf/OSRandomSource.cpp uses the Win32 Crypto API
65653 2011-03-24 Nikolas Zimmermann <nzimmermann@rim.com>
65655 Reviewed by Darin Adler.
65657 Introduce WTF HexNumber.h
65658 https://bugs.webkit.org/show_bug.cgi?id=56099
65660 Introduce a set of functions that ease converting from a bye or a number to a hex string,
65661 replacing several of these conversions and String::format("%x") usages all over WebCore.
65663 * GNUmakefile.am: Add HexNumber.h to build.
65664 * JavaScriptCore.exp: Export StringBuilder::reserveCapacity.
65665 * JavaScriptCore.gypi: Add HexNumber.h to build.
65666 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export StringBuilder::reserveCapacity.
65667 * JavaScriptCore.vcproj/WTF/WTF.vcproj: Add HexNumber.h to build.
65668 * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
65669 * wtf/CMakeLists.txt: Ditto.
65670 * wtf/HexNumber.h: Added.
65671 (WTF::Internal::hexDigitsForMode): Internal helper.
65672 (WTF::appendByteAsHex): Free function, that appends a byte as hex string into a destination.
65673 (WTF::placeByteAsHex): Ditto, but places the result using *foo++ = '..' or foo[index++] = '..'
65674 (WTF::appendUnsignedAsHex): Free function, that appends a number as hex string into a destination.
65676 2011-03-24 Geoffrey Garen <ggaren@apple.com>
65678 Windows build fix take 2: Add new symobl.
65680 (I should have used the EWS bots for this!)
65682 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
65684 2011-03-24 Geoffrey Garen <ggaren@apple.com>
65686 Windows build fix take 1: Removed old symobl.
65688 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
65690 2011-03-24 Geoffrey Garen <ggaren@apple.com>
65692 Reviewed by Oliver Hunt.
65694 Ensure that all compilation takes place within a dynamic global object scope
65695 https://bugs.webkit.org/show_bug.cgi?id=57054
65696 <rdar://problem/9083011>
65698 Otherwise, entry to the global object scope might throw away the code
65699 we just compiled, causing a crash.
65701 * JavaScriptCore.exp: Updated for signature change.
65703 * debugger/Debugger.cpp:
65704 (JSC::evaluateInGlobalCallFrame):
65705 * debugger/DebuggerCallFrame.cpp:
65706 (JSC::DebuggerCallFrame::evaluate): Removed explicit compilation calls
65707 here because (a) they took place outside a dynamic global object scope
65708 and (b) they were redundant.
65710 * interpreter/CachedCall.h:
65711 (JSC::CachedCall::CachedCall): Updated for signature change.
65713 * interpreter/Interpreter.cpp:
65714 (JSC::Interpreter::execute):
65715 (JSC::Interpreter::executeCall):
65716 (JSC::Interpreter::executeConstruct): Declare our dynamic global object
65717 scope earlier, to ensure that compilation takes place within it.
65719 * runtime/Completion.cpp:
65720 (JSC::evaluate): Removed explicit compilation calls here because (a)
65721 they took place outside a dynamic global object scope and (b) they were
65724 * runtime/Executable.h:
65725 (JSC::EvalExecutable::compile):
65726 (JSC::ProgramExecutable::compile):
65727 (JSC::FunctionExecutable::compileForCall):
65728 (JSC::FunctionExecutable::compileForConstruct): Added an ASSERT to
65729 verify our new invariant that all compilation takes place within a
65730 dynamic global object scope.
65732 * runtime/JSGlobalObject.cpp:
65733 (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):
65734 * runtime/JSGlobalObject.h: Changed the signature of DynamicGlobalObjectScope
65735 to require a JSGlobalData instead of an ExecState* since it is often
65736 easier to provide the former, and the latter was not necessary.
65738 2011-03-24 Oliver Hunt <oliver@apple.com>
65740 Reviewed by Geoffrey Garen.
65742 REGRESSION (r79987-r80210): Crash in JSWeakObjectMapClear
65743 https://bugs.webkit.org/show_bug.cgi?id=55671
65745 This is no longer necessary, and it seems that with the new weakmap
65746 model it's simply unsafe, so this reduces it to a no-op.
65748 * API/JSWeakObjectMapRefPrivate.cpp:
65750 2011-03-24 Ben Taylor <bentaylor.solx86@gmail.com>
65752 Reviewed by Darin Adler.
65754 https://bugs.webkit.org/show_bug.cgi?id=20302
65755 Correct implementation of signbit on Solaris
65757 * wtf/MathExtras.h:
65760 2011-03-23 Mark Rowe <mrowe@apple.com>
65762 Reviewed by Darin Adler.
65764 <rdar://problem/7959320> Threads that use APIs above the BSD layer must be registered with the Obj-C GC.
65766 * wtf/ThreadingPthreads.cpp:
65767 (WTF::initializeCurrentThreadInternal):
65769 2011-03-23 Mark Rowe <mrowe@apple.com>
65771 Stop setting OTHER_OPTIONS in JavaScriptCore's Makefile.
65773 It's not necessary to pass "-target All" as xcodebuild always builds the
65774 first target in the project unless otherwise specified. The presence of
65775 that option also breaks "make clean" since that results in both the
65776 -target and -alltargets options being passed to xcodebuild.
65780 2011-03-23 Pavel Feldman <pfeldman@chromium.org>
65782 Not reviewed: bring back Vector::contains that was removed as a part of roll back.
65787 2011-03-23 Sheriff Bot <webkit.review.bot@gmail.com>
65789 Unreviewed, rolling out r81686.
65790 http://trac.webkit.org/changeset/81686
65791 https://bugs.webkit.org/show_bug.cgi?id=56914
65793 Breaks webkit_tests in Chromium again. (Requested by pfeldman
65798 2011-03-23 Adam Barth <abarth@webkit.org>
65800 Reviewed by Eric Seidel.
65802 JavaScriptCore GYP build should work on a case-sensitive file system
65803 https://bugs.webkit.org/show_bug.cgi?id=56911
65805 The issue is that there are two UString.h headers, one named UString.h
65806 and one named ustring.h. This patch excludes ustring.h from the header
65807 map to avoid confusion. While I was editing this part of the GYP file,
65808 I cleaned up the exclude rules to be more modern.
65810 * gyp/JavaScriptCore.gyp:
65812 2011-03-22 Geoffrey Garen <ggaren@apple.com>
65814 Reviewed by Maciej Stachowiak.
65816 REGRESSION (r78382): No scripts appear in the Web Inspector's Scripts
65817 panel on Windows, and many inspector regression tests are failing
65818 https://bugs.webkit.org/show_bug.cgi?id=54490
65820 The bug was caused by two different classes using the same name (Recompiler).
65822 * debugger/Debugger.cpp:
65823 * runtime/JSGlobalData.cpp:
65824 (WTF::Recompiler::operator()): Put Recompiler in an anonymous namespace,
65825 so our two recompilers' inline functions don't stomp each other at
65828 2011-03-22 Sam Weinig <sam@webkit.org>
65830 Reviewed by Mark Rowe.
65832 Remove USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER.
65833 <rdar://problem/8944718>
65835 * DerivedSources.make:
65836 Remove generation of USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER.
65838 2011-03-22 Gabor Loki <loki@webkit.org>
65840 Reviewed by Csaba Osztrogonác.
65842 [Qt] Add DFG module to build system (disabled by default).
65843 https://bugs.webkit.org/show_bug.cgi?id=56845
65845 * JavaScriptCore.pri:
65846 * JavaScriptCore.pro:
65848 2011-03-22 Eric Seidel <eric@webkit.org>
65850 Reviewed by Adam Barth.
65852 Add support to build-webkit for building with gyp-generated project files
65853 https://bugs.webkit.org/show_bug.cgi?id=56877
65855 Found a couple missing Private headers while trying to make WebCore build.
65857 * JavaScriptCore.gypi:
65859 2011-03-22 Eric Seidel <eric@webkit.org>
65861 Reviewed by Adam Barth.
65863 Make it possible to build JavaScriptCore and WebCore gyp builds outside of Source
65864 https://bugs.webkit.org/show_bug.cgi?id=56867
65866 This should make it possible to build the gyp-generated JavaScriptCore.xcodeproj
65867 from a JavaScriptCore directory outside of Source.
65869 * gyp/JavaScriptCore.gyp:
65870 * gyp/run-if-exists.sh: Added.
65871 * gyp/update-info-plist.sh: Added.
65873 2011-03-22 Eric Seidel <eric@webkit.org>
65875 Reviewed by Adam Barth.
65877 Add Profiling Configuration to JavaScriptCore gyp build
65878 https://bugs.webkit.org/show_bug.cgi?id=56862
65880 It appears this is identical to Release, but I suspect
65881 there is someone/thing who uses the Profiling target
65882 so we're adding it for completeness.
65884 * gyp/JavaScriptCore.gyp:
65886 2011-03-22 Adam Barth <abarth@webkit.org>
65888 Reviewed by Eric Seidel.
65890 Remove os_win32_files variable from the GYP build
65891 https://bugs.webkit.org/show_bug.cgi?id=56804
65893 Now that our understanding of GYP is sufficiently advanced, we don't
65894 need os_win32_files any more. (Turns out Eric was right, as he always
65897 * JavaScriptCore.gypi:
65899 2011-03-22 Adam Barth <abarth@webkit.org>
65901 Reviewed by Eric Seidel.
65903 GYP build of JavaScriptCore should be able to link from an empty WebKitBuild directory
65904 https://bugs.webkit.org/show_bug.cgi?id=56803
65906 Previously, we thought we should generate the derived source files in
65907 the shared intermediate build products directory, but there are
65908 assumptions built into other parts of the Mac build system that the
65909 derived source files will be generated in a particular subdirectory of
65910 the build products directory.
65912 This patch is a partial revert of the change that moved the derived
65913 source files to the shared intermediate directory. After this patch,
65914 the GYP build can build JavaScriptCore without help from the main
65915 normal build system.
65917 * JavaScriptCore.gypi:
65918 * gyp/JavaScriptCore.gyp:
65919 * gyp/generate-derived-sources.sh:
65920 * gyp/generate-dtrace-header.sh:
65922 2011-03-22 Jay Civelli <jcivelli@chromium.org>
65924 Reviewed by David Levin.
65926 Adding a contains method to Vector.
65927 https://bugs.webkit.org/show_bug.cgi?id=55859
65930 (WTF::Vector::contains):
65932 2011-03-22 Gabor Loki <loki@webkit.org>
65934 Reviewed by Alexey Proskuryakov.
65936 Fix a bunch of typos in DFG.
65937 https://bugs.webkit.org/show_bug.cgi?id=56813
65939 * dfg/DFGByteCodeParser.cpp:
65941 * dfg/DFGGenerationInfo.h:
65942 (JSC::DFG::GenerationInfo::setSpilled):
65943 * dfg/DFGGraph.cpp:
65944 (JSC::DFG::Graph::dump):
65946 * dfg/DFGJITCodeGenerator.h:
65947 (JSC::DFG::JITCodeGenerator::setupStubArguments):
65948 * dfg/DFGJITCompiler.cpp:
65949 (JSC::DFG::JITCompiler::compileFunction):
65950 * dfg/DFGJITCompiler.h:
65952 * dfg/DFGNonSpeculativeJIT.h:
65953 * dfg/DFGOperations.h:
65954 * dfg/DFGRegisterBank.h:
65955 (JSC::DFG::RegisterBank::allocate):
65956 * dfg/DFGScoreBoard.h:
65957 (JSC::DFG::ScoreBoard::~ScoreBoard):
65958 (JSC::DFG::ScoreBoard::allocate):
65959 * dfg/DFGSpeculativeJIT.cpp:
65960 (JSC::DFG::SpeculativeJIT::compile):
65961 * dfg/DFGSpeculativeJIT.h:
65963 2011-03-22 Adam Barth <abarth@webkit.org>
65965 Reviewed by Eric Seidel.
65967 Production configuration in GYP isn't set up correctly
65968 https://bugs.webkit.org/show_bug.cgi?id=56786
65970 Update JavaScriptCore.gyp with information mined from
65971 JavaScriptCore.xcodeproj.
65973 * JavaScriptCore.gypi:
65974 * gyp/JavaScriptCore.gyp:
65976 2011-03-22 Kent Tamura <tkent@chromium.org>
65978 Reviewed by Eric Seidel.
65980 REGRESSION(r80096): Number type input unexpectedly rounds fractional values
65981 https://bugs.webkit.org/show_bug.cgi?id=56367
65983 Introduce clampToInteger(unsigned).
65985 * wtf/MathExtras.h:
65986 (clampToInteger): Added.
65988 2011-03-21 Adam Barth <abarth@webkit.org>
65990 Reviewed by Eric Seidel.
65992 GYP build should not have include paths that point within the source tree
65993 https://bugs.webkit.org/show_bug.cgi?id=56788
65995 Turns out we don't need these include paths anymore now that we have
65996 header maps working properly.
65998 * gyp/JavaScriptCore.gyp:
65999 - Also, remove jsc.cpp from the excluded list because it's not part
66000 of the jsc_files variable instead of the javascriptcore_files
66003 2011-03-21 Adam Barth <abarth@webkit.org>
66005 Reviewed by Eric Seidel.
66007 Solve the Assertions.cpp / -Wno-missing-format-attribute mystery
66008 https://bugs.webkit.org/show_bug.cgi?id=56780
66010 The reason we couldn't resolve this warning in the GYP build was that
66011 the normal build disables this warning specifically for this file.
66012 This patch takes the same approach as the previous patch to
66013 WebCoreObjCExtras.mm in that it uses a pragma to suppress the warning
66014 (rather than a build system configuration).
66016 * JavaScriptCore.xcodeproj/project.pbxproj:
66017 - Remove the special-case for this file.
66018 * gyp/JavaScriptCore.gyp:
66019 - Remove the work-around for this issue.
66020 * wtf/Assertions.cpp:
66021 - Add a pragma disabling this warning for this file.
66023 2011-03-21 Adam Barth <abarth@webkit.org>
66025 Reviewed by Dimitri Glazkov.
66027 WebCore GYP build shouldn't crash on startup
66028 https://bugs.webkit.org/show_bug.cgi?id=56776
66030 Debug builds shouldn't define NDEBUG. This same logic exists in the
66031 project.pbxproj file.
66033 * gyp/JavaScriptCore.gyp:
66035 2011-03-21 Robert Kroeger <rjkroege@chromium.org>
66037 Reviewed by Antonio Gomes.
66039 Flag to enable/disable a GestureReocognizer framework
66041 https://bugs.webkit.org/show_bug.cgi?id=49345
66045 2011-03-21 Adam Barth <abarth@webkit.org>
66047 Reviewed by Dimitri Glazkov.
66049 Add new files to JavaScriptCore.gypi
66050 https://bugs.webkit.org/show_bug.cgi?id=56766
66052 * JavaScriptCore.gypi:
66054 2011-03-21 Sheriff Bot <webkit.review.bot@gmail.com>
66056 Unreviewed, rolling out r81377.
66057 http://trac.webkit.org/changeset/81377
66058 https://bugs.webkit.org/show_bug.cgi?id=56765
66060 WebPageSerializerTest.MultipleFrames is broken (Requested by
66061 simonjam on #webkit).
66065 2011-03-21 Gabor Loki <loki@webkit.org>
66067 Reviewed by Csaba Osztrogonác.
66069 Extend constant pool to be able to store 16 bit instructions with a constant
66070 https://bugs.webkit.org/show_bug.cgi?id=46796
66072 The putShortWithConstantInt function inserts a 16 bit instruction which
66073 refers a 32 bits constant or literal. This is a vital function for those
66074 target which loads a PC relative value with a 16 bit instruction (like
66075 Thumb-2 instruction set and SH4 architecture).
66077 * assembler/AssemblerBuffer.h:
66078 (JSC::AssemblerBuffer::putIntegral):
66079 (JSC::AssemblerBuffer::putIntegralUnchecked):
66080 * assembler/AssemblerBufferWithConstantPool.h:
66082 2011-03-21 Philippe Normand <pnormand@igalia.com>
66084 Unreviewed, GTK distcheck build fix.
66088 2011-03-20 Bill Budge <bbudge@chromium.org>
66090 Reviewed by Adam Barth.
66092 Rename ThreadSafeShared to ThreadSafeRefCounted
66093 https://bugs.webkit.org/show_bug.cgi?id=56714
66095 No new tests. Exposes no new functionality.
66097 * API/JSClassRef.h:
66098 * API/OpaqueJSString.h:
66100 * JavaScriptCore.gypi:
66101 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
66102 * JavaScriptCore.xcodeproj/project.pbxproj:
66104 * wtf/CMakeLists.txt:
66105 * wtf/CrossThreadRefCounted.h:
66106 (WTF::CrossThreadRefCounted::CrossThreadRefCounted):
66107 (WTF::::crossThreadCopy):
66108 * wtf/ThreadSafeRefCounted.h: Copied from wtf/ThreadSafeShared.h.
66109 (WTF::ThreadSafeRefCountedBase::ThreadSafeRefCountedBase):
66110 (WTF::ThreadSafeRefCountedBase::ref):
66111 (WTF::ThreadSafeRefCountedBase::refCount):
66112 (WTF::ThreadSafeRefCountedBase::derefBase):
66113 (WTF::ThreadSafeRefCounted::ThreadSafeRefCounted):
66114 * wtf/ThreadSafeShared.h: Removed.
66117 2011-03-19 Patrick Gansterer <paroga@webkit.org>
66119 Reviewed by Darin Adler.
66121 Remove StringImpl::computeHash()
66122 https://bugs.webkit.org/show_bug.cgi?id=49894
66124 Replace remainig StringImpl::computeHash with StringImpl::computeHashStringHasher.
66126 * wtf/text/AtomicString.cpp:
66127 (WTF::CStringTranslator::hash):
66128 (WTF::UCharBufferTranslator::hash):
66129 (WTF::HashAndCharactersTranslator::hash):
66130 * wtf/text/StringImpl.h:
66131 (WTF::StringImpl::setHash):
66132 (WTF::StringImpl::hash):
66134 2011-03-19 Patrick Gansterer <paroga@webkit.org>
66136 Reviewed by Darin Adler.
66138 Rename WTF::StringHasher methods
66139 https://bugs.webkit.org/show_bug.cgi?id=53532
66141 Rename createHash to computeHash and createBlobHash to hashMemory.
66142 Also add a using WTF::StringHasher in the header file.
66144 * profiler/CallIdentifier.h:
66145 (JSC::CallIdentifier::Hash::hash):
66146 * runtime/Identifier.cpp:
66147 (JSC::IdentifierCStringTranslator::hash):
66148 (JSC::IdentifierUCharBufferTranslator::hash):
66149 * wtf/StringHasher.h:
66150 (WTF::StringHasher::computeHash):
66151 (WTF::StringHasher::hashMemory):
66152 * wtf/text/StringHash.h:
66153 (WTF::CaseFoldingHash::hash):
66154 * wtf/text/StringImpl.h:
66155 (WTF::StringImpl::computeHash):
66156 * wtf/unicode/UTF8.cpp:
66157 (WTF::Unicode::calculateStringHashAndLengthFromUTF8Internal):
66159 2011-03-18 Geoffrey Garen <ggaren@apple.com>
66161 Reviewed by Oliver Hunt.
66163 [GTK] JSC crashes in 32bit Release bots after r80743
66164 https://bugs.webkit.org/show_bug.cgi?id=56180
66166 The crash was caused by referencing GC memory from a GC destructor. This
66167 is not safe because destruction time / order is not guaranteed.
66169 * profiler/ProfileGenerator.cpp:
66170 (JSC::ProfileGenerator::create):
66171 (JSC::ProfileGenerator::ProfileGenerator):
66172 (JSC::ProfileGenerator::willExecute):
66173 (JSC::ProfileGenerator::didExecute):
66174 * profiler/ProfileGenerator.h:
66175 (JSC::ProfileGenerator::origin): Made ExecState* the first argument,
66176 to match the rest of this class and JSC.
66178 Use a JSGlobalObject* instead of an ExecState* with an indirect reference
66179 to a JSGlobalObject* to track our origin. This is simpler and more
66180 efficient, and it removes the destruction order dependency that was causing
66183 * profiler/Profiler.cpp:
66184 (JSC::Profiler::startProfiling): Updated for change to JSGlobalObject*.
66185 (JSC::Profiler::stopProfiling): New function for stopping all profiles
66186 for a given global object. This is more straight-forward than multiplexing
66187 through the old function.
66189 (JSC::dispatchFunctionToProfiles): Updated for change to JSGlobalObject*.
66190 * profiler/Profiler.h: Ditto.
66192 * runtime/JSGlobalObject.cpp:
66193 (JSC::JSGlobalObject::~JSGlobalObject): Ditto.
66195 2011-03-17 Geoffrey Garen <ggaren@apple.com>
66197 Reviewed by Oliver Hunt.
66199 1 Structure leaked beneath JSGlobalData::storeVPtrs()
66200 https://bugs.webkit.org/show_bug.cgi?id=56595
66202 * runtime/Executable.cpp:
66203 (JSC::EvalExecutable::EvalExecutable):
66204 (JSC::ProgramExecutable::ProgramExecutable):
66205 (JSC::FunctionExecutable::FunctionExecutable):
66206 * runtime/Executable.h:
66207 (JSC::ExecutableBase::ExecutableBase):
66208 (JSC::NativeExecutable::NativeExecutable):
66209 (JSC::VPtrHackExecutable::VPtrHackExecutable):
66210 (JSC::ScriptExecutable::ScriptExecutable): Use a raw pointer instead of
66211 PassRefPtr, like JSString does, since JSGlobalData owns the singleton
66212 exectuable structure.
66214 2011-03-17 Geoffrey Garen <ggaren@apple.com>
66216 Reviewed by Mark Rowe.
66218 Fixed some string leaks seen on the buildbot
66219 https://bugs.webkit.org/show_bug.cgi?id=56619
66221 * runtime/PropertyMapHashTable.h:
66222 (JSC::PropertyTable::~PropertyTable): DEref!
66224 2011-03-17 Oliver Hunt <oliver@apple.com>
66226 Reviewed by Geoffrey Garen.
66228 Crash in JSC::MarkStack::drain Under Stress
66229 https://bugs.webkit.org/show_bug.cgi?id=56470
66231 We perform a number of gc allocations while when
66232 we are setting up new globals in a piece of global
66233 code. We do this by adding new properties to the
66234 symbol table, and then expanding the storage to fit
66237 If a GC happens during this time we will report an
66238 incorrect size for the global object's symbol table
66241 This patch corrects this by growing the storage size
66242 before we starting adding entries to the symbol table.
66244 * bytecompiler/BytecodeGenerator.cpp:
66245 (JSC::BytecodeGenerator::BytecodeGenerator):
66246 * runtime/JSGlobalObject.cpp:
66247 (JSC::JSGlobalObject::resizeRegisters):
66249 2011-03-17 Geoffrey Garen <ggaren@apple.com>
66251 Reviewed by Oliver Hunt.
66253 1 Structure leaked beneath JSGlobalData::storeVPtrs()
66254 https://bugs.webkit.org/show_bug.cgi?id=56595
66256 * runtime/JSGlobalData.cpp:
66257 (JSC::JSGlobalData::storeVPtrs): Take local ownership of the Structure
66258 we're using, since the Executable is not designed to own the Structure.
66260 2011-03-17 Gavin Barraclough <barraclough@apple.com>
66262 Rubber Stamped by Sam Weinig.
66264 Add missing register-register branchTest8 to MacroAssemblerX86Common/X86Assembler.
66266 * assembler/MacroAssemblerX86Common.h:
66267 (JSC::MacroAssemblerX86Common::branchTest8):
66268 * assembler/X86Assembler.h:
66269 (JSC::X86Assembler::testb_rr):
66271 2011-03-17 Gavin Barraclough <barraclough@apple.com>
66273 Reviewed by Sam Weinig.
66275 Bug 56603 - DFG JIT related cleanup
66276 Move node generation out to separate function, move binarySearch algorithm out
66277 to StdLibExtras, fix Graph::dump() to print comma between non-node children,
66278 even if there are no node children.
66280 * bytecode/CodeBlock.h:
66281 (JSC::getCallReturnOffset):
66282 (JSC::CodeBlock::getStubInfo):
66283 (JSC::CodeBlock::getCallLinkInfo):
66284 (JSC::CodeBlock::getMethodCallLinkInfo):
66285 (JSC::CodeBlock::bytecodeOffset):
66286 - Move binaryChop to binarySearch in StdLibExtras
66287 * dfg/DFGByteCodeParser.cpp:
66288 (JSC::DFG::ByteCodeParser::ByteCodeParser):
66289 (JSC::DFG::ByteCodeParser::parse):
66291 - Make m_noArithmetic a member, initialize m_currentIndex in the constructor.
66292 * dfg/DFGByteCodeParser.h:
66293 - Change parse() to not take a start index (always 0).
66294 * dfg/DFGGraph.cpp:
66295 (JSC::DFG::Graph::dump):
66296 - Fix Graph::dump() to print comma between non-node children, even if there are no node children.
66297 * dfg/DFGJITCodeGenerator.h:
66298 (JSC::DFG::JITCodeGenerator::JITCodeGenerator):
66299 - Initialize m_compileIndex in constructor.
66300 * dfg/DFGNonSpeculativeJIT.cpp:
66301 (JSC::DFG::NonSpeculativeJIT::compile):
66302 * dfg/DFGNonSpeculativeJIT.h:
66303 - Spilt out compilation of individual node.
66304 * dfg/DFGOperations.cpp:
66305 (JSC::DFG::operationConvertThis):
66306 * dfg/DFGOperations.h:
66307 - Cleanup parameter name.
66308 * dfg/DFGSpeculativeJIT.cpp:
66309 (JSC::DFG::SpeculativeJIT::compile):
66310 * dfg/DFGSpeculativeJIT.h:
66311 - Spilt out compilation of individual node.
66312 * runtime/Executable.cpp:
66313 (JSC::tryDFGCompile):
66314 - Change parse() to not take a start index (always 0).
66315 * wtf/StdLibExtras.h:
66316 (WTF::binarySearch):
66317 - Move binaryChop to binarySearch in StdLibExtras
66319 2011-03-17 Anders Carlsson <andersca@apple.com>
66321 Reviewed by Geoffrey Garen.
66325 * runtime/JSGlobalData.cpp:
66326 (JSC::JSGlobalData::storeVPtrs):
66328 2011-03-17 Geoffrey Garen <ggaren@apple.com>
66330 Reviewed by Darin Adler.
66332 1 Structure leaked beneath JSGlobalData::storeVPtrs()
66333 https://bugs.webkit.org/show_bug.cgi?id=56595
66335 * JavaScriptCore.xcodeproj/project.pbxproj:
66336 * runtime/JSGlobalData.cpp:
66337 (JSC::JSGlobalData::storeVPtrs): Now that we have an executable, we need
66338 to explicitly run its destructor.
66340 2011-03-17 Jeff Miller <jeffm@apple.com>
66342 Use a consistent set of file patterns in the svn:ignore property for all .xcodeproj directories, specifically:
66347 project.xcworkspace
66350 * JavaScriptCore.xcodeproj: Modified property svn:ignore.
66352 2011-03-17 Gavin Barraclough <barraclough@apple.com>
66354 Reverting r81197, breaks JIT + INTERPRETER build.
66356 * bytecode/CodeBlock.cpp:
66357 (JSC::CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset):
66358 (JSC::CodeBlock::hasGlobalResolveInfoAtBytecodeOffset):
66359 * bytecode/CodeBlock.h:
66360 (JSC::CodeBlock::addPropertyAccessInstruction):
66361 (JSC::CodeBlock::addGlobalResolveInstruction):
66362 (JSC::CodeBlock::addStructureStubInfo):
66363 * bytecode/Opcode.h:
66364 * bytecode/StructureStubInfo.h:
66365 * bytecompiler/BytecodeGenerator.cpp:
66366 (JSC::BytecodeGenerator::emitResolve):
66367 (JSC::BytecodeGenerator::emitResolveWithBase):
66368 (JSC::BytecodeGenerator::emitGetById):
66369 (JSC::BytecodeGenerator::emitPutById):
66370 (JSC::BytecodeGenerator::emitDirectPutById):
66371 (JSC::BytecodeGenerator::emitCall):
66372 (JSC::BytecodeGenerator::emitConstruct):
66373 (JSC::BytecodeGenerator::emitCatch):
66375 2011-03-17 Ben Taylor <bentaylor.solx86@gmail.com>
66377 Reviewed by Alexey Proskuryakov.
66379 Add a COMPILER(SUNCC) define for Sun Studio 12.
66380 https://bugs.webkit.org/show_bug.cgi?56444
66381 derived from patch 1 of 16 originally from https://bugs.webkit.org/show_bug.cgi?id=24932
66385 2011-03-17 Jay Civelli <jcivelli@chromium.org>
66387 Reviewed by David Levin.
66389 Adding a contains method to Vector.
66390 https://bugs.webkit.org/show_bug.cgi?id=55859
66396 2011-03-17 Patrick Gansterer <paroga@webkit.org>
66398 Fix the interpreter build.
66400 * interpreter/Interpreter.cpp:
66401 (JSC::Interpreter::privateExecute): Added globalData to inheritorID().
66403 2011-03-16 Sam Weinig <sam@webkit.org>
66405 Fix the interpreter build.
66407 * interpreter/Interpreter.cpp:
66408 (JSC::Interpreter::resolve):
66409 (JSC::Interpreter::resolveSkip):
66410 (JSC::Interpreter::resolveGlobal):
66411 (JSC::Interpreter::resolveGlobalDynamic):
66412 (JSC::Interpreter::resolveBaseAndProperty):
66413 (JSC::Interpreter::privateExecute):
66416 2011-03-16 Adam Barth <abarth@webkit.org>
66418 Reviewed by James Robinson.
66420 Remove USE(BUILTIN_UTF8_CODEC)
66421 https://bugs.webkit.org/show_bug.cgi?id=56508
66423 We added this recently when we were unsure about the stability of the
66424 built-in UTF-8 codec. However, the codec seems to be stable, so we
66425 don't need the macro.
66429 2011-03-16 Daniel Bates <dbates@rim.com>
66431 Reviewed by Darin Adler.
66433 Make JIT build for ARM Thumb-2 with RVCT
66434 https://bugs.webkit.org/show_bug.cgi?id=56440
66436 Derived from a patch by Dave Tapuska.
66438 Also, modify the RVCT stub template to indicate that it preserves 8 byte stack alignment.
66440 * jit/JITStubs.cpp:
66442 2011-03-16 Chao-ying Fu <fu@mips.com>
66444 Reviewed by Darin Adler.
66446 Fix MIPS build with const *void
66447 https://bugs.webkit.org/show_bug.cgi?id=56513
66449 * assembler/MacroAssemblerMIPS.h:
66450 (JSC::MacroAssemblerMIPS::load32):
66451 (JSC::MacroAssemblerMIPS::store32):
66453 2011-03-16 Oliver Hunt <oliver@apple.com>
66455 Reviewed by Darin Adler.
66457 Remove unnecessary caller tracking shenanigans from CodeBlock
66458 https://bugs.webkit.org/show_bug.cgi?id=56483
66460 This removes some leftover cruft from when we made CodeBlock
66461 mark its callees. Removing it gives us a 0.7% progression,
66462 reducing the overall regression to ~1.3%.
66464 * bytecode/CodeBlock.cpp:
66465 (JSC::CodeBlock::shrinkToFit):
66466 * bytecode/CodeBlock.h:
66467 (JSC::CallLinkInfo::CallLinkInfo):
66469 (JSC::JIT::linkCall):
66470 (JSC::JIT::linkConstruct):
66472 2011-03-15 Oliver Hunt <oliver@apple.com>
66474 Reviewed by Geoffrey Garen.
66476 Make Structure creation require a JSGlobalData
66477 https://bugs.webkit.org/show_bug.cgi?id=56438
66479 Mechanical change to make Structure::create require JSGlobalData&, and
66480 require all users to provide the globalData.
66482 * API/JSCallbackConstructor.h:
66483 (JSC::JSCallbackConstructor::createStructure):
66484 * API/JSCallbackFunction.h:
66485 (JSC::JSCallbackFunction::createStructure):
66486 * API/JSCallbackObject.h:
66487 (JSC::JSCallbackObject::createStructure):
66488 * API/JSContextRef.cpp:
66489 * JavaScriptCore.exp:
66490 * debugger/DebuggerActivation.cpp:
66491 (JSC::DebuggerActivation::DebuggerActivation):
66492 * debugger/DebuggerActivation.h:
66493 (JSC::DebuggerActivation::createStructure):
66494 * jit/JITStubs.cpp:
66495 (JSC::DEFINE_STUB_FUNCTION):
66497 (GlobalObject::GlobalObject):
66500 * runtime/Arguments.h:
66501 (JSC::Arguments::createStructure):
66502 * runtime/ArrayPrototype.h:
66503 (JSC::ArrayPrototype::createStructure):
66504 * runtime/BooleanObject.h:
66505 (JSC::BooleanObject::createStructure):
66506 * runtime/DateInstance.h:
66507 (JSC::DateInstance::createStructure):
66508 * runtime/DatePrototype.h:
66509 (JSC::DatePrototype::createStructure):
66510 * runtime/ErrorInstance.h:
66511 (JSC::ErrorInstance::createStructure):
66512 * runtime/Executable.h:
66513 (JSC::ExecutableBase::createStructure):
66514 (JSC::EvalExecutable::createStructure):
66515 (JSC::ProgramExecutable::createStructure):
66516 (JSC::FunctionExecutable::createStructure):
66517 * runtime/FunctionPrototype.h:
66518 (JSC::FunctionPrototype::createStructure):
66519 * runtime/GetterSetter.h:
66520 (JSC::GetterSetter::createStructure):
66521 * runtime/InternalFunction.h:
66522 (JSC::InternalFunction::createStructure):
66523 * runtime/JSAPIValueWrapper.h:
66524 (JSC::JSAPIValueWrapper::createStructure):
66525 * runtime/JSActivation.h:
66526 (JSC::JSActivation::createStructure):
66527 * runtime/JSArray.cpp:
66528 (JSC::JSArray::JSArray):
66529 * runtime/JSArray.h:
66530 (JSC::JSArray::createStructure):
66531 * runtime/JSByteArray.cpp:
66532 (JSC::JSByteArray::createStructure):
66533 * runtime/JSByteArray.h:
66534 (JSC::JSByteArray::JSByteArray):
66535 * runtime/JSCell.h:
66536 (JSC::JSCell::JSCell::createDummyStructure):
66537 * runtime/JSFunction.h:
66538 (JSC::JSFunction::createStructure):
66539 * runtime/JSGlobalData.cpp:
66540 (JSC::JSGlobalData::storeVPtrs):
66541 (JSC::JSGlobalData::JSGlobalData):
66542 * runtime/JSGlobalObject.cpp:
66543 (JSC::JSGlobalObject::reset):
66544 * runtime/JSGlobalObject.h:
66545 (JSC::JSGlobalObject::JSGlobalObject):
66546 (JSC::JSGlobalObject::createStructure):
66547 * runtime/JSNotAnObject.h:
66548 (JSC::JSNotAnObject::createStructure):
66549 * runtime/JSONObject.h:
66550 (JSC::JSONObject::createStructure):
66551 * runtime/JSObject.cpp:
66552 (JSC::JSObject::createInheritorID):
66553 * runtime/JSObject.h:
66554 (JSC::JSObject::createStructure):
66555 (JSC::JSNonFinalObject::createStructure):
66556 (JSC::JSFinalObject::createStructure):
66557 (JSC::createEmptyObjectStructure):
66558 (JSC::JSObject::inheritorID):
66559 * runtime/JSObjectWithGlobalObject.h:
66560 (JSC::JSObjectWithGlobalObject::createStructure):
66561 * runtime/JSPropertyNameIterator.h:
66562 (JSC::JSPropertyNameIterator::createStructure):
66563 * runtime/JSStaticScopeObject.h:
66564 (JSC::JSStaticScopeObject::createStructure):
66565 * runtime/JSString.h:
66566 (JSC::RopeBuilder::createStructure):
66567 * runtime/JSVariableObject.h:
66568 (JSC::JSVariableObject::createStructure):
66569 * runtime/JSWrapperObject.h:
66570 (JSC::JSWrapperObject::createStructure):
66571 * runtime/JSZombie.h:
66572 (JSC::JSZombie::createStructure):
66573 * runtime/MathObject.h:
66574 (JSC::MathObject::createStructure):
66575 * runtime/NativeErrorConstructor.cpp:
66576 (JSC::NativeErrorConstructor::NativeErrorConstructor):
66577 * runtime/NativeErrorConstructor.h:
66578 (JSC::NativeErrorConstructor::createStructure):
66579 * runtime/NumberConstructor.h:
66580 (JSC::NumberConstructor::createStructure):
66581 * runtime/NumberObject.h:
66582 (JSC::NumberObject::createStructure):
66583 * runtime/ObjectConstructor.h:
66584 (JSC::ObjectConstructor::createStructure):
66585 * runtime/RegExpConstructor.h:
66586 (JSC::RegExpConstructor::createStructure):
66587 * runtime/RegExpObject.h:
66588 (JSC::RegExpObject::createStructure):
66589 * runtime/ScopeChain.h:
66590 (JSC::ScopeChainNode::createStructure):
66591 * runtime/StringObject.h:
66592 (JSC::StringObject::createStructure):
66593 * runtime/StringObjectThatMasqueradesAsUndefined.h:
66594 (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
66595 * runtime/StringPrototype.h:
66596 (JSC::StringPrototype::createStructure):
66597 * runtime/Structure.h:
66598 (JSC::Structure::create):
66600 2011-03-16 Geoffrey Garen <ggaren@apple.com>
66602 Reviewed by Oliver Hunt.
66604 Some conservative root gathering cleanup
66605 https://bugs.webkit.org/show_bug.cgi?id=56447
66607 SunSpider says 0.5% - 1.8% faster.
66609 * interpreter/RegisterFile.cpp:
66610 (JSC::RegisterFile::gatherConservativeRoots):
66611 * interpreter/RegisterFile.h: New helper function for doing the
66612 conservative gathering of the register file. It's still conservative,
66613 since the register file may contain uninitialized values, but it's
66614 moving-safe, because it only visits values tagged as pointers, so there's
66615 no risk of mistaking an integer for a pointer and accidentally changing it.
66617 * runtime/ConservativeSet.cpp:
66618 (JSC::ConservativeRoots::add):
66619 * runtime/ConservativeSet.h: Added a single-value add function, used above.
66621 * runtime/Heap.cpp:
66622 (JSC::Heap::markRoots): Separated machine stack conservative roots from
66623 register file conservative roots because machine stack roots must be
66624 pinned, but register file roots need not be pinned.
66626 Adopted new interface for passing the current stack extent to the machine
66627 stack root gathering routine. This allows us to exclude marking-related
66628 data structures on the stack, and thus avoid double-marking the set of
66631 * runtime/MachineStackMarker.cpp:
66632 (JSC::MachineThreads::gatherFromCurrentThread):
66633 (JSC::MachineThreads::gatherConservativeRoots):
66634 * runtime/MachineStackMarker.h: Added new interface, described above.
66636 * runtime/MarkedBlock.h:
66637 (JSC::MarkedBlock::firstAtom):
66638 * wtf/StdLibExtras.h:
66639 (WTF::roundUpToMultipleOf): Moved roundUpToMultipleOf so it could be used
66642 2011-03-16 Geoffrey Garen <ggaren@apple.com>
66644 Reviewed by Oliver Hunt.
66646 A little bit of MarkStack cleanup
66647 https://bugs.webkit.org/show_bug.cgi?id=56443
66649 Moved MarkStack functions into MarkStack.h/.cpp.
66651 SunSpider reports no change.
66653 * runtime/JSArray.h:
66654 * runtime/JSCell.h: Moved from here...
66655 * runtime/MarkStack.cpp:
66656 (JSC::MarkStack::markChildren):
66657 (JSC::MarkStack::drain): ...to here. Also, no need to inline drain. It's
66658 a huge function, and not called many times.
66660 * runtime/MarkStack.h:
66661 (JSC::MarkStack::~MarkStack): Moved near constructor, per style guide.
66662 (JSC::MarkStack::append):
66663 (JSC::MarkStack::deprecatedAppend):
66664 (JSC::MarkStack::internalAppend): Moved to here.
66666 2011-03-15 Geoffrey Garen <ggaren@apple.com>
66668 Reviewed by Oliver Hunt.
66670 Removed another deprecatedAppend
66671 https://bugs.webkit.org/show_bug.cgi?id=56429
66673 * collector/handles/HandleHeap.cpp:
66674 (JSC::HandleHeap::markStrongHandles):
66675 * collector/handles/HandleHeap.h: Use HeapRootMarker, since handles are
66676 marked directly by the Heap.
66678 * runtime/Heap.cpp:
66679 (JSC::Heap::markRoots): Ditto.
66681 2011-03-15 Geoffrey Garen <ggaren@apple.com>
66683 Reviewed by Oliver Hunt.
66685 Removed some more deprecated / unsafe append
66686 https://bugs.webkit.org/show_bug.cgi?id=56428
66688 * collector/handles/HandleStack.cpp:
66689 (JSC::HandleStack::mark):
66690 * collector/handles/HandleStack.h: Mark the handle stack using a HeapRoot
66691 marker, since it's a heap root.
66693 * runtime/ArgList.cpp:
66694 (JSC::MarkedArgumentBuffer::markLists):
66695 (JSC::MarkedArgumentBuffer::slowAppend):
66696 * runtime/ArgList.h: Ditto.
66698 * runtime/Heap.cpp:
66699 (JSC::Heap::markRoots): Added a mark call for marking the handle stack.
66700 It seems like Oliver forgot this in his last patch. (!)
66702 * runtime/MarkStack.h: Removed appendSlots, since it would allow an
66703 object to embed JSValues directly instead of using WriteBarrier.
66705 (JSC::MarkStack::append): Added a private append for a list of values.
66707 (JSC::HeapRootMarker::mark): Access to the above.
66709 2011-03-15 Geoffrey Garen <ggaren@apple.com>
66711 Reviewed by Oliver Hunt.
66713 Removed a few more deprecatedAppends, and removed HeapRoot<T>
66714 https://bugs.webkit.org/show_bug.cgi?id=56422
66716 Added HeapRootMarker, a privileged class for marking direct heap roots
66717 that are iterated during each garbage collection. This is easier to use
66718 and more reliable than HeapRoot<T>, so I've removed HeapRoot<T>.
66720 * debugger/Debugger.cpp:
66721 (JSC::evaluateInGlobalCallFrame):
66722 * debugger/DebuggerCallFrame.cpp:
66723 (JSC::DebuggerCallFrame::evaluate):
66724 * interpreter/CallFrame.h:
66725 (JSC::ExecState::exception):
66726 * jit/JITStubs.cpp:
66727 (JSC::DEFINE_STUB_FUNCTION):
66728 * runtime/Completion.cpp:
66729 (JSC::evaluate): exception is no longer a HeapRoot<T>, so no need to
66732 * runtime/Heap.cpp:
66733 (JSC::Heap::markProtectedObjects):
66734 (JSC::Heap::markTempSortVectors):
66735 (JSC::Heap::markRoots):
66736 * runtime/Heap.h: Updated to use HeapRootMarker.
66738 * runtime/JSCell.h:
66739 (JSC::JSCell::MarkStack::append): Added private functions for
66740 HeapRootMarker to use.
66742 * runtime/JSGlobalData.h: exception is no longer a HeapRoot<T>.
66744 * runtime/MarkStack.h:
66745 (JSC::HeapRootMarker::HeapRootMarker):
66746 (JSC::HeapRootMarker::mark): Added private functions for
66747 HeapRootMarker to use.
66749 * runtime/SmallStrings.cpp:
66750 (JSC::SmallStrings::markChildren): Updated to use HeapRootMarker.
66752 * runtime/SmallStrings.h:
66753 (JSC::SmallStrings::emptyString):
66754 (JSC::SmallStrings::singleCharacterString):
66755 (JSC::SmallStrings::singleCharacterStrings): Updated to use HeapRootMarker.
66757 * runtime/WriteBarrier.h: Removed HeapRoot<T>.
66759 2011-03-14 Geoffrey Garen <ggaren@apple.com>
66761 Reviewed by Oliver Hunt.
66763 Made the global object moving-GC-safe
66764 https://bugs.webkit.org/show_bug.cgi?id=56348
66766 SunSpider reports no change.
66768 * runtime/JSGlobalObject.cpp:
66769 (JSC::JSGlobalObject::markChildren): Removed a dubious comment that
66770 suggested we do not need to visit all our references during GC, since
66771 that is not true in a moving GC.
66773 Re-sorted data members by type, removed one duplicate, and added back
66774 the one missing mark I found.
66776 * runtime/JSGlobalObject.h: Re-sorted data members by type.
66778 2011-03-15 Oliver Hunt <oliver@apple.com>
66780 Reviewed by Geoffrey Garen.
66782 Introduce Local<T> to allow us to start moving to precise marking of locals
66783 https://bugs.webkit.org/show_bug.cgi?id=56394
66785 Introduce a new handle type, Local<T> and a scoping mechanism
66786 LocalScope to allow us to start moving towards precise marking
66787 of temporaries and local variables.
66789 We also start to use the new Local<> type in the JSON stringifier
66790 so that we can have some coverage of their behaviour in the initial
66794 * JavaScriptCore.gypi:
66795 * JavaScriptCore.pro:
66796 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
66797 * JavaScriptCore.xcodeproj/project.pbxproj:
66798 * collector/handles/Handle.h:
66800 * collector/handles/HandleStack.cpp: Added.
66801 (JSC::HandleStack::HandleStack):
66802 (JSC::HandleStack::mark):
66803 (JSC::HandleStack::grow):
66804 * collector/handles/HandleStack.h: Added.
66805 (JSC::HandleStack::enterScope):
66806 (JSC::HandleStack::zapTo):
66807 (JSC::HandleStack::leaveScope):
66808 (JSC::HandleStack::push):
66809 * collector/handles/Local.h: Added.
66810 (JSC::Local::internalSet):
66813 (JSC::LocalStack::LocalStack):
66814 (JSC::LocalStack::peek):
66815 (JSC::LocalStack::pop):
66816 (JSC::LocalStack::push):
66817 (JSC::LocalStack::isEmpty):
66818 (JSC::LocalStack::size):
66819 * collector/handles/LocalScope.h: Added.
66820 (JSC::LocalScope::LocalScope):
66821 (JSC::LocalScope::~LocalScope):
66822 (JSC::LocalScope::release):
66823 * runtime/Heap.cpp:
66824 (JSC::Heap::markRoots):
66826 (JSC::Heap::allocateLocalHandle):
66827 (JSC::Heap::handleStack):
66828 * runtime/JSCell.h:
66829 (JSC::JSCell::::getString):
66830 * runtime/JSGlobalData.cpp:
66831 (JSC::JSGlobalData::JSGlobalData):
66832 * runtime/JSGlobalData.h:
66833 (JSC::JSGlobalData::allocateLocalHandle):
66834 * runtime/JSONObject.cpp:
66835 (JSC::Stringifier::Stringifier):
66836 (JSC::Stringifier::stringify):
66837 (JSC::Stringifier::appendStringifiedValue):
66838 (JSC::Stringifier::Holder::Holder):
66839 (JSC::Walker::Walker):
66840 (JSC::Walker::walk):
66841 (JSC::JSONProtoFuncParse):
66842 (JSC::JSONProtoFuncStringify):
66843 (JSC::JSONStringify):
66844 * runtime/JSONObject.h:
66845 * runtime/MarkStack.h:
66846 (JSC::MarkStack::appendValues):
66847 (JSC::MarkStack::appendSlots):
66849 2011-03-15 Gavin Barraclough <barraclough@apple.com>
66851 Rubber Stamped by Sam Weinig.
66853 Bug 56420 - Remove ENABLE(JIT) code from ByteCompiler
66854 Some methods have unnecessary differences in name/arguments for interpreter/JIT.
66856 * bytecode/CodeBlock.cpp:
66857 * bytecode/CodeBlock.h:
66858 (JSC::HandlerInfo::HandlerInfo):
66859 (JSC::CodeBlock::addPropertyAccessInfo):
66860 (JSC::CodeBlock::addGlobalResolveInfo):
66861 (JSC::CodeBlock::addCallLinkInfo):
66862 (JSC::CodeBlock::globalResolveInfo):
66863 * bytecode/Opcode.h:
66864 * bytecode/StructureStubInfo.h:
66865 * bytecompiler/BytecodeGenerator.cpp:
66866 (JSC::BytecodeGenerator::emitResolve):
66867 (JSC::BytecodeGenerator::emitResolveWithBase):
66868 (JSC::BytecodeGenerator::emitGetById):
66869 (JSC::BytecodeGenerator::emitPutById):
66870 (JSC::BytecodeGenerator::emitDirectPutById):
66871 (JSC::BytecodeGenerator::emitCall):
66872 (JSC::BytecodeGenerator::emitConstruct):
66873 (JSC::BytecodeGenerator::emitCatch):
66875 2011-03-15 Gavin Barraclough <barraclough@apple.com>
66877 Reviewed by Sam Weinig.
66879 Fix broken assert in new code.
66881 * dfg/DFGAliasTracker.h:
66882 (JSC::DFG::AliasTracker::recordPutByVal):
66883 - recordPutByVal is called for both PutByVal & PutByValAlias.
66885 2011-03-15 Gavin Barraclough <barraclough@apple.com>
66887 Rubber stamped by Sam Weinig.
66889 Removed redundant code from BytecodeGenerator.
66891 * bytecompiler/BytecodeGenerator.cpp:
66892 * bytecompiler/BytecodeGenerator.h:
66893 - delete uncalled code missed when reparsing was removed.
66895 2011-03-15 Kevin Ollivier <kevino@theolliviers.com>
66897 Reviewed by Darin Adler.
66899 Introduce WTF_USE_EXPORT_MACROS, which will allow us to put shared library import/export
66900 info into the headers rather than in export symbol definition files, but disable it on
66901 all platforms initially so we can deal with port build issues one port at a time.
66903 https://bugs.webkit.org/show_bug.cgi?id=27551
66907 * wtf/Assertions.h:
66908 * wtf/ExportMacros.h: Added.
66911 2011-03-14 Laszlo Gombos <laszlo.1.gombos@nokia.com>
66913 Unreviewed build fix.
66915 Buildfix when JIT is not enabled after r81079
66916 https://bugs.webkit.org/show_bug.cgi?id=56361
66918 * runtime/Executable.cpp:
66920 2011-03-14 Geoffrey Garen <ggaren@apple.com>
66922 Reviewed by Oliver Hunt.
66924 Made the global object moving-GC-safe
66925 https://bugs.webkit.org/show_bug.cgi?id=56348
66927 SunSpider reports no change.
66929 * runtime/JSGlobalObject.cpp:
66930 (JSC::JSGlobalObject::markChildren): Removed a dubious comment that
66931 suggested we do not need to visit all our references during GC, since
66932 that is not true in a moving GC.
66934 Re-sorted data members by type, removed one duplicate, and added back
66935 the one missing mark I found.
66937 * runtime/JSGlobalObject.h: Re-sorted data members by type.
66939 2011-03-14 Geoffrey Garen <ggaren@apple.com>
66941 Reviewed by Oliver Hunt.
66943 Made JSWrapperObject and subclasses moving-GC-safe
66944 https://bugs.webkit.org/show_bug.cgi?id=56346
66946 SunSpider reports no change.
66948 * runtime/BooleanObject.cpp:
66949 (JSC::BooleanObject::BooleanObject):
66950 * runtime/DateInstance.cpp:
66951 (JSC::DateInstance::DateInstance): No more need for JSGlobalData, since
66952 we don't initialize the wrapped value in our constructor.
66954 * runtime/DateInstance.h: Don't set the OverridesMarkChildren flag because
66955 we do not in fact override markChildren.
66957 * runtime/DatePrototype.h: Declare an anonymous slot, since wrapper object
66958 no longer does so for us. Also added an ASSERT to catch a latent bug,
66959 where DatePrototype stomped on its base class's anonymous slot. Hard-coded
66960 anonymous slots are a plague on our code. This doesn't cause any problems
66961 in our existing code since the base class never reads the anonymous slot
66962 it declares, but it caused crashes when I tried to start using the slot
66963 in an initial version of this patch.
66965 * runtime/JSWrapperObject.h:
66966 (JSC::JSWrapperObject::JSWrapperObject):
66967 (JSC::JSWrapperObject::internalValue):
66968 (JSC::JSWrapperObject::setInternalValue): Resolved a problem where
66969 our internal value was stored in two places: an anonymous slot, and a
66970 data member which was not always visited during GC. Now, we only use the
66971 data member, and we always visit it. (Instead of relying on certain
66972 subclasses to set the OverridesMarkChildren bit, we set it ourselves.)
66974 * runtime/NumberObject.cpp:
66975 (JSC::NumberObject::NumberObject): No more need for JSGlobalData, since
66976 we don't initialize the wrapped value in our constructor.
66978 * runtime/NumberObject.h: Removed meaningless declaration.
66980 * runtime/StringObject.cpp:
66981 (JSC::StringObject::StringObject): No more need for JSGlobalData, since
66982 we don't initialize the wrapped value in our constructor.
66984 * runtime/StringObject.h: Don't set the OverridesMarkChildren flag because
66985 we do not in fact override markChildren.
66987 * runtime/StringPrototype.h: Declare an anonymous slot, since wrapper object
66988 no longer does so for us. Also added an ASSERT to catch a latent bug,
66989 where DatePrototype stomped on its base class's anonymous slot. Hard-coded
66990 anonymous slots are a plague on our code.
66992 2011-03-14 Michael Saboff <msaboff@apple.com>
66994 Reviewed by Gavin Barraclough.
66996 Look-ahead assertions with back references don’t work as expected
66997 https://bugs.webkit.org/show_bug.cgi?id=56082
66999 Changed parentheses assertion processing to temporarily back out the
67000 number of known characters after the assertion while processing the
67001 assertion. This was done so that assertions don't fail due to
67002 checking the number of required characters as additional to the
67003 rest of the express since assertions don't "consume" input.
67004 Added a byte code to uncheck characters to support the change.
67006 * yarr/YarrInterpreter.cpp:
67007 (JSC::Yarr::Interpreter::matchDisjunction):
67008 (JSC::Yarr::ByteCompiler::uncheckInput):
67009 (JSC::Yarr::ByteCompiler::emitDisjunction):
67010 * yarr/YarrInterpreter.h:
67011 (JSC::Yarr::ByteTerm::UncheckInput):
67013 2011-03-14 Viatcheslav Ostapenko <ostapenko.viatcheslav@nokia.com>
67015 Reviewed by Laszlo Gombos.
67017 [Qt] Warning that round/roundf functions are already defined when compiled with RVCT 4 on symbian.
67018 https://bugs.webkit.org/show_bug.cgi?id=56133
67020 Add condition to not compile webkit internal math round functions on RVCT compiler versions
67021 from 3.0.0 because they are already defined in compiler math library.
67023 * wtf/MathExtras.h:
67025 2011-03-14 Gavin Barraclough <barraclough@apple.com>
67027 Reviewed by Geoffrey Garen & Oliver Hunt.
67029 Bug 56284 - Add a dataflow intermediate representation for use in JIT generation.
67031 The JSC JIT presently generates code directly from the bytecode used by the interpreter.
67032 This is not an optimal intermediate representation for JIT code generation, since it does
67033 not capture liveness information of values, and provides little opportunity to perform
67034 any static analysis for even primitive types. The JIT currently generates two code paths,
67035 a fast path handling common cases, and a slower path handling less common operand types.
67036 However the slow path jumps back into the fast path, meaning that information arising
67037 from the earlier type checks cannot be propagated to later operations.
67040 * a dataflow intermediate representation capable of describing a single basic block
67042 * a mechanism to convert a simple, single-block bytecode functions to the new IR,
67043 * and a JIT code generator capable of generating code from this representation.
67045 The JIT generates two code paths, with the slower path not reentering the fast path
67046 mid-block, allowing speculative optimizations to be made on the hot path, with type
67047 information arising from these speculative decisions able to be propagated through the
67048 dataflow. Code generation of both speculative and non-speculative paths exploits the type
67049 and liveness information represented in the dataflow graph to attempt to avoid redundant
67050 boxing and type-checking of values, and to remove unnecessary spills of temporary values
67051 to the RegisterFile.
67053 The dataflow JIT currently can only support a subset of bytecode operations, limited to
67054 arithmetic, bit-ops, and basic property access. Functions that cannot be compiled by the
67055 dataflow JIT will be run using the existing JIT. The coverage of the dataflow JIT will be
67056 expanded to include, control-flow, function calls, and then the long-tail of remaining
67057 bytecode instructions. The JIT presently only support JSVALUE64, and as a consequence of
67058 this only supports x86-64.
67060 The status of the dataflow JIT is currently work-in-progress. Limitations of the present
67061 JIT code generation may cause performance regressions, particularly:
67062 * the policy to only generate arithmetic code on the speculative path using integer
67063 instructions, never using floating point.
67064 * the policy to only generate arithmetic code on the non-speculative path using
67065 floating point instructions, never using integer.
67066 * always generating JSValue adds on the non-speculative path as a call out to a
67067 C-function, never handling this in JIT code.
67068 * always assuming by-Value property accesses on the speculative path to be array
67070 * generating all by-Value property accesses from the non-speculative path as a call
67071 out to a C-function.
67072 * generating all by-Indentifer property accesses as a call out to a C-function.
67073 Due to these regressions, the code is landed in a state where it is disabled in most
67074 cases by the ENABLE_DFG_JIT_RESTRICTIONS guard in Platform.h. As these regressions are
67075 addressed, the JIT will be allowed to trigger in more cases.
67077 * JavaScriptCore.xcodeproj/project.pbxproj:
67078 - Added new files to Xcode project.
67080 - Added directory for new code.
67081 * dfg/DFGByteCodeParser.cpp: Added.
67082 * dfg/DFGByteCodeParser.h: Added.
67083 - Contruct a DFG::Graph representation from a bytecode CodeBlock.
67084 * dfg/DFGGenerationInfo.h: Added.
67085 - Track type & register information for VirtualRegisters during JIT code generation.
67086 * dfg/DFGGraph.cpp: Added.
67087 * dfg/DFGGraph.h: Added.
67088 - Dataflow graph intermediate representation for code generation.
67089 * dfg/DFGJITCodeGenerator.cpp: Added.
67090 * dfg/DFGJITCodeGenerator.h: Added.
67091 - Base class for SpeculativeJIT & NonSpeculativeJIT to share common functionality.
67092 * dfg/DFGJITCompiler.cpp: Added.
67093 * dfg/DFGJITCompiler.h: Added.
67094 - Class responsible for driving code generation of speculativeJIT & non-speculative
67095 code paths from the dataflow graph.
67096 * dfg/DFGNonSpeculativeJIT.cpp: Added.
67097 * dfg/DFGNonSpeculativeJIT.h: Added.
67098 - Used to generate the non-speculative code path, this make no assumptions
67099 about operand types.
67100 * dfg/DFGOperations.cpp: Added.
67101 * dfg/DFGOperations.h: Added.
67102 - Helper functions called from the JIT generated code.
67103 * dfg/DFGRegisterBank.h: Added.
67104 - Used to track contents of physical registers during JIT code generation.
67105 * dfg/DFGSpeculativeJIT.cpp: Added.
67106 * dfg/DFGSpeculativeJIT.h: Added.
67107 - Used to generate the speculative code path, this make assumptions about
67108 operand types to enable optimization.
67109 * runtime/Executable.cpp:
67110 - Add code to attempt to use the DFG JIT to compile a function, with fallback
67111 to the existing JIT.
67113 - Added compile guards to enable the DFG JIT.
67115 2011-03-14 Geoffrey Garen <ggaren@apple.com>
67117 Reviewed by Oliver Hunt.
67119 Removed more cases of DeprecatedPtr (exception, SmallStrings)
67120 https://bugs.webkit.org/show_bug.cgi?id=56332
67122 * runtime/Identifier.cpp:
67123 (JSC::Identifier::add):
67124 (JSC::Identifier::addSlowCase): Use a variable instead of a hard-coded
67125 constant, to make this code less brittle.
67127 * runtime/JSGlobalData.h: Use HeapRoot instead of DeprecatedPtr because
67128 this reference is owned and managed directly by the heap.
67130 * runtime/JSString.cpp:
67131 (JSC::JSString::substringFromRope):
67132 * runtime/JSString.h:
67133 (JSC::jsSingleCharacterString):
67134 (JSC::jsSingleCharacterSubstring):
67136 (JSC::jsStringWithFinalizer):
67137 (JSC::jsSubstring):
67138 (JSC::jsOwnedString): Use a variable instead of a hard-coded
67139 constant, to make this code less brittle.
67141 * runtime/SmallStrings.cpp:
67142 (JSC::SmallStringsStorage::rep):
67143 (JSC::SmallStringsStorage::SmallStringsStorage):
67144 (JSC::SmallStrings::SmallStrings):
67145 (JSC::SmallStrings::markChildren):
67146 (JSC::SmallStrings::clear):
67147 (JSC::SmallStrings::count): Use a variable instead of a hard-coded
67148 constant, to make this code less brittle.
67150 * runtime/SmallStrings.h:
67151 (JSC::SmallStrings::singleCharacterString): Use HeapRoot instead of
67152 DeprecatedPtr because these references are owned and managed directly by
67155 Stop using FixedArray because we only want a very limited set
67156 of classes to be able to use HeapRoot. (Replaced with manual ASSERTs.)
67158 * runtime/WriteBarrier.h:
67160 (JSC::WriteBarrier::WriteBarrier):
67161 (JSC::HeapRoot::HeapRoot):
67162 (JSC::HeapRoot::operator=): Added HeapRoot, which is allowed to set
67163 without write barrier because we assume all HeapRoots are scanned during
67166 2011-03-14 Brian Weinstein <bweinstein@apple.com>
67168 Reviewed by Adam Roben and Gavin Barraclough.
67170 FileSystemWin.cpp needs listDirectory() implementation
67171 https://bugs.webkit.org/show_bug.cgi?id=56331
67172 <rdar://problem/9126635>
67174 Give StringConcatenate the ability to deal with const UChar*'s as a String type to append.
67176 * wtf/text/StringConcatenate.h:
67178 2011-03-14 Mark Rowe <mrowe@apple.com>
67180 Reviewed by Oliver Hunt.
67182 <http://webkit.org/b/56304> REGRESSION(r80892): 100,000+ leaks seen on the build bot
67184 * API/JSClassRef.cpp:
67185 (OpaqueJSClass::OpaqueJSClass): Don't leak any existing entry for the given name if
67186 the class definition contains duplicates. This also removes what look to be leaks
67187 of the StringImpl instances that are used as keys: the HashMap key type is a RefPtr
67188 which retains / releases the instances at the appropriate time, so explicitly calling
67189 ref is not necessary.
67191 2011-03-14 Oliver Hunt <oliver@apple.com>
67195 * jit/JSInterfaceJIT.h:
67196 (JSC::JSInterfaceJIT::emitLoadInt32):
67197 (JSC::JSInterfaceJIT::tagFor):
67198 (JSC::JSInterfaceJIT::payloadFor):
67199 (JSC::JSInterfaceJIT::intPayloadFor):
67200 (JSC::JSInterfaceJIT::intTagFor):
67201 (JSC::JSInterfaceJIT::addressFor):
67203 2011-03-11 Oliver Hunt <oliver@apple.com>
67205 Reviewed by Gavin Barraclough.
67207 Ensure all values are correctly tagged in the registerfile
67208 https://bugs.webkit.org/show_bug.cgi?id=56214
67210 This patch makes sure that all JSCell pointers written to
67211 the registerfile are correctly tagged as JSCells, and replaces
67212 raw int usage with the immediate representation.
67214 For performance, register pressure, and general saneness reasons
67215 I've added abstractions for reading and writing the tag
67216 and payload of integer registers directly for the JSVALUE64
67219 * interpreter/Register.h:
67220 (JSC::Register::withInt):
67221 (JSC::Register::withCallee):
67222 (JSC::Register::operator=):
67223 (JSC::Register::i):
67224 (JSC::Register::activation):
67225 (JSC::Register::function):
67226 (JSC::Register::propertyNameIterator):
67227 (JSC::Register::scopeChain):
67230 (JSC::JIT::compileOpCallInitializeCallFrame):
67231 (JSC::JIT::compileOpCallVarargs):
67232 (JSC::JIT::compileOpCall):
67233 * jit/JITCall32_64.cpp:
67234 (JSC::JIT::compileOpCallInitializeCallFrame):
67235 (JSC::JIT::compileOpCallVarargs):
67236 (JSC::JIT::compileOpCall):
67237 (JSC::JIT::compileOpCallSlowCase):
67238 * jit/JITInlineMethods.h:
67239 (JSC::JIT::emitPutToCallFrameHeader):
67240 (JSC::JIT::emitPutCellToCallFrameHeader):
67241 (JSC::JIT::emitPutIntToCallFrameHeader):
67242 * jit/JITOpcodes.cpp:
67243 (JSC::JIT::privateCompileCTINativeCall):
67244 (JSC::JIT::emit_op_get_pnames):
67245 (JSC::JIT::emit_op_next_pname):
67246 (JSC::JIT::emit_op_load_varargs):
67247 (JSC::JIT::emitSlow_op_load_varargs):
67248 * jit/JITOpcodes32_64.cpp:
67249 (JSC::JIT::privateCompileCTINativeCall):
67250 (JSC::JIT::emit_op_get_pnames):
67251 (JSC::JIT::emit_op_next_pname):
67252 * jit/JSInterfaceJIT.h:
67253 (JSC::JSInterfaceJIT::intPayloadFor):
67254 (JSC::JSInterfaceJIT::intTagFor):
67255 * jit/SpecializedThunkJIT.h:
67256 (JSC::SpecializedThunkJIT::returnJSValue):
67257 (JSC::SpecializedThunkJIT::returnDouble):
67258 (JSC::SpecializedThunkJIT::returnInt32):
67259 (JSC::SpecializedThunkJIT::returnJSCell):
67261 2011-03-13 Geoffrey Garen <ggaren@apple.com>
67263 Reviewed by Sam Weinig.
67265 A few Heap-related renames (sans file moves, which should come next)
67266 https://bugs.webkit.org/show_bug.cgi?id=56283
67268 ConservativeSet => ConservativeRoots. "Set" was misleading, since items
67269 are not uniqued. Also, "Roots" is more specific about what's in the set.
67271 MachineStackMarker => MachineThreads. "Threads" is more descriptive of
67272 the fact that this class maintains a set of all threads using JSC.
67273 "Stack" was misleading, since this class traverses stacks and registers.
67274 "Mark" was misleading, since this class doesn't mark anything anymore.
67276 registerThread => addCurrentThread. "Current" is more specific.
67277 unregisterThread => removeCurrentThread. "Current" is more specific.
67279 "currentThreadRegistrar" => threadSpecific. The only point of this data
67280 structure is to register a thread-specific destructor with a pointer to
67283 "mark...Conservatively" => "gather". "Mark" is not true, since these
67284 functions don't mark anything. "Conservatively" is redundant, since they
67285 take "ConservativeRoots" as an argument.
67288 (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
67289 * JavaScriptCore.exp:
67290 * runtime/ConservativeSet.cpp:
67291 (JSC::ConservativeRoots::grow):
67292 (JSC::ConservativeRoots::add):
67293 * runtime/ConservativeSet.h:
67294 (JSC::ConservativeRoots::ConservativeRoots):
67295 (JSC::ConservativeRoots::~ConservativeRoots):
67296 (JSC::ConservativeRoots::size):
67297 (JSC::ConservativeRoots::roots):
67298 * runtime/Heap.cpp:
67300 (JSC::Heap::markRoots):
67302 (JSC::Heap::machineThreads):
67303 * runtime/JSGlobalData.h:
67304 (JSC::JSGlobalData::makeUsableFromMultipleThreads):
67305 * runtime/MachineStackMarker.cpp:
67306 (JSC::MachineThreads::MachineThreads):
67307 (JSC::MachineThreads::~MachineThreads):
67308 (JSC::MachineThreads::makeUsableFromMultipleThreads):
67309 (JSC::MachineThreads::addCurrentThread):
67310 (JSC::MachineThreads::removeThread):
67311 (JSC::MachineThreads::removeCurrentThread):
67312 (JSC::MachineThreads::gatherFromCurrentThreadInternal):
67313 (JSC::MachineThreads::gatherFromCurrentThread):
67314 (JSC::MachineThreads::gatherFromOtherThread):
67315 (JSC::MachineThreads::gatherConservativeRoots):
67316 * runtime/MachineStackMarker.h:
67317 * runtime/MarkStack.h:
67318 (JSC::MarkStack::append):
67320 2011-03-13 David Kilzer <ddkilzer@apple.com>
67322 BUILD FIX for armv7 after r80969
67324 Bug 56270 - The JIT 'friend's many classes in JSC; start unwinding this.
67325 <https://bugs.webkit.org/show_bug.cgi?id=56270>
67327 * assembler/MacroAssemblerARMv7.h:
67328 (JSC::MacroAssemblerARMv7::load32): Made void* address argument
67330 (JSC::MacroAssemblerARMv7::store32): Ditto.
67332 2011-03-13 Geoffrey Garen <ggaren@apple.com>
67336 Try to fix the Mac build.
67338 * JavaScriptCore.xcodeproj/project.pbxproj: Make sure to forward
67339 ConervativeSet.h, since it's now visible when compiling other projects.
67341 2011-03-13 Geoffrey Garen <ggaren@apple.com>
67343 Reviewed by Oliver Hunt.
67345 Removed another case of DeprecatedPtr (ConservativeSet)
67346 https://bugs.webkit.org/show_bug.cgi?id=56281
67348 The ConservativeSet is an internal data structure used during marking,
67349 so direct pointers are fine.
67351 * runtime/ConservativeSet.cpp:
67352 (JSC::ConservativeSet::grow):
67353 * runtime/ConservativeSet.h: Added some accessors, for use by MarkStack::append.
67354 (JSC::ConservativeSet::~ConservativeSet): Fixed a typo where we calculated
67355 the size of the set based on sizeof(DeprecatedPtr<T>*) instead of
67356 sizeof(DeprecatedPtr<T>). I'm not sure if this had real-world implications or not.
67357 (JSC::ConservativeSet::size):
67358 (JSC::ConservativeSet::set): Use direct pointers, as stated above.
67360 * runtime/Heap.cpp:
67361 (JSC::Heap::markRoots):
67362 * runtime/MarkStack.h:
67363 (JSC::MarkStack::append): Created a special case of append for
67364 ConservativeSet. I didn't want to add back a generic "append JSCell*"
67365 function, since other class might start using that wrong. (In the end,
67366 this function might go away, since the Heap will want to do something
67367 slightly more interesting with the conservative set, but this is OK for
67370 2011-03-13 Geoffrey Garen <ggaren@apple.com>
67372 Reviewed by Oliver Hunt.
67374 Removed another case of DeprecatedPtr (PutPropertySlot)
67375 https://bugs.webkit.org/show_bug.cgi?id=56278
67377 * runtime/PutPropertySlot.h:
67378 (JSC::PutPropertySlot::setExistingProperty):
67379 (JSC::PutPropertySlot::setNewProperty):
67380 (JSC::PutPropertySlot::base): Direct pointer is fine for PutPropertySlot,
67381 since it's a stack-allocated temporary.
67383 2011-03-13 Geoffrey Garen <ggaren@apple.com>
67385 Reviewed by Oliver Hunt.
67387 Removed one case of DeprecatedPtr (ScopeChainIterator)
67388 https://bugs.webkit.org/show_bug.cgi?id=56277
67390 * runtime/ScopeChain.h: Direct pointer is fine for ScopeChainIterator,
67391 since it's a stack-allocated temporary.
67393 2011-03-13 Gavin Barraclough <barraclough@apple.com>
67395 Reviewed by Sam Weinig.
67397 Bug 56273 - Add three operand forms to MacroAssember operations.
67399 Adding for X86(_64) for now, should be rolled out to other backends as necessary.
67400 These may allow more efficient code generation in some cases, avoiding the need
67401 for unnecessary register-register move instructions.
67403 * assembler/AbstractMacroAssembler.h:
67404 (JSC::AbstractMacroAssembler::Jump::link):
67405 (JSC::AbstractMacroAssembler::Jump::linkTo):
67406 - marked these methods const.
67407 (JSC::AbstractMacroAssembler::Jump::isSet):
67408 - add a method to check whether a Jump object has been set to
67409 reference an instruction, or is in a null, unset state.
67410 * assembler/MacroAssemblerCodeRef.h:
67411 (JSC::FunctionPtr::FunctionPtr):
67412 - add non-explicit constructor, for FunctionPtr's to C/C++ functions.
67413 * assembler/MacroAssemblerX86Common.h:
67414 (JSC::MacroAssemblerX86Common::and32):
67415 (JSC::MacroAssemblerX86Common::lshift32):
67416 (JSC::MacroAssemblerX86Common::or32):
67417 (JSC::MacroAssemblerX86Common::rshift32):
67418 (JSC::MacroAssemblerX86Common::urshift32):
67419 (JSC::MacroAssemblerX86Common::xor32):
67420 (JSC::MacroAssemblerX86Common::moveDouble):
67421 (JSC::MacroAssemblerX86Common::addDouble):
67422 (JSC::MacroAssemblerX86Common::divDouble):
67423 (JSC::MacroAssemblerX86Common::subDouble):
67424 (JSC::MacroAssemblerX86Common::mulDouble):
67425 (JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32):
67426 (JSC::MacroAssemblerX86Common::branchTest32):
67427 (JSC::MacroAssemblerX86Common::branchTest8):
67428 (JSC::MacroAssemblerX86Common::branchAdd32):
67429 (JSC::MacroAssemblerX86Common::branchMul32):
67430 (JSC::MacroAssemblerX86Common::branchSub32):
67431 - add three operand forms of these instructions.
67432 * assembler/MacroAssemblerX86_64.h:
67433 (JSC::MacroAssemblerX86_64::addDouble):
67434 (JSC::MacroAssemblerX86_64::convertInt32ToDouble):
67435 (JSC::MacroAssemblerX86_64::loadPtr):
67436 (JSC::MacroAssemblerX86_64::branchTestPtr):
67437 * assembler/X86Assembler.h:
67438 (JSC::X86Assembler::JmpSrc::isSet):
67439 - add a method to check whether a JmpSrc object has been set to
67440 reference an instruction, or is in a null, unset state.
67441 (JSC::X86Assembler::movsd_rr):
67442 - added FP register-register move.
67443 (JSC::X86Assembler::linkJump):
67444 - Add an assert to check jumps aren't linked more than once.
67445 * jit/JITInlineMethods.h:
67446 (JSC::JIT::emitLoadInt32ToDouble):
67447 - load integers to the FPU via regsiters on x86-64.
67449 2011-03-13 Gavin Barraclough <barraclough@apple.com>
67453 * assembler/MacroAssemblerARM.h:
67454 (JSC::MacroAssemblerARM::load32):
67456 2011-03-13 Gavin Barraclough <barraclough@apple.com>
67458 Reviewed by Sam Weinig.
67460 Bug 56270 - The JIT 'friend's many classes in JSC; start unwinding this.
67462 The JIT need to 'friend' other classes in order to be able to calculate offsets
67463 of various properties, or the absolute addresses of members within specific objects,
67464 in order to JIT generate code that will access members within the class when run.
67466 Instead of using friends in these cases, switch to providing specific accessor
67467 methods to provide this information. In the case of offsets, these can be static
67468 functions, and in the case of pointers to members within a specific object these can
67469 be const methods returning pointers to const values, to prevent clients from
67470 modifying values otherwise encapsulated within classes.
67472 * bytecode/SamplingTool.h:
67473 * interpreter/Register.h:
67474 * interpreter/RegisterFile.h:
67475 * runtime/JSArray.h:
67476 * runtime/JSCell.h:
67477 * runtime/JSTypeInfo.h:
67478 * runtime/JSVariableObject.h:
67479 * runtime/Structure.h:
67480 * wtf/RefCounted.h:
67481 - Change these classes to no longer friend the JIT, add accessors for member offsets.
67483 * jit/JITCall32_64.cpp:
67484 * jit/JITInlineMethods.h:
67485 * jit/JITOpcodes.cpp:
67486 * jit/JITOpcodes32_64.cpp:
67487 * jit/JITPropertyAccess.cpp:
67488 * jit/JITPropertyAccess32_64.cpp:
67489 - Change the JIT to use class accessors, rather than taking object ofsets directly.
67490 * assembler/AbstractMacroAssembler.h:
67491 * assembler/MacroAssemblerX86_64.h:
67492 * assembler/X86Assembler.h:
67493 - Since the accessors for objects members return const pointers to retain encapsulation,
67494 methods generating code with absolute addresses must be able to handle const pointers
67495 (the JIT doesn't write to these values, do dies treat the pointer to value as const
67496 from within the C++ code of the JIT, if not at runtime!).
67498 2011-03-12 Sheriff Bot <webkit.review.bot@gmail.com>
67500 Unreviewed, rolling out r80919.
67501 http://trac.webkit.org/changeset/80919
67502 https://bugs.webkit.org/show_bug.cgi?id=56251
67504 all windows bots failed to compile this change (Requested by
67505 loislo on #webkit).
67507 * JavaScriptCore.xcodeproj/project.pbxproj:
67508 * bytecode/StructureStubInfo.cpp:
67509 * interpreter/Register.h:
67510 (JSC::Register::withInt):
67511 (JSC::Register::withCallee):
67512 (JSC::Register::operator=):
67513 (JSC::Register::i):
67514 (JSC::Register::activation):
67515 (JSC::Register::function):
67516 (JSC::Register::propertyNameIterator):
67517 (JSC::Register::scopeChain):
67520 (JSC::JIT::compileOpCallInitializeCallFrame):
67521 (JSC::JIT::compileOpCallVarargs):
67522 (JSC::JIT::compileOpCall):
67523 * jit/JITCall32_64.cpp:
67524 (JSC::JIT::compileOpCallInitializeCallFrame):
67525 (JSC::JIT::compileOpCallVarargs):
67526 (JSC::JIT::compileOpCall):
67527 (JSC::JIT::compileOpCallSlowCase):
67528 * jit/JITInlineMethods.h:
67529 (JSC::JIT::emitPutToCallFrameHeader):
67530 * jit/JITOpcodes.cpp:
67531 (JSC::JIT::privateCompileCTINativeCall):
67532 (JSC::JIT::emit_op_get_pnames):
67533 (JSC::JIT::emit_op_next_pname):
67534 (JSC::JIT::emit_op_load_varargs):
67535 (JSC::JIT::emitSlow_op_load_varargs):
67536 * jit/JITOpcodes32_64.cpp:
67537 (JSC::JIT::privateCompileCTINativeCall):
67538 (JSC::JIT::emit_op_get_pnames):
67539 (JSC::JIT::emit_op_next_pname):
67540 * jit/JSInterfaceJIT.h:
67541 (JSC::JSInterfaceJIT::payloadFor):
67542 * jit/SpecializedThunkJIT.h:
67543 (JSC::SpecializedThunkJIT::returnJSValue):
67544 (JSC::SpecializedThunkJIT::returnDouble):
67545 (JSC::SpecializedThunkJIT::returnInt32):
67546 (JSC::SpecializedThunkJIT::returnJSCell):
67547 * runtime/ArgList.cpp:
67548 * runtime/DateConversion.cpp:
67549 * runtime/GCActivityCallbackCF.cpp:
67550 * runtime/Identifier.cpp:
67551 * runtime/JSActivation.h:
67552 (JSC::asActivation):
67553 * runtime/JSLock.cpp:
67554 * runtime/JSNumberCell.cpp:
67555 * runtime/JSObject.h:
67556 * runtime/JSPropertyNameIterator.h:
67557 * runtime/JSValue.h:
67558 * runtime/JSZombie.cpp:
67559 * runtime/MarkedBlock.cpp:
67560 * runtime/MarkedSpace.cpp:
67561 * runtime/PropertyNameArray.cpp:
67562 * runtime/ScopeChain.h:
67563 (JSC::ExecState::globalThisValue):
67564 * wtf/DateMath.cpp:
67566 2011-03-11 Oliver Hunt <oliver@apple.com>
67568 Reviewed by Gavin Barraclough.
67570 Ensure all values are correctly tagged in the registerfile
67571 https://bugs.webkit.org/show_bug.cgi?id=56214
67573 This patch makes sure that all JSCell pointers written to
67574 the registerfile are correctly tagged as JSCells, and replaces
67575 raw int usage with the immediate representation.
67577 For performance, register pressure, and general saneness reasons
67578 I've added abstractions for reading and writing the tag
67579 and payload of integer registers directly for the JSVALUE64
67582 * interpreter/Register.h:
67583 (JSC::Register::withInt):
67584 (JSC::Register::withCallee):
67585 (JSC::Register::operator=):
67586 (JSC::Register::i):
67587 (JSC::Register::activation):
67588 (JSC::Register::function):
67589 (JSC::Register::propertyNameIterator):
67590 (JSC::Register::scopeChain):
67593 (JSC::JIT::compileOpCallInitializeCallFrame):
67594 (JSC::JIT::compileOpCallVarargs):
67595 (JSC::JIT::compileOpCall):
67596 * jit/JITCall32_64.cpp:
67597 (JSC::JIT::compileOpCallInitializeCallFrame):
67598 (JSC::JIT::compileOpCallVarargs):
67599 (JSC::JIT::compileOpCall):
67600 (JSC::JIT::compileOpCallSlowCase):
67601 * jit/JITInlineMethods.h:
67602 (JSC::JIT::emitPutToCallFrameHeader):
67603 (JSC::JIT::emitPutCellToCallFrameHeader):
67604 (JSC::JIT::emitPutIntToCallFrameHeader):
67605 * jit/JITOpcodes.cpp:
67606 (JSC::JIT::privateCompileCTINativeCall):
67607 (JSC::JIT::emit_op_get_pnames):
67608 (JSC::JIT::emit_op_next_pname):
67609 (JSC::JIT::emit_op_load_varargs):
67610 (JSC::JIT::emitSlow_op_load_varargs):
67611 * jit/JITOpcodes32_64.cpp:
67612 (JSC::JIT::privateCompileCTINativeCall):
67613 (JSC::JIT::emit_op_get_pnames):
67614 (JSC::JIT::emit_op_next_pname):
67615 * jit/JSInterfaceJIT.h:
67616 (JSC::JSInterfaceJIT::intPayloadFor):
67617 (JSC::JSInterfaceJIT::intTagFor):
67618 * jit/SpecializedThunkJIT.h:
67619 (JSC::SpecializedThunkJIT::returnJSValue):
67620 (JSC::SpecializedThunkJIT::returnDouble):
67621 (JSC::SpecializedThunkJIT::returnInt32):
67622 (JSC::SpecializedThunkJIT::returnJSCell):
67624 2011-03-11 Dimitri Glazkov <dglazkov@chromium.org>
67626 Reviewed by Eric Seidel.
67628 Introduce project_dir variable and make paths a whole lot saner. Ok, a little bit saner.
67629 https://bugs.webkit.org/show_bug.cgi?id=56231
67631 * JavaScriptCore.gypi: Added project_dir variable.
67632 * gyp/JavaScriptCore.gyp: Changed to use project_dir, rather than DEPTH/JavaScriptCore.
67633 * gyp/generate-dtrace-header.sh: Changed to use project_dir.
67635 2011-03-11 Dimitri Glazkov <dglazkov@chromium.org>
67637 Reviewed by Adam Barth.
67639 Start using derived sources correctly and link minidom with JavaScriptCore gyp project.
67640 https://bugs.webkit.org/show_bug.cgi?id=56217
67642 * gyp/JavaScriptCore.gyp: Added derived source files and passing of shared directory
67644 * gyp/generate-derived-sources.sh: Changed to use passed directory.
67645 * gyp/generate-dtrace-header.sh: Ditto.
67647 2011-03-11 Eric Carlson <eric.carlson@apple.com>
67649 Reviewed by Sam Weinig.
67651 <rdar://problem/8955589> Adopt AVFoundation media back end on Lion.
67653 No new tests, existing media tests cover this.
67655 * JavaScriptCore.exp: Export cancelCallOnMainThread
67656 * wtf/Platform.h: Define WTF_USE_AVFOUNDATION.
67658 2011-03-11 Dimitri Glazkov <dglazkov@chromium.org>
67660 Reviewed by Adam Barth.
67662 Tweak dylib paths and add dtrace header generation action to JavaScriptCore gyp project.
67663 https://bugs.webkit.org/show_bug.cgi?id=56207
67665 * JavaScriptCore.gypi: Added Tracing.d to the sources.
67666 * gyp/generate-dtrace-header.sh: Added.
67667 * gyp/JavaScriptCore.gyp: Updated dylib paths (now the project can see them),
67668 and added DTrace header generating step.
67670 2011-03-10 Oliver Hunt <oliver@apple.com>
67672 Reviewed by Gavin Barraclough.
67674 Fix allocation of native function with a cached thunk
67675 https://bugs.webkit.org/show_bug.cgi?id=56127
67677 Fix this race condition found while fixing zombies.
67679 * collector/handles/HandleHeap.cpp:
67680 (JSC::HandleHeap::clearWeakPointers):
67681 * runtime/Heap.cpp:
67682 (JSC::Heap::reset):
67683 * runtime/JSFunction.cpp:
67684 (JSC::JSFunction::JSFunction):
67685 (JSC::JSFunction::markChildren):
67686 * runtime/JSValue.h:
67687 (JSC::JSValue::decode):
67688 * runtime/JSZombie.cpp:
67689 (JSC::JSZombie::leakedZombieStructure):
67690 * runtime/JSZombie.h:
67691 (JSC::JSZombie::createStructure):
67692 * runtime/MarkedBlock.cpp:
67694 2011-03-10 Luiz Agostini <luiz.agostini@openbossa.org>
67696 Reviewed by Andreas Kling.
67698 [Qt] fast/workers/stress-js-execution.html is crashing on Qt bot (intermittently)
67699 https://bugs.webkit.org/show_bug.cgi?id=33008
67701 Defining WTF_USE_PTHREAD_BASED_QT=1 for platforms where QThread uses pthread internally.
67702 Symbian is excluded because pthread_kill does not work on it. Mac is excluded because
67703 it has its own ways to do JSC threading.
67705 Defining WTF_USE_PTHREADS inside MachineStackMarker.cpp if USE(PTHREAD_BASED_QT) is true.
67707 * runtime/MachineStackMarker.cpp:
67710 2011-03-10 Gavin Barraclough <barraclough@apple.com>
67712 Reviewed by Oliver Hunt.
67714 Bug 56077 - ES5 conformance issues with RegExp.prototype
67716 There are three issues causing test failures in sputnik.
67718 (1) lastIndex should be converted at the point it is used, not the point it is set (this is visible if valueOf is overridden).
67719 (2) The 'length' property of the test/exec functions should be 1.
67720 (3) If no input is specified, the input to test()/exec() is "undefined" (i.e. ToString(undefined)) - not RegExp.input.
67722 * runtime/RegExpObject.cpp:
67723 (JSC::RegExpObject::markChildren):
67724 - Added to mark lastIndex
67725 (JSC::regExpObjectLastIndex):
67726 (JSC::setRegExpObjectLastIndex):
67727 - lastIndex is now stored as a JSValue.
67728 (JSC::RegExpObject::match):
67729 - Use accessor methods to get/set lastIndex, add fast case for isUInt32 (don't convert to double).
67730 * runtime/RegExpObject.h:
67731 (JSC::RegExpObject::setLastIndex):
67732 (JSC::RegExpObject::setLastIndex):
67733 - Set lastIndex, either from a size_t or a JSValue.
67734 (JSC::RegExpObject::getLastIndex):
67736 (JSC::RegExpObject::RegExpObjectData::RegExpObjectData):
67737 - Initialize as a JSValue.
67738 * runtime/RegExpPrototype.cpp:
67739 (JSC::RegExpPrototype::RegExpPrototype):
67740 - Add test/exec properties with length 1.
67741 * runtime/StringPrototype.cpp:
67742 (JSC::stringProtoFuncMatch):
67743 (JSC::stringProtoFuncSearch):
67744 - Do not read RegExp.input if none is provided.
67745 * tests/mozilla/js1_2/regexp/RegExp_input.js:
67746 * tests/mozilla/js1_2/regexp/RegExp_input_as_array.js:
67747 - Update these tests (they relied on non-ES5 behaviour).
67749 2011-03-10 Geoffrey Garen <ggaren@apple.com>
67751 Reviewed by Oliver Hunt.
67753 Rolled back in 80277 and 80280 with event handler layout test failures fixed.
67754 https://bugs.webkit.org/show_bug.cgi?id=55653
67756 The failures were caused by a last minute typo: assigning to currentEvent
67757 instead of m_currentEvent.
67759 * JavaScriptCore.exp:
67760 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
67761 * JavaScriptCore.xcodeproj/project.pbxproj:
67762 * bytecompiler/BytecodeGenerator.cpp:
67763 * jit/JITOpcodes.cpp:
67764 * jit/JITOpcodes32_64.cpp:
67765 * runtime/Arguments.h:
67766 * runtime/JSActivation.cpp:
67767 * runtime/JSActivation.h:
67768 * runtime/JSCell.h:
67769 * runtime/JSGlobalObject.cpp:
67770 * runtime/JSGlobalObject.h:
67771 * runtime/JSObject.cpp:
67772 * runtime/JSStaticScopeObject.cpp:
67773 * runtime/JSStaticScopeObject.h:
67774 * runtime/JSVariableObject.h:
67775 * runtime/MarkedSpace.cpp:
67776 * runtime/MarkedSpace.h:
67778 2011-03-09 Oliver Hunt <oliver@apple.com>
67780 Reviewed by Gavin Barraclough.
67782 jquery/manipulation.html fails after r80598
67783 https://bugs.webkit.org/show_bug.cgi?id=56019
67785 When linking a call, codeblock now takes ownership of the linked function
67786 This removes the need for unlinking, and thus the incorrectness that was
67787 showing up in these tests.
67789 * bytecode/CodeBlock.cpp:
67790 (JSC::CodeBlock::~CodeBlock):
67791 (JSC::CodeBlock::markAggregate):
67792 * bytecode/CodeBlock.h:
67793 (JSC::CallLinkInfo::CallLinkInfo):
67794 (JSC::CallLinkInfo::setUnlinked):
67795 (JSC::CodeBlock::addCaller):
67797 (JSC::JIT::privateCompile):
67798 (JSC::JIT::linkCall):
67799 (JSC::JIT::linkConstruct):
67801 * runtime/Executable.cpp:
67802 * runtime/Executable.h:
67804 2011-03-09 Daniel Bates <dbates@rim.com>
67806 Attempt to fix the WinCE build after changeset 80684 <http://trac.webkit.org/changeset/80684>
67807 (Bug #56041<https://bugs.webkit.org/show_bug.cgi?id=56041>).
67809 * interpreter/Interpreter.cpp:
67810 (JSC::Interpreter::privateExecute): Substitute variable callFrame for exec in call to createSyntaxError().
67812 2011-03-09 Gavin Barraclough <barraclough@apple.com>
67814 Reviewed by Sam Weinig.
67816 Bug 56041 - RexExp constructor should only accept flags "gim"
67817 Fix for issues introduced in r80667.
67819 Invalid flags to a RegExp literal are a late syntax error!
67821 * bytecode/CodeBlock.h:
67822 (JSC::CodeBlock::addRegExp):
67823 - Pass a PassRefPtr<RegExp>
67824 * bytecompiler/BytecodeGenerator.cpp:
67825 (JSC::BytecodeGenerator::addRegExp):
67826 (JSC::BytecodeGenerator::emitNewRegExp):
67827 * bytecompiler/BytecodeGenerator.h:
67828 - Pass a PassRefPtr<RegExp>
67829 * bytecompiler/NodesCodegen.cpp:
67830 (JSC::RegExpNode::emitBytecode):
67831 - Should not be ASSERTing that the flags are valid - this is a late(er) error.
67832 * interpreter/Interpreter.cpp:
67833 (JSC::Interpreter::privateExecute):
67834 - Need to check for error from RegExp constructor.
67835 * jit/JITStubs.cpp:
67836 (JSC::DEFINE_STUB_FUNCTION):
67837 - Need to check for error from RegExp constructor.
67838 * runtime/RegExp.h:
67839 (JSC::RegExp::isValid):
67840 - Make isValid check that the regexp was created with valid flags.
67841 * runtime/RegExpKey.h:
67842 - Since we'll not create RegExp objects with invalid flags, separate out the deleted value.
67844 2011-03-09 Gavin Barraclough <barraclough@apple.com>
67846 Windows build fix part 2.
67848 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
67850 2011-03-09 Gavin Barraclough <barraclough@apple.com>
67852 Windows build fix part 1.
67854 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
67856 2011-03-09 Gavin Barraclough <barraclough@apple.com>
67858 Reviewed by Darin Adler.
67860 Bug 56041 - RexExp constructor should only accept flags "gim"
67861 We also should be passing the flags around as a bitfield rather than a string,
67862 and should not have redundant, incompatible code for converting the string to a bitfield!
67864 * JavaScriptCore.exp:
67865 * bytecompiler/NodesCodegen.cpp:
67866 (JSC::RegExpNode::emitBytecode):
67867 - Need to parse flags string to enum.
67868 * runtime/RegExp.cpp:
67869 (JSC::regExpFlags):
67870 (JSC::RegExp::RegExp):
67871 (JSC::RegExp::create):
67872 - Add method to parse flags string to enum, change constructor/create args to take enum.
67873 * runtime/RegExp.h:
67874 (JSC::RegExp::global):
67875 (JSC::RegExp::ignoreCase):
67876 (JSC::RegExp::multiline):
67877 - Change to use new enum values.
67878 * runtime/RegExpCache.cpp:
67879 (JSC::RegExpCache::lookupOrCreate):
67880 (JSC::RegExpCache::create):
67881 * runtime/RegExpCache.h:
67882 - Changed to use regExpFlags enum instead of int/const UString&.
67883 * runtime/RegExpConstructor.cpp:
67884 (JSC::constructRegExp):
67885 - Add use new enum parsing, check for error.
67886 * runtime/RegExpKey.h:
67887 (JSC::RegExpKey::RegExpKey):
67888 * runtime/RegExpPrototype.cpp:
67889 (JSC::RegExpPrototype::RegExpPrototype):
67890 - Pass NoFlags value instead of empty string.
67891 (JSC::regExpProtoFuncCompile):
67892 - Add use new enum parsing, check for error.
67893 * runtime/StringPrototype.cpp:
67894 (JSC::stringProtoFuncMatch):
67895 (JSC::stringProtoFuncSearch):
67896 - Pass NoFlags value instead of empty string.
67898 2011-03-08 Gavin Barraclough <barraclough@apple.com>
67900 Reviewed by Sam Weinig
67902 Bug 55994 - Functions on Array.prototype should check length first.
67903 These methods are designed to work on generic objects too, and if 'length'
67904 is a getter that throws an exception, ensure this is correctly thrown
67905 (even if other exceptions would be thrown, too).
67907 Make the length check the first thing we do.
67908 This change shows a progression on SunSpider on my machine, but this is likely bogus.
67910 * runtime/ArrayPrototype.cpp:
67911 (JSC::arrayProtoFuncToString):
67912 (JSC::arrayProtoFuncToLocaleString):
67913 (JSC::arrayProtoFuncJoin):
67914 (JSC::arrayProtoFuncPop):
67915 (JSC::arrayProtoFuncPush):
67916 (JSC::arrayProtoFuncReverse):
67917 (JSC::arrayProtoFuncShift):
67918 (JSC::arrayProtoFuncSlice):
67919 (JSC::arrayProtoFuncSort):
67920 (JSC::arrayProtoFuncSplice):
67921 (JSC::arrayProtoFuncUnShift):
67922 (JSC::arrayProtoFuncFilter):
67923 (JSC::arrayProtoFuncMap):
67924 (JSC::arrayProtoFuncEvery):
67925 (JSC::arrayProtoFuncForEach):
67926 (JSC::arrayProtoFuncSome):
67927 (JSC::arrayProtoFuncReduce):
67928 (JSC::arrayProtoFuncReduceRight):
67929 (JSC::arrayProtoFuncIndexOf):
67930 (JSC::arrayProtoFuncLastIndexOf):
67932 2011-03-07 Oliver Hunt <oliver@apple.com>
67934 Reviewed by Gavin Barraclough.
67936 Make CodeBlock GC write barrier safe
67937 https://bugs.webkit.org/show_bug.cgi?id=55910
67939 In order to make CodeBlock WriteBarrier safe it was necessary
67940 to make it have a single GC owner, and for that reason I have
67941 made ExecutableBase a GC allocated object. This required
67942 updating their creation routines as well as all sites that hold
67943 a reference to them. GC objects that held Executable's have been
67944 converted to WriteBarriers, and all other sites now use Global<>.
67946 As an added benefit this gets rid of JSGlobalData's list of
67949 Perf testing shows a 0.5% progression on v8, vs. a 0.3% regression
67950 on SunSpider. Given none of the tests that show regressions
67951 demonstrate a regression on their own, and sampling shows up nothing.
67952 I suspect we're just getting one or two additional gc passes at
67953 the end of the run.
67955 * bytecode/CodeBlock.cpp:
67956 (JSC::CodeBlock::dump):
67957 (JSC::CodeBlock::CodeBlock):
67958 (JSC::EvalCodeCache::markAggregate):
67959 (JSC::CodeBlock::markAggregate):
67960 * bytecode/CodeBlock.h:
67961 (JSC::CodeBlock::ownerExecutable):
67962 (JSC::CodeBlock::addConstant):
67963 (JSC::CodeBlock::constantRegister):
67964 (JSC::CodeBlock::getConstant):
67965 (JSC::CodeBlock::addFunctionDecl):
67966 (JSC::CodeBlock::addFunctionExpr):
67967 (JSC::GlobalCodeBlock::GlobalCodeBlock):
67968 (JSC::ExecState::r):
67969 * bytecode/EvalCodeCache.h:
67970 (JSC::EvalCodeCache::get):
67971 * bytecode/SamplingTool.h:
67972 (JSC::ScriptSampleRecord::ScriptSampleRecord):
67973 * bytecompiler/BytecodeGenerator.cpp:
67974 (JSC::BytecodeGenerator::addConstantValue):
67975 (JSC::BytecodeGenerator::emitEqualityOp):
67976 * bytecompiler/BytecodeGenerator.h:
67977 (JSC::BytecodeGenerator::makeFunction):
67978 * debugger/Debugger.cpp:
67979 (JSC::evaluateInGlobalCallFrame):
67980 * debugger/DebuggerCallFrame.cpp:
67981 (JSC::DebuggerCallFrame::evaluate):
67982 * interpreter/Interpreter.cpp:
67983 (JSC::Interpreter::callEval):
67984 * jit/JITInlineMethods.h:
67985 (JSC::JIT::emitLoadDouble):
67986 (JSC::JIT::emitLoadInt32ToDouble):
67987 * jit/JITStubs.cpp:
67988 (JSC::JITThunks::JITThunks):
67989 (JSC::JITThunks::hostFunctionStub):
67990 (JSC::JITThunks::clearHostFunctionStubs):
67992 * runtime/Completion.cpp:
67993 (JSC::checkSyntax):
67995 * runtime/Executable.cpp:
67996 (JSC::EvalExecutable::EvalExecutable):
67997 (JSC::ProgramExecutable::ProgramExecutable):
67998 (JSC::FunctionExecutable::FunctionExecutable):
67999 (JSC::FunctionExecutable::~FunctionExecutable):
68000 (JSC::EvalExecutable::markChildren):
68001 (JSC::ProgramExecutable::markChildren):
68002 (JSC::FunctionExecutable::markChildren):
68003 (JSC::FunctionExecutable::fromGlobalCode):
68004 * runtime/Executable.h:
68005 (JSC::ExecutableBase::ExecutableBase):
68006 (JSC::ExecutableBase::createStructure):
68007 (JSC::NativeExecutable::create):
68008 (JSC::NativeExecutable::NativeExecutable):
68009 (JSC::VPtrHackExecutable::VPtrHackExecutable):
68010 (JSC::ScriptExecutable::ScriptExecutable):
68011 (JSC::EvalExecutable::create):
68012 (JSC::EvalExecutable::createStructure):
68013 (JSC::ProgramExecutable::create):
68014 (JSC::ProgramExecutable::createStructure):
68015 (JSC::FunctionExecutable::create):
68016 (JSC::FunctionExecutable::createStructure):
68017 * runtime/FunctionConstructor.cpp:
68018 (JSC::constructFunction):
68019 * runtime/Heap.cpp:
68020 (JSC::Heap::destroy):
68021 (JSC::Heap::markRoots):
68023 * runtime/JSActivation.cpp:
68024 (JSC::JSActivation::JSActivation):
68025 (JSC::JSActivation::markChildren):
68026 * runtime/JSActivation.h:
68027 (JSC::JSActivation::JSActivationData::JSActivationData):
68028 * runtime/JSCell.h:
68029 * runtime/JSFunction.cpp:
68030 (JSC::JSFunction::JSFunction):
68031 (JSC::JSFunction::~JSFunction):
68032 (JSC::JSFunction::markChildren):
68033 * runtime/JSFunction.h:
68034 * runtime/JSGlobalData.cpp:
68035 (JSC::JSGlobalData::storeVPtrs):
68036 (JSC::JSGlobalData::JSGlobalData):
68037 (JSC::JSGlobalData::getHostFunction):
68038 * runtime/JSGlobalData.h:
68039 * runtime/JSGlobalObjectFunctions.cpp:
68040 (JSC::globalFuncEval):
68041 * runtime/JSObject.cpp:
68042 * runtime/JSStaticScopeObject.cpp:
68043 (JSC::JSStaticScopeObject::markChildren):
68044 * runtime/JSStaticScopeObject.h:
68045 (JSC::JSStaticScopeObject::JSStaticScopeObjectData::JSStaticScopeObjectData):
68046 (JSC::JSStaticScopeObject::JSStaticScopeObject):
68047 * runtime/JSZombie.cpp:
68048 (JSC::JSZombie::leakedZombieStructure):
68049 * runtime/JSZombie.h:
68050 (JSC::JSZombie::createStructure):
68051 * runtime/MarkedSpace.h:
68053 2011-03-07 Andy Estes <aestes@apple.com>
68055 Reviewed by Dan Bernstein.
68057 REGRESSION (r79060): Timestamp is missing from tweets in twitter.
68058 https://bugs.webkit.org/show_bug.cgi?id=55228
68060 A change to the date parser to handle the case where the year is
68061 specified before the time zone inadvertently started accepting strings
68062 such as '+0000' as valid years. Those strings actually represent time
68063 zones in an offset of hours and minutes from UTC, not years.
68065 * wtf/DateMath.cpp:
68066 (WTF::parseDateFromNullTerminatedCharacters): If the current character
68067 in dateString is '+' or '-', do not try to parse the next token as a
68070 2011-03-06 Yuta Kitamura <yutak@chromium.org>
68072 Reviewed by Kent Tamura.
68074 Add SHA-1 for new WebSocket protocol
68075 https://bugs.webkit.org/show_bug.cgi?id=55039
68077 The code is based on Chromium's portable SHA-1 implementation
68078 (src/base/sha1_portable.cc). Modifications were made in order
68079 to make the code comply with WebKit coding style.
68082 * JavaScriptCore.exp:
68083 * JavaScriptCore.gypi:
68084 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
68085 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
68086 * JavaScriptCore.xcodeproj/project.pbxproj:
68087 * wtf/CMakeLists.txt:
68090 * wtf/SHA1.cpp: Added.
68091 (WTF::testSHA1): This function will be run the first time SHA1
68092 constructor is called. This function computes a few hash values
68093 and checks the results in debug builds. However, constructor is
68094 probably not a good place to run these tests, so we need to find
68095 a good place for it (bug 55853).
68101 (WTF::SHA1::addBytes):
68102 (WTF::SHA1::computeHash):
68103 (WTF::SHA1::finalize):
68104 (WTF::SHA1::processBlock):
68105 (WTF::SHA1::reset):
68106 * wtf/SHA1.h: Added.
68107 (WTF::SHA1::addBytes):
68110 2011-03-05 Adam Barth <abarth@webkit.org>
68112 Reviewed by Dimitri Glazkov.
68114 Add Derived Sources to WebCore GYP build
68115 https://bugs.webkit.org/show_bug.cgi?id=55813
68117 Rename the action to be friendlier.
68119 * gyp/JavaScriptCore.gyp:
68121 2011-03-04 Viatcheslav Ostapenko <ostapenko.viatcheslav@nokia.com>
68123 Reviewed by Laszlo Gombos.
68125 [Qt] Need symbian version of cryptographicallyRandomValuesFromOS
68126 https://bugs.webkit.org/show_bug.cgi?id=55782
68128 Implement Symbian version of cryptographicallyRandomValuesFromOS
68130 * wtf/OSRandomSource.cpp:
68131 (WTF::cryptographicallyRandomValuesFromOS):
68133 2011-03-04 Gavin Barraclough <barraclough@apple.com>
68135 Reviewed by Cameron Zwarich.
68137 Bug 55815 - Should throw an exception from JSObject::defineOwnProperty if !isExtensible().
68139 * runtime/JSObject.cpp:
68140 (JSC::JSObject::defineOwnProperty):
68143 2011-03-04 Gavin Barraclough <barraclough@apple.com>
68145 Rubber stamped by olliej.
68147 Bug 54945 - The web page hangs towards the end of page load in Interpreter enabled javascript code in the latest webkit trunk.
68149 * interpreter/Interpreter.cpp:
68150 (JSC::Interpreter::privateExecute):
68151 (1) don't infinite loop.
68154 2011-03-04 Gavin Barraclough <barraclough@apple.com>
68160 2011-03-04 Adam Barth <abarth@webkit.org>
68162 Reviewed by Dimitri Glazkov.
68164 Add Copy Files step to JavaScriptCore GYP build for apitest and minidom
68165 https://bugs.webkit.org/show_bug.cgi?id=55798
68167 * JavaScriptCore.gypi:
68168 * gyp/JavaScriptCore.gyp:
68170 2011-03-04 Adam Barth <abarth@webkit.org>
68172 Reviewed by Dimitri Glazkov.
68174 Remove unneeded round-trips through ../Source in the Chromium GYP build
68175 https://bugs.webkit.org/show_bug.cgi?id=55795
68177 * JavaScriptCore.gyp/JavaScriptCore.gyp:
68179 2011-03-04 Adam Barth <abarth@webkit.org>
68181 Reviewed by Dimitri Glazkov.
68183 Use target_defaults to reduce boilerplate in GYP build system
68184 https://bugs.webkit.org/show_bug.cgi?id=55790
68186 Instead of setting up the configuration in each target, just defer to
68187 target_defaults. Also, removed a define that was redundant with the
68190 * gyp/JavaScriptCore.gyp:
68192 2011-03-03 Gavin Barraclough <barraclough@apple.com>
68194 Reviewed by Sam Weinig.
68196 Bug 55736 - Implement seal/freeze/preventExtensions for normal object types.
68197 Provide basic functionallity from section 15.2.4 of ECMA-262.
68198 This support will need expanding to cover arrays, too.
68200 Shows a 0.5% progression on SunSpidey, this seems to be due to changing
68201 ObjectConstructor to use a static table.
68203 * DerivedSources.make:
68204 * JavaScriptCore.exp:
68205 * interpreter/CallFrame.h:
68206 (JSC::ExecState::objectConstructorTable):
68207 Add a static table for ObjectConstructor.
68208 * runtime/CommonIdentifiers.h:
68209 * runtime/JSGlobalData.cpp:
68210 (JSC::JSGlobalData::JSGlobalData):
68211 (JSC::JSGlobalData::~JSGlobalData):
68212 Add a static table for ObjectConstructor.
68213 * runtime/JSGlobalData.h:
68214 * runtime/JSGlobalObject.cpp:
68215 (JSC::JSGlobalObject::reset):
68216 Add a static table for ObjectConstructor.
68217 * runtime/JSObject.cpp:
68218 (JSC::JSObject::seal):
68219 (JSC::JSObject::freeze):
68220 (JSC::JSObject::preventExtensions):
68221 Transition the object's structure.
68222 (JSC::JSObject::defineOwnProperty):
68223 Check isExtensible.
68224 * runtime/JSObject.h:
68225 (JSC::JSObject::isSealed):
68226 (JSC::JSObject::isFrozen):
68227 (JSC::JSObject::isExtensible):
68228 These wrap method on structure.
68229 (JSC::JSObject::putDirectInternal):
68230 Check isExtensible.
68231 * runtime/ObjectConstructor.cpp:
68232 (JSC::ObjectConstructor::ObjectConstructor):
68233 (JSC::ObjectConstructor::getOwnPropertySlot):
68234 (JSC::ObjectConstructor::getOwnPropertyDescriptor):
68235 Change ObjectConstructor to use a static table.
68236 (JSC::objectConstructorSeal):
68237 (JSC::objectConstructorFreeze):
68238 (JSC::objectConstructorPreventExtensions):
68239 (JSC::objectConstructorIsSealed):
68240 (JSC::objectConstructorIsFrozen):
68241 (JSC::objectConstructorIsExtensible):
68242 Add new methods on Object.
68243 * runtime/ObjectConstructor.h:
68244 (JSC::ObjectConstructor::createStructure):
68245 * runtime/Structure.cpp:
68246 (JSC::Structure::Structure):
68247 init/propagate m_preventExtensions
68248 (JSC::Structure::sealTransition):
68249 (JSC::Structure::freezeTransition):
68250 (JSC::Structure::preventExtensionsTransition):
68251 transition the structure, materializing the property map, setting m_preventExtensions & changing attributes.
68252 (JSC::Structure::isSealed):
68253 (JSC::Structure::isFrozen):
68254 check attributes to detect if object is sealed/frozen.
68255 * runtime/Structure.h:
68256 (JSC::Structure::isExtensible):
68257 checks the m_preventExtensions flag.
68259 2011-03-04 Steve Falkenburg <sfalken@apple.com>
68261 Reviewed by Jon Honeycutt.
68263 Adopt VersionStamper tool for Windows WebKit DLLs
68264 https://bugs.webkit.org/show_bug.cgi?id=55784
68265 <rdar://problem/9021273>
68267 We now use a tool to stamp the version number onto the Apple WebKit DLLs
68268 during the post-build step.
68270 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.rc: Removed.
68271 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
68272 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePostBuild.cmd:
68273 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePreBuild.cmd:
68275 2011-03-04 Adam Barth <abarth@webkit.org>
68277 Reviewed by Dimitri Glazkov.
68279 JavaScriptCore GYP build should use a header map
68280 https://bugs.webkit.org/show_bug.cgi?id=55712
68282 This patch moves the os-win32 files into their own variable so that we
68283 can use a header map in the Apple Mac Xcode build. The problem is that
68284 the header map searches the whole project rather than just the files
68285 included in a given target. Another solution to this problem is to
68286 make GYP smarter about filtering out what files are added to the
68289 * JavaScriptCore.gypi:
68290 * gyp/JavaScriptCore.gyp:
68292 2011-03-03 Ryosuke Niwa <rniwa@webkit.org>
68294 Reviewed by Darin Adler.
68296 Remove LOOSE_PASS_OWN_ARRAY_PTR from PassOwnArrayPtr.h
68297 https://bugs.webkit.org/show_bug.cgi?id=55554
68299 * runtime/JSGlobalObject.cpp:
68300 (JSC::JSGlobalObject::copyGlobalsTo): Pass nullptr instead of 0.
68301 (JSC::JSGlobalObject::resizeRegisters): Ditto; also use OwnArrayPtr instead of a raw pointer.
68302 * runtime/JSGlobalObject.h:
68303 (JSC::JSGlobalObject::addStaticGlobals): Ditto.
68304 * wtf/PassOwnArrayPtr.h: Removed #define LOOSE_PASS_OWN_ARRAY_PTR
68305 (WTF::PassOwnArrayPtr::PassOwnArrayPtr): Added a constructor that takes nullptr_t.
68307 2011-03-03 Adam Barth <abarth@webkit.org>
68309 Reviewed by Dimitri Glazkov.
68311 Add jsc to JavaScriptCore GYP build
68312 https://bugs.webkit.org/show_bug.cgi?id=55711
68314 * JavaScriptCore.gypi:
68315 - Move jsc.cpp into jsc_files because it's really part of the jsc
68317 * JavaScriptCore.xcodeproj/project.pbxproj:
68318 - Remove extraneous files from the normal jsc build. I probably
68319 added these by mistake at some point.
68320 * gyp/JavaScriptCore.gyp:
68321 - Add the jsc target to the GYP file.
68323 2011-03-03 Adam Barth <abarth@webkit.org>
68325 Reviewed by Dimitri Glazkov.
68327 Add testapi to JavaScriptCore GYP build
68328 https://bugs.webkit.org/show_bug.cgi?id=55707
68330 The new testapi target is slightly incomplete. There's a resource
68331 copying step that we don't quite have yet.
68333 This patch also cleans up some of the configuration issues in
68334 JavaScriptCore.xcodeproj. It seems kind of wordy to repeat these for
68335 each target. I suspect there's a more compact way of defining the
68336 configurations, but this removes the "Default" configuration, which is
68339 * JavaScriptCore.gypi:
68340 * gyp/JavaScriptCore.gyp:
68342 2011-03-03 Adam Barth <abarth@webkit.org>
68344 Reviewed by Eric Seidel.
68346 Teach JavaScriptCore GYP build about private headers
68347 https://bugs.webkit.org/show_bug.cgi?id=55532
68349 This patch distinguishes between public and private framework headers
68350 so that public headers are copied into the Headers directory and
68351 private headers are copied into the PrivateHeaders directory.
68353 * gyp/JavaScriptCore.gyp:
68355 2011-03-03 Geoffrey Garen <ggaren@apple.com>
68357 Rolled out 80277 and 80280 because they caused event handler layout test
68360 * JavaScriptCore.exp:
68361 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
68362 * JavaScriptCore.xcodeproj/project.pbxproj:
68363 * bytecompiler/BytecodeGenerator.cpp:
68364 * jit/JITOpcodes.cpp:
68365 * jit/JITOpcodes32_64.cpp:
68366 * runtime/Arguments.h:
68367 * runtime/JSActivation.cpp:
68368 * runtime/JSActivation.h:
68369 * runtime/JSCell.h:
68370 * runtime/JSGlobalObject.cpp:
68371 * runtime/JSGlobalObject.h:
68372 * runtime/JSObject.cpp:
68373 * runtime/JSStaticScopeObject.cpp:
68374 * runtime/JSStaticScopeObject.h:
68375 * runtime/JSVariableObject.h:
68376 * runtime/MarkedSpace.cpp:
68377 * runtime/MarkedSpace.h:
68379 2011-03-03 Kevin Ollivier <kevino@theolliviers.com>
68381 [wx] Build fix. Alter order of headers included to make sure windows.h
68382 is configured by wx, and skip Posix implementation file we don't use on Win.
68385 * wtf/wx/StringWx.cpp:
68387 2011-03-03 Oliver Hunt <oliver@apple.com>
68389 Reviewed by Geoffrey Garen.
68391 JSVariableObject needs to use WriteBarrier for symboltable property storage
68392 https://bugs.webkit.org/show_bug.cgi?id=55698
68394 Replace the direct usage of Register in JSVariableObject (and descendents)
68395 with WriteBarrier. This requires updating the Arguments object to use
68396 WriteBarrier as well.
68398 * interpreter/Interpreter.cpp:
68399 (JSC::Interpreter::unwindCallFrame):
68400 (JSC::Interpreter::privateExecute):
68401 (JSC::Interpreter::retrieveArguments):
68402 * jit/JITStubs.cpp:
68403 (JSC::DEFINE_STUB_FUNCTION):
68404 * runtime/ArgList.h:
68405 (JSC::MarkedArgumentBuffer::initialize):
68406 * runtime/Arguments.cpp:
68407 (JSC::Arguments::markChildren):
68408 (JSC::Arguments::copyToRegisters):
68409 (JSC::Arguments::fillArgList):
68410 (JSC::Arguments::getOwnPropertySlot):
68411 (JSC::Arguments::getOwnPropertyDescriptor):
68412 (JSC::Arguments::put):
68413 * runtime/Arguments.h:
68414 (JSC::Arguments::setActivation):
68415 (JSC::Arguments::Arguments):
68416 (JSC::Arguments::copyRegisters):
68417 (JSC::JSActivation::copyRegisters):
68418 * runtime/JSActivation.cpp:
68419 (JSC::JSActivation::markChildren):
68420 (JSC::JSActivation::symbolTableGet):
68421 (JSC::JSActivation::symbolTablePut):
68422 (JSC::JSActivation::symbolTablePutWithAttributes):
68423 (JSC::JSActivation::put):
68424 (JSC::JSActivation::putWithAttributes):
68425 (JSC::JSActivation::argumentsGetter):
68426 * runtime/JSActivation.h:
68427 * runtime/JSGlobalObject.cpp:
68428 (JSC::JSGlobalObject::put):
68429 (JSC::JSGlobalObject::putWithAttributes):
68430 (JSC::JSGlobalObject::markChildren):
68431 (JSC::JSGlobalObject::copyGlobalsFrom):
68432 (JSC::JSGlobalObject::copyGlobalsTo):
68433 (JSC::JSGlobalObject::resizeRegisters):
68434 * runtime/JSGlobalObject.h:
68435 (JSC::JSGlobalObject::setRegisters):
68436 (JSC::JSGlobalObject::addStaticGlobals):
68437 * runtime/JSStaticScopeObject.cpp:
68438 (JSC::JSStaticScopeObject::put):
68439 (JSC::JSStaticScopeObject::putWithAttributes):
68440 * runtime/JSVariableObject.cpp:
68441 (JSC::JSVariableObject::symbolTableGet):
68442 * runtime/JSVariableObject.h:
68443 (JSC::JSVariableObject::registerAt):
68444 (JSC::JSVariableObject::JSVariableObjectData::JSVariableObjectData):
68445 (JSC::JSVariableObject::symbolTableGet):
68446 (JSC::JSVariableObject::symbolTablePut):
68447 (JSC::JSVariableObject::symbolTablePutWithAttributes):
68448 (JSC::JSVariableObject::copyRegisterArray):
68449 (JSC::JSVariableObject::setRegisters):
68451 2011-03-03 Geoffrey Garen <ggaren@apple.com>
68453 Try to fix Windows build.
68455 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Removed obsolete symbol.
68457 * runtime/JSStaticScopeObject.cpp:
68458 (JSC::JSStaticScopeObject::getOwnPropertySlot): Don't mark this function
68459 inline -- it's virtual.
68461 2011-03-02 Geoffrey Garen <ggaren@apple.com>
68463 Reviewed by Darin Adler.
68465 Moved all variable object storage inline -- upping the object size limit to 1K
68466 https://bugs.webkit.org/show_bug.cgi?id=55653
68468 * JavaScriptCore.exp:
68469 * bytecompiler/BytecodeGenerator.cpp:
68470 * jit/JITOpcodes.cpp:
68471 * runtime/Arguments.h:
68472 * runtime/JSActivation.h: Removed out-of-line storage. Changed d-> to m_.
68474 * runtime/JSCell.h:
68475 (JSC::JSCell::MarkedSpace::sizeClassFor): Added an imprecise size class
68476 to accomodate objects up to 1K.
68478 * runtime/JSGlobalObject.cpp:
68479 * runtime/JSGlobalObject.h: Removed out-of-line storage. Changed d-> to m_.
68481 * runtime/JSObject.cpp: Don't ASSERT that JSFinalObject fills the maximum
68482 object size, since it doesn't anymore.
68484 * runtime/JSStaticScopeObject.cpp:
68485 * runtime/JSStaticScopeObject.h:
68486 * runtime/JSVariableObject.h: Removed out-of-line storage. Changed d-> to m_.
68488 * runtime/MarkedSpace.cpp:
68489 (JSC::MarkedSpace::MarkedSpace):
68490 (JSC::MarkedSpace::reset):
68491 * runtime/MarkedSpace.h: Added an imprecise size class to accomodate objects up to 1K.
68493 2011-03-03 Timothy Hatcher <timothy@apple.com>
68495 Make APIShims usable from WebCore.
68497 Reviewed by Oliver Hunt.
68499 * ForwardingHeaders/JavaScriptCore/APIShims.h: Added.
68501 * JavaScriptCore.exp:
68502 * JavaScriptCore.gypi:
68503 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
68504 * JavaScriptCore.xcodeproj/project.pbxproj:
68506 2011-03-03 Peter Varga <pvarga@webkit.org>
68508 Reviewed by Oliver Hunt.
68510 Begin Characters Optimization Causes YARR Interpreter Errors
68511 https://bugs.webkit.org/show_bug.cgi?id=55479
68513 The addBeginTerm function is removed because it doesn't correctly handle those
68514 cases when an "invalid" term has been
68515 collected (e.g. CharacterClass). Move the removed function to the
68516 setupAlternativeBeginTerms method's switch-case
68517 where the non-allowed cases are correctly handled.
68519 Reenable the Beginning Character Optimization in the YARR Interpreter again.
68521 * yarr/YarrPattern.cpp:
68522 (JSC::Yarr::YarrPatternConstructor::setupAlternativeBeginTerms):
68523 (JSC::Yarr::YarrPattern::compile):
68525 2011-03-02 Jessie Berlin <jberlin@apple.com>
68527 Reviewed by Adam Roben.
68529 WebKit2: Use CFNetwork Sessions API.
68530 https://bugs.webkit.org/show_bug.cgi?id=55435
68532 Add the ability to create a Private Browsing storage session.
68535 Add a new #define for using CF Storage Sessions.
68537 2011-03-02 Oliver Hunt <oliver@apple.com>
68539 Reviewed by Gavin Barraclough.
68541 Remove "register slot" concept from PropertySlot
68542 https://bugs.webkit.org/show_bug.cgi?id=55621
68544 PropertySlot had already stopped storing Register "slots"
68545 so this patch is simply removing that api entirely.
68546 This exposed a problem in the ProgramNode constructor for
68547 BytecodeGenerator where it reads from the registerfile
68548 before it has initialised it.
68550 This bug wasn't a problem before as we were merely testing
68551 for property existence rather than the actual value, and
68552 used to work because setRegisterSlot didn't check that the
68553 provided slot contained an initialised value.
68555 To get around this issue we now use symbolTableHasProperty
68556 to do the symbol table check without trying to read the
68559 * JavaScriptCore.xcodeproj/project.pbxproj:
68560 * bytecompiler/BytecodeGenerator.cpp:
68561 (JSC::BytecodeGenerator::BytecodeGenerator):
68562 * runtime/Arguments.cpp:
68563 (JSC::Arguments::getOwnPropertySlot):
68564 * runtime/JSActivation.cpp:
68565 (JSC::JSActivation::symbolTableGet):
68566 * runtime/JSGlobalObject.h:
68567 (JSC::JSGlobalObject::symbolTableHasProperty):
68568 * runtime/JSVariableObject.h:
68569 (JSC::JSVariableObject::symbolTableGet):
68570 * runtime/PropertySlot.h:
68572 2011-03-02 Daniel Cheng <dcheng@chromium.org>
68574 Reviewed by David Levin.
68576 Add feature define for data transfer items
68577 https://bugs.webkit.org/show_bug.cgi?id=55510
68579 * Configurations/FeatureDefines.xcconfig:
68582 2011-03-02 Adam Roben <aroben@apple.com>
68584 Delete old .res files whenever any .vsprops file changes
68586 Prospective fix for <http://webkit.org/b/55599> r80079 caused incremental Windows builds to
68589 Reviewed by Tony Chang.
68591 * JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py:
68592 (main): Restructured code to loop over a set of file extensions, deleting any old files that
68593 have that extension. Now deletes .res files, too. (We previously deleted any file matching
68594 *.manifest*, but that turned out to just be the union of *.manifest and *.res.)
68596 2011-03-02 Adam Barth <abarth@webkit.org>
68598 Reviewed by Dimitri Glazkov.
68600 Teach JavaScriptCore GYP build how to build minidom
68601 https://bugs.webkit.org/show_bug.cgi?id=55536
68603 * JavaScriptCore.gypi:
68604 * gyp/JavaScriptCore.gyp:
68606 2011-03-01 Adam Barth <abarth@webkit.org>
68608 Reviewed by Eric Seidel.
68610 JavaScriptCore GYP build should copy some headers into the target framework
68611 https://bugs.webkit.org/show_bug.cgi?id=55524
68613 After this patch, all the framework headers are exported as public
68614 headers. We need to teach GYP how to handle private headers.
68616 I struggled to determine how to store the information about whether a
68617 header was public, private, or project (i.e., not exported).
68618 Generally, the GYPI should just list the files, but it seemed siliy to
68619 have an almost duplicated list of files in the GYP file itself. If
68620 this design doesn't scale, we might have to revisit it in the future.
68622 * JavaScriptCore.gyp/JavaScriptCore.gyp:
68623 * JavaScriptCore.gypi:
68624 * gyp/JavaScriptCore.gyp:
68626 2011-03-01 Sheriff Bot <webkit.review.bot@gmail.com>
68628 Unreviewed, rolling out r80079.
68629 http://trac.webkit.org/changeset/80079
68630 https://bugs.webkit.org/show_bug.cgi?id=55547
68632 "Broke the Win debug build?" (Requested by dcheng on #webkit).
68636 2011-03-01 Daniel Cheng <dcheng@chromium.org>
68638 Reviewed by David Levin.
68640 Add feature define for data transfer items
68641 https://bugs.webkit.org/show_bug.cgi?id=55510
68645 2011-03-01 Oliver Hunt <oliver@apple.com>
68647 Reviewed by Joseph Pecoraro.
68649 Misaligned memory access in CloneDeserializer on all ARM arch.
68650 https://bugs.webkit.org/show_bug.cgi?id=48742
68652 Add a CPU class for architectures that need aligned addresses
68657 2011-03-01 Adam Barth <abarth@webkit.org>
68659 Reviewed by Dimitri Glazkov.
68661 Add pre- and post-build actions for JavaScriptCore GYP build
68662 https://bugs.webkit.org/show_bug.cgi?id=55507
68664 After this patch, we have all the steps for building the main
68665 JavaScriptCore framework except the "copy headers" step, which I'll do
68668 * gyp/JavaScriptCore.gyp:
68670 2011-03-01 Geoffrey Garen <ggaren@apple.com>
68672 Reviewed by Sam Weinig.
68674 Rolled back in r79627 now that the underlying cause for it crashing is fixed.
68675 https://bugs.webkit.org/show_bug.cgi?id=55159
68677 * JavaScriptCore.exp:
68678 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
68679 * JavaScriptCore.xcodeproj/project.pbxproj:
68680 * runtime/Heap.cpp:
68681 (JSC::Heap::allocateSlowCase):
68683 * runtime/JSCell.h:
68684 (JSC::JSCell::MarkedSpace::sizeClassFor):
68685 (JSC::JSCell::Heap::allocate):
68686 (JSC::JSCell::JSCell::operator new):
68687 * runtime/MarkedBlock.h:
68688 * runtime/MarkedSpace.cpp:
68689 (JSC::MarkedSpace::MarkedSpace):
68690 (JSC::MarkedSpace::allocateBlock):
68691 (JSC::MarkedSpace::reset):
68692 * runtime/MarkedSpace.h:
68693 (JSC::MarkedSpace::SizeClass::SizeClass):
68695 2011-03-01 Mark Rowe <mrowe@apple.com>
68697 Reviewed by Sam Weinig.
68699 Replace two script phases that do nothing but copy files with copy files build phases.
68701 This speeds up the build by a few seconds on high-end Mac Pros.
68703 * JavaScriptCore.xcodeproj/project.pbxproj:
68705 2011-03-01 David Kilzer <ddkilzer@apple.com>
68709 Rubber-stamped by Mark Rowe.
68711 * JavaScriptCore.xcodeproj/project.pbxproj:
68712 (Copy Into Framework): Remove "set -x" and its comment.
68714 2011-03-01 Michael Saboff <msaboff@apple.com>
68716 Reviewed by Darin Adler.
68718 TinyMCE not working in nightlies
68719 https://bugs.webkit.org/show_bug.cgi?id=54978
68721 Disabling setupBeginChars() to temporarily work arround the test
68722 failure. Filed https://bugs.webkit.org/show_bug.cgi?id=55479
68723 to track fixing the issue.
68725 * yarr/YarrPattern.cpp:
68726 (JSC::Yarr::YarrPattern::compile):
68728 2011-02-23 Joseph Pecoraro <joepeck@webkit.org>
68730 Reviewed by Kenneth Rohde Christiansen.
68732 Viewport parsing no longer accepts "1.0;" value as valid.
68733 https://bugs.webkit.org/show_bug.cgi?id=53705
68735 Include a didReadNumber parameter to String -> float / double
68736 conversion functions. This way, if the "ok" boolean out
68737 parameter is false, you can check to see if there in fact
68738 was a valid number parsed with garbage at the end. Examples
68739 of that would be parsing "123x456" would have ok = false,
68740 but didReadNumber = true.
68742 * JavaScriptCore.exp:
68743 * wtf/text/StringImpl.cpp:
68744 (WTF::StringImpl::toDouble):
68745 (WTF::StringImpl::toFloat):
68746 * wtf/text/StringImpl.h:
68747 * wtf/text/WTFString.cpp:
68748 (WTF::String::toDouble):
68749 (WTF::String::toFloat):
68750 (WTF::charactersToDouble):
68751 (WTF::charactersToFloat):
68752 * wtf/text/WTFString.h:
68754 2011-02-28 Geoffrey Garen <ggaren@apple.com>
68756 Reviewed by Gavin Barraclough.
68758 Past-the-end writes in VM exceptions (caused crashes in r79627)
68759 https://bugs.webkit.org/show_bug.cgi?id=55448
68761 Some exceptions had the wrong structures, so they misoverestimated their
68762 inline storage sizes.
68764 * runtime/JSGlobalData.cpp:
68765 (JSC::JSGlobalData::JSGlobalData): Use the right structure.
68767 * runtime/JSObject.h:
68768 (JSC::JSNonFinalObject::JSNonFinalObject):
68769 (JSC::JSFinalObject::JSFinalObject): ASSERT that our structure capacity
68770 is correct to verify this doesn't happen again.
68772 2011-03-01 Andras Becsi <abecsi@webkit.org>
68774 Reviewed by Csaba Osztrogonác.
68776 [Qt] Clean up the project files and move common options to WebKit.pri.
68778 * JavaScriptCore.pri: Move options also needed in WebCore into WebKit.pri.
68779 * JavaScriptCore.pro: Deduplicate options.
68782 2011-03-01 Adam Barth <abarth@webkit.org>
68784 Reviewed by Eric Seidel.
68786 Teach JavaScriptCore GYP build about DEPTH
68787 https://bugs.webkit.org/show_bug.cgi?id=55425
68789 In addition to teaching the JavaScriptCore GYP build about DEPTH, this
68790 change overrides the GCC warning configuration to disable a warning
68791 that's causing probems in Assertions.cpp. With that warning disabled,
68792 JavaScriptCore builds again.
68794 * gyp/JavaScriptCore.gyp:
68796 2011-02-28 Gavin Barraclough <barraclough@apple.com>
68800 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
68802 2011-02-28 Sheriff Bot <webkit.review.bot@gmail.com>
68804 Unreviewed, rolling out r79948.
68805 http://trac.webkit.org/changeset/79948
68806 https://bugs.webkit.org/show_bug.cgi?id=55439
68808 "caused crashes on the SL release bot" (Requested by ggaren on
68811 * runtime/JSGlobalData.h:
68812 * runtime/WriteBarrier.h:
68814 2011-02-28 Gavin Barraclough <barraclough@apple.com>
68818 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
68820 2011-02-28 Gavin Barraclough <barraclough@apple.com>
68822 Reviewed by Sam Weinig & Darin Adler.
68824 Bug 55423 - Clean up property tables in Structure
68826 Encapsulate, reduce duplication of table search code,
68827 and reduce the size of the tables (remove the index,
68828 just maintain the tables in the correct order).
68830 Shows a 0.5% - 1% progression on sunspider.
68832 * JavaScriptCore.exp:
68833 * runtime/PropertyMapHashTable.h:
68835 (JSC::nextPowerOf2):
68836 bit ops used to calculate table size.
68837 (JSC::PropertyMapEntry::PropertyMapEntry):
68838 (JSC::PropertyTable::ordered_iterator::operator++):
68839 (JSC::PropertyTable::ordered_iterator::operator==):
68840 (JSC::PropertyTable::ordered_iterator::operator!=):
68841 (JSC::PropertyTable::ordered_iterator::operator*):
68842 (JSC::PropertyTable::ordered_iterator::operator->):
68843 (JSC::PropertyTable::ordered_iterator::ordered_iterator):
68844 implementation of the iterator types
68845 (JSC::PropertyTable::PropertyTable):
68846 (JSC::PropertyTable::~PropertyTable):
68847 constructors take an initial capacity for the table,
68848 a table to copy, or both.
68849 (JSC::PropertyTable::begin):
68850 (JSC::PropertyTable::end):
68851 create in-order iterators.
68852 (JSC::PropertyTable::find):
68853 search the hash table
68854 (JSC::PropertyTable::add):
68855 add a value to the hash table
68856 (JSC::PropertyTable::remove):
68857 remove a value from the hash table
68858 (JSC::PropertyTable::size):
68859 (JSC::PropertyTable::isEmpty):
68861 (JSC::PropertyTable::propertyStorageSize):
68862 (JSC::PropertyTable::clearDeletedOffsets):
68863 (JSC::PropertyTable::hasDeletedOffset):
68864 (JSC::PropertyTable::getDeletedOffset):
68865 (JSC::PropertyTable::addDeletedOffset):
68866 cache deleted (available) offsets in the property storage array.
68867 (JSC::PropertyTable::copy):
68868 take a copy of the PropertyTable, potentially expanding the capacity.
68869 (JSC::PropertyTable::sizeInMemory):
68870 used for DEBUG build statistics
68871 (JSC::PropertyTable::reinsert):
68872 (JSC::PropertyTable::rehash):
68873 (JSC::PropertyTable::tableCapacity):
68874 (JSC::PropertyTable::deletedEntryIndex):
68875 (JSC::PropertyTable::skipDeletedEntries):
68876 (JSC::PropertyTable::table):
68877 (JSC::PropertyTable::usedCount):
68878 (JSC::PropertyTable::dataSize):
68879 (JSC::PropertyTable::sizeForCapacity):
68880 (JSC::PropertyTable::canInsert):
68881 these methods provide internal implementation.
68882 * runtime/Structure.cpp:
68883 (JSC::Structure::dumpStatistics):
68884 (JSC::Structure::~Structure):
68885 (JSC::Structure::materializePropertyMap):
68886 (JSC::Structure::despecifyDictionaryFunction):
68887 (JSC::Structure::addPropertyTransition):
68888 (JSC::Structure::flattenDictionaryStructure):
68889 (JSC::Structure::copyPropertyTable):
68890 (JSC::Structure::get):
68891 (JSC::Structure::despecifyFunction):
68892 (JSC::Structure::despecifyAllFunctions):
68893 (JSC::Structure::put):
68894 (JSC::Structure::remove):
68895 (JSC::Structure::createPropertyMap):
68896 (JSC::Structure::getPropertyNames):
68897 (JSC::PropertyTable::checkConsistency):
68898 (JSC::Structure::checkConsistency):
68899 factored out code to PropertyMapHashTable.h
68900 * runtime/Structure.h:
68901 (JSC::Structure::propertyStorageSize):
68902 (JSC::Structure::isEmpty):
68903 (JSC::Structure::get):
68904 factored out code to PropertyMapHashTable.h
68906 2011-02-28 Xan Lopez <xlopez@igalia.com>
68908 Another fix build :(
68912 * runtime/MachineStackMarker.cpp:
68913 (JSC::freePlatformThreadRegisters):
68915 2011-02-28 Xan Lopez <xlopez@igalia.com>
68917 Unreviewed build fix for Snow Leopard.
68919 * runtime/MachineStackMarker.cpp:
68920 (JSC::freePlatformThreadRegisters):
68922 2011-02-28 Alejandro G. Castro <alex@igalia.com>
68924 Unreviewed, fix SnowLeopard compilation after r79952.
68926 * runtime/MachineStackMarker.cpp:
68927 (JSC::freePlatformThreadRegisters):
68929 2011-02-28 Mark Rowe <mrowe@apple.com>
68931 Reviewed by Darin Adler.
68933 <http://webkit.org/b/55430> OwnArrayPtr.h's LOOSE_OWN_ARRAY_PTR results in link errors.
68935 * wtf/OwnArrayPtr.h:
68936 (WTF::::set): Implement OwnArrayPtr::set.
68938 2011-02-28 Martin Zoubek <martin.zoubek@acision.com> and Alejandro G. Castro <alex@igalia.com>
68940 Reviewed by Martin Robinson.
68942 Multithread support for JSC on UNIX
68943 https://bugs.webkit.org/show_bug.cgi?id=26838
68945 Implement suspendThread() and resumeThread() for systems with
68946 pthread.h using thread signal handler.
68948 * runtime/MachineStackMarker.cpp:
68949 (JSC::pthreadSignalHandlerSuspendResume):
68950 (JSC::MachineStackMarker::Thread::Thread):
68951 (JSC::getCurrentPlatformThread):
68952 (JSC::suspendThread):
68953 (JSC::resumeThread):
68954 (JSC::getPlatformThreadRegisters):
68955 (JSC::otherThreadStackPointer):
68956 (JSC::freePlatformThreadRegisters):
68957 (JSC::MachineStackMarker::markOtherThreadConservatively):
68958 * wtf/Platform.h: Added Gtk port to use
68959 ENABLE_JSC_MULTIPLE_THREADS.
68961 2011-02-28 Oliver Hunt <oliver@apple.com>
68963 Reviewed by Darin Adler.
68965 Stop using DeprecatedPtr for the global exception slot
68966 https://bugs.webkit.org/show_bug.cgi?id=55424
68968 Create GCRootPtr to signify that the exception slot is
68969 a gcroot, and so is exempt from the usual writebarrier
68972 * runtime/JSGlobalData.h:
68973 * runtime/WriteBarrier.h:
68974 (JSC::GCRootPtr::GCRootPtr):
68975 (JSC::GCRootPtr::operator=):
68977 2011-02-28 Adam Barth <abarth@webkit.org>
68979 Reviewed by Dimitri Glazkov.
68981 Use more xcconfig files in JavaScriptCore gyp build
68982 https://bugs.webkit.org/show_bug.cgi?id=55391
68984 The GYP experts tell me that we have have a total of two xcconfig
68985 files: one for the xcodeproj as a whole and one for each target. This
68986 patch uses that technique to re-use the existing xcconfig files and
68987 eliminate the duplication.
68989 Technically, this patch introduces some build errors because the
68990 xcconfig files assume that the xcodeproj file is one level higher in
68991 the directory hierarchy. Specifically, the xcodeproj file can no
68992 longer find the Info.plist or the prefix header. I plan to fix that in
68993 a subsequent patch.
68995 Also, this patch introduces the Release and Production configurations,
68996 which should work correctly now.
68998 * gyp/JavaScriptCore.gyp:
69000 2011-02-28 Jon Honeycutt <jhoneycutt@apple.com>
69004 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
69005 Add symbol to export.
69007 2011-02-28 Oliver Hunt <oliver@apple.com>
69009 Reviewed by Gavin Barraclough.
69011 Make ScopeChainNode GC allocated
69012 https://bugs.webkit.org/show_bug.cgi?id=55283
69014 Simplify lifetime and other issues with the scopechain
69015 by making it gc allocated. This allows us to simplify
69016 function exit and unwinding, as well as making the
69017 current iterative refcounting go away.
69019 * JavaScriptCore.exp:
69020 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
69021 * bytecode/CodeBlock.cpp:
69022 (JSC::CodeBlock::createActivation):
69023 * bytecode/StructureStubInfo.cpp:
69024 * bytecompiler/BytecodeGenerator.cpp:
69025 (JSC::BytecodeGenerator::generate):
69026 (JSC::BytecodeGenerator::BytecodeGenerator):
69027 (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
69028 (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
69029 * bytecompiler/BytecodeGenerator.h:
69030 * debugger/Debugger.cpp:
69031 (JSC::Recompiler::operator()):
69032 * debugger/DebuggerCallFrame.h:
69033 (JSC::DebuggerCallFrame::scopeChain):
69034 * interpreter/CachedCall.h:
69035 (JSC::CachedCall::CachedCall):
69036 * interpreter/CallFrame.h:
69037 * interpreter/Interpreter.cpp:
69039 (JSC::Interpreter::unwindCallFrame):
69040 (JSC::Interpreter::throwException):
69041 (JSC::Interpreter::execute):
69042 (JSC::Interpreter::executeCall):
69043 (JSC::Interpreter::executeConstruct):
69044 (JSC::Interpreter::privateExecute):
69046 (JSC::JIT::compileOpCallInitializeCallFrame):
69047 (JSC::JIT::compileOpCall):
69048 * jit/JITCall32_64.cpp:
69049 (JSC::JIT::compileOpCallInitializeCallFrame):
69050 (JSC::JIT::emit_op_ret):
69051 (JSC::JIT::emit_op_ret_object_or_this):
69052 (JSC::JIT::compileOpCall):
69053 * jit/JITOpcodes.cpp:
69054 (JSC::JIT::emit_op_end):
69055 (JSC::JIT::emit_op_ret):
69056 (JSC::JIT::emit_op_ret_object_or_this):
69057 * jit/JITOpcodes32_64.cpp:
69058 (JSC::JIT::emit_op_end):
69059 * jit/JITStubs.cpp:
69060 (JSC::DEFINE_STUB_FUNCTION):
69062 * runtime/ArgList.cpp:
69063 * runtime/Completion.cpp:
69065 * runtime/Completion.h:
69066 * runtime/DateConversion.cpp:
69067 * runtime/Executable.cpp:
69068 (JSC::EvalExecutable::compileInternal):
69069 (JSC::ProgramExecutable::compileInternal):
69070 (JSC::FunctionExecutable::compileForCallInternal):
69071 (JSC::FunctionExecutable::compileForConstructInternal):
69072 * runtime/FunctionConstructor.cpp:
69073 (JSC::constructFunction):
69074 * runtime/GCActivityCallbackCF.cpp:
69075 * runtime/Identifier.cpp:
69076 * runtime/JSCell.h:
69077 * runtime/JSChunk.cpp: Added.
69078 * runtime/JSChunk.h: Added.
69079 * runtime/JSFunction.cpp:
69080 (JSC::JSFunction::JSFunction):
69081 (JSC::JSFunction::markChildren):
69082 (JSC::JSFunction::getCallData):
69083 (JSC::JSFunction::getOwnPropertySlot):
69084 (JSC::JSFunction::getConstructData):
69085 * runtime/JSFunction.h:
69086 (JSC::JSFunction::scope):
69087 (JSC::JSFunction::setScope):
69088 * runtime/JSGlobalData.cpp:
69089 (JSC::JSGlobalData::JSGlobalData):
69090 * runtime/JSGlobalData.h:
69091 * runtime/JSGlobalObject.cpp:
69092 (JSC::JSGlobalObject::init):
69093 (JSC::JSGlobalObject::markChildren):
69094 * runtime/JSGlobalObject.h:
69095 (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
69096 (JSC::JSGlobalObject::globalScopeChain):
69097 * runtime/JSGlobalObjectFunctions.cpp:
69098 (JSC::globalFuncEval):
69099 * runtime/JSLock.cpp:
69100 * runtime/JSNumberCell.cpp:
69101 * runtime/JSZombie.cpp:
69102 * runtime/MarkedBlock.cpp:
69103 * runtime/MarkedSpace.cpp:
69104 * runtime/PropertyNameArray.cpp:
69105 * runtime/ScopeChain.cpp:
69106 (JSC::ScopeChainNode::print):
69107 (JSC::ScopeChainNode::localDepth):
69108 (JSC::ScopeChainNode::markChildren):
69109 * runtime/ScopeChain.h:
69110 (JSC::ScopeChainNode::ScopeChainNode):
69111 (JSC::ScopeChainNode::createStructure):
69112 (JSC::ScopeChainNode::push):
69113 (JSC::ScopeChainNode::pop):
69114 (JSC::ScopeChainIterator::ScopeChainIterator):
69115 (JSC::ScopeChainIterator::operator*):
69116 (JSC::ScopeChainIterator::operator->):
69117 (JSC::ScopeChainIterator::operator++):
69118 (JSC::ScopeChainNode::begin):
69119 (JSC::ScopeChainNode::end):
69120 (JSC::ExecState::globalData):
69121 (JSC::ExecState::lexicalGlobalObject):
69122 (JSC::ExecState::globalThisValue):
69123 * runtime/ScopeChainMark.h:
69124 * wtf/DateMath.cpp:
69126 2011-02-27 Adam Barth <abarth@webkit.org>
69128 Reviewed by Eric Seidel.
69130 Implement WTF::randomNumber in terms of WTF::cryptographicallyRandomNumber when possible
69131 https://bugs.webkit.org/show_bug.cgi?id=55326
69133 Currently, randomNumber does a bunch of platform-specific work that to
69134 get a cryptographic randomness when available. Instead, we should use
69135 cryptographicallyRandomNumber, which abstracts this work.
69136 Unfortunately, we can't remove all of the WTF::randomNumber
69137 implementation because not every port has access to cryptographically
69140 * wtf/RandomNumber.cpp:
69141 (WTF::randomNumber):
69143 2011-02-27 Benjamin Poulain <ikipou@gmail.com>
69145 Reviewed by Darin Adler.
69147 Eliminate DeprecatedPtrList from RenderBlock
69148 https://bugs.webkit.org/show_bug.cgi?id=54972
69150 Add methods find() and contains() using an adaptor to ListHashSet.
69151 Those method are like the one of HashSet, they allow to find objects
69152 based on a different key than the one used to define the set.
69154 Add convenience methods for direct access to the head and tail of the list.
69155 Those methods are providing similar API/behavior as Vector.
69157 * wtf/ListHashSet.h:
69160 (WTF::::removeLast):
69161 (WTF::ListHashSetTranslatorAdapter::hash):
69162 (WTF::ListHashSetTranslatorAdapter::equal):
69166 2011-02-26 Patrick Gansterer <paroga@webkit.org>
69168 Reviewed by Andreas Kling.
69170 Add support for DragonFly BSD
69171 https://bugs.webkit.org/show_bug.cgi?id=54407
69173 DragonFly BSD is based on FreeBSD, so handle it like FreeBSD.
69177 2011-02-26 Adam Barth <abarth@webkit.org>
69179 Reviewed by Dimitri Glazkov.
69181 JavaScriptCore should use the xcconfig file instead of importing that information into GYP
69182 https://bugs.webkit.org/show_bug.cgi?id=55282
69184 Technically, this breaks the build because I had removed one of the
69185 warnings in this config file, but this change seems like an
69188 * gyp/JavaScriptCore.gyp:
69190 2011-02-26 Thouraya ANDOLSI <thouraya.andolsi@st.com>
69192 Reviewed by Nikolas Zimmermann.
69195 https://bugs.webkit.org/show_bug.cgi?id=44329
69197 Provide an ExecutableAllocater::cacheFlush() implementation for
69200 * jit/ExecutableAllocator.h:
69201 (JSC::ExecutableAllocator::cacheFlush):
69203 2011-02-25 Sheriff Bot <webkit.review.bot@gmail.com>
69205 Unreviewed, rolling out r79627.
69206 http://trac.webkit.org/changeset/79627
69207 https://bugs.webkit.org/show_bug.cgi?id=55274
69209 broke worker tests (Requested by olliej on #webkit).
69211 * JavaScriptCore.exp:
69212 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
69213 * runtime/Heap.cpp:
69214 (JSC::Heap::allocate):
69216 * runtime/JSCell.h:
69217 (JSC::JSCell::JSCell::operator new):
69218 (JSC::JSCell::MarkedSpace::sizeClassFor):
69219 (JSC::JSCell::MarkedSpace::allocate):
69220 * runtime/MarkedBlock.h:
69221 * runtime/MarkedSpace.cpp:
69222 (JSC::MarkedSpace::MarkedSpace):
69223 (JSC::MarkedSpace::allocateBlock):
69224 (JSC::MarkedSpace::reset):
69225 * runtime/MarkedSpace.h:
69226 (JSC::MarkedSpace::SizeClass::SizeClass):
69228 2011-02-25 Michael Saboff <msaboff@apple.com>
69230 Reviewed by Darin Adler.
69232 Leak in JSParser::Scope of ScopeLabelInfo Vector
69233 https://bugs.webkit.org/show_bug.cgi?id=55249
69235 Changed m_labels to be an OwnPtr<>. Added VectorTraits
69236 and Scope copy constructor to support this change.
69238 * parser/JSParser.cpp:
69239 (JSC::JSParser::Scope::~Scope):
69241 2011-02-25 Fumitoshi Ukai <ukai@chromium.org>
69243 Reviewed by Adam Barth.
69245 WebSocket uses insecure random numbers
69246 https://bugs.webkit.org/show_bug.cgi?id=54714
69248 * JavaScriptCore.exp: Export WTF::cryptographicallyRandomNumber()
69250 2011-02-25 Patrick Gansterer <paroga@webkit.org>
69252 Reviewed by Adam Roben.
69254 Move timeBeginPeriod into OS(WINDOWS) section
69255 https://bugs.webkit.org/show_bug.cgi?id=55247
69258 (main): timeBeginPeriod is available on all Windows versions and not compiler specific.
69260 2011-02-25 Patrick Gansterer <paroga@webkit.org>
69262 Unreviewed WinCE build fix for r79695.
69265 (main): SetErrorMode isn't available on WinCE.
69267 2011-02-25 Adam Roben <aroben@apple.com>
69269 Work around Cygwin's crash-suppression behavior
69271 Cygwin calls ::SetErrorMode(SEM_FAILCRITICALERRORS), which any processes it launches will
69272 inherit. This is bad for testing/debugging, as it causes the post-mortem debugger not to be
69273 invoked. (Cygwin does this because it makes crashes more UNIX-y.) We reset the error mode
69274 when our test apps launch to work around Cygwin's behavior.
69276 Fixes <http://webkit.org/b/55222> Test apps crash silently (without invoking post-mortem
69277 debugger) when launched from Cygwin 1.7
69279 Reviewed by Darin Adler.
69281 * API/tests/testapi.c: Added a now-needed #include.
69285 Call ::SetErrorMode(0) to undo Cygwin's folly.
69287 * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: Define NOMINMAX like many of our
69288 other projects do so that windows.h won't define min/max macros that interfere with
69289 std::numeric_limits<T>::min/max.
69291 2011-02-24 Adam Barth <abarth@webkit.org>
69293 Reviewed by Eric Seidel.
69295 Add GYP project for JavaScriptCore
69296 https://bugs.webkit.org/show_bug.cgi?id=55027
69298 Again, this GYP files is very rough, but it succeeds in building
69299 JavaScriptCore. There's a lot more work to do here, especially in the
69300 area of sharing with JavaScriptGlue.gyp. This patch is more of a
69301 checkpoint so that other folks can help out if they wish.
69304 * gyp/JavaScriptCore.gyp: Added.
69305 * gyp/generate-derived-sources.sh: Added.
69307 2011-02-24 Adam Barth <abarth@webkit.org>
69309 Reviewed by Eric Seidel.
69311 Add missing files to JavaScriptCore.gypi
69312 https://bugs.webkit.org/show_bug.cgi?id=55193
69314 I forgot to add mm files in my previous patch.
69316 * JavaScriptCore.gyp/JavaScriptCore.gyp:
69317 * JavaScriptCore.gypi:
69319 2011-02-24 Adam Barth <abarth@webkit.org>
69321 Reviewed by Eric Seidel.
69323 Remove unused parameter name in GCActivityCallback.cpp
69324 https://bugs.webkit.org/show_bug.cgi?id=55194
69326 This change is not strictly required for the GYP-based build system,
69327 but I noticed this error when working on the new build system.
69329 * runtime/GCActivityCallback.cpp:
69330 (JSC::DefaultGCActivityCallback::DefaultGCActivityCallback):
69332 2011-02-24 James Robinson <jamesr@chromium.org>
69334 Reviewed by Darin Fisher.
69336 Add a USE() macro to control use of the built-in UTF8 codec
69337 https://bugs.webkit.org/show_bug.cgi?id=55189
69339 Defaults USE(BUILTIN_UTF8_CODEC) to true for all platforms except chromium, which controls the flag via features.gypi.
69343 2011-02-24 Geoffrey Garen <ggaren@apple.com>
69345 Reviewed by Darin Adler.
69347 Variable-sized allocation (but still capped at 64 bytes)
69348 https://bugs.webkit.org/show_bug.cgi?id=55159
69350 SunSpider reports no change.
69352 * JavaScriptCore.exp: Some day, I hope not to have to edit this file.
69354 * runtime/Heap.cpp:
69355 (JSC::Heap::allocateSlowCase): Split allocation into a fast and slow
69356 case, so the fast case can inline size class selection and turn it into
69357 a compile-time constant.
69359 Changed the collect-on-every allocation debugging switch to collect only
69360 on every slow allocation, so you can still flip the switch without
69361 recompiling the world. This may also be preferable for debugging purposes,
69362 since collecting after every single allocation can be unusably slow,
69363 and can mask problems by running destructors early.
69365 * runtime/Heap.h: Ditto.
69367 * runtime/JSCell.h:
69368 (JSC::JSCell::MarkedSpace::sizeClassFor):
69369 (JSC::JSCell::Heap::allocate):
69370 (JSC::JSCell::JSCell::operator new): The inlining mentioned above.
69372 * runtime/MarkedBlock.h: Dropped the block size from 256KB to 16KB. With
69373 multiple size classes, allocating a full 256KB for the first allocation
69374 in a given class can be pathologically wasteful. (8KB, or 4KB Mac and
69375 8KB Windows, would be even better, but that seems to be a peformance
69376 regression for now.)
69378 * runtime/MarkedSpace.cpp:
69379 (JSC::MarkedSpace::MarkedSpace):
69380 (JSC::MarkedSpace::allocateBlock):
69381 (JSC::MarkedSpace::reset): There's more than one size class now, and its
69382 cell size is not constant.
69384 * runtime/MarkedSpace.h:
69385 (JSC::MarkedSpace::SizeClass::SizeClass): Ditto.
69387 2011-02-23 Oliver Hunt <oliver@apple.com>
69389 Reviewed by Geoffrey Garen.
69391 Make WeakGCMap use new handle infrastructure
69392 https://bugs.webkit.org/show_bug.cgi?id=55100
69394 Remove old WeakGCMap implementation and move over to new handle
69397 This has a number of benefits, most notably it makes a WeakGCMap
69398 always reflect the true state of the world by as all entries are
69399 removed at the first gc cycle that makes them dead. This allows
69400 us to get rid of code in a wide variety of objects where the only
69401 purpose was to remove themselves from maps.
69403 It also means that we no longer need to have special "unchecked"
69404 versions of any functions on WeakGCMap. Alas in order to maintain
69405 compatibility with the JSWeakObjectMapClear API it is still
69406 necessary to have an api that resembles uncheckedRemove, this is
69407 now deprecatedRemove and will be dealt with in a later patch.
69409 In order to get correct semantics in WeakGCMap we need more
69410 contextual information in the finalizer, so we've added an
69411 abstract class based finaliser and a context parameter to the
69414 The new an improved WeakGCMap also results in sigificantly more
69415 churn in the weak handle lists so exposed some potential problems
69416 during the post mark phase which have been rectified as well.
69418 * API/JSWeakObjectMapRefPrivate.cpp:
69419 * API/JSWeakObjectMapRefPrivate.h:
69420 * runtime/Heap.cpp:
69421 (JSC::Heap::globalObjectCount):
69422 (JSC::Heap::protectedGlobalObjectCount):
69423 * runtime/JSGlobalData.cpp:
69424 (JSC::JSGlobalData::JSGlobalData):
69425 * runtime/JSGlobalData.h:
69426 * runtime/JSGlobalObject.cpp:
69427 (JSC::JSGlobalObject::~JSGlobalObject):
69428 (JSC::JSGlobalObject::init):
69429 * runtime/WeakGCMap.h:
69430 (JSC::WeakGCMap::iterator::iterator):
69431 (JSC::WeakGCMap::iterator::get):
69432 (JSC::WeakGCMap::iterator::getSlot):
69433 (JSC::WeakGCMap::iterator::operator++):
69434 (JSC::WeakGCMap::iterator::operator==):
69435 (JSC::WeakGCMap::iterator::operator!=):
69436 (JSC::WeakGCMap::WeakGCMap):
69437 (JSC::WeakGCMap::isEmpty):
69438 (JSC::WeakGCMap::clear):
69439 (JSC::WeakGCMap::get):
69440 (JSC::WeakGCMap::getSlot):
69441 (JSC::WeakGCMap::set):
69442 (JSC::WeakGCMap::take):
69443 (JSC::WeakGCMap::size):
69444 (JSC::WeakGCMap::deprecatedRemove):
69445 (JSC::WeakGCMap::begin):
69446 (JSC::WeakGCMap::end):
69447 (JSC::WeakGCMap::~WeakGCMap):
69448 (JSC::WeakGCMap::finalize):
69449 * runtime/WeakGCPtr.h:
69450 (JSC::WeakGCPtr::WeakGCPtr):
69451 (JSC::WeakGCPtr::set):
69453 2011-02-24 Oliver Hunt <oliver@apple.com>
69455 Reviewed by Gavin Barraclough.
69457 Make weaklist processing deal with weak handles being removed during the iteration
69458 https://bugs.webkit.org/show_bug.cgi?id=55105
69460 It is possible for the handle heap to end up in a broken state if
69461 a handle's finalizer removes either the current or next handle
69462 to be visited during the post-gc cleanup. This patch removes that
69463 problem by allowing the deallocate(Node*) routine to update the
69464 iterator if it is called during finalization.
69466 * collector/handles/HandleHeap.cpp:
69467 (JSC::HandleHeap::HandleHeap):
69468 (JSC::HandleHeap::updateAfterMark):
69469 (JSC::HandleHeap::clearWeakPointers):
69470 (JSC::HandleHeap::writeBarrier):
69471 (JSC::HandleHeap::protectedGlobalObjectCount):
69472 * collector/handles/HandleHeap.h:
69473 (JSC::Finalizer::~Finalizer):
69474 (JSC::HandleHeap::getFinalizer):
69475 (JSC::HandleHeap::deallocate):
69476 (JSC::HandleHeap::makeWeak):
69477 (JSC::HandleHeap::makeSelfDestroying):
69478 (JSC::HandleHeap::Node::Node):
69479 (JSC::HandleHeap::Node::setFinalizer):
69480 (JSC::HandleHeap::Node::finalizer):
69481 (JSC::HandleHeap::Node::finalizerContext):
69482 * interpreter/RegisterFile.cpp:
69483 (JSC::RegisterFile::setGlobalObject):
69484 (JSC::GlobalObjectNotifier::finalize):
69485 (JSC::RegisterFile::globalObjectCollectedNotifier):
69486 * interpreter/RegisterFile.h:
69487 (JSC::RegisterFile::RegisterFile):
69488 * runtime/Heap.cpp:
69489 (JSC::Heap::destroy):
69490 * runtime/WeakGCPtr.h:
69491 (JSC::WeakGCPtr::WeakGCPtr):
69492 (JSC::WeakGCPtr::set):
69494 2011-02-24 Michael Saboff <msaboff@apple.com>
69496 Reviewed by Oliver Hunt.
69498 PatternAlternative leaked in YarrPatternConstructor::atomParenthesesEnd()
69499 https://bugs.webkit.org/show_bug.cgi?id=55156
69501 Added code to delete unneeded PatternAlternative after it is removed
69502 from m_alternatives Vector.
69504 * yarr/YarrPattern.cpp:
69505 (JSC::Yarr::YarrPatternConstructor::atomParenthesesEnd):
69507 2011-02-24 Eric Seidel <eric@webkit.org>
69509 Reviewed by Anders Carlsson.
69511 VectorBuffer should not call malloc(0)
69512 https://bugs.webkit.org/show_bug.cgi?id=55091
69514 Turns out the malloc() call which was so hot in:
69515 https://bugs.webkit.org/show_bug.cgi?id=55005
69516 was actually just malloc(0).
69518 We shouldn't be calling malloc(0) anyway, since there is no need to
69519 and it might actually do work on some systems.
69520 I believe on Mac it ends up taking the standard spinlocks (expensive)
69521 and the code on Brew actually does a malloc(1) instead. Neither is desirable.
69524 (WTF::VectorBufferBase::allocateBuffer):
69525 (WTF::VectorBufferBase::tryAllocateBuffer):
69527 2011-02-24 Patrick Gansterer <paroga@webkit.org>
69529 Reviewed by Darin Adler.
69531 Remove obsolete PLATFORM(CI)
69532 https://bugs.webkit.org/show_bug.cgi?id=55082
69536 2011-02-24 Martin Robinson <mrobinson@igalia.com>
69538 Reviewed by Xan Lopez.
69540 [GTK] Remove the GFile GOwnPtr specialization
69541 https://bugs.webkit.org/show_bug.cgi?id=55154
69543 Remove the GFile specialization of GOwnPtr. It's sufficient to use GRefPtr
69544 to track GFiles since they are just regular reference-counted GObjects.
69546 * wtf/gobject/GOwnPtr.cpp: Remove GFile specialization.
69547 * wtf/gobject/GOwnPtr.h: Ditto.
69549 2011-02-24 Patrick Gansterer <paroga@webkit.org>
69551 Reviewed by Eric Seidel.
69553 Rename PLATFORM(SKIA) to USE(SKIA)
69554 https://bugs.webkit.org/show_bug.cgi?id=55090
69558 2011-02-24 Patrick Gansterer <paroga@webkit.org>
69560 Reviewed by Alexey Proskuryakov.
69562 Remove pthreads dependecy for JSLock
69563 https://bugs.webkit.org/show_bug.cgi?id=54832
69565 JSLock is only needed to support an obsolete execution model where JavaScriptCore
69566 automatically protected against concurrent access from multiple threads.
69567 So it's safe to disable it on non-mac platforms where we don't have native pthreads.
69569 * runtime/JSLock.cpp:
69571 2011-02-24 Chao-ying Fu <fu@mips.com>
69573 Reviewed by Eric Seidel.
69575 Fix MIPS build with new patchOffsetPut/GetByIdPropertyMapOffset1/2 values
69576 https://bugs.webkit.org/show_bug.cgi?id=54997
69579 * jit/JITStubs.cpp:
69580 (JSC::JITThunks::JITThunks):
69582 2011-02-24 Andras Becsi <abecsi@webkit.org>
69584 Reviewed by Laszlo Gombos.
69586 [Qt] MinGW build fails to link
69587 https://bugs.webkit.org/show_bug.cgi?id=55050
69589 Prepend the libraries of subcomponents instead of appending them
69590 to fix the library order according to the dependency of the libraries
69592 * JavaScriptCore.pri: rename addJavaScriptCore to prependJavaScriptCore
69595 2011-02-24 Eric Seidel <eric@webkit.org>
69597 Reviewed by Adam Barth.
69599 Deque<T> should support inline capacity
69600 https://bugs.webkit.org/show_bug.cgi?id=55032
69602 The title says it all. There are currently no places
69603 which use this code yet, however it's been tested in conjunction
69604 with code for bug 55005.
69606 This also adds an ASSERT that capacity is never 1. If you were able
69607 to set the capacity equal to 1, the Deque would just get confused
69608 and happily append your item but still think it had size 0.
69611 (WTF::DequeIterator::DequeIterator):
69612 (WTF::DequeConstIterator::DequeConstIterator):
69613 (WTF::DequeReverseIterator::DequeReverseIterator):
69614 (WTF::DequeConstReverseIterator::DequeConstReverseIterator):
69615 (WTF::::checkValidity):
69616 (WTF::::checkIndexValidity):
69617 (WTF::::invalidateIterators):
69619 (WTF::deleteAllValues):
69621 (WTF::::destroyAll):
69626 (WTF::::expandCapacityIfNeeded):
69627 (WTF::::expandCapacity):
69628 (WTF::::takeFirst):
69631 (WTF::::removeFirst):
69633 (WTF::::addToIteratorsList):
69634 (WTF::::removeFromIteratorsList):
69635 (WTF::::DequeIteratorBase):
69636 (WTF::::~DequeIteratorBase):
69638 (WTF::::increment):
69639 (WTF::::decrement):
69644 2011-02-22 Adam Barth <abarth@webkit.org>
69646 Reviewed by Ojan Vafai.
69648 Add missing files to JavaScriptCore.gypi
69649 https://bugs.webkit.org/show_bug.cgi?id=55020
69651 gypi files are supposed to list every file under the sun. This patch
69652 adds some missing files and sorts the rest.
69654 * JavaScriptCore.gypi:
69656 2011-02-23 Geoffrey Garen <ggaren@apple.com>
69658 Reviewed by Darin Adler.
69660 Refactored MarkedSpace to operate in terms of size classes
69661 https://bugs.webkit.org/show_bug.cgi?id=55106
69663 SunSpider reports no change.
69665 * runtime/JSCell.h:
69666 (JSC::JSCell::MarkedSpace::sizeClassFor):
69667 (JSC::JSCell::MarkedSpace::allocate): Delegate allocation based on size
69668 class. Since these functions are inline, the compiler can constant fold
69671 * runtime/MarkedBlock.h:
69672 (JSC::MarkedBlock::cellSize):
69673 (JSC::MarkedBlock::size): Factored out a cellSize() helper.
69675 * runtime/MarkedSpace.cpp:
69676 (JSC::MarkedSpace::allocateBlock):
69677 (JSC::MarkedSpace::allocateFromSizeClass):
69678 (JSC::MarkedSpace::shrink):
69679 (JSC::MarkedSpace::reset):
69680 * runtime/MarkedSpace.h:
69681 (JSC::MarkedSpace::SizeClass::SizeClass):
69682 (JSC::MarkedSpace::SizeClass::reset): Changed to operate in terms of
69683 abstract SizeClass objects, which are independent linked lists of blocks
69684 of a certain size class, instead of a single m_heap object.
69686 2011-02-23 Adam Barth <abarth@webkit.org>
69688 Reviewed by James Robinson.
69690 [Chromium] Use WebKitClient for OSRandomSource instead of trying to talk to the file system in the sandbox
69691 https://bugs.webkit.org/show_bug.cgi?id=55093
69693 Exclude OSRandomSource.cpp from the Chromium build. This function is
69694 implemented in WebKit/chromium/src instead.
69696 * JavaScriptCore.gyp/JavaScriptCore.gyp:
69698 2011-02-23 Oliver Hunt <oliver@apple.com>
69700 Roll out r64156 as it introduces incorrect behaviour.
69702 * runtime/JSByteArray.h:
69703 (JSC::JSByteArray::setIndex):
69705 2011-02-23 Geoffrey Garen <ggaren@apple.com>
69707 Reviewed by Oliver Hunt.
69709 Moved the "nextAtom" allocation pointer into MarkedBlock for better encapsulation
69710 https://bugs.webkit.org/show_bug.cgi?id=55079
69712 SunSpider reports no change.
69714 * runtime/Heap.cpp:
69715 (JSC::Heap::reset): Moved Zombie sweeping here, up from MarkedSpace,
69716 since we want Heap to logically control MarkedSpace. MarkedSpace should
69717 never choose to sweep itself.
69719 * runtime/JSCell.h:
69720 (JSC::JSCell::MarkedBlock::allocate): Updated for nextAtom becoming a
69721 member of MarkedBlock. No need to reset nextAtom to firstAtom() when
69722 we reach the end of a block, since there's now an explicit reset pass
69725 * runtime/MarkedBlock.cpp:
69726 (JSC::MarkedBlock::MarkedBlock):
69727 * runtime/MarkedBlock.h:
69728 (JSC::MarkedBlock::reset): Added the nextAtom data member, and reordered
69729 some data members to improve cache locality.
69731 * runtime/MarkedSpace.cpp:
69732 (JSC::MarkedSpace::MarkedSpace):
69733 (JSC::MarkedSpace::allocate):
69734 (JSC::MarkedSpace::reset):
69735 * runtime/MarkedSpace.h:
69736 (JSC::CollectorHeap::CollectorHeap): Removed nextAtom, and added an
69737 explicit reset pass.
69739 2011-02-23 James Robinson <jamesr@chromium.org>
69741 Unreviewed, rolling out r79428.
69742 http://trac.webkit.org/changeset/79428
69743 https://bugs.webkit.org/show_bug.cgi?id=54714
69745 Does not work in the Chromium sandbox
69747 * JavaScriptCore.exp:
69749 2011-02-23 Adam Roben <aroben@apple.com>
69751 Fix an off-by-one error in JSC::appendSourceToError
69753 Looks like this bug has been around since the code was first added in r35245.
69755 Fixes <http://webkit.org/b/55052> <rdar://problem/9043512> Crash in JSC::appendSourceToError
69756 when running fast/dom/objc-big-method-name.html on Windows with full page heap enabled
69758 Reviewed by Darin Adler.
69760 * interpreter/Interpreter.cpp:
69761 (JSC::appendSourceToError): When trimming whitespace off the end of the string, examine the
69762 character at stop-1 rather than at stop. At this point in the code, stop represents the
69763 index just past the end of the characters we care about, and can even be just past the end
69764 of the entire data buffer.
69766 2011-02-23 Geoffrey Garen <ggaren@apple.com>
69768 Reviewed by Darin Adler.
69770 Rolled back in r79367 with SnowLeopard Release bot crash fixed.
69771 https://bugs.webkit.org/show_bug.cgi?id=54999
69773 The crash was caused by failure to update the "nextBlock" pointer when
69774 removing a block from the list while shrinking. The fix is to update the
69775 "nextBlock" pointer.
69777 This crash was very rare because it only happened in cases where the very
69778 first block in the heap contained no marked cells.
69780 2011-02-23 Dan Bernstein <mitz@apple.com>
69782 Reviewed by Gavin Barraclough.
69784 Include frame numbers in backtraces.
69785 https://bugs.webkit.org/show_bug.cgi?id=55060
69787 * wtf/Assertions.cpp:
69789 2011-02-23 Xan Lopez <xlopez@igalia.com>
69791 Reviewed by Gavin Barraclough.
69793 latest jsc for armv7 crashes in sunspider tests
69794 https://bugs.webkit.org/show_bug.cgi?id=54667
69796 Update JIT offset values in ARMv7 after r78732. Fixes crashes in
69797 SunSpider and JavaScript tests.
69799 * jit/JIT.h: update values.
69801 2011-02-23 Sheriff Bot <webkit.review.bot@gmail.com>
69803 Unreviewed, rolling out r79418.
69804 http://trac.webkit.org/changeset/79418
69805 https://bugs.webkit.org/show_bug.cgi?id=55043
69807 "breaks shlib linux build" (Requested by morrita on #webkit).
69809 * JavaScriptCore.gyp/JavaScriptCore.gyp:
69810 * JavaScriptCore.gypi:
69812 2011-02-23 Patrick Gansterer <paroga@webkit.org>
69814 Reviewed by Alexey Proskuryakov.
69816 Use DEFINE_STATIC_LOCAL for ignoreSetMutex in Structure.cpp
69817 https://bugs.webkit.org/show_bug.cgi?id=54831
69819 * runtime/InitializeThreading.cpp:
69820 (JSC::initializeThreadingOnce):
69821 * runtime/Structure.cpp:
69822 (JSC::ignoreSetMutex):
69823 (JSC::Structure::Structure):
69824 (JSC::Structure::~Structure):
69825 (JSC::Structure::initializeThreading):
69826 * runtime/Structure.h:
69828 2011-02-23 Patrick Gansterer <paroga@webkit.org>
69830 Reviewed by Darin Adler.
69832 Rename PLATFORM(CF) to USE(CF)
69833 https://bugs.webkit.org/show_bug.cgi?id=53540
69835 * runtime/DatePrototype.cpp:
69836 * runtime/GCActivityCallbackCF.cpp:
69837 * runtime/JSGlobalData.cpp:
69838 (JSC::JSGlobalData::JSGlobalData):
69839 * wtf/CurrentTime.cpp:
69841 * wtf/text/AtomicString.h:
69842 * wtf/text/StringImpl.h:
69843 (WTF::StringImpl::computeHash):
69844 * wtf/text/WTFString.h:
69845 * wtf/unicode/icu/CollatorICU.cpp:
69846 (WTF::Collator::userDefault):
69848 2011-02-23 Fumitoshi Ukai <ukai@chromium.org>
69850 Unreviewed build fix for Windows.
69852 WebSocket uses insecure random numbers
69853 https://bugs.webkit.org/show_bug.cgi?id=54714
69855 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export WTF::cryptographicallyRandomNumber()
69857 2011-02-23 Fumitoshi Ukai <ukai@chromium.org>
69859 Reviewed by Adam Barth.
69861 WebSocket uses insecure random numbers
69862 https://bugs.webkit.org/show_bug.cgi?id=54714
69864 * JavaScriptCore.exp: Export WTF::cryptographicallyRandomNumber()
69866 2011-02-22 Adam Barth <abarth@webkit.org>
69868 Reviewed by Ojan Vafai.
69870 Add missing files to JavaScriptCore.gypi
69871 https://bugs.webkit.org/show_bug.cgi?id=55020
69873 gypi files are supposed to list every file under the sun. This patch
69874 adds some missing files and sorts the rest.
69876 * JavaScriptCore.gypi:
69878 2011-02-22 Sheriff Bot <webkit.review.bot@gmail.com>
69880 Unreviewed, rolling out r79367.
69881 http://trac.webkit.org/changeset/79367
69882 https://bugs.webkit.org/show_bug.cgi?id=55012
69884 all layout tests are crashing on Snow Leopard (Requested by
69888 * JavaScriptCore.gypi:
69889 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
69890 * JavaScriptCore.xcodeproj/project.pbxproj:
69891 * runtime/MarkedBlock.cpp:
69892 (JSC::MarkedBlock::MarkedBlock):
69893 * runtime/MarkedBlock.h:
69894 * runtime/MarkedSpace.cpp:
69895 (JSC::MarkedSpace::destroy):
69896 (JSC::MarkedSpace::allocateBlock):
69897 (JSC::MarkedSpace::freeBlock):
69898 (JSC::MarkedSpace::allocate):
69899 (JSC::MarkedSpace::shrink):
69900 (JSC::MarkedSpace::reset):
69901 * runtime/MarkedSpace.h:
69902 (JSC::CollectorHeap::collectorBlock):
69903 * wtf/CMakeLists.txt:
69904 * wtf/DoublyLinkedList.h: Removed.
69906 2011-02-22 Geoffrey Garen <ggaren@apple.com>
69908 Reviewed by Oliver Hunt.
69910 Manage MarkedBlocks in a linked list instead of a vector, so arbitrary removal is O(1)
69911 https://bugs.webkit.org/show_bug.cgi?id=54999
69913 SunSpider reports no change.
69916 * JavaScriptCore.gypi:
69917 * JavaScriptCore.vcproj/WTF/WTF.vcproj:
69918 * JavaScriptCore.xcodeproj/project.pbxproj: So many build systems, so little time.
69919 * wtf/CMakeLists.txt:
69921 * runtime/MarkedBlock.cpp:
69922 (JSC::MarkedBlock::MarkedBlock):
69923 * runtime/MarkedBlock.h:
69924 (JSC::MarkedBlock::setPrev):
69925 (JSC::MarkedBlock::setNext):
69926 (JSC::MarkedBlock::prev):
69927 (JSC::MarkedBlock::next): Added linked list data members and accessors.
69929 * runtime/MarkedSpace.cpp:
69930 (JSC::MarkedSpace::destroy):
69931 (JSC::MarkedSpace::allocateBlock): Stop using vector, since it doesn't exist anymore.
69933 (JSC::MarkedSpace::freeBlocks): New helper function for updating relevant
69934 data structures when freeing blocks.
69936 (JSC::MarkedSpace::allocate): Updated for nextBlock being a pointer and
69937 not a vector index.
69939 (JSC::MarkedSpace::shrink): Construct a temporary list of empties and
69940 then free them, to avoid modifying our hash table while iterating it.
69941 This wasn't a concern before because we were using indirect array
69942 indexing, not direct pointer indexing.
69944 (JSC::MarkedSpace::reset): Updated for nextBlock being a pointer and
69945 not a vector index.
69947 * runtime/MarkedSpace.h:
69948 (JSC::CollectorHeap::CollectorHeap): Changed data type from vector to linked list.
69950 * wtf/DoublyLinkedList.h: Added. New linked list class.
69951 (WTF::::DoublyLinkedList):
69957 2011-02-22 Gavin Barraclough <barraclough@apple.com>
69961 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
69963 2011-02-22 Gavin Barraclough <barraclough@apple.com>
69965 Reviewed by Sam Weinig.
69967 Bug 54988 - Re-create StructureTransitionTable class, encapsulate transition table
69969 The Structure class keeps a table of transitions to derived Structure types. Since
69970 this table commonly contains a single entry we employ an optimization where instead
69971 of holding a map, we may hold a pointer directly to a single instance of the mapped
69972 type. We use an additional bit of data to flag whether the pointer is currently
69973 pointing to a table of transitions, or a singleton transition. Previously we had
69974 commonly used a pattern of storing data in the low bits of pointers, but had moved
69975 away from this since it causes false leaks to be reported by the leaks tool. However
69976 in this case, the entries in the map are weak links - this pointer will never be
69977 responsible for keeping an object alive. As such we can use this approach provided
69978 that the bit is set when a table is not in use (otherwise the table would appear to
69981 Additionally, the transition table currently allows two entries to exist for a given
69982 key - one specialized to a particular value, and one not specialized. This is
69983 unnecessary, wasteful, and a little inconsistent. (If you create an entry for a
69984 specialized value, then a non-specialized entry, both will exist. If you create an
69985 entry for a non-specialized value, then try to create a specialized entry, only a
69986 non-specialized form will be allowed.)
69988 This shows a small progression on v8.
69990 * JavaScriptCore.exp:
69991 * runtime/JSObject.h:
69992 (JSC::JSObject::putDirectInternal):
69993 * runtime/Structure.cpp:
69994 (JSC::StructureTransitionTable::contains):
69995 (JSC::StructureTransitionTable::get):
69996 (JSC::StructureTransitionTable::remove):
69997 (JSC::StructureTransitionTable::add):
69998 (JSC::Structure::dumpStatistics):
69999 (JSC::Structure::Structure):
70000 (JSC::Structure::~Structure):
70001 (JSC::Structure::addPropertyTransitionToExistingStructure):
70002 (JSC::Structure::addPropertyTransition):
70003 * runtime/Structure.h:
70004 (JSC::Structure::get):
70005 * runtime/StructureTransitionTable.h:
70006 (JSC::StructureTransitionTable::Hash::hash):
70007 (JSC::StructureTransitionTable::Hash::equal):
70008 (JSC::StructureTransitionTable::HashTraits::emptyValue):
70009 (JSC::StructureTransitionTable::HashTraits::constructDeletedValue):
70010 (JSC::StructureTransitionTable::HashTraits::isDeletedValue):
70011 (JSC::StructureTransitionTable::StructureTransitionTable):
70012 (JSC::StructureTransitionTable::~StructureTransitionTable):
70013 (JSC::StructureTransitionTable::isUsingSingleSlot):
70014 (JSC::StructureTransitionTable::map):
70015 (JSC::StructureTransitionTable::setMap):
70016 (JSC::StructureTransitionTable::singleTransition):
70017 (JSC::StructureTransitionTable::setSingleTransition):
70019 2011-02-22 Andras Becsi <abecsi@webkit.org>
70021 Reviewed by Laszlo Gombos.
70023 [Qt] Redesign the build system
70024 https://bugs.webkit.org/show_bug.cgi?id=51339
70028 Build WebCore as a static library, compile the WebKit API and WebKit2 API
70029 in a final step and link to WebKit2, WebCore and JSC libraries to fix
70030 linking issues resulting from stripped away symbols.
70032 * JavaScriptCore.pri: Remove the workaround.
70034 2011-02-21 Adam Roben <aroben@apple.com>
70036 Fix linker warning on Windows
70038 r79135 tried to export JSObject::s_info by adding it to JavaScriptCore.def. This is the
70039 obvious way (since it's how we export functions), but unfortunately it doesn't work correct.
70040 r79222 made us export it the right way (using the JS_EXPORTDATA macro), but forgot to remove
70041 it from JavaScriptCore.def. This caused us to get linker warnings about exporting the symbol
70044 Rubber-stamped by Anders Carlsson.
70046 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Removed JSObject::s_info.
70048 2011-02-21 Brian Weinstein <bweinstein@apple.com>
70050 Reviewed by Adam Roben.
70052 WebResourceCacheManager should be responsible for managing the CFURLCache as well
70053 as the WebCore memory cache.
70054 https://bugs.webkit.org/show_bug.cgi?id=54886
70055 Part of <rdar://problem/8971738>
70057 Add a new use flag for using the CFURLCache.
70061 2011-02-21 Xan Lopez <xlopez@igalia.com>
70063 Reviewed by Gavin Barraclough.
70065 Use ASSERT_JIT_OFFSET in JITPropertyAccess32_64.cpp
70066 https://bugs.webkit.org/show_bug.cgi?id=54901
70068 * jit/JIT.h: swap actual and expected values in message, they were
70070 * jit/JITCall32_64.cpp:
70071 (JSC::JIT::compileOpCall): use ASSERT_JIT_OFFSET instead of
70073 * jit/JITPropertyAccess32_64.cpp:
70074 (JSC::JIT::emit_op_method_check): ditto.
70075 (JSC::JIT::compileGetByIdHotPath): ditto.
70076 (JSC::JIT::compileGetByIdSlowCase): ditto.
70077 (JSC::JIT::emit_op_put_by_id): ditto.
70079 2011-02-21 Gavin Barraclough <barraclough@apple.com>
70081 Ruber stamped by Sam Weinig
70083 Bug 54899 - Math.LOG10E should be 0.4342944819032518
70084 This value is quoted in section 15.8.1.5 of the spec.
70086 * runtime/MathObject.cpp:
70087 (JSC::MathObject::MathObject):
70089 2011-02-21 Gavin Barraclough <barraclough@apple.com>
70091 Reviewed by Sam Weinig.
70093 Bug 54894 - Make inheritance structure described by ClassInfo match C++ class hierarchy.
70095 The ClassInfo objects describe an inheritance hierarchy, with each ClassInfo instance
70096 containing a pointer to its parent class. These links should reflect the inheritance
70097 hierarchy of C++ classes below JSObject. For the large part it does, but in some cases
70098 entries in the C++ hierarchy are skipped over. This presently likely doesn't matter,
70099 since intervening C++ classes may not have ClassInfo - but would be a potential bug
70100 were ClassInfo were to be added.
70102 * API/JSCallbackConstructor.cpp:
70103 * API/JSCallbackFunction.cpp:
70104 * API/JSCallbackObjectFunctions.h:
70105 * runtime/Arguments.h:
70106 * runtime/ArrayPrototype.cpp:
70107 * runtime/BooleanObject.cpp:
70108 * runtime/DateInstance.cpp:
70109 * runtime/DatePrototype.cpp:
70110 * runtime/ErrorInstance.cpp:
70111 * runtime/InternalFunction.cpp:
70112 * runtime/JSActivation.cpp:
70113 * runtime/JSArray.cpp:
70114 * runtime/JSFunction.cpp:
70115 * runtime/JSONObject.cpp:
70116 * runtime/JSObject.h:
70117 * runtime/JSZombie.h:
70118 * runtime/MathObject.cpp:
70119 * runtime/NativeErrorConstructor.cpp:
70120 * runtime/NumberConstructor.cpp:
70121 * runtime/NumberObject.cpp:
70122 * runtime/RegExpConstructor.cpp:
70123 * runtime/RegExpObject.cpp:
70124 * runtime/StringObject.cpp:
70125 * runtime/StringPrototype.cpp:
70127 2011-02-21 Adam Roben <aroben@apple.com>
70129 Export JSObject::s_info from JavaScriptCore.dll
70131 This matches what we do for all other ClassInfo objects that WebCore needs access to.
70133 Fixes <http://webkit.org/b/54881> REGRESSION (r79132): Lots of tests crashing in
70134 JSCell::inherits on Windows
70136 Reviewed by Sam Weinig.
70138 * runtime/JSObject.h: Added JS_EXPORTDATA to s_info.
70140 2011-02-21 Kristian Amlie <kristian.amlie@nokia.com>
70142 Reviewed by Andreas Kling.
70144 Switched to compiler based detection, where the error actually is.
70146 It is not the platform that needs the workaround, it is the compiler.
70148 QtWebKit fails to compile on Windows XP with msvc-2008
70149 https://bugs.webkit.org/show_bug.cgi?id=54746
70151 * bytecode/CodeBlock.h:
70152 * runtime/RegExpObject.h:
70154 2011-02-20 Gavin Barraclough <barraclough@apple.com>
70156 Reviewed by Oliver Hunt.
70158 https://bugs.webkit.org/show_bug.cgi?id=54839
70159 Remove PrototypeFunction, NativeFunctionWrapper, and GlobalEvalFunction.
70161 Historically, Native functions used to be represented by PrototypeFunctions, however
70162 since introducing call optimizations to the JIT this has used JSFunctions for host
70163 calls too. At the point this change was made, the interpreter continued to use
70164 PrototypeFunctions, however since fallback from the JIT to interpreter was introduced
70165 the interpreter has had to be able to run using host functions represented using
70166 JSFunctions - leading to an unnecessary and redundant divergence in behaviour between
70167 interpreter only builds, and situations where the JIT has fallen back to interpreting.
70169 NativeFunctionWrapper only existed to select between PrototypeFunction and JSFunction
70170 for wrappers for host functions, and as such can also be removed.
70172 GlobalEvalFunction is a redundant wrapper that happens to be derived from
70173 PrototypeFunction. It existed to hold a reference to the global object - but since all
70174 functions how derive from JSObjectWithGlobalObject, this no longer requires an
70175 additional class to provide this functionality.
70177 * JavaScriptCore.JSVALUE32_64only.exp:
70178 * JavaScriptCore.JSVALUE64only.exp:
70179 * JavaScriptCore.xcodeproj/project.pbxproj:
70180 Removed symbols / references to files.
70182 * runtime/GlobalEvalFunction.cpp: Removed.
70183 * runtime/GlobalEvalFunction.h: Removed.
70184 * runtime/NativeFunctionWrapper.h: Removed.
70185 * runtime/PrototypeFunction.cpp: Removed.
70186 * runtime/PrototypeFunction.h: Removed.
70189 * runtime/Executable.cpp:
70190 (JSC::NativeExecutable::~NativeExecutable):
70191 * runtime/Executable.h:
70192 (JSC::NativeExecutable::create):
70193 (JSC::NativeExecutable::NativeExecutable):
70194 (JSC::JSFunction::nativeFunction):
70195 * runtime/JSFunction.cpp:
70196 (JSC::callHostFunctionAsConstructor):
70197 (JSC::JSFunction::JSFunction):
70198 (JSC::JSFunction::getCallData):
70199 * runtime/JSFunction.h:
70200 * runtime/JSGlobalData.cpp:
70201 (JSC::JSGlobalData::getHostFunction):
70202 * runtime/JSGlobalData.h:
70203 (JSC::JSGlobalData::getCTIStub):
70204 Added interpreter-friendly constructors for NativeExecutables.
70206 * bytecompiler/BytecodeGenerator.cpp:
70207 * interpreter/Interpreter.cpp:
70208 * jit/JITStubs.cpp:
70210 * runtime/ArrayConstructor.cpp:
70211 * runtime/BooleanPrototype.cpp:
70212 * runtime/BooleanPrototype.h:
70213 * runtime/CallData.h:
70214 * runtime/DateConstructor.cpp:
70215 * runtime/DateConstructor.h:
70216 * runtime/ErrorPrototype.cpp:
70217 * runtime/ErrorPrototype.h:
70218 * runtime/FunctionPrototype.cpp:
70219 * runtime/FunctionPrototype.h:
70220 * runtime/JSGlobalObject.cpp:
70221 * runtime/JSGlobalObject.h:
70222 * runtime/JSGlobalObjectFunctions.cpp:
70223 * runtime/Lookup.cpp:
70224 * runtime/NumberPrototype.cpp:
70225 * runtime/NumberPrototype.h:
70226 * runtime/ObjectConstructor.cpp:
70227 * runtime/ObjectConstructor.h:
70228 * runtime/ObjectPrototype.cpp:
70229 * runtime/ObjectPrototype.h:
70230 * runtime/RegExpPrototype.cpp:
70231 * runtime/RegExpPrototype.h:
70232 * runtime/SmallStrings.h:
70233 * runtime/StringConstructor.cpp:
70234 * runtime/StringConstructor.h:
70235 Removed use of redundant classes.
70237 2011-02-19 Laszlo Gombos <laszlo.1.gombos@nokia.com>
70239 Unreviewed build fix for Symbian.
70241 [Symbian] Revert the removal of linking
70242 against hal after r79126.
70244 Dependency on the hal library can not be removed
70245 as it is still used (e.g. in MarkStackSymbian.cpp).
70247 * JavaScriptCore.pri:
70249 2011-02-19 Gavin Barraclough <barraclough@apple.com>
70251 Interpreter build fix.
70253 * runtime/ArrayConstructor.cpp:
70254 * runtime/BooleanPrototype.cpp:
70255 * runtime/DateConstructor.cpp:
70256 * runtime/ErrorPrototype.cpp:
70257 * runtime/FunctionPrototype.cpp:
70258 * runtime/Lookup.cpp:
70259 * runtime/NumberPrototype.cpp:
70260 * runtime/ObjectConstructor.cpp:
70261 * runtime/ObjectPrototype.cpp:
70262 * runtime/RegExpPrototype.cpp:
70263 * runtime/StringConstructor.cpp:
70265 2011-02-19 Gavin Barraclough <barraclough@apple.com>
70269 * JavaScriptCore.exp:
70271 2011-02-19 Gavin Barraclough <barraclough@apple.com>
70273 Windows build fix!!
70275 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
70277 2011-02-19 Gavin Barraclough <barraclough@apple.com>
70281 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
70283 2011-02-19 Gavin Barraclough <barraclough@apple.com>
70287 * JavaScriptCore.exp:
70289 2011-02-18 Gavin Barraclough <barraclough@apple.com>
70291 Reviewed by Sam Weinig.
70293 Bug 54786 - Devirtualize JSCell::classInfo()
70295 Instead of making a virtual function call, add a pointer to the ClassInfo
70298 This removes a virtual function call, and paves the way towards removing all
70299 the createStructure methods, and StructureFlags/AnonymousSlotCount properties
70300 (these should be able to move onto ClassInfo).
70302 Calls to Structure::create must now pass a pointer to the ClassInfo for the
70303 structure. All objects now have a ClassInfo pointer, non-object cell types
70306 Changes are most mechanical, involving three steps:
70307 * Remove virtual classInfo() methods.
70308 * Add &s_info parameter to calls to Structure::create.
70309 * Rename ClassInfo static members on classes from 'info' to 's_info',
70312 * API/JSCallbackConstructor.cpp:
70313 * API/JSCallbackConstructor.h:
70314 * API/JSCallbackFunction.cpp:
70315 * API/JSCallbackFunction.h:
70316 * API/JSCallbackObject.cpp:
70317 * API/JSCallbackObject.h:
70318 * API/JSCallbackObjectFunctions.h:
70319 * API/JSObjectRef.cpp:
70320 * API/JSValueRef.cpp:
70321 * API/JSWeakObjectMapRefPrivate.cpp:
70322 * JavaScriptCore.exp:
70323 * debugger/Debugger.cpp:
70324 * debugger/DebuggerActivation.h:
70325 * debugger/DebuggerCallFrame.cpp:
70326 * interpreter/Interpreter.cpp:
70327 * jit/JITCall32_64.cpp:
70328 * jit/JITOpcodes.cpp:
70329 * jit/JITStubs.cpp:
70330 * profiler/Profiler.cpp:
70331 * runtime/Arguments.cpp:
70332 * runtime/Arguments.h:
70333 * runtime/ArrayConstructor.cpp:
70334 * runtime/ArrayPrototype.cpp:
70335 * runtime/ArrayPrototype.h:
70336 * runtime/BooleanObject.cpp:
70337 * runtime/BooleanObject.h:
70338 * runtime/BooleanPrototype.cpp:
70339 * runtime/DateConstructor.cpp:
70340 * runtime/DateInstance.cpp:
70341 * runtime/DateInstance.h:
70342 * runtime/DatePrototype.cpp:
70343 * runtime/DatePrototype.h:
70344 * runtime/ErrorInstance.cpp:
70345 * runtime/ErrorInstance.h:
70346 * runtime/ErrorPrototype.cpp:
70347 * runtime/FunctionPrototype.cpp:
70348 * runtime/FunctionPrototype.h:
70349 * runtime/GetterSetter.h:
70350 * runtime/GlobalEvalFunction.h:
70351 * runtime/InternalFunction.cpp:
70352 * runtime/InternalFunction.h:
70353 * runtime/JSAPIValueWrapper.h:
70354 * runtime/JSActivation.cpp:
70355 * runtime/JSActivation.h:
70356 * runtime/JSArray.cpp:
70357 * runtime/JSArray.h:
70358 * runtime/JSByteArray.cpp:
70359 * runtime/JSByteArray.h:
70360 * runtime/JSCell.cpp:
70361 * runtime/JSCell.h:
70362 * runtime/JSFunction.cpp:
70363 * runtime/JSFunction.h:
70364 * runtime/JSGlobalData.cpp:
70365 * runtime/JSGlobalObject.cpp:
70366 * runtime/JSGlobalObject.h:
70367 * runtime/JSNotAnObject.h:
70368 * runtime/JSONObject.cpp:
70369 * runtime/JSONObject.h:
70370 * runtime/JSObject.cpp:
70371 * runtime/JSObject.h:
70372 * runtime/JSObjectWithGlobalObject.h:
70373 * runtime/JSPropertyNameIterator.h:
70374 * runtime/JSStaticScopeObject.h:
70375 * runtime/JSString.h:
70376 * runtime/JSVariableObject.h:
70377 * runtime/JSWrapperObject.h:
70378 * runtime/JSZombie.cpp:
70379 * runtime/JSZombie.h:
70380 * runtime/Lookup.cpp:
70381 * runtime/MathObject.cpp:
70382 * runtime/MathObject.h:
70383 * runtime/NativeErrorConstructor.cpp:
70384 * runtime/NativeErrorConstructor.h:
70385 * runtime/NumberConstructor.cpp:
70386 * runtime/NumberConstructor.h:
70387 * runtime/NumberObject.cpp:
70388 * runtime/NumberObject.h:
70389 * runtime/NumberPrototype.cpp:
70390 * runtime/ObjectConstructor.cpp:
70391 * runtime/ObjectPrototype.cpp:
70392 * runtime/RegExpConstructor.cpp:
70393 * runtime/RegExpConstructor.h:
70394 * runtime/RegExpObject.cpp:
70395 * runtime/RegExpObject.h:
70396 * runtime/RegExpPrototype.cpp:
70397 * runtime/ScopeChain.cpp:
70398 * runtime/StringConstructor.cpp:
70399 * runtime/StringObject.cpp:
70400 * runtime/StringObject.h:
70401 * runtime/StringObjectThatMasqueradesAsUndefined.h:
70402 * runtime/StringPrototype.cpp:
70403 * runtime/StringPrototype.h:
70404 * runtime/Structure.cpp:
70405 * runtime/Structure.h:
70407 2011-02-19 David Kilzer <ddkilzer@apple.com>
70409 <http://webkit.org/b/54808> Change jsc target to build directly into JavaScriptCore.framework/Resources/jsc
70411 Reviewed by Dan Bernstein.
70413 * Configurations/Base.xcconfig: Added
70414 JAVASCRIPTCORE_FRAMEWORKS_DIR variable.
70415 * Configurations/JavaScriptCore.xcconfig: Used
70416 JAVASCRIPTCORE_FRAMEWORKS_DIR to define INSTALL_PATH.
70417 * JavaScriptCore.xcodeproj/project.pbxproj: Set the INSTALL_PATH
70418 for Production configuration of jsc target.
70419 (Copy Into Framework): Removed old build phase.
70420 (Fix Framework Reference): Renamed build phase to "Copy Into
70421 Framework". Added "set -x" call to make the script print the
70422 commands it is running. Added code to exit early for Production
70423 builds since this was never intended for them. Added code to
70424 copy jsc into the JavaScriptCore.framework/Resources directory.
70426 2011-02-19 Siddharth Mathur <siddharth.mathur@nokia.com>
70428 Reviewed by Laszlo Gombos.
70430 [Symbian] OSAllocator implementation for Symbian OS.
70431 Manages both data and code region requests. V8 and Sunspider tested
70432 OK with interpreter. Not tested with JSC JIT yet as it has unrelated
70433 failures. Also no thread safety yet.
70434 https://bugs.webkit.org/show_bug.cgi?id=51128
70436 * JavaScriptCore.pri: removed HAL linkage
70438 (WTF::::findRunOfZeros): find run of zeros in a bitmap. quick n dirty
70439 * wtf/OSAllocator.h:
70440 (WTF::OSAllocator::decommitAndRelease): decommit explicitly
70441 * wtf/OSAllocatorSymbian.cpp: Impl. of OSAllocator interface
70442 (WTF::allocateCodeChunk): utility for code chunks
70443 (WTF::deallocateCodeChunk): utility for code chunks
70444 (WTF::dataAllocatorInstance): getter for data allocator instance
70445 (WTF::OSAllocator::reserveUncommitted):
70446 (WTF::OSAllocator::releaseDecommitted):
70447 (WTF::OSAllocator::commit):
70448 (WTF::OSAllocator::decommit):
70449 (WTF::OSAllocator::reserveAndCommit):
70450 (WTF::PageAllocatorSymbian::PageAllocatorSymbian): maps requests
70451 to one underlying Symbian chunk
70452 (WTF::PageAllocatorSymbian::~PageAllocatorSymbian):
70453 (WTF::PageAllocatorSymbian::reserve):
70454 (WTF::PageAllocatorSymbian::release):
70455 (WTF::PageAllocatorSymbian::commit):
70456 (WTF::PageAllocatorSymbian::decommit):
70457 (WTF::PageAllocatorSymbian::contains):
70458 * wtf/PageAllocatorSymbian.h: Added.
70459 (WTF::SymbianChunk::SymbianChunk): wrapper around RChunk
70460 (WTF::SymbianChunk::~SymbianChunk):
70461 (WTF::SymbianChunk::contains):
70463 2011-02-19 Yong Li <yoli@rim.com>
70465 Reviewed by Eric Seidel.
70467 https://bugs.webkit.org/show_bug.cgi?id=54687
70468 When being built with armcc, "int" bit fields are treated as
70469 unsigned integers, which will fail the comparisons like "m_offset == -1".
70470 Using "signed" fixes the problem.
70472 * assembler/ARMAssembler.h:
70473 * assembler/ARMv7Assembler.h:
70475 2011-02-18 Geoffrey Garen <ggaren@apple.com>
70477 Reviewed by Sam Weinig.
70479 Made MarkedSpace block iteration size-class agnostic
70480 https://bugs.webkit.org/show_bug.cgi?id=54792
70482 SunSpider reports no change.
70484 * runtime/MarkedSpace.cpp:
70485 (JSC::MarkedSpace::clearMarks):
70486 (JSC::MarkedSpace::sweep):
70487 (JSC::MarkedSpace::objectCount):
70488 (JSC::MarkedSpace::size):
70489 (JSC::MarkedSpace::capacity):
70490 * runtime/MarkedSpace.h:
70491 (JSC::MarkedSpace::forEach): Iterate blocks in hashing order instead of
70492 size class list order. This is a much simpler convention in a world
70493 of many different size classes.
70495 2011-02-18 Kristian Amlie <kristian.amlie@nokia.com>
70497 Reviewed by Andreas Kling.
70499 Added friend exception to Qt platform, which also compiles Windows.
70501 QtWebKit fails to compile on Windows XP with msvc-2008
70502 https://bugs.webkit.org/show_bug.cgi?id=54746
70504 * bytecode/CodeBlock.h:
70505 * runtime/RegExpObject.h:
70507 2011-02-18 Geoffrey Garen <ggaren@apple.com>
70509 (Rolled back in r79022 with crash fixed.)
70511 Reviewed by Sam Weinig.
70513 Use hashing instead of linear search in the conservative pointer test
70514 https://bugs.webkit.org/show_bug.cgi?id=54767
70516 SunSpider reports no change.
70518 * runtime/MarkedSpace.cpp:
70519 (JSC::MarkedSpace::destroy): No need to explicitly clear the blocks array,
70520 since freeBlock removes items for us.
70522 (JSC::MarkedSpace::freeBlock): Fixed a typo that always removed the last
70523 block from the block set instead of the block being freed. Changed to
70524 remove a block from our data structures before deallocating it, since
70525 this is slightly cleaner.
70527 * runtime/MarkedSpace.h:
70528 (JSC::MarkedSpace::contains): Variable-sized objects will use more,
70529 smaller blocks, so it's important for the contains check not to be O(n)
70530 in the number of blocks.
70532 2011-02-18 chris reiss <christopher.reiss@nokia.com>
70534 Reviewed by Andreas Kling.
70536 REGRESSION: Date.parse("Tue Nov 23 20:40:05 2010 GMT") returns NaN
70537 https://bugs.webkit.org/show_bug.cgi?id=49989
70539 updated test fast/js/script-tests/date-parse-test.js
70541 * wtf/DateMath.cpp:
70542 (WTF::parseDateFromNullTerminatedCharacters):
70544 2011-02-18 Sheriff Bot <webkit.review.bot@gmail.com>
70546 Unreviewed, rolling out r79022.
70547 http://trac.webkit.org/changeset/79022
70548 https://bugs.webkit.org/show_bug.cgi?id=54775
70550 It broke the whole world (Requested by Ossy on #webkit).
70552 * runtime/MarkedSpace.h:
70553 (JSC::MarkedSpace::contains):
70555 2011-02-18 Yael Aharon <yael.aharon@nokia.com>
70557 Reviewed by Dave Hyatt.
70559 Add support for dir=auto
70560 https://bugs.webkit.org/show_bug.cgi?id=50916
70562 Change defaultWritingDirection() to return if the writing direction
70563 was determined from a letter with strong directionality or not.
70565 * JavaScriptCore.exp:
70566 * JavaScriptCore.order:
70567 * wtf/text/StringImpl.cpp:
70568 (WTF::StringImpl::defaultWritingDirection):
70569 * wtf/text/StringImpl.h:
70570 * wtf/text/WTFString.h:
70571 (WTF::String::defaultWritingDirection):
70573 2011-02-18 Geoffrey Garen <ggaren@apple.com>
70575 Reviewed by Sam Weinig.
70577 Use hashing instead of linear search in the conservative pointer test
70578 https://bugs.webkit.org/show_bug.cgi?id=54767
70580 SunSpider reports no change.
70582 * runtime/MarkedSpace.h:
70583 (JSC::MarkedSpace::contains): Variable-sized objects will use more,
70584 smaller blocks, so it's important for the contains check not to be O(n)
70585 in the number of blocks.
70587 2011-02-18 Geoffrey Garen <ggaren@apple.com>
70589 Reviewed by Sam Weinig.
70591 Tightened some usage accounting code in MarkedSpace
70592 https://bugs.webkit.org/show_bug.cgi?id=54761
70594 SunSpider reports no change.
70596 * runtime/Heap.cpp:
70597 (JSC::Heap::Heap): Initialize the marked space high water mark on
70598 construction, instead of relying on some implicit subtleties to make
70599 not initializing it work out OK.
70601 * runtime/Heap.h: Fixed up includes.
70603 * runtime/MarkedBlock.h: Made firstAtom() static so clients can call it
70604 even without having allocated a block.
70606 * runtime/MarkedSpace.cpp:
70607 (JSC::MarkedSpace::MarkedSpace): Don't pre-allocate a block, since this
70608 would be prohibitively expensive with multiple size classes.
70610 (JSC::MarkedSpace::allocateBlock):
70611 (JSC::MarkedSpace::freeBlock): Track allocated blocks in a hash set,
70612 since linear search in the contains check will be prohibitively
70613 expensive once we're using lots of smaller blocks.
70615 (JSC::MarkedSpace::allocate): Don't assume that we always have a block
70616 allocated, since we don't anymore. (See above.)
70618 (JSC::MarkedSpace::reset):
70619 * runtime/MarkedSpace.h: Updated for changes mentioned above.
70621 2011-02-17 Geoffrey Garen <ggaren@apple.com>
70623 Reviewed by Sam Weinig.
70625 Made object allocation secretly variable-sized (Shhhh!)
70626 https://bugs.webkit.org/show_bug.cgi?id=54721
70628 SunSpider reports no change.
70630 Internally, MarkedBlock now makes variable-sized allocations, even
70631 though MarkedSpace doesn't take advantage of this yet.
70633 * runtime/MarkedBlock.cpp:
70634 (JSC::MarkedBlock::MarkedBlock): No need to ASSERT that allocations are
70637 * runtime/MarkedBlock.h: Shrunk the atom size so we can allocate things
70638 that are not multiples of 64 bytes.
70640 2011-02-17 Geoffrey Garen <ggaren@apple.com>
70642 Reviewed by Sam Weinig.
70644 Fixed some math errors when when using variable-sized cells
70645 https://bugs.webkit.org/show_bug.cgi?id=54717
70647 SunSpider reports no change.
70649 Computer Science Barbie says, "Math is not so hard afterall!"
70651 * runtime/JSCell.h:
70652 (JSC::JSCell::MarkedBlock::allocate): Round up when calculating the
70653 minimum number of atoms required for a cell, since rounding down
70654 will get you splinched.
70656 * runtime/MarkedBlock.cpp:
70657 (JSC::MarkedBlock::MarkedBlock):
70658 (JSC::MarkedBlock::sweep):
70659 * runtime/MarkedBlock.h:
70660 (JSC::MarkedBlock::forEach): Changed a bunch of != tests to < tests
70661 because m_endAtom is actually a fuzzy end -- iterating from firstAtom()
70662 may not hit m_endAtom exactly.
70664 2011-02-17 Geoffrey Garen <ggaren@apple.com>
70666 Reviewed by Sam Weinig.
70668 A little more abstraction for MarkedSpace::contains
70669 https://bugs.webkit.org/show_bug.cgi?id=54715
70671 * runtime/MarkedBlock.h:
70672 (JSC::MarkedBlock::contains): Added a contains function, so MarkedSpace
70673 doesn't have to know how MarkedBlock tracks containment internally.
70675 * runtime/MarkedSpace.h:
70676 (JSC::MarkedSpace::contains): Call through to MarkedBlock to figure out
70677 if a cell that seems to be in a block is valid.
70679 2011-02-17 Geoffrey Garen <ggaren@apple.com>
70681 Reviewed by Sam Weinig.
70683 Removed the invariant that the last cell in a block is always marked
70684 https://bugs.webkit.org/show_bug.cgi?id=54713
70686 SunSpider reports no change.
70688 This adds one branch to allocation, but simplifies the mark invariant,
70689 especially in a world of variable-sized cells. Now, it really is true
70690 that any cell whose mark bit is set is a valid, live cell whose
70691 constructor has run and whose destructor has not run.
70693 * runtime/JSCell.h:
70694 (JSC::JSCell::MarkedBlock::allocate): Changed this do-while into a while
70695 since we can no longer rely on a set mark bit to break out of this loop
70696 before it reaches the end of the block.
70698 * runtime/MarkedBlock.cpp:
70699 (JSC::MarkedBlock::MarkedBlock):
70700 (JSC::MarkedBlock::sweep):
70701 * runtime/MarkedBlock.h:
70702 (JSC::MarkedBlock::isEmpty):
70703 (JSC::MarkedBlock::clearMarks):
70704 (JSC::MarkedBlock::markCount):
70705 (JSC::MarkedBlock::forEach): No need to set a special last mark bit.
70707 2011-02-17 Sheriff Bot <webkit.review.bot@gmail.com>
70709 Unreviewed, rolling out r78856 and r78907.
70710 http://trac.webkit.org/changeset/78856
70711 http://trac.webkit.org/changeset/78907
70712 https://bugs.webkit.org/show_bug.cgi?id=54705
70714 These seem to break tests on 32-bit builds. (Requested by
70715 aroben on #webkit).
70717 * JavaScriptCore.xcodeproj/project.pbxproj:
70718 * collector/handles/Global.h:
70719 (JSC::Global::internalSet):
70720 * collector/handles/Handle.h:
70721 (JSC::HandleTypes::getFromSlot):
70722 (JSC::HandleTypes::toJSValue):
70723 (JSC::HandleTypes::validateUpcast):
70724 (JSC::HandleConverter::operator->):
70725 (JSC::HandleConverter::operator*):
70726 (JSC::Handle::Handle):
70727 (JSC::Handle::get):
70728 * runtime/JSArray.cpp:
70729 (JSC::JSArray::sortNumeric):
70730 * runtime/JSObject.h:
70731 (JSC::JSObject::inlineGetOwnPropertySlot):
70732 * runtime/SlotAccessor.h: Removed.
70733 * runtime/WeakGCPtr.h:
70734 (JSC::WeakGCPtr::get):
70735 (JSC::WeakGCPtr::internalSet):
70736 * runtime/WriteBarrier.h:
70737 (JSC::DeprecatedPtr::DeprecatedPtr):
70738 (JSC::DeprecatedPtr::get):
70739 (JSC::DeprecatedPtr::operator*):
70740 (JSC::DeprecatedPtr::operator->):
70741 (JSC::DeprecatedPtr::slot):
70742 (JSC::DeprecatedPtr::operator UnspecifiedBoolType*):
70743 (JSC::DeprecatedPtr::operator!):
70744 (JSC::WriteBarrierBase::set):
70745 (JSC::WriteBarrierBase::get):
70746 (JSC::WriteBarrierBase::operator*):
70747 (JSC::WriteBarrierBase::operator->):
70748 (JSC::WriteBarrierBase::clear):
70749 (JSC::WriteBarrierBase::slot):
70750 (JSC::WriteBarrierBase::operator UnspecifiedBoolType*):
70751 (JSC::WriteBarrierBase::operator!):
70752 (JSC::WriteBarrierBase::setWithoutWriteBarrier):
70753 (JSC::WriteBarrier::WriteBarrier):
70755 2011-02-17 Csaba Osztrogonác <ossy@webkit.org>
70761 * wtf/RetainPtr.h: Add missing PLATFORM(CF) guard.
70763 2011-02-17 Geoffrey Garen <ggaren@apple.com>
70765 Reviewed by Oliver Hunt.
70767 Made MarkedBlock variable-sized
70768 https://bugs.webkit.org/show_bug.cgi?id=54692
70770 SunSpider reports no change.
70772 Each MarkedBlock is now composed of a set of fixed-sized atoms, with one
70773 mark bit per atom. A given cell may be composed of one or more atoms.
70775 * runtime/Heap.cpp:
70776 (JSC::Heap::allocate): Made fixed-sizedness a property of MarkedSpace,
70777 bubbling it up from MarkedBlock, since MarkedBlock now supports variable-
70780 * runtime/JSCell.h:
70781 (JSC::JSCell::MarkedBlock::allocate): Removed use of CELLS_PER_BLOCK and
70782 (implicit) one constants -- these quantities are not constant anymore.
70783 Updated for switch from cell to atom.
70785 * runtime/MarkedBlock.cpp:
70786 (JSC::MarkedBlock::create):
70787 (JSC::MarkedBlock::destroy):
70788 (JSC::MarkedBlock::MarkedBlock):
70789 (JSC::MarkedBlock::sweep):
70790 * runtime/MarkedBlock.h:
70791 (JSC::MarkedBlock::firstAtom):
70792 (JSC::MarkedBlock::atoms):
70793 (JSC::MarkedBlock::isAtomAligned):
70794 (JSC::MarkedBlock::blockFor):
70795 (JSC::MarkedBlock::isEmpty):
70796 (JSC::MarkedBlock::clearMarks):
70797 (JSC::MarkedBlock::size):
70798 (JSC::MarkedBlock::capacity):
70799 (JSC::MarkedBlock::atomNumber):
70800 (JSC::MarkedBlock::isMarked):
70801 (JSC::MarkedBlock::testAndSetMarked):
70802 (JSC::MarkedBlock::setMarked):
70803 (JSC::MarkedBlock::forEach): Same as above. Also removed use of CELL_SIZE
70804 and BLOCK_SIZE, and switched away from calling arbitrary pointers cells.
70806 * runtime/MarkedSpace.cpp:
70807 (JSC::MarkedSpace::MarkedSpace):
70808 (JSC::MarkedSpace::allocateBlock):
70809 (JSC::MarkedSpace::allocate):
70810 (JSC::MarkedSpace::reset):
70811 * runtime/MarkedSpace.h:
70812 (JSC::CollectorHeap::CollectorHeap):
70813 (JSC::MarkedSpace::contains): Updated for renames. Made fixed-sizedness
70814 a property of MarkedSpace.
70816 2011-02-17 Oliver Hunt <oliver@apple.com>
70818 Attempt to fix windows build
70820 * runtime/WriteBarrier.h:
70822 2011-02-17 Oliver Hunt <oliver@apple.com>
70824 Reviewed by Geoffrey Garen.
70826 Refactor WriteBarrier and DeprecatedPtr to have less code duplication.
70827 https://bugs.webkit.org/show_bug.cgi?id=54608
70829 Make use of the tricks used for Handle, et al to avoid duplicating all
70830 of the logic for DeprecatedPtr and WriteBarrier simply to support known
70833 * JavaScriptCore.xcodeproj/project.pbxproj:
70834 * collector/handles/Global.h:
70835 (JSC::Global::internalSet):
70836 * collector/handles/Handle.h:
70837 (JSC::Handle::Handle):
70838 (JSC::Handle::get):
70839 * runtime/JSArray.cpp:
70840 (JSC::JSArray::sortNumeric):
70841 * runtime/JSObject.h:
70842 (JSC::JSObject::inlineGetOwnPropertySlot):
70843 * runtime/SlotAccessor.h: Added.
70844 (JSC::SlotTypes::getFromBaseType):
70845 (JSC::SlotTypes::convertToBaseType):
70846 (JSC::SlotTypes::getFromSlot):
70847 (JSC::SlotTypes::toJSValue):
70848 (JSC::SlotTypes::validateUpcast):
70849 (JSC::SlotAccessor::operator->):
70850 (JSC::SlotAccessor::operator*):
70851 * runtime/WeakGCPtr.h:
70852 (JSC::WeakGCPtr::get):
70853 (JSC::WeakGCPtr::internalSet):
70854 * runtime/WriteBarrier.h:
70855 (JSC::DeprecatedPtr::DeprecatedPtr):
70856 (JSC::DeprecatedPtr::get):
70857 (JSC::DeprecatedPtr::slot):
70858 (JSC::DeprecatedPtr::operator=):
70859 (JSC::WriteBarrierTranslator::convertToStorage):
70860 (JSC::WriteBarrierTranslator::convertFromStorage):
70861 (JSC::WriteBarrierBase::set):
70862 (JSC::WriteBarrierBase::get):
70863 (JSC::WriteBarrierBase::clear):
70864 (JSC::WriteBarrierBase::slot):
70865 (JSC::WriteBarrierBase::operator UnspecifiedBoolType*):
70866 (JSC::WriteBarrierBase::operator!):
70867 (JSC::WriteBarrierBase::setWithoutWriteBarrier):
70868 (JSC::WriteBarrier::WriteBarrier):
70870 2011-02-17 Kevin Ollivier <kevino@theolliviers.com>
70872 [wx] Revert incorrect blind fix and restore previous working code.
70874 * wtf/wx/StringWx.cpp:
70875 (WTF::String::String):
70877 2011-02-16 Geoffrey Garen <ggaren@apple.com>
70879 Reviewed by Maciej Stachowiak.
70881 Intermittent crashes beneath MarkStack::drain
70882 https://bugs.webkit.org/show_bug.cgi?id=54614
70883 <rdar://problem/8971070>
70885 The crashes were caused by a GC happening after the global object's
70886 property table had grown (due to compilation), but before the properties
70887 had been fully initialized by program execution.
70889 * bytecompiler/BytecodeGenerator.cpp:
70890 (JSC::BytecodeGenerator::BytecodeGenerator): Explicitly resize the global
70891 object's register storage immediately, without waiting for program
70892 execution to do it for us. This ensures that the global object's count
70893 of global variables is consistent with the size of its global variable
70894 storage at all times, and it ensures that all global variables are
70895 properly initialized from the get-go.
70897 * runtime/JSGlobalObject.cpp:
70898 (JSC::JSGlobalObject::resizeRegisters):
70899 * runtime/JSGlobalObject.h: Added a helper function for growing the
70900 global object's register storage, and initializing new registers.
70902 == Rolled over to ChangeLog-2011-02-16 ==