748bbbb1aaa20bf4a11b2c8fcb89fb4e99f62b05
[WebKit-https.git] / JavaScriptCore / ChangeLog
1 2008-06-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2
3         Reviewed by Dan Bernstein.
4
5         Bug 17928: testkjs shouldn't require "-f"
6         <https://bugs.webkit.org/show_bug.cgi?id=17928>
7
8         * kjs/testkjs.cpp:
9         (printUsageStatement):
10         (parseArguments):
11
12 2008-06-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
13
14         Reviewed by Eric.
15
16         Bug 17548: JavaScriptCore print(a, b) differs from Spidermonkey Behavior
17         <https://bugs.webkit.org/show_bug.cgi?id=17548>
18
19         * kjs/testkjs.cpp:
20         (functionPrint):
21
22 2008-06-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
23
24         Reviewed by Sam.
25
26         Bug 17547: JavaScriptCore print() differs from Spidermonkey Behavior
27         <https://bugs.webkit.org/show_bug.cgi?id=17547>
28
29         * kjs/testkjs.cpp:
30         (functionPrint):
31
32 2008-06-07  Alexey Proskuryakov  <ap@webkit.org>
33
34         More build fixes.
35
36         * kjs/JSGlobalData.cpp: Fixed an included file name for case-sensitive file systems, fixed
37         JSGlobalData::threadInstance() for non-multithreaded builds.
38
39 2008-06-07  Alexey Proskuryakov  <ap@webkit.org>
40
41         Build fix - actually adding JSGlobalData.cpp to non-Mac builds!
42
43         * GNUmakefile.am:
44         * JavaScriptCore.pri:
45         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
46         * JavaScriptCoreSources.bkl:
47
48 2008-06-07  Alexey Proskuryakov  <ap@webkit.org>
49
50         Try to fix Gtk/gcc 4.3 build.
51
52         * kjs/JSGlobalData.h: Include ustring.h instead of forward-declaring UString::Rep.
53
54 2008-06-06  Alexey Proskuryakov  <ap@webkit.org>
55
56         Reviewed by Darin.
57
58         Combine per-thread objects into one, to make it easier to support legacy clients (for
59         which they shouldn't be really per-thread).
60
61         No change on SunSpider total.
62
63         * JavaScriptCore.xcodeproj/project.pbxproj: Added JSGlobalData.{h,cpp}
64
65         * kjs/JSGlobalData.cpp: Added.
66         (KJS::JSGlobalData::JSGlobalData):
67         (KJS::JSGlobalData::~JSGlobalData):
68         (KJS::JSGlobalData::threadInstance):
69         * kjs/JSGlobalData.h: Added.
70         This class encapsulates all data that should be per-thread (or shared between legacy clients).
71         It will also keep a Heap pointer, but right now, Heap (Collector) methods are all static.
72
73         * kjs/identifier.h:
74         (KJS::Identifier::Identifier):
75         Added a constructor explicitly taking JSGlobalData to access IdentifierTable. Actually,
76         all of them should, but this will be a separate patch.
77
78         * kjs/identifier.cpp:
79         (KJS::IdentifierTable::literalTable):
80         (KJS::createIdentifierTable):
81         (KJS::deleteIdentifierTable):
82         (KJS::Identifier::add):
83         (KJS::Identifier::addSlowCase):
84         Combined IdentifierTable and LiteralIdentifierTable into a single class for simplicity.
85
86         * kjs/grammar.y: kjsyyparse now takes JSGlobalData, not just a Lexer.
87
88         * kjs/nodes.cpp:
89         (KJS::Node::Node):
90         (KJS::EvalFunctionCallNode::emitCode):
91         (KJS::ScopeNode::ScopeNode):
92         Changed to access Lexer and Parser via JSGlobalData::threadInstance(). This is also a
93         temporary measure, they will need to use JSGlobalData explicitly.
94
95         * VM/CodeGenerator.cpp:
96         (KJS::CodeGenerator::CodeGenerator):
97         * VM/CodeGenerator.h:
98         * VM/Machine.cpp:
99         (KJS::callEval):
100         * kjs/CommonIdentifiers.cpp:
101         (KJS::CommonIdentifiers::CommonIdentifiers):
102         * kjs/CommonIdentifiers.h:
103         * kjs/DebuggerCallFrame.cpp:
104         (KJS::DebuggerCallFrame::evaluate):
105         * kjs/ExecState.cpp:
106         (KJS::ExecState::ExecState):
107         * kjs/ExecState.h:
108         (KJS::ExecState::globalData):
109         (KJS::ExecState::identifierTable):
110         (KJS::ExecState::propertyNames):
111         (KJS::ExecState::emptyList):
112         (KJS::ExecState::lexer):
113         (KJS::ExecState::parser):
114         (KJS::ExecState::arrayTable):
115         (KJS::ExecState::dateTable):
116         (KJS::ExecState::mathTable):
117         (KJS::ExecState::numberTable):
118         (KJS::ExecState::RegExpImpTable):
119         (KJS::ExecState::RegExpObjectImpTable):
120         (KJS::ExecState::stringTable):
121         * kjs/InitializeThreading.cpp:
122         (KJS::initializeThreadingOnce):
123         * kjs/JSGlobalObject.cpp:
124         (KJS::JSGlobalObject::init):
125         * kjs/JSGlobalObject.h:
126         (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
127         (KJS::JSGlobalObject::head):
128         (KJS::JSGlobalObject::globalData):
129         * kjs/Parser.cpp:
130         (KJS::Parser::parse):
131         * kjs/Parser.h:
132         * kjs/function.cpp:
133         (KJS::FunctionImp::getParameterName):
134         (KJS::IndexToNameMap::unMap):
135         (KJS::globalFuncEval):
136         * kjs/function_object.cpp:
137         (KJS::FunctionObjectImp::construct):
138         * kjs/interpreter.cpp:
139         (KJS::Interpreter::checkSyntax):
140         (KJS::Interpreter::evaluate):
141         * kjs/lexer.cpp:
142         (kjsyylex):
143         * kjs/lexer.h:
144         * kjs/testkjs.cpp:
145         (prettyPrintScript):
146         Updated for the above changes. Most of threadInstance uses here will need to be replaced with
147         explicitly passed pointers to support legacy JSC clients.
148
149         * JavaScriptCore.exp: Removed KJS::parser().
150
151 2008-06-06  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
152
153         Reviewed by Oliver.
154
155         Bug 19424: Add support for logging opcode pair counts
156         <https://bugs.webkit.org/show_bug.cgi?id=19424>
157
158         * VM/Machine.cpp:
159         (KJS::Machine::privateExecute):
160         * VM/Opcode.cpp:
161         (KJS::OpcodeStats::OpcodeStats):
162         (KJS::compareOpcodeIndices):
163         (KJS::compareOpcodePairIndices):
164         (KJS::OpcodeStats::~OpcodeStats):
165         (KJS::OpcodeStats::recordInstruction):
166         (KJS::OpcodeStats::resetLastInstruction):
167         * VM/Opcode.h:
168
169 2008-06-06  Kevin McCullough  <kmccullough@apple.com>
170
171         Reviewed by Adam.
172
173         <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the
174         profiler.
175         - Change the remaining functions that do not take arguments, from using
176         recursion to using iteration.
177
178         * JavaScriptCore.exp:
179         * profiler/Profile.cpp:
180         (KJS::stopProfiling):
181         (KJS::restoreAll):
182         (KJS::Profile::stopProfiling): Use foreach instead of recursion.
183         (KJS::Profile::restoreAll): Ditto.
184         * profiler/Profile.h:
185         * profiler/ProfileNode.cpp: Remove recursion.
186         (KJS::ProfileNode::stopProfiling):
187         (KJS::ProfileNode::restore):
188         * profiler/ProfileNode.h:
189
190 2008-06-05  Oliver Hunt  <oliver@apple.com>
191
192         Reviewed by Alexey.
193
194         Fix Greater and GreaterEq nodes to emit code for the left
195         and right sub-expressions in the correct order.
196
197         * kjs/nodes.cpp:
198         (KJS::GreaterNode::emitCode):
199         (KJS::GreaterEqNode::emitCode):
200
201 2008-06-05  Antti Koivisto  <antti@apple.com>
202
203         Reviewed by Alp Toker.
204         
205         Fix whitespaces.
206
207         * kjs/collector.cpp:
208         (KJS::getPlatformThreadRegisters):
209
210 2008-06-05  Antti Koivisto  <antti@apple.com>
211
212         Reviewed by Darin.
213         
214         Support compiling JavaScriptCore for ARM.
215
216         * kjs/collector.cpp:
217         (KJS::getPlatformThreadRegisters):
218         (KJS::otherThreadStackPointer):
219
220 2008-06-05  Kevin McCullough  <kmccullough@apple.com>
221
222         Reviewed by Jon.
223
224         - Name changes.
225
226         * JavaScriptCore.exp:
227         * profiler/Profile.cpp:
228         (KJS::Profile::Profile):
229         (KJS::Profile::stopProfiling):
230         (KJS::Profile::didExecute):
231         (KJS::Profile::forEach):
232         (KJS::Profile::debugPrintData):
233         (KJS::Profile::debugPrintDataSampleStyle):
234         * profiler/Profile.h:
235         (KJS::Profile::callTree):
236         (KJS::Profile::totalTime):
237         (KJS::Profile::sortTotalTimeDescending):
238         (KJS::Profile::sortTotalTimeAscending):
239         (KJS::Profile::sortSelfTimeDescending):
240         (KJS::Profile::sortSelfTimeAscending):
241         (KJS::Profile::sortCallsDescending):
242         (KJS::Profile::sortCallsAscending):
243         (KJS::Profile::sortFunctionNameDescending):
244         (KJS::Profile::sortFunctionNameAscending):
245         (KJS::Profile::focus):
246         (KJS::Profile::exclude):
247         (KJS::Profile::restoreAll):
248
249 2008-06-05  Geoffrey Garen  <ggaren@apple.com>
250
251         Reviewed by Stephanie Lewis.
252
253         Added the -fno-move-loop-invariants flag to the pcre_exec.cpp build, to
254         tell GCC not to perform loop invariant motion, since GCC's loop
255         invariant motion doesn't do very well with computed goto code.
256         
257         SunSpider reports no change.
258
259 2008-06-05  Geoffrey Garen  <ggaren@apple.com>
260
261         Reviewed by Stephanie Lewis.
262         
263         Added the -fno-tree-pre flag to the Machine.cpp build, to tell GCC not
264         to perform Partial Redundancy Elimination (PRE) on trees in Machine.cpp,
265         since GCC's PRE doesn't do very well with computed goto code.
266         
267         SunSpider reports a .7% speedup.
268         
269 2008-06-05  Geoffrey Garen  <ggaren@apple.com>
270
271         Reviewed by Stephanie Lewis (or maybe the other way around).
272         
273         Minor change to PCRE to help out certain compilers.
274         
275         SunSpider reports no change, maybe a small speedup.
276
277         * pcre/pcre_exec.cpp:
278         (match): Use instructionPtr++ a little less, to avoid confusing the
279         optimizer.
280
281 2008-06-05  Alexey Proskuryakov  <ap@webkit.org>
282
283         Re-landing an independent part of a previously rolled out threading patch.
284
285         * wtf/ThreadSpecific.h: Make sure to initialize POD thread-specific varaibles, too
286         (replaced "new T" with "new T()").
287
288 2008-06-05  Maciej Stachowiak  <mjs@apple.com>
289
290         Reviewed by Hyatt.
291         
292         - force inlining of a template function that only has one call site per specialization
293         1.3% speedup on SunSpider
294
295         * kjs/collector.cpp:
296         (KJS::Collector::heapAllocate): This template function is only
297         called from allocate() and allocateNumber() (once per
298         specialization) and the extra call overhead for GC allocation
299         shows up, so force inlining.
300
301 2008-06-05  Maciej Stachowiak  <mjs@apple.com>
302
303         Reviewed by Alexey and Oliver.
304         
305         - remove profiler fetch hack
306         I measure an 0.5% progression from this, others show a wash. It seems not needed any more.
307
308         * VM/Machine.cpp:
309         (KJS::Machine::privateExecute):
310
311 2008-06-05  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
312
313         Reviewed by Maciej.
314
315         Bug 19400: subscript operator does not protect base when necessary
316         <https://bugs.webkit.org/show_bug.cgi?id=19400>
317
318         Use a temporary for the base in BracketAccessorNode if the subscript
319         might possibly modify it.
320
321         * kjs/grammar.y:
322         * kjs/nodes.cpp:
323         (KJS::BracketAccessorNode::emitCode):
324         * kjs/nodes.h:
325         (KJS::BracketAccessorNode::):
326
327 2008-06-04  Sam Weinig  <sam@webkit.org>
328
329         Reviewed by Maciej Stachowiak.
330
331         Big cleanup of formatting and whitespace.
332
333 2008-06-04  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
334
335         Reviewed by Oliver.
336
337         Add an option to dump statistics on executed instructions.
338
339         * VM/Machine.cpp:
340         (KJS::Machine::privateExecute):
341         * VM/Opcode.cpp:
342         (KJS::):
343         (KJS::OpcodeStats::~OpcodeStats):
344         (KJS::OpcodeStats::recordInstruction):
345         * VM/Opcode.h:
346
347 2008-06-04  Kevin McCullough  <kmccullough@apple.com>
348
349         Reviewed by Geoff.
350
351         <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the
352         profiler.
353         - This patch removes the use of recursion for the sort functions.
354
355         * JavaScriptCore.exp: Change the signatures of the functions being
356         exported.
357         * profiler/Profile.cpp:
358         (KJS::Profile::sort): This generic function will accept any of the
359         static sort functions and apply them to the whole tree.
360         * profiler/Profile.h: All of the sorting functions now call the new
361         sort() function.
362         (KJS::Profile::sortTotalTimeDescending):
363         (KJS::Profile::sortTotalTimeAscending):
364         (KJS::Profile::sortSelfTimeDescending):
365         (KJS::Profile::sortSelfTimeAscending):
366         (KJS::Profile::sortCallsDescending):
367         (KJS::Profile::sortCallsAscending):
368         (KJS::Profile::sortFunctionNameDescending):
369         (KJS::Profile::sortFunctionNameAscending):
370         * profiler/ProfileNode.cpp:
371         (KJS::ProfileNode::ProfileNode): m_head used to point to the head node
372         if this was the head node.  It now points to null to make iteration easy
373         (KJS::ProfileNode::willExecute): Now must check if m_head is null, this
374         check used to happend in the constructor.
375         (KJS::ProfileNode::stopProfiling): Again the check is slightly different
376         to determine if this is the head.
377         (KJS::ProfileNode::traverseNextNode): This function returns the next
378         node in post order.
379         (KJS::ProfileNode::sort): This generic function will sort according to
380         the comparator passed in, then reset the children pointers to macth the
381         new order.
382         * profiler/ProfileNode.h: The sorting function were removed from the
383         definition file and instead use the new generic sort() function
384         (KJS::ProfileNode::totalPercent): because the head can now be empty we
385         need to check here too for the head node.
386         (KJS::ProfileNode::selfPercent): Ditto
387         (KJS::ProfileNode::firstChild): This function is necessary for the 
388         iterative algorithm in Profile.cpp.
389         (KJS::ProfileNode::sortTotalTimeDescending):
390         (KJS::ProfileNode::sortTotalTimeAscending):
391         (KJS::ProfileNode::sortSelfTimeDescending):
392         (KJS::ProfileNode::sortSelfTimeAscending):
393         (KJS::ProfileNode::sortCallsDescending):
394         (KJS::ProfileNode::sortCallsAscending):
395         (KJS::ProfileNode::sortFunctionNameDescending):
396         (KJS::ProfileNode::sortFunctionNameAscending):
397         (KJS::ProfileNode::childrenBegin):
398         (KJS::ProfileNode::childrenEnd):
399         (KJS::ProfileNode::totalTimeDescendingComparator):
400         (KJS::ProfileNode::totalTimeAscendingComparator):
401         (KJS::ProfileNode::selfTimeDescendingComparator):
402         (KJS::ProfileNode::selfTimeAscendingComparator):
403         (KJS::ProfileNode::callsDescendingComparator):
404         (KJS::ProfileNode::callsAscendingComparator):
405         (KJS::ProfileNode::functionNameDescendingComparator):
406         (KJS::ProfileNode::functionNameAscendingComparator):
407
408 2008-06-04  Alexey Proskuryakov  <ap@webkit.org>
409
410         Reviewed by Darin.
411
412         Fix JSClassCreate to work with old JSCore API threading model.
413
414         No change on SunSpider.
415
416         * API/JSClassRef.cpp: (OpaqueJSClass::OpaqueJSClass): Since JSClass is constructed without
417         a context, there is no way for it to create Identifiers.
418         Also, added initializeThreading(), just for good measure.
419
420         * API/JSCallbackObjectFunctions.h: (KJS::::getPropertyNames): Make an Identifier out of the
421         string here, because propertyNames.add() needs that.
422
423         * kjs/identifier.cpp:
424         * kjs/identifier.h:
425         (KJS::Identifier::equal):
426         * kjs/ustring.cpp:
427         (KJS::equal):
428         Moved equal() from identifier.h to ustring.h, because it's not really about Identifiers,
429         and to make it possible to use it from StrHash.
430         Include StrHash.h from ustring.h to avoid having the behavior depend on headers that happen
431         to be included.
432
433         * wtf/StrHash.h: Removed.
434         * kjs/ustring.h: Made RefPtr<UString::Rep> use the same default hash as UString::Rep* (it
435         used to default to pointer equality). Moved the whole StrHash header into ustring.h.
436
437         * JavaScriptCore.exp: Export equal() for WebCore use (this StrHash is used in c_class.cpp,
438         jni_class.cpp, and npruntime.cpp).
439
440 2008-06-04  Alexey Proskuryakov  <ap@webkit.org>
441
442         Rubber-stamped by Darin.
443
444         Fix spacing in collector.{h,cpp}.
445
446         * kjs/collector.cpp:
447         * kjs/collector.h:
448
449 2008-06-03  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
450
451         Reviewed by Maciej.
452
453         Build fix. The cleanup in r34355 missed a method.
454
455         * kjs/nodes.cpp:
456         * kjs/nodes.h:
457
458 2008-06-03  Darin Adler  <darin@apple.com>
459
460         Reviewed by Geoff.
461
462         - https://bugs.webkit.org/show_bug.cgi?id=19269
463           speed up SunSpider by eliminating the toObject call for most get/put/delete
464
465         Makes standalone SunSpider 1.025x as fast as before.
466
467         The getOwnPropertySlot virtual function now takes care of the toObject call
468         for get. Similarly, the put function (and later deleteProperty) does the
469         same for those operations. To do this, the virtual functions were moved from
470         the JSObject class to the JSCell class. Also, since the caller no longer knows
471         the identity of the "original object", which is used by JavaScript-function
472         based getters, changed the PropertySlot class so the original object is
473         already stored in the slot when getOwnPropertySlot is called, if the caller
474         intends to call getValue.
475
476         This affected the old interpreter code enough that the easiest thing for me
477         was to just delete it. While I am not certain the mysterious slowdown is not
478         still occurring, the net change is definitely a significant speedup.
479
480         * JavaScriptCore.exp: Updated.
481
482         * VM/Machine.cpp: Moved the UNLIKELY macro into AlwaysInline.h.
483         (KJS::resolve): Set up the originalObject in the PropertySlot before
484         calling getPropertySlot. Also removed the originalObject argument from
485         getValue.
486         (KJS::resolve_skip): Ditto.
487         (KJS::resolveBaseAndProperty): Ditto.
488         (KJS::resolveBaseAndFunc): Ditto.
489         (KJS::Machine::privateExecute): Removed the toObject calls from the get and
490         put functions where possible, instead calling directly with JSValue and letting
491         the JSValue and JSCell calls handle toObject. Same for toThisObject.
492
493         * kjs/ExecState.h: Removed OldInterpreterExecState.
494
495         * API/JSBase.cpp: Updated includes.
496
497         * kjs/LocalStorageEntry.h: Removed contents. Later we can remove the file too.
498
499         * kjs/array_instance.cpp:
500         (KJS::ArrayInstance::lengthGetter): Removed originalObject argumet.
501         (KJS::ArrayInstance::inlineGetOwnPropertySlot): Don't pass a base value to
502         setValueSlot. Also use UNLIKELY around the "getting elements past the end of
503         the array" code path; less common than successfully getting an element.
504
505         * kjs/array_object.cpp:
506         (KJS::getProperty): Initialize the PropertySlot with the original object.
507         Don't pass the original object to the get function.
508         (KJS::arrayProtoFuncFilter): Ditto.
509         (KJS::arrayProtoFuncMap): Ditto.
510         (KJS::arrayProtoFuncEvery): Ditto.
511         (KJS::arrayProtoFuncForEach): Ditto.
512         (KJS::arrayProtoFuncSome): Ditto.
513
514         * kjs/function_object.cpp:
515         (KJS::FunctionObjectImp::construct): Removed an obsolete comment.
516
517         * kjs/grammar.y: Eliminated support for some of the node types that were
518         used to optimize executing from the syntax tree.
519
520         * kjs/internal.cpp:
521         (KJS::StringImp::toThisObject): Added. Same as toObject.
522         (KJS::NumberImp::toThisObject): Ditto.
523         (KJS::GetterSetterImp::getOwnPropertySlot): Added. Not reached.
524         (KJS::GetterSetterImp::put): Ditto.
525         (KJS::GetterSetterImp::toThisObject): Ditto.
526
527         * kjs/internal.h: Added toThisObject to NumberImp for speed.
528
529         * kjs/lexer.cpp:
530         (KJS::Lexer::shift): Changed shift to just do a single character, to unroll
531         the loop and especially to make the one character case faster.
532         (KJS::Lexer::setCode): Call shift multiple times instead of passing a number.
533         (KJS::Lexer::lex): Ditto.
534         (KJS::Lexer::matchPunctuator): Ditto. Also removed unneeded elses after returns.
535         (KJS::Lexer::scanRegExp): Ditto.
536         * kjs/lexer.h: Removed the count argument from shift.
537
538         * kjs/math_object.cpp:
539         (KJS::mathProtoFuncPow): Call jsNaN instead of jsNumber(NaN).
540
541         * kjs/nodes.cpp: Removed some of the things needed only for the pre-SquirrelFish
542         execution model.
543         (KJS::ForNode::emitCode): Handle cases where some expressions are missing by
544         not emitting any code at all. The old way was to emit code for "true", but
545         this is an unnecessary remnant of the old way of doing things.
546
547         * kjs/nodes.h: Removed some of the things needed only for the pre-SquirrelFish
548         execution model.
549
550         * kjs/object.cpp:
551         (KJS::JSObject::fillGetterPropertySlot): Changed to only pass in the getter
552         function. The old code passed in a base, but it was never used when
553         actually getting the property; the toThisObject call was pointless. Also
554         changed to not pass a base for setUndefined.
555
556         * kjs/object.h: Added the new JSCell operations to GetterSetterImp.
557         Never called.
558         (KJS::JSObject::get): Initialize the object in the PropertySlot and don't
559         pass it in getValue.
560         (KJS::JSObject::getOwnPropertySlotForWrite): Removed the base argument
561         in calls to setValueSlot.
562         (KJS::JSObject::getOwnPropertySlot): Ditto.
563         (KJS::JSValue::get): Added. Here because it calls through to JSObject.
564         A version of JSObject::get that also handles the other types of JSValue
565         by creating the appropriate wrapper. Saves the virtual call to toObject.
566         (KJS::JSValue::put): Ditto.
567         (KJS::JSValue::deleteProperty): Ditto.
568
569         * kjs/property_slot.cpp:
570         (KJS::PropertySlot::undefinedGetter): Removed the originalObject argument.
571         (KJS::PropertySlot::ungettableGetter): Ditto.
572         (KJS::PropertySlot::functionGetter): Ditto. Use the value in the base
573         as the "this" object, which will be set to the original object by the new
574         PropertySlot initialization code. Also call toThisObject. The old code did
575         not do this, but needed to so we can properly handle the activation object
576         like the other similar code paths.
577
578         * kjs/property_slot.h:
579         (KJS::PropertySlot::PropertySlot): Added a constructor that takes a base
580         object. In debug builds, set the base to 0 if you don't pass one.
581         (KJS::PropertySlot::getValue): Don't take or pass the originalObject.
582         (KJS::PropertySlot::setValueSlot): Don't take a base object, and clear the
583         base object in debug builds.
584         (KJS::PropertySlot::setGetterSlot): Ditto.
585         (KJS::PropertySlot::setUndefined): Ditto.
586         (KJS::PropertySlot::setUngettable): Ditto.
587         (KJS::PropertySlot::slotBase): Assert that a base object is present.
588         This will fire if someone actually calls the get function without having
589         passed in a base object and the getter needs it.
590         (KJS::PropertySlot::setBase): Added. Used by the code that implements
591         toObject so it can supply the original object after the fact.
592         (KJS::PropertySlot::clearBase): Added. Clears the base, but is debug-only
593         code because it's an error to fetch the base if you don't have a guarantee
594         it was set.
595
596         * API/JSCallbackObject.h:
597         * API/JSCallbackObjectFunctions.h:
598         (KJS::JSCallbackObject::cachedValueGetter):
599         (KJS::JSCallbackObject::staticValueGetter):
600         (KJS::JSCallbackObject::staticFunctionGetter):
601         (KJS::JSCallbackObject::callbackGetter):
602         * kjs/JSActivation.cpp:
603         (KJS::JSActivation::getOwnPropertySlot):
604         (KJS::JSActivation::argumentsGetter):
605         * kjs/JSActivation.h:
606         * kjs/JSVariableObject.h:
607         (KJS::JSVariableObject::symbolTableGet):
608         * kjs/array_instance.h:
609         * kjs/function.cpp:
610         (KJS::FunctionImp::argumentsGetter):
611         (KJS::FunctionImp::callerGetter):
612         (KJS::FunctionImp::lengthGetter):
613         (KJS::Arguments::mappedIndexGetter):
614         * kjs/function.h:
615         * kjs/lookup.h:
616         (KJS::staticFunctionGetter):
617         (KJS::staticValueGetter):
618         * kjs/string_object.cpp:
619         (KJS::StringInstance::lengthGetter):
620         (KJS::StringInstance::indexGetter):
621         (KJS::stringInstanceNumericPropertyGetter):
622         * kjs/string_object.h:
623         Removed originalObject arguments from getters. Don't pass base values to
624         the various PropertySlot functions that no longer take them.
625
626         * kjs/value.cpp:
627         (KJS::JSCell::getOwnPropertySlot): Added. Calls toObject and then sets the slot.
628         This function has to always return true, because the caller can't walk the prototype
629         chain. Because of that, we do a getPropertySlot, not getOwnPropertySlot, which works
630         for the caller. This is private, only called by getOwnPropertySlotInternal.
631         (KJS::JSCell::put): Added. Calls toObject and then put.
632         (KJS::JSCell::toThisObject): Added. Calls toObject.
633
634         * kjs/value.h: Added get, put, and toThisObject to both JSValue
635         and JSCell. These take care of the toObject operation without an additional virtual
636         function call, and so make the common "already an object" case faster.
637
638         * wtf/AlwaysInline.h: Moved the UNLIKELY macro here for now. Maybe we can find a
639         better place later, or rename this header.
640
641 2008-06-03  Oliver Hunt  <oliver@apple.com>
642
643         Reviewed by Tim.
644
645         Bug 12983: Web Inspector break on the debugger keyword
646         <https://bugs.webkit.org/show_bug.cgi?id=12983>
647
648         Added a DebuggerStatementNode to handle codegen, and added a new
649         DidReachBreakPoint debug event (which will hopefully be useful
650         if we ever move breakpoint management into JSC proper).  Also
651         added didReachBreakpoint to Debugger to allow us to actually respond
652         to this event.
653
654         * VM/CodeBlock.cpp:
655         (KJS::debugHookName):
656         * VM/Machine.cpp:
657         (KJS::Machine::debug):
658         * VM/Machine.h:
659         (KJS::):
660         * kjs/debugger.h:
661         * kjs/grammar.y:
662         * kjs/nodes.cpp:
663         (KJS::DebuggerStatementNode::emitCode):
664         (KJS::DebuggerStatementNode::execute):
665         * kjs/nodes.h:
666         (KJS::DebuggerStatementNode::):
667         * kjs/nodes2string.cpp:
668         (KJS::DebuggerStatementNode::streamTo):
669
670 2008-06-03  Maciej Stachowiak  <mjs@apple.com>
671
672         Reviewed by Oliver.
673         
674         - document remaining opcodes.
675
676         * VM/Machine.cpp:
677         (KJS::Machine::privateExecute): Document call, call_eval,
678         construct, ret and end opcodes.
679
680 2008-06-03  Maciej Stachowiak  <mjs@apple.com>
681
682         Reviewed by Oliver.
683
684         * VM/Machine.cpp:
685         (KJS::Machine::privateExecute): Document throw and catch opcodes.
686
687 2008-06-02  Geoffrey Garen  <ggaren@apple.com>
688
689         Reviewed by Alexey Proskuryakov.
690
691         Removed JSObject::call, since it just called JSObject::callAsFunction.
692
693         SunSpider reports no change.
694
695 2008-06-02  Geoffrey Garen  <ggaren@apple.com>
696
697         Reviewed by Darin Adler.
698         
699         A little cleanup in the CodeGenerator.
700
701         * VM/CodeGenerator.cpp: A few changes here.
702
703         (1) Removed remaining cases of the old hack of putting "this" into the
704         symbol table; replaced with explicit tracking of m_thisRegister.
705
706         (2) Made m_thisRegister behave the same for function, eval, and program
707         code, removing the static programCodeThis() function.
708
709         (3) Added a feature to nix a ScopeNode's declaration stacks when done
710         compiling, to save memory.
711
712         (4) Removed code that copied eval declarations into special vectors: we
713         just use the originals in the ScopeNode now.
714         
715         * VM/CodeGenerator.h: Removed unneded parameters from the CodeGenerator
716         constructor: we just use get that data from the ScopeNode now.
717
718         * VM/Machine.cpp:
719         (KJS::Machine::execute): When executing an eval node, don't iterate a
720         special copy of its declarations; iterate the originals, instead.
721
722         * kjs/nodes.cpp: Moved responsibility for knowing what AST data to throw
723         away into the CodeGenerator. Nodes no longer call shrinkCapacity on
724         their data directly.
725         
726         * kjs/nodes.h: Changed FunctionStack to ref its contents, so declaration
727         data stays around even after we've thrown away the AST, unless we explicitly
728         throw away the declaration data, too. This is useful for eval code, which
729         needs to reference its declaration data at execution time. (Soon, it will
730         be useful for program code, too, since program code should do the same.)
731
732 2008-06-02  Adam Roben  <aroben@apple.com>
733
734         Build fix for non-AllInOne builds
735
736         * kjs/array_object.cpp: Added a missing #include.
737
738 2008-06-02  Kevin McCullough  <kmccullough@apple.com>
739
740         Took out accidental confilct lines I checked in.
741
742         * ChangeLog:
743
744 2008-06-02  Kevin McCullough  <kmccullough@apple.com>
745
746         Reviewed by Darin.
747
748         <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the
749         profiler
750         Implement Next Sibling pointers as groundwork for removing the recursion
751         limit in the profiler.
752
753         * profiler/ProfileNode.cpp: Also I renamed parentNode and headNode since
754         'node' is redundant.
755         (KJS::ProfileNode::ProfileNode): Initialize the nextSibling.
756         (KJS::ProfileNode::willExecute): If there are already children then the
757         new child needs to be the nextSibling of the last child.
758         (KJS::ProfileNode::didExecute):
759         (KJS::ProfileNode::addChild): Ditto.
760         (KJS::ProfileNode::stopProfiling):
761         (KJS::ProfileNode::sortTotalTimeDescending): For all of the sorting
762         algorithms once the children are sorted their nextSibling pointers need
763         to be reset to reflect the new order.
764         (KJS::ProfileNode::sortTotalTimeAscending):
765         (KJS::ProfileNode::sortSelfTimeDescending):
766         (KJS::ProfileNode::sortSelfTimeAscending):
767         (KJS::ProfileNode::sortCallsDescending):
768         (KJS::ProfileNode::sortCallsAscending):
769         (KJS::ProfileNode::sortFunctionNameDescending):
770         (KJS::ProfileNode::sortFunctionNameAscending):
771         (KJS::ProfileNode::resetChildrensSiblings): This new function simply
772         loops over all of the children and sets their nextSibling pointers to
773         the next child in the Vector
774         (KJS::ProfileNode::debugPrintData):
775         * profiler/ProfileNode.h:
776         (KJS::ProfileNode::parent):
777         (KJS::ProfileNode::setParent):
778         (KJS::ProfileNode::nextSibling):
779         (KJS::ProfileNode::setNextSibling):
780         (KJS::ProfileNode::totalPercent):
781         (KJS::ProfileNode::selfPercent):
782
783 2008-06-02  Geoffrey Garen  <ggaren@apple.com>
784
785         Reviewed by Maciej Stachowiak.
786
787         Removed the recursion limit from JSObject::call, since the VM does
788         recursion checking now.
789
790         This should allow us to remove JSObject::call entirely, netting a small
791         speedup.
792
793         * kjs/object.cpp:
794         (KJS::JSObject::call):
795
796 2008-06-02  Geoffrey Garen  <ggaren@apple.com>
797
798         Reviewed by Adele Peterson.
799
800         Added a specific affordance for avoiding stack overflow when converting
801         recursive arrays to string, in preparation for removing generic stack
802         overflow checking from JSObject::call.
803         
804         Tested by fast/js/toString-stack-overflow.html.
805
806 2008-06-02  Geoffrey Garen  <ggaren@apple.com>
807
808         Reviewed by Alice Liu.
809         
810         Refactored some hand-rolled code to call ScopeChain::globalObject instead.
811
812 2008-06-02  Geoffrey Garen  <ggaren@apple.com>
813
814         Reviewed by Darin Adler.
815         
816         Fixed ASSERT due to execution continuing after an exception is thrown
817         during array sort.
818
819         * kjs/array_instance.cpp:
820         (KJS::AVLTreeAbstractorForArrayCompare::compare_key_key): Don't call the
821         custom comparator function if an exception has been thrown. Just return
822         1 for everything, so the sort completes quickly. (The result will be
823         thrown away.)
824
825 2008-05-30  Timothy Hatcher  <timothy@apple.com>
826
827         Made the starting line number of scripts be 1-based throughout the engine.
828         This cleans up script line numbers so they are all consistent now and fixes
829         some cases where script execution was shown as off by one line in the debugger.
830
831         No change in SunSpider.
832
833         Reviewed by Oliver Hunt.
834
835         * API/minidom.c:
836         (main): Pass a line number of 1 instead of 0 to parser().parse().
837         * API/testapi.c:
838         (main): Ditto. And removes a FIXME and changed an assertEqualsAsNumber
839         to use 1 instead of 2 for the line number.
840         * VM/Machine.cpp:
841         (KJS::callEval): Pass a line number of 1 instead of 0.
842         (KJS::Machine::debug): Use firstLine for WillExecuteProgram instead of
843         lastLine. Use lastLine for DidExecuteProgram instead of firstLine.
844         * kjs/DebuggerCallFrame.cpp:
845         (KJS::DebuggerCallFrame::evaluate): Pass a line number of 1 instead of
846         0 to parser().parse().
847         * kjs/Parser.cpp:
848         (KJS::Parser::parse): ASSERT startingLineNumber is greatter than 0. Change
849         the startingLineNumber to be 1 if it was less than or equal to 0. This is needed
850         for release builds to maintain compatibility with the JavaScriptCore API.
851         * kjs/function.cpp:
852         (KJS::globalFuncEval): Pass a line number of 1 instead of 0 to parser().parse().
853         * kjs/function_object.cpp:
854         (FunctionObjectImp::construct): Pass a line number of 1 instead of 0 to construct().
855         * kjs/lexer.cpp:
856         (Lexer::setCode): Made yylineno = startingLineNumber instead of adding 1.
857         * kjs/testkjs.cpp:
858         (functionRun): Pass a line number of 1 instead of 0 to Interpreter::evaluate().
859         (functionLoad): Ditto.
860         (prettyPrintScript): Ditto.
861         (runWithScripts): Ditto.
862         * profiler/Profiler.cpp:
863         (WebCore::createCallIdentifier): Removed a plus 1 of startingLineNumber.
864
865 2008-05-30  Alexey Proskuryakov  <ap@webkit.org>
866
867         Reviewed by Darin.
868
869         https://bugs.webkit.org/show_bug.cgi?id=19180
870         speed up SunSpider by optimizing immediate number cases
871
872         Also fixed a JavaScriptCore regression seen on PowerPC - we didn't clip left shift
873         parameter to 0...31.
874
875         0.5% improvement on SunSpider overall, although a 8.5 regression on bitops-3bit-bits-in-byte.
876
877         * VM/Machine.cpp:
878         (KJS::Machine::privateExecute):
879
880         * kjs/JSImmediate.h:
881         (KJS::JSImmediate::toTruncatedUInt32): Added. Same as getTruncatedInt32, but casts the result
882         to unsigned.
883
884 2008-05-30  Alexey Proskuryakov  <ap@webkit.org>
885
886         Reviewed by Oliver Hunt.
887
888         https://bugs.webkit.org/show_bug.cgi?id=19180
889         speed up SunSpider by optimizing immediate number cases
890
891         Also fixed two JavaScriptCore regressions seen on PowerPC - we didn't clip right shift
892         parameter to 0...31.
893
894         1.6% improvement on SunSpider, without significant regressions on any tests.
895
896         * VM/Machine.cpp:
897         (KJS::Machine::privateExecute):
898         Added fast paths for >>, ==, ===, !=, !==. Changed order of memory accesses in many
899         cases, making them less dependent on gcc's ability to properly assign registers. With this,
900         I could move exception checks back into slow code paths, and saw less randomness in general.
901
902         * kjs/JSImmediate.h:
903         (KJS::JSImmediate::rightShiftImmediateNumbers):
904         Added.
905
906 2008-05-29  Maciej Stachowiak  <mjs@apple.com>
907
908         Reviewed by Oliver.
909
910         - fixed <rdar://problem/5972943> REGRESSION(r33979): Flash clips do not play on cnn.com
911         
912         Finally blocks could clobber registers that had to remain live
913         until they returned. This patch takes a conservative approach and
914         makes sure that finally blocks do not reuse any registers that
915         were previously allocated for the function. In the future this
916         could probably be tightened up to be less profligate with the
917         register allocation.
918         
919         * VM/CodeGenerator.cpp:
920         (KJS::CodeGenerator::highestUsedRegister):
921         * VM/CodeGenerator.h:
922         * kjs/nodes.cpp:
923         (KJS::TryNode::emitCode):
924
925 2008-05-29  Steve Falkenburg  <sfalken@apple.com>
926
927         Build fix.
928
929         * kjs/array_instance.cpp:
930
931 2008-05-29  Alexey Proskuryakov  <ap@webkit.org>
932
933         Reviewed by Darin.
934
935         https://bugs.webkit.org/show_bug.cgi?id=19294
936         <rdar://problem/5969062> A crash when iterating over a sparse array backwards.
937
938         * kjs/array_instance.cpp: Turned sparseArrayCutoff into a macro, so that using max() on it
939         doesn't cause a PIC branch.
940         (KJS::ArrayInstance::increaseVectorLength): Added a comment about this function not
941         preserving class invariants.
942         (KJS::ArrayInstance::put): Update m_storage after reallocation. Move values that fit to
943         the vector from the map in all code paths.
944
945 2008-05-29  Thiago Macieira  <tjmaciei@trolltech.com>
946
947         Reviewed by Simon.
948
949         Fix compilation in Solaris with Sun CC
950
951         Lots of WebKit code uses C99 functions that, strict as it
952         is, the Solaris system doesn't provide in C++. So we must define them
953         for both GCC and the Sun CC.
954
955         * wtf/MathExtras.h:
956
957 2008-05-28  Oliver Hunt  <oliver@apple.com>
958
959         Reviewed by Anders.
960
961         Fix codegen for assignment being used as a function.
962
963         FunctionCallValueNode::emitCode failed to account for the
964         potential of the function expression to allocate arbitrary
965         registers.
966
967         * kjs/nodes.cpp:
968         (KJS::FunctionCallValueNode::emitCode):
969
970 2008-05-27  Geoffrey Garen  <ggaren@apple.com>
971
972         Reviewed by Tim Hatcher.
973
974         Fixed https://bugs.webkit.org/show_bug.cgi?id=19183
975         REGRESSION (r33979): Crash in DebuggerCallFrame::functionName when
976         clicking button in returnEvent-crash.html
977
978         Added two new debugger hooks, willExecuteProgram and didExecuteProgram,
979         along with code to generate them, code to invoke them when unwinding
980         due to an exception, and code to dump them.
981         
982         SunSpider reports no change.
983
984         * VM/CodeBlock.cpp:
985         (KJS::debugHookName): I had to mark this function NEVER_INLINE to avoid
986         a .4% performance regression. The mind boggles.
987
988 2008-05-28  Adam Roben  <aroben@apple.com>
989
990         Fix JavaScriptCore tests on OS X
991
992         We were quoting the path to testkjs too late, after it had already
993         been combined with spaces and other options.
994
995         * tests/mozilla/jsDriver.pl:
996         (top level): Move path quoting from here...
997         (sub get_kjs_engine_command): ...to here.
998
999 2008-05-28  Anders Carlsson  <andersca@apple.com>
1000
1001         Reviewed by Oliver.
1002
1003         <rdar://problem/5968071> "const f" crashes in JavaScriptCore
1004         
1005         Make sure to null check the initializer.
1006         
1007         * kjs/nodes.cpp:
1008         (KJS::ConstDeclNode::emitCodeSingle):
1009
1010 2008-05-28  Adam Roben  <aroben@apple.com>
1011
1012         Make run-javascriptcore-tests work with a space in the path to testkjs
1013
1014         Reviewed by Alexey Proskuryakov.
1015
1016         * tests/mozilla/jsDriver.pl: Quote the path to the engine so that
1017         spaces will be interpreted correctly.
1018
1019 2008-05-28  Alexey Proskuryakov  <ap@webkit.org>
1020
1021         Fixed a misguiding comment - my measurement for negative numbers only included cases
1022         where both operands were negative, which is not very interesting.
1023
1024         * VM/Machine.cpp:
1025
1026 2008-05-28  Alexey Proskuryakov  <ap@webkit.org>
1027
1028         Reviewed by Maciej.
1029
1030         Based on a patch by Oliver Hunt.
1031
1032         https://bugs.webkit.org/show_bug.cgi?id=19180
1033         speed up SunSpider by optimizing immediate number cases
1034
1035         1.4% speedup on SunSpider.
1036
1037         * VM/Machine.cpp:
1038         (KJS::Machine::privateExecute):
1039         * kjs/JSImmediate.h:
1040         (KJS::JSImmediate::incImmediateNumber):
1041         (KJS::JSImmediate::decImmediateNumber):
1042         Added fast paths for ++ and --.
1043
1044         (KJS::JSImmediate::canDoFastAdditiveOperations): Corrected a comment.
1045
1046 2008-05-28  Alexey Proskuryakov  <ap@webkit.org>
1047
1048         Reviewed by Darin.
1049
1050         https://bugs.webkit.org/show_bug.cgi?id=19180
1051         speed up SunSpider by optimizing immediate number cases
1052
1053         2% speedup overall, maximum 10% on controlflow-recursive and bitops-3bit-bits-in-byte,
1054         but a 4% regression on bitops-bits-in-byte and bitops-bitwise-and.
1055
1056         * kjs/JSImmediate.h:
1057         (KJS::JSImmediate::canDoFastAdditiveOperations):
1058         (KJS::JSImmediate::addImmediateNumbers):
1059         (KJS::JSImmediate::subImmediateNumbers):
1060         Added fast cases that work with positive values less than 2^30.
1061
1062         * VM/Machine.cpp:
1063         (KJS::Machine::privateExecute): Use the above operations. Also updated SunSpider frequencies
1064         with my results (looks like tag values have changed, not sure what caused the minor variation
1065         in actual frequencies).
1066
1067 2008-05-27  Adam Roben  <aroben@apple.com>
1068
1069         Windows build fix
1070
1071         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
1072         Remove code that appended Cygwin's /bin directory to PATH.
1073         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
1074         Prepend Cygwin's /bin directory to PATH. We prepend instead of append
1075         so that Cygwin's utilities will win out over Win32 versions of the
1076         same utilities (particularly perl). We do the prepend here instead of
1077         in the Makefile because nmake doesn't seem to like prepending to PATH
1078         inside the Makefile. This also matches the way WebCoreGenerated works.
1079
1080 2008-05-27  Adam Roben  <aroben@apple.com>
1081
1082         Roll out r34163
1083
1084         A better fix is on the way.
1085
1086         * DerivedSources.make:
1087         * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:
1088
1089 2008-05-27  Adam Roben  <aroben@apple.com>
1090
1091         Windows build fix
1092
1093         * DerivedSources.make: Don't generate the bytecode docs if
1094         OMIT_BYTECODE_DOCS is set to 1.
1095         * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: Set
1096         OMIT_BYTECODE_DOCS for production builds.
1097
1098 2008-05-27  Anders Carlsson  <andersca@apple.com>
1099
1100         Reviewed by Geoff and Maciej.
1101
1102         <rdar://problem/5806428> 
1103         https://bugs.webkit.org/show_bug.cgi?id=17925
1104         Crash in KJS::JSObject::put after setting this.__proto__
1105
1106         Set slotIsWriteable to false for __proto__, we want setting __proto__ to go through JSObject::put instead.
1107         
1108         * kjs/object.h:
1109         (KJS::JSObject::getOwnPropertySlotForWrite):
1110
1111 2008-05-27  Kevin Ollivier  <kevino@theolliviers.com>
1112
1113         wx build fixes to catch up with SquirrelFish, etc.
1114
1115         * JavaScriptCoreSources.bkl:
1116         * jscore.bkl:
1117         * wtf/Platform.h:
1118
1119 2008-05-27  Darin Adler  <darin@apple.com>
1120
1121         Reviewed by Tim Hatcher.
1122
1123         - https://bugs.webkit.org/show_bug.cgi?id=19180
1124           speed up SunSpider by optimizing immediate number cases
1125
1126         Add immediate number cases for the &, |, and ^ operators.
1127         Makes standalone SunSpider 1.010x faster.
1128
1129         * VM/Machine.cpp:
1130         (KJS::Machine::privateExecute): Add areBothImmediateNumbers special cases
1131         for the &, |, and ^ operators.
1132
1133         * kjs/JSImmediate.h:
1134         (KJS::JSImmediate::xorImmediateNumbers): Added.
1135         (KJS::JSImmediate::orImmediateNumbers): Added.
1136
1137 2008-05-26  Stephanie Lewis  <slewis@apple.com>
1138
1139         Windows build fix. 
1140
1141         * kjs/testkjs.cpp:
1142
1143 2008-05-26  Maciej Stachowiak  <mjs@apple.com>
1144
1145         Reviewed by Anders.
1146         
1147         - make addStaticGlobals protected instead of private so subclasses can use it
1148
1149         * JavaScriptCore.exp:
1150         * kjs/JSGlobalObject.h:
1151
1152 2008-05-26  Geoffrey Garen  <ggaren@apple.com>
1153
1154         Reviewed by Darin Adler.
1155         
1156         Fixed <rdar://problem/5960859> After an eval of a non-string or a syntax
1157         error, all profile stack frames are incorrect
1158         
1159         SunSpider reports a .3% speedup, possibly because eval of a string is a
1160         little more efficient now.
1161
1162         * VM/Machine.cpp:
1163         (KJS::callEval): Make sure to call didExecute when returning early. I
1164         simplified this function to remove one early return, making the job
1165         of adding special code to early returns easier.
1166
1167         (KJS::Machine::execute): Use the new function ExecState when notifying
1168         the profiler. (This doesn't change behavior now, but it might prevent
1169         subtle errors in the future.)
1170
1171 2008-05-23  Tor Arne Vestbø  <tavestbo@trolltech.com>
1172
1173         Reviewed by Simon.
1174
1175         Fixed toLower and toUpper implementations to allow being called
1176         with a null result pointer and resultLength, to determine the
1177         number of characters needed for the case conversion.
1178
1179         * wtf/unicode/qt4/UnicodeQt4.h:
1180         (WTF::Unicode::toLower):
1181         (WTF::Unicode::toUpper):
1182
1183 2008-05-25  Alexey Proskuryakov  <ap@webkit.org>
1184
1185         Fixing a typo in the previous commit made as a last minute change.
1186
1187         * kjs/regexp_object.cpp:
1188
1189 2008-05-24  Alexey Proskuryakov  <ap@webkit.org>
1190
1191         Reviewed by Darin.
1192
1193         Changed regular expression matching result array to be lazily filled, because many callers
1194         only care about it being non-null.
1195
1196         2% improvement on Acid3 test 26.
1197
1198         * kjs/array_instance.cpp: Added a void* member to ArrayStorage for ArrayInstance subclasses
1199         to use.
1200         * kjs/array_instance.h:
1201         (KJS::ArrayInstance::lazyCreationData):
1202         (KJS::ArrayInstance::setLazyCreationData):
1203         Added methods to access it from subclasses.
1204
1205         * kjs/regexp_object.cpp:
1206         (KJS::RegExpMatchesArray::RegExpMatchesArray):
1207         (KJS::RegExpMatchesArray::getOwnPropertySlot):
1208         (KJS::RegExpMatchesArray::put):
1209         (KJS::RegExpMatchesArray::deleteProperty):
1210         (KJS::RegExpMatchesArray::getPropertyNames):
1211         (KJS::RegExpMatchesArray::fillArrayInstanceIfNeeded):
1212         (KJS::RegExpMatchesArray::~RegExpMatchesArray):
1213         (KJS::RegExpObjectImp::arrayOfMatches):
1214         RegExpMatchesArray is a subclass of ArrayInstance that isn't filled until
1215         accessed for the first time.
1216
1217 2008-05-24  Alp Toker  <alp@nuanti.com>
1218
1219         Win32/gcc build fix. Remove MSVC assumption.
1220
1221         * wtf/TCSpinLock.h:
1222         (TCMalloc_SlowLock):
1223
1224 2008-05-24  Oleg Finkelshteyn <olegfink@gmail.com>
1225
1226         Rubber-stamped, tweaked and landed by Alexey.
1227
1228         Build fix for gcc 4.3.
1229
1230         * JavaScriptCore/kjs/testkjs.cpp:
1231         * JavaScriptCore/VM/CodeBlock.cpp:
1232         Add missing standard includes.
1233
1234 2008-05-23  Anders Carlsson  <andersca@apple.com>
1235
1236         Reviewed by Geoff.
1237
1238         <rdar://problem/5959886> REGRESSION: Assertion failure in JSImmediate::toString when loading GMail (19217)
1239         
1240         Change List to store a JSValue*** pointer + an offset instead of a JSValue** pointer to protect against the case where 
1241         a register file changes while a list object points to its buffer.
1242         
1243         * VM/Machine.cpp:
1244         (KJS::Machine::privateExecute):
1245         * kjs/JSActivation.cpp:
1246         (KJS::JSActivation::createArgumentsObject):
1247         * kjs/list.cpp:
1248         (KJS::List::getSlice):
1249         * kjs/list.h:
1250         (KJS::List::List):
1251         (KJS::List::at):
1252         (KJS::List::append):
1253         (KJS::List::begin):
1254         (KJS::List::end):
1255         (KJS::List::buffer):
1256
1257 2008-05-23  Kevin McCullough  <kmccullough@apple.com>
1258
1259         Reviewed by Sam.
1260
1261         <rdar://problem/5960012> JSProfiler: Stack overflow if recursion is
1262         too deep.
1263         -Use a simple depth limit to restrict too deep of recursion.
1264
1265         * profiler/Profile.cpp:
1266         (KJS::Profile::willExecute):
1267         (KJS::Profile::didExecute):
1268         * profiler/Profile.h:
1269
1270 2008-05-23  Geoffrey Garen  <ggaren@apple.com>
1271
1272         Rolling back in r34085, with performance resolved.
1273         
1274         Apparently, passing the eval function to callEval gave GCC a hernia.
1275
1276         Reviewed by Darin Adler, Kevin McCullough, and Oliver Hunt.
1277         
1278         Fixed <rdar://problem/5959447> Crashes and incorrect reporting in the
1279         JavaScript profiler
1280
1281         * VM/Machine.cpp:
1282         (KJS::Machine::unwindCallFrame): Fixed incorrect reporting / a crash
1283         when unwinding from inside eval and/or program code: detect the
1284         difference, and do the right thing. Also, be sure to notify the profiler
1285         *before* deref'ing the scope chain, since the profiler uses the scope chain.
1286
1287         (KJS::Machine::execute): Fixed incorrect reporting / crash when calling
1288         a JS function re-entrently: Machine::execute(FunctionBodyNode*...)
1289         should not invoke the didExecute hook, because op_ret already does that.
1290         Also, use the new function's ExecState when calling out to the profiler.
1291         (Not important now, but could have become a subtle bug later.)
1292
1293         (KJS::Machine::privateExecute): Fixed a hard to reproduce crash when
1294         profiling JS functions: notify the profiler *before* deref'ing the scope
1295         chain, since the profiler uses the scope chain.
1296
1297         * kjs/object.cpp:
1298         (KJS::JSObject::call): Removed these hooks, because they are now unnecessary.
1299
1300         * profiler/Profile.cpp: Added a comment to explain a subtlety that only
1301         Kevin and I understood previously. (Now, the whole world can understand!)
1302
1303         * profiler/Profiler.cpp:
1304         (KJS::shouldExcludeFunction): Don't exclude .call and .apply. That was
1305         a hack to fix bugs that no longer exist.
1306
1307         Finally, sped things up a little bit by changing the "Is the profiler
1308         running?" check into an ASSERT, since we only call into the profiler
1309         when it's running:
1310
1311         (KJS::Profiler::willExecute):
1312         (KJS::Profiler::didExecute):
1313
1314 2008-05-23  Geoffrey Garen  <ggaren@apple.com>
1315
1316         Reviewed by Oliver Hunt.
1317
1318         - fixed <rdar://problem/5957662> REGRESSION(r33943-r33980): Can't send email , attach file or save as draft from hotmail.com
1319         
1320         SunSpider reports no change.
1321         
1322         This is a reworking of r34073, which I rolled out because it caused
1323         lots of crashes.
1324
1325         * VM/CodeGenerator.cpp:
1326         (KJS::CodeGenerator::CodeGenerator): Use removeDirect to nix old
1327         properties whose names collide with new functions. (Don't use putWithAttributes
1328         because that tries to write to the register file, which hasn't grown to
1329         fit this program yet.)
1330
1331 2008-05-23  Darin Adler  <darin@apple.com>
1332
1333         Reviewed by Mark Rowe.
1334
1335         As allocateNumber is used via jsNumberCell outside of JavaScriptCore,
1336         we need to provide a non-inlined version of it to avoid creating a
1337         weak external symbol.
1338
1339         * JavaScriptCore.exp:
1340         * kjs/AllInOneFile.cpp:
1341         * kjs/collector.cpp:
1342         (KJS::Collector::allocate):
1343         (KJS::Collector::allocateNumber):
1344         * kjs/collector.h:
1345         (KJS::Collector::allocate):
1346         (KJS::Collector::inlineAllocateNumber):
1347         * kjs/value.h:
1348         (KJS::NumberImp::operator new):
1349
1350 2008-05-23  Geoffrey Garen  <ggaren@apple.com>
1351
1352         Rolled out r34073 because it caused lots of layout test crashes.
1353
1354 2008-05-23  Geoffrey Garen  <ggaren@apple.com>
1355
1356         Rolled out r34085 because it measured as a 7.6% performance regression.
1357
1358 2008-05-23  Adam Roben  <aroben@apple.com>
1359
1360         Windows build fix
1361
1362         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add the
1363         profiler directory to the include path.
1364
1365 2008-05-23  Oliver Hunt  <oliver@apple.com>
1366
1367         Reviewed by Anders.
1368
1369         SQUIRRELFISH: JavaScript error messages are missing informative text
1370
1371         Partial fix.
1372         Tidy up error messages, makes a couple of them provide slightly more info.
1373         Inexplicably leads to a 1% SunSpider Progression.
1374
1375         * VM/ExceptionHelpers.cpp:
1376         (KJS::createError):
1377         (KJS::createInvalidParamError):
1378         (KJS::createNotAConstructorError):
1379         (KJS::createNotAFunctionError):
1380         * VM/ExceptionHelpers.h:
1381         * VM/Machine.cpp:
1382         (KJS::isNotObject):
1383
1384 2008-05-23  Oliver Hunt  <oliver@apple.com>
1385
1386         Reviewed by Tim H.
1387
1388         Fix call stack reported by profiler when entering event handlers.
1389
1390         JSObject::call was arbitrarily notifying the profiler when it was
1391         called, even if it was JS code, which notifies the profile on entry
1392         in any case.
1393
1394         * kjs/object.cpp:
1395         (KJS::JSObject::call):
1396
1397 2008-05-16  Alp Toker  <alp@nuanti.com>
1398
1399         Build fix for gcc 3. Default constructor required in ExecState,
1400         used by OldInterpreterExecState.
1401
1402         * kjs/ExecState.h:
1403         (KJS::ExecState::ExecState):
1404
1405 2008-05-23  Mark Rowe  <mrowe@apple.com>
1406
1407         Reviewed by Oliver Hunt.
1408
1409         Fix <rdar://problem/5954997> global-recursion-on-full-stack.html crashes under guardmalloc.
1410
1411         Growing the register file with uncheckedGrow from within Machine::execute is not safe as the
1412         register file may be too close to its maximum size to grow successfully.  By using grow,
1413         checking the result and throwing a stack overflow error we can avoid crashing.
1414
1415         * VM/Machine.cpp:
1416         (KJS::Machine::execute):
1417         * VM/RegisterFile.h: Remove the now-unused uncheckedGrow.
1418
1419 2008-05-23  Oliver Hunt  <oliver@apple.com>
1420
1421         RS=Kevin McCullough
1422
1423         Remove JAVASCRIPT_PROFILER define
1424
1425         * VM/Machine.cpp:
1426         (KJS::callEval):
1427         (KJS::Machine::unwindCallFrame):
1428         (KJS::Machine::execute):
1429         (KJS::Machine::privateExecute):
1430         * kjs/config.h:
1431         * kjs/object.cpp:
1432         (KJS::JSObject::call):
1433
1434 2008-05-23  Oliver Hunt  <oliver@apple.com>
1435
1436        <rdar://problem/5951561> Turn on JavaScript Profiler
1437
1438         Reviewed by Kevin McCullough.
1439
1440         Flipped the switch on the profiler, rearranged how we
1441         signal the the profiler is active so that calls aren't
1442         needed in the general case.
1443         
1444         Also fixed the entry point for Machine::execute(FunctionBodyNode..)
1445         to correctly indicate function exit.
1446
1447         Results in a 0.7-1.0% regression in SunSpider :-(
1448
1449         * VM/Machine.cpp:
1450         (KJS::callEval):
1451         (KJS::Machine::unwindCallFrame):
1452         (KJS::Machine::execute):
1453         (KJS::Machine::privateExecute):
1454         * kjs/config.h:
1455         * profiler/Profiler.cpp:
1456         (KJS::Profiler::profiler):
1457         (KJS::Profiler::startProfiling):
1458         (KJS::Profiler::stopProfiling):
1459         * profiler/Profiler.h:
1460         (KJS::Profiler::enabledProfilerReference):
1461
1462 2008-05-23  Simon Hausmann  <hausmann@webkit.org>
1463
1464         Fix the Qt build by adding profiler/ to the include search path.
1465
1466         * JavaScriptCore.pri:
1467
1468 2008-05-22  Kevin McCullough  <kmccullough@apple.com>
1469
1470         Reviewed by Adam.
1471
1472         Fix a bug in the profiler where time in the current function is given to
1473         (idle).
1474
1475         * profiler/Profile.cpp:
1476         (KJS::Profile::didExecute): Set the start time and then call didExecute
1477         to calculate the time spent in this function.
1478         * profiler/ProfileNode.cpp: Remove confusing calculations that are no
1479         longer necessary.
1480         (KJS::ProfileNode::insertNode):
1481         * profiler/ProfileNode.h: Expose access to the start time to allow the
1482         simpler time calculations above.
1483         (KJS::ProfileNode::startTime):
1484         (KJS::ProfileNode::setStartTime):
1485
1486 2008-05-22  Adam Roben  <aroben@apple.com>
1487
1488         Show "(Function object)" instead of "(JSInpectorCallbackWrapper
1489         object)" in profiles
1490
1491         Reviewed by Kevin McCullough.
1492
1493         * profiler/Profiler.cpp:
1494         (KJS::createCallIdentifier): Use JSObject::className instead of
1495         getting the class name from the ClassInfo directly. JSObject
1496         subclasses can override className to provide a custom class name, and
1497         it seems like we should honor that.
1498
1499 2008-05-22  Timothy Hatcher  <timothy@apple.com>
1500
1501         Added Profile::restoreAll and added ProfileNode::restoreAll
1502         to the export file.
1503
1504         Reviewed by Adam Roben.
1505
1506         * JavaScriptCore.exp:
1507         * profiler/Profile.h:
1508
1509 2008-05-22  Alp Toker  <alp@nuanti.com>
1510
1511         GTK+ build fix. Add JavaScriptCore/profiler to include path.
1512
1513         * GNUmakefile.am:
1514
1515 2008-05-22  Adam Roben  <aroben@apple.com>
1516
1517         Implement sub-millisecond profiling on Windows
1518
1519         Reviewed by Kevin McCullough.
1520
1521         * profiler/ProfileNode.cpp:
1522         (KJS::getCount): Added. On Windows, we use QueryPerformanceCounter. On
1523         other platforms, we use getCurrentUTCTimeWithMicroseconds.
1524         (KJS::ProfileNode::endAndRecordCall): Use getCount instead of
1525         getCurrentUTCTimeWithMicroseconds.
1526         (KJS::ProfileNode::startTimer): Ditto.
1527
1528 2008-05-22  Adam Roben  <aroben@apple.com>
1529
1530         Fix a profiler assertion when calling a NodeList as a function
1531
1532         Reviewed by Kevin McCullough.
1533
1534         * profiler/Profiler.cpp:
1535         (KJS::createCallIdentifier): Don't assert when a non-function object
1536         is called as a function. Instead, build up a CallIdentifier using the
1537         object's class name.
1538
1539 2008-05-22  Kevin McCullough  <kmccullough@apple.com>
1540
1541         Reviewed by Darin.
1542
1543         <rdar://problem/5951529> JSProfiler: Allow the profiler to "Exclude" a
1544         profile node.
1545         -Implement 'exclude'; where the excluded node attributes its time to its
1546         parent's self time.
1547
1548         * JavaScriptCore.exp: Export the exclude function.
1549         * profiler/Profile.h: 
1550         (KJS::Profile::exclude):
1551         * profiler/ProfileNode.cpp: 
1552         (KJS::ProfileNode::setTreeVisible): New function that allows a change in
1553         visiblitiy to be propogated to all the children of a node.
1554         (KJS::ProfileNode::exclude): If the node matches the callIdentifier then
1555         set the visiblity of this node and all of its children to false and
1556         attribute it's total time to it's caller's self time.
1557         * profiler/ProfileNode.h:
1558
1559 2008-05-22  Mark Rowe  <mrowe@apple.com>
1560
1561         Reviewed by Oliver Hunt.
1562
1563         Fix access to static global variables in Windows release builds.
1564
1565         * kjs/JSGlobalObject.h: Don't store a reference to an Identifier
1566         in GlobalPropertyInfo as the Identifier is likely to be a temporary
1567         and therefore may be destroyed before the GlobalPropertyInfo.
1568
1569 2008-05-22  Kevin McCullough  <kmccullough@apple.com>
1570
1571         Build fix.
1572
1573         * VM/Machine.cpp:
1574         (KJS::callEval):
1575
1576 2008-05-22  Kevin McCullough  <kmccullough@apple.com>
1577
1578         Reviewed by Sam.
1579
1580         <rdar://problem/5951561> Turn on JavaScript Profiler
1581         Get basic JS profiling working.
1582         Even with this patch the profiler will not be compiled in because we do
1583         not know the extend, if any, of the performance regression it would cause
1584         when it is not in use. However with these changes, if the profiler were
1585         on, it would not crash and show good profiling data.
1586
1587         * VM/Machine.cpp: Instrument the calls sites that are needed for profiling.
1588         (KJS::callEval):
1589         (KJS::Machine::unwindCallFrame):
1590         (KJS::Machine::execute):
1591         (KJS::Machine::privateExecute):
1592         * kjs/function.cpp: Ditto.
1593         (KJS::globalFuncEval):
1594         * kjs/interpreter.cpp: Ditto.
1595         (KJS::Interpreter::evaluate):
1596         * profiler/Profile.cpp: 
1597         (KJS::Profile::willExecute):
1598         (KJS::Profile::didExecute): Because we do not get a good context when
1599         startProfiling is called it is possible that m_currentNode will be at the
1600         top of the known stack when a didExecute() is called.  What we then do is
1601         create a new node that represents the function being exited and insert
1602         it between the head and the currently known children, since they should
1603         be children of this new node.
1604         * profiler/ProfileNode.cpp:
1605         (KJS::ProfileNode::ProfileNode):
1606         (KJS::ProfileNode::willExecute): Rename the add function for consistency.
1607         (KJS::ProfileNode::addChild): Appends the child to this node but also
1608         sets the parent pointer of the children to this node.
1609         (KJS::ProfileNode::insertNode): Insert a node between this node and its
1610         children.  Also set the time for the new node since it is now exiting
1611         and we don't really know when it started.
1612         (KJS::ProfileNode::stopProfiling):
1613         (KJS::ProfileNode::startTimer):
1614         * profiler/ProfileNode.h:
1615         (KJS::CallIdentifier::toString): Added for debugging.
1616         (KJS::ProfileNode::setParent):
1617         (KJS::ProfileNode::setSelfTime): Fixed an old bug where we set the
1618         visibleTotalTime not the visibleSelfTime.
1619         (KJS::ProfileNode::children):
1620         (KJS::ProfileNode::toString): Added for debugging.
1621         * profiler/Profiler.cpp: remove unecessary calls.
1622         (KJS::Profiler::startProfiling):
1623
1624 2008-05-22  Sam Weinig  <sam@webkit.org>
1625
1626         Reviewed by Oliver Hunt.
1627
1628         Rename register arguments for op_call, op_call_eval, op_end, and op_construct 
1629         to document what they are for.
1630
1631         * VM/CodeGenerator.cpp:
1632         (KJS::CodeGenerator::emitCall):
1633         (KJS::CodeGenerator::emitCallEval):
1634         (KJS::CodeGenerator::emitEnd):
1635         (KJS::CodeGenerator::emitConstruct):
1636         * VM/CodeGenerator.h:
1637         * VM/Machine.cpp:
1638         (KJS::Machine::privateExecute):
1639
1640 2008-05-22  Oliver Hunt  <oliver@apple.com>
1641
1642         Reviewed by Darin.
1643
1644         Bug 19116: SquirrelFish shouldn't regress on variable lookups
1645         <https://bugs.webkit.org/show_bug.cgi?id=19116>
1646
1647         Last of the multiscope look up optimisations.  This is a wash overall on SunSpider
1648         but is a factor of 5-10 improvement in multiscope read/write/modify (eg. ++, --, +=,
1649         ... applied to any non-local var).
1650
1651         * kjs/nodes.cpp:
1652         (KJS::PostIncResolveNode::emitCode):
1653         (KJS::PostDecResolveNode::emitCode):
1654         (KJS::PreIncResolveNode::emitCode):
1655         (KJS::PreDecResolveNode::emitCode):
1656         (KJS::ReadModifyResolveNode::emitCode):
1657
1658 2008-05-22  David Kilzer  <ddkilzer@apple.com>
1659
1660         <rdar://problem/5954233> Add method to release free memory from FastMalloc
1661
1662         Patch suggested by Mark Rowe.  Rubber-stamped by Maciej.
1663
1664         * JavaScriptCore.exp: Export _releaseFastMallocFreeMemory.
1665         * wtf/FastMalloc.cpp:
1666         (WTF::TCMallocStats::): Added releaseFastMallocFreeMemory() for both
1667         system malloc and FastMalloc code paths.
1668         * wtf/FastMalloc.h: Define releaseFastMallocFreeMemory().
1669
1670 2008-05-22  Oliver Hunt  <oliver@apple.com>
1671
1672         RS=Maciej.
1673
1674         Roll out r34020 as it causes recursion tests to fail.
1675
1676         * kjs/object.cpp:
1677         (KJS::JSObject::call):
1678
1679 2008-05-22  Oliver Hunt  <oliver@apple.com>
1680
1681         Reviewed by Mark.
1682
1683         Don't leak the SymbolTable when compiling eval code.
1684
1685         * kjs/nodes.cpp:
1686         (KJS::EvalNode::generateCode):
1687
1688 2008-05-22  Simon Hausmann  <hausmann@webkit.org>
1689
1690         Reviewed by Oliver.
1691
1692         Qt build fix.
1693
1694         * JavaScriptCore.pri: Added DebuggerCallFrame to the build.
1695         * VM/LabelID.h: Include limits.h for UINT_MAX.
1696         * wtf/VectorTraits.h: Include memory for std::auto_ptr.
1697
1698 2008-05-22  Geoffrey Garen  <ggaren@apple.com>
1699
1700         Reviewed by Adam Roben.
1701         
1702         Removed the old recursion guard mechanism, since squirrelfish has its
1703         own mechanism. Also removed some old JS call tracing code, since we
1704         have other ways to do that, too.
1705         
1706         SunSpider reports no change.
1707
1708         * kjs/object.cpp:
1709         (KJS::JSObject::call):
1710
1711 2008-05-22  Maciej Stachowiak  <mjs@apple.com>
1712
1713         Reviewed by Oliver.
1714         
1715         - fixed <rdar://problem/5954979> crash on celtic kane JS benchmark
1716
1717         * kjs/nodes.cpp:
1718         (KJS::WithNode::emitCode):
1719         (KJS::TryNode::emitCode):
1720
1721 2008-05-21  Kevin McCullough  <kmccullough@apple.com>
1722
1723         Reviewed by Maciej and Geoff.
1724
1725         <rdar://problem/5951561> Turn on JavaScript Profiler
1726         -As part of the effort to turn on the profiler it would be helpful if it
1727         did not need ExecStates to represent the stack location of the currently
1728         executing statement.
1729         -We now create each node as necessary with a reference to the current
1730         node and each node knows its parent so that the tree can be made without
1731         the entire stack.
1732
1733         * profiler/Profile.cpp:
1734         (KJS::Profile::Profile): The current node starts at the head.
1735         (KJS::Profile::stopProfiling): The current node is cleared when profiling
1736         stops.
1737         (KJS::Profile::willExecute): The current node either adds a new child or
1738         starts and returns a reference to an already existing child if the call
1739         ID that is requested already exists.
1740         (KJS::Profile::didExecute): The current node finishes and returns its
1741         parent.
1742         * profiler/Profile.h: Use a single callIdentifier instead of a vector
1743         since we no longer use the whole stack.
1744         * profiler/ProfileNode.cpp: Now profile nodes keep a reference to their
1745         parent.
1746         (KJS::ProfileNode::ProfileNode): Initialize the parent.
1747         (KJS::ProfileNode::didExecute): Record the time and return the parent.
1748         (KJS::ProfileNode::addOrStartChild): If the given callIdentifier is
1749         already a child, start it and return it, otherwise create a new one and
1750         return that.
1751         (KJS::ProfileNode::stopProfiling): Same logic, just use the new function.
1752         * profiler/ProfileNode.h: Utilize the parent.
1753         (KJS::ProfileNode::create):
1754         (KJS::ProfileNode::parent):
1755         * profiler/Profiler.cpp: 
1756         (KJS::Profiler::startProfiling): Here is the only place where the
1757         ExecState is used to figure out where in the stack the profiler is
1758         currently profiling.
1759         (KJS::dispatchFunctionToProfiles): Only send one CallIdentifier instead
1760         of a vector of them.
1761         (KJS::Profiler::willExecute): Ditto.
1762         (KJS::Profiler::didExecute): Ditto.
1763         (KJS::createCallIdentifier): Create only one CallIdentifier.
1764         (KJS::createCallIdentifierFromFunctionImp): Ditto.
1765         * profiler/Profiler.h:
1766
1767 2008-05-21  Darin Adler  <darin@apple.com>
1768
1769         Reviewed by Maciej.
1770
1771         - https://bugs.webkit.org/show_bug.cgi?id=19180
1772           speed up the < operator for the case when both values are integers
1773
1774         Makes standalone SunSpider 1.022x faster.
1775
1776         * VM/Machine.cpp:
1777         (KJS::jsLess): Add a special case for when both are numbers that fit in a JSImmediate.
1778
1779 2008-05-21  Maciej Stachowiak  <mjs@apple.com>
1780
1781         Reviewed by Oliver and Sam.
1782         
1783         - fixed <rdar://problem/5815631> REGRESSION (r31239): Multiscope optimisation of function calls results in incorrect this value (breaks tvtv.de)
1784         
1785         Track global this value in the scope chain so we can retrieve it
1786         efficiently but it follows lexical scope properly.
1787
1788         * kjs/ExecState.h:
1789         (KJS::ExecState::globalThisValue):
1790         * kjs/JSGlobalObject.h:
1791         (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
1792         * kjs/function_object.cpp:
1793         (KJS::FunctionObjectImp::construct):
1794         * kjs/scope_chain.h:
1795         (KJS::ScopeChainNode::ScopeChainNode):
1796         (KJS::ScopeChainNode::globalThisObject):
1797         (KJS::ScopeChainNode::push):
1798         (KJS::ScopeChain::ScopeChain):
1799
1800 2008-05-21  Kevin McCullough  <kmccullough@apple.com>
1801
1802         Sadness :(
1803
1804         * kjs/config.h:
1805
1806 2008-05-21  Kevin McCullough  <kmccullough@apple.com>
1807
1808         Reviewed by Maciej.
1809
1810         <rdar://problem/5950867> JSProfiler: Allow the profiler to "Focus" a
1811         profile node.
1812         - This patch updatest the times of the visible nodes correctly, but to do
1813         so, some of the design of the ProfileNode changed.
1814
1815         * JavaScriptCore.exp: export focus' symbol.
1816         * profiler/Profile.cpp: ProfileNodes now take a reference to the head of
1817         the profile tree to get up-to-date accurate total profile time.
1818         (KJS::Profile::Profile): Pass 0 for the head node.
1819         (KJS::Profile::stopProfiling): stopProfiling no longer needs the time
1820         passed into it, since it can get it from the head and it does not need to
1821         be told it is the head because it can figure it out on it's own.
1822         (KJS::Profile::willExecute): Set the head node for each created node.
1823         * profiler/Profile.h:
1824         (KJS::Profile::focus): Instead of taking a CallIdentifier that the caller
1825         would have to create, now focus() takes a ProfileNode that they should
1826         already have a reference to and focus() can extract the CallIdentifier
1827         from it.
1828         * profiler/ProfileNode.cpp: Create actual and visible versions fo the
1829         total and self times for focus and exclude.  Also add a head node
1830         reference so that nodes can get information from their head.
1831         (KJS::ProfileNode::ProfileNode):
1832         (KJS::ProfileNode::stopProfiling): Rename the total and self time
1833         variables and set the visual ones to the actual ones, so that without any
1834         changes to the visual versions of these variables, their times will match
1835         the actual times.
1836         (KJS::ProfileNode::focus): Now focus() has a bool to force it's children
1837         to be visible if this node is visible.  If this node does not match the
1838         CallIdentifier being focused then the visibleTotalTime is only updated if
1839         one or more of it's children is the CallIdentifier being focused. 
1840         (KJS::ProfileNode::restoreAll): Restores all variables with respect to
1841         the visible data in the ProfileNode.
1842         (KJS::ProfileNode::endAndRecordCall): Name change.
1843         (KJS::ProfileNode::debugPrintData): Dump the new variables.
1844         (KJS::ProfileNode::debugPrintDataSampleStyle): Name change.
1845         * profiler/ProfileNode.h: Use the new variables and reference to the head
1846         node.
1847         (KJS::ProfileNode::create):
1848         (KJS::ProfileNode::totalTime):
1849         (KJS::ProfileNode::setTotalTime):
1850         (KJS::ProfileNode::selfTime):
1851         (KJS::ProfileNode::setSelfTime):
1852         (KJS::ProfileNode::totalPercent):
1853         (KJS::ProfileNode::selfPercent):
1854         (KJS::ProfileNode::setVisible):
1855
1856 2008-05-21  Alp Toker  <alp@nuanti.com>
1857
1858         GTK+/UNIX testkjs build fix. Include signal.h.
1859
1860         * kjs/testkjs.cpp:
1861
1862 2008-05-21  Oliver Hunt  <oliver@apple.com>
1863
1864         Reviewed by NOBODY (Build fix).
1865
1866         Yet more windows build fixes
1867
1868         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1869
1870 2008-05-21  Oliver Hunt  <oliver@apple.com>
1871
1872         Reviewed by NOBODY (Build fix).
1873
1874         Yet more windows build fixes
1875
1876         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1877
1878 2008-05-21  Alp Toker  <alp@nuanti.com>
1879
1880         GTK+ build fix. Add DebuggerCallFrame.cpp and take AllInOneFile.cpp
1881         changes into account.
1882
1883         * GNUmakefile.am:
1884
1885 2008-05-21  Oliver Hunt  <oliver@apple.com>
1886
1887         Reviewed by NOBODY (Build fix).
1888
1889         Add DebuggerCallFrame.{h,cpp} to the project file
1890
1891         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1892
1893 2008-05-21  Alp Toker  <alp@nuanti.com>
1894
1895         GTK+ port build fixes following squirrelfish merge r33979.
1896
1897         * GNUmakefile.am:
1898
1899 2008-05-21  Maciej Stachowiak  <mjs@apple.com>
1900
1901         Reviewed by Darin.
1902         
1903         - save a hash lookup wne writing to global properties
1904         0.3% speedup on SunSpider, 7% on bitops-bitwise-and
1905
1906         * VM/Machine.cpp:
1907         (KJS::resolveBase): Check for being a the end of the scope chain
1908         before hash lookup.
1909
1910 2008-05-21  Alp Toker  <alp@nuanti.com>
1911
1912         Rubber-stamped by Maciej.
1913
1914         Replace non-standard #pragma marks with comments to avoid compiler
1915         warnings.
1916
1917         * profiler/ProfileNode.cpp:
1918
1919 2008-05-21  Geoffrey Garen  <ggaren@apple.com>
1920
1921         Reviewed by Mark Rowe.
1922
1923         Fix layout test failure in fast/dom/getter-on-window-object2 introduced in r33961.
1924
1925         * JavaScriptCore.exp:
1926         * kjs/JSGlobalObject.cpp:
1927         (KJS::JSGlobalObject::defineGetter):
1928         (KJS::JSGlobalObject::defineSetter):
1929         * kjs/JSGlobalObject.h:
1930
1931 === End merge of squirrelfish ===
1932
1933 2008-05-21  Geoffrey Garen  <ggaren@apple.com>
1934
1935         Reviewed by Tim Hatcher.
1936         
1937         Merged with trunk WebCore's new debugger.
1938
1939         * kjs/DebuggerCallFrame.cpp:
1940         (KJS::DebuggerCallFrame::evaluate): Changed this function to separate
1941         the exception value from the return value. The WebKit debugger treats
1942         them as one, but the WebCore debugger doesn't.
1943
1944         * kjs/DebuggerCallFrame.h:
1945         (KJS::DebuggerCallFrame::dynamicGlobalObject): Added a new accessor for
1946         the dynamic global object, since the debugger doesn't want the lexical
1947         global object.
1948
1949 2008-05-21  Oliver Hunt  <oliver@apple.com>
1950
1951         Reviewed by Maciej.
1952
1953         Bug 19116: SquirrelFish shouldn't regress on variable lookups
1954         <https://bugs.webkit.org/show_bug.cgi?id=19116>
1955
1956         Optimise cross scope assignment, 0.4% progression in sunspider.
1957
1958         * VM/CodeBlock.cpp:
1959         (KJS::CodeBlock::dump):
1960         * VM/CodeGenerator.cpp:
1961         (KJS::CodeGenerator::emitPutScopedVar):
1962         * VM/CodeGenerator.h:
1963         * VM/Machine.cpp:
1964         (KJS::Machine::privateExecute):
1965         * VM/Opcode.h:
1966         * kjs/nodes.cpp:
1967         (KJS::AssignResolveNode::emitCode):
1968
1969 2008-05-21  Maciej Stachowiak  <mjs@apple.com>
1970
1971         Reviewed by Oliver.
1972         
1973         - check property map before symbol table in JSGlobalObject::getOwnPropertySlot
1974         0.5% speedup on SunSpider
1975
1976         * kjs/JSGlobalObject.h:
1977         (KJS::JSGlobalObject::getOwnPropertySlot): Check property map before symbol table
1978         because symbol table access is likely to have been optimized.
1979
1980 2008-05-21  Oliver Hunt  <oliver@apple.com>
1981
1982         Reviewed by Maciej.
1983
1984         Bug 19116: SquirrelFish shouldn't regress on variable lookups
1985         <https://bugs.webkit.org/show_bug.cgi?id=19116>
1986
1987         Optimise multiscope lookup of statically resolvable function calls.
1988         SunSpider reports a 1.5% improvement, including 37% on 
1989         controlflow-recursive for some reason :D
1990
1991         * VM/CodeBlock.cpp:
1992         (KJS::CodeBlock::dump):
1993         * VM/CodeGenerator.cpp:
1994         (KJS::CodeGenerator::emitResolve):
1995         * VM/CodeGenerator.h:
1996         * kjs/nodes.cpp:
1997         (KJS::FunctionCallResolveNode::emitCode):
1998
1999 2008-05-21  Maciej Stachowiak  <mjs@apple.com>
2000
2001         Reviewed by Oliver.
2002         
2003         - give JSGlobalObject a special version of getOwnPropertySlot that tells you if the slot is directly writable
2004         (WebCore change using this is a 2.6% speedup on in-browser SunSpider).
2005
2006         * JavaScriptCore.exp:
2007         * kjs/JSGlobalObject.h:
2008         (KJS::JSGlobalObject::getOwnPropertySlot):
2009         * kjs/JSVariableObject.h:
2010         (KJS::JSVariableObject::symbolTableGet):
2011         * kjs/object.h:
2012         (KJS::JSObject::getDirectLocation):
2013         (KJS::JSObject::getOwnPropertySlotForWrite):
2014         * kjs/property_map.cpp:
2015         (KJS::PropertyMap::getLocation):
2016         * kjs/property_map.h:
2017         * kjs/property_slot.h:
2018         (KJS::PropertySlot::putValue):
2019
2020 2008-05-20  Oliver Hunt  <oliver@apple.com>
2021
2022         Reviewed by Maciej.
2023
2024         Bug 19116: SquirrelFish shouldn't regress on variable lookups
2025         <https://bugs.webkit.org/show_bug.cgi?id=19116>
2026
2027         This restores multiscope optimisation to simple resolve, producing
2028         a 2.6% progression in SunSpider.  Have verified that none of the
2029         sites broken by the multiscope optimisation in trunk were effected
2030         by this change.
2031
2032         * VM/CodeBlock.cpp:
2033         (KJS::CodeBlock::dump):
2034         * VM/CodeBlock.h:
2035         (KJS::CodeBlock::CodeBlock):
2036         * VM/CodeGenerator.cpp:
2037         (KJS::CodeGenerator::findScopedProperty):
2038         (KJS::CodeGenerator::emitResolve):
2039         * VM/CodeGenerator.h:
2040         * VM/Machine.cpp:
2041         (KJS::resolve_n):
2042         (KJS::Machine::privateExecute):
2043         * VM/Opcode.h:
2044         * kjs/JSVariableObject.h:
2045
2046 2008-05-20  Oliver Hunt  <oliver@apple.com>
2047
2048         Reviewed by NOBODY (Build fix).
2049
2050         Fixerate the windows build.
2051
2052         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2053         * VM/CodeGenerator.cpp:
2054         * VM/RegisterFile.h:
2055         * kjs/JSGlobalObject.h:
2056         * kjs/Parser.cpp:
2057         * kjs/interpreter.h:
2058
2059 2008-05-20  Oliver Hunt  <oliver@apple.com>
2060
2061         Reviewed by Geoff.
2062
2063         Bug 19110: SquirrelFish: Google Maps - no maps
2064         <https://bugs.webkit.org/show_bug.cgi?id=19110>
2065
2066         Correct a comedy of errors present in my original patch to "fix"
2067         exceptions occurring midway through pre and post increment. This
2068         solution is cleaner than the original, doesn't need the additional
2069         opcodes, and as an added benefit does not break Google Maps.
2070
2071         Sunspider reports a 0.4% progression.
2072
2073         * VM/CodeBlock.cpp:
2074         (KJS::CodeBlock::dump):
2075         * VM/CodeGenerator.cpp:
2076         * VM/CodeGenerator.h:
2077         * VM/Machine.cpp:
2078         (KJS::Machine::privateExecute):
2079         * VM/Opcode.h:
2080         * kjs/nodes.cpp:
2081         (KJS::PreIncResolveNode::emitCode):
2082         (KJS::PreDecResolveNode::emitCode):
2083         (KJS::PreIncBracketNode::emitCode):
2084         (KJS::PreDecBracketNode::emitCode):
2085         (KJS::PreIncDotNode::emitCode):
2086         (KJS::PreDecDotNode::emitCode):
2087
2088 2008-05-20  Maciej Stachowiak  <mjs@apple.com>
2089
2090         Reviewed by Oliver.
2091         
2092         - inline JSGlobalObject::getOwnPropertySlot
2093         1% improvement on in-browser SunSpider (a wash command-line)
2094
2095         * kjs/JSGlobalObject.cpp:
2096         * kjs/JSGlobalObject.h:
2097         (KJS::JSGlobalObject::getOwnPropertySlot):
2098
2099 2008-05-18  Oliver Hunt  <oliver@apple.com>
2100
2101         Reviewed by Maciej.
2102
2103         Bug 18752: SQUIRRELFISH: exceptions are not always handled by the vm
2104         <https://bugs.webkit.org/show_bug.cgi?id=18752>
2105
2106         Handle exceptions thrown by toString conversion in subscript operators,
2107         this should basically complete exception handling in SquirrelFish.
2108
2109         Sunspider reports no regression.
2110
2111         * VM/Machine.cpp:
2112         (KJS::Machine::privateExecute):
2113
2114 2008-05-17  Geoffrey Garen  <ggaren@apple.com>
2115
2116         Reviewed by Oliver Hunt.
2117
2118         [Reapplying patch with previously missing files from r33553 -- Oliver]
2119
2120         Behold: debugging.
2121         
2122         SunSpider reports no change.
2123
2124         * JavaScriptCore.xcodeproj/project.pbxproj: Added DebuggerCallFrame.h/.cpp,
2125         and created a debugger folder.
2126
2127         * VM/CodeGenerator.cpp:
2128         (KJS::CodeGenerator::generate): If the debugger is attached, always
2129         generate full scope chains for its sake.
2130
2131         * VM/Machine.cpp:
2132         (KJS::Machine::unwindCallFrame): Notify the debugger when unwinding
2133         due to an exception, so it doesn't keep stale call frames around.
2134
2135         (KJS::Machine::execute): Set Callee to 0 in eval frames, so the
2136         debugger can distinguish them from function call frames.
2137
2138         (KJS::Machine::debug): Simplified this function, since the debugger
2139         doesn't actually need all the information we used to provide.
2140
2141         (KJS::Machine::privateExecute): Treat debugging hooks like other function
2142         calls, so the code we hook into (the debugger UI) can be optimized.
2143
2144         * kjs/debugger.cpp: Nixed these default callback implementations and
2145         made the callbacks pure virtual instead, so the compiler could tell me
2146         if I made a mistake in one of the subclasses.
2147
2148         * kjs/debugger.h: Removed a bunch of irrelevent data from the debugger
2149         callbacks. Changed from passing an ExecState* to passing a
2150         DebuggerCallFrame*, since an ExecState* doesn't contain sufficient
2151         information anymore.
2152
2153         * kjs/function.cpp:
2154         (KJS::globalFuncEval): Easiest bug fix evar!
2155
2156         [Previously missing files from r33553]
2157         * kjs/DebuggerCallFrame.cpp: Copied from JavaScriptCore/profiler/FunctionCallProfile.h.
2158         (KJS::DebuggerCallFrame::functionName):
2159         (KJS::DebuggerCallFrame::thisObject):
2160         (KJS::DebuggerCallFrame::evaluateScript):
2161         * kjs/DebuggerCallFrame.h: Copied from JavaScriptCore/VM/Register.h.
2162         (KJS::DebuggerCallFrame::DebuggerCallFrame):
2163         (KJS::DebuggerCallFrame::scopeChain):
2164         (KJS::DebuggerCallFrame::exception):
2165
2166 2008-05-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2167
2168         Reviewed by Oliver.
2169
2170         Bug 18991: SquirrelFish: Major codegen issue in a.b=expr, a[b]=expr
2171         <https://bugs.webkit.org/show_bug.cgi?id=18991>
2172
2173         Fix the last remaining blocking cases of this bug.
2174
2175         * kjs/grammar.y:
2176         * kjs/nodes.cpp:
2177         (KJS::ReadModifyResolveNode::emitCode):
2178
2179 2008-05-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2180
2181         Reviewed by Oliver.
2182
2183         Partial fix for:
2184
2185         Bug 18991: SquirrelFish: Major codegen issue in a.b=expr, a[b]=expr
2186         <https://bugs.webkit.org/show_bug.cgi?id=18991>
2187
2188         Ensure that the code generated for assignments uses temporaries whenever
2189         necessary. This patch covers the vast majority of situations, but there
2190         are still a few left.
2191
2192         This patch also adds some missing cases to CodeBlock::dump().
2193
2194         * VM/CodeBlock.cpp:
2195         (KJS::CodeBlock::dump):
2196         * VM/CodeGenerator.h:
2197         (KJS::CodeGenerator::destinationForAssignResult):
2198         (KJS::CodeGenerator::leftHandSideNeedsCopy):
2199         (KJS::CodeGenerator::emitNodeForLeftHandSide):
2200         * kjs/NodeInfo.h:
2201         * kjs/grammar.y:
2202         * kjs/nodes.cpp:
2203         (KJS::AssignDotNode::emitCode):
2204         (KJS::ReadModifyDotNode::emitCode):
2205         (KJS::AssignBracketNode::emitCode):
2206         (KJS::ReadModifyBracketNode::emitCode):
2207         (KJS::ForInNode::ForInNode):
2208         * kjs/nodes.h:
2209         (KJS::ReadModifyResolveNode::):
2210         (KJS::AssignResolveNode::):
2211         (KJS::ReadModifyBracketNode::):
2212         (KJS::AssignBracketNode::):
2213         (KJS::AssignDotNode::):
2214         (KJS::ReadModifyDotNode::):
2215
2216 2008-05-17  Oliver Hunt  <oliver@apple.com>
2217
2218         Reviewed by Maciej.
2219
2220         Bug 19106: SquirrelFish: Activation is not marked correctly
2221         <https://bugs.webkit.org/show_bug.cgi?id=19106>
2222
2223         We can't rely on the symbol table for a count of the number of globals
2224         we need to mark as that misses duplicate parameters and 'this'.  Now we
2225         use the actual local register count from the codeBlock.
2226
2227         * kjs/JSActivation.cpp:
2228         (KJS::JSActivation::mark):
2229
2230 2008-05-16  Oliver Hunt  <oliver@apple.com>
2231
2232         Reviewed by Geoff.
2233
2234         Bug 19076: SquirrelFish: RegisterFile can be corrupted if implictly reenter global scope with no declared vars
2235         <https://bugs.webkit.org/show_bug.cgi?id=19076>
2236
2237         Don't delay allocation of initial global RegisterFile, as we can't guarantee we will be able
2238         to allocate the global 'this' register safely at any point after initialisation of the Global
2239         Object.
2240
2241         Unfortunately this initial allocation caused a regression of 0.2-0.3%, however this patch adds
2242         support for the static slot optimisation for the global Math object which brings it to a 0.3%
2243         progression.
2244
2245         * VM/CodeGenerator.cpp:
2246         (KJS::CodeGenerator::programCodeThis):
2247         (KJS::CodeGenerator::CodeGenerator):
2248         (KJS::CodeGenerator::addParameter):
2249         * VM/CodeGenerator.h:
2250         * VM/Machine.cpp:
2251         (KJS::Machine::execute):
2252         * kjs/ExecState.h:
2253         * kjs/JSGlobalObject.cpp:
2254         (KJS::JSGlobalObject::reset):
2255         * kjs/JSGlobalObject.h:
2256         (KJS::JSGlobalObject::GlobalPropertyInfo::GlobalPropertyInfo):
2257         (KJS::JSGlobalObject::addStaticGlobals):
2258         * kjs/nodes.cpp:
2259
2260 2008-05-16  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2261
2262         Reviewed by Oliver Hunt.
2263
2264         Bug 19098: SquirrelFish: Ref'd temporaries can be clobbered
2265         <https://bugs.webkit.org/show_bug.cgi?id=19098>
2266
2267         When doing code generation for a statement list, increase the reference
2268         count on a register that might eventually be returned, so that it doesn't
2269         get clobbered by a request for a new temporary.
2270
2271         * kjs/nodes.cpp:
2272         (KJS::statementListEmitCode):
2273
2274 2008-05-16  Maciej Stachowiak  <mjs@apple.com>
2275
2276         Reviewed by Oliver.
2277         
2278         - fixed Bug 19044: SquirrelFish: Bogus values enter evaluation when closing over scope with parameter and var with same name
2279         https://bugs.webkit.org/show_bug.cgi?id=19044
2280
2281         * kjs/JSActivation.cpp:
2282         (KJS::JSActivation::copyRegisters): Use numLocals from the code
2283         block rather than the size of the symbol table for the number of
2284         registers to copy, to account for duplicate parameters and vars
2285         with the same name as parameters (we still have potentially
2286         suboptimal codegen in that we allocate a local register for the
2287         var in the latter case but it is never used).
2288         
2289 2008-05-15  Geoffrey Garen  <ggaren@apple.com>
2290
2291         Not reviewed.
2292         
2293         We regret to inform you that your program is crashing because you were
2294         stupid.
2295
2296         * VM/Machine.cpp:
2297         (KJS::Machine::privateExecute): Math is hard.
2298
2299 2008-05-14  Geoffrey Garen  <ggaren@apple.com>
2300
2301         Reviewed by Oliver Hunt.
2302
2303         A little more debugger action: filled in op_debug. All debugger control
2304         flow works now, but variable inspection and backtraces still don't.
2305         
2306         SunSpider reports no change.
2307
2308         * VM/CodeGenerator.cpp: Changed op_debug to accept line number parameters.
2309
2310         * VM/Machine.cpp:
2311         (KJS::Machine::getFunctionAndArguments): Moved op_debug into a
2312         NEVER_INLINE function to avoid a stunning 10% performance regression.
2313         Also factored out a common function for retrieving the function and 
2314         arguments from a  call frame. 
2315
2316         * kjs/JSActivation.cpp:
2317         (KJS::JSActivation::createArgumentsObject): Use the new factored out
2318         function mentioned above.
2319
2320         * kjs/Parser.cpp:
2321         (KJS::Parser::parse): Increment m_sourceId before assigning it, so the
2322         sourceId we send to the debugger matches the sourceId recorded in the
2323         node.
2324
2325         * kjs/nodes.cpp: Emit debugging hooks.
2326
2327 2008-05-14  Oliver Hunt  <oliver@apple.com>
2328
2329         Reviewed by Maciej.
2330
2331         Bug 19024: SQUIRRELFISH: ASSERTION FAILED: activation->isActivationObject() in Machine::unwindCallFrame
2332         <https://bugs.webkit.org/show_bug.cgi?id=19024>
2333
2334         This fixes a number of issues.  The most important is that we now check every register
2335         file for tainting rather than just looking for function register files as that was
2336         insufficient. Additionally guarded against implicit re-entry into Eval code.
2337
2338         Also added a few additional assertions to reduce the amout of time between something
2339         going wrong and us seeing the error.
2340
2341         * VM/Machine.cpp:
2342         (KJS::Machine::execute):
2343         (KJS::Machine::privateExecute):
2344         * VM/RegisterFile.cpp:
2345         (KJS::RegisterFile::growBuffer):
2346         (KJS::RegisterFile::addGlobalSlots):
2347         * VM/RegisterFileStack.cpp:
2348         (KJS::RegisterFileStack::pushGlobalRegisterFile):
2349         (KJS::RegisterFileStack::pushFunctionRegisterFile):
2350         * VM/RegisterFileStack.h:
2351         (KJS::RegisterFileStack::inImplicitCall):
2352
2353 2008-05-14  Geoffrey Garen  <ggaren@apple.com>
2354
2355         Reviewed by Oliver Hunt.
2356         
2357         A little more debugger action: emit opcodes for debugger hooks. Right
2358         now, the opcode implementation is just a stub.
2359         
2360         SunSpider reports no change.
2361         
2362         Some example codegen for "function f() { 1; }":
2363
2364             [   0] dbg         DidEnterCallFrame
2365             [   2] dbg         WillExecuteStatement
2366             [   4] load        tr0, 1(@k0)
2367             [   7] load        tr0, undefined(@k1)
2368             [  10] dbg         WillLeaveCallFrame
2369             [  12] ret         tr0
2370
2371 2008-05-14  Oliver Hunt  <oliver@apple.com>
2372
2373         Reviewed by Geoff.
2374
2375         Bug 19025: SQUIRRELFISH: malformed syntax in onload handler causes crash
2376         <https://bugs.webkit.org/show_bug.cgi?id=19025>
2377
2378         Simple fix -- move the use of functionBodyNode to after the null check.
2379
2380         * kjs/function_object.cpp:
2381         (KJS::FunctionObjectImp::construct):
2382
2383 2008-05-13  Geoffrey Garen  <ggaren@apple.com>
2384
2385         Reviewed by Oliver Hunt.
2386         
2387         Fixed a codegen crash with run-time parse errors.
2388         
2389         SunSpider reports no change.
2390         
2391         emitThrowError needs to return the temporary holding the error, not dst,
2392         since dst may be NULL. In fact, emitThrowError shouldn't take a dst
2393         parameter at all, since exceptions should not modify the destination
2394         register.
2395
2396 2008-05-13  Oliver Hunt  <oliver@apple.com>
2397
2398         Reviewed by Geoff.
2399
2400         Bug 19027: SquirrelFish: Incorrect codegen for pre-increment
2401         <https://bugs.webkit.org/show_bug.cgi?id=19027>
2402
2403         This fixes the codegen issues for the pre-inc/decrement operators
2404         to prevent incorrectly clobbering the destination in the event of
2405         an exception.
2406
2407         * VM/CodeBlock.cpp:
2408         (KJS::CodeBlock::dump):
2409         * VM/CodeGenerator.cpp:
2410         (KJS::CodeGenerator::emitPreInc):
2411         (KJS::CodeGenerator::emitPreDec):
2412         * VM/CodeGenerator.h:
2413         * VM/Machine.cpp:
2414         (KJS::Machine::privateExecute):
2415         * VM/Opcode.h:
2416         * kjs/nodes.cpp:
2417         (KJS::PreIncResolveNode::emitCode):
2418         (KJS::PreDecResolveNode::emitCode):
2419         (KJS::PreIncBracketNode::emitCode):
2420         (KJS::PreDecBracketNode::emitCode):
2421         (KJS::PreIncDotNode::emitCode):
2422         (KJS::PreDecDotNode::emitCode):
2423
2424 2008-05-13  Geoffrey Garen  <ggaren@apple.com>
2425
2426         Reviewed by Oliver Hunt.
2427         
2428         A little more debugger action: supply a real line number, sourceId,
2429         and sourceURL in op_new_error.
2430         
2431         SunSpider reports a .2% speedup. Not sure what that's about.
2432
2433         * VM/Machine.cpp:
2434         (KJS::Machine::privateExecute): Use the new good stuff in op_new_error.
2435
2436         * kjs/nodes.cpp:
2437         (KJS::RegExpNode::emitCode): Use the shared emitThrowError instead of
2438         rolling our own.
2439
2440 2008-05-13  Geoffrey Garen  <ggaren@apple.com>
2441
2442         Reviewed by Oliver Hunt.
2443         
2444         A little more debugger action: implemented the exception callback.
2445         
2446         SunSpider reports a .2% speedup. Not sure what that's about.
2447
2448         * VM/CodeBlock.h: A little refactoring here. Store a pointer to our
2449         owner ScopeNode so we can retrieve data from it. This allows us to
2450         stop storing copies of the data ourselves. Also, store a "this" register
2451         instead of a code type, since we were only using the code type to
2452         calculate the "this" register.
2453
2454         * VM/CodeGenerator.cpp:
2455         (KJS::CodeGenerator::generate): Calculate the "this" register mentioned
2456         above. Also, take care of removing "this" from the symbol table after
2457         codegen is done, since relying on the timing of a destructor for correct
2458         behavior is not so good.
2459
2460         * VM/Machine.cpp:
2461         (KJS::Machine::throwException): Invoke the debugger's exception callback.
2462         (KJS::Machine::privateExecute): Use the "this" register mentioned above.
2463
2464 2008-05-13  Geoffrey Garen  <ggaren@apple.com>
2465
2466         Reviewed by Oliver Hunt.
2467         
2468         Removed some unused exception machinery.
2469         
2470         SunSpider reports a .3% speedup.
2471
2472         * API/JSCallbackObject.h:
2473         * API/JSCallbackObjectFunctions.h:
2474         * JavaScriptCore.exp:
2475         * VM/Machine.cpp:
2476         (KJS::Machine::privateExecute):
2477         * kjs/internal.cpp:
2478         * kjs/object.cpp:
2479         * kjs/object.h:
2480         * kjs/value.h:
2481
2482 2008-05-13  Geoffrey Garen  <ggaren@apple.com>
2483
2484         Reviewed by Oliver Hunt.
2485         
2486         A little more debugger action.
2487
2488         * kjs/debugger.cpp:
2489         * kjs/debugger.h: Removed debuggersPresent because it was unused.
2490         Replaced AttachedGlobalObject linked list with a HashSet because HashSet
2491         is faster and simpler. Changed all functions to return void instead of
2492         bool, because no clients ever return false, and we don't want to support
2493         it.
2494
2495         * kjs/nodes.cpp: Did some up-keep to avoid build bustage.
2496         (KJS::Node::handleException):
2497         (KJS::BreakpointCheckStatement::execute):
2498         (KJS::FunctionBodyNodeWithDebuggerHooks::execute):
2499
2500 2008-05-13  Oliver Hunt  <oliver@apple.com>
2501
2502         Reviewed by Darin.
2503
2504         Bug 18752: SQUIRRELFISH: exceptions are not always handled by the vm
2505         <https://bugs.webkit.org/show_bug.cgi?id=18752>
2506
2507         Replace old attempt at "branchless" exceptions as the extra information
2508         being passed made gcc an unhappy compiler, replacing these custom toNumber
2509         calls with ordinary toNumber logic (by relying on toNumber now preventing
2510         side effects after an exception has been thrown) provided sufficient leeway
2511         to add the additional checks for the remaining unchecked cases.
2512
2513         This leaves only toString conversions in certain contexts as possibly
2514         misbehaving.
2515
2516         * VM/Machine.cpp:
2517         (KJS::jsAdd):
2518         (KJS::resolve):
2519         (KJS::resolveBaseAndProperty):
2520         (KJS::resolveBaseAndFunc):
2521         (KJS::Machine::privateExecute):
2522         * VM/Opcode.h:
2523         * kjs/value.h:
2524         (KJS::JSValue::safeGetNumber):
2525
2526 2008-05-13  Geoffrey Garen  <ggaren@apple.com>
2527
2528         Reviewed by Oliver Hunt.
2529         
2530         First steps toward supporting the debugger API: support the sourceParsed
2531         callback; plus some minor fixups.
2532
2533         SunSpider reports no regression.
2534
2535         * VM/CodeGenerator.h: Removed a misleading comment.
2536
2537         * kjs/Parser.h: Changed the parser to take an ExecState*, so it can
2538         implement the sourceParsed callback -- that way, we only have to
2539         implement the callback in one place.
2540
2541         * kjs/debugger.cpp: Nixed DebuggerImp, because its sole purpose in life
2542         was to demonstrate the misapplication of design patterns.
2543
2544         * kjs/debugger.h: Changed sourceParsed to take a SourceProvider, to
2545         reduce copying, and not to return a value, because pausing execution
2546         after parsing is complicated, and no clients needed that ability, anyway.
2547
2548         * kjs/grammar.y: Make sure never to pass a NULL SourceElements* to
2549         didFinishParsing -- that simplifies some code down the road.
2550         
2551         * kjs/nodes.cpp: Don't generate special AST nodes just because the
2552         debugger is attached -- that's a relic of the old AST execution model,
2553         and those nodes haven't been maintained.
2554
2555 2008-05-13  Oliver Hunt  <oliver@apple.com>
2556
2557         Reviewed by Geoff.
2558
2559         Bug 18752: SQUIRRELFISH: exceptions are not always handled by the vm
2560         <https://bugs.webkit.org/show_bug.cgi?id=18752>
2561
2562         First step: prevent incorrect evaluation of valueOf/toString conversion
2563         in right hand side of expression after earlier conversion throws.
2564
2565         * API/JSCallbackObjectFunctions.h:
2566         (KJS::::toNumber):
2567         * kjs/object.cpp:
2568         (KJS::JSObject::defaultValue):
2569
2570 2008-05-12  Oliver Hunt  <oliver@apple.com>
2571
2572         Reviewed by Geoff.
2573
2574         Bug 18934: SQUIRRELFISH: ASSERT @ nytimes.com due to RegisterFile being clobbered
2575         <https://bugs.webkit.org/show_bug.cgi?id=18934>
2576
2577         Unfortunately we cannot create new statically optimised globals if there are any
2578         tainted RegisterFiles on the RegisterFileStack.  To handle this we re-introduce
2579         (in a slightly cleaner form) the inImplicitCall concept to the RegisterFileStack.
2580
2581         * VM/Machine.cpp:
2582         (KJS::Machine::execute):
2583         * VM/RegisterFileStack.cpp:
2584         (KJS::RegisterFileStack::pushFunctionRegisterFile):
2585         * VM/RegisterFileStack.h:
2586
2587 2008-05-12  Geoffrey Garen  <ggaren@apple.com>
2588
2589         Reviewed by Maciej Stachowiak.
2590         
2591         Introduced support for function.caller.
2592         
2593         Improved support for walking interesting scopes for function introspection.
2594         
2595         This fixes all remaining layout tests not blocked by rebasing to trunk.
2596         
2597         SunSpider reports no change.
2598
2599         * VM/Machine.cpp:
2600         (KJS::Machine::dumpRegisters): Fixed a spacing issue.
2601
2602 2008-05-11  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2603
2604         Reviewed by Oliver.
2605
2606         Bug 18961: SQUIRRELFISH: Gmail doesn't load
2607         <https://bugs.webkit.org/show_bug.cgi?id=18961>
2608
2609         Fix codegen for logical nodes so that they don't use their destination
2610         as a temporary.
2611
2612         * kjs/nodes.cpp:
2613         (KJS::LogicalAndNode::emitCode):
2614         (KJS::LogicalOrNode::emitCode):
2615
2616 2008-05-10  Maciej Stachowiak  <mjs@apple.com>
2617
2618         Reviewed by Oliver.
2619
2620         - JavaScriptCore part of fix for: "SQUIRRELFISH: function toString broken after calling"
2621         https://bugs.webkit.org/show_bug.cgi?id=18869
2622        
2623         Three layout tests are fixed:
2624           fast/js/toString-elision-trailing-comma.html
2625           fast/js/toString-prefix-postfix-preserve-parens.html
2626           fast/js/kde/lval-exceptions.html
2627         
2628         Functions now save a shared subrange of the original source used
2629         to make them (so in the common case this adds no storage above the
2630         memory cache).
2631         
2632         * kjs/SourceProvider.h: Added.
2633         (KJS::SourceProvider): New abstract base class for classes that provide on-demand access
2634         to the source for a JavaScript program. This allows function objects to have access to their
2635         original source without copying.
2636         (KJS::UStringSourceProvider): SourceProvider subclass backed by a KJS::UString.
2637         (KJS::UStringSourceProvider::create):
2638         (KJS::UStringSourceProvider::getRange):
2639         (KJS::UStringSourceProvider::data):
2640         (KJS::UStringSourceProvider::length):
2641         (KJS::UStringSourceProvider::UStringSourceProvider):
2642         * kjs/SourceRange.h: Added.
2643         (KJS::SourceRange::SourceRange): Class that holds a SourceProvider and a character range into
2644         the source, to encapsulate on-demand access to the source of a function.
2645         (KJS::SourceRange::toString):
2646         * VM/Machine.cpp:
2647         (KJS::eval): Pass a UStringSourceProvider to the parser.
2648         * kjs/Parser.cpp:
2649         (KJS::Parser::parse): Take a SourceProvider and pass it on to the lexer.
2650         * kjs/Parser.h:
2651         (KJS::Parser::parse): Take a SourceProvider.
2652         * kjs/lexer.cpp:
2653         (KJS::Lexer::setCode): Take a SourceProvider; keep it around, and
2654         use it to get the raw buffer and length.
2655         * kjs/lexer.h:
2656         (KJS::Lexer::sourceRange): Convenience function to get a source
2657         range based on the lexer's source provieder, and char offsets
2658         right before and after the desired range.
2659         * kjs/function.cpp:
2660         (KJS::globalFuncEval): Pass a UStringSourceProvider to the parser.
2661         * kjs/function_object.cpp:
2662         (KJS::functionProtoFuncToString): Use toSourceString to get the source.
2663         (KJS::FunctionObjectImp::construct): Give the parser a UStringSourceProvider.
2664         * kjs/grammar.y: When parsing a function declaration, function
2665         expression, or getter or setter, tell the function body about its
2666         SourceRange.
2667         * kjs/interpreter.cpp:
2668         (KJS::Interpreter::checkSyntax): Pass a SourceProvider to the parser.
2669         (KJS::Interpreter::evaluate): Pass a SourceProvider to the parser.
2670         * kjs/interpreter.h:
2671         * kjs/nodes.h:
2672         (KJS::FunctionBodyNode::setSource): Establish a SourceRange for this function.
2673         (KJS::FunctionBodyNode::toSourceString): Get the source string out
2674         of the SourceRange.
2675         (KJS::FuncExprNode::): Take a SourceRange and set it on the body.
2676         (KJS::FuncDeclNode::): ditto
2677         * kjs/testkjs.cpp:
2678         (prettyPrintScript): Use a SourceProvider appropriately.
2679         * JavaScriptCore.exp: Export new symbols.
2680         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add new files.
2681         * JavaScriptCore.xcodeproj/project.pbxproj: Add new files.
2682
2683 2008-05-09  Oliver Hunt  <oliver@apple.com>
2684
2685         Reviewed by Maciej.
2686
2687         Bring back RegisterFile tainting in order to correctly handle
2688         natively implemented getters and setters that re-enter JavaScript
2689
2690         * VM/Machine.cpp:
2691         (KJS::Machine::privateExecute):
2692         * VM/RegisterFile.h:
2693         * kjs/function.cpp:
2694         (KJS::FunctionImp::callAsFunction):
2695         * kjs/object.cpp:
2696         (KJS::JSObject::put):
2697         (KJS::tryGetAndCallProperty):
2698         * kjs/property_slot.cpp:
2699         (KJS::PropertySlot::functionGetter):
2700
2701 2008-05-09  Maciej Stachowiak  <mjs@apple.com>
2702
2703         Reviewed by Oliver.
2704         
2705         - track character offsets of open and close braces, in preparation for saving function source
2706         
2707         I verified that there is no performance regression from this change.
2708
2709         * kjs/grammar.y:
2710         * kjs/lexer.cpp:
2711         (KJS::Lexer::lex):
2712         (KJS::Lexer::matchPunctuator):
2713         * kjs/lexer.h:
2714
2715 2008-05-09  Oliver Hunt  <oliver@apple.com>
2716
2717         Reviewed by Nobody (build fix).
2718
2719         Debug build fix
2720
2721         * kjs/JSGlobalObject.cpp:
2722         (KJS::JSGlobalObject::restoreLocalStorage):
2723
2724 2008-05-09  Oliver Hunt  <oliver@apple.com>
2725
2726         Reviewed by Geoff.
2727
2728         Build fixes for SquirrelFish on windows.
2729
2730         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2731         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
2732         * VM/Register.h:
2733         * kjs/JSGlobalObject.cpp:
2734         (KJS::JSGlobalObject::restoreLocalStorage):
2735         * kjs/collector.cpp:
2736         (KJS::Collector::allocate):
2737         (KJS::Collector::allocateNumber):
2738         * kjs/collector.h:
2739         (KJS::Collector::allocate):
2740         (KJS::Collector::allocateNumber):
2741         * kjs/property_slot.cpp:
2742
2743 2008-05-08  Maciej Stachowiak  <mjs@apple.com>
2744
2745         Reviewed by Geoff.
2746         
2747         - fix activation tearoff in the case where functions are called with too many arguments
2748         
2749         Fixes:
2750         fast/canvas/patternfill-repeat.html
2751         fast/dom/SelectorAPI/bug-17313.html
2752
2753         * VM/Machine.cpp:
2754         (KJS::slideRegisterWindowForCall):
2755         (KJS::scopeChainForCall):
2756         (KJS::Machine::execute):
2757         (KJS::Machine::privateExecute):
2758
2759 2008-05-08  Geoffrey Garen  <ggaren@apple.com>
2760
2761         Reviewed by Oliver Hunt.
2762         
2763         Fixed failure in fast/canvas/canvas-pattern-behaviour.html.
2764         
2765         SunSpider reports a small speedup. Not sure what that's about.
2766
2767         * VM/CodeBlock.cpp:
2768         (KJS::CodeBlock::dump): Fixed op_call_eval to dump as "op_call_eval".
2769         This helped me while debugging.
2770
2771         * VM/Machine.cpp:
2772         (KJS::Machine::unwindCallFrame): When looking for an activation to tear
2773         off, don't use the scope chain. Inside eval, the scope chain doesn't
2774         belong to us; it belongs to our calling function.
2775         
2776         Also, don't use the needsFullScopeChain flag to decide whether to tear
2777         off the activation. "function.arguments" can create an activation
2778         for a function whose needsFullScopeChain flag is set to false.
2779
2780 2008-05-08  Maciej Stachowiak  <mjs@apple.com>
2781
2782         Reviewed by Oliver.
2783         
2784         - fix function.call for calls of more than 8 arguments
2785         
2786         Fixes svg/carto.net/button.svg
2787
2788         * kjs/list.cpp:
2789         (KJS::List::getSlice): properly set up the m_buffer of the target list.
2790
2791 2008-05-08  Maciej Stachowiak  <mjs@apple.com>
2792
2793         Reviewed by Oliver.
2794         
2795         - don't return a null RegisterID from RegExpNode in the exception case, since the caller may need a real register
2796
2797         Fixes:
2798         - fast/regex/early-acid3-86.html
2799         - http/tests/misc/acid3.html
2800         
2801         * kjs/nodes.cpp:
2802         (KJS::RegExpNode::emitCode):
2803
2804 2008-05-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2805
2806         Reviewed by Oliver.
2807
2808         Fix a performance regression caused by the introduction of property
2809         attributes to SymbolTable in r32859 by encoding the attributes and the
2810         register index into a single field of SymbolTableEntry.
2811
2812         This leaves Node::optimizeVariableAccess() definitely broken, although
2813         it was probably not entirely correct in SquirrelFish before this change.
2814
2815         * VM/CodeBlock.h:
2816         (KJS::missingThisObjectMarker):
2817         * VM/CodeGenerator.cpp:
2818         (KJS::CodeGenerator::addVar):
2819         (KJS::CodeGenerator::CodeGenerator):
2820         (KJS::CodeGenerator::registerForLocal):
2821         (KJS::CodeGenerator::registerForLocalConstInit):
2822         (KJS::CodeGenerator::isLocalConstant):
2823         (KJS::CodeGenerator::addConstant):
2824         (KJS::CodeGenerator::emitCall):
2825         * VM/CodeGenerator.h:
2826         (KJS::CodeGenerator::IdentifierMapIndexHashTraits::emptyValue):
2827         * VM/Machine.cpp:
2828         (KJS::Machine::privateExecute):
2829         * kjs/JSGlobalObject.cpp:
2830         (KJS::JSGlobalObject::saveLocalStorage):
2831         * kjs/JSVariableObject.cpp:
2832         (KJS::JSVariableObject::getPropertyNames):
2833         (KJS::JSVariableObject::getPropertyAttributes):
2834         * kjs/JSVariableObject.h:
2835         (KJS::JSVariableObject::symbolTableGet):
2836         (KJS::JSVariableObject::symbolTablePut):
2837         (KJS::JSVariableObject::symbolTablePutWithAttributes):
2838         * kjs/SymbolTable.h:
2839         (KJS::SymbolTableEntry::SymbolTableEntry):
2840         (KJS::SymbolTableEntry::isEmpty):
2841         (KJS::SymbolTableEntry::getIndex):
2842         (KJS::SymbolTableEntry::getAttributes):
2843         (KJS::SymbolTableEntry::setAttributes):
2844         (KJS::SymbolTableEntry::isReadOnly):
2845         * kjs/nodes.cpp:
2846         (KJS::getSymbolTableEntry):
2847         (KJS::PostIncResolveNode::optimizeVariableAccess):
2848         (KJS::PostDecResolveNode::optimizeVariableAccess):
2849         (KJS::DeleteResolveNode::optimizeVariableAccess):
2850         (KJS::TypeOfResolveNode::optimizeVariableAccess):
2851         (KJS::PreIncResolveNode::optimizeVariableAccess):
2852         (KJS::PreDecResolveNode::optimizeVariableAccess):
2853         (KJS::ReadModifyResolveNode::optimizeVariableAccess):
2854         (KJS::AssignResolveNode::optimizeVariableAccess):
2855         (KJS::ProgramNode::initializeSymbolTable):
2856
2857 2008-05-06  Maciej Stachowiak  <mjs@apple.com>
2858
2859         Rubber stamped by Oliver.
2860         
2861         - add missing ! in an assert that I failed to reverse
2862
2863         * VM/CodeGenerator.cpp:
2864         (KJS::CodeGenerator::CodeGenerator):
2865
2866 2008-05-06  Maciej Stachowiak  <mjs@apple.com>
2867
2868         Reviewed by Oliver.
2869         
2870         - fixed "SQUIRRELFISH: window.this shows up as a property, but it shouldn't"
2871         https://bugs.webkit.org/show_bug.cgi?id=18868
2872         
2873         The basic approach is to have "this" only be present in the symbol
2874         table at compile time, not runtime.
2875
2876         * VM/CodeGenerator.cpp:
2877         (KJS::CodeGenerator::~CodeGenerator): Remove "this" from symbol table.
2878         (KJS::CodeGenerator::CodeGenerator): Add "this" back when re-using
2879         a symbol table.
2880         * VM/CodeGenerator.h:
2881         * VM/Machine.cpp:
2882         (KJS::Machine::execute): Don't assert that "this" is in the symbol table.
2883
2884 2008-05-06  Geoffrey Garen  <ggaren@apple.com>
2885
2886         Reviewed by Oliver Hunt.
2887         
2888         Trivial support for function.arguments: Currently, we only support
2889         function.arguments from within the scope of function.
2890         
2891         This fixes the remaining Mozilla JS test failures.
2892         
2893         SunSpider reports no change.
2894
2895         * JavaScriptCore.exp:
2896
2897         * VM/Machine.cpp:
2898         (KJS::Machine::privateExecute): Separated scope chain deref from
2899         activation register copying: since it is now possible for client code
2900         to create an activation on behalf of a function that otherwise wouldn't
2901         need one, having an activation no longer necessarily means that you need
2902         to deref the scope chain.
2903         
2904         (KJS::Machine::getCallFrame): For now, this function only examines the
2905         current scope. Walking parent scopes requires some refactoring in the
2906         way we track execution stacks.
2907
2908         * kjs/ExecState.cpp:
2909         (KJS::ExecState::ExecState): We use a negative call frame offset to
2910         indicate that a given scope is not a function call scope.
2911         
2912 2008-05-05  Oliver Hunt  <oliver@apple.com>
2913
2914         Reviewed by Geoff.
2915
2916         Fix call frame set up for native -> JS function calls.
2917
2918         * VM/Machine.cpp:
2919         (KJS::Machine::execute):
2920
2921 2008-05-05  Geoffrey Garen  <ggaren@apple.com>
2922
2923         Reviewed by Maciej Stachowiak.
2924         
2925         Fixed ecma_3/Object/8.6.2.6-001.js, and similar bugs.
2926         
2927         SunSpider reports a .4% speedup. Not sure what that's about.
2928
2929         * VM/Machine.cpp:
2930         (KJS::Machine::privateExecute): Check for exception return from equal,
2931         since toPrimitive can throw.
2932
2933         * kjs/operations.cpp:
2934         (KJS::strictEqual): In response to an error I made in an earlier version
2935         of this patch, I changed strictEqual to make clear the fact that it
2936         performs no conversions and can't throw, making it slightly more efficient
2937         in the process.
2938
2939 2008-05-05  Maciej Stachowiak  <mjs@apple.com>
2940
2941         Reviewed by Oliver.
2942         
2943         - fix some dumb mistakes in my last patch
2944
2945         * VM/CodeGenerator.cpp:
2946         (KJS::CodeGenerator::emitPushScope):
2947         (KJS::CodeGenerator::emitGetPropertyNames):
2948         * VM/Machine.cpp:
2949         (KJS::Machine::privateExecute):
2950
2951 2008-05-05  Maciej Stachowiak  <mjs@apple.com>
2952
2953         Reviewed by Oliver.
2954         
2955         - document opcodes relating to jumps, scopes, and property name iteration
2956         
2957         Documented jmp, jtrue, false, push_scope, pop_scope, get_pnames,
2958         next_pname and jmp_scopes.
2959
2960         * VM/CodeGenerator.cpp:
2961         (KJS::CodeGenerator::emitJump):
2962         (KJS::CodeGenerator::emitJumpIfTrue):
2963         (KJS::CodeGenerator::emitJumpIfFalse):
2964         (KJS::CodeGenerator::emitPushScope):
2965         (KJS::CodeGenerator::emitNextPropertyName):
2966         (KJS::CodeGenerator::emitGetPropertyNames):
2967         * VM/CodeGenerator.h:
2968         * VM/Machine.cpp:
2969         (KJS::Machine::privateExecute):
2970         * kjs/nodes.cpp:
2971         (KJS::LogicalAndNode::emitCode):
2972         (KJS::LogicalOrNode::emitCode):
2973         (KJS::ConditionalNode::emitCode):
2974         (KJS::IfNode::emitCode):
2975         (KJS::IfElseNode::emitCode):
2976         (KJS::DoWhileNode::emitCode):
2977         (KJS::WhileNode::emitCode):
2978         (KJS::ForNode::emitCode):
2979         (KJS::ForInNode::emitCode):
2980         (KJS::WithNode::emitCode):
2981
2982 2008-05-05  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2983
2984         Reviewed by Oliver.
2985
2986         Bug 18749: SQUIRRELFISH: const support is broken
2987         <https://bugs.webkit.org/show_bug.cgi?id=18749>
2988
2989         Adds support for const during code generation.
2990
2991         Fixes 2 layout tests.
2992
2993         * ChangeLog:
2994         * VM/CodeGenerator.cpp:
2995         (KJS::CodeGenerator::addVar):
2996         (KJS::CodeGenerator::CodeGenerator):
2997         (KJS::CodeGenerator::isLocalConstant):
2998         * VM/CodeGenerator.h:
2999         (KJS::CodeGenerator::addVar):
3000         * kjs/nodes.cpp:
3001         (KJS::PostIncResolveNode::emitCode):
3002         (KJS::PostDecResolveNode::emitCode):
3003         (KJS::PreIncResolveNode::emitCode):
3004         (KJS::PreDecResolveNode::emitCode):
3005         (KJS::ReadModifyResolveNode::emitCode):
3006         (KJS::AssignResolveNode::emitCode):
3007
3008 2008-05-04  Maciej Stachowiak  <mjs@apple.com>
3009
3010         Reviewed by Geoff.
3011         
3012         - document some more opcodes (and fix argument names)
3013         
3014         Added docs for eq, neq, stricteq, nstriceq, less and lesseq.
3015
3016         * VM/CodeGenerator.cpp:
3017         (KJS::CodeGenerator::emitEqual):
3018         (KJS::CodeGenerator::emitNotEqual):
3019         (KJS::CodeGenerator::emitStrictEqual):
3020         (KJS::CodeGenerator::emitNotStrictEqual):
3021         (KJS::CodeGenerator::emitLess):
3022         (KJS::CodeGenerator::emitLessEq):
3023         * VM/CodeGenerator.h:
3024         * VM/Machine.cpp:
3025         (KJS::Machine::privateExecute):
3026         * kjs/nodes.cpp:
3027         (KJS::LessNode::emitCode):
3028         (KJS::GreaterNode::emitCode):
3029         (KJS::LessEqNode::emitCode):
3030         (KJS::GreaterEqNode::emitCode):
3031         (KJS::EqualNode::emitCode):
3032         (KJS::NotEqualNode::emitCode):
3033         (KJS::StrictEqualNode::emitCode):
3034         (KJS::NotStrictEqualNode::emitCode):
3035         (KJS::CaseBlockNode::emitCodeForBlock):
3036
3037 2008-05-04  Geoffrey Garen  <ggaren@apple.com>
3038
3039         Reviewed by Maciej Stachowiak.
3040
3041         More scaffolding for f.arguments.
3042         
3043         Track the offset of the last call frame in the ExecState, so we can
3044         produce a backtrace at any time.
3045         
3046         Also, record numLocals, the sum of numVars + numParameters, in each code
3047         block, to make updates to the ExecState a little cheaper than they
3048         would be otherwise.
3049         
3050         We now use numLocals in a bunch of places where we used to calculate
3051         numVars + numParameters or -numVars - numParameters.
3052         
3053         Reports are mixed, but all in all, this seems to be a wash on SunSpider.
3054
3055 2008-05-04  Oliver Hunt  <oliver@apple.com>
3056
3057         Reviewed by Geoff.
3058
3059         Whoops, correctly handle properties that don't exist in the 
3060         symbol table.
3061
3062         * kjs/JSVariableObject.h:
3063         (KJS::JSVariableObject::symbolTablePutWithAttributes):
3064
3065 2008-05-04  Oliver Hunt  <oliver@apple.com>
3066
3067         Reviewed by Geoff.
3068
3069         Add attribute information to SymbolTable as ground work for
3070         various DontEnum and ReadOnly issues.
3071
3072         * VM/CodeGenerator.cpp:
3073         (KJS::CodeGenerator::addVar):
3074         (KJS::CodeGenerator::CodeGenerator):
3075         (KJS::CodeGenerator::registerForLocal):
3076         (KJS::CodeGenerator::registerForLocalConstInit):
3077         (KJS::CodeGenerator::addConstant):
3078         * VM/Machine.cpp:
3079         (KJS::Machine::execute):
3080         * kjs/JSGlobalObject.cpp:
3081         (KJS::JSGlobalObject::saveLocalStorage):
3082         * kjs/JSVariableObject.cpp:
3083         (KJS::JSVariableObject::getPropertyNames):
3084         (KJS::JSVariableObject::getPropertyAttributes):
3085         * kjs/JSVariableObject.h:
3086         (KJS::JSVariableObject::symbolTablePut):
3087         (KJS::JSVariableObject::symbolTablePutWithAttributes):
3088         * kjs/SymbolTable.h:
3089         (KJS::SymbolTableEntry::SymbolTableEntry):
3090         (KJS::SymbolTableIndexHashTraits::emptyValue):
3091         * kjs/nodes.cpp:
3092         (KJS::getSymbolTableEntry):
3093         (KJS::ReadModifyResolveNode::optimizeVariableAccess):
3094         (KJS::AssignResolveNode::optimizeVariableAccess):
3095         (KJS::ProgramNode::initializeSymbolTable):
3096
3097 2008-05-04  Geoffrey Garen  <ggaren@apple.com>
3098
3099         Reviewed by Oliver Hunt.
3100         
3101         More scaffolding for f.arguments.
3102         
3103         Store the register file associated with an ExecState in the ExecState.
3104         
3105         SunSpider reports no change.
3106
3107         * kjs/JSGlobalObject.h:
3108         (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Moved
3109         registerFileStack above globalExec, so it gets initialized first.
3110         Removed remnants of old activation scheme.
3111
3112 2008-05-04  Maciej Stachowiak  <mjs@apple.com>
3113
3114         Rubber stamped by Oliver.
3115         
3116         - renamed a few opcodes and fixed assembly formatting to accomodate the longest opcode
3117         
3118         equal --> eq
3119         nequal --> neq
3120         resolve_base_and_property --> resolve_with_base
3121         resolve_base_and_func --> resolve_func
3122         get_prop_id --> get_by_id
3123         put_prop_id --> put_by_id
3124         delete_prop_id --> del_by_id
3125         get_prop_val --> get_by_val
3126         put_prop_val --> put_by_val
3127         delete_prop_val --> del_by_val
3128         put_prop_index --> put_by_index
3129         
3130         * VM/CodeBlock.cpp:
3131         (KJS::printUnaryOp):
3132         (KJS::printBinaryOp):
3133         (KJS::printConditionalJump):
3134         (KJS::CodeBlock::dump):
3135         * VM/CodeGenerator.cpp:
3136         (KJS::CodeGenerator::emitEqual):
3137         (KJS::CodeGenerator::emitNotEqual):
3138         (KJS::CodeGenerator::emitResolveWithBase):
3139         (KJS::CodeGenerator::emitResolveFunction):
3140         (KJS::CodeGenerator::emitGetById):
3141         (KJS::CodeGenerator::emitPutById):
3142         (KJS::CodeGenerator::emitDeleteById):
3143         (KJS::CodeGenerator::emitGetByVal):
3144         (KJS::CodeGenerator::emitPutByVal):
3145         (KJS::CodeGenerator::emitDeleteByVal):
3146         (KJS::CodeGenerator::emitPutByIndex):
3147         * VM/CodeGenerator.h:
3148         * VM/Machine.cpp:
3149         (KJS::Machine::privateExecute):
3150         * VM/Opcode.h:
3151         * kjs/nodes.cpp:
3152         (KJS::ArrayNode::emitCode):
3153         (KJS::PropertyListNode::emitCode):
3154         (KJS::BracketAccessorNode::emitCode):
3155         (KJS::DotAccessorNode::emitCode):
3156         (KJS::EvalFunctionCallNode::emitCode):
3157         (KJS::FunctionCallResolveNode::emitCode):
3158         (KJS::FunctionCallBracketNode::emitCode):
3159         (KJS::FunctionCallDotNode::emitCode):
3160         (KJS::PostIncResolveNode::emitCode):
3161         (KJS::PostDecResolveNode::emitCode):
3162         (KJS::PostIncBracketNode::emitCode):
3163         (KJS::PostDecBracketNode::emitCode):
3164         (KJS::PostIncDotNode::emitCode):
3165         (KJS::PostDecDotNode::emitCode):
3166         (KJS::DeleteResolveNode::emitCode):
3167         (KJS::DeleteBracketNode::emitCode):
3168         (KJS::DeleteDotNode::emitCode):
3169         (KJS::TypeOfResolveNode::emitCode):
3170         (KJS::PreIncResolveNode::emitCode):
3171         (KJS::PreDecResolveNode::emitCode):
3172         (KJS::PreIncBracketNode::emitCode):
3173         (KJS::PreDecBracketNode::emitCode):
3174         (KJS::PreIncDotNode::emitCode):
3175         (KJS::PreDecDotNode::emitCode):
3176         (KJS::ReadModifyResolveNode::emitCode):
3177         (KJS::AssignResolveNode::emitCode):
3178         (KJS::AssignDotNode::emitCode):
3179         (KJS::ReadModifyDotNode::emitCode):
3180         (KJS::AssignBracketNode::emitCode):
3181         (KJS::ReadModifyBracketNode::emitCode):
3182         (KJS::ConstDeclNode::emitCodeSingle):
3183         (KJS::ForInNode::emitCode):
3184         (KJS::TryNode::emitCode):
3185
3186 2008-05-04  Oliver Hunt  <oliver@apple.com>
3187
3188         Reviewed by Maciej.
3189
3190         Fix assertion when accessing arguments object with too many arguments provided
3191
3192         The arguments constructor was assuming that the register offset given for argv
3193         was an absolute offset into the registerfile, rather than the offset from the
3194         frame.  This patches corrects that issue.
3195
3196         * kjs/JSActivation.cpp:
3197         (KJS::JSActivation::createArgumentsObject):
3198
3199 2008-05-04  Geoffrey Garen  <ggaren@apple.com>
3200
3201         Rubber stamped by Sam Weinig.
3202         
3203         Cleaned up Machine.cpp according to our style guidelines: moved static
3204         data to the top of the file; moved stand-alone functions below that;
3205         moved the Machine constructor above other Machine member functions.
3206
3207 2008-05-03  Maciej Stachowiak  <mjs@apple.com>
3208
3209         Reviewed by Sam.
3210         
3211         - fix accidental breakage from last patch
3212
3213         * VM/Machine.cpp:
3214         (KJS::Machine::privateExecute):
3215
3216 2008-05-03  Maciej Stachowiak  <mjs@apple.com>
3217
3218         Reviewed by Geoff.
3219         
3220         - a bunch more opcode documentation and corresponding parameter name fixes
3221
3222         I renamed a few opcodes:
3223         
3224         type_of --> typeof (that's what the JS operator is named)
3225         instance_of --> instanceof (ditto)
3226         create_error --> new_error (for consistency with other new_* opcodes)
3227         
3228         I documented the following opcodes:
3229         
3230         - load
3231         - new_object
3232         - new_array
3233         - new_regexp
3234         - mov
3235         - pre_inc
3236         - pre_dec
3237         - post_inc
3238         - post_dec
3239         - to_jsnumber
3240         - negate
3241         - bitnot
3242         - not
3243         - instanceof
3244         - typeof
3245         - in
3246         - new_func
3247         - new_funcexp
3248         - new_error
3249
3250         I also fixed formatting on some existing opcode docs.
3251         
3252         * VM/CodeBlock.cpp:
3253         (KJS::CodeBlock::dump):
3254         * VM/CodeGenerator.cpp:
3255         (KJS::CodeGenerator::emitMove):
3256         (KJS::CodeGenerator::emitNot):
3257         (KJS::CodeGenerator::emitPreInc):
3258         (KJS::CodeGenerator::emitPreDec):
3259         (KJS::CodeGenerator::emitPostInc):
3260         (KJS::CodeGenerator::emitPostDec):
3261         (KJS::CodeGenerator::emitToJSNumber):
3262         (KJS::CodeGenerator::emitNegate):
3263         (KJS::CodeGenerator::emitBitNot):
3264         (KJS::CodeGenerator::emitInstanceOf):
3265         (KJS::CodeGenerator::emitTypeOf):
3266         (KJS::CodeGenerator::emitIn):
3267         (KJS::CodeGenerator::emitLoad):
3268         (KJS::CodeGenerator::emitNewObject):
3269         (KJS::CodeGenerator::emitNewArray):
3270         (KJS::CodeGenerator::emitNewRegExp):
3271         (KJS::CodeGenerator::emitNewError):
3272         * VM/CodeGenerator.h:
3273         (KJS::CodeGenerator::scopeDepth):
3274         (KJS::CodeGenerator::addVar):
3275         * VM/Machine.cpp:
3276         (KJS::Machine::privateExecute):
3277         * VM/Opcode.h:
3278         * kjs/nodes.cpp:
3279         (KJS::Node::emitThrowError):
3280         (KJS::RegExpNode::emitCode):
3281         (KJS::TypeOfValueNode::emitCode):
3282         (KJS::UnaryPlusNode::emitCode):
3283         (KJS::NegateNode::emitCode):
3284         (KJS::BitwiseNotNode::emitCode):
3285         (KJS::LogicalNotNode::emitCode):
3286         (KJS::InstanceOfNode::emitCode):
3287         (KJS::InNode::emitCode):
3288
3289 2008-05-03  Maciej Stachowiak  <mjs@apple.com>
3290
3291         Reviewed by Geoff and Sam.
3292         
3293         - generate HTML bytecode docs at build time
3294
3295         * DerivedSources.make:
3296         * docs: Added.
3297         * docs/make-bytecode-docs.pl: Added.
3298
3299 2008-05-03  Geoffrey Garen  <ggaren@apple.com>
3300
3301         Reviewed by Sam Weinig.
3302         
3303         Update ExecState::m_scopeChain when switching scope chains inside the
3304         machine.
3305         
3306         This fixes uses of lexicalGlobalObject, such as, in a subframe
3307
3308             alert(top.makeArray() instanceof Array ? "FAIL" : "PASS");
3309         
3310         and a bunch of the security failures listed in
3311         https://bugs.webkit.org/show_bug.cgi?id=18870. (Those tests still fail,
3312         seemingly because of regressions in exception messages).
3313         
3314         SunSpider reports no change.
3315
3316         * VM/Machine.cpp: Factored out scope chain updating into a common
3317         function that takes care to update ExecState::m_scopeChain, too.
3318
3319         * kjs/ExecState.h: I made Machine a friend of ExecState so that Machine
3320         could update ExecState::m_scopeChain, even though that value is
3321         read-only for everyone else.
3322
3323         * kjs/JSGlobalObject.h:
3324         (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Changed
3325         this client to be a little friendlier to ExecState's internal
3326         storage type for scope chain data.
3327
3328 2008-05-03  Geoffrey Garen  <ggaren@apple.com>
3329
3330         Reviewed by Sam Weinig.
3331         
3332         Fixed https://bugs.webkit.org/show_bug.cgi?id=18876
3333         Squirrelfish: ScopeChainNode leak in op_jmp_scopes.
3334         
3335         SunSpider reports no change.
3336
3337         * VM/Machine.cpp:
3338         (KJS::Machine::privateExecute): Don't construct a ScopeChain object,
3339         since the direct threaded interpreter will goto across its destructor.
3340
3341 2008-05-03  Geoffrey Garen  <ggaren@apple.com>
3342
3343         Reviewed by Oliver Hunt.
3344         
3345         A bit more efficient fix than r32832: Don't copy globals into function
3346         register files; instead, have the RegisterFileStack track only the base
3347         of the last *global* register file, so the global object's register
3348         references stay good.
3349         
3350         SunSpider reports a .3% speedup. Not sure what that's about.
3351
3352 2008-05-03  Oliver Hunt  <oliver@apple.com>
3353
3354         Reviewed by Maciej.
3355
3356         Bug 18864: SquirrelFish: Support getter and setter definition in object literals
3357         <https://bugs.webkit.org/show_bug.cgi?id=18864>
3358
3359         Add new opcodes to allow us to add getters and setters to an object.  These are
3360         only used by the codegen for object literals.
3361
3362         * VM/CodeGenerator.cpp:
3363         (KJS::CodeGenerator::emitPutGetter):
3364         (KJS::CodeGenerator::emitPutSetter):
3365         * VM/CodeGenerator.h:
3366         * VM/Machine.cpp:
3367         (KJS::Machine::privateExecute):
3368         * VM/Opcode.h:
3369         * kjs/nodes.cpp:
3370         (KJS::PropertyListNode::emitCode):
3371
3372 2008-05-02  Maciej Stachowiak  <mjs@apple.com>
3373
3374         Reviewed by Oliver.
3375         
3376         - properly copy globals into and out of implicit call register
3377         files, otherwise they will fail at global lookup
3378
3379         Fixes fast/js/array-tostring-and-join.html layout test.
3380         
3381         * VM/RegisterFileStack.cpp:
3382         (KJS::RegisterFileStack::pushGlobalRegisterFile):
3383         (KJS::RegisterFileStack::popGlobalRegisterFile):
3384         (KJS::RegisterFileStack::pushFunctionRegisterFile):
3385         (KJS::RegisterFileStack::popFunctionRegisterFile):
3386
3387 2008-05-02  Geoffrey Garen  <ggaren@apple.com>
3388
3389         Reviewed by Oliver Hunt.
3390         
3391         Fixed https://bugs.webkit.org/show_bug.cgi?id=18822
3392         SQUIRRELFISH: incorrect eval used in some cases
3393         
3394         Changed all code inside the machine to fetch the lexical global object
3395         directly from the scope chain, instead of from the ExecState.
3396         
3397         Clients who fetch the lexical global object through the ExecState
3398         still don't work.
3399         
3400         SunSpider reports no change.
3401
3402         * VM/Machine.cpp:
3403         (KJS::Machine::privateExecute): Fetch the lexical global object from
3404         the scope chain.
3405         
3406         * kjs/ExecState.h:
3407         (KJS::ExecState::ExecState::lexicalGlobalObject): Moved the logic for
3408         this function into ScopeChainNode, but kept this function around to
3409         support existing clients.
3410
3411 2008-05-02  Geoffrey Garen  <ggaren@apple.com>
3412
3413         Rubber stamped by Oliver Hunt.
3414         
3415         Removed ExecState.cpp from AllInOneFile.cpp, for a .2% speedup.
3416
3417         * JavaScriptCore.xcodeproj/project.pbxproj:
3418         * kjs/AllInOneFile.cpp:
3419
3420 2008-05-01  Oliver Hunt  <oliver@apple.com>
3421
3422         Reviewed by Geoff and Maciej.
3423
3424         Bug 18827: SquirrelFish: Prevent getters and setters from destroying the current RegisterFile
3425         <https://bugs.webkit.org/show_bug.cgi?id=18827>
3426
3427         Remove safe/unsafe RegisterFile concept, and instead just add additional
3428         logic to ensure we always push/pop RegisterFiles when executing getters
3429         and setters, similar to the logic for valueOf and toString.
3430
3431         * VM/Machine.cpp:
3432         (KJS::Machine::privateExecute):
3433         * VM/RegisterFile.h:
3434         * kjs/function.cpp:
3435         (KJS::FunctionImp::callAsFunction):
3436         * kjs/object.cpp:
3437         (KJS::JSObject::put):
3438         * kjs/property_slot.cpp:
3439         (KJS::PropertySlot::functionGetter):
3440
3441 2008-05-01  Oliver Hunt  <oliver@apple.com>
3442
3443         RS=Geoff
3444
3445         Rename unsafeForReentry to safeForReentry to avoid double negatives.
3446
3447         * VM/Machine.cpp:
3448         (KJS::Machine::privateExecute):
3449         * VM/RegisterFile.h:
3450         * kjs/function.cpp:
3451         (KJS::FunctionImp::callAsFunction):
3452
3453 2008-05-01  Oliver Hunt  <oliver@apple.com>
3454
3455         Reviewed by Maciej.
3456
3457         Bug 18827: SquirrelFish: Prevent getters and setters from destroying the current RegisterFile
3458         <https://bugs.webkit.org/show_bug.cgi?id=18827>
3459         
3460         This patch makes getters and setters work.  It does this by
3461         tracking whether the RegisterFile is "safe", that is whether
3462         the interpreter is in a state that in which it can handle
3463         the RegisterFile being reallocated.
3464
3465         * VM/Machine.cpp:
3466         (KJS::resolve):
3467         (KJS::Machine::privateExecute):
3468         * VM/RegisterFile.h:
3469         * kjs/function.cpp:
3470         (KJS::FunctionImp::callAsFunction):
3471
3472 2008-04-30  Geoffrey Garen  <ggaren@apple.com>
3473
3474         Release build fix: Always compile in "isGlobalObject", since it's
3475         listed in our .exp file.
3476
3477         * kjs/ExecState.cpp:
3478         (KJS::ExecState::isGlobalObject):
3479         * kjs/ExecState.h:
3480
3481 2008-04-30  Oliver Hunt  <oliver@apple.com>
3482
3483         Reviewed by Maciej.
3484
3485         Minor code restructuring to prepare for getters and setters, 
3486         also helps exception semantics a bit.
3487
3488         * VM/Machine.cpp:
3489         (KJS::Machine::privateExecute):
3490
3491 2008-04-30  Geoffrey Garen  <ggaren@apple.com>
3492
3493         Fixed tyop.
3494
3495         * kjs/ExecState.h:
3496
3497 2008-04-30  Geoffrey Garen  <ggaren@apple.com>
3498
3499         Debug build fix: export a missing symbol.
3500
3501         * JavaScriptCore.exp:
3502
3503 2008-04-30  Geoffrey Garen  <ggaren@apple.com>
3504
3505         Reviewed by Oliver Hunt.
3506         
3507         A little more ExecState refactoring: Now, only the global object creates
3508         an ExecState.
3509         
3510         Also inlined ExecState::lexicalGlobalObject().
3511         
3512         SunSpider reports no change.
3513
3514 2008-04-30  Geoffrey Garen  <ggaren@apple.com>
3515
3516         WebCore build fix: forward-declare ScopeChain.
3517
3518         * kjs/interpreter.h:
3519
3520 2008-04-30  Geoffrey Garen  <ggaren@apple.com>
3521
3522         Build fix for JavaScriptGlue: export a missing symbol.
3523
3524         * JavaScriptCore.exp:
3525
3526 2008-04-30  Geoffrey Garen  <ggaren@apple.com>
3527
3528         Reviewed by Oliver Hunt.
3529         
3530         Removed a lot of unused bits from ExecState, moving them into
3531         OldInterpreterExecState, the fake scaffolding class.
3532         
3533         The clutter was making it hard to see the forest from the trees.
3534         
3535         .4% SunSpider speedup, probably because ExecState::lexicalGlobalObject()
3536         is faster now.
3537
3538 2008-04-29  Oliver Hunt  <oliver@apple.com>
3539
3540         Reviewed by Maciej.
3541
3542         Bug 18643: SQUIRRELFISH: need to support implicit function calls (valueOf, toString, getters/setters)
3543         <https://bugs.webkit.org/show_bug.cgi?id=18643>
3544
3545         Prevent static slot optimisation for new variables and functions in
3546         globally re-entrant code called from an an implicit function call.
3547
3548         This is necessary to prevent us from needing to resize the global
3549         slot portion of the root RegisterFile during an implicit (and hence
3550         unguarded) function call.
3551
3552         * VM/CodeGenerator.cpp:
3553         (KJS::CodeGenerator::CodeGenerator):
3554         * VM/CodeGenerator.h:
3555         * VM/Machine.cpp:
3556         (KJS::Machine::execute):
3557         * VM/RegisterFile.h:
3558         * VM/RegisterFileStack.cpp:
3559         (KJS::RegisterFileStack::pushGlobalRegisterFile):
3560         (KJS::RegisterFileStack::popGlobalRegisterFile):
3561         (KJS::RegisterFileStack::pushFunctionRegisterFile):
3562         (KJS::RegisterFileStack::popFunctionRegisterFile):
3563         * VM/RegisterFileStack.h:
3564         (KJS::RegisterFileStack::inImplicitFunctionCall):
3565         (KJS::RegisterFileStack::lastGlobal):
3566         * kjs/nodes.cpp:
3567         (KJS::ProgramNode::generateCode):
3568         * kjs/nodes.h:
3569         (KJS::ProgramNode::):
3570
3571 2008-04-29  Geoffrey Garen  <ggaren@apple.com>
3572
3573         Reviewed by Oliver Hunt.
3574         
3575         In nested program code, don't propogate "this" back to the parent
3576         register file. ("this" should remain constant in the parent register
3577         file, regardless of the scripts it invokes.)
3578
3579         * VM/RegisterFile.cpp:
3580         (KJS::RegisterFile::copyGlobals):
3581
3582 2008-04-28  Oliver Hunt  <oliver@apple.com>
3583
3584         Reviewed by Geoff.
3585
3586         Restore base pointer when popping a global RegisterFile
3587
3588         * VM/RegisterFileStack.cpp:
3589         (KJS::RegisterFileStack::popGlobalRegisterFile):
3590
3591 2008-04-28  Oliver Hunt  <oliver@apple.com>
3592
3593         Reviewed by Geoff.
3594
3595         Bug 18643: SQUIRRELFISH: need to support implicit function calls (valueOf, toString, getters/setters)
3596         <https://bugs.webkit.org/show_bug.cgi?id=18643>
3597
3598         Partial fix.  This results in all implicit calls to toString or valueOf
3599         executing in a separate RegisterFile, so ensuring that the the pointers
3600         in the triggering interpreter don't get trashed.  This still leaves the
3601         task of preventing new global re-entry from toString and valueOf from
3602         clobbering the RegisterFile.
3603
3604         * VM/Machine.cpp:
3605         (KJS::Machine::execute):
3606         * VM/RegisterFileStack.cpp:
3607         (KJS::RegisterFileStack::pushFunctionRegisterFile):
3608         (KJS::RegisterFileStack::popFunctionRegisterFile):
3609         * VM/RegisterFileStack.h:
3610         * kjs/object.cpp:
3611         (KJS::tryGetAndCallProperty):
3612
3613 2008-04-28  Geoffrey Garen  <ggaren@apple.com>
3614
3615         Reviewed by Maciej Stachowiak.
3616         
3617         Simplified activation object a bit: No need to store the callee
3618         in the activation object -- we can pull it out of the call frame
3619         when needed, instead.
3620         
3621         SunSpider reports no change.
3622
3623 2008-04-28  Geoffrey Garen  <ggaren@apple.com>
3624
3625         Reviewed by Maciej Stachowiak.
3626         
3627         RS by Oliver Hunt on moving JSArguments.cpp out of AllInOneFile.cpp.
3628
3629         Substantially more handling of "arguments": "arguments" works fully
3630         now, but "f.arguments" still doesn't work.
3631
3632         Fixes 10 regression tests.
3633         
3634         SunSpider reports no regression.
3635
3636         * kjs/JSActivation.cpp:
3637         (KJS::JSActivation::createArgumentsObject): Reconstruct an arguments
3638         List to pass to the arguments object constructor.
3639
3640         * JavaScriptCore.xcodeproj/project.pbxproj:
3641         * kjs/AllInOneFile.cpp: Removed JSActivation.cpp from AllInOneFile.cpp
3642         because that seems to make GCC happy. (Previously, I had added
3643         JSActivation.cpp to AllInOneFile.cpp because *that* seemed to make GCC
3644         happy. So it goes.)
3645
3646 2008-04-28  Geoffrey Garen  <ggaren@apple.com>
3647
3648         Reviewed by Maciej Stachowiak.
3649         
3650         Groundwork for more handling of "arguments". I'm not checking in the
3651         actual handling of "arguments" yet, because it still needs a little
3652         fiddling to avoid a performance regression.
3653         
3654         SunSpider reports no change.
3655
3656         * VM/Machine.cpp:
3657         (KJS::initializeCallFrame): Put argc in the register file, so the
3658         arguments object can find it later, to determine arguments.length.
3659
3660         * kjs/nodes.h:
3661         (KJS::FunctionBodyNode::): Added a special code accessor for when you
3662         know the code has already been generated, and you don't have a scopeChain
3663         to supply for potential code generation. (This is the case when the
3664         activation object creates the arguments object.)
3665
3666 2008-04-28  Oliver Hunt  <oliver@apple.com>
3667
3668         Reviewed by Geoff.
3669
3670         Replace unsafe use of auto_ptr in Vector with manual memory
3671         management.
3672
3673         * VM/RegisterFileStack.cpp:
3674         (KJS::RegisterFileStack::~RegisterFileStack):
3675         (KJS::RegisterFileStack::popRegisterFile):
3676         * VM/RegisterFileStack.h:
3677
3678 2008-04-27  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
3679
3680         Reviewed by Maciej.
3681
3682         Bug 18746: SQUIRRELFISH: indirect eval used when direct eval should be used
3683         <https://bugs.webkit.org/show_bug.cgi?id=18746>
3684
3685         Change the base to the correct value of the 'this' object after the direct
3686         eval test instead of before.
3687
3688         Fixes 5 layout tests.
3689
3690         * VM/Machine.cpp:
3691         (KJS::Machine::privateExecute):
3692         * kjs/nodes.cpp:
3693         (KJS::EvalFunctionCallNode::emitCode):
3694
3695 2008-04-26  Maciej Stachowiak  <mjs@apple.com>
3696
3697         Reviewed by Oliver.
3698         
3699         - document all property getting, setting and deleting opcodes
3700         
3701         (And fix function parameter names to match corresponding opcode parameter names.)
3702
3703         * VM/CodeGenerator.cpp:
3704         (KJS::CodeGenerator::emitResolve):
3705         (KJS::CodeGenerator::emitResolveBase):
3706         (KJS::CodeGenerator::emitResolveBaseAndProperty):
3707         (KJS::CodeGenerator::emitResolveBaseAndFunc):
3708         (KJS::CodeGenerator::emitGetPropId):
3709         (KJS::CodeGenerator::emitPutPropId):
3710         (KJS::CodeGenerator::emitDeletePropId):
3711         (KJS::CodeGenerator::emitPutPropVal):
3712         * VM/CodeGenerator.h:
3713         * VM/Machine.cpp:
3714         (KJS::resolve):
3715         (KJS::resolveBase):
3716         (KJS::resolveBaseAndProperty):
3717         (KJS::resolveBaseAndFunc):
3718         (KJS::Machine::privateExecute):
3719         * kjs/nodes.cpp:
3720         (KJS::ResolveNode::emitCode):
3721         (KJS::ArrayNode::emitCode):
3722         (KJS::PropertyListNode::emitCode):
3723         (KJS::BracketAccessorNode::emitCode):
3724         (KJS::EvalFunctionCallNode::emitCode):
3725         (KJS::FunctionCallResolveNode::emitCode):
3726         (KJS::FunctionCallBracketNode::emitCode):
3727         (KJS::PostIncResolveNode::emitCode):
3728         (KJS::PostDecResolveNode::emitCode):
3729         (KJS::PostIncBracketNode::emitCode):
3730         (KJS::PostDecBracketNode::emitCode):
3731         (KJS::PostIncDotNode::emitCode):
3732         (KJS::PostDecDotNode::emitCode):
3733         (KJS::DeleteResolveNode::emitCode):
3734         (KJS::TypeOfResolveNode::emitCode):
3735         (KJS::PreIncResolveNode::emitCode):
3736         (KJS::PreDecResolveNode::emitCode):
3737         (KJS::PreIncBracketNode::emitCode):
3738         (KJS::PreDecBracketNode::emitCode):
3739         (KJS::AssignResolveNode::emitCode):
3740         (KJS::AssignDotNode::emitCode):
3741         (KJS::ReadModifyDotNode::emitCode):
3742         (KJS::AssignBracketNode::emitCode):
3743         (KJS::ReadModifyBracketNode::emitCode):
3744         (KJS::ConstDeclNode::emitCodeSingle):
3745
3746 2008-04-26  Oliver Hunt  <oliver@apple.com>
3747
3748         Reviewed by Maciej.
3749
3750         Bug 18628: SQUIRRELFISH: need to support recursion limit
3751         <https://bugs.webkit.org/show_bug.cgi?id=18628>
3752
3753         Basically completes recursion limiting.  There is still some
3754         tuning we may want to do to make things better in the face of
3755         very bad code, but certainly nothing worse than anything already
3756         possible in trunk.
3757
3758         Also fixes a WebKit test by fixing the exception text :D
3759
3760         * JavaScriptCore.exp:
3761         * VM/ExceptionHelpers.cpp:
3762         * VM/Machine.cpp:
3763         (KJS::Machine::execute):
3764         * VM/RegisterFile.cpp:
3765         (KJS::RegisterFile::growBuffer):
3766         (KJS::RegisterFile::addGlobalSlots):
3767         * VM/RegisterFile.h:
3768         (KJS::RegisterFile::grow):
3769         (KJS::RegisterFile::uncheckedGrow):
3770         * VM/RegisterFileStack.cpp:
3771         (KJS::RegisterFileStack::pushRegisterFile):
3772         * VM/RegisterFileStack.h:
3773
3774 2008-04-25  Oliver Hunt  <oliver@apple.com>
3775
3776         Reviewed by Geoff.
3777
3778         Bug 18628: SQUIRRELFISH: need to support recursion limit
3779         <https://bugs.webkit.org/show_bug.cgi?id=18628>
3780
3781         Put a limit on the level of reentry recursion.  128 levels of re-entrant recursion
3782         seems reasonable as it is greater than the old eval limit, and a long way short of
3783         the reentry depth needed to overflow the stack.
3784
3785         * VM/Machine.cpp:
3786         (KJS::Machine::execute):
3787         * VM/Machine.h:
3788
3789 2008-04-25  Geoffrey Garen  <ggaren@apple.com>
3790
3791         Reviewed by Sam Weinig.
3792         
3793         A tiny bit of cleanup to the regexp code.
3794         
3795         Removed some static_cast.
3796         
3797         Removed createRegExpImp because it's no longer used.
3798
3799 2008-04-25  Oliver Hunt  <oliver@apple.com>
3800
3801         Reviewed by Maciej.
3802
3803         Bug 18736: SQUIRRELFISH: switch statements with no default have incorrect codegen
3804         <https://bugs.webkit.org/show_bug.cgi?id=18736>
3805
3806         Ensure the "default" target is correct in the absence of an explicit default handler.
3807
3808         * kjs/nodes.cpp:
3809         (KJS::CaseBlockNode::emitCodeForBlock):
3810
3811 2008-04-25  Oliver Hunt  <oliver@apple.com>
3812
3813         Reviewed by Maciej.
3814
3815         Bug 18628: SQUIRRELFISH: need to support recursion limit
3816         <https://bugs.webkit.org/show_bug.cgi?id=18628>
3817
3818         More bounds checking.
3819
3820         * VM/Machine.cpp:
3821         (KJS::Machine::execute):
3822         * VM/RegisterFile.cpp:
3823         (KJS::RegisterFile::growBuffer):
3824         * VM/RegisterFile.h:
3825
3826 2008-04-25  Maciej Stachowiak  <mjs@apple.com>
3827
3828         Reviewed by Oliver.
3829         
3830         - fix signal catching magic
3831         
3832         The signal handlers are restored to _exit but are only set when
3833         running under run-javascriptcore-tests. fprintf from a signal
3834         handler is not safe.
3835
3836         * kjs/testkjs.cpp:
3837         (main):
3838         (parseArguments):
3839         * tests/mozilla/jsDriver.pl:
3840
3841 2008-04-25  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
3842
3843         Reviewed by Maciej.
3844
3845         Bug 18732: SQUIRRELFISH: exceptions thrown by native constructors are ignored
3846         <https://bugs.webkit.org/show_bug.cgi?id=18732>
3847
3848         Fixes another regression test.
3849
3850         * VM/Machine.cpp:
3851         (KJS::Machine::privateExecute):
3852
3853 2008-04-25  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
3854
3855         Reviewed by Maciej.
3856
3857         Bug 18728: SQUIRRELFISH: invalid regular expression constants should throw exceptions
3858         <https://bugs.webkit.org/show_bug.cgi?id=18728>
3859
3860         Fixes another regression test.
3861
3862         * kjs/nodes.cpp:
3863         (KJS::RegExpNode::emitCode):
3864
3865 2008-04-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
3866
3867         Reviewed by Geoffrey Garen.
3868
3869         Bug 18735: SQUIRRELFISH: closures are sometimes given an incorrect 'this' value when called
3870         <https://bugs.webkit.org/show_bug.cgi?id=18735>
3871
3872         The overloaded toThisObject method was not copied over to JSActivation.
3873
3874         Fixes two regression tests.
3875
3876         * kjs/JSActivation.cpp:
3877         (KJS::JSActivation::toThisObject):
3878         * kjs/JSActivation.h:
3879
3880 2008-04-24  Geoffrey Garen  <ggaren@apple.com>
3881
3882         Reviewed by Oliver Hunt.
3883         
3884         Added support for arguments.callee.
3885
3886 2008-04-24  Oliver Hunt  <oliver@apple.com>
3887
3888         Reviewed by Maciej.
3889
3890         Bug 18628: SQUIRRELFISH: need to support recursion limit
3891         <https://bugs.webkit.org/show_bug.cgi?id=18628>
3892
3893         Partial fix -- this gets us some of the required bounds checking, but not
3894         complete coverage.  But it does manage to do them without regressing :D
3895
3896         * VM/ExceptionHelpers.cpp:
3897         (KJS::createError):
3898         (KJS::createStackOverflowError):
3899         * VM/ExceptionHelpers.h:
3900         * VM/Machine.cpp:
3901         (KJS::slideRegisterWindowForCall):
3902         (KJS::Machine::execute):
3903         (KJS::Machine::privateExecute):
3904         * VM/RegisterFile.cpp:
3905         * VM/RegisterFile.h:
3906         (KJS::RegisterFile::):
3907         (KJS::RegisterFile::RegisterFile):
3908         (KJS::RegisterFile::grow):
3909
3910 2008-04-24  Geoffrey Garen  <ggaren@apple.com>
3911
3912         Reviewed by Oliver Hunt.
3913         
3914         A tiny bit more handling of "arguments": create a real, but mostly
3915         hollow, arguments object.
3916         
3917         Fixes 2 regression tests.
3918
3919 2008-04-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
3920
3921         Reviewed by Oliver.
3922
3923         Bug 18717: SQUIRRELFISH: eval returns the wrong value for a variable declaration statement
3924         <https://bugs.webkit.org/show_bug.cgi?id=18717>
3925
3926         Fixes a regression test, but exposes the failure of another due to the
3927         lack of getters and setters.
3928
3929         * kjs/nodes.cpp:
3930         (KJS::ConstDeclNode::emitCodeSingle):
3931         (KJS::ConstDeclNode::emitCode):
3932         (KJS::ConstStatementNode::emitCode):
3933         (KJS::VarStatementNode::emitCode):
3934         * kjs/nodes.h:
3935
3936 2008-04-24  Geoffrey Garen  <ggaren@apple.com>
3937
3938         Reviewed by Sam Weinig.
3939         
3940         Print a CRASH statement when crashing, so test failures are not a
3941         mystery.
3942
3943         * kjs/testkjs.cpp:
3944         (handleCrash):
3945         (main):
3946
3947 2008-04-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
3948
3949         Reviewed by Geoffrey Garen.
3950
3951         Bug 18716: SQUIRRELFISH: typeof should return undefined for an undefined variable reference
3952         <https://bugs.webkit.org/show_bug.cgi?id=18716>
3953
3954         This fixes 2 more regression tests.
3955
3956         * kjs/nodes.cpp:
3957         (KJS::TypeOfResolveNode::emitCode):
3958
3959 2008-04-24  Geoffrey Garen  <ggaren@apple.com>
3960
3961         Reviewed by Sam Weinig.
3962         
3963         Put the callee in the call frame.
3964         
3965         Necessary in order to support "arguments" and "arguments.callee".
3966
3967         Also fixes a latent GC bug, where an executing function could be
3968         subject to GC if the register holding it were overwritten. Here's
3969         an example that would have caused problems:
3970         
3971         function f()
3972         {
3973             // Flood the machine stack to eliminate any old pointers to f.
3974             g.call({});
3975             
3976             // Overwrite f in the register file.
3977             f = 1;
3978
3979             // Force a GC.
3980             for (var i = 0; i < 5000; ++i) {
3981                 ({});
3982             }
3983             
3984             // Welcome to crash-ville.
3985         }
3986
3987         function g()
3988         {
3989         }
3990
3991         f();
3992
3993         * VM/Machine.h: Changed the order of arguments to
3994         execute(FunctionBodyNode*...) to match the other execute functions.
3995         * kjs/function.cpp: Updated to match new argument requirements from
3996         execute(FunctionBodyNode*...). Renamed newObj to thisObj to match the
3997         rest of JavaScriptCore.
3998
3999         SunSpider reports no change.
4000
4001 2008-04-23  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
4002
4003         Reviewed by Maciej.
4004
4005         Bug 18707: SQUIRRELFISH: eval always performs toString() on its argument
4006         <https://bugs.webkit.org/show_bug.cgi?id=18707>
4007
4008         This fixes 4 more regression tests.
4009
4010         * VM/Machine.cpp:
4011         (KJS::eval):
4012
4013 2008-04-23  Maciej Stachowiak  <mjs@apple.com>
4014
4015         Reviewed by Oliver.
4016         
4017         - fix logic bug in SegmentedVector::grow which would sometimes fail to resize a segment when needed
4018         
4019         Fixes 3 JSC tests.
4020
4021         * VM/SegmentedVector.h:
4022         (KJS::SegmentedVector::grow):
4023
4024 2008-04-23  Geoffrey Garen  <ggaren@apple.com>
4025
4026         Reviewed by Maciej Stachowiak.
4027         
4028         Degenerate handling of "arguments" as a property of the activation
4029         object. Currently, we just return a vanilla object.
4030         
4031         SunSpider reports no change.
4032
4033         Fixes:
4034
4035         ecma_3/Function/regress-94506.js.
4036         
4037         Reveals to have been secretly broken:
4038
4039         ecma_3/Function/15.3.4.3-1.js
4040         ecma_3/Function/15.3.4.4-1.js
4041         
4042         These tests were passing incorrectly. testkjs creates a global array
4043         named "arguments" to hold command-line arguments. That array was
4044         tricking these tests into thinking that an arguments object with length
4045         0 had been created. Since our new vanilla object shadows the global
4046         property named arguments, that object no longer fools these tests into
4047         passing.
4048         
4049         Net change: +1 failing test.
4050
4051         * kjs/AllInOneFile.cpp: Had to put JSActivation.cpp into AllInOneFile.cpp
4052         to solve a surprising 8.6% regression in bitops-3bit-bits-in-byte.
4053
4054 2008-04-23  Maciej Stachowiak  <mjs@apple.com>
4055
4056         Reviewed by Oliver.
4057         
4058         - save and restore callFrame
4059
4060         * VM/Machine.cpp:
4061         (KJS::slideRegisterWindowForCall):
4062         (KJS::Machine::execute):
4063         (KJS::Machine::privateExecute):
4064         * kjs/testkjs.cpp:
4065         (main):
4066
4067 2008-04-23  Geoffrey Garen  <ggaren@apple.com>
4068
4069         Reviewed by Maciej Stachowiak.
4070         
4071         Fixed scopes for named function expressions.
4072         
4073         Fixes one regression test.
4074         
4075         Two changes here:
4076         
4077         (1) The function's name is supposed to have attributes DontDelete,
4078         ReadOnly, regardless of the type of code executing.
4079         
4080         (2) Push the name object on the function's scope chain, rather than
4081         the ExecState's scope chain because, well, that's where it belongs.
4082
4083 2008-04-23  Geoffrey Garen  <ggaren@apple.com>
4084
4085         Reviewed by Oliver Hunt.
4086         
4087         Inlined JSObject::putDirect, for a .4% SunSpider speedup.
4088         
4089         I did this as a first step toward removing nodes.cpp from
4090         AllInOneFile.cpp, but I'm putting that larger project aside for now.
4091
4092 2008-04-23  Maciej Stachowiak  <mjs@apple.com>
4093
4094         Rubber stamped by Geoff.
4095         
4096         - add OldInterpreterExecState class and use it in dead code
4097         
4098         This will allow removing things from the real ExecState class
4099         without having to figure out how to remove all this code without
4100         getting a perf regression.
4101
4102         * kjs/nodes.cpp:
4103         (KJS::ExpressionNode::evaluateToNumber):
4104         (KJS::ExpressionNode::evaluateToBoolean):
4105         (KJS::ExpressionNode::evaluateToInt32):
4106         (KJS::ExpressionNode::evaluateToUInt32):
4107         (KJS::Node::setErrorCompletion):
4108         (KJS::Node::throwError):
4109         (KJS::Node::throwUndefinedVariableError):
4110         (KJS::Node::handleException):
4111         (KJS::Node::rethrowException):
4112         (KJS::BreakpointCheckStatement::execute):
4113         (KJS::BreakpointCheckStatement::optimizeVariableAccess):
4114         (KJS::NullNode::evaluate):
4115         (KJS::FalseNode::evaluate):
4116         (KJS::TrueNode::evaluate):
4117         (KJS::NumberNode::evaluate):
4118         (KJS::NumberNode::evaluateToNumber):
4119         (KJS::NumberNode::evaluateToBoolean):
4120         (KJS::NumberNode::evaluateToInt32):
4121         (KJS::NumberNode::evaluateToUInt32):
4122         (KJS::ImmediateNumberNode::evaluate):
4123         (KJS::ImmediateNumberNode::evaluateToInt32):
4124         (KJS::ImmediateNumberNode::evaluateToUInt32):
4125         (KJS::StringNode::evaluate):
4126         (KJS::StringNode::evaluateToNumber):
4127         (KJS::StringNode::evaluateToBoolean):
4128         (KJS::RegExpNode::evaluate):
4129         (KJS::ThisNode::evaluate):
4130         (KJS::ResolveNode::inlineEvaluate):
4131         (KJS::ResolveNode::evaluate):
4132         (KJS::ResolveNode::evaluateToNumber):
4133         (KJS::ResolveNode::evaluateToBoolean):
4134         (KJS::ResolveNode::evaluateToInt32):
4135         (KJS::ResolveNode::evaluateToUInt32):
4136         (KJS::getSymbolTableEntry):
4137         (KJS::ResolveNode::optimizeVariableAccess):
4138         (KJS::LocalVarAccessNode::inlineEvaluate):
4139         (KJS::LocalVarAccessNode::evaluate):
4140         (KJS::LocalVarAccessNode::evaluateToNumber):
4141         (KJS::LocalVarAccessNode::evaluateToBoolean):
4142         (KJS::LocalVarAccessNode::evaluateToInt32):
4143         (KJS::LocalVarAccessNode::evaluateToUInt32):
4144         (KJS::getNonLocalSymbol):
4145         (KJS::ScopedVarAccessNode::inlineEvaluate):
4146         (KJS::ScopedVarAccessNode::evaluate):
4147         (KJS::ScopedVarAccessNode::evaluateToNumber):
4148         (KJS::ScopedVarAccessNode::evaluateToBoolean):
4149         (KJS::ScopedVarAccessNode::evaluateToInt32):
4150         (KJS::ScopedVarAccessNode::evaluateToUInt32):
4151         (KJS::NonLocalVarAccessNode::inlineEvaluate):
4152         (KJS::NonLocalVarAccessNode::evaluate):
4153         (KJS::NonLocalVarAccessNode::evaluateToNumber):
4154         (KJS::NonLocalVarAccessNode::evaluateToBoolean):
4155         (KJS::NonLocalVarAccessNode::evaluateToInt32):
4156         (KJS::NonLocalVarAccessNode::evaluateToUInt32):
4157         (KJS::ElementNode::optimizeVariableAccess):
4158         (KJS::ElementNode::evaluate):
4159         (KJS::ArrayNode::optimizeVariableAccess):
4160         (KJS::ArrayNode::evaluate):
4161         (KJS::ObjectLiteralNode::optimizeVariableAccess):
4162         (KJS::ObjectLiteralNode::evaluate):
4163         (KJS::PropertyListNode::optimizeVariableAccess):
4164         (KJS::PropertyListNode::evaluate):
4165         (KJS::PropertyNode::optimizeVariableAccess):
4166         (KJS::PropertyNode::evaluate):
4167         (KJS::BracketAccessorNode::optimizeVariableAccess):
4168         (KJS::BracketAccessorNode::inlineEvaluate):
4169         (KJS::BracketAccessorNode::evaluate):
4170         (KJS::BracketAccessorNode::evaluateToNumber):
4171         (KJS::BracketAccessorNode::evaluateToBoolean):
4172         (KJS::BracketAccessorNode::evaluateToInt32):
4173         (KJS::BracketAccessorNode::evaluateToUInt32):
4174         (KJS::DotAccessorNode::optimizeVariableAccess):