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