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