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