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