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