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