2011-07-05 Oliver Hunt <oliver@apple.com>
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2011-07-05  Oliver Hunt  <oliver@apple.com>
2
3         Don't throw out compiled code repeatedly
4         https://bugs.webkit.org/show_bug.cgi?id=63960
5
6         Reviewed by Gavin Barraclough.
7
8         Stop throwing away all compiled code every time
9         we're told to do a full GC.  Instead unlink all
10         callsites during such GC passes to maximise the
11         number of collectable functions, but otherwise
12         leave compiled functions alone.
13
14         * API/JSBase.cpp:
15         (JSGarbageCollect):
16         * bytecode/CodeBlock.cpp:
17         (JSC::CodeBlock::visitAggregate):
18         * heap/Heap.cpp:
19         (JSC::Heap::collectAllGarbage):
20         * heap/MarkStack.h:
21         (JSC::MarkStack::shouldUnlinkCalls):
22         (JSC::MarkStack::setShouldUnlinkCalls):
23         * runtime/JSGlobalData.cpp:
24         (JSC::JSGlobalData::recompileAllJSFunctions):
25         (JSC::JSGlobalData::releaseExecutableMemory):
26         * runtime/RegExp.cpp:
27         (JSC::RegExp::compile):
28         (JSC::RegExp::invalidateCode):
29         * runtime/RegExp.h:
30
31 2011-07-05  Filip Pizlo  <fpizlo@apple.com>
32
33         JSC JIT has code duplication for the handling of call and construct
34         https://bugs.webkit.org/show_bug.cgi?id=63957
35
36         Reviewed by Gavin Barraclough.
37
38         * jit/JIT.cpp:
39         (JSC::JIT::linkFor):
40         * jit/JIT.h:
41         * jit/JITStubs.cpp:
42         (JSC::jitCompileFor):
43         (JSC::DEFINE_STUB_FUNCTION):
44         (JSC::arityCheckFor):
45         (JSC::lazyLinkFor):
46         * runtime/Executable.h:
47         (JSC::ExecutableBase::generatedJITCodeFor):
48         (JSC::FunctionExecutable::compileFor):
49         (JSC::FunctionExecutable::isGeneratedFor):
50         (JSC::FunctionExecutable::generatedBytecodeFor):
51         (JSC::FunctionExecutable::generatedJITCodeWithArityCheckFor):
52
53 2011-07-05  Gavin Barraclough  <barraclough@apple.com>
54
55         Build fix following last patch.
56
57         * runtime/JSFunction.cpp:
58         (JSC::createPrototypeProperty):
59
60 2011-07-05  Gavin Barraclough  <barraclough@apple.com>
61
62         https://bugs.webkit.org/show_bug.cgi?id=63947
63         ASSERT running Object.preventExtensions(Math.sin)
64
65         Reviewed by Oliver Hunt.
66
67         This is due to calling scope() on a hostFunction as a part of
68         calling createPrototypeProperty to reify the prototype property.
69         But host functions don't have a prototype property anyway!
70
71         Prevent callling createPrototypeProperty on a host function.
72
73         * runtime/JSFunction.cpp:
74         (JSC::JSFunction::createPrototypeProperty):
75         (JSC::JSFunction::preventExtensions):
76
77 2011-07-04  Gavin Barraclough  <barraclough@apple.com>
78
79         https://bugs.webkit.org/show_bug.cgi?id=63880
80         Evaluation order of conversions of operands to >, >= incorrect.
81
82         Reviewed by Sam Weinig.
83
84         Add 'leftFirst' parameter to jsLess, jsLessEq matching that described in the ES5
85         spec. This allows these methods to be reused to perform >, >= relational compares
86         with correct ordering of type conversions.
87
88         * dfg/DFGOperations.cpp:
89         * interpreter/Interpreter.cpp:
90         (JSC::Interpreter::privateExecute):
91         * jit/JITStubs.cpp:
92         (JSC::DEFINE_STUB_FUNCTION):
93         * runtime/Operations.h:
94         (JSC::jsLess):
95         (JSC::jsLessEq):
96
97 2011-07-04  Gavin Barraclough  <barraclough@apple.com>
98
99         Reviewed by Sam Weinig.
100
101         https://bugs.webkit.org/show_bug.cgi?id=16652
102         Firefox and JavaScriptCore differ in Number.toString(integer)
103
104         Our arbitrary radix (2..36) toString conversion is inaccurate.
105         This is partly because it uses doubles to perform math that requires
106         higher accuracy, and partly becasue it does not attempt to correctly
107         detect where to terminate, instead relying on a simple 'epsilon'.
108
109         * runtime/NumberPrototype.cpp:
110         (JSC::decomposeDouble):
111             - helper function to extract sign, exponent, mantissa from IEEE doubles.
112         (JSC::Uint16WithFraction::Uint16WithFraction):
113             - helper class, u16int with infinite precision fraction, used to convert
114               the fractional part of the number to a string.
115         (JSC::Uint16WithFraction::operator*=):
116             - Multiply by a uint16.
117         (JSC::Uint16WithFraction::operator<):
118             - Compare two Uint16WithFractions.
119         (JSC::Uint16WithFraction::floorAndSubtract):
120             - Extract the integer portion of the number, and subtract it (clears the integer portion).
121         (JSC::Uint16WithFraction::comparePoint5):
122             - Compare to 0.5.
123         (JSC::Uint16WithFraction::sumGreaterThanOne):
124             - Passed a second Uint16WithFraction, returns true if the result of adding
125               the two values would be greater than one.
126         (JSC::Uint16WithFraction::isNormalized):
127             - Used by ASSERTs to consistency check internal representation.
128         (JSC::BigInteger::BigInteger):
129             - helper class, unbounded integer value, used to convert the integer part
130               of the number to a string.
131         (JSC::BigInteger::divide):
132             - Divide this value through by a uint32.
133         (JSC::BigInteger::operator!):
134             - test for zero.
135         (JSC::toStringWithRadix):
136             - Performs number to string conversion, with the given radix (2..36).
137         (JSC::numberProtoFuncToString):
138             - Changed to use toStringWithRadix.
139
140 2011-07-04  Gavin Barraclough  <barraclough@apple.com>
141
142         https://bugs.webkit.org/show_bug.cgi?id=63881
143         Need separate bytecodes for handling >, >= comparisons.
144
145         Reviewed by Oliver Hunt.
146
147         This clears the way to fix Bug#63880. We currently handle greater-than comparisons
148         as being using the corresponding op_less, etc opcodes.  This is incorrect with
149         respect to evaluation ordering of the implicit conversions performed on operands -
150         we should be calling ToPrimitive on the LHS and RHS operands to the greater than,
151         but instead convert RHS then LHS.
152
153         This patch adds opcodes for greater-than comparisons mirroring existing ones used
154         for less-than.
155
156         * bytecode/CodeBlock.cpp:
157         (JSC::CodeBlock::dump):
158         * bytecode/Opcode.h:
159         * bytecompiler/BytecodeGenerator.cpp:
160         (JSC::BytecodeGenerator::emitJumpIfTrue):
161         (JSC::BytecodeGenerator::emitJumpIfFalse):
162         * bytecompiler/NodesCodegen.cpp:
163         * dfg/DFGByteCodeParser.cpp:
164         (JSC::DFG::ByteCodeParser::parseBlock):
165         * dfg/DFGNode.h:
166         * dfg/DFGNonSpeculativeJIT.cpp:
167         (JSC::DFG::NonSpeculativeJIT::compare):
168         (JSC::DFG::NonSpeculativeJIT::compile):
169         * dfg/DFGNonSpeculativeJIT.h:
170         * dfg/DFGOperations.cpp:
171         * dfg/DFGOperations.h:
172         * dfg/DFGSpeculativeJIT.cpp:
173         (JSC::DFG::SpeculativeJIT::compare):
174         (JSC::DFG::SpeculativeJIT::compile):
175         * dfg/DFGSpeculativeJIT.h:
176         * interpreter/Interpreter.cpp:
177         (JSC::Interpreter::privateExecute):
178         * jit/JIT.cpp:
179         (JSC::JIT::privateCompileMainPass):
180         (JSC::JIT::privateCompileSlowCases):
181         * jit/JIT.h:
182         (JSC::JIT::emit_op_loop_if_greater):
183         (JSC::JIT::emitSlow_op_loop_if_greater):
184         (JSC::JIT::emit_op_loop_if_greatereq):
185         (JSC::JIT::emitSlow_op_loop_if_greatereq):
186         * jit/JITArithmetic.cpp:
187         (JSC::JIT::emit_op_jgreater):
188         (JSC::JIT::emit_op_jgreatereq):
189         (JSC::JIT::emit_op_jngreater):
190         (JSC::JIT::emit_op_jngreatereq):
191         (JSC::JIT::emitSlow_op_jgreater):
192         (JSC::JIT::emitSlow_op_jgreatereq):
193         (JSC::JIT::emitSlow_op_jngreater):
194         (JSC::JIT::emitSlow_op_jngreatereq):
195         (JSC::JIT::emit_compareAndJumpSlow):
196         * jit/JITArithmetic32_64.cpp:
197         (JSC::JIT::emitBinaryDoubleOp):
198         * jit/JITStubs.cpp:
199         (JSC::DEFINE_STUB_FUNCTION):
200         * jit/JITStubs.h:
201         * parser/NodeConstructors.h:
202         (JSC::GreaterNode::GreaterNode):
203         (JSC::GreaterEqNode::GreaterEqNode):
204         * parser/Nodes.h:
205
206 2011-07-03  Gavin Barraclough  <barraclough@apple.com>
207
208         https://bugs.webkit.org/show_bug.cgi?id=63879
209         Reduce code duplication for op_jless, op_jlesseq, op_jnless, op_jnlesseq.
210
211         Reviewed by Sam Weinig.
212         
213         There is a lot of copy & paste code here; we can reduce duplication by making
214         a shared implementation.
215
216         * assembler/MacroAssembler.h:
217         (JSC::MacroAssembler::branch32):
218         (JSC::MacroAssembler::commute):
219             - Make these function platform agnostic.
220         * assembler/MacroAssemblerX86Common.h:
221             - Moved branch32/commute up to MacroAssembler.
222         * jit/JIT.h:
223         (JSC::JIT::emit_op_loop_if_lesseq):
224         (JSC::JIT::emitSlow_op_loop_if_lesseq):
225             - Add an implementation matching that for op_loop_if_less, which just calls op_jless.
226         * jit/JITArithmetic.cpp:
227         (JSC::JIT::emit_op_jless):
228         (JSC::JIT::emit_op_jlesseq):
229         (JSC::JIT::emit_op_jnless):
230         (JSC::JIT::emit_op_jnlesseq):
231         (JSC::JIT::emitSlow_op_jless):
232         (JSC::JIT::emitSlow_op_jlesseq):
233         (JSC::JIT::emitSlow_op_jnless):
234         (JSC::JIT::emitSlow_op_jnlesseq):
235             - Common implmentations of these methods for JSVALUE64 & JSVALUE32_64.
236         (JSC::JIT::emit_compareAndJump):
237         (JSC::JIT::emit_compareAndJumpSlow):
238             - Internal implmementation of jless etc for JSVALUE64.
239         * jit/JITArithmetic32_64.cpp:
240         (JSC::JIT::emit_compareAndJump):
241         (JSC::JIT::emit_compareAndJumpSlow):
242             - Internal implmementation of jless etc for JSVALUE32_64.
243         * jit/JITOpcodes.cpp:
244         * jit/JITOpcodes32_64.cpp:
245         * jit/JITStubs.cpp:
246         * jit/JITStubs.h:
247             - Remove old implementation of emit_op_loop_if_lesseq.
248
249 2011-07-03  Sheriff Bot  <webkit.review.bot@gmail.com>
250
251         Unreviewed, rolling out r90347.
252         http://trac.webkit.org/changeset/90347
253         https://bugs.webkit.org/show_bug.cgi?id=63886
254
255         Build breaks on Leopard, Chromium-win, WinCairo, and WinCE.
256         (Requested by tkent on #webkit).
257
258         * JavaScriptCore.xcodeproj/project.pbxproj:
259         * runtime/BigInteger.h: Removed.
260         * runtime/NumberPrototype.cpp:
261         (JSC::numberProtoFuncToPrecision):
262         (JSC::numberProtoFuncToString):
263         * runtime/Uint16WithFraction.h: Removed.
264         * wtf/MathExtras.h:
265
266 2011-06-30  Gavin Barraclough  <barraclough@apple.com>
267
268         Reviewed by Sam Weinig.
269
270         https://bugs.webkit.org/show_bug.cgi?id=16652
271         Firefox and JavaScriptCore differ in Number.toString(integer)
272
273         Our arbitrary radix (2..36) toString conversion is inaccurate.
274         This is partly because it uses doubles to perform math that requires
275         higher accuracy, and partly becasue it does not attempt to correctly
276         detect where to terminate, instead relying on a simple 'epsilon'.
277
278         * runtime/NumberPrototype.cpp:
279         (JSC::decomposeDouble):
280             - helper function to extract sign, exponent, mantissa from IEEE doubles.
281         (JSC::Uint16WithFraction::Uint16WithFraction):
282             - helper class, u16int with infinite precision fraction, used to convert
283               the fractional part of the number to a string.
284         (JSC::Uint16WithFraction::operator*=):
285             - Multiply by a uint16.
286         (JSC::Uint16WithFraction::operator<):
287             - Compare two Uint16WithFractions.
288         (JSC::Uint16WithFraction::floorAndSubtract):
289             - Extract the integer portion of the number, and subtract it (clears the integer portion).
290         (JSC::Uint16WithFraction::comparePoint5):
291             - Compare to 0.5.
292         (JSC::Uint16WithFraction::sumGreaterThanOne):
293             - Passed a second Uint16WithFraction, returns true if the result of adding
294               the two values would be greater than one.
295         (JSC::Uint16WithFraction::isNormalized):
296             - Used by ASSERTs to consistency check internal representation.
297         (JSC::BigInteger::BigInteger):
298             - helper class, unbounded integer value, used to convert the integer part
299               of the number to a string.
300         (JSC::BigInteger::divide):
301             - Divide this value through by a uint32.
302         (JSC::BigInteger::operator!):
303             - test for zero.
304         (JSC::toStringWithRadix):
305             - Performs number to string conversion, with the given radix (2..36).
306         (JSC::numberProtoFuncToString):
307             - Changed to use toStringWithRadix.
308
309 2011-07-02  Gavin Barraclough  <barraclough@apple.com>
310
311         https://bugs.webkit.org/show_bug.cgi?id=63866
312         DFG JIT - implement instanceof
313
314         Reviewed by Sam Weinig.
315
316         Add ops CheckHasInstance & InstanceOf to implement bytecodes
317         op_check_has_instance & op_instanceof. This is an initial
318         functional implementation, performance is a wash. We can
319         follow up with changes to fuse the InstanceOf node with
320         a subsequant branch, as we do with other comparisons.
321
322         * dfg/DFGByteCodeParser.cpp:
323         (JSC::DFG::ByteCodeParser::parseBlock):
324         * dfg/DFGJITCompiler.cpp:
325         (JSC::DFG::JITCompiler::jitAssertIsCell):
326         * dfg/DFGJITCompiler.h:
327         (JSC::DFG::JITCompiler::jitAssertIsCell):
328         * dfg/DFGNode.h:
329         * dfg/DFGNonSpeculativeJIT.cpp:
330         (JSC::DFG::NonSpeculativeJIT::compile):
331         * dfg/DFGOperations.cpp:
332         * dfg/DFGOperations.h:
333         * dfg/DFGSpeculativeJIT.cpp:
334         (JSC::DFG::SpeculativeJIT::compile):
335
336 2011-07-01  Oliver Hunt  <oliver@apple.com>
337
338         IE Web Workers demo crashes in JSC::SlotVisitor::visitChildren()
339         https://bugs.webkit.org/show_bug.cgi?id=63732
340
341         Reviewed by Gavin Barraclough.
342
343         Initialise the memory at the head of the new storage so that
344         GC is safe if triggered by reportExtraMemoryCost.
345
346         * runtime/JSArray.cpp:
347         (JSC::JSArray::increaseVectorPrefixLength):
348
349 2011-07-01  Oliver Hunt  <oliver@apple.com>
350
351         GC sweep can occur before an object is completely initialised
352         https://bugs.webkit.org/show_bug.cgi?id=63836
353
354         Reviewed by Gavin Barraclough.
355
356         In rare cases it's possible for a GC sweep to occur while a
357         live, but not completely initialised object is on the stack.
358         In such a case we may incorrectly choose to mark it, even
359         though it has no children that need marking.
360
361         We resolve this by always zeroing out the structure of any
362         value returned from JSCell::operator new(), and making the
363         markstack tolerant of a null structure. 
364
365         * runtime/JSCell.h:
366         (JSC::JSCell::JSCell::~JSCell):
367         (JSC::JSCell::JSCell::operator new):
368         * runtime/Structure.h:
369         (JSC::MarkStack::internalAppend):
370
371 2011-07-01  Filip Pizlo  <fpizlo@apple.com>
372
373         Reviewed by Gavin Barraclough.
374
375         DFG non-speculative JIT always performs slow C calls for div and mod.
376         https://bugs.webkit.org/show_bug.cgi?id=63684
377
378         * dfg/DFGNonSpeculativeJIT.cpp:
379         (JSC::DFG::NonSpeculativeJIT::compile):
380
381 2011-07-01  Juan C. Montemayor  <jmont@apple.com>
382
383         Reviewed by Oliver Hunt.
384
385         Lexer error messages are currently appalling
386         https://bugs.webkit.org/show_bug.cgi?id=63340
387
388         Added error messages for the Lexer. These messages will be displayed
389         instead of the lexer error messages from the parser that are currently
390         shown.
391
392         * parser/Lexer.cpp:
393         (JSC::Lexer::getInvalidCharMessage):
394         (JSC::Lexer::setCode):
395         (JSC::Lexer::parseString):
396         (JSC::Lexer::lex):
397         (JSC::Lexer::clear):
398         * parser/Lexer.h:
399         (JSC::Lexer::getErrorMessage):
400         (JSC::Lexer::setOffset):
401         * parser/Parser.cpp:
402         (JSC::Parser::parse):
403
404 2011-07-01  Jungshik Shin  <jshin@chromium.org>
405
406         Reviewed by Alexey Proskuryakov.
407
408         Add ScriptCodesFromICU.h to wtf/unicode and make necessary changes in
409         build files for ports not using ICU.
410         Add icu/unicode/uscript.h for ports using ICU. It's taken from 
411         ICU 3.6 (the version used on Mac OS 10.5)
412
413         http://bugs.webkit.org/show_bug.cgi?id=20797
414
415         * GNUmakefile.list.am:
416         * JavaScriptCore.gypi:
417         * icu/unicode/uscript.h: Added for UScriptCode enum.
418         * wtf/unicode/ScriptCodesFromICU.h: UScriptCode enum added.
419         * wtf/unicode/icu/UnicodeIcu.h:
420         * wtf/unicode/brew/UnicodeBrew.h:
421         * wtf/unicode/glib/UnicodeGLib.h:
422         * wtf/unicode/qt4/UnicodeQt4.h:
423         * wtf/unicode/wince/UnicodeWinCE.h:
424
425 2011-07-01  Gavin Barraclough  <barraclough@apple.com>
426
427         Reviewed by Sam Weinig.
428
429         https://bugs.webkit.org/show_bug.cgi?id=63819
430         Escaping of forwardslashes in strings incorrect if multiple exist.
431
432         The bug is in the parameters passed to a substring - should be
433         start & length, but we're passing start & end indices!
434
435         * runtime/RegExpObject.cpp:
436         (JSC::regExpObjectSource):
437
438 2011-07-01  Adam Roben  <aroben@apple.com>
439
440         Roll out r90194
441         http://trac.webkit.org/changeset/90194
442         https://bugs.webkit.org/show_bug.cgi?id=63778
443
444         Fixes <http://webkit.org/b/63812> REGRESSION (r90194): Multiple tests intermittently failing
445         assertions in WriteBarrierBase<JSC::Structure>::get
446
447         * runtime/JSCell.h:
448         (JSC::JSCell::JSCell::~JSCell):
449
450 2011-06-30  Oliver Hunt  <oliver@apple.com>
451
452         Reviewed by Gavin Barraclough.
453
454         Add optimised paths for a few maths functions
455         https://bugs.webkit.org/show_bug.cgi?id=63757
456
457         Relanding as a Mac only patch.
458
459         This adds specialised thunks for Math.abs, Math.round, Math.ceil,
460         Math.floor, Math.log, and Math.exp as they are apparently more
461         important in real web content than we thought, which is somewhat
462         mind-boggling.  On average doubles the performance of the common
463         cases (eg. actually passing numbers in).  They're not as efficient
464         as they could be, but this way gives them the most portability.
465
466         * assembler/MacroAssemblerARM.h:
467         (JSC::MacroAssemblerARM::supportsDoubleBitops):
468         (JSC::MacroAssemblerARM::andnotDouble):
469         * assembler/MacroAssemblerARMv7.h:
470         (JSC::MacroAssemblerARMv7::supportsDoubleBitops):
471         (JSC::MacroAssemblerARMv7::andnotDouble):
472         * assembler/MacroAssemblerMIPS.h:
473         (JSC::MacroAssemblerMIPS::andnotDouble):
474         (JSC::MacroAssemblerMIPS::supportsDoubleBitops):
475         * assembler/MacroAssemblerSH4.h:
476         (JSC::MacroAssemblerSH4::supportsDoubleBitops):
477         (JSC::MacroAssemblerSH4::andnotDouble):
478         * assembler/MacroAssemblerX86.h:
479         (JSC::MacroAssemblerX86::supportsDoubleBitops):
480         * assembler/MacroAssemblerX86Common.h:
481         (JSC::MacroAssemblerX86Common::andnotDouble):
482         * assembler/MacroAssemblerX86_64.h:
483         (JSC::MacroAssemblerX86_64::supportsDoubleBitops):
484         * assembler/X86Assembler.h:
485         (JSC::X86Assembler::andnpd_rr):
486         * create_hash_table:
487         * jit/SpecializedThunkJIT.h:
488         (JSC::SpecializedThunkJIT::finalize):
489         (JSC::SpecializedThunkJIT::callDoubleToDouble):
490         * jit/ThunkGenerators.cpp:
491         (JSC::floorThunkGenerator):
492         (JSC::ceilThunkGenerator):
493         (JSC::roundThunkGenerator):
494         (JSC::expThunkGenerator):
495         (JSC::logThunkGenerator):
496         (JSC::absThunkGenerator):
497         * jit/ThunkGenerators.h:
498
499 2011-07-01  David Kilzer  <ddkilzer@apple.com>
500
501         <http://webkit.org/b/63814> Fix clang build error in JITOpcodes32_64.cpp
502
503         Fixes the following build error in clang:
504
505             JavaScriptCore/jit/JITOpcodes32_64.cpp:741:36:{741:9-741:35}: error: operator '?:' has lower precedence than '+'; '+' will be evaluated first [-Werror,-Wparentheses,3]
506                  map(m_bytecodeOffset + dynamic ? OPCODE_LENGTH(op_resolve_global_dynamic) : OPCODE_LENGTH(op_resolve_global), dst, regT1, regT0);
507                      ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^
508             JavaScriptCore/jit/JITOpcodes32_64.cpp:741:36: note: place parentheses around the '+' expression to silence this warning [3]
509                  map(m_bytecodeOffset + dynamic ? OPCODE_LENGTH(op_resolve_global_dynamic) : OPCODE_LENGTH(op_resolve_global), dst, regT1, regT0);
510                                                 ^
511                      (                         )
512             fix-it:"JavaScriptCore/jit/JITOpcodes32_64.cpp":{741:9-741:9}:"("
513             fix-it:"JavaScriptCore/jit/JITOpcodes32_64.cpp":{741:35-741:35}:")"
514             JavaScriptCore/jit/JITOpcodes32_64.cpp:741:36:{741:28-741:94}: note: place parentheses around the '?:' expression to evaluate it first [3]
515                  map(m_bytecodeOffset + dynamic ? OPCODE_LENGTH(op_resolve_global_dynamic) : OPCODE_LENGTH(op_resolve_global), dst, regT1, regT0);
516                                         ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
517             1 error generated.
518
519         * jit/JITOpcodes32_64.cpp:
520         (JSC::JIT::emit_op_resolve_global): Add parenthesis to make the
521         tertiary expression evaluate first.
522
523 2011-07-01  Sheriff Bot  <webkit.review.bot@gmail.com>
524
525         Unreviewed, rolling out r90177 and r90179.
526         http://trac.webkit.org/changeset/90177
527         http://trac.webkit.org/changeset/90179
528         https://bugs.webkit.org/show_bug.cgi?id=63790
529
530         It caused crashes on Qt in debug mode (Requested by Ossy on
531         #webkit).
532
533         * assembler/MacroAssemblerARM.h:
534         (JSC::MacroAssemblerARM::rshift32):
535         (JSC::MacroAssemblerARM::supportsFloatingPointSqrt):
536         (JSC::MacroAssemblerARM::sqrtDouble):
537         * assembler/MacroAssemblerARMv7.h:
538         (JSC::MacroAssemblerARMv7::supportsFloatingPointSqrt):
539         (JSC::MacroAssemblerARMv7::sqrtDouble):
540         * assembler/MacroAssemblerMIPS.h:
541         (JSC::MacroAssemblerMIPS::sqrtDouble):
542         (JSC::MacroAssemblerMIPS::supportsFloatingPointSqrt):
543         * assembler/MacroAssemblerSH4.h:
544         (JSC::MacroAssemblerSH4::sqrtDouble):
545         * assembler/MacroAssemblerX86.h:
546         * assembler/MacroAssemblerX86Common.h:
547         * assembler/MacroAssemblerX86_64.h:
548         * assembler/X86Assembler.h:
549         * create_hash_table:
550         * jit/JSInterfaceJIT.h:
551         (JSC::JSInterfaceJIT::emitLoadDouble):
552         * jit/SpecializedThunkJIT.h:
553         (JSC::SpecializedThunkJIT::finalize):
554         * jit/ThunkGenerators.cpp:
555         * jit/ThunkGenerators.h:
556
557 2011-06-30  Oliver Hunt  <oliver@apple.com>
558
559         Reviewed by Beth Dakin.
560
561         Make GC validation clear cell structure on destruction
562         https://bugs.webkit.org/show_bug.cgi?id=63778
563
564         * runtime/JSCell.h:
565         (JSC::JSCell::JSCell::~JSCell):
566
567 2011-06-30  Geoffrey Garen  <ggaren@apple.com>
568
569         Reviewed by Gavin Barraclough.
570
571         Added write barrier that was missing from put_by_id_transition
572         https://bugs.webkit.org/show_bug.cgi?id=63775
573
574         * dfg/DFGJITCodeGenerator.cpp:
575         (JSC::DFG::JITCodeGenerator::writeBarrier): Made this static with a
576         MacroAssembler& argument so our patching functions could use it.
577
578         (JSC::DFG::JITCodeGenerator::cachedPutById):
579         * dfg/DFGJITCodeGenerator.h:
580         * dfg/DFGNonSpeculativeJIT.cpp:
581         (JSC::DFG::NonSpeculativeJIT::compile): Updated for signature change.
582
583         * dfg/DFGRepatch.cpp:
584         (JSC::DFG::tryCachePutByID): Missing barrier!
585
586         * dfg/DFGSpeculativeJIT.cpp:
587         (JSC::DFG::SpeculativeJIT::compile): Updated for signature change.
588
589         * jit/JITPropertyAccess.cpp:
590         (JSC::JIT::privateCompilePutByIdTransition):
591         * jit/JITPropertyAccess32_64.cpp:
592         (JSC::JIT::privateCompilePutByIdTransition):
593         * jit/JSInterfaceJIT.h: Same game here. Removed storePtrWithWriteBarrier
594         because its meaning isn't clear -- maybe in the future we'll have a
595         clear way to pass all stores through a common function that guarantees
596         a write barrier, but that's not the case right now.
597
598 2011-06-30  Filip Pizlo  <fpizlo@apple.com>
599
600         Reviewed by Gavin Barraclough.
601
602         DFG non-speculative JIT does not reuse registers when compiling comparisons.
603         https://bugs.webkit.org/show_bug.cgi?id=63565
604
605         * dfg/DFGNonSpeculativeJIT.cpp:
606         (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp):
607         (JSC::DFG::NonSpeculativeJIT::basicArithOp):
608         (JSC::DFG::NonSpeculativeJIT::compare):
609
610 2011-06-30  Geoffrey Garen  <ggaren@apple.com>
611
612         Reviewed by Gavin Barraclough.
613
614         Added empty write barrier stubs in all the right places in the DFG JIT
615         https://bugs.webkit.org/show_bug.cgi?id=63764
616         
617         SunSpider thinks this might be a 0.5% speedup. Meh.
618
619         * dfg/DFGJITCodeGenerator.cpp:
620         (JSC::DFG::JITCodeGenerator::writeBarrier): Le stub.
621
622         (JSC::DFG::JITCodeGenerator::cachedPutById): Don't do anything special
623         for the case where base == scratch, since we now require base and scratch
624         to be not equal, for the sake of the write barrier.
625
626         * dfg/DFGJITCodeGenerator.h: Le stub.
627
628         * dfg/DFGNonSpeculativeJIT.cpp:
629         (JSC::DFG::NonSpeculativeJIT::compile): Don't reuse the base register
630         as the scratch register, since that's incompatible with the write barrier,
631         which needs a distinct base and scratch.
632         
633         Do put the global object into a register before loading its var storage,
634         since it needs to be in a register for the write barrier to operate on it.
635
636         * dfg/DFGSpeculativeJIT.cpp:
637         (JSC::DFG::SpeculativeJIT::compile):
638         * jit/JITPropertyAccess.cpp:
639         (JSC::JIT::emitWriteBarrier): Second verse, same as the first.
640
641         * jit/JITPropertyAccess.cpp:
642         (JSC::JIT::emit_op_get_scoped_var):
643         (JSC::JIT::emit_op_put_scoped_var):
644         (JSC::JIT::emit_op_put_global_var): Deployed offsetOfRegisters() to more
645         places.
646
647         (JSC::JIT::emitWriteBarrier): Added a teeny tiny ASSERT so this function
648         is a little more than meaningless.
649
650         * jit/JITPropertyAccess32_64.cpp:
651         (JSC::JIT::emit_op_get_scoped_var):
652         (JSC::JIT::emit_op_put_scoped_var):
653         (JSC::JIT::emit_op_put_global_var): Deployed offsetOfRegisters() to more
654         places.
655
656         (JSC::JIT::emitWriteBarrier): Added a teeny tiny ASSERT so this function
657         is a little more than meaningless.
658
659         * runtime/JSVariableObject.h:
660         (JSC::JSVariableObject::offsetOfRegisters): Now used by the JIT, since
661         we put the global object in a register and only then load its var storage
662         by offset.
663
664         (JSC::JIT::emitWriteBarrier):
665
666 2011-06-30  Oliver Hunt  <oliver@apple.com>
667
668         Fix ARMv6 build
669
670         * assembler/MacroAssemblerARM.h:
671         (JSC::MacroAssemblerARM::rshift32):
672
673 2011-06-30  Oliver Hunt  <oliver@apple.com>
674
675         Reviewed by Gavin Barraclough.
676
677         Add optimised paths for a few maths functions
678         https://bugs.webkit.org/show_bug.cgi?id=63757
679
680         This adds specialised thunks for Math.abs, Math.round, Math.ceil,
681         Math.floor, Math.log, and Math.exp as they are apparently more
682         important in real web content than we thought, which is somewhat
683         mind-boggling.  On average doubles the performance of the common
684         cases (eg. actually passing numbers in).  They're not as efficient
685         as they could be, but this way gives them the most portability.
686
687         * assembler/MacroAssemblerARM.h:
688         (JSC::MacroAssemblerARM::supportsDoubleBitops):
689         (JSC::MacroAssemblerARM::andnotDouble):
690         * assembler/MacroAssemblerARMv7.h:
691         (JSC::MacroAssemblerARMv7::supportsDoubleBitops):
692         (JSC::MacroAssemblerARMv7::andnotDouble):
693         * assembler/MacroAssemblerMIPS.h:
694         (JSC::MacroAssemblerMIPS::andnotDouble):
695         (JSC::MacroAssemblerMIPS::supportsDoubleBitops):
696         * assembler/MacroAssemblerSH4.h:
697         (JSC::MacroAssemblerSH4::supportsDoubleBitops):
698         (JSC::MacroAssemblerSH4::andnotDouble):
699         * assembler/MacroAssemblerX86.h:
700         (JSC::MacroAssemblerX86::supportsDoubleBitops):
701         * assembler/MacroAssemblerX86Common.h:
702         (JSC::MacroAssemblerX86Common::andnotDouble):
703         * assembler/MacroAssemblerX86_64.h:
704         (JSC::MacroAssemblerX86_64::supportsDoubleBitops):
705         * assembler/X86Assembler.h:
706         (JSC::X86Assembler::andnpd_rr):
707         * create_hash_table:
708         * jit/SpecializedThunkJIT.h:
709         (JSC::SpecializedThunkJIT::finalize):
710         (JSC::SpecializedThunkJIT::callDoubleToDouble):
711         * jit/ThunkGenerators.cpp:
712         (JSC::floorThunkGenerator):
713         (JSC::ceilThunkGenerator):
714         (JSC::roundThunkGenerator):
715         (JSC::expThunkGenerator):
716         (JSC::logThunkGenerator):
717         (JSC::absThunkGenerator):
718         * jit/ThunkGenerators.h:
719
720 2011-06-30  Cary Clark  <caryclark@google.com>
721
722         Reviewed by James Robinson.
723
724         Use Skia if Skia on Mac Chrome is enabled
725         https://bugs.webkit.org/show_bug.cgi?id=62999
726
727         * wtf/Platform.h:
728         Add switch to use Skia if, externally,
729         Skia has been enabled by a gyp define.
730
731 2011-06-30  Juan C. Montemayor  <jmont@apple.com>
732
733         Reviewed by Geoffrey Garen.
734
735         Web Inspector fails to display source for eval with syntax error
736         https://bugs.webkit.org/show_bug.cgi?id=63583
737
738         Web Inspector now displays a link to an eval statement that contains
739         a syntax error.
740
741         * parser/Parser.h:
742         (JSC::isEvalNode):
743         (JSC::EvalNode):
744         (JSC::Parser::parse):
745
746 2011-06-30  Filip Pizlo  <fpizlo@apple.com>
747
748         Reviewed by Gavin Barraclough.
749
750         X86Assembler does not encode byte registers in 64-bit mode correctly.
751         https://bugs.webkit.org/show_bug.cgi?id=63665
752
753         * assembler/X86Assembler.h:
754         (JSC::X86Assembler::testb_rr):
755         (JSC::X86Assembler::X86InstructionFormatter::oneByteOp8):
756
757 2011-06-30  Sheriff Bot  <webkit.review.bot@gmail.com>
758
759         Unreviewed, rolling out r90102.
760         http://trac.webkit.org/changeset/90102
761         https://bugs.webkit.org/show_bug.cgi?id=63714
762
763         Lots of tests asserting beneath
764         SVGSMILElement::findInstanceTime (Requested by aroben on
765         #webkit).
766
767         * wtf/StdLibExtras.h:
768         (WTF::binarySearch):
769
770 2011-06-30  Oliver Varga  <Varga.Oliver@stud.u-szeged.hu>
771
772         Reviewed by Nikolas Zimmermann.
773
774         Speed up SVGSMILElement::findInstanceTime.
775         https://bugs.webkit.org/show_bug.cgi?id=61025
776
777         Add a new parameter to StdlibExtras.h::binarySerarch function
778         to also handle cases when the array does not contain the key value.
779         This is needed for an svg function.
780
781         * wtf/StdLibExtras.h:
782         (WTF::binarySearch):
783
784 2011-06-29  Gavin Barraclough  <barraclough@apple.com>
785
786         Reviewed by Geoff Garen.
787
788         https://bugs.webkit.org/show_bug.cgi?id=63669
789         DFG JIT - fix spectral-norm regression
790
791         The problem is a mis-speculation leading to us falling off the speculative path.
792         Make the speculation logic slightly smarter, don't predict int if one of the
793         operands is already loaded as a double (we use this logic already for compares).
794
795         * dfg/DFGSpeculativeJIT.cpp:
796         (JSC::DFG::SpeculativeJIT::compile):
797         * dfg/DFGSpeculativeJIT.h:
798         (JSC::DFG::SpeculativeJIT::shouldSpeculateInteger):
799
800 2011-06-29  Filip Pizlo  <fpizlo@apple.com>
801
802         Reviewed by Gavin Barraclough.
803
804         DFG JIT does not do put_by_id transition caching.
805         https://bugs.webkit.org/show_bug.cgi?id=63662
806
807         * dfg/DFGJITCodeGenerator.cpp:
808         (JSC::DFG::JITCodeGenerator::cachedPutById):
809         * dfg/DFGJITCompiler.h:
810         (JSC::DFG::JITCompiler::addPropertyAccess):
811         * dfg/DFGRepatch.cpp:
812         (JSC::DFG::testPrototype):
813         (JSC::DFG::tryCachePutByID):
814
815 2011-06-29  Geoffrey Garen  <ggaren@apple.com>
816
817         Reviewed by Oliver Hunt.
818
819         Added a dummy write barrier emitting function in all the right places in the old JIT
820         https://bugs.webkit.org/show_bug.cgi?id=63667
821         
822         SunSpider reports no change.
823
824         * jit/JIT.h:
825         * jit/JITPropertyAccess.cpp:
826         (JSC::JIT::emit_op_put_by_id):
827         (JSC::JIT::emit_op_put_scoped_var): Do it.
828
829         (JSC::JIT::emit_op_put_global_var): Global object needs to be in a register
830         for the sake of the write barrier.
831
832         (JSC::JIT::emitWriteBarrier): Empty for now. Not for long!
833
834         * jit/JITPropertyAccess32_64.cpp:
835         (JSC::JIT::emit_op_put_by_val):
836         (JSC::JIT::emit_op_put_by_id):
837         (JSC::JIT::emit_op_put_scoped_var): Do it.
838
839         (JSC::JIT::emit_op_put_global_var): Global object needs to be in a register
840         for the sake of the write barrier.
841
842         (JSC::JIT::emitWriteBarrier): Empty for now. Not for long!
843
844 2011-06-29  Filip Pizlo  <fpizlo@apple.com>
845
846         Reviewed by Gavin Barraclough.
847
848         DFG JIT does not perform get_by_id self list caching.
849         https://bugs.webkit.org/show_bug.cgi?id=63605
850
851         * bytecode/StructureStubInfo.h:
852         * dfg/DFGJITCompiler.cpp:
853         (JSC::DFG::JITCompiler::compileFunction):
854         * dfg/DFGOperations.cpp:
855         * dfg/DFGOperations.h:
856         * dfg/DFGRepatch.cpp:
857         (JSC::DFG::tryCacheGetByID):
858         (JSC::DFG::tryBuildGetByIDList):
859         (JSC::DFG::dfgBuildGetByIDList):
860         * dfg/DFGRepatch.h:
861
862 2011-06-28  Filip Pizlo  <fpizlo@apple.com>
863
864         Reviewed by Gavin Barraclough.
865
866         DFG JIT lacks array.length caching.
867         https://bugs.webkit.org/show_bug.cgi?id=63505
868
869         * bytecode/StructureStubInfo.h:
870         * dfg/DFGJITCodeGenerator.cpp:
871         (JSC::DFG::JITCodeGenerator::cachedGetById):
872         (JSC::DFG::JITCodeGenerator::cachedPutById):
873         * dfg/DFGJITCodeGenerator.h:
874         (JSC::DFG::JITCodeGenerator::tryAllocate):
875         (JSC::DFG::JITCodeGenerator::selectScratchGPR):
876         (JSC::DFG::JITCodeGenerator::silentSpillAllRegisters):
877         * dfg/DFGJITCompiler.cpp:
878         (JSC::DFG::JITCompiler::compileFunction):
879         * dfg/DFGJITCompiler.h:
880         (JSC::DFG::JITCompiler::addPropertyAccess):
881         (JSC::DFG::JITCompiler::PropertyAccessRecord::PropertyAccessRecord):
882         * dfg/DFGRegisterBank.h:
883         (JSC::DFG::RegisterBank::tryAllocate):
884         * dfg/DFGRepatch.cpp:
885         (JSC::DFG::tryCacheGetByID):
886
887 2011-06-28  Pierre Rossi  <pierre.rossi@gmail.com>
888
889         Reviewed by Eric Seidel.
890
891         Warnings in JSC's JIT on 32 bit
892         https://bugs.webkit.org/show_bug.cgi?id=63259
893
894         Fairly straightforward, just use ASSERT_JIT_OFFSET_UNUSED when it applies.
895
896         * jit/JITPropertyAccess32_64.cpp:
897         (JSC::JIT::emit_op_method_check):
898         (JSC::JIT::compileGetByIdHotPath):
899         (JSC::JIT::emit_op_put_by_id):
900
901 2011-06-28  Sheriff Bot  <webkit.review.bot@gmail.com>
902
903         Unreviewed, rolling out r89968.
904         http://trac.webkit.org/changeset/89968
905         https://bugs.webkit.org/show_bug.cgi?id=63581
906
907         Broke chromium windows compile (Requested by jamesr on
908         #webkit).
909
910         * wtf/Platform.h:
911
912 2011-06-28  Oliver Hunt  <oliver@apple.com>
913
914         Reviewed by Gavin Barraclough.
915
916         Fix sampling build
917         https://bugs.webkit.org/show_bug.cgi?id=63579
918
919         Gets opcode sampling building again, doesn't seem to work alas
920
921         * bytecode/SamplingTool.cpp:
922         (JSC::SamplingTool::notifyOfScope):
923         * bytecode/SamplingTool.h:
924         (JSC::SamplingTool::SamplingTool):
925         * interpreter/Interpreter.cpp:
926         (JSC::Interpreter::enableSampler):
927         * runtime/Executable.h:
928         (JSC::ScriptExecutable::ScriptExecutable):
929
930 2011-06-28  Cary Clark  <caryclark@google.com>
931
932         Reviewed by James Robinson.
933
934         Use Skia if Skia on Mac Chrome is enabled
935         https://bugs.webkit.org/show_bug.cgi?id=62999
936
937         * wtf/Platform.h:
938         Add switch to use Skia if, externally,
939         Skia has been enabled by a gyp define.
940
941 2011-06-28  Oliver Hunt  <oliver@apple.com>
942
943         Reviewed by Gavin Barraclough.
944
945         ASSERT when launching debug builds with interpreter and jit enabled
946         https://bugs.webkit.org/show_bug.cgi?id=63566
947
948         Add appropriate guards to the various Executable's memory reporting
949         logic.
950
951         * runtime/Executable.cpp:
952         (JSC::EvalExecutable::compileInternal):
953         (JSC::ProgramExecutable::compileInternal):
954         (JSC::FunctionExecutable::compileForCallInternal):
955         (JSC::FunctionExecutable::compileForConstructInternal):
956
957 2011-06-28  Gavin Barraclough  <barraclough@apple.com>
958
959         Reviewed by Oliver Hunt.
960
961         https://bugs.webkit.org/show_bug.cgi?id=63563
962         DFG JIT - add support for double arith to speculative path
963
964         Add integer support for div & mod, add double support for div, mod,
965         add, sub & mul, dynamically selecting based on operand types.
966
967         * dfg/DFGJITCodeGenerator.cpp:
968         (JSC::DFG::FPRTemporary::FPRTemporary):
969         * dfg/DFGJITCodeGenerator.h:
970         * dfg/DFGJITCompiler.h:
971         (JSC::DFG::JITCompiler::assembler):
972         * dfg/DFGSpeculativeJIT.cpp:
973         (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
974         (JSC::DFG::SpeculativeJIT::compile):
975         * dfg/DFGSpeculativeJIT.h:
976         (JSC::DFG::SpeculateDoubleOperand::SpeculateDoubleOperand):
977         (JSC::DFG::SpeculateDoubleOperand::~SpeculateDoubleOperand):
978         (JSC::DFG::SpeculateDoubleOperand::index):
979         (JSC::DFG::SpeculateDoubleOperand::fpr):
980
981 2011-06-28  Oliver Hunt  <oliver@apple.com>
982
983         Fix interpreter build.
984
985         * interpreter/Interpreter.cpp:
986         (JSC::Interpreter::privateExecute):
987
988 2011-06-28  Gavin Barraclough  <barraclough@apple.com>
989
990         Reviewed by Oliver Hunt.
991
992         https://bugs.webkit.org/show_bug.cgi?id=63561
993         DFG JIT - don't always assume integer in relational compare
994
995         If neither operand is known integer, or either is in double representation,
996         then at least use a function call (don't bail off the speculative path).
997
998         * dfg/DFGSpeculativeJIT.cpp:
999         (JSC::DFG::SpeculativeJIT::compilePeepHoleCall):
1000         (JSC::DFG::SpeculativeJIT::compile):
1001         * dfg/DFGSpeculativeJIT.h:
1002         (JSC::DFG::SpeculativeJIT::isDataFormatDouble):
1003         (JSC::DFG::SpeculativeJIT::compareIsInteger):
1004
1005 2011-06-28  Oliver Hunt  <oliver@apple.com>
1006
1007         Reviewed by Gavin Barraclough.
1008
1009         Make constant array optimisation less strict about what constitutes a constant
1010         https://bugs.webkit.org/show_bug.cgi?id=63554
1011
1012         Now allow string constants in array literals to actually be considered constant,
1013         and so avoid codegen in array literals with strings in them.
1014
1015         * bytecode/CodeBlock.h:
1016         (JSC::CodeBlock::addConstantBuffer):
1017         (JSC::CodeBlock::constantBuffer):
1018         * bytecompiler/BytecodeGenerator.cpp:
1019         (JSC::BytecodeGenerator::addConstantBuffer):
1020         (JSC::BytecodeGenerator::addStringConstant):
1021         (JSC::BytecodeGenerator::emitNewArray):
1022         * bytecompiler/BytecodeGenerator.h:
1023         * interpreter/Interpreter.cpp:
1024         (JSC::Interpreter::privateExecute):
1025         * jit/JITStubs.cpp:
1026         (JSC::DEFINE_STUB_FUNCTION):
1027
1028 2011-06-28  Gavin Barraclough  <barraclough@apple.com>
1029
1030         Reviewed by Oliver Hunt.
1031
1032         https://bugs.webkit.org/show_bug.cgi?id=63560
1033         DFG_JIT allow allocation of specific machine registers
1034
1035         This allow us to allocate the registers necessary to perform x86
1036         idiv instructions for div/mod, and may be useful for shifts, too.
1037
1038         * dfg/DFGJITCodeGenerator.cpp:
1039         (JSC::DFG::GPRTemporary::GPRTemporary):
1040         * dfg/DFGJITCodeGenerator.h:
1041         (JSC::DFG::JITCodeGenerator::allocate):
1042         (JSC::DFG::GPRResult::GPRResult):
1043         * dfg/DFGRegisterBank.h:
1044         (JSC::DFG::RegisterBank::allocateSpecific):
1045         * dfg/DFGSpeculativeJIT.h:
1046         (JSC::DFG::SpeculativeJIT::isInteger):
1047
1048 2011-06-28  Gavin Barraclough  <barraclough@apple.com>
1049
1050         Reviewed by Oliver Hunt.
1051
1052         https://bugs.webkit.org/show_bug.cgi?id=55040
1053         RegExp constructor returns the argument regexp instead of a new object
1054
1055         Per 15.10.3.1, our current behaviour is correct if called as a function,
1056         but incorrect when called as a constructor.
1057
1058         * runtime/RegExpConstructor.cpp:
1059         (JSC::constructRegExp):
1060         (JSC::constructWithRegExpConstructor):
1061         * runtime/RegExpConstructor.h:
1062
1063 2011-06-28  Luke Macpherson   <macpherson@chromium.org>
1064
1065         Reviewed by Darin Adler.
1066
1067         Clean up integer clamping functions in MathExtras.h and support arbitrary numeric types and limits.
1068         https://bugs.webkit.org/show_bug.cgi?id=63469
1069
1070         * wtf/MathExtras.h:
1071         (defaultMinimumForClamp):
1072         Version of std::numeric_limits::min() that returns the largest negative value for floating point types.
1073         (defaultMaximumForClamp):
1074         Symmetric alias for std::numeric_limits::max()
1075         (clampTo):
1076         New templated clamping function that supports arbitrary output types.
1077         (clampToInteger):
1078         Use new clampTo template.
1079         (clampToFloat):
1080         Use new clampTo template.
1081         (clampToPositiveInteger):
1082         Use new clampTo template.
1083
1084 2011-06-28  Adam Roben  <aroben@apple.com>
1085
1086         Windows Debug build fix after r89885
1087
1088         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Exported
1089         JSGlobalData::releaseExecutableMemory for jsc.exe's benefit.
1090
1091 2011-06-28  Shinya Kawanaka  <shinyak@google.com>
1092
1093         Reviewed by Kent Tamura.
1094
1095         Add const to show() method in WTFString and AtomicString.
1096         https://bugs.webkit.org/show_bug.cgi?id=63515
1097
1098         The lack of const in show() method is painful when
1099         doing something like printf-debug.
1100
1101         * wtf/text/AtomicString.cpp:
1102         (WTF::AtomicString::show):
1103         * wtf/text/AtomicString.h:
1104         * wtf/text/WTFString.cpp:
1105         (String::show):
1106         * wtf/text/WTFString.h:
1107
1108 2011-06-27  Ryosuke Niwa  <rniwa@webkit.org>
1109
1110         Build fix attempt after r89885.
1111
1112         * JavaScriptCore.exp:
1113         * jsc.cpp:
1114
1115 2011-06-27  Oliver Hunt  <oliver@apple.com>
1116
1117         Reviewed by Geoffrey Garen.
1118
1119         Support throwing away non-running code even while other code is running
1120         https://bugs.webkit.org/show_bug.cgi?id=63485
1121
1122         Add a function to CodeBlock to support unlinking direct linked callsites,
1123         and then with that in place add logic to discard code from any function
1124         that is not currently on the stack.
1125
1126         The unlinking completely reverts any optimized call sites, such that they
1127         may be relinked again in future.
1128
1129         * JavaScriptCore.exp:
1130         * bytecode/CodeBlock.cpp:
1131         (JSC::CodeBlock::unlinkCalls):
1132         (JSC::CodeBlock::clearEvalCache):
1133         * bytecode/CodeBlock.h:
1134         (JSC::CallLinkInfo::CallLinkInfo):
1135         (JSC::CallLinkInfo::unlink):
1136         * bytecode/EvalCodeCache.h:
1137         (JSC::EvalCodeCache::clear):
1138         * heap/Heap.cpp:
1139         (JSC::Heap::getConservativeRegisterRoots):
1140         * heap/Heap.h:
1141         * jit/JIT.cpp:
1142         (JSC::JIT::privateCompile):
1143         * jit/JIT.h:
1144         * jit/JITCall.cpp:
1145         (JSC::JIT::compileOpCall):
1146         * jit/JITWriteBarrier.h:
1147         (JSC::JITWriteBarrierBase::clear):
1148         * jsc.cpp:
1149         (GlobalObject::GlobalObject):
1150         (functionReleaseExecutableMemory):
1151         * runtime/Executable.cpp:
1152         (JSC::EvalExecutable::unlinkCalls):
1153         (JSC::ProgramExecutable::unlinkCalls):
1154         (JSC::FunctionExecutable::discardCode):
1155         (JSC::FunctionExecutable::unlinkCalls):
1156         * runtime/Executable.h:
1157         * runtime/JSGlobalData.cpp:
1158         (JSC::SafeRecompiler::returnValue):
1159         (JSC::SafeRecompiler::operator()):
1160         (JSC::JSGlobalData::releaseExecutableMemory):
1161
1162 2011-06-27  Gavin Barraclough  <barraclough@apple.com>
1163
1164         Reviewed by Darin Adler & Oliver Hunt.
1165
1166         https://bugs.webkit.org/show_bug.cgi?id=50554
1167         RegExp.prototype.toString does not escape slashes
1168
1169         The problem here is that we don't escape forwards slashes when converting
1170         a RegExp to a string. This means that RegExp("/").toString() is "///",
1171         which is not a valid RegExp literal. Also, we return an invalid literal
1172         for RegExp.prototype.toString() ("//", which is an empty single-line comment).
1173
1174         From ES5:
1175         "NOTE: The returned String has the form of a RegularExpressionLiteral that
1176         evaluates to another RegExp object with the same behaviour as this object."
1177
1178         * runtime/RegExpObject.cpp:
1179         (JSC::regExpObjectSource):
1180             - Escape forward slashes when getting the source of a RegExp.
1181         * runtime/RegExpPrototype.cpp:
1182         (JSC::regExpProtoFuncToString):
1183             - Remove unnecessary and erroneous hack to return "//" as the string
1184             representation of RegExp.prototype. This is not a valid RegExp literal
1185             (it is an empty single-line comment).
1186
1187 2011-06-27  Gavin Barraclough  <barraclough@apple.com>
1188
1189         Reviewed by Oliver Hunt.
1190
1191         https://bugs.webkit.org/show_bug.cgi?id=63497
1192         Add DEBUG_WITH_BREAKPOINT support to the DFG JIT.
1193
1194         * dfg/DFGByteCodeParser.cpp:
1195         (JSC::DFG::ByteCodeParser::parseBlock):
1196         * dfg/DFGNode.h:
1197         * dfg/DFGNonSpeculativeJIT.cpp:
1198         (JSC::DFG::NonSpeculativeJIT::compile):
1199         * dfg/DFGSpeculativeJIT.cpp:
1200         (JSC::DFG::SpeculativeJIT::compile):
1201
1202 2011-06-27  Juan C. Montemayor  <jmont@apple.com>
1203
1204         Reviewed by Mark Rowe.
1205
1206         Indirectly including TextPosition.h and XPathGrammar.h causes compile errors
1207         https://bugs.webkit.org/show_bug.cgi?id=63392
1208         
1209         When both TextPosition.h and XPathGrammar.h are included a compile-error
1210         is caused, since XPathGrammar.h defines a macro called NUMBER and 
1211         TextPosition has a typedef named NUMBER.
1212
1213         * wtf/text/TextPosition.h:
1214         (WTF::TextPosition::TextPosition):
1215         (WTF::TextPosition::minimumPosition):
1216         (WTF::TextPosition::belowRangePosition):
1217
1218 2011-06-27  Filip Pizlo  <fpizlo@apple.com>
1219
1220         Reviewed by Gavin Barraclough.
1221
1222         DFG JIT does not perform put_by_id caching.
1223         https://bugs.webkit.org/show_bug.cgi?id=63409
1224
1225         * bytecode/StructureStubInfo.h:
1226         * dfg/DFGJITCodeGenerator.cpp:
1227         (JSC::DFG::JITCodeGenerator::cachedPutById):
1228         * dfg/DFGJITCodeGenerator.h:
1229         * dfg/DFGJITCompiler.cpp:
1230         (JSC::DFG::JITCompiler::compileFunction):
1231         * dfg/DFGJITCompiler.h:
1232         (JSC::DFG::JITCompiler::addPropertyAccess):
1233         (JSC::DFG::JITCompiler::PropertyAccessRecord::PropertyAccessRecord):
1234         * dfg/DFGNonSpeculativeJIT.cpp:
1235         (JSC::DFG::NonSpeculativeJIT::compile):
1236         * dfg/DFGOperations.cpp:
1237         * dfg/DFGOperations.h:
1238         * dfg/DFGRepatch.cpp:
1239         (JSC::DFG::dfgRepatchByIdSelfAccess):
1240         (JSC::DFG::tryCacheGetByID):
1241         (JSC::DFG::appropriatePutByIdFunction):
1242         (JSC::DFG::tryCachePutByID):
1243         (JSC::DFG::dfgRepatchPutByID):
1244         * dfg/DFGRepatch.h:
1245         * dfg/DFGSpeculativeJIT.cpp:
1246         (JSC::DFG::SpeculativeJIT::compile):
1247
1248 2011-06-27  Gustavo Noronha Silva  <gns@gnome.org>
1249
1250         Unreviewed build fix. One more filed missing during distcheck, for
1251         the MIPS build.
1252
1253         * GNUmakefile.list.am:
1254
1255 2011-06-26  Filip Pizlo  <fpizlo@apple.com>
1256
1257         Reviewed by Gavin Barraclough.
1258
1259         DFG non-speculative JIT has potentially harmful speculations with respect to arithmetic operations.
1260         https://bugs.webkit.org/show_bug.cgi?id=63347
1261
1262         * dfg/DFGNonSpeculativeJIT.cpp:
1263             - Changed arithmetic operations to speculate in favor of integers.
1264         (JSC::DFG::NonSpeculativeJIT::valueToNumber):
1265         (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp):
1266         (JSC::DFG::NonSpeculativeJIT::basicArithOp):
1267         (JSC::DFG::NonSpeculativeJIT::compile):
1268         * dfg/DFGNonSpeculativeJIT.h:
1269         * dfg/DFGOperations.cpp:
1270             - Added slow-path routines for arithmetic that perform no speculation; the
1271               non-speculative JIT will generate calls to these in cases where its
1272               speculation fails.
1273         * dfg/DFGOperations.h:
1274
1275 2011-06-24  Nikolas Zimmermann  <nzimmermann@rim.com>
1276
1277         Reviewed by Rob Buis.
1278
1279         Integrate SVG Fonts within GlyphPage concept, removing the special SVG code paths from Font, making it possible to reuse the simple text code path for SVG Fonts
1280         https://bugs.webkit.org/show_bug.cgi?id=59085
1281
1282         * wtf/Platform.h: Force Qt-EWS into a full rebuild, otherwhise this patch breaks the EWS.
1283
1284 2011-06-24  Michael Saboff  <msaboff@apple.com>
1285
1286         Reviewed by Gavin Barraclough.
1287
1288         Arm Assembler, Immediate stack offset values truncated to 8 bits for add & sub
1289         https://bugs.webkit.org/show_bug.cgi?id=63345
1290
1291         The methods ARMThumbImmediate::getUInt9 and ARMThumbImmediate::getUInt10
1292         return 9 and 10 bit quantities, therefore changed their return type from
1293         uint8_t to uint16_t.  Also casted the places where they are used as they
1294         are currently shifted and used as 7 or 8 bit values.
1295
1296         These methods are currently used for literals for stack offsets, 
1297         including creating and destroying stack frames.  The prior truncation of
1298         the upper bits caused stack frames to be too small, thus allowing a
1299         JIT'ed function to access and overwrite stack space outside of the
1300         incorrectly sized stack frame.
1301
1302         * assembler/ARMv7Assembler.h:
1303         (JSC::ARMThumbImmediate::getUInt9):
1304         (JSC::ARMThumbImmediate::getUInt10):
1305         (JSC::ARMv7Assembler::add):
1306         (JSC::ARMv7Assembler::ldr):
1307         (JSC::ARMv7Assembler::str):
1308         (JSC::ARMv7Assembler::sub):
1309         (JSC::ARMv7Assembler::sub_S):
1310
1311 2011-06-24  Michael Saboff  <msaboff@apple.com>
1312
1313         Reviewed by Geoffrey Garen.
1314
1315         releaseFastMallocFreeMemory doesn't adjust free counts for scavenger
1316         https://bugs.webkit.org/show_bug.cgi?id=63015
1317
1318         Added code to adjust class TCMalloc_PageHeap variables free_committed_pages_ and
1319         min_free_committed_pages_since_last_scavenge_ in ReleaseFreeList().  These 
1320         adjustments are a bug.  These need to reflect the pages that are released
1321         in ReleaseFreeLsit so that scavenge doesn't try to free that many pages as well.
1322         Made ReleaseFreeList a member of TCMalloc_PageHeap in the process.  Updated
1323         Check() and helper method CheckList() to check the number of actual free pages
1324         with free_committed_pages_.
1325
1326         The symptom of the problem of the existing code is that the scavenger may
1327         run unneccesarily without any real work to do, i.e. pages on the free lists.
1328         The scanvenger would also end up freeing too many pages, that is going below 
1329         the current 528 target free pages.
1330
1331         Note that the style of the changes was kept consistent with the
1332         existing style.
1333
1334         * wtf/FastMalloc.cpp:
1335         (WTF::TCMalloc_PageHeap::Check):
1336         (WTF::TCMalloc_PageHeap::CheckList):
1337         (WTF::TCMalloc_PageHeap::ReleaseFreeList):
1338
1339 2011-06-24  Abhishek Arya  <inferno@chromium.org>
1340
1341         Reviewed by Darin Adler.
1342
1343         Match other clampTo* functions in style with clampToInteger(float)
1344         function.
1345         https://bugs.webkit.org/show_bug.cgi?id=53449
1346
1347         * wtf/MathExtras.h:
1348         (clampToInteger):
1349         (clampToFloat):
1350         (clampToPositiveInteger):
1351
1352 2011-06-24  Sheriff Bot  <webkit.review.bot@gmail.com>
1353
1354         Unreviewed, rolling out r89594.
1355         http://trac.webkit.org/changeset/89594
1356         https://bugs.webkit.org/show_bug.cgi?id=63316
1357
1358         It broke 5 tests on the Qt bot (Requested by Ossy_DC on
1359         #webkit).
1360
1361         * GNUmakefile.list.am:
1362         * JavaScriptCore.gypi:
1363         * icu/unicode/uscript.h: Removed.
1364         * wtf/unicode/ScriptCodesFromICU.h: Removed.
1365         * wtf/unicode/brew/UnicodeBrew.h:
1366         * wtf/unicode/glib/UnicodeGLib.h:
1367         * wtf/unicode/icu/UnicodeIcu.h:
1368         * wtf/unicode/qt4/UnicodeQt4.h:
1369         * wtf/unicode/wince/UnicodeWinCE.h:
1370
1371 2011-06-23  Filip Pizlo  <fpizlo@apple.com>
1372
1373         Reviewed by Gavin Barraclough.
1374
1375         DFG non-speculative JIT should have obvious optimizations for GetById and GetByVal
1376         https://bugs.webkit.org/show_bug.cgi?id=63173
1377
1378         * dfg/DFGJITCodeGenerator.cpp:
1379         (JSC::DFG::JITCodeGenerator::cachedGetById):
1380         * dfg/DFGJITCodeGenerator.h:
1381         * dfg/DFGNonSpeculativeJIT.cpp:
1382         (JSC::DFG::NonSpeculativeJIT::compile):
1383         * dfg/DFGSpeculativeJIT.cpp:
1384         (JSC::DFG::SpeculativeJIT::compile):
1385
1386 2011-06-23  Oliver Hunt  <oliver@apple.com>
1387
1388         Fix Qt again.
1389
1390         * assembler/ARMAssembler.h:
1391         (JSC::ARMAssembler::readPointer):
1392
1393 2011-06-23  Oliver Hunt  <oliver@apple.com>
1394
1395         Fix Qt Build
1396
1397         * assembler/ARMAssembler.h:
1398         (JSC::ARMAssembler::readPointer):
1399
1400 2011-06-23  Stephanie Lewis  <slewis@apple.com>
1401
1402         Reviewed by Darin Adler.
1403
1404         https://bugs.webkit.org/show_bug.cgi?id=63298
1405         Replace Malloc with FastMalloc to match the rest of wtf.
1406
1407         * wtf/BlockStack.h:
1408         (WTF::::~BlockStack):
1409         (WTF::::grow):
1410         (WTF::::shrink):
1411
1412 2011-06-23  Oliver Hunt  <oliver@apple.com>
1413
1414         Reviewed by Gavin Barraclough.
1415
1416         Add the ability to dynamically modify linked call sites
1417         https://bugs.webkit.org/show_bug.cgi?id=63291
1418
1419         Add JITWriteBarrier as a writebarrier class that allows
1420         reading and writing directly into the code stream.
1421
1422         This required adding logic to all the assemblers to allow
1423         us to read values back out of the instruction stream.
1424
1425         * JavaScriptCore.xcodeproj/project.pbxproj:
1426         * assembler/ARMAssembler.h:
1427         (JSC::ARMAssembler::readPointer):
1428         * assembler/ARMv7Assembler.h:
1429         (JSC::ARMv7Assembler::readPointer):
1430         (JSC::ARMv7Assembler::readInt32):
1431         (JSC::ARMv7Assembler::decodeTwoWordOp5i6Imm4Reg4EncodedImmFirst):
1432         (JSC::ARMv7Assembler::decodeTwoWordOp5i6Imm4Reg4EncodedImmSecond):
1433         * assembler/AbstractMacroAssembler.h:
1434         (JSC::AbstractMacroAssembler::readPointer):
1435         * assembler/MIPSAssembler.h:
1436         (JSC::MIPSAssembler::readInt32):
1437         (JSC::MIPSAssembler::readPointer):
1438         * assembler/MacroAssemblerCodeRef.h:
1439         (JSC::MacroAssemblerCodePtr::operator!):
1440         * assembler/SH4Assembler.h:
1441         (JSC::SH4Assembler::readPCrelativeAddress):
1442         (JSC::SH4Assembler::readPointer):
1443         (JSC::SH4Assembler::readInt32):
1444         * assembler/X86Assembler.h:
1445         (JSC::X86Assembler::readPointer):
1446         * bytecode/CodeBlock.cpp:
1447         (JSC::CodeBlock::visitAggregate):
1448         * bytecode/CodeBlock.h:
1449         (JSC::MethodCallLinkInfo::seenOnce):
1450         (JSC::MethodCallLinkInfo::setSeen):
1451         * heap/MarkStack.h:
1452         * jit/JIT.cpp:
1453         (JSC::JIT::privateCompile):
1454         (JSC::JIT::linkCall):
1455         (JSC::JIT::linkConstruct):
1456         * jit/JITPropertyAccess.cpp:
1457         (JSC::JIT::patchMethodCallProto):
1458         * jit/JITPropertyAccess32_64.cpp:
1459         * jit/JITWriteBarrier.h: Added.
1460         (JSC::JITWriteBarrierBase::operator UnspecifiedBoolType*):
1461         (JSC::JITWriteBarrierBase::operator!):
1462         (JSC::JITWriteBarrierBase::setFlagOnBarrier):
1463         (JSC::JITWriteBarrierBase::isFlagged):
1464         (JSC::JITWriteBarrierBase::setLocation):
1465         (JSC::JITWriteBarrierBase::location):
1466         (JSC::JITWriteBarrierBase::JITWriteBarrierBase):
1467         (JSC::JITWriteBarrierBase::set):
1468         (JSC::JITWriteBarrierBase::get):
1469         (JSC::JITWriteBarrier::JITWriteBarrier):
1470         (JSC::JITWriteBarrier::set):
1471         (JSC::JITWriteBarrier::get):
1472         (JSC::MarkStack::append):
1473
1474 2011-06-23  Gavin Barraclough  <barraclough@apple.com>
1475
1476         Reviewed by Oliver Hunt.
1477
1478         https://bugs.webkit.org/show_bug.cgi?id=61585
1479         Crash running regexp /(?:(?=g))|(?:m).{2147483648,}/
1480
1481         This is due to use of int instead of unsigned, bad math around
1482         the 2^31 boundary.
1483
1484         * yarr/YarrInterpreter.cpp:
1485         (JSC::Yarr::ByteCompiler::emitDisjunction):
1486             - Change some uses of int to unsigned, refactor compare logic to
1487               restrict to the range 0..2^32-1 (rather than -2^32-1..2^32-1).
1488         * yarr/YarrJIT.cpp:
1489         (JSC::Yarr::YarrGenerator::generate):
1490         (JSC::Yarr::YarrGenerator::backtrack):
1491             - Ditto.
1492
1493 2011-06-22  Gavin Barraclough  <barraclough@apple.com>
1494
1495         Reviewed by Sam Weinig.
1496
1497         https://bugs.webkit.org/show_bug.cgi?id=63218
1498         DFG JIT - remove machine type guarantees from graph
1499
1500         The DFG JIT currently makes assumptions about the types of machine registers
1501         that certain nodes will be loaded into. This will be broken as we generate
1502         nodes to produce both integer and double code paths. Remove int<->double
1503         conversions nodes. This design decision also gave rise to multiple types of
1504         constant nodes, requiring separate handling for each type. Merge these back
1505         into JSConstant.
1506
1507         * dfg/DFGAliasTracker.h:
1508         (JSC::DFG::AliasTracker::equalIgnoringLaterNumericConversion):
1509         * dfg/DFGByteCodeParser.cpp:
1510         (JSC::DFG::ByteCodeParser::getToInt32):
1511         (JSC::DFG::ByteCodeParser::getToNumber):
1512         (JSC::DFG::ByteCodeParser::toInt32):
1513         (JSC::DFG::ByteCodeParser::toNumber):
1514         (JSC::DFG::ByteCodeParser::isInt32Constant):
1515         (JSC::DFG::ByteCodeParser::isDoubleConstant):
1516         (JSC::DFG::ByteCodeParser::valueOfInt32Constant):
1517         (JSC::DFG::ByteCodeParser::valueOfDoubleConstant):
1518         (JSC::DFG::ByteCodeParser::one):
1519         (JSC::DFG::ByteCodeParser::predictInt32):
1520         * dfg/DFGGraph.cpp:
1521         (JSC::DFG::Graph::dump):
1522         * dfg/DFGJITCodeGenerator.h:
1523         (JSC::DFG::JITCodeGenerator::silentFillGPR):
1524         (JSC::DFG::JITCodeGenerator::silentFillFPR):
1525         (JSC::DFG::JITCodeGenerator::isJSConstant):
1526         (JSC::DFG::JITCodeGenerator::isDoubleConstant):
1527         (JSC::DFG::JITCodeGenerator::valueOfJSConstantAsImmPtr):
1528         * dfg/DFGJITCompiler.cpp:
1529         (JSC::DFG::JITCompiler::fillNumericToDouble):
1530         (JSC::DFG::JITCompiler::fillInt32ToInteger):
1531         * dfg/DFGJITCompiler.h:
1532         (JSC::DFG::JITCompiler::isJSConstant):
1533         (JSC::DFG::JITCompiler::isInt32Constant):
1534         (JSC::DFG::JITCompiler::isDoubleConstant):
1535         (JSC::DFG::JITCompiler::valueOfJSConstant):
1536         (JSC::DFG::JITCompiler::valueOfInt32Constant):
1537         (JSC::DFG::JITCompiler::valueOfDoubleConstant):
1538         * dfg/DFGNode.h:
1539         (JSC::DFG::Node::Node):
1540         (JSC::DFG::Node::isConstant):
1541         (JSC::DFG::Node::notTakenBytecodeOffset):
1542         * dfg/DFGNonSpeculativeJIT.cpp:
1543         (JSC::DFG::NonSpeculativeJIT::isKnownInteger):
1544         (JSC::DFG::NonSpeculativeJIT::isKnownNumeric):
1545         (JSC::DFG::NonSpeculativeJIT::compile):
1546         * dfg/DFGSpeculativeJIT.cpp:
1547         (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
1548         (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
1549         (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
1550         (JSC::DFG::SpeculativeJIT::compile):
1551
1552 2011-06-23  Jungshik Shin  <jshin@chromium.org>
1553
1554         Reviewed by Alexey Proskuryakov.
1555
1556         Add ScriptCodesFromICU.h to wtf/unicode and make necessary changes in
1557         build files for ports not using ICU.
1558         Add icu/unicode/uscript.h for ports using ICU. It's taken from 
1559         ICU 3.6 (the version used on Mac OS 10.5)
1560
1561         http://bugs.webkit.org/show_bug.cgi?id=20797
1562
1563         * GNUmakefile.list.am:
1564         * JavaScriptCore.gypi:
1565         * icu/unicode/uscript.h: Added for UScriptCode enum.
1566         * wtf/unicode/ScriptCodesFromICU.h: UScriptCode enum added.
1567         * wtf/unicode/icu/UnicodeIcu.h:
1568         * wtf/unicode/brew/UnicodeBrew.h:
1569         * wtf/unicode/glib/UnicodeGLib.h:
1570         * wtf/unicode/qt4/UnicodeQt4.h:
1571         * wtf/unicode/wince/UnicodeWinCE.h:
1572
1573 2011-06-23  Ryuan Choi  <ryuan.choi@samsung.com>
1574
1575         Reviewed by Andreas Kling.
1576
1577         [EFL][WK2] Add PLATFORM(EFL) to use UNIX_DOMAIN_SOCKETS.
1578         https://bugs.webkit.org/show_bug.cgi?id=63228
1579
1580         * wtf/Platform.h: Add PLATFORM(EFL) guard.
1581
1582 2011-06-23  Sheriff Bot  <webkit.review.bot@gmail.com>
1583
1584         Unreviewed, rolling out r89547.
1585         http://trac.webkit.org/changeset/89547
1586         https://bugs.webkit.org/show_bug.cgi?id=63252
1587
1588         "Chrmium crash on start" (Requested by yurys on #webkit).
1589
1590         * wtf/DynamicAnnotations.cpp:
1591         (WTFAnnotateBenignRaceSized):
1592         (WTFAnnotateHappensBefore):
1593         (WTFAnnotateHappensAfter):
1594         * wtf/DynamicAnnotations.h:
1595
1596 2011-06-23  Timur Iskhodzhanov  <timurrrr@google.com>
1597
1598         Reviewed by David Levin.
1599
1600         Make dynamic annotations weak symbols and prevent identical code folding by the linker
1601         https://bugs.webkit.org/show_bug.cgi?id=62443
1602
1603         * wtf/DynamicAnnotations.cpp:
1604         (WTFAnnotateBenignRaceSized):
1605         (WTFAnnotateHappensBefore):
1606         (WTFAnnotateHappensAfter):
1607         * wtf/DynamicAnnotations.h:
1608
1609 2011-06-22  Yael Aharon  <yael.aharon@nokia.com>
1610
1611         Reviewed by Andreas Kling.
1612
1613         [Qt] Add a build flag for building with libxml2 and libxslt.
1614         https://bugs.webkit.org/show_bug.cgi?id=63113
1615
1616         * wtf/Platform.h:
1617
1618 2011-06-22  Sheriff Bot  <webkit.review.bot@gmail.com>
1619
1620         Unreviewed, rolling out r89489.
1621         http://trac.webkit.org/changeset/89489
1622         https://bugs.webkit.org/show_bug.cgi?id=63203
1623
1624         Broke chromium mac build on build.webkit.org (Requested by
1625         abarth on #webkit).
1626
1627         * wtf/Platform.h:
1628
1629 2011-06-22  Cary Clark  <caryclark@google.com>
1630
1631         Reviewed by Darin Fisher.
1632
1633         Use Skia if Skia on Mac Chrome is enabled
1634         https://bugs.webkit.org/show_bug.cgi?id=62999
1635
1636         * wtf/Platform.h:
1637         Add switch to use Skia if, externally,
1638         Skia has been enabled by a gyp define.
1639
1640 2011-06-22  Geoffrey Garen  <ggaren@apple.com>
1641
1642         Reviewed by Oliver Hunt.
1643
1644         * interpreter/RegisterFile.h: Removed unnecessary #include <stdio.h>.
1645
1646 2011-06-22  Geoffrey Garen  <ggaren@apple.com>
1647
1648         Reviewed by Oliver Hunt.
1649
1650         Removed the conceit that global variables are local variables when running global code
1651         https://bugs.webkit.org/show_bug.cgi?id=63106
1652         
1653         This is required for write barrier correctness.
1654         
1655         SunSpider reports about a 0.5% regression, mostly from bitops-bitwise-and.js.
1656         I was able to reduce the regression with a tiny peephole optimization in
1657         the bytecompiler, but not eliminate it. I'm committing this assuming
1658         that turning on generational GC will win back at least 0.5%.
1659
1660         (FWIW, the DFG JIT can easily eliminate any regression by sharing loads of
1661         the global object's var storage. I considered doing the same kind of
1662         optimization in the existing JIT, but it seemed like moving in the wrong
1663         direction.)
1664
1665         * bytecompiler/BytecodeGenerator.cpp:
1666         (JSC::BytecodeGenerator::addGlobalVar):
1667         (JSC::BytecodeGenerator::BytecodeGenerator): Don't give global variables
1668         negative indices, since they're no longer negatively offset from the
1669         current stack frame.
1670         
1671         Do give global variables monotonically increasing positive indices, since
1672         that's much easier to work with.
1673         
1674         Don't limit the number of optimizable global variables, since it's no
1675         longer limited by the register file, since they're no longer stored in
1676         the register file.
1677
1678         (JSC::BytecodeGenerator::registerFor): Global code never has any local
1679         registers because a var in global code is actually a property of the
1680         global object.
1681
1682         (JSC::BytecodeGenerator::constRegisterFor): Ditto.
1683
1684         (JSC::BytecodeGenerator::emitResolve): Did a tiny bit of constant
1685         propagation and dead code elimination to speed up our compiles and
1686         reduce WTFs / minute.
1687
1688         * bytecompiler/BytecodeGenerator.h:
1689         (JSC::BytecodeGenerator::registerFor): Removed special handling of globals.
1690
1691         (JSC::BytecodeGenerator::shouldOptimizeLocals): Don't optimize locals in
1692         global code, since there are none.
1693
1694         (JSC::BytecodeGenerator::canOptimizeNonLocals): Do optimize non-locals
1695         in global code (i.e., global vars), since there are some.
1696
1697         * interpreter/Interpreter.cpp:
1698         (JSC::Interpreter::callEval):
1699         (JSC::Interpreter::Interpreter):
1700         (JSC::Interpreter::dumpRegisters):
1701         (JSC::Interpreter::execute):
1702         * interpreter/Interpreter.h: Updated for deleted / renamed code.
1703
1704         * interpreter/RegisterFile.cpp:
1705         (JSC::RegisterFile::gatherConservativeRoots):
1706         (JSC::RegisterFile::releaseExcessCapacity): Updated for deleted / renamed
1707         data members.
1708
1709         * interpreter/RegisterFile.h:
1710         (JSC::RegisterFile::begin):
1711         (JSC::RegisterFile::size):
1712         (JSC::RegisterFile::RegisterFile):
1713         (JSC::RegisterFile::shrink): Removed all code and comments dealing with
1714         global variables stored in the register file.
1715
1716         (JSC::RegisterFile::grow): Updated for same.
1717         
1718         Also, a slight correctness fix: Test the VM commit end, and not just the
1719         in-use end, when checking for stack overflow. In theory, it's invalid to
1720         commit past the end of your allocation, even if you never touch that
1721         memory. This makes the usable size of the stack slightly smaller. No test
1722         because we don't know of any case in practice where this crashes.
1723
1724         * runtime/JSGlobalData.cpp:
1725         (JSC::JSGlobalData::JSGlobalData): Updated for changes above.
1726
1727         * runtime/JSGlobalObject.cpp:
1728         (JSC::JSGlobalObject::resizeRegisters):
1729         (JSC::JSGlobalObject::addStaticGlobals):
1730         * runtime/JSGlobalObject.h: Simplified globals to have monotonically 
1731         increasing indexes, always located in our external storage.
1732
1733 2011-06-21  MORITA Hajime  <morrita@google.com>
1734
1735         Unreviewed, rolling out r89401 and r89403.
1736         http://trac.webkit.org/changeset/89401
1737         http://trac.webkit.org/changeset/89403
1738         https://bugs.webkit.org/show_bug.cgi?id=62970
1739
1740         Breaks mac build and mistakenly enables the spellcheck API
1741
1742         * Configurations/FeatureDefines.xcconfig:
1743         * JavaScriptCore.xcodeproj/project.pbxproj:
1744
1745 2011-06-21  Kent Tamura  <tkent@chromium.org>
1746
1747         [Mac] Sort Xcode project files.
1748
1749         * JavaScriptCore.xcodeproj/project.pbxproj:
1750
1751 2011-06-20  MORITA Hajime  <morrita@google.com>
1752
1753         Reviewed by Kent Tamura.
1754
1755         Spellcheck API should be build-able.
1756         https://bugs.webkit.org/show_bug.cgi?id=62970
1757
1758         No new tests, changing only build related files
1759         
1760         * Configurations/FeatureDefines.xcconfig:
1761
1762 2011-06-21  Geoffrey Garen  <ggaren@apple.com>
1763
1764         Reviewed by Oliver Hunt.
1765
1766         Moved 'const' off the global-variable-as-local-variable crack pipe
1767         https://bugs.webkit.org/show_bug.cgi?id=63105
1768         
1769         This is necessary for moving the rest of the code off of same.
1770         
1771         Many problems remain in our handling of const. I have fixed none of them.
1772
1773         * bytecompiler/BytecodeGenerator.h:
1774         (JSC::BytecodeGenerator::scopeChain): New accessor, needed to enable
1775         const to directly implement its unique scoping rules.
1776
1777         * bytecompiler/NodesCodegen.cpp:
1778         (JSC::PrefixResolveNode::emitBytecode): Do specify that our resolve is
1779         for writing, so we don't overwrite const variables.
1780
1781         (JSC::ConstDeclNode::emitCodeSingle): Don't assume that all declared const
1782         variables are available as local variables, since this won't be the case
1783         once global variables are not available as local variables. Instead, use
1784         put_scoped_var in the case where there is no local variable. Like a local
1785         variable, put_scoped_var succeeds even though const properties are
1786         read-only, since put_scoped_var skips read-only checks. (Yay?)
1787
1788 2011-06-21  Oliver Hunt  <oliver@apple.com>
1789
1790         Reviewed by Alexey Proskuryakov.
1791
1792         REGRESSION(r89257): It broke 2 jscore tests (Requested by Ossy_away on #webkit).
1793         https://bugs.webkit.org/show_bug.cgi?id=63052
1794
1795         Release mode only failure, the stack overflow guards were getting there error
1796         handling inlined, so that they were essentially causing their own demise.
1797
1798         * parser/JSParser.cpp:
1799         (JSC::JSParser::updateErrorMessage):
1800         (JSC::JSParser::updateErrorWithNameAndMessage):
1801
1802 2011-06-20  Kenneth Russell  <kbr@google.com>
1803
1804         Unreviewed.
1805
1806         Rolled out r89233 and r89235 because of crashes in http/tests/misc/acid3.html on Snow Leopard and other platforms
1807         https://bugs.webkit.org/show_bug.cgi?id=63022
1808
1809         * wtf/Platform.h:
1810
1811 2011-06-18  Anders Carlsson  <andersca@apple.com>
1812
1813         Reviewed by Darin Adler.
1814
1815         Disallow assigning into PassOwnArrayPtr, PassOwnPtr and PassRefPtr
1816         https://bugs.webkit.org/show_bug.cgi?id=62940
1817
1818         Remove clear() and all assignment operators except one which now has a COMPILE_ASSERT.
1819
1820         * wtf/PassOwnArrayPtr.h:
1821         (WTF::PassOwnArrayPtr::operator=):
1822         * wtf/PassOwnPtr.h:
1823         (WTF::PassOwnPtr::operator=):
1824         * wtf/PassRefPtr.h:
1825         (WTF::PassRefPtr::operator=):
1826         (WTF::NonNullPassRefPtr::operator=):
1827
1828 2011-06-20  Oliver Hunt  <oliver@apple.com>
1829
1830         Reviewed by Darin Adler.
1831
1832         REGRESSION (r79060): Searching for a flight at united.com fails
1833         https://bugs.webkit.org/show_bug.cgi?id=63003
1834
1835         This original change also broke Twitter, and we attempted to refine the fix to 
1836         address that problem (http://trac.webkit.org/changeset/80542), but since it still breaks United,
1837         we need to revert the change until we understand the problem better.
1838
1839         * wtf/DateMath.cpp:
1840         (WTF::parseDateFromNullTerminatedCharacters):
1841
1842 2011-06-20  Juan C. Montemayor  <jmont@apple.com>
1843
1844         Reviewed by Oliver Hunt.
1845
1846         No context for javascript parse errors.
1847         https://bugs.webkit.org/show_bug.cgi?id=62613
1848         
1849         Parse errors now show more details like:
1850         "Unexpected token: ]"
1851         or
1852         "Expected token: while"
1853         
1854         For reserved names, numbers, indentifiers, strings, lexer errors, 
1855         and EOFs, the following error messages are printed:
1856         
1857         "Use of reserved word: super"
1858         "Unexpected number: 42"
1859         "Unexpected identifier: "
1860         "Unexpected string: "foobar""
1861         "Invalid token character sequence: \u4023"
1862         "Unexpected EOF"
1863
1864         * parser/JSParser.cpp:
1865         (JSC::JSParser::consume):
1866         (JSC::JSParser::getToken):
1867         (JSC::JSParser::getTokenName):
1868         (JSC::JSParser::updateErrorMessageSpecialCase):
1869         (JSC::JSParser::updateErrorMessage):
1870         (JSC::JSParser::updateErrorWithNameAndMessage):
1871         (JSC::jsParse):
1872         (JSC::JSParser::JSParser):
1873         (JSC::JSParser::parseProgram):
1874         (JSC::JSParser::parseVarDeclarationList):
1875         (JSC::JSParser::parseForStatement):
1876         (JSC::JSParser::parseBreakStatement):
1877         (JSC::JSParser::parseContinueStatement):
1878         (JSC::JSParser::parseWithStatement):
1879         (JSC::JSParser::parseTryStatement):
1880         (JSC::JSParser::parseStatement):
1881         (JSC::JSParser::parseFormalParameters):
1882         (JSC::JSParser::parseFunctionInfo):
1883         (JSC::JSParser::parseAssignmentExpression):
1884         (JSC::JSParser::parsePrimaryExpression):
1885         (JSC::JSParser::parseMemberExpression):
1886         (JSC::JSParser::parseUnaryExpression):
1887         * parser/JSParser.h:
1888         * parser/Lexer.cpp:
1889         (JSC::Lexer::lex):
1890         * parser/Parser.cpp:
1891         (JSC::Parser::parse):
1892
1893 2011-06-20  Nikolas Zimmermann  <nzimmermann@rim.com>
1894
1895         Reviewed by Rob Buis.
1896
1897         Integrate SVG Fonts within GlyphPage concept, removing the special SVG code paths from Font, making it possible to reuse the simple text code path for SVG Fonts
1898         https://bugs.webkit.org/show_bug.cgi?id=59085
1899
1900         * wtf/Platform.h: Force Qt-EWS into a full rebuild, otherwhise this patch breaks the EWS.
1901
1902 2011-06-19  Oliver Hunt  <oliver@apple.com>
1903
1904         Reviewed by Sam Weinig.
1905
1906         Correct logic for putting errors on the correct line when handling JSONP
1907         https://bugs.webkit.org/show_bug.cgi?id=62962
1908
1909         Minor fix for the minor fix.  *sigh*
1910
1911         * interpreter/Interpreter.cpp:
1912         (JSC::Interpreter::execute):
1913
1914 2011-06-19  Oliver Hunt  <oliver@apple.com>
1915
1916         Minor fix to correct layout test results.
1917
1918         * interpreter/Interpreter.cpp:
1919         (JSC::Interpreter::execute):
1920
1921 2011-06-17  Oliver Hunt  <oliver@apple.com>
1922
1923         Reviewed by Gavin Barraclough.
1924
1925         JSONP is unnecessarily slow
1926         https://bugs.webkit.org/show_bug.cgi?id=62920
1927
1928         JSONP has unfortunately become a fairly common idiom online, yet
1929         it triggers very poor performance in JSC as we end up doing codegen
1930         for a large number of property accesses that will
1931            * only be run once, so the vast amount of logic we dump to handle
1932              caching of accesses is unnecessary.
1933            * We are doing codegen that is directly proportional to just
1934              creating the object in the first place.
1935
1936         This patch extends the use of the literal parser to JSONP-like structures
1937         in global code, handling a number of different forms I have seen online.
1938         In an extreme case this improves performance of JSONP by more than 2x
1939         due to removal of code generation and execution time, and a few optimisations
1940         that I made to the parser itself.
1941
1942         * API/JSValueRef.cpp:
1943         (JSValueMakeFromJSONString):
1944         * interpreter/Interpreter.cpp:
1945         (JSC::Interpreter::callEval):
1946         (JSC::Interpreter::execute):
1947         * parser/Lexer.cpp:
1948         (JSC::Lexer::isKeyword):
1949         * parser/Lexer.h:
1950         * runtime/JSGlobalObjectFunctions.cpp:
1951         (JSC::globalFuncEval):
1952         * runtime/JSONObject.cpp:
1953         (JSC::JSONProtoFuncParse):
1954         * runtime/LiteralParser.cpp:
1955         (JSC::LiteralParser::tryJSONPParse):
1956         (JSC::LiteralParser::makeIdentifier):
1957         (JSC::LiteralParser::Lexer::lex):
1958         (JSC::LiteralParser::Lexer::next):
1959         (JSC::isSafeStringCharacter):
1960         (JSC::LiteralParser::Lexer::lexString):
1961         (JSC::LiteralParser::Lexer::lexNumber):
1962         (JSC::LiteralParser::parse):
1963         * runtime/LiteralParser.h:
1964         (JSC::LiteralParser::LiteralParser):
1965         (JSC::LiteralParser::tryLiteralParse):
1966         (JSC::LiteralParser::Lexer::Lexer):
1967
1968 2011-06-18  Sheriff Bot  <webkit.review.bot@gmail.com>
1969
1970         Unreviewed, rolling out r89184.
1971         http://trac.webkit.org/changeset/89184
1972         https://bugs.webkit.org/show_bug.cgi?id=62927
1973
1974         It broke 22 tests on all bot (Requested by Ossy_weekend on
1975         #webkit).
1976
1977         * API/JSValueRef.cpp:
1978         (JSValueMakeFromJSONString):
1979         * interpreter/Interpreter.cpp:
1980         (JSC::Interpreter::callEval):
1981         (JSC::Interpreter::execute):
1982         * parser/Lexer.cpp:
1983         * parser/Lexer.h:
1984         * runtime/JSGlobalObjectFunctions.cpp:
1985         (JSC::globalFuncEval):
1986         * runtime/JSONObject.cpp:
1987         (JSC::JSONProtoFuncParse):
1988         * runtime/LiteralParser.cpp:
1989         (JSC::LiteralParser::Lexer::lex):
1990         (JSC::isSafeStringCharacter):
1991         (JSC::LiteralParser::Lexer::lexString):
1992         (JSC::LiteralParser::Lexer::lexNumber):
1993         (JSC::LiteralParser::parse):
1994         * runtime/LiteralParser.h:
1995         (JSC::LiteralParser::LiteralParser):
1996         (JSC::LiteralParser::tryLiteralParse):
1997         (JSC::LiteralParser::Lexer::Lexer):
1998         (JSC::LiteralParser::Lexer::next):
1999
2000 2011-06-17  Oliver Hunt  <oliver@apple.com>
2001
2002         Reviewed by Gavin Barraclough.
2003
2004         JSONP is unnecessarily slow
2005         https://bugs.webkit.org/show_bug.cgi?id=62920
2006
2007         JSONP has unfortunately become a fairly common idiom online, yet
2008         it triggers very poor performance in JSC as we end up doing codegen
2009         for a large number of property accesses that will
2010            * only be run once, so the vast amount of logic we dump to handle
2011              caching of accesses is unnecessary.
2012            * We are doing codegen that is directly proportional to just
2013              creating the object in the first place.
2014
2015         This patch extends the use of the literal parser to JSONP-like structures
2016         in global code, handling a number of different forms I have seen online.
2017         In an extreme case this improves performance of JSONP by more than 2x
2018         due to removal of code generation and execution time, and a few optimisations
2019         that I made to the parser itself.
2020
2021         * API/JSValueRef.cpp:
2022         (JSValueMakeFromJSONString):
2023         * interpreter/Interpreter.cpp:
2024         (JSC::Interpreter::callEval):
2025         (JSC::Interpreter::execute):
2026         * parser/Lexer.cpp:
2027         (JSC::Lexer::isKeyword):
2028         * parser/Lexer.h:
2029         * runtime/JSGlobalObjectFunctions.cpp:
2030         (JSC::globalFuncEval):
2031         * runtime/JSONObject.cpp:
2032         (JSC::JSONProtoFuncParse):
2033         * runtime/LiteralParser.cpp:
2034         (JSC::LiteralParser::tryJSONPParse):
2035         (JSC::LiteralParser::makeIdentifier):
2036         (JSC::LiteralParser::Lexer::lex):
2037         (JSC::LiteralParser::Lexer::next):
2038         (JSC::isSafeStringCharacter):
2039         (JSC::LiteralParser::Lexer::lexString):
2040         (JSC::LiteralParser::Lexer::lexNumber):
2041         (JSC::LiteralParser::parse):
2042         * runtime/LiteralParser.h:
2043         (JSC::LiteralParser::LiteralParser):
2044         (JSC::LiteralParser::tryLiteralParse):
2045         (JSC::LiteralParser::Lexer::Lexer):
2046
2047 2011-06-17  Geoffrey Garen  <ggaren@apple.com>
2048
2049         Reviewed by Oliver Hunt.
2050
2051         Moved some property access JIT code into property access JIT files
2052         https://bugs.webkit.org/show_bug.cgi?id=62906
2053
2054         * jit/JITOpcodes.cpp:
2055         * jit/JITOpcodes32_64.cpp:
2056         * jit/JITPropertyAccess.cpp:
2057         (JSC::JIT::emitSlow_op_put_by_val):
2058         (JSC::JIT::emit_op_get_scoped_var):
2059         (JSC::JIT::emit_op_put_scoped_var):
2060         (JSC::JIT::emit_op_get_global_var):
2061         (JSC::JIT::emit_op_put_global_var):
2062         * jit/JITPropertyAccess32_64.cpp:
2063         (JSC::JIT::emit_op_get_scoped_var):
2064         (JSC::JIT::emit_op_put_scoped_var):
2065         (JSC::JIT::emit_op_get_global_var):
2066         (JSC::JIT::emit_op_put_global_var):
2067
2068 2011-06-17  Anders Carlsson  <andersca@apple.com>
2069
2070         Build fix.
2071
2072         * JavaScriptCore.xcodeproj/project.pbxproj:
2073
2074 2011-06-17  Geoffrey Garen  <ggaren@apple.com>
2075
2076         Try to fix the Leopard build?
2077
2078         * JavaScriptCore.xcodeproj/project.pbxproj:
2079
2080 2011-06-16  Geoffrey Garen  <ggaren@apple.com>
2081
2082         Reviewed by Oliver Hunt.
2083
2084         Added some write barrier action, compiled out by default
2085         https://bugs.webkit.org/show_bug.cgi?id=62844
2086
2087         * JavaScriptCore.exp: Build!
2088
2089         * JavaScriptCore.xcodeproj/project.pbxproj: Fixed an incremental build
2090         issue with Heap.cpp.
2091
2092         * heap/Heap.cpp:
2093         (JSC::Heap::writeBarrierSlowCase):
2094         * heap/Heap.h:
2095         (JSC::Heap::writeBarrier):
2096         * heap/MarkedBlock.h:
2097         (JSC::MarkedBlock::isAtomAligned):
2098         (JSC::MarkedBlock::blockFor):
2099         (JSC::MarkedBlock::atomNumber):
2100         (JSC::MarkedBlock::ownerSetNumber):
2101         (JSC::MarkedBlock::addOldSpaceOwner):
2102         (JSC::MarkedBlock::OwnerSet::OwnerSet):
2103         (JSC::MarkedBlock::OwnerSet::add):
2104         (JSC::MarkedBlock::OwnerSet::clear):
2105         (JSC::MarkedBlock::OwnerSet::size):
2106         (JSC::MarkedBlock::OwnerSet::didOverflow):
2107         (JSC::MarkedBlock::OwnerSet::owners): Added a basic write barrier that
2108         tracks owners for regions within blocks. Currently unused.
2109
2110 2011-06-17  Raphael Kubo da Costa  <kubo@profusion.mobi>
2111
2112         Reviewed by Eric Seidel.
2113
2114         [EFL] Add some OwnPtr specializations for EFL types.
2115         For now there are specializations for Ecore_Evas and Evas_Object.
2116         https://bugs.webkit.org/show_bug.cgi?id=62877
2117
2118         * wtf/CMakeListsEfl.txt:
2119         * wtf/OwnPtrCommon.h:
2120         * wtf/efl/OwnPtrEfl.cpp: Added.
2121         (WTF::deleteOwnedPtr):
2122
2123 2011-06-17  Joone Hur  <joone.hur@collabora.co.uk>
2124
2125         Reviewed by Martin Robinson.
2126
2127         [GTK] Replace GdkRectangle by cairo_rectangle_int_t
2128         https://bugs.webkit.org/show_bug.cgi?id=60687
2129
2130         Replace GdkRectangle by cairo_rectangle_int_t.
2131
2132         * wtf/gobject/GTypedefs.h: Replace GdkRectangle by cairo_rectangle_int_t.
2133
2134 2011-06-16  Gavin Barraclough  <barraclough@apple.com>
2135
2136         Reviewed by Oliver Hunt.
2137
2138         https://bugs.webkit.org/show_bug.cgi?id=53014
2139         ES5 strict mode keyword restrictions aren't implemented
2140
2141         The following are future restricted words is strict mode code:
2142             implements, interface, let, package, private, protected, public, static, yield
2143
2144         * parser/JSParser.h:
2145             - Add RESERVED_IF_STRICT token.
2146         * parser/Keywords.table:
2147             - Add new future restricted words.
2148         * parser/Lexer.cpp:
2149         (JSC::Lexer::parseIdentifier):
2150             - Check for RESERVED_IF_STRICT; in nonstrict code this is converted to IDENT.
2151         (JSC::Lexer::lex):
2152             - Pass strictMode flag to parseIdentifier.
2153         * parser/Lexer.h:
2154             - parseIdentifier needs a strictMode flag.
2155         * runtime/CommonIdentifiers.h:
2156             - Add identifiers for new reserved words.
2157
2158 2011-06-16  Gavin Barraclough  <barraclough@apple.com>
2159
2160         Reviewed by Oliver Hunt.
2161
2162         https://bugs.webkit.org/show_bug.cgi?id=23611
2163         Multiline Javascript comments cause incorrect parsing of following script.
2164
2165         From the spec:
2166         "A MultiLineComment [is] simply discarded if it contains no line terminator,
2167         but if a MultiLineComment contains one or more line terminators, then it is
2168         replaced with a single line terminator, which becomes part of the stream of
2169         inputs for the syntactic grammar." 
2170
2171         This may result in behavioural changes, due to automatic semicolon insertion.
2172
2173         * parser/Lexer.cpp:
2174         (JSC::Lexer::parseMultilineComment):
2175             - Set m_terminator is we see a line terminator in a multiline comment.
2176
2177 2011-06-16  Gavin Barraclough  <barraclough@apple.com>
2178
2179         Reviewed by Sam Weinig.
2180
2181         https://bugs.webkit.org/show_bug.cgi?id=62824
2182         DFG JIT - add support for branch-fusion of compareEq, JSValue comparisons in SpeculativeJIT
2183
2184         CompareEq of non-integer values is the most common cause of speculation failure.
2185
2186         * dfg/DFGSpeculativeJIT.cpp:
2187         (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
2188             - Support Equals.
2189         (JSC::DFG::SpeculativeJIT::compilePeepHoleEq):
2190             - new! - peephole optimized Eq of JSValues.
2191         (JSC::DFG::SpeculativeJIT::compile):
2192             - Add peephole optimization for CompareEq.
2193         * dfg/DFGSpeculativeJIT.h:
2194         (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch):
2195             - Add support for dead nodes between compare & branch.
2196         (JSC::DFG::SpeculativeJIT::isInteger):
2197             - Added to determine which form of peephole to do in CompareEq.
2198
2199 2011-06-16  Geoffrey Garen  <ggaren@apple.com>
2200
2201         Try to fix the Windows build.
2202
2203         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export another
2204         symbol.
2205
2206         * bytecode/EvalCodeCache.h:
2207         * heap/HandleHeap.h:
2208         * heap/HeapRootVisitor.h:
2209         * heap/NewSpace.h:
2210         * runtime/ArgList.h:
2211         * runtime/ScopeChain.h:
2212         * runtime/SmallStrings.h:
2213         * runtime/Structure.h: Stop forward-declaring things that don't really
2214         exist anymore.
2215
2216 2011-06-16  Geoffrey Garen  <ggaren@apple.com>
2217
2218         Try to fix the Mac build: Removed and re-added SlotVisitor.h to the Xcode
2219         project while crossing my fingers and facing west.
2220
2221         * JavaScriptCore.xcodeproj/project.pbxproj:
2222
2223 2011-06-16  Geoffrey Garen  <ggaren@apple.com>
2224
2225         Build fix: Removed an incorrect symbol on Windows.
2226
2227         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2228
2229 2011-06-16  Geoffrey Garen  <ggaren@apple.com>
2230
2231         Build fix: Removed an accidental commit from the future.
2232
2233         * CMakeLists.txt:
2234
2235 2011-06-16  Geoffrey Garen  <ggaren@apple.com>
2236
2237         Reviewed by Oliver Hunt.
2238
2239         Introduced SlotVisitor into the project
2240         https://bugs.webkit.org/show_bug.cgi?id=62820
2241         
2242         This resolves a class vs typedef forward declaration issue, and gives all
2243         exported symbols the correct names.
2244
2245         * CMakeLists.txt:
2246         * GNUmakefile.list.am:
2247         * JavaScriptCore.exp:
2248         * JavaScriptCore.gypi:
2249         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2250         * JavaScriptCore.xcodeproj/project.pbxproj: Build!
2251
2252         * bytecode/EvalCodeCache.h:
2253         * heap/HandleHeap.h:
2254         * heap/Heap.cpp:
2255         (JSC::Heap::Heap):
2256         (JSC::Heap::markRoots):
2257         * heap/Heap.h:
2258         * heap/HeapRootVisitor.h: Replaced MarkStack with SlotVisitor. Now no
2259         clients operate on a MarkStack.
2260
2261         * heap/MarkStack.cpp:
2262         (JSC::SlotVisitor::visitChildren):
2263         (JSC::SlotVisitor::drain):
2264         * heap/SlotVisitor.h: Added.
2265         (JSC::SlotVisitor::SlotVisitor): Used 'protected' and a little cheesy
2266         inheritance to give SlotVisitor all the attributes of MarkStack without
2267         making this change giant. Over time, we will move more behavior into
2268         SlotVisitor and its subclasses.
2269
2270         * heap/MarkStack.h:
2271         * heap/NewSpace.h: Replaced MarkStack with SlotVisitor. Now no
2272         clients operate on a MarkStack.
2273
2274         * runtime/ArgList.h:
2275         * runtime/JSCell.h:
2276         * runtime/JSObject.h:
2277         * runtime/ScopeChain.h:
2278         * runtime/SmallStrings.h:
2279         * runtime/Structure.h: Replaced MarkStack with SlotVisitor. Now no
2280         clients operate on a MarkStack.
2281
2282 2011-06-15  Oliver Hunt  <oliver@apple.com>
2283
2284         Reviewed by Geoffrey Garen.
2285
2286         Reduce memory usage of resolve_global
2287         https://bugs.webkit.org/show_bug.cgi?id=62765
2288
2289         If we have a large number of resolve_globals in a single
2290         block start planting plain resolve instructions instead 
2291         whenever we aren't in a loop.  This allows us to reduce
2292         the code size for extremely large functions without
2293         losing the performance benefits of op_resolve_global.
2294
2295         * bytecode/CodeBlock.h:
2296         (JSC::CodeBlock::globalResolveInfoCount):
2297         * bytecompiler/BytecodeGenerator.cpp:
2298         (JSC::BytecodeGenerator::shouldAvoidResolveGlobal):
2299         (JSC::BytecodeGenerator::emitResolve):
2300         (JSC::BytecodeGenerator::emitResolveWithBase):
2301         * bytecompiler/BytecodeGenerator.h:
2302
2303 2011-06-16  Qi Zhang  <qi.2.zhang@nokia.com>
2304
2305         Reviewed by Laszlo Gombos.
2306
2307         [Qt] Fix building with CONFIG(use_system_icu)
2308         https://bugs.webkit.org/show_bug.cgi?id=62744
2309
2310         Do not define WTF_USE_QT4_UNICODE if WTF_USE_ICU_UNICODE is set.
2311
2312         * wtf/Platform.h:
2313
2314 2011-06-15  Darin Adler  <darin@apple.com>
2315
2316         Reviewed by Adam Barth.
2317
2318         Remove obsolete LOOSE_OWN_PTR code
2319         https://bugs.webkit.org/show_bug.cgi?id=59909
2320
2321         The internal Apple dependency on this is gone now.
2322
2323         * wtf/OwnArrayPtr.h: Removed constructor that takes a raw pointer,
2324         set function that takes a raw pointer.
2325
2326         * wtf/OwnPtr.h: Removed constructor that takes a raw pointer,
2327         set functino that takes a raw pointer.
2328
2329         * wtf/PassOwnArrayPtr.h: Made constructor that takes a nullptr
2330         and assignment operator that takes a nullptr unconditional.
2331         Made constructor that takes a raw pointer private and explicit,
2332         and removed assignment operator that takes a raw pointer.
2333
2334         * wtf/PassOwnPtr.h: Made assignment operator that takes a nullptr
2335         unconditional. Made constructor that takes a raw pointer private
2336         and explicit, and removed assignment operator that takes a raw pointer.
2337
2338 2011-06-15  Sam Weinig  <sam@webkit.org>
2339
2340         Reviewed by Geoffrey Garen and Gavin Barraclough.
2341
2342         Make access-nseive ~9x faster on the non-speculative path by
2343         adding special casing for doubles that can lossless-ly be converted
2344         to a uint32_t in getByVal and putByVal. This avoids calls to stringification
2345         and the hash lookup.  Long term, we should try and get property of a getByVal
2346         and putByVal to be an integer immediate even in the non-speculative path.
2347
2348         * dfg/DFGOperations.cpp:
2349         (JSC::DFG::putByVal):
2350         (JSC::DFG::operationPutByValInternal):
2351
2352 2011-06-15  Oliver Hunt  <oliver@apple.com>
2353
2354         Reviewed by Darin Adler.
2355
2356         REGRESSION (r88719): 5by5.tv schedule is not visible
2357         https://bugs.webkit.org/show_bug.cgi?id=62720
2358
2359         Problem here is that the lexer wasn't considering '$' to be
2360         a valid character in an identifier.
2361
2362         * parser/Lexer.h:
2363         (JSC::Lexer::lexExpectIdentifier):
2364
2365 2011-06-15  Oliver Hunt  <oliver@apple.com>
2366
2367         Reviewed by Sam Weinig.
2368
2369         Reduce the size of global_resolve
2370         https://bugs.webkit.org/show_bug.cgi?id=62738
2371
2372         Reduce the code size of global_resolve in the JIT by replacing
2373         multiple pointer loads with a single pointer move + two offset
2374         loads.
2375
2376         * jit/JITOpcodes.cpp:
2377         (JSC::JIT::emit_op_resolve_global):
2378         * jit/JITOpcodes32_64.cpp:
2379         (JSC::JIT::emit_op_resolve_global):
2380
2381 2011-06-14  Geoffrey Garen  <ggaren@apple.com>
2382
2383         Reviewed by Dan Bernstein.
2384
2385         Fixed an inavlid ASSERT I found while investigating
2386         <rdar://problem/9580254> Crash in JSC::HandleHeap::finalizeWeakHandles + 92
2387         https://bugs.webkit.org/show_bug.cgi?id=62699        
2388
2389         No test since we don't know of a way to get WebCore to deallocate the
2390         next-to-finalize handle, which is also the last handle in the list,
2391         while finalizing the second-to-last handle in the list.
2392
2393         * heap/HandleHeap.h:
2394         (JSC::HandleHeap::deallocate): Don't ASSERT that m_nextToFinalize has a
2395         non-0 next() after updating it, since it is valid to update m_nextToFinalize
2396         to point to the tail sentinel.
2397         
2398         Do ASSERT that m_nextToFinalize has a non-0 next() before updating it,
2399         since it is not valid to update m_nextToFinalize to point past the tail
2400         sentinel.
2401         
2402         Also, use m_nextToFinalize consistently for clarity.
2403
2404 2011-06-14  Gavin Barraclough  <barraclough@apple.com>
2405
2406         Reviewed by Sam Weinig.
2407
2408         https://bugs.webkit.org/show_bug.cgi?id=43841
2409         SegmentedVector::operator== typo
2410
2411         * wtf/SegmentedVector.h:
2412         (WTF::SegmentedVectorIterator::operator==):
2413         (WTF::SegmentedVectorIterator::operator!=):
2414
2415 2011-06-14  Oliver Hunt  <oliver@apple.com>
2416
2417         Reviewed by Gavin Barraclough.
2418
2419         Constant array literals result in unnecessarily large amounts of code
2420         https://bugs.webkit.org/show_bug.cgi?id=62658
2421
2422         Add a new version of op_new_array that simply copies values from a buffer
2423         we hang off of the CodeBlock, rather than generating code to place each
2424         entry into the registerfile, and then copying it from the registerfile into
2425         the array.  This is a slight improvement on some sunspider tests, but no
2426         measurable overall change.  That's okay though as our goal was to reduce
2427         code size without hurting performance.
2428
2429         * bytecode/CodeBlock.cpp:
2430         (JSC::CodeBlock::dump):
2431         * bytecode/CodeBlock.h:
2432         (JSC::CodeBlock::addImmediateBuffer):
2433         (JSC::CodeBlock::immediateBuffer):
2434         * bytecode/Opcode.h:
2435         * bytecompiler/BytecodeGenerator.cpp:
2436         (JSC::BytecodeGenerator::addImmediateBuffer):
2437         (JSC::BytecodeGenerator::emitNewArray):
2438         * bytecompiler/BytecodeGenerator.h:
2439         * bytecompiler/NodesCodegen.cpp:
2440         (JSC::ArrayNode::emitBytecode):
2441         * interpreter/Interpreter.cpp:
2442         (JSC::Interpreter::privateExecute):
2443         * jit/JIT.cpp:
2444         (JSC::JIT::privateCompileMainPass):
2445         * jit/JIT.h:
2446         * jit/JITOpcodes.cpp:
2447         (JSC::JIT::emit_op_new_array):
2448         (JSC::JIT::emit_op_new_array_buffer):
2449         * jit/JITOpcodes32_64.cpp:
2450         * jit/JITStubs.cpp:
2451         (JSC::DEFINE_STUB_FUNCTION):
2452         * jit/JITStubs.h:
2453
2454 2011-06-14  Sheriff Bot  <webkit.review.bot@gmail.com>
2455
2456         Unreviewed, rolling out r88841.
2457         http://trac.webkit.org/changeset/88841
2458         https://bugs.webkit.org/show_bug.cgi?id=62672
2459
2460         Caused many tests to crash (Requested by rniwa on #webkit).
2461
2462         * bytecode/CodeBlock.cpp:
2463         (JSC::CodeBlock::dump):
2464         * bytecode/CodeBlock.h:
2465         * bytecode/Opcode.h:
2466         * bytecompiler/BytecodeGenerator.cpp:
2467         (JSC::BytecodeGenerator::emitNewArray):
2468         * bytecompiler/BytecodeGenerator.h:
2469         * bytecompiler/NodesCodegen.cpp:
2470         (JSC::ArrayNode::emitBytecode):
2471         * interpreter/Interpreter.cpp:
2472         (JSC::Interpreter::privateExecute):
2473         * jit/JIT.cpp:
2474         (JSC::JIT::privateCompileMainPass):
2475         * jit/JIT.h:
2476         * jit/JITOpcodes.cpp:
2477         (JSC::JIT::emit_op_new_array):
2478         * jit/JITOpcodes32_64.cpp:
2479         (JSC::JIT::emit_op_new_array):
2480         * jit/JITStubs.cpp:
2481         * jit/JITStubs.h:
2482
2483 2011-06-14  Oliver Hunt  <oliver@apple.com>
2484
2485         Reviewed by Gavin Barraclough.
2486
2487         Constant array literals result in unnecessarily large amounts of code
2488         https://bugs.webkit.org/show_bug.cgi?id=62658
2489
2490         Add a new version of op_new_array that simply copies values from a buffer
2491         we hang off of the CodeBlock, rather than generating code to place each
2492         entry into the registerfile, and then copying it from the registerfile into
2493         the array.  This is a slight improvement on some sunspider tests, but no
2494         measurable overall change.  That's okay though as our goal was to reduce
2495         code size without hurting performance.
2496
2497         * bytecode/CodeBlock.cpp:
2498         (JSC::CodeBlock::dump):
2499         * bytecode/CodeBlock.h:
2500         (JSC::CodeBlock::addImmediateBuffer):
2501         (JSC::CodeBlock::immediateBuffer):
2502         * bytecode/Opcode.h:
2503         * bytecompiler/BytecodeGenerator.cpp:
2504         (JSC::BytecodeGenerator::addImmediateBuffer):
2505         (JSC::BytecodeGenerator::emitNewArray):
2506         * bytecompiler/BytecodeGenerator.h:
2507         * bytecompiler/NodesCodegen.cpp:
2508         (JSC::ArrayNode::emitBytecode):
2509         * interpreter/Interpreter.cpp:
2510         (JSC::Interpreter::privateExecute):
2511         * jit/JIT.cpp:
2512         (JSC::JIT::privateCompileMainPass):
2513         * jit/JIT.h:
2514         * jit/JITOpcodes.cpp:
2515         (JSC::JIT::emit_op_new_array):
2516         (JSC::JIT::emit_op_new_array_buffer):
2517         * jit/JITOpcodes32_64.cpp:
2518         * jit/JITStubs.cpp:
2519         (JSC::DEFINE_STUB_FUNCTION):
2520         * jit/JITStubs.h:
2521
2522 2011-06-14  Stephanie Lewis  <slewis@apple.com>
2523
2524         Rubber stamped by Oliver Hunt.
2525
2526         <rdar://problem/9511169>
2527         Update order files.
2528
2529         * JavaScriptCore.order:
2530
2531 2011-06-14  Sam Weinig  <sam@webkit.org>
2532
2533         Reviewed by Geoffrey Garen.
2534
2535         Fix dumping of constants to have the correct constant number.
2536
2537         * bytecode/CodeBlock.cpp:
2538         (JSC::CodeBlock::dump):
2539
2540 2011-06-14  Benjamin Poulain  <benjamin@webkit.org>
2541
2542         Reviewed by Eric Seidel.
2543
2544         KeywordLookupGenerator's Trie does not work with Python 3
2545         https://bugs.webkit.org/show_bug.cgi?id=62635
2546
2547         With Python 3, dict.items() return an iterator. Since the iterator
2548         protocol changed between Python 2 and 3, the easiest way to get the
2549         values is to have something that use the iterator implicitely, like a
2550         for() loop.
2551
2552         * KeywordLookupGenerator.py:
2553
2554 2011-06-13  Oliver Hunt  <oliver@apple.com>
2555
2556         Reviewed by Gavin Barraclough.
2557
2558         Fix llocp and lvalp names in the lexer to something more meaningful
2559         https://bugs.webkit.org/show_bug.cgi?id=62605
2560
2561         A simple rename
2562
2563         * parser/Lexer.cpp:
2564         (JSC::Lexer::parseIdentifier):
2565         (JSC::Lexer::parseString):
2566         (JSC::Lexer::lex):
2567         * parser/Lexer.h:
2568         (JSC::Lexer::lexExpectIdentifier):
2569
2570 2011-06-13  Oliver Hunt  <oliver@apple.com>
2571
2572         Reviewed by Gavin Barraclough.
2573
2574         Make it possible to inline the common case of identifier lexing
2575         https://bugs.webkit.org/show_bug.cgi?id=62600
2576
2577         Add a lexing function that expects to lex an "normal" alpha numeric
2578         identifier (that ignores keywords) so it's possible to inline the
2579         common parsing cases.  This comes out as a reasonable parsing speed
2580         boost.
2581
2582         * parser/JSParser.cpp:
2583         (JSC::JSParser::nextExpectIdentifier):
2584         (JSC::JSParser::parseProperty):
2585         (JSC::JSParser::parseMemberExpression):
2586         * parser/Lexer.cpp:
2587         * parser/Lexer.h:
2588         (JSC::Lexer::makeIdentifier):
2589         (JSC::Lexer::lexExpectIdentifier):
2590
2591 2011-06-13  Xan Lopez  <xlopez@igalia.com>
2592
2593         Reviewed by Martin Robinson.
2594
2595         Distcheck fixes.
2596
2597         * GNUmakefile.am:
2598         * GNUmakefile.list.am:
2599
2600 2011-06-13  Oliver Hunt  <oliver@apple.com>
2601
2602         Reviewed by Simon Fraser.
2603
2604         Make it possible to inline Identifier::equal
2605         https://bugs.webkit.org/show_bug.cgi?id=62584
2606
2607         Move Identifier::equal to the Identifier header file.
2608
2609         * runtime/Identifier.cpp:
2610         * runtime/Identifier.h:
2611         (JSC::Identifier::equal):
2612
2613 2011-06-13  Tony Chang  <tony@chromium.org>
2614
2615         Reviewed by Dimitri Glazkov.
2616
2617         rename ENABLE_NEW_FLEXBOX to ENABLE_CSS3_FLEXBOX
2618         https://bugs.webkit.org/show_bug.cgi?id=62578
2619
2620         * Configurations/FeatureDefines.xcconfig:
2621
2622 2011-06-13  Tony Chang  <tony@chromium.org>
2623
2624         Reviewed by Adam Barth.
2625
2626         rename ENABLE_FLEXBOX to ENABLE_NEW_FLEXBOX
2627         https://bugs.webkit.org/show_bug.cgi?id=62545
2628
2629         * Configurations/FeatureDefines.xcconfig:
2630
2631 2011-06-12  Patrick Gansterer  <paroga@webkit.org>
2632
2633         Unreviewed. Build fix for !ENABLE(JIT) after r88604.
2634
2635         * bytecode/CodeBlock.cpp:
2636         (JSC::CodeBlock::visitAggregate):
2637
2638 2011-06-11  Gavin Barraclough  <barraclough@apple.com>
2639
2640         Reviewed by Darin Adler.
2641
2642         https://bugs.webkit.org/show_bug.cgi?id=16777
2643
2644         Remove #define NaN per Darin's comments.
2645
2646         * runtime/JSGlobalObjectFunctions.cpp:
2647         (JSC::parseIntOverflow):
2648         (JSC::parseInt):
2649         (JSC::jsStrDecimalLiteral):
2650         (JSC::jsToNumber):
2651         (JSC::parseFloat):
2652         * wtf/DateMath.cpp:
2653         (WTF::equivalentYearForDST):
2654         (WTF::parseES5DateFromNullTerminatedCharacters):
2655         (WTF::parseDateFromNullTerminatedCharacters):
2656         (WTF::timeClip):
2657         (JSC::parseDateFromNullTerminatedCharacters):
2658
2659 2011-06-11  Gavin Barraclough  <barraclough@apple.com>
2660
2661         Rubber stamped by Geoff Garen.
2662
2663         https://bugs.webkit.org/show_bug.cgi?id=62503
2664         Remove JIT_OPTIMIZE_* switches
2665
2666         The alternative code paths are untested, and not well maintained.
2667         These were useful when there was more churn in the JIT, but now
2668         are a maintenance overhead. Time to move on, removing.
2669
2670         * bytecode/CodeBlock.cpp:
2671         (JSC::CodeBlock::visitAggregate):
2672         * jit/JIT.cpp:
2673         (JSC::JIT::privateCompileSlowCases):
2674         (JSC::JIT::privateCompile):
2675         (JSC::JIT::linkConstruct):
2676         * jit/JIT.h:
2677         * jit/JITCall.cpp:
2678         * jit/JITCall32_64.cpp:
2679         * jit/JITOpcodes.cpp:
2680         (JSC::JIT::privateCompileCTIMachineTrampolines):
2681         (JSC::JIT::privateCompileCTINativeCall):
2682         * jit/JITOpcodes32_64.cpp:
2683         (JSC::JIT::privateCompileCTIMachineTrampolines):
2684         (JSC::JIT::privateCompileCTINativeCall):
2685         (JSC::JIT::softModulo):
2686         * jit/JITPropertyAccess.cpp:
2687         * jit/JITPropertyAccess32_64.cpp:
2688         * jit/JITStubs.cpp:
2689         (JSC::DEFINE_STUB_FUNCTION):
2690         * runtime/Lookup.cpp:
2691         (JSC::setUpStaticFunctionSlot):
2692         * runtime/Lookup.h:
2693         * wtf/Platform.h:
2694
2695 2011-06-10  Gavin Barraclough  <barraclough@apple.com>
2696
2697         Reviewed by Sam Weinig.
2698
2699         https://bugs.webkit.org/show_bug.cgi?id=16777
2700         Eliminate JSC::NaN and JSC::Inf
2701
2702         There's no good reason for -K-J-S- JSC to have its own NAN and infinity constants.
2703         The ones in std::numeric_limits are perfectly good.
2704         Remove JSC::Inf, JSC::NaN, switch some cases of (isnan || isinf) to !isfinite.
2705
2706         * API/JSCallbackObjectFunctions.h:
2707         (JSC::::toNumber):
2708         * API/JSValueRef.cpp:
2709         (JSValueMakeNumber):
2710         (JSValueToNumber):
2711         * JavaScriptCore.exp:
2712         * runtime/CachedTranscendentalFunction.h:
2713         (JSC::CachedTranscendentalFunction::initialize):
2714         * runtime/DateConstructor.cpp:
2715         (JSC::constructDate):
2716         * runtime/DateInstanceCache.h:
2717         (JSC::DateInstanceData::DateInstanceData):
2718         (JSC::DateInstanceCache::reset):
2719         * runtime/JSCell.cpp:
2720         * runtime/JSCell.h:
2721         (JSC::JSCell::JSValue::getPrimitiveNumber):
2722         (JSC::JSCell::JSValue::toNumber):
2723         * runtime/JSGlobalData.cpp:
2724         (JSC::JSGlobalData::JSGlobalData):
2725         (JSC::JSGlobalData::resetDateCache):
2726         * runtime/JSGlobalObject.cpp:
2727         (JSC::JSGlobalObject::reset):
2728         * runtime/JSGlobalObjectFunctions.cpp:
2729         (JSC::globalFuncParseInt):
2730         (JSC::globalFuncIsFinite):
2731         * runtime/JSNotAnObject.cpp:
2732         (JSC::JSNotAnObject::toNumber):
2733         * runtime/JSValue.cpp:
2734         * runtime/JSValue.h:
2735         * runtime/JSValueInlineMethods.h:
2736         (JSC::jsNaN):
2737         * runtime/MathObject.cpp:
2738         (JSC::mathProtoFuncMax):
2739         (JSC::mathProtoFuncMin):
2740         * runtime/NumberConstructor.cpp:
2741         (JSC::numberConstructorNegInfinity):
2742         (JSC::numberConstructorPosInfinity):
2743         * runtime/NumberPrototype.cpp:
2744         (JSC::numberProtoFuncToExponential):
2745         (JSC::numberProtoFuncToFixed):
2746         (JSC::numberProtoFuncToPrecision):
2747         (JSC::numberProtoFuncToString):
2748         * runtime/UString.cpp:
2749         * wtf/DecimalNumber.h:
2750         (WTF::DecimalNumber::DecimalNumber):
2751         * wtf/dtoa.cpp:
2752         (WTF::dtoa):
2753
2754 2011-06-10  Tony Chang  <tony@chromium.org>
2755
2756         Reviewed by Ojan Vafai.
2757
2758         add a compile guard ENABLE(FLEXBOX)
2759         https://bugs.webkit.org/show_bug.cgi?id=62049
2760
2761         * Configurations/FeatureDefines.xcconfig:
2762
2763 2011-06-10  Gavin Barraclough  <barraclough@apple.com>
2764
2765         Reviewed by Sam Weinig.
2766
2767         https://bugs.webkit.org/show_bug.cgi?id=55347
2768         "name" and "message" enumerable on *Error.prototype
2769
2770         This arises from chapter 15 of the spec:
2771             "Every other property described in this clause has the attributes
2772             { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true }
2773             unless otherwise specified."
2774         Standardized properties are not enumerable.
2775
2776         * runtime/ErrorInstance.cpp:
2777         (JSC::ErrorInstance::ErrorInstance):
2778         * runtime/NativeErrorPrototype.cpp:
2779         (JSC::NativeErrorPrototype::NativeErrorPrototype):
2780
2781 2011-06-09  Geoffrey Garen  <ggaren@apple.com>
2782
2783         Build fix: Corrected header spelling.
2784
2785         * heap/OldSpace.h:
2786
2787 2011-06-09  Geoffrey Garen  <ggaren@apple.com>
2788
2789         Reviewed by Oliver Hunt.
2790
2791         Added OldSpace to the project
2792         https://bugs.webkit.org/show_bug.cgi?id=62417
2793         
2794         Currently unused.
2795         
2796         Added OldSpace, the ability to iterate NewSpace vs OldSpace, and a
2797         per-block flag for testing whether you're in NewSpace vs OldSpace.
2798
2799         * CMakeLists.txt:
2800         * GNUmakefile.list.am:
2801         * JavaScriptCore.gypi:
2802         * JavaScriptCore.pro:
2803         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2804         * JavaScriptCore.xcodeproj/project.pbxproj: Build!
2805
2806         * heap/MarkedBlock.cpp:
2807         (JSC::MarkedBlock::MarkedBlock):
2808         * heap/MarkedBlock.h:
2809         (JSC::MarkedBlock::inNewSpace):
2810         (JSC::MarkedBlock::setInNewSpace): Added inNewSpace flag, for use in
2811         write barrier.
2812
2813         * heap/NewSpace.cpp:
2814         (JSC::NewSpace::addBlock):
2815         (JSC::NewSpace::removeBlock):
2816         * heap/NewSpace.h:
2817         (JSC::NewSpace::forEachBlock): Added forEachBlock, to use for
2818         NewSpace-specific operations.
2819
2820         * heap/OldSpace.cpp: Added.
2821         (JSC::OldSpace::OldSpace):
2822         (JSC::OldSpace::addBlock):
2823         (JSC::OldSpace::removeBlock):
2824         * heap/OldSpace.h: Added.
2825         (JSC::OldSpace::forEachBlock): New class for holding promoted blocks.
2826         Not in use yet.
2827
2828 2011-06-09  Hyowon Kim  <hw1008.kim@samsung.com>
2829
2830         Reviewed by Antonio Gomes.
2831
2832         [EFL] Make accelerated compositing build in Webkit-EFL
2833         https://bugs.webkit.org/show_bug.cgi?id=62361
2834
2835         Add PLATFORM(EFL) to enable ACCELERATED_COMPOSITING on EFL port.
2836
2837         * wtf/Platform.h:
2838
2839 2011-06-09  Gavin Barraclough  <barraclough@apple.com>
2840
2841         Reviewed by Geoff Garen.
2842
2843         Bug 62405 - Fix integer overflow in Array.prototype.push
2844
2845         Fix geoff's review comments re static_cast.
2846
2847         * runtime/ArrayPrototype.cpp:
2848         (JSC::arrayProtoFuncPush):
2849
2850 2011-06-09  Geoffrey Garen  <ggaren@apple.com>
2851
2852         Reviewed by Oliver Hunt.
2853
2854         Factored MarkedBlock set management into a helper class with a fast case Bloom filter
2855         https://bugs.webkit.org/show_bug.cgi?id=62413
2856         
2857         SunSpider reports a small speedup.
2858         
2859         This is in preparation for having ConservativeSet operate on arbitrary
2860         sets of MarkedBlocks, and in preparation for conservative scanning
2861         becoming proportionally more important than other GC activities.
2862
2863         * GNUmakefile.list.am:
2864         * JavaScriptCore.gypi:
2865         * JavaScriptCore.xcodeproj/project.pbxproj: Build-o.
2866
2867         * heap/ConservativeRoots.cpp:
2868         (JSC::ConservativeRoots::add):
2869         * heap/ConservativeRoots.h:
2870         (JSC::ConservativeRoots::ConservativeRoots): Operate on a MarkedBlockSet
2871         directly, instead of a Heap, so we can operate on subsets of the Heap
2872         instead.
2873         
2874         Use a TinyBloomFilter for single-cycle exclusion of most pointers. This
2875         is particularly important since we expect not to find our subject pointer
2876         in the MarkedBlock hash, and hash misses are more expensive than typical
2877         hash lookups because they have high collision rates.
2878         
2879         No need for single-pointer add() to be public anymore, since nobody uses it.
2880
2881         * heap/Heap.cpp:
2882         (JSC::Heap::markRoots):
2883         * heap/Heap.h:
2884         (JSC::Heap::forEachCell):
2885         (JSC::Heap::forEachBlock): Use MarkedBlockSet since that's what
2886         ConservativeRoots relies on.
2887         
2888         Nixed contains(), since nobody uses it anymore.
2889
2890         * heap/MarkedBlock.h:
2891         (WTF::MarkedBlockHash::hash): Added a faster hash taking advantage of
2892         the VM layout properties of MarkedBlocks.
2893
2894         * heap/MarkedBlockSet.h: Added.
2895         (JSC::MarkedBlockSet::add):
2896         (JSC::MarkedBlockSet::remove):
2897         (JSC::MarkedBlockSet::recomputeFilter):
2898         (JSC::MarkedBlockSet::filter):
2899         (JSC::MarkedBlockSet::set):
2900         * heap/TinyBloomFilter.h: Added.
2901         (JSC::TinyBloomFilter::TinyBloomFilter):
2902         (JSC::TinyBloomFilter::add):
2903         (JSC::TinyBloomFilter::ruleOut): New helper class, used above.
2904
2905         * interpreter/RegisterFile.cpp:
2906         (JSC::RegisterFile::gatherConservativeRoots): No need to specifically
2907         exclude values by tag -- the tiny bloom filter is already a register-register
2908         compare, so adding another "rule out" factor just slows things down.
2909
2910 2011-06-09  Gavin Barraclough  <barraclough@apple.com>
2911
2912         Reviewed by Oliver Hunt.
2913
2914         Bug 62405 - Fix integer overflow in Array.prototype.push
2915
2916         There are three integer overflows here, leading to safe (not a security risk)
2917         but incorrect (non-spec-compliant) behaviour.
2918
2919         Two overflows occur when calculating the new length after pushing (one in the
2920         fast version of push in JSArray, one in the generic version in ArrayPrototype).
2921         The other occurs calculating indices to write to when multiple items are pushed.
2922
2923         These errors result in three test-262 failures.
2924
2925         * runtime/ArrayPrototype.cpp:
2926         (JSC::arrayProtoFuncPush):
2927         * runtime/JSArray.cpp:
2928         (JSC::JSArray::put):
2929         (JSC::JSArray::push):
2930
2931 2011-06-09  Dan Bernstein  <mitz@apple.com>
2932
2933         Reviewed by Anders Carlsson.
2934
2935         Add Vector::reverse()
2936         https://bugs.webkit.org/show_bug.cgi?id=62393
2937
2938         * wtf/Vector.h:
2939         (WTF::Vector::reverse): Added
2940
2941 2011-06-08  Geoffrey Garen  <ggaren@apple.com>
2942
2943         Reviewed by Oliver Hunt.
2944
2945         Factored a bunch of Heap functionality into stand-alone functors
2946         https://bugs.webkit.org/show_bug.cgi?id=62337
2947         
2948         This is in preparation for making these functors operate on arbitrary
2949         sets of MarkedBlocks.
2950
2951         * JavaScriptCore.exp: This file is a small tragedy.
2952
2953         * debugger/Debugger.cpp:
2954         (JSC::Debugger::recompileAllJSFunctions): Updated for type change and rename.
2955
2956         * heap/HandleHeap.h:
2957         (JSC::HandleHeap::forEachStrongHandle): New function for iterating all
2958         strong handles, so we can play along in the functor game.
2959
2960         * heap/Heap.cpp:
2961         (JSC::CountFunctor::CountFunctor::CountFunctor):
2962         (JSC::CountFunctor::CountFunctor::count):
2963         (JSC::CountFunctor::CountFunctor::returnValue):
2964         (JSC::CountFunctor::ClearMarks::operator()):
2965         (JSC::CountFunctor::ResetAllocator::operator()):
2966         (JSC::CountFunctor::Sweep::operator()):
2967         (JSC::CountFunctor::MarkCount::operator()):
2968         (JSC::CountFunctor::Size::operator()):
2969         (JSC::CountFunctor::Capacity::operator()):
2970         (JSC::CountFunctor::Count::operator()):
2971         (JSC::CountFunctor::CountIfGlobalObject::operator()):
2972         (JSC::CountFunctor::TakeIfEmpty::TakeIfEmpty):
2973         (JSC::CountFunctor::TakeIfEmpty::operator()):
2974         (JSC::CountFunctor::TakeIfEmpty::returnValue):
2975         (JSC::CountFunctor::RecordType::RecordType):
2976         (JSC::CountFunctor::RecordType::typeName):
2977         (JSC::CountFunctor::RecordType::operator()):
2978         (JSC::CountFunctor::RecordType::returnValue): These functors factor out
2979         behavior that used to be in the functions below.
2980
2981         (JSC::Heap::clearMarks):
2982         (JSC::Heap::sweep):
2983         (JSC::Heap::objectCount):
2984         (JSC::Heap::size):
2985         (JSC::Heap::capacity):
2986         (JSC::Heap::protectedGlobalObjectCount):
2987         (JSC::Heap::protectedObjectCount):
2988         (JSC::Heap::protectedObjectTypeCounts):
2989         (JSC::Heap::objectTypeCounts):
2990         (JSC::Heap::resetAllocator):
2991         (JSC::Heap::freeBlocks):
2992         (JSC::Heap::shrink): Factored out behavior into the functors above.
2993
2994         * heap/Heap.h:
2995         (JSC::Heap::forEachProtectedCell):
2996         (JSC::Heap::forEachCell):
2997         (JSC::Heap::forEachBlock): Added forEach* iteration templates. I chose
2998         functor-based templates instead of plain iterators because they're simpler
2999         to implement in this case and they require a lot less code at the call site.
3000
3001         * heap/MarkedBlock.h:
3002         (JSC::MarkedBlock::VoidFunctor::returnValue): Default parent class for
3003         trivial functors.
3004
3005         (JSC::MarkedBlock::forEachCell): Renamed forEach to forEachCell because
3006         we have a few different kind of "for each" now.
3007
3008         * runtime/JSGlobalData.cpp:
3009         (WTF::Recompile::operator()):
3010         (JSC::JSGlobalData::JSGlobalData):
3011         (JSC::JSGlobalData::recompileAllJSFunctions): Updated for type change and rename.
3012
3013         * runtime/JSGlobalData.h: Removed globalObjectCount because it was unused.
3014
3015 2011-06-08  Mikołaj Małecki  <m.malecki@samsung.com>
3016
3017         Reviewed by Pavel Feldman.
3018
3019         Web Inspector: Crash by buffer overrun crash when serializing inspector object tree.
3020         https://bugs.webkit.org/show_bug.cgi?id=52791
3021
3022         No new tests. The problem can be reproduced by trying to create InspectorValue
3023         from 1.0e-100 and call ->toJSONString() on this.
3024
3025         * JavaScriptCore.exp:
3026         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
3027         export 2 functions DecimalNumber::bufferLengthForStringExponential and
3028         DecimalNumber::toStringExponential.
3029
3030 2011-06-08  Sheriff Bot  <webkit.review.bot@gmail.com>
3031
3032         Unreviewed, rolling out r88404.
3033         http://trac.webkit.org/changeset/88404
3034         https://bugs.webkit.org/show_bug.cgi?id=62342
3035
3036         broke win and mac build (Requested by tony^work on #webkit).
3037
3038         * JavaScriptCore.gyp/JavaScriptCore.gyp:
3039
3040 2011-06-08  Evan Martin  <evan@chromium.org>
3041
3042         Reviewed by Adam Barth.
3043
3044         [chromium] use gyp 'settings' type for settings target
3045         https://bugs.webkit.org/show_bug.cgi?id=62323
3046
3047         The 'settings' gyp target type is for targets that exist solely
3048         for their settings (no build rules).  The comment above this target
3049         says it's for this, but it incorrectly uses 'none'.
3050
3051         * JavaScriptCore.gyp/JavaScriptCore.gyp:
3052
3053 2011-06-08  Sailesh Agrawal  <sail@chromium.org>
3054
3055         Reviewed by Mihai Parparita.
3056
3057         Chromium Mac: Enable overlay scrollbars
3058         https://bugs.webkit.org/show_bug.cgi?id=59756
3059
3060         Enable WTF_USE_WK_SCROLLBAR_PAINTER for Chromium Mac. This allows us to use overlay scrollbars on future versions of Mac OS X.
3061
3062         * wtf/Platform.h:
3063
3064 2011-06-08  Oliver Hunt  <oliver@apple.com>
3065
3066         Reviewed by Geoffrey Garen.
3067
3068         Add faster lookup cache for multi character identifiers
3069         https://bugs.webkit.org/show_bug.cgi?id=62327
3070
3071         Add a non-hash lookup for mutiple character identifiers.  This saves us from
3072         adding repeated identifiers to the ParserArena's identifier list as people
3073         tend to not start all their variables and properties with the same character
3074         and happily identifier locality works in our favour.
3075
3076         * parser/ParserArena.h:
3077         (JSC::IdentifierArena::isEmpty):
3078         (JSC::IdentifierArena::clear):
3079         (JSC::IdentifierArena::makeIdentifier):
3080
3081 2011-06-08  Geoffrey Garen  <ggaren@apple.com>
3082
3083         Reviewed by Oliver Hunt.
3084
3085         Took some responsibilities away from NewSpace
3086         https://bugs.webkit.org/show_bug.cgi?id=62325
3087         
3088         NewSpace is basically just an allocator now.
3089         
3090         Heap acts as a controller, responsible for managing the set of all
3091         MarkedBlocks.
3092         
3093         This is in preparation for moving parts of the controller logic into
3094         separate helper classes that can act on arbitrary sets of MarkedBlocks
3095         that may or may not be in NewSpace.
3096
3097         * heap/Heap.cpp:
3098         (JSC::Heap::Heap):
3099         (JSC::Heap::destroy):
3100         (JSC::Heap::allocate):
3101         (JSC::Heap::markRoots):
3102         (JSC::Heap::clearMarks):
3103         (JSC::Heap::sweep):
3104         (JSC::Heap::objectCount):
3105         (JSC::Heap::size):
3106         (JSC::Heap::capacity):
3107         (JSC::Heap::collect):
3108         (JSC::Heap::resetAllocator):
3109         (JSC::Heap::allocateBlock):
3110         (JSC::Heap::freeBlocks):
3111         (JSC::Heap::shrink): Moved the set of MarkedBlocks from NewSpace to Heap,
3112         along with all functions that operate on the set of MarkedBlocks. Also
3113         moved responsibility for deciding whether to allocate a new MarkedBlock,
3114         and for allocating it.
3115
3116         * heap/Heap.h:
3117         (JSC::Heap::contains):
3118         (JSC::Heap::forEach): Ditto.
3119
3120         * heap/NewSpace.cpp:
3121         (JSC::NewSpace::addBlock):
3122         (JSC::NewSpace::removeBlock):
3123         (JSC::NewSpace::resetAllocator):
3124         * heap/NewSpace.h:
3125         (JSC::NewSpace::waterMark):
3126         (JSC::NewSpace::allocate): Ditto.
3127
3128 2011-06-08  Geoffrey Garen  <ggaren@apple.com>
3129
3130         Reviewed by Oliver Hunt.
3131
3132         Some more MarkedSpace => NewSpace renaming
3133         https://bugs.webkit.org/show_bug.cgi?id=62305
3134
3135         * JavaScriptCore.exp:
3136         * JavaScriptCore.order:
3137         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
3138         * heap/Heap.cpp:
3139         (JSC::Heap::Heap):
3140         (JSC::Heap::destroy):
3141         (JSC::Heap::reportExtraMemoryCostSlowCase):
3142         (JSC::Heap::allocate):
3143         (JSC::Heap::markRoots):
3144         (JSC::Heap::objectCount):
3145         (JSC::Heap::size):
3146         (JSC::Heap::capacity):
3147         (JSC::Heap::collect):
3148         (JSC::Heap::isValidAllocation):
3149         * heap/Heap.h:
3150         (JSC::Heap::markedSpace):
3151         (JSC::Heap::contains):
3152         (JSC::Heap::forEach):
3153         (JSC::Heap::allocate):
3154         * runtime/JSCell.h:
3155
3156 2011-06-08  Kevin Ollivier  <kevino@theolliviers.com>
3157
3158         Reviewed by Eric Seidel.
3159
3160         Add export macros to profiler headers.
3161         https://bugs.webkit.org/show_bug.cgi?id=27551
3162
3163         * profiler/Profiler.h:
3164
3165 2011-06-08  Kevin Ollivier  <kevino@theolliviers.com>
3166
3167         Reviewed by Eric Seidel.
3168
3169         Add export symbols to parser headers.
3170         https://bugs.webkit.org/show_bug.cgi?id=27551
3171
3172         * parser/SourceProviderCache.h:
3173
3174 2011-06-08  Kevin Ollivier  <kevino@theolliviers.com>
3175
3176         Reviewed by Eric Seidel.
3177
3178         Add export symbols to interpreter headers.
3179         https://bugs.webkit.org/show_bug.cgi?id=27551
3180
3181         * interpreter/Interpreter.h:
3182
3183 2011-06-08  Kevin Ollivier  <kevino@theolliviers.com>
3184
3185         Reviewed by Eric Seidel.
3186
3187         Add export symbols to debugger headers.
3188         https://bugs.webkit.org/show_bug.cgi?id=27551
3189
3190         * debugger/Debugger.h:
3191         * debugger/DebuggerCallFrame.h:
3192
3193 2011-06-08  Geoffrey Garen  <ggaren@apple.com>
3194
3195         Reviewed by Darin Adler.
3196
3197         Moved MarkedSpace.* to NewSpace.* in preparation for more renaming
3198         https://bugs.webkit.org/show_bug.cgi?id=62268
3199
3200         * CMakeLists.txt:
3201         * GNUmakefile.list.am:
3202         * JavaScriptCore.gypi:
3203         * JavaScriptCore.pro:
3204         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3205         * JavaScriptCore.xcodeproj/project.pbxproj:
3206         * heap/Heap.h:
3207         * heap/MarkedBlock.h:
3208         * heap/MarkedSpace.cpp: Removed.
3209         * heap/MarkedSpace.h: Removed.
3210         * heap/NewSpace.cpp: Copied from Source/JavaScriptCore/heap/MarkedSpace.cpp.
3211         * heap/NewSpace.h: Copied from Source/JavaScriptCore/heap/MarkedSpace.h.
3212
3213 2011-06-08  Sheriff Bot  <webkit.review.bot@gmail.com>
3214
3215         Unreviewed, rolling out r88365.
3216         http://trac.webkit.org/changeset/88365
3217         https://bugs.webkit.org/show_bug.cgi?id=62301
3218
3219         windows bots broken (Requested by loislo_ on #webkit).
3220
3221         * JavaScriptCore.exp:
3222
3223 2011-06-08  Ryan Sleevi  <rsleevi@chromium.org>
3224
3225         Reviewed by Tony Chang.
3226
3227         Suppress C++0x compat warnings when compiling Chromium port with GCC 4.6
3228
3229         Compiling Chromium port under GCC 4.6 produces warnings about nullptr
3230         https://bugs.webkit.org/show_bug.cgi?id=62242
3231
3232         * JavaScriptCore.gyp/JavaScriptCore.gyp:
3233
3234 2011-06-08  Ademar de Souza Reis Jr.  <ademar.reis@openbossa.org>
3235
3236         Reviewed by Andreas Kling.
3237
3238         Webkit on SPARC Solaris has wrong endian
3239         https://bugs.webkit.org/show_bug.cgi?id=29407
3240
3241         Bug 57256 fixed one crash on misaligned reads on sparc/solaris, but
3242         there are more ocurrences of the same code pattern in webkit.
3243
3244         This patch includes the check on these other parts of the code.
3245
3246         This is a speculative fix, I don't have a sparc machine to test and
3247         don't know which kind of test would trigger a crash (but it's quite
3248         obvious that it's the same code duplicated in different files).
3249
3250         * runtime/UString.h:
3251         (JSC::UStringHash::equal):
3252         * wtf/text/StringHash.h:
3253         (WTF::StringHash::equal):
3254
3255 2011-06-08  Yael Aharon  <yael.aharon@nokia.com>
3256
3257         Reviewed by Andreas Kling.
3258
3259         [Qt] Build fix for building QtWebKit inside of Qt.
3260         https://bugs.webkit.org/show_bug.cgi?id=62280
3261
3262         Remove CONFIG=staticlib, because it causes the configure script to add -ljavascriptcore
3263         into QtWebKit.prl.
3264
3265         No new tests, as this is just a build fix.
3266
3267         * JavaScriptCore.pri:
3268
3269 2011-06-07  Geoffrey Garen  <ggaren@apple.com>
3270
3271         Reviewed by Oliver Hunt.
3272
3273         Split 'reset' into 'collect' and 'resetAllocator'
3274         https://bugs.webkit.org/show_bug.cgi?id=62267
3275
3276         * heap/Heap.cpp:
3277         (JSC::Heap::allocate):
3278         (JSC::Heap::collectAllGarbage):
3279         (JSC::Heap::collect):
3280         * heap/Heap.h:
3281         * heap/MarkedBlock.h:
3282         (JSC::MarkedBlock::resetAllocator):
3283         * heap/MarkedSpace.cpp:
3284         (JSC::MarkedSpace::resetAllocator):
3285         * heap/MarkedSpace.h:
3286         (JSC::MarkedSpace::SizeClass::resetAllocator):
3287
3288 2011-06-07  Geoffrey Garen  <ggaren@apple.com>
3289
3290         Reviewed by Sam Weinig.
3291
3292         Renamed some more marks to visits
3293         https://bugs.webkit.org/show_bug.cgi?id=62254
3294
3295         * heap/HandleHeap.cpp:
3296         (JSC::HandleHeap::visitStrongHandles):
3297         (JSC::HandleHeap::visitWeakHandles):
3298         * heap/HandleHeap.h:
3299         * heap/HandleStack.cpp:
3300         (JSC::HandleStack::visit):
3301         * heap/HandleStack.h:
3302         * heap/Heap.cpp:
3303         (JSC::Heap::markProtectedObjects):
3304         (JSC::Heap::markTempSortVectors):
3305         (JSC::Heap::markRoots):
3306         * heap/HeapRootVisitor.h:
3307         (JSC::HeapRootVisitor::visit):
3308         * runtime/ArgList.cpp:
3309         (JSC::MarkedArgumentBuffer::markLists):
3310
3311 2011-06-07  Gavin Barraclough  <barraclough@apple.com>
3312
3313         Reviewed by Sam Weinig
3314
3315         https://bugs.webkit.org/show_bug.cgi?id=55537
3316         Functions claim to have 'callee' which they actually don't (and shouldn't)
3317
3318         * JavaScriptCore.xcodeproj/project.pbxproj:
3319         * runtime/JSFunction.cpp:
3320         (JSC::JSFunction::getOwnPropertyNames):
3321
3322 2011-06-07  Juan C. Montemayor  <jmont@apple.com>
3323
3324         Reviewed by Darin Adler.
3325
3326         Make JSStaticFunction and JSStaticValue less "const"
3327         https://bugs.webkit.org/show_bug.cgi?id=62222
3328
3329         * API/JSObjectRef.h:
3330         * API/tests/testapi.c:
3331         (checkConstnessInJSObjectNames):
3332         (main):
3333         * JavaScriptCore.xcodeproj/project.pbxproj:
3334
3335 2011-06-07  Gavin Barraclough  <barraclough@apple.com>
3336
3337         Reviewed by Sam Weinig.
3338
3339         https://bugs.webkit.org/show_bug.cgi?id=62240
3340         DFG JIT - add support for for-loop array initialization.
3341
3342         Support put by val beyond vector length.
3343         Add a operationPutByValBeyondArrayBounds operation, make
3344         PutValVal call this if the vector length check fails.
3345
3346         * dfg/DFGJITCodeGenerator.h:
3347         (JSC::DFG::JITCodeGenerator::silentSpillGPR):
3348         (JSC::DFG::JITCodeGenerator::silentFillGPR):
3349         (JSC::DFG::JITCodeGenerator::silentSpillAllRegisters):
3350         (JSC::DFG::JITCodeGenerator::isDoubleConstantWithInt32Value):
3351         (JSC::DFG::JITCodeGenerator::isJSConstantWithInt32Value):
3352         (JSC::DFG::JITCodeGenerator::isIntegerConstant):
3353         (JSC::DFG::JITCodeGenerator::valueOfIntegerConstant):
3354         * dfg/DFGOperations.cpp:
3355         (JSC::DFG::operationPutByValInternal):
3356         * dfg/DFGOperations.h:
3357         * dfg/DFGSpeculativeJIT.cpp:
3358         (JSC::DFG::SpeculativeJIT::compile):
3359         * dfg/DFGSpeculativeJIT.h:
3360
3361 2011-06-06  James Simonsen  <simonjam@chromium.org>
3362
3363         Reviewed by James Robinson.
3364
3365         Add monotonicallyIncreasingTime() to get monotonically increasing time
3366         https://bugs.webkit.org/show_bug.cgi?id=37743
3367
3368         * wtf/CurrentTime.cpp: Add monotonicallyIncreasingTime() for mac and a fallback implementation that just wraps currentTime().
3369         (WTF::monotonicallyIncreasingTime):
3370         * wtf/CurrentTime.h: Add monotonicallyIncreasingTime().
3371
3372 2011-06-06  Alexandru Chiculita  <achicu@adobe.com>
3373
3374         Reviewed by Kent Tamura.
3375
3376         Add ENABLE_CSS_EXCLUSIONS support for build-webkit script
3377         https://bugs.webkit.org/show_bug.cgi?id=61628
3378
3379         * Configurations/FeatureDefines.xcconfig:
3380
3381 2011-06-06  Mihnea Ovidenie  <mihnea@adobe.com>
3382
3383         Reviewed by Kent Tamura.
3384
3385         Add ENABLE(CSS_REGIONS) guard for CSS Regions support
3386         https://bugs.webkit.org/show_bug.cgi?id=61631
3387
3388         * Configurations/FeatureDefines.xcconfig:
3389
3390 2011-06-06  Carlos Garcia Campos  <cgarcia@igalia.com>
3391
3392         Unreviewed. Fix the GTK+ build.
3393
3394         * GNUmakefile.am: Add javascriptcore_cflags variable.
3395
3396 2011-06-04  Kevin Ollivier  <kevino@theolliviers.com>
3397
3398         [wx] Unreviewed build fix. Restore the PPC build and allow users to specify architectures
3399         to build on Mac.
3400
3401         * wtf/Platform.h:
3402
3403 2011-06-04  Gustavo Noronha Silva  <gns@gnome.org>
3404
3405         Unreviewed, MIPS build fix.
3406
3407         WebKitGTK+ tarball fails to build on MIPS.
3408         https://buildd.debian.org/status/fetch.php?pkg=webkitgtk%2B&arch=mips&ver=1.4.0-1&stamp=1304786691
3409
3410         * GNUmakefile.list.am: Add missing MIPS-related file to the list
3411         of files that are added to the tarball on make dist, and fix
3412         sorting.
3413
3414 2011-06-04  Sam Weinig  <sam@webkit.org>
3415
3416         Reviewed by Darin Adler.
3417
3418         Fix formatting of the output generated by KeywordLookupGenerator.py
3419         https://bugs.webkit.org/show_bug.cgi?id=62083
3420
3421         - Uses correct year for copyright.
3422         - Puts ending brace on same line as "else if"
3423         - Puts starting brace of function on its own line.
3424         - Adds some tasteful whitespace.
3425         - Adds comments to make clear that scopes are ending
3426         - Make macros actually split on two lines.
3427
3428         * KeywordLookupGenerator.py:
3429
3430 2011-06-04  Adam Barth  <abarth@webkit.org>
3431
3432         Reviewed by Eric Seidel.
3433
3434         KeywordLookupGenerator.py spams stdout in Chromium Linux build
3435         https://bugs.webkit.org/show_bug.cgi?id=62087
3436
3437         This action does not appear to be needed.
3438
3439         * JavaScriptCore.gyp/JavaScriptCore.gyp:
3440
3441 2011-06-03  Oliver Hunt  <oliver@apple.com>
3442
3443         Reviewed by Maciej Stachowiak.
3444
3445         Lexer needs to provide Identifier for reserved words
3446         https://bugs.webkit.org/show_bug.cgi?id=62086
3447
3448         Alas it is necessary to provide an Identifier reference for keywords
3449         so that we can do the right thing when they're used in object literals.
3450         We now keep Identifiers for all reserved words in the CommonIdentifiers
3451         structure so that we can access them without a hash lookup.
3452
3453         * KeywordLookupGenerator.py:
3454         * parser/Lexer.cpp:
3455         (JSC::Lexer::parseIdentifier):
3456         * parser/Lexer.h:
3457         * runtime/CommonIdentifiers.cpp:
3458         (JSC::CommonIdentifiers::CommonIdentifiers):
3459         * runtime/CommonIdentifiers.h:
3460
3461 2011-06-03  Gavin Barraclough  <barraclough@apple.com>
3462
3463         Reviewed by Sam Weinig.
3464
3465         Add debug code to break on speculation failures.
3466
3467         * dfg/DFGJITCompiler.cpp:
3468         (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):
3469         (JSC::DFG::JITCompiler::compileFunction):
3470         * dfg/DFGNode.h:
3471
3472 2011-06-03  Gavin Barraclough  <barraclough@apple.com>
3473
3474         Reviewed by Sam Weinig.
3475
3476         https://bugs.webkit.org/show_bug.cgi?id=62082
3477         DFG JIT - bug passing arguments that need swap
3478
3479         This is really just a typo.
3480         When setting up the arguments for a call out to a C operation, we'll
3481         fail to swap arguments where this is necessary. For example, in the
3482         case of 2 arg calls, where the first argument is in %rdx & the second
3483         is in %rsi we should swap (exec will be passed in %rdi), but we don't.
3484
3485         This can also affect function calls passing three arguments.
3486
3487         * dfg/DFGJITCodeGenerator.h:
3488         (JSC::DFG::JITCodeGenerator::setupTwoStubArgs):
3489             - Call swap with the correct arguments.
3490
3491 2011-06-03  Oliver Hunt  <oliver@apple.com>
3492
3493         Reviewed by Gavin Barraclough.
3494
3495         Force inlining of some hot lexer functions
3496         https://bugs.webkit.org/show_bug.cgi?id=62079
3497
3498         Fix more GCC stupidity
3499
3500         * parser/Lexer.h:
3501         (JSC::Lexer::isWhiteSpace):
3502         (JSC::Lexer::isLineTerminator):
3503
3504 2011-06-03  Oliver Hunt  <oliver@apple.com>
3505
3506         Reviewed by Gavin Barraclough.
3507
3508         GCC not inlining some functions that it really should be
3509         https://bugs.webkit.org/show_bug.cgi?id=62075
3510
3511         Add ALWAYS_INLINE to a number of parsing and lexing functions
3512         that should always be inlined.  This gets us ~1.4% on my ad hoc
3513         parser test.
3514
3515         * KeywordLookupGenerator.py:
3516         * parser/JSParser.cpp:
3517         (JSC::JSParser::next):
3518         (JSC::JSParser::nextTokenIsColon):
3519         (JSC::JSParser::consume):
3520         (JSC::JSParser::match):
3521         (JSC::JSParser::tokenStart):
3522         (JSC::JSParser::tokenLine):
3523         (JSC::JSParser::tokenEnd):
3524         * parser/Lexer.cpp:
3525         (JSC::isIdentPart):
3526
3527 2011-06-03  Oliver Hunt  <oliver@apple.com>
3528
3529         Whoops, fix last minute bug.
3530
3531         * parser/Lexer.cpp:
3532         (JSC::Lexer::parseIdentifier):
3533
3534 2011-06-03  Martin Robinson  <mrobinson@igalia.com>
3535
3536         Try to fix the GTK+ build.
3537
3538         * GNUmakefile.am: Clean up some spaces that should be tabs.
3539         * GNUmakefile.list.am: Add KeywordLookup.h to the source list
3540         and clean up some spaces that should be tabs.
3541
3542 2011-06-03  Oliver Hunt  <oliver@apple.com>
3543
3544         Reviewed by Geoffrey Garen.
3545
3546         Improve keyword lookup
3547         https://bugs.webkit.org/show_bug.cgi?id=61913
3548
3549         Rather than doing multiple hash lookups as we currently
3550         do when trying to identify keywords we now use an 
3551         automatically generated decision tree (essentially it's
3552         a hard coded patricia trie).  We still use the regular
3553         lookup table for the last few characters of an input as
3554         this allows us to completely skip all bounds checks.
3555
3556         * CMakeLists.txt:
3557         * DerivedSources.make:
3558         * DerivedSources.pro:
3559         * GNUmakefile.am:
3560         * JavaScriptCore.gyp/JavaScriptCore.gyp:
3561         * JavaScriptCore.xcodeproj/project.pbxproj:
3562         * KeywordLookupGenerator.py: Added.
3563         * make-generated-sources.sh:
3564         * parser/Lexer.cpp:
3565         (JSC::Lexer::internalShift):
3566         (JSC::Lexer::shift):
3567         (JSC::Lexer::parseIdentifier):
3568         * parser/Lexer.h:
3569
3570 2011-06-03  Siddharth Mathur  <siddharth.mathur@nokia.com>
3571
3572         Reviewed by Benjamin Poulain.
3573
3574         [Qt] Build flag for experimental ICU library support
3575         https://bugs.webkit.org/show_bug.cgi?id=60786
3576
3577         Adds a build-time flag (CONFIG+=use_system_icu) that enables experimental 
3578         ICU powered Unicode support. 
3579
3580         * JavaScriptCore.pri: Support for use_system_icu CONFIG flag.
3581         * wtf/unicode/qt4/UnicodeQt4.h: Guard an include file with USE(ICU_UNICODE). 
3582
3583 2011-06-03  Alexis Menard  <alexis.menard@openbossa.org>
3584
3585         Reviewed by Benjamin Poulain.
3586
3587         [Qt] Build fix of QtWebKit 2.2 when inside Qt tree with GCC 4.6.
3588         https://bugs.webkit.org/show_bug.cgi?id=61957
3589
3590         When building inside the Qt source tree, qmake always append the mkspecs
3591         defines after ours. We have to workaround and make sure that we append 
3592         our flags after the qmake variable used inside Qt. This workaround was provided 
3593         by our qmake folks. We need to append in both case because qmake behave differently
3594         when called with -spec or via SUBDIR+=. This patch unbreak r87950 on Mac for Qt port.
3595
3596         * JavaScriptCore.pro:
3597
3598 2011-06-02  Jay Civelli  <jcivelli@chromium.org>
3599
3600         Reviewed by Adam Barth.
3601
3602         Added a method to generate RFC 2822 compliant date strings.
3603         https://bugs.webkit.org/show_bug.cgi?id=7169
3604
3605         * wtf/DateMath.cpp:
3606         (WTF::twoDigitStringFromNumber):
3607         (WTF::makeRFC2822DateString):
3608         * wtf/DateMath.h:
3609
3610 2011-06-02  Alexis Menard  <alexis.menard@openbossa.org>
3611
3612         Reviewed by Andreas Kling.
3613
3614         [Qt] Build fix of QtWebKit 2.2 when inside Qt tree with GCC 4.6.
3615         https://bugs.webkit.org/show_bug.cgi?id=61957
3616
3617         When building inside the Qt source tree, qmake always append the mkspecs
3618         defines after ours. We have to workaround and make sure that we append  
3619         our flags after the qmake variable used inside Qt. This workaround was provided
3620         by our qmake folks.
3621
3622         * JavaScriptCore.pro:
3623
3624 2011-06-01  Oliver Hunt  <oliver@apple.com>
3625
3626         Reviewed by Geoffrey Garen.
3627
3628         Add single character lookup cache to IdentifierArena
3629         https://bugs.webkit.org/show_bug.cgi?id=61879
3630
3631         Add a simple lookup cache for single ascii character
3632         identifiers.  Produces around a 2% improvement in parse
3633         time for my adhoc parser test.
3634
3635         * parser/ParserArena.h:
3636         (JSC::IdentifierArena::IdentifierArena):
3637         (JSC::IdentifierArena::clear):
3638         (JSC::IdentifierArena::makeIdentifier):
3639
3640 2011-05-31  Oliver Hunt  <oliver@apple.com>
3641
3642         Reviewed by Geoffrey Garen.
3643
3644         Freezing a function and its prototype causes browser to crash.
3645         https://bugs.webkit.org/show_bug.cgi?id=61758
3646
3647         Make JSObject::preventExtensions virtual so that we can override it
3648         and instantiate all lazy
3649
3650         * JavaScriptCore.exp:
3651         * runtime/JSFunction.cpp:
3652         (JSC::createPrototypeProperty):
3653         (JSC::JSFunction::preventExtensions):
3654         (JSC::JSFunction::getOwnPropertySlot):
3655         * runtime/JSFunction.h:
3656         * runtime/JSObject.h:
3657         * runtime/JSObject.cpp:
3658         (JSC::JSObject::seal):
3659         (JSC::JSObject::seal):
3660
3661 2011-06-01  Sheriff Bot  <webkit.review.bot@gmail.com>
3662
3663         Unreviewed, rolling out r87788.
3664         http://trac.webkit.org/changeset/87788
3665         https://bugs.webkit.org/show_bug.cgi?id=61856
3666
3667         breaks windows chromium canary (Requested by jknotten on
3668         #webkit).
3669
3670         * wtf/DateMath.cpp:
3671         (WTF::timeClip):
3672         * wtf/DateMath.h:
3673
3674 2011-06-01  Jay Civelli  <jcivelli@chromium.org>
3675
3676         Reviewed by Adam Barth.
3677
3678         Added a method to generate RFC 2822 compliant date strings.
3679         https://bugs.webkit.org/show_bug.cgi?id=7169
3680
3681         * wtf/DateMath.cpp:
3682         (WTF::twoDigitStringFromNumber):
3683         (WTF::makeRFC2822DateString):
3684         * wtf/DateMath.h:
3685
3686 2011-05-31  Yong Li  <yoli@rim.com>
3687
3688         Reviewed by Eric Seidel.
3689
3690         https://bugs.webkit.org/show_bug.cgi?id=54807
3691         We have been assuming plain bitfields (like "int a : 31") are always signed integers.
3692         However some compilers can treat them as unsigned. For example, RVCT 4.0 states plain
3693         bitfields (declared without either signed or unsigned qualifiers) are treats as unsigned.
3694         http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0348c/Babjddhe.html
3695         Although we can use "--signed-bitfields" flag to make RVCT 4.0 behave as most other compilers,
3696         always using "signed"/"unsigned" qualifier to declare integral type bitfields is still a good
3697         rule we should have in order to make our code independent from compilers and compiler flags.
3698
3699         No new test added because this change is not known to fix any issue.
3700
3701         * bytecode/StructureStubInfo.h:
3702
3703 2011-05-30  Hojong Han  <hojong.han@samsung.com>
3704
3705         Reviewed by Geoffrey Garen.
3706
3707         [JSC] malfunction during arithmetic condition check with negative number (-2147483648)
3708         https://bugs.webkit.org/show_bug.cgi?id=61416
3709
3710         * assembler/MacroAssemblerARM.h:
3711         (JSC::MacroAssemblerARM::branch32):
3712         * tests/mozilla/ecma/Expressions/11.12-1.js:
3713         (getTestCases):
3714
3715 2011-05-29  Geoffrey Garen  <ggaren@apple.com>
3716
3717         Reviewed by Sam Weinig.
3718
3719         Some heap refactoring
3720         https://bugs.webkit.org/show_bug.cgi?id=61704
3721         
3722         SunSpider says no change.
3723
3724         * JavaScriptCore.exp: Export!
3725
3726         * heap/Heap.cpp: COLLECT_ON_EVERY_ALLOCATION can actually do so now.
3727
3728         (JSC::Heap::Heap): Changed Heap sub-objects to point to the heap.
3729
3730         (JSC::Heap::allocate): Changed inline allocation code to only select the
3731         size class, since this can be optimized out at compile time -- everything
3732         else is now inlined into this out-of-line function.
3733         
3734         No need to duplicate ASSERTs made in our caller.
3735
3736         * heap/Heap.h:
3737         (JSC::Heap::heap):
3738         (JSC::Heap::isMarked):
3739         (JSC::Heap::testAndSetMarked):
3740         (JSC::Heap::testAndClearMarked):
3741         (JSC::Heap::setMarked): Call directly into MarkedBlock instead of adding
3742         a layer of indirection through MarkedSpace.
3743
3744         (JSC::Heap::allocate): See above.
3745
3746         * heap/MarkedBlock.cpp:
3747         (JSC::MarkedBlock::create):
3748         (JSC::MarkedBlock::MarkedBlock):
3749         * heap/MarkedBlock.h: Changed Heap sub-objects to point to the heap.
3750
3751         * heap/MarkedSpace.cpp:
3752         (JSC::MarkedSpace::MarkedSpace):
3753         (JSC::MarkedSpace::allocateBlock):
3754         * heap/MarkedSpace.h:
3755         (JSC::MarkedSpace::allocate): Updated to match changes above.
3756
3757 2011-05-28  David Kilzer  <ddkilzer@apple.com>
3758
3759         BUILD FIX when building only the interpreter
3760
3761         Fixes the following compiler warning:
3762
3763             JavaScriptCore/runtime/JSGlobalData.cpp:462:6: error: no previous prototype for function 'releaseExecutableMemory' [-Werror,-Wmissing-prototypes,3]
3764              void releaseExecutableMemory(JSGlobalData& globalData)
3765                   ^
3766
3767         * jit/ExecutableAllocator.h: Moved declaration of
3768         JSC::releaseExecutableMemory().
3769
3770 2011-05-28  David Kilzer  <ddkilzer@apple.com>
3771
3772         BUILD FIX after r87527 with ENABLE(BRANCH_COMPACTION)
3773
3774         * assembler/LinkBuffer.h:
3775         (JSC::LinkBuffer::linkCode): Added missing argument.
3776
3777 2011-05-27  Geoffrey Garen  <ggaren@apple.com>
3778
3779         Reviewed by Oliver Hunt.
3780
3781         JS API is too aggressive about throwing exceptions for NULL get or set operations
3782         https://bugs.webkit.org/show_bug.cgi?id=61678
3783
3784         * API/JSCallbackObject.h: Changed our staticValueGetter to a regular
3785         function that returns a JSValue, so it can fail and still forward to
3786         normal property lookup.
3787
3788         * API/JSCallbackObjectFunctions.h:
3789         (JSC::::getOwnPropertySlot): Don't throw an exception when failing to
3790         access a static property -- just forward the access. This allows objects
3791         to observe get/set operations but still let the JS object manage lifetime.
3792
3793         (JSC::::put): Ditto.
3794
3795         (JSC::::getStaticValue): Same as JSCallbackObject.h.
3796
3797         * API/tests/testapi.c:
3798         (MyObject_set_nullGetForwardSet):
3799         * API/tests/testapi.js: Updated tests to reflect slightly less strict
3800         behavior, which matches headerdoc claims.
3801
3802 2011-05-27  Geoffrey Garen  <ggaren@apple.com>
3803
3804         Reviewed by Oliver Hunt.
3805
3806         Property caching is too aggressive for API objects
3807         https://bugs.webkit.org/show_bug.cgi?id=61677
3808
3809         * API/JSCallbackObject.h: Opt in to ProhibitsPropertyCaching, since our
3810         callback APIs allow the client to change its mind about our propertis at
3811         any time.
3812
3813         * API/tests/testapi.c:
3814         (PropertyCatchalls_getProperty):
3815         (PropertyCatchalls_setProperty):
3816         (PropertyCatchalls_getPropertyNames):
3817         (PropertyCatchalls_class):
3818         (main):
3819         * API/tests/testapi.js: Some tests for dynamic API objects.
3820
3821         * interpreter/Interpreter.cpp:
3822         (JSC::Interpreter::tryCachePutByID):
3823         (JSC::Interpreter::tryCacheGetByID):
3824         * jit/JITStubs.cpp:
3825         (JSC::JITThunks::tryCachePutByID):
3826         (JSC::JITThunks::tryCacheGetByID):
3827         (JSC::DEFINE_STUB_FUNCTION): Opt out of property caching if the client
3828         requires it.
3829
3830         * runtime/JSTypeInfo.h:
3831         (JSC::TypeInfo::TypeInfo):
3832         (JSC::TypeInfo::isFinal):
3833         (JSC::TypeInfo::prohibitsPropertyCaching):
3834         (JSC::TypeInfo::flags): Added a flag to track opting out of property
3835         caching. Fixed an "&&" vs "&" typo that was previously harmless, but
3836         is now harmful since m_flags2 can have more than one bit set.
3837
3838 2011-05-27  Stephanie Lewis  <slewis@apple.com>
3839
3840         Unreviewed.
3841
3842         Fix a typo in the order_file flag.
3843
3844         * Configurations/Base.xcconfig:
3845
3846 2011-05-27  Patrick Gansterer  <paroga@webkit.org>
3847
3848         Unreviewed. Build fix for !ENABLE(ASSEMBLER) after r87527.
3849
3850         * runtime/JSGlobalData.cpp:
3851         (JSGlobalData::JSGlobalData):
3852
3853 2011-05-27  Oliver Hunt  <oliver@apple.com>
3854
3855         Reviewed by Geoffrey Garen.
3856
3857         Add a few validity assertions to JSCallbackObject
3858         https://bugs.webkit.org/show_bug.cgi?id=61659
3859
3860         * API/JSCallbackObject.h:
3861         (JSC::JSCallbackObject::visitChildren):
3862
3863 2011-05-27  Oliver Hunt  <oliver@apple.com>
3864
3865         Build fix
3866
3867         * runtime/RegExpCache.cpp:
3868         (JSC::RegExpCache::invalidateCode):
3869
3870 2011-05-27  Oliver Hunt  <oliver@apple.com>
3871
3872         Reviewed by Geoffrey Garen.
3873
3874         Try to release unused executable memory when the FixedVMPool allocator is under pressure
3875         https://bugs.webkit.org/show_bug.cgi?id=61651
3876
3877         Rather than crashing when full the FixedVMPool allocator now returns a null
3878         allocation.  We replace the code that used to CRASH() on null allocations
3879         with logic that asks the provided globalData to release any executable memory
3880         that it can.  Currently this just means throwing away all regexp code, but
3881         in future we'll try to be more aggressive.
3882
3883         * assembler/ARMAssembler.cpp:
3884         (JSC::ARMAssembler::executableCopy):
3885         * assembler/ARMAssembler.h:
3886         * assembler/AssemblerBuffer.h:
3887         (JSC::AssemblerBuffer::executableCopy):
3888         * assembler/AssemblerBufferWithConstantPool.h:
3889         * assembler/LinkBuffer.h:
3890         (JSC::LinkBuffer::LinkBuffer):
3891         (JSC::LinkBuffer::linkCode):
3892         * assembler/MIPSAssembler.h:
3893         (JSC::MIPSAssembler::executableCopy):
3894         * assembler/SH4Assembler.h:
3895         (JSC::SH4Assembler::executableCopy):
3896         * assembler/X86Assembler.h:
3897         (JSC::X86Assembler::executableCopy):
3898         (JSC::X86Assembler::X86InstructionFormatter::executableCopy):
3899         * dfg/DFGJITCompiler.cpp:
3900         (JSC::DFG::JITCompiler::compileFunction):
3901         * jit/ExecutableAllocator.h:
3902         (JSC::ExecutablePool::create):
3903         (JSC::ExecutablePool::alloc):
3904         (JSC::ExecutableAllocator::ExecutableAllocator):
3905         (JSC::ExecutableAllocator::poolForSize):
3906         (JSC::ExecutablePool::ExecutablePool):
3907         (JSC::ExecutablePool::poolAllocate):
3908         * jit/ExecutableAllocatorFixedVMPool.cpp:
3909         (JSC::FixedVMPoolAllocator::alloc):
3910         * jit/JIT.cpp:
3911         (JSC::JIT::privateCompile):
3912         * jit/JITOpcodes.cpp:
3913         (JSC::JIT::privateCompileCTIMachineTrampolines):
3914         * jit/JITOpcodes32_64.cpp:
3915         (JSC::JIT::privateCompileCTIMachineTrampolines):
3916         (JSC::JIT::privateCompileCTINativeCall):
3917         * jit/JITPropertyAccess.cpp:
3918         (JSC::JIT::stringGetByValStubGenerator):
3919         (JSC::JIT::privateCompilePutByIdTransition):
3920         (JSC::JIT::privateCompilePatchGetArrayLength):
3921         (JSC::JIT::privateCompileGetByIdProto):
3922         (JSC::JIT::privateCompileGetByIdSelfList):
3923         (JSC::JIT::privateCompileGetByIdProtoList):
3924         (JSC::JIT::privateCompileGetByIdChainList):
3925         (JSC::JIT::privateCompileGetByIdChain):
3926         * jit/JITPropertyAccess32_64.cpp:
3927         (JSC::JIT::stringGetByValStubGenerator):
3928         (JSC::JIT::privateCompilePutByIdTransition):
3929         (JSC::JIT::privateCompilePatchGetArrayLength):
3930         (JSC::JIT::privateCompileGetByIdProto):
3931         (JSC::JIT::privateCompileGetByIdSelfList):
3932         (JSC::JIT::privateCompileGetByIdProtoList):
3933         (JSC::JIT::privateCompileGetByIdChainList):
3934         (JSC::JIT::privateCompileGetByIdChain):
3935         * jit/SpecializedThunkJIT.h:
3936         (JSC::SpecializedThunkJIT::finalize):
3937         * jit/ThunkGenerators.cpp:
3938         (JSC::charCodeAtThunkGenerator):
3939         (JSC::charAtThunkGenerator):
3940         (JSC::fromCharCodeThunkGenerator):
3941         (JSC::sqrtThunkGenerator):
3942         (JSC::powThunkGenerator):
3943         * runtime/JSGlobalData.cpp:
3944         (JSC::JSGlobalData::JSGlobalData):
3945         (JSC::JSGlobalData::releaseExecutableMemory):
3946         (JSC::releaseExecutableMemory):
3947         * runtime/JSGlobalData.h:
3948         * runtime/RegExpCache.cpp:
3949         (JSC::RegExpCache::invalidateCode):
3950         * runtime/RegExpCache.h:
3951         * yarr/YarrJIT.cpp:
3952         (JSC::Yarr::YarrGenerator::compile):
3953
3954 2011-05-26  Geoffrey Garen  <ggaren@apple.com>
3955
3956         Reviewed by Oliver Hunt.
3957
3958         Optimized ConservativeSet to avoid double-visiting objects
3959         https://bugs.webkit.org/show_bug.cgi?id=61592
3960         
3961         SunSpider thinks this might be a 1% speedup
3962
3963         * heap/ConservativeRoots.h:
3964         (JSC::ConservativeRoots::add): Use testAndClearMarked to avoid double-visiting
3965         an object.
3966
3967         * heap/Heap.h:
3968         (JSC::Heap::isMarked):
3969         (JSC::Heap::testAndSetMarked):
3970         (JSC::Heap::testAndClearMarked):
3971         (JSC::Heap::setMarked): Added testAndClearMarked. Changed argument type
3972         to void*, since clients want to ask questions about arbitrary pointers
3973         into the heap, even when they aren't known to be JSCells.
3974
3975         * heap/MarkedBlock.h:
3976         (JSC::MarkedBlock::testAndClearMarked):
3977         * heap/MarkedSpace.h:
3978         (JSC::MarkedSpace::isMarked):
3979         (JSC::MarkedSpace::testAndSetMarked):
3980         (JSC::MarkedSpace::testAndClearMarked):
3981         (JSC::MarkedSpace::setMarked):
3982         (JSC::MarkedSpace::contains): Ditto.
3983
3984         * wtf/Bitmap.h:
3985         (WTF::::testAndClear): New function for ConservativeRoots's inverted
3986         marking pass.
3987
3988 2011-05-27  Stephanie Lewis  <slewis@apple.com>
3989
3990         Rubber Stamped by Adam Roben.
3991
3992         Update Order Files.  Use -order_file flag since it can order more of the binary.
3993
3994         * Configurations/Base.xcconfig:
3995         * JavaScriptCore.order:
3996
3997 2011-05-26  Geoffrey Garen  <ggaren@apple.com>
3998
3999         Reviewed by Oliver Hunt.
4000
4001         Renamed heapRootMarker to heapRootVisitor to match its class name
4002         https://bugs.webkit.org/show_bug.cgi?id=61584
4003
4004         * heap/Heap.cpp:
4005         (JSC::Heap::markProtectedObjects):
4006         (JSC::Heap::markTempSortVectors):
4007         (JSC::Heap::markRoots):
4008
4009 2011-05-26  Geoffrey Garen  <ggaren@apple.com>
4010
4011         Reviewed by Oliver Hunt.
4012
4013         Removed some interdependency between Heap and SmallStrings by simplifying
4014         the SmallStrings lifetime model
4015         https://bugs.webkit.org/show_bug.cgi?id=61579
4016         
4017         SunSpider reports no change.
4018         
4019         Using Weak<T> could accomplish this too, but we're not sure it will give
4020         us the performance we need. This is a first step, and it accomplishes
4021         most of the value of using Weak<T>.
4022
4023         * heap/Heap.cpp:
4024         (JSC::Heap::destroy):
4025         (JSC::Heap::markRoots):
4026         (JSC::Heap::reset): Finalize small strings just like other weak handles.
4027
4028         * runtime/SmallStrings.cpp:
4029         (JSC::finalize):
4030         (JSC::SmallStrings::finalizeSmallStrings):
4031         * runtime/SmallStrings.h: Make all small strings trivially weak, instead
4032         of having an "all for one, one for all" memory model.
4033
4034 2011-05-26  Oliver Hunt  <oliver@apple.com>
4035
4036         Reviewed by Geoffrey Garen.
4037
4038         Make RegExpCache a weak map
4039         https://bugs.webkit.org/show_bug.cgi?id=61554
4040
4041         Switch to a weak map for the regexp cache, and hide that
4042         behaviour behind RegExp::create.
4043
4044         When a RegExp is compiled it attempts to add itself to
4045         the "strong" cache.  This cache is a simple round-robin
4046         buffer as was the old strong cache.  Happily this can
4047         be smaller than the old strong cache as RegExps are only
4048         added when they're compiled so it is under less pressure
4049         to evict.
4050
4051         * bytecompiler/NodesCodegen.cpp:
4052         (JSC::RegExpNode::emitBytecode):
4053         * runtime/RegExp.cpp:
4054         (JSC::RegExp::RegExp):
4055         (JSC::RegExp::create):
4056         (JSC::RegExp::match):
4057         * runtime/RegExp.h:
4058         (JSC::RegExp::gcShouldInvalidateCode):
4059         (JSC::RegExp::hasCode):
4060         (JSC::RegExp::key):
4061         * runtime/RegExpCache.cpp:
4062         (JSC::RegExpCache::lookupOrCreate):
4063         (JSC::RegExpCache::RegExpCache):
4064         (JSC::RegExpCache::isReachableFromOpaqueRoots):
4065         (JSC::RegExpCache::finalize):