040e37afe5f2b896c7fb1ec0fdebec8383018bcb
[WebKit.git] / JavaScriptCore / ChangeLog
1 2008-10-15  Alexey Proskuryakov  <ap@webkit.org>
2
3         Reviewed by Darin Adler.
4
5         https://bugs.webkit.org/show_bug.cgi?id=21609
6         Make MessagePorts protect their peers across heaps
7
8         * JavaScriptCore.exp:
9         * kjs/JSGlobalObject.cpp:
10         (JSC::JSGlobalObject::markCrossHeapDependentObjects):
11         * kjs/JSGlobalObject.h:
12         * kjs/collector.cpp:
13         (JSC::Heap::collect):
14         Before GC sweep phase, a function supplied by global object is now called for all global
15         objects in the heap, making it possible to implement cross-heap dependencies.
16
17 2008-10-15  Alexey Proskuryakov  <ap@webkit.org>
18
19         Reviewed by Darin Adler.
20
21         https://bugs.webkit.org/show_bug.cgi?id=21610
22         run-webkit-threads --threaded crashes in StructureID destructor
23
24         * kjs/StructureID.cpp:
25         (JSC::StructureID::StructureID):
26         (JSC::StructureID::~StructureID):
27         Protect access to a static (debug-only) HashSet with a lock.
28
29 2008-10-15  Sam Weinig  <sam@webkit.org>
30
31         Reviewed by Goeffrey Garen.
32
33         Add function to dump statistics for StructureIDs.
34
35         * kjs/StructureID.cpp:
36         (JSC::StructureID::dumpStatistics):
37         (JSC::StructureID::StructureID):
38         (JSC::StructureID::~StructureID):
39         * kjs/StructureID.h:
40
41 2008-10-15  Cameron Zwarich  <zwarich@apple.com>
42
43         Reviewed by Maciej Stachowiak.
44
45         Bug 21633: Avoid using a HashMap when there is only a single transition
46         <https://bugs.webkit.org/show_bug.cgi?id=21633>
47
48         This is a 0.8% speedup on SunSpider and between a 0.5% and 1.0% speedup
49         on the V8 benchmark suite, depending on which harness we use. It will
50         also slightly reduce the memory footprint of a StructureID.
51
52         * kjs/StructureID.cpp:
53         (JSC::StructureID::StructureID):
54         (JSC::StructureID::~StructureID):
55         (JSC::StructureID::addPropertyTransition):
56         * kjs/StructureID.h:
57         (JSC::StructureID::):
58
59 2008-10-15  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>
60
61         Reviewed by Geoffrey Garen.
62
63         1.40% speedup on SunSpider, 1.44% speedup on V8. (Linux)
64         
65         No change on Mac.
66
67         * VM/Machine.cpp:
68         (JSC::fastIsNumber): ALWAYS_INLINE modifier added.
69
70 2008-10-15  Geoffrey Garen  <ggaren@apple.com>
71
72         Reviewed by Cameron Zwarich.
73
74         Fixed https://bugs.webkit.org/show_bug.cgi?id=21345
75         Start the debugger without reloading the inspected page
76
77         * JavaScriptCore.exp: New symbols.
78         * JavaScriptCore.xcodeproj/project.pbxproj: New files.
79
80         * VM/CodeBlock.h:
81         (JSC::EvalCodeCache::get): Updated for tweak to parsing API.
82
83         * kjs/CollectorHeapIterator.h: Added. An iterator for the object heap,
84         which we use to find all the live functions and recompile them.
85
86         * kjs/DebuggerCallFrame.cpp:
87         (JSC::DebuggerCallFrame::evaluate): Updated for tweak to parsing API.
88
89         * kjs/FunctionConstructor.cpp:
90         (JSC::constructFunction): Updated for tweak to parsing API.
91
92         * kjs/JSFunction.cpp:
93         (JSC::JSFunction::JSFunction): Try to validate our SourceCode in debug
94         builds by ASSERTing that it's syntactically valid. This doesn't catch
95         all SourceCode bugs, but it catches a lot of them.
96
97         * kjs/JSGlobalObjectFunctions.cpp:
98         (JSC::globalFuncEval): Updated for tweak to parsing API.
99
100         * kjs/Parser.cpp:
101         (JSC::Parser::parse):
102         * kjs/Parser.h:
103         (JSC::Parser::parse): Tweaked the parser to make it possible to parse
104         without an ExecState, and to allow the client to specify a debugger to
105         notify (or not) about the source we parse. This allows the inspector
106         to recompile even though no JavaScript is executing, then notify the
107         debugger about all source code when it's done.
108
109         * kjs/Shell.cpp:
110         (prettyPrintScript): Updated for tweak to parsing API.
111
112         * kjs/SourceRange.h:
113         (JSC::SourceCode::isNull): Added to help with ASSERTs.
114
115         * kjs/collector.cpp:
116         (JSC::Heap::heapAllocate):
117         (JSC::Heap::sweep):
118         (JSC::Heap::primaryHeapBegin):
119         (JSC::Heap::primaryHeapEnd):
120         * kjs/collector.h:
121         (JSC::): Moved a bunch of declarations around to enable compilation of
122         CollectorHeapIterator.
123
124         * kjs/interpreter.cpp:
125         (JSC::Interpreter::checkSyntax):
126         (JSC::Interpreter::evaluate): Updated for tweak to parsing API.
127
128         * kjs/lexer.h:
129         (JSC::Lexer::sourceCode): BUG FIX: Calculate SourceCode ranges relative
130         to the SourceCode range in which we're lexing, otherwise nested functions
131         that are compiled individually get SourceCode ranges that don't reflect
132         their nesting.
133
134         * kjs/nodes.cpp:
135         (JSC::FunctionBodyNode::FunctionBodyNode):
136         (JSC::FunctionBodyNode::finishParsing):
137         (JSC::FunctionBodyNode::create):
138         (JSC::FunctionBodyNode::copyParameters):
139         * kjs/nodes.h:
140         (JSC::ScopeNode::setSource):
141         (JSC::FunctionBodyNode::parameterCount): Added some helper functions for
142         copying one FunctionBodyNode's parameters to another. The recompiler uses
143         these when calling "finishParsing".
144
145 2008-10-15  Joerg Bornemann  <joerg.bornemann@trolltech.com>
146
147         Reviewed by Darin Adler.
148
149         - part of https://bugs.webkit.org/show_bug.cgi?id=20746
150           Fix compilation on Windows CE.
151
152         str(n)icmp, strdup and vsnprintf are not available on Windows CE,
153         they are called _str(n)icmp, etc. instead
154
155         * wtf/StringExtras.h: Added inline function implementations.
156
157 2008-10-15  Gabor Loki  <loki@inf.u-szeged.hu>
158
159         Reviewed by Cameron Zwarich.
160
161         <https://bugs.webkit.org/show_bug.cgi?id=20912>
162         Use simple uint32_t multiplication on op_mul if both operands are
163         immediate number and they are between zero and 0x7FFF.
164
165         * VM/Machine.cpp:
166         (JSC::Machine::privateExecute):
167
168 2008-10-09  Darin Fisher  <darin@chromium.org>
169
170         Reviewed by Sam Weinig.
171
172         Make pan scrolling a platform configurable option.
173         https://bugs.webkit.org/show_bug.cgi?id=21515
174
175         * wtf/Platform.h: Add ENABLE_PAN_SCROLLING
176
177 2008-10-14  Maciej Stachowiak  <mjs@apple.com>
178
179         Rubber stamped by Sam Weinig.
180         
181         - revert r37572 and r37581 for now
182         
183         Turns out GCC 4.2 is still a (small) regression, we'll have to do
184         more work to turn it on.
185
186         * Configurations/DebugRelease.xcconfig:
187         * JavaScriptCore.xcodeproj/project.pbxproj:
188         * VM/CTI.cpp:
189         * VM/CTI.h:
190         * VM/Machine.cpp:
191         (JSC::Machine::cti_op_convert_this):
192         (JSC::Machine::cti_op_end):
193         (JSC::Machine::cti_op_add):
194         (JSC::Machine::cti_op_pre_inc):
195         (JSC::Machine::cti_timeout_check):
196         (JSC::Machine::cti_register_file_check):
197         (JSC::Machine::cti_op_loop_if_less):
198         (JSC::Machine::cti_op_loop_if_lesseq):
199         (JSC::Machine::cti_op_new_object):
200         (JSC::Machine::cti_op_put_by_id):
201         (JSC::Machine::cti_op_put_by_id_second):
202         (JSC::Machine::cti_op_put_by_id_generic):
203         (JSC::Machine::cti_op_put_by_id_fail):
204         (JSC::Machine::cti_op_get_by_id):
205         (JSC::Machine::cti_op_get_by_id_second):
206         (JSC::Machine::cti_op_get_by_id_generic):
207         (JSC::Machine::cti_op_get_by_id_fail):
208         (JSC::Machine::cti_op_instanceof):
209         (JSC::Machine::cti_op_del_by_id):
210         (JSC::Machine::cti_op_mul):
211         (JSC::Machine::cti_op_new_func):
212         (JSC::Machine::cti_op_call_JSFunction):
213         (JSC::Machine::cti_vm_compile):
214         (JSC::Machine::cti_op_push_activation):
215         (JSC::Machine::cti_op_call_NotJSFunction):
216         (JSC::Machine::cti_op_create_arguments):
217         (JSC::Machine::cti_op_tear_off_activation):
218         (JSC::Machine::cti_op_tear_off_arguments):
219         (JSC::Machine::cti_op_ret_profiler):
220         (JSC::Machine::cti_op_ret_scopeChain):
221         (JSC::Machine::cti_op_new_array):
222         (JSC::Machine::cti_op_resolve):
223         (JSC::Machine::cti_op_construct_JSConstruct):
224         (JSC::Machine::cti_op_construct_NotJSConstruct):
225         (JSC::Machine::cti_op_get_by_val):
226         (JSC::Machine::cti_op_resolve_func):
227         (JSC::Machine::cti_op_sub):
228         (JSC::Machine::cti_op_put_by_val):
229         (JSC::Machine::cti_op_put_by_val_array):
230         (JSC::Machine::cti_op_lesseq):
231         (JSC::Machine::cti_op_loop_if_true):
232         (JSC::Machine::cti_op_negate):
233         (JSC::Machine::cti_op_resolve_base):
234         (JSC::Machine::cti_op_resolve_skip):
235         (JSC::Machine::cti_op_resolve_global):
236         (JSC::Machine::cti_op_div):
237         (JSC::Machine::cti_op_pre_dec):
238         (JSC::Machine::cti_op_jless):
239         (JSC::Machine::cti_op_not):
240         (JSC::Machine::cti_op_jtrue):
241         (JSC::Machine::cti_op_post_inc):
242         (JSC::Machine::cti_op_eq):
243         (JSC::Machine::cti_op_lshift):
244         (JSC::Machine::cti_op_bitand):
245         (JSC::Machine::cti_op_rshift):
246         (JSC::Machine::cti_op_bitnot):
247         (JSC::Machine::cti_op_resolve_with_base):
248         (JSC::Machine::cti_op_new_func_exp):
249         (JSC::Machine::cti_op_mod):
250         (JSC::Machine::cti_op_less):
251         (JSC::Machine::cti_op_neq):
252         (JSC::Machine::cti_op_post_dec):
253         (JSC::Machine::cti_op_urshift):
254         (JSC::Machine::cti_op_bitxor):
255         (JSC::Machine::cti_op_new_regexp):
256         (JSC::Machine::cti_op_bitor):
257         (JSC::Machine::cti_op_call_eval):
258         (JSC::Machine::cti_op_throw):
259         (JSC::Machine::cti_op_get_pnames):
260         (JSC::Machine::cti_op_next_pname):
261         (JSC::Machine::cti_op_push_scope):
262         (JSC::Machine::cti_op_pop_scope):
263         (JSC::Machine::cti_op_typeof):
264         (JSC::Machine::cti_op_is_undefined):
265         (JSC::Machine::cti_op_is_boolean):
266         (JSC::Machine::cti_op_is_number):
267         (JSC::Machine::cti_op_is_string):
268         (JSC::Machine::cti_op_is_object):
269         (JSC::Machine::cti_op_is_function):
270         (JSC::Machine::cti_op_stricteq):
271         (JSC::Machine::cti_op_nstricteq):
272         (JSC::Machine::cti_op_to_jsnumber):
273         (JSC::Machine::cti_op_in):
274         (JSC::Machine::cti_op_push_new_scope):
275         (JSC::Machine::cti_op_jmp_scopes):
276         (JSC::Machine::cti_op_put_by_index):
277         (JSC::Machine::cti_op_switch_imm):
278         (JSC::Machine::cti_op_switch_char):
279         (JSC::Machine::cti_op_switch_string):
280         (JSC::Machine::cti_op_del_by_val):
281         (JSC::Machine::cti_op_put_getter):
282         (JSC::Machine::cti_op_put_setter):
283         (JSC::Machine::cti_op_new_error):
284         (JSC::Machine::cti_op_debug):
285         (JSC::Machine::cti_vm_throw):
286         * VM/Machine.h:
287         * masm/X86Assembler.h:
288         (JSC::X86Assembler::emitRestoreArgumentReference):
289         (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline):
290         * wtf/Platform.h:
291
292 2008-10-14  Alexey Proskuryakov  <ap@webkit.org>
293
294         Reviewed by Darin Adler.
295
296         https://bugs.webkit.org/show_bug.cgi?id=20256
297         Array.push and other standard methods disappear
298
299         * kjs/JSGlobalData.cpp:
300         (JSC::JSGlobalData::JSGlobalData):
301         (JSC::JSGlobalData::~JSGlobalData):
302         Don't use static hash tables even on platforms that don't enable JSC_MULTIPLE_THREADS -
303         these tables reference IdentifierTable, which is always per-GlobalData.
304
305 2008-10-14  Maciej Stachowiak  <mjs@apple.com>
306
307         Reviewed by Cameron Zwarich.
308         
309         - always use CTI_ARGUMENTS and CTI_ARGUMENTS_FASTCALL
310         
311         This is a small regression for GCC 4.0, but simplifies the code
312         for future improvements and lets us focus on GCC 4.2+ and MSVC.
313
314         * VM/CTI.cpp:
315         * VM/CTI.h:
316         * VM/Machine.cpp:
317         (JSC::Machine::cti_op_convert_this):
318         (JSC::Machine::cti_op_end):
319         (JSC::Machine::cti_op_add):
320         (JSC::Machine::cti_op_pre_inc):
321         (JSC::Machine::cti_timeout_check):
322         (JSC::Machine::cti_register_file_check):
323         (JSC::Machine::cti_op_loop_if_less):
324         (JSC::Machine::cti_op_loop_if_lesseq):
325         (JSC::Machine::cti_op_new_object):
326         (JSC::Machine::cti_op_put_by_id):
327         (JSC::Machine::cti_op_put_by_id_second):
328         (JSC::Machine::cti_op_put_by_id_generic):
329         (JSC::Machine::cti_op_put_by_id_fail):
330         (JSC::Machine::cti_op_get_by_id):
331         (JSC::Machine::cti_op_get_by_id_second):
332         (JSC::Machine::cti_op_get_by_id_generic):
333         (JSC::Machine::cti_op_get_by_id_fail):
334         (JSC::Machine::cti_op_instanceof):
335         (JSC::Machine::cti_op_del_by_id):
336         (JSC::Machine::cti_op_mul):
337         (JSC::Machine::cti_op_new_func):
338         (JSC::Machine::cti_op_call_JSFunction):
339         (JSC::Machine::cti_vm_compile):
340         (JSC::Machine::cti_op_push_activation):
341         (JSC::Machine::cti_op_call_NotJSFunction):
342         (JSC::Machine::cti_op_create_arguments):
343         (JSC::Machine::cti_op_tear_off_activation):
344         (JSC::Machine::cti_op_tear_off_arguments):
345         (JSC::Machine::cti_op_ret_profiler):
346         (JSC::Machine::cti_op_ret_scopeChain):
347         (JSC::Machine::cti_op_new_array):
348         (JSC::Machine::cti_op_resolve):
349         (JSC::Machine::cti_op_construct_JSConstruct):
350         (JSC::Machine::cti_op_construct_NotJSConstruct):
351         (JSC::Machine::cti_op_get_by_val):
352         (JSC::Machine::cti_op_resolve_func):
353         (JSC::Machine::cti_op_sub):
354         (JSC::Machine::cti_op_put_by_val):
355         (JSC::Machine::cti_op_put_by_val_array):
356         (JSC::Machine::cti_op_lesseq):
357         (JSC::Machine::cti_op_loop_if_true):
358         (JSC::Machine::cti_op_negate):
359         (JSC::Machine::cti_op_resolve_base):
360         (JSC::Machine::cti_op_resolve_skip):
361         (JSC::Machine::cti_op_resolve_global):
362         (JSC::Machine::cti_op_div):
363         (JSC::Machine::cti_op_pre_dec):
364         (JSC::Machine::cti_op_jless):
365         (JSC::Machine::cti_op_not):
366         (JSC::Machine::cti_op_jtrue):
367         (JSC::Machine::cti_op_post_inc):
368         (JSC::Machine::cti_op_eq):
369         (JSC::Machine::cti_op_lshift):
370         (JSC::Machine::cti_op_bitand):
371         (JSC::Machine::cti_op_rshift):
372         (JSC::Machine::cti_op_bitnot):
373         (JSC::Machine::cti_op_resolve_with_base):
374         (JSC::Machine::cti_op_new_func_exp):
375         (JSC::Machine::cti_op_mod):
376         (JSC::Machine::cti_op_less):
377         (JSC::Machine::cti_op_neq):
378         (JSC::Machine::cti_op_post_dec):
379         (JSC::Machine::cti_op_urshift):
380         (JSC::Machine::cti_op_bitxor):
381         (JSC::Machine::cti_op_new_regexp):
382         (JSC::Machine::cti_op_bitor):
383         (JSC::Machine::cti_op_call_eval):
384         (JSC::Machine::cti_op_throw):
385         (JSC::Machine::cti_op_get_pnames):
386         (JSC::Machine::cti_op_next_pname):
387         (JSC::Machine::cti_op_push_scope):
388         (JSC::Machine::cti_op_pop_scope):
389         (JSC::Machine::cti_op_typeof):
390         (JSC::Machine::cti_op_is_undefined):
391         (JSC::Machine::cti_op_is_boolean):
392         (JSC::Machine::cti_op_is_number):
393         (JSC::Machine::cti_op_is_string):
394         (JSC::Machine::cti_op_is_object):
395         (JSC::Machine::cti_op_is_function):
396         (JSC::Machine::cti_op_stricteq):
397         (JSC::Machine::cti_op_nstricteq):
398         (JSC::Machine::cti_op_to_jsnumber):
399         (JSC::Machine::cti_op_in):
400         (JSC::Machine::cti_op_push_new_scope):
401         (JSC::Machine::cti_op_jmp_scopes):
402         (JSC::Machine::cti_op_put_by_index):
403         (JSC::Machine::cti_op_switch_imm):
404         (JSC::Machine::cti_op_switch_char):
405         (JSC::Machine::cti_op_switch_string):
406         (JSC::Machine::cti_op_del_by_val):
407         (JSC::Machine::cti_op_put_getter):
408         (JSC::Machine::cti_op_put_setter):
409         (JSC::Machine::cti_op_new_error):
410         (JSC::Machine::cti_op_debug):
411         (JSC::Machine::cti_vm_throw):
412         * VM/Machine.h:
413         * masm/X86Assembler.h:
414         (JSC::X86Assembler::emitRestoreArgumentReference):
415         (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline):
416         * wtf/Platform.h:
417
418 2008-10-13  Maciej Stachowiak  <mjs@apple.com>
419
420         Reviewed by Cameron Zwarich.
421         
422         - make Machine::getArgumentsData an Arguments method and inline it
423         
424         ~2% on v8 raytrace
425
426         * VM/Machine.cpp:
427         * kjs/Arguments.h:
428         (JSC::Machine::getArgumentsData):
429
430 2008-10-13  Alp Toker  <alp@nuanti.com>
431
432         Fix autotools dist build target by listing recently added header
433         files only. Not reviewed.
434
435         * GNUmakefile.am:
436
437 2008-10-13  Maciej Stachowiak  <mjs@apple.com>
438
439         Rubber stamped by Mark Rowe.
440         
441         - fixed <rdar://problem/5806316> JavaScriptCore should not force building with gcc 4.0
442         - use gcc 4.2 when building with Xcode 3.1 or newer on Leopard, even though this is not the default
443
444         * Configurations/DebugRelease.xcconfig:
445         * JavaScriptCore.xcodeproj/project.pbxproj:
446
447 2008-10-13  Cameron Zwarich  <zwarich@apple.com>
448
449         Reviewed by Geoff Garen.
450
451         Bug 21541: Move RegisterFile growth check to callee
452         <https://bugs.webkit.org/show_bug.cgi?id=21541>
453
454         Move the RegisterFile growth check to the callee in the common case,
455         where some of the information is known statically at JIT time. There is
456         still a check in the caller in the case where the caller provides too
457         few arguments.
458
459         This is a 2.1% speedup on the V8 benchmark, including a 5.1% speedup on
460         the Richards benchmark, a 4.1% speedup on the DeltaBlue benchmark, and a
461         1.4% speedup on the Earley-Boyer benchmark. It is also a 0.5% speedup on
462         SunSpider.
463
464         * VM/CTI.cpp:
465         (JSC::CTI::privateCompile):
466         * VM/Machine.cpp:
467         (JSC::Machine::cti_register_file_check):
468         (JSC::Machine::cti_op_call_JSFunction):
469         (JSC::Machine::cti_op_construct_JSConstruct):
470         * VM/Machine.h:
471         * VM/RegisterFile.h:
472         * masm/X86Assembler.h:
473         (JSC::X86Assembler::):
474         (JSC::X86Assembler::cmpl_mr):
475         (JSC::X86Assembler::emitUnlinkedJg):
476
477 2008-10-13  Sam Weinig  <sam@webkit.org>
478
479         Reviewed by Dan Bernstein.
480
481         Fix for https://bugs.webkit.org/show_bug.cgi?id=21577
482         5 false positive StructureID leaks
483
484         - Add leak ignore set to StructureID to selectively ignore leaking some StructureIDs.
485         - Add create method to JSGlolalData to be used when the data will be intentionally
486           leaked and ignore all leaks caused the StructureIDs stored in it.
487
488         * JavaScriptCore.exp:
489         * kjs/JSGlobalData.cpp:
490         (JSC::JSGlobalData::createLeaked):
491         * kjs/JSGlobalData.h:
492         * kjs/StructureID.cpp:
493         (JSC::StructureID::StructureID):
494         (JSC::StructureID::~StructureID):
495         (JSC::StructureID::startIgnoringLeaks):
496         (JSC::StructureID::stopIgnoringLeaks):
497         * kjs/StructureID.h:
498
499 2008-10-13  Marco Barisione  <marco.barisione@collabora.co.uk>
500
501         Reviewed by Darin Adler. Landed by Jan Alonzo.
502
503         WebKit GTK Port needs a smartpointer to handle g_free (GFreePtr?)
504         http://bugs.webkit.org/show_bug.cgi?id=20483
505
506         Add a GOwnPtr smart pointer (similar to OwnPtr) to handle memory
507         allocated by GLib and start the conversion to use it.
508
509         * GNUmakefile.am:
510         * wtf/GOwnPtr.cpp: Added.
511         (WTF::GError):
512         (WTF::GList):
513         (WTF::GCond):
514         (WTF::GMutex):
515         (WTF::GPatternSpec):
516         (WTF::GDir):
517         * wtf/GOwnPtr.h: Added.
518         (WTF::freeOwnedPtr):
519         (WTF::GOwnPtr::GOwnPtr):
520         (WTF::GOwnPtr::~GOwnPtr):
521         (WTF::GOwnPtr::get):
522         (WTF::GOwnPtr::release):
523         (WTF::GOwnPtr::rawPtr):
524         (WTF::GOwnPtr::set):
525         (WTF::GOwnPtr::clear):
526         (WTF::GOwnPtr::operator*):
527         (WTF::GOwnPtr::operator->):
528         (WTF::GOwnPtr::operator!):
529         (WTF::GOwnPtr::operator UnspecifiedBoolType):
530         (WTF::GOwnPtr::swap):
531         (WTF::swap):
532         (WTF::operator==):
533         (WTF::operator!=):
534         (WTF::getPtr):
535         * wtf/Threading.h:
536         * wtf/ThreadingGtk.cpp:
537         (WTF::Mutex::~Mutex):
538         (WTF::Mutex::lock):
539         (WTF::Mutex::tryLock):
540         (WTF::Mutex::unlock):
541         (WTF::ThreadCondition::~ThreadCondition):
542         (WTF::ThreadCondition::wait):
543         (WTF::ThreadCondition::timedWait):
544         (WTF::ThreadCondition::signal):
545         (WTF::ThreadCondition::broadcast):
546
547 2008-10-12  Gabriella Toth  <gtoth@inf.u-szeged.hu>
548
549         Reviewed by Darin Adler.
550
551         - part of https://bugs.webkit.org/show_bug.cgi?id=21055
552           Bug 21055: not invoked functions
553
554         * kjs/nodes.cpp: Deleted a function that is not invoked:
555         statementListInitializeVariableAccessStack.
556
557 2008-10-12  Darin Adler  <darin@apple.com>
558
559         Reviewed by Sam Weinig.
560
561         * wtf/unicode/icu/UnicodeIcu.h: Fixed indentation to match WebKit coding style.
562         * wtf/unicode/qt4/UnicodeQt4.h: Ditto.
563
564 2008-10-12  Darin Adler  <darin@apple.com>
565
566         Reviewed by Sam Weinig.
567
568         - https://bugs.webkit.org/show_bug.cgi?id=21556
569           Bug 21556: non-ASCII digits are allowed in places where only ASCII should be
570
571         * wtf/unicode/icu/UnicodeIcu.h: Removed isDigit, digitValue, and isFormatChar.
572         * wtf/unicode/qt4/UnicodeQt4.h: Ditto.
573
574 2008-10-12  Anders Carlsson  <andersca@apple.com>
575
576         Reviewed by Darin Adler.
577
578         Make the append method that takes a Vector more strict - it now requires the elements 
579         of the vector to be appended same type as the elements of the Vector they're being appended to.
580         
581         This would cause problems when dealing with Vectors containing other Vectors.
582         
583         * wtf/Vector.h:
584         (WTF::::append):
585
586 2008-10-11  Cameron Zwarich  <zwarich@apple.com>
587
588         Reviewed by Sam Weinig.
589
590         Clean up RegExpMatchesArray.h to match our coding style.
591
592         * kjs/RegExpMatchesArray.h:
593         (JSC::RegExpMatchesArray::getOwnPropertySlot):
594         (JSC::RegExpMatchesArray::put):
595         (JSC::RegExpMatchesArray::deleteProperty):
596         (JSC::RegExpMatchesArray::getPropertyNames):
597
598 2008-10-11  Cameron Zwarich  <zwarich@apple.com>
599
600         Reviewed by Sam Weinig.
601
602         Bug 21525: 55 StructureID leaks on Wikitravel's main page
603         <https://bugs.webkit.org/show_bug.cgi?id=21525>
604
605         Bug 21533: Simple JavaScript code leaks StructureIDs
606         <https://bugs.webkit.org/show_bug.cgi?id=21533>
607
608         StructureID::getEnumerablePropertyNames() ends up calling back to itself
609         via JSObject::getPropertyNames(), which causes the PropertyNameArray to
610         be cached twice. This leads to a memory leak in almost every use of
611         JSObject::getPropertyNames() on an object. The fix here is based on a
612         suggestion of Sam Weinig.
613
614         This patch also fixes every StructureID leaks that occurs while running
615         the Mozilla MemBuster test.
616
617         * kjs/PropertyNameArray.h:
618         (JSC::PropertyNameArray::PropertyNameArray):
619         (JSC::PropertyNameArray::setCacheable):
620         (JSC::PropertyNameArray::cacheable):
621         * kjs/StructureID.cpp:
622         (JSC::StructureID::getEnumerablePropertyNames):
623
624 2008-10-10  Oliver Hunt  <oliver@apple.com>
625
626         Reviewed by Cameron Zwarich.
627
628         Use fastcall calling convention on GCC > 4.0
629
630         Results in a 2-3% improvement in GCC 4.2 performance, so
631         that it is no longer a regression vs. GCC 4.0
632
633         * VM/CTI.cpp:
634         * VM/Machine.h:
635         * wtf/Platform.h:
636
637 2008-10-10  Sam Weinig  <sam@webkit.org>
638
639         Reviewed by Darin Adler.
640
641         - Add a workaround for a bug in ceil in Darwin libc.
642         - Remove old workarounds for JS math functions that are not needed
643           anymore.
644
645         The math functions are heavily tested by fast/js/math.html.
646
647         * kjs/MathObject.cpp:
648         (JSC::mathProtoFuncAbs): Remove workaround.
649         (JSC::mathProtoFuncCeil): Ditto.
650         (JSC::mathProtoFuncFloor): Ditto.
651         * wtf/MathExtras.h:
652         (wtf_ceil): Add ceil workaround for darwin.
653
654 2008-10-10  Sam Weinig  <sam@webkit.org>
655
656         Reviewed by Darin Adler
657
658         Add Assertions to JSObject constructor.
659
660         * kjs/JSObject.h:
661         (JSC::JSObject::JSObject):
662
663 2008-10-10  Sam Weinig  <sam@webkit.org>
664
665         Reviewed by Cameron Zwarich.
666
667         Remove now unused m_getterSetterFlag variable from PropertyMap.
668
669         * kjs/PropertyMap.cpp:
670         (JSC::PropertyMap::operator=):
671         * kjs/PropertyMap.h:
672         (JSC::PropertyMap::PropertyMap):
673
674 2008-10-09  Sam Weinig  <sam@webkit.org>
675
676         Reviewed by Maciej Stachowiak.
677
678         Add leaks checking to StructureID.
679
680         * kjs/StructureID.cpp:
681         (JSC::StructureID::StructureID):
682         (JSC::StructureID::~StructureID):
683
684 2008-10-09  Alp Toker  <alp@nuanti.com>
685
686         Reviewed by Mark Rowe.
687
688         https://bugs.webkit.org/show_bug.cgi?id=20760
689         Implement support for x86 Linux in CTI
690
691         Prepare to enable CTI/WREC on supported architectures.
692
693         Make it possible to use the CTI_ARGUMENT workaround with GCC as well
694         as MSVC by fixing some preprocessor conditionals.
695
696         Note that CTI/WREC no longer requires CTI_ARGUMENT on Linux so we
697         don't actually enable it except when building with MSVC. GCC on Win32
698         remains untested.
699
700         Adapt inline ASM code to use the global symbol underscore prefix only
701         on Darwin and to call the properly mangled Machine::cti_vm_throw
702         symbol name depending on CTI_ARGUMENT.
703
704         Also avoid global inclusion of the JIT infrastructure headers
705         throughout WebCore and WebKit causing recompilation of about ~1500
706         source files after modification to X86Assembler.h, CTI.h, WREC.h,
707         which are only used deep inside JavaScriptCore.
708
709         * GNUmakefile.am:
710         * VM/CTI.cpp:
711         * VM/CTI.h:
712         * VM/Machine.cpp:
713         * VM/Machine.h:
714         * kjs/regexp.cpp:
715         (JSC::RegExp::RegExp):
716         (JSC::RegExp::~RegExp):
717         (JSC::RegExp::match):
718         * kjs/regexp.h:
719         * masm/X86Assembler.h:
720         (JSC::X86Assembler::emitConvertToFastCall):
721         (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline):
722         (JSC::X86Assembler::emitRestoreArgumentReference):
723
724 2008-10-09  Gavin Barraclough  <barraclough@apple.com>
725
726         Reviewed by Cameron Zwarich.
727
728         Fix for bug #21160, x=0;1/(x*-1) == -Infinity
729
730         * ChangeLog:
731         * VM/CTI.cpp:
732         (JSC::CTI::emitFastArithDeTagImmediate):
733         (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero):
734         (JSC::CTI::compileBinaryArithOp):
735         (JSC::CTI::compileBinaryArithOpSlowCase):
736         (JSC::CTI::privateCompileMainPass):
737         (JSC::CTI::privateCompileSlowCases):
738         * VM/CTI.h:
739         * masm/X86Assembler.h:
740         (JSC::X86Assembler::):
741         (JSC::X86Assembler::emitUnlinkedJs):
742
743 2008-10-09  Cameron Zwarich  <zwarich@apple.com>
744
745         Reviewed by Oliver Hunt.
746
747         Bug 21459: REGRESSION (r37324): Safari crashes inside JavaScriptCore while browsing hulu.com
748         <https://bugs.webkit.org/show_bug.cgi?id=21459>
749
750         After r37324, an Arguments object does not mark an associated activation
751         object. This change was made because Arguments no longer directly used
752         the activation object in any way. However, if an activation is torn off,
753         then the backing store of Arguments becomes the register array of the
754         activation object. Arguments directly marks all of the arguments, but
755         the activation object is being collected, which causes its register
756         array to be freed and new memory to be allocated in its place.
757
758         Unfortunately, it does not seem possible to reproduce this issue in a
759         layout test.
760
761         * kjs/Arguments.cpp:
762         (JSC::Arguments::mark):
763         * kjs/Arguments.h:
764         (JSC::Arguments::setActivation):
765         (JSC::Arguments::Arguments):
766         (JSC::JSActivation::copyRegisters):
767
768 2008-10-09  Ariya Hidayat  <ariya.hidayat@trolltech.com>
769
770         Reviewed by Simon.
771
772         Build fix for MinGW.
773
774         * wtf/AlwaysInline.h:
775
776 2008-10-08  Cameron Zwarich  <zwarich@apple.com>
777
778         Reviewed by Maciej Stachowiak.
779
780         Bug 21497: REGRESSION (r37433): Bytecode JSC tests are severely broken
781         <https://bugs.webkit.org/show_bug.cgi?id=21497>
782
783         Fix a typo in r37433 that causes the failure of a large number of JSC
784         tests with the bytecode interpreter enabled.
785
786         * VM/Machine.cpp:
787         (JSC::Machine::privateExecute):
788
789 2008-10-08  Mark Rowe  <mrowe@apple.com>
790
791         Windows build fix.
792
793         * VM/CTI.cpp:
794         (JSC::): Update type of argument to ctiTrampoline.
795
796 2008-10-08  Darin Adler  <darin@apple.com>
797
798         Reviewed by Cameron Zwarich.
799
800         - https://bugs.webkit.org/show_bug.cgi?id=21403
801           Bug 21403: use new CallFrame class rather than Register* for call frame manipulation
802
803         Add CallFrame as a synonym for ExecState. Arguably, some day we should switch every
804         client over to the new name.
805
806         Use CallFrame* consistently rather than Register* or ExecState* in low-level code such
807         as Machine.cpp and CTI.cpp. Similarly, use callFrame rather than r as its name and use
808         accessor functions to get at things in the frame.
809
810         Eliminate other uses of ExecState* that aren't needed, replacing in some cases with
811         JSGlobalData* and in other cases eliminating them entirely.
812
813         * API/JSObjectRef.cpp:
814         (JSObjectMakeFunctionWithCallback):
815         (JSObjectMakeFunction):
816         (JSObjectHasProperty):
817         (JSObjectGetProperty):
818         (JSObjectSetProperty):
819         (JSObjectDeleteProperty):
820         * API/OpaqueJSString.cpp:
821         * API/OpaqueJSString.h:
822         * VM/CTI.cpp:
823         (JSC::CTI::getConstant):
824         (JSC::CTI::emitGetArg):
825         (JSC::CTI::emitGetPutArg):
826         (JSC::CTI::getConstantImmediateNumericArg):
827         (JSC::CTI::printOpcodeOperandTypes):
828         (JSC::CTI::CTI):
829         (JSC::CTI::compileOpCall):
830         (JSC::CTI::compileBinaryArithOp):
831         (JSC::CTI::privateCompileMainPass):
832         (JSC::CTI::privateCompile):
833         (JSC::CTI::privateCompileGetByIdProto):
834         (JSC::CTI::privateCompileGetByIdChain):
835         (JSC::CTI::compileRegExp):
836         * VM/CTI.h:
837         * VM/CodeBlock.h:
838         * VM/CodeGenerator.cpp:
839         (JSC::CodeGenerator::emitEqualityOp):
840         (JSC::CodeGenerator::emitLoad):
841         (JSC::CodeGenerator::emitUnexpectedLoad):
842         (JSC::CodeGenerator::emitConstruct):
843         * VM/CodeGenerator.h:
844         * VM/Machine.cpp:
845         (JSC::jsLess):
846         (JSC::jsLessEq):
847         (JSC::jsAddSlowCase):
848         (JSC::jsAdd):
849         (JSC::jsTypeStringForValue):
850         (JSC::Machine::resolve):
851         (JSC::Machine::resolveSkip):
852         (JSC::Machine::resolveGlobal):
853         (JSC::inlineResolveBase):
854         (JSC::Machine::resolveBase):
855         (JSC::Machine::resolveBaseAndProperty):
856         (JSC::Machine::resolveBaseAndFunc):
857         (JSC::Machine::slideRegisterWindowForCall):
858         (JSC::isNotObject):
859         (JSC::Machine::callEval):
860         (JSC::Machine::dumpCallFrame):
861         (JSC::Machine::dumpRegisters):
862         (JSC::Machine::unwindCallFrame):
863         (JSC::Machine::throwException):
864         (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):
865         (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope):
866         (JSC::Machine::execute):
867         (JSC::Machine::debug):
868         (JSC::Machine::createExceptionScope):
869         (JSC::cachePrototypeChain):
870         (JSC::Machine::tryCachePutByID):
871         (JSC::Machine::tryCacheGetByID):
872         (JSC::Machine::privateExecute):
873         (JSC::Machine::retrieveArguments):
874         (JSC::Machine::retrieveCaller):
875         (JSC::Machine::retrieveLastCaller):
876         (JSC::Machine::findFunctionCallFrame):
877         (JSC::Machine::getArgumentsData):
878         (JSC::Machine::tryCTICachePutByID):
879         (JSC::Machine::getCTIArrayLengthTrampoline):
880         (JSC::Machine::getCTIStringLengthTrampoline):
881         (JSC::Machine::tryCTICacheGetByID):
882         (JSC::Machine::cti_op_convert_this):
883         (JSC::Machine::cti_op_end):
884         (JSC::Machine::cti_op_add):
885         (JSC::Machine::cti_op_pre_inc):
886         (JSC::Machine::cti_timeout_check):
887         (JSC::Machine::cti_op_loop_if_less):
888         (JSC::Machine::cti_op_loop_if_lesseq):
889         (JSC::Machine::cti_op_new_object):
890         (JSC::Machine::cti_op_put_by_id):
891         (JSC::Machine::cti_op_put_by_id_second):
892         (JSC::Machine::cti_op_put_by_id_generic):
893         (JSC::Machine::cti_op_put_by_id_fail):
894         (JSC::Machine::cti_op_get_by_id):
895         (JSC::Machine::cti_op_get_by_id_second):
896         (JSC::Machine::cti_op_get_by_id_generic):
897         (JSC::Machine::cti_op_get_by_id_fail):
898         (JSC::Machine::cti_op_instanceof):
899         (JSC::Machine::cti_op_del_by_id):
900         (JSC::Machine::cti_op_mul):
901         (JSC::Machine::cti_op_new_func):
902         (JSC::Machine::cti_op_call_JSFunction):
903         (JSC::Machine::cti_vm_compile):
904         (JSC::Machine::cti_op_push_activation):
905         (JSC::Machine::cti_op_call_NotJSFunction):
906         (JSC::Machine::cti_op_create_arguments):
907         (JSC::Machine::cti_op_tear_off_activation):
908         (JSC::Machine::cti_op_tear_off_arguments):
909         (JSC::Machine::cti_op_ret_profiler):
910         (JSC::Machine::cti_op_ret_scopeChain):
911         (JSC::Machine::cti_op_new_array):
912         (JSC::Machine::cti_op_resolve):
913         (JSC::Machine::cti_op_construct_JSConstruct):
914         (JSC::Machine::cti_op_construct_NotJSConstruct):
915         (JSC::Machine::cti_op_get_by_val):
916         (JSC::Machine::cti_op_resolve_func):
917         (JSC::Machine::cti_op_sub):
918         (JSC::Machine::cti_op_put_by_val):
919         (JSC::Machine::cti_op_put_by_val_array):
920         (JSC::Machine::cti_op_lesseq):
921         (JSC::Machine::cti_op_loop_if_true):
922         (JSC::Machine::cti_op_negate):
923         (JSC::Machine::cti_op_resolve_base):
924         (JSC::Machine::cti_op_resolve_skip):
925         (JSC::Machine::cti_op_resolve_global):
926         (JSC::Machine::cti_op_div):
927         (JSC::Machine::cti_op_pre_dec):
928         (JSC::Machine::cti_op_jless):
929         (JSC::Machine::cti_op_not):
930         (JSC::Machine::cti_op_jtrue):
931         (JSC::Machine::cti_op_post_inc):
932         (JSC::Machine::cti_op_eq):
933         (JSC::Machine::cti_op_lshift):
934         (JSC::Machine::cti_op_bitand):
935         (JSC::Machine::cti_op_rshift):
936         (JSC::Machine::cti_op_bitnot):
937         (JSC::Machine::cti_op_resolve_with_base):
938         (JSC::Machine::cti_op_new_func_exp):
939         (JSC::Machine::cti_op_mod):
940         (JSC::Machine::cti_op_less):
941         (JSC::Machine::cti_op_neq):
942         (JSC::Machine::cti_op_post_dec):
943         (JSC::Machine::cti_op_urshift):
944         (JSC::Machine::cti_op_bitxor):
945         (JSC::Machine::cti_op_new_regexp):
946         (JSC::Machine::cti_op_bitor):
947         (JSC::Machine::cti_op_call_eval):
948         (JSC::Machine::cti_op_throw):
949         (JSC::Machine::cti_op_get_pnames):
950         (JSC::Machine::cti_op_next_pname):
951         (JSC::Machine::cti_op_push_scope):
952         (JSC::Machine::cti_op_pop_scope):
953         (JSC::Machine::cti_op_typeof):
954         (JSC::Machine::cti_op_to_jsnumber):
955         (JSC::Machine::cti_op_in):
956         (JSC::Machine::cti_op_push_new_scope):
957         (JSC::Machine::cti_op_jmp_scopes):
958         (JSC::Machine::cti_op_put_by_index):
959         (JSC::Machine::cti_op_switch_imm):
960         (JSC::Machine::cti_op_switch_char):
961         (JSC::Machine::cti_op_switch_string):
962         (JSC::Machine::cti_op_del_by_val):
963         (JSC::Machine::cti_op_put_getter):
964         (JSC::Machine::cti_op_put_setter):
965         (JSC::Machine::cti_op_new_error):
966         (JSC::Machine::cti_op_debug):
967         (JSC::Machine::cti_vm_throw):
968         * VM/Machine.h:
969         * VM/Register.h:
970         * VM/RegisterFile.h:
971         * kjs/Arguments.h:
972         * kjs/DebuggerCallFrame.cpp:
973         (JSC::DebuggerCallFrame::functionName):
974         (JSC::DebuggerCallFrame::type):
975         (JSC::DebuggerCallFrame::thisObject):
976         (JSC::DebuggerCallFrame::evaluate):
977         * kjs/DebuggerCallFrame.h:
978         * kjs/ExecState.cpp:
979         (JSC::CallFrame::thisValue):
980         * kjs/ExecState.h:
981         * kjs/FunctionConstructor.cpp:
982         (JSC::constructFunction):
983         * kjs/JSActivation.cpp:
984         (JSC::JSActivation::JSActivation):
985         (JSC::JSActivation::argumentsGetter):
986         * kjs/JSActivation.h:
987         * kjs/JSGlobalObject.cpp:
988         (JSC::JSGlobalObject::init):
989         * kjs/JSGlobalObjectFunctions.cpp:
990         (JSC::globalFuncEval):
991         * kjs/JSVariableObject.h:
992         * kjs/Parser.cpp:
993         (JSC::Parser::parse):
994         * kjs/RegExpConstructor.cpp:
995         (JSC::constructRegExp):
996         * kjs/RegExpPrototype.cpp:
997         (JSC::regExpProtoFuncCompile):
998         * kjs/Shell.cpp:
999         (prettyPrintScript):
1000         * kjs/StringPrototype.cpp:
1001         (JSC::stringProtoFuncMatch):
1002         (JSC::stringProtoFuncSearch):
1003         * kjs/identifier.cpp:
1004         (JSC::Identifier::checkSameIdentifierTable):
1005         * kjs/interpreter.cpp:
1006         (JSC::Interpreter::checkSyntax):
1007         (JSC::Interpreter::evaluate):
1008         * kjs/nodes.cpp:
1009         (JSC::ThrowableExpressionData::emitThrowError):
1010         (JSC::RegExpNode::emitCode):
1011         (JSC::ArrayNode::emitCode):
1012         (JSC::InstanceOfNode::emitCode):
1013         * kjs/nodes.h:
1014         * kjs/regexp.cpp:
1015         (JSC::RegExp::RegExp):
1016         (JSC::RegExp::create):
1017         * kjs/regexp.h:
1018         * profiler/HeavyProfile.h:
1019         * profiler/Profile.h:
1020         * wrec/WREC.cpp:
1021         * wrec/WREC.h:
1022
1023 2008-10-08  Mark Rowe  <mrowe@apple.com>
1024
1025         Typed by Maciej Stachowiak, reviewed by Mark Rowe.
1026
1027         Fix crash in fast/js/constant-folding.html with CTI disabled.
1028
1029         * VM/Machine.cpp:
1030         (JSC::Machine::privateExecute):
1031
1032 2008-10-08  Timothy Hatcher  <timothy@apple.com>
1033
1034         Roll out r37427 because it causes an infinite recursion loading about:blank.
1035
1036         https://bugs.webkit.org/show_bug.cgi?id=21476
1037
1038 2008-10-08  Darin Adler  <darin@apple.com>
1039
1040         Reviewed by Cameron Zwarich.
1041
1042         - https://bugs.webkit.org/show_bug.cgi?id=21403
1043           Bug 21403: use new CallFrame class rather than Register* for call frame manipulation
1044
1045         Add CallFrame as a synonym for ExecState. Arguably, some day we should switch every
1046         client over to the new name.
1047
1048         Use CallFrame* consistently rather than Register* or ExecState* in low-level code such
1049         as Machine.cpp and CTI.cpp. Similarly, use callFrame rather than r as its name and use
1050         accessor functions to get at things in the frame.
1051
1052         Eliminate other uses of ExecState* that aren't needed, replacing in some cases with
1053         JSGlobalData* and in other cases eliminating them entirely.
1054
1055         * API/JSObjectRef.cpp:
1056         (JSObjectMakeFunctionWithCallback):
1057         (JSObjectMakeFunction):
1058         (JSObjectHasProperty):
1059         (JSObjectGetProperty):
1060         (JSObjectSetProperty):
1061         (JSObjectDeleteProperty):
1062         * API/OpaqueJSString.cpp:
1063         * API/OpaqueJSString.h:
1064         * VM/CTI.cpp:
1065         (JSC::CTI::getConstant):
1066         (JSC::CTI::emitGetArg):
1067         (JSC::CTI::emitGetPutArg):
1068         (JSC::CTI::getConstantImmediateNumericArg):
1069         (JSC::CTI::printOpcodeOperandTypes):
1070         (JSC::CTI::CTI):
1071         (JSC::CTI::compileOpCall):
1072         (JSC::CTI::compileBinaryArithOp):
1073         (JSC::CTI::privateCompileMainPass):
1074         (JSC::CTI::privateCompile):
1075         (JSC::CTI::privateCompileGetByIdProto):
1076         (JSC::CTI::privateCompileGetByIdChain):
1077         (JSC::CTI::compileRegExp):
1078         * VM/CTI.h:
1079         * VM/CodeBlock.h:
1080         * VM/CodeGenerator.cpp:
1081         (JSC::CodeGenerator::emitEqualityOp):
1082         (JSC::CodeGenerator::emitLoad):
1083         (JSC::CodeGenerator::emitUnexpectedLoad):
1084         (JSC::CodeGenerator::emitConstruct):
1085         * VM/CodeGenerator.h:
1086         * VM/Machine.cpp:
1087         (JSC::jsLess):
1088         (JSC::jsLessEq):
1089         (JSC::jsAddSlowCase):
1090         (JSC::jsAdd):
1091         (JSC::jsTypeStringForValue):
1092         (JSC::Machine::resolve):
1093         (JSC::Machine::resolveSkip):
1094         (JSC::Machine::resolveGlobal):
1095         (JSC::inlineResolveBase):
1096         (JSC::Machine::resolveBase):
1097         (JSC::Machine::resolveBaseAndProperty):
1098         (JSC::Machine::resolveBaseAndFunc):
1099         (JSC::Machine::slideRegisterWindowForCall):
1100         (JSC::isNotObject):
1101         (JSC::Machine::callEval):
1102         (JSC::Machine::dumpCallFrame):
1103         (JSC::Machine::dumpRegisters):
1104         (JSC::Machine::unwindCallFrame):
1105         (JSC::Machine::throwException):
1106         (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):
1107         (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope):
1108         (JSC::Machine::execute):
1109         (JSC::Machine::debug):
1110         (JSC::Machine::createExceptionScope):
1111         (JSC::cachePrototypeChain):
1112         (JSC::Machine::tryCachePutByID):
1113         (JSC::Machine::tryCacheGetByID):
1114         (JSC::Machine::privateExecute):
1115         (JSC::Machine::retrieveArguments):
1116         (JSC::Machine::retrieveCaller):
1117         (JSC::Machine::retrieveLastCaller):
1118         (JSC::Machine::findFunctionCallFrame):
1119         (JSC::Machine::getArgumentsData):
1120         (JSC::Machine::tryCTICachePutByID):
1121         (JSC::Machine::getCTIArrayLengthTrampoline):
1122         (JSC::Machine::getCTIStringLengthTrampoline):
1123         (JSC::Machine::tryCTICacheGetByID):
1124         (JSC::Machine::cti_op_convert_this):
1125         (JSC::Machine::cti_op_end):
1126         (JSC::Machine::cti_op_add):
1127         (JSC::Machine::cti_op_pre_inc):
1128         (JSC::Machine::cti_timeout_check):
1129         (JSC::Machine::cti_op_loop_if_less):
1130         (JSC::Machine::cti_op_loop_if_lesseq):
1131         (JSC::Machine::cti_op_new_object):
1132         (JSC::Machine::cti_op_put_by_id):
1133         (JSC::Machine::cti_op_put_by_id_second):
1134         (JSC::Machine::cti_op_put_by_id_generic):
1135         (JSC::Machine::cti_op_put_by_id_fail):
1136         (JSC::Machine::cti_op_get_by_id):
1137         (JSC::Machine::cti_op_get_by_id_second):
1138         (JSC::Machine::cti_op_get_by_id_generic):
1139         (JSC::Machine::cti_op_get_by_id_fail):
1140         (JSC::Machine::cti_op_instanceof):
1141         (JSC::Machine::cti_op_del_by_id):
1142         (JSC::Machine::cti_op_mul):
1143         (JSC::Machine::cti_op_new_func):
1144         (JSC::Machine::cti_op_call_JSFunction):
1145         (JSC::Machine::cti_vm_compile):
1146         (JSC::Machine::cti_op_push_activation):
1147         (JSC::Machine::cti_op_call_NotJSFunction):
1148         (JSC::Machine::cti_op_create_arguments):
1149         (JSC::Machine::cti_op_tear_off_activation):
1150         (JSC::Machine::cti_op_tear_off_arguments):
1151         (JSC::Machine::cti_op_ret_profiler):
1152         (JSC::Machine::cti_op_ret_scopeChain):
1153         (JSC::Machine::cti_op_new_array):
1154         (JSC::Machine::cti_op_resolve):
1155         (JSC::Machine::cti_op_construct_JSConstruct):
1156         (JSC::Machine::cti_op_construct_NotJSConstruct):
1157         (JSC::Machine::cti_op_get_by_val):
1158         (JSC::Machine::cti_op_resolve_func):
1159         (JSC::Machine::cti_op_sub):
1160         (JSC::Machine::cti_op_put_by_val):
1161         (JSC::Machine::cti_op_put_by_val_array):
1162         (JSC::Machine::cti_op_lesseq):
1163         (JSC::Machine::cti_op_loop_if_true):
1164         (JSC::Machine::cti_op_negate):
1165         (JSC::Machine::cti_op_resolve_base):
1166         (JSC::Machine::cti_op_resolve_skip):
1167         (JSC::Machine::cti_op_resolve_global):
1168         (JSC::Machine::cti_op_div):
1169         (JSC::Machine::cti_op_pre_dec):
1170         (JSC::Machine::cti_op_jless):
1171         (JSC::Machine::cti_op_not):
1172         (JSC::Machine::cti_op_jtrue):
1173         (JSC::Machine::cti_op_post_inc):
1174         (JSC::Machine::cti_op_eq):
1175         (JSC::Machine::cti_op_lshift):
1176         (JSC::Machine::cti_op_bitand):
1177         (JSC::Machine::cti_op_rshift):
1178         (JSC::Machine::cti_op_bitnot):
1179         (JSC::Machine::cti_op_resolve_with_base):
1180         (JSC::Machine::cti_op_new_func_exp):
1181         (JSC::Machine::cti_op_mod):
1182         (JSC::Machine::cti_op_less):
1183         (JSC::Machine::cti_op_neq):
1184         (JSC::Machine::cti_op_post_dec):
1185         (JSC::Machine::cti_op_urshift):
1186         (JSC::Machine::cti_op_bitxor):
1187         (JSC::Machine::cti_op_new_regexp):
1188         (JSC::Machine::cti_op_bitor):
1189         (JSC::Machine::cti_op_call_eval):
1190         (JSC::Machine::cti_op_throw):
1191         (JSC::Machine::cti_op_get_pnames):
1192         (JSC::Machine::cti_op_next_pname):
1193         (JSC::Machine::cti_op_push_scope):
1194         (JSC::Machine::cti_op_pop_scope):
1195         (JSC::Machine::cti_op_typeof):
1196         (JSC::Machine::cti_op_to_jsnumber):
1197         (JSC::Machine::cti_op_in):
1198         (JSC::Machine::cti_op_push_new_scope):
1199         (JSC::Machine::cti_op_jmp_scopes):
1200         (JSC::Machine::cti_op_put_by_index):
1201         (JSC::Machine::cti_op_switch_imm):
1202         (JSC::Machine::cti_op_switch_char):
1203         (JSC::Machine::cti_op_switch_string):
1204         (JSC::Machine::cti_op_del_by_val):
1205         (JSC::Machine::cti_op_put_getter):
1206         (JSC::Machine::cti_op_put_setter):
1207         (JSC::Machine::cti_op_new_error):
1208         (JSC::Machine::cti_op_debug):
1209         (JSC::Machine::cti_vm_throw):
1210         * VM/Machine.h:
1211         * VM/Register.h:
1212         * VM/RegisterFile.h:
1213         * kjs/Arguments.h:
1214         * kjs/DebuggerCallFrame.cpp:
1215         (JSC::DebuggerCallFrame::functionName):
1216         (JSC::DebuggerCallFrame::type):
1217         (JSC::DebuggerCallFrame::thisObject):
1218         (JSC::DebuggerCallFrame::evaluate):
1219         * kjs/DebuggerCallFrame.h:
1220         * kjs/ExecState.cpp:
1221         (JSC::CallFrame::thisValue):
1222         * kjs/ExecState.h:
1223         * kjs/FunctionConstructor.cpp:
1224         (JSC::constructFunction):
1225         * kjs/JSActivation.cpp:
1226         (JSC::JSActivation::JSActivation):
1227         (JSC::JSActivation::argumentsGetter):
1228         * kjs/JSActivation.h:
1229         * kjs/JSGlobalObject.cpp:
1230         (JSC::JSGlobalObject::init):
1231         * kjs/JSGlobalObjectFunctions.cpp:
1232         (JSC::globalFuncEval):
1233         * kjs/JSVariableObject.h:
1234         * kjs/Parser.cpp:
1235         (JSC::Parser::parse):
1236         * kjs/RegExpConstructor.cpp:
1237         (JSC::constructRegExp):
1238         * kjs/RegExpPrototype.cpp:
1239         (JSC::regExpProtoFuncCompile):
1240         * kjs/Shell.cpp:
1241         (prettyPrintScript):
1242         * kjs/StringPrototype.cpp:
1243         (JSC::stringProtoFuncMatch):
1244         (JSC::stringProtoFuncSearch):
1245         * kjs/identifier.cpp:
1246         (JSC::Identifier::checkSameIdentifierTable):
1247         * kjs/interpreter.cpp:
1248         (JSC::Interpreter::checkSyntax):
1249         (JSC::Interpreter::evaluate):
1250         * kjs/nodes.cpp:
1251         (JSC::ThrowableExpressionData::emitThrowError):
1252         (JSC::RegExpNode::emitCode):
1253         (JSC::ArrayNode::emitCode):
1254         (JSC::InstanceOfNode::emitCode):
1255         * kjs/nodes.h:
1256         * kjs/regexp.cpp:
1257         (JSC::RegExp::RegExp):
1258         (JSC::RegExp::create):
1259         * kjs/regexp.h:
1260         * profiler/HeavyProfile.h:
1261         * profiler/Profile.h:
1262         * wrec/WREC.cpp:
1263         * wrec/WREC.h:
1264
1265 2008-10-08  Prasanth Ullattil  <pullatti@trolltech.com>
1266
1267         Reviewed by Oliver Hunt.
1268
1269         Avoid endless loops when compiling without the computed goto
1270         optimization.
1271
1272         NEXT_OPCODE expands to "continue", which will not work inside
1273         loops.
1274
1275         * VM/Machine.cpp:
1276         (JSC::Machine::privateExecute):
1277
1278 2008-10-08  Maciej Stachowiak  <mjs@apple.com>
1279
1280         Reviewed by Oliver Hunt.
1281
1282         Re-landing the following fix with the crashing bug in it fixed (r37405):
1283         
1284         - optimize away multiplication by constant 1.0
1285         
1286         2.3% speedup on v8 RayTrace benchmark
1287
1288         Apparently it's not uncommon for JavaScript code to multiply by
1289         constant 1.0 in the mistaken belief that this converts integer to
1290         floating point and that there is any operational difference.
1291
1292         * VM/CTI.cpp:
1293         (JSC::CTI::privateCompileMainPass): Optimize to_jsnumber for
1294         case where parameter is already number.
1295         (JSC::CTI::privateCompileSlowCases): ditto
1296         * VM/Machine.cpp:
1297         (JSC::Machine::privateExecute): ditto
1298         * kjs/grammar.y:
1299         (makeMultNode): Transform as follows:
1300         +FOO * BAR ==> FOO * BAR
1301         FOO * +BAR ==> FOO * BAR
1302         FOO * 1 ==> +FOO
1303         1 * FOO ==> +FOO
1304         (makeDivNode): Transform as follows:
1305         +FOO / BAR ==> FOO / BAR
1306         FOO / +BAR ==> FOO / BAR
1307         (makeSubNode): Transform as follows:
1308         +FOO - BAR ==> FOO - BAR
1309         FOO - +BAR ==> FOO - BAR
1310         * kjs/nodes.h:
1311         (JSC::ExpressionNode::stripUnaryPlus): Helper for above
1312         grammar.y changes
1313         (JSC::UnaryPlusNode::stripUnaryPlus): ditto
1314
1315 2008-10-08  Maciej Stachowiak  <mjs@apple.com>
1316
1317         Reviewed by Oliver Hunt.
1318         
1319         - correctly handle appending -0 to a string, it should stringify as just 0
1320
1321         * kjs/ustring.cpp:
1322         (JSC::concatenate):
1323
1324 2008-10-08  Prasanth Ullattil  <pullatti@trolltech.com>
1325
1326         Reviewed by Simon.
1327
1328         Fix WebKit compilation with VC2008SP1
1329
1330         Apply the TR1 workaround for JavaScriptCore, too.
1331
1332         * JavaScriptCore.pro:
1333
1334 2008-10-08  Prasanth Ullattil  <pullatti@trolltech.com>
1335
1336         Reviewed by Simon.
1337
1338         Fix compilation errors on VS2008 64Bit
1339
1340         * kjs/collector.cpp:
1341         (JSC::currentThreadStackBase):
1342
1343 2008-10-08  André Pönitz  <apoenitz@trolltech.com>
1344
1345         Reviewed by Simon.
1346
1347         Fix compilation with Qt namespaces.
1348
1349         * wtf/Threading.h:
1350
1351 2008-10-07  Sam Weinig  <sam@webkit.org>
1352
1353         Roll out r37405.
1354
1355 2008-10-07  Oliver Hunt  <oliver@apple.com>
1356
1357         Reviewed by Cameron Zwarich.
1358
1359         Switch CTI runtime calls to the fastcall calling convention
1360
1361         Basically this means that we get to store the argument for CTI
1362         calls in the ECX register, which saves a register->memory write
1363         and subsequent memory->register read.
1364         
1365         This is a 1.7% progression in SunSpider and 2.4% on commandline
1366         v8 tests on Windows
1367
1368         * VM/CTI.cpp:
1369         (JSC::):
1370         (JSC::CTI::privateCompilePutByIdTransition):
1371         (JSC::CTI::privateCompilePatchGetArrayLength):
1372         * VM/CTI.h:
1373         * VM/Machine.h:
1374         * masm/X86Assembler.h:
1375         (JSC::X86Assembler::emitRestoreArgumentReference):
1376         (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline):
1377           We need this to correctly reload ecx from inside certain property access
1378           trampolines.
1379         * wtf/Platform.h:
1380
1381 2008-10-07  Maciej Stachowiak  <mjs@apple.com>
1382
1383         Reviewed by Mark Rowe.
1384         
1385         - optimize away multiplication by constant 1.0
1386         
1387         2.3% speedup on v8 RayTrace benchmark
1388
1389         Apparently it's not uncommon for JavaScript code to multiply by
1390         constant 1.0 in the mistaken belief that this converts integer to
1391         floating point and that there is any operational difference.
1392         
1393         * VM/CTI.cpp:
1394         (JSC::CTI::privateCompileMainPass): Optimize to_jsnumber for
1395         case where parameter is already number.
1396         (JSC::CTI::privateCompileSlowCases): ditto
1397         * VM/Machine.cpp:
1398         (JSC::Machine::privateExecute): ditto
1399         * kjs/grammar.y:
1400         (makeMultNode): Transform as follows:
1401         +FOO * BAR ==> FOO * BAR
1402         FOO * +BAR ==> FOO * BAR
1403         FOO * 1 ==> +FOO
1404         1 * FOO ==> +FOO
1405         (makeDivNode): Transform as follows:
1406         +FOO / BAR ==> FOO / BAR
1407         FOO / +BAR ==> FOO / BAR
1408         (makeSubNode): Transform as follows:
1409         +FOO - BAR ==> FOO - BAR
1410         FOO - +BAR ==> FOO - BAR
1411         * kjs/nodes.h:
1412         (JSC::ExpressionNode::stripUnaryPlus): Helper for above
1413         grammar.y changes
1414         (JSC::UnaryPlusNode::stripUnaryPlus): ditto
1415
1416 2008-10-07  Maciej Stachowiak  <mjs@apple.com>
1417
1418         Reviewed by Oliver Hunt.
1419         
1420         - make constant folding code more consistent
1421         
1422         Added a makeSubNode to match add, mult and div; use the makeFooNode functions always,
1423         instead of allocating nodes directly in other places in the grammar.
1424
1425         * kjs/grammar.y:
1426
1427 2008-10-07  Sam Weinig  <sam@webkit.org>
1428
1429         Reviewed by Cameron Zwarich.
1430
1431         Move hasGetterSetterProperties flag from PropertyMap to StructureID.
1432
1433         * kjs/JSObject.cpp:
1434         (JSC::JSObject::put):
1435         (JSC::JSObject::defineGetter):
1436         (JSC::JSObject::defineSetter):
1437         * kjs/JSObject.h:
1438         (JSC::JSObject::hasGetterSetterProperties):
1439         (JSC::JSObject::getOwnPropertySlotForWrite):
1440         (JSC::JSObject::getOwnPropertySlot):
1441         * kjs/PropertyMap.h:
1442         * kjs/StructureID.cpp:
1443         (JSC::StructureID::StructureID):
1444         (JSC::StructureID::addPropertyTransition):
1445         (JSC::StructureID::toDictionaryTransition):
1446         (JSC::StructureID::changePrototypeTransition):
1447         (JSC::StructureID::getterSetterTransition):
1448         * kjs/StructureID.h:
1449         (JSC::StructureID::hasGetterSetterProperties):
1450         (JSC::StructureID::setHasGetterSetterProperties):
1451
1452 2008-10-07  Sam Weinig  <sam@webkit.org>
1453
1454         Reviewed by Cameron Zwarich.
1455
1456         Roll r37370 back in with bug fixes.
1457
1458         - PropertyMap::storageSize() should reflect the number of keys + deletedOffsets
1459           and has nothing to do with the internal deletedSentinel count anymore.
1460
1461 2008-10-07  Gavin Barraclough  <barraclough@apple.com>
1462
1463         Reviewed by Oliver Hunt.
1464
1465         Move callframe initialization into JIT code, again.
1466         
1467         As a part of the restructuring the second result from functions is now
1468         returned in edx, allowing the new value of 'r' to be returned via a
1469         register, and stored to the stack from JIT code, too.
1470
1471         4.5% progression on v8-tests. (3% in their harness)
1472
1473         * VM/CTI.cpp:
1474         (JSC::):
1475         (JSC::CTI::emitCall):
1476         (JSC::CTI::compileOpCall):
1477         (JSC::CTI::privateCompileMainPass):
1478         (JSC::CTI::privateCompileSlowCases):
1479         (JSC::CTI::privateCompile):
1480         * VM/CTI.h:
1481         (JSC::CallRecord::CallRecord):
1482         * VM/Machine.cpp:
1483         (JSC::Machine::cti_op_call_JSFunction):
1484         (JSC::Machine::cti_op_construct_JSConstruct):
1485         (JSC::Machine::cti_op_resolve_func):
1486         (JSC::Machine::cti_op_post_inc):
1487         (JSC::Machine::cti_op_resolve_with_base):
1488         (JSC::Machine::cti_op_post_dec):
1489         * VM/Machine.h:
1490         * kjs/JSFunction.h:
1491         * kjs/ScopeChain.h:
1492
1493 2008-10-07  Mark Rowe  <mrowe@apple.com>
1494
1495         Fix typo in method name.
1496
1497         * wrec/WREC.cpp:
1498         * wrec/WREC.h:
1499
1500 2008-10-07  Cameron Zwarich  <zwarich@apple.com>
1501
1502         Rubber-stamped by Mark Rowe.
1503
1504         Roll out r37370.
1505
1506 2008-10-06  Sam Weinig  <sam@webkit.org>
1507
1508         Reviewed by Cameron Zwarich.
1509
1510         Fix for https://bugs.webkit.org/show_bug.cgi?id=21415
1511         Improve the division between PropertyStorageArray and PropertyMap
1512
1513         - Rework ProperyMap to store offsets in the value so that they don't
1514           change when rehashing.  This allows us not to have to keep the 
1515           PropertyStorageArray in sync and thus not have to pass it in.
1516         - Rename PropertyMap::getOffset -> PropertyMap::get since put/remove
1517           now also return offsets.
1518         - A Vector of deleted offsets is now needed since the storage is out of
1519           band.
1520
1521         1% win on SunSpider.  Wash on V8 suite.
1522
1523         * JavaScriptCore.exp:
1524         * VM/CTI.cpp:
1525         (JSC::transitionWillNeedStorageRealloc):
1526         * VM/Machine.cpp:
1527         (JSC::Machine::privateExecute):
1528         Transition logic can be greatly simplified by the fact that
1529         the storage capacity is always known, and is correct for the
1530         inline case.
1531         * kjs/JSObject.cpp:
1532         (JSC::JSObject::put): Rename getOffset -> get.
1533         (JSC::JSObject::deleteProperty): Ditto.
1534         (JSC::JSObject::getPropertyAttributes): Ditto.
1535         (JSC::JSObject::removeDirect): Use returned offset to
1536         clear the value in the PropertyNameArray.
1537         (JSC::JSObject::allocatePropertyStorage): Add assert.
1538         * kjs/JSObject.h:
1539         (JSC::JSObject::getDirect): Rename getOffset -> get
1540         (JSC::JSObject::getDirectLocation): Rename getOffset -> get
1541         (JSC::JSObject::putDirect): Use propertyStorageCapacity to determine whether
1542         or not to resize.  Also, since put now returns an offset (and thus 
1543         addPropertyTransition does also) setting of the PropertyStorageArray is
1544         now done here.
1545         (JSC::JSObject::transitionTo):
1546         * kjs/PropertyMap.cpp:
1547         (JSC::PropertyMap::checkConsistency): PropertyStorageArray is no longer 
1548         passed in.
1549         (JSC::PropertyMap::operator=): Copy the delete offsets vector.
1550         (JSC::PropertyMap::put): Instead of setting the PropertyNameArray
1551         explicitly, return the offset where the value should go.
1552         (JSC::PropertyMap::remove): Instead of removing from the PropertyNameArray
1553         explicitly, return the offset where the value should be removed.
1554         (JSC::PropertyMap::get): Switch to using the stored offset, instead
1555         of the implicit one.
1556         (JSC::PropertyMap::insert):
1557         (JSC::PropertyMap::expand): This is never called when m_table is null,
1558         so remove that branch and add it as an assertion.
1559         (JSC::PropertyMap::createTable): Consistency checks no longer take
1560         a PropertyNameArray.
1561         (JSC::PropertyMap::rehash): No need to rehash the PropertyNameArray
1562         now that it is completely out of band.
1563         * kjs/PropertyMap.h:
1564         (JSC::PropertyMapEntry::PropertyMapEntry): Store offset into PropertyNameArray.
1565         (JSC::PropertyMap::get): Switch to using the stored offset, instead
1566         of the implicit one.
1567         * kjs/StructureID.cpp:
1568         (JSC::StructureID::StructureID): Initialize the propertyStorageCapacity to 
1569         JSObject::inlineStorageCapacity.
1570         (JSC::StructureID::growPropertyStorageCapacity): Grow the storage capacity as
1571         described below.
1572         (JSC::StructureID::addPropertyTransition): Copy the storage capacity.
1573         (JSC::StructureID::toDictionaryTransition): Ditto.
1574         (JSC::StructureID::changePrototypeTransition): Ditto.
1575         (JSC::StructureID::getterSetterTransition): Ditto.
1576         * kjs/StructureID.h:
1577         (JSC::StructureID::propertyStorageCapacity): Add propertyStorageCapacity
1578         which is the current capacity for the JSObjects PropertyStorageArray.
1579         It starts at the JSObject::inlineStorageCapacity (currently 2), then
1580         when it first needs to be resized moves to the JSObject::nonInlineBaseStorageCapacity
1581         (currently 16), and after that doubles each time.
1582
1583 2008-10-06  Cameron Zwarich  <zwarich@apple.com>
1584
1585         Reviewed by Oliver Hunt.
1586
1587         Bug 21396: Remove the OptionalCalleeActivation call frame slot
1588         <https://bugs.webkit.org/show_bug.cgi?id=21396>
1589
1590         Remove the OptionalCalleeActivation call frame slot. We have to be
1591         careful to store the activation object in a register, because objects
1592         in the scope chain do not get marked.
1593
1594         This is a 0.3% speedup on both SunSpider and the V8 benchmark.
1595
1596         * VM/CTI.cpp:
1597         (JSC::CTI::privateCompileMainPass):
1598         * VM/CodeBlock.cpp:
1599         (JSC::CodeBlock::dump):
1600         * VM/CodeGenerator.cpp:
1601         (JSC::CodeGenerator::CodeGenerator):
1602         (JSC::CodeGenerator::emitReturn):
1603         * VM/CodeGenerator.h:
1604         * VM/Machine.cpp:
1605         (JSC::Machine::dumpRegisters):
1606         (JSC::Machine::unwindCallFrame):
1607         (JSC::Machine::privateExecute):
1608         (JSC::Machine::cti_op_call_JSFunction):
1609         (JSC::Machine::cti_op_push_activation):
1610         (JSC::Machine::cti_op_tear_off_activation):
1611         (JSC::Machine::cti_op_construct_JSConstruct):
1612         * VM/Machine.h:
1613         (JSC::Machine::initializeCallFrame):
1614         * VM/RegisterFile.h:
1615         (JSC::RegisterFile::):
1616
1617 2008-10-06  Tony Chang  <tony@chromium.org>
1618
1619         Reviewed by Alexey Proskuryakov.
1620
1621         Chromium doesn't use pthreads on windows, so make its use conditional.
1622         
1623         Also convert a WORD to a DWORD to avoid a compiler warning.  This
1624         matches the other methods around it.
1625
1626         * wtf/ThreadingWin.cpp:
1627         (WTF::wtfThreadEntryPoint):
1628         (WTF::ThreadCondition::broadcast):
1629
1630 2008-10-06  Mark Mentovai  <mark@moxienet.com>
1631
1632         Reviewed by Tim Hatcher.
1633
1634         Allow ENABLE_DASHBOARD_SUPPORT and ENABLE_MAC_JAVA_BRIDGE to be
1635         disabled on the Mac.
1636
1637         https://bugs.webkit.org/show_bug.cgi?id=21333
1638
1639         * wtf/Platform.h:
1640
1641 2008-10-06  Steve Falkenburg  <sfalken@apple.com>
1642
1643         https://bugs.webkit.org/show_bug.cgi?id=21416
1644         Pass 0 for size to VirtualAlloc, as documented by MSDN.
1645         Identified by Application Verifier.
1646         
1647         Reviewed by Darin Adler.
1648
1649         * kjs/collector.cpp:
1650         (KJS::freeBlock):
1651
1652 2008-10-06  Kevin McCullough  <kmccullough@apple.com>
1653
1654         Reviewed by Tim Hatcheri and Oliver Hunt.
1655
1656         https://bugs.webkit.org/show_bug.cgi?id=21412
1657         Bug 21412: Refactor user initiated profile count to be more stable
1658         - Export UString::from for use with creating the profile title.
1659
1660         * JavaScriptCore.exp:
1661
1662 2008-10-06  Maciej Stachowiak  <mjs@apple.com>
1663
1664         Not reviewed. Build fix.
1665         
1666         - revert toBoolean changes (r37333 and r37335); need to make WebCore work with these
1667
1668         * API/JSValueRef.cpp:
1669         (JSValueToBoolean):
1670         * ChangeLog:
1671         * JavaScriptCore.exp:
1672         * VM/CodeBlock.cpp:
1673         (JSC::CodeBlock::dump):
1674         * VM/Machine.cpp:
1675         (JSC::Machine::privateExecute):
1676         (JSC::Machine::cti_op_loop_if_true):
1677         (JSC::Machine::cti_op_not):
1678         (JSC::Machine::cti_op_jtrue):
1679         * kjs/ArrayPrototype.cpp:
1680         (JSC::arrayProtoFuncFilter):
1681         (JSC::arrayProtoFuncEvery):
1682         (JSC::arrayProtoFuncSome):
1683         * kjs/BooleanConstructor.cpp:
1684         (JSC::constructBoolean):
1685         (JSC::callBooleanConstructor):
1686         * kjs/GetterSetter.h:
1687         * kjs/JSCell.h:
1688         (JSC::JSValue::toBoolean):
1689         * kjs/JSNumberCell.cpp:
1690         (JSC::JSNumberCell::toBoolean):
1691         * kjs/JSNumberCell.h:
1692         * kjs/JSObject.cpp:
1693         (JSC::JSObject::toBoolean):
1694         * kjs/JSObject.h:
1695         * kjs/JSString.cpp:
1696         (JSC::JSString::toBoolean):
1697         * kjs/JSString.h:
1698         * kjs/JSValue.h:
1699         * kjs/RegExpConstructor.cpp:
1700         (JSC::setRegExpConstructorMultiline):
1701         * kjs/RegExpObject.cpp:
1702         (JSC::RegExpObject::match):
1703         * kjs/RegExpPrototype.cpp:
1704         (JSC::regExpProtoFuncToString):
1705
1706 2008-10-06  Maciej Stachowiak  <mjs@apple.com>
1707
1708         Reviewed by Sam Weinig.
1709         
1710         - optimize op_jtrue, op_loop_if_true and op_not in various ways
1711         https://bugs.webkit.org/show_bug.cgi?id=21404
1712         
1713         1) Make JSValue::toBoolean nonvirtual and completely inline by
1714         making use of the StructureID type field.
1715         
1716         2) Make JSValue::toBoolean not take an ExecState; doesn't need it.
1717         
1718         3) Make op_not, op_loop_if_true and op_jtrue not read the
1719         ExecState (toBoolean doesn't need it any more) and not check
1720         exceptions (toBoolean can't throw).
1721
1722         * API/JSValueRef.cpp:
1723         (JSValueToBoolean):
1724         * JavaScriptCore.exp:
1725         * VM/CodeBlock.cpp:
1726         (JSC::CodeBlock::dump):
1727         * VM/Machine.cpp:
1728         (JSC::Machine::privateExecute):
1729         (JSC::Machine::cti_op_loop_if_true):
1730         (JSC::Machine::cti_op_not):
1731         (JSC::Machine::cti_op_jtrue):
1732         * kjs/ArrayPrototype.cpp:
1733         (JSC::arrayProtoFuncFilter):
1734         (JSC::arrayProtoFuncEvery):
1735         (JSC::arrayProtoFuncSome):
1736         * kjs/BooleanConstructor.cpp:
1737         (JSC::constructBoolean):
1738         (JSC::callBooleanConstructor):
1739         * kjs/GetterSetter.h:
1740         * kjs/JSCell.h:
1741         (JSC::JSValue::toBoolean):
1742         * kjs/JSNumberCell.cpp:
1743         * kjs/JSNumberCell.h:
1744         (JSC::JSNumberCell::toBoolean):
1745         * kjs/JSObject.cpp:
1746         * kjs/JSObject.h:
1747         (JSC::JSObject::toBoolean):
1748         (JSC::JSCell::toBoolean):
1749         * kjs/JSString.cpp:
1750         * kjs/JSString.h:
1751         (JSC::JSString::toBoolean):
1752         * kjs/JSValue.h:
1753         * kjs/RegExpConstructor.cpp:
1754         (JSC::setRegExpConstructorMultiline):
1755         * kjs/RegExpObject.cpp:
1756         (JSC::RegExpObject::match):
1757         * kjs/RegExpPrototype.cpp:
1758         (JSC::regExpProtoFuncToString):
1759
1760 2008-10-06  Ariya Hidayat  <ariya.hidayat@trolltech.com>
1761
1762         Reviewed by Simon.
1763
1764         Build fix for MinGW.
1765
1766         * JavaScriptCore.pri:
1767         * kjs/DateMath.cpp:
1768         (JSC::highResUpTime):
1769
1770 2008-10-05  Cameron Zwarich  <zwarich@apple.com>
1771
1772         Reviewed by Oliver Hunt.
1773
1774         Remove ScopeNode::containsClosures() now that it is unused.
1775
1776         * kjs/nodes.h:
1777         (JSC::ScopeNode::containsClosures):
1778
1779 2008-10-05  Maciej Stachowiak  <mjs@apple.com>
1780
1781         Reviewed by Cameron Zwarich.
1782         
1783         - fix releas-only test failures caused by the fix to bug 21375
1784
1785         * VM/Machine.cpp:
1786         (JSC::Machine::unwindCallFrame): Update ExecState while unwinding call frames;
1787         it now matters more to have a still-valid ExecState, since dynamicGlobalObject
1788         will make use of the ExecState's scope chain.
1789         * VM/Machine.h:
1790
1791 2008-10-05  Cameron Zwarich  <zwarich@apple.com>
1792
1793         Reviewed by Oliver Hunt.
1794
1795         Bug 21364: Remove the branch in op_ret for OptionalCalleeActivation and OptionalCalleeArguments
1796         <https://bugs.webkit.org/show_bug.cgi?id=21364>
1797
1798         Use information from the parser to detect whether an activation is
1799         needed or 'arguments' is used, and emit explicit instructions to tear
1800         them off before op_ret. This allows a branch to be removed from op_ret
1801         and simplifies some other code. This does cause a small change in the
1802         behaviour of 'f.arguments'; it is no longer live when 'arguments' is not
1803         mentioned in the lexical scope of the function.
1804
1805         It should now be easy to remove the OptionaCalleeActivation slot in the
1806         call frame, but this will be done in a later patch.
1807
1808         * VM/CTI.cpp:
1809         (JSC::CTI::privateCompileMainPass):
1810         * VM/CodeBlock.cpp:
1811         (JSC::CodeBlock::dump):
1812         * VM/CodeGenerator.cpp:
1813         (JSC::CodeGenerator::emitReturn):
1814         * VM/CodeGenerator.h:
1815         * VM/Machine.cpp:
1816         (JSC::Machine::unwindCallFrame):
1817         (JSC::Machine::privateExecute):
1818         (JSC::Machine::retrieveArguments):
1819         (JSC::Machine::cti_op_create_arguments):
1820         (JSC::Machine::cti_op_tear_off_activation):
1821         (JSC::Machine::cti_op_tear_off_arguments):
1822         * VM/Machine.h:
1823         * VM/Opcode.h:
1824         * kjs/Arguments.cpp:
1825         (JSC::Arguments::mark):
1826         * kjs/Arguments.h:
1827         (JSC::Arguments::isTornOff):
1828         (JSC::Arguments::Arguments):
1829         (JSC::Arguments::copyRegisters):
1830         (JSC::JSActivation::copyRegisters):
1831         * kjs/JSActivation.cpp:
1832         (JSC::JSActivation::argumentsGetter):
1833         * kjs/JSActivation.h:
1834
1835 2008-10-05  Maciej Stachowiak  <mjs@apple.com>
1836
1837         Reviewed by Oliver Hunt.
1838         
1839         - fixed "REGRESSION (r37297): fast/js/deep-recursion-test takes too long and times out"
1840         https://bugs.webkit.org/show_bug.cgi?id=21375
1841         
1842         The problem is that dynamicGlobalObject had become O(N) in number
1843         of call frames, but unwinding the stack for an exception called it
1844         for every call frame, resulting in O(N^2) behavior for an
1845         exception thrown from inside deep recursion.
1846
1847         Instead of doing it that way, stash the dynamic global object in JSGlobalData.
1848         
1849         * JavaScriptCore.exp:
1850         * VM/Machine.cpp:
1851         (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): Helper class to temporarily
1852         store and later restore a dynamicGlobalObject in JSGlobalData.
1853         (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope):
1854         (JSC::Machine::execute): In each version, establish a DynamicGlobalObjectScope.
1855         For ProgramNode, always establish set new dynamicGlobalObject, for FunctionBody and Eval,
1856         only if none is currently set.
1857         * VM/Machine.h:
1858         * kjs/ExecState.h:
1859         * kjs/JSGlobalData.cpp:
1860         (JSC::JSGlobalData::JSGlobalData): Ininitalize new dynamicGlobalObject field to 0.
1861         * kjs/JSGlobalData.h:
1862         * kjs/JSGlobalObject.h:
1863         (JSC::ExecState::dynamicGlobalObject): Moved here from ExecState for benefit of inlining.
1864         Return lexical global object if this is a globalExec(), otherwise look in JSGlobalData
1865         for the one stashed there.
1866
1867 2008-10-05  Sam Weinig  <sam@webkit.org>
1868
1869         Reviewed by Maciej Stachowiak.
1870
1871         Avoid an extra lookup when transitioning to an existing StructureID
1872         by caching the offset of property that caused the transition.
1873
1874         1% win on V8 suite.  Wash on SunSpider.
1875
1876         * kjs/PropertyMap.cpp:
1877         (JSC::PropertyMap::put):
1878         * kjs/PropertyMap.h:
1879         * kjs/StructureID.cpp:
1880         (JSC::StructureID::StructureID):
1881         (JSC::StructureID::addPropertyTransition):
1882         * kjs/StructureID.h:
1883         (JSC::StructureID::setCachedTransistionOffset):
1884         (JSC::StructureID::cachedTransistionOffset):
1885
1886 2008-10-05  Cameron Zwarich  <zwarich@apple.com>
1887
1888         Reviewed by Maciej Stachowiak.
1889
1890         Bug 21364: Remove the branch in op_ret for OptionalCalleeActivation and OptionalCalleeArguments
1891         <https://bugs.webkit.org/show_bug.cgi?id=21364>
1892
1893         This patch does not yet remove the branch, but it does a bit of refactoring
1894         so that a CodeGenerator now knows whether the associated CodeBlock will need
1895         a full scope before doing any code generation. This makes it possible to emit
1896         explicit tear-off instructions before every op_ret.
1897
1898         * VM/CodeBlock.h:
1899         (JSC::CodeBlock::CodeBlock):
1900         * VM/CodeGenerator.cpp:
1901         (JSC::CodeGenerator::generate):
1902         (JSC::CodeGenerator::CodeGenerator):
1903         (JSC::CodeGenerator::emitPushScope):
1904         (JSC::CodeGenerator::emitPushNewScope):
1905         * kjs/nodes.h:
1906         (JSC::ScopeNode::needsActivation):
1907
1908 2008-10-05  Gavin Barraclough  <barraclough@apple.com>
1909
1910         Reviewed by Cameron Zwarich.
1911
1912         Fix for bug #21387 - using SamplingTool with CTI.
1913
1914         (1) A repatch offset offset changes due to an additional instruction to update SamplingTool state.
1915         (2) Fix an incusion order problem due to ExecState changes.
1916         (3) Change to a MACHINE_SAMPLING macro, use of exec should now be accessing global data.
1917
1918         * VM/CTI.h:
1919         (JSC::CTI::execute):
1920         * VM/SamplingTool.h:
1921         (JSC::SamplingTool::privateExecuteReturned):
1922         * kjs/Shell.cpp:
1923
1924 2008-10-04  Mark Rowe  <mrowe@apple.com>
1925
1926         Reviewed by Tim Hatcher.
1927
1928         Add a 'Check For Weak VTables' build phase to catch weak vtables as early as possible.
1929
1930         * JavaScriptCore.xcodeproj/project.pbxproj:
1931
1932 2008-10-04  Sam Weinig  <sam@webkit.org>
1933
1934         Reviewed by Oliver Hunt.
1935
1936         Fix https://bugs.webkit.org/show_bug.cgi?id=21320
1937         leaks of PropertyNameArrayData seen on buildbot
1938
1939         - Fix RefPtr cycle by making PropertyNameArrayData's pointer back
1940           to the StructureID a weak pointer.
1941
1942         * kjs/PropertyNameArray.h:
1943         (JSC::PropertyNameArrayData::setCachedStructureID):
1944         (JSC::PropertyNameArrayData::cachedStructureID):
1945         * kjs/StructureID.cpp:
1946         (JSC::StructureID::getEnumerablePropertyNames):
1947         (JSC::StructureID::clearEnumerationCache):
1948         (JSC::StructureID::~StructureID):
1949
1950 2008-10-04  Darin Adler  <darin@apple.com>
1951
1952         Reviewed by Cameron Zwarich.
1953
1954         - https://bugs.webkit.org/show_bug.cgi?id=21295
1955           Bug 21295: Replace ExecState with a call frame Register pointer
1956
1957         10% faster on Richards; other v8 benchmarks faster too.
1958         A wash on SunSpider.
1959
1960         This does the minimum necessary to get the speedup. Next step in
1961         cleaning this up is to replace ExecState with a CallFrame class,
1962         and be more judicious about when to pass a call frame and when
1963         to pass a global data pointer, global object pointer, or perhaps
1964         something else entirely.
1965
1966         * VM/CTI.cpp: Remove the debug-only check of the exception in
1967         ctiVMThrowTrampoline -- already checked in the code the trampoline
1968         jumps to, so not all that useful. Removed the exec argument from
1969         ctiTrampoline. Removed emitDebugExceptionCheck -- no longer needed.
1970         (JSC::CTI::emitCall): Removed code to set ExecState::m_callFrame.
1971         (JSC::CTI::privateCompileMainPass): Removed code in catch to extract
1972         the exception from ExecState::m_exception; instead, the code that
1973         jumps into catch will make sure the exception is already in eax.
1974         * VM/CTI.h: Removed exec from the ctiTrampoline. Also removed the
1975         non-helpful "volatile". Temporarily left ARG_exec in as a synonym
1976         for ARG_r; I'll change that on a future cleanup pass when introducing
1977         more use of the CallFrame type.
1978         (JSC::CTI::execute): Removed the ExecState* argument.
1979
1980         * VM/ExceptionHelpers.cpp:
1981         (JSC::InterruptedExecutionError::InterruptedExecutionError): Take
1982         JSGlobalData* instead of ExecState*.
1983         (JSC::createInterruptedExecutionException): Ditto.
1984         * VM/ExceptionHelpers.h: Ditto. Also removed an unneeded include.
1985
1986         * VM/Machine.cpp:
1987         (JSC::slideRegisterWindowForCall): Removed the exec and
1988         exceptionValue arguments. Changed to return 0 when there's a stack
1989         overflow rather than using a separate exception argument to cut
1990         down on memory accesses in the calling convention.
1991         (JSC::Machine::unwindCallFrame): Removed the exec argument when
1992         constructing a DebuggerCallFrame. Also removed code to set
1993         ExecState::m_callFrame.
1994         (JSC::Machine::throwException): Removed the exec argument when
1995         construction a DebuggerCallFrame.
1996         (JSC::Machine::execute): Updated to use the register instead of
1997         ExecState and also removed various uses of ExecState.
1998         (JSC::Machine::debug):
1999         (JSC::Machine::privateExecute): Put globalData into a local
2000         variable so it can be used throughout the interpreter. Changed
2001         the VM_CHECK_EXCEPTION to get the exception in globalData instead
2002         of through ExecState.
2003         (JSC::Machine::retrieveLastCaller): Turn exec into a registers
2004         pointer by calling registers() instead of by getting m_callFrame.
2005         (JSC::Machine::callFrame): Ditto.
2006         Tweaked exception macros. Made new versions for when you know
2007         you have an exception. Get at global exception with ARG_globalData.
2008         Got rid of the need to pass in the return value type.
2009         (JSC::Machine::cti_op_add): Update to use new version of exception
2010         macros.
2011         (JSC::Machine::cti_op_pre_inc): Ditto.
2012         (JSC::Machine::cti_timeout_check): Ditto.
2013         (JSC::Machine::cti_op_instanceof): Ditto.
2014         (JSC::Machine::cti_op_new_func): Ditto.
2015         (JSC::Machine::cti_op_call_JSFunction): Optimized by using the
2016         ARG values directly instead of through local variables -- this gets
2017         rid of code that just shuffles things around in the stack frame.
2018         Also get rid of ExecState and update for the new way exceptions are
2019         handled in slideRegisterWindowForCall.
2020         (JSC::Machine::cti_vm_compile): Update to make exec out of r since
2021         they are both the same thing now.
2022         (JSC::Machine::cti_op_call_NotJSFunction): Ditto.
2023         (JSC::Machine::cti_op_init_arguments): Ditto.
2024         (JSC::Machine::cti_op_resolve): Ditto.
2025         (JSC::Machine::cti_op_construct_JSConstruct): Ditto.
2026         (JSC::Machine::cti_op_construct_NotJSConstruct): Ditto.
2027         (JSC::Machine::cti_op_resolve_func): Ditto.
2028         (JSC::Machine::cti_op_put_by_val): Ditto.
2029         (JSC::Machine::cti_op_put_by_val_array): Ditto.
2030         (JSC::Machine::cti_op_resolve_skip): Ditto.
2031         (JSC::Machine::cti_op_resolve_global): Ditto.
2032         (JSC::Machine::cti_op_post_inc): Ditto.
2033         (JSC::Machine::cti_op_resolve_with_base): Ditto.
2034         (JSC::Machine::cti_op_post_dec): Ditto.
2035         (JSC::Machine::cti_op_call_eval): Ditto.
2036         (JSC::Machine::cti_op_throw): Ditto. Also rearranged to return
2037         the exception value as the return value so it can be used by
2038         op_catch.
2039         (JSC::Machine::cti_op_push_scope): Ditto.
2040         (JSC::Machine::cti_op_in): Ditto.
2041         (JSC::Machine::cti_op_del_by_val): Ditto.
2042         (JSC::Machine::cti_vm_throw): Ditto. Also rearranged to return
2043         the exception value as the return value so it can be used by
2044         op_catch.
2045
2046         * kjs/DebuggerCallFrame.cpp:
2047         (JSC::DebuggerCallFrame::functionName): Pass globalData.
2048         (JSC::DebuggerCallFrame::evaluate): Eliminated code to make a
2049         new ExecState.
2050         * kjs/DebuggerCallFrame.h: Removed ExecState argument from
2051         constructor.
2052
2053         * kjs/ExecState.h: Eliminated all data members and made ExecState
2054         inherit privately from Register instead. Also added a typedef to
2055         the future name for this class, which is CallFrame. It's just a
2056         Register* that knows it's a pointer at a call frame. The new class
2057         can't be constructed or copied. Changed all functions to use
2058         the this pointer instead of m_callFrame. Changed exception-related
2059         functions to access an exception in JSGlobalData. Removed functions
2060         used by CTI to pass the return address to the throw machinery --
2061         this is now done directly with a global in the global data.
2062
2063         * kjs/FunctionPrototype.cpp:
2064         (JSC::functionProtoFuncToString): Pass globalData instead of exec.
2065
2066         * kjs/InternalFunction.cpp:
2067         (JSC::InternalFunction::name): Take globalData instead of exec.
2068         * kjs/InternalFunction.h: Ditto.
2069
2070         * kjs/JSGlobalData.cpp: Initialize the new exception global to 0.
2071         * kjs/JSGlobalData.h: Declare two new globals. One for the current
2072         exception and another for the return address used by CTI to
2073         implement the throw operation.
2074
2075         * kjs/JSGlobalObject.cpp:
2076         (JSC::JSGlobalObject::init): Removed code to set up globalExec,
2077         which is now the same thing as globalCallFrame.
2078         (JSC::JSGlobalObject::reset): Get globalExec from our globalExec
2079         function so we don't have to repeat the logic twice.
2080         (JSC::JSGlobalObject::mark): Removed code to mark the exception;
2081         the exception is now stored in JSGlobalData and marked there.
2082         (JSC::JSGlobalObject::globalExec): Return a pointer to the end
2083         of the global call frame.
2084         * kjs/JSGlobalObject.h: Removed the globalExec data member.
2085
2086         * kjs/JSObject.cpp:
2087         (JSC::JSObject::putDirectFunction): Pass globalData instead of exec.
2088
2089         * kjs/collector.cpp:
2090         (JSC::Heap::collect): Mark the global exception.
2091
2092         * profiler/ProfileGenerator.cpp:
2093         (JSC::ProfileGenerator::addParentForConsoleStart): Pass globalData
2094         instead of exec to createCallIdentifier.
2095
2096         * profiler/Profiler.cpp:
2097         (JSC::Profiler::willExecute): Pass globalData instead of exec to
2098         createCallIdentifier.
2099         (JSC::Profiler::didExecute): Ditto.
2100         (JSC::Profiler::createCallIdentifier): Take globalData instead of
2101         exec.
2102         (JSC::createCallIdentifierFromFunctionImp): Ditto.
2103         * profiler/Profiler.h: Change interface to take a JSGlobalData
2104         instead of an ExecState.
2105
2106 2008-10-04  Cameron Zwarich  <zwarich@apple.com>
2107
2108         Reviewed by Darin Adler.
2109
2110         Bug 21369: Add opcode documentation for all undocumented opcodes
2111         <https://bugs.webkit.org/show_bug.cgi?id=21369>
2112
2113         This patch adds opcode documentation for all undocumented opcodes, and
2114         it also renames op_init_arguments to op_create_arguments.
2115
2116         * VM/CTI.cpp:
2117         (JSC::CTI::privateCompileMainPass):
2118         * VM/CodeBlock.cpp:
2119         (JSC::CodeBlock::dump):
2120         * VM/CodeGenerator.cpp:
2121         (JSC::CodeGenerator::CodeGenerator):
2122         * VM/Machine.cpp:
2123         (JSC::Machine::privateExecute):
2124         (JSC::Machine::cti_op_create_arguments):
2125         * VM/Machine.h:
2126         * VM/Opcode.h:
2127
2128 2008-10-03  Maciej Stachowiak  <mjs@apple.com>
2129
2130         Reviewed by Cameron Zwarich.
2131         
2132         - "this" object in methods called on primitives should be wrapper object
2133         https://bugs.webkit.org/show_bug.cgi?id=21362
2134
2135         I changed things so that functions which use "this" do a fast
2136         version of toThisObject conversion if needed. Currently we miss
2137         the conversion entirely, at least for primitive types. Using
2138         TypeInfo and the primitive check, I made the fast case bail out
2139         pretty fast.
2140         
2141         This is inexplicably an 1.007x SunSpider speedup (and a wash on V8 benchmarks).
2142      
2143         Also renamed some opcodes for clarity:
2144         
2145         init ==> enter
2146         init_activation ==> enter_with_activation
2147         
2148         * VM/CTI.cpp:
2149         (JSC::CTI::privateCompileMainPass):
2150         (JSC::CTI::privateCompileSlowCases):
2151         * VM/CodeBlock.cpp:
2152         (JSC::CodeBlock::dump):
2153         * VM/CodeGenerator.cpp:
2154         (JSC::CodeGenerator::generate):
2155         (JSC::CodeGenerator::CodeGenerator):
2156         * VM/Machine.cpp:
2157         (JSC::Machine::privateExecute):
2158         (JSC::Machine::cti_op_convert_this):
2159         * VM/Machine.h:
2160         * VM/Opcode.h:
2161         * kjs/JSActivation.cpp:
2162         (JSC::JSActivation::JSActivation):
2163         * kjs/JSActivation.h:
2164         (JSC::JSActivation::createStructureID):
2165         * kjs/JSCell.h:
2166         (JSC::JSValue::needsThisConversion):
2167         * kjs/JSGlobalData.cpp:
2168         (JSC::JSGlobalData::JSGlobalData):
2169         * kjs/JSGlobalData.h:
2170         * kjs/JSNumberCell.h:
2171         (JSC::JSNumberCell::createStructureID):
2172         * kjs/JSStaticScopeObject.h:
2173         (JSC::JSStaticScopeObject::JSStaticScopeObject):
2174         (JSC::JSStaticScopeObject::createStructureID):
2175         * kjs/JSString.h:
2176         (JSC::JSString::createStructureID):
2177         * kjs/JSValue.h:
2178         * kjs/TypeInfo.h:
2179         (JSC::TypeInfo::needsThisConversion):
2180         * kjs/nodes.h:
2181         (JSC::ScopeNode::usesThis):
2182
2183 2008-10-03  Cameron Zwarich  <zwarich@apple.com>
2184
2185         Reviewed by Maciej Stachowiak.
2186
2187         Bug 21356: The size of the RegisterFile differs depending on 32-bit / 64-bit and Debug / Release
2188         <https://bugs.webkit.org/show_bug.cgi?id=21356>
2189
2190         The RegisterFile decreases in size (measured in terms of numbers of
2191         Registers) as the size of a Register increases. This causes
2192
2193             js1_5/Regress/regress-159334.js
2194
2195         to fail in 64-bit debug builds. This fix makes the RegisterFile on all
2196         platforms the same size that it is in 32-bit Release builds.
2197
2198         * VM/RegisterFile.h:
2199         (JSC::RegisterFile::RegisterFile):
2200
2201 2008-10-03  Maciej Stachowiak  <mjs@apple.com>
2202
2203         Reviewed by Cameron Zwarich.
2204         
2205         - Some code cleanup to how we handle code features.
2206         
2207         1) Rename FeatureInfo typedef to CodeFeatures.
2208         2) Rename NodeFeatureInfo template to NodeInfo.
2209         3) Keep CodeFeature bitmask in ScopeNode instead of trying to break it out into individual bools.
2210         4) Rename misleadingly named "needsClosure" method to "containsClosures", which better describes the meaning
2211         of ClosureFeature.
2212         5) Make setUsersArguments() not take an argument since it only goes one way.
2213
2214         * JavaScriptCore.exp:
2215         * VM/CodeBlock.h:
2216         (JSC::CodeBlock::CodeBlock):
2217         * kjs/NodeInfo.h:
2218         * kjs/Parser.cpp:
2219         (JSC::Parser::didFinishParsing):
2220         * kjs/Parser.h:
2221         (JSC::Parser::parse):
2222         * kjs/grammar.y:
2223         * kjs/nodes.cpp:
2224         (JSC::ScopeNode::ScopeNode):
2225         (JSC::ProgramNode::ProgramNode):
2226         (JSC::ProgramNode::create):
2227         (JSC::EvalNode::EvalNode):
2228         (JSC::EvalNode::create):
2229         (JSC::FunctionBodyNode::FunctionBodyNode):
2230         (JSC::FunctionBodyNode::create):
2231         * kjs/nodes.h:
2232         (JSC::ScopeNode::usesEval):
2233         (JSC::ScopeNode::containsClosures):
2234         (JSC::ScopeNode::usesArguments):
2235         (JSC::ScopeNode::setUsesArguments):
2236
2237 2008-10-03  Cameron Zwarich  <zwarich@apple.com>
2238
2239         Reviewed by Maciej Stachowiak.
2240
2241         Bug 21343: REGRESSSION (r37160): ecma_3/ExecutionContexts/10.1.3-1.js and js1_4/Functions/function-001.js fail on 64-bit
2242         <https://bugs.webkit.org/show_bug.cgi?id=21343>
2243
2244         A fix was landed for this issue in r37253, and the ChangeLog assumes
2245         that it is a compiler bug, but it turns out that it is a subtle issue
2246         with mixing signed and unsigned 32-bit values in a 64-bit environment.
2247         In order to properly fix this bug, we should convert our signed offsets
2248         into the register file to use ptrdiff_t.
2249
2250         This may not be the only instance of this issue, but I will land this
2251         fix first and look for more later.
2252
2253         * VM/Machine.cpp:
2254         (JSC::Machine::getArgumentsData):
2255         * VM/Machine.h:
2256         * kjs/Arguments.cpp:
2257         (JSC::Arguments::getOwnPropertySlot):
2258         * kjs/Arguments.h:
2259         (JSC::Arguments::init):
2260
2261 2008-10-03  Darin Adler  <darin@apple.com>
2262
2263         * VM/CTI.cpp: Another Windows build fix. Change the args of ctiTrampoline.
2264
2265         * kjs/JSNumberCell.h: A build fix for newer versions of gcc. Added
2266         declarations of JSGlobalData overloads of jsNumberCell.
2267
2268 2008-10-03  Darin Adler  <darin@apple.com>
2269
2270         - try to fix Windows build
2271
2272         * kjs/ScopeChain.h: Add forward declaration of JSGlobalData.
2273
2274 2008-10-03  Darin Adler  <darin@apple.com>
2275
2276         Reviewed by Geoff Garen.
2277
2278         - next step of https://bugs.webkit.org/show_bug.cgi?id=21295
2279           Turn ExecState into a call frame pointer.
2280
2281         Remove m_globalObject and m_globalData from ExecState.
2282
2283         SunSpider says this is a wash (slightly faster but not statistically
2284         significant); which is good enough since it's a preparation step and
2285         not supposed to be a spedup.
2286
2287         * API/JSCallbackFunction.cpp:
2288         (JSC::JSCallbackFunction::JSCallbackFunction):
2289         * kjs/ArrayConstructor.cpp:
2290         (JSC::ArrayConstructor::ArrayConstructor):
2291         * kjs/BooleanConstructor.cpp:
2292         (JSC::BooleanConstructor::BooleanConstructor):
2293         * kjs/DateConstructor.cpp:
2294         (JSC::DateConstructor::DateConstructor):
2295         * kjs/ErrorConstructor.cpp:
2296         (JSC::ErrorConstructor::ErrorConstructor):
2297         * kjs/FunctionPrototype.cpp:
2298         (JSC::FunctionPrototype::FunctionPrototype):
2299         * kjs/JSFunction.cpp:
2300         (JSC::JSFunction::JSFunction):
2301         * kjs/NativeErrorConstructor.cpp:
2302         (JSC::NativeErrorConstructor::NativeErrorConstructor):
2303         * kjs/NumberConstructor.cpp:
2304         (JSC::NumberConstructor::NumberConstructor):
2305         * kjs/ObjectConstructor.cpp:
2306         (JSC::ObjectConstructor::ObjectConstructor):
2307         * kjs/PrototypeFunction.cpp:
2308         (JSC::PrototypeFunction::PrototypeFunction):
2309         * kjs/RegExpConstructor.cpp:
2310         (JSC::RegExpConstructor::RegExpConstructor):
2311         * kjs/StringConstructor.cpp:
2312         (JSC::StringConstructor::StringConstructor):
2313         Pass JSGlobalData* instead of ExecState* to the InternalFunction
2314         constructor.
2315
2316         * API/OpaqueJSString.cpp: Added now-needed include.
2317
2318         * JavaScriptCore.exp: Updated.
2319
2320         * VM/CTI.cpp:
2321         (JSC::CTI::emitSlowScriptCheck): Changed to use ARGS_globalData
2322         instead of ARGS_exec.
2323
2324         * VM/CTI.h: Added a new argument to the CTI, the global data pointer.
2325         While it's possible to get to the global data pointer using the
2326         ExecState pointer, it's slow enough that it's better to just keep
2327         it around in the CTI arguments.
2328
2329         * VM/CodeBlock.h: Moved the CodeType enum here from ExecState.h.
2330
2331         * VM/Machine.cpp:
2332         (JSC::Machine::execute): Pass fewer arguments when constructing
2333         ExecState, and pass the global data pointer when invoking CTI.
2334         (JSC::Machine::firstCallFrame): Added. Used to get the dynamic global
2335         object, which is in the scope chain of the first call frame.
2336         (JSC::Machine::cti_op_add): Use globalData instead of exec when
2337         possible, to keep fast cases fast, since it's now more expensive to
2338         get to it through the exec pointer.
2339         (JSC::Machine::cti_timeout_check): Ditto.
2340         (JSC::Machine::cti_op_put_by_id_second): Ditto.
2341         (JSC::Machine::cti_op_get_by_id_second): Ditto.
2342         (JSC::Machine::cti_op_mul): Ditto.
2343         (JSC::Machine::cti_vm_compile): Ditto.
2344         (JSC::Machine::cti_op_get_by_val): Ditto.
2345         (JSC::Machine::cti_op_sub): Ditto.
2346         (JSC::Machine::cti_op_put_by_val): Ditto.
2347         (JSC::Machine::cti_op_put_by_val_array): Ditto.
2348         (JSC::Machine::cti_op_negate): Ditto.
2349         (JSC::Machine::cti_op_div): Ditto.
2350         (JSC::Machine::cti_op_pre_dec): Ditto.
2351         (JSC::Machine::cti_op_post_inc): Ditto.
2352         (JSC::Machine::cti_op_lshift): Ditto.
2353         (JSC::Machine::cti_op_bitand): Ditto.
2354         (JSC::Machine::cti_op_rshift): Ditto.
2355         (JSC::Machine::cti_op_bitnot): Ditto.
2356         (JSC::Machine::cti_op_mod): Ditto.
2357         (JSC::Machine::cti_op_post_dec): Ditto.
2358         (JSC::Machine::cti_op_urshift): Ditto.
2359         (JSC::Machine::cti_op_bitxor): Ditto.
2360         (JSC::Machine::cti_op_bitor): Ditto.
2361         (JSC::Machine::cti_op_call_eval): Ditto.
2362         (JSC::Machine::cti_op_throw): Ditto.
2363         (JSC::Machine::cti_op_is_string): Ditto.
2364         (JSC::Machine::cti_op_debug): Ditto.
2365         (JSC::Machine::cti_vm_throw): Ditto.
2366
2367         * VM/Machine.h: Added firstCallFrame.
2368
2369         * kjs/DebuggerCallFrame.cpp:
2370         (JSC::DebuggerCallFrame::evaluate): Pass fewer arguments when
2371         constructing ExecState.
2372
2373         * kjs/ExecState.cpp: Deleted contents. Later we'll remove the
2374         file altogether.
2375
2376         * kjs/ExecState.h: Removed m_globalObject and m_globalData.
2377         Moved CodeType into another header.
2378         (JSC::ExecState::ExecState): Take only a single argument, a
2379         call frame pointer.
2380         (JSC::ExecState::dynamicGlobalObject): Get the object from
2381         the first call frame since it's no longer stored.
2382         (JSC::ExecState::globalData): Get the global data from the
2383         scope chain, since we no longer store a pointer to it here.
2384         (JSC::ExecState::identifierTable): Ditto.
2385         (JSC::ExecState::propertyNames): Ditto.
2386         (JSC::ExecState::emptyList): Ditto.
2387         (JSC::ExecState::lexer): Ditto.
2388         (JSC::ExecState::parser): Ditto.
2389         (JSC::ExecState::machine): Ditto.
2390         (JSC::ExecState::arrayTable): Ditto.
2391         (JSC::ExecState::dateTable): Ditto.
2392         (JSC::ExecState::mathTable): Ditto.
2393         (JSC::ExecState::numberTable): Ditto.
2394         (JSC::ExecState::regExpTable): Ditto.
2395         (JSC::ExecState::regExpConstructorTable): Ditto.
2396         (JSC::ExecState::stringTable): Ditto.
2397         (JSC::ExecState::heap): Ditto.
2398
2399         * kjs/FunctionConstructor.cpp:
2400         (JSC::FunctionConstructor::FunctionConstructor): Pass
2401         JSGlobalData* instead of ExecState* to the InternalFunction
2402         constructor.
2403         (JSC::constructFunction): Pass the global data pointer when
2404         constructing a new scope chain.
2405
2406         * kjs/InternalFunction.cpp:
2407         (JSC::InternalFunction::InternalFunction): Take a JSGlobalData*
2408         instead of an ExecState*. Later we can change more places to
2409         work this way -- it's more efficient to take the type you need
2410         since the caller might already have it.
2411         * kjs/InternalFunction.h: Ditto.
2412
2413         * kjs/JSCell.h:
2414         (JSC::JSCell::operator new): Added an overload that takes a
2415         JSGlobalData* so you can construct without an ExecState*.
2416
2417         * kjs/JSGlobalObject.cpp:
2418         (JSC::JSGlobalObject::init): Moved creation of the global scope
2419         chain in here, since it now requires a pointer to the global data.
2420         Moved the initialization of the call frame in here since it requires
2421         the global scope chain node. Removed the extra argument to ExecState
2422         when creating the global ExecState*.
2423         * kjs/JSGlobalObject.h: Removed initialization of globalScopeChain
2424         and the call frame from the JSGlobalObjectData constructor. Added
2425         a thisValue argument to the init function.
2426
2427         * kjs/JSNumberCell.cpp: Added versions of jsNumberCell that take
2428         JSGlobalData* rather than ExecState*.
2429         * kjs/JSNumberCell.h:
2430         (JSC::JSNumberCell::operator new): Added a version that takes
2431         JSGlobalData*.
2432         (JSC::JSNumberCell::JSNumberCell): Ditto.
2433         (JSC::jsNumber): Ditto.
2434         * kjs/JSString.cpp:
2435         (JSC::jsString): Ditto.
2436         (JSC::jsSubstring): Ditto.
2437         (JSC::jsOwnedString): Ditto.
2438         * kjs/JSString.h:
2439         (JSC::JSString::JSString): Changed to take JSGlobalData*.
2440         (JSC::jsEmptyString): Added a version that takes JSGlobalData*.
2441         (JSC::jsSingleCharacterString): Ditto.
2442         (JSC::jsSingleCharacterSubstring): Ditto.
2443         (JSC::jsNontrivialString): Ditto.
2444         (JSC::JSString::getIndex): Ditto.
2445         (JSC::jsString): Ditto.
2446         (JSC::jsSubstring): Ditto.
2447         (JSC::jsOwnedString): Ditto.
2448
2449         * kjs/ScopeChain.h: Added a globalData pointer to each node.
2450         (JSC::ScopeChainNode::ScopeChainNode): Initialize the globalData
2451         pointer.
2452         (JSC::ScopeChainNode::push): Set the global data pointer in the
2453         new node.
2454         (JSC::ScopeChain::ScopeChain): Take a globalData argument.
2455
2456         * kjs/SmallStrings.cpp:
2457         (JSC::SmallStrings::createEmptyString): Take JSGlobalData* instead of
2458         ExecState*.
2459         (JSC::SmallStrings::createSingleCharacterString): Ditto.
2460         * kjs/SmallStrings.h:
2461         (JSC::SmallStrings::emptyString): Ditto.
2462         (JSC::SmallStrings::singleCharacterString): Ditto.
2463
2464 2008-10-03  Cameron Zwarich  <zwarich@apple.com>
2465
2466         Reviewed by Geoff Garen.
2467
2468         Bug 21343: REGRESSSION (r37160): ecma_3/ExecutionContexts/10.1.3-1.js and js1_4/Functions/function-001.js fail on 64-bit
2469         <https://bugs.webkit.org/show_bug.cgi?id=21343>
2470
2471         Add a workaround for a bug in GCC, which affects GCC 4.0, GCC 4.2, and
2472         llvm-gcc 4.2. I put it in an #ifdef because it was a slight regression
2473         on SunSpider in 32-bit, although that might be entirely random.
2474
2475         * kjs/Arguments.cpp:
2476         (JSC::Arguments::getOwnPropertySlot):
2477
2478 2008-10-03  Darin Adler  <darin@apple.com>
2479
2480         Rubber stamped by Alexey Proskuryakov.
2481
2482         * kjs/Shell.cpp: (main): Don't delete JSGlobalData. Later, we need to change
2483         this tool to use public JavaScriptCore API instead.
2484
2485 2008-10-03  Darin Adler  <darin@apple.com>
2486
2487         Suggested by Alexey Proskuryakov.
2488
2489         * kjs/JSGlobalData.cpp:
2490         (JSC::JSGlobalData::~JSGlobalData): Remove call to heap.destroy() because
2491         it's too late to ref the JSGlobalData object once it's already being
2492         destroyed. In practice this is not a problem because WebCore's JSGlobalData
2493         is never destroyed and JSGlobalContextRelease takes care of calling
2494         heap.destroy() in advance.
2495
2496 2008-10-02  Oliver Hunt  <oliver@apple.com>
2497
2498         Reviewed by Maciej Stachowiak.
2499
2500         Replace SSE3 check with an SSE2 check, and implement SSE2 check on windows.
2501
2502         5.6% win on SunSpider on windows.
2503
2504         * VM/CTI.cpp:
2505         (JSC::isSSE2Present):
2506         (JSC::CTI::compileBinaryArithOp):
2507         (JSC::CTI::compileBinaryArithOpSlowCase):
2508
2509 2008-10-03  Maciej Stachowiak  <mjs@apple.com>
2510
2511         Rubber stamped by Cameron Zwarich.
2512         
2513         - fix mistaken change of | to || which caused a big perf regression on EarleyBoyer
2514
2515         * kjs/grammar.y:
2516
2517 2008-10-02  Darin Adler  <darin@apple.com>
2518
2519         Reviewed by Geoff Garen.
2520
2521         - https://bugs.webkit.org/show_bug.cgi?id=21321
2522           Bug 21321: speed up JavaScriptCore by inlining Heap in JSGlobalData
2523
2524         1.019x as fast on SunSpider.
2525
2526         * API/JSBase.cpp:
2527         (JSEvaluateScript): Use heap. instead of heap-> to work with the heap.
2528         (JSCheckScriptSyntax): Ditto.
2529         (JSGarbageCollect): Ditto.
2530         (JSReportExtraMemoryCost): Ditto.
2531         * API/JSContextRef.cpp:
2532         (JSGlobalContextRetain): Ditto.
2533         (JSGlobalContextRelease): Destroy the heap with the destroy function instead
2534         of the delete operator.
2535         (JSContextGetGlobalObject): Use heap. instead of heap-> to work with the heap.
2536         * API/JSObjectRef.cpp:
2537         (JSObjectMake): Use heap. instead of heap-> to work with the heap.
2538         (JSObjectMakeFunctionWithCallback): Ditto.
2539         (JSObjectMakeConstructor): Ditto.
2540         (JSObjectMakeFunction): Ditto.
2541         (JSObjectMakeArray): Ditto.
2542         (JSObjectMakeDate): Ditto.
2543         (JSObjectMakeError): Ditto.
2544         (JSObjectMakeRegExp): Ditto.
2545         (JSObjectHasProperty): Ditto.
2546         (JSObjectGetProperty): Ditto.
2547         (JSObjectSetProperty): Ditto.
2548         (JSObjectGetPropertyAtIndex): Ditto.
2549         (JSObjectSetPropertyAtIndex): Ditto.
2550         (JSObjectDeleteProperty): Ditto.
2551         (JSObjectCallAsFunction): Ditto.
2552         (JSObjectCallAsConstructor): Ditto.
2553         (JSObjectCopyPropertyNames): Ditto.
2554         (JSPropertyNameAccumulatorAddName): Ditto.
2555         * API/JSValueRef.cpp:
2556         (JSValueIsEqual): Ditto.
2557         (JSValueIsInstanceOfConstructor): Ditto.
2558         (JSValueMakeNumber): Ditto.
2559         (JSValueMakeString): Ditto.
2560         (JSValueToNumber): Ditto.
2561         (JSValueToStringCopy): Ditto.
2562         (JSValueToObject): Ditto.
2563         (JSValueProtect): Ditto.
2564         (JSValueUnprotect): Ditto.
2565
2566         * kjs/ExecState.h:
2567         (JSC::ExecState::heap): Update to use the & operator.
2568
2569         * kjs/JSGlobalData.cpp:
2570         (JSC::JSGlobalData::JSGlobalData): Update to initialize a heap member
2571         instead of calling new to make a heap.
2572         (JSC::JSGlobalData::~JSGlobalData): Destroy the heap with the destroy
2573         function instead of the delete operator.
2574         * kjs/JSGlobalData.h: Change from Heap* to a Heap.
2575         * kjs/JSGlobalObject.cpp:
2576         (JSC::JSGlobalObject::mark): Use the & operator here.
2577         (JSC::JSGlobalObject::operator new): Use heap. instead of heap-> to work
2578         with the heap.
2579
2580 2008-10-02  Cameron Zwarich  <zwarich@apple.com>
2581
2582         Reviewed by Geoff Garen.
2583
2584         Bug 21317: Replace RegisterFile size and capacity information with Register pointers
2585         <https://bugs.webkit.org/show_bug.cgi?id=21317>
2586
2587         This is a 2.3% speedup on the V8 DeltaBlue benchmark, a 3.3% speedup on
2588         the V8 Raytrace benchmark, and a 1.0% speedup on SunSpider.
2589
2590         * VM/Machine.cpp:
2591         (JSC::slideRegisterWindowForCall):
2592         (JSC::Machine::callEval):
2593         (JSC::Machine::execute):
2594         (JSC::Machine::privateExecute):
2595         (JSC::Machine::cti_op_call_JSFunction):
2596         (JSC::Machine::cti_op_construct_JSConstruct):
2597         * VM/RegisterFile.cpp:
2598         (JSC::RegisterFile::~RegisterFile):
2599         * VM/RegisterFile.h:
2600         (JSC::RegisterFile::RegisterFile):
2601         (JSC::RegisterFile::start):
2602         (JSC::RegisterFile::end):
2603         (JSC::RegisterFile::size):
2604         (JSC::RegisterFile::shrink):
2605         (JSC::RegisterFile::grow):
2606         (JSC::RegisterFile::lastGlobal):
2607         (JSC::RegisterFile::markGlobals):
2608         (JSC::RegisterFile::markCallFrames):
2609         * kjs/JSGlobalObject.cpp:
2610         (JSC::JSGlobalObject::copyGlobalsTo):
2611
2612 2008-10-02  Cameron Zwarich  <zwarich@apple.com>
2613
2614         Rubber-stamped by Darin Adler.
2615
2616         Change bitwise operations introduced in r37166 to boolean operations. We
2617         only use bitwise operations over boolean operations for increasing
2618         performance in extremely hot code, but that does not apply to anything
2619         in the parser.
2620
2621         * kjs/grammar.y:
2622
2623 2008-10-02  Gavin Barraclough  <barraclough@apple.com>
2624
2625         Reviewed by Darin Adler.
2626
2627         Fix for bug #21232 - should reset m_isPendingDash on flush,
2628         and should allow '\-' as beginning or end of a range (though
2629         not to specifiy a range itself).
2630
2631         * ChangeLog:
2632         * wrec/CharacterClassConstructor.cpp:
2633         (JSC::CharacterClassConstructor::put):
2634         (JSC::CharacterClassConstructor::flush):
2635         * wrec/CharacterClassConstructor.h:
2636         (JSC::CharacterClassConstructor::flushBeforeEscapedHyphen):
2637         * wrec/WREC.cpp:
2638         (JSC::WRECGenerator::generateDisjunction):
2639         (JSC::WRECParser::parseCharacterClass):
2640         (JSC::WRECParser::parseDisjunction):
2641         * wrec/WREC.h:
2642
2643 2008-10-02  Darin Adler  <darin@apple.com>
2644
2645         Reviewed by Sam Weinig.
2646
2647         - remove the "static" from declarations in a header file, since we
2648           don't want them to have internal linkage
2649
2650         * VM/Machine.h: Remove the static keyword from the constant and the
2651         three inline functions that Geoff just moved here.
2652
2653 2008-10-02  Geoffrey Garen  <ggaren@apple.com>
2654
2655         Reviewed by Sam Weinig.
2656         
2657         Fixed https://bugs.webkit.org/show_bug.cgi?id=21283.
2658         Profiler Crashes When Started
2659
2660         * VM/Machine.cpp:
2661         * VM/Machine.h:
2662         (JSC::makeHostCallFramePointer):
2663         (JSC::isHostCallFrame):
2664         (JSC::stripHostCallFrameBit): Moved some things to the header so
2665         JSGlobalObject could use them.
2666
2667         * kjs/JSGlobalObject.h:
2668         (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Call the
2669         new makeHostCallFramePointer API, since 0 no longer indicates a host
2670         call frame.
2671
2672 2008-10-02  Alexey Proskuryakov  <ap@webkit.org>
2673
2674         Reviewed by Darin Adler.
2675
2676         https://bugs.webkit.org/show_bug.cgi?id=21304
2677         Stop using a static wrapper map for WebCore JS bindings
2678
2679         * kjs/JSGlobalData.cpp:
2680         (JSC::JSGlobalData::JSGlobalData):
2681         (JSC::JSGlobalData::~JSGlobalData):
2682         (JSC::JSGlobalData::ClientData::~ClientData):
2683         * kjs/JSGlobalData.h:
2684         Added a client data member to JSGlobalData. WebCore will use it to store bindings-related
2685         global data.
2686
2687         * JavaScriptCore.exp: Export virtual ClientData destructor.
2688
2689 2008-10-02  Geoffrey Garen  <ggaren@apple.com>
2690
2691         Not reviewed.
2692         
2693         Try to fix Qt build.
2694
2695         * kjs/Error.h:
2696
2697 2008-10-01  Geoffrey Garen  <ggaren@apple.com>
2698
2699         Reviewed by Darin Adler and Cameron Zwarich.
2700
2701         Preliminary step toward dynamic recompilation: Standardized and
2702         simplified the parsing interface.
2703         
2704         The main goal in this patch is to make it easy to ask for a duplicate
2705         compilation, and get back a duplicate result -- same source URL, same
2706         debugger / profiler ID, same toString behavior, etc.
2707         
2708         The basic unit of compilation and evaluation is now SourceCode, which
2709         encompasses a SourceProvider, a range in that provider, and a starting
2710         line number.
2711
2712         A SourceProvider now encompasses a source URL, and *is* a source ID,
2713         since a pointer is a unique identifier.
2714
2715         * API/JSBase.cpp:
2716         (JSEvaluateScript):
2717         (JSCheckScriptSyntax): Provide a SourceCode to the Interpreter, since
2718         other APIs are no longer supported.
2719         
2720         * VM/CodeBlock.h:
2721         (JSC::EvalCodeCache::get): Provide a SourceCode to the Interpreter, since
2722         other APIs are no longer supported.
2723         (JSC::CodeBlock::CodeBlock): ASSERT something that used to be ASSERTed
2724         by our caller -- this is a better bottleneck.
2725
2726         * VM/CodeGenerator.cpp:
2727         (JSC::CodeGenerator::CodeGenerator): Updated for the fact that
2728         FunctionBodyNode's parameters are no longer a WTF::Vector.
2729
2730         * kjs/Arguments.cpp:
2731         (JSC::Arguments::Arguments): ditto
2732
2733         * kjs/DebuggerCallFrame.cpp:
2734         (JSC::DebuggerCallFrame::evaluate): Provide a SourceCode to the Parser,
2735         since other APIs are no longer supported.
2736
2737         * kjs/FunctionConstructor.cpp:
2738         (JSC::constructFunction): Provide a SourceCode to the Parser, since
2739         other APIs are no longer supported. Adopt FunctionBodyNode's new
2740         "finishParsing" API.
2741
2742         * kjs/JSFunction.cpp:
2743         (JSC::JSFunction::lengthGetter):
2744         (JSC::JSFunction::getParameterName): Updated for the fact that
2745         FunctionBodyNode's parameters are no longer a wtf::Vector.
2746
2747         * kjs/JSFunction.h: Nixed some cruft.
2748
2749         * kjs/JSGlobalObjectFunctions.cpp:
2750         (JSC::globalFuncEval): Provide a SourceCode to the Parser, since
2751         other APIs are no longer supported. 
2752
2753         * kjs/Parser.cpp:
2754         (JSC::Parser::parse): Require a SourceCode argument, instead of a bunch
2755         of broken out parameters. Stop tracking sourceId as an integer, since we
2756         use the SourceProvider pointer for this now. Don't clamp the
2757         startingLineNumber, since SourceCode does that now.
2758
2759         * kjs/Parser.h:
2760         (JSC::Parser::parse): Standardized the parsing interface to require a
2761         SourceCode.
2762
2763         * kjs/Shell.cpp:
2764         (functionRun):
2765         (functionLoad):
2766         (prettyPrintScript):
2767         (runWithScripts):
2768         (runInteractive): Provide a SourceCode to the Interpreter, since
2769         other APIs are no longer supported.
2770
2771         * kjs/SourceProvider.h:
2772         (JSC::SourceProvider::SourceProvider):
2773         (JSC::SourceProvider::url):
2774         (JSC::SourceProvider::asId):
2775         (JSC::UStringSourceProvider::create):
2776         (JSC::UStringSourceProvider::UStringSourceProvider): Added new
2777         responsibilities described above.
2778
2779         * kjs/SourceRange.h:
2780         (JSC::SourceCode::SourceCode):
2781         (JSC::SourceCode::toString):
2782         (JSC::SourceCode::provider):
2783         (JSC::SourceCode::firstLine):
2784         (JSC::SourceCode::data):
2785         (JSC::SourceCode::length): Added new responsibilities described above.
2786         Renamed SourceRange to SourceCode, based on review feedback. Added
2787         a makeSource function for convenience.
2788
2789         * kjs/debugger.h: Provide a SourceCode to the client, since other APIs
2790         are no longer supported.
2791
2792         * kjs/grammar.y: Provide startingLineNumber when creating a SourceCode.
2793
2794         * kjs/debugger.h: Treat sourceId as intptr_t to avoid loss of precision
2795         on 64bit platforms.
2796
2797         * kjs/interpreter.cpp:
2798         (JSC::Interpreter::checkSyntax):
2799         (JSC::Interpreter::evaluate):
2800         * kjs/interpreter.h: Require a SourceCode instead of broken out arguments.
2801
2802         * kjs/lexer.cpp:
2803         (JSC::Lexer::setCode):
2804         * kjs/lexer.h:
2805         (JSC::Lexer::sourceRange): Fold together the SourceProvider and line number
2806         into a SourceCode. Fixed a bug where the Lexer would accidentally keep
2807         alive the last SourceProvider forever.
2808
2809         * kjs/nodes.cpp:
2810         (JSC::ScopeNode::ScopeNode):
2811         (JSC::ProgramNode::ProgramNode):
2812         (JSC::ProgramNode::create):
2813         (JSC::EvalNode::EvalNode):
2814         (JSC::EvalNode::generateCode):
2815         (JSC::EvalNode::create):
2816         (JSC::FunctionBodyNode::FunctionBodyNode):
2817         (JSC::FunctionBodyNode::finishParsing):
2818         (JSC::FunctionBodyNode::create):
2819         (JSC::FunctionBodyNode::generateCode):
2820         (JSC::ProgramNode::generateCode):
2821         (JSC::FunctionBodyNode::paramString):
2822         * kjs/nodes.h:
2823         (JSC::ScopeNode::):
2824         (JSC::ScopeNode::sourceId):
2825         (JSC::FunctionBodyNode::):
2826         (JSC::FunctionBodyNode::parameterCount):
2827         (JSC::FuncExprNode::):
2828         (JSC::FuncDeclNode::): Store a SourceCode in all ScopeNodes, since
2829         SourceCode is now responsible for tracking URL, ID, etc. Streamlined
2830         some ad hoc FunctionBodyNode fixups into a "finishParsing" function, to
2831         help make clear what you need to do in order to finish parsing a
2832         FunctionBodyNode.
2833
2834         * wtf/Vector.h:
2835         (WTF::::releaseBuffer): Don't ASSERT that releaseBuffer() is only called
2836         when buffer is not 0, since FunctionBodyNode is more than happy
2837         to get back a 0 buffer, and other functions like RefPtr::release() allow
2838         for 0, too.
2839
2840 2008-10-01  Cameron Zwarich  <zwarich@apple.com>
2841
2842         Reviewed by Maciej Stachowiak.
2843
2844         Bug 21289: REGRESSION (r37160): Inspector crashes on load
2845         <https://bugs.webkit.org/show_bug.cgi?id=21289>
2846
2847         The code in Arguments::mark() in r37160 was wrong. It marks indices in
2848         d->registers, but that makes no sense (they are local variables, not
2849         arguments). It should mark those indices in d->registerArray instead.
2850
2851         This patch also changes Arguments::copyRegisters() to use d->numParameters
2852         instead of recomputing it.
2853
2854         * kjs/Arguments.cpp:
2855         (JSC::Arguments::mark):
2856         * kjs/Arguments.h:
2857         (JSC::Arguments::copyRegisters):
2858
2859 2008-09-30  Darin Adler  <darin@apple.com>
2860
2861         Reviewed by Eric Seidel.
2862
2863         - https://bugs.webkit.org/show_bug.cgi?id=21214
2864           work on getting rid of ExecState
2865
2866         Eliminate some unneeded uses of dynamicGlobalObject.
2867
2868         * API/JSClassRef.cpp:
2869         (OpaqueJSClass::contextData): Changed to use a map in the global data instead
2870         of on the global object. Also fixed to use only a single hash table lookup.
2871
2872         * API/JSObjectRef.cpp:
2873         (JSObjectMakeConstructor): Use lexicalGlobalObject rather than dynamicGlobalObject
2874         to get the object prototype.
2875
2876         * kjs/ArrayPrototype.cpp:
2877         (JSC::arrayProtoFuncToString): Use arrayVisitedElements set in global data rather
2878         than in the global object.
2879         (JSC::arrayProtoFuncToLocaleString): Ditto.
2880         (JSC::arrayProtoFuncJoin): Ditto.
2881
2882         * kjs/JSGlobalData.cpp:
2883         (JSC::JSGlobalData::JSGlobalData): Don't initialize opaqueJSClassData, since
2884         it's no longer a pointer.
2885         (JSC::JSGlobalData::~JSGlobalData): We still need to delete all the values, but
2886         we don't need to delete the map since it's no longer a pointer.
2887
2888         * kjs/JSGlobalData.h: Made opaqueJSClassData a map instead of a pointer to a map.
2889         Also added arrayVisitedElements.
2890
2891         * kjs/JSGlobalObject.h: Removed arrayVisitedElements.
2892
2893         * kjs/Shell.cpp:
2894         (functionRun): Use lexicalGlobalObject instead of dynamicGlobalObject.
2895         (functionLoad): Ditto.
2896
2897 2008-10-01  Cameron Zwarich  <zwarich@apple.com>
2898
2899         Not reviewed.
2900
2901         Speculative Windows build fix.
2902
2903         * kjs/grammar.y:
2904
2905 2008-10-01  Cameron Zwarich  <zwarich@apple.com>
2906
2907         Reviewed by Darin Adler.
2908
2909         Bug 21123: using "arguments" in a function should not force creation of an activation object
2910         <https://bugs.webkit.org/show_bug.cgi?id=21123>
2911
2912         Make the 'arguments' object not require a JSActivation. We store the
2913         'arguments' object in the OptionalCalleeArguments call frame slot. We
2914         need to be able to get the original 'arguments' object to tear it off
2915         when returning from a function, but 'arguments' may be assigned to in a
2916         number of ways.
2917
2918         Therefore, we use the OptionalCalleeArguments slot when we want to get
2919         the original activation or we know that 'arguments' was not assigned a
2920         different value. When 'arguments' may have been assigned a new value,
2921         we use a new local variable that is initialized with 'arguments'. Since
2922         a function parameter named 'arguments' may overwrite the value of
2923         'arguments', we also need to be careful to look up 'arguments' in the
2924         symbol table, so we get the parameter named 'arguments' instead of the
2925         local variable that we have added for holding the 'arguments' object.
2926
2927         This is a 19.1% win on the V8 Raytrace benchmark using the SunSpider
2928         harness, and a 20.7% win using the V8 harness. This amounts to a 6.5%
2929         total speedup on the V8 benchmark suite using the V8 harness.
2930
2931         * VM/CTI.cpp:
2932         (JSC::CTI::privateCompileMainPass):
2933         * VM/CodeBlock.h:
2934         * VM/CodeGenerator.cpp:
2935         (JSC::CodeGenerator::CodeGenerator):
2936         * VM/Machine.cpp:
2937         (JSC::Machine::unwindCallFrame):
2938         (JSC::Machine::privateExecute):
2939         (JSC::Machine::retrieveArguments):
2940         (JSC::Machine::cti_op_init_arguments):
2941         (JSC::Machine::cti_op_ret_activation_arguments):
2942         * VM/Machine.h:
2943         * VM/RegisterFile.h:
2944         (JSC::RegisterFile::):
2945         * kjs/Arguments.cpp:
2946         (JSC::Arguments::mark):
2947         (JSC::Arguments::fillArgList):
2948         (JSC::Arguments::getOwnPropertySlot):
2949         (JSC::Arguments::put):
2950         * kjs/Arguments.h:
2951         (JSC::Arguments::setRegisters):
2952         (JSC::Arguments::init):
2953         (JSC::Arguments::Arguments):
2954         (JSC::Arguments::copyRegisters):
2955         (JSC::JSActivation::copyRegisters):
2956         * kjs/JSActivation.cpp:
2957         (JSC::JSActivation::argumentsGetter):
2958         * kjs/JSActivation.h:
2959         (JSC::JSActivation::JSActivationData::JSActivationData):
2960         * kjs/grammar.y:
2961         * kjs/nodes.h:
2962         (JSC::ScopeNode::setUsesArguments):
2963         * masm/X86Assembler.h:
2964         (JSC::X86Assembler::):
2965         (JSC::X86Assembler::orl_mr):
2966
2967 2008-10-01  Kevin McCullough  <kmccullough@apple.com>
2968
2969         Rubberstamped by Geoff Garen.
2970
2971         Remove BreakpointCheckStatement because it's not used anymore.
2972         No effect on sunspider or the jsc tests.
2973
2974         * kjs/nodes.cpp:
2975         * kjs/nodes.h:
2976
2977 2008-09-30  Oliver Hunt  <oliver@apple.com>
2978
2979         Reviewed by Geoff Garen.
2980
2981         Improve performance of CTI on windows.
2982
2983         Currently on platforms where the compiler doesn't allow us to safely
2984         index relative to the address of a parameter we need to actually
2985         provide a pointer to CTI runtime call arguments.  This patch improves
2986         performance in this case by making the CTI logic for restoring this
2987         parameter much less conservative by only resetting it before we actually
2988         make a call, rather than between each and every SF bytecode we generate
2989         code for.
2990
2991         This results in a 3.6% progression on the v8 benchmark when compiled with MSVC.
2992
2993         * VM/CTI.cpp:
2994         (JSC::CTI::emitCall):
2995         (JSC::CTI::compileOpCall):
2996         (JSC::CTI::privateCompileMainPass):
2997         (JSC::CTI::privateCompileSlowCases):
2998         (JSC::CTI::privateCompilePutByIdTransition):
2999         * VM/CTI.h:
3000         * masm/X86Assembler.h:
3001         * wtf/Platform.h:
3002
3003 2008-09-30  Maciej Stachowiak  <mjs@apple.com>
3004
3005         Reviewed by Oliver Hunt.
3006
3007         - track uses of "this", "with" and "catch" in the parser
3008         
3009         Knowing this up front will be useful for future optimizations.
3010         
3011         Perf and correctness remain the same.
3012         
3013         * kjs/NodeInfo.h:
3014         * kjs/grammar.y:
3015
3016 2008-09-30  Sam Weinig  <sam@webkit.org>
3017
3018         Reviewed by Mark Rowe.
3019
3020         Add WebKitAvailability macros for JSObjectMakeArray, JSObjectMakeDate, JSObjectMakeError,
3021         and JSObjectMakeRegExp
3022
3023         * API/JSObjectRef.h:
3024
3025 2008-09-30  Darin Adler  <darin@apple.com>
3026
3027         Reviewed by Geoff Garen.
3028
3029         - https://bugs.webkit.org/show_bug.cgi?id=21214
3030           work on getting rid of ExecState
3031
3032         Replaced the m_prev field of ExecState with a bit in the
3033         call frame pointer to indicate "host" call frames.
3034
3035         * VM/Machine.cpp:
3036         (JSC::makeHostCallFramePointer): Added. Sets low bit.
3037         (JSC::isHostCallFrame): Added. Checks low bit.
3038         (JSC::stripHostCallFrameBit): Added. Clears low bit.
3039         (JSC::Machine::unwindCallFrame): Replaced null check that was
3040         formerly used to detect host call frames with an isHostCallFrame check.
3041         (JSC::Machine::execute): Pass in a host call frame pointer rather than
3042         always passing 0 when starting execution from the host. This allows us
3043         to follow the entire call frame pointer chain when desired, or to stop
3044         at the host calls when that's desired.
3045         (JSC::Machine::privateExecute): Replaced null check that was
3046         formerly used to detect host call frames with an isHostCallFrame check.
3047         (JSC::Machine::retrieveCaller): Ditto.
3048         (JSC::Machine::retrieveLastCaller): Ditto.
3049         (JSC::Machine::callFrame): Removed the code to walk up m_prev pointers
3050         and replaced it with code that uses the caller pointer and uses the
3051         stripHostCallFrameBit function.
3052
3053         * kjs/ExecState.cpp: Removed m_prev.
3054         * kjs/ExecState.h: Ditto.
3055
3056 2008-09-30  Cameron Zwarich  <zwarich@apple.com>
3057
3058         Reviewed by Geoff Garen.
3059
3060         Move all detection of 'arguments' in a lexical scope to the parser, in
3061         preparation for fixing
3062
3063         Bug 21123: using "arguments" in a function should not force creation of an activation object
3064         <https://bugs.webkit.org/show_bug.cgi?id=21123>
3065
3066         * VM/CodeGenerator.cpp:
3067         (JSC::CodeGenerator::CodeGenerator):
3068         * kjs/NodeInfo.h:
3069         * kjs/grammar.y:
3070
3071 2008-09-30  Geoffrey Garen  <ggaren@apple.com>
3072
3073         Not reviewed.
3074
3075         * kjs/Shell.cpp:
3076         (runWithScripts): Fixed indentation.
3077
3078 2008-09-30  Mark Rowe  <mrowe@apple.com>
3079
3080         Rubber-stamped by Sam Weinig.
3081
3082         Build fix.  Move InternalFunction::classInfo implementation into the .cpp
3083         file to prevent the vtable for InternalFunction being generated as a weak symbol.
3084         Has no effect on SunSpider.
3085
3086         * kjs/InternalFunction.cpp:
3087         (JSC::InternalFunction::classInfo):
3088         * kjs/InternalFunction.h:
3089
3090 2008-09-29  Maciej Stachowiak  <mjs@apple.com>
3091
3092         Reviewed by Darin Adler.
3093         
3094         - optimize appending a number to a string
3095         https://bugs.webkit.org/show_bug.cgi?id=21203
3096         
3097         It's pretty common in real-world code (and on some of the v8
3098         benchmarks) to append a number to a string, so I made this one of
3099         the fast cases, and also added support to UString to do it
3100         directly without allocating a temporary UString.
3101         
3102         ~1% speedup on v8 benchmark.
3103
3104         * VM/Machine.cpp:
3105         (JSC::jsAddSlowCase): Make this NEVER_INLINE because somehow otherwise
3106         the change is a regression.
3107         (JSC::jsAdd): Handle number + string special case.
3108         (JSC::Machine::cti_op_add): Integrate much of the logic of jsAdd to
3109         avoid exception check in the str + str, num + num and str + num cases.
3110         * kjs/ustring.cpp:
3111         (JSC::expandedSize): Make this a non-member function, since it needs to be 
3112         called in non-member functions but not outside this file.
3113         (JSC::expandCapacity): Ditto.
3114         (JSC::UString::expandCapacity): Call the non-member version. 
3115         (JSC::createRep): Helper to make a rep from a char*.
3116         (JSC::UString::UString): Use above helper.
3117         (JSC::concatenate): Guts of concatenating constructor for cases where first
3118         item is a UString::Rep, and second is a UChar* and length, or a char*.
3119         (JSC::UString::append): Implement for cases where first item is a UString::Rep,
3120         and second is an int or double. Sadly duplicates logic of UString::from(int)
3121         and UString::from(double).
3122         * kjs/ustring.h:
3123
3124 2008-09-29  Darin Adler  <darin@apple.com>
3125
3126         Reviewed by Sam Weinig.
3127
3128         - https://bugs.webkit.org/show_bug.cgi?id=21214
3129           work on getting rid of ExecState
3130
3131         * JavaScriptCore.exp: Updated since JSGlobalObject::init
3132         no longer takes a parameter.
3133
3134         * VM/Machine.cpp:
3135         (JSC::Machine::execute): Removed m_registerFile argument
3136         for ExecState constructors.
3137
3138         * kjs/DebuggerCallFrame.cpp:
3139         (JSC::DebuggerCallFrame::evaluate): Removed globalThisValue
3140         argument for ExecState constructor.
3141
3142         * kjs/ExecState.cpp:
3143         (JSC::ExecState::ExecState): Removed globalThisValue and
3144         registerFile arguments to constructors.
3145
3146         * kjs/ExecState.h: Removed m_globalThisValue and
3147         m_registerFile data members.
3148
3149         * kjs/JSGlobalObject.cpp:
3150         (JSC::JSGlobalObject::init): Removed globalThisValue
3151         argument for ExecState constructor.
3152
3153         * kjs/JSGlobalObject.h:
3154         (JSC::JSGlobalObject::JSGlobalObject): Got rid of parameter
3155         for the init function.
3156
3157 2008-09-29  Geoffrey Garen  <ggaren@apple.com>
3158
3159         Rubber-stamped by Cameron Zwarich.
3160         
3161         Fixed https://bugs.webkit.org/show_bug.cgi?id=21225
3162         Machine::retrieveLastCaller should check for a NULL codeBlock
3163         
3164         In order to crash, you would need to call retrieveCaller in a situation
3165         where you had two host call frames in a row in the register file. I
3166         don't know how to make that happen, or if it's even possible, so I don't
3167         have a test case -- but better safe than sorry!
3168
3169         * VM/Machine.cpp:
3170         (JSC::Machine::retrieveLastCaller):
3171
3172 2008-09-29  Geoffrey Garen  <ggaren@apple.com>
3173
3174         Reviewed by Cameron Zwarich.
3175         
3176         Store the callee ScopeChain, not the caller ScopeChain, in the call frame
3177         header. Nix the "scopeChain" local variable and ExecState::m_scopeChain, and
3178         access the callee ScopeChain through the call frame header instead.
3179
3180         Profit: call + return are simpler, because they don't have to update the
3181         "scopeChain" local variable, or ExecState::m_scopeChain.
3182         
3183         Because CTI keeps "r" in a register, reading the callee ScopeChain relative
3184         to "r" can be very fast, in any cases we care to optimize.
3185
3186         0% speedup on empty function call benchmark. (5.5% speedup in bytecode.)
3187         0% speedup on SunSpider. (7.5% speedup on controlflow-recursive.)
3188         2% speedup on SunSpider --v8.
3189         2% speedup on v8 benchmark.
3190
3191         * VM/CTI.cpp: Changed scope chain access to read the scope chain from
3192         the call frame header. Sped up op_ret by changing it not to fuss with
3193         the "scopeChain" local variable or ExecState::m_scopeChain.
3194
3195         * VM/CTI.h: Updated CTI trampolines not to take a ScopeChainNode*
3196         argument, since that's stored in the call frame header now.
3197
3198         * VM/Machine.cpp: Access "scopeChain" and "codeBlock" through new helper
3199         functions that read from the call frame header. Updated functions operating
3200         on ExecState::m_callFrame to account for / take advantage of the fact that
3201         Exec:m_callFrame is now never NULL.
3202         
3203         Fixed a bug in op_construct, where it would use the caller's default
3204         object prototype, rather than the callee's, when constructing a new object.
3205
3206         * VM/Machine.h: Made some helper functions available. Removed
3207         ScopeChainNode* arguments to a lot of functions, since the ScopeChainNode*
3208         is now stored in the call frame header.
3209
3210         * VM/RegisterFile.h: Renamed "CallerScopeChain" to "ScopeChain", since
3211         that's what it is now.
3212
3213         * kjs/DebuggerCallFrame.cpp: Updated for change to ExecState signature.
3214
3215         * kjs/ExecState.cpp:
3216         * kjs/ExecState.h: Nixed ExecState::m_callFrame, along with the unused
3217         isGlobalObject function.
3218
3219         * kjs/JSGlobalObject.cpp:
3220         * kjs/JSGlobalObject.h: Gave the global object a fake call frame in
3221         which to store the global scope chain, since our code now assumes that
3222         it can always read the scope chain out of the ExecState's call frame.
3223
3224 2008-09-29  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
3225
3226         Reviewed by Sam Weinig.
3227
3228         Remove the isActivationObject() virtual method on JSObject and use
3229         StructureID information instead. This should be slightly faster, but
3230         isActivationObject() is only used in assertions and unwinding the stack
3231         for exceptions.
3232
3233         * VM/Machine.cpp:
3234         (JSC::depth):
3235         (JSC::Machine::unwindCallFrame):
3236         (JSC::Machine::privateExecute):
3237         (JSC::Machine::cti_op_ret_activation):
3238         * kjs/JSActivation.cpp:
3239         * kjs/JSActivation.h:
3240         * kjs/JSObject.h:
3241
3242 2008-09-29  Peter Gal  <galpeter@inf.u-szeged.hu>
3243
3244         Reviewed and tweaked by Darin Adler.
3245
3246         Fix build for non-all-in-one platforms.
3247
3248         * kjs/StringPrototype.cpp: Added missing ASCIICType.h include.
3249
3250 2008-09-29  Bradley T. Hughes  <bradley.hughes@nokia.com>
3251
3252         Reviewed by Simon Hausmann.
3253
3254         Fix compilation with icpc
3255
3256         * wtf/HashSet.h:
3257         (WTF::::find):
3258         (WTF::::contains):
3259
3260 2008-09-29  Thiago Macieira  <thiago.macieira@nokia.com>
3261
3262         Reviewed by Simon Hausmann.
3263
3264         Changed copyright from Trolltech ASA to Nokia.
3265         
3266         Nokia acquired Trolltech ASA, assets were transferred on September 26th 2008.
3267         
3268
3269         * wtf/qt/MainThreadQt.cpp:
3270
3271 2008-09-29  Simon Hausmann  <hausmann@webkit.org>
3272
3273         Reviewed by Lars Knoll.
3274
3275         Don't accidentially install libJavaScriptCore.a for the build inside
3276         Qt.
3277
3278         * JavaScriptCore.pro:
3279
3280 2008-09-28  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
3281
3282         Reviewed by Maciej Stachowiak.
3283
3284         Bug 21200: Allow direct access to 'arguments' without using op_resolve
3285         <https://bugs.webkit.org/show_bug.cgi?id=21200>
3286
3287         Allow fast access to the 'arguments' object by adding an extra slot to
3288         the callframe to store it.
3289
3290         This is a 3.0% speedup on the V8 Raytrace benchmark.
3291
3292         * JavaScriptCore.exp:
3293         * VM/CTI.cpp:
3294         (JSC::CTI::privateCompileMainPass):
3295         * VM/CodeBlock.cpp:
3296         (JSC::CodeBlock::dump):
3297         * VM/CodeGenerator.cpp:
3298         (JSC::CodeGenerator::CodeGenerator):
3299         (JSC::CodeGenerator::registerFor):
3300         * VM/CodeGenerator.h:
3301         (JSC::CodeGenerator::registerFor):
3302         * VM/Machine.cpp:
3303         (JSC::Machine::initializeCallFrame):
3304         (JSC::Machine::dumpRegisters):
3305         (JSC::Machine::privateExecute):
3306         (JSC::Machine::retrieveArguments):
3307         (JSC::Machine::cti_op_call_JSFunction):
3308         (JSC::Machine::cti_op_create_arguments):
3309         (JSC::Machine::cti_op_construct_JSConstruct):
3310         * VM/Machine.h:
3311         * VM/Opcode.h:
3312         * VM/RegisterFile.h:
3313         (JSC::RegisterFile::):
3314         * kjs/JSActivation.cpp:
3315         (JSC::JSActivation::mark):
3316         (JSC::JSActivation::argumentsGetter):
3317         * kjs/JSActivation.h:
3318         (JSC::JSActivation::JSActivationData::JSActivationData):
3319         * kjs/NodeInfo.h:
3320         * kjs/Parser.cpp:
3321         (JSC::Parser::didFinishParsing):
3322         * kjs/Parser.h:
3323         (JSC::Parser::parse):
3324         * kjs/grammar.y:
3325         * kjs/nodes.cpp:
3326         (JSC::ScopeNode::ScopeNode):
3327         (JSC::ProgramNode::ProgramNode):
3328         (JSC::ProgramNode::create):
3329         (JSC::EvalNode::EvalNode):
3330         (JSC::EvalNode::create):
3331         (JSC::FunctionBodyNode::FunctionBodyNode):
3332         (JSC::FunctionBodyNode::create):
3333         * kjs/nodes.h:
3334         (JSC::ScopeNode::usesArguments):
3335
3336 2008-09-28  Mark Rowe  <mrowe@apple.com>
3337
3338         Reviewed by Sam Weinig.
3339
3340         Add an ASCII fast-path to toLowerCase and toUpperCase.
3341
3342         The fast path speeds up the common case of an ASCII-only string by up to 60% while adding a less than 5% penalty
3343         to the less common non-ASCII case.
3344
3345         This also removes stringProtoFuncToLocaleLowerCase and stringProtoFuncToLocaleUpperCase, which were identical
3346         to the non-locale variants of the functions.  toLocaleLowerCase and toLocaleUpperCase now use the non-locale
3347         variants of the functions directly.
3348
3349         * kjs/StringPrototype.cpp:
3350         (JSC::stringProtoFuncToLowerCase):
3351         (JSC::stringProtoFuncToUpperCase):
3352
3353 2008-09-28  Mark Rowe  <mrowe@apple.com>
3354
3355         Reviewed by Cameron Zwarich.
3356
3357         Speed up parseInt and parseFloat.
3358
3359         Repeatedly indexing into a UString is slow, so retrieve a pointer into the underlying buffer once up front
3360         and use that instead.  This is a 7% win on a parseInt/parseFloat micro-benchmark.
3361
3362         * kjs/JSGlobalObjectFunctions.cpp:
3363         (JSC::parseInt):
3364         (JSC::parseFloat):
3365
3366 2008-09-28  Simon Hausmann  <hausmann@webkit.org>
3367
3368         Reviewed by David Hyatt.
3369
3370         In Qt's initializeThreading re-use an existing thread identifier for the main
3371         thread if it exists.
3372
3373         currentThread() implicitly creates new identifiers and it could be that
3374         it is called before initializeThreading().
3375
3376         * wtf/ThreadingQt.cpp:
3377         (WTF::initializeThreading):
3378
3379 2008-09-27  Keishi Hattori  <casey.hattori@gmail.com>
3380
3381         Added Machine::retrieveCaller to the export list.
3382
3383         Reviewed by Kevin McCullough and Tim Hatcher.
3384
3385         * JavaScriptCore.exp: Added Machine::retrieveCaller.
3386
3387 2008-09-27  Anders Carlsson  <andersca@apple.com>
3388
3389         Fix build.
3390
3391         * VM/CTI.cpp:
3392         (JSC::):
3393
3394 2008-09-27  Geoffrey Garen  <ggaren@apple.com>
3395
3396         Reviewed by Cameron Zwarich.
3397         
3398         https://bugs.webkit.org/show_bug.cgi?id=21175
3399
3400         Store the callee CodeBlock, not the caller CodeBlock, in the call frame
3401         header. Nix the "codeBlock" local variable, and access the callee
3402         CodeBlock through the call frame header instead.
3403         
3404         Profit: call + return are simpler, because they don't have to update the
3405         "codeBlock" local variable.
3406         
3407         Because CTI keeps "r" in a register, reading the callee CodeBlock relative
3408         to "r" can be very fast, in any cases we care to optimize. Presently,
3409         no such cases seem important.
3410         
3411         Also, stop writing "dst" to the call frame header. CTI doesn't use it.
3412         
3413         21.6% speedup on empty function call benchmark.
3414         3.8% speedup on SunSpider --v8.
3415         2.1% speedup on v8 benchmark.
3416         0.7% speedup on SunSpider (6% speedup on controlflow-recursive).
3417         
3418         Small regression in bytecode, because currently every op_ret reads the
3419         callee CodeBlock to check needsFullScopeChain, and bytecode does not
3420         keep "r" in a register. On-balance, this is probably OK, since CTI is
3421         our high-performance execution model. Also, this should go away once
3422         we make needsFullScopeChain statically determinable at parse time.
3423
3424         * VM/CTI.cpp:
3425         (JSC::CTI::compileOpCall): The speedup!
3426         (JSC::CTI::privateCompileSlowCases): ditto
3427
3428         * VM/CTI.h:
3429         (JSC::): Fixed up magic trampoline constants to account for the nixed
3430         "codeBlock" argument.
3431         (JSC::CTI::execute): Changed trampoline function not to take a "codeBlock"
3432         argument, since codeBlock is now stored in the call frame header.
3433         
3434         * VM/Machine.cpp: Read the callee CodeBlock from the register file. Use
3435         a NULL CallerRegisters in the call frame header to signal a built-in
3436         caller, since CodeBlock is now never NULL.
3437
3438         * VM/Machine.h: Made some stand-alone functions Machine member functions
3439         so they could call the private codeBlock() accessor in the Register
3440         class, of which Machine is a friend. Renamed "CallerCodeBlock" to
3441         "CodeBlock", since it's no longer the caller's CodeBlock.
3442
3443         * VM/RegisterFile.h: Marked some methods const to accommodate a 
3444         const RegisterFile* being passed around in Machine.cpp.
3445
3446 2008-09-26  Jan Michael Alonzo  <jmalonzo@webkit.org>
3447
3448         Gtk build fix. Not reviewed.
3449
3450         Narrow-down the target of the JavaScriptCore .lut.h generator so
3451         it won't try to create the WebCore .lut.hs.
3452
3453         * GNUmakefile.am:
3454
3455 2008-09-26  Matt Lilek  <webkit@mattlilek.com>
3456
3457         Reviewed by Tim Hatcher.
3458
3459         Update FEATURE_DEFINES after ENABLE_CROSS_DOCUMENT_MESSAGING was removed.
3460
3461         * Configurations/JavaScriptCore.xcconfig:
3462
3463 2008-09-26  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
3464
3465         Rubber-stamped by Anders Carlson.
3466
3467         Change the name 'sc' to 'scopeChainNode' in a few places.
3468
3469         * kjs/nodes.cpp:
3470         (JSC::EvalNode::generateCode):
3471         (JSC::FunctionBodyNode::generateCode):
3472         (JSC::ProgramNode::generateCode):
3473
3474 2008-09-26  Sam Weinig  <sam@webkit.org>
3475
3476         Reviewed by Darin Adler.
3477
3478         Patch for https://bugs.webkit.org/show_bug.cgi?id=21152
3479         Speedup static property get/put
3480
3481         Convert getting/setting static property values to use static functions
3482         instead of storing an integer and switching in getValueProperty/putValueProperty.
3483
3484         * kjs/JSObject.cpp:
3485         (JSC::JSObject::deleteProperty):
3486         (JSC::JSObject::getPropertyAttributes):
3487         * kjs/MathObject.cpp:
3488         (JSC::MathObject::getOwnPropertySlot):
3489         * kjs/NumberConstructor.cpp:
3490         (JSC::numberConstructorNaNValue):
3491         (JSC::numberConstructorNegInfinity):
3492         (JSC::numberConstructorPosInfinity):
3493         (JSC::numberConstructorMaxValue):
3494         (JSC::numberConstructorMinValue):
3495         * kjs/PropertySlot.h:
3496         (JSC::PropertySlot::):
3497         * kjs/RegExpConstructor.cpp:
3498         (JSC::regExpConstructorDollar1):
3499         (JSC::regExpConstructorDollar2):
3500         (JSC::regExpConstructorDollar3):
3501         (JSC::regExpConstructorDollar4):
3502         (JSC::regExpConstructorDollar5):
3503         (JSC::regExpConstructorDollar6):
3504         (JSC::regExpConstructorDollar7):
3505         (JSC::regExpConstructorDollar8):
3506         (JSC::regExpConstructorDollar9):
3507         (JSC::regExpConstructorInput):
3508         (JSC::regExpConstructorMultiline):
3509         (JSC::regExpConstructorLastMatch):
3510         (JSC::regExpConstructorLastParen):
3511         (JSC::regExpConstructorLeftContext):
3512         (JSC::regExpConstructorRightContext):
3513         (JSC::setRegExpConstructorInput):
3514         (JSC::setRegExpConstructorMultiline):
3515         (JSC::RegExpConstructor::setInput):
3516         (JSC::RegExpConstructor::setMultiline):
3517         (JSC::RegExpConstructor::multiline):
3518         * kjs/RegExpConstructor.h:
3519         * kjs/RegExpObject.cpp:
3520         (JSC::regExpObjectGlobal):
3521         (JSC::regExpObjectIgnoreCase):
3522         (JSC::regExpObjectMultiline):
3523         (JSC::regExpObjectSource):
3524         (JSC::regExpObjectLastIndex):
3525         (JSC::setRegExpObjectLastIndex):
3526         * kjs/RegExpObject.h:
3527         (JSC::RegExpObject::setLastIndex):
3528         (JSC::RegExpObject::lastIndex):
3529         (JSC::RegExpObject::RegExpObjectData::RegExpObjectData):
3530         * kjs/StructureID.cpp:
3531         (JSC::StructureID::getEnumerablePropertyNames):
3532         * kjs/create_hash_table:
3533         * kjs/lexer.cpp:
3534         (JSC::Lexer::lex):
3535         * kjs/lookup.cpp:
3536         (JSC::HashTable::createTable):
3537         (JSC::HashTable::deleteTable):
3538         (JSC::setUpStaticFunctionSlot):
3539         * kjs/lookup.h:
3540         (JSC::HashEntry::initialize):
3541         (JSC::HashEntry::setKey):
3542         (JSC::HashEntry::key):
3543         (JSC::HashEntry::attributes):
3544         (JSC::HashEntry::function):
3545         (JSC::HashEntry::functionLength):
3546         (JSC::HashEntry::propertyGetter):
3547         (JSC::HashEntry::propertyPutter):
3548         (JSC::HashEntry::lexerValue):
3549         (JSC::HashEntry::):
3550         (JSC::HashTable::entry):
3551         (JSC::getStaticPropertySlot):
3552         (JSC::getStaticValueSlot):
3553         (JSC::lookupPut):
3554
3555 2008-09-26  Gavin Barraclough  <barraclough@apple.com>
3556
3557         Reviewed by Maciej Stachowiak & Oliver Hunt.
3558
3559         Add support for reusing temporary JSNumberCells.  This change is based on the observation
3560         that if the result of certain operations is a JSNumberCell and is consumed by a subsequent
3561         operation that would produce a JSNumberCell, we can reuse the object rather than allocating
3562         a fresh one.  E.g. given the expression ((a * b) * c), we can statically determine that
3563         (a * b) will have a numeric result (or else it will have thrown an exception), so the result
3564         will either be a JSNumberCell or a JSImmediate.
3565
3566         This patch changes three areas of JSC:
3567             * The AST now tracks type information about the result of each node.
3568             * This information is consumed in bytecode compilation, and certain bytecode operations
3569               now carry the statically determined type information about their operands.
3570             * CTI uses the information in a number of fashions:
3571                 * Where an operand to certain arithmetic operations is reusable, it will plant code
3572                   to try to perform the operation in JIT code & reuse the cell, where appropriate.
3573                 * Where it can be statically determined that an operand can only be numeric (typically
3574                   the result of another arithmetic operation) the code will not redundantly check that
3575                   the JSCell is a JSNumberCell.
3576                 * Where either of the operands to an add are non-numeric do not plant an optimized
3577                   arithmetic code path, just call straight out to the C function.
3578
3579         +6% Sunspider (10% progression on 3D, 16% progression on math, 60% progression on access-nbody),
3580         +1% v8-tests (improvements in raytrace & crypto)
3581
3582         * VM/CTI.cpp: Add optimized code generation with reuse of temporary JSNumberCells.
3583         * VM/CTI.h:
3584         * kjs/JSNumberCell.h:
3585         * masm/X86Assembler.h:
3586
3587         * VM/CodeBlock.cpp: Add type information to specific bytecodes.
3588         * VM/CodeGenerator.cpp:
3589         * VM/CodeGenerator.h:
3590         * VM/Machine.cpp:
3591
3592         * kjs/nodes.cpp: Track static type information for nodes.
3593         * kjs/nodes.h:
3594         * kjs/ResultDescriptor.h: (Added)
3595         * JavaScriptCore.xcodeproj/project.pbxproj:
3596
3597 2008-09-26  Yichao Yin  <yichao.yin@torchmobile.com.cn>
3598
3599         Reviewed by George Staikos, Maciej Stachowiak.
3600
3601         Add utility functions needed for upcoming WML code.
3602
3603         * wtf/ASCIICType.h:
3604         (WTF::isASCIIPrintable):
3605
3606 2008-09-26  Geoffrey Garen  <ggaren@apple.com>
3607
3608         Reviewed by Darin Adler.
3609         
3610         Reverted the part of r36614 that used static data because static data
3611         is not thread-safe.
3612
3613 2008-09-26  Geoffrey Garen  <ggaren@apple.com>
3614
3615         Reviewed by Maciej Stachowiak.
3616         
3617         Removed dynamic check for whether the callee needs an activation object.
3618         Replaced with callee code to create the activation object.
3619
3620         0.5% speedup on SunSpider.
3621         No change on v8 benchmark. (Might be a speedup, but it's in range of the
3622         variance.)
3623
3624         0.7% speedup on v8 benchmark in bytecode.
3625         1.3% speedup on empty call benchmark in bytecode.
3626
3627         * VM/CTI.cpp:
3628         (JSC::CTI::privateCompileMainPass): Added support for op_init_activation,
3629         the new opcode that specifies that the callee's initialization should
3630         create an activation object.
3631         (JSC::CTI::privateCompile): Removed previous code that did a similar
3632         thing in an ad-hoc way.
3633
3634         * VM/CodeBlock.cpp:
3635         (JSC::CodeBlock::dump): Added a case for dumping op_init_activation.
3636
3637         * VM/CodeGenerator.cpp:
3638         (JSC::CodeGenerator::generate): Added fixup code to change op_init to
3639         op_init_activation if necessary. (With a better parser, we would know
3640         which to use from the beginning.)
3641
3642         * VM/Instruction.h:
3643         (JSC::Instruction::Instruction):
3644         (WTF::): Faster traits for the instruction vector. An earlier version
3645         of this patch relied on inserting at the beginning of the vector, and
3646         depended on this change for speed.
3647
3648         * VM/Machine.cpp:
3649         (JSC::Machine::execute): Removed clients of setScopeChain, the old
3650         abstraction for dynamically checking for whether an activation object
3651         needed to be created.
3652         (JSC::Machine::privateExecute): ditto
3653
3654         (JSC::Machine::cti_op_push_activation): Renamed this function from
3655         cti_vm_updateScopeChain, and made it faster by removing the call to 
3656         setScopeChain.
3657         * VM/Machine.h:
3658
3659         * VM/Opcode.h: Declared op_init_activation.
3660
3661 2008-09-24  Geoffrey Garen  <ggaren@apple.com>
3662
3663         Reviewed by Maciej Stachowiak.
3664         
3665         Move most of the return code back into the callee, now that the callee
3666         doesn't have to calculate anything dynamically.
3667         
3668         11.5% speedup on empty function call benchmark.
3669         
3670         SunSpider says 0.3% faster. SunSpider --v8 says no change.
3671
3672         * VM/CTI.cpp:
3673         (JSC::CTI::compileOpCall):
3674         (JSC::CTI::privateCompileMainPass):
3675         (JSC::CTI::privateCompileSlowCases):
3676
3677 2008-09-24  Sam Weinig  <sam@webkit.org>
3678
3679         Reviewed by Maciej Stachowiak.
3680
3681         Remove staticFunctionGetter.  There is only one remaining user of
3682         staticFunctionGetter and it can be converted to use setUpStaticFunctionSlot.
3683
3684         * JavaScriptCore.exp:
3685         * kjs/lookup.cpp:
3686         * kjs/lookup.h:
3687
3688 2008-09-24  Maciej Stachowiak  <mjs@apple.com>
3689
3690         Reviewed by Oliver Hunt.
3691         
3692         - inline JIT fast case of op_neq
3693         - remove extra level of function call indirection from slow cases of eq and neq
3694         
3695         1% speedup on Richards
3696
3697         * VM/CTI.cpp:
3698         (JSC::CTI::privateCompileMainPass):
3699         (JSC::CTI::privateCompileSlowCases):
3700         * VM/Machine.cpp:
3701         (JSC::Machine::privateExecute):
3702         (JSC::Machine::cti_op_eq):
3703         (JSC::Machine::cti_op_neq):
3704         * kjs/operations.cpp:
3705         (JSC::equal):
3706         (JSC::equalSlowCase):
3707         * kjs/operations.h:
3708         (JSC::equalSlowCaseInline):
3709
3710 2008-09-24  Sam Weinig  <sam@webkit.org>
3711
3712         Reviewed by Darin Adler.
3713
3714         Fix for https://bugs.webkit.org/show_bug.cgi?id=21080
3715         <rdar://problem/6243534>
3716         Crash below Function.apply when using a runtime array as the argument list
3717
3718         Test: plugins/bindings-array-apply-crash.html
3719
3720         * kjs/FunctionPrototype.cpp:
3721         (JSC::functionProtoFuncApply): Revert to the slow case if the object inherits from 
3722         JSArray (via ClassInfo) but is not a JSArray.
3723
3724 2008-09-24  Kevin McCullough  <kmccullough@apple.com>
3725
3726         Style change.
3727
3728         * kjs/nodes.cpp:
3729         (JSC::statementListEmitCode):
3730
3731 2008-09-24  Kevin McCullough  <kmccullough@apple.com>
3732
3733         Reviewed by Geoff.
3734
3735         Bug 21031: Breakpoints in the condition of loops only breaks the first
3736         time
3737         - Now when setting breakpoints in the condition of a loop (for, while,
3738         for in, and do while) will successfully break each time throught the
3739         loop.
3740         - For 'for' loops we need a little more complicated behavior that cannot
3741         be accomplished without some more significant changes:
3742         https://bugs.webkit.org/show_bug.cgi?id=21073
3743
3744         * kjs/nodes.cpp:
3745         (JSC::statementListEmitCode): We don't want to blindly emit a debug hook
3746         at the first line of loops, instead let the loop emit the debug hooks.
3747         (JSC::DoWhileNode::emitCode):
3748         (JSC::WhileNode::emitCode):
3749         (JSC::ForNode::emitCode):
3750         (JSC::ForInNode::emitCode):
3751         * kjs/nodes.h:
3752         (JSC::StatementNode::):
3753         (JSC::DoWhileNode::):
3754         (JSC::WhileNode::):
3755         (JSC::ForInNode::):
3756
3757 2008-09-24  Geoffrey Garen  <ggaren@apple.com>
3758
3759         Reviewed by Darin Adler.
3760         
3761         Fixed <rdar://problem/5605532> Need a SPI for telling JS the size of
3762         the objects it retains
3763
3764         * API/tests/testapi.c: Test the new SPI a little.
3765
3766         * API/JSSPI.cpp: Add the new SPI.
3767         * API/JSSPI.h: Add the new SPI.
3768         * JavaScriptCore.exp: Add the new SPI.
3769         * JavaScriptCore.xcodeproj/project.pbxproj: Add the new SPI.
3770
3771 2008-09-24  Geoffrey Garen  <ggaren@apple.com>
3772
3773         Reviewed by Darin Adler.
3774
3775         * API/JSBase.h: Filled in some missing function names.
3776
3777 2008-09-24  Geoffrey Garen  <ggaren@apple.com>
3778
3779         Reviewed by Cameron Zwarich.
3780         
3781         Fixed https://bugs.webkit.org/show_bug.cgi?id=21057
3782         Crash in RegisterID::deref() running fast/canvas/canvas-putImageData.html
3783
3784         * VM/CodeGenerator.h: Changed declaration order to ensure the
3785         m_lastConstant, which is a RefPtr that points into m_calleeRegisters,
3786         has its destructor called before the destructor for m_calleeRegisters.
3787
3788 2008-09-24  Darin Adler  <darin@apple.com>
3789
3790         Reviewed by Sam Weinig.
3791
3792         - https://bugs.webkit.org/show_bug.cgi?id=21047
3793           speed up ret_activation with inlining
3794
3795         About 1% on v8-raytrace.
3796
3797         * JavaScriptCore.exp: Removed JSVariableObject::setRegisters.
3798
3799         * kjs/JSActivation.cpp: Moved copyRegisters to the header to make it inline.
3800         * kjs/JSActivation.h:
3801         (JSC::JSActivation::copyRegisters): Moved here. Also removed the registerArraySize
3802         argument to setRegisters, since the object doesn't need to store the number of
3803         registers.
3804
3805         * kjs/JSGlobalObject.cpp:
3806         (JSC::JSGlobalObject::reset): Removed unnecessary clearing left over from when we
3807         used this on objects that weren't brand new. These days, this function is really
3808         just part of the constructor.
3809
3810         * kjs/JSGlobalObject.h: Added registerArraySize to JSGlobalObjectData, since
3811         JSVariableObjectData no longer needs it. Added a setRegisters override here
3812         that handles storing the size.
3813
3814         * kjs/JSStaticScopeObject.h: Removed code to set registerArraySize, since it
3815         no longer exists.
3816
3817         * kjs/JSVariableObject.cpp: Moved copyRegisterArray and setRegisters to the
3818         header to make them inline.
3819         * kjs/JSVariableObject.h: Removed registerArraySize from JSVariableObjectData,
3820         since it was only used for the global object.
3821         (JSC::JSVariableObject::copyRegisterArray): Moved here ot make it inline.
3822         (JSC::JSVariableObject::setRegisters): Moved here to make it inline. Also
3823         removed the code to set registerArraySize and changed an if statement into
3824         an assert to save an unnnecessary branch.
3825
3826 2008-09-24  Maciej Stachowiak  <mjs@apple.com>
3827
3828         Reviewed by Oliver Hunt.
3829         
3830         - inline PropertyMap::getOffset to speed up polymorphic lookups
3831         
3832         ~1.5% speedup on v8 benchmark
3833         no effect on SunSpider
3834
3835         * JavaScriptCore.exp:
3836         * kjs/PropertyMap.cpp:
3837         * kjs/PropertyMap.h:
3838         (JSC::PropertyMap::getOffset):
3839
3840 2008-09-24  Jan Michael Alonzo  <jmalonzo@webkit.org>
3841
3842         Reviewed by Alp Toker.
3843
3844         https://bugs.webkit.org/show_bug.cgi?id=20992
3845         Build fails on GTK+ Mac OS
3846
3847         * wtf/ThreadingGtk.cpp: Remove platform ifdef as suggested by
3848           Richard Hult.
3849         (WTF::initializeThreading):
3850
3851 2008-09-23  Oliver Hunt  <oliver@apple.com>
3852
3853         Reviewed by Maciej Stachowiak.
3854
3855         Bug 19968: Slow Script at www.huffingtonpost.com
3856         <https://bugs.webkit.org/show_bug.cgi?id=19968>
3857
3858         Finally found the cause of this accursed issue.  It is triggered
3859         by synchronous creation of a new global object from JS.  The new
3860         global object resets the timer state in this execution group's
3861         Machine, taking timerCheckCount to 0.  Then when JS returns the
3862         timerCheckCount is decremented making it non-zero.  The next time
3863         we execute JS we will start the timeout counter, however the non-zero
3864         timeoutCheckCount means we don't reset the timer information. This
3865         means that the timeout check is now checking the cumulative time
3866         since the creation of the global object rather than the time since
3867         JS was last entered.  At this point the slow script dialog is guaranteed
3868         to eventually be displayed incorrectly unless a page is loaded
3869         asynchronously (which will reset everything into a sane state).
3870
3871         The fix for this is rather trivial -- the JSGlobalObject constructor
3872         should not be resetting the machine timer state.
3873
3874         * VM/Machine.cpp:
3875         (JSC::Machine::Machine):
3876           Now that we can't rely on the GlobalObject initialising the timeout
3877           state, we do it in the Machine constructor.
3878
3879         * VM/Machine.h:
3880         (JSC::Machine::stopTimeoutCheck):
3881           Add assertions to guard against this happening.
3882
3883         * kjs/JSGlobalObject.cpp:
3884         (JSC::JSGlobalObject::init):
3885           Don't reset the timeout state.
3886
3887 2008-09-23  Geoffrey Garen  <ggaren@apple.com>
3888
3889         Reviewed by Oliver Hunt.
3890         
3891         Fixed https://bugs.webkit.org/show_bug.cgi?id=21038 | <rdar://problem/6240812>
3892         Uncaught exceptions in regex replace callbacks crash webkit
3893         
3894         This was a combination of two problems:
3895         
3896         (1) the replace function would continue execution after an exception
3897         had been thrown.
3898         
3899         (2) In some cases, the Machine would return 0 in the case of an exception,
3900         despite the fact that a few clients dereference the Machine's return
3901         value without first checking for an exception.
3902         
3903         * VM/Machine.cpp:
3904         (JSC::Machine::execute):
3905         
3906         ^ Return jsNull() instead of 0 in the case of an exception, since some
3907         clients depend on using our return value.
3908         
3909         ^ ASSERT that execution does not continue after an exception has been
3910         thrown, to help catch problems like this in the future.
3911
3912         * kjs/StringPrototype.cpp:
3913         (JSC::stringProtoFuncReplace):
3914         
3915         ^ Stop execution if an exception has been thrown.
3916
3917 2008-09-23  Geoffrey Garen  <ggaren@apple.com>
3918
3919         Try to fix the windows build.
3920
3921         * VM/CTI.cpp:
3922         (JSC::CTI::compileOpCall):
3923         (JSC::CTI::privateCompileMainPass):
3924
3925 2008-09-23  Alp Toker  <alp@nuanti.com>
3926
3927         Build fix.
3928
3929         * VM/CTI.h:
3930
3931 2008-09-23  Geoffrey Garen  <ggaren@apple.com>
3932
3933         Reviewed by Darin Adler.
3934
3935         * wtf/Platform.h: Removed duplicate #if.
3936
3937 2008-09-23  Geoffrey Garen  <ggaren@apple.com>
3938
3939         Reviewed by Darin Adler.
3940         
3941         Changed the layout of the call frame from
3942         
3943         { header, parameters, locals | constants, temporaries }
3944         
3945         to
3946         
3947         { parameters, header | locals, constants, temporaries }
3948         
3949         This simplifies function entry+exit, and enables a number of future
3950         optimizations.
3951         
3952         13.5% speedup on empty call benchmark for bytecode; 23.6% speedup on
3953         empty call benchmark for CTI.
3954         
3955         SunSpider says no change. SunSpider --v8 says 1% faster.
3956
3957         * VM/CTI.cpp:
3958         
3959         Added a bit of abstraction for calculating whether a register is a
3960         constant, since this patch changes that calculation:
3961         (JSC::CTI::isConstant):
3962         (JSC::CTI::getConstant):
3963         (JSC::CTI::emitGetArg):
3964         (JSC::CTI::emitGetPutArg):
3965         (JSC::CTI::getConstantImmediateNumericArg):
3966
3967         Updated for changes to callframe header location:
3968         (JSC::CTI::emitPutToCallFrameHeader):
3969         (JSC::CTI::emitGetFromCallFrameHeader):
3970         (JSC::CTI::printOpcodeOperandTypes):
3971         
3972         Renamed to spite Oliver:
3973         (JSC::CTI::emitInitRegister):
3974         
3975         Added an abstraction for emitting a call through a register, so that
3976         calls through registers generate exception info, too:
3977         (JSC::CTI::emitCall):
3978
3979         Updated to match the new callframe header layout, and to support calls
3980         through registers, which have no destination address:
3981         (JSC::CTI::compileOpCall):
3982         (JSC::CTI::privateCompileMainPass):
3983         (JSC::CTI::privateCompileSlowCases):
3984         (JSC::CTI::privateCompile):
3985
3986         * VM/CTI.h:
3987
3988         More of the above:
3989         (JSC::CallRecord::CallRecord):
3990
3991         * VM/CodeBlock.cpp:
3992
3993         Updated for new register layout:
3994         (JSC::registerName):
3995         (JSC::CodeBlock::dump):
3996
3997         * VM/CodeBlock.h:
3998         
3999         Updated CodeBlock to track slightly different information about the
4000         register frame, and tweaked the style of an ASSERT_NOT_REACHED.
4001         (JSC::CodeBlock::CodeBlock):
4002         (JSC::CodeBlock::getStubInfo):
4003
4004         * VM/CodeGenerator.cpp:
4005         
4006         Added some abstraction around constant register allocation, since this
4007         patch changes it, changed codegen to account for the new callframe
4008         layout, and added abstraction around register fetching code
4009         that used to assume that all local registers lived at negative indices,
4010         since vars now live at positive indices:
4011         (JSC::CodeGenerator::generate):
4012         (JSC::CodeGenerator::addVar):
4013         (JSC::CodeGenerator::addGlobalVar):
4014         (JSC::CodeGenerator::allocateConstants):
4015         (JSC::CodeGenerator::CodeGenerator):
4016         (JSC::CodeGenerator::addParameter):
4017         (JSC::CodeGenerator::registerFor):
4018         (JSC::CodeGenerator::constRegisterFor):
4019         (JSC::CodeGenerator::newRegister):
4020         (JSC::CodeGenerator::newTemporary):
4021         (JSC::CodeGenerator::highestUsedRegister):
4022         (JSC::CodeGenerator::addConstant):
4023         
4024         ASSERT that our caller referenced the registers it passed to us.
4025         Otherwise, we might overwrite them with parameters:
4026         (JSC::CodeGenerator::emitCall):
4027         (JSC::CodeGenerator::emitConstruct):
4028
4029         * VM/CodeGenerator.h:
4030         
4031         Added some abstraction for getting a RegisterID for a given index,
4032         since the rules are a little weird:
4033         (JSC::CodeGenerator::registerFor):
4034
4035         * VM/Machine.cpp:
4036
4037         Utility function to transform a machine return PC to a virtual machine
4038         return VPC, for the sake of stack unwinding, since both PCs are stored
4039         in the same location now:
4040         (JSC::vPCForPC):
4041
4042         Tweaked to account for new call frame:
4043         (JSC::Machine::initializeCallFrame):
4044         
4045         Tweaked to account for registerOffset supplied by caller:
4046         (JSC::slideRegisterWindowForCall):
4047
4048         Tweaked to account for new register layout:
4049         (JSC::scopeChainForCall):
4050         (JSC::Machine::callEval):
4051         (JSC::Machine::dumpRegisters):
4052         (JSC::Machine::unwindCallFrame):
4053         (JSC::Machine::execute):
4054
4055         Changed op_call and op_construct to implement the new calling convention:
4056         (JSC::Machine::privateExecute):
4057
4058         Tweaked to account for the new register layout:
4059         (JSC::Machine::retrieveArguments):
4060         (JSC::Machine::retrieveCaller):
4061         (JSC::Machine::retrieveLastCaller):
4062         (JSC::Machine::callFrame):
4063         (JSC::Machine::getArgumentsData):
4064
4065         Changed CTI call helpers to implement the new calling convention:
4066         (JSC::Machine::cti_op_call_JSFunction):
4067         (JSC::Machine::cti_op_call_NotJSFunction):
4068         (JSC::Machine::cti_op_ret_activation):
4069         (JSC::Machine::cti_op_ret_profiler):
4070         (JSC::Machine::cti_op_construct_JSConstruct):
4071         (JSC::Machine::cti_op_construct_NotJSConstruct):
4072         (JSC::Machine::cti_op_call_eval):
4073
4074         * VM/Machine.h:
4075
4076         * VM/Opcode.h:
4077         
4078         Renamed op_initialise_locals to op_init, because this opcode
4079         doesn't initialize all locals, and it doesn't initialize only locals.
4080         Also, to spite Oliver.
4081         
4082         * VM/RegisterFile.h:
4083         
4084         New call frame enumeration values:
4085         (JSC::RegisterFile::):
4086
4087         Simplified the calculation of whether a RegisterID is a temporary,
4088         since we can no longer assume that all positive non-constant registers
4089         are temporaries:
4090         * VM/RegisterID.h:
4091         (JSC::RegisterID::RegisterID):
4092         (JSC::RegisterID::setTemporary):
4093         (JSC::RegisterID::isTemporary):
4094
4095         Renamed firstArgumentIndex to firstParameterIndex because the assumption
4096         that this variable pertained to the actual arguments supplied by the
4097         caller caused me to write some buggy code:
4098         * kjs/Arguments.cpp:
4099         (JSC::ArgumentsData::ArgumentsData):
4100         (JSC::Arguments::Arguments):
4101         (JSC::Arguments::fillArgList):
4102         (JSC::Arguments::getOwnPropertySlot):
4103         (JSC::Arguments::put):
4104
4105         Updated for new call frame layout:
4106         * kjs/DebuggerCallFrame.cpp:
4107         (JSC::DebuggerCallFrame::functionName):
4108         (JSC::DebuggerCallFrame::type):
4109         * kjs/DebuggerCallFrame.h:
4110
4111         Changed the activation object to account for the fact that a call frame
4112         header now sits between parameters and local variables. This change
4113         requires all variable objects to do their own marking, since they
4114         now use their register storage differently:
4115         * kjs/JSActivation.cpp:
4116         (JSC::JSActivation::mark):
4117         (JSC::JSActivation::copyRegisters):
4118         (JSC::JSActivation::createArgumentsObject):
4119         * kjs/JSActivation.h:
4120
4121         Updated global object to use the new interfaces required by the change
4122         to JSActivation above:
4123         * kjs/JSGlobalObject.cpp:
4124         (JSC::JSGlobalObject::reset):
4125         (JSC::JSGlobalObject::mark):
4126         (JSC::JSGlobalObject::copyGlobalsFrom):
4127         (JSC::JSGlobalObject::copyGlobalsTo):
4128         * kjs/JSGlobalObject.h:
4129         (JSC::JSGlobalObject::addStaticGlobals):
4130
4131         Updated static scope object to use the new interfaces required by the 
4132         change to JSActivation above:
4133         * kjs/JSStaticScopeObject.cpp:
4134         (JSC::JSStaticScopeObject::mark):
4135         (JSC::JSStaticScopeObject::~JSStaticScopeObject):
4136         * kjs/JSStaticScopeObject.h:
4137         (JSC::JSStaticScopeObject::JSStaticScopeObject):
4138         (JSC::JSStaticScopeObject::d):
4139
4140         Updated variable object to use the new interfaces required by the 
4141         change to JSActivation above:
4142         * kjs/JSVariableObject.cpp:
4143         (JSC::JSVariableObject::copyRegisterArray):
4144         (JSC::JSVariableObject::setRegisters):
4145         * kjs/JSVariableObject.h:
4146
4147         Changed the bit twiddling in symbol table not to assume that all indices
4148         are negative, since they can be positive now:
4149         * kjs/SymbolTable.h:
4150         (JSC::SymbolTableEntry::SymbolTableEntry):
4151         (JSC::SymbolTableEntry::isNull):
4152         (JSC::SymbolTableEntry::getIndex):
4153         (JSC::SymbolTableEntry::getAttributes):
4154         (JSC::SymbolTableEntry::setAttributes):
4155         (JSC::SymbolTableEntry::isReadOnly):
4156         (JSC::SymbolTableEntry::pack):
4157         (JSC::SymbolTableEntry::isValidIndex):
4158
4159         Changed call and construct nodes to ref their functions and/or bases,
4160         so that emitCall/emitConstruct doesn't overwrite them with parameters.
4161         Also, updated for rename to registerFor:
4162         * kjs/nodes.cpp:
4163         (JSC::ResolveNode::emitCode):
4164         (JSC::NewExprNode::emitCode):
4165         (JSC::EvalFunctionCallNode::emitCode):
4166         (JSC::FunctionCallValueNode::emitCode):
4167         (JSC::FunctionCallResolveNode::emitCode):
4168         (JSC::FunctionCallBracketNode::emitCode):
4169         (JSC::FunctionCallDotNode::emitCode):
4170         (JSC::PostfixResolveNode::emitCode):
4171         (JSC::DeleteResolveNode::emitCode):
4172         (JSC::TypeOfResolveNode::emitCode):
4173         (JSC::PrefixResolveNode::emitCode):
4174         (JSC::ReadModifyResolveNode::emitCode):
4175         (JSC::AssignResolveNode::emitCode):
4176         (JSC::ConstDeclNode::emitCodeSingle):
4177         (JSC::ForInNode::emitCode):
4178
4179         Added abstraction for getting exception info out of a call through a
4180         register:
4181         * masm/X86Assembler.h:
4182         (JSC::X86Assembler::emitCall):
4183         
4184         Removed duplicate #if:
4185         * wtf/Platform.h:
4186
4187 2008-09-23  Kevin McCullough  <kmccullough@apple.com>
4188
4189         Reviewed by Darin.
4190
4191         Bug 21030: The JS debugger breaks on the do of a do-while not the while
4192         (where the conditional statement is)
4193         https://bugs.webkit.org/show_bug.cgi?id=21030
4194         Now the statementListEmitCode detects if a do-while node is being
4195         emited and emits the debug hook on the last line instead of the first.
4196
4197         This change had no effect on sunspider.
4198
4199         * kjs/nodes.cpp:
4200         (JSC::statementListEmitCode):
4201         * kjs/nodes.h:
4202         (JSC::StatementNode::isDoWhile):
4203         (JSC::DoWhileNode::isDoWhile):
4204
4205 2008-09-23  Maciej Stachowiak  <mjs@apple.com>
4206
4207         Reviewed by Camron Zwarich.
4208
4209         - inline the fast case of instanceof
4210         https://bugs.webkit.org/show_bug.cgi?id=20818
4211
4212         ~2% speedup on EarleyBoyer test.
4213         
4214         * VM/CTI.cpp:
4215         (JSC::CTI::privateCompileMainPass):
4216         (JSC::CTI::privateCompileSlowCases):
4217         * VM/Machine.cpp:
4218         (JSC::Machine::cti_op_instanceof):
4219
4220 2008-09-23  Maciej Stachowiak  <mjs@apple.com>
4221
4222         Reviewed by Cameron Zwarich.
4223         
4224         - add forgotten slow case logic for !==
4225
4226         * VM/CTI.cpp:
4227         (JSC::CTI::privateCompileSlowCases):
4228