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