2e9d6b87be9efe261bcf4e6d278347698ae57955
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2012-04-10  Darin Adler  <darin@apple.com>
2
3         Remove unused data member from Lexer class
4         https://bugs.webkit.org/show_bug.cgi?id=83429
5
6         Reviewed by Kentaro Hara.
7
8         I noticed that m_delimited was "write-only", so I deleted it.
9
10         * parser/Lexer.cpp:
11         (JSC::Lexer::setCode): Removed code to set m_delimited.
12         (JSC::Lexer::parseIdentifier): Ditto.
13         (JSC::Lexer::parseIdentifierSlowCase): Ditto.
14         (JSC::Lexer::lex): Ditto.
15         * parser/Lexer.h: Deleted m_delimited.
16
17 2012-04-10  Patrick Gansterer  <paroga@webkit.org>
18
19         [CMake] Enable USE_FOLDERS property
20         https://bugs.webkit.org/show_bug.cgi?id=83571
21
22         Reviewed by Daniel Bates.
23
24         Setting the FOLDER property on targets gives more structure 
25         to the generated Visual Studio solutions.
26         This does not affect other CMake generators.
27
28         * CMakeLists.txt:
29         * shell/CMakeLists.txt:
30
31 2012-04-10  Filip Pizlo  <fpizlo@apple.com>
32
33         It should be possible to see why a code block was not compiled by the DFG
34         https://bugs.webkit.org/show_bug.cgi?id=83553
35
36         Reviewed by Geoff Garen.
37         
38         If DFG_ENABLE(DEBUG_VERBOSE) and a code block is rejected, then print the
39         opcode that caused the rejection.
40
41         * dfg/DFGCapabilities.cpp:
42         (JSC::DFG::debugFail):
43         (DFG):
44         (JSC::DFG::canHandleOpcodes):
45
46 2012-04-09  Gavin Barraclough  <barraclough@apple.com>
47
48         If a callback constructor returns a C++ null, throw a type error.
49         https://bugs.webkit.org/show_bug.cgi?id=83537
50
51         Rubber Stamped by Geoff Garen.
52
53         * API/JSCallbackConstructor.cpp:
54         (JSC::constructJSCallback):
55             - If a callback constructor returns a C++ null, throw a type error.
56         * API/tests/testapi.c:
57         (Base_returnHardNull):
58         * API/tests/testapi.js:
59             - Add a test case for callback constructors that return a C++ null.
60
61 2012-04-09  Gavin Barraclough  <barraclough@apple.com>
62
63         If a callback function returns a C++ null, convert to undefined.
64         https://bugs.webkit.org/show_bug.cgi?id=83534
65
66         Reviewed by Geoff Garen.
67
68         * API/JSCallbackFunction.cpp:
69             - If a callback function returns a C++ null, convert to undefined.
70         (JSC::JSCallbackFunction::call):
71         * API/tests/testapi.c:
72         (Base_returnHardNull):
73         * API/tests/testapi.js:
74             - Add a test case for callback functions that return a C++ null.
75
76 2012-04-09  Filip Pizlo  <fpizlo@apple.com>
77
78         Classic interpreter's GC hooks shouldn't attempt to scan instructions for code blocks that
79         are currently being generated
80         https://bugs.webkit.org/show_bug.cgi?id=83531
81         <rdar://problem/11215200>
82
83         Reviewed by Gavin Barraclough.
84
85         * bytecode/CodeBlock.cpp:
86         (JSC::CodeBlock::stronglyVisitStrongReferences):
87
88 2012-04-09  Filip Pizlo  <fpizlo@apple.com>
89
90         Unreviewed, modernize and clean up uses of ARM assembly mnemonics in inline asm blocks.
91
92         * dfg/DFGOperations.cpp:
93         (JSC):
94         * offlineasm/armv7.rb:
95
96 2012-04-09  Patrick Gansterer  <paroga@webkit.org>
97
98         Remove HAVE_STDINT_H
99         https://bugs.webkit.org/show_bug.cgi?id=83434
100
101         Reviewed by Kentaro Hara.
102
103         HAVE_STDINT_H is defined with 1 all the time and we us stdint.h without HAVE(STDINT_H) already.
104
105         * config.h:
106
107 2012-04-08  Filip Pizlo  <fpizlo@apple.com>
108
109         DFG should not load the property storage if it is inline.
110         https://bugs.webkit.org/show_bug.cgi?id=83455
111
112         Reviewed by Gavin Barraclough.
113         
114         We had previously decided to have all property storage accesses go through
115         the property storage pointer even if they don't "really" have to, because
116         we were thinking this would help GC barriers somehow. Well, we never ended
117         up doing anything with that. Hence, doing these wasted loads of the
118         property storage pointer when the storage is inline is just a waste of CPU
119         cycles.
120         
121         This change makes the DFG's inline property accesses (GetByOffset and
122         PutByOffset) go directly to the inline property storage if the structure(s)
123         tell us that it's OK.
124         
125         This looks like an across-the-board 1% win.
126
127         * bytecode/StructureSet.h:
128         (JSC):
129         (JSC::StructureSet::allAreUsingInlinePropertyStorage):
130         (StructureSet):
131         * dfg/DFGByteCodeParser.cpp:
132         (JSC::DFG::ByteCodeParser::parseBlock):
133         * dfg/DFGSpeculativeJIT.cpp:
134         (JSC::DFG::SpeculativeJIT::fillStorage):
135
136 2012-04-08  Filip Pizlo  <fpizlo@apple.com>
137
138         Command-line jsc's exception handling should be rationalized
139         https://bugs.webkit.org/show_bug.cgi?id=83437
140
141         Reviewed by Dan Bernstein.
142         
143         - If an exception is thrown during run() execution, it is now propagated,
144           so that it will terminate program execution unless it is caught.
145           
146         - If program execution terminates with an exception, the exception is now
147           always printed.
148           
149         - When printing the exception, the backtrace is now also printed if one is
150           available. It will only not be available if you use something akin to my
151           favorite line of code, 'throw "error"', since primitives don't have
152           properties and hence we cannot attach a "stack" property to them.
153
154         * jsc.cpp:
155         (functionRun):
156         (runWithScripts):
157
158 2012-04-04  Filip Pizlo  <fpizlo@apple.com>
159
160         Forced OSR exits should lead to recompilation based on count, not rate
161         https://bugs.webkit.org/show_bug.cgi?id=83247
162         <rdar://problem/10720925>
163
164         Reviewed by Geoff Garen.
165         
166         Track which OSR exits happen because of inadequate coverage. Count them
167         separately. If the count reaches a threshold, immediately trigger
168         reoptimization.
169         
170         This is in contrast to the recompilation trigger for all other OSR exits.
171         Normally recomp is triggered when the exit rate exceeds a certain ratio.
172         
173         Looks like a slight V8 speedup (sub 1%).
174
175         * bytecode/CodeBlock.cpp:
176         (JSC::CodeBlock::CodeBlock):
177         * bytecode/CodeBlock.h:
178         (JSC::CodeBlock::forcedOSRExitCounter):
179         (JSC::CodeBlock::addressOfForcedOSRExitCounter):
180         (JSC::CodeBlock::offsetOfForcedOSRExitCounter):
181         (JSC::CodeBlock::shouldReoptimizeNow):
182         (JSC::CodeBlock::shouldReoptimizeFromLoopNow):
183         (CodeBlock):
184         * bytecode/DFGExitProfile.h:
185         (JSC::DFG::exitKindToString):
186         * dfg/DFGOSRExitCompiler.cpp:
187         (JSC::DFG::OSRExitCompiler::handleExitCounts):
188         (DFG):
189         * dfg/DFGOSRExitCompiler.h:
190         (OSRExitCompiler):
191         * dfg/DFGOSRExitCompiler32_64.cpp:
192         (JSC::DFG::OSRExitCompiler::compileExit):
193         * dfg/DFGOSRExitCompiler64.cpp:
194         (JSC::DFG::OSRExitCompiler::compileExit):
195         * dfg/DFGOperations.cpp:
196         * dfg/DFGSpeculativeJIT.cpp:
197         (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
198         * dfg/DFGSpeculativeJIT32_64.cpp:
199         (JSC::DFG::SpeculativeJIT::compile):
200         * dfg/DFGSpeculativeJIT64.cpp:
201         (JSC::DFG::SpeculativeJIT::compile):
202         * runtime/Options.cpp:
203         (Options):
204         (JSC::Options::initializeOptions):
205         * runtime/Options.h:
206         (Options):
207
208 2012-04-06  Benjamin Poulain  <bpoulain@apple.com>
209
210         Do not abuse ArrayStorage's m_length for testing array consistency
211         https://bugs.webkit.org/show_bug.cgi?id=83403
212
213         Reviewed by Geoffrey Garen.
214
215         Array creation from a list of values is a 3 steps process:
216         -JSArray::tryCreateUninitialized()
217         -JSArray::initializeIndex() for each values
218         -JSArray::completeInitialization()
219
220         Previously, the attribute m_length was not set to the final size
221         JSArray::tryCreateUninitialized() because it was used to test the array
222         consistency JSArray::initializeIndex().
223
224         This caused the initialization loop using JSArray::initializeIndex() maintain
225         two counters:
226         -index of the loop
227         -storage->m_length++
228
229         This patch fixes this by using the index of the initialization loop for the indinces of
230         JSArray::initializeIndex(). For testing consistency, the variable m_initializationIndex
231         is introduced if CHECK_ARRAY_CONSISTENCY is defined.
232
233         The patch also fixes minor unrelated build issue when CHECK_ARRAY_CONSISTENCY is defined.
234
235         This improves the performance of JSArray creation from literals by 8%.
236
237         * runtime/JSArray.cpp:
238         (JSC::JSArray::tryFinishCreationUninitialized):
239         (JSC::JSArray::checkConsistency):
240         * runtime/JSArray.h:
241         (ArrayStorage):
242         (JSC::JSArray::initializeIndex):
243         (JSC::JSArray::completeInitialization):
244
245 2012-04-06  Jon Lee  <jonlee@apple.com>
246
247         Build fix for Windows bots.
248
249         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: export missing symbol.
250
251 2012-04-06  Geoffrey Garen  <ggaren@apple.com>
252
253         Renamed
254
255                 WeakHeap => WeakSet
256                 HandleHeap => HandleSet
257
258         Reviewed by Sam Weinig.
259
260         These sets do have internal allocators, but it's confusing to call them
261         heaps because they're sub-objects of an object called "heap".
262
263         * heap/HandleHeap.cpp: Removed.
264         * heap/HandleHeap.h: Removed.
265         * heap/HandleSet.cpp: Copied from JavaScriptCore/heap/HandleHeap.cpp.
266         * heap/WeakHeap.cpp: Removed.
267         * heap/WeakHeap.h: Removed.
268         * heap/WeakSet.cpp: Copied from JavaScriptCore/heap/WeakHeap.cpp.
269         * heap/WeakSet.h: Copied from JavaScriptCore/heap/WeakHeap.h.
270
271         Plus global rename using grep.
272
273 2012-04-06  Dan Bernstein  <mitz@apple.com>
274
275         <rdar://problem/10912476> HiDPI: Have canvas use a hidpi backing store, but downsample upon access
276
277         Reviewed by Sam Weinig.
278
279         * Configurations/FeatureDefines.xcconfig: Added ENABLE_HIGH_DPI_CANVAS.
280
281 2012-04-06  Rob Buis  <rbuis@rim.com>
282
283         Fix cast-align warnings in JSC
284         https://bugs.webkit.org/show_bug.cgi?id=80790
285
286         Reviewed by George Staikos.
287
288         * assembler/ARMv7Assembler.h:
289         (JSC::ARMv7Assembler::computeJumpType):
290         (JSC::ARMv7Assembler::link):
291         * assembler/LinkBuffer.h:
292         (JSC::LinkBuffer::linkCode):
293         * heap/MarkStack.cpp:
294         (JSC::SlotVisitor::copyAndAppend):
295         * runtime/JSArray.cpp:
296         (JSC::JSArray::visitChildren):
297         * wtf/RefCountedArray.h:
298         (WTF::RefCountedArray::Header::payload):
299
300 2012-04-06  Darin Adler  <darin@apple.com>
301
302         Streamline strtod and fix some related problems
303         https://bugs.webkit.org/show_bug.cgi?id=82857
304
305         Reviewed by Geoffrey Garen.
306
307         * parser/Lexer.cpp:
308         (JSC::Lexer<>::lex): Use parseDouble. Since we have already scanned the number
309         and we know it has only correct characters, leading spaces, trailing junk, and
310         trailing spaces are not a possibility. No need to add a trailing null character.
311
312         * runtime/JSGlobalObjectFunctions.cpp:
313         (JSC::parseInt): Changed overflow based 10 case to use parseDouble. No need
314         to allow trailing junk since the code above already allows only numeric digits
315         in the string. This code path is used only in unusual cases, so it's not
316         optimized for 8-bit strings, but easily could be.
317         (JSC::jsStrDecimalLiteral): Removed the allow trailing junk argument to this
318         function template because all the callers are OK with trailing junk. Use the
319         parseDouble function. No need to copy the data into a byte buffer, because
320         parseDouble handles that.
321         (JSC::toDouble): Got rid of the DisallowTrailingJunk argument to the
322         jsStrDecimalLiteral function template. That's OK because this function
323         already checks for trailing junk and handles it appropriately. The old code
324         path was doing it twice.
325         (JSC::parseFloat): Got rid of the AllowTrailingJunk argument to the
326         jsStrDecimalLiteral function template; the template allows junk unconditionally.
327
328         * runtime/LiteralParser.cpp:
329         (JSC::::Lexer::lexNumber): Use parseDouble. Since we have already scanned the number
330         and we know it has only correct characters, leading spaces, trailing junk, and
331         trailing spaces are not a possibility. No need to add a trailing null character.
332         No need to copy the data into a byte buffer, because parseDouble handles that.
333         We could optimize the UChar case even more because we know all the characters
334         are ASCII, but not doing that at this time.
335
336         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Updated.
337
338 2012-04-06  Patrick Gansterer  <paroga@webkit.org>
339
340         Remove JSC dependency from GregorianDateTime
341         https://bugs.webkit.org/show_bug.cgi?id=83290
342
343         Reviewed by Geoffrey Garen.
344
345         This allows us to move it to WTF later.
346
347         * runtime/DateConstructor.cpp:
348         (JSC::callDate):
349         * runtime/JSDateMath.h:
350
351 2012-04-05  Michael Saboff  <msaboff@apple.com>
352
353         Call Heap::discardAllCompiledCode() in low memory situations
354         https://bugs.webkit.org/show_bug.cgi?id=83335
355
356         Reviewed by Geoffrey Garen.
357
358         Restructured Heap::discardAllCompiledCode() to do the "Is JavaScriptRunning?"
359         check inline so that it can be called directly without this check.
360
361         * heap/Heap.cpp:
362         (JSC::Heap::discardAllCompiledCode):
363         (JSC::Heap::collectAllGarbage):
364         * heap/Heap.h: Added JS_EXPORT_PRIVATE to discardAllCompiledCode() so it can be
365         called from WebCore.
366         (Heap):
367         * runtime/JSGlobalData.h: Removed unused " void discardAllCompiledCode()" declaration.
368         (JSGlobalData):
369
370 2012-04-05  Benjamin Poulain  <bpoulain@apple.com>
371
372         Speed up the conversion from JSValue to String for bulk operations
373         https://bugs.webkit.org/show_bug.cgi?id=83243
374
375         Reviewed by Geoffrey Garen.
376
377         When making operations on primitive types, we loose some time converting
378         values to JSString in order to extract the string.
379
380         This patch speeds up some basic Array operations by avoiding the creation
381         of intermediary JSString when possible.
382
383         For the cases where we need to convert a lot of JSValue in a tight loop,
384         an inline conversion is used.
385
386         * runtime/ArrayPrototype.cpp:
387         (JSC::arrayProtoFuncToString):
388         (JSC::arrayProtoFuncToLocaleString):
389         (JSC::arrayProtoFuncJoin):
390         (JSC::arrayProtoFuncPush):
391         (JSC::arrayProtoFuncSort):
392         * runtime/CommonIdentifiers.h:
393         * runtime/JSArray.cpp:
394         (JSC::JSArray::sort):
395         * runtime/JSString.h:
396         (JSC::JSValue::toUString):
397         (JSC):
398         (JSC::inlineJSValueNotStringtoUString):
399         (JSC::JSValue::toUStringInline):
400         * runtime/JSValue.cpp:
401         (JSC::JSValue::toUStringSlowCase):
402         (JSC):
403         * runtime/JSValue.h:
404         (JSValue):
405
406 2012-04-05  Benjamin Poulain  <bpoulain@apple.com>
407
408         Use QuickSort when sorting primitive values by string representation
409         https://bugs.webkit.org/show_bug.cgi?id=83312
410
411         Reviewed by Gavin Barraclough.
412
413         When the value we are sorting are all primitive values, we do not need to
414         ensure a stable sort as two values with equal string representation are
415         indistinguishable from JavaScript.
416
417         This gives about 16% performance increase when sorting primitive values.
418
419         * runtime/JSArray.cpp:
420         (JSC::JSArray::sort):
421
422 2012-04-05  Oliver Hunt  <oliver@apple.com>
423
424         SIGILL in JavaScriptCore on a Geode processor
425         https://bugs.webkit.org/show_bug.cgi?id=82496
426
427         Reviewed by Gavin Barraclough.
428
429         Don't attempt to use the DFG when SSE2 is not available.
430
431         * dfg/DFGCapabilities.cpp:
432         (JSC::DFG::canCompileOpcodes):
433
434 2012-04-05  Oliver Hunt  <oliver@apple.com>
435
436         Fix 32-bit build.
437
438         * API/APICast.h:
439         (toJS):
440
441 2012-04-05  Oliver Hunt  <oliver@apple.com>
442
443         Replace static_cast with jsCast when casting JSCell subclasses in JSC
444         https://bugs.webkit.org/show_bug.cgi?id=83307
445
446         Reviewed by Gavin Barraclough.
447
448         Replace all usage of static_cast<JSCell subtype*> with jsCast<> in JavaScriptCore.
449         This results in assertions when unsafe casts are performed, but simply leaves
450         a static_cast<> in release builds.
451
452         * API/APICast.h:
453         (toJS):
454         * API/JSCallbackConstructor.cpp:
455         (JSC::constructJSCallback):
456         * API/JSCallbackFunction.cpp:
457         (JSC::JSCallbackFunction::call):
458         * API/JSCallbackObjectFunctions.h:
459         (JSC::::asCallbackObject):
460         (JSC::::finishCreation):
461         (JSC::::construct):
462         (JSC::::call):
463         * API/JSObjectRef.cpp:
464         (JSObjectGetPrivate):
465         (JSObjectSetPrivate):
466         (JSObjectGetPrivateProperty):
467         (JSObjectSetPrivateProperty):
468         (JSObjectDeletePrivateProperty):
469         * API/JSValueRef.cpp:
470         (JSValueIsObjectOfClass):
471         * API/JSWeakObjectMapRefPrivate.cpp:
472         * bytecompiler/BytecodeGenerator.cpp:
473         (JSC::BytecodeGenerator::resolve):
474         (JSC::BytecodeGenerator::resolveConstDecl):
475         * debugger/DebuggerActivation.cpp:
476         (JSC::DebuggerActivation::finishCreation):
477         * dfg/DFGOperations.cpp:
478         * interpreter/Interpreter.cpp:
479         (JSC::Interpreter::execute):
480         (JSC::Interpreter::privateExecute):
481         * jit/JITStubs.cpp:
482         (JSC::DEFINE_STUB_FUNCTION):
483         * runtime/Executable.h:
484         (JSC::isHostFunction):
485         * runtime/JSActivation.h:
486         (JSC::asActivation):
487         * runtime/JSArray.cpp:
488         (JSC::JSArray::defineOwnProperty):
489         * runtime/JSArray.h:
490         (JSC::asArray):
491         * runtime/JSBoundFunction.cpp:
492         (JSC::boundFunctionCall):
493         (JSC::boundFunctionConstruct):
494         * runtime/JSByteArray.h:
495         (JSC::asByteArray):
496         * runtime/JSCell.cpp:
497         (JSC::JSCell::toObject):
498         * runtime/JSCell.h:
499         (JSC::jsCast):
500         * runtime/JSGlobalObject.h:
501         (JSC::asGlobalObject):
502         * runtime/JSGlobalObjectFunctions.cpp:
503         (JSC::globalFuncEval):
504         * runtime/JSObject.cpp:
505         (JSC::JSObject::setPrototypeWithCycleCheck):
506         (JSC::JSObject::allowsAccessFrom):
507         (JSC::JSObject::toThisObject):
508         (JSC::JSObject::unwrappedObject):
509         * runtime/JSObject.h:
510         (JSC::asObject):
511         * runtime/JSPropertyNameIterator.h:
512         (JSC::Register::propertyNameIterator):
513         * runtime/JSString.h:
514         (JSC::asString):
515         (JSC::JSValue::toString):
516         * runtime/StringPrototype.cpp:
517         (JSC::stringProtoFuncSubstr):
518
519 2012-04-05  Benjamin Poulain  <bpoulain@apple.com>
520
521         Make something faster than JSStringBuilder for joining an array of JSValue
522         https://bugs.webkit.org/show_bug.cgi?id=83180
523
524         Reviewed by Geoffrey Garen.
525
526         This patch add the class JSStringJoiner optimized for join() operations.
527
528         This class makes stricter constraints than JSStringBuilder in order avoid
529         memory allocations.
530
531         In the best case, the class allocate memory only twice:
532         -Allocate an array to keep a list of UString to join.
533         -Allocate the final string.
534
535         We also avoid the conversion from 8bits strings to 16bits strings since
536         they are costly and unlikly to help for subsequent calls.
537
538         * CMakeLists.txt:
539         * GNUmakefile.list.am:
540         * JavaScriptCore.gypi:
541         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
542         * JavaScriptCore.xcodeproj/project.pbxproj:
543         * Target.pri:
544         * runtime/ArrayPrototype.cpp:
545         (JSC::arrayProtoFuncToLocaleString):
546         (JSC::arrayProtoFuncJoin):
547         * runtime/JSStringJoiner.cpp: Added.
548         (JSC):
549         (JSC::appendStringToData):
550         (JSC::joinStrings):
551         (JSC::JSStringJoiner::build):
552         * runtime/JSStringJoiner.h: Added.
553         (JSC):
554         (JSStringJoiner):
555         (JSC::JSStringJoiner::JSStringJoiner):
556         (JSC::JSStringJoiner::append):
557
558 2012-04-05  Gavin Barraclough  <barraclough@apple.com>
559
560         https://bugs.webkit.org/show_bug.cgi?id=77293
561         [Un]Reserve 'let'
562
563         Rubber stamped by Oliver Hunt.
564
565         Revert r106198.
566         This does break the web - e.g. https://bvi.bnc.ca/index/bnc/indexen.html
567         If we're going to reserve let, we're going to have to do so in a more
568         circumspect fashion.
569
570         * parser/Keywords.table:
571
572 2012-04-05  Michael Saboff  <msaboff@apple.com>
573
574         Rolling out http://trac.webkit.org/changeset/113262.
575         Original code was fine.
576
577         Rubber-stamped by Oliver Hunt.
578
579         * assembler/MacroAssembler.h:
580         (JSC::MacroAssembler::additionBlindedConstant):
581
582 2012-04-05  Patrick Gansterer  <paroga@webkit.org>
583
584         [WinCE] Remove unnecessary function decleration
585         https://bugs.webkit.org/show_bug.cgi?id=83155
586
587         Reviewed by Kentaro Hara.
588
589         * runtime/JSDateMath.cpp:
590
591 2012-04-04  Patrick Gansterer  <paroga@webkit.org>
592
593         Add WTF::getCurrentLocalTime()
594         https://bugs.webkit.org/show_bug.cgi?id=83164
595
596         Reviewed by Alexey Proskuryakov.
597
598         Replace the calls to WTF::getLocalTime() with time(0) with the new function.
599         This allows us to use Win32 API on windows to get the same result in a next step.
600
601         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
602         * runtime/DateConstructor.cpp:
603         (JSC::callDate):
604
605 2012-04-04  Oliver Hunt  <oliver@apple.com>
606
607         Parser fails to revert some state after parsing expression and object literals.
608         https://bugs.webkit.org/show_bug.cgi?id=83236
609
610         Reviewed by Gavin Barraclough.
611
612         Reset left hand side counter after parsing the literals.
613
614         * parser/Parser.cpp:
615         (JSC::::parseObjectLiteral):
616         (JSC::::parseStrictObjectLiteral):
617         (JSC::::parseArrayLiteral):
618
619 2012-04-04  Filip Pizlo  <fpizlo@apple.com>
620
621         DFG InstanceOf should not uselessly speculate cell
622         https://bugs.webkit.org/show_bug.cgi?id=83234
623
624         Reviewed by Oliver Hunt.
625         
626         If InstanceOf is the only user of its child then don't speculate cell, since
627         the not-cell case is super easy to handle.
628
629         * dfg/DFGSpeculativeJIT.cpp:
630         (JSC::DFG::SpeculativeJIT::compileInstanceOf):
631
632 2012-04-04  Michael Saboff  <msaboff@apple.com>
633
634         Fixed minor error: "& 3" should be "& 2".
635
636         Rubber-stamped by Oliver Hunt.
637
638         * assembler/MacroAssembler.h:
639         (JSC::MacroAssembler::additionBlindedConstant):
640
641 2012-04-04  Michael Saboff  <msaboff@apple.com>
642
643         Constant Blinding for add/sub immediate crashes in ArmV7 when dest is SP
644         https://bugs.webkit.org/show_bug.cgi?id=83191
645
646         Reviewed by Oliver Hunt.
647
648         Make are that blinded constant pairs are similarly aligned to the
649         original immediate values so that instructions that expect that
650         alignment work correctly.  One example is ARMv7 add/sub imm to SP.
651
652         * assembler/ARMv7Assembler.h:
653         (JSC::ARMv7Assembler::add): Added ASSERT that immediate is word aligned.
654         (JSC::ARMv7Assembler::sub): Added ASSERT that immediate is word aligned.
655         (JSC::ARMv7Assembler::sub_S): Added ASSERT that immediate is word aligned.
656         * assembler/MacroAssembler.h:
657         (JSC::MacroAssembler::additionBlindedConstant):
658
659 2012-04-04  Filip Pizlo  <fpizlo@apple.com>
660
661         DFG should short-circuit Branch(LogicalNot(...))
662         https://bugs.webkit.org/show_bug.cgi?id=83181
663
664         Reviewed by Geoff Garen.
665         
666         Slight (sub 1%) speed-up on V8.
667
668         * dfg/DFGFixupPhase.cpp:
669         (JSC::DFG::FixupPhase::fixupNode):
670
671 2012-04-04  Geoffrey Garen  <ggaren@apple.com>
672
673         [Qt] REGRESSION(r113141): All tests assert on 32 bit debug mode
674         https://bugs.webkit.org/show_bug.cgi?id=83139
675
676         Reviewed by Sam Weinig.
677
678         * heap/PassWeak.h:
679         (JSC::::get): 32-bit JSValue treats JSValue(nullptr).asCell() as an error,
680         so work around that here. (Long-term, we should make 32-bit and 64-bit
681         agree on the right behavior.)
682
683 2012-04-03  Geoffrey Garen  <ggaren@apple.com>
684
685         Updated JSC expected test results to reflect recent bug fixes <disapproving look>.
686
687         Reviewed by Sam Weinig.
688
689         * tests/mozilla/expected.html:
690
691 2012-03-29  Geoffrey Garen  <ggaren@apple.com>
692
693         First step toward incremental Weak<T> finalization
694         https://bugs.webkit.org/show_bug.cgi?id=82670
695
696         Reviewed by Filip Pizlo.
697
698         This patch implements a Weak<T> heap that is compatible with incremental
699         finalization, while making as few behavior changes as possible. The behavior
700         changes it makes are:
701
702         (*) Weak<T>'s raw JSValue no longer reverts to JSValue() automatically --
703         instead, a separate flag indicates that the JSValue is no longer valid.
704         (This is required so that the JSValue can be preserved for later finalization.)
705         Objects dealing with WeakImpls directly must change to check the flag.
706
707         (*) Weak<T> is no longer a subclass of Handle<T>.
708
709         (*) DOM GC performance is different -- 9% faster in the geometric mean,
710         but 15% slower in one specific case:
711                 gc-dom1.html: 6%  faster
712                 gc-dom2.html: 23% faster
713                 gc-dom3.html: 17% faster
714                 gc-dom4.html: 15% *slower*
715
716         The key features of this new heap are:
717
718         (*) Each block knows its own state, independent of any other blocks.
719
720         (*) Each block caches its own sweep result.
721
722         (*) The heap visits dead Weak<T>s at the end of GC. (It doesn't
723         mark them yet, since that would be a behavior change.)
724
725         * API/JSCallbackObject.cpp:
726         (JSC::JSCallbackObjectData::finalize):
727         * API/JSCallbackObjectFunctions.h:
728         (JSC::::init): Updated to use the new WeakHeap API.
729
730         * CMakeLists.txt:
731         * GNUmakefile.list.am:
732         * JavaScriptCore.gypi:
733         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
734         * JavaScriptCore.xcodeproj/project.pbxproj:
735         * Target.pri: Paid the build system tax since I added some new files.
736
737         * heap/Handle.h: Made WeakBlock a friend and exposed slot() as public,
738         so we can keep passing a Handle<T> to finalizers, to avoid more surface
739         area change in this patch. A follow-up patch should change the type we
740         pass to finalizers.
741
742         * heap/HandleHeap.cpp:
743         (JSC):
744         (JSC::HandleHeap::writeBarrier):
745         (JSC::HandleHeap::isLiveNode):
746         * heap/HandleHeap.h:
747         (JSC):
748         (HandleHeap):
749         (Node):
750         (JSC::HandleHeap::Node::Node): Removed all code related to Weak<T>, since
751         we have a separate WeakHeap now.
752
753         * heap/Heap.cpp:
754         (JSC::Heap::Heap): Removed m_extraCost because extra cost is accounted
755         for through our watermark now. Removed m_waterMark because it was unused.
756
757         (JSC::Heap::destroy): Updated for addition of WeakHeap.
758
759         (JSC::Heap::reportExtraMemoryCostSlowCase): Changed from using its own
760         variable to participating in the watermark strategy. I wanted to standardize
761         WeakHeap and all other Heap clients on this strategy, to make sure it's
762         accurate.
763  
764         (JSC::Heap::markRoots): Updated for addition of WeakHeap. Added WeakHeap
765         dead visit pass, as explained above.
766
767         (JSC::Heap::collect):
768         (JSC::Heap::resetAllocators): Updated for addition of WeakHeap.
769
770         (JSC::Heap::addFinalizer):
771         (JSC::Heap::FinalizerOwner::finalize): Updated for new Weak<T> API.
772
773         * heap/Heap.h:
774         (JSC::Heap::weakHeap):
775         (Heap):
776         (JSC::Heap::addToWaterMark): Added a way to participate in the watermarking
777         strategy, since this is the best way for WeakHeap to report its memory
778         cost. (I plan to update this in a follow-up patch to make it more accurate,
779         but for now it is not less accurate than it used to be.)
780
781         * heap/MarkedSpace.cpp:
782         (JSC::MarkedSpace::MarkedSpace):
783         (JSC::MarkedSpace::resetAllocators):
784         * heap/MarkedSpace.h:
785         (MarkedSpace):
786         (JSC::MarkedSpace::addToWaterMark):
787         (JSC::MarkedSpace::didConsumeFreeList): Removed m_nurseryWaterMark because
788         it was unused, and I didn't want to update WeakHeap to keep an usused
789         variable working. Added API for above.
790
791         * heap/PassWeak.h:
792         (JSC):
793         (WeakImplAccessor):
794         (PassWeak):
795         (JSC::::operator):
796         (JSC::::get):
797         (JSC::::was):
798         (JSC::::PassWeak):
799         (JSC::::~PassWeak):
800         (JSC::UnspecifiedBoolType):
801         (JSC::::leakImpl):
802         (JSC::adoptWeak):
803         * heap/Strong.h:
804         (JSC::Strong::operator!):
805         (Strong):
806         (JSC::Strong::operator UnspecifiedBoolType*):
807         (JSC::Strong::get):
808         * heap/Weak.h:
809         (Weak):
810         (JSC::::Weak):
811         (JSC):
812         (JSC::::isHashTableDeletedValue):
813         (JSC::::~Weak):
814         (JSC::::swap):
815         (JSC::=):
816         (JSC::::operator):
817         (JSC::UnspecifiedBoolType):
818         (JSC::::release):
819         (JSC::::clear):
820         (JSC::::hashTableDeletedValue): Lots of code changes here, but they boil
821         down to two things:
822
823         (*) Allocate WeakImpls from the WeakHeap instead of Handles from the HandleHeap.
824
825         (*) Explicitly check WeakImpl::state() for non-liveness before returning
826         a value (explained above).
827
828         These files implement the new Weak<T> heap behavior described above:
829
830         * heap/WeakBlock.cpp: Added.
831         * heap/WeakBlock.h: Added.
832         * heap/WeakHandleOwner.cpp: Added.
833         * heap/WeakHandleOwner.h: Added.
834         * heap/WeakHeap.cpp: Added.
835         * heap/WeakHeap.h: Added.
836         * heap/WeakImpl.h: Added.
837
838         One interesting difference from the old heap is that we don't allow
839         clients to overwrite a WeakImpl after allocating it, and we don't recycle
840         WeakImpls prior to garbage collection. This is required for lazy finalization,
841         but it will also help us esablish a useful invariant in the future: allocating
842         a WeakImpl will be a binding contract to run a finalizer at some point in the
843         future, even if the WeakImpl is later deallocated.
844
845         * jit/JITStubs.cpp:
846         (JSC::JITThunks::hostFunctionStub): Check the Weak<T> for ! instead of
847         its JSValue, since that's our API contract now, and the JSValue might
848         be stale.
849
850         * runtime/JSCell.h:
851         (JSC::jsCast): Allow casting NULL pointers because it's useful and harmless.
852
853         * runtime/Structure.cpp:
854         (JSC::StructureTransitionTable::add): I can't remember why I did this.
855
856         * runtime/StructureTransitionTable.h:
857         * runtime/WeakGCMap.h: I had to update these classes because they allocate
858         and deallocate weak pointers manually. They should probably stop doing that.
859
860 2012-04-03  Keishi Hattori  <keishi@webkit.org>
861
862         Disable ENABLE_DATALIST for now
863         https://bugs.webkit.org/show_bug.cgi?id=82871
864
865         Reviewed by Kent Tamura.
866
867         * Configurations/FeatureDefines.xcconfig: Disabled ENABLE_DATALIST.
868
869 2012-04-02  Filip Pizlo  <fpizlo@apple.com>
870
871         jsr/sret should be removed
872         https://bugs.webkit.org/show_bug.cgi?id=82986
873         <rdar://problem/11017015>
874
875         Reviewed by Sam Weinig and Geoff Garen.
876         
877         Replaces jsr/sret with finally block inlining.
878
879         * bytecode/CodeBlock.cpp:
880         (JSC::CodeBlock::dump):
881         * bytecode/Opcode.h:
882         (JSC):
883         (JSC::padOpcodeName):
884         * bytecompiler/BytecodeGenerator.cpp:
885         (JSC::BytecodeGenerator::pushFinallyContext):
886         (JSC::BytecodeGenerator::emitComplexJumpScopes):
887         (JSC):
888         * bytecompiler/BytecodeGenerator.h:
889         (FinallyContext):
890         (BytecodeGenerator):
891         * bytecompiler/NodesCodegen.cpp:
892         (JSC::TryNode::emitBytecode):
893         * interpreter/Interpreter.cpp:
894         (JSC::Interpreter::privateExecute):
895         * jit/JIT.cpp:
896         (JSC::JIT::privateCompileMainPass):
897         (JSC::JIT::privateCompile):
898         * jit/JIT.h:
899         (JIT):
900         * jit/JITOpcodes.cpp:
901         (JSC):
902         * jit/JITOpcodes32_64.cpp:
903         (JSC):
904         * llint/LowLevelInterpreter32_64.asm:
905         * llint/LowLevelInterpreter64.asm:
906
907 2012-04-03  Mark Rowe  <mrowe@apple.com>
908
909         Make it possible to install the JavaScriptCore test tools.
910
911         Part of <rdar://problem/11158607>.
912         
913         Reviewed by Filip Pizlo.
914
915         * JavaScriptCore.xcodeproj/project.pbxproj: Introduce an aggregate target named
916         Test Tools that builds testapi, minidom and testRegExp. Switch All from depending on
917         those targets individually to depending on the new aggregate target.
918
919 2012-04-03  Filip Pizlo  <fpizlo@apple.com>
920
921         Offlineasm ARM backend has a very convoluted way of saying it wants to emit a
922         three-operand multiply instruction
923         https://bugs.webkit.org/show_bug.cgi?id=83100
924
925         Reviewed by Darin Adler.
926         
927         Changed the "muli"/"mulp" case to call emitArmV7() since that helper method was
928         already smart enough to do the Right Thing for multiply.
929
930         * offlineasm/armv7.rb:
931
932 2012-04-03  Filip Pizlo  <fpizlo@apple.com>
933
934         Offlineasm ARM backend uses the wrong mnemonic for multiply
935         https://bugs.webkit.org/show_bug.cgi?id=83098
936         <rdar://problem/11168744>
937
938         Reviewed by Gavin Barraclough.
939         
940         Use "mul" instead of "muls" since we're passing three operands, not two.
941
942         * offlineasm/armv7.rb:
943
944 2012-04-03  Gavin Barraclough  <barraclough@apple.com>
945
946         Linux crashes during boot
947         https://bugs.webkit.org/show_bug.cgi?id=83096
948
949         Reviewed by Filip Pizlo.
950
951         The bug here is that we add empty JSValues to the sparse map, and then set them
952         - but a GC may occur before doing so (due to a call to reportExtraMemory cost).
953         We may want to consider making it safe to mark empty JSValues, but the simple &
954         contained fix to this specific bug is to just initialize these values to
955         something other than JSValue().
956
957         * runtime/JSArray.cpp:
958         (JSC::SparseArrayValueMap::add):
959             - Initialize sparse map entries.
960
961 2012-04-02  Oliver Hunt  <oliver@apple.com>
962
963         Incorrect liveness information when inlining
964         https://bugs.webkit.org/show_bug.cgi?id=82985
965
966         Reviewed by Filip Pizlo.
967
968         Don't remap register numbers that have already been remapped.
969
970         * dfg/DFGByteCodeParser.cpp:
971         (JSC::DFG::ByteCodeParser::handleInlining):
972
973 2012-04-02  Filip Pizlo  <fpizlo@apple.com>
974
975         Activation tear-off neglects to copy the callee and scope chain, leading to crashes if we
976         try to create an arguments object from the activation
977         https://bugs.webkit.org/show_bug.cgi?id=82947
978         <rdar://problem/11058598>
979
980         Reviewed by Gavin Barraclough.
981         
982         We now copy the entire call frame header just to be sure. This is mostly perf-netural,
983         except for a 3.7% slow-down in V8/earley.
984
985         * runtime/JSActivation.cpp:
986         (JSC::JSActivation::visitChildren):
987         * runtime/JSActivation.h:
988         (JSC::JSActivation::tearOff):
989
990 2012-04-02  Daniel Bates  <dbates@webkit.org>
991
992         Remove Source/JavaScriptCore/wtf and its empty subdirectories
993
994         Rubber-stamped by Eric Seidel.
995
996         Following the move of WTF from Source/JavaScriptCore/wtf to Source/WTF
997         (https://bugs.webkit.org/show_bug.cgi?id=75673), remove directory
998         Source/JavaScriptCore/wtf and its empty subdirectories.
999
1000         * wtf: Removed.
1001         * wtf/android: Removed.
1002         * wtf/blackberry: Removed.
1003         * wtf/chromium: Removed.
1004         * wtf/dtoa: Removed.
1005         * wtf/efl: Removed.
1006         * wtf/gobject: Removed.
1007         * wtf/gtk: Removed.
1008         * wtf/mac: Removed.
1009         * wtf/qt: Removed.
1010         * wtf/qt/compat: Removed.
1011         * wtf/tests: Removed.
1012         * wtf/text: Removed.
1013         * wtf/threads: Removed.
1014         * wtf/threads/win: Removed.
1015         * wtf/unicode: Removed.
1016         * wtf/unicode/glib: Removed.
1017         * wtf/unicode/icu: Removed.
1018         * wtf/unicode/qt4: Removed.
1019         * wtf/unicode/wince: Removed.
1020         * wtf/url: Removed.
1021         * wtf/url/api: Removed.
1022         * wtf/url/src: Removed.
1023         * wtf/win: Removed.
1024         * wtf/wince: Removed.
1025         * wtf/wx: Removed.
1026
1027 2012-04-02  Carlos Garcia Campos  <cgarcia@igalia.com>
1028
1029         Unreviewed. Fix make distcheck issues.
1030
1031         * GNUmakefile.list.am: Add missing file.
1032
1033 2012-04-01  Darin Adler  <darin@apple.com>
1034
1035         Fix incorrect path for libWTF.a in Mac project file.
1036
1037         * JavaScriptCore.xcodeproj/project.pbxproj: Removed the "../Release" prefix that
1038         would cause other configurations to try to link with the "Release" version of
1039         libWTF.a instead of the correct version.
1040
1041 2012-03-29  Filip Pizlo  <fpizlo@apple.com>
1042
1043         DFG should optimize a==b for a being an object and b being either an object or
1044         null/undefined, and vice versa
1045         https://bugs.webkit.org/show_bug.cgi?id=82656
1046
1047         Reviewed by Oliver Hunt.
1048         
1049         Implements additional object equality optimizations for the case that one
1050         operand is predicted to be an easily speculated object (like FinalObject or
1051         Array) and the other is either an easily speculated object or Other, i.e.
1052         Null or Undefined.
1053         
1054         2-5% speed-up on V8/raytrace, leading to a sub-1% progression on V8.
1055         
1056         I also took the opportunity to clean up the control flow for the speculation
1057         decisions in the various Compare opcodes. And to fix a build bug in SamplingTool.
1058         And to remove debug cruft I stupidly committed in my last patch.
1059         
1060         * bytecode/SamplingTool.h:
1061         (SamplingRegion):
1062         * dfg/DFGAbstractState.cpp:
1063         (JSC::DFG::AbstractState::execute):
1064         * dfg/DFGOperations.cpp:
1065         * dfg/DFGSpeculativeJIT.cpp:
1066         (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
1067         (JSC::DFG::SpeculativeJIT::compare):
1068         * dfg/DFGSpeculativeJIT.h:
1069         (SpeculativeJIT):
1070         * dfg/DFGSpeculativeJIT32_64.cpp:
1071         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
1072         (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
1073         (DFG):
1074         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
1075         * dfg/DFGSpeculativeJIT64.cpp:
1076         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
1077         (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
1078         (DFG):
1079         (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
1080
1081 2012-03-30  David Barr  <davidbarr@chromium.org>
1082
1083         Split up top-level .gitignore and .gitattributes
1084         https://bugs.webkit.org/show_bug.cgi?id=82687
1085
1086         Reviewed by Tor Arne Vestbø.
1087
1088         * JavaScriptCore.gyp/.gitignore: Added.
1089
1090 2012-03-30  Steve Falkenburg  <sfalken@apple.com>
1091
1092         Windows (make based) build fix.
1093
1094         * JavaScriptCore.vcproj/JavaScriptCore.make: Copy WTF header files into a place where JavaScriptCore build can see them.
1095
1096 2012-03-30  Keishi Hattori  <keishi@webkit.org>
1097
1098         Change ENABLE_INPUT_COLOR to ENABLE_INPUT_TYPE_COLOR and enable it for chromium
1099         https://bugs.webkit.org/show_bug.cgi?id=80972
1100
1101         Reviewed by Kent Tamura.
1102
1103         * Configurations/FeatureDefines.xcconfig:
1104
1105 2012-03-29  Mark Hahnenberg  <mhahnenberg@apple.com>
1106
1107         Refactor recompileAllJSFunctions() to be less expensive
1108         https://bugs.webkit.org/show_bug.cgi?id=80330
1109
1110         Reviewed by Filip Pizlo.
1111
1112         This change is performance neutral on the JS benchmarks we track. It's mostly to improve page 
1113         load performance, which currently does at least a couple full GCs per navigation.
1114
1115         * heap/Heap.cpp:
1116         (JSC::Heap::discardAllCompiledCode): Rename recompileAllJSFunctions to discardAllCompiledCode 
1117         because the function doesn't actually recompile anything (and never did); it simply throws code
1118         away for it to be recompiled later if we determine we should do so.
1119         (JSC):
1120         (JSC::Heap::collectAllGarbage):
1121         (JSC::Heap::addFunctionExecutable): Adds a newly created FunctionExecutable to the Heap's list.
1122         (JSC::Heap::removeFunctionExecutable): Removes the specified FunctionExecutable from the Heap's list.
1123         * heap/Heap.h:
1124         (JSC):
1125         (Heap):
1126         * runtime/Executable.cpp: Added next and prev fields to FunctionExecutables so that they can 
1127         be used in DoublyLinkedLists.
1128         (JSC::FunctionExecutable::FunctionExecutable):
1129         (JSC::FunctionExecutable::finalize): Removes the FunctionExecutable from the Heap's list.
1130         * runtime/Executable.h:
1131         (FunctionExecutable):
1132         (JSC::FunctionExecutable::create): Adds the FunctionExecutable to the Heap's list.
1133         * runtime/JSGlobalData.cpp: Remove recompileAllJSFunctions, as it's the Heap's job to own and manage 
1134         the list of FunctionExecutables.
1135         * runtime/JSGlobalData.h:
1136         (JSGlobalData):
1137         * runtime/JSGlobalObject.cpp:
1138         (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): Use the new discardAllCompiledCode.
1139
1140 2012-03-29  Filip Pizlo  <fpizlo@apple.com>
1141
1142         Unreviewed build fix for non-x86 platforms.
1143
1144         * dfg/DFGSpeculativeJIT.cpp:
1145         (JSC::DFG::SpeculativeJIT::compileSoftModulo):
1146         * dfg/DFGSpeculativeJIT.h:
1147         (JSC::DFG::SpeculativeJIT::callOperation):
1148         * jit/JITArithmetic32_64.cpp:
1149         (JSC::JIT::emitSlow_op_mod):
1150
1151 2012-03-29  Gavin Barraclough  <barraclough@apple.com>
1152
1153         Windows build fix p2.
1154
1155         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1156
1157 2012-03-29  Gavin Barraclough  <barraclough@apple.com>
1158
1159         Windows build fix p1.
1160
1161         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1162
1163 2012-03-29  Gavin Barraclough  <barraclough@apple.com>
1164
1165         Template the Yarr::Interpreter on the character type
1166         https://bugs.webkit.org/show_bug.cgi?id=82637
1167
1168         Reviewed by Sam Weinig.
1169
1170         We should be able to call to the interpreter after having already checked the character type,
1171         without having to re-package the character pointer back up into a string!
1172
1173         * runtime/RegExp.cpp:
1174         (JSC::RegExp::match):
1175         (JSC::RegExp::matchCompareWithInterpreter):
1176             - Don't pass length.
1177         * yarr/Yarr.h:
1178             - moved function declarations to YarrInterpreter.h.
1179         * yarr/YarrInterpreter.cpp:
1180         (Yarr):
1181         (Interpreter):
1182         (JSC::Yarr::Interpreter::InputStream::InputStream):
1183         (InputStream):
1184         (JSC::Yarr::Interpreter::Interpreter):
1185         (JSC::Yarr::interpret):
1186             - templated Interpreter class on CharType.
1187         * yarr/YarrInterpreter.h:
1188         (Yarr):
1189             - added function declarations.
1190
1191 2012-03-29  David Kilzer  <ddkilzer@apple.com>
1192
1193         Don't use a flattened framework path when building on OS X
1194
1195         Reviewed by Mark Rowe.
1196
1197         * Configurations/ToolExecutable.xcconfig: Use REAL_PLATFORM_NAME
1198         to select different INSTALL_PATH values.
1199
1200 2012-03-29  Kevin Ollivier  <kevino@theolliviers.com>
1201
1202         [wx] Unreviewed build fix, add Win-specific sources
1203         the wx port needs after WTF move.
1204
1205         * wscript:
1206
1207 2012-03-29  Andy Estes  <aestes@apple.com>
1208
1209         Remove an unused variable that breaks the build with newer versions of clang.
1210
1211         Rubber stamped by Gavin Barraclough.
1212
1213         * yarr/YarrJIT.cpp:
1214         (JSC::Yarr::YarrGenerator::backtrackCharacterClassNonGreedy):
1215
1216 2012-03-29  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>
1217
1218         HashMap<>::add should return a more descriptive object
1219         https://bugs.webkit.org/show_bug.cgi?id=71063
1220
1221         Reviewed by Ryosuke Niwa.
1222
1223         Update code to use AddResult instead of a pair. Note that since WeakGCMap wraps
1224         the iterator type, there's a need for its own AddResult type -- instantiated from
1225         HashTableAddResult template class.
1226
1227         * API/JSCallbackObject.h:
1228         (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
1229         * API/JSClassRef.cpp:
1230         (OpaqueJSClass::contextData):
1231         * bytecompiler/BytecodeGenerator.cpp:
1232         (JSC::BytecodeGenerator::addVar):
1233         (JSC::BytecodeGenerator::addGlobalVar):
1234         (JSC::BytecodeGenerator::addConstant):
1235         (JSC::BytecodeGenerator::addConstantValue):
1236         (JSC::BytecodeGenerator::emitLoad):
1237         (JSC::BytecodeGenerator::addStringConstant):
1238         (JSC::BytecodeGenerator::emitLazyNewFunction):
1239         * bytecompiler/NodesCodegen.cpp:
1240         (JSC::PropertyListNode::emitBytecode):
1241         * debugger/Debugger.cpp:
1242         * dfg/DFGAssemblyHelpers.cpp:
1243         (JSC::DFG::AssemblyHelpers::decodedCodeMapFor):
1244         * dfg/DFGByteCodeParser.cpp:
1245         (JSC::DFG::ByteCodeParser::cellConstant):
1246         (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
1247         * jit/JITStubs.cpp:
1248         (JSC::JITThunks::ctiStub):
1249         (JSC::JITThunks::hostFunctionStub):
1250         * parser/Parser.cpp:
1251         (JSC::::parseStrictObjectLiteral):
1252         * parser/Parser.h:
1253         (JSC::Scope::declareParameter):
1254         * runtime/Identifier.cpp:
1255         (JSC::Identifier::add):
1256         (JSC::Identifier::add8):
1257         (JSC::Identifier::addSlowCase):
1258         * runtime/Identifier.h:
1259         (JSC::Identifier::add):
1260         (JSC::IdentifierTable::add):
1261         * runtime/JSArray.cpp:
1262         (JSC::SparseArrayValueMap::add):
1263         (JSC::SparseArrayValueMap::put):
1264         (JSC::SparseArrayValueMap::putDirect):
1265         (JSC::JSArray::enterDictionaryMode):
1266         (JSC::JSArray::defineOwnNumericProperty):
1267         * runtime/JSArray.h:
1268         (SparseArrayValueMap):
1269         * runtime/PropertyNameArray.cpp:
1270         (JSC::PropertyNameArray::add):
1271         * runtime/StringRecursionChecker.h:
1272         (JSC::StringRecursionChecker::performCheck):
1273         * runtime/Structure.cpp:
1274         (JSC::StructureTransitionTable::add):
1275         * runtime/WeakGCMap.h:
1276         (WeakGCMap):
1277         (JSC::WeakGCMap::add):
1278         (JSC::WeakGCMap::set):
1279         * tools/ProfileTreeNode.h:
1280         (JSC::ProfileTreeNode::sampleChild):
1281
1282 2012-03-29  Patrick Gansterer  <paroga@webkit.org>
1283
1284         Build fix for !ENABLE(YARR_JIT) after r112454.
1285
1286         * runtime/RegExp.cpp:
1287         (JSC::RegExp::invalidateCode):
1288
1289 2012-03-28  Filip Pizlo  <fpizlo@apple.com>
1290
1291         DFG object equality speculations should be simplified
1292         https://bugs.webkit.org/show_bug.cgi?id=82557
1293
1294         Reviewed by Gavin Barraclough.
1295
1296         * dfg/DFGNode.h:
1297         (JSC::DFG::Node::shouldSpeculateFinalObject):
1298         (JSC::DFG::Node::shouldSpeculateArray):
1299
1300 2012-03-28  David Kilzer  <ddkilzer@apple.com>
1301
1302         minidom configurations should be based on ToolExecutable.xcconfig
1303         <http://webkit.org/b/82513>
1304
1305         Reviewed by Mark Rowe.
1306
1307         Note that this patch changes minidom from being installed in
1308         /usr/local/bin to JavaScriptCore.framework/Resources.
1309
1310         * Configurations/ToolExecutable.xcconfig: Add semi-colon.
1311         * JavaScriptCore.xcodeproj/project.pbxproj: Base minidom
1312         configurations on ToolExecutable.xcconfig.  Remove redundant
1313         PRODUCT_NAME and SKIP_INSTALL variables.
1314
1315 2012-03-28  Gavin Barraclough  <barraclough@apple.com>
1316
1317         Build fix - some compiles generating NORETURN related warnings.
1318
1319         * yarr/YarrJIT.cpp:
1320         (JSC::Yarr::YarrGenerator::setSubpatternStart):
1321         (JSC::Yarr::YarrGenerator::setSubpatternEnd):
1322         (JSC::Yarr::YarrGenerator::clearSubpatternStart):
1323
1324 2012-03-28  Kevin Ollivier  <kevino@theolliviers.com>
1325
1326         [wx] Unreviewed. Build fix, move WTF back into JSCore target
1327         until issues with JSCore not linking in all WTF symbols are resolved.
1328         
1329         * wscript:
1330
1331 2012-03-28  Gavin Barraclough  <barraclough@apple.com>
1332
1333         Yarr: if we're not using the output array, don't populate it!
1334         https://bugs.webkit.org/show_bug.cgi?id=82519
1335
1336         Reviewed by Sam Weinig.
1337
1338         * runtime/RegExp.cpp:
1339         (JSC):
1340             - Missed review comment! - didn't fully remove RegExpRepresentation.
1341
1342 2012-03-28  Gavin Barraclough  <barraclough@apple.com>
1343
1344         Yarr: if we're not using the output array, don't populate it!
1345         https://bugs.webkit.org/show_bug.cgi?id=82519
1346
1347         Reviewed by Sam Weinig.
1348
1349         Add a new variant of the match method to RegExp that returns a MatchResult,
1350         and modify YarrJIT to be able to compile code that doesn't use an output vector.
1351
1352         This is a 3% progression on v8-regexp.
1353
1354         * JavaScriptCore.xcodeproj/project.pbxproj:
1355             - Moved MatchResult into its own header.
1356         * assembler/AbstractMacroAssembler.h:
1357             - Added missing include.
1358         * runtime/MatchResult.h: Added.
1359         (MatchResult::MatchResult):
1360         (MatchResult):
1361         (MatchResult::failed):
1362         (MatchResult::operator bool):
1363         (MatchResult::empty):
1364             - Moved MatchResult into its own header.
1365         * runtime/RegExp.cpp:
1366         (JSC::RegExp::compile):
1367         (JSC::RegExp::compileIfNecessary):
1368         (JSC::RegExp::match):
1369             - Changed due to execute & representation changes.
1370         (JSC::RegExp::compileMatchOnly):
1371         (JSC::RegExp::compileIfNecessaryMatchOnly):
1372             - Added helper to compile MatchOnly code.
1373         (JSC::RegExp::invalidateCode):
1374         (JSC::RegExp::matchCompareWithInterpreter):
1375         (JSC::RegExp::printTraceData):
1376             - Changed due representation changes.
1377         * runtime/RegExp.h:
1378         (RegExp):
1379         (JSC::RegExp::hasCode):
1380             - Made YarrCodeBlock a member.
1381         * runtime/RegExpConstructor.h:
1382         (RegExpConstructor):
1383         (JSC::RegExpConstructor::performMatch):
1384             - Added no-ovector form.
1385         * runtime/RegExpMatchesArray.cpp:
1386         (JSC::RegExpMatchesArray::reifyAllProperties):
1387             - Match now takes a reference to ovector, not a pointer.
1388         * runtime/RegExpObject.h:
1389         (JSC):
1390             - Moved MatchResult into its own header.
1391         * runtime/StringPrototype.cpp:
1392         (JSC::stringProtoFuncSplit):
1393             - Match now takes a reference to ovector, not a pointer.
1394         * testRegExp.cpp:
1395         (testOneRegExp):
1396             - Match now takes a reference to ovector, not a pointer.
1397         * yarr/YarrJIT.cpp:
1398         (Yarr):
1399         (YarrGenerator):
1400         (JSC::Yarr::YarrGenerator::initCallFrame):
1401         (JSC::Yarr::YarrGenerator::removeCallFrame):
1402         (JSC::Yarr::YarrGenerator::setSubpatternStart):
1403         (JSC::Yarr::YarrGenerator::setSubpatternEnd):
1404         (JSC::Yarr::YarrGenerator::clearSubpatternStart):
1405         (JSC::Yarr::YarrGenerator::setMatchStart):
1406         (JSC::Yarr::YarrGenerator::getMatchStart):
1407             - Added helper functions to intermediate access to output.
1408         (JSC::Yarr::YarrGenerator::generateDotStarEnclosure):
1409         (JSC::Yarr::YarrGenerator::generate):
1410         (JSC::Yarr::YarrGenerator::backtrack):
1411         (JSC::Yarr::YarrGenerator::generateEnter):
1412         (JSC::Yarr::YarrGenerator::compile):
1413             - Changed to use the new helpers, only generate subpatterns if IncludeSubpatterns.
1414         (JSC::Yarr::jitCompile):
1415             - Needs to template of MatchOnly or IncludeSubpatterns.
1416         * yarr/YarrJIT.h:
1417         (YarrCodeBlock):
1418         (JSC::Yarr::YarrCodeBlock::set8BitCode):
1419         (JSC::Yarr::YarrCodeBlock::set16BitCode):
1420         (JSC::Yarr::YarrCodeBlock::has8BitCodeMatchOnly):
1421         (JSC::Yarr::YarrCodeBlock::has16BitCodeMatchOnly):
1422         (JSC::Yarr::YarrCodeBlock::set8BitCodeMatchOnly):
1423         (JSC::Yarr::YarrCodeBlock::set16BitCodeMatchOnly):
1424         (JSC::Yarr::YarrCodeBlock::execute):
1425         (JSC::Yarr::YarrCodeBlock::clear):
1426             - Added a second set of CodeRefs, so that we can compile RexExps with/without subpattern matching.
1427
1428 2012-03-27  Filip Pizlo  <fpizlo@apple.com>
1429
1430         DFG OSR exit should not generate an exit for variables of inlinees if the
1431         inlinees are not in scope
1432         https://bugs.webkit.org/show_bug.cgi?id=82312
1433
1434         Reviewed by Oliver Hunt.
1435         
1436         * bytecode/CodeBlock.h:
1437         (JSC::baselineCodeBlockForInlineCallFrame):
1438         (JSC):
1439         (JSC::baselineCodeBlockForOriginAndBaselineCodeBlock):
1440         * dfg/DFGOSRExit.cpp:
1441         (JSC::DFG::computeNumVariablesForCodeOrigin):
1442         (DFG):
1443         (JSC::DFG::OSRExit::OSRExit):
1444
1445 2012-03-27  Matt Lilek  <mrl@apple.com>
1446
1447         Stop compiling Interpreter.cpp with -fno-var-tracking
1448         https://bugs.webkit.org/show_bug.cgi?id=82299
1449
1450         Reviewed by Anders Carlsson.
1451
1452         * JavaScriptCore.xcodeproj/project.pbxproj:
1453
1454 2012-03-27  Pratik Solanki  <psolanki@apple.com>
1455
1456         Compiler warning when JIT is not enabled
1457         https://bugs.webkit.org/show_bug.cgi?id=82352
1458
1459         Reviewed by Filip Pizlo.
1460
1461         * runtime/JSFunction.cpp:
1462         (JSC::JSFunction::create):
1463
1464 2012-03-26  Thouraya ANDOLSI  <thouraya.andolsi@st.com>
1465
1466         Unaligned userspace access for SH4 platforms
1467         https://bugs.webkit.org/show_bug.cgi?id=79104
1468
1469         Reviewed by Gavin Barraclough.
1470
1471         * assembler/AbstractMacroAssembler.h:
1472         (Jump):
1473         (JSC::AbstractMacroAssembler::Jump::Jump):
1474         (JSC::AbstractMacroAssembler::Jump::link):
1475         * assembler/MacroAssemblerSH4.h:
1476         (JSC::MacroAssemblerSH4::load16Unaligned):
1477         (JSC::MacroAssemblerSH4::load32WithUnalignedHalfWords):
1478         (JSC::MacroAssemblerSH4::branchDouble):
1479         (JSC::MacroAssemblerSH4::branchTrue):
1480         (JSC::MacroAssemblerSH4::branchFalse):
1481         * assembler/SH4Assembler.h:
1482         (JSC::SH4Assembler::extraInstrForBranch):
1483         (SH4Assembler):
1484         (JSC::SH4Assembler::bra):
1485         (JSC::SH4Assembler::linkJump):
1486         * jit/JIT.h:
1487         (JIT):
1488         * yarr/YarrJIT.cpp:
1489         (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
1490
1491 2012-03-26  Ryosuke Niwa  <rniwa@webkit.org>
1492
1493         cssText should use shorthand notations
1494         https://bugs.webkit.org/show_bug.cgi?id=81737
1495
1496         Reviewed by Enrica Casucci.
1497
1498         Export symbols of BitVector on Windows.
1499
1500         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1501
1502 2012-03-26  Filip Pizlo  <fpizlo@apple.com>
1503
1504         DFG should assert that argument value recoveries can only be
1505         AlreadyInRegisterFile or Constant
1506         https://bugs.webkit.org/show_bug.cgi?id=82249
1507
1508         Reviewed by Michael Saboff.
1509         
1510         Made the assertions that the DFG makes for argument value recoveries match
1511         what Arguments expects.
1512
1513         * bytecode/ValueRecovery.h:
1514         (JSC::ValueRecovery::isConstant):
1515         (ValueRecovery):
1516         (JSC::ValueRecovery::isAlreadyInRegisterFile):
1517         * dfg/DFGSpeculativeJIT.cpp:
1518         (JSC::DFG::SpeculativeJIT::compile):
1519
1520 2012-03-26  Dan Bernstein  <mitz@apple.com>
1521
1522         Tried to fix the Windows build.
1523
1524         * yarr/YarrPattern.cpp:
1525         (JSC::Yarr::CharacterClassConstructor::putRange):
1526
1527 2012-03-26  Gavin Barraclough  <barraclough@apple.com>
1528
1529         Unreviewed - speculative Windows build fix.
1530
1531         * yarr/YarrCanonicalizeUCS2.h:
1532         (JSC::Yarr::getCanonicalPair):
1533
1534 2012-03-26  Dan Bernstein  <mitz@apple.com>
1535
1536         Fixed builds with assertions disabled.
1537
1538         * yarr/YarrCanonicalizeUCS2.h:
1539         (JSC::Yarr::areCanonicallyEquivalent):
1540
1541 2012-03-26  Gavin Barraclough  <barraclough@apple.com>
1542
1543         Unreviewed - errk! - accidentally the whole pbxproj.
1544
1545         * JavaScriptCore.xcodeproj/project.pbxproj:
1546
1547 2012-03-25  Gavin Barraclough  <barraclough@apple.com>
1548
1549         Greek sigma is handled wrong in case independent regexp.
1550         https://bugs.webkit.org/show_bug.cgi?id=82063
1551
1552         Reviewed by Oliver Hunt.
1553
1554         The bug here is that we assume that any given codepoint has at most one additional value it
1555         should match under a case insensitive match, and that the pair of codepoints that match (if
1556         a codepoint does not only match itself) can be determined by calling toUpper/toLower on the
1557         given codepoint). Life is not that simple.
1558
1559         Instead, pre-calculate a set of tables mapping from a UCS2 codepoint to the set of characters
1560         it may match, under the ES5.1 case-insensitive matching rules. Since unicode is fairly regular
1561         we can pack this table quite nicely, and get it down to 364 entries. This means we can use a
1562         simple binary search to find an entry in typically eight compares.
1563
1564         * CMakeLists.txt:
1565         * GNUmakefile.list.am:
1566         * JavaScriptCore.gypi:
1567         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1568         * JavaScriptCore.xcodeproj/project.pbxproj:
1569         * yarr/yarr.pri:
1570             - Added new files to build systems.
1571         * yarr/YarrCanonicalizeUCS2.cpp: Added.
1572             - New - autogenerated, UCS2 canonicalized comparison tables.
1573         * yarr/YarrCanonicalizeUCS2.h: Added.
1574         (JSC::Yarr::rangeInfoFor):
1575             - Look up the canonicalization info for a UCS2 character.
1576         (JSC::Yarr::getCanonicalPair):
1577             - For a UCS2 character with a single equivalent value, look it up.
1578         (JSC::Yarr::isCanonicallyUnique):
1579             - Returns true if no other UCS2 code points are canonically equal.
1580         (JSC::Yarr::areCanonicallyEquivalent):
1581             - Compare two values, under canonicalization rules.
1582         * yarr/YarrCanonicalizeUCS2.js: Added.
1583             - script used to generate YarrCanonicalizeUCS2.cpp.
1584         * yarr/YarrInterpreter.cpp:
1585         (JSC::Yarr::Interpreter::tryConsumeBackReference):
1586             - Use isCanonicallyUnique, rather than Unicode toUpper/toLower.
1587         * yarr/YarrJIT.cpp:
1588         (JSC::Yarr::YarrGenerator::jumpIfCharNotEquals):
1589         (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
1590         (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed):
1591             - Use isCanonicallyUnique, rather than Unicode toUpper/toLower.
1592         * yarr/YarrPattern.cpp:
1593         (JSC::Yarr::CharacterClassConstructor::putChar):
1594             - Updated to determine canonical equivalents correctly.
1595         (JSC::Yarr::CharacterClassConstructor::putUnicodeIgnoreCase):
1596             - Added, used to put a non-ascii, non-unique character in a case-insensitive match.
1597         (JSC::Yarr::CharacterClassConstructor::putRange):
1598             - Updated to determine canonical equivalents correctly.
1599         (JSC::Yarr::YarrPatternConstructor::atomPatternCharacter):
1600             - Changed to call putUnicodeIgnoreCase, instead of putChar, avoid a double lookup of rangeInfo.
1601
1602 2012-03-26  Kevin Ollivier  <kevino@theolliviers.com>
1603
1604         [wx] Unreviewed build fix. Add the build outputs dir to the list of build dirs,
1605         so we make sure it finds the API headers on all platforms.
1606
1607         * wscript:
1608
1609 2012-03-26  Patrick Gansterer  <paroga@webkit.org>
1610
1611         Build fix for WinCE after r112039.
1612
1613         * interpreter/Register.h:
1614         (Register): Removed inline keyword from decleration since
1615                     there is an ALWAYS_INLINE at the definition anyway.
1616
1617 2012-03-26  Carlos Garcia Campos  <cgarcia@igalia.com>
1618
1619         Unreviewed. Fix make distcheck.
1620
1621         * GNUmakefile.list.am: Add missing files.
1622
1623 2012-03-25  Kevin Ollivier  <kevino@theolliviers.com>
1624
1625         [wx] Unreviewed build fix. Move WTF to its own static lib build.
1626
1627         * wscript:
1628
1629 2012-03-25  Filip Pizlo  <fpizlo@apple.com>
1630
1631         DFG int-to-double conversion should be revealed to CSE
1632         https://bugs.webkit.org/show_bug.cgi?id=82135
1633
1634         Reviewed by Oliver Hunt.
1635         
1636         This introduces the notion of an Int32ToDouble node, which is injected
1637         into the graph anytime we know that we have a double use of a node that
1638         was predicted integer. The Int32ToDouble simplifies double speculation
1639         on integers by skipping the path that would unbox doubles, if we know
1640         that the value is already proven to be an integer. It allows integer to
1641         double conversions to be subjected to common subexpression elimination
1642         (CSE) by allowing the CSE phase to see where these conversions are
1643         occurring. Finally, it allows us to see when a constant is being used
1644         as both a double and an integer. This is a bit odd, since it means that
1645         sometimes a double use of a constant will not refer directly to the
1646         constant. This should not cause problems, for now, but it may require
1647         some canonizalization in the future if we want to support strength
1648         reductions of double operations based on constants.
1649         
1650         To allow injection of nodes into the graph, this change introduces the
1651         DFG::InsertionSet, which is a way of lazily inserting elements into a
1652         list. This allows the FixupPhase to remain O(N) despite performing
1653         multiple injections in a single basic block. Without the InsertionSet,
1654         each injection would require performing an insertion into a vector,
1655         which is O(N), leading to O(N^2) performance overall. With the
1656         InsertionSet, each injection simply records what insertion would have
1657         been performed, and all insertions are performed at once (via
1658         InsertionSet::execute) after processing of a basic block is completed.
1659
1660         * JavaScriptCore.xcodeproj/project.pbxproj:
1661         * bytecode/PredictedType.h:
1662         (JSC::isActionableIntMutableArrayPrediction):
1663         (JSC):
1664         (JSC::isActionableFloatMutableArrayPrediction):
1665         (JSC::isActionableTypedMutableArrayPrediction):
1666         (JSC::isActionableMutableArrayPrediction):
1667         * dfg/DFGAbstractState.cpp:
1668         (JSC::DFG::AbstractState::execute):
1669         * dfg/DFGCSEPhase.cpp:
1670         (JSC::DFG::CSEPhase::performNodeCSE):
1671         * dfg/DFGCommon.h:
1672         (JSC::DFG::useKindToString):
1673         (DFG):
1674         * dfg/DFGFixupPhase.cpp:
1675         (JSC::DFG::FixupPhase::run):
1676         (JSC::DFG::FixupPhase::fixupBlock):
1677         (FixupPhase):
1678         (JSC::DFG::FixupPhase::fixupNode):
1679         (JSC::DFG::FixupPhase::fixDoubleEdge):
1680         * dfg/DFGGraph.cpp:
1681         (JSC::DFG::Graph::dump):
1682         * dfg/DFGInsertionSet.h: Added.
1683         (DFG):
1684         (Insertion):
1685         (JSC::DFG::Insertion::Insertion):
1686         (JSC::DFG::Insertion::index):
1687         (JSC::DFG::Insertion::element):
1688         (InsertionSet):
1689         (JSC::DFG::InsertionSet::InsertionSet):
1690         (JSC::DFG::InsertionSet::append):
1691         (JSC::DFG::InsertionSet::execute):
1692         * dfg/DFGNodeType.h:
1693         (DFG):
1694         * dfg/DFGPredictionPropagationPhase.cpp:
1695         (JSC::DFG::PredictionPropagationPhase::propagate):
1696         * dfg/DFGSpeculativeJIT.cpp:
1697         (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
1698         (JSC::DFG::SpeculativeJIT::compileValueToInt32):
1699         (JSC::DFG::SpeculativeJIT::compileInt32ToDouble):
1700         (DFG):
1701         * dfg/DFGSpeculativeJIT.h:
1702         (SpeculativeJIT):
1703         (JSC::DFG::IntegerOperand::IntegerOperand):
1704         (JSC::DFG::DoubleOperand::DoubleOperand):
1705         (JSC::DFG::JSValueOperand::JSValueOperand):
1706         (JSC::DFG::StorageOperand::StorageOperand):
1707         (JSC::DFG::SpeculateIntegerOperand::SpeculateIntegerOperand):
1708         (JSC::DFG::SpeculateStrictInt32Operand::SpeculateStrictInt32Operand):
1709         (JSC::DFG::SpeculateDoubleOperand::SpeculateDoubleOperand):
1710         (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
1711         (JSC::DFG::SpeculateBooleanOperand::SpeculateBooleanOperand):
1712         * dfg/DFGSpeculativeJIT32_64.cpp:
1713         (JSC::DFG::SpeculativeJIT::compile):
1714         * dfg/DFGSpeculativeJIT64.cpp:
1715         (JSC::DFG::SpeculativeJIT::compile):
1716
1717 2012-03-25  Filip Pizlo  <fpizlo@apple.com>
1718
1719         DFGOperands should be moved out of the DFG and into bytecode
1720         https://bugs.webkit.org/show_bug.cgi?id=82151
1721
1722         Reviewed by Dan Bernstein.
1723
1724         * GNUmakefile.list.am:
1725         * JavaScriptCore.xcodeproj/project.pbxproj:
1726         * bytecode/Operands.h: Copied from Source/JavaScriptCore/dfg/DFGOperands.h.
1727         * dfg/DFGBasicBlock.h:
1728         * dfg/DFGNode.h:
1729         * dfg/DFGOSREntry.h:
1730         * dfg/DFGOSRExit.h:
1731         * dfg/DFGOperands.h: Removed.
1732         * dfg/DFGVariableAccessData.h:
1733
1734 2012-03-24  Filip Pizlo  <fpizlo@apple.com>
1735
1736         DFG 64-bit Branch implementation should not be creating a JSValueOperand that
1737         it isn't going to use
1738         https://bugs.webkit.org/show_bug.cgi?id=82136
1739
1740         Reviewed by Geoff Garen.
1741
1742         * dfg/DFGSpeculativeJIT64.cpp:
1743         (JSC::DFG::SpeculativeJIT::emitBranch):
1744
1745 2012-03-24  Kevin Ollivier  <kevino@theolliviers.com>
1746
1747         [wx] Unreviewed. Fix the build after WTF move.
1748
1749         * wscript:
1750
1751 2012-03-23  Filip Pizlo  <fpizlo@apple.com>
1752
1753         DFG double voting may be overzealous in the case of variables that end up
1754         being used as integers
1755         https://bugs.webkit.org/show_bug.cgi?id=82008
1756
1757         Reviewed by Oliver Hunt.
1758         
1759         Cleaned up propagation, making the intent more explicit in most places.
1760         Back-propagate NodeUsedAsInt for cases where a node was used in a context
1761         that is known to strongly prefer integers.
1762
1763         * dfg/DFGByteCodeParser.cpp:
1764         (JSC::DFG::ByteCodeParser::handleCall):
1765         (JSC::DFG::ByteCodeParser::parseBlock):
1766         * dfg/DFGGraph.cpp:
1767         (JSC::DFG::Graph::dumpCodeOrigin):
1768         (JSC::DFG::Graph::dump):
1769         * dfg/DFGGraph.h:
1770         (Graph):
1771         * dfg/DFGNodeFlags.cpp:
1772         (JSC::DFG::nodeFlagsAsString):
1773         * dfg/DFGNodeFlags.h:
1774         (DFG):
1775         * dfg/DFGPredictionPropagationPhase.cpp:
1776         (JSC::DFG::PredictionPropagationPhase::run):
1777         (JSC::DFG::PredictionPropagationPhase::propagate):
1778         (PredictionPropagationPhase):
1779         (JSC::DFG::PredictionPropagationPhase::mergeDefaultFlags):
1780         (JSC::DFG::PredictionPropagationPhase::vote):
1781         (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
1782         (JSC::DFG::PredictionPropagationPhase::fixupNode):
1783         * dfg/DFGVariableAccessData.h:
1784         (JSC::DFG::VariableAccessData::shouldUseDoubleFormatAccordingToVote):
1785
1786 2012-03-24  Filip Pizlo  <fpizlo@apple.com>
1787
1788         DFG::Node::shouldNotSpeculateInteger() should be eliminated
1789         https://bugs.webkit.org/show_bug.cgi?id=82123
1790
1791         Reviewed by Geoff Garen.
1792
1793         * dfg/DFGAbstractState.cpp:
1794         (JSC::DFG::AbstractState::execute):
1795         * dfg/DFGNode.h:
1796         (Node):
1797         * dfg/DFGSpeculativeJIT.cpp:
1798         (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
1799         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
1800
1801 2012-03-24  Yong Li  <yoli@rim.com>
1802
1803         Increase getByIdSlowCase ConstantSpace/InstructionSpace for CPU(ARM_TRADITIONAL)
1804         https://bugs.webkit.org/show_bug.cgi?id=81521
1805
1806         Increase sequenceGetByIdSlowCaseConstantSpace and sequenceGetByIdSlowCaseInstructionSpace
1807         for CPU(ARM_TRADITIONAL) to fit actual need.
1808
1809         Reviewed by Oliver Hunt.
1810
1811         * jit/JIT.h:
1812         (JIT):
1813
1814 2012-03-23  Filip Pizlo  <fpizlo@apple.com>
1815
1816         DFG Fixup should be able to short-circuit trivial ValueToInt32's
1817         https://bugs.webkit.org/show_bug.cgi?id=82030
1818
1819         Reviewed by Michael Saboff.
1820         
1821         Takes the fixup() method of the prediction propagation phase and makes it
1822         into its own phase. Adds the ability to short-circuit trivial ValueToInt32
1823         nodes, and mark pure ValueToInt32's as such.
1824
1825         * CMakeLists.txt:
1826         * GNUmakefile.list.am:
1827         * JavaScriptCore.xcodeproj/project.pbxproj:
1828         * Target.pri:
1829         * dfg/DFGByteCodeParser.cpp:
1830         (JSC::DFG::ByteCodeParser::makeSafe):
1831         (JSC::DFG::ByteCodeParser::handleCall):
1832         (JSC::DFG::ByteCodeParser::parseBlock):
1833         * dfg/DFGCommon.h:
1834         * dfg/DFGDriver.cpp:
1835         (JSC::DFG::compile):
1836         * dfg/DFGFixupPhase.cpp: Added.
1837         (DFG):
1838         (FixupPhase):
1839         (JSC::DFG::FixupPhase::FixupPhase):
1840         (JSC::DFG::FixupPhase::run):
1841         (JSC::DFG::FixupPhase::fixupNode):
1842         (JSC::DFG::FixupPhase::fixIntEdge):
1843         (JSC::DFG::performFixup):
1844         * dfg/DFGFixupPhase.h: Added.
1845         (DFG):
1846         * dfg/DFGPredictionPropagationPhase.cpp:
1847         (JSC::DFG::PredictionPropagationPhase::run):
1848         (PredictionPropagationPhase):
1849
1850 2012-03-23  Mark Hahnenberg  <mhahnenberg@apple.com>
1851
1852         tryReallocate could break the zero-ed memory invariant of CopiedBlocks
1853         https://bugs.webkit.org/show_bug.cgi?id=82087
1854
1855         Reviewed by Filip Pizlo.
1856
1857         Removing this optimization turned out to be ~1% regression on kraken, so I simply 
1858         undid the modification to the current block if we fail.
1859
1860         * heap/CopiedSpace.cpp:
1861         (JSC::CopiedSpace::tryReallocate): Undid the reset in the CopiedAllocator if we fail 
1862         to reallocate from the current block.
1863
1864 2012-03-23  Alexey Proskuryakov  <ap@apple.com>
1865
1866         [Mac] No need for platform-specific ENABLE_BLOB values
1867         https://bugs.webkit.org/show_bug.cgi?id=82102
1868
1869         Reviewed by David Kilzer.
1870
1871         * Configurations/FeatureDefines.xcconfig:
1872
1873 2012-03-23  Michael Saboff  <msaboff@apple.com>
1874
1875         DFG::compileValueToInt32 Sometime Generates GPR to FPR reg back to GPR
1876         https://bugs.webkit.org/show_bug.cgi?id=81805
1877
1878         Reviewed by Filip Pizlo.
1879
1880         Added SpeculativeJIT::checkGeneratedType() to determine the current format
1881         of an operand.  Used that information in SpeculativeJIT::compileValueToInt32
1882         to generate code that will use integer and JSValue types in integer
1883         format directly without a conversion to double.
1884
1885         * JavaScriptCore.xcodeproj/project.pbxproj:
1886         * dfg/DFGSpeculativeJIT.cpp:
1887         (JSC::DFG::SpeculativeJIT::checkGeneratedType):
1888         (DFG):
1889         (JSC::DFG::SpeculativeJIT::compileValueToInt32):
1890         * dfg/DFGSpeculativeJIT.h:
1891         (DFG):
1892         (SpeculativeJIT):
1893
1894 2012-03-23  Steve Falkenburg  <sfalken@apple.com>
1895
1896         Update Apple Windows build files for WTF move
1897         https://bugs.webkit.org/show_bug.cgi?id=82069
1898
1899         Reviewed by Jessie Berlin.
1900
1901         * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Removed WTF and WTFGenerated.
1902
1903 2012-03-23  Dean Jackson  <dino@apple.com>
1904
1905         Disable CSS_SHADERS in Apple builds
1906         https://bugs.webkit.org/show_bug.cgi?id=81996
1907
1908         Reviewed by Simon Fraser.
1909
1910         Remove ENABLE_CSS_SHADERS from FeatureDefines. It's now in Platform.h.
1911
1912         * Configurations/FeatureDefines.xcconfig:
1913
1914 2012-03-23  Gavin Barraclough  <barraclough@apple.com>
1915
1916         RexExp constructor last match properties should not rely on previous ovector
1917         https://bugs.webkit.org/show_bug.cgi?id=82077
1918
1919         Reviewed by Oliver Hunt.
1920
1921         This change simplifies matching, and will enable subpattern results to be fully lazily generated in the future.
1922
1923         This patch changes the scheme used to lazily generate the last match properties of the RegExp object.
1924         Instead of relying on the results in the ovector, we can instead lazily generate the subpatters using
1925         a RegExpMatchesArray. To do so we just need to store the input, the regexp matched, and the match
1926         location (the MatchResult). When the match is accessed or the input is set, we reify results. We use
1927         a special value of setting the saved result to MatchResult::failed() to indicated that we're in a
1928         reified state. This means that next time a match is performed, the store of the result will
1929         automatically blow away the reified value.
1930
1931         * JavaScriptCore.xcodeproj/project.pbxproj:
1932             - Added new files.
1933         * runtime/RegExp.cpp:
1934         (JSC::RegExpFunctionalTestCollector::outputOneTest):
1935             - changed 'subPattern' -> 'subpattern' (there was a mix in JSC, 'subpattern' was more common).
1936         * runtime/RegExpCachedResult.cpp: Added.
1937         (JSC::RegExpCachedResult::visitChildren):
1938         (JSC::RegExpCachedResult::lastResult):
1939         (JSC::RegExpCachedResult::setInput):
1940             - New methods, mark GC objects, lazily create the matches array, and record a user provided input (via assignment to RegExp.inupt).
1941         * runtime/RegExpCachedResult.h: Added.
1942         (RegExpCachedResult):
1943             - Added new class.
1944         (JSC::RegExpCachedResult::RegExpCachedResult):
1945         (JSC::RegExpCachedResult::record):
1946         (JSC::RegExpCachedResult::input):
1947             - Initialize the object, record the result of a RegExp match, access the stored input property.
1948         * runtime/RegExpConstructor.cpp:
1949         (JSC::RegExpConstructor::RegExpConstructor):
1950             - Initialize m_result/m_multiline properties.
1951         (JSC::RegExpConstructor::visitChildren):
1952             - Make sure the cached results (or lazy source for them) are marked.
1953         (JSC::RegExpConstructor::getBackref):
1954         (JSC::RegExpConstructor::getLastParen):
1955         (JSC::RegExpConstructor::getLeftContext):
1956         (JSC::RegExpConstructor::getRightContext):
1957             - Moved from RegExpConstructor, moved to RegExpCachedResult, and using new caching scheme.
1958         (JSC::regExpConstructorInput):
1959         (JSC::setRegExpConstructorInput):
1960             - Changed to use RegExpCachedResult.
1961         * runtime/RegExpConstructor.h:
1962         (JSC::RegExpConstructor::create):
1963         (RegExpConstructor):
1964         (JSC::RegExpConstructor::setMultiline):
1965         (JSC::RegExpConstructor::multiline):
1966             - Move multiline property onto the constructor object; it is not affected by the last match.
1967         (JSC::RegExpConstructor::setInput):
1968         (JSC::RegExpConstructor::input):
1969             - These defer to RegExpCachedResult.
1970         (JSC::RegExpConstructor::performMatch):
1971         * runtime/RegExpMatchesArray.cpp: Added.
1972         (JSC::RegExpMatchesArray::visitChildren):
1973             - Eeeep! added missing visitChildren!
1974         (JSC::RegExpMatchesArray::finishCreation):
1975         (JSC::RegExpMatchesArray::reifyAllProperties):
1976         (JSC::RegExpMatchesArray::reifyMatchProperty):
1977             - Moved from RegExpConstructor.cpp.
1978         (JSC::RegExpMatchesArray::leftContext):
1979         (JSC::RegExpMatchesArray::rightContext):
1980             - Since the match start/
1981         * runtime/RegExpMatchesArray.h:
1982         (RegExpMatchesArray):
1983             - Declare new methods & structure flags.
1984         * runtime/RegExpObject.cpp:
1985         (JSC::RegExpObject::match):
1986             - performMatch now requires the JSString input, to cache.
1987         * runtime/StringPrototype.cpp:
1988         (JSC::removeUsingRegExpSearch):
1989         (JSC::replaceUsingRegExpSearch):
1990         (JSC::stringProtoFuncMatch):
1991         (JSC::stringProtoFuncSearch):
1992             - performMatch now requires the JSString input, to cache.
1993
1994 2012-03-23  Tony Chang  <tony@chromium.org>
1995
1996         [chromium] rename newwtf target back to wtf
1997         https://bugs.webkit.org/show_bug.cgi?id=82064
1998
1999         Reviewed by Adam Barth.
2000
2001         * JavaScriptCore.gyp/JavaScriptCore.gyp:
2002
2003 2012-03-23  Mark Hahnenberg  <mhahnenberg@apple.com>
2004
2005         Simplify memory usage tracking in CopiedSpace
2006         https://bugs.webkit.org/show_bug.cgi?id=80705
2007
2008         Reviewed by Filip Pizlo.
2009
2010         * heap/CopiedAllocator.h:
2011         (CopiedAllocator): Rename currentUtilization to currentSize.
2012         (JSC::CopiedAllocator::currentCapacity):
2013         * heap/CopiedBlock.h:
2014         (CopiedBlock):
2015         (JSC::CopiedBlock::payload): Move the implementation of payload() out of the class
2016         declaration.
2017         (JSC):
2018         (JSC::CopiedBlock::size): Add new function to calculate the block's size.
2019         (JSC::CopiedBlock::capacity): Ditto for capacity.
2020         * heap/CopiedSpace.cpp:
2021         (JSC::CopiedSpace::CopiedSpace): Remove old bogus memory stats fields and add a new
2022         field for the water mark.
2023         (JSC::CopiedSpace::init):
2024         (JSC::CopiedSpace::tryAllocateSlowCase): When we fail to allocate from the current 
2025         block, we need to update our current water mark with the size of the block.
2026         (JSC::CopiedSpace::tryAllocateOversize): When we allocate a new oversize block, we 
2027         need to update our current water mark with the size of the used portion of the block.
2028         (JSC::CopiedSpace::tryReallocate): We don't need to update the water mark when 
2029         reallocating because it will either get accounted for when we fill up the block later 
2030         in the case of being able to reallocate in the current block or it will get picked up 
2031         immediately because we'll have to get a new block.
2032         (JSC::CopiedSpace::tryReallocateOversize): We do, however, need to update in when 
2033         realloc-ing an oversize block because we deallocate the old block and allocate a brand 
2034         new one.
2035         (JSC::CopiedSpace::doneFillingBlock): Update the water mark as blocks are returned to 
2036         the CopiedSpace by the SlotVisitors.
2037         (JSC::CopiedSpace::doneCopying): Add in any pinned blocks to the water mark.
2038         (JSC::CopiedSpace::getFreshBlock): We use the Heap's new function to tell us whether or 
2039         not we should collect now instead of doing the calculation ourself.
2040         (JSC::CopiedSpace::destroy):
2041         (JSC):
2042         (JSC::CopiedSpace::size): Manually calculate the size of the CopiedSpace, similar to how 
2043         MarkedSpace does.
2044         (JSC::CopiedSpace::capacity): Ditto for capacity.
2045         * heap/CopiedSpace.h:
2046         (JSC::CopiedSpace::waterMark):
2047         (CopiedSpace):
2048         * heap/CopiedSpaceInlineMethods.h:
2049         (JSC::CopiedSpace::startedCopying): Reset water mark to 0 when we start copying during a 
2050         collection.
2051         (JSC::CopiedSpace::allocateNewBlock):
2052         (JSC::CopiedSpace::fitsInBlock):
2053         (JSC::CopiedSpace::allocateFromBlock):
2054         * heap/Heap.cpp:
2055         (JSC::Heap::size): Incorporate size of CopiedSpace into the total size of the Heap.
2056         (JSC::Heap::capacity): Ditto for capacity.
2057         (JSC::Heap::collect):
2058         * heap/Heap.h:
2059         (Heap):
2060         (JSC::Heap::shouldCollect): New function for other sub-parts of the Heap to use to 
2061         determine whether they should initiate a collection or continue to allocate new blocks.
2062         (JSC):
2063         (JSC::Heap::waterMark): Now is the sum of the water marks of the two sub-parts of the
2064         Heap (MarkedSpace and CopiedSpace).
2065         * heap/MarkedAllocator.cpp:
2066         (JSC::MarkedAllocator::allocateSlowCase): Changed to use the Heap's new shouldCollect() function.
2067
2068 2012-03-23  Ryosuke Niwa  <rniwa@webkit.org>
2069
2070         BitVector::resizeOutOfLine doesn't memset when converting an inline buffer
2071         https://bugs.webkit.org/show_bug.cgi?id=82012
2072
2073         Reviewed by Filip Pizlo.
2074
2075         Initialize out-of-line buffers while extending an inline buffer. Also export symbols to be used in WebCore.
2076
2077         * wtf/BitVector.cpp:
2078         (WTF::BitVector::resizeOutOfLine):
2079         * wtf/BitVector.h:
2080         (BitVector):
2081         (OutOfLineBits):
2082
2083 2012-03-22  Michael Saboff  <msaboff@apple.com>
2084
2085         ExecutableAllocator::memoryPressureMultiplier() might can return NaN
2086         https://bugs.webkit.org/show_bug.cgi?id=82002
2087
2088         Reviewed by Filip Pizlo.
2089
2090         Guard against divide by zero and then make sure the return
2091         value is >= 1.0.
2092
2093         * jit/ExecutableAllocator.cpp:
2094         (JSC::ExecutableAllocator::memoryPressureMultiplier):
2095         * jit/ExecutableAllocatorFixedVMPool.cpp:
2096         (JSC::ExecutableAllocator::memoryPressureMultiplier):
2097
2098 2012-03-22  Jessie Berlin  <jberlin@apple.com>
2099
2100         Windows build fix after r111778.
2101
2102         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2103         Don't include and try to build files owned by WTF.
2104         Also, let VS have its way with the vcproj in terms of file ordering.
2105
2106 2012-03-22  Raphael Kubo da Costa  <rakuco@FreeBSD.org>
2107
2108         [CMake] Unreviewed build fix after r111778.
2109
2110         * CMakeLists.txt: Move ${WTF_DIR} after ${JAVASCRIPTCORE_DIR} in
2111         the include paths so that the right config.h is used.
2112
2113 2012-03-22  Tony Chang  <tony@chromium.org>
2114
2115         Unreviewed, fix chromium build after wtf move.
2116
2117         Remove old wtf_config and wtf targets.
2118
2119         * JavaScriptCore.gyp/JavaScriptCore.gyp:
2120
2121 2012-03-22  Martin Robinson  <mrobinson@igalia.com>
2122
2123         Fixed the GTK+ WTF/JavaScriptCore build after r111778.
2124
2125         * GNUmakefile.list.am: Removed an extra trailing backslash.
2126
2127 2012-03-22  Mark Rowe  <mrowe@apple.com>
2128
2129         Fix the build.
2130
2131         * Configurations/JavaScriptCore.xcconfig: Tell the linker to pull in all members from static libraries
2132         rather than only those that contain symbols that JavaScriptCore itself uses.
2133         * JavaScriptCore.xcodeproj/project.pbxproj: Remove some bogus settings that crept in to the Xcode project.
2134
2135 2012-03-22  Filip Pizlo  <fpizlo@apple.com>
2136
2137         DFG NodeFlags has some duplicate code and naming issues
2138         https://bugs.webkit.org/show_bug.cgi?id=81975
2139
2140         Reviewed by Gavin Barraclough.
2141         
2142         Removed most references to "ArithNodeFlags" since those are now just part
2143         of the node flags. Fixed some renaming goofs (EdgedAsNum is once again
2144         NodeUsedAsNum). Got rid of setArithNodeFlags() and mergeArithNodeFlags()
2145         because the former was never called and the latter did the same things as
2146         mergeFlags().
2147
2148         * dfg/DFGByteCodeParser.cpp:
2149         (JSC::DFG::ByteCodeParser::makeSafe):
2150         (JSC::DFG::ByteCodeParser::makeDivSafe):
2151         (JSC::DFG::ByteCodeParser::handleIntrinsic):
2152         * dfg/DFGGraph.cpp:
2153         (JSC::DFG::Graph::dump):
2154         * dfg/DFGNode.h:
2155         (JSC::DFG::Node::arithNodeFlags):
2156         (Node):
2157         * dfg/DFGNodeFlags.cpp:
2158         (JSC::DFG::nodeFlagsAsString):
2159         * dfg/DFGNodeFlags.h:
2160         (DFG):
2161         (JSC::DFG::nodeUsedAsNumber):
2162         * dfg/DFGPredictionPropagationPhase.cpp:
2163         (JSC::DFG::PredictionPropagationPhase::propagate):
2164         (JSC::DFG::PredictionPropagationPhase::mergeDefaultArithFlags):
2165
2166 2012-03-22  Eric Seidel  <eric@webkit.org>
2167
2168         Actually move WTF files to their new home
2169         https://bugs.webkit.org/show_bug.cgi?id=81844
2170
2171         Unreviewed.  The details of the port-specific changes
2172         have been seen by contributors from those ports, but
2173         the whole 5MB change isn't very reviewable as-is.
2174
2175         * GNUmakefile.am:
2176         * GNUmakefile.list.am:
2177         * JSCTypedArrayStubs.h:
2178         * JavaScriptCore.gypi:
2179         * JavaScriptCore.xcodeproj/project.pbxproj:
2180         * jsc.cpp:
2181
2182 2012-03-22  Kevin Ollivier  <kevino@theolliviers.com>
2183
2184         [wx] Unreviewed. Adding Source/WTF to the build.
2185
2186         * wscript:
2187
2188 2012-03-22  Gavin Barraclough  <barraclough@apple.com>
2189
2190         Add JSValue::isFunction
2191         https://bugs.webkit.org/show_bug.cgi?id=81935
2192
2193         Reviewed by Geoff Garen.
2194
2195         This would be useful in the WebCore bindings code.
2196         Also, remove asFunction, replace with jsCast<JSFunction*>.
2197
2198         * API/JSContextRef.cpp:
2199         * debugger/Debugger.cpp:
2200         * debugger/DebuggerCallFrame.cpp:
2201         (JSC::DebuggerCallFrame::functionName):
2202         * dfg/DFGGraph.h:
2203         (JSC::DFG::Graph::valueOfFunctionConstant):
2204         * dfg/DFGOperations.cpp:
2205         * interpreter/CallFrame.cpp:
2206         (JSC::CallFrame::isInlineCallFrameSlow):
2207         * interpreter/Interpreter.cpp:
2208         (JSC::Interpreter::privateExecute):
2209         * jit/JITStubs.cpp:
2210         (JSC::DEFINE_STUB_FUNCTION):
2211         (JSC::jitCompileFor):
2212         (JSC::lazyLinkFor):
2213         * llint/LLIntSlowPaths.cpp:
2214         (JSC::LLInt::traceFunctionPrologue):
2215         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
2216         (JSC::LLInt::setUpCall):
2217         * runtime/Arguments.h:
2218         (JSC::Arguments::finishCreation):
2219         * runtime/ArrayPrototype.cpp:
2220         (JSC::arrayProtoFuncFilter):
2221         (JSC::arrayProtoFuncMap):
2222         (JSC::arrayProtoFuncEvery):
2223         (JSC::arrayProtoFuncForEach):
2224         (JSC::arrayProtoFuncSome):
2225         (JSC::arrayProtoFuncReduce):
2226         (JSC::arrayProtoFuncReduceRight):
2227         * runtime/CommonSlowPaths.h:
2228         (JSC::CommonSlowPaths::arityCheckFor):
2229         * runtime/Executable.h:
2230         (JSC::FunctionExecutable::compileFor):
2231         (JSC::FunctionExecutable::compileOptimizedFor):
2232         * runtime/FunctionPrototype.cpp:
2233         (JSC::functionProtoFuncToString):
2234         * runtime/JSArray.cpp:
2235         (JSC::JSArray::sort):
2236         * runtime/JSFunction.cpp:
2237         (JSC::JSFunction::argumentsGetter):
2238         (JSC::JSFunction::callerGetter):
2239         (JSC::JSFunction::lengthGetter):
2240         * runtime/JSFunction.h:
2241         (JSC):
2242         (JSC::asJSFunction):
2243         (JSC::JSValue::isFunction):
2244         * runtime/JSGlobalData.cpp:
2245         (WTF::Recompiler::operator()):
2246         (JSC::JSGlobalData::releaseExecutableMemory):
2247         * runtime/JSValue.h:
2248         * runtime/StringPrototype.cpp:
2249         (JSC::replaceUsingRegExpSearch):
2250
2251 2012-03-21  Filip Pizlo  <fpizlo@apple.com>
2252
2253         DFG speculation on booleans should be rationalized
2254         https://bugs.webkit.org/show_bug.cgi?id=81840
2255
2256         Reviewed by Gavin Barraclough.
2257         
2258         This removes isKnownBoolean() and replaces it with AbstractState-based
2259         optimization, and cleans up the control flow in code gen methods for
2260         Branch and LogicalNot. Also fixes a goof in Node::shouldSpeculateNumber,
2261         and removes isKnownNotBoolean() since that method appeared to be a
2262         helper used solely by 32_64's speculateBooleanOperation().
2263         
2264         This is performance-neutral.
2265
2266         * dfg/DFGAbstractState.cpp:
2267         (JSC::DFG::AbstractState::execute):
2268         * dfg/DFGNode.h:
2269         (JSC::DFG::Node::shouldSpeculateNumber):
2270         * dfg/DFGSpeculativeJIT.cpp:
2271         (DFG):
2272         * dfg/DFGSpeculativeJIT.h:
2273         (SpeculativeJIT):
2274         * dfg/DFGSpeculativeJIT32_64.cpp:
2275         (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
2276         (JSC::DFG::SpeculativeJIT::compileLogicalNot):
2277         (JSC::DFG::SpeculativeJIT::emitBranch):
2278         (JSC::DFG::SpeculativeJIT::compile):
2279         * dfg/DFGSpeculativeJIT64.cpp:
2280         (JSC::DFG::SpeculativeJIT::compileLogicalNot):
2281         (JSC::DFG::SpeculativeJIT::emitBranch):
2282         (JSC::DFG::SpeculativeJIT::compile):
2283
2284 2012-03-21  Mark Rowe  <mrowe@apple.com>
2285
2286         Fix the build.
2287
2288         * wtf/MetaAllocator.h:
2289         (MetaAllocator): Export the destructor.
2290
2291 2012-03-21  Eric Seidel  <eric@webkit.org>
2292
2293         Fix remaining WTF includes in JavaScriptCore in preparation for moving WTF headers out of JavaScriptCore
2294         https://bugs.webkit.org/show_bug.cgi?id=81834
2295
2296         Reviewed by Adam Barth.
2297
2298         * jsc.cpp:
2299         * os-win32/WinMain.cpp:
2300         * runtime/JSDateMath.cpp:
2301         * runtime/TimeoutChecker.cpp:
2302         * testRegExp.cpp:
2303         * tools/CodeProfiling.cpp:
2304
2305 2012-03-21  Eric Seidel  <eric@webkit.org>
2306
2307         WTF::MetaAllocator has a weak vtable (discovered when building wtf as a static library)
2308         https://bugs.webkit.org/show_bug.cgi?id=81838
2309
2310         Reviewed by Geoffrey Garen.
2311
2312         My understanding is that weak vtables happen when the compiler/linker cannot
2313         determine which compilation unit should constain the vtable.  In this case
2314         because there were only pure virtual functions as well as an "inline"
2315         virtual destructor (thus the virtual destructor was defined in many compilation
2316         units).  Since you can't actually "inline" a virtual function (it still has to
2317         bounce through the vtable), the "inline" on this virutal destructor doesn't
2318         actually help performance, and is only serving to confuse the compiler here.
2319         I've moved the destructor implementation to the .cpp file, thus making
2320         it clear to the compiler where the vtable should be stored, and solving the error.
2321
2322         * wtf/MetaAllocator.cpp:
2323         (WTF::MetaAllocator::~MetaAllocator):
2324         (WTF):
2325         * wtf/MetaAllocator.h:
2326
2327 2012-03-20  Gavin Barraclough  <barraclough@apple.com>
2328
2329         RegExpMatchesArray should not copy the ovector
2330         https://bugs.webkit.org/show_bug.cgi?id=81742
2331
2332         Reviewed by Michael Saboff.
2333
2334         Currently, all RegExpMatchesArray object contain Vector<int, 32>, used to hold any sub-pattern results.
2335         This makes allocation/construction/destruction of these objects more expensive. Instead, just store the
2336         main match, and recreate the sub-pattern ranges only if necessary (these are often only used for grouping,
2337         and the results never accessed).
2338         If the main match (index 0) of the RegExpMatchesArray is accessed, reify that value alone.
2339
2340         * dfg/DFGOperations.cpp:
2341             - RegExpObject match renamed back to test (test returns a bool).
2342         * runtime/RegExpConstructor.cpp:
2343         (JSC):
2344             - Removed RegExpResult, RegExpMatchesArray constructor, destroy method.
2345         (JSC::RegExpMatchesArray::finishCreation):
2346             - Removed RegExpConstructorPrivate parameter.
2347         (JSC::RegExpMatchesArray::reifyAllProperties):
2348             - (Was fillArrayInstance) Reify all properties of the RegExpMatchesArray.
2349             If there are sub-pattern properties, the RegExp is re-run to generate their values.
2350         (JSC::RegExpMatchesArray::reifyMatchProperty):
2351             - Reify just the match (index 0) property of the RegExpMatchesArray.
2352         * runtime/RegExpConstructor.h:
2353         (RegExpConstructor):
2354         (JSC::RegExpConstructor::performMatch):
2355             - performMatch now returns a MatchResult, rather than using out-parameters.
2356         * runtime/RegExpMatchesArray.h:
2357         (JSC::RegExpMatchesArray::RegExpMatchesArray):
2358             - Moved from .cpp, stores the input/regExp/result to use when lazily reifying properties.
2359         (RegExpMatchesArray):
2360         (JSC::RegExpMatchesArray::create):
2361             - Now passed the input string matched against, the RegExp, and the MatchResult.
2362         (JSC::RegExpMatchesArray::reifyAllPropertiesIfNecessary):
2363         (JSC::RegExpMatchesArray::reifyMatchPropertyIfNecessary):
2364             - Helpers to conditionally reify properties.
2365         (JSC::RegExpMatchesArray::getOwnPropertySlot):
2366         (JSC::RegExpMatchesArray::getOwnPropertySlotByIndex):
2367         (JSC::RegExpMatchesArray::getOwnPropertyDescriptor):
2368         (JSC::RegExpMatchesArray::put):
2369         (JSC::RegExpMatchesArray::putByIndex):
2370         (JSC::RegExpMatchesArray::deleteProperty):
2371         (JSC::RegExpMatchesArray::deletePropertyByIndex):
2372         (JSC::RegExpMatchesArray::getOwnPropertyNames):
2373         (JSC::RegExpMatchesArray::defineOwnProperty):
2374             - Changed to use reifyAllPropertiesIfNecessary/reifyMatchPropertyIfNecessary
2375             (getOwnPropertySlotByIndex calls reifyMatchPropertyIfNecessary if index is 0).
2376         * runtime/RegExpObject.cpp:
2377         (JSC::RegExpObject::exec):
2378         (JSC::RegExpObject::match):
2379             - match now returns a MatchResult.
2380         * runtime/RegExpObject.h:
2381         (JSC::MatchResult::MatchResult):
2382             - Added the result of a match is a start & end tuple.
2383         (JSC::MatchResult::failed):
2384             - A failure is indicated by (notFound, 0).
2385         (JSC::MatchResult::operator bool):
2386             - Evaluates to false if the match failed.
2387         (JSC::MatchResult::empty):
2388             - Evaluates to true if the match succeeded with length 0.
2389         (JSC::RegExpObject::test):
2390             - Now returns a bool.
2391         * runtime/RegExpPrototype.cpp:
2392         (JSC::regExpProtoFuncTest):
2393             - RegExpObject match renamed back to test (test returns a bool).
2394         * runtime/StringPrototype.cpp:
2395         (JSC::removeUsingRegExpSearch):
2396         (JSC::replaceUsingRegExpSearch):
2397         (JSC::stringProtoFuncMatch):
2398         (JSC::stringProtoFuncSearch):
2399             - performMatch now returns a MatchResult, rather than using out-parameters.
2400
2401 2012-03-21  Hojong Han  <hojong.han@samsung.com>
2402
2403         Fix out of memory by allowing overcommit
2404         https://bugs.webkit.org/show_bug.cgi?id=81743
2405
2406         Reviewed by Geoffrey Garen.
2407
2408         Garbage collection is not triggered and new blocks are added
2409         because overcommit is allowed by MAP_NORESERVE flag when high water mark is big enough.
2410
2411         * wtf/OSAllocatorPosix.cpp:
2412         (WTF::OSAllocator::reserveAndCommit):
2413
2414 2012-03-21  Jessie Berlin  <jberlin@apple.com>
2415
2416         More Windows build fixing.
2417
2418         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
2419         Fix the order of the include directories to look in include/private first before looking
2420         in include/private/JavaScriptCore.
2421         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGO.vsprops:
2422         Look in the Production output directory (where the wtf headers will be). This is the same
2423         thing that is done for jsc and testRegExp in ReleasePGO.
2424
2425 2012-03-21  Jessie Berlin  <jberlin@apple.com>
2426
2427         WTF headers should be in $(ConfigurationBuildDir)\include\private\wtf, not
2428         $(ConfigurationBuildDir)\include\private\JavaScriptCore\wtf.
2429         https://bugs.webkit.org/show_bug.cgi?id=81739
2430
2431         Reviewed by Dan Bernstein.
2432
2433         * JavaScriptCore.vcproj/jsc/jsc.vcproj:
2434         Look for AtomicString.cpp, StringBuilder.cpp, StringImpl.cpp, and WTFString.cpp in the wtf
2435         subdirectory of the build output, not the JavaScriptCore/wtf subdirectory.
2436         * JavaScriptCore.vcproj/testRegExp/testRegExp.vcproj:
2437         Ditto.
2438
2439         * JavaScriptCore.vcproj/testRegExp/testRegExpReleasePGO.vsprops:
2440         Get the headers for those 4 files from the wtf subdirectory of the build output, not the
2441         JavaScriptCore/wtf subdirectory.
2442         * JavaScriptCore.vcproj/jsc/jscReleasePGO.vsprops:
2443         Ditto.
2444
2445 2012-03-20  Eric Seidel  <eric@webkit.org>
2446
2447         Move wtf/Platform.h from JavaScriptCore to Source/WTF/wtf
2448         https://bugs.webkit.org/show_bug.cgi?id=80911
2449
2450         Reviewed by Adam Barth.
2451
2452         Update the various build systems to depend on Source/WTF headers
2453         as well as remove references to Platform.h (since it's now moved).
2454
2455         * CMakeLists.txt:
2456         * JavaScriptCore.pri:
2457         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
2458         * JavaScriptCore.xcodeproj/project.pbxproj:
2459         * wtf/CMakeLists.txt:
2460
2461 2012-03-20  Filip Pizlo  <fpizlo@apple.com>
2462
2463         op_mod fails on many interesting corner cases
2464         https://bugs.webkit.org/show_bug.cgi?id=81648
2465
2466         Reviewed by Oliver Hunt.
2467         
2468         Removed most strength reduction for op_mod, and fixed the integer handling
2469         to do the right thing for corner cases. Oddly, this revealed bugs in OSR,
2470         which this patch also fixes.
2471         
2472         This patch is performance neutral on all of the major benchmarks we track.
2473
2474         * dfg/DFGOperations.cpp:
2475         * dfg/DFGOperations.h:
2476         * dfg/DFGSpeculativeJIT.cpp:
2477         (DFG):
2478         (JSC::DFG::SpeculativeJIT::compileSoftModulo):
2479         (JSC::DFG::SpeculativeJIT::compileArithMod):
2480         * jit/JIT.h:
2481         (JIT):
2482         * jit/JITArithmetic.cpp:
2483         (JSC):
2484         (JSC::JIT::emit_op_mod):
2485         (JSC::JIT::emitSlow_op_mod):
2486         * jit/JITArithmetic32_64.cpp:
2487         (JSC::JIT::emit_op_mod):
2488         (JSC::JIT::emitSlow_op_mod):
2489         * jit/JITOpcodes32_64.cpp:
2490         (JSC::JIT::privateCompileCTIMachineTrampolines):
2491         (JSC):
2492         * jit/JITStubs.h:
2493         (TrampolineStructure):
2494         (JSC::JITThunks::ctiNativeConstruct):
2495         * llint/LowLevelInterpreter64.asm:
2496         * wtf/Platform.h:
2497         * wtf/SimpleStats.h:
2498         (WTF::SimpleStats::variance):
2499
2500 2012-03-20  Steve Falkenburg  <sfalken@apple.com>
2501
2502         Windows (make based) build fix.
2503         <rdar://problem/11069015>
2504
2505         * JavaScriptCore.vcproj/JavaScriptCore.make: devenv /rebuild doesn't work with JavaScriptCore.vcproj. Use /clean and /build instead.
2506
2507 2012-03-20  Steve Falkenburg  <sfalken@apple.com>
2508
2509         Move WTF-related Windows project files out of JavaScriptCore
2510         https://bugs.webkit.org/show_bug.cgi?id=80680
2511
2512         This change only moves the vcproj and related files from JavaScriptCore/JavaScriptCore.vcproj/WTF.
2513         It does not move any source code. This is in preparation for the WTF source move out of
2514         JavaScriptCore.
2515
2516         Reviewed by Jessie Berlin.
2517
2518         * JavaScriptCore.vcproj/JavaScriptCore.sln:
2519         * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:
2520         * JavaScriptCore.vcproj/WTF: Removed.
2521         * JavaScriptCore.vcproj/WTF/WTF.vcproj: Removed.
2522         * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops: Removed.
2523         * JavaScriptCore.vcproj/WTF/WTFDebug.vsprops: Removed.
2524         * JavaScriptCore.vcproj/WTF/WTFDebugAll.vsprops: Removed.
2525         * JavaScriptCore.vcproj/WTF/WTFDebugCairoCFLite.vsprops: Removed.
2526         * JavaScriptCore.vcproj/WTF/WTFGenerated.make: Removed.
2527         * JavaScriptCore.vcproj/WTF/WTFGenerated.vcproj: Removed.
2528         * JavaScriptCore.vcproj/WTF/WTFGeneratedCommon.vsprops: Removed.
2529         * JavaScriptCore.vcproj/WTF/WTFGeneratedDebug.vsprops: Removed.
2530         * JavaScriptCore.vcproj/WTF/WTFGeneratedDebugAll.vsprops: Removed.
2531         * JavaScriptCore.vcproj/WTF/WTFGeneratedDebugCairoCFLite.vsprops: Removed.
2532         * JavaScriptCore.vcproj/WTF/WTFGeneratedProduction.vsprops: Removed.
2533         * JavaScriptCore.vcproj/WTF/WTFGeneratedRelease.vsprops: Removed.
2534         * JavaScriptCore.vcproj/WTF/WTFGeneratedReleaseCairoCFLite.vsprops: Removed.
2535         * JavaScriptCore.vcproj/WTF/WTFPostBuild.cmd: Removed.
2536         * JavaScriptCore.vcproj/WTF/WTFPreBuild.cmd: Removed.
2537         * JavaScriptCore.vcproj/WTF/WTFProduction.vsprops: Removed.
2538         * JavaScriptCore.vcproj/WTF/WTFRelease.vsprops: Removed.
2539         * JavaScriptCore.vcproj/WTF/WTFReleaseCairoCFLite.vsprops: Removed.
2540         * JavaScriptCore.vcproj/WTF/build-generated-files.sh: Removed.
2541         * JavaScriptCore.vcproj/WTF/copy-files.cmd: Removed.
2542         * JavaScriptCore.vcproj/WTF/work-around-vs-dependency-tracking-bugs.py: Removed.
2543
2544 2012-03-20  Benjamin Poulain  <bpoulain@apple.com>
2545
2546         Cache the type string of JavaScript object
2547         https://bugs.webkit.org/show_bug.cgi?id=81446
2548
2549         Reviewed by Geoffrey Garen.
2550
2551         Instead of creating the JSString every time, we create
2552         lazily the strings in JSGlobalData.
2553
2554         This avoid the construction of the StringImpl and of the JSString,
2555         which gives some performance improvements.
2556
2557         * runtime/CommonIdentifiers.h:
2558         * runtime/JSValue.cpp:
2559         (JSC::JSValue::toStringSlowCase):
2560         * runtime/Operations.cpp:
2561         (JSC::jsTypeStringForValue):
2562         * runtime/SmallStrings.cpp:
2563         (JSC::SmallStrings::SmallStrings):
2564         (JSC::SmallStrings::finalizeSmallStrings):
2565         (JSC::SmallStrings::initialize):
2566         (JSC):
2567         * runtime/SmallStrings.h:
2568         (SmallStrings):
2569
2570 2012-03-20  Oliver Hunt  <oliver@apple.com>
2571
2572         Allow LLINT to work even when executable allocation fails.
2573         https://bugs.webkit.org/show_bug.cgi?id=81693
2574
2575         Reviewed by Gavin Barraclough.
2576
2577         Don't crash if executable allocation fails if we can fall back on LLINT
2578
2579         * jit/ExecutableAllocatorFixedVMPool.cpp:
2580         (JSC::FixedVMPoolExecutableAllocator::FixedVMPoolExecutableAllocator):
2581         * wtf/OSAllocatorPosix.cpp:
2582         (WTF::OSAllocator::reserveAndCommit):
2583
2584 2012-03-20  Csaba Osztrogonác  <ossy@webkit.org>
2585
2586         Division optimizations fail to infer cases of truncated division and mishandle -2147483648/-1
2587         https://bugs.webkit.org/show_bug.cgi?id=81428
2588
2589         32 bit buildfix after r111355.
2590
2591         2147483648 (2^31) isn't valid int literal in ISO C90, because 2147483647 (2^31-1) is the biggest int.
2592         The smallest int is -2147483648 (-2^31) == -2147483647 - 1  == -INT32_MAX-1 == INT32_MIN (stdint.h).
2593
2594         Reviewed by Zoltan Herczeg.
2595
2596         * dfg/DFGSpeculativeJIT.cpp:
2597         (JSC::DFG::SpeculativeJIT::compileIntegerArithDivForX86):
2598
2599 2012-03-19  Jochen Eisinger  <jochen@chromium.org>
2600
2601         Split WTFReportBacktrace into WTFReportBacktrace and WTFPrintBacktrace
2602         https://bugs.webkit.org/show_bug.cgi?id=80983
2603
2604         Reviewed by Darin Adler.
2605
2606         This allows printing a backtrace acquired by an earlier WTFGetBacktrace
2607         call which is useful for local debugging.
2608
2609         * wtf/Assertions.cpp:
2610         * wtf/Assertions.h:
2611
2612 2012-03-19  Benjamin Poulain  <benjamin@webkit.org>
2613
2614         Do not copy the script source in the SourceProvider, just reference the existing string
2615         https://bugs.webkit.org/show_bug.cgi?id=81466
2616
2617         Reviewed by Geoffrey Garen.
2618
2619         * parser/SourceCode.h: Remove the unused, and incorrect, function data().
2620         * parser/SourceProvider.h: Add OVERRIDE for clarity.
2621
2622 2012-03-19  Filip Pizlo  <fpizlo@apple.com>
2623
2624         Division optimizations fail to infer cases of truncated division and
2625         mishandle -2147483648/-1
2626         https://bugs.webkit.org/show_bug.cgi?id=81428
2627         <rdar://problem/11067382>
2628
2629         Reviewed by Oliver Hunt.
2630
2631         If you're a division over integers and you're only used as an integer, then you're
2632         an integer division and remainder checks become unnecessary. If you're dividing
2633         -2147483648 by -1, don't crash.
2634
2635         * assembler/MacroAssemblerX86Common.h:
2636         (MacroAssemblerX86Common):
2637         (JSC::MacroAssemblerX86Common::add32):
2638         * dfg/DFGSpeculativeJIT.cpp:
2639         (DFG):
2640         (JSC::DFG::SpeculativeJIT::compileIntegerArithDivForX86):
2641         * dfg/DFGSpeculativeJIT.h:
2642         (SpeculativeJIT):
2643         * dfg/DFGSpeculativeJIT32_64.cpp:
2644         (JSC::DFG::SpeculativeJIT::compile):
2645         * dfg/DFGSpeculativeJIT64.cpp:
2646         (JSC::DFG::SpeculativeJIT::compile):
2647         * llint/LowLevelInterpreter64.asm:
2648
2649 2012-03-19  Benjamin Poulain  <bpoulain@apple.com>
2650
2651         Simplify SmallStrings
2652         https://bugs.webkit.org/show_bug.cgi?id=81445
2653
2654         Reviewed by Gavin Barraclough.
2655
2656         SmallStrings had two methods that should not be public: count() and clear().
2657
2658         The method clear() is effectively replaced by finalizeSmallStrings(). The body
2659         of the method was moved to the constructor since the code is obvious.
2660
2661         The method count() is unused.
2662
2663         * runtime/SmallStrings.cpp:
2664         (JSC::SmallStrings::SmallStrings):
2665         * runtime/SmallStrings.h:
2666         (SmallStrings):
2667
2668 2012-03-19  Filip Pizlo  <fpizlo@apple.com>
2669
2670         DFG can no longer compile V8-v4/regexp in debug mode
2671         https://bugs.webkit.org/show_bug.cgi?id=81592
2672
2673         Reviewed by Gavin Barraclough.
2674
2675         * dfg/DFGSpeculativeJIT32_64.cpp:
2676         (JSC::DFG::SpeculativeJIT::compile):
2677         * dfg/DFGSpeculativeJIT64.cpp:
2678         (JSC::DFG::SpeculativeJIT::compile):
2679
2680 2012-03-19  Filip Pizlo  <fpizlo@apple.com>
2681
2682         Prediction propagation for UInt32ToNumber incorrectly assumes that outs outcome does not
2683         change throughout the fixpoint
2684         https://bugs.webkit.org/show_bug.cgi?id=81583
2685
2686         Reviewed by Michael Saboff.
2687
2688         * dfg/DFGPredictionPropagationPhase.cpp:
2689         (JSC::DFG::PredictionPropagationPhase::propagate):
2690
2691 2012-03-19  Filip Pizlo  <fpizlo@apple.com>
2692
2693         GC should not attempt to clear LLInt instruction inline caches for code blocks that are in
2694         the process of being generated
2695         https://bugs.webkit.org/show_bug.cgi?id=81565
2696
2697         Reviewed by Oliver Hunt.
2698
2699         * bytecode/CodeBlock.cpp:
2700         (JSC::CodeBlock::finalizeUnconditionally):
2701
2702 2012-03-19  Eric Seidel  <eric@webkit.org>
2703
2704         Fix WTF header include discipline in Chromium WebKit
2705         https://bugs.webkit.org/show_bug.cgi?id=81281
2706
2707         Reviewed by James Robinson.
2708
2709         * JavaScriptCore.gyp/JavaScriptCore.gyp:
2710         * wtf/unicode/icu/CollatorICU.cpp:
2711
2712 2012-03-19  Filip Pizlo  <fpizlo@apple.com>
2713
2714         DFG NodeUse should be called Edge and NodeReferenceBlob should be called AdjacencyList
2715         https://bugs.webkit.org/show_bug.cgi?id=81556
2716
2717         Rubber stamped by Gavin Barraclough.
2718
2719         * GNUmakefile.list.am:
2720         * JavaScriptCore.xcodeproj/project.pbxproj:
2721         * dfg/DFGAbstractState.h:
2722         (JSC::DFG::AbstractState::forNode):
2723         * dfg/DFGAdjacencyList.h: Copied from Source/JavaScriptCore/dfg/DFGNodeReferenceBlob.h.
2724         (JSC::DFG::AdjacencyList::AdjacencyList):
2725         (JSC::DFG::AdjacencyList::child):
2726         (JSC::DFG::AdjacencyList::setChild):
2727         (JSC::DFG::AdjacencyList::child1):
2728         (JSC::DFG::AdjacencyList::child2):
2729         (JSC::DFG::AdjacencyList::child3):
2730         (JSC::DFG::AdjacencyList::setChild1):
2731         (JSC::DFG::AdjacencyList::setChild2):
2732         (JSC::DFG::AdjacencyList::setChild3):
2733         (JSC::DFG::AdjacencyList::child1Unchecked):
2734         (JSC::DFG::AdjacencyList::initialize):
2735         (AdjacencyList):
2736         * dfg/DFGByteCodeParser.cpp:
2737         (JSC::DFG::ByteCodeParser::addVarArgChild):
2738         (JSC::DFG::ByteCodeParser::processPhiStack):
2739         * dfg/DFGCSEPhase.cpp:
2740         (JSC::DFG::CSEPhase::canonicalize):
2741         (JSC::DFG::CSEPhase::performSubstitution):
2742         * dfg/DFGEdge.h: Copied from Source/JavaScriptCore/dfg/DFGNodeUse.h.
2743         (DFG):
2744         (JSC::DFG::Edge::Edge):
2745         (JSC::DFG::Edge::operator==):
2746         (JSC::DFG::Edge::operator!=):
2747         (Edge):
2748         (JSC::DFG::operator==):
2749         (JSC::DFG::operator!=):
2750         * dfg/DFGGraph.h:
2751         (JSC::DFG::Graph::operator[]):
2752         (JSC::DFG::Graph::at):
2753         (JSC::DFG::Graph::ref):
2754         (JSC::DFG::Graph::deref):
2755         (JSC::DFG::Graph::clearAndDerefChild1):
2756         (JSC::DFG::Graph::clearAndDerefChild2):
2757         (JSC::DFG::Graph::clearAndDerefChild3):
2758         (Graph):
2759         * dfg/DFGJITCompiler.h:
2760         (JSC::DFG::JITCompiler::getPrediction):
2761         * dfg/DFGNode.h:
2762         (JSC::DFG::Node::Node):
2763         (JSC::DFG::Node::child1):
2764         (JSC::DFG::Node::child1Unchecked):
2765         (JSC::DFG::Node::child2):
2766         (JSC::DFG::Node::child3):
2767         (Node):
2768         * dfg/DFGNodeFlags.cpp:
2769         (JSC::DFG::arithNodeFlagsAsString):
2770         * dfg/DFGNodeFlags.h:
2771         (DFG):
2772         (JSC::DFG::nodeUsedAsNumber):
2773         * dfg/DFGNodeReferenceBlob.h: Removed.
2774         * dfg/DFGNodeUse.h: Removed.
2775         * dfg/DFGPredictionPropagationPhase.cpp:
2776         (JSC::DFG::PredictionPropagationPhase::propagate):
2777         (JSC::DFG::PredictionPropagationPhase::mergeDefaultArithFlags):
2778         (JSC::DFG::PredictionPropagationPhase::vote):
2779         (JSC::DFG::PredictionPropagationPhase::fixupNode):
2780         * dfg/DFGScoreBoard.h:
2781         (JSC::DFG::ScoreBoard::use):
2782         * dfg/DFGSpeculativeJIT.cpp:
2783         (JSC::DFG::SpeculativeJIT::useChildren):
2784         (JSC::DFG::SpeculativeJIT::writeBarrier):
2785         (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
2786         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
2787         (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
2788         (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant):
2789         * dfg/DFGSpeculativeJIT.h:
2790         (JSC::DFG::SpeculativeJIT::at):
2791         (JSC::DFG::SpeculativeJIT::canReuse):
2792         (JSC::DFG::SpeculativeJIT::use):
2793         (SpeculativeJIT):
2794         (JSC::DFG::SpeculativeJIT::speculationCheck):
2795         (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
2796         (JSC::DFG::IntegerOperand::IntegerOperand):
2797         (JSC::DFG::DoubleOperand::DoubleOperand):
2798         (JSC::DFG::JSValueOperand::JSValueOperand):
2799         (JSC::DFG::StorageOperand::StorageOperand):
2800         (JSC::DFG::SpeculateIntegerOperand::SpeculateIntegerOperand):
2801         (JSC::DFG::SpeculateStrictInt32Operand::SpeculateStrictInt32Operand):
2802         (JSC::DFG::SpeculateDoubleOperand::SpeculateDoubleOperand):
2803         (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
2804         (JSC::DFG::SpeculateBooleanOperand::SpeculateBooleanOperand):
2805         * dfg/DFGSpeculativeJIT32_64.cpp:
2806         (JSC::DFG::SpeculativeJIT::cachedPutById):
2807         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
2808         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
2809         (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
2810         (JSC::DFG::SpeculativeJIT::emitCall):
2811         (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
2812         (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
2813         * dfg/DFGSpeculativeJIT64.cpp:
2814         (JSC::DFG::SpeculativeJIT::cachedPutById):
2815         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
2816         (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
2817         (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
2818         (JSC::DFG::SpeculativeJIT::emitCall):
2819         (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
2820         (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
2821
2822 2012-03-19  Gavin Barraclough  <barraclough@apple.com>
2823
2824         Object.freeze broken on latest Nightly
2825         https://bugs.webkit.org/show_bug.cgi?id=80577
2826
2827         Reviewed by Oliver Hunt.
2828
2829         * runtime/Arguments.cpp:
2830         (JSC::Arguments::defineOwnProperty):
2831             - defineOwnProperty was checking for correct behaviour, provided that length/callee hadn't
2832             been overrridden. instead, just reify length/callee & rely on JSObject::defineOwnProperty.
2833         * runtime/JSFunction.cpp:
2834         (JSC::JSFunction::defineOwnProperty):
2835             - for arguments/caller/length properties, defineOwnProperty was incorrectly asserting that
2836             the object must be extensible; this is incorrect since these properties should already exist
2837             on the object. In addition, it was asserting that the arguments/caller values must match the
2838             corresponding magic data properties, but for strict mode function this is incorrect. Instead,
2839             just reify the arguments/caller accessor & defer to JSObject::defineOwnProperty.
2840
2841 2012-03-19  Filip Pizlo  <fpizlo@apple.com>
2842
2843         LLInt get_by_pname slow path incorrectly assumes that the operands are not constants
2844         https://bugs.webkit.org/show_bug.cgi?id=81559
2845
2846         Reviewed by Michael Saboff.
2847
2848         * llint/LLIntSlowPaths.cpp:
2849         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
2850
2851 2012-03-19  Yong Li  <yoli@rim.com>
2852
2853         [BlackBerry] Implement OSAllocator::commit/decommit in the correct way
2854         https://bugs.webkit.org/show_bug.cgi?id=77013
2855
2856         We should use mmap(PROT_NONE, MAP_LAZY) instead of posix_madvise() to
2857         implement memory decommitting for QNX.
2858
2859         Reviewed by Rob Buis.
2860
2861         * wtf/OSAllocatorPosix.cpp:
2862         (WTF::OSAllocator::reserveUncommitted):
2863         (WTF::OSAllocator::commit):
2864         (WTF::OSAllocator::decommit):
2865
2866 2012-03-19  Gavin Barraclough  <barraclough@apple.com>
2867
2868         Unreviewed - revent a couple of files accidentally committed.
2869
2870         * runtime/Arguments.cpp:
2871         (JSC::Arguments::defineOwnProperty):
2872         * runtime/JSFunction.cpp:
2873         (JSC::JSFunction::defineOwnProperty):
2874
2875 2012-03-19  Jessie Berlin  <jberlin@apple.com>
2876
2877         Another Windows build fix after r111129.
2878
2879         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2880
2881 2012-03-19  Raphael Kubo da Costa  <rakuco@FreeBSD.org>
2882
2883         Cross-platform processor core counter: fix build on FreeBSD.
2884         https://bugs.webkit.org/show_bug.cgi?id=81482
2885
2886         Reviewed by Zoltan Herczeg.
2887
2888         The documentation of sysctl(3) shows that <sys/types.h> should be
2889         included before <sys/sysctl.h> (sys/types.h tends to be the first
2890         included header in general).
2891
2892         This should fix the build on FreeBSD and other systems where
2893         sysctl.h really depends on types defined in types.h.
2894
2895         * wtf/NumberOfCores.cpp:
2896
2897 2012-03-19  Jessie Berlin  <jberlin@apple.com>
2898
2899         Windows build fix after r111129.
2900
2901         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2902
2903 2012-03-19  Gavin Barraclough  <barraclough@apple.com>
2904
2905         JSCallbackFunction::toStringCallback/valueOfCallback do not handle 0 return value from convertToType
2906         https://bugs.webkit.org/show_bug.cgi?id=81468 <rdar://problem/11034745>
2907
2908         Reviewed by Oliver Hunt.
2909
2910         The API specifies that convertToType may opt not to handle a conversion:
2911             "@result The objects's converted value, or NULL if the object was not converted."
2912         In which case, it would propagate first up the JSClass hierarchy, calling its superclass's
2913         conversion functions, and failing that call the JSObject::defaultValue function.
2914
2915         Unfortunately this behaviour was removed in bug#69677/bug#69858, and instead we now rely on
2916         the toStringCallback/valueOfCallback function introduced in bug#69156. Even after a fix in
2917         bug#73368, these will return the result from the first convertToType they find, regardless
2918         of whether this result is null, and if no convertToType method is found in the api class
2919         hierarchy (possible if toStringCallback/valueOfCallback was accessed off the prototype
2920         chain), they will also return a null pointer. This is unsafe.
2921
2922         It would be easy to make the approach based around toStringCallback/valueOfCallback continue
2923         to walk the api class hierarchy, but making the fallback to defaultValue would be problematic
2924         (since defaultValue calls toStringCallback/valueOfCallback, this would infinitely recurse).
2925         Making the fallback work with toString/valueOf methods attached to api objects is probably
2926         not the right thing to do – instead, we should just implement the defaultValue trap for api
2927         objects.
2928
2929         In addition, this bug highlights that fact that JSCallbackFunction::call will allow a hard
2930         null to be returned from C to JavaScript - this is not okay. Handle with an exception.
2931
2932         * API/JSCallbackFunction.cpp:
2933         (JSC::JSCallbackFunction::call):
2934             - Should be null checking the return value.
2935         (JSC):
2936             - Remove toStringCallback/valueOfCallback.
2937         * API/JSCallbackFunction.h:
2938         (JSCallbackFunction):
2939             - Remove toStringCallback/valueOfCallback.
2940         * API/JSCallbackObject.h:
2941         (JSCallbackObject):
2942             - Add defaultValue mthods to JSCallbackObject.
2943         * API/JSCallbackObjectFunctions.h:
2944         (JSC::::defaultValue):
2945             - Add defaultValue mthods to JSCallbackObject.
2946         * API/JSClassRef.cpp:
2947         (OpaqueJSClass::prototype):
2948             - Remove toStringCallback/valueOfCallback.
2949         * API/tests/testapi.js:
2950             - Revert this test, now we no longer artificially introduce a toString method onto the api object.
2951
2952 2012-03-18  Raphael Kubo da Costa  <rakuco@FreeBSD.org>
2953
2954         [EFL] Include ICU_INCLUDE_DIRS when building.
2955         https://bugs.webkit.org/show_bug.cgi?id=81483
2956
2957         Reviewed by Daniel Bates.
2958
2959         So far, only the ICU libraries were being included when building
2960         JavaScriptCore, however the include path is also needed, otherwise the
2961         build will fail when ICU is installed into a non-standard location.
2962
2963         * PlatformEfl.cmake: Include ${ICU_INCLUDE_DIRS}.
2964
2965 2012-03-17  Gavin Barraclough  <barraclough@apple.com>
2966
2967         Strength reduction, RegExp.exec -> RegExp.test
2968         https://bugs.webkit.org/show_bug.cgi?id=81459
2969
2970         Reviewed by Sam Weinig.
2971
2972         RegExp.prototype.exec & RegExp.prototype.test can both be used to test a regular
2973         expression for a match against a string - however exec is more expensive, since
2974         it allocates a matches array object. In cases where the result is consumed in a
2975         boolean context the allocation of the matches array can be trivially elided.
2976
2977         For example:
2978             function f()
2979             {
2980                 for (i =0; i < 10000000; ++i)
2981                     if(!/a/.exec("a"))
2982                         err = true;
2983             }
2984
2985         This is a 2.5x speedup on this example microbenchmark loop.
2986
2987         In a more advanced form of this optimization, we may be able to avoid allocating
2988         the array where access to the array can be observed.
2989
2990         * create_hash_table:
2991         * dfg/DFGAbstractState.cpp:
2992         (JSC::DFG::AbstractState::execute):
2993         * dfg/DFGByteCodeParser.cpp:
2994         (JSC::DFG::ByteCodeParser::handleIntrinsic):
2995         * dfg/DFGNode.h:
2996         (JSC::DFG::Node::hasHeapPrediction):
2997         * dfg/DFGNodeType.h:
2998         (DFG):
2999         * dfg/DFGOperations.cpp:
3000         * dfg/DFGOperations.h:
3001         * dfg/DFGPredictionPropagationPhase.cpp:
3002         (JSC::DFG::PredictionPropagationPhase::propagate):
3003         * dfg/DFGSpeculativeJIT.cpp:
3004         (JSC::DFG::SpeculativeJIT::compileRegExpExec):
3005         (DFG):
3006         * dfg/DFGSpeculativeJIT.h:
3007         (JSC::DFG::SpeculativeJIT::callOperation):
3008         * dfg/DFGSpeculativeJIT32_64.cpp:
3009         (JSC::DFG::SpeculativeJIT::compile):
3010         * dfg/DFGSpeculativeJIT64.cpp:
3011         (JSC::DFG::SpeculativeJIT::compile):
3012         * jsc.cpp:
3013         (GlobalObject::addConstructableFunction):
3014         * runtime/Intrinsic.h:
3015         * runtime/JSFunction.cpp:
3016         (JSC::JSFunction::create):
3017         (JSC):
3018         * runtime/JSFunction.h:
3019         (JSFunction):
3020         * runtime/Lookup.cpp:
3021         (JSC::setUpStaticFunctionSlot):
3022         * runtime/RegExpObject.cpp:
3023         (JSC::RegExpObject::exec):
3024         (JSC::RegExpObject::match):
3025         * runtime/RegExpObject.h:
3026         (RegExpObject):
3027         * runtime/RegExpPrototype.cpp:
3028         (JSC::regExpProtoFuncTest):
3029         (JSC::regExpProtoFuncExec):
3030
3031 2012-03-16  Michael Saboff  <msaboff@apple.com>
3032
3033         Improve diagnostic benefit of JSGlobalData::m_isInitializingObject
3034         https://bugs.webkit.org/show_bug.cgi?id=81244
3035
3036         Rubber stamped by Filip Pizlo.
3037
3038         Changed type and name of JSGlobalData::m_isInitializingObject to
3039         ClassInfo* and m_initializingObjectClass.
3040         Changed JSGlobalData::setInitializingObject to
3041         JSGlobalData::setInitializingObjectClass.  This pointer can be used within 
3042         the debugger to determine what type of object is being initialized.
3043         
3044         * runtime/JSCell.h:
3045         (JSC::JSCell::finishCreation):
3046         (JSC::allocateCell):
3047         * runtime/JSGlobalData.cpp:
3048         (JSC::JSGlobalData::JSGlobalData):
3049         * runtime/JSGlobalData.h:
3050         (JSGlobalData):
3051         (JSC::JSGlobalData::isInitializingObject):
3052         (JSC::JSGlobalData::setInitializingObjectClass):
3053         * runtime/Structure.h:
3054         (JSC::JSCell::finishCreation):
3055
3056 2012-03-16  Mark Rowe  <mrowe@apple.com>
3057
3058         Build fix. Do not preserve owner and group information when installing the WTF headers.
3059
3060         * JavaScriptCore.xcodeproj/project.pbxproj:
3061
3062 2012-03-15  David Dorwin  <ddorwin@chromium.org>
3063
3064         Make the array pointer parameters in the Typed Array create() methods const.
3065         https://bugs.webkit.org/show_bug.cgi?id=81147
3066
3067         Reviewed by Kenneth Russell.
3068
3069         This allows const arrays to be passed to these methods.
3070         They use PassRefPtr<Subclass> create(), which already has a const parameter.
3071
3072         * wtf/Int16Array.h:
3073         (Int16Array):
3074         (WTF::Int16Array::create):
3075         * wtf/Int32Array.h:
3076         (Int32Array):
3077         (WTF::Int32Array::create):
3078         * wtf/Int8Array.h:
3079         (Int8Array):
3080         (WTF::Int8Array::create):
3081         * wtf/Uint16Array.h:
3082         (Uint16Array):
3083         (WTF::Uint16Array::create):
3084         * wtf/Uint32Array.h:
3085         (Uint32Array):
3086         (WTF::Uint32Array::create):
3087         * wtf/Uint8Array.h:
3088         (Uint8Array):
3089         (WTF::Uint8Array::create):
3090         * wtf/Uint8ClampedArray.h:
3091         (Uint8ClampedArray):
3092         (WTF::Uint8ClampedArray::create):
3093
3094 2012-03-15  Myles Maxfield  <mmaxfield@google.com>
3095
3096         CopiedSpace::tryAllocateOversize assumes system page size
3097         https://bugs.webkit.org/show_bug.cgi?id=80615
3098
3099         Reviewed by Geoffrey Garen.
3100
3101         * heap/CopiedSpace.cpp:
3102         (JSC::CopiedSpace::tryAllocateOversize):
3103         * heap/CopiedSpace.h:
3104         (CopiedSpace):
3105         * heap/CopiedSpaceInlineMethods.h:
3106         (JSC::CopiedSpace::oversizeBlockFor):
3107         * wtf/BumpPointerAllocator.h:
3108         (WTF::BumpPointerPool::create):
3109         * wtf/StdLibExtras.h:
3110         (WTF::roundUpToMultipleOf):
3111
3112 2012-03-15  Mark Hahnenberg  <mhahnenberg@apple.com>
3113
3114         Fixing Windows build breakage
3115
3116         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
3117
3118 2012-03-15  Patrick Gansterer  <paroga@webkit.org>
3119
3120         [EFL] Make zlib a general build requirement
3121         https://bugs.webkit.org/show_bug.cgi?id=80153
3122
3123         Reviewed by Hajime Morita.
3124
3125         After r109538 WebSocket module needs zlib to support deflate-frame extension.
3126
3127         * wtf/Platform.h:
3128
3129 2012-03-15  Benjamin Poulain  <bpoulain@apple.com>
3130
3131         NumericStrings should be inlined
3132         https://bugs.webkit.org/show_bug.cgi?id=81183
3133
3134         Reviewed by Gavin Barraclough.
3135
3136         NumericStrings is not always inlined. When it is not, the class is not faster
3137         than using UString::number() directly.
3138
3139         * runtime/NumericStrings.h:
3140         (JSC::NumericStrings::add):
3141         (JSC::NumericStrings::lookupSmallString):
3142
3143 2012-03-15  Andras Becsi  <andras.becsi@nokia.com>
3144
3145         Fix ARM build after r110792.
3146
3147         Unreviewed build fix.
3148
3149         * jit/ExecutableAllocator.h:
3150         (JSC::ExecutableAllocator::cacheFlush):
3151         Remove superfluous curly brackets.
3152
3153 2012-03-15  Gavin Barraclough  <barraclough@apple.com>
3154
3155         ARMv7: prefer vmov(gpr,gpr->double) over vmov(gpr->single)
3156         https://bugs.webkit.org/show_bug.cgi?id=81256
3157
3158         Reviewed by Oliver Hunt.
3159
3160         This is a 0.5% sunspider progression.
3161
3162         * assembler/MacroAssemblerARMv7.h:
3163         (JSC::MacroAssemblerARMv7::convertInt32ToDouble):
3164             - switch which form of vmov we use.
3165
3166 2012-03-15  YoungTaeck Song  <youngtaeck.song@samsung.com>
3167
3168         [EFL] Add OwnPtr specialization for Ecore_Timer.
3169         https://bugs.webkit.org/show_bug.cgi?id=80119
3170
3171         Reviewed by Hajime Morita.
3172
3173         Add an overload for deleteOwnedPtr(Ecore_Timer*) on EFL port.
3174
3175         * wtf/OwnPtrCommon.h:
3176         (WTF):
3177         * wtf/efl/OwnPtrEfl.cpp:
3178         (WTF::deleteOwnedPtr):
3179         (WTF):
3180
3181 2012-03-15  Hojong Han  <hojong.han@samsung.com>
3182
3183         Linux has madvise enough to support OSAllocator::commit/decommit
3184         https://bugs.webkit.org/show_bug.cgi?id=80505
3185
3186         Reviewed by Geoffrey Garen.
3187
3188         * wtf/OSAllocatorPosix.cpp:
3189         (WTF::OSAllocator::reserveUncommitted):
3190         (WTF::OSAllocator::commit):
3191         (WTF::OSAllocator::decommit):
3192
3193 2012-03-15  Steve Falkenburg  <sfalken@apple.com>
3194
3195         Windows build fix.
3196
3197         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGO.vsprops:
3198         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGOOptimize.vsprops:
3199         * JavaScriptCore.vcproj/WTF/copy-files.cmd:
3200         * JavaScriptCore.vcproj/jsc/jscReleasePGO.vsprops:
3201
3202 2012-03-15  Steve Falkenburg  <sfalken@apple.com>
3203
3204         Windows build fix.
3205
3206         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
3207
3208 2012-03-15  Kevin Ollivier  <kevino@theolliviers.com>
3209
3210         Move wx port to using export macros
3211         https://bugs.webkit.org/show_bug.cgi?id=77279
3212
3213         Reviewed by Hajime Morita.
3214
3215         * wscript:
3216         * wtf/Platform.h:
3217
3218 2012-03-14  Benjamin Poulain  <bpoulain@apple.com>
3219
3220         Avoid StringImpl::getData16SlowCase() when sorting array
3221         https://bugs.webkit.org/show_bug.cgi?id=81070
3222
3223         Reviewed by Geoffrey Garen.
3224
3225         The function codePointCompare() is used intensively when sorting strings.
3226         This patch improves its performance by:
3227         -Avoiding character conversion.
3228         -Inlining the function.
3229
3230         This makes Peacekeeper's arrayCombined test 30% faster.
3231
3232         * wtf/text/StringImpl.cpp:
3233         * wtf/text/StringImpl.h:
3234         (WTF):
3235         (WTF::codePointCompare):
3236         (WTF::codePointCompare8):
3237         (WTF::codePointCompare16):
3238         (WTF::codePointCompare8To16):
3239
3240 2012-03-14  Hojong Han  <hojong.han@samsung.com>
3241
3242         Fix memory allocation failed by fastmalloc
3243         https://bugs.webkit.org/show_bug.cgi?id=79614
3244
3245         Reviewed by Geoffrey Garen.
3246
3247         Memory allocation failed even if the heap grows successfully.
3248         It is wrong to get the span only from the large list after the heap grows,
3249         because new span could be added in the normal list.
3250
3251         * wtf/FastMalloc.cpp:
3252         (WTF::TCMalloc_PageHeap::New):
3253
3254 2012-03-14  Hojong Han  <hojong.han@samsung.com>
3255
3256         Run cacheFlush page by page to assure of flushing all the requested ranges
3257         https://bugs.webkit.org/show_bug.cgi?id=77712
3258
3259         Reviewed by Geoffrey Garen.
3260
3261         Current MetaAllocator concept, always coalesces adjacent free spaces,
3262         doesn't meet memory management of Linux kernel.
3263         In a certain case Linux kernel doesn't regard contiguous virtual memory areas as one but two.
3264         Therefore cacheFlush page by page guarantees a flush-requested range.
3265
3266         * jit/ExecutableAllocator.h:
3267         (JSC::ExecutableAllocator::cacheFlush):
3268
3269 2012-03-14  Oliver Hunt  <oliver@apple.com>
3270
3271         Make ARMv7 work again
3272         https://bugs.webkit.org/show_bug.cgi?id=81157
3273
3274         Reviewed by Geoffrey Garen.
3275
3276         We were trying to use the ARMv7 dataRegister as a scratch register in a scenario
3277         where we the ARMv7MacroAssembler would also try to use dataRegister for its own
3278         nefarious purposes.
3279
3280         * assembler/MacroAssembler.h:
3281         (JSC::MacroAssembler::store32):
3282         * assembler/MacroAssemblerARMv7.h:
3283         (MacroAssemblerARMv7):
3284
3285 2012-03-14  Mark Hahnenberg  <mhahnenberg@apple.com>
3286
3287         Heap::destroy leaks CopiedSpace
3288         https://bugs.webkit.org/show_bug.cgi?id=81055
3289
3290         Reviewed by Geoffrey Garen.
3291
3292         Added a destroy() function to CopiedSpace that moves all normal size 
3293         CopiedBlocks from the CopiedSpace to the Heap's list of free blocks 
3294         as well as deallocates all of the oversize blocks in the CopiedSpace. 
3295         This function is now called in Heap::destroy().
3296
3297         * heap/CopiedSpace.cpp:
3298         (JSC::CopiedSpace::destroy):
3299         (JSC):
3300         * heap/CopiedSpace.h:
3301         (CopiedSpace):
3302         * heap/Heap.cpp:
3303         (JSC::Heap::destroy):
3304
3305 2012-03-14  Andrew Lo  <anlo@rim.com>
3306
3307         [BlackBerry] Implement REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR using AnimationFrameRateController
3308         https://bugs.webkit.org/show_bug.cgi?id=81000
3309
3310         Enable WTF_USE_REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR for BlackBerry.
3311
3312         Reviewed by Antonio Gomes.
3313
3314         * wtf/Platform.h:
3315
3316 2012-03-13  Filip Pizlo  <fpizlo@apple.com>
3317
3318         ValueToInt32 speculation will cause OSR exits even when it does not have to
3319         https://bugs.webkit.org/show_bug.cgi?id=81068
3320         <rdar://problem/11043926>
3321
3322         Reviewed by Anders Carlsson.
3323         
3324         Two related changes:
3325         1) ValueToInt32 will now always just defer to the non-speculative path, instead
3326            of exiting, if it doesn't know what speculations to perform.
3327         2) ValueToInt32 will speculate boolean if it sees this to be profitable.
3328
3329         * dfg/DFGAbstractState.cpp:
3330         (JSC::DFG::AbstractState::execute):
3331         * dfg/DFGNode.h:
3332         (JSC::DFG::Node::shouldSpeculateBoolean):
3333         (Node):
3334         * dfg/DFGSpeculativeJIT.cpp:
3335         (JSC::DFG::SpeculativeJIT::compileValueToInt32):
3336
3337 2012-03-13  Mark Hahnenberg  <mhahnenberg@apple.com>
3338
3339         More Windows build fixing
3340
3341         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
3342
3343 2012-03-13  Mark Hahnenberg  <mhahnenberg@apple.com>
3344
3345         Windows build fix
3346
3347         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
3348
3349 2012-03-13  Mark Hahnenberg  <mhahnenberg@apple.com>
3350
3351         Type conversion of exponential part failed
3352         https://bugs.webkit.org/show_bug.cgi?id=80673
3353
3354         Reviewed by Geoffrey Garen.
3355
3356         * parser/Lexer.cpp:
3357         (JSC::::lex):
3358         * runtime/JSGlobalObjectFunctions.cpp:
3359         (JSC::parseInt):
3360         (JSC):
3361         (JSC::jsStrDecimalLiteral): Added another template argument that exposes whether or not
3362         we accept trailing junk to clients of jsStrDecimalLiteral. Also added additional template 
3363         parameter for strtod to allow trailing spaces.
3364         (JSC::toDouble):
3365         (JSC::parseFloat): Accept trailing junk, as per the ECMA 262 spec (15.1.2.3).
3366         * runtime/LiteralParser.cpp:
3367         (JSC::::Lexer::lexNumber):
3368         * tests/mozilla/expected.html: Update the expected page for run-javascriptcore-tests so that 
3369         we will run ecma/TypeConversion/9.3.1-3.js as a regression test now.
3370         * wtf/dtoa.cpp:
3371         (WTF):
3372         (WTF::strtod): We also needed to sometimes accept trailing spaces to pass a few other tests that were 
3373         broken by changing the default allowance of trailing junk in jsStrDecimalLiteral.
3374         * wtf/dtoa.h:
3375         * wtf/dtoa/double-conversion.cc: When the AdvanceToNonspace function was lifted out of the 
3376         Chromium codebase, the person porting it only thought to check for spaces when skipping whitespace.
3377         A few of our JSC tests check for other types of trailing whitespace, so I've added checks for those 
3378         here to cover those cases (horizontal tab, vertical tab, carriage return, form feed, and line feed).
3379         * wtf/text/WTFString.cpp:
3380         (WTF::toDoubleType): Disallow trailing spaces, as this breaks form input verification stuff.
3381
3382 2012-03-13  Filip Pizlo  <fpizlo@apple.com>
3383
3384         Unreviewed, build fix since is_pod<> includes some header that I didn't know about.
3385         Removing the assert for now.
3386
3387         * dfg/DFGOperations.h:
3388         * llint/LLIntSlowPaths.h:
3389
3390 2012-03-13  Filip Pizlo  <fpizlo@apple.com>
3391
3392         Functions with C linkage should return POD types
3393         https://bugs.webkit.org/show_bug.cgi?id=81061
3394
3395         Reviewed by Mark Rowe.
3396
3397         * dfg/DFGOperations.h:
3398         * llint/LLIntSlowPaths.h:
3399         (LLInt):
3400         (SlowPathReturnType):
3401         (JSC::LLInt::encodeResult):
3402
3403 2012-03-13  Filip Pizlo  <fpizlo@apple.com>
3404
3405         Loads from UInt32Arrays should not result in a double up-convert if it isn't necessary
3406         https://bugs.webkit.org/show_bug.cgi?id=80979
3407         <rdar://problem/11036848>
3408
3409         Reviewed by Oliver Hunt.
3410         
3411         Also improved DFG IR dumping to include type information in a somewhat more
3412         intuitive way.
3413
3414         * bytecode/PredictedType.cpp:
3415         (JSC::predictionToAbbreviatedString):
3416         (JSC):
3417         * bytecode/PredictedType.h:
3418         (JSC):
3419         * dfg/DFGAbstractState.cpp:
3420         (JSC::DFG::AbstractState::execute):
3421         * dfg/DFGGraph.cpp:
3422         (JSC::DFG::Graph::dump):
3423         * dfg/DFGPredictionPropagationPhase.cpp:
3424         (JSC::DFG::PredictionPropagationPhase::propagate):
3425         * dfg/DFGSpeculativeJIT.cpp:
3426         (JSC::DFG::SpeculativeJIT::compileUInt32ToNumber):
3427         (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
3428         * dfg/DFGSpeculativeJIT.h:
3429         (JSC::DFG::SpeculativeJIT::forwardSpeculationCheck):
3430
3431 2012-03-13  George Staikos  <staikos@webkit.org>
3432
3433         The callback is only used if SA_RESTART is defined.  Compile it out
3434         otherwise to avoid a warning.
3435         https://bugs.webkit.org/show_bug.cgi?id=80926
3436
3437         Reviewed by Alexey Proskuryakov.
3438
3439         * heap/MachineStackMarker.cpp:
3440         (JSC):
3441
3442 2012-03-13  Hojong Han  <hojong.han@samsung.com>
3443
3444         Dump the generated code for ARM_TRADITIONAL
3445         https://bugs.webkit.org/show_bug.cgi?id=80975
3446
3447         Reviewed by Gavin Barraclough.
3448
3449         * assembler/LinkBuffer.h:
3450         (JSC::LinkBuffer::dumpCode):
3451
3452 2012-03-13  Adam Barth  <abarth@webkit.org> && Benjamin Poulain  <bpoulain@apple.com>
3453
3454         Always enable ENABLE(CLIENT_BASED_GEOLOCATION)
3455         https://bugs.webkit.org/show_bug.cgi?id=78853
3456
3457         Reviewed by Adam Barth.
3458
3459         * Configurations/FeatureDefines.xcconfig:
3460         * wtf/Platform.h:
3461
3462 2012-03-13  Kwonjin Jeong  <gram@company100.net>
3463
3464         Remove SlotVisitor::copy() method.
3465         https://bugs.webkit.org/show_bug.cgi?id=80973
3466
3467         Reviewed by Geoffrey Garen.
3468
3469         SlotVisitor::copy() method isn't called anywhere.
3470
3471         * heap/MarkStack.cpp: Remove definition of SlotVisitor::copy() method.
3472         * heap/SlotVisitor.h: Remove declaration of SlotVisitor::copy() method.
3473
3474 2012-03-12  Hojong Han  <hojong.han@samsung.com>
3475
3476         Fix test cases for RegExp multiline
3477         https://bugs.webkit.org/show_bug.cgi?id=80822
3478
3479         Reviewed by Gavin Barraclough.
3480
3481         * tests/mozilla/js1_2/regexp/RegExp_multiline.js:
3482         * tests/mozilla/js1_2/regexp/RegExp_multiline_as_array.js:
3483         * tests/mozilla/js1_2/regexp/beginLine.js:
3484         * tests/mozilla/js1_2/regexp/endLine.js:
3485
3486 2012-03-12  Filip Pizlo  <fpizlo@apple.com>
3487
3488         Arithmetic use inference should be procedure-global and should run in tandem
3489         with type propagation
3490         https://bugs.webkit.org/show_bug.cgi?id=80819
3491         <rdar://problem/11034006>
3492
3493         Reviewed by Gavin Barraclough.
3494         
3495         * CMakeLists.txt:
3496         * GNUmakefile.list.am:
3497         * JavaScriptCore.xcodeproj/project.pbxproj:
3498         * Target.pri:
3499         * dfg/DFGArithNodeFlagsInferencePhase.cpp: Removed.
3500         * dfg/DFGArithNodeFlagsInferencePhase.h: Removed.
3501         * dfg/DFGDriver.cpp:
3502         (JSC::DFG::compile):
3503         * dfg/DFGPredictionPropagationPhase.cpp:
3504         (JSC::DFG::PredictionPropagationPhase::isNotNegZero):
3505         (PredictionPropagationPhase):
3506         (JSC::DFG::PredictionPropagationPhase::isNotZero):
3507         (JSC::DFG::PredictionPropagationPhase::propagate):
3508         (JSC::DFG::PredictionPropagationPhase::mergeDefaultArithFlags):
3509         * dfg/DFGVariableAccessData.h:
3510         (JSC::DFG::VariableAccessData::VariableAccessData):
3511         (JSC::DFG::VariableAccessData::flags):
3512         (VariableAccessData):
3513         (JSC::DFG::VariableAccessData::mergeFlags):
3514
3515 2012-03-12  Filip Pizlo  <fpizlo@apple.com>
3516
3517         Node::op and Node::flags should be private
3518         https://bugs.webkit.org/show_bug.cgi?id=80824
3519         <rdar://problem/11033435>
3520
3521         Reviewed by Gavin Barraclough.
3522
3523         * CMakeLists.txt:
3524         * GNUmakefile.list.am:
3525         * JavaScriptCore.xcodeproj/project.pbxproj:
3526         * Target.pri:
3527         * dfg/DFGAbstractState.cpp:
3528         (JSC::DFG::AbstractState::initialize):
3529         (JSC::DFG::AbstractState::execute):
3530         (JSC::DFG::AbstractState::mergeStateAtTail):
3531         (JSC::DFG::AbstractState::mergeToSuccessors):
3532         * dfg/DFGArithNodeFlagsInferencePhase.cpp:
3533         (JSC::DFG::ArithNodeFlagsInferencePhase::propagate):
3534         * dfg/DFGByteCodeParser.cpp:
3535         (JSC::DFG::ByteCodeParser::injectLazyOperandPrediction):
3536         (JSC::DFG::ByteCodeParser::getLocal):
3537         (JSC::DFG::ByteCodeParser::getArgument):
3538         (JSC::DFG::ByteCodeParser::flushArgument):
3539         (JSC::DFG::ByteCodeParser::toInt32):
3540         (JSC::DFG::ByteCodeParser::isJSConstant):
3541         (JSC::DFG::ByteCodeParser::makeSafe):
3542         (JSC::DFG::ByteCodeParser::makeDivSafe):
3543         (JSC::DFG::ByteCodeParser::handleInlining):
3544         (JSC::DFG::ByteCodeParser::parseBlock):
3545         (JSC::DFG::ByteCodeParser::processPhiStack):
3546         (JSC::DFG::ByteCodeParser::linkBlock):
3547         * dfg/DFGCFAPhase.cpp:
3548         (JSC::DFG::CFAPhase::performBlockCFA):
3549         * dfg/DFGCSEPhase.cpp:
3550         (JSC::DFG::CSEPhase::canonicalize):
3551         (JSC::DFG::CSEPhase::endIndexForPureCSE):
3552         (JSC::DFG::CSEPhase::pureCSE):
3553         (JSC::DFG::CSEPhase::byValIsPure):
3554         (JSC::DFG::CSEPhase::clobbersWorld):
3555         (JSC::DFG::CSEPhase::impureCSE):
3556         (JSC::DFG::CSEPhase::globalVarLoadElimination):
3557         (JSC::DFG::CSEPhase::getByValLoadElimination):
3558         (JSC::DFG::CSEPhase::checkFunctionElimination):
3559         (JSC::DFG::CSEPhase::checkStructureLoadElimination):
3560         (JSC::DFG::CSEPhase::getByOffsetLoadElimination):
3561         (JSC::DFG::CSEPhase::getPropertyStorageLoadElimination):
3562         (JSC::DFG::CSEPhase::getIndexedPropertyStorageLoadElimination):
3563         (JSC::DFG::CSEPhase::getScopeChainLoadElimination):
3564         (JSC::DFG::CSEPhase::performNodeCSE):
3565         * dfg/DFGGraph.cpp:
3566         (JSC::DFG::Graph::dump):
3567         (DFG):
3568         * dfg/DFGGraph.h:
3569         (JSC::DFG::Graph::addShouldSpeculateInteger):
3570         (JSC::DFG::Graph::negateShouldSpeculateInteger):
3571         (JSC::DFG::Graph::methodOfGettingAValueProfileFor):
3572         * dfg/DFGNode.cpp: Removed.
3573         * dfg/DFGNode.h:
3574         (DFG):
3575         (JSC::DFG::Node::Node):
3576         (Node):
3577         (JSC::DFG::Node::op):
3578         (JSC::DFG::Node::flags):
3579         (JSC::DFG::Node::setOp):
3580         (JSC::DFG::Node::setFlags):
3581         (JSC::DFG::Node::mergeFlags):
3582         (JSC::DFG::Node::filterFlags):
3583         (JSC::DFG::Node::clearFlags):
3584         (JSC::DFG::Node::setOpAndDefaultFlags):
3585         (JSC::DFG::Node::mustGenerate):
3586         (JSC::DFG::Node::isConstant):
3587         (JSC::DFG::Node::isWeakConstant):
3588         (JSC::DFG::Node::valueOfJSConstant):
3589         (JSC::DFG::Node::hasVariableAccessData):
3590         (JSC::DFG::Node::hasIdentifier):
3591         (JSC::DFG::Node::resolveGlobalDataIndex):
3592         (JSC::DFG::Node::hasArithNodeFlags):
3593         (JSC::DFG::Node::arithNodeFlags):
3594         (JSC::DFG::Node::setArithNodeFlag):
3595         (JSC::DFG::Node::mergeArithNodeFlags):
3596         (JSC::DFG::Node::hasConstantBuffer):
3597         (JSC::DFG::Node::hasRegexpIndex):
3598         (JSC::DFG::Node::hasVarNumber):
3599         (JSC::DFG::Node::hasScopeChainDepth):
3600         (JSC::DFG::Node::hasResult):
3601         (JSC::DFG::Node::hasInt32Result):
3602         (JSC::DFG::Node::hasNumberResult):
3603         (JSC::DFG::Node::hasJSResult):
3604         (JSC::DFG::Node::hasBooleanResult):
3605         (JSC::DFG::Node::isJump):
3606         (JSC::DFG::Node::isBranch):
3607         (JSC::DFG::Node::isTerminal):
3608         (JSC::DFG::Node::hasHeapPrediction):
3609         (JSC::DFG::Node::hasFunctionCheckData):
3610         (JSC::DFG::Node::hasStructureTransitionData):
3611         (JSC::DFG::Node::hasStructureSet):
3612         (JSC::DFG::Node::hasStorageAccessData):
3613         (JSC::DFG::Node::hasFunctionDeclIndex):
3614         (JSC::DFG::Node::hasFunctionExprIndex):
3615         (JSC::DFG::Node::child1):
3616         (JSC::DFG::Node::child2):
3617         (JSC::DFG::Node::child3):
3618         (JSC::DFG::Node::firstChild):
3619         (JSC::DFG::Node::numChildren):
3620         * dfg/DFGNodeFlags.cpp: Copied from Source/JavaScriptCore/dfg/DFGNode.cpp.
3621         * dfg/DFGNodeFlags.h: Added.
3622         (DFG):
3623         (JSC::DFG::nodeUsedAsNumber):
3624         (JSC::DFG::nodeCanTruncateInteger):
3625         (JSC::DFG::nodeCanIgnoreNegativeZero):
3626         (JSC::DFG::nodeMayOverflow):
3627         (JSC::DFG::nodeCanSpeculateInteger):
3628         * dfg/DFGNodeType.h: Added.
3629         (DFG):
3630         (JSC::DFG::defaultFlags):
3631         * dfg/DFGPredictionPropagationPhase.cpp:
3632         (JSC::DFG::PredictionPropagationPhase::propagate):
3633         (JSC::DFG::PredictionPropagationPhase::vote):
3634         (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
3635         (JSC::DFG::PredictionPropagationPhase::fixupNode):
3636         * dfg/DFGRedundantPhiEliminationPhase.cpp:
3637         (JSC::DFG::RedundantPhiEliminationPhase::run):
3638         (JSC::DFG::RedundantPhiEliminationPhase::replacePhiChild):
3639         (JSC::DFG::RedundantPhiEliminationPhase::updateBlockVariableInformation):
3640         * dfg/DFGSpeculativeJIT.cpp:
3641         (JSC::DFG::SpeculativeJIT::useChildren):
3642         (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
3643         (JSC::DFG::SpeculativeJIT::compileMovHint):
3644         (JSC::DFG::SpeculativeJIT::compile):
3645         (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
3646         (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
3647         (JSC::DFG::SpeculativeJIT::compileUInt32ToNumber):
3648         (JSC::DFG::SpeculativeJIT::compileAdd):
3649         (JSC::DFG::SpeculativeJIT::compare):
3650         * dfg/DFGSpeculativeJIT.h:
3651         (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch):
3652         * dfg/DFGSpeculativeJIT32_64.cpp:
3653         (JSC::DFG::SpeculativeJIT::emitCall):
3654         (JSC::DFG::SpeculativeJIT::compile):
3655         * dfg/DFGSpeculativeJIT64.cpp:
3656         (JSC::DFG::SpeculativeJIT::emitCall):
3657         (JSC::DFG::SpeculativeJIT::compile):
3658         * dfg/DFGVirtualRegisterAllocationPhase.cpp:
3659         (JSC::DFG::VirtualRegisterAllocationPhase::run):
3660
3661 2012-03-12  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
3662
3663         Minor DataLog fixes
3664         https://bugs.webkit.org/show_bug.cgi?id=80826
3665
3666         Reviewed by Andreas Kling.
3667
3668         * bytecode/ExecutionCounter.cpp:
3669         Do not include DataLog.h, it is not used.
3670         
3671         * jit/ExecutableAllocator.cpp:
3672         Ditto.
3673
3674         * wtf/DataLog.cpp:
3675         (WTF::initializeLogFileOnce):
3676         Add missing semi-colon to the code path where DATA_LOG_FILENAME is defined.
3677
3678         * wtf/HashTable.cpp:
3679         Include DataLog as it is used.
3680
3681 2012-03-12  SangGyu Lee  <sg5.lee@samsung.com>
3682
3683         Integer overflow check code in arithmetic operation in classic interpreter
3684         https://bugs.webkit.org/show_bug.cgi?id=80465
3685
3686         Reviewed by Gavin Barraclough.
3687
3688         * interpreter/Interpreter.cpp:
3689         (JSC::Interpreter::privateExecute):
3690
3691 2012-03-12  Zeno Albisser  <zeno@webkit.org>
3692
3693         [Qt][Mac] Build fails after enabling LLINT when JIT is disabled (r109863)
3694         https://bugs.webkit.org/show_bug.cgi?id=80827
3695
3696         Qt on Mac uses OS(DARWIN) as well, but we do not want to enable LLINT.
3697
3698         Reviewed by Simon Hausmann.
3699
3700         * wtf/Platform.h:
3701
3702 2012-03-12  Simon Hausmann  <simon.hausmann@nokia.com>
3703
3704         Unreviewed prospective Qt/Mac build fix
3705
3706         * runtime/JSGlobalData.cpp: use #USE(CF) instead of PLATFORM(MAC) to determine
3707         whether to include CoreFoundation headers, used for JIT configuration in JSGlobalData
3708         constructor.
3709
3710 2012-03-12  Filip Pizlo  <fpizlo@apple.com>
3711
3712         All DFG nodes should have a mutable set of flags
3713         https://bugs.webkit.org/show_bug.cgi?id=80779
3714         <rdar://problem/11026218>
3715
3716         Reviewed by Gavin Barraclough.
3717         
3718         Got rid of NodeId, and placed all of the flags that distinguished NodeId
3719         from NodeType into a separate Node::flags field. Combined what was previously
3720         ArithNodeFlags into Node::flags.
3721         
3722         In the process of debugging, I found that the debug support in the virtual
3723         register allocator was lacking, so I improved it. I also realized that the
3724         virtual register allocator was assuming that the nodes in a basic block were
3725         contiguous, which is no longer the case. So I fixed that. The fix also made
3726         it natural to have more extreme assertions, so I added them. I suspect this
3727         will make it easier to catch virtual register allocation bugs in the future.
3728         
3729         This is mostly performance neutral; if anything it looks like a slight
3730         speed-up.
3731         
3732         This patch does leave some work for future refactorings; for example, Node::op
3733         is unencapsulated. This was already the case, though now it feels even more
3734         like it should be. I avoided doing that because this patch has already grown
3735         way bigger than I wanted.
3736         
3737         Finally, this patch creates a DFGNode.cpp file and makes a slight effort to
3738         move some unnecessarily inline stuff out of DFGNode.h.
3739
3740         * CMakeLists.txt:
3741         * GNUmakefile.list.am:
3742         * JavaScriptCore.xcodeproj/project.pbxproj:
3743         * Target.pri:
3744         * dfg/DFGArithNodeFlagsInferencePhase.cpp:
3745         (JSC::DFG::ArithNodeFlagsInferencePhase::propagate):
3746         * dfg/DFGByteCodeParser.cpp:
3747         (JSC::DFG::ByteCodeParser::addToGraph):
3748         (JSC::DFG::ByteCodeParser::makeSafe):
3749         (JSC::DFG::ByteCodeParser::makeDivSafe):
3750         (JSC::DFG::ByteCodeParser::handleMinMax):
3751         (JSC::DFG::ByteCodeParser::handleIntrinsic):
3752         (JSC::DFG::ByteCodeParser::parseBlock):
3753         * dfg/DFGCFAPhase.cpp:
3754         (JSC::DFG::CFAPhase::performBlockCFA):
3755         * dfg/DFGCSEPhase.cpp:
3756         (JSC::DFG::CSEPhase::endIndexForPureCSE):
3757         (JSC::DFG::CSEPhase::pureCSE):
3758         (JSC::DFG::CSEPhase::clobbersWorld):
3759         (JSC::DFG::CSEPhase::impureCSE):
3760         (JSC::DFG::CSEPhase::setReplacement):
3761         (JSC::DFG::CSEPhase::eliminate):
3762         (JSC::DFG::CSEPhase::performNodeCSE):
3763         (JSC::DFG::CSEPhase::performBlockCSE):
3764         (CSEPhase):
3765         * dfg/DFGGraph.cpp:
3766         (JSC::DFG::Graph::opName):
3767         (JSC::DFG::Graph::dump):
3768         (DFG):
3769         * dfg/DFGNode.cpp: Added.
3770         (DFG):
3771         (JSC::DFG::arithNodeFlagsAsString):
3772         * dfg/DFGNode.h:
3773         (DFG):
3774         (JSC::DFG::nodeUsedAsNumber):
3775         (JSC::DFG::nodeCanTruncateInteger):
3776         (JSC::DFG::nodeCanIgnoreNegativeZero):
3777         (JSC::DFG::nodeMayOverflow):
3778         (JSC::DFG::nodeCanSpeculateInteger):
3779         (JSC::DFG::defaultFlags):
3780         (JSC::DFG::Node::Node):
3781         (Node):
3782         (JSC::DFG::Node::setOpAndDefaultFlags):
3783         (JSC::DFG::Node::mustGenerate):
3784         (JSC::DFG::Node::arithNodeFlags):
3785         (JSC::DFG::Node::setArithNodeFlag):
3786         (JSC::DFG::Node::mergeArithNodeFlags):
3787         (JSC::DFG::Node::hasResult):
3788         (JSC::DFG::Node::hasInt32Result):
3789         (JSC::DFG::Node::hasNumberResult):
3790         (JSC::DFG::Node::hasJSResult):
3791         (JSC::DFG::Node::hasBooleanResult):
3792         (JSC::DFG::Node::isJump):
3793         (JSC::DFG::Node::isBranch):
3794         (JSC::DFG::Node::isTerminal):
3795         (JSC::DFG::Node::child1):
3796         (JSC::DFG::Node::child2):
3797         (JSC::DFG::Node::child3):
3798         (JSC::DFG::Node::firstChild):
3799         (JSC::DFG::Node::numChildren):
3800         * dfg/DFGPredictionPropagationPhase.cpp:
3801         (JSC::DFG::PredictionPropagationPhase::propagate):
3802         (JSC::DFG::PredictionPropagationPhase::vote):
3803         (JSC::DFG::PredictionPropagationPhase::fixupNode):
3804         * dfg/DFGScoreBoard.h:
3805         (ScoreBoard):
3806         (JSC::DFG::ScoreBoard::~ScoreBoard):
3807         (JSC::DFG::ScoreBoard::assertClear):
3808         (JSC::DFG::ScoreBoard::use):
3809         * dfg/DFGSpeculativeJIT.cpp:
3810         (JSC::DFG::SpeculativeJIT::useChildren):
3811         * dfg/DFGSpeculativeJIT32_64.cpp:
3812         (JSC::DFG::SpeculativeJIT::compile):
3813         * dfg/DFGSpeculativeJIT64.cpp:
3814         (JSC::DFG::SpeculativeJIT::compile):
3815         * dfg/DFGVirtualRegisterAllocationPhase.cpp:
3816         (JSC::DFG::VirtualRegisterAllocationPhase::run):
3817
3818 2012-03-10  Filip Pizlo  <fpizlo@apple.com>
3819
3820         LLInt should support JSVALUE64
3821         https://bugs.webkit.org/show_bug.cgi?id=79609
3822         <rdar://problem/10063437>
3823
3824         Reviewed by Gavin Barraclough and Oliver Hunt.
3825         
3826         Ported the LLInt, which previously only worked on 32-bit, to 64-bit. This
3827         patch moves a fair bit of code from LowLevelInterpreter32_64.asm to the common
3828         file, LowLevelInterpreter.asm. About 1/3 of the LLInt did not have to be
3829         specialized for value representation.
3830         
3831         Also made some minor changes to offlineasm and the slow-paths.
3832
3833         * llint/LLIntData.cpp:
3834         (JSC::LLInt::Data::performAssertions):
3835         * llint/LLIntEntrypoints.cpp:
3836         * llint/LLIntSlowPaths.cpp:
3837         (LLInt):
3838         (JSC::LLInt::llint_trace_value):
3839         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
3840         (JSC::LLInt::jitCompileAndSetHeuristics):
3841         * llint/LLIntSlowPaths.h:
3842         (LLInt):
3843         (SlowPathReturnType):
3844         (JSC::LLInt::SlowPathReturnType::SlowPathReturnType):
3845         (JSC::LLInt::encodeResult):
3846         * llint/LLIntThunks.cpp:
3847         * llint/LowLevelInterpreter.asm:
3848         * llint/LowLevelInterpreter32_64.asm:
3849         * llint/LowLevelInterpreter64.asm:
3850         * offlineasm/armv7.rb:
3851         * offlineasm/asm.rb:
3852         * offlineasm/ast.rb:
3853         * offlineasm/backends.rb:
3854         * offlineasm/instructions.rb:
3855         * offlineasm/parser.rb:
3856         * offlineasm/registers.rb:
3857         * offlineasm/transform.rb:
3858         * offlineasm/x86.rb:
3859         * wtf/Platform.h:
3860
3861 2012-03-10  Yong Li  <yoli@rim.com>
3862
3863         Web Worker crashes with WX_EXCLUSIVE
3864         https://bugs.webkit.org/show_bug.cgi?id=80532
3865
3866         Let each JS global object own a meta allocator
3867         for WX_EXCLUSIVE to avoid conflicts from Web Worker.
3868         Also fix a mutex leak in MetaAllocator's dtor.
3869
3870         Reviewed by Filip Pizlo.
3871
3872         * jit/ExecutableAllocator.cpp:
3873         (JSC::DemandExecutableAllocator::DemandExecutableAllocator):
3874         (JSC::DemandExecutableAllocator::~DemandExecutableAllocator):
3875         (JSC::DemandExecutableAllocator::bytesAllocatedByAllAllocators):
3876         (DemandExecutableAllocator):
3877         (JSC::DemandExecutableAllocator::bytesCommittedByAllocactors):
3878         (JSC::DemandExecutableAllocator::dumpProfileFromAllAllocators):
3879         (JSC::DemandExecutableAllocator::allocateNewSpace):
3880         (JSC::DemandExecutableAllocator::allocators):
3881         (JSC::DemandExecutableAllocator::allocatorsMutex):
3882         (JSC):
3883         (JSC::ExecutableAllocator::initializeAllocator):
3884         (JSC::ExecutableAllocator::ExecutableAllocator):
3885         (JSC::ExecutableAllocator::underMemoryPressure):
3886         (JSC::ExecutableAllocator::memoryPressureMultiplier):
3887         (JSC::ExecutableAllocator::allocate):
3888         (JSC::ExecutableAllocator::committedByteCount):
3889         (JSC::ExecutableAllocator::dumpProfile):
3890         * jit/ExecutableAllocator.h:
3891         (JSC):
3892         (ExecutableAllocator):
3893         (JSC::ExecutableAllocator::allocator):
3894         * wtf/MetaAllocator.h:
3895         (WTF::MetaAllocator::~MetaAllocator): Finalize the spin lock.
3896         * wtf/TCSpinLock.h:
3897         (TCMalloc_SpinLock::Finalize): Add empty Finalize() to some implementations.
3898
3899 2012-03-09  Gavin Barraclough  <barraclough@apple.com>
3900
3901         Object.freeze broken on latest Nightly
3902         https://bugs.webkit.org/show_bug.cgi?id=80577
3903
3904         Reviewed by Oliver Hunt.
3905
3906         The problem here is that deleteProperty rejects deletion of prototype.
3907         This is correct in most cases, however defineOwnPropery is presently
3908         implemented internally to ensure the attributes change by deleting the
3909         old property, and creating a new one.
3910
3911         * runtime/JSFunction.cpp:
3912         (JSC::JSFunction::deleteProperty):
3913             - If deletePropery is called via defineOwnPropery, allow old prototype to be removed.
3914
3915 2012-03-09  Gavin Barraclough  <barraclough@apple.com>
3916
3917         Array.prototype.toLocaleString visits elements in wrong order under certain conditions
3918         https://bugs.webkit.org/show_bug.cgi?id=80663
3919
3920         Reviewed by Michael Saboff.
3921
3922         The bug here is actually that we're continuing to process the array after an exception
3923         has been thrown, and that the second value throw is overriding the first.
3924
3925         * runtime/ArrayPrototype.cpp:
3926         (JSC::arrayProtoFuncToLocaleString):
3927
3928 2012-03-09  Ryosuke Niwa  <rniwa@webkit.org>
3929
3930         WebKit compiled by gcc (Xcode 3.2.6) hangs while running DOM/Accessors.html
3931         https://bugs.webkit.org/show_bug.cgi?id=80080
3932
3933         Reviewed by Filip Pizlo.
3934
3935         * bytecode/SamplingTool.cpp:
3936         (JSC::SamplingRegion::Locker::Locker):
3937         (JSC::SamplingRegion::Locker::~Locker):
3938         * bytecode/SamplingTool.h:
3939         (JSC::SamplingRegion::exchangeCurrent):
3940         * wtf/Atomics.h:
3941         (WTF):
3942         (WTF::weakCompareAndSwap):
3943         (WTF::weakCompareAndSwapUIntPtr):
3944
3945 2012-03-09  Gavin Barraclough  <barraclough@apple.com>
3946
3947         REGRESSION: Date.parse("Tue Nov 23 20:40:05 2010 GMT") returns NaN
3948         https://bugs.webkit.org/show_bug.cgi?id=49989
3949
3950         Reviewed by Oliver Hunt.
3951
3952         Patch originally by chris reiss <christopher.reiss@nokia.com>,
3953         allow the year to appear before the timezone in date strings.
3954
3955         * wtf/DateMath.cpp:
3956         (WTF::parseDateFromNullTerminatedCharacters):
3957
3958 2012-03-09  Mark Rowe  <mrowe@apple.com>
3959
3960         Ensure that the WTF headers are copied at installhdrs time.
3961
3962         Reviewed by Dan Bernstein and Jessie Berlin.
3963
3964         * Configurations/JavaScriptCore.xcconfig: Set INSTALLHDRS_SCRIPT_PHASE = YES
3965         so that our script phases are invoked at installhdrs time. The only one that
3966         does any useful work at that time is the one that installs WTF headers.
3967
3968 2012-03-09  Jon Lee  <jonlee@apple.com>
3969
3970         Add support for ENABLE(LEGACY_NOTIFICATIONS)
3971         https://bugs.webkit.org/show_bug.cgi?id=80497
3972
3973         Reviewed by Adam Barth.
3974
3975         Prep for b80472: Update API for Web Notifications
3976         * Configurations/FeatureDefines.xcconfig:
3977
3978 2012-03-09  Ashod Nakashian  <ashodnakashian@yahoo.com>
3979
3980         Bash scripts should support LF endings only
3981         https://bugs.webkit.org/show_bug.cgi?id=79509
3982
3983         Reviewed by David Kilzer.
3984
3985         * gyp/generate-derived-sources.sh: Added property svn:eol-style.
3986         * gyp/run-if-exists.sh: Added property svn:eol-style.
3987         * gyp/update-info-plist.sh: Added property svn:eol-style.
3988
3989 2012-03-09  Jessie Berlin  <jberlin@apple.com>
3990
3991         Windows debug build fix.
3992
3993         * assembler/MacroAssembler.h:
3994         (JSC::MacroAssembler::shouldBlind):
3995         Fix unreachable code warnings (which we treat as errors).
3996
3997 2012-03-09  Thouraya ANDOLSI  <thouraya.andolsi@st.com>
3998
3999         Reviewed by Zoltan Herczeg.
4000
4001         [Qt] Fix the SH4 build after r109834
4002         https://bugs.webkit.org/show_bug.cgi?id=80492
4003
4004         * assembler/MacroAssemblerSH4.h:
4005         (JSC::MacroAssemblerSH4::branchAdd32):
4006         (JSC::MacroAssemblerSH4::branchSub32):
4007
4008 2012-03-09  Andy Wingo  <wingo@igalia.com>
4009
4010         Refactor code feature analysis in the parser
4011         https://bugs.webkit.org/show_bug.cgi?id=79112
4012
4013         Reviewed by Geoffrey Garen.
4014
4015         This commit refactors the parser to more uniformly propagate flag
4016         bits down and up the parse process, as the parser descends and
4017         returns into nested blocks.  Some flags get passed town to
4018         subscopes, some apply to specific scopes only, and some get
4019         unioned up after parsing subscopes.
4020
4021         The goal is to eventually be very precise with scoping
4022         information, once we have block scopes: one block scope might use
4023         `eval', which would require the emission of a symbol table within
4024         that block and containing blocks, whereas another block in the
4025         same function might not, allowing us to not emit a symbol table.
4026
4027         * parser/Nodes.h:
4028         (JSC::ScopeFlags): Rename from CodeFeatures.
4029         (JSC::ScopeNode::addScopeFlags):
4030         (JSC::ScopeNode::scopeFlags): New accessors for m_scopeFlags.
4031         (JSC::ScopeNode::isStrictMode):