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