JavaScriptCore:
[WebKit-https.git] / JavaScriptCore / ChangeLog
1 2008-07-22  Geoffrey Garen  <ggaren@apple.com>
2
3         Reviewed by Oliver Hunt and Sam Weinig.
4
5         Next step toward putting doubles in registers: Prepare the Register class
6         and its clients for registers that don't contain JSValue*s.
7         
8         This means a few things:
9         
10         1. Register::jsValue() clients, including ArgList clients, must now supply
11         an ExecState* when accessing an entry in an ArgList, in case the entry
12         will need to create a JSValue* on the fly.
13         
14         2. Register clients that definitely don't want to create a JSValue* on
15         the fly now use different APIs: getJSValue() for clients that know
16         the register contains a JSValue*, and v() for clients who just want a
17         void*.
18         
19         3. I had to change some headers around in order to resolve dependency
20         problems created by using a Register in the ArgList header.
21         
22         SunSpider reports no change.
23         
24 2008-07-22  Gavin Barraclough  <barraclough@apple.com>
25
26         Reviewed by Alexey Proskuryakov.
27
28         Prevent integer overflow when reallocating storage vector for arrays.
29
30         Sunspider reports 1.005x as fast (no change expected).
31
32         * kjs/JSArray.cpp:
33
34 2008-07-21  Mark Rowe  <mrowe@apple.com>
35
36         Reviewed by Sam Weinig.
37
38         <rdar://problem/6091287> Revamp the handling of CFBundleShortVersionString to be fixed at the major component of the version number.
39
40         * Configurations/Version.xcconfig:
41         * Info.plist:
42
43 2008-07-21  Adam Roben  <aroben@apple.com>
44
45         Add Vector::find
46
47         This is a convenience wrapper around std::find.
48
49         Reviewed by Anders Carlsson.
50
51         * wtf/Vector.h:
52
53 2008-07-19  Oliver Hunt  <oliver@apple.com>
54
55         Reviewed by Cameron Zwarich.
56
57         Bug 20104: Exception in tables/mozilla_expected_failures/bugs/bug92868_1.html includes the equals operator in the quoted expression
58         <https://bugs.webkit.org/show_bug.cgi?id=20104>
59
60         To make this correct we make the dot and bracket assign nodes emit the information to indicate
61         the failure range is the dot/bracket accessor.
62
63         * kjs/grammar.y:
64
65 2008-07-18  Steve Falkenburg  <sfalken@apple.com>
66
67         Windows build fix.
68
69         * kjs/JSGlobalObjectFunctions.cpp:
70         (KJS::isStrWhiteSpace):
71
72 2008-07-18  Steve Falkenburg  <sfalken@apple.com>
73
74         Windows build fix.
75
76         * kjs/nodes.h:
77         (KJS::ThrowableExpressionData::ThrowableExpressionData):
78
79 2008-07-18  Oliver Hunt  <oliver@apple.com>
80
81         Reviewed by Cameron Zwarich.
82
83         Bug 18774: SQUIRRELFISH: print meaningful error messages <https://bugs.webkit.org/show_bug.cgi?id=18774>
84         <rdar://problem/5769353> SQUIRRELFISH: JavaScript error messages are missing informative text
85
86         Add support for decent error messages in JavaScript.  This patch achieves this by providing
87         ensuring the common errors and exceptions have messages that provide the text of expression
88         that trigger the exception.  In addition it attaches a number of properties to the exception
89         object detailing where in the source the expression came from.
90
91         * JavaScriptCore.exp:
92         * VM/CodeBlock.cpp:
93         (KJS::CodeBlock::lineNumberForVPC):
94         (KJS::CodeBlock::expressionRangeForVPC): 
95             Function to recover the expression range for an instruction
96             that triggered an exception.
97         * VM/CodeBlock.h:
98         (KJS::ExpressionRangeInfo::):
99         (KJS::CodeBlock::CodeBlock):
100         * VM/CodeGenerator.cpp:
101         (KJS::CodeGenerator::emitCall):
102         (KJS::CodeGenerator::emitCallEval):
103             Emit call needed to be modified so to place the expression range info internally,
104             as the CodeGenerator emits the arguments nodes itself, rather than the various call
105             nodes.
106         * VM/CodeGenerator.h:
107         (KJS::CodeGenerator::emitExpressionInfo):
108             Record the expression range info.
109         * VM/ExceptionHelpers.cpp:
110         (KJS::createErrorMessage):
111         (KJS::createInvalidParamError):
112         (KJS::createUndefinedVariableError):
113         (KJS::createNotAConstructorError):
114         (KJS::createNotAFunctionError):
115         (KJS::createNotAnObjectErrorStub):
116         (KJS::createNotAnObjectError):
117             Rewrite all the code for the error messages so that they make use of the newly available
118             information.
119         * VM/ExceptionHelpers.h:
120         * VM/Machine.cpp:
121         (KJS::isNotObject):  Now needs vPC and codeBlock
122         (KJS::Machine::throwException):
123             New logic to handle the NotAnObjectErrorStub and to handle the absurd "no default value" edge case
124         (KJS::Machine::privateExecute):
125         * VM/Machine.h:
126         * kjs/DebuggerCallFrame.cpp:
127         (KJS::DebuggerCallFrame::evaluate):
128         * kjs/Error.cpp:
129         (KJS::Error::create):
130         * kjs/Error.h:
131         * kjs/JSGlobalObjectFunctions.cpp:
132         * kjs/JSImmediate.cpp:
133         (KJS::JSImmediate::toObject):
134         (KJS::JSImmediate::prototype):
135             My changes to the JSNotAnObject constructor needed to be handled here.
136         * kjs/JSNotAnObject.h:
137         (KJS::JSNotAnObjectErrorStub::JSNotAnObjectErrorStub):
138         (KJS::JSNotAnObjectErrorStub::isNull):
139         (KJS::JSNotAnObjectErrorStub::isNotAnObjectErrorStub):
140             Added a JSNotAnObjectErrorStub class to ease the handling of toObject failure exceptions,
141             and potentially allow even more detailed error messages in future.
142         * kjs/JSObject.h:
143         * kjs/Parser.h:
144         (KJS::Parser::parse):
145         * kjs/SourceRange.h:
146         * kjs/grammar.y:
147             Large amounts of position propagation.
148         * kjs/lexer.cpp:
149         (KJS::Lexer::Lexer):
150         (KJS::Lexer::shift):
151         (KJS::Lexer::lex):
152             The lexer needed a few changes to be able to correctly track token character positions.
153         * kjs/lexer.h:
154         * kjs/nodes.cpp:
155         (KJS::ThrowableExpressionData::emitThrowError):
156         (KJS::StatementNode::StatementNode):
157         (KJS::ResolveNode::emitCode):
158         (KJS::BracketAccessorNode::emitCode):
159         (KJS::DotAccessorNode::emitCode):
160         (KJS::NewExprNode::emitCode):
161         (KJS::EvalFunctionCallNode::emitCode):
162         (KJS::FunctionCallValueNode::emitCode):
163         (KJS::FunctionCallResolveNode::emitCode):
164         (KJS::FunctionCallBracketNode::emitCode):
165         (KJS::FunctionCallDotNode::emitCode):
166         (KJS::PostfixResolveNode::emitCode):
167         (KJS::PostfixBracketNode::emitCode):
168         (KJS::PostfixDotNode::emitCode):
169         (KJS::DeleteResolveNode::emitCode):
170         (KJS::DeleteBracketNode::emitCode):
171         (KJS::DeleteDotNode::emitCode):
172         (KJS::PrefixResolveNode::emitCode):
173         (KJS::PrefixBracketNode::emitCode):
174         (KJS::PrefixDotNode::emitCode):
175         (KJS::ThrowableBinaryOpNode::emitCode):
176         (KJS::ReadModifyResolveNode::emitCode):
177         (KJS::AssignResolveNode::emitCode):
178         (KJS::AssignDotNode::emitCode):
179         (KJS::ReadModifyDotNode::emitCode):
180         (KJS::AssignBracketNode::emitCode):
181         (KJS::ReadModifyBracketNode::emitCode):
182         (KJS::ForInNode::ForInNode):
183         (KJS::ForInNode::emitCode):
184         (KJS::WithNode::emitCode):
185         (KJS::LabelNode::emitCode):
186         (KJS::ThrowNode::emitCode):
187         (KJS::ProgramNode::ProgramNode):
188         (KJS::ProgramNode::create):
189         (KJS::EvalNode::generateCode):
190         (KJS::FunctionBodyNode::create):
191         (KJS::FunctionBodyNode::generateCode):
192         (KJS::ProgramNode::generateCode):
193             All of these methods were handling the position information.  
194             Constructors and create methods were modified to store the information.
195             All the emitCall implementations listed needed to be updated to actually
196             record the position information we have so carefully collected.
197         * kjs/nodes.h:
198         (KJS::ThrowableExpressionData::ThrowableExpressionData):
199         (KJS::ThrowableExpressionData::setExceptionSourceRange):
200         (KJS::ThrowableExpressionData::divot):
201         (KJS::ThrowableExpressionData::startOffset):
202         (KJS::ThrowableExpressionData::endOffset):
203         (KJS::ThrowableSubExpressionData::ThrowableSubExpressionData):
204         (KJS::ThrowableSubExpressionData::setSubexpressionInfo):
205         (KJS::ThrowablePrefixedSubExpressionData::ThrowablePrefixedSubExpressionData):
206         (KJS::ThrowablePrefixedSubExpressionData::setSubexpressionInfo):
207             ThrowableExpressionData is just a uniform mechanism for storing the position
208             information.
209         (KJS::ResolveNode::):
210         (KJS::PrePostResolveNode::):
211         (KJS::ThrowableBinaryOpNode::):
212         (KJS::WithNode::):
213
214 2008-07-18  Geoffrey Garen  <ggaren@apple.com>
215
216         Reviewed by Cameron Zwarich.
217         
218         Three renames:
219         
220         "CallTypeNative" => "CallTypeHost"
221         "code" => "byteCode"
222         "generatedCode" => "generatedByteCode"
223
224 2008-07-18  Geoffrey Garen  <ggaren@apple.com>
225
226         Reviewed by Oliver Hunt.
227         
228         Optimized <= for immediate number cases.
229         
230         SunSpider reports no overall change, but a 10% speedup on access-nsieve.
231
232 2008-07-18  Mark Rowe  <mrowe@apple.com>
233
234         Rubber-stamped by Sam Weinig.
235
236         Fix some casts added in a previous build fix to match the style used
237         throughout WebKit.
238
239         * VM/Machine.cpp:
240         (KJS::Machine::initializeCallFrame):
241         * VM/Register.h:
242         (KJS::Register::Register):
243
244 2008-07-18  Landry Breuil  <landry@openbsd.org>
245
246         Bug 19975: [OpenBSD] Patches to enable build of WebKit
247
248         <https://bugs.webkit.org/show_bug.cgi?id=19975>
249
250         Reviewed by David Kilzer.
251
252         Support for OpenBSD, mostly threading and libm tweaks.
253
254         * kjs/collector.cpp: #include <pthread.h>
255         (KJS::currentThreadStackBase): use pthread_stackseg_np() to get stack base
256         * kjs/config.h: OpenBSD also provides <pthread_np.h>
257         * wtf/MathExtras.h: #include <sys/types.h> and <machine/ieee.h>
258         (isfinite), (signbit): as long as we don't have those functions provide fallback implementations
259         * wtf/Platform.h: Add support for PLATFORM(OPENBSD) and PLATFORM(SPARC64) macro
260
261 2008-07-17  Geoffrey Garen  <ggaren@apple.com>
262
263         Reviewed by Oliver Hunt.
264         
265         Next step toward putting doubles in registers: Store constant pool
266         entries as registers, not JSValue*s.
267         
268         SunSpider reports no change.
269
270 2008-07-17  Geoffrey Garen  <ggaren@apple.com>
271
272         Reviewed by John Sullivan and Oliver Hunt.
273         
274         A tiny bit of tidying in function call register allocation.
275         
276         This patch saves one register when invoking a function expression and/or
277         a new expression that is stored in a temporary.
278         
279         Since it's just one register, I can't make a testcase for it.
280
281         * VM/CodeGenerator.cpp:
282         (KJS::CodeGenerator::emitCall): No need to ref the function we're calling
283         or its base. We'd like the call frame to overlap with them, if possible.
284         op_call will read the function and its base before writing the call frame,
285         so this is safe.
286
287         * kjs/nodes.cpp:
288         (KJS::NewExprNode::emitCode): No need to ref the function we're new-ing,
289         for the same reasons stated above.
290         
291         (KJS::FunctionCallValueNode::emitCode): ditto
292
293 2008-07-17  Steve Falkenburg  <sfalken@apple.com>
294
295         Build fix.
296         
297         * kjs/InternalFunction.cpp:
298
299 2008-07-17  Sam Weinig  <sam@webkit.org>
300
301         Roll out r35199 as it is causing failures on the PPC build.
302
303 2008-07-17  Geoffrey Garen  <ggaren@apple.com>
304
305         Reviewed by David Kilzer.
306         
307         Fixed https://bugs.webkit.org/show_bug.cgi?id=20067
308         Support function.name (Firefox extension)
309         
310         Pretty straight-forward.
311
312 2008-07-17  Geoffrey Garen  <ggaren@apple.com>
313
314         Reviewed by Oliver Hunt.
315         
316         Fixed <rdar://problem/6081636> Functions calls use more temporary
317         registers than necessary
318         
319         Holding a reference to the last statement result register caused each
320         successive statement to output its result to an even higher register.
321         
322         Happily, statements don't actually need to return a result register
323         at all. I hope to make this clearer in a future cleanup patch,
324         but this change will fix the major bug for now.
325
326         * kjs/nodes.cpp:
327         (KJS::statementListEmitCode):
328
329 2008-07-17  Gavin Barraclough  <barraclough@apple.com>
330
331         Reviewed by Sam Weinig.
332
333         Merge pre&post dot nodes to simplify the parse tree.
334         Sunspider results show 0.6% progression (no performance change expected).
335
336         * kjs/grammar.y:
337         * kjs/nodes.cpp:
338         * kjs/nodes.h:
339         * kjs/nodes2string.cpp:
340
341 2008-07-17  Gavin Barraclough  <barraclough@apple.com>
342
343         Reviewed by Cameron Zwarich.
344
345         Merge pre&post resolve nodes to simplify the parse tree.
346         Sunspider results show no performance change.
347
348         * kjs/grammar.y:
349         * kjs/nodes.cpp:
350         * kjs/nodes.h:
351         * kjs/nodes2string.cpp:
352
353 2008-07-17  Gavin Barraclough  <barraclough@apple.com>
354
355         Reviewed by Cameron Zwarich.
356
357         Merge logical nodes to simplify the parse tree.
358         Sunspider results show 0.6% progression (no performance change expected).
359
360         * kjs/grammar.y:
361         * kjs/nodes.cpp:
362         * kjs/nodes.h:
363         * kjs/nodes2string.cpp:
364
365 2008-07-17  Ariya Hidayat  <ariya.hidayat@trolltech.com>
366
367         Reviewed by Simon.
368
369         Fix MinGW build (broken in r35198) and simplify getLocalTime().
370
371         * kjs/DateMath.cpp:
372         (KJS::getLocalTime):
373
374 2008-07-17  Gavin Barraclough  <barraclough@apple.com>
375
376         Reviewed by Sam Weinig.
377
378         Merge pre&post bracket nodes to simplify the parse tree.
379         Sunspider results show no performance change.
380
381         * kjs/grammar.y:
382         * kjs/nodes.cpp:
383         * kjs/nodes.h:
384         * kjs/nodes2string.cpp:
385
386 2008-07-17  Ariya Hidayat  <ariya.hidayat@trolltech.com>
387
388         Reviewed by Simon.
389
390         Fix the 32-bit gcc builds, conversion from "long int" to Register is
391         ambiguous. Explicitly choose the intptr_t constructor.
392
393         * VM/Machine.cpp:
394         (KJS::Machine::initializeCallFrame):
395         * VM/Register.h:
396         (KJS::Register::Register):
397
398 2008-07-16  Mark Rowe  <mrowe@apple.com>
399
400         Rubber-stamped by Geoff Garen.
401
402         Fix JavaScript in 64-bit by using a pointer-sized integer
403         type in the Register union.  Also includes a rename of
404         the intType constant to IntType.
405
406         * VM/Machine.cpp:
407         (KJS::Machine::initializeCallFrame):
408         * VM/Register.h:
409         (KJS::Register::):
410         (KJS::Register::Register):
411
412 2008-07-17  Geoffrey Garen  <ggaren@apple.com>
413
414         Reviewed by Oliver Hunt.
415         
416         First step toward putting doubles in registers: Turned Register into a
417         proper abstraction layer. It is no longer possible to cast a Register
418         to a JSValue*, or a Register& to a JSValue*&, or to access the union
419         inside a Register directly.
420         
421         SunSpider reports no change.
422         
423         In support of this change, I had to make the following mechanical changes
424         in a lot of places:
425         
426         1. Clients now use explicit accessors to read data out of Registers, and
427         implicit copy constructors to write data into registers.
428         
429         So, assignment that used to look like
430         
431             x.u.jsValue = y;
432         
433         now looks like
434         
435             x = y;
436             
437         And access that used to look like
438         
439             x = y.u.jsValue;
440         
441         now looks like
442         
443             x = y.jsValue();
444
445         2. I made generic flow control specific in opcodes that made their flow
446         control generic by treating a Register& as a JSValue*&. This had the
447         added benefit of removing some exception checking branches from immediate
448         number code.
449
450         3. I beefed up PropertySlot to support storing a Register* in a property
451         slot. For now, only JSVariableObject's symbolTableGet and symbolTablePut
452         use this functionality, but I expect more clients to use it in the future.
453         
454         4. I changed ArgList to be a buffer of Registers, not JSValue*'s, and I
455         changed ArgList iterator clients to iterate Registers, not JSValue*'s.
456
457 2008-07-16  Ada Chan  <adachan@apple.com>
458
459         Fixed build.
460
461         * kjs/JSGlobalObject.cpp:
462
463 2008-07-16  Kevin McCullough  <kmccullough@apple.com>
464
465         Reviewed by Sam and Geoff.
466
467         <rdar://problem/5958840> Navigating to another page while profiler is
468         attached results in slow JavaScript for all time.
469
470         - The UNLIKELY keeps this from being a sunspider performance regression.
471
472         * kjs/JSGlobalObject.cpp:
473         (KJS::JSGlobalObject::~JSGlobalObject): Stop the profiler associated
474         with this exec state.
475
476 2008-07-16  Sam Weinig  <sam@webkit.org>
477
478         Reviewed by Steve Falkenburg.
479
480         Replace adopting UString constructor in favor of explicit
481         static adopt method.
482
483         * API/JSStringRefCF.cpp:
484         (JSStringCreateWithCFString):
485         * kjs/StringConstructor.cpp:
486         (KJS::stringFromCharCode):
487         * kjs/StringPrototype.cpp:
488         (KJS::stringProtoFuncToLowerCase):
489         (KJS::stringProtoFuncToUpperCase):
490         (KJS::stringProtoFuncToLocaleLowerCase):
491         (KJS::stringProtoFuncToLocaleUpperCase):
492         * kjs/ustring.cpp:
493         (KJS::UString::adopt):
494         * kjs/ustring.h:
495         (KJS::UString::UString):
496         (KJS::UString::~UString):
497
498 2008-07-16  Ariya Hidayat  <ariya.hidayat@trolltech.com>
499
500         Reviewed by Simon.
501
502         http://trolltech.com/developer/task-tracker/index_html?method=entry&id=216179
503         Fix potential crash (on Qt for Windows port) when performing JavaScript date
504         conversion.
505
506         * kjs/DateMath.cpp:
507         (KJS::getLocalTime): For the Qt port, prefer to use Windows code, i.e.
508         localtime_s() instead of localtime() since the latter might crash (on Windows)
509         given a non-sensible, e.g. NaN, argument.
510
511 2008-07-16  Alexey Proskuryakov  <ap@webkit.org>
512
513         Reviewed by Anders and Geoff.
514
515         https://bugs.webkit.org/show_bug.cgi?id=20023
516         Failed assertion in PropertyNameArray.cpp
517
518         This is already tested by testapi.
519
520         * API/JSObjectRef.cpp: (JSPropertyNameAccumulatorAddName): Add the string to identifier
521         table to appease PropertyNameArray.
522
523 2008-07-16  Alexey Proskuryakov  <ap@webkit.org>
524
525         Reviewed by Geoff.
526
527         Dereference identifiers when deleting a hash table (fixes leaks with private JSGlobalData
528         objects).
529
530         * kjs/JSGlobalData.cpp: (KJS::JSGlobalData::~JSGlobalData):
531         * kjs/lookup.cpp: (KJS::HashTable::deleteTable):
532         * kjs/lookup.h:
533         * kjs/lexer.cpp: (KJS::Lexer::~Lexer)
534         HashTable cannot have a destructor, because check-for-global-initializers complains about
535         having a global constructor then.
536
537 2008-07-16  Alexey Proskuryakov  <ap@webkit.org>
538
539         Reviewed by Geoff.
540
541         Check pthread_key_create return value.
542
543         This check was helpful when debugging a crash in run-webkit-tests --threaded that happened
544         because JSGlobalData objects were not deleted, and we were running out of pthread keys soon.
545         It also looks useful for production builds.
546
547         * wtf/ThreadSpecific.h: (WTF::::ThreadSpecific):
548
549 2008-07-15  Kevin McCullough  <kmccullough@apple.com>
550
551         Reviewed by Geoff.
552
553         Rename pageGroupIdentifier to profileGroup to keep mention of a
554         pageGroup out of JavaScriptCore.
555
556         * kjs/JSGlobalObject.cpp:
557         (KJS::JSGlobalObject::init):
558         * kjs/JSGlobalObject.h:
559         (KJS::JSGlobalObject::setProfileGroup):
560         (KJS::JSGlobalObject::profileGroup):
561         * profiler/ProfileGenerator.cpp:
562         (KJS::ProfileGenerator::create):
563         (KJS::ProfileGenerator::ProfileGenerator):
564         * profiler/ProfileGenerator.h:
565         (KJS::ProfileGenerator::profileGroup):
566         * profiler/Profiler.cpp:
567         (KJS::Profiler::startProfiling):
568         (KJS::dispatchFunctionToProfiles):
569         (KJS::Profiler::willExecute):
570         (KJS::Profiler::didExecute):
571
572 2008-07-14  Mark Rowe  <mrowe@apple.com>
573
574         Reviewed by Sam Weinig.
575
576         Fix https://bugs.webkit.org/show_bug.cgi?id=20037
577         Bug 20037: GCC 4.2 build broken due to strict aliasing violation.
578
579         * kjs/ustring.cpp:
580         (KJS::UString::Rep::computeHash): Add a version of computeHash that takes a char* and explicit length.
581         * kjs/ustring.h:
582         * profiler/CallIdentifier.h:
583         (WTF::): Use new version of computeHash that takes a char* and explicit length to avoid unsafe aliasing.
584
585 2008-07-14  David Hyatt  <hyatt@apple.com>
586
587         Fix a crashing bug in ListHashSet's -- operator.  Make sure that end() can be -- by special-casing the null
588         position.
589
590         Reviewed by Maciej
591
592         * wtf/ListHashSet.h:
593         (WTF::ListHashSetConstIterator::operator--):
594
595 2008-07-14  David Hyatt  <hyatt@apple.com>
596
597         Buidl fix.  Make sure the second insertBefore method returns a value.
598
599         * wtf/ListHashSet.h:
600         (WTF::::insertBefore):
601
602 2008-07-14  Adam Roben  <aroben@apple.com>
603
604         Windows build fix
605
606         * JavaScriptCore.vcproj/jsc/jsc.vcproj: Added include/pthreads to the
607         include path.
608
609 2008-07-14  Alexey Proskuryakov  <ap@webkit.org>
610
611         Reviewed by Kevin McCullough.
612
613         Make JSGlobalData refcounted in preparation to adding a way to create contexts that share
614         global data.
615
616         * JavaScriptCore.exp:
617         * kjs/JSGlobalData.cpp:
618         (KJS::JSGlobalData::create):
619         * kjs/JSGlobalData.h:
620         Made contructor private, and added a static create() method. Made the class inherit from
621         RefCounted.
622
623         * kjs/JSGlobalObject.h:
624         (KJS::JSGlobalObject::globalData):
625         JSGlobalData is now owned by JSGlobalObject (except for the shared one, and the common
626         WebCore one, which are never deleted).
627
628         * kjs/Shell.cpp: (main): Create JSGlobalData with create() method.
629
630 2008-07-14  Simon Hausmann  <hausmann@webkit.org>
631
632         Fix the single-threaded build.
633
634         * kjs/JSLock.cpp: Removed undeclared registerThread() function.
635         * kjs/collector.cpp:
636         (KJS::Heap::registerThread): Added dummy implementation.
637
638 2008-07-14  Alexey Proskuryakov  <ap@webkit.org>
639
640         Reviewed by Geoff Garen.
641
642         Eliminate per-thread JavaScript global data instance support and make arbitrary
643         global data/global object combinations possible.
644
645         * kjs/collector.cpp:
646         (KJS::Heap::Heap): Store a JSGlobalData pointer instead of multiple pointers to its members.
647         This allows for going from any JS object to its associated global data, currently used in
648         JSGlobalObject constructor to initialize its JSGlobalData pointer.
649         (KJS::Heap::registerThread): Changed thread registration data to be per-heap. Previously,
650         only the shared heap could be used from multiple threads, so it was the only one that needed
651         thread registration, but now this can happen to any heap.
652         (KJS::Heap::unregisterThread): Ditto.
653         (KJS::Heap::markStackObjectsConservatively): Adapt for the above changes.
654         (KJS::Heap::setGCProtectNeedsLocking): Ditto.
655         (KJS::Heap::protect): Ditto.
656         (KJS::Heap::unprotect): Ditto.
657         (KJS::Heap::collect): Ditto.
658         (KJS::Heap::globalObjectCount): Use global object list associated with the current heap,
659         not the late per-thread one.
660         (KJS::Heap::protectedGlobalObjectCount): Ditto.
661
662         * kjs/collector.h:
663         (KJS::Heap::ThreadRegistrar): Added a helper object that unregisters a thread when it is
664         destroyed.
665
666         * kjs/JSLock.cpp:
667         (KJS::JSLock::JSLock):
668         * kjs/JSLock.h:
669         (KJS::JSLock::JSLock):
670         Don't use JSLock to implicitly register threads. I've added registerThread() calls to most
671         places that use JSLock - we cannot guarantee absolute safety unless we always mark all
672         threads in the process, but these implicit registration calls should cover reasonable usage
673         scenarios, I hope.
674
675         * API/JSBase.cpp:
676         (JSEvaluateScript): Explicitly register the current thread.
677         (JSCheckScriptSyntax): Explicitly register the current thread.
678         (JSGarbageCollect): Changed to use the passed in context. Unfortunately, this creates a race
679         condition for clients that pass an already released context to JSGarbageCollect - but it is
680         unlikely to create real life problems.
681         To maintain compatibility, the shared heap is collected if NULL is passed.
682
683         * API/JSContextRef.cpp:
684         (JSGlobalContextCreate): Use a new syntax for JSGlobalObject allocation.
685         (JSGlobalContextRetain): Register the thread.
686         (JSContextGetGlobalObject): Register the thread.
687
688         * API/JSObjectRef.cpp:
689         (JSObjectMake):
690         (JSObjectMakeFunctionWithCallback):
691         (JSObjectMakeConstructor):
692         (JSObjectMakeFunction):
693         (JSObjectHasProperty):
694         (JSObjectGetProperty):
695         (JSObjectSetProperty):
696         (JSObjectGetPropertyAtIndex):
697         (JSObjectSetPropertyAtIndex):
698         (JSObjectDeleteProperty):
699         (JSObjectCallAsFunction):
700         (JSObjectCallAsConstructor):
701         (JSObjectCopyPropertyNames):
702         (JSPropertyNameAccumulatorAddName):
703         * API/JSValueRef.cpp:
704         (JSValueIsEqual):
705         (JSValueIsInstanceOfConstructor):
706         (JSValueMakeNumber):
707         (JSValueMakeString):
708         (JSValueToNumber):
709         (JSValueToStringCopy):
710         (JSValueToObject):
711         (JSValueProtect):
712         (JSValueUnprotect):
713         Register the thread.
714
715         * API/JSStringRef.cpp: (JSStringRelease): Changed a comment to not mention per-thread contexts.
716
717         * API/JSStringRefCF.cpp: Removed an unnecessary include of JSLock.h.
718
719         * JavaScriptCore.exp: Export JSGlobalData constructor/destructor, now that anyone can have
720         their own instances. Adapt to other changes, too.
721
722         * JavaScriptCore.xcodeproj/project.pbxproj: Made ThreadSpecific.h private, as it is now
723         included by collector.h and is thus needed in other projects.
724
725         * kjs/InitializeThreading.cpp: (KJS::initializeThreadingOnce): Don't initialize per-thread
726         global data, as it no longer exists.
727
728         * kjs/JSGlobalData.cpp:
729         (KJS::JSGlobalData::JSGlobalData):
730         (KJS::JSGlobalData::~JSGlobalData):
731         * kjs/JSGlobalData.h:
732         Removed support for per-thread instance. Made constructor and destructor public.
733
734         * kjs/JSGlobalObject.cpp: (KJS::JSGlobalObject::init): Get to now arbitrary  JSGlobalData
735         via the heap.
736         (KJS::JSGlobalObject::operator new): Changed ot take JSGlobalDatra pointer.
737         * kjs/JSGlobalObject.h:
738
739         * kjs/Shell.cpp:
740         (main):
741         (jscmain):
742         Changed to maintain a custom JSGlobalData pointer instead of a per-thread one.
743
744 2008-07-13  Ada Chan  <adachan@apple.com>
745
746         Windows build fix: Add wtf/RefCountedLeakCounter to the project.
747
748         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
749
750 2008-07-12  Jan Michael Alonzo  <jmalonzo@webkit.org>
751
752         Gtk, Qt and Wx build fix: Add wtf/RefCountedLeakCounter in the
753         build scripts
754
755         * GNUmakefile.am:
756         * JavaScriptCore.pri:
757         * JavaScriptCoreSources.bkl:
758
759 2008-07-11  Stephanie Lewis  <slewis@apple.com>
760
761         Reviewed by Darin Adler and Oliver Hunt.
762
763         Refactor RefCounting Leak counting code into a common class.
764
765         In order to export the symbols I needed to put the debug defines inside the function names
766         
767         Before we had a separate channel for each Logging each Leak type.  Since the leak channels were only used in one location, and only at quit for simplicity I combined them all into one leak channel.
768
769         * JavaScriptCore.exp:
770         * JavaScriptCore.xcodeproj/project.pbxproj: add new class
771         * kjs/nodes.cpp: remove old leak counting code
772         * wtf/RefCountedLeakCounter.cpp: Added. create a common leak counting class
773         * wtf/RefCountedLeakCounter.h: Added.
774
775 2008-07-11  David Hyatt  <hyatt@apple.com>
776
777         Add an insertBefore method to ListHashSet to allow for insertions in the middle of the list (rather than just
778         at the end).
779
780         Reviewed by Anders
781
782         * wtf/ListHashSet.h:
783         (WTF::::insertBefore):
784         (WTF::::insertNodeBefore):
785
786 2008-07-11  Sam Weinig  <sam@webkit.org>
787
788         Rubber-stamped by Darin Adler.
789
790         Move call function to CallData.cpp and construct to ConstructData.cpp.
791
792         * GNUmakefile.am:
793         * JavaScriptCore.pri:
794         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
795         * JavaScriptCore.xcodeproj/project.pbxproj:
796         * JavaScriptCoreSources.bkl:
797         * kjs/AllInOneFile.cpp:
798         * kjs/CallData.cpp: Copied from kjs/JSValue.cpp.
799         * kjs/ConstructData.cpp: Copied from kjs/JSValue.cpp.
800         * kjs/JSValue.cpp:
801
802 2008-07-10  Mark Rowe  <mrowe@apple.com>
803
804         Reviewed by Sam Weinig.
805
806         Define WEBKIT_VERSION_MIN_REQUIRED=WEBKIT_VERSION_LATEST when building WebKit to ensure that no symbols end up with the weak_import attribute.
807
808         * Configurations/Base.xcconfig:
809
810 2008-07-10  Mark Rowe  <mrowe@apple.com>
811
812         Reviewed by Sam Weinig.
813
814         Fix the Tiger build by omitting annotations from methods declared in categories when using old versions of GCC.
815
816         * API/WebKitAvailability.h:
817
818 2008-07-10  Kevin McCullough  <kmccullough@apple.com>
819
820         Reviewed by Darin.
821
822         -Minor cleanup. Renamed callTree() to head() and no longer use m_head
823         directly but instead keep it private and access via a method().
824
825         * profiler/HeavyProfile.cpp:
826         (KJS::HeavyProfile::HeavyProfile):
827         (KJS::HeavyProfile::generateHeavyStructure):
828         (KJS::HeavyProfile::addNode):
829         * profiler/Profile.h:
830         (KJS::Profile::head):
831         * profiler/ProfileGenerator.cpp:
832         (KJS::ProfileGenerator::ProfileGenerator):
833
834 2008-07-10  Alexey Proskuryakov  <ap@webkit.org>
835
836         Reviewed by Mark Rowe.
837
838         Eliminate CollectorHeapIntrospector.
839
840         CollectorHeapIntrospector was added primarily in the hopes to improve leaks tool output,
841         a result that it didn't deliver. Also, it helped by labeling JSC heap regions as reported by
842         vmmap tool, but at the same time, it made them mislabeled as malloc'd ones - the correct
843         way to label mapped regions is to use a VM tag.
844
845         So, it makes more sense to remove it completely than to make it work with multiple heaps.
846
847         * JavaScriptCore.exp:
848         * JavaScriptCore.xcodeproj/project.pbxproj:
849         * kjs/AllInOneFile.cpp:
850         * kjs/InitializeThreading.cpp:
851         (KJS::initializeThreading):
852         * kjs/collector.cpp:
853         * kjs/collector.h:
854         * kjs/CollectorHeapIntrospector.cpp: Removed.
855         * kjs/CollectorHeapIntrospector.h: Removed.
856
857 2008-07-09  Kevin McCullough  <kmccullough@apple.com>
858
859         Reviewed by Darin.
860
861         <rdar://problem/5951532> JSProfiler: Implement heavy (or bottom-up)
862         view (19228)
863         - Implemented the time and call count portionof heavy.  Now all that we
864         need is some UI.
865
866         * profiler/CallIdentifier.h: Removed an unused constructor.
867         * profiler/HeavyProfile.cpp: 
868         (KJS::HeavyProfile::HeavyProfile): Set the initial time of the head
869         node so that percentages work correctly.
870         (KJS::HeavyProfile::mergeProfiles): Sum the times and call count of
871         nodes being merged.
872         * profiler/ProfileNode.cpp: Set the intital values of time and call
873         count when copying ProfileNodes.
874         (KJS::ProfileNode::ProfileNode):
875
876 2008-07-10  Jan Michael Alonzo  <jmalonzo@webkit.org>
877
878         Gtk build fix.
879
880         * GNUmakefile.am: Add HeavyProfile.cpp
881
882 2008-07-09  Mark Rowe  <mrowe@apple.com>
883
884         Reviewed by Geoff Garen.
885
886         Don't warn about deprecated functions in production builds.
887
888         * Configurations/Base.xcconfig:
889         * Configurations/DebugRelease.xcconfig:
890
891 2008-07-09  Darin Adler  <darin@apple.com>
892
893         * JavaScriptCore.pri: Fix Qt build by adding HeavyProfile.cpp.
894
895 2008-07-09  Kevin Ollivier  <kevino@theolliviers.com>
896
897         wx biuld fix. Add HeavyProfile.cpp to build files.
898
899         * JavaScriptCoreSources.bkl:
900
901 2008-07-09  Kevin McCullough  <kmccullough@apple.com>
902
903         - Windows build fix.
904
905         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
906
907 2008-07-09  Kevin McCullough  <kmccullough@apple.com>
908
909         - Build fix.
910
911         * profiler/HeavyProfile.cpp:
912         (KJS::HeavyProfile::mergeProfiles):
913
914 2008-07-09  Kevin McCullough  <kmccullough@apple.com>
915
916         Reviewed by Geoff and Adam.
917
918         <rdar://problem/5951532> JSProfiler: Implement Bottom-Up view (19228)
919         - This is the plumbing for bottom-up, but does not include calculating
920         time, mostly because I'm still undclear about what the end result should
921         look like.
922         - This, obviously, does not include the UI to expose this in the
923         inspector yet.
924
925         * JavaScriptCore.xcodeproj/project.pbxproj:
926         * profiler/CallIdentifier.h:
927         (KJS::CallIdentifier::CallIdentifier):
928         (WTF::): Added HashTraits for CallIdentifiers to be used by a HashMap.
929         * profiler/HeavyProfile.cpp: Added.
930         (KJS::HeavyProfile::HeavyProfile):
931         (KJS::HeavyProfile::generateHeavyStructure):
932         (KJS::HeavyProfile::addNode):
933         (KJS::HeavyProfile::mergeProfiles):
934         (KJS::HeavyProfile::addAncestorsAsChildren):
935         * profiler/HeavyProfile.h: Added.
936         (KJS::HeavyProfile::create):
937         (KJS::HeavyProfile::heavyProfile):
938         (KJS::HeavyProfile::treeProfile):
939         * profiler/Profile.cpp: Removed old commented out includes.
940         * profiler/Profile.h: The m_head is needed by the HeavyProfile so it
941         is now protected as opposed to private.
942         * profiler/ProfileNode.cpp:
943         (KJS::ProfileNode::ProfileNode): Created a constructor to copy
944         ProfileNodes.
945         (KJS::ProfileNode::findChild): Added a null check to make HeavyProfile
946         children finding easier and avoid a potential crasher.
947         * profiler/ProfileNode.h: Mostly moved things around but also added some
948         functionality needed by HeavyProfile.
949         (KJS::ProfileNode::create):
950         (KJS::ProfileNode::functionName):
951         (KJS::ProfileNode::url):
952         (KJS::ProfileNode::lineNumber):
953         (KJS::ProfileNode::head):
954         (KJS::ProfileNode::setHead):
955         (KJS::ProfileNode::setNextSibling):
956         (KJS::ProfileNode::actualTotalTime):
957         (KJS::ProfileNode::actualSelfTime):
958         * profiler/TreeProfile.cpp: Implemented the ability to get a
959         HeavyProfile.
960         (KJS::TreeProfile::heavyProfile):
961         * profiler/TreeProfile.h:
962
963 2008-07-08  Geoffrey Garen  <ggaren@apple.com>
964
965         Reviewed by Oliver Hunt.
966         
967         Added support for checking if an object has custom properties in its
968         property map. WebCore uses this to optimize marking DOM wrappers.
969
970 2008-07-08  Simon Hausmann  <hausmann@webkit.org>
971
972         Prospective Gtk/Wx build fixes, add ProfileGenerator.cpp to the build.
973
974         * GNUmakefile.am:
975         * JavaScriptCoreSources.bkl:
976
977 2008-07-08  Simon Hausmann  <hausmann@webkit.org>
978
979         Fix the Qt build, add ProfileGenerator.cpp to the build.
980
981         * JavaScriptCore.pri:
982
983 2008-07-07  David Kilzer  <ddkilzer@apple.com>
984
985         releaseFastMallocFreeMemory() should always be defined
986
987         Reviewed by Darin.
988
989         * JavaScriptCore.exp: Changed to export C++ binding for
990         WTF::releaseFastMallocFreeMemory() instead of C binding for
991         releaseFastMallocFreeMemory().
992         * wtf/FastMalloc.cpp: Moved definitions of
993         releaseFastMallocFreeMemory() to be in the WTF namespace
994         regardless whether FORCE_SYSTEM_MALLOC is defined.
995         * wtf/FastMalloc.h: Moved releaseFastMallocFreeMemory() from
996         extern "C" binding to WTF::releaseFastMallocFreeMemory().
997
998 2008-07-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
999
1000         Reviewed by Geoff.
1001
1002         Bug 19926: URL causes crash within a minute
1003         <https://bugs.webkit.org/show_bug.cgi?id=19926>
1004
1005         Add a check that lastGlobalObject is non-null in Machine::execute()
1006         before copying its globals to the current register file.
1007
1008         In theory, it is possible to make a test case for this, but it will
1009         take a while to get it right.
1010
1011         * VM/Machine.cpp:
1012         (KJS::Machine::execute):
1013
1014 2008-07-07  Darin Adler  <darin@apple.com>
1015
1016         Rubber stamped by Adele.
1017
1018         * VM/Machine.cpp:
1019         (KJS::Machine::privateExecute): Fix a typo in a comment.
1020
1021 2008-07-07  Steve Falkenburg  <sfalken@apple.com>
1022
1023         Build fixes.
1024
1025         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1026         * JavaScriptCore.vcproj/testapi/testapi.vcproj:
1027
1028 2008-07-07  Kevin McCullough  <kmccullough@apple.com>
1029
1030         Reviewed by Darin.
1031
1032         When the profiler is running it gathers information and creates a
1033         Profile.  After it finishes the Profile can be sorted and have other
1034         data refinements run over it.  Both of these were done in the same class
1035         before.  Now I split the gathering operations into a new class called
1036         ProfileGenerator.
1037
1038         * JavaScriptCore.xcodeproj/project.pbxproj:
1039         * profiler/Profile.cpp: Removed code related to the gather stage of a
1040         Profile's creation.  
1041         (KJS::Profile::create):
1042         (KJS::Profile::Profile):
1043         * profiler/Profile.h: Ditto.
1044         (KJS::Profile::title):
1045         (KJS::Profile::callTree):
1046         (KJS::Profile::setHead):
1047         * profiler/ProfileGenerator.cpp: Added. This is the class that will
1048         handle the stage of creating a Profile.  Once the Profile is finished
1049         being created, this class goes away.
1050         (KJS::ProfileGenerator::create):
1051         (KJS::ProfileGenerator::ProfileGenerator):
1052         (KJS::ProfileGenerator::title):
1053         (KJS::ProfileGenerator::willExecute):
1054         (KJS::ProfileGenerator::didExecute):
1055         (KJS::ProfileGenerator::stopProfiling):
1056         (KJS::ProfileGenerator::didFinishAllExecution):
1057         (KJS::ProfileGenerator::removeProfileStart):
1058         (KJS::ProfileGenerator::removeProfileEnd):
1059         * profiler/ProfileGenerator.h: Added.
1060         (KJS::ProfileGenerator::profile):
1061         (KJS::ProfileGenerator::originatingGlobalExec):
1062         (KJS::ProfileGenerator::pageGroupIdentifier):
1063         (KJS::ProfileGenerator::client):
1064         (KJS::ProfileGenerator::stoppedProfiling):
1065         * profiler/Profiler.cpp: Now operates with the ProfileGenerator instead
1066         of the Profile.
1067         (KJS::Profiler::startProfiling):
1068         (KJS::Profiler::stopProfiling):
1069         (KJS::Profiler::didFinishAllExecution): It is here that the Profile is
1070         handed off to its client and the Profile Generator is no longer needed.
1071         (KJS::dispatchFunctionToProfiles):
1072         (KJS::Profiler::willExecute):
1073         (KJS::Profiler::didExecute):
1074         * profiler/Profiler.h: Cleaned up the includes and subsequently the
1075         forward declarations.  Also use the new ProfileGenerator.
1076         (KJS::ProfilerClient::~ProfilerClient):
1077         (KJS::Profiler::currentProfiles):
1078         * profiler/TreeProfile.cpp: Use Profile's new interface.
1079         (KJS::TreeProfile::create):
1080         (KJS::TreeProfile::TreeProfile):
1081         * profiler/TreeProfile.h:
1082
1083 2008-07-07  Sam Weinig  <sam@webkit.org>
1084
1085         Reviewed by Cameron Zwarich.
1086
1087         Third step in broad cleanup effort.
1088
1089         [ File list elided ]
1090
1091 2008-07-06  Sam Weinig  <sam@webkit.org>
1092
1093         Reviewed by Cameron Zwarich.
1094
1095         Second step in broad cleanup effort.
1096
1097         [ File list elided ]
1098
1099 2008-07-05  Sam Weinig  <sam@webkit.org>
1100
1101         Reviewed by Cameron Zwarich.
1102
1103         First step in broad cleanup effort.
1104
1105         [ File list elided ]
1106
1107 2008-07-05  Sam Weinig  <sam@webkit.org>
1108
1109         Rubber-stamped by Cameron Zwarich.
1110
1111         Rename list.h/cpp to ArgList.h/cpp.
1112
1113         * GNUmakefile.am:
1114         * JavaScriptCore.pri:
1115         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1116         * JavaScriptCore.xcodeproj/project.pbxproj:
1117         * JavaScriptCoreSources.bkl:
1118         * VM/Machine.h:
1119         * kjs/AllInOneFile.cpp:
1120         * kjs/ArgList.cpp: Copied from JavaScriptCore/kjs/list.cpp.
1121         * kjs/ArgList.h: Copied from JavaScriptCore/kjs/list.h.
1122         * kjs/IndexToNameMap.cpp:
1123         * kjs/JSGlobalData.cpp:
1124         * kjs/JSGlobalData.h:
1125         * kjs/JSObject.h:
1126         * kjs/collector.cpp:
1127         * kjs/list.cpp: Removed.
1128         * kjs/list.h: Removed.
1129
1130 2008-07-05  Sam Weinig  <sam@webkit.org>
1131
1132         Fix non-AllInOne builds again.
1133
1134         * kjs/BooleanPrototype.cpp:
1135         * kjs/ErrorPrototype.cpp:
1136         * kjs/FunctionPrototype.cpp:
1137         * kjs/NumberPrototype.cpp:
1138         * kjs/ObjectPrototype.cpp:
1139
1140 2008-07-05  Sam Weinig  <sam@webkit.org>
1141
1142         Fix build on case-sensitive build systems.
1143
1144         * kjs/IndexToNameMap.cpp:
1145
1146 2008-07-05  Sam Weinig  <sam@webkit.org>
1147
1148         Fix build.
1149
1150         * kjs/Arguments.cpp:
1151         * kjs/BooleanPrototype.cpp:
1152         * kjs/DateConstructor.cpp:
1153         * kjs/ErrorPrototype.cpp:
1154         * kjs/FunctionPrototype.cpp:
1155         * kjs/NumberPrototype.cpp:
1156         * kjs/ObjectPrototype.cpp:
1157         * kjs/RegExpPrototype.cpp:
1158         * kjs/StringConstructor.cpp:
1159         * kjs/lookup.cpp:
1160
1161 2008-07-05  Sam Weinig  <sam@webkit.org>
1162
1163         Fix non-AllInOne build.
1164
1165         * kjs/JSGlobalObject.cpp:
1166
1167 2008-07-05  Sam Weinig  <sam@webkit.org>
1168
1169         Rubber-stamped by Cameron Zwarich.
1170
1171         Split Arguments, IndexToNameMap, PrototypeFunction, GlobalEvalFunction and 
1172         the functions on the global object out of JSFunction.h/cpp.
1173
1174         * GNUmakefile.am:
1175         * JavaScriptCore.pri:
1176         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1177         * JavaScriptCore.xcodeproj/project.pbxproj:
1178         * JavaScriptCoreSources.bkl:
1179         * VM/Machine.cpp:
1180         * kjs/AllInOneFile.cpp:
1181         * kjs/Arguments.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
1182         * kjs/Arguments.h: Copied from JavaScriptCore/kjs/JSFunction.h.
1183         * kjs/GlobalEvalFunction.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
1184         * kjs/GlobalEvalFunction.h: Copied from JavaScriptCore/kjs/JSFunction.h.
1185         * kjs/IndexToNameMap.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
1186         * kjs/IndexToNameMap.h: Copied from JavaScriptCore/kjs/JSFunction.h.
1187         * kjs/JSActivation.cpp:
1188         * kjs/JSFunction.cpp:
1189         * kjs/JSFunction.h:
1190         * kjs/JSGlobalObject.cpp:
1191         * kjs/JSGlobalObjectFunctions.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
1192         * kjs/JSGlobalObjectFunctions.h: Copied from JavaScriptCore/kjs/JSFunction.h.
1193         The functions on the global object should be in JSGlobalObject.cpp, but putting them there
1194         was a 0.5% regression.
1195
1196         * kjs/PrototypeFunction.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
1197         * kjs/PrototypeFunction.h: Copied from JavaScriptCore/kjs/JSFunction.h.
1198         * kjs/Shell.cpp:
1199         * kjs/lexer.cpp:
1200         * kjs/ustring.cpp:
1201
1202 2008-07-04  Sam Weinig  <sam@webkit.org>
1203
1204         Really fix the mac build.
1205
1206         * JavaScriptCore.xcodeproj/project.pbxproj:
1207
1208 2008-07-04  Sam Weinig  <sam@webkit.org>
1209
1210         Fix mac build.
1211
1212         * JavaScriptCore.xcodeproj/project.pbxproj:
1213
1214 2008-07-04  Sam Weinig  <sam@webkit.org>
1215
1216         Fix non-AllInOne builds.
1217
1218         * kjs/Error.cpp:
1219         * kjs/GetterSetter.cpp:
1220         * kjs/JSImmediate.cpp:
1221         * kjs/operations.cpp:
1222
1223 2008-07-04  Sam Weinig  <sam@webkit.org>
1224
1225         Rubber-stamped by Dan Bernstein.
1226
1227         Split Error and GetterSetter out of JSObject.h.
1228
1229         * API/JSCallbackObjectFunctions.h:
1230         * GNUmakefile.am:
1231         * JavaScriptCore.pri:
1232         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1233         * JavaScriptCore.xcodeproj/project.pbxproj:
1234         * JavaScriptCoreSources.bkl:
1235         * kjs/AllInOneFile.cpp:
1236         * kjs/ClassInfo.h: Copied from JavaScriptCore/kjs/JSObject.h.
1237         * kjs/Error.cpp: Copied from JavaScriptCore/kjs/JSObject.cpp.
1238         * kjs/Error.h: Copied from JavaScriptCore/kjs/JSObject.h.
1239         * kjs/GetterSetter.cpp:
1240         * kjs/GetterSetter.h: Copied from JavaScriptCore/kjs/JSObject.h.
1241         * kjs/JSObject.cpp:
1242         * kjs/JSObject.h:
1243         * kjs/nodes.h:
1244
1245 2008-07-04  Simon Hausmann  <hausmann@webkit.org>
1246
1247         Fix the Wx build, added TreeProfile.cpp to the build.
1248
1249         * JavaScriptCoreSources.bkl:
1250
1251 2008-07-03  Mark Rowe  <mrowe@apple.com>
1252
1253         Reviewed by Oliver Hunt.
1254
1255         Fix output path of recently-added script phase to reference the correct file.
1256         This prevents Xcode from running the script phase unnecessarily, which caused
1257         the generated header to be recreated and lead to AllInOneFile.cpp rebuilding.
1258
1259         * JavaScriptCore.xcodeproj/project.pbxproj:
1260
1261 2008-07-03  Mark Rowe  <mrowe@apple.com>
1262
1263         Follow-up to the 64-bit build fix.  Use intptr_t rather than ssize_t as
1264         the latter is non-standard and does not exist on Windows.
1265
1266         * kjs/JSLock.cpp:
1267         (KJS::JSLock::lockCount):
1268         (KJS::JSLock::lock):
1269         (KJS::JSLock::unlock):
1270         (KJS::JSLock::DropAllLocks::DropAllLocks):
1271         * kjs/JSLock.h:
1272
1273 2008-07-02  Mark Rowe  <mrowe@apple.com>
1274
1275         Fix the 64-bit build.  pthread_getspecific works with pointer-sized values,
1276         so use ssize_t rather than int to track the lock count to avoid warnings about
1277         truncating the result of pthread_getspecific.
1278
1279         * kjs/JSLock.cpp:
1280         (KJS::JSLock::lockCount):
1281         (KJS::JSLock::lock):
1282         (KJS::JSLock::unlock):
1283         (KJS::JSLock::DropAllLocks::DropAllLocks):
1284         * kjs/JSLock.h:
1285
1286 2008-07-03  Geoffrey Garen  <ggaren@apple.com>
1287
1288         Reviewed by Sam Weinig.
1289         
1290         Removed checking for the array get/put fast case from the array code.
1291         Callers who want the fast case should call getIndex and/or setIndex
1292         instead. (get_by_val and put_by_val already do this.)
1293         
1294         SunSpider reports no change overall, but a 1.4% speedup on fannkuch and
1295         a 3.6% speedup on nsieve.
1296
1297 2008-07-03  Dan Bernstein  <mitz@apple.com>
1298
1299         - Windows build fix
1300
1301         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added TreeProfile.{h,cpp}.
1302
1303 2008-07-03  Dan Bernstein  <mitz@apple.com>
1304
1305         Reviewed by Anders Carlsson.
1306
1307         - Windows build fix
1308
1309         * VM/Machine.cpp:
1310         (KJS::Machine::Machine):
1311
1312 2008-07-03  Simon Hausmann  <hausmann@webkit.org>
1313
1314         Reviewed by Alexey Proskuryakov.
1315
1316         Fix the non-threaded build.
1317
1318         * kjs/JSGlobalData.cpp:
1319         (KJS::JSGlobalData::threadInstanceInternal):
1320
1321 2008-07-03  Simon Hausmann  <hausmann@webkit.org>
1322
1323         Fix the Qt build, added TreeProfile to the build.
1324
1325         * JavaScriptCore.pri:
1326
1327 2008-07-02  Alexey Proskuryakov  <ap@webkit.org>
1328
1329         Reviewed by Geoff.
1330
1331         Don't create unnecessary JSGlobalData instances.
1332
1333         * kjs/JSGlobalData.h:
1334         * kjs/JSGlobalData.cpp:
1335         (KJS::JSGlobalData::threadInstanceExists):
1336         (KJS::JSGlobalData::sharedInstanceExists):
1337         (KJS::JSGlobalData::threadInstance):
1338         (KJS::JSGlobalData::sharedInstance):
1339         (KJS::JSGlobalData::threadInstanceInternal):
1340         (KJS::JSGlobalData::sharedInstanceInternal):
1341         Added methods to query instance existence.
1342
1343         * kjs/InitializeThreading.cpp:
1344         (KJS::initializeThreadingOnce):
1345         Initialize thread instance static in a new way.
1346
1347         * API/JSBase.cpp:
1348         (JSGarbageCollect):
1349         * kjs/collector.cpp:
1350         (KJS::Heap::collect):
1351         Check for instance existence before accessing it.
1352
1353 2008-07-02  Geoffrey Garen  <ggaren@apple.com>
1354
1355         Reviewed by Cameron Zwarich.
1356         
1357         Fixed https://bugs.webkit.org/show_bug.cgi?id=19862
1358         REGRESSION (r34907): Gmail crashes in JavaScriptCore code while editing drafts
1359         
1360         I was never able to reproduce this issue, but Cameron could, and he says
1361         that this patch fixes it.
1362         
1363         The crash seems tied to a timer or event handler callback. In such a case,
1364         the sole reference to the global object may be in the current call frame,
1365         so we can't depend on the global object to mark the call frame area in
1366         the register file.
1367         
1368         The new GC marking rule is: the global object is not responsible for
1369         marking the whole register file -- it's just responsible for the globals
1370         section it's tied to. The heap is responsible for marking the call frame area.
1371
1372 2008-07-02  Mark Rowe  <mrowe@apple.com>
1373
1374         Reviewed by Sam Weinig.
1375
1376         Add the ability to trace JavaScriptCore garabge collections using dtrace.
1377
1378         * JavaScriptCore.xcodeproj/project.pbxproj: Generate the dtrace probe header
1379         file when building on a new enough version of Mac OS X.
1380         * JavaScriptCorePrefix.h: Add our standard Mac OS X version detection macros.
1381         * kjs/Tracing.d: Declare three dtrace probes.
1382         * kjs/Tracing.h: Include the generated dtrace macros if dtrace is available,
1383         otherwise provide versions that do nothing.
1384         * kjs/collector.cpp:
1385         (KJS::Heap::collect): Fire dtrace probes when starting a collection, after the
1386         mark phase has completed, and when the collection is complete.
1387         * wtf/Platform.h: Define HAVE_DTRACE when building on a new enough version of Mac OS X.
1388
1389 2008-07-02  Geoffrey Garen  <ggaren@apple.com>
1390
1391         Rubber stamped by Oliver Hunt.
1392         
1393         Reduced the max register file size from 8MB to 2MB.
1394
1395         We still allow about 20,000 levels of recursion.
1396
1397 2008-07-02  Alp Toker  <alp@nuanti.com>
1398
1399         Build fix for r34960. Add TreeProfile.cpp to build.
1400
1401         * GNUmakefile.am:
1402
1403 2008-07-02  Geoffrey Garen  <ggaren@apple.com>
1404
1405         Reviewed by Oliver Hunt.
1406
1407         Optimized a[n] get for cases when a is an array or a string. When a is
1408         an array, we optimize both get and put. When a is a string, we only
1409         optimize get, since you can't put to a string.
1410         
1411         SunSpider says 3.4% faster.
1412
1413 2008-07-02  Kevin McCullough  <kmccullough@apple.com>
1414
1415         Reviewed by Darin.
1416
1417         -Small cleanup in preparation for implementing Bottom-up.
1418
1419         * profiler/CallIdentifier.h: Rename debug function to make it clear of
1420         its output and intention to be debug only.
1421         (KJS::CallIdentifier::operator const char* ): Implement in terms of
1422         c_str.
1423         (KJS::CallIdentifier::c_str):
1424         * profiler/ProfileNode.cpp: Impelment findChild() which will be needed
1425         by the bottom-up implementation.
1426         (KJS::ProfileNode::findChild):
1427         * profiler/ProfileNode.h: Added comments to make the collections of
1428         functions more clear.
1429         (KJS::ProfileNode::operator==):
1430         (KJS::ProfileNode::c_str):
1431
1432 2008-07-02  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
1433
1434         Reviewed by Darin.
1435
1436         Bug 19776: Number.toExponential() is incorrect for numbers between 0.1 and 1
1437         <https://bugs.webkit.org/show_bug.cgi?id=19776>
1438
1439         Perform the sign check for the exponent on the actual exponent value,
1440         which is 1 less than the value of decimalPoint, instead of on the value
1441         of decimalPoint itself.
1442
1443         * kjs/NumberPrototype.cpp:
1444         (KJS::exponentialPartToString):
1445
1446 2008-07-02  Kevin McCullough  <kmccullough@apple.com>
1447
1448         Reviewed by Darin.
1449
1450         <rdar://problem/5951532> JSProfiler: Implement Bottom-Up view (19228)
1451         - Subclass TreeProfile as I prepare for a HeavyProfile to be comming
1452         later.
1453
1454         * JavaScriptCore.xcodeproj/project.pbxproj:
1455         * profiler/Profile.cpp: By default we create a TreeProfile.
1456         (KJS::Profile::create):
1457         * profiler/Profile.h: Changes to the Profile class to make it amenable
1458         to be inherited from.
1459         (KJS::Profile::~Profile):
1460         * profiler/TreeProfile.cpp: Added.
1461         (KJS::TreeProfile::create):
1462         (KJS::TreeProfile::TreeProfile):
1463         (KJS::TreeProfile::heavyProfile):
1464         * profiler/TreeProfile.h: Added.
1465         (KJS::TreeProfile::treeProfile):
1466
1467 2008-07-02  Kevin McCullough  <kmccullough@apple.com>
1468
1469         Reviewed by Dan.
1470
1471         Broke CallIdentifier out into its own file. I did this because it's
1472         going to grow a lot soon and I wanted this to be a separate patch.
1473
1474         * JavaScriptCore.xcodeproj/project.pbxproj:
1475         * profiler/CallIdentifier.h: Added.
1476         (KJS::CallIdentifier::CallIdentifier):
1477         (KJS::CallIdentifier::operator==):
1478         (KJS::CallIdentifier::operator!=):
1479         (KJS::CallIdentifier::operator const char* ):
1480         (KJS::CallIdentifier::toString):
1481         * profiler/ProfileNode.h:
1482
1483 2008-07-02  Simon Hausmann  <hausmann@webkit.org>
1484
1485         Build fix. Implemented missing functions for single-threaded build.
1486
1487         * kjs/JSLock.cpp:
1488         (KJS::JSLock::JSLock):
1489         (KJS::JSLock::lock):
1490         (KJS::JSLock::unlock):
1491         (KJS::JSLock::DropAllLocks::DropAllLocks):
1492
1493 2008-07-02  Alexey Proskuryakov  <ap@webkit.org>
1494
1495         Another non-AllInOne build fix.
1496
1497         * kjs/JSGlobalObject.cpp: Include JSLock.h here, too.
1498
1499 2008-07-02  Alexey Proskuryakov  <ap@webkit.org>
1500
1501         Non-AllInOne build fix.
1502
1503         * kjs/interpreter.cpp: Include JSLock.h.
1504
1505 2008-06-30  Alexey Proskuryakov  <ap@webkit.org>
1506
1507         Reviewed by Darin.
1508
1509         Disable JSLock for per-thread contexts.
1510
1511         No change on SunSpider.
1512
1513         * kjs/JSGlobalData.h:
1514         * kjs/JSGlobalData.cpp:
1515         (KJS::JSGlobalData::JSGlobalData):
1516         (KJS::JSGlobalData::sharedInstance):
1517         Added isSharedInstance as a better way to tell whether the instance is shared (legacy).
1518
1519         * kjs/JSLock.cpp:
1520         (KJS::createJSLockCount):
1521         (KJS::JSLock::lockCount):
1522         (KJS::setLockCount):
1523         (KJS::JSLock::JSLock):
1524         (KJS::JSLock::lock):
1525         (KJS::JSLock::unlock):
1526         (KJS::JSLock::currentThreadIsHoldingLock):
1527         (KJS::JSLock::DropAllLocks::DropAllLocks):
1528         (KJS::JSLock::DropAllLocks::~DropAllLocks):
1529         * kjs/JSLock.h:
1530         (KJS::JSLock::JSLock):
1531         (KJS::JSLock::~JSLock):
1532         Made JSLock and JSLock::DropAllLocks constructors take a parameter to decide whether to
1533         actually lock a mutex, or only to increment recursion count. We cannot turn it into no-op
1534         if we want to keep existing assertions working.
1535         Made recursion count per-thread, now that locks may not lock.
1536
1537         * API/JSBase.cpp:
1538         (JSEvaluateScript): Take JSLock after casting JSContextRef to ExecState* (which doesn't need
1539         locking in any case), so that a decision whether to actually lock can be made.
1540         (JSCheckScriptSyntax): Ditto.
1541         (JSGarbageCollect): Only lock while collecting the shared heap, not the per-thread one.
1542
1543         * API/JSObjectRef.cpp:
1544         (JSClassCreate): Don't lock, as there is no reason to.
1545         (JSClassRetain): Ditto.
1546         (JSClassRelease): Ditto.
1547         (JSPropertyNameArrayRetain): Ditto.
1548         (JSPropertyNameArrayRelease): Only lock while deleting the array, as that may touch
1549         identifier table.
1550         (JSPropertyNameAccumulatorAddName): Adding a string also involves an identifier table
1551         lookup, and possibly modification.
1552
1553         * API/JSStringRef.cpp:
1554         (JSStringCreateWithCharacters):
1555         (JSStringCreateWithUTF8CString):
1556         (JSStringRetain):
1557         (JSStringRelease):
1558         (JSStringGetUTF8CString):
1559         (JSStringIsEqual):
1560         * API/JSStringRefCF.cpp:
1561         (JSStringCreateWithCFString):
1562         JSStringRef operations other than releasing do not need locking.
1563
1564         * VM/Machine.cpp: Don't include unused JSLock.h.
1565
1566         * kjs/CollectorHeapIntrospector.cpp: (KJS::CollectorHeapIntrospector::statistics):
1567         Don't take the lock for real, as heap introspection pauses the process anyway. It seems that
1568         the existing code could cause deadlocks.
1569
1570         * kjs/Shell.cpp:
1571         (functionGC):
1572         (main):
1573         (jscmain):
1574         The test tool uses a per-thread context, so no real locking is required.
1575
1576         * kjs/collector.h:
1577         (KJS::Heap::setGCProtectNeedsLocking): Optionally protect m_protectedValues access with a
1578         per-heap mutex. This is only needed for WebCore Database code, which violates the "no data
1579         migration between threads" by using ProtectedPtr on a background thread.
1580         (KJS::Heap::isShared): Keep a shared flag here, as well.
1581
1582         * kjs/protect.h:
1583         (KJS::::ProtectedPtr):
1584         (KJS::::~ProtectedPtr):
1585         (KJS::::operator):
1586         (KJS::operator==):
1587         (KJS::operator!=):
1588         ProtectedPtr is ony used from WebCore, so it doesn't need to take JSLock. An assertion in
1589         Heap::protect/unprotect guards agains possible future unlocked uses of ProtectedPtr in JSC.
1590
1591         * kjs/collector.cpp:
1592         (KJS::Heap::Heap): Initialize m_isShared.
1593         (KJS::Heap::~Heap): No need to lock for real during destruction, but must keep assertions
1594         in sweep() working.
1595         (KJS::destroyRegisteredThread): Registered thread list is only accessed for shared heap,
1596         so locking is always needed here.
1597         (KJS::Heap::registerThread): Ditto.
1598         (KJS::Heap::markStackObjectsConservatively): Use m_isShared instead of comparing to a shared
1599         instance for a small speedup.
1600         (KJS::Heap::setGCProtectNeedsLocking): Create m_protectedValuesMutex. There is currently no
1601         way to undo this - and ideally, Database code will be fixed to lo longer require this quirk.
1602         (KJS::Heap::protect): Take m_protectedValuesMutex (if it exists) while accessing
1603         m_protectedValues.
1604         (KJS::Heap::unprotect): Ditto.
1605         (KJS::Heap::markProtectedObjects): Ditto.
1606         (KJS::Heap::protectedGlobalObjectCount): Ditto.
1607         (KJS::Heap::protectedObjectCount): Ditto.
1608         (KJS::Heap::protectedObjectTypeCounts): Ditto.
1609
1610         * kjs/ustring.cpp:
1611         * kjs/ustring.h:
1612         Don't include JSLock.h, which is no longer used here. As a result, an explicit include had
1613         to be added to many files in JavaScriptGlue, WebCore and WebKit.
1614
1615         * kjs/JSGlobalObject.cpp:
1616         (KJS::JSGlobalObject::init):
1617         * API/JSCallbackConstructor.cpp:
1618         (KJS::constructJSCallback):
1619         * API/JSCallbackFunction.cpp:
1620         (KJS::JSCallbackFunction::call):
1621         * API/JSCallbackObjectFunctions.h:
1622         (KJS::::init):
1623         (KJS::::getOwnPropertySlot):
1624         (KJS::::put):
1625         (KJS::::deleteProperty):
1626         (KJS::::construct):
1627         (KJS::::hasInstance):
1628         (KJS::::call):
1629         (KJS::::getPropertyNames):
1630         (KJS::::toNumber):
1631         (KJS::::toString):
1632         (KJS::::staticValueGetter):
1633         (KJS::::callbackGetter):
1634         * API/JSContextRef.cpp:
1635         (JSGlobalContextCreate):
1636         (JSGlobalContextRetain):
1637         (JSGlobalContextRelease):
1638         * API/JSValueRef.cpp:
1639         (JSValueIsEqual):
1640         (JSValueIsStrictEqual):
1641         (JSValueIsInstanceOfConstructor):
1642         (JSValueMakeNumber):
1643         (JSValueMakeString):
1644         (JSValueToNumber):
1645         (JSValueToStringCopy):
1646         (JSValueToObject):
1647         (JSValueProtect):
1648         (JSValueUnprotect):
1649         * JavaScriptCore.exp:
1650         * kjs/PropertyNameArray.h:
1651         (KJS::PropertyNameArray::globalData):
1652         * kjs/interpreter.cpp:
1653         (KJS::Interpreter::checkSyntax):
1654         (KJS::Interpreter::evaluate):
1655         Pass a parameter to JSLock/JSLock::DropAllLocks to decide whether the lock needs to be taken.
1656
1657 2008-07-01  Alexey Proskuryakov  <ap@webkit.org>
1658
1659         Reviewed by Darin.
1660
1661         https://bugs.webkit.org/show_bug.cgi?id=19834
1662         Failed assertion in JavaScriptCore/VM/SegmentedVector.h:82
1663
1664         Creating a global object with a custom prototype resets it twice (wasteful!).
1665         So, addStaticGlobals() was called twice, but JSGlobalObject::reset() didn't reset
1666         the register array.        
1667
1668         * kjs/JSGlobalObject.cpp: (KJS::JSGlobalObject::reset): Call setRegisterArray(0, 0).
1669
1670         * kjs/JSVariableObject.h: Changed registerArray to OwnArrayPtr. Also, added private copy
1671         constructor and operator= to ensure that no one attempts to copy this object (for whatever
1672         reason, I couldn't make Noncopyable work).
1673
1674         * kjs/JSGlobalObject.h: (KJS::JSGlobalObject::addStaticGlobals): Allocate registerArray
1675         with new[].
1676
1677         * kjs/JSVariableObject.cpp:
1678         (KJS::JSVariableObject::copyRegisterArray): Allocate registerArray with new[].
1679         (KJS::JSVariableObject::setRegisterArray): Avoid hitting an assertion in OwnArrayPtr when
1680         "changing" the value from 0 to 0.
1681
1682 2008-07-01  Geoffrey Garen  <ggaren@apple.com>
1683
1684         Reviewed by Oliver Hunt.
1685         
1686         Removed and/or reordered exception checks in array-style a[n] access.
1687         
1688         SunSpider says 1.4% faster.
1689
1690         * VM/Machine.cpp:
1691         (KJS::Machine::privateExecute): No need to check for exceptions before
1692         calling toString, toNumber and/or get. If the call ends up being observable
1693         through toString, valueOf, or a getter, we short-circuit it there, instead.
1694         In the op_del_by_val case, I removed the incorrect comment without actually
1695         removing the code, since I didn't want to tempt the GCC fates!
1696
1697         * kjs/JSObject.cpp:
1698         (KJS::callDefaultValueFunction): Added exception check to prevent
1699         toString and valueOf functions from observing execution after an exception
1700         has been thrown. This removes some of the burden of exception checking
1701         from the machine.
1702
1703         (KJS::JSObject::defaultValue): Removed redundant exception check here.
1704
1705         * kjs/PropertySlot.cpp:
1706         (KJS::PropertySlot::functionGetter): Added exception check to prevent
1707         getter functions from observing execution after an exception has been
1708         thrown. This removes some of the burden of exception checking from the
1709         machine.
1710
1711 2008-07-01  Geoffrey Garen  <ggaren@apple.com>
1712
1713         Reviewed by Oliver Hunt.
1714         
1715         Optimized a[n] get and put for cases where n is an immediate unsigned
1716         value.
1717         
1718         SunSpider says 3.5% faster.
1719
1720 2008-07-01  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
1721
1722         Reviewed by Darin.
1723
1724         Bug 19844: JavaScript Switch statement modifies "this"
1725         <https://bugs.webkit.org/show_bug.cgi?id=19844>
1726
1727         Use a temporary when generating code for switch clauses to avoid
1728         overwriting 'this' or a local variable.
1729
1730         * kjs/nodes.cpp:
1731         (KJS::CaseBlockNode::emitCodeForBlock):
1732
1733 2008-07-01  Christian Dywan  <christian@twotoasts.de>
1734
1735         Gtk+ build fix.
1736
1737         * kjs/list.cpp: Include "JSCell.h"
1738
1739 2008-07-01  Kevin McCullough  <kmccullough@apple.com>
1740
1741         Build fix.
1742
1743         * JavaScriptCore.xcodeproj/project.pbxproj:
1744
1745 2008-07-01  Dan Bernstein  <mitz@apple.com>
1746
1747         Reviewed by Anders Carlsson.
1748
1749         - Mac release build fix
1750
1751         * JavaScriptCore.exp:
1752
1753 2008-07-01  Sam Weinig  <sam@webkit.org>
1754
1755         Try and fix mac builds.
1756
1757         * JavaScriptCore.exp:
1758
1759 2008-07-01  Sam Weinig  <sam@webkit.org>
1760
1761         Fix non-AllInOne builds.
1762
1763         * kjs/DateMath.cpp:
1764
1765 2008-07-01  Sam Weinig  <sam@webkit.org>
1766
1767         Reviewed by Darin Adler.
1768
1769         Split JSCell and JSNumberCell class declarations out of JSValue.h
1770
1771         * GNUmakefile.am:
1772         * JavaScriptCore.pri:
1773         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1774         * JavaScriptCore.xcodeproj/project.pbxproj:
1775         * JavaScriptCoreSources.bkl:
1776         * VM/JSPropertyNameIterator.h:
1777         * kjs/AllInOneFile.cpp:
1778         * kjs/JSCell.cpp: Copied from JavaScriptCore/kjs/JSValue.cpp.
1779         * kjs/JSCell.h: Copied from JavaScriptCore/kjs/JSValue.h.
1780         (KJS::JSValue::getJSNumber):
1781         * kjs/JSNumberCell.cpp:
1782         * kjs/JSNumberCell.h: Copied from JavaScriptCore/kjs/JSValue.h.
1783         * kjs/JSObject.h:
1784         * kjs/JSString.cpp:
1785         (KJS::jsString):
1786         (KJS::jsOwnedString):
1787         * kjs/JSString.h:
1788         (KJS::JSValue::toThisJSString):
1789         * kjs/JSValue.cpp:
1790         * kjs/JSValue.h:
1791
1792 2008-07-01  Anders Carlsson  <andersca@apple.com>
1793
1794         Build fixes.
1795         
1796         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1797         * kjs/JSGlobalObject.h:
1798         (KJS::JSGlobalObject::addStaticGlobals):
1799
1800 2008-07-01  Simon Hausmann  <hausmann@webkit.org>
1801
1802         Build fix, include OwnPtr.h.
1803
1804         * kjs/RegExpConstructor.h:
1805
1806 2008-06-30  Geoffrey Garen  <ggaren@apple.com>
1807
1808         Reviewed by Oliver Hunt.
1809         
1810         Fixed a global object leak caused by the switch to one register file.
1811         
1812         Don't unconditionally mark the register file, since that logically
1813         makes all global variables GC roots, even when their global object is
1814         no longer reachable.
1815         
1816         Instead, make the global object associated with the register file
1817         responsible for marking the register file.
1818
1819 2008-06-30  Geoffrey Garen  <ggaren@apple.com>
1820
1821         Reviewed by Oliver Hunt.
1822         
1823         Removed the "registerBase" abstraction. Since the register file never
1824         reallocates, we can keep direct pointers into it, instead of
1825         <registerBase, offset> tuples.
1826         
1827         SunSpider says 0.8% faster.
1828         
1829 2008-06-30  Oliver Hunt  <oliver@apple.com>
1830
1831         Reviewed by NOBODY (build fix).
1832
1833         Fix build by adding all (hopefully) the missing includes.
1834
1835         * kjs/BooleanPrototype.cpp:
1836         * kjs/DateConstructor.cpp:
1837         * kjs/ErrorPrototype.cpp:
1838         * kjs/FunctionPrototype.cpp:
1839         * kjs/NativeErrorConstructor.cpp:
1840         * kjs/NumberPrototype.cpp:
1841         * kjs/ObjectPrototype.cpp:
1842         * kjs/RegExpConstructor.cpp:
1843         * kjs/StringConstructor.cpp:
1844         * kjs/StringPrototype.cpp:
1845
1846 2008-06-30  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
1847
1848         Reviewed by Oliver.
1849
1850         Bug 19830: REGRESSION (r34883): Google Reader doesn't show up feed list on sidebar
1851         <https://bugs.webkit.org/show_bug.cgi?id=19830>
1852
1853         Ensure that we do not eliminate a write to a local register when doing
1854         peephole optimizations.
1855
1856         * VM/CodeGenerator.cpp:
1857         (KJS::CodeGenerator::emitJumpIfTrue):
1858         (KJS::CodeGenerator::emitJumpIfFalse):
1859
1860 2008-06-30  Sam Weinig  <sam@webkit.org>
1861
1862         Rubber-stamped by Darin Alder.
1863
1864         Split InternalFunction into its own header file.
1865
1866         * API/JSCallbackFunction.h:
1867         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1868         * JavaScriptCore.xcodeproj/project.pbxproj:
1869         * kjs/ArrayConstructor.h:
1870         * kjs/BooleanConstructor.h:
1871         * kjs/DateConstructor.h:
1872         * kjs/ErrorConstructor.h:
1873         * kjs/FunctionConstructor.h:
1874         * kjs/FunctionPrototype.h:
1875         * kjs/InternalFunction.h: Copied from kjs/JSFunction.h.
1876         * kjs/JSFunction.h:
1877         * kjs/NativeErrorConstructor.h:
1878         * kjs/NumberConstructor.h:
1879         * kjs/ObjectConstructor.h:
1880         * kjs/RegExpConstructor.h:
1881         * kjs/StringConstructor.h:
1882         * profiler/Profiler.cpp:
1883
1884 2008-06-30  Sam Weinig  <sam@webkit.org>
1885
1886         Reviewed by Kevin McCullough.
1887
1888         Remove empty files Instruction.cpp, LabelID.cpp, Register.cpp and RegisterID.cpp.
1889
1890         * GNUmakefile.am:
1891         * JavaScriptCore.pri:
1892         * JavaScriptCore.xcodeproj/project.pbxproj:
1893         * JavaScriptCoreSources.bkl:
1894         * VM/Instruction.cpp: Removed.
1895         * VM/LabelID.cpp: Removed.
1896         * VM/Register.cpp: Removed.
1897         * VM/RegisterID.cpp: Removed.
1898
1899 2008-06-30  Sam Weinig  <sam@webkit.org>
1900
1901         Rubber-stamped (reluctantly) by Kevin McCullough.
1902
1903         Rename date_object.h/cpp to DateInstance.h/cpp
1904
1905         * GNUmakefile.am:
1906         * JavaScriptCore.pri:
1907         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1908         * JavaScriptCore.xcodeproj/project.pbxproj:
1909         * JavaScriptCoreSources.bkl:
1910         * kjs/AllInOneFile.cpp:
1911         * kjs/DateConstructor.cpp:
1912         * kjs/DateInstance.cpp: Copied from kjs/date_object.cpp.
1913         * kjs/DateInstance.h: Copied from kjs/date_object.h.
1914         * kjs/DatePrototype.cpp:
1915         * kjs/DatePrototype.h:
1916         * kjs/date_object.cpp: Removed.
1917         * kjs/date_object.h: Removed.
1918
1919 2008-06-30  Sam Weinig  <sam@webkit.org>
1920
1921         Rubber-stamped by Darin Adler.
1922
1923         Remove internal.cpp and move its contents to there own .cpp files.
1924
1925         * GNUmakefile.am:
1926         * JavaScriptCore.pri:
1927         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1928         * JavaScriptCore.xcodeproj/project.pbxproj:
1929         * JavaScriptCoreSources.bkl:
1930         * kjs/AllInOneFile.cpp:
1931         * kjs/GetterSetter.cpp: Copied from kjs/internal.cpp.
1932         * kjs/InternalFunction.cpp: Copied from kjs/internal.cpp.
1933         * kjs/JSNumberCell.cpp: Copied from kjs/internal.cpp.
1934         * kjs/JSString.cpp: Copied from kjs/internal.cpp.
1935         * kjs/JSString.h:
1936         * kjs/LabelStack.cpp: Copied from kjs/internal.cpp.
1937         * kjs/NumberConstructor.cpp:
1938         * kjs/NumberObject.cpp:
1939         (KJS::constructNumber):
1940         (KJS::constructNumberFromImmediateNumber):
1941         * kjs/internal.cpp: Removed.
1942
1943 2008-06-30  Adam Roben  <aroben@apple.com>
1944
1945         Fix <rdar://5954749> Assertion failure due to HashTable's use of
1946         operator&
1947
1948         HashTable was passing &value to constructDeletedValue, which in
1949         classes like WebCore::COMPtr would cause an assertion. We now pass
1950         value by reference instead of by address so that the HashTraits
1951         implementations have more flexibility in constructing the deleted
1952         value.
1953
1954         Reviewed by Ada Chan.
1955
1956         * VM/CodeGenerator.h: Updated for changes to HashTraits.
1957         * wtf/HashTable.h:
1958         (WTF::::deleteBucket): Changed to pass bucket by reference instead of
1959         by address.
1960         (WTF::::checkKey): Ditto.
1961         * wtf/HashTraits.h:
1962         (WTF::): Updated HashTraits for HashTable change.
1963
1964 2008-07-01  Alexey Proskuryakov  <ap@webkit.org>
1965
1966         Reviewed by Cameron Zwarich.
1967
1968         Make RegisterFile really unmap memory on destruction.
1969
1970         This fixes run-webkit-tests --threaded, which ran out of address space in a few seconds.
1971
1972         * VM/RegisterFile.cpp: (KJS::RegisterFile::~RegisterFile): Unmap all the memory, not just
1973         1/4 of it.
1974
1975         * kjs/JSGlobalObject.h: Don't include RegisterFile.h, so that changes to it don't make
1976         half of WebCore rebuild.
1977
1978         * VM/Machine.h: Don't forward declare RegisterFile, as RegisterFile.h is included already.
1979
1980         * VM/RegisterFile.h: (KJS::RegisterFile::RegisterFile): Assert that the allocation succeeded.
1981
1982 2008-06-30  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
1983
1984         Rubber-stamped by Oliver.
1985
1986         Correct the documentation for op_put_by_index.
1987
1988         * VM/Machine.cpp:
1989         (KJS::Machine::privateExecute):
1990
1991 2008-06-29  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
1992
1993         Reviewed by Oliver.
1994
1995         Bug 19821: Merge the instruction pair (less, jfalse)
1996         <https://bugs.webkit.org/show_bug.cgi?id=19821>
1997         
1998         This is a 2.4% win on SunSpider. I needed to add an ALWAYS_INLINE
1999         intrinisc to CodeGenerator::rewindBinaryOp() to avoid a massive
2000         regression in regexp-dna.
2001
2002         * VM/CodeBlock.cpp:
2003         (KJS::CodeBlock::dump):
2004         * VM/CodeGenerator.cpp:
2005         (KJS::CodeGenerator::rewindBinaryOp):
2006         (KJS::CodeGenerator::emitJumpIfFalse):
2007         * VM/Machine.cpp:
2008         (KJS::Machine::privateExecute):
2009         * VM/Opcode.cpp:
2010         (KJS::):
2011         * VM/Opcode.h:
2012
2013 2008-06-29  Sam Weinig  <sam@webkit.org>
2014
2015         Fix non-AllInOne builds.
2016
2017         * kjs/JSObject.cpp:
2018         * kjs/JSValue.cpp:
2019
2020 2008-06-29  Sam Weinig  <sam@webkit.org>
2021
2022         Build fix for Qt.
2023
2024         * kjs/DateMath.cpp:
2025         * kjs/DatePrototype.cpp:
2026
2027 2008-06-29  Sam Weinig  <sam@webkit.org>
2028
2029         Rubber-stamped by Cameron Zwarich.
2030
2031         Splits ErrorConstructor, ErrorPrototype,  NativeErrorConstructor and
2032         NativeErrorPrototype out of error_object.h/cpp and renames it ErrorInstance.
2033
2034         * GNUmakefile.am:
2035         * JavaScriptCore.pri:
2036         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2037         * JavaScriptCore.xcodeproj/project.pbxproj:
2038         * JavaScriptCoreSources.bkl:
2039         * kjs/AllInOneFile.cpp:
2040         * kjs/ArrayConstructor.cpp:
2041         * kjs/ArrayPrototype.cpp:
2042         * kjs/BooleanPrototype.cpp:
2043         * kjs/DatePrototype.cpp:
2044         * kjs/ErrorConstructor.cpp: Copied from kjs/error_object.cpp.
2045         * kjs/ErrorConstructor.h: Copied from kjs/error_object.h.
2046         * kjs/ErrorInstance.cpp: Copied from kjs/error_object.cpp.
2047         * kjs/ErrorInstance.h: Copied from kjs/error_object.h.
2048         * kjs/ErrorPrototype.cpp: Copied from kjs/error_object.cpp.
2049         * kjs/ErrorPrototype.h: Copied from kjs/error_object.h.
2050         * kjs/JSGlobalObject.cpp:
2051         * kjs/JSObject.cpp:
2052         * kjs/JSValue.cpp:
2053         * kjs/NativeErrorConstructor.cpp: Copied from kjs/error_object.cpp.
2054         * kjs/NativeErrorConstructor.h: Copied from kjs/error_object.h.
2055         * kjs/NativeErrorPrototype.cpp: Copied from kjs/error_object.cpp.
2056         * kjs/NativeErrorPrototype.h: Copied from kjs/error_object.h.
2057         * kjs/NumberPrototype.cpp:
2058         * kjs/RegExpConstructor.cpp:
2059         * kjs/RegExpObject.cpp:
2060         * kjs/RegExpPrototype.cpp:
2061         * kjs/StringPrototype.cpp:
2062         * kjs/error_object.cpp: Removed.
2063         * kjs/error_object.h: Removed.
2064         * kjs/internal.cpp:
2065
2066 2008-06-29  Sam Weinig  <sam@webkit.org>
2067
2068         Fix non-AllInOne build.
2069
2070         * kjs/DateConstructor.cpp:
2071         * kjs/DateMath.cpp:
2072         * kjs/JSObject.cpp:
2073
2074 2008-06-29  Sam Weinig  <sam@webkit.org>
2075
2076         Rubber-stamped by Oliver Hunt.
2077
2078         Splits DateConstructor and DatePrototype out of date_object.h/cpp
2079         Moves shared Date code into DateMath.
2080
2081         * DerivedSources.make:
2082         * GNUmakefile.am:
2083         * JavaScriptCore.pri:
2084         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2085         * JavaScriptCore.xcodeproj/project.pbxproj:
2086         * JavaScriptCoreSources.bkl:
2087         * kjs/AllInOneFile.cpp:
2088         * kjs/DateConstructor.cpp: Copied from kjs/date_object.cpp.
2089         * kjs/DateConstructor.h: Copied from kjs/date_object.h.
2090         * kjs/DateMath.cpp:
2091         (KJS::ymdhmsToSeconds):
2092         (KJS::):
2093         (KJS::skipSpacesAndComments):
2094         (KJS::findMonth):
2095         (KJS::parseDate):
2096         (KJS::timeClip):
2097         (KJS::formatDate):
2098         (KJS::formatDateUTCVariant):
2099         (KJS::formatTime):
2100         * kjs/DateMath.h:
2101         (KJS::gmtoffset):
2102         * kjs/DatePrototype.cpp: Copied from kjs/date_object.cpp.
2103         * kjs/DatePrototype.h: Copied from kjs/date_object.h.
2104         * kjs/JSGlobalObject.cpp:
2105         * kjs/JSObject.cpp:
2106         * kjs/date_object.cpp:
2107         * kjs/date_object.h:
2108         * kjs/internal.cpp:
2109
2110 2008-06-29  Jan Michael Alonzo  <jmalonzo@webkit.org>
2111
2112         Rubber-stamped by Cameron Zwarich
2113
2114         Fix Gtk non-AllInOne build
2115
2116         * GNUmakefile.am: include JSVariableObject.cpp
2117         * kjs/RegExpConstructor.cpp: include RegExpObject.h
2118         * kjs/RegExpObject.h: forward declare RegExpPrototype
2119
2120 2008-06-28  Darin Adler  <darin@apple.com>
2121
2122         Reviewed by Sam and Cameron.
2123
2124         - fix https://bugs.webkit.org/show_bug.cgi?id=19805
2125           Array.concat turns missing array elements into "undefined"
2126
2127         Test: fast/js/array-holes.html
2128
2129         * JavaScriptCore.exp: No longer export JSArray::getItem.
2130
2131         * kjs/ArrayPrototype.cpp:
2132         (KJS::arrayProtoFuncConcat): Changed to use getProperty instead of
2133         JSArray::getItem -- need to handle properties from the prototype chain
2134         instead of ignoring them.
2135
2136         * kjs/JSArray.cpp: Removed getItem.
2137         * kjs/JSArray.h: Ditto.
2138
2139 2008-06-28  Darin Adler  <darin@apple.com>
2140
2141         Reviewed by Cameron.
2142
2143         - https://bugs.webkit.org/show_bug.cgi?id=19804
2144           optimize access to arrays without "holes"
2145
2146         SunSpider says 1.8% faster.
2147
2148         * kjs/JSArray.cpp:
2149         (KJS::JSArray::JSArray): Initialize m_fastAccessCutoff when creating
2150         arrays. Also updated for new location of m_vectorLength.
2151         (KJS::JSArray::getItem): Updated for new location of m_vectorLength.
2152         (KJS::JSArray::getSlowCase): Added. Broke out the non-hot parts of
2153         getOwnPropertySlot to make the hot part faster.
2154         (KJS::JSArray::getOwnPropertySlot): Added a new faster case for
2155         indices lower than m_fastAccessCutoff. We can do theese with no
2156         additional checks or branches.
2157         (KJS::JSArray::put): Added a new faster case for indices lower than
2158         m_fastAccessCutoff. We can do theese with no additional checks or
2159         branches. Moved the maxArrayIndex handling out of this function.
2160         Added code to set m_fastAccessCutoff when the very last hole in
2161         an array is filled; this is how the cutoff gets set for most arrays.
2162         (KJS::JSArray::putSlowCase): Moved the rest of the put function logic
2163         in here, to make the hot part of the put function faster.
2164         (KJS::JSArray::deleteProperty): Added code to lower m_fastAccessCutoff
2165         when a delete makes a new hole in the array.
2166         (KJS::JSArray::getPropertyNames): Updated for new location of
2167         m_vectorLength.
2168         (KJS::JSArray::increaseVectorLength): Ditto.
2169         (KJS::JSArray::setLength): Added code to lower m_fastAccessCutoff
2170         when setLength makes the array smaller.
2171         (KJS::JSArray::mark): Updated for new location of m_vectorLength.
2172         (KJS::JSArray::sort): Ditto. Set m_fastAccessCutoff after moving
2173         all the holes to the end of the array.
2174         (KJS::JSArray::compactForSorting): Ditto.
2175         (KJS::JSArray::checkConsistency): Added consistency checks fro
2176         m_fastAccessCutoff and updated for the new location of m_vectorLength.
2177
2178         * kjs/JSArray.h: Added declarations for slow case functions.
2179         Replaced m_vectorLength with m_fastAccessCutoff.
2180
2181 2008-06-28  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2182
2183         Reviewed by Sam.
2184
2185         When executing a native call, check for an exception before writing the
2186         return value.
2187
2188         * VM/Machine.cpp:
2189         (KJS::Machine::privateExecute):
2190
2191 2008-06-28  Mark Rowe  <mrowe@apple.com>
2192
2193         Build fix.  Flag headers as private or public as is appropriate.
2194         These settings were accidentally removed during some project file cleanup.
2195
2196         * JavaScriptCore.xcodeproj/project.pbxproj:
2197
2198 2008-06-28  Sam Weinig  <sam@webkit.org>
2199
2200         Rubber-stamped by Darin Adler.
2201
2202         Splits RegExpConstructor and RegExpPrototype out of RegExpObject.h/cpp
2203
2204         * DerivedSources.make:
2205         * GNUmakefile.am:
2206         * JavaScriptCore.pri:
2207         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2208         * JavaScriptCore.xcodeproj/project.pbxproj:
2209         * JavaScriptCoreSources.bkl:
2210         * VM/Machine.cpp:
2211         * kjs/AllInOneFile.cpp:
2212         * kjs/JSGlobalObject.cpp:
2213         * kjs/RegExpConstructor.cpp: Copied from kjs/RegExpObject.cpp.
2214         * kjs/RegExpConstructor.h: Copied from kjs/RegExpObject.h.
2215         * kjs/RegExpObject.cpp:
2216         * kjs/RegExpObject.h:
2217         * kjs/RegExpPrototype.cpp: Copied from kjs/RegExpObject.cpp.
2218         * kjs/RegExpPrototype.h: Copied from kjs/RegExpObject.h.
2219         * kjs/StringPrototype.cpp:
2220         * kjs/internal.cpp:
2221
2222 2008-06-28  Sam Weinig  <sam@webkit.org>
2223
2224         Fix non-AllInOne builds.
2225
2226         * kjs/StringConstructor.cpp:
2227
2228 2008-06-28  Sam Weinig  <sam@webkit.org>
2229
2230         Rubber-stamped by Darin Adler.
2231
2232         Rename string_object.h/cpp to StringObject.h/cpp and split out StringObjectThatMasqueradesAsUndefined,
2233         StringConstructor and StringPrototype.
2234
2235         * DerivedSources.make:
2236         * GNUmakefile.am:
2237         * JavaScriptCore.pri:
2238         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2239         * JavaScriptCore.xcodeproj/project.pbxproj:
2240         * JavaScriptCoreSources.bkl:
2241         * kjs/AllInOneFile.cpp:
2242         * kjs/JSGlobalObject.cpp:
2243         * kjs/StringConstructor.cpp: Copied from JavaScriptCore/kjs/string_object.cpp.
2244         * kjs/StringConstructor.h: Copied from JavaScriptCore/kjs/string_object.h.
2245         * kjs/StringObject.cpp: Copied from JavaScriptCore/kjs/string_object.cpp.
2246         * kjs/StringObject.h: Copied from JavaScriptCore/kjs/string_object.h.
2247         * kjs/StringObjectThatMasqueradesAsUndefined.h: Copied from JavaScriptCore/kjs/string_object.h.
2248         * kjs/StringPrototype.cpp: Copied from JavaScriptCore/kjs/string_object.cpp.
2249         * kjs/StringPrototype.h: Copied from JavaScriptCore/kjs/string_object.h.
2250         * kjs/internal.cpp:
2251         * kjs/string_object.cpp: Removed.
2252         * kjs/string_object.h: Removed.
2253
2254 2008-06-28  Jan Michael Alonzo  <jmalonzo@webkit.org>
2255
2256         Gtk build fix: JSVariableObject is now part of AllInOne
2257
2258         * GNUmakefile.am:
2259
2260 2008-06-28  Darin Adler  <darin@apple.com>
2261
2262         Reviewed by Oliver.
2263
2264         - https://bugs.webkit.org/show_bug.cgi?id=19801
2265           add a feature so we can tell what regular expressions are taking time
2266
2267         * pcre/pcre_compile.cpp:
2268         (jsRegExpCompile): Compile in the string if REGEXP_HISTOGRAM is on.
2269
2270         * pcre/pcre_exec.cpp:
2271         (jsRegExpExecute): Add hook to time execution.
2272         (Histogram::~Histogram): Print a sorted list of what took time.
2273         (Histogram::add): Accumulate records of what took time.
2274         (HistogramTimeLogger::~HistogramTimeLogger): Hook that calls
2275         Histogram::add at the right moment and creates the global histogram
2276         object.
2277
2278         * pcre/pcre_internal.h: Define REGEXP_HISTOGRAM.
2279
2280         * pcre/pcre_tables.cpp: Added missing include of "config.h". Not needed
2281         any more, but an omissions an earlier version of this patch detected.
2282         * pcre/pcre_ucp_searchfuncs.cpp: Ditto.
2283         * pcre/pcre_xclass.cpp: Ditto.
2284
2285 2008-06-28  Sam Weinig  <sam@webkit.org>
2286
2287         Try and fix the Windows build again.
2288
2289         * kjs/RegExpObject.cpp:
2290         * kjs/date_object.cpp:
2291         * kjs/error_object.cpp:
2292
2293 2008-06-28  Sam Weinig  <sam@webkit.org>
2294
2295         Rubber-stamped by Darin Adler.
2296
2297         Remove unused StringConstructorFunction class.
2298
2299         * kjs/string_object.h:
2300
2301 2008-06-28  Sam Weinig  <sam@webkit.org>
2302
2303         Fix windows build.
2304
2305         * kjs/ArrayPrototype.cpp:
2306         * kjs/BooleanPrototype.cpp:
2307         * kjs/BooleanPrototype.h:
2308         * kjs/FunctionPrototype.cpp:
2309         * kjs/JSImmediate.cpp:
2310         * kjs/JSObject.cpp:
2311         * kjs/MathObject.cpp:
2312         * kjs/NumberPrototype.cpp:
2313         * kjs/NumberPrototype.h:
2314         * kjs/ObjectConstructor.cpp:
2315         * kjs/RegExpObject.h:
2316         * kjs/error_object.h:
2317         * kjs/string_object.cpp:
2318
2319 2008-06-28  Sam Weinig  <sam@webkit.org>
2320
2321         Rubber-stamped by Oliver Hunt.
2322
2323         Splits FunctionConstructor out of FunctionPrototype.h/cpp
2324         Splits NumberConstructor and NumberPrototype out of NumberObject.h/cpp
2325         Rename object_object.h/cpp to ObjectPrototype.h/cpp and split out ObjectConstructor.
2326
2327         * API/JSCallbackConstructor.cpp:
2328         * API/JSClassRef.cpp:
2329         * API/JSObjectRef.cpp:
2330         * DerivedSources.make:
2331         * GNUmakefile.am:
2332         * JavaScriptCore.pri:
2333         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2334         * JavaScriptCore.xcodeproj/project.pbxproj:
2335         * JavaScriptCoreSources.bkl:
2336         * VM/Machine.cpp:
2337         * kjs/AllInOneFile.cpp:
2338         * kjs/ArrayConstructor.cpp:
2339         * kjs/ArrayConstructor.h:
2340         * kjs/FunctionConstructor.cpp: Copied from JavaScriptCore/kjs/FunctionPrototype.cpp.
2341         * kjs/FunctionConstructor.h: Copied from JavaScriptCore/kjs/FunctionPrototype.h.
2342         * kjs/FunctionPrototype.cpp:
2343         * kjs/FunctionPrototype.h:
2344         * kjs/JSFunction.cpp:
2345         * kjs/JSGlobalObject.cpp:
2346         * kjs/JSImmediate.cpp:
2347         * kjs/MathObject.h:
2348         * kjs/NumberConstructor.cpp: Copied from JavaScriptCore/kjs/NumberObject.cpp.
2349         * kjs/NumberConstructor.h: Copied from JavaScriptCore/kjs/NumberObject.h.
2350         * kjs/NumberObject.cpp:
2351         * kjs/NumberObject.h:
2352         * kjs/NumberPrototype.cpp: Copied from JavaScriptCore/kjs/NumberObject.cpp.
2353         * kjs/NumberPrototype.h: Copied from JavaScriptCore/kjs/NumberObject.h.
2354         * kjs/ObjectConstructor.cpp: Copied from JavaScriptCore/kjs/object_object.cpp.
2355         * kjs/ObjectConstructor.h: Copied from JavaScriptCore/kjs/object_object.h.
2356         * kjs/ObjectPrototype.cpp: Copied from JavaScriptCore/kjs/object_object.cpp.
2357         * kjs/ObjectPrototype.h: Copied from JavaScriptCore/kjs/object_object.h.
2358         * kjs/RegExpObject.h:
2359         * kjs/Shell.cpp:
2360         * kjs/error_object.h:
2361         * kjs/internal.cpp:
2362         * kjs/nodes.cpp:
2363         * kjs/object_object.cpp: Removed.
2364         * kjs/object_object.h: Removed.
2365         * kjs/string_object.h:
2366
2367 2008-06-28  Darin Adler  <darin@apple.com>
2368
2369         Reviewed by Oliver.
2370
2371         - fix https://bugs.webkit.org/show_bug.cgi?id=19796
2372           optimize expressions with ignored results (especially post-increment)
2373
2374         SunSpider says 0.9% faster.
2375
2376         * VM/CodeGenerator.h:
2377         (KJS::CodeGenerator::tempDestination): Create a new temporary for
2378         ignoredResult() too, just as we would for 0.
2379         (KJS::CodeGenerator::finalDestination): Use the temporary if the
2380         register passed in is ignoredResult() too, just as we would for 0.
2381         (KJS::CodeGenerator::destinationForAssignResult): Return 0 if the
2382         passed in register is ignoredResult(), just as we would for 0.
2383         (KJS::CodeGenerator::moveToDestinationIfNeeded): Return 0 if the
2384         register passed in is ignoredResult(). What matters is that we
2385         don't want to emit a move. The return value won't be looked at.
2386         (KJS::CodeGenerator::emitNode): Allow ignoredResult() and pass it
2387         through to the node's emitCode function.
2388
2389         * VM/RegisterID.h:
2390         (KJS::ignoredResult): Added. Special value to indicate the result of
2391         a node will be ignored and need not be put in any register.
2392
2393         * kjs/nodes.cpp:
2394         (KJS::NullNode::emitCode): Do nothing if dst == ignoredResult().
2395         (KJS::BooleanNode::emitCode): Ditto.
2396         (KJS::NumberNode::emitCode): Ditto.
2397         (KJS::StringNode::emitCode): Ditto.
2398         (KJS::RegExpNode::emitCode): Ditto.
2399         (KJS::ThisNode::emitCode): Ditto.
2400         (KJS::ResolveNode::emitCode): Do nothing if dst == ignoredResult() and
2401         the identifier resolves to a local variable.
2402         (KJS::ObjectLiteralNode::emitCode): Do nothing if dst == ignoredResult()
2403         and the object is empty.
2404         (KJS::PostIncResolveNode::emitCode): If dst == ignoredResult(), then do
2405         nothing for the local constant case, and do a pre-increment in all the
2406         other cases.
2407         (KJS::PostDecResolveNode::emitCode): Ditto.
2408         (KJS::PostIncBracketNode::emitCode): Ditto.
2409         (KJS::PostDecBracketNode::emitCode): Ditto.
2410         (KJS::PostIncDotNode::emitCode): Ditto.
2411         (KJS::PostDecDotNode::emitCode): Ditto.
2412         (KJS::DeleteValueNode::emitCode): Pass ignoredResult() when evaluating
2413         the expression.
2414         (KJS::VoidNode::emitCode): Ditto.
2415         (KJS::TypeOfResolveNode::emitCode): If dst == ignoredResult(), do nothing
2416         if the identifier resolves to a local variable, and don't bother generating
2417         a typeof opcode in the other case.
2418         (KJS::TypeOfValueNode::emitCode): Ditto.
2419         (KJS::PreIncResolveNode::emitCode): Do nothing if dst == ignoredResult() and
2420         the identifier resolves to a local constant.
2421         (KJS::PreDecResolveNode::emitCode): Ditto.
2422         (KJS::AssignResolveNode::emitCode): Turn ignoredResult() into 0 in a couple
2423         places, because we need to put the result into a register so we can assign
2424         it. At other sites this is taken care of by functions like finalDestination.
2425         (KJS::CommaNode::emitCode): Pass ignoredResult() when evaluating the first
2426         expression.
2427         (KJS::ForNode::emitCode): Pass ignoredResult() when evaluating the first and
2428         third expressions.
2429         (KJS::ForInNode::emitCode): Pass ignoredResult() when evaluating the first
2430         expression.
2431
2432 2008-06-28  Darin Adler  <darin@apple.com>
2433
2434         Reviewed by Oliver.
2435
2436         - https://bugs.webkit.org/show_bug.cgi?id=19787
2437           create most arrays from values in registers rather than with multiple put operations
2438
2439         SunSpider says 0.8% faster.
2440
2441         * VM/CodeBlock.cpp:
2442         (KJS::CodeBlock::dump): Added argv and argc parameters to new_array.
2443         * VM/Machine.cpp:
2444         (KJS::Machine::privateExecute): Ditto.
2445
2446         * VM/CodeGenerator.cpp:
2447         (KJS::CodeGenerator::emitNewArray): Added.
2448         * VM/CodeGenerator.h: Added ElementNode* argument to emitNewArray.
2449
2450         * kjs/nodes.cpp:
2451         (KJS::ArrayNode::emitCode): Pass the ElementNode to emitNewArray so it can be
2452         initialized with as many elements as possible. If the array doesn't have any
2453         holes in it, that's all that's needed. If there are holes, then emit some separate
2454         put operations for the other values in the array and for the length as needed.
2455
2456         * kjs/nodes.h: Added some accessors to ElementNode so the code generator can
2457         iterate through elements and generate code to evaluate them. Now ArrayNode does
2458         not need to be a friend. Also took out some unused PlacementNewAdoptType
2459         constructors.
2460
2461 2008-06-28  Darin Adler  <darin@apple.com>
2462
2463         Reviewed by Oliver.
2464
2465         * kjs/nodes.h: Remove obsolete PlacementNewAdopt constructors.
2466         We no longer mutate the AST in place.
2467
2468 2008-06-28  Jan Michael Alonzo  <jmalonzo@webkit.org>
2469
2470         Reviewed by Oliver Hunt.
2471
2472         Build fix
2473
2474         * VM/Machine.cpp: include stdio.h for printf
2475
2476 2008-06-27  Sam Weinig  <sam@webkit.org>
2477
2478         Reviewed by Oliver Hunt.
2479
2480         Fix platforms that don't use AllInOne.cpp
2481
2482         * kjs/BooleanConstructor.h:
2483         * kjs/BooleanPrototype.h:
2484         * kjs/FunctionPrototype.cpp:
2485
2486 2008-06-27  Sam Weinig  <sam@webkit.org>
2487
2488         Rubber-stamped by Oliver Hunt.
2489
2490         Splits ArrayConstructor out of ArrayPrototype.h/cpp
2491         Splits BooleanConstructor and BooleanPrototype out of BooleanObject.h/cpp
2492
2493         * GNUmakefile.am:
2494         * JavaScriptCore.pri:
2495         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2496         * JavaScriptCore.xcodeproj/project.pbxproj:
2497         * JavaScriptCoreSources.bkl:
2498         * VM/Machine.cpp:
2499         * kjs/AllInOneFile.cpp:
2500         * kjs/ArrayConstructor.cpp: Copied from kjs/ArrayPrototype.cpp.
2501         * kjs/ArrayConstructor.h: Copied from kjs/ArrayPrototype.h.
2502         * kjs/ArrayPrototype.cpp:
2503         * kjs/ArrayPrototype.h:
2504         * kjs/BooleanConstructor.cpp: Copied from kjs/BooleanObject.cpp.
2505         * kjs/BooleanConstructor.h: Copied from kjs/BooleanObject.h.
2506         * kjs/BooleanObject.cpp:
2507         * kjs/BooleanObject.h:
2508         * kjs/BooleanPrototype.cpp: Copied from kjs/BooleanObject.cpp.
2509         * kjs/BooleanPrototype.h: Copied from kjs/BooleanObject.h.
2510         * kjs/CommonIdentifiers.h:
2511         * kjs/FunctionPrototype.cpp:
2512         * kjs/JSArray.cpp:
2513         * kjs/JSGlobalObject.cpp:
2514         * kjs/JSImmediate.cpp:
2515         * kjs/Shell.cpp:
2516         * kjs/internal.cpp:
2517         * kjs/nodes.cpp:
2518         * kjs/string_object.cpp:
2519
2520 2008-06-27  Oliver Hunt  <oliver@apple.com>
2521
2522         Reviewed by Sam.
2523
2524         Bug 18626: SQUIRRELFISH: support the "slow script" dialog <https://bugs.webkit.org/show_bug.cgi?id=18626>
2525         <rdar://problem/5973931> Slow script dialog needs to be reimplemented for squirrelfish
2526
2527         Adds support for the slow script dialog in squirrelfish.  This requires the addition
2528         of three new op codes, op_loop, op_loop_if_true, and op_loop_if_less which have the
2529         same behaviour as their simple jump equivalents but have an additional time out check.
2530
2531         Additional assertions were added to other jump instructions to prevent accidentally
2532         creating loops with jump types that do not support time out checks.
2533
2534         Sunspider does not report a regression, however this appears very sensitive to code
2535         layout and hardware, so i would expect up to a 1% regression on other systems.
2536
2537         Part of this required moving the old timeout logic from JSGlobalObject and into Machine
2538         which is the cause of a number of the larger diff blocks.
2539
2540         * JavaScriptCore.exp:
2541         * VM/CodeBlock.cpp:
2542         (KJS::CodeBlock::dump):
2543         * VM/CodeGenerator.cpp:
2544         (KJS::CodeGenerator::emitJumpIfTrue):
2545         (KJS::CodeGenerator::emitJumpScopes):
2546         * VM/ExceptionHelpers.cpp:
2547         (KJS::InterruptedExecutionError::isWatchdogException):
2548         (KJS::createInterruptedExecutionException):
2549         * VM/ExceptionHelpers.h:
2550         * VM/LabelID.h:
2551         * VM/Machine.cpp:
2552         (KJS::Machine::Machine):
2553         (KJS::Machine::throwException):
2554         (KJS::Machine::resetTimeoutCheck):
2555         (KJS::getCurrentTime):
2556         (KJS::Machine::checkTimeout):
2557         (KJS::Machine::privateExecute):
2558         * VM/Machine.h:
2559         (KJS::Machine::setTimeoutTime):
2560         (KJS::Machine::startTimeoutCheck):
2561         (KJS::Machine::stopTimeoutCheck):
2562         (KJS::Machine::initTimeout):
2563         * VM/Opcode.cpp:
2564         (KJS::):
2565         * VM/Opcode.h:
2566         * kjs/JSGlobalObject.cpp:
2567         (KJS::JSGlobalObject::init):
2568         (KJS::JSGlobalObject::setTimeoutTime):
2569         (KJS::JSGlobalObject::startTimeoutCheck):
2570         * kjs/JSGlobalObject.h:
2571         * kjs/JSObject.h:
2572         * kjs/interpreter.cpp:
2573         (KJS::Interpreter::evaluate):
2574
2575 2008-06-27  Jan Michael Alonzo  <jmalonzo@webkit.org>
2576
2577         Gtk and Qt build fix: Remove RegisterFileStack from the build
2578         scripts.
2579
2580         * GNUmakefile.am:
2581         * JavaScriptCore.pri:
2582
2583 2008-06-27  Adele Peterson  <adele@apple.com>
2584
2585         Reviewed by Geoff.
2586
2587         Build fixes. 
2588
2589         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2590         * VM/RegisterFile.h:
2591         (KJS::RegisterFile::RegisterFile):
2592         * kjs/JSGlobalObject.cpp:
2593         * kjs/collector.cpp:
2594
2595 2008-06-27  Geoffrey Garen  <ggaren@apple.com>
2596
2597         Reviewed by Oliver Hunt.
2598         
2599         One RegisterFile to rule them all!
2600         
2601         SunSpider reports a 0.2% speedup.
2602
2603         This patch removes the RegisterFileStack abstraction and replaces it with
2604         a single register file that
2605         
2606         (a) allocates a fixed storage area, including a fixed area for global
2607         vars, so that no operation may cause the register file to reallocate
2608         
2609         and
2610
2611         (b) swaps between global storage areas when executing code in different 
2612         global objects.
2613         
2614         This patch also changes the layout of the register file so that all call
2615         frames, including call frames for global code, get a header. This is
2616         required to support re-entrant global code. It also just makes things simpler.
2617         
2618         * VM/CodeGenerator.cpp:
2619         (KJS::CodeGenerator::addGlobalVar): New function. Differs from addVar in
2620         that
2621         
2622         (a) global vars don't contribute to a CodeBlock's numLocals count, since
2623         global storage is fixed and allocated at startup
2624         
2625         and
2626         
2627         (b) references to global vars get shifted to elide intermediate stack
2628         between "r" and the global storage area.
2629         
2630         * VM/Machine.cpp:
2631         (KJS::Machine::dumpRegisters): Updated this function to match the new
2632         register file layout, and added the ability to dump exact identifiers
2633         for the different parts of a call frame.
2634         
2635         (KJS::Machine::unwindCallFrame): Updated this function to match the new
2636         register file layout.
2637          
2638         (KJS::Machine::execute): Updated this function to initialize a call frame
2639         header for global code, and to swap global storage areas when switching
2640         to execution in a new global object.
2641         
2642         (KJS::Machine::privateExecute): Got rid of "safeForReentry" and re-reading
2643         of registerBase because the register file is always safe for reentry now,
2644         and registerBase never changes.
2645         
2646         * VM/Machine.h: Moved the call frame header enum from Machine to RegisterFile,
2647         to resolve a header dependency problem (a good sign that the enum belonged
2648         in RegisterFile all along!)
2649
2650         * VM/RegisterFile.cpp:
2651         * VM/RegisterFile.h: Changed RegisterFile to mmap a fixed size register
2652         area. This allows us to avoid re-allocting the register file later on.
2653         Instead, we rely on the OS to allocate physical pages to the register
2654         file as necessary.
2655
2656         * VM/RegisterFileStack.cpp: Removed. Tada!
2657         * VM/RegisterFileStack.h: Removed. Tada!
2658
2659         * kjs/DebuggerCallFrame.cpp: Updated this class to match the new
2660         register file layout, greatly simplifying it in the process.
2661
2662         * kjs/JSActivation.h:
2663         * kjs/JSActivation.cpp: Moved some of this logic up to JSVariableObject,
2664         since the global object now needs to be able to tear off its registers
2665         just like the activation object.
2666
2667         * kjs/JSFunction.cpp: No need to fiddle with the register file anymore.
2668
2669         * kjs/JSGlobalObject.h:
2670         * kjs/JSGlobalObject.cpp: Updated JSGlobalObject to support moving its
2671         global storage area into and out of the register file.
2672
2673         * kjs/PropertySlot.cpp: No need to fiddle with the register file anymore.
2674
2675         * kjs/collector.cpp: Renamed markStackObjectConservatively to
2676         markConservatively, since we don't just mark stack objects this way.
2677         
2678         Also, added code to mark the machine's register file.
2679
2680         * kjs/config.h: Moved some platforms #defines from here...
2681         * wtf/Platform.h: ...to here, to support mmap/VirtualAlloc detection
2682         in RegisterFile.h.
2683
2684 2008-06-26  Mark Rowe  <mrowe@apple.com>
2685
2686         Speculative fix for the Windows build.
2687
2688         * kjs/JSImmediate.cpp:
2689
2690 2008-06-26  Mark Rowe  <mrowe@apple.com>
2691
2692         Reviewed by Darin Adler and Geoff Garen.
2693
2694         Fix the malloc zone introspection functions so that malloc_zone_statistics does not give
2695         bogus output in an application that uses JavaScriptCore.
2696
2697         * kjs/CollectorHeapIntrospector.cpp:
2698         (KJS::CollectorHeapIntrospector::statistics): Return statistics about memory allocated by the collector.
2699         * kjs/CollectorHeapIntrospector.h:
2700         * wtf/FastMalloc.cpp: Zero out the statistics.  FastMalloc doesn't track this information at present.
2701         Returning zero for all values is preferable to returning bogus data.
2702
2703 2008-06-26  Darin Adler  <darin@apple.com>
2704
2705         Reviewed by Geoff.
2706
2707         - https://bugs.webkit.org/show_bug.cgi?id=19721
2708           speed up JavaScriptCore by not wrapping strings in objects just
2709           to call functions on them
2710
2711         - optimize UString append and the replace function a bit
2712
2713         SunSpider says 1.8% faster.
2714
2715         * JavaScriptCore.exp: Updated.
2716
2717         * VM/JSPropertyNameIterator.cpp: Added include of JSString.h, now needed
2718         because jsString returns a JSString*.
2719
2720         * VM/Machine.cpp:
2721         (KJS::Machine::privateExecute): Removed the toObject call from native
2722         function calls. Also removed code to put the this value into a register.
2723
2724         * kjs/BooleanObject.cpp:
2725         (KJS::booleanProtoFuncToString): Rewrite to handle false and true
2726         separately.
2727
2728         * kjs/FunctionPrototype.cpp:
2729         (KJS::constructFunction): Use single-character append rather than building
2730         a string for each character.
2731         * kjs/JSFunction.cpp:
2732         (KJS::globalFuncUnescape): Ditto.
2733
2734         * kjs/JSImmediate.cpp:
2735         (KJS::JSImmediate::prototype): Added. Gets the appropriate prototype for
2736         use with an immediate value. To be used instead of toObject when doing a
2737         get on an immediate value.
2738         * kjs/JSImmediate.h: Added prototype.
2739
2740         * kjs/JSObject.cpp:
2741         (KJS::JSObject::toString): Tweaked formatting.
2742
2743         * kjs/JSObject.h:
2744         (KJS::JSValue::get): Use prototype instead of toObject to avoid creating
2745         an object wrapper just to search for properties. This also saves an
2746         unnecessary hash table lookup since the object wrappers themselves don't
2747         have any properties.
2748
2749         * kjs/JSString.h: Added toThisString and toThisJSString.
2750
2751         * kjs/JSValue.cpp:
2752         (KJS::JSCell::toThisString): Added.
2753         (KJS::JSCell::toThisJSString): Added.
2754         (KJS::JSCell::getJSNumber): Added.
2755         (KJS::jsString): Changed return type to JSString*.
2756         (KJS::jsOwnedString): Ditto.
2757
2758         * kjs/JSValue.h:
2759         (KJS::JSValue::toThisString): Added.
2760         (KJS::JSValue::toThisJSString): Added.
2761         (KJS::JSValue::getJSNumber): Added.
2762
2763         * kjs/NumberObject.cpp:
2764         (KJS::NumberObject::getJSNumber): Added.
2765         (KJS::integer_part_noexp): Append C string directly rather than first
2766         turning it into a UString.
2767         (KJS::numberProtoFuncToString): Use getJSNumber to check if the value
2768         is a number rather than isObject(&NumberObject::info). This works for
2769         immediate numbers, number cells, and NumberObject instances.
2770         (KJS::numberProtoFuncToLocaleString): Ditto.
2771         (KJS::numberProtoFuncValueOf): Ditto.
2772         (KJS::numberProtoFuncToFixed): Ditto.
2773         (KJS::numberProtoFuncToExponential): Ditto.
2774         (KJS::numberProtoFuncToPrecision): Ditto.
2775         * kjs/NumberObject.h: Added getJSNumber.
2776
2777         * kjs/PropertySlot.cpp: Tweaked comment.
2778
2779         * kjs/internal.cpp:
2780         (KJS::JSString::toThisString): Added.
2781         (KJS::JSString::toThisJSString): Added.
2782         (KJS::JSString::getOwnPropertySlot): Changed code that searches the
2783         prototype chain to start with the string prototype and not create a
2784         string object.
2785         (KJS::JSNumberCell::toThisString): Added.
2786         (KJS::JSNumberCell::getJSNumber): Added.
2787
2788         * kjs/lookup.cpp:
2789         (KJS::staticFunctionGetter): Moved here, because there's no point in
2790         having a function that's only used for a function pointer be inline.
2791         (KJS::setUpStaticFunctionSlot): New function for getStaticFunctionSlot.
2792
2793         * kjs/lookup.h:
2794         (KJS::staticValueGetter): Don't mark this inline. It doesn't make sense
2795         to have a function that's only used for a function pointer be inline.
2796         (KJS::getStaticFunctionSlot): Changed to get properties from the parent
2797         first before doing any handling of functions. This is the fastest way
2798         to return the function once the initial setup is done.
2799
2800         * kjs/string_object.cpp:
2801         (KJS::StringObject::getPropertyNames): Call value() instead of getString(),
2802         avoiding an unnecessary virtual function call (the call to the type()
2803         function in the implementation of the isString() function).
2804         (KJS::StringObject::toString): Added.
2805         (KJS::StringObject::toThisString): Added.
2806         (KJS::StringObject::toThisJSString): Added.
2807         (KJS::substituteBackreferences): Rewrote to use a appending algorithm
2808         instead of a the old one that tried to replace in place.
2809         (KJS::stringProtoFuncReplace): Merged this function and the replace function.
2810         Replaced the hand-rolled dynamic arrays for source ranges and replacements
2811         with Vector.
2812         (KJS::stringProtoFuncToString): Handle JSString as well as StringObject.
2813         Removed the separate valueOf implementation, since it can just share this.
2814         (KJS::stringProtoFuncCharAt): Use toThisString, which handles JSString as
2815         well as StringObject, and is slightly more efficient than the old code too.
2816         (KJS::stringProtoFuncCharCodeAt): Ditto.
2817         (KJS::stringProtoFuncConcat): Ditto.
2818         (KJS::stringProtoFuncIndexOf): Ditto.
2819         (KJS::stringProtoFuncLastIndexOf): Ditto.
2820         (KJS::stringProtoFuncMatch): Ditto.
2821         (KJS::stringProtoFuncSearch): Ditto.
2822         (KJS::stringProtoFuncSlice): Ditto.
2823         (KJS::stringProtoFuncSplit): Ditto.
2824         (KJS::stringProtoFuncSubstr): Ditto.
2825         (KJS::stringProtoFuncSubstring): Ditto.
2826         (KJS::stringProtoFuncToLowerCase): Use toThisJSString.
2827         (KJS::stringProtoFuncToUpperCase): Ditto.
2828         (KJS::stringProtoFuncToLocaleLowerCase): Ditto.
2829         (KJS::stringProtoFuncToLocaleUpperCase): Ditto.
2830         (KJS::stringProtoFuncLocaleCompare): Ditto.
2831         (KJS::stringProtoFuncBig): Use toThisString.
2832         (KJS::stringProtoFuncSmall): Ditto.
2833         (KJS::stringProtoFuncBlink): Ditto.
2834         (KJS::stringProtoFuncBold): Ditto.
2835         (KJS::stringProtoFuncFixed): Ditto.
2836         (KJS::stringProtoFuncItalics): Ditto.
2837         (KJS::stringProtoFuncStrike): Ditto.
2838         (KJS::stringProtoFuncSub): Ditto.
2839         (KJS::stringProtoFuncSup): Ditto.
2840         (KJS::stringProtoFuncFontcolor): Ditto.
2841         (KJS::stringProtoFuncFontsize): Ditto.
2842         (KJS::stringProtoFuncAnchor): Ditto.
2843         (KJS::stringProtoFuncLink): Ditto.
2844
2845         * kjs/string_object.h: Added toString, toThisString, and toThisJSString.
2846
2847         * kjs/ustring.cpp:
2848         (KJS::UString::append): Added a version that takes a character pointer and
2849         size, so we don't have to create a UString just to append to another UString.
2850         * kjs/ustring.h:
2851
2852 2008-06-26  Alexey Proskuryakov  <ap@webkit.org>
2853
2854         Reviewed by Maciej.
2855
2856         Make JSGlobalData per-thread.
2857
2858         No change on SunSpider total.
2859
2860         * wtf/ThreadSpecific.h: Re-enabled the actual implementation.
2861
2862         * kjs/JSGlobalObject.cpp:
2863         (KJS::JSGlobalObject::~JSGlobalObject): Re-added a JSLock-related assertion. We'll probably
2864         want to preserve these somehow to keep legacy behavior in working condition.
2865         (KJS::JSGlobalObject::init): Initialize globalData pointer earlier, so that it is ready
2866         when updating JSGlobalObject linked list.
2867
2868         * kjs/JSGlobalObject.h: (KJS::JSGlobalObject::head): Changed head() to be non-static, and
2869         to use JSGlobalData associated with the current object.
2870
2871         * kjs/InitializeThreading.cpp: (KJS::initializeThreadingOnce): Removed a no longer needed
2872         Heap::registerAsMainThread() call.
2873
2874         * kjs/JSGlobalData.h: Removed a lying lie comment - parserObjectExtraRefCounts is not
2875         transient, and while newParserObjects may conceptually be such, there is still some node
2876         manipulation going on outside Parser::parse which touches it.
2877
2878         * kjs/JSGlobalData.cpp:
2879         (KJS::JSGlobalData::~JSGlobalData): Delete recently added members.
2880         (KJS::JSGlobalData::sharedInstance): Actually use a separate instance.
2881
2882         * kjs/collector.cpp:
2883         (KJS::Heap::Heap):
2884         (KJS::Heap::~Heap): Added a destructor, which unconditionally deletes everything.
2885         (KJS::Heap::sweep): Removed code related to "collect on main thread only" logic.
2886         (KJS::Heap::collect): Ditto.
2887         (KJS::Heap::globalObjectCount): Explicitly use per-thread instance of JSGlobalObject linked
2888         list now that JSGlobalObject::head() is not static. Curently, WebCoreStatistics methods only
2889         work with the main thread currently anyway.
2890         (KJS::Heap::protectedGlobalObjectCount): Ditto.
2891
2892         * kjs/collector.h: Removed code related to "collect on main thread only" logic.
2893
2894         * JavaScriptCore.exp: Removed Heap::collectOnMainThreadOnly.
2895
2896 2008-06-26  Alexey Proskuryakov  <ap@webkit.org>
2897
2898         Reviewed by Darin.
2899
2900         https://bugs.webkit.org/show_bug.cgi?id=19767
2901         REGRESSION: Crash in sort() when visiting http://www.onnyturf.com/subway/
2902
2903         * kjs/JSArray.cpp: (KJS::AVLTreeAbstractorForArrayCompare::set_balance_factor):
2904         Made changing balance factor from -1 to +1 work correctly.
2905
2906         * wtf/AVLTree.h: (KJS::AVLTreeDefaultBSet::operator[]): Added an assertion that catches
2907         this slightly earlier.
2908
2909 2008-06-25  Timothy Hatcher  <timothy@apple.com>
2910
2911         Fixes an ASSERT in the profiler when starting multiple profiles
2912         with the same name inside the same function/program.
2913
2914         Reviewed by Kevin McCullough.
2915
2916         * profiler/Profile.cpp:
2917         (KJS::Profile::Profile): Initialize m_stoppedCallDepth to zero.
2918         (KJS::Profile::stopProfiling): Set the current node to the parent,
2919         because we are in a call that will not get a didExecute call.
2920         (KJS::Profile::removeProfile): Increment m_stoppedCallDepth to
2921         account for didExecute not being called for profile.
2922         (KJS::Profile::willExecute): Increment m_stoppedCallDepth if stopped.
2923         (KJS::Profile::didExecute): Decrement m_stoppedCallDepth if stopped and
2924         greater than zero, and return early.
2925         * profiler/Profile.h: Added stoppedProfiling().
2926         * profiler/Profiler.cpp:
2927         (KJS::Profiler::findProfile): Removed.
2928         (KJS::Profiler::startProfiling): Don't return early for stopped profiles.
2929         (KJS::Profiler::stopProfiling): Skipp stopped profiles.
2930         (KJS::Profiler::didFinishAllExecution): Code clean-up.
2931         * profiler/Profiler.h: Removed findProfile.
2932
2933 2008-06-25  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
2934
2935         Reviewed by Alexey Proskuryakov.
2936
2937         Attempt to fix Windows debug build. The compiler gives a warning when
2938         Structured Exception Handling and destructors are used in the same
2939         function. Using manual locking and unlocking instead of constructors
2940         and destructors should fix the warning.
2941
2942         * kjs/Shell.cpp:
2943         (main):
2944
2945 2008-06-25  Alexey Proskuryakov  <ap@webkit.org>
2946
2947         Forgot to address a review comment about better names for tracked objects, doing it now.
2948
2949         * kjs/JSGlobalData.cpp:
2950         (KJS::JSGlobalData::JSGlobalData):
2951         * kjs/JSGlobalData.h:
2952         * kjs/nodes.cpp:
2953         (KJS::ParserRefCounted::ParserRefCounted):
2954         (KJS::ParserRefCounted::ref):
2955         (KJS::ParserRefCounted::deref):
2956         (KJS::ParserRefCounted::hasOneRef):
2957         (KJS::ParserRefCounted::deleteNewObjects):
2958
2959 2008-06-25  Alexey Proskuryakov  <ap@webkit.org>
2960
2961         Reviewed by Geoff.
2962
2963         Remove more threadInstance() calls.
2964
2965         * kjs/JSFunction.cpp:
2966         (KJS::JSFunction::getParameterName):
2967         (KJS::IndexToNameMap::unMap):
2968         (KJS::Arguments::deleteProperty):
2969         * kjs/JSFunction.h:
2970         Access nullIdentifier without going to thread specific storage.
2971
2972         * JavaScriptCore.exp:
2973         * kjs/JSGlobalData.cpp:
2974         (KJS::JSGlobalData::JSGlobalData):
2975         * kjs/JSGlobalData.h:
2976         * kjs/Parser.cpp:
2977         (KJS::Parser::parse):
2978         * kjs/Parser.h:
2979         (KJS::ParserRefCountedData::ParserRefCountedData):
2980         (KJS::Parser::parse):
2981         * kjs/grammar.y:
2982         * kjs/nodes.cpp:
2983         (KJS::ParserRefCounted::ParserRefCounted):
2984         (KJS::ParserRefCounted::ref):
2985         (KJS::ParserRefCounted::deref):
2986         (KJS::ParserRefCounted::hasOneRef):
2987         (KJS::ParserRefCounted::deleteNewObjects):
2988         (KJS::Node::Node):
2989         (KJS::StatementNode::StatementNode):
2990         (KJS::BreakpointCheckStatement::BreakpointCheckStatement):
2991         (KJS::ConstDeclNode::ConstDeclNode):
2992         (KJS::BlockNode::BlockNode):
2993         (KJS::ForInNode::ForInNode):
2994         (KJS::ScopeNode::ScopeNode):
2995         (KJS::ProgramNode::ProgramNode):
2996         (KJS::ProgramNode::create):
2997         (KJS::EvalNode::EvalNode):
2998         (KJS::EvalNode::create):
2999         (KJS::FunctionBodyNode::FunctionBodyNode):
3000         (KJS::FunctionBodyNode::create):
3001         * kjs/nodes.h:
3002         (KJS::ExpressionNode::):
3003         (KJS::NullNode::):
3004         (KJS::BooleanNode::):
3005         (KJS::NumberNode::):
3006         (KJS::ImmediateNumberNode::):
3007         (KJS::StringNode::):
3008         (KJS::RegExpNode::):
3009         (KJS::ThisNode::):
3010         (KJS::ResolveNode::):
3011         (KJS::ElementNode::):
3012         (KJS::ArrayNode::):
3013         (KJS::PropertyNode::):
3014         (KJS::PropertyListNode::):
3015         (KJS::ObjectLiteralNode::):
3016         (KJS::BracketAccessorNode::):
3017         (KJS::DotAccessorNode::):
3018         (KJS::ArgumentListNode::):
3019         (KJS::ArgumentsNode::):
3020         (KJS::NewExprNode::):
3021         (KJS::EvalFunctionCallNode::):
3022         (KJS::FunctionCallValueNode::):
3023         (KJS::FunctionCallResolveNode::):
3024         (KJS::FunctionCallBracketNode::):
3025         (KJS::FunctionCallDotNode::):
3026         (KJS::PrePostResolveNode::):
3027         (KJS::PostIncResolveNode::):
3028         (KJS::PostDecResolveNode::):
3029         (KJS::PostfixBracketNode::):
3030         (KJS::PostIncBracketNode::):
3031         (KJS::PostDecBracketNode::):
3032         (KJS::PostfixDotNode::):
3033         (KJS::PostIncDotNode::):
3034         (KJS::PostDecDotNode::):
3035         (KJS::PostfixErrorNode::):
3036         (KJS::DeleteResolveNode::):
3037         (KJS::DeleteBracketNode::):
3038         (KJS::DeleteDotNode::):
3039         (KJS::DeleteValueNode::):
3040         (KJS::VoidNode::):
3041         (KJS::TypeOfResolveNode::):
3042         (KJS::TypeOfValueNode::):
3043         (KJS::PreIncResolveNode::):
3044         (KJS::PreDecResolveNode::):
3045         (KJS::PrefixBracketNode::):
3046         (KJS::PreIncBracketNode::):
3047         (KJS::PreDecBracketNode::):
3048         (KJS::PrefixDotNode::):
3049         (KJS::PreIncDotNode::):
3050         (KJS::PreDecDotNode::):
3051         (KJS::PrefixErrorNode::):
3052         (KJS::UnaryOpNode::UnaryOpNode):
3053         (KJS::UnaryPlusNode::):
3054         (KJS::NegateNode::):
3055         (KJS::BitwiseNotNode::):
3056         (KJS::LogicalNotNode::):
3057         (KJS::BinaryOpNode::BinaryOpNode):
3058         (KJS::ReverseBinaryOpNode::ReverseBinaryOpNode):
3059         (KJS::MultNode::):
3060         (KJS::DivNode::):
3061         (KJS::ModNode::):
3062         (KJS::AddNode::):
3063         (KJS::SubNode::):
3064         (KJS::LeftShiftNode::):
3065         (KJS::RightShiftNode::):
3066         (KJS::UnsignedRightShiftNode::):
3067         (KJS::LessNode::):
3068         (KJS::GreaterNode::):
3069         (KJS::LessEqNode::):
3070         (KJS::GreaterEqNode::):
3071         (KJS::InstanceOfNode::):
3072         (KJS::InNode::):
3073         (KJS::EqualNode::):
3074         (KJS::NotEqualNode::):
3075         (KJS::StrictEqualNode::):
3076         (KJS::NotStrictEqualNode::):
3077         (KJS::BitAndNode::):
3078         (KJS::BitOrNode::):
3079         (KJS::BitXOrNode::):
3080         (KJS::LogicalAndNode::):
3081         (KJS::LogicalOrNode::):
3082         (KJS::ConditionalNode::):
3083         (KJS::ReadModifyResolveNode::):
3084         (KJS::AssignResolveNode::):
3085         (KJS::ReadModifyBracketNode::):
3086         (KJS::AssignBracketNode::):
3087         (KJS::AssignDotNode::):
3088         (KJS::ReadModifyDotNode::):
3089         (KJS::AssignErrorNode::):
3090         (KJS::CommaNode::):
3091         (KJS::VarDeclCommaNode::):
3092         (KJS::ConstStatementNode::):
3093         (KJS::SourceElements::SourceElements):
3094         (KJS::EmptyStatementNode::):
3095         (KJS::DebuggerStatementNode::):
3096         (KJS::ExprStatementNode::):
3097         (KJS::VarStatementNode::):
3098         (KJS::IfNode::):
3099         (KJS::IfElseNode::):
3100         (KJS::DoWhileNode::):
3101         (KJS::WhileNode::):
3102         (KJS::ForNode::):
3103         (KJS::ContinueNode::):
3104         (KJS::BreakNode::):
3105         (KJS::ReturnNode::):
3106         (KJS::WithNode::):
3107         (KJS::LabelNode::):
3108         (KJS::ThrowNode::):
3109         (KJS::TryNode::):
3110         (KJS::ParameterNode::):
3111         (KJS::FuncExprNode::):
3112         (KJS::FuncDeclNode::):
3113         (KJS::CaseClauseNode::):
3114         (KJS::ClauseListNode::):
3115         (KJS::CaseBlockNode::):
3116         (KJS::SwitchNode::):
3117         Changed ParserRefCounted to hold a JSGlobalData pointer, and used it to replace
3118         threadInstance calls.
3119
3120 2008-06-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
3121
3122         Reviewed by Alexey Proskuryakov.
3123
3124         Make the JavaScript shell collect the heap from main() instead of
3125         jscmain() to suppress leak messages in debug builds.
3126
3127         * kjs/Shell.cpp:
3128         (main):
3129         (jscmain):
3130
3131 2008-06-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
3132
3133         Reviewed by Maciej.
3134
3135         Make the conversion of the pair (less, jtrue) to jless use register
3136         reference counting information for safety instead of requiring callers
3137         to decide whether it is safe.
3138
3139         No changes on SunSpider codegen.
3140
3141         * VM/CodeGenerator.cpp:
3142         (KJS::CodeGenerator::emitJumpIfTrue):
3143         * VM/CodeGenerator.h:
3144         * kjs/nodes.cpp:
3145         (KJS::DoWhileNode::emitCode):
3146         (KJS::WhileNode::emitCode):
3147         (KJS::ForNode::emitCode):
3148         (KJS::CaseBlockNode::emitCodeForBlock):
3149
3150 2008-06-24  Kevin McCullough  <kmccullough@apple.com>
3151
3152         Reviewed by Tim.
3153
3154         <rdar://problem/6031594> JSProfiler: Profiler goes into an infinite
3155         loop sometimes.
3156         <rdar://problem/6031603> JSProfiler: Profiler asserts in debug and
3157         give the wrong times in release
3158
3159         Fixed two issues found by Tim in the same test.
3160
3161         * profiler/Profile.cpp:
3162         (KJS::Profile::removeProfileStart): No longer take profile's time from
3163         all ancestors, but instead attribute it to its parent.  Also add an
3164         Assert to ensure we only delete the child we mean to.
3165         (KJS::Profile::removeProfileEnd): Ditto for profileEnd.
3166         (KJS::Profile::didExecute): Cleaned up the execution order and correctly
3167         attribute all of the parent's time to the new node.
3168         * profiler/ProfileNode.cpp: If this node does not have a startTime it
3169         should not get a giant total time, but instead be 0.
3170         (KJS::ProfileNode::endAndRecordCall):
3171         * profiler/ProfileNode.h:
3172         (KJS::ProfileNode::removeChild): Should reset the sibling pointers since
3173         one of them has been removed.
3174
3175 2008-06-24  Darin Adler  <darin@apple.com>
3176
3177         Reviewed by Cameron.
3178
3179         - fix https://bugs.webkit.org/show_bug.cgi?id=19739
3180           REGRESSION: fast/js/property-getters-and-setters.html fails
3181
3182         * kjs/JSObject.cpp:
3183         (KJS::JSObject::put): Remove an untested optimization I checked in by accident.
3184         The two loops up the prototype chain both need to start from this; instead the
3185         second loop was starting where the first loop left off.
3186
3187 2008-06-24  Steve Falkenburg  <sfalken@apple.com>
3188
3189         Build fix.
3190
3191         * kjs/nodes.cpp:
3192
3193 2008-06-24  Joerg Bornemann  <joerg.bornemann@trolltech.com>
3194
3195         Reviewed by Simon.
3196
3197         For the Qt build on Windows don't depend on the presence of GNU CPP
3198         but use MSVC's preprocessor instead.
3199         dftables accepts a --preprocessor option which is set in pcre.pri for MSVC platforms.
3200
3201         * pcre/dftables: Added support for specifying the preprocessor command
3202         to use via --preprocessor, similar to
3203         WebCore/bindings/scripts/generate-bindings.pl.
3204         * pcre/pcre.pri: Pass --preprocessor='cl /e' to dftables, or more
3205         generally speaking QMAKE_CC /E for the win32-msvc buildspecs.
3206
3207 2008-06-24  Simon Hausmann  <hausmann@webkit.org>
3208
3209         Fix the Qt build, added missing include.
3210
3211         * kjs/PropertySlot.cpp:
3212
3213 2008-06-24  Alexey Proskuryakov  <ap@webkit.org>
3214
3215         Reviewed by Cameron Zwarich.
3216
3217         Make ParserRefCountedCounter actually perform a leak check.
3218
3219         * kjs/nodes.cpp:
3220         (KJS::ParserRefCountedCounter::~ParserRefCountedCounter): Check for leaks in destructor,
3221         not in constructor.
3222         (KJS::ParserRefCountedCounter::increment):
3223         (KJS::ParserRefCountedCounter::decrement):
3224         (KJS::ParserRefCounted::ParserRefCounted):
3225         (KJS::ParserRefCounted::~ParserRefCounted):
3226         While at it, also made counting thread-safe.
3227
3228 2008-06-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
3229
3230         Reviewed by Oliver.
3231
3232         Bug 19730: REGRESSION (r34497): Text in alerts in "Leisure suit Larry" is not wrapped
3233         <https://bugs.webkit.org/show_bug.cgi?id=19730>
3234
3235         Do not convert the pair (less, jtrue) to jless when jtrue is a jump
3236         target. An example of this is when the condition of a while loop is a
3237         LogicalOrNode.
3238
3239         * VM/CodeGenerator.cpp:
3240         (KJS::CodeGenerator::emitLabel):
3241
3242 2008-06-20  Ariya Hidayat  <ariya.hidayat@trolltech.com>
3243
3244         Reviewed by Adam Roben.
3245
3246         Fix compile with MinGW.
3247
3248         * kjs/Shell.cpp:
3249         * wtf/Threading.h:
3250         (WTF::atomicIncrement):
3251         (WTF::atomicDecrement):
3252
3253 2008-06-23  Mark Rowe  <mrowe@apple.com>
3254
3255         Reviewed by Oliver Hunt.
3256
3257         Prepration for returning memory to the OS on Windows.  Track whether a portion of a span of memory was returned to the OS.
3258         If it was, ask that it be recommitted before returning it to the application as an allocated region.
3259
3260         * wtf/FastMalloc.cpp:
3261         (WTF::TCMalloc_PageHeap::New):  If the span was decommitted, ask that it be recommitted before returning it.
3262         (WTF::TCMalloc_PageHeap::AllocLarge):  Ditto.
3263         (WTF::TCMalloc_PageHeap::Carve):  When splitting a span, ensure that the decommitted state propogates to the two new spans.
3264         (WTF::TCMalloc_PageHeap::Delete):  When merging a span, ensure that the resulting span is marked as decommitted if any of the
3265         spans being merged were marked as decommitted.
3266         (WTF::TCMalloc_PageHeap::IncrementalScavenge):  Mark as decommitted after releasing the span.
3267         (WTF::TCMalloc_Central_FreeList::FetchFromSpans): Add an assertion to catch a decommitted span being returned to the application
3268         without first being recommitted.
3269         (WTF::TCMalloc_Central_FreeList::Populate): Ditto.
3270         * wtf/TCSystemAlloc.cpp: Stub out TCMalloc_SystemCommit.
3271         * wtf/TCSystemAlloc.h:
3272
3273 2008-06-23  Mark Rowe  <mrowe@apple.com>
3274
3275         Reviewed by Sam Weinig.
3276
3277         Remove the sample member of Span when NO_TCMALLOC_SAMPLES is defined.
3278
3279         * wtf/FastMalloc.cpp:
3280         (WTF::TCMalloc_PageHeap::Delete): Only update Span::sample if NO_TCMALLOC_SAMPLES is not defined.
3281         (WTF::TCMallocStats::do_free):  Ditto.
3282
3283 2008-06-23  Darin Adler  <darin@apple.com>
3284
3285         Reviewed by Geoff.
3286
3287         - work toward https://bugs.webkit.org/show_bug.cgi?id=19721
3288
3289         More preparation toward making functions work on primitive types without
3290         creating wrapper objects. No speedup this time, but prepares for a future
3291         speedup without slowing things down.
3292
3293         SunSpider reports no change.
3294
3295         - Eliminated the implementsCall, callAsFunction and construct virtual
3296           functions from JSObject. Instead, the CallData and ConstructData for
3297           a native function includes a function pointer that the caller can use
3298           directly. Changed all call sites to use CallData and ConstructData.
3299
3300         - Changed the "this" argument to native functions to be a JSValue rather
3301           than a JSObject. This prepares us for passing primitives into these
3302           functions. The conversion to an object now must be done inside the
3303           function. Critically, if it's a function that can be called on a DOM
3304           window object, then we have to be sure to call toThisObject on the
3305           argument before we use it for anything even if it's already an object.
3306
3307         - Eliminated the practice of using constructor objects in the global
3308           object to make objects of the various basic types. Since these
3309           constructors can't be replaced by script, there's no reason to involve
3310           a constructor object at all. Added functions to do the construction
3311           directly.
3312
3313         - Made some more class members private and protected, including virtual
3314           function overrides. This can catch code using unnecessarily slow virtual
3315           function code paths when the type of an object is known statically. If we
3316           later find a new reason use the members outside the class it's easy to
3317           make them public again.
3318
3319         - Moved the declarations of the native implementations for functions out
3320           of header files. These can have internal linkage and be declared inside
3321           the source file.
3322
3323         - Changed PrototypeFunction to take function pointers with the right
3324           arguments to be put directly into CallData. This eliminates the
3325           need to have a separate PrototypeReflexiveFunction, and reveals that the
3326           real purpose of that class included something else specific to eval --
3327           storage of a cached global object. So renamed PrototypeReflexiveFunction
3328           to GlobalEvalFunction.
3329
3330         * API/JSCallbackConstructor.cpp:
3331         (KJS::constructJSCallback):
3332         (KJS::JSCallbackConstructor::getConstructData):
3333         * API/JSCallbackConstructor.h:
3334         * API/JSCallbackFunction.cpp:
3335         (KJS::JSCallbackFunction::implementsHasInstance):
3336         (KJS::JSCallbackFunction::call):
3337         (KJS::JSCallbackFunction::getCallData):
3338         * API/JSCallbackFunction.h:
3339         (KJS::JSCallbackFunction::classInfo):
3340         * API/JSCallbackObject.h:
3341         (KJS::JSCallbackObject::classRef):
3342         (KJS::JSCallbackObject::classInfo):
3343         * API/JSCallbackObjectFunctions.h:
3344         (KJS::::getConstructData):
3345         (KJS::::construct):
3346         (KJS::::getCallData):
3347         (KJS::::call):
3348         * API/JSObjectRef.cpp:
3349         (JSObjectMakeFunction):
3350         (JSObjectIsFunction):
3351         (JSObjectCallAsFunction):
3352         (JSObjectCallAsConstructor):
3353         * JavaScriptCore.exp:
3354         * VM/Machine.cpp:
3355         (KJS::jsTypeStringForValue):
3356         (KJS::Machine::privateExecute):
3357         * kjs/ArrayPrototype.cpp:
3358         (KJS::arrayProtoFuncToString):
3359         (KJS::arrayProtoFuncToLocaleString):
3360         (KJS::arrayProtoFuncJoin):
3361         (KJS::arrayProtoFuncConcat):
3362         (KJS::arrayProtoFuncPop):
3363         (KJS::arrayProtoFuncPush):
3364         (KJS::arrayProtoFuncReverse):
3365         (KJS::arrayProtoFuncShift):
3366         (KJS::arrayProtoFuncSlice):
3367         (KJS::arrayProtoFuncSort):
3368         (KJS::arrayProtoFuncSplice):
3369         (KJS::arrayProtoFuncUnShift):
3370         (KJS::arrayProtoFuncFilter):
3371         (KJS::arrayProtoFuncMap):
3372         (KJS::arrayProtoFuncEvery):
3373         (KJS::arrayProtoFuncForEach):
3374         (KJS::arrayProtoFuncSome):
3375         (KJS::arrayProtoFuncIndexOf):
3376         (KJS::arrayProtoFuncLastIndexOf):
3377         (KJS::ArrayConstructor::ArrayConstructor):
3378         (KJS::constructArrayWithSizeQuirk):
3379         (KJS::constructWithArrayConstructor):
3380         (KJS::ArrayConstructor::getConstructData):
3381         (KJS::callArrayConstructor):
3382         (KJS::ArrayConstructor::getCallData):
3383         * kjs/ArrayPrototype.h:
3384         * kjs/BooleanObject.cpp:
3385         (KJS::booleanProtoFuncToString):
3386         (KJS::booleanProtoFuncValueOf):
3387         (KJS::constructBoolean):
3388         (KJS::constructWithBooleanConstructor):
3389         (KJS::BooleanConstructor::getConstructData):
3390         (KJS::callBooleanConstructor):
3391         (KJS::BooleanConstructor::getCallData):
3392         (KJS::constructBooleanFromImmediateBoolean):
3393         * kjs/BooleanObject.h:
3394         * kjs/CallData.h:
3395         (KJS::):
3396         * kjs/ConstructData.h:
3397         (KJS::):
3398         * kjs/FunctionPrototype.cpp:
3399         (KJS::callFunctionPrototype):
3400         (KJS::FunctionPrototype::getCallData):
3401         (KJS::functionProtoFuncToString):
3402         (KJS::functionProtoFuncApply):
3403         (KJS::functionProtoFuncCall):
3404         (KJS::constructWithFunctionConstructor):
3405         (KJS::FunctionConstructor::getConstructData):
3406         (KJS::callFunctionConstructor):
3407         (KJS::FunctionConstructor::getCallData):
3408         (KJS::constructFunction):
3409         * kjs/FunctionPrototype.h:
3410         * kjs/JSArray.cpp:
3411         (KJS::AVLTreeAbstractorForArrayCompare::compare_key_key):
3412         (KJS::JSArray::sort):
3413         (KJS::constructEmptyArray):
3414         (KJS::constructArray):
3415         * kjs/JSArray.h:
3416         (KJS::JSArray::classInfo):
3417         * kjs/JSFunction.cpp:
3418         (KJS::JSFunction::call):
3419         (KJS::globalFuncEval):
3420         (KJS::globalFuncParseInt):
3421         (KJS::globalFuncParseFloat):
3422         (KJS::globalFuncIsNaN):
3423         (KJS::globalFuncIsFinite):
3424         (KJS::globalFuncDecodeURI):
3425         (KJS::globalFuncDecodeURIComponent):
3426         (KJS::globalFuncEncodeURI):
3427         (KJS::globalFuncEncodeURIComponent):
3428         (KJS::globalFuncEscape):
3429         (KJS::globalFuncUnescape):
3430         (KJS::globalFuncKJSPrint):
3431         (KJS::PrototypeFunction::PrototypeFunction):
3432         (KJS::PrototypeFunction::getCallData):
3433         (KJS::GlobalEvalFunction::GlobalEvalFunction):
3434         (KJS::GlobalEvalFunction::mark):
3435         * kjs/JSFunction.h:
3436         (KJS::InternalFunction::classInfo):
3437         (KJS::InternalFunction::functionName):
3438         (KJS::JSFunction::classInfo):
3439         (KJS::GlobalEvalFunction::cachedGlobalObject):
3440         * kjs/JSGlobalObject.cpp:
3441         (KJS::JSGlobalObject::reset):
3442         (KJS::JSGlobalObject::mark):
3443         * kjs/JSGlobalObject.h:
3444         (KJS::JSGlobalObject::JSGlobalObject):
3445         (KJS::JSGlobalObject::evalFunction):
3446         * kjs/JSImmediate.cpp:
3447         (KJS::JSImmediate::toObject):
3448         * kjs/JSNotAnObject.cpp:
3449         * kjs/JSNotAnObject.h:
3450         * kjs/JSObject.cpp:
3451         (KJS::JSObject::put):
3452         (KJS::callDefaultValueFunction):
3453         (KJS::JSObject::defaultValue):
3454         (KJS::JSObject::lookupGetter):
3455         (KJS::JSObject::lookupSetter):
3456         (KJS::JSObject::hasInstance):
3457         (KJS::JSObject::fillGetterPropertySlot):
3458         (KJS::Error::create):
3459         (KJS::constructEmptyObject):
3460         * kjs/JSObject.h:
3461         (KJS::GetterSetter::GetterSetter):
3462         (KJS::GetterSetter::getter):
3463         (KJS::GetterSetter::setGetter):
3464         (KJS::GetterSetter::setter):
3465         (KJS::GetterSetter::setSetter):
3466         * kjs/JSValue.cpp:
3467         (KJS::JSCell::deleteProperty):
3468         (KJS::call):
3469         (KJS::construct):
3470         * kjs/JSValue.h:
3471         * kjs/MathObject.cpp:
3472         (KJS::mathProtoFuncAbs):
3473         (KJS::mathProtoFuncACos):
3474         (KJS::mathProtoFuncASin):
3475         (KJS::mathProtoFuncATan):
3476         (KJS::mathProtoFuncATan2):
3477         (KJS::mathProtoFuncCeil):
3478         (KJS::mathProtoFuncCos):
3479         (KJS::mathProtoFuncExp):
3480         (KJS::mathProtoFuncFloor):
3481         (KJS::mathProtoFuncLog):
3482         (KJS::mathProtoFuncMax):
3483         (KJS::mathProtoFuncMin):
3484         (KJS::mathProtoFuncPow):
3485         (KJS::mathProtoFuncRandom):
3486         (KJS::mathProtoFuncRound):
3487         (KJS::mathProtoFuncSin):
3488         (KJS::mathProtoFuncSqrt):
3489         (KJS::mathProtoFuncTan):
3490         * kjs/MathObject.h:
3491         * kjs/NumberObject.cpp:
3492         (KJS::numberProtoFuncToString):
3493         (KJS::numberProtoFuncToLocaleString):
3494         (KJS::numberProtoFuncValueOf):
3495         (KJS::numberProtoFuncToFixed):
3496         (KJS::numberProtoFuncToExponential):
3497         (KJS::numberProtoFuncToPrecision):
3498         (KJS::NumberConstructor::NumberConstructor):
3499         (KJS::constructWithNumberConstructor):
3500         (KJS::NumberConstructor::getConstructData):
3501         (KJS::callNumberConstructor):
3502         (KJS::NumberConstructor::getCallData):
3503         (KJS::constructNumber):
3504         (KJS::constructNumberFromImmediateNumber):
3505         * kjs/NumberObject.h:
3506         (KJS::NumberObject::classInfo):
3507         (KJS::NumberConstructor::classInfo):
3508         * kjs/PropertySlot.cpp:
3509         (KJS::PropertySlot::functionGetter):
3510         * kjs/RegExpObject.cpp:
3511         (KJS::regExpProtoFuncTest):
3512         (KJS::regExpProtoFuncExec):
3513         (KJS::regExpProtoFuncCompile):
3514         (KJS::regExpProtoFuncToString):
3515         (KJS::callRegExpObject):
3516         (KJS::RegExpObject::getCallData):
3517         (KJS::constructRegExp):
3518         (KJS::constructWithRegExpConstructor):
3519         (KJS::RegExpConstructor::getConstructData):
3520         (KJS::callRegExpConstructor):
3521         (KJS::RegExpConstructor::getCallData):
3522         * kjs/RegExpObject.h:
3523         (KJS::RegExpConstructor::classInfo):
3524         * kjs/Shell.cpp:
3525         (GlobalObject::GlobalObject):
3526         (functionPrint):
3527         (functionDebug):
3528         (functionGC):
3529   &nbs