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