2009-05-17 Jan Michael Alonzo <jmalonzo@webkit.org>
[WebKit-https.git] / JavaScriptCore / ChangeLog
1 2009-05-17  Jan Michael Alonzo  <jmalonzo@webkit.org>
2
3         Reviewed by Xan Lopez.
4
5         [Gtk] Various autotools build refactoring and fixes
6         https://bugs.webkit.org/show_bug.cgi?id=25286
7
8         Add JavaScriptCore/ to JSC include path only since it's not
9         required when building WebCore.
10
11         * GNUmakefile.am:
12
13 2009-05-17  Steve Falkenburg  <sfalken@apple.com>
14
15         Windows build fix
16
17         * JavaScriptCore.vcproj/JavaScriptCore.make:
18         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
19
20 2009-05-15  Gavin Barraclough  <barraclough@apple.com>
21
22         Reviewed by Oliver Hunt.
23
24         Looking like MSVC doesn't like static variables in inline methods?
25         Make the state of the SSE2 check a static variable on the class
26         MacroAssemblerX86Common as a speculative build fix for Windows.
27
28         * assembler/MacroAssemblerX86Common.h:
29         (JSC::MacroAssemblerX86Common::convertInt32ToDouble):
30         (JSC::MacroAssemblerX86Common::branchDouble):
31         (JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32):
32         (JSC::MacroAssemblerX86Common::isSSE2Present):
33         (JSC::MacroAssemblerX86Common::):
34         * jit/JIT.cpp:
35
36 2009-05-15  Adam Roben  <aroben@apple.com>
37
38         Add some assembler headers to JavaScriptCore.vcproj
39
40         This is just a convenience for Windows developers.
41
42         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
43
44 2009-05-15  Gavin Barraclough  <barraclough@apple.com>
45
46         Reviewed by Oliver Hunt.
47
48         Add FP support to the MacroAssembler, port JITArithmetic over to make use of this. Also add
49         API to determine whether FP support is available 'MacroAssembler::supportsFloatingPoint()',
50         FP is presently only supported on SSE2 platforms, not x87.  On platforms where a suitable
51         hardware FPU is not available 'supportsFloatingPoint()' may simply return false, and all
52         other methods ASSERT_NOT_REACHED().
53
54         * assembler/AbstractMacroAssembler.h:
55         * assembler/MacroAssemblerX86.h:
56         (JSC::MacroAssemblerX86::MacroAssemblerX86):
57         (JSC::MacroAssemblerX86::branch32):
58         (JSC::MacroAssemblerX86::branchPtrWithPatch):
59         (JSC::MacroAssemblerX86::supportsFloatingPoint):
60         * assembler/MacroAssemblerX86Common.h:
61         (JSC::MacroAssemblerX86Common::):
62         (JSC::MacroAssemblerX86Common::loadDouble):
63         (JSC::MacroAssemblerX86Common::storeDouble):
64         (JSC::MacroAssemblerX86Common::addDouble):
65         (JSC::MacroAssemblerX86Common::subDouble):
66         (JSC::MacroAssemblerX86Common::mulDouble):
67         (JSC::MacroAssemblerX86Common::convertInt32ToDouble):
68         (JSC::MacroAssemblerX86Common::branchDouble):
69         (JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32):
70         (JSC::MacroAssemblerX86Common::branch32):
71         (JSC::MacroAssemblerX86Common::branch16):
72         (JSC::MacroAssemblerX86Common::branchTest32):
73         (JSC::MacroAssemblerX86Common::branchAdd32):
74         (JSC::MacroAssemblerX86Common::branchMul32):
75         (JSC::MacroAssemblerX86Common::branchSub32):
76         (JSC::MacroAssemblerX86Common::set32):
77         (JSC::MacroAssemblerX86Common::setTest32):
78         (JSC::MacroAssemblerX86Common::x86Condition):
79         (JSC::MacroAssemblerX86Common::isSSE2Present):
80         * assembler/MacroAssemblerX86_64.h:
81         (JSC::MacroAssemblerX86_64::movePtrToDouble):
82         (JSC::MacroAssemblerX86_64::moveDoubleToPtr):
83         (JSC::MacroAssemblerX86_64::setPtr):
84         (JSC::MacroAssemblerX86_64::branchPtr):
85         (JSC::MacroAssemblerX86_64::branchTestPtr):
86         (JSC::MacroAssemblerX86_64::branchAddPtr):
87         (JSC::MacroAssemblerX86_64::branchSubPtr):
88         (JSC::MacroAssemblerX86_64::supportsFloatingPoint):
89         * assembler/X86Assembler.h:
90         * jit/JIT.cpp:
91         (JSC::JIT::JIT):
92         * jit/JIT.h:
93         * jit/JITArithmetic.cpp:
94         (JSC::JIT::emit_op_rshift):
95         (JSC::JIT::emitSlow_op_rshift):
96         (JSC::JIT::emitSlow_op_jnless):
97         (JSC::JIT::emitSlow_op_jnlesseq):
98         (JSC::JIT::compileBinaryArithOp):
99         (JSC::JIT::compileBinaryArithOpSlowCase):
100         (JSC::JIT::emit_op_add):
101         (JSC::JIT::emitSlow_op_add):
102         (JSC::JIT::emit_op_mul):
103         (JSC::JIT::emitSlow_op_mul):
104         * jit/JITPropertyAccess.cpp:
105         (JSC::JIT::privateCompilePutByIdTransition):
106
107 2009-05-15  Francisco Tolmasky  <francisco@280north.com>
108
109         BUG 25467: JavaScript debugger should use function.displayName as the function's name in the call stack
110         <https://bugs.webkit.org/show_bug.cgi?id=25467>
111         
112         Reviewed by Adam Roben.
113
114         * JavaScriptCore.exp: Added calculatedFunctionName
115         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Added calculatedFunctionName
116         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Added calculatedFunctionName
117         * debugger/DebuggerCallFrame.cpp: Added calculatedFunctionName to match existing one in ProfileNode.
118         (JSC::DebuggerCallFrame::calculatedFunctionName):
119         * debugger/DebuggerCallFrame.h: Added calculatedFunctionName to match existing one in ProfileNode.
120
121 2009-05-14  Gavin Barraclough  <barraclough@apple.com>
122
123         Build fix, not reviewed.
124
125         Quick fixes for JIT builds with OPTIMIZE flags disabled.
126
127         * jit/JITCall.cpp:
128         (JSC::JIT::compileOpCall):
129         (JSC::JIT::compileOpCallSlowCase):
130         * jit/JITPropertyAccess.cpp:
131         (JSC::JIT::compilePutByIdHotPath):
132
133 2009-05-14  Steve Falkenburg  <sfalken@apple.com>
134
135         Back out incorrect Windows build fix
136
137         * JavaScriptCore.vcproj/JavaScriptCore.make:
138         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
139
140 2009-05-14  Steve Falkenburg  <sfalken@apple.com>
141
142         Windows build fix
143
144         * JavaScriptCore.vcproj/JavaScriptCore.make:
145         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
146
147 2009-05-14  Adam Roben  <aroben@apple.com>
148
149         Windows jsc build fix
150
151         r43648 modified jsc.vcproj's post-build event not to try to copy files
152         that aren't present. Then r43661 mistakenly un-did that modification.
153         This patch restores the modification from r43648, but puts the code in
154         jscCommon.vsprops (where it should have been added in r43648).
155
156         * JavaScriptCore.vcproj/jsc/jsc.vcproj: Restored empty
157         VCPostBuildEventTool tags.
158         * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Modified the post-build
159         event command line to match the one in jsc.vcproj from r43648.
160
161 2009-05-14  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
162
163         Reviewed by Darin Adler.
164
165         https://bugs.webkit.org/show_bug.cgi?id=25325
166
167         Make sure pthread_self() is declared before it gets called in Collector.cpp
168
169         * runtime/Collector.cpp: Include pthread.h in most Unix-like platforms
170         (not just for OPENBSD)
171
172 2009-05-14  Mark Rowe  <mrowe@apple.com>
173
174         Reviewed by Oliver Hunt.
175
176         Fix <https://bugs.webkit.org/show_bug.cgi?id=25785>.
177         Bug 25785: Segfault in mark when using JSObjectMakeConstructor
178
179         * API/JSObjectRef.cpp:
180         (JSObjectMakeConstructor): OpaqueJSClass::prototype can return 0.  We need to use the default object prototype when it does.
181         * API/tests/testapi.c:
182         (main): Add a test case.
183         * runtime/JSObject.h:
184         (JSC::JSObject::putDirect): Add a clearer assertion for a null value.  The assertion on the next line does catch this,
185         but the cause of the failure is not clear from the assertion itself.
186
187 2009-05-14  Mark Rowe  <mrowe@apple.com>
188
189         Rubber-stamped by Darin Adler.
190
191         <rdar://problem/6681868> When building with Xcode 3.1.3 should be using gcc 4.2
192
193         The meaning of XCODE_VERSION_ACTUAL is more sensible in newer versions of Xcode.
194         Update our logic to select the compiler version to use the more appropriate XCODE_VERSION_MINOR
195         if the version of Xcode supports it, and fall back to XCODE_VERSION_ACTUAL if not.
196
197         * Configurations/Base.xcconfig:
198
199 2009-05-14  Gavin Barraclough  <barraclough@apple.com>
200
201         Reviewed by Geoff Garen.
202
203         Checking register file bounds should be a ptr comparison (m_end is a Register*).
204         Also, the compare should be unsigned, pointers don'ts go negative.
205
206         * jit/JIT.cpp:
207         (JSC::JIT::privateCompile):
208
209 2009-05-13  Gavin Barraclough  <barraclough@apple.com>
210
211         Reviewed by Oliver Hunt.
212
213         Fix <rdar://problem/6882919> REGRESSION: page at Metroauto site crashes in cti_op_loop_if_less (25730)
214
215         op_loop_if_less (imm < op) was loading op into regT1, but in the slow path spills regT0.
216         This leads to bad happen.
217
218         * jit/JITOpcodes.cpp:
219         (JSC::JIT::emit_op_loop_if_less):
220         (JSC::JIT::emitSlow_op_loop_if_less):
221
222 2009-05-13  Dmitry Titov  <dimich@chromium.org>
223
224         Rubber-stamped by Mark Rowe.
225
226         https://bugs.webkit.org/show_bug.cgi?id=25746
227         Revert http://trac.webkit.org/changeset/43507 which caused crash in PPC nightlies with Safari 4.
228
229         * JavaScriptCore.exp:
230         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
231         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
232         * bytecode/SamplingTool.cpp:
233         (JSC::SamplingThread::start):
234         (JSC::SamplingThread::stop):
235         * bytecode/SamplingTool.h:
236         * wtf/CrossThreadRefCounted.h:
237         (WTF::CrossThreadRefCounted::CrossThreadRefCounted):
238         (WTF::::ref):
239         (WTF::::deref):
240         * wtf/Threading.h:
241         * wtf/ThreadingNone.cpp:
242         * wtf/ThreadingPthreads.cpp:
243         (WTF::threadMapMutex):
244         (WTF::initializeThreading):
245         (WTF::threadMap):
246         (WTF::identifierByPthreadHandle):
247         (WTF::establishIdentifierForPthreadHandle):
248         (WTF::pthreadHandleForIdentifier):
249         (WTF::clearPthreadHandleForIdentifier):
250         (WTF::createThreadInternal):
251         (WTF::waitForThreadCompletion):
252         (WTF::detachThread):
253         (WTF::currentThread):
254         * wtf/ThreadingWin.cpp:
255         (WTF::threadMapMutex):
256         (WTF::initializeThreading):
257         (WTF::threadMap):
258         (WTF::storeThreadHandleByIdentifier):
259         (WTF::threadHandleForIdentifier):
260         (WTF::clearThreadHandleForIdentifier):
261         (WTF::createThreadInternal):
262         (WTF::waitForThreadCompletion):
263         (WTF::detachThread):
264         (WTF::currentThread):
265         * wtf/gtk/ThreadingGtk.cpp:
266         (WTF::threadMapMutex):
267         (WTF::initializeThreading):
268         (WTF::threadMap):
269         (WTF::identifierByGthreadHandle):
270         (WTF::establishIdentifierForThread):
271         (WTF::threadForIdentifier):
272         (WTF::clearThreadForIdentifier):
273         (WTF::createThreadInternal):
274         (WTF::waitForThreadCompletion):
275         (WTF::currentThread):
276         * wtf/qt/ThreadingQt.cpp:
277         (WTF::threadMapMutex):
278         (WTF::threadMap):
279         (WTF::identifierByQthreadHandle):
280         (WTF::establishIdentifierForThread):
281         (WTF::clearThreadForIdentifier):
282         (WTF::threadForIdentifier):
283         (WTF::initializeThreading):
284         (WTF::createThreadInternal):
285         (WTF::waitForThreadCompletion):
286         (WTF::currentThread):
287
288 2009-05-13  Darin Adler  <darin@apple.com>
289
290         Revert the parser arena change. It was a slowdown, not a speedup.
291         Better luck next time (I'll break it up into pieces).
292
293 2009-05-13  Darin Adler  <darin@apple.com>
294
295         Tiger build fix.
296
297         * parser/Grammar.y: Add back empty code blocks, needed by older
298         versions of bison on certain rules.
299
300 2009-05-13  Steve Falkenburg  <sfalken@apple.com>
301
302         Windows build fix.
303
304         * JavaScriptCore.vcproj/jsc/jsc.vcproj:
305
306 2009-05-13  Adam Roben  <aroben@apple.com>
307
308         Windows build fixes after r43642
309
310         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
311         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
312         Updated.
313
314         * debugger/Debugger.cpp:
315         * runtime/ArrayConstructor.cpp:
316         * runtime/JSArray.cpp:
317         * runtime/RegExp.cpp:
318         * runtime/RegExpConstructor.cpp:
319         * runtime/RegExpPrototype.cpp:
320         * runtime/StringPrototype.cpp:
321         Added missing #includes.
322
323 2009-05-13  Darin Adler  <darin@apple.com>
324
325         Reviewed by Cameron Zwarich.
326
327         Bug 25674: syntax tree nodes should use arena allocation
328         https://bugs.webkit.org/show_bug.cgi?id=25674
329
330         Step 3: Add some actual arena allocation. About 1% SunSpider speedup.
331
332         * JavaScriptCore.exp: Updated.
333
334         * bytecompiler/BytecodeGenerator.cpp:
335         (JSC::BytecodeGenerator::BytecodeGenerator): Updated since VarStack
336         contains const Identifier* now.
337         (JSC::BytecodeGenerator::emitPushNewScope): Updated to take a const
338         Identifier&.
339         * bytecompiler/BytecodeGenerator.h: Ditto
340
341         * bytecompiler/SegmentedVector.h: Added isEmpty.
342
343         * debugger/Debugger.cpp:
344         (JSC::Debugger::recompileAllJSFunctions): Moved this function here from
345         WebCore so WebCore doesn't need the details of FunctionBodyNode.
346         * debugger/Debugger.h: Ditto.
347
348         * interpreter/Interpreter.cpp:
349         (JSC::Interpreter::execute): Updated since VarStack contains const
350         Identifier* now.
351
352         * jit/JITStubs.cpp:
353         (JSC::JITStubs::cti_vm_lazyLinkCall): Call isHostFunction on the body
354         rather than on the function object, since we can't easily have inlined
355         access to the FunctionBodyNode in JSFunction.h since WebCore needs
356         access to that header.
357         (JSC::JITStubs::cti_op_construct_JSConstruct): Ditto.
358         * profiler/Profiler.cpp:
359         (JSC::Profiler::createCallIdentifier): Ditto.
360
361         * parser/Grammar.y: Use JSGlobalData* to pass the global data pointer
362         around whenever possible instead of using void*. Changed
363         SET_EXCEPTION_LOCATION from a macro to an inline function. Marked
364         the structure-creating functions inline. Changed the VarStack to use
365         identifier pointers instead of actual identifiers. This takes
366         advantage of the fact that all identifier pointers come from the
367         arena and avoids reference count churn. Changed Identifier* to
368         const Identifier* to make sure we don't modify any by accident.
369         Used identifiers for regular expression strings too, using the new
370         scanRegExp that has out parameters instead of the old one that relied
371         on side effects in the Lexer. Move the creation of numeric identifiers
372         out of this file and into the PropertyNode constructor.
373
374         * parser/Lexer.cpp:
375         (JSC::Lexer::setCode): Pass in ParserArena, used for identifiers.
376         (JSC::Lexer::makeIdentifier): Changed return type to const Identifier*
377         and changed to call ParserArena.
378         (JSC::Lexer::scanRegExp): Added out arguments that are const Identifier*
379         as well as a prefix character argument so we can handle the /= case
380         without a string append.
381         (JSC::Lexer::skipRegExp): Added. Skips a regular expression without
382         allocating Identifier objects.
383         (JSC::Lexer::clear): Removed the code to manage m_identifiers, m_pattern,
384         and m_flags, and added code to set m_arena to 0.
385         * parser/Lexer.h: Updated for changes above.
386
387         * parser/NodeConstructors.h:
388         (JSC::ParserArenaFreeable::operator new): Added. Calls allocateFreeable
389         on the arena.
390         (JSC::ParserArenaDeletable::operator new): Changed to call the
391         allocateDeletable function on the arena instead of deleteWithArena.
392         (JSC::RegExpNode::RegExpNode): Changed arguments to Identifier instead
393         of UString since these come from the parser which makes identifiers.
394         (JSC::PropertyNode::PropertyNode): Added new constructor that makes
395         numeric identifiers. Some day we might want to optimize this for
396         integers so it doesn't create a string for each one.
397         (JSC::ContinueNode::ContinueNode): Initialize m_ident to nullIdentifier
398         since it's now a const Identifier& so it can't be left uninitialized.
399         (JSC::BreakNode::BreakNode): Ditto.
400         (JSC::CaseClauseNode::CaseClauseNode): Updated to use SourceElements*
401         to keep track of the statements rather than a separate statement vector.
402         (JSC::BlockNode::BlockNode): Ditto.
403         (JSC::ForInNode::ForInNode): Initialize m_ident to nullIdentifier.
404
405         * parser/Nodes.cpp: Moved the comment explaining emitBytecode in here.
406         It seemed strangely out of place in the header.
407         (JSC::ThrowableExpressionData::emitThrowError): Added an overload for
408         UString as well as Identifier.
409         (JSC::SourceElements::singleStatement): Added.
410         (JSC::SourceElements::lastStatement): Added.
411         (JSC::RegExpNode::emitBytecode): Updated since the pattern and flags
412         are now Identifier instead of UString. Also changed the throwError code
413         to use the substitution mechanism instead of doing a string append.
414         (JSC::SourceElements::emitBytecode): Added. Replaces the old
415         statementListEmitCode function, since we now keep the SourceElements
416         objects around.
417         (JSC::BlockNode::lastStatement): Added.
418         (JSC::BlockNode::emitBytecode): Changed to use emitBytecode instead of
419         statementListEmitCode.
420         (JSC::CaseClauseNode::emitBytecode): Added.
421         (JSC::CaseBlockNode::emitBytecodeForBlock): Changed to use emitBytecode
422         instead of statementListEmitCode.
423         (JSC::ScopeNodeData::ScopeNodeData): Changed to store the
424         SourceElements* instead of using releaseContentsIntoVector.
425         (JSC::ScopeNode::emitStatementsBytecode): Added.
426         (JSC::ScopeNode::singleStatement): Added.
427         (JSC::ProgramNode::emitBytecode): Call emitStatementsBytecode instead
428         of statementListEmitCode.
429         (JSC::EvalNode::emitBytecode): Ditto.
430         (JSC::EvalNode::generateBytecode): Removed code to clear the children
431         vector. This optimization is no longer possible since everything is in
432         a single arena.
433         (JSC::FunctionBodyNode::emitBytecode): Call emitStatementsBytecode
434         insetad of statementListEmitCode and check for the return node using
435         the new functions.
436
437         * parser/Nodes.h: Changed VarStack to store const Identifier* instead
438         of Identifier and rely on the arena to control lifetime. Added a new
439         ParserArenaFreeable class. Made ParserArenaDeletable inherit from
440         FastAllocBase instead of having its own operator new. Base the Node
441         class on ParserArenaFreeable. Changed the various Node classes
442         to use const Identifier& instead of Identifier to avoid the need to
443         call their destructors and allow them to function as "freeable" in the
444         arena. Removed extraneous JSC_FAST_CALL on definitions of inline functions.
445         Changed ElementNode, PropertyNode, ArgumentsNode, ParameterNode,
446         CaseClauseNode, ClauseListNode, and CaseBlockNode to use ParserArenaFreeable
447         as a base class since they do not descend from Node. Eliminated the
448         StatementVector type and instead have various classes use SourceElements*
449         instead of StatementVector. This prevents those classes from having th
450         use ParserArenaDeletable to make sure the vector destructor is called.
451
452         * parser/Parser.cpp:
453         (JSC::Parser::parse): Pass the arena to the lexer.
454
455         * parser/Parser.h: Added an include of ParserArena.h, which is no longer
456         included by Nodes.h.
457
458         * parser/ParserArena.cpp:
459         (JSC::ParserArena::ParserArena): Added. Initializes the new members,
460         m_freeableMemory, m_freeablePoolEnd, and m_identifiers.
461         (JSC::ParserArena::freeablePool): Added. Computes the pool pointer,
462         since we store only the current pointer and the end of pool pointer.
463         (JSC::ParserArena::deallocateObjects): Added. Contains the common
464         memory-deallocation logic used by both the destructor and the
465         reset function.
466         (JSC::ParserArena::~ParserArena): Changed to call deallocateObjects.
467         (JSC::ParserArena::reset): Ditto. Also added code to zero out the
468         new structures, and switched to use clear() instead of shrink(0) since
469         we don't really reuse arenas.
470         (JSC::ParserArena::makeNumericIdentifier): Added.
471         (JSC::ParserArena::allocateFreeablePool): Added. Used when the pool
472         is empty.
473         (JSC::ParserArena::isEmpty): Added. No longer inline, which is fine
474         since this is used only for assertions at the moment.
475
476         * parser/ParserArena.h: Added an actual arena of "freeable" objects,
477         ones that don't need destructors to be called. Also added the segmented
478         vector of identifiers that used to be in the Lexer.
479
480         * runtime/FunctionConstructor.cpp:
481         (JSC::extractFunctionBody): Use singleStatement function rather than
482         getting at a StatementVector.
483
484         * runtime/FunctionPrototype.cpp:
485         (JSC::functionProtoFuncToString): Call isHostFunction on the body
486         rather than the function object.
487
488         * runtime/JSFunction.cpp:
489         (JSC::JSFunction::JSFunction): Moved the structure version of this in
490         here from the header. It's not hot enough that it needs to be inlined.
491         (JSC::JSFunction::isHostFunction): Moved this in here from the header.
492         It's now a helper to be used only within the class.
493         (JSC::JSFunction::setBody): Moved this in here. It's not hot enough that
494         it needs to be inlined, and we want to be able to compile the header
495         without the definition of FunctionBodyNode.
496
497         * runtime/JSFunction.h: Eliminated the include of "Nodes.h". This was
498         exposing too much JavaScriptCore dependency to WebCore. Because of this
499         change and some changes made to WebCore, we could now export a lot fewer
500         headers from JavaScriptCore, but I have not done that yet in this check-in.
501         Made a couple functions non-inline. Removes some isHostFunction() assertions.
502         
503         * wtf/FastAllocBase.h: Added the conventional using statements we use in
504         WTF so we can use identifiers from the WTF namespace without explicit
505         namespace qualification or namespace directive. This is the usual WTF style,
506         although it's unconventional in the C++ world. We use the namespace primarily
507         for link-time disambiguation, not compile-time.
508
509         * wtf/FastMalloc.cpp: Fixed an incorrect comment.
510
511 2009-05-13  Xan Lopez  <xlopez@igalia.com>
512
513         Unreviewed build fix: add JITStubCall.h to files list.
514
515         * GNUmakefile.am:
516
517 2009-05-13  Ariya Hidayat  <ariya.hidayat@nokia.com>
518
519         Unreviewed build fix, as suggested by Yael Aharon <yael.aharon@nokia.com>.
520
521         * wtf/qt/ThreadingQt.cpp:
522         (WTF::waitForThreadCompletion): renamed IsValid to isValid.
523
524 2009-05-13  Jan Michael Alonzo  <jmalonzo@webkit.org>
525
526         Revert r43562 - [Gtk] WTF_USE_JSC is already defined in
527         WebCore/config.h.
528
529         * wtf/Platform.h:
530
531 2009-05-12  Gavin Barraclough  <barraclough@apple.com>
532
533         Reviewed by Oliver Hunt.
534
535         Add SamplingCounter tool to provide a simple mechanism for counting events in JSC
536         (enabled using ENABLE(SAMPLING_COUNTERS)).  To count events within a single function
537         use the class 'SamplingCounter', where the counter may be incremented from multiple
538         functions 'GlobalSamplingCounter' may be convenient; all other counters (stack or
539         heap allocated, rather than statically declared) should use the DeletableSamplingCounter.
540         Further description of these classes is provided alongside their definition in 
541         SamplingTool.h.
542
543         Counters may be incremented from c++ by calling the 'count()' method on the counter,
544         or may be incremented by JIT code by using the 'emitCount()' method within the JIT.
545
546         This patch also fixes CODEBLOCK_SAMPLING, which was missing a null pointer check.
547
548         * JavaScriptCore.exp:
549         * assembler/MacroAssemblerX86.h:
550         (JSC::MacroAssemblerX86::addWithCarry32):
551         (JSC::MacroAssemblerX86::and32):
552         (JSC::MacroAssemblerX86::or32):
553         * assembler/MacroAssemblerX86Common.h:
554         (JSC::MacroAssemblerX86Common::and32):
555         (JSC::MacroAssemblerX86Common::or32):
556         * assembler/MacroAssemblerX86_64.h:
557         (JSC::MacroAssemblerX86_64::and32):
558         (JSC::MacroAssemblerX86_64::or32):
559         (JSC::MacroAssemblerX86_64::addPtr):
560         * assembler/X86Assembler.h:
561         (JSC::X86Assembler::):
562         (JSC::X86Assembler::adcl_im):
563         (JSC::X86Assembler::addq_im):
564         (JSC::X86Assembler::andl_im):
565         (JSC::X86Assembler::orl_im):
566         * bytecode/SamplingTool.cpp:
567         (JSC::AbstractSamplingCounter::dump):
568         * bytecode/SamplingTool.h:
569         (JSC::AbstractSamplingCounter::count):
570         (JSC::GlobalSamplingCounter::name):
571         (JSC::SamplingCounter::SamplingCounter):
572         * jit/JIT.h:
573         * jit/JITCall.cpp:
574         (JSC::):
575         * jit/JITInlineMethods.h:
576         (JSC::JIT::setSamplingFlag):
577         (JSC::JIT::clearSamplingFlag):
578         (JSC::JIT::emitCount):
579         * jsc.cpp:
580         (runWithScripts):
581         * parser/Nodes.cpp:
582         (JSC::ScopeNode::ScopeNode):
583         * wtf/Platform.h:
584
585 2009-05-13  Steve Falkenburg  <sfalken@apple.com>
586
587         Windows build fix.
588
589         * JavaScriptCore.vcproj/JavaScriptCore.make:
590
591 2009-05-12  Steve Falkenburg  <sfalken@apple.com>
592
593         Windows build fix.
594
595         * JavaScriptCore.vcproj/JavaScriptCore.make:
596
597 2009-05-12  Oliver Hunt  <oliver@apple.com>
598
599         Reviewed by Gavin Barraclough.
600
601         <rdar://problem/6881457> Crash occurs at JSC::Interpreter::execute() when loading http://www.sears.com
602
603         We created the arguments objects before an op_push_scope but not
604         before op_push_new_scope, this meant a null arguments object could
605         be resolved inside catch blocks.
606
607         * bytecompiler/BytecodeGenerator.cpp:
608         (JSC::BytecodeGenerator::emitPushNewScope):
609
610 2009-05-12  Oliver Hunt  <oliver@apple.com>
611
612         Reviewed by Gavin Barraclough.
613
614         <rdar://problem/6879881> Crash occurs at JSC::JSActivation::mark() when loading http://www.monster.com; http://www.cnet.com
615         <https://bugs.webkit.org/show_bug.cgi?id=25736> Crash loading www.google.dk/ig (and other igoogle's as well)
616
617         Following on from the lazy arguments creation patch, it's now
618         possible for an activation to to have a null register in the callframe
619         so we can't just blindly mark the local registers in an activation,
620         and must null check first instead.
621
622         * API/tests/testapi.c:
623         (functionGC):
624         * API/tests/testapi.js:
625         (bludgeonArguments.return.g):
626         (bludgeonArguments):
627         * runtime/JSActivation.cpp:
628         (JSC::JSActivation::mark):
629
630 2009-05-12  Gavin Barraclough  <barraclough@apple.com>
631
632         Rubber stamped by Geoff Garen.
633
634         WTF_USE_CTI_REPATCH_PIC is no longer used, remove.
635
636         * jit/JIT.h:
637         * jit/JITStubCall.h:
638
639 2009-05-12  Gavin Barraclough  <barraclough@apple.com>
640
641         Reviewed by Maciej Stachowiak.
642
643         We've run into some problems where changing the size of the class JIT leads to
644         performance fluctuations.  Try forcing alignment in an attempt to stabalize this.
645
646         * jit/JIT.h:
647
648 2009-05-12  Kevin Ollivier  <kevino@theolliviers.com>
649
650         wx build fix. Add ParserArena.cpp to the build.
651
652         * JavaScriptCoreSources.bkl:
653
654 2009-05-12  Oliver Hunt  <oliver@apple.com>
655
656         Reviewed by Geoff Garen.
657
658         Unsigned underflow on 64bit cannot be treated as a negative number
659
660         This code included some placeswhere we deliberately create negative offsets
661         from unsigned values, on 32bit this is "safe", but in 64bit builds much
662         badness occurs. Solution is to use signed types as nature intended.
663
664         * jit/JITStubs.cpp:
665         (JSC::JITStubs::cti_op_load_varargs):
666
667 2009-05-12  Jan Michael Alonzo  <jmalonzo@webkit.org>
668
669         Reviewed by Holger Freyther.
670
671         [Gtk] Various autotools build refactoring and fixes
672         https://bugs.webkit.org/show_bug.cgi?id=25286
673
674         Define WTF_USE_JSC for the Gtk port.
675
676         * wtf/Platform.h:
677
678 2009-05-12  Maciej Stachowiak  <mjs@apple.com>
679
680         Reviewed by Oliver Hunt.
681         
682         - allow all of strictEqual to be inlined into cti_op_stricteq once again
683         
684         We had this optimization once but accidentally lost it at some point.
685
686         * runtime/Operations.h:
687         (JSC::JSValue::strictEqualSlowCaseInline):
688         (JSC::JSValue::strictEqual):
689
690 2009-05-12  Gavin Barraclough  <barraclough@apple.com>
691
692         Reviewed by Oliver Hunt.
693
694         instanceof should throw if the constructor being tested does not implement
695         'HasInstance" (i.e. is a function).  Instead we were returning false.
696
697         * interpreter/Interpreter.cpp:
698         (JSC::isInvalidParamForIn):
699         (JSC::isInvalidParamForInstanceOf):
700         (JSC::Interpreter::privateExecute):
701         * jit/JITStubs.cpp:
702         (JSC::JITStubs::cti_op_instanceof):
703         * tests/mozilla/ecma_2/instanceof/instanceof-003.js:
704             Fix broken test case.
705         * tests/mozilla/ecma_2/instanceof/regress-7635.js:
706             Remove broken test case (was an exact duplicate of a test in instanceof-003.js).
707
708 2009-05-12  Oliver Hunt  <oliver@apple.com>
709
710         Reviewed by Gavin Barraclough.
711
712         Improve function call forwarding performance
713
714         Make creation of the Arguments object occur lazily, so it
715         is not necessarily created for every function that references
716         it.  Then add logic to Function.apply to allow it to avoid
717         allocating the Arguments object at all.  Helps a lot with
718         the function forwarding/binding logic in jQuery, Prototype,
719         and numerous other JS libraries.
720
721         * bytecode/CodeBlock.cpp:
722         (JSC::CodeBlock::dump):
723         * bytecode/Opcode.h:
724         * bytecompiler/BytecodeGenerator.cpp:
725         (JSC::BytecodeGenerator::BytecodeGenerator):
726         (JSC::BytecodeGenerator::registerFor):
727         (JSC::BytecodeGenerator::willResolveToArguments):
728         (JSC::BytecodeGenerator::uncheckedRegisterForArguments):
729         (JSC::BytecodeGenerator::createArgumentsIfNecessary):
730         (JSC::BytecodeGenerator::emitCallEval):
731         (JSC::BytecodeGenerator::emitPushScope):
732         * bytecompiler/BytecodeGenerator.h:
733         * interpreter/Interpreter.cpp:
734         (JSC::Interpreter::privateExecute):
735         (JSC::Interpreter::retrieveArguments):
736         * jit/JIT.cpp:
737         (JSC::JIT::privateCompileMainPass):
738         * jit/JIT.h:
739         * jit/JITOpcodes.cpp:
740         (JSC::JIT::emit_op_create_arguments):
741         (JSC::JIT::emit_op_init_arguments):
742         * jit/JITStubs.cpp:
743         (JSC::JITStubs::cti_op_tear_off_arguments):
744         (JSC::JITStubs::cti_op_load_varargs):
745         * parser/Nodes.cpp:
746         (JSC::ApplyFunctionCallDotNode::emitBytecode):
747
748 2009-05-11  Gavin Barraclough  <barraclough@apple.com>
749
750         Reviewed by Oliver Hunt.
751
752         Enable use of SamplingFlags directly from JIT code.
753
754         * bytecode/SamplingTool.h:
755         * jit/JIT.h:
756         (JSC::JIT::sampleCodeBlock):
757         (JSC::JIT::sampleInstruction):
758         * jit/JITInlineMethods.h:
759         (JSC::JIT::setSamplingFlag):
760         (JSC::JIT::clearSamplingFlag):
761
762 2009-05-11  Gavin Barraclough  <barraclough@apple.com>
763
764         Reviewed by Cameron Zwarich.
765
766         Implement JIT generation for instanceof for non-objects (always returns false).
767         Also fixes the sequencing of the prototype and value isObject checks, to no match the spec.
768
769         0.5% progression on v8 tests overall, due to 3.5% on early-boyer.
770
771         * jit/JIT.cpp:
772         (JSC::JIT::privateCompileMainPass):
773         (JSC::JIT::privateCompileSlowCases):
774         * runtime/JSObject.cpp:
775         (JSC::JSObject::hasInstance):
776         * runtime/TypeInfo.h:
777         (JSC::TypeInfo::TypeInfo):
778
779 2009-05-11  Geoffrey Garen  <ggaren@apple.com>
780
781         Reviewed by Sam Weinig.
782         
783         A little more JIT refactoring.
784         
785         Rearranged code to more clearly indicate what's conditionally compiled
786         and why. Now, all shared code is at the top of our JIT files, and all
787         #if'd code is at the bottom. #if'd code is delineated by large comments.
788         
789         Moved functions that relate to the JIT but don't explicitly do codegen
790         into JIT.cpp. Refactored SSE2 check to store its result as a data member
791         in the JIT.
792
793         * jit/JIT.cpp:
794         (JSC::isSSE2Present):
795         (JSC::JIT::JIT):
796         (JSC::JIT::unlinkCall):
797         (JSC::JIT::linkCall):
798         * jit/JIT.h:
799         (JSC::JIT::isSSE2Present):
800         * jit/JITArithmetic.cpp:
801         (JSC::JIT::emit_op_mod):
802         (JSC::JIT::emitSlow_op_mod):
803         * jit/JITCall.cpp:
804         (JSC::JIT::compileOpCallVarargs):
805         (JSC::JIT::compileOpCallVarargsSlowCase):
806
807 2009-05-11  Holger Hans Peter Freyther  <zecke@selfish.org>
808
809         Build fix.
810
811         * JavaScriptCore.pri: Build the new JITOpcodes.cpp
812
813 2009-05-11  Sam Weinig  <sam@webkit.org>
814
815         Reviewed by Geoffrey Garen.
816
817         More re-factoring of JIT code generation.  Use a macro to
818         forward the main switch-statement cases to the helper functions.
819
820         * jit/JIT.cpp:
821         (JSC::JIT::privateCompileMainPass):
822         (JSC::JIT::privateCompileSlowCases):
823
824 2009-05-11  Sam Weinig  <sam@webkit.org>
825
826         Reviewed by Geoffrey Garen.
827
828         More re-factoring of JIT code generation to move opcode generation
829         to helper functions outside the main switch-statement and gave those
830         helper functions standardized names. This patch covers the remaining
831         slow cases.
832
833         * jit/JIT.cpp:
834         * jit/JIT.h:
835         * jit/JITOpcodes.cpp:
836
837 2009-05-11  Geoffrey Garen  <ggaren@apple.com>
838
839         Build fix.
840
841         * GNUmakefile.am: Added JITOpcodes.cpp and JITStubCall.h to the project.
842
843 2009-05-11  Geoffrey Garen  <ggaren@apple.com>
844
845         Build fix.
846
847         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added
848         JITOpcodes.cpp and JITStubCall.h to the project.
849
850 2009-05-11  Geoffrey Garen  <ggaren@apple.com>
851
852         Reviewed by Sam Weinig.
853         
854         Some JIT refactoring.
855         
856         Moved JITStubCall* into its own header.
857         
858         Modified JITStubCall to ASSERT that its return value is handled correctly.
859         Also, replaced function template with explicit instantiations to resolve
860         some confusion.
861         
862         Replaced all uses of emit{Get,Put}CTIArgument with explicit peeks, pokes,
863         and calls to killLastResultRegister().
864
865         * JavaScriptCore.xcodeproj/project.pbxproj:
866         * jit/JIT.cpp:
867         (JSC::JIT::privateCompileMainPass):
868         (JSC::JIT::privateCompile):
869         * jit/JIT.h:
870         * jit/JITArithmetic.cpp:
871         * jit/JITCall.cpp:
872         * jit/JITInlineMethods.h:
873         (JSC::JIT::restoreArgumentReference):
874         * jit/JITPropertyAccess.cpp:
875         * jit/JITStubCall.h: Copied from jit/JIT.h.
876         (JSC::JITStubCall::JITStubCall):
877         (JSC::JITStubCall::addArgument):
878         (JSC::JITStubCall::call):
879         (JSC::JITStubCall::):
880
881 2009-05-11  Sam Weinig  <sam@webkit.org>
882
883         Reviewed by Geoffrey Garen.
884
885         Start re-factoring JIT code generation to move opcode generation
886         to helper functions outside the main switch-statement and gave those
887         helper functions standardized names.  This patch only covers the main
888         pass and all the arithmetic opcodes in the slow path.
889
890         * JavaScriptCore.xcodeproj/project.pbxproj:
891         * jit/JIT.cpp:
892         (JSC::JIT::privateCompileMainPass):
893         (JSC::JIT::privateCompileSlowCases):
894         * jit/JIT.h:
895         * jit/JITArithmetic.cpp:
896         * jit/JITOpcodes.cpp: Copied from jit/JIT.cpp.
897         * jit/JITPropertyAccess.cpp:
898
899 2009-05-11  Steve Falkenburg  <sfalken@apple.com>
900
901         Re-add experimental PGO configs.
902         
903         Reviewed by Adam Roben.
904
905         * JavaScriptCore.vcproj/JavaScriptCore.make:
906         * JavaScriptCore.vcproj/JavaScriptCore.sln:
907         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
908         * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:
909         * JavaScriptCore.vcproj/jsc/jsc.vcproj:
910
911 2009-05-11  Sam Weinig  <sam@webkit.org>
912
913         Reviewed by Geoffrey "1" Garen.
914
915         Rip out the !USE(CTI_REPATCH_PIC) code.  It was untested and unused.
916
917         * jit/JIT.h:
918         (JSC::JIT::compileGetByIdChainList):
919         (JSC::JIT::compileGetByIdChain):
920         (JSC::JIT::compileCTIMachineTrampolines):
921         * jit/JITPropertyAccess.cpp:
922         (JSC::JIT::privateCompileGetByIdProto):
923         (JSC::JIT::privateCompileGetByIdChainList):
924         (JSC::JIT::privateCompileGetByIdChain):
925         * jit/JITStubs.cpp:
926         (JSC::JITStubs::tryCachePutByID):
927         (JSC::JITStubs::tryCacheGetByID):
928
929 2009-05-11  Dmitry Titov  <dimich@chromium.org>
930
931         GTK build fix - the deprecated waitForThreadCompletion is not needed on GTK.
932
933         * wtf/ThreadingPthreads.cpp: used #ifdef PLATFORM(DARWIN) around waitForThreadCompletion().
934
935 2009-05-11  Adam Roben  <aroben@apple.com>
936
937         Build fix for newer versions of GCC
938
939         * wtf/ThreadingPthreads.cpp: Added a declaration of
940         waitForThreadCompletion before its definition to silence a warning.
941
942 2009-05-11  Dmitry Titov  <dimich@chromium.org>
943
944         Reviewed by Alexey Proskuryakov and Adam Roben.
945
946         https://bugs.webkit.org/show_bug.cgi?id=25348
947         Change WTF::ThreadIdentifier to be an actual (but wrapped) thread id, remove ThreadMap.
948
949         * wtf/Threading.h:
950         (WTF::ThreadIdentifier::ThreadIdentifier):
951         (WTF::ThreadIdentifier::isValid):
952         (WTF::ThreadIdentifier::invalidate):
953         (WTF::ThreadIdentifier::platformId):
954         ThreadIdentifier is now a class, containing a PlatformThreadIdentifier and
955         methods that are used across the code on thread ids: construction, comparisons,
956         check for 'valid' state etc. '0' is used as invalid id, which happens to just work
957         with all platform-specific thread id implementations.
958
959         All the following files repeatedly reflect the new ThreadIdentifier for each platform.
960         We remove ThreadMap and threadMapMutex from all of them, remove the functions that
961         populated/searched/cleared the map and add platform-specific comparison operators
962         for ThreadIdentifier.
963
964         There are specific temporary workarounds for Safari 4 beta on OSX and Win32 since the
965         public build uses WTF threading functions with old type of ThreadingIdentifier.
966         The next time Safari 4 is rebuilt, it will 'automatically' pick up the new type and new
967         functions so the deprecated ones can be removed.
968
969         * wtf/gtk/ThreadingGtk.cpp:
970         (WTF::ThreadIdentifier::operator==):
971         (WTF::ThreadIdentifier::operator!=):
972         (WTF::initializeThreading):
973         (WTF::createThreadInternal):
974         (WTF::waitForThreadCompletion):
975         (WTF::currentThread):
976
977         * wtf/ThreadingNone.cpp:
978         (WTF::ThreadIdentifier::operator==):
979         (WTF::ThreadIdentifier::operator!=):
980
981         * wtf/ThreadingPthreads.cpp:
982         (WTF::ThreadIdentifier::operator==):
983         (WTF::ThreadIdentifier::operator!=):
984         (WTF::initializeThreading):
985         (WTF::createThreadInternal):
986         (WTF::waitForThreadCompletion):
987         (WTF::detachThread):
988         (WTF::currentThread):
989         (WTF::waitForThreadCompletion): This is a workaround for Safari 4 beta on Mac.
990         Safari 4 is linked against old definition of ThreadIdentifier so it treats it as uint32_t.
991         This 'old' variant of waitForThreadCompletion takes uint32_t and has the old decorated name, so Safari can
992         load it from JavaScriptCore library. The other functions (CurrentThread() etc) happen to match their previous
993         decorated names and, while they return pthread_t now, it is a pointer which round-trips through a uint32_t.
994         This function will be removed as soon as Safari 4 will release next public build.
995
996         * wtf/qt/ThreadingQt.cpp:
997         (WTF::ThreadIdentifier::operator==):
998         (WTF::ThreadIdentifier::operator!=):
999         (WTF::initializeThreading):
1000         (WTF::createThreadInternal):
1001         (WTF::waitForThreadCompletion):
1002         (WTF::currentThread):
1003
1004         * wtf/ThreadingWin.cpp:
1005         (WTF::ThreadIdentifier::operator==):
1006         (WTF::ThreadIdentifier::operator!=):
1007         (WTF::initializeThreading):
1008         (WTF::createThreadInternal): All the platforms (except Windows) used a sequential
1009         counter as a thread ID and mapped it into platform ID. Windows was using native thread
1010         id and mapped it into thread handle. Since we can always obtain a thread handle
1011         by thread id, createThread now closes the handle.
1012         (WTF::waitForThreadCompletion): obtains another one using OpenThread(id) API. If can not obtain a handle,
1013         it means the thread already exited.
1014         (WTF::detachThread):
1015         (WTF::currentThread):
1016         (WTF::detachThreadDeprecated): old function, renamed (for Win Safari 4 beta which uses it for now).
1017         (WTF::waitForThreadCompletionDeprecated): same.
1018         (WTF::currentThreadDeprecated): same.
1019         (WTF::createThreadDeprecated): same.
1020
1021         * bytecode/SamplingTool.h:
1022         * bytecode/SamplingTool.cpp: Use DEFINE_STATIC_LOCAL for a static ThreadIdentifier variable, to avoid static constructor.
1023
1024         * JavaScriptCore.exp: export lists - updated decorated names of the WTF threading functions
1025         since they now take a different type as a parameter.
1026         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: ditto for Windows, plus added "deprecated" functions
1027         that take old parameter type - turns out public beta of Safari 4 uses those, so they need to be kept along for a while.
1028         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: ditto.
1029
1030 2009-05-11  Darin Adler  <darin@apple.com>
1031
1032         Reviewed by Oliver Hunt.
1033
1034         Bug 25560: REGRESSION (r34821): "string value".__proto__ gets the wrong object.
1035         https://bugs.webkit.org/show_bug.cgi?id=25560
1036         rdar://problem/6861069
1037
1038         I missed this case back a year ago when I sped up handling
1039         of JavaScript wrappers. Easy to fix.
1040
1041         * runtime/JSObject.h:
1042         (JSC::JSValue::get): Return the prototype itself if the property name
1043         is __proto__.
1044         * runtime/JSString.cpp:
1045         (JSC::JSString::getOwnPropertySlot): Ditto.
1046
1047 2009-05-09  Oliver Hunt  <oliver@apple.com>
1048
1049         Reviewed by Maciej Stachowiak.
1050
1051         Rename emitGetFromCallFrameHeader to emitGetFromCallFrameHeaderPtr
1052
1053         * jit/JIT.cpp:
1054         (JSC::JIT::privateCompileMainPass):
1055         (JSC::JIT::privateCompileCTIMachineTrampolines):
1056         * jit/JIT.h:
1057         * jit/JITInlineMethods.h:
1058         (JSC::JIT::emitGetFromCallFrameHeaderPtr):
1059         (JSC::JIT::emitGetFromCallFrameHeader32):
1060
1061 2009-05-11  Holger Hans Peter Freyther  <zecke@selfish.org>
1062
1063         Unreviewed build fix. Build ParserAreana.cpp for Qt
1064
1065         * JavaScriptCore.pri:
1066
1067 2009-05-11  Norbert Leser  <norbert.leser@nokia.com>
1068
1069         Reviewed by Darin Adler.
1070
1071         https://bugs.webkit.org/show_bug.cgi?id=24536
1072
1073         Symbian compilers cannot resolve WTF::PassRefPtr<JSC::Profile>
1074         unless Profile.h is included.
1075
1076         * profiler/ProfileGenerator.h:
1077
1078 2009-05-11  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>
1079
1080         Reviewed by Holger Freyther.
1081
1082         https://bugs.webkit.org/show_bug.cgi?id=24284
1083
1084         * JavaScriptCore.pri: coding style modified
1085         * jsc.pro: duplicated values removed from INCLUDEPATH, DEFINES
1086
1087 2009-05-11  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>
1088
1089         Reviewed by NOBODY (build fix).
1090
1091         Also add ParserArena, in addition to AllInOne, for release builds,
1092         since adding it to AllInOne breaks Mac.
1093
1094         * GNUmakefile.am:
1095
1096 2009-05-11  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>
1097
1098         Unreviewed build fix. Adding ParserArena to the autotools build.
1099
1100         * GNUmakefile.am:
1101
1102 2009-05-11  Adam Roben  <aroben@apple.com>
1103
1104         More Windows build fixes after r43479
1105
1106         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1107         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1108         Export ParserArena::reset.
1109
1110 2009-05-11  Adam Roben  <aroben@apple.com>
1111
1112         Windows build fixes after r43479
1113
1114         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added
1115         ParserArena to the project.
1116
1117         * parser/NodeConstructors.h: Added a missing include.
1118         (JSC::ParserArenaDeletable::operator new): Marked these as inline.
1119
1120 2009-05-10  Maciej Stachowiak  <mjs@apple.com>
1121
1122         Reviewed by Geoff Garen.
1123         
1124         - fixed REGRESSION(r43432): Many JavaScriptCore tests crash in 64-bit
1125         https://bugs.webkit.org/show_bug.cgi?id=25680
1126
1127         Accound for the 64-bit instruction prefix when rewriting mov to lea on 64-bit.
1128         
1129         * jit/JIT.h:
1130         * jit/JITPropertyAccess.cpp:
1131         (JSC::JIT::patchGetByIdSelf):
1132         (JSC::JIT::patchPutByIdReplace):
1133
1134 2009-05-10  Darin Adler  <darin@apple.com>
1135
1136         Reviewed by Cameron Zwarich.
1137
1138         Bug 25674: syntax tree nodes should use arena allocation
1139         https://bugs.webkit.org/show_bug.cgi?id=25674
1140
1141         Part two: Remove reference counting from most nodes.
1142
1143         * JavaScriptCore.exp: Updated.
1144
1145         * JavaScriptCore.xcodeproj/project.pbxproj: Added ParserArena.h and .cpp.
1146
1147         * parser/Grammar.y: Replaced uses of ParserRefCountedData with uses of
1148         ParserArenaData. Took out now-nonfunctional code that tries to manually
1149         release declaration list. Changed the new calls that create FuncDeclNode
1150         and FuncExprNode so that they use the proper version of operator new for
1151         the reference-counted idiom, not the deletion idiom.
1152
1153         * parser/NodeConstructors.h:
1154         (JSC::ParserArenaDeletable::operator new): Added.
1155         (JSC::ParserArenaRefCounted::ParserArenaRefCounted): Added.
1156         (JSC::Node::Node): Removed ParserRefCounted initializer.
1157         (JSC::ElementNode::ElementNode): Ditto.
1158         (JSC::PropertyNode::PropertyNode): Ditto.
1159         (JSC::ArgumentsNode::ArgumentsNode): Ditto.
1160         (JSC::SourceElements::SourceElements): Ditto.
1161         (JSC::ParameterNode::ParameterNode): Ditto.
1162         (JSC::FuncExprNode::FuncExprNode): Added ParserArenaRefCounted initializer.
1163         (JSC::FuncDeclNode::FuncDeclNode): Ditto.
1164         (JSC::CaseClauseNode::CaseClauseNode): Removed ParserRefCounted initializer.
1165         (JSC::ClauseListNode::ClauseListNode): Ditto.
1166         (JSC::CaseBlockNode::CaseBlockNode): Ditto.
1167
1168         * parser/NodeInfo.h: Replaced uses of ParserRefCountedData with uses of
1169         ParserArenaData.
1170
1171         * parser/Nodes.cpp:
1172         (JSC::ScopeNode::ScopeNode): Added ParserArenaRefCounted initializer.
1173         (JSC::ProgramNode::create): Use the proper version of operator new for
1174         the reference-counted idiom, not the deletion idiom. Use the arena
1175         contains function instead of the vecctor find function.
1176         (JSC::EvalNode::create): Use the proper version of operator new for
1177         the reference-counted idiom, not the deletion idiom. Use the arena
1178         reset function instead of the vector shrink function.
1179         (JSC::FunctionBodyNode::createNativeThunk): Use the proper version
1180         of operator new for the reference-counted idiom, not the deletion idiom.
1181         (JSC::FunctionBodyNode::create): More of the same.
1182
1183         * parser/Nodes.h: Added ParserArenaDeletable and ParserArenaRefCounted
1184         to replace ParserRefCounted. Fixed inheritance so only the classes that
1185         need reference counting inherit from ParserArenaRefCounted.
1186
1187         * parser/Parser.cpp:
1188         (JSC::Parser::parse): Set m_sourceElements to 0 since it now starts
1189         uninitialized. Just set it to 0 again in the failure case, since it's
1190         now just a raw pointer, not an owning one.
1191         (JSC::Parser::reparseInPlace): Removed now-unneeded get() function.
1192         (JSC::Parser::didFinishParsing): Replaced uses of ParserRefCountedData
1193         with uses of ParserArenaData.
1194
1195         * parser/Parser.h: Less RefPtr, more arena.
1196
1197         * parser/ParserArena.cpp: Added.
1198         * parser/ParserArena.h: Added.
1199
1200         * runtime/JSGlobalData.cpp:
1201         (JSC::JSGlobalData::~JSGlobalData): Removed arena-related code, since it's
1202         now in the Parser.
1203         (JSC::JSGlobalData::createLeaked): Removed unneeded #ifndef.
1204         (JSC::JSGlobalData::createNativeThunk): Tweaked #if a bit.
1205
1206         * runtime/JSGlobalData.h: Removed parserArena, which is now in Parser.
1207
1208         * wtf/RefCounted.h: Added deletionHasBegun function, for use in
1209         assertions to catch deletion not done by the deref function.
1210
1211 2009-05-10  David Kilzer  <ddkilzer@apple.com>
1212
1213         Part 2: Try to fix the Windows build by adding a symbol which is really just a re-mangling of a changed method signature
1214
1215         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1216         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1217
1218 2009-05-10  David Kilzer  <ddkilzer@apple.com>
1219
1220         Try to fix the Windows build by removing an unknown symbol
1221
1222         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1223         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1224
1225 2009-05-10  David Kilzer  <ddkilzer@apple.com>
1226
1227         Touch Nodes.cpp to try to fix Windows build
1228
1229         * parser/Nodes.cpp: Removed whitespace.
1230
1231 2009-05-10  Darin Adler  <darin@apple.com>
1232
1233         Reviewed by Maciej Stachowiak.
1234
1235         Quick fix for failures seen on buildbot. Maciej plans a better fix later.
1236
1237         * wtf/dtoa.cpp: Change the hardcoded number of 32-bit words in a BigInt
1238         from 32 to 64. Parsing "1e500", for example, requires more than 32 words.
1239
1240 2009-05-10  Darin Adler  <darin@apple.com>
1241
1242         Reviewed by Sam Weinig.
1243
1244         Bug 25674: syntax tree nodes should use arena allocation
1245         Part one: Change lifetimes so we won't have to use reference
1246         counting so much, but don't eliminate the reference counts
1247         entirely yet.
1248
1249         * JavaScriptCore.exp: Updated.
1250
1251         * bytecompiler/BytecodeGenerator.cpp:
1252         (JSC::BytecodeGenerator::BytecodeGenerator): Update for use of raw pointers
1253         instead of RefPtr.
1254         (JSC::BytecodeGenerator::emitCall): Ditto.
1255         (JSC::BytecodeGenerator::emitConstruct): Ditto.
1256
1257         * parser/Grammar.y: Update node creating code to use new (JSGlobalData*)
1258         instead of the plain new. At the moment this is just a hook for future
1259         arena allocation; it's inline and JSGlobalData* is not used.
1260
1261         * parser/NodeConstructors.h: Updated for name change of parserObjects to
1262         parserArena. Also added explicit initialization for raw pointers that used
1263         to be RefPtr. Also removed some uses of get() that aren't needed now that
1264         the pointers are raw pointers. Also eliminated m_parameter from FuncExprNode
1265         and FuncDeclNode. Also changed node-creating code to use new (JSGlobalData*)
1266         as above.
1267
1268         * parser/Nodes.cpp: Eliminated NodeReleaser and all use of it.
1269         (JSC::ParserRefCounted::ParserRefCounted): Updated for name change of
1270         parserObjects to parserArena.
1271         (JSC::SourceElements::append): Use raw pointers.
1272         (JSC::ArrayNode::emitBytecode): Ditto.
1273         (JSC::ArrayNode::isSimpleArray): Ditto.
1274         (JSC::ArrayNode::toArgumentList): Ditto.
1275         (JSC::ObjectLiteralNode::emitBytecode): Ditto.
1276         (JSC::PropertyListNode::emitBytecode): Ditto.
1277         (JSC::BracketAccessorNode::emitBytecode): Ditto.
1278         (JSC::DotAccessorNode::emitBytecode): Ditto.
1279         (JSC::ArgumentListNode::emitBytecode): Ditto.
1280         (JSC::NewExprNode::emitBytecode): Ditto.
1281         (JSC::EvalFunctionCallNode::emitBytecode): Ditto.
1282         (JSC::FunctionCallValueNode::emitBytecode): Ditto.
1283         (JSC::FunctionCallResolveNode::emitBytecode): Ditto.
1284         (JSC::FunctionCallBracketNode::emitBytecode): Ditto.
1285         (JSC::FunctionCallDotNode::emitBytecode): Ditto.
1286         (JSC::CallFunctionCallDotNode::emitBytecode): Ditto.
1287         (JSC::ApplyFunctionCallDotNode::emitBytecode): Ditto.
1288         (JSC::PostfixBracketNode::emitBytecode): Ditto.
1289         (JSC::PostfixDotNode::emitBytecode): Ditto.
1290         (JSC::DeleteBracketNode::emitBytecode): Ditto.
1291         (JSC::DeleteDotNode::emitBytecode): Ditto.
1292         (JSC::DeleteValueNode::emitBytecode): Ditto.
1293         (JSC::VoidNode::emitBytecode): Ditto.
1294         (JSC::TypeOfValueNode::emitBytecode): Ditto.
1295         (JSC::PrefixBracketNode::emitBytecode): Ditto.
1296         (JSC::PrefixDotNode::emitBytecode): Ditto.
1297         (JSC::UnaryOpNode::emitBytecode): Ditto.
1298         (JSC::BinaryOpNode::emitStrcat): Ditto.
1299         (JSC::BinaryOpNode::emitBytecode): Ditto.
1300         (JSC::EqualNode::emitBytecode): Ditto.
1301         (JSC::StrictEqualNode::emitBytecode): Ditto.
1302         (JSC::ReverseBinaryOpNode::emitBytecode): Ditto.
1303         (JSC::ThrowableBinaryOpNode::emitBytecode): Ditto.
1304         (JSC::InstanceOfNode::emitBytecode): Ditto.
1305         (JSC::LogicalOpNode::emitBytecode): Ditto.
1306         (JSC::ConditionalNode::emitBytecode): Ditto.
1307         (JSC::ReadModifyResolveNode::emitBytecode): Ditto.
1308         (JSC::AssignResolveNode::emitBytecode): Ditto.
1309         (JSC::AssignDotNode::emitBytecode): Ditto.
1310         (JSC::ReadModifyDotNode::emitBytecode): Ditto.
1311         (JSC::AssignBracketNode::emitBytecode): Ditto.
1312         (JSC::ReadModifyBracketNode::emitBytecode): Ditto.
1313         (JSC::CommaNode::emitBytecode): Ditto.
1314         (JSC::ConstDeclNode::emitCodeSingle): Ditto.
1315         (JSC::ConstDeclNode::emitBytecode): Ditto.
1316         (JSC::ConstStatementNode::emitBytecode): Ditto.
1317         (JSC::statementListEmitCode): Ditto.
1318         (JSC::BlockNode::emitBytecode): Ditto.
1319         (JSC::ExprStatementNode::emitBytecode): Ditto.
1320         (JSC::VarStatementNode::emitBytecode): Ditto.
1321         (JSC::IfNode::emitBytecode): Ditto.
1322         (JSC::IfElseNode::emitBytecode): Ditto.
1323         (JSC::DoWhileNode::emitBytecode): Ditto.
1324         (JSC::WhileNode::emitBytecode): Ditto.
1325         (JSC::ForNode::emitBytecode): Ditto.
1326         (JSC::ForInNode::emitBytecode): Ditto.
1327         (JSC::ReturnNode::emitBytecode): Ditto.
1328         (JSC::WithNode::emitBytecode): Ditto.
1329         (JSC::CaseBlockNode::tryOptimizedSwitch): Ditto.
1330         (JSC::CaseBlockNode::emitBytecodeForBlock): Ditto.
1331         (JSC::SwitchNode::emitBytecode): Ditto.
1332         (JSC::LabelNode::emitBytecode): Ditto.
1333         (JSC::ThrowNode::emitBytecode): Ditto.
1334         (JSC::TryNode::emitBytecode): Ditto.
1335         (JSC::ScopeNodeData::ScopeNodeData): Use swap to transfer ownership
1336         of the arena, varStack and functionStack.
1337         (JSC::ScopeNode::ScopeNode): Pass in the arena when creating the
1338         ScopeNodeData.
1339         (JSC::ProgramNode::ProgramNode): Made this inline since it's used
1340         in only one place.
1341         (JSC::ProgramNode::create): Changed this to return a PassRefPtr since
1342         we plan to have the scope nodes be outside the arena, so they will need
1343         some kind of ownership transfer (maybe auto_ptr instead of PassRefPtr
1344         in the future, though). Remove the node from the newly-created arena to
1345         avoid a circular reference. Later we'll keep the node out of the arena
1346         by using a different operator new, but for now it's the ParserRefCounted
1347         constructor that puts the node into the arena, and there's no way to
1348         bypass that.
1349         (JSC::EvalNode::EvalNode): Ditto.
1350         (JSC::EvalNode::create): Ditto.
1351         (JSC::FunctionBodyNode::FunctionBodyNode): Ditto.
1352         (JSC::FunctionBodyNode::createNativeThunk): Moved the code that
1353         reseets the arena here instead of the caller.
1354         (JSC::FunctionBodyNode::create): Same change as the other create
1355         functions above.
1356         (JSC::FunctionBodyNode::emitBytecode): Use raw pointers.
1357
1358         * parser/Nodes.h: Removed NodeReleaser. Changed FunctionStack to
1359         use raw pointers. Removed the releaseNodes function. Added an override
1360         of operator new that takes a JSGlobalData* to prepare for future arena use.
1361         Use raw pointers instead of RefPtr everywhere possible.
1362
1363         * parser/Parser.cpp:
1364         (JSC::Parser::reparseInPlace): Pass the arena in.
1365
1366         * parser/Parser.h:
1367         (JSC::Parser::parse): Updated for name change of parserObjects to parserArena.
1368         (JSC::Parser::reparse): Ditto.
1369         * runtime/FunctionConstructor.cpp:
1370         (JSC::extractFunctionBody): Ditto.
1371         * runtime/JSGlobalData.cpp:
1372         (JSC::JSGlobalData::~JSGlobalData): Ditto.
1373         (JSC::JSGlobalData::createNativeThunk): Moved arena manipulation into the
1374         FunctionBodyNode::createNativeThunk function.
1375
1376         * runtime/JSGlobalData.h: Tweaked formatting and renamed parserObjects to
1377         parserArena.
1378
1379         * wtf/NotFound.h: Added the usual "using WTF" to this header to match the
1380         rest of WTF.
1381
1382 2009-05-10  Dimitri Glazkov  <dglazkov@chromium.org>
1383
1384         Reviewed by Geoffrey Garen.
1385
1386         https://bugs.webkit.org/show_bug.cgi?id=25670
1387         Remove no longer valid chunk of code from dtoa.
1388
1389         * wtf/dtoa.cpp:
1390         (WTF::dtoa): Removed invalid code.
1391
1392 2009-05-10  Alexey Proskuryakov  <ap@webkit.org>
1393
1394         Reviewed by Geoff Garen.
1395
1396         "Class const *" is the same as "const Class*", use the latter syntax consistently.
1397
1398         See <http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.9>.
1399
1400         * pcre/pcre_compile.cpp:
1401         (calculateCompiledPatternLength):
1402         * runtime/JSObject.h:
1403         (JSC::JSObject::offsetForLocation):
1404         (JSC::JSObject::locationForOffset):
1405
1406 2009-05-10  Maciej Stachowiak  <mjs@apple.com>
1407
1408         Reviewed by Alexey Proskuryakov.
1409         
1410         - speedup dtoa/strtod
1411         
1412         Added a bunch of inlining, and replaced malloc with stack allocation.
1413         
1414         0.5% SunSpider speedup (7% on string-tagcloud).
1415
1416         * runtime/NumberPrototype.cpp:
1417         (JSC::integerPartNoExp):
1418         (JSC::numberProtoFuncToExponential):
1419         * runtime/UString.cpp:
1420         (JSC::concatenate):
1421         (JSC::UString::from):
1422         * wtf/dtoa.cpp:
1423         (WTF::BigInt::BigInt):
1424         (WTF::BigInt::operator=):
1425         (WTF::Balloc):
1426         (WTF::Bfree):
1427         (WTF::multadd):
1428         (WTF::s2b):
1429         (WTF::i2b):
1430         (WTF::mult):
1431         (WTF::pow5mult):
1432         (WTF::lshift):
1433         (WTF::cmp):
1434         (WTF::diff):
1435         (WTF::b2d):
1436         (WTF::d2b):
1437         (WTF::ratio):
1438         (WTF::strtod):
1439         (WTF::quorem):
1440         (WTF::freedtoa):
1441         (WTF::dtoa):
1442         * wtf/dtoa.h:
1443
1444 2009-05-09  Mike Hommey  <glandium@debian.org>
1445
1446         Reviewed by Geoffrey Garen. Landed by Jan Alonzo.
1447
1448         Enable JIT on x86-64 gtk+
1449         https://bugs.webkit.org/show_bug.cgi?id=24724
1450
1451         * GNUmakefile.am:
1452
1453 2009-05-09  Geoffrey Garen  <ggaren@apple.com>
1454
1455         Reviewed by Cameron Zwarich.
1456         
1457         Removed the last non-call-related manually managed JIT stub call.
1458
1459         * jit/JITArithmetic.cpp:
1460         (JSC::JIT::compileFastArithSlow_op_rshift): Fully use the JITStubCall
1461         abstraction, instead of emitPutJITStubArg.
1462
1463 2009-05-09  Sebastian Andrzej Siewior  <sebastian@breakpoint.cc>
1464
1465         Reviewed by Gustavo Noronha.
1466
1467         https://bugs.webkit.org/show_bug.cgi?id=25653
1468         PLATFORM(X86_64) inherits ia64
1469
1470         __ia64__ is defined by gcc in an IA64 arch and has completely
1471         nothing in common with X86-64 exept both are from Intel and have
1472         an 64bit address space. That's it. Since code seems to expect x86
1473         here, ia64 has to go.
1474
1475         * wtf/Platform.h:
1476
1477 2009-05-09  Gustavo Noronha Silva  <gns@gnome.org>
1478
1479         Suggested by Geoffrey Garen.
1480
1481         Assume SSE2 is present on X86-64 and on MAC X86-32. This fixes a
1482         build breakage on non-Mac X86-64 when JIT is enabled.
1483
1484         * jit/JITArithmetic.cpp:
1485
1486 2009-05-09  Gustavo Noronha Silva  <gns@gnome.org>
1487
1488         Build fix, adding missing files to make dist.
1489
1490         * GNUmakefile.am:
1491
1492 2009-05-09  Geoffrey Garen  <ggaren@apple.com>
1493
1494         Windows build fix.
1495
1496         * assembler/X86Assembler.h:
1497         (JSC::X86Assembler::patchLoadToLEA):
1498
1499 2009-05-09  Geoffrey Garen  <ggaren@apple.com>
1500
1501         Windows build fix.
1502
1503         * assembler/X86Assembler.h:
1504         (JSC::X86Assembler::patchLoadToLEA):
1505
1506 2009-05-09  Maciej Stachowiak  <mjs@apple.com>
1507
1508         Reviewed by Gavin Barraclough.
1509         
1510         Original patch by John McCall. Updated by Cameron Zwarich. Further refined by me.
1511         
1512         - Assorted speedups to property access
1513         
1514         ~.3%-1% speedup on SunSpider
1515         
1516         1) When we know from the structure ID that an object is using inline storage, plant direct
1517         loads and stores against it; no need to indirect through storage pointer.
1518         
1519         2) Also because of the above, union the property storage pointer with the first inline property
1520         slot and add an extra inline property slot.
1521
1522         * assembler/AbstractMacroAssembler.h:
1523         (JSC::AbstractMacroAssembler::CodeLocationInstruction::CodeLocationInstruction):
1524         (JSC::AbstractMacroAssembler::CodeLocationInstruction::patchLoadToLEA):
1525         (JSC::::CodeLocationCommon::instructionAtOffset):
1526         * assembler/MacroAssembler.h:
1527         (JSC::MacroAssembler::storePtr):
1528         * assembler/MacroAssemblerX86.h:
1529         (JSC::MacroAssemblerX86::store32):
1530         * assembler/MacroAssemblerX86_64.h:
1531         (JSC::MacroAssemblerX86_64::storePtr):
1532         * assembler/X86Assembler.h:
1533         (JSC::X86Assembler::movq_EAXm):
1534         (JSC::X86Assembler::movl_rm):
1535         (JSC::X86Assembler::patchLoadToLEA):
1536         * jit/JIT.cpp:
1537         (JSC::JIT::privateCompileMainPass):
1538         * jit/JIT.h:
1539         * jit/JITPropertyAccess.cpp:
1540         (JSC::JIT::compileGetByIdHotPath):
1541         (JSC::JIT::compilePutByIdHotPath):
1542         (JSC::JIT::compilePutDirectOffset):
1543         (JSC::JIT::compileGetDirectOffset):
1544         (JSC::JIT::privateCompilePutByIdTransition):
1545         (JSC::JIT::patchGetByIdSelf):
1546         (JSC::JIT::patchPutByIdReplace):
1547         (JSC::JIT::privateCompileGetByIdSelf):
1548         (JSC::JIT::privateCompileGetByIdProto):
1549         (JSC::JIT::privateCompileGetByIdSelfList):
1550         (JSC::JIT::privateCompileGetByIdProtoList):
1551         (JSC::JIT::privateCompileGetByIdChainList):
1552         (JSC::JIT::privateCompileGetByIdChain):
1553         (JSC::JIT::privateCompilePutByIdReplace):
1554         * runtime/JSObject.cpp:
1555         (JSC::JSObject::mark):
1556         (JSC::JSObject::removeDirect):
1557         * runtime/JSObject.h:
1558         (JSC::JSObject::propertyStorage):
1559         (JSC::JSObject::getDirect):
1560         (JSC::JSObject::getOffset):
1561         (JSC::JSObject::offsetForLocation):
1562         (JSC::JSObject::locationForOffset):
1563         (JSC::JSObject::getDirectOffset):
1564         (JSC::JSObject::putDirectOffset):
1565         (JSC::JSObject::isUsingInlineStorage):
1566         (JSC::JSObject::):
1567         (JSC::JSObject::JSObject):
1568         (JSC::JSObject::~JSObject):
1569         (JSC::Structure::isUsingInlineStorage):
1570         (JSC::JSObject::putDirect):
1571         (JSC::JSObject::putDirectWithoutTransition):
1572         (JSC::JSObject::allocatePropertyStorageInline):
1573         * runtime/Structure.h:
1574
1575 2009-05-09  Geoffrey Garen  <ggaren@apple.com>
1576
1577         Reviewed by Gavin Barraclough.
1578
1579         Changed all our JIT stubs so that they return a maximum of 1 JS value or
1580         two non-JS pointers, and do all other value returning through out
1581         parameters, in preparation for 64bit JS values on a 32bit system.
1582
1583         Stubs that used to return two JSValues now return one JSValue and take
1584         and out parameter specifying where in the register array the second
1585         value should go.
1586         
1587         SunSpider reports no change.
1588
1589         * jit/JIT.cpp:
1590         (JSC::JIT::privateCompileMainPass):
1591         * jit/JITArithmetic.cpp:
1592         (JSC::JIT::compileFastArithSlow_op_post_inc):
1593         (JSC::JIT::compileFastArithSlow_op_post_dec):
1594         * jit/JITStubs.cpp:
1595         (JSC::JITStubs::cti_op_call_arityCheck):
1596         (JSC::JITStubs::cti_op_resolve_func):
1597         (JSC::JITStubs::cti_op_post_inc):
1598         (JSC::JITStubs::cti_op_resolve_with_base):
1599         (JSC::JITStubs::cti_op_post_dec):
1600         * jit/JITStubs.h:
1601         (JSC::):
1602
1603 2009-05-08  Geoffrey Garen  <ggaren@apple.com>
1604
1605         Reviewed by Cameron Zwarich.
1606         
1607         Fixed <rdar://problem/6634956> CrashTracer: [REGRESSION] >400 crashes
1608         in Safari at com.apple.JavaScriptCore • JSC::BytecodeGenerator::emitComplexJumpScopes + 468
1609         https://bugs.webkit.org/show_bug.cgi?id=25658
1610
1611         * bytecompiler/BytecodeGenerator.cpp:
1612         (JSC::BytecodeGenerator::emitComplexJumpScopes): Guard the whole loop
1613         with a bounds check. The old loop logic would decrement and read topScope
1614         without a bounds check, which could cause crashes on page boundaries.
1615
1616 2009-05-08  Jan Michael Alonzo  <jmalonzo@webkit.org>
1617
1618         Reviewed by NOBODY (BuildFix).
1619
1620         Gtk fix: add LiteralParser to the build script per r43424.
1621
1622         Add LiteralParser to the Qt and Wx build scripts too.
1623
1624         * GNUmakefile.am:
1625         * JavaScriptCore.pri:
1626         * JavaScriptCoreSources.bkl:
1627
1628 2009-05-08  Oliver Hunt  <oliver@apple.com>
1629
1630         Reviewed by Gavin Barraclough and Darin Adler.
1631
1632         Add a limited literal parser for eval to handle object and array literals fired at eval
1633
1634         This is a simplified parser and lexer that we can throw at strings passed to eval
1635         in case a site is using eval to parse JSON (eg. json2.js).  The lexer is intentionally
1636         limited (in effect it's whitelisting a limited "common" subset of the JSON grammar)
1637         as this decreases the likelihood of us wating time attempting to parse any significant
1638         amount of non-JSON content.
1639
1640         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1641         * JavaScriptCore.xcodeproj/project.pbxproj:
1642         * interpreter/Interpreter.cpp:
1643         (JSC::Interpreter::callEval):
1644         * runtime/JSGlobalObjectFunctions.cpp:
1645         (JSC::globalFuncEval):
1646         * runtime/LiteralParser.cpp: Added.
1647         (JSC::isStringCharacter):
1648         (JSC::LiteralParser::Lexer::lex):
1649         (JSC::LiteralParser::Lexer::lexString):
1650         (JSC::LiteralParser::Lexer::lexNumber):
1651         (JSC::LiteralParser::parseStatement):
1652         (JSC::LiteralParser::parseExpression):
1653         (JSC::LiteralParser::parseArray):
1654         (JSC::LiteralParser::parseObject):
1655         (JSC::LiteralParser::StackGuard::StackGuard):
1656         (JSC::LiteralParser::StackGuard::~StackGuard):
1657         (JSC::LiteralParser::StackGuard::isSafe):
1658         * runtime/LiteralParser.h: Added.
1659         (JSC::LiteralParser::LiteralParser):
1660         (JSC::LiteralParser::attemptJSONParse):
1661         (JSC::LiteralParser::):
1662         (JSC::LiteralParser::Lexer::Lexer):
1663         (JSC::LiteralParser::Lexer::next):
1664         (JSC::LiteralParser::Lexer::currentToken):
1665         (JSC::LiteralParser::abortParse):
1666
1667 2009-05-08  Geoffrey Garen  <ggaren@apple.com>
1668
1669         Not reviewed.
1670         
1671         Restored a Mozilla JS test I accidentally gutted.
1672
1673         * tests/mozilla/ecma/Array/15.4.4.2.js:
1674         (getTestCases):
1675         (test):
1676
1677 2009-05-08  Geoffrey Garen  <ggaren@apple.com>
1678
1679         Reviewed by Gavin Barraclough.
1680         
1681         More abstraction for JITStub calls from JITed code.
1682         
1683         Added a JITStubCall class that automatically handles things like assigning
1684         arguments to different stack slots and storing return values. Deployed
1685         the class in about a billion places. A bunch more places remain to be
1686         fixed up, but this is a good stopping point for now.
1687
1688         * jit/JIT.cpp:
1689         (JSC::JIT::emitTimeoutCheck):
1690         (JSC::JIT::privateCompileMainPass):
1691         (JSC::JIT::privateCompileSlowCases):
1692         (JSC::JIT::privateCompile):
1693         * jit/JIT.h:
1694         (JSC::JIT::JSRInfo::JSRInfo):
1695         (JSC::JITStubCall::JITStubCall):
1696         (JSC::JITStubCall::addArgument):
1697         (JSC::JITStubCall::call):
1698         (JSC::JITStubCall::):
1699         (JSC::CallEvalJITStub::CallEvalJITStub):
1700         * jit/JITArithmetic.cpp:
1701         (JSC::JIT::compileFastArithSlow_op_lshift):
1702         (JSC::JIT::compileFastArithSlow_op_rshift):
1703         (JSC::JIT::compileFastArithSlow_op_jnless):
1704         (JSC::JIT::compileFastArithSlow_op_bitand):
1705         (JSC::JIT::compileFastArithSlow_op_mod):
1706         (JSC::JIT::compileFastArith_op_mod):
1707         (JSC::JIT::compileFastArithSlow_op_post_inc):
1708         (JSC::JIT::compileFastArithSlow_op_post_dec):
1709         (JSC::JIT::compileFastArithSlow_op_pre_inc):
1710         (JSC::JIT::compileFastArithSlow_op_pre_dec):
1711         (JSC::JIT::compileFastArith_op_add):
1712         (JSC::JIT::compileFastArith_op_mul):
1713         (JSC::JIT::compileFastArith_op_sub):
1714         (JSC::JIT::compileBinaryArithOpSlowCase):
1715         (JSC::JIT::compileFastArithSlow_op_add):
1716         (JSC::JIT::compileFastArithSlow_op_mul):
1717         * jit/JITCall.cpp:
1718         (JSC::JIT::compileOpCall):
1719         (JSC::):
1720         * jit/JITPropertyAccess.cpp:
1721         (JSC::JIT::compileGetByIdHotPath):
1722         (JSC::JIT::compilePutByIdHotPath):
1723         (JSC::JIT::compileGetByIdSlowCase):
1724         (JSC::JIT::compilePutByIdSlowCase):
1725         * jit/JITStubs.cpp:
1726         (JSC::JITStubs::cti_op_resolve_func):
1727         (JSC::JITStubs::cti_op_resolve_with_base):
1728
1729 2009-05-08  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
1730
1731         Reviewed by Maciej Stachowiak.
1732
1733         Add a new opcode jnlesseq, and optimize its compilation in the JIT using
1734         techniques similar to what were used to optimize jnless in r43363.
1735
1736         This gives a 0.7% speedup on SunSpider, particularly on the tests 3d-cube,
1737         control-flow-recursive, date-format-xparb, and string-base64.
1738
1739         * bytecode/CodeBlock.cpp:
1740         (JSC::CodeBlock::dump): Add support for dumping op_jnlesseq.
1741         * bytecode/Opcode.h: Add op_jnlesseq to the list of opcodes.
1742         * bytecompiler/BytecodeGenerator.cpp:
1743         (JSC::BytecodeGenerator::emitJumpIfFalse): Add a peephole optimization
1744         for op_jnlesseq when emitting lesseq followed by a jump.
1745         * interpreter/Interpreter.cpp:
1746         (JSC::Interpreter::privateExecute): Add case for op_jnlesseq.
1747         * jit/JIT.cpp:
1748         (JSC::JIT::privateCompileMainPass): Add case for op_jnlesseq.
1749         (JSC::JIT::privateCompileSlowCases): Add case for op_jnlesseq.
1750         * jit/JIT.h:
1751         * jit/JITArithmetic.cpp:
1752         (JSC::JIT::compileFastArith_op_jnlesseq): Added.
1753         (JSC::JIT::compileFastArithSlow_op_jnlesseq): Added.
1754         * jit/JITStubs.cpp:
1755         (JSC::JITStubs::cti_op_jlesseq): Added.
1756         * jit/JITStubs.h:
1757
1758 2009-05-08  Maciej Stachowiak  <mjs@apple.com>
1759
1760         Reviewed by Cameron Zwarich.
1761         
1762         - fix test failures on 64-bit
1763
1764         * jit/JITArithmetic.cpp:
1765         (JSC::JIT::compileFastArithSlow_op_jnless): Avoid accidentaly treating an
1766         immediate int as an immediate float in the 64-bit value representation.
1767
1768 2009-05-08  Gavin Barraclough  <barraclough@apple.com>
1769
1770         Rubber stamped by Oliver Hunt.
1771
1772         Removing an empty constructor and an uncalled, empty function seems to be a
1773         pretty solid 1% regeression on my machine, so I'm going to put them back.
1774         Um.  Yeah, this this pretty pointles and makes no sense at all.  I officially
1775         lose the will to live in 3... 2...
1776
1777         * bytecode/SamplingTool.cpp:
1778         (JSC::SamplingTool::notifyOfScope):
1779         * bytecode/SamplingTool.h:
1780         (JSC::SamplingTool::~SamplingTool):
1781
1782 2009-05-08  Gavin Barraclough  <barraclough@apple.com>
1783
1784         Reviewed by Oliver "I see lots of ifdefs" Hunt.
1785
1786         Fix (kinda) for sampling tool breakage.  The codeblock sampling tool has become
1787         b0rked due to recent changes in native function calling.  The initialization of
1788         a ScopeNode appears to now occur before the sampling tool (or possibly the
1789         interpreter has been brought into existence, wihich leads to crashyness).
1790
1791         This patch doesn't fix the problem.  The crash occurs when tracking a Scope, but
1792         we shouldn't need to track scopes when we're just sampling opcodes, not
1793         codeblocks.  Not retaining Scopes when just opcode sampling will reduce sampling
1794         overhead reducing any instrumentation skew, which is a good thing.  As a side
1795         benefit this patch also gets the opcode sampling going again, albeit in a bit of
1796         a lame way.  Will come back later with a proper fix from codeblock sampling. 
1797
1798         * JavaScriptCore.exp:
1799         * bytecode/SamplingTool.cpp:
1800         (JSC::compareLineCountInfoSampling):
1801         (JSC::SamplingTool::dump):
1802         * bytecode/SamplingTool.h:
1803         (JSC::SamplingTool::SamplingTool):
1804         * parser/Nodes.cpp:
1805         (JSC::ScopeNode::ScopeNode):
1806
1807 2009-05-07  Mark Rowe  <mrowe@apple.com>
1808
1809         Rubber-stamped by Oliver Hunt.
1810
1811         Fix <https://bugs.webkit.org/show_bug.cgi?id=25640>.
1812         Bug 25640: Crash on quit in r43384 nightly build on Leopard w/ Safari 4 beta installed
1813         
1814         Roll out r43366 as it removed symbols that Safari 4 Beta uses.
1815
1816         * JavaScriptCore.exp:
1817         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1818         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1819         * bytecode/SamplingTool.cpp:
1820         (JSC::SamplingThread::start):
1821         (JSC::SamplingThread::stop):
1822         * bytecode/SamplingTool.h:
1823         * wtf/CrossThreadRefCounted.h:
1824         (WTF::CrossThreadRefCounted::CrossThreadRefCounted):
1825         (WTF::::ref):
1826         (WTF::::deref):
1827         * wtf/Threading.h:
1828         * wtf/ThreadingNone.cpp:
1829         * wtf/ThreadingPthreads.cpp:
1830         (WTF::threadMapMutex):
1831         (WTF::initializeThreading):
1832         (WTF::threadMap):
1833         (WTF::identifierByPthreadHandle):
1834         (WTF::establishIdentifierForPthreadHandle):
1835         (WTF::pthreadHandleForIdentifier):
1836         (WTF::clearPthreadHandleForIdentifier):
1837         (WTF::createThreadInternal):
1838         (WTF::waitForThreadCompletion):
1839         (WTF::detachThread):
1840         (WTF::currentThread):
1841         * wtf/ThreadingWin.cpp:
1842         (WTF::threadMapMutex):
1843         (WTF::initializeThreading):
1844         (WTF::threadMap):
1845         (WTF::storeThreadHandleByIdentifier):
1846         (WTF::threadHandleForIdentifier):
1847         (WTF::clearThreadHandleForIdentifier):
1848         (WTF::createThreadInternal):
1849         (WTF::waitForThreadCompletion):
1850         (WTF::detachThread):
1851         (WTF::currentThread):
1852         * wtf/gtk/ThreadingGtk.cpp:
1853         (WTF::threadMapMutex):
1854         (WTF::initializeThreading):
1855         (WTF::threadMap):
1856         (WTF::identifierByGthreadHandle):
1857         (WTF::establishIdentifierForThread):
1858         (WTF::threadForIdentifier):
1859         (WTF::clearThreadForIdentifier):
1860         (WTF::createThreadInternal):
1861         (WTF::waitForThreadCompletion):
1862         (WTF::currentThread):
1863         * wtf/qt/ThreadingQt.cpp:
1864         (WTF::threadMapMutex):
1865         (WTF::threadMap):
1866         (WTF::identifierByQthreadHandle):
1867         (WTF::establishIdentifierForThread):
1868         (WTF::clearThreadForIdentifier):
1869         (WTF::threadForIdentifier):
1870         (WTF::initializeThreading):
1871         (WTF::createThreadInternal):
1872         (WTF::waitForThreadCompletion):
1873         (WTF::currentThread):
1874
1875 2009-05-07  Gustavo Noronha Silva  <gns@gnome.org>
1876
1877         Suggested by Oliver Hunt.
1878
1879         Also check for Linux for the special-cased calling convention.
1880
1881         * jit/JIT.cpp:
1882         (JSC::JIT::privateCompileCTIMachineTrampolines):
1883         * wtf/Platform.h:
1884
1885 2009-05-07  Gavin Barraclough  <barraclough@apple.com>
1886
1887         Reviewed by Maciej Stachowiak.
1888
1889         Previously, when appending to an existing string and growing the underlying buffer,
1890         we would actually allocate 110% of the required size in order to give us some space
1891         to expand into.  Now we treat strings differently based on their size:
1892
1893         Small Strings (up to 4 pages):
1894         Expand the allocation size to 112.5% of the amount requested.  This is largely sicking
1895         to our previous policy, however 112.5% is cheaper to calculate.
1896
1897         Medium Strings (up to 128 pages):
1898         For pages covering multiple pages over-allocation is less of a concern - any unused
1899         space will not be paged in if it is not used, so this is purely a VM overhead.  For
1900         these strings allocate 2x the requested size.
1901
1902         Large Strings (to infinity and beyond!):
1903         Revert to our 112.5% policy - probably best to limit the amount of unused VM we allow
1904         any individual string be responsible for.
1905
1906         Additionally, round small allocations up to a multiple of 16 bytes, and medium and
1907         large allocations up to a multiple of page size.
1908
1909         ~1.5% progression on Sunspider, due to 5% improvement on tagcloud & 15% on validate.
1910
1911         * runtime/UString.cpp:
1912         (JSC::expandedSize):
1913
1914 2009-05-07  Geoffrey Garen  <ggaren@apple.com>
1915
1916         Reviewed by Cameron Zwarich.
1917         
1918         Fixed a minor sequencing error introduced by recent Parser speedups.
1919
1920         * runtime/JSGlobalData.cpp:
1921         (JSC::JSGlobalData::createNativeThunk): Missed a spot in my last patch.
1922
1923 2009-05-07  Geoffrey Garen  <ggaren@apple.com>
1924
1925         Not reviewed.
1926
1927         * wtf/Platform.h: Reverted an accidental (and performance-catastrophic)
1928         change.
1929
1930 2009-05-07  Geoffrey Garen  <ggaren@apple.com>
1931
1932         Reviewed by Cameron Zwarich.
1933         
1934         Fixed a minor sequencing error introduced by recent Parser speedups.
1935
1936         * parser/Parser.cpp:
1937         (JSC::Parser::reparseInPlace): Missed a spot in my last patch.
1938
1939 2009-05-07  Geoffrey Garen  <ggaren@apple.com>
1940
1941         Reviewed by Cameron Zwarich.
1942         
1943         Fixed a minor sequencing error introduced by recent Parser speedups.
1944
1945         * parser/Parser.cpp:
1946         (JSC::Parser::parse):
1947         * parser/Parser.h:
1948         (JSC::Parser::parse):
1949         (JSC::Parser::reparse): Shrink the parsedObjects vector after allocating
1950         the root node, to avoid leaving a stray node in the vector, since that's
1951         a slight memory leak, and it causes problems during JSGlobalData teardown.
1952
1953         * runtime/JSGlobalData.cpp:
1954         (JSC::JSGlobalData::~JSGlobalData): ASSERT that we're not being torn
1955         down while we think we're still parsing, since that would cause lots of
1956         bad memory references during our destruction.
1957
1958 2009-05-07  Geoffrey Garen  <ggaren@apple.com>
1959
1960         Reviewed by Cameron Zwarich.
1961         
1962         Replaced two more macros with references to the JITStackFrame structure.
1963
1964         * jit/JIT.cpp:
1965         (JSC::JIT::privateCompileMainPass):
1966         * jit/JITInlineMethods.h:
1967         (JSC::JIT::restoreArgumentReference):
1968         * jit/JITStubs.cpp:
1969         (JSC::):
1970         * jit/JITStubs.h:
1971
1972 2009-05-07  Oliver Hunt  <oliver@apple.com>
1973
1974         Reviewed by Gavin Barraclough.
1975
1976         Improve native call performance
1977
1978         Fix the windows build by adding calling convention declarations everywhere,
1979         chose fastcall as that seemed most sensible given we were having to declare
1980         the convention explicitly.  In addition switched to fastcall on mac in the
1981         deluded belief that documented fastcall behavior on windows would match 
1982         actual its actual behavior.
1983
1984         * API/JSCallbackFunction.h:
1985         * API/JSCallbackObject.h:
1986         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1987         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1988         * interpreter/CallFrame.h:
1989         (JSC::ExecState::argumentCount):
1990         * jit/JIT.cpp:
1991         (JSC::JIT::privateCompileCTIMachineTrampolines):
1992         * jsc.cpp:
1993         (functionPrint):
1994         (functionDebug):
1995         (functionGC):
1996         (functionVersion):
1997         (functionRun):
1998         (functionLoad):
1999         (functionSetSamplingFlags):
2000         (functionClearSamplingFlags):
2001         (functionReadline):
2002         (functionQuit):
2003         * runtime/ArrayConstructor.cpp:
2004         (JSC::callArrayConstructor):
2005         * runtime/ArrayPrototype.cpp:
2006         (JSC::arrayProtoFuncToString):
2007         (JSC::arrayProtoFuncToLocaleString):
2008         (JSC::arrayProtoFuncJoin):
2009         (JSC::arrayProtoFuncConcat):
2010         (JSC::arrayProtoFuncPop):
2011         (JSC::arrayProtoFuncPush):
2012         (JSC::arrayProtoFuncReverse):
2013         (JSC::arrayProtoFuncShift):
2014         (JSC::arrayProtoFuncSlice):
2015         (JSC::arrayProtoFuncSort):
2016         (JSC::arrayProtoFuncSplice):
2017         (JSC::arrayProtoFuncUnShift):
2018         (JSC::arrayProtoFuncFilter):
2019         (JSC::arrayProtoFuncMap):
2020         (JSC::arrayProtoFuncEvery):
2021         (JSC::arrayProtoFuncForEach):
2022         (JSC::arrayProtoFuncSome):
2023         (JSC::arrayProtoFuncReduce):
2024         (JSC::arrayProtoFuncReduceRight):
2025         (JSC::arrayProtoFuncIndexOf):
2026         (JSC::arrayProtoFuncLastIndexOf):
2027         * runtime/BooleanConstructor.cpp:
2028         (JSC::callBooleanConstructor):
2029         * runtime/BooleanPrototype.cpp:
2030         (JSC::booleanProtoFuncToString):
2031         (JSC::booleanProtoFuncValueOf):
2032         * runtime/CallData.h:
2033         * runtime/DateConstructor.cpp:
2034         (JSC::callDate):
2035         (JSC::dateParse):
2036         (JSC::dateNow):
2037         (JSC::dateUTC):
2038         * runtime/DatePrototype.cpp:
2039         (JSC::dateProtoFuncToString):
2040         (JSC::dateProtoFuncToUTCString):
2041         (JSC::dateProtoFuncToDateString):
2042         (JSC::dateProtoFuncToTimeString):
2043         (JSC::dateProtoFuncToLocaleString):
2044         (JSC::dateProtoFuncToLocaleDateString):
2045         (JSC::dateProtoFuncToLocaleTimeString):
2046         (JSC::dateProtoFuncGetTime):
2047         (JSC::dateProtoFuncGetFullYear):
2048         (JSC::dateProtoFuncGetUTCFullYear):
2049         (JSC::dateProtoFuncToGMTString):
2050         (JSC::dateProtoFuncGetMonth):
2051         (JSC::dateProtoFuncGetUTCMonth):
2052         (JSC::dateProtoFuncGetDate):
2053         (JSC::dateProtoFuncGetUTCDate):
2054         (JSC::dateProtoFuncGetDay):
2055         (JSC::dateProtoFuncGetUTCDay):
2056         (JSC::dateProtoFuncGetHours):
2057         (JSC::dateProtoFuncGetUTCHours):
2058         (JSC::dateProtoFuncGetMinutes):
2059         (JSC::dateProtoFuncGetUTCMinutes):
2060         (JSC::dateProtoFuncGetSeconds):
2061         (JSC::dateProtoFuncGetUTCSeconds):
2062         (JSC::dateProtoFuncGetMilliSeconds):
2063         (JSC::dateProtoFuncGetUTCMilliseconds):
2064         (JSC::dateProtoFuncGetTimezoneOffset):
2065         (JSC::dateProtoFuncSetTime):
2066         (JSC::dateProtoFuncSetMilliSeconds):
2067         (JSC::dateProtoFuncSetUTCMilliseconds):
2068         (JSC::dateProtoFuncSetSeconds):
2069         (JSC::dateProtoFuncSetUTCSeconds):
2070         (JSC::dateProtoFuncSetMinutes):
2071         (JSC::dateProtoFuncSetUTCMinutes):
2072         (JSC::dateProtoFuncSetHours):
2073         (JSC::dateProtoFuncSetUTCHours):
2074         (JSC::dateProtoFuncSetDate):
2075         (JSC::dateProtoFuncSetUTCDate):
2076         (JSC::dateProtoFuncSetMonth):
2077         (JSC::dateProtoFuncSetUTCMonth):
2078         (JSC::dateProtoFuncSetFullYear):
2079         (JSC::dateProtoFuncSetUTCFullYear):
2080         (JSC::dateProtoFuncSetYear):
2081         (JSC::dateProtoFuncGetYear):
2082         * runtime/ErrorConstructor.cpp:
2083         (JSC::callErrorConstructor):
2084         * runtime/ErrorPrototype.cpp:
2085         (JSC::errorProtoFuncToString):
2086         * runtime/FunctionConstructor.cpp:
2087         (JSC::callFunctionConstructor):
2088         * runtime/FunctionPrototype.cpp:
2089         (JSC::callFunctionPrototype):
2090         (JSC::functionProtoFuncToString):
2091         (JSC::functionProtoFuncApply):
2092         (JSC::functionProtoFuncCall):
2093         * runtime/JSFunction.h:
2094         (JSC::JSFunction::nativeFunction):
2095         (JSC::JSFunction::setScopeChain):
2096         * runtime/JSGlobalObjectFunctions.cpp:
2097         (JSC::globalFuncEval):
2098         (JSC::globalFuncParseInt):
2099         (JSC::globalFuncParseFloat):
2100         (JSC::globalFuncIsNaN):
2101         (JSC::globalFuncIsFinite):
2102         (JSC::globalFuncDecodeURI):
2103         (JSC::globalFuncDecodeURIComponent):
2104         (JSC::globalFuncEncodeURI):
2105         (JSC::globalFuncEncodeURIComponent):
2106         (JSC::globalFuncEscape):
2107         (JSC::globalFuncUnescape):
2108         (JSC::globalFuncJSCPrint):
2109         * runtime/JSGlobalObjectFunctions.h:
2110         * runtime/MathObject.cpp:
2111         (JSC::mathProtoFuncAbs):
2112         (JSC::mathProtoFuncACos):
2113         (JSC::mathProtoFuncASin):
2114         (JSC::mathProtoFuncATan):
2115         (JSC::mathProtoFuncATan2):
2116         (JSC::mathProtoFuncCeil):
2117         (JSC::mathProtoFuncCos):
2118         (JSC::mathProtoFuncExp):
2119         (JSC::mathProtoFuncFloor):
2120         (JSC::mathProtoFuncLog):
2121         (JSC::mathProtoFuncMax):
2122         (JSC::mathProtoFuncMin):
2123         (JSC::mathProtoFuncPow):
2124         (JSC::mathProtoFuncRandom):
2125         (JSC::mathProtoFuncRound):
2126         (JSC::mathProtoFuncSin):
2127         (JSC::mathProtoFuncSqrt):
2128         (JSC::mathProtoFuncTan):
2129         * runtime/NativeErrorConstructor.cpp:
2130         (JSC::callNativeErrorConstructor):
2131         * runtime/NativeFunctionWrapper.h:
2132         * runtime/NumberConstructor.cpp:
2133         (JSC::callNumberConstructor):
2134         * runtime/NumberPrototype.cpp:
2135         (JSC::numberProtoFuncToString):
2136         (JSC::numberProtoFuncToLocaleString):
2137         (JSC::numberProtoFuncValueOf):
2138         (JSC::numberProtoFuncToFixed):
2139         (JSC::numberProtoFuncToExponential):
2140         (JSC::numberProtoFuncToPrecision):
2141         * runtime/ObjectConstructor.cpp:
2142         (JSC::callObjectConstructor):
2143         * runtime/ObjectPrototype.cpp:
2144         (JSC::objectProtoFuncValueOf):
2145         (JSC::objectProtoFuncHasOwnProperty):
2146         (JSC::objectProtoFuncIsPrototypeOf):
2147         (JSC::objectProtoFuncDefineGetter):
2148         (JSC::objectProtoFuncDefineSetter):
2149         (JSC::objectProtoFuncLookupGetter):
2150         (JSC::objectProtoFuncLookupSetter):
2151         (JSC::objectProtoFuncPropertyIsEnumerable):
2152         (JSC::objectProtoFuncToLocaleString):
2153         (JSC::objectProtoFuncToString):
2154         * runtime/ObjectPrototype.h:
2155         * runtime/RegExpConstructor.cpp:
2156         (JSC::callRegExpConstructor):
2157         * runtime/RegExpObject.cpp:
2158         (JSC::callRegExpObject):
2159         * runtime/RegExpPrototype.cpp:
2160         (JSC::regExpProtoFuncTest):
2161         (JSC::regExpProtoFuncExec):
2162         (JSC::regExpProtoFuncCompile):
2163         (JSC::regExpProtoFuncToString):
2164         * runtime/StringConstructor.cpp:
2165         (JSC::stringFromCharCode):
2166         (JSC::callStringConstructor):
2167         * runtime/StringPrototype.cpp:
2168         (JSC::stringProtoFuncReplace):
2169         (JSC::stringProtoFuncToString):
2170         (JSC::stringProtoFuncCharAt):
2171         (JSC::stringProtoFuncCharCodeAt):
2172         (JSC::stringProtoFuncConcat):
2173         (JSC::stringProtoFuncIndexOf):
2174         (JSC::stringProtoFuncLastIndexOf):
2175         (JSC::stringProtoFuncMatch):
2176         (JSC::stringProtoFuncSearch):
2177         (JSC::stringProtoFuncSlice):
2178         (JSC::stringProtoFuncSplit):
2179         (JSC::stringProtoFuncSubstr):
2180         (JSC::stringProtoFuncSubstring):
2181         (JSC::stringProtoFuncToLowerCase):
2182         (JSC::stringProtoFuncToUpperCase):
2183         (JSC::stringProtoFuncLocaleCompare):
2184         (JSC::stringProtoFuncBig):
2185         (JSC::stringProtoFuncSmall):
2186         (JSC::stringProtoFuncBlink):
2187         (JSC::stringProtoFuncBold):
2188         (JSC::stringProtoFuncFixed):
2189         (JSC::stringProtoFuncItalics):
2190         (JSC::stringProtoFuncStrike):
2191         (JSC::stringProtoFuncSub):
2192         (JSC::stringProtoFuncSup):
2193         (JSC::stringProtoFuncFontcolor):
2194         (JSC::stringProtoFuncFontsize):
2195         (JSC::stringProtoFuncAnchor):
2196         (JSC::stringProtoFuncLink):
2197         * wtf/Platform.h:
2198
2199 2009-05-07  Geoffrey Garen  <ggaren@apple.com>
2200
2201         Not reviewed.
2202         
2203         Rolled out a portion of r43352 because it broke 64bit.
2204
2205         * jit/JITStubs.h:
2206
2207 2009-05-07  Kevin Ollivier  <kevino@theolliviers.com>
2208
2209         Build fix for functions reaturning ThreadIdentifier.
2210
2211         * wtf/ThreadingNone.cpp:
2212         (WTF::createThreadInternal):
2213         (WTF::currentThread):
2214
2215 2009-05-07  Maciej Stachowiak  <mjs@apple.com>
2216
2217         Reviewed by John Honeycutt.
2218         
2219         - enable optimization case im the last patch that I accidentally had disabled.
2220
2221         * jit/JITArithmetic.cpp:
2222         (JSC::JIT::compileFastArithSlow_op_jnless):
2223
2224 2009-05-07  Dmitry Titov  <dimich@chromium.org>
2225
2226         Attempt to fix Win build.
2227
2228         * jit/JITArithmetic.cpp:
2229         (JSC::JIT::compileFastArithSlow_op_jnless):
2230
2231 2009-05-07  Dmitry Titov  <dimich@chromium.org>
2232
2233         Reviewed by Alexey Proskuryakov and Adam Roben.
2234
2235         https://bugs.webkit.org/show_bug.cgi?id=25348
2236         Change WTF::ThreadIdentifier to be an actual (but wrapped) thread id, remove ThreadMap.
2237
2238         * wtf/Threading.h:
2239         (WTF::ThreadIdentifier::ThreadIdentifier):
2240         (WTF::ThreadIdentifier::isValid):
2241         (WTF::ThreadIdentifier::invalidate):
2242         (WTF::ThreadIdentifier::platformId):
2243         ThreadIdentifier is now a class, containing a PlatformThreadIdentifier and
2244         methods that are used across the code on thread ids: construction, comparisons,
2245         check for 'valid' state etc. '0' is used as invalid id, which happens to just work
2246         with all platform-specific thread id implementations.
2247
2248         All the following files repeatedly reflect the new ThreadIdentifier for each platform.
2249         We remove ThreadMap and threadMapMutex from all of them, remove the functions that
2250         populated/searched/cleared the map and add platform-specific comparison operators
2251         for ThreadIdentifier.
2252
2253         * wtf/gtk/ThreadingGtk.cpp:
2254         (WTF::ThreadIdentifier::operator==):
2255         (WTF::ThreadIdentifier::operator!=):
2256         (WTF::initializeThreading):
2257         (WTF::createThreadInternal):
2258         (WTF::waitForThreadCompletion):
2259         (WTF::currentThread):
2260
2261         * wtf/ThreadingNone.cpp:
2262         (WTF::ThreadIdentifier::operator==):
2263         (WTF::ThreadIdentifier::operator!=):
2264
2265         * wtf/ThreadingPthreads.cpp:
2266         (WTF::ThreadIdentifier::operator==):
2267         (WTF::ThreadIdentifier::operator!=):
2268         (WTF::initializeThreading):
2269         (WTF::createThreadInternal):
2270         (WTF::waitForThreadCompletion):
2271         (WTF::detachThread):
2272         (WTF::currentThread):
2273
2274         * wtf/qt/ThreadingQt.cpp:
2275         (WTF::ThreadIdentifier::operator==):
2276         (WTF::ThreadIdentifier::operator!=):
2277         (WTF::initializeThreading):
2278         (WTF::createThreadInternal):
2279         (WTF::waitForThreadCompletion):
2280         (WTF::currentThread):
2281
2282         * wtf/ThreadingWin.cpp:
2283         (WTF::ThreadIdentifier::operator==):
2284         (WTF::ThreadIdentifier::operator!=):
2285         (WTF::initializeThreading):
2286         (WTF::createThreadInternal): All the platforms (except Windows) used a sequential
2287         counter as a thread ID and mapped it into platform ID. Windows was using native thread
2288         id and mapped it into thread handle. Since we can always obtain a thread handle
2289         by thread id, createThread now closes the handle.
2290         (WTF::waitForThreadCompletion): obtains another one using OpenThread(id) API. If can not obtain a handle,
2291         it means the thread already exited.
2292         (WTF::detachThread):
2293         (WTF::currentThread):
2294         (WTF::detachThreadDeprecated): old function, renamed (for Win Safari 4 beta which uses it for now).
2295         (WTF::waitForThreadCompletionDeprecated): same.
2296         (WTF::currentThreadDeprecated): same.
2297         (WTF::createThreadDeprecated): same.
2298
2299         * bytecode/SamplingTool.h:
2300         * bytecode/SamplingTool.cpp: Use DEFINE_STATIC_LOCAL for a static ThreadIdentifier variable, to avoid static constructor.
2301
2302         * JavaScriptCore.exp: export lists - updated the WTF threading functions decorated names
2303         since they now take a different type as a parameter.
2304         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: ditto for Windows, plus added "deprecated" functions
2305         that take old parameter type - turns out public beta of Safari 4 uses those, so they need to be kept along for a while.
2306         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: ditto.
2307
2308 2009-05-07  Maciej Stachowiak  <mjs@apple.com>
2309
2310         Reviewed by Sam Weinig.
2311         
2312         - optimize various cases of branch-fused less
2313         
2314         1% speedup on SunSpider overall
2315         13% speedup on math-cordic
2316
2317         * jit/JIT.cpp:
2318         (JSC::JIT::privateCompileMainPass):
2319         op_loop_if_less: Optimize case of constant as first operand, just as case of constant as
2320         second operand.
2321         op_jnless: Factored out into compileFastArith_op_jnless.
2322         (JSC::JIT::privateCompileSlowCases):
2323         op_jnless: Factored out into compileFastArithSlow_op_jnless.
2324         * jit/JIT.h:
2325         * jit/JITArithmetic.cpp:
2326         (JSC::JIT::compileFastArith_op_jnless): Factored out from main compile loop.
2327         - Generate inline code for comparison of constant immediate int as first operand to another
2328         immediate int, as for loop_if_less
2329
2330         (JSC::JIT::compileFastArithSlow_op_jnless):
2331         - Generate inline code for comparing two floating point numbers.
2332         - Generate code for both cases of comparing a floating point number to a constant immediate 
2333         int.
2334         * bytecode/CodeBlock.cpp:
2335         (JSC::CodeBlock::dump): Fix dumping of op_jnless (tangentially related bugfix).
2336
2337 2009-05-07  Geoffrey Garen  <ggaren@apple.com>
2338
2339         Reviewed by Sam Weinig.
2340         
2341         Added the return address of a stub function to the JITStackFrame abstraction.
2342
2343         * jit/JIT.cpp:
2344         * jit/JIT.h:
2345         * jit/JITStubs.cpp:
2346         (JSC::):
2347         (JSC::StackHack::StackHack):
2348         (JSC::StackHack::~StackHack):
2349         (JSC::returnToThrowTrampoline):
2350         (JSC::JITStubs::cti_op_convert_this):
2351         (JSC::JITStubs::cti_op_end):
2352         (JSC::JITStubs::cti_op_add):
2353         (JSC::JITStubs::cti_op_pre_inc):
2354         (JSC::JITStubs::cti_timeout_check):
2355         (JSC::JITStubs::cti_register_file_check):
2356         (JSC::JITStubs::cti_op_loop_if_less):
2357         (JSC::JITStubs::cti_op_loop_if_lesseq):
2358         (JSC::JITStubs::cti_op_new_object):
2359         (JSC::JITStubs::cti_op_put_by_id_generic):
2360         (JSC::JITStubs::cti_op_get_by_id_generic):
2361         (JSC::JITStubs::cti_op_put_by_id):
2362         (JSC::JITStubs::cti_op_put_by_id_second):
2363         (JSC::JITStubs::cti_op_put_by_id_fail):
2364         (JSC::JITStubs::cti_op_get_by_id):
2365         (JSC::JITStubs::cti_op_get_by_id_second):
2366         (JSC::JITStubs::cti_op_get_by_id_self_fail):
2367         (JSC::JITStubs::cti_op_get_by_id_proto_list):
2368         (JSC::JITStubs::cti_op_get_by_id_proto_list_full):
2369         (JSC::JITStubs::cti_op_get_by_id_proto_fail):
2370         (JSC::JITStubs::cti_op_get_by_id_array_fail):
2371         (JSC::JITStubs::cti_op_get_by_id_string_fail):
2372         (JSC::JITStubs::cti_op_instanceof):
2373         (JSC::JITStubs::cti_op_del_by_id):
2374         (JSC::JITStubs::cti_op_mul):
2375         (JSC::JITStubs::cti_op_new_func):
2376         (JSC::JITStubs::cti_op_call_JSFunction):
2377         (JSC::JITStubs::cti_op_call_arityCheck):
2378         (JSC::JITStubs::cti_vm_dontLazyLinkCall):
2379         (JSC::JITStubs::cti_vm_lazyLinkCall):
2380         (JSC::JITStubs::cti_op_push_activation):
2381         (JSC::JITStubs::cti_op_call_NotJSFunction):
2382         (JSC::JITStubs::cti_op_create_arguments):
2383         (JSC::JITStubs::cti_op_create_arguments_no_params):
2384         (JSC::JITStubs::cti_op_tear_off_activation):
2385         (JSC::JITStubs::cti_op_tear_off_arguments):
2386         (JSC::JITStubs::cti_op_profile_will_call):
2387         (JSC::JITStubs::cti_op_profile_did_call):
2388         (JSC::JITStubs::cti_op_ret_scopeChain):
2389         (JSC::JITStubs::cti_op_new_array):
2390         (JSC::JITStubs::cti_op_resolve):
2391         (JSC::JITStubs::cti_op_construct_JSConstruct):
2392         (JSC::JITStubs::cti_op_construct_NotJSConstruct):
2393         (JSC::JITStubs::cti_op_get_by_val):
2394         (JSC::JITStubs::cti_op_get_by_val_string):
2395         (JSC::JITStubs::cti_op_get_by_val_byte_array):
2396         (JSC::JITStubs::cti_op_resolve_func):
2397         (JSC::JITStubs::cti_op_sub):
2398         (JSC::JITStubs::cti_op_put_by_val):
2399         (JSC::JITStubs::cti_op_put_by_val_array):
2400         (JSC::JITStubs::cti_op_put_by_val_byte_array):
2401         (JSC::JITStubs::cti_op_lesseq):
2402         (JSC::JITStubs::cti_op_loop_if_true):
2403         (JSC::JITStubs::cti_op_load_varargs):
2404         (JSC::JITStubs::cti_op_negate):
2405         (JSC::JITStubs::cti_op_resolve_base):
2406         (JSC::JITStubs::cti_op_resolve_skip):
2407         (JSC::JITStubs::cti_op_resolve_global):
2408         (JSC::JITStubs::cti_op_div):
2409         (JSC::JITStubs::cti_op_pre_dec):
2410         (JSC::JITStubs::cti_op_jless):
2411         (JSC::JITStubs::cti_op_not):
2412         (JSC::JITStubs::cti_op_jtrue):
2413         (JSC::JITStubs::cti_op_post_inc):
2414         (JSC::JITStubs::cti_op_eq):
2415         (JSC::JITStubs::cti_op_lshift):
2416         (JSC::JITStubs::cti_op_bitand):
2417         (JSC::JITStubs::cti_op_rshift):
2418         (JSC::JITStubs::cti_op_bitnot):
2419         (JSC::JITStubs::cti_op_resolve_with_base):
2420         (JSC::JITStubs::cti_op_new_func_exp):
2421         (JSC::JITStubs::cti_op_mod):
2422         (JSC::JITStubs::cti_op_less):
2423         (JSC::JITStubs::cti_op_neq):
2424         (JSC::JITStubs::cti_op_post_dec):
2425         (JSC::JITStubs::cti_op_urshift):
2426         (JSC::JITStubs::cti_op_bitxor):
2427         (JSC::JITStubs::cti_op_new_regexp):
2428         (JSC::JITStubs::cti_op_bitor):
2429         (JSC::JITStubs::cti_op_call_eval):
2430         (JSC::JITStubs::cti_op_throw):
2431         (JSC::JITStubs::cti_op_get_pnames):
2432         (JSC::JITStubs::cti_op_next_pname):
2433         (JSC::JITStubs::cti_op_push_scope):
2434         (JSC::JITStubs::cti_op_pop_scope):
2435         (JSC::JITStubs::cti_op_typeof):
2436         (JSC::JITStubs::cti_op_is_undefined):
2437         (JSC::JITStubs::cti_op_is_boolean):
2438         (JSC::JITStubs::cti_op_is_number):
2439         (JSC::JITStubs::cti_op_is_string):
2440         (JSC::JITStubs::cti_op_is_object):
2441         (JSC::JITStubs::cti_op_is_function):
2442         (JSC::JITStubs::cti_op_stricteq):
2443         (JSC::JITStubs::cti_op_to_primitive):
2444         (JSC::JITStubs::cti_op_strcat):
2445         (JSC::JITStubs::cti_op_nstricteq):
2446         (JSC::JITStubs::cti_op_to_jsnumber):
2447         (JSC::JITStubs::cti_op_in):
2448         (JSC::JITStubs::cti_op_push_new_scope):
2449         (JSC::JITStubs::cti_op_jmp_scopes):
2450         (JSC::JITStubs::cti_op_put_by_index):
2451         (JSC::JITStubs::cti_op_switch_imm):
2452         (JSC::JITStubs::cti_op_switch_char):
2453         (JSC::JITStubs::cti_op_switch_string):
2454         (JSC::JITStubs::cti_op_del_by_val):
2455         (JSC::JITStubs::cti_op_put_getter):
2456         (JSC::JITStubs::cti_op_put_setter):
2457         (JSC::JITStubs::cti_op_new_error):
2458         (JSC::JITStubs::cti_op_debug):
2459         (JSC::JITStubs::cti_vm_throw):
2460         * jit/JITStubs.h:
2461         (JSC::JITStackFrame::returnAddressSlot):
2462
2463 2009-05-07  Darin Adler  <darin@apple.com>
2464
2465         Reviewed by Geoff Garen.
2466
2467         * parser/Lexer.cpp:
2468         (JSC::Lexer::lex): Fix missing braces. This would make us always
2469         take the slower case for string parsing and Visual Studio correctly
2470         noticed unreachable code.
2471
2472 2009-05-07  Darin Adler  <darin@apple.com>
2473
2474         Reviewed by Sam Weinig.
2475
2476         Bug 25589: goto instead of state machine in lexer
2477         https://bugs.webkit.org/show_bug.cgi?id=25589
2478
2479         SunSpider is 0.8% faster.
2480
2481         * parser/Lexer.cpp:
2482         (JSC::Lexer::currentCharacter): Added.
2483         (JSC::Lexer::currentOffset): Changed to call currentCharacter for clarity.
2484         (JSC::Lexer::setCode): Removed code to set now-obsolete m_skipLineEnd.
2485         (JSC::Lexer::shiftLineTerminator): Added. Handles line numbers and the
2486         two-character line terminators.
2487         (JSC::Lexer::makeIdentifier): Changed to take characters and length rather
2488         than a vector, since we now make these directly out of the source buffer
2489         when possible.
2490         (JSC::Lexer::lastTokenWasRestrKeyword): Added.
2491         (JSC::isNonASCIIIdentStart): Broke out the non-inline part.
2492         (JSC::isIdentStart): Moved here.
2493         (JSC::isNonASCIIIdentPart): Broke out the non-inline part.
2494         (JSC::isIdentPart): Moved here.
2495         (JSC::singleEscape): Moved here, and removed some unneeded cases.
2496         (JSC::Lexer::record8): Moved here.
2497         (JSC::Lexer::record16): Moved here.
2498         (JSC::Lexer::lex): Rewrote this whole function to use goto and not use
2499         a state machine. Got rid of most of the local variables. Also rolled the
2500         matchPunctuator function in here.
2501         (JSC::Lexer::scanRegExp): Changed to use the new version of isLineTerminator.
2502         Clear m_buffer16 after using it instead of before.
2503
2504         * parser/Lexer.h: Removed State enum, setDone function, nextLine function,
2505         lookupKeywordFunction, one of the isLineTerminator functions, m_done data member,
2506         m_skipLineEnd data member, and m_state data member. Added shiftLineTerminator
2507         function, currentCharacter function, and changed the arguments to the makeIdentifier
2508         function. Removed one branch from the isLineTerminator function.
2509
2510         * runtime/StringPrototype.cpp:
2511         (JSC::stringProtoFuncReplace): Streamlined the case where we don't replace anything.
2512
2513 2009-05-07  Geoffrey Garen  <ggaren@apple.com>
2514
2515         Reviewed by Gavin Barraclough.
2516
2517         Removed a few more special constants, and replaced them with uses of
2518         the JITStackFrame struct.
2519
2520         Removed one of the two possible definitions of VoidPtrPair. The Mac
2521         definition was more elegant, but SunSpider doesn't think it's any
2522         faster, and it's net less elegant to have two ways of doing things.
2523
2524         * jit/JIT.cpp:
2525         (JSC::JIT::privateCompileMainPass):
2526         (JSC::JIT::privateCompile):
2527         * jit/JITStubs.h:
2528         (JSC::):
2529
2530 2009-05-07  Darin Adler  <darin@apple.com>
2531
2532         * runtime/ScopeChain.h:
2533         (JSC::ScopeChainNode::~ScopeChainNode): Tweak formatting.
2534
2535 2009-05-07  Simon Hausmann  <simon.hausmann@nokia.com>
2536
2537         Reviewed by Tor Arne Vestbø.
2538
2539         Fix the build thread stack base determination build on Symbian,
2540         by moving the code block before PLATFORM(UNIX), which is also
2541         enabled on Symbian builds.
2542
2543         * runtime/Collector.cpp:
2544         (JSC::currentThreadStackBase):
2545
2546 2009-05-07  Oliver Hunt  <oliver@apple.com>
2547
2548         Reviewed by Gavin Barraclough.
2549
2550         Fix crash due to incorrectly using an invalid scopechain 
2551
2552         stringProtoFuncReplace was checking for an exception on a CachedCall
2553         by asking for the cached callframes exception.  Unfortunately this
2554         could crash in certain circumstances as CachedCall does not guarantee
2555         a valid callframe following a call.  Even more unfortunately the check
2556         was entirely unnecessary as there is only a single exception slot per
2557         global data, so it was already checked via the initial exec->hadException()
2558         check.
2559
2560         To make bugs like this more obvious, i've added a debug only destructor
2561         to ScopeChainNode that 0's all of its fields.  This exposed a crash in
2562         the standard javascriptcore tests.
2563
2564         * runtime/ScopeChain.h:
2565         (JSC::ScopeChainNode::~ScopeChainNode):
2566         (JSC::ScopeChain::~ScopeChain):
2567         * runtime/StringPrototype.cpp:
2568         (JSC::stringProtoFuncReplace):
2569
2570 2009-05-07  Gavin Barraclough  <barraclough@apple.com>
2571
2572         Reviewed by Geoff Garen.
2573
2574         Enable op_strcat across += assignments.  This patch allows the lhs of a read/modify node
2575         to be included within the concatenation operation, and also modifies the implementation
2576         of the concatenation to attempt to reuse and cat onto the leftmost string, rather than
2577         always allocating a new empty output string to copy into (as was previously the behaviour).
2578
2579         ~0.5% progression, due to a 3%-3.5% progression on the string tests (particularly validate).
2580
2581         * parser/Nodes.cpp:
2582         (JSC::BinaryOpNode::emitStrcat):
2583         (JSC::emitReadModifyAssignment):
2584         (JSC::ReadModifyResolveNode::emitBytecode):
2585         (JSC::ReadModifyDotNode::emitBytecode):
2586         (JSC::ReadModifyBracketNode::emitBytecode):
2587         * parser/Nodes.h:
2588         * runtime/Operations.h:
2589         (JSC::concatenateStrings):
2590         * runtime/UString.cpp:
2591         (JSC::UString::reserveCapacity):
2592         * runtime/UString.h:
2593
2594 2009-05-07  Simon Hausmann  <simon.hausmann@nokia.com>
2595
2596         Reviewed by Oliver Hunt.
2597
2598         Fix the build on Windows without JIT: interpreter/RegisterFile.h needs
2599         roundUpAllocationSize, which is protected by #if ENABLED(ASSEMBLER).
2600         Moved the #ifdef down and always offer the function.
2601
2602         * jit/ExecutableAllocator.h:
2603
2604 2009-05-06  Geoffrey Garen  <ggaren@apple.com>
2605
2606         Reviewed by Gavin "++" Barraclough.
2607         
2608         Added some abstraction around the JIT stub calling convention by creating
2609         a struct to represent the persistent stack frame JIT code shares with
2610         JIT stubs.
2611         
2612         SunSpider reports no change.
2613
2614         * jit/JIT.h:
2615         * jit/JITStubs.cpp:
2616         (JSC::JITStubs::cti_op_convert_this):
2617         (JSC::JITStubs::cti_op_end):
2618         (JSC::JITStubs::cti_op_add):
2619         (JSC::JITStubs::cti_op_pre_inc):
2620         (JSC::JITStubs::cti_timeout_check):
2621         (JSC::JITStubs::cti_register_file_check):
2622         (JSC::JITStubs::cti_op_loop_if_less):
2623         (JSC::JITStubs::cti_op_loop_if_lesseq):
2624         (JSC::JITStubs::cti_op_new_object):
2625         (JSC::JITStubs::cti_op_put_by_id_generic):
2626         (JSC::JITStubs::cti_op_get_by_id_generic):
2627         (JSC::JITStubs::cti_op_put_by_id):
2628         (JSC::JITStubs::cti_op_put_by_id_second):
2629         (JSC::JITStubs::cti_op_put_by_id_fail):
2630         (JSC::JITStubs::cti_op_get_by_id):
2631         (JSC::JITStubs::cti_op_get_by_id_second):
2632         (JSC::JITStubs::cti_op_get_by_id_self_fail):
2633         (JSC::JITStubs::cti_op_get_by_id_proto_list):
2634         (JSC::JITStubs::cti_op_get_by_id_proto_list_full):
2635         (JSC::JITStubs::cti_op_get_by_id_proto_fail):
2636         (JSC::JITStubs::cti_op_get_by_id_array_fail):
2637         (JSC::JITStubs::cti_op_get_by_id_string_fail):
2638         (JSC::JITStubs::cti_op_instanceof):
2639         (JSC::JITStubs::cti_op_del_by_id):
2640         (JSC::JITStubs::cti_op_mul):
2641         (JSC::JITStubs::cti_op_new_func):
2642         (JSC::JITStubs::cti_op_call_JSFunction):
2643         (JSC::JITStubs::cti_op_call_arityCheck):
2644         (JSC::JITStubs::cti_vm_dontLazyLinkCall):
2645         (JSC::JITStubs::cti_vm_lazyLinkCall):
2646         (JSC::JITStubs::cti_op_push_activation):
2647         (JSC::JITStubs::cti_op_call_NotJSFunction):
2648         (JSC::JITStubs::cti_op_create_arguments):
2649         (JSC::JITStubs::cti_op_create_arguments_no_params):
2650         (JSC::JITStubs::cti_op_tear_off_activation):
2651         (JSC::JITStubs::cti_op_tear_off_arguments):
2652         (JSC::JITStubs::cti_op_profile_will_call):
2653         (JSC::JITStubs::cti_op_profile_did_call):
2654         (JSC::JITStubs::cti_op_ret_scopeChain):
2655         (JSC::JITStubs::cti_op_new_array):
2656         (JSC::JITStubs::cti_op_resolve):
2657         (JSC::JITStubs::cti_op_construct_JSConstruct):
2658         (JSC::JITStubs::cti_op_construct_NotJSConstruct):
2659         (JSC::JITStubs::cti_op_get_by_val):
2660         (JSC::JITStubs::cti_op_get_by_val_string):
2661         (JSC::JITStubs::cti_op_get_by_val_byte_array):
2662         (JSC::JITStubs::cti_op_resolve_func):
2663         (JSC::JITStubs::cti_op_sub):
2664         (JSC::JITStubs::cti_op_put_by_val):
2665         (JSC::JITStubs::cti_op_put_by_val_array):
2666         (JSC::JITStubs::cti_op_put_by_val_byte_array):
2667         (JSC::JITStubs::cti_op_lesseq):
2668         (JSC::JITStubs::cti_op_loop_if_true):
2669         (JSC::JITStubs::cti_op_load_varargs):
2670         (JSC::JITStubs::cti_op_negate):
2671         (JSC::JITStubs::cti_op_resolve_base):
2672         (JSC::JITStubs::cti_op_resolve_skip):
2673         (JSC::JITStubs::cti_op_resolve_global):
2674         (JSC::JITStubs::cti_op_div):
2675         (JSC::JITStubs::cti_op_pre_dec):
2676         (JSC::JITStubs::cti_op_jless):
2677         (JSC::JITStubs::cti_op_not):
2678         (JSC::JITStubs::cti_op_jtrue):
2679         (JSC::JITStubs::cti_op_post_inc):
2680         (JSC::JITStubs::cti_op_eq):
2681         (JSC::JITStubs::cti_op_lshift):
2682         (JSC::JITStubs::cti_op_bitand):
2683         (JSC::JITStubs::cti_op_rshift):
2684         (JSC::JITStubs::cti_op_bitnot):
2685         (JSC::JITStubs::cti_op_resolve_with_base):
2686         (JSC::JITStubs::cti_op_new_func_exp):
2687         (JSC::JITStubs::cti_op_mod):
2688         (JSC::JITStubs::cti_op_less):
2689         (JSC::JITStubs::cti_op_neq):
2690         (JSC::JITStubs::cti_op_post_dec):
2691         (JSC::JITStubs::cti_op_urshift):
2692         (JSC::JITStubs::cti_op_bitxor):
2693         (JSC::JITStubs::cti_op_new_regexp):
2694         (JSC::JITStubs::cti_op_bitor):
2695         (JSC::JITStubs::cti_op_call_eval):
2696         (JSC::JITStubs::cti_op_throw):
2697         (JSC::JITStubs::cti_op_get_pnames):
2698         (JSC::JITStubs::cti_op_next_pname):
2699         (JSC::JITStubs::cti_op_push_scope):
2700         (JSC::JITStubs::cti_op_pop_scope):
2701         (JSC::JITStubs::cti_op_typeof):
2702         (JSC::JITStubs::cti_op_is_undefined):
2703         (JSC::JITStubs::cti_op_is_boolean):
2704         (JSC::JITStubs::cti_op_is_number):
2705         (JSC::JITStubs::cti_op_is_string):
2706         (JSC::JITStubs::cti_op_is_object):
2707         (JSC::JITStubs::cti_op_is_function):
2708         (JSC::JITStubs::cti_op_stricteq):
2709         (JSC::JITStubs::cti_op_to_primitive):
2710         (JSC::JITStubs::cti_op_strcat):
2711         (JSC::JITStubs::cti_op_nstricteq):
2712         (JSC::JITStubs::cti_op_to_jsnumber):
2713         (JSC::JITStubs::cti_op_in):
2714         (JSC::JITStubs::cti_op_push_new_scope):
2715         (JSC::JITStubs::cti_op_jmp_scopes):
2716         (JSC::JITStubs::cti_op_put_by_index):
2717         (JSC::JITStubs::cti_op_switch_imm):
2718         (JSC::JITStubs::cti_op_switch_char):
2719         (JSC::JITStubs::cti_op_switch_string):
2720         (JSC::JITStubs::cti_op_del_by_val):
2721         (JSC::JITStubs::cti_op_put_getter):
2722         (JSC::JITStubs::cti_op_put_setter):
2723         (JSC::JITStubs::cti_op_new_error):
2724         (JSC::JITStubs::cti_op_debug):
2725         (JSC::JITStubs::cti_vm_throw):
2726         * jit/JITStubs.h:
2727         (JSC::):
2728
2729 2009-05-06  Gavin Barraclough  <barraclough@apple.com>
2730
2731         Reviewed by Maciej Stachowiak & Darin Adler.
2732
2733         Improve string concatenation (as coded in JS as a sequence of adds).
2734
2735         Detect patterns corresponding to string concatenation, and change the bytecode
2736         generation to emit a new op_strcat instruction.  By handling the full set of
2737         additions within a single function we do not need allocate JSString wrappers
2738         for intermediate results, and we can calculate the size of the output string
2739         prior to allocating storage, in order to prevent reallocation of the buffer.
2740
2741         1.5%-2% progression on Sunspider, largely due to a 30% progression on date-format-xparb.
2742
2743         * bytecode/CodeBlock.cpp:
2744         (JSC::CodeBlock::dump):
2745             Add new opcodes.
2746         * bytecode/Opcode.h:
2747             Add new opcodes.
2748         * bytecompiler/BytecodeGenerator.cpp:
2749         (JSC::BytecodeGenerator::emitStrcat):
2750         (JSC::BytecodeGenerator::emitToPrimitive):
2751             Add generation of new opcodes.
2752         * bytecompiler/BytecodeGenerator.h:
2753             Add generation of new opcodes.
2754         * interpreter/Interpreter.cpp:
2755         (JSC::Interpreter::privateExecute):
2756             Add implmentation of new opcodes.
2757         * jit/JIT.cpp:
2758         (JSC::JIT::privateCompileMainPass):
2759         (JSC::JIT::privateCompileSlowCases):
2760             Add implmentation of new opcodes.
2761         * jit/JITStubs.cpp:
2762         (JSC::JITStubs::cti_op_to_primitive):
2763         (JSC::JITStubs::cti_op_strcat):
2764             Add implmentation of new opcodes.
2765         * jit/JITStubs.h:
2766             Add implmentation of new opcodes.
2767         * parser/Nodes.cpp:
2768         (JSC::BinaryOpNode::emitStrcat):
2769         (JSC::BinaryOpNode::emitBytecode):
2770         (JSC::ReadModifyResolveNode::emitBytecode):
2771             Add generation of new opcodes.
2772         * parser/Nodes.h:
2773         (JSC::ExpressionNode::):
2774         (JSC::AddNode::):
2775             Add methods to allow identification of add nodes.
2776         * parser/ResultType.h:
2777         (JSC::ResultType::definitelyIsString):
2778         (JSC::ResultType::forAdd):
2779             Fix error in detection of adds that will produce string results.
2780         * runtime/Operations.h:
2781         (JSC::concatenateStrings):
2782             Add implmentation of new opcodes.
2783         * runtime/UString.cpp:
2784         (JSC::UString::appendNumeric):
2785             Add methods to append numbers to an existing string.
2786         * runtime/UString.h:
2787         (JSC::UString::Rep::createEmptyBuffer):
2788         (JSC::UString::BaseString::BaseString):
2789             Add support for creating an empty string with a non-zero capacity available in the BaseString.
2790
2791 2009-05-06  Darin Adler  <darin@apple.com>
2792
2793         Reviewed by Sam Weinig.
2794
2795         Made RefCounted::m_refCount private.
2796
2797         * runtime/Structure.h: Removed addressOfCount.
2798         * wtf/RefCounted.h: Made m_refCount private.
2799         Added addressOfCount.
2800
2801 2009-05-06  Darin Adler  <darin@apple.com>
2802
2803         Fixed assertion seen a lot!
2804
2805         * parser/Nodes.cpp:
2806         (JSC::FunctionBodyNode::~FunctionBodyNode): Removed now-bogus assertion.
2807
2808 2009-05-06  Darin Adler  <darin@apple.com>
2809
2810         Working with Sam Weinig.
2811
2812         Redo parse tree constructor optimization without breaking the Windows
2813         build the way I did yesterday. The previous try broke the build by adding
2814         an include of Lexer.h and all its dependencies that had to work outside
2815         the JavaScriptCore project.
2816
2817         * GNUmakefile.am: Added NodeConstructors.h.
2818         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.
2819
2820         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
2821         Removed byteocde directory -- we no longer are trying to include Lexer.h
2822         outside JavaScriptCore.
2823
2824         * JavaScriptCore.xcodeproj/project.pbxproj: Change SegmentedVector.h
2825         and Lexer.h back to internal files. Added NodeConstructors.h.
2826
2827         * parser/Grammar.y: Added include of NodeConstructors.h.
2828         Changed use of ConstDeclNode to use public functions.
2829
2830         * parser/NodeConstructors.h: Copied from parser/Nodes.h.
2831         Just contains the inlined constructors now.
2832
2833         * parser/Nodes.cpp: Added include of NodeConstructors.h.
2834         Moved node constructors into the header.
2835         (JSC::FunctionBodyNode::FunctionBodyNode): Removed m_refCount
2836         initialization.
2837
2838         * parser/Nodes.h: Removed all the constructor definitions, and also
2839         removed the JSC_FAST_CALL from them since these are all inlined, so the
2840         calling convention is irrelevant. Made more things private. Used a data
2841         member for operator opcodes instead of a virtual function. Removed the
2842         special FunctionBodyNode::ref/deref functions since the default functions
2843         are now just as fast.
2844
2845         * runtime/FunctionConstructor.cpp:
2846         (JSC::extractFunctionBody): Fixed types here so we don't typecast until
2847         after we do type checking.
2848
2849 2009-05-06  Simon Hausmann  <simon.hausmann@nokia.com>
2850
2851         Reviewed by Ariya Hidayat.
2852
2853         Fix the Qt build on Windows.
2854
2855         * JavaScriptCore.pri: Define BUILDING_JavaScriptCore/WTF to get the meaning
2856         of the JS_EXPORTDATA macros correct
2857
2858 2009-05-06  Simon Hausmann  <simon.hausmann@nokia.com>
2859
2860         Reviewed by Ariya Hidayat.
2861
2862         Enable the JIT for the Qt build on Windows.
2863
2864         * JavaScriptCore.pri:
2865
2866 2009-05-06  Simon Hausmann  <simon.hausmann@nokia.com>
2867
2868         Reviewed by Tor Arne Vestbø.
2869
2870         Tweak JavaScriptCore.pri for being able to override the generated sources dir for the
2871         generated_files target.
2872
2873         * JavaScriptCore.pri:
2874
2875 2009-05-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
2876
2877         Reviewed by Simon Hausmann.
2878
2879         Build QtWebKit as a framework on Mac
2880
2881         This implies both debug and release build by default, unless
2882         one of the --debug or --release config options are passed to
2883         the build-webkit script.
2884
2885         Frameworks can be disabled by passing CONFIG+=webkit_no_framework
2886         to the build-webkit script.
2887
2888         To be able to build both debug and release targets in parallel
2889         we have to use separate output directories for the generated
2890         sources, which is not optimal, but required to avoid race conditions.
2891
2892         An optimization would be to only require this spit-up on Mac.
2893
2894         * JavaScriptCore.pri:
2895         * JavaScriptCore.pro:
2896         * jsc.pro:
2897
2898 2009-05-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
2899
2900         Reviewed by Simon Hausmann.
2901
2902         [Qt] Use $$GENERATED_SOURCES_DIR as output when running bison
2903
2904         A couple of the generators left the bison output file in the source
2905         tree, and then moved it into $$GENERATED_SOURCES_DIR, which did not
2906         work well when building release and debug configurations in parallel.
2907
2908         * JavaScriptCore.pri:
2909
2910 2009-05-05  Geoffrey Garen  <ggaren@apple.com>
2911
2912         Reviewed by Maciej Stachowiak.
2913         
2914         Simplified a bit of codegen.
2915
2916         * jit/JIT.cpp:
2917         (JSC::JIT::privateCompileMainPass):
2918
2919 2009-05-05  Geoffrey Garen  <ggaren@apple.com>
2920
2921         Reviewed by Cameron Zwarich.
2922         
2923         Moved all the JIT stub related code into one place.
2924
2925         * jit/JIT.cpp:
2926         * jit/JIT.h:
2927         * jit/JITCode.h:
2928         * jit/JITStubs.cpp:
2929         (JSC::):
2930         * jit/JITStubs.h:
2931
2932 2009-05-05  Sam Weinig  <sam@webkit.org>
2933
2934         Try to fix Windows build.
2935
2936         Move Node constructor to the .cpp file.
2937
2938         * parser/Nodes.cpp: 
2939         * parser/Nodes.h:
2940
2941 2009-05-05  Darin Adler  <darin@apple.com>
2942
2943         Try to fix Windows build.
2944
2945         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2946         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
2947
2948         Try to fix Mac build.
2949
2950         * JavaScriptCore.xcodeproj/project.pbxproj: Made SegmentedVector.h private.
2951
2952 2009-05-05  Darin Adler  <darin@apple.com>
2953
2954         Try to fix Mac build.
2955
2956         * JavaScriptCore.xcodeproj/project.pbxproj: Made Lexer.h private.
2957
2958 2009-05-05  Darin Adler  <darin@apple.com>
2959
2960         Reviewed by Sam Weinig.
2961
2962         Bug 25569: make ParserRefCounted use conventional reference counting
2963         https://bugs.webkit.org/show_bug.cgi?id=25569
2964
2965         SunSpider speedup of about 1.6%.
2966
2967         * JavaScriptCore.exp: Updated.
2968
2969         * parser/Nodes.cpp:
2970         (JSC::NodeReleaser::releaseAllNodes): ALWAYS_INLINE.
2971         (JSC::NodeReleaser::adopt): Ditto.
2972         (JSC::ParserRefCounted::ParserRefCounted): Removed most of the code.
2973         Add the object to a Vector<RefPtr> that gets cleared after parsing.
2974         (JSC::ParserRefCounted::~ParserRefCounted): Removed most of the code.
2975
2976         * parser/Nodes.h: Made ParserRefCounted inherit from RefCounted and
2977         made inline versions of the constructor and destructor. Made the
2978         Node constructor inline.
2979
2980         * parser/Parser.cpp:
2981         (JSC::Parser::parse): Call globalData->parserObjects.shrink(0) after
2982         parsing, where it used to call ParserRefCounted::deleteNewObjects.
2983
2984         * runtime/JSGlobalData.cpp:
2985         (JSC::JSGlobalData::JSGlobalData): Eliminated code to manage the
2986         newParserObjects and parserObjectExtraRefCounts.
2987         (JSC::JSGlobalData::~JSGlobalData): Ditto.
2988
2989         * runtime/JSGlobalData.h: Replaced the HashSet and HashCountedSet
2990         with a Vector.
2991
2992         * wtf/PassRefPtr.h:
2993         (WTF::PassRefPtr::~PassRefPtr): The most common thing to do with a
2994         PassRefPtr in hot code is to pass it and then destroy it once it's
2995         set to zero. Help the optimizer by telling it that's true.
2996
2997 2009-05-05  Xan Lopez  <xlopez@igalia.com> and Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>
2998
2999         Reviewed by Oliver Hunt.
3000
3001         Disable the NativeFunctionWrapper for all non-Mac ports for now,
3002         as it is also crashing on Linux/x86.
3003
3004         * runtime/NativeFunctionWrapper.h:
3005
3006 2009-05-05  Steve Falkenburg  <sfalken@apple.com>
3007
3008         Fix build.
3009
3010         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
3011         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
3012
3013 2009-05-05  Oliver Hunt  <oliver@apple.com>
3014
3015         Reviewed by Maciej Stachowiak.
3016
3017         Expose toThisObject for the DOM Window
3018
3019         * JavaScriptCore.exp:
3020
3021 2009-05-05  Oliver Hunt  <oliver@apple.com>
3022
3023         Reviewed by NOBODY (Make windows go again until i work out the
3024         accursed calling convention).
3025
3026         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3027         * jit/JIT.cpp:
3028         * runtime/NativeFunctionWrapper.h:
3029
3030 2009-05-05  Oliver Hunt  <oliver@apple.com>
3031
3032         Reviewed by NOBODY (Fix windows debug builds).
3033
3034         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
3035
3036 2009-05-05  Oliver Hunt  <oliver@apple.com>
3037
3038         Reviewed by NOBODY (Hopefully the last fix).
3039
3040         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
3041
3042 2009-05-05  Oliver Hunt  <oliver@apple.com>
3043
3044         Reviewed by NOBODY (Fix the build fix caused by a different build fix).
3045
3046         * parser/Nodes.cpp:
3047         * parser/Nodes.h:
3048
3049 2009-05-05  Oliver Hunt  <oliver@apple.com>
3050
3051         Reviewed by NOBODY (No idea how my changes could have broken these).
3052
3053         * runtime/DatePrototype.cpp:
3054         * runtime/RegExpObject.cpp:
3055
3056 2009-05-05  Oliver Hunt  <oliver@apple.com>
3057
3058         Reviewed by NOBODY (Why should i expect msvc to list all the errors in a file?).
3059
3060         * parser/Nodes.cpp:
3061
3062 2009-05-05  Oliver Hunt  <oliver@apple.com>
3063
3064         Reviewed by NOBODY (Fix warning, and another missing include).
3065
3066         * jit/JIT.cpp:
3067         * parser/Nodes.h:
3068
3069 2009-05-05  Oliver Hunt  <oliver@apple.com>
3070
3071         Reviewed by NOBODY (More build fixes).
3072
3073         * runtime/ErrorPrototype.cpp:
3074         * runtime/JSGlobalObject.cpp:
3075         * runtime/NumberPrototype.cpp:
3076         * runtime/ObjectPrototype.cpp:
3077         * runtime/StringConstructor.cpp:
3078
3079 2009-05-05  Oliver Hunt  <oliver@apple.com>
3080
3081         Reviewed by NOBODY (Will the fixes never end?).
3082
3083         * runtime/FunctionPrototype.h:
3084         * runtime/Lookup.cpp:
3085
3086 2009-05-05  Oliver Hunt  <oliver@apple.com>
3087
3088         Reviewed by NOBODY (More build fixes).
3089
3090         * jit/JIT.cpp:
3091
3092 2009-05-05  Oliver Hunt  <oliver@apple.com>
3093
3094         Reviewed by NOBODY (More build fixing).
3095
3096         * runtime/CallData.h:
3097
3098 2009-05-05  Oliver Hunt  <oliver@apple.com>
3099
3100         Reviewed by NOBODY (Build fix).
3101
3102         * runtime/ArrayConstructor.cpp:
3103         * runtime/BooleanPrototype.cpp:
3104         * runtime/DateConstructor.cpp:
3105         * runtime/Error.cpp:
3106         * runtime/ObjectConstructor.cpp:
3107         * runtime/RegExpPrototype.cpp:
3108
3109 2009-05-05  Oliver Hunt  <oliver@apple.com>
3110
3111         Reviewed by NOBODY (Buildfix).
3112
3113         Add missing file
3114
3115         * runtime/NativeFunctionWrapper.h: Copied from JavaScriptCore/jit/ExecutableAllocator.cpp.
3116
3117 2009-05-05  Oliver Hunt  <oliver@apple.com>
3118
3119         Reviewed by Gavin Barraclough.
3120
3121         Bug 25559: Improve native function call performance
3122         <https://bugs.webkit.org/show_bug.cgi?id=25559>
3123
3124         In order to cache calls to native functions we now make the standard
3125         prototype functions use a small assembly thunk that converts the JS
3126         calling convention into the native calling convention.  As this is
3127         only beneficial in the JIT we use the NativeFunctionWrapper typedef
3128         to alternate between PrototypeFunction and JSFunction to keep the
3129         code sane.  This change from PrototypeFunction to NativeFunctionWrapper
3130         is the bulk of this patch.
3131
3132         * JavaScriptCore.exp:
3133         * JavaScriptCore.xcodeproj/project.pbxproj:
3134         * assembler/MacroAssemblerX86Common.h:
3135         (JSC::MacroAssemblerX86Common::call):
3136         * assembler/MacroAssemblerX86_64.h:
3137         (JSC::MacroAssemblerX86_64::addPtr):
3138         * assembler/X86Assembler.h:
3139         (JSC::X86Assembler::leaq_mr):
3140         (JSC::X86Assembler::call_m):
3141         * interpreter/Interpreter.cpp:
3142         (JSC::Interpreter::execute):
3143         (JSC::Interpreter::prepareForRepeatCall):
3144         * jit/JIT.cpp:
3145         (JSC::JIT::privateCompileCTIMachineTrampolines):
3146         * jit/JIT.h:
3147         (JSC::JIT::compileCTIMachineTrampolines):
3148         * jit/JITCall.cpp:
3149         (JSC::JIT::linkCall):
3150         (JSC::JIT::compileOpCallInitializeCallFrame):
3151         (JSC::JIT::compileOpCall):
3152         * jit/JITCode.h:
3153         (JSC::JITCode::operator bool):
3154         * jit/JITInlineMethods.h:
3155         (JSC::JIT::emitGetFromCallFrameHeader):
3156         (JSC::JIT::emitGetFromCallFrameHeader32):
3157         * jit/JITStubs.cpp:
3158         (JSC::JITStubs::JITStubs):
3159         (JSC::JITStubs::cti_op_call_JSFunction):
3160         (JSC::JITStubs::cti_vm_dontLazyLinkCall):
3161         (JSC::JITStubs::cti_vm_lazyLinkCall):
3162         (JSC::JITStubs::cti_op_construct_JSConstruct):
3163         * jit/JITStubs.h:
3164         (JSC::JITStubs::ctiNativeCallThunk):
3165         * jsc.cpp:
3166         (GlobalObject::GlobalObject):
3167         * parser/Nodes.cpp:
3168         (JSC::FunctionBodyNode::FunctionBodyNode):
3169         (JSC::FunctionBodyNode::createNativeThunk):
3170         (JSC::FunctionBodyNode::generateJITCode):
3171         * parser/Nodes.h:
3172         (JSC::FunctionBodyNode::):
3173         (JSC::FunctionBodyNode::generatedJITCode):
3174         (JSC::FunctionBodyNode::jitCode):
3175         * profiler/Profiler.cpp:
3176         (JSC::Profiler::createCallIdentifier):
3177         * runtime/ArgList.h:
3178         * runtime/ArrayPrototype.cpp:
3179         (JSC::isNumericCompareFunction):
3180         * runtime/BooleanPrototype.cpp:
3181         (JSC::BooleanPrototype::BooleanPrototype):
3182         * runtime/DateConstructor.cpp:
3183         (JSC::DateConstructor::DateConstructor):
3184         * runtime/ErrorPrototype.cpp:
3185         (JSC::ErrorPrototype::ErrorPrototype):
3186         * runtime/FunctionPrototype.cpp:
3187         (JSC::FunctionPrototype::addFunctionProperties):
3188         (JSC::functionProtoFuncToString):
3189         * runtime/FunctionPrototype.h:
3190         * runtime/JSFunction.cpp:
3191         (JSC::JSFunction::JSFunction):
3192         (JSC::JSFunction::~JSFunction):
3193         (JSC::JSFunction::mark):
3194         (JSC::JSFunction::getCallData):
3195         (JSC::JSFunction::call):
3196         (JSC::JSFunction::argumentsGetter):
3197         (JSC::JSFunction::callerGetter):
3198         (JSC::JSFunction::lengthGetter):
3199         (JSC::JSFunction::getOwnPropertySlot):
3200         (JSC::JSFunction::put):
3201         (JSC::JSFunction::deleteProperty):
3202         (JSC::JSFunction::getConstructData):
3203         (JSC::JSFunction::construct):
3204         * runtime/JSFunction.h:
3205         (JSC::JSFunction::JSFunction):
3206         (JSC::JSFunction::setScope):
3207         (JSC::JSFunction::scope):
3208         (JSC::JSFunction::isHostFunction):
3209         (JSC::JSFunction::scopeChain):
3210         (JSC::JSFunction::clearScopeChain):
3211         (JSC::JSFunction::setScopeChain):
3212         (JSC::JSFunction::nativeFunction):
3213         (JSC::JSFunction::setNativeFunction):
3214         * runtime/JSGlobalData.cpp:
3215         (JSC::JSGlobalData::~JSGlobalData):
3216         (JSC::JSGlobalData::createNativeThunk):
3217         * runtime/JSGlobalData.h:
3218         (JSC::JSGlobalData::nativeFunctionThunk):
3219         * runtime/JSGlobalObject.cpp:
3220         (JSC::JSGlobalObject::reset):
3221         * runtime/JSGlobalObject.h:
3222         * runtime/Lookup.cpp:
3223         (JSC::setUpStaticFunctionSlot):
3224         * runtime/Lookup.h:
3225         * runtime/NumberPrototype.cpp:
3226         (JSC::NumberPrototype::NumberPrototype):
3227         * runtime/ObjectPrototype.cpp:
3228         (JSC::ObjectPrototype::ObjectPrototype):
3229         * runtime/RegExpPrototype.cpp:
3230         (JSC::RegExpPrototype::RegExpPrototype):
3231         * runtime/StringConstructor.cpp:
3232         (JSC::StringConstructor::StringConstructor):
3233
3234 2009-05-05  Gavin Barraclough  <barraclough@apple.com>
3235
3236         Reviewed by Oliver Hunt.
3237
3238         For convenience, let the sampling flags tool clear multiple flags at once.
3239
3240         * jsc.cpp:
3241         (GlobalObject::GlobalObject):
3242         (functionSetSamplingFlags):
3243         (functionClearSamplingFlags):
3244
3245 2009-05-04  Maciej Stachowiak  <mjs@apple.com>
3246
3247         Rubber stamped by Gavin.
3248
3249         - inline Vector::resize for a ~1.5% speedup on string-tagcloud
3250
3251         * wtf/Vector.h:
3252         (WTF::Vector::resize): Inline
3253
3254 2009-05-03  Steve Falkenburg  <sfalken@apple.com>
3255
3256         Windows build fix.
3257
3258         * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:
3259
3260 2009-05-03  Mark Rowe  <mrowe@apple.com>
3261
3262         Fix the 64-bit build.
3263
3264         * API/APICast.h:
3265         (toJS):
3266         (toRef):
3267         * runtime/JSNumberCell.cpp:
3268         (JSC::jsAPIMangledNumber):
3269         * runtime/JSNumberCell.h:
3270
3271 2009-05-02  Sam Weinig  <sam@webkit.org>
3272
3273         Roll JSC API number marshaling back in one last time (I hope).
3274
3275 2009-05-03  Sam Weinig  <sam@webkit.org>
3276
3277         Roll JSC API number marshaling back out. It still breaks windows.
3278
3279 2009-05-03  Sam Weinig  <sam@webkit.org>
3280
3281         Roll JSC API number marshaling back in.
3282
3283 2009-05-02  Darin Adler  <darin@apple.com>
3284
3285         Reviewed by Maciej Stachowiak.
3286
3287         Bug 25519: streamline lexer by handling BOMs differently
3288         https://bugs.webkit.org/show_bug.cgi?id=25519
3289
3290         Roughly 1% faster SunSpider.
3291
3292         * parser/Grammar.y: Tweak formatting a bit.
3293
3294         * parser/Lexer.cpp:
3295         (JSC::Lexer::Lexer): Remove unnnecessary initialization of data members
3296         that are set up by setCode.
3297         (JSC::Lexer::currentOffset): Added. Used where the old code would look at
3298         m_currentOffset.
3299         (JSC::Lexer::shift1): Replaces the old shift function. No longer does anything
3300         to handle BOM characters.
3301         (JSC::Lexer::shift2): Ditto.
3302         (JSC::Lexer::shift3): Ditto.
3303         (JSC::Lexer::shift4): Ditto.
3304         (JSC::Lexer::setCode): Updated for name change from yylineno to m_line.
3305         Removed now-unused m_eatNextIdentifier, m_stackToken, and m_restrKeyword.
3306         Replaced m_skipLF and m_skipCR with m_skipLineEnd. Replaced the old
3307         m_length with m_codeEnd and m_currentOffset with m_codeStart. Added code
3308         to scan for a BOM character and call copyCodeWithoutBOMs() if we find any.
3309         (JSC::Lexer::copyCodeWithoutBOMs): Added.
3310         (JSC::Lexer::nextLine): Updated for name change from yylineno to m_line.
3311         (JSC::Lexer::makeIdentifier): Moved up higher in the file.
3312         (JSC::Lexer::matchPunctuator): Moved up higher in the file and changed to
3313         use a switch statement instead of just if statements.
3314         (JSC::Lexer::isLineTerminator): Moved up higher in the file and changed to
3315         have fewer branches.
3316         (JSC::Lexer::lastTokenWasRestrKeyword): Added. This replaces the old
3317         m_restrKeyword boolean.
3318         (JSC::Lexer::isIdentStart): Moved up higher in the file. Changed to use
3319         fewer branches in the ASCII but not identifier case.
3320         (JSC::Lexer::isIdentPart): Ditto.
3321         (JSC::Lexer::singleEscape): Moved up higher in the file.
3322         (JSC::Lexer::convertOctal): Moved up higher in the file.
3323         (JSC::Lexer::convertHex): Moved up higher in the file. Changed to use
3324         toASCIIHexValue instead of rolling our own here.
3325         (JSC::Lexer::convertUnicode): Ditto.
3326         (JSC::Lexer::record8): Moved up higher in the file.
3327         (JSC::Lexer::record16): Moved up higher in the file.
3328         (JSC::Lexer::lex): Changed type of stringType to int. Replaced m_skipLF
3329         and m_skipCR with m_skipLineEnd, which requires fewer branches in the
3330         main lexer loop. Use currentOffset instead of m_currentOffset. Removed
3331         unneeded m_stackToken. Use isASCIIDigit instead of isDecimalDigit.
3332         Split out the two cases for InIdentifierOrKeyword and InIdentifier.
3333         Added special case tight loops for identifiers and other simple states.
3334         Removed a branch from the code that sets m_atLineStart to false using goto.
3335         Streamlined the number-handling code so we don't check for the same types
3336         twice for non-numeric cases and don't add a null to m_buffer8 when it's
3337         not being used. Removed m_eatNextIdentifier, which wasn't working anyway,
3338         and m_restrKeyword, which is redundant with m_lastToken. Set the
3339         m_delimited flag without using a branch.
3340         (JSC::Lexer::scanRegExp): Tweaked style a bit.
3341         (JSC::Lexer::clear): Clear m_codeWithoutBOMs so we don't use memory after
3342         parsing. Clear out UString objects in the more conventional way.
3343         (JSC::Lexer::sourceCode): Made this no-longer inline since it has more
3344         work to do in the case where we stripped BOMs.
3345
3346         * parser/Lexer.h: Renamed yylineno to m_lineNumber. Removed convertHex
3347         function, which is the same as toASCIIHexValue. Removed isHexDigit
3348         function, which is the same as isASCIIHedDigit. Replaced shift with four
3349         separate shift functions. Removed isWhiteSpace function that passes
3350         m_current, instead just passing m_current explicitly. Removed isOctalDigit,
3351         which is the same as isASCIIOctalDigit. Eliminated unused arguments from
3352         matchPunctuator. Added copyCoodeWithoutBOMs and currentOffset. Moved the
3353         makeIdentifier function out of the header. Added lastTokenWasRestrKeyword
3354         function. Added new constants for m_skipLineEnd. Removed unused yycolumn,
3355         m_restrKeyword, m_skipLF, m_skipCR, m_eatNextIdentifier, m_stackToken,
3356         m_position, m_length, m_currentOffset, m_nextOffset1, m_nextOffset2,
3357         m_nextOffset3. Added m_skipLineEnd, m_codeStart, m_codeEnd, and
3358         m_codeWithoutBOMs.
3359
3360         * parser/SourceProvider.h: Added hasBOMs function. In the future this can
3361         be used to tell the lexer about strings known not to have BOMs.
3362
3363         * runtime/JSGlobalObjectFunctions.cpp:
3364         (JSC::globalFuncUnescape): Changed to use isASCIIHexDigit.
3365
3366         * wtf/ASCIICType.h: Added using statements to match the design of the
3367         other WTF headers.
3368
3369 2009-05-02  Ada Chan  <adachan@apple.com>
3370
3371         Fix windows build (when doing a clean build)
3372
3373         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
3374
3375 2009-05-02  Geoffrey Garen  <ggaren@apple.com>
3376
3377         Reviewed by Sam Weinig.
3378
3379         Simplified null-ish JSValues.
3380         
3381         Replaced calls to noValue() with calls to JSValue() (which is what
3382         noValue() returned). Removed noValue().
3383         
3384         Replaced almost all uses of jsImpossibleValue() with uses of JSValue().
3385         Its one remaining use is for construction of hash table deleted values.
3386         For that specific task, I made a new, private constructor with a special
3387         tag. Removed jsImpossibleValue().
3388         
3389         Removed "JSValue()" initialiazers, since default construction happens...
3390         by default.
3391
3392         * API/JSCallbackObjectFunctions.h:
3393         (JSC::::call):
3394         * bytecompiler/BytecodeGenerator.cpp:
3395         (JSC::BytecodeGenerator::emitLoad):
3396         * bytecompiler/BytecodeGenerator.h:
3397         * debugger/DebuggerCallFrame.cpp:
3398         (JSC::DebuggerCallFrame::evaluate):
3399         * debugger/DebuggerCallFrame.h:
3400         (JSC::DebuggerCallFrame::DebuggerCallFrame):
3401         * interpreter/CallFrame.h:
3402         (JSC::ExecState::clearException):
3403         * interpreter/Interpreter.cpp:
3404         (JSC::Interpreter::privateExecute):
3405         (JSC::Interpreter::retrieveLastCaller):
3406         * interpreter/Register.h:
3407         (JSC::Register::Register):
3408         * jit/JITCall.cpp:
3409         (JSC::JIT::unlinkCall):
3410         (JSC::JIT::compileOpCallInitializeCallFrame):
3411         (JSC::JIT::compileOpCall):
3412         * jit/JITStubs.cpp:
3413         (JSC::JITStubs::cti_op_call_eval):
3414         (JSC::JITStubs::cti_vm_throw):
3415         * profiler/Profiler.cpp:
3416         (JSC::Profiler::willExecute):
3417         (JSC::Profiler::didExecute):
3418         * runtime/ArrayPrototype.cpp:
3419         (JSC::getProperty):
3420         * runtime/Completion.cpp:
3421         (JSC::evaluate):
3422         * runtime/Completion.h:
3423         (JSC::Completion::Completion):
3424         * runtime/GetterSetter.cpp:
3425         (JSC::GetterSetter::getPrimitiveNumber):
3426         * runtime/JSArray.cpp:
3427         (JSC::JSArray::putSlowCase):
3428         (JSC::JSArray::deleteProperty):
3429         (JSC::JSArray::increaseVectorLength):
3430         (JSC::JSArray::setLength):
3431         (JSC::JSArray::pop):
3432         (JSC::JSArray::sort):
3433         (JSC::JSArray::compactForSorting):
3434         * runtime/JSCell.cpp:
3435         (JSC::JSCell::getJSNumber):
3436         * runtime/JSCell.h:
3437         (JSC::JSValue::getJSNumber):
3438         * runtime/JSGlobalData.cpp:
3439         (JSC::JSGlobalData::JSGlobalData):
3440         * runtime/JSImmediate.h:
3441         (JSC::JSImmediate::fromNumberOutsideIntegerRange):
3442         (JSC::JSImmediate::from):
3443         * runtime/JSNumberCell.cpp:
3444         (JSC::jsNumberCell):
3445         * runtime/JSObject.cpp:
3446         (JSC::callDefaultValueFunction):
3447         * runtime/JSObject.h:
3448         (JSC::JSObject::getDirect):
3449         * runtime/JSPropertyNameIterator.cpp:
3450         (JSC::JSPropertyNameIterator::toPrimitive):
3451         * runtime/JSPropertyNameIterator.h:
3452         (JSC::JSPropertyNameIterator::next):
3453         * runtime/JSValue.h:
3454         (JSC::JSValue::):
3455         (JSC::JSValueHashTraits::constructDeletedValue):
3456         (JSC::JSValueHashTraits::isDeletedValue):
3457         (JSC::JSValue::JSValue):
3458         * runtime/JSWrapperObject.h:
3459         (JSC::JSWrapperObject::JSWrapperObject):
3460         * runtime/Operations.h:
3461         (JSC::resolveBase):
3462         * runtime/PropertySlot.h:
3463         (JSC::PropertySlot::clearBase):
3464         (JSC::PropertySlot::clearValue):
3465
3466 2009-05-02  Maciej Stachowiak  <mjs@apple.com>
3467
3468         Reviewed by Cameron Zwarich.
3469
3470         - speed up the lexer in various ways
3471
3472         ~2% command-line SunSpider speedup
3473
3474         * parser/Lexer.cpp:
3475         (JSC::Lexer::setCode): Moved below shift() so it can inline.
3476         (JSC::Lexer::scanRegExp):  Use resize(0) instead of clear() on Vectors, since the intent
3477         here is not to free the underlying buffer.
3478         (JSC::Lexer::lex): ditto; also, change the loop logic a bit for the main lexing loop
3479         to avoid branching on !m_done twice per iteration. Now we only check it once.
3480         (JSC::Lexer::shift): Make this ALWAYS_INLINE and tag an unusual branch as UNLIKELY
3481         * parser/Lexer.h:
3482         (JSC::Lexer::makeIdentifier): force to be ALWAYS_INLINE
3483         * wtf/Vector.h:
3484         (WTF::::append): force to be ALWAYS_INLINE (may have helped in ways other than parsing but it wasn't
3485         getting inlined in a hot code path in the lexer)
3486
3487 2009-05-01  Steve Falkenburg  <sfalken@apple.com>
3488
3489         Windows build fix.
3490
3491         * JavaScriptCore.vcproj/JavaScriptCore.make:
3492
3493 2009-05-01  Sam Weinig  <sam@webkit.org>
3494
3495         Fix 64bit build.
3496
3497         * runtime/JSNumberCell.h:
3498         (JSC::JSValue::JSValue):
3499         * runtime/JSValue.h:
3500         (JSC::jsNumber):
3501
3502 2009-05-01  Sam Weinig  <sam@webkit.org>
3503
3504         Roll out JavaScriptCore API number marshaling.
3505