REGRESSION (r48582): Crash in StructureStubInfo::initPutByIdTransition when reloading...
[WebKit.git] / JavaScriptCore / ChangeLog
1 2009-09-21  Oliver Hunt  <oliver@apple.com>
2
3         Reviewed by Geoff Garen.
4
5         REGRESSION (r48582): Crash in StructureStubInfo::initPutByIdTransition when reloading trac.webkit.org
6         https://bugs.webkit.org/show_bug.cgi?id=29599
7
8         It is unsafe to attempt to cache new property transitions on
9         dictionaries of any type.
10
11         * interpreter/Interpreter.cpp:
12         (JSC::Interpreter::tryCachePutByID):
13         * jit/JITStubs.cpp:
14         (JSC::JITThunks::tryCachePutByID):
15
16 2009-09-21  Oliver Hunt  <oliver@apple.com>
17
18         RS=Maciej Stachowiak.
19
20         Re-land SNES fix with corrected assertion.
21
22         * interpreter/Interpreter.cpp:
23         (JSC::Interpreter::resolveGlobal):
24         (JSC::Interpreter::tryCachePutByID):
25         (JSC::Interpreter::tryCacheGetByID):
26         * jit/JITStubs.cpp:
27         (JSC::JITThunks::tryCachePutByID):
28         (JSC::JITThunks::tryCacheGetByID):
29         (JSC::DEFINE_STUB_FUNCTION):
30         * runtime/BatchedTransitionOptimizer.h:
31         (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
32         * runtime/JSObject.cpp:
33         (JSC::JSObject::removeDirect):
34         * runtime/Structure.cpp:
35         (JSC::Structure::Structure):
36         (JSC::Structure::getEnumerablePropertyNames):
37         (JSC::Structure::despecifyDictionaryFunction):
38         (JSC::Structure::addPropertyTransitionToExistingStructure):
39         (JSC::Structure::addPropertyTransition):
40         (JSC::Structure::removePropertyTransition):
41         (JSC::Structure::toDictionaryTransition):
42         (JSC::Structure::toCacheableDictionaryTransition):
43         (JSC::Structure::toUncacheableDictionaryTransition):
44         (JSC::Structure::fromDictionaryTransition):
45         (JSC::Structure::removePropertyWithoutTransition):
46         * runtime/Structure.h:
47         (JSC::Structure::isDictionary):
48         (JSC::Structure::isUncacheableDictionary):
49         (JSC::Structure::):
50         * runtime/StructureChain.cpp:
51         (JSC::StructureChain::isCacheable):
52
53 2009-09-21  Adam Roben  <aroben@apple.com>
54
55         Revert r48573, as it caused many assertion failures
56
57         * interpreter/Interpreter.cpp:
58         * jit/JITStubs.cpp:
59         * runtime/BatchedTransitionOptimizer.h:
60         * runtime/JSObject.cpp:
61         * runtime/Structure.cpp:
62         * runtime/Structure.h:
63         * runtime/StructureChain.cpp:
64
65 2009-09-21  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>
66
67         Unreviewed make dist build fix. Missing files.
68
69         * GNUmakefile.am:
70
71 2009-09-19  Gavin Barraclough  <barraclough@apple.com>
72
73         Reviewed by Sam 'Cabin Boy' Weinig.
74
75         Fix stack alignment with ARM THUMB2 JIT.
76         https://bugs.webkit.org/show_bug.cgi?id=29526
77         
78         Stack is currently being decremented by 0x3c, bump this to 0x40 to make this a
79         multiple of 16 bytes.
80
81         * jit/JITStubs.cpp:
82         (JSC::JITThunks::JITThunks):
83         * jit/JITStubs.h:
84
85 2009-09-20  Oliver Hunt  <oliver@apple.com>
86
87         Reviewed by Maciej Stachowiak.
88
89         SNES is too slow
90         https://bugs.webkit.org/show_bug.cgi?id=29534
91
92         The problem was that the emulator used multiple classes with
93         more properties than our dictionary cutoff allowed, this resulted
94         in more or less all critical logic inside the emulator requiring
95         uncached property access.
96
97         Rather than simply bumping the dictionary cutoff, this patch
98         recognises that there are two ways to create a "dictionary"
99         structure.  Either by adding a large number of properties, or
100         by removing a property.  In the case of adding properties we
101         know all the existing properties will maintain their existing
102         offsets, so we could cache access to those properties, if we
103         know they won't be removed.
104
105         To make this possible, this patch adds the logic required to
106         distinguish a dictionary created by addition from one created
107         by removal.  With this logic in place we can now cache access
108         to objects with large numbers of properties.
109
110         SNES performance improved by more than 6x.
111
112         * interpreter/Interpreter.cpp:
113         (JSC::Interpreter::resolveGlobal):
114         (JSC::Interpreter::tryCachePutByID):
115         (JSC::Interpreter::tryCacheGetByID):
116         * jit/JITStubs.cpp:
117         (JSC::JITThunks::tryCachePutByID):
118         (JSC::JITThunks::tryCacheGetByID):
119         (JSC::DEFINE_STUB_FUNCTION):
120         * runtime/BatchedTransitionOptimizer.h:
121         (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
122         * runtime/JSObject.cpp:
123         (JSC::JSObject::removeDirect):
124         * runtime/Structure.cpp:
125         (JSC::Structure::Structure):
126         (JSC::Structure::getEnumerablePropertyNames):
127         (JSC::Structure::despecifyDictionaryFunction):
128         (JSC::Structure::addPropertyTransitionToExistingStructure):
129         (JSC::Structure::addPropertyTransition):
130         (JSC::Structure::removePropertyTransition):
131         (JSC::Structure::toDictionaryTransition):
132         (JSC::Structure::toCacheableDictionaryTransition):
133         (JSC::Structure::toUncacheableDictionaryTransition):
134         (JSC::Structure::fromDictionaryTransition):
135         (JSC::Structure::removePropertyWithoutTransition):
136         * runtime/Structure.h:
137         (JSC::Structure::isDictionary):
138         (JSC::Structure::isUncacheableDictionary):
139         (JSC::Structure::):
140         * runtime/StructureChain.cpp:
141         (JSC::StructureChain::isCacheable):
142
143 2009-09-19  Oliver Hunt  <oliver@apple.com>
144
145         Reviewed by Maciej Stachowiak.
146
147         Implement ES5 Object.create function
148         https://bugs.webkit.org/show_bug.cgi?id=29524
149
150         Implement Object.create.  Very simple patch, effectively Object.defineProperties
151         only creating the target object itself.
152
153         * runtime/CommonIdentifiers.h:
154         * runtime/ObjectConstructor.cpp:
155         (JSC::ObjectConstructor::ObjectConstructor):
156         (JSC::objectConstructorCreate):
157
158 2009-09-19  Dan Bernstein  <mitz@apple.com>
159
160         Fix clean debug builds.
161
162         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
163
164 2009-09-19  Joerg Bornemann  <joerg.bornemann@nokia.com>
165
166         Reviewed by George Staikos.
167
168         QtWebKit Windows CE compile fix
169
170         https://bugs.webkit.org/show_bug.cgi?id=29379
171
172         There is no _aligned_alloc or _aligned_free on Windows CE.
173         We just use the Windows code that was there before and use VirtualAlloc.
174         But that also means that the BLOCK_SIZE must be 64K as this function
175         allocates on 64K boundaries.
176
177         * runtime/Collector.cpp:
178         (JSC::Heap::allocateBlock):
179         (JSC::Heap::freeBlock):
180         * runtime/Collector.h:
181
182 2009-09-19  Oliver Hunt  <oliver@apple.com>
183
184         Reviewed by Sam Weinig.
185
186         Implement ES5 Object.defineProperties function
187         https://bugs.webkit.org/show_bug.cgi?id=29522
188
189         Implement Object.defineProperties.  Fairly simple patch, simply makes use of
190         existing functionality used for defineProperty.
191
192         * runtime/CommonIdentifiers.h:
193         * runtime/ObjectConstructor.cpp:
194         (JSC::ObjectConstructor::ObjectConstructor):
195         (JSC::defineProperties):
196         (JSC::objectConstructorDefineProperties):
197
198 2009-09-19  Oliver Hunt  <oliver@apple.com>
199
200         Reviewed by NOBODY (Build fix).
201
202         Windows build fix part2
203
204         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
205         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
206
207 2009-09-19  Oliver Hunt  <oliver@apple.com>
208
209         Reviewed by NOBODY (Buildfix).
210
211         Windows build fix part 1.
212
213         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
214         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
215
216 2009-09-18  Oliver Hunt  <oliver@apple.com>
217
218         Reviewed by Geoff Garen.
219
220         Implement ES5 Object.defineProperty function
221         https://bugs.webkit.org/show_bug.cgi?id=29503
222
223         Implement Object.defineProperty.  This requires adding the API to
224         ObjectConstructor, along with a helper function that implements the
225         ES5 internal [[ToPropertyDescriptor]] function.  It then adds
226         JSObject::defineOwnProperty that implements the appropriate ES5 semantics.
227         Currently defineOwnProperty uses a delete followed by a put to redefine
228         attributes of a property, clearly this is less efficient than it could be
229         but we can improve this if it needs to be possible in future.
230
231         * JavaScriptCore.exp:
232         * debugger/DebuggerActivation.cpp:
233         (JSC::DebuggerActivation::defineGetter):
234         (JSC::DebuggerActivation::defineSetter):
235         * debugger/DebuggerActivation.h:
236         * interpreter/Interpreter.cpp:
237         (JSC::Interpreter::privateExecute):
238         * jit/JITStubs.cpp:
239           Update defineGetter/Setter calls
240         * runtime/CommonIdentifiers.h:
241         * runtime/JSArray.cpp:
242         (JSC::JSArray::getOwnPropertySlot):
243         * runtime/JSGlobalObject.cpp:
244         (JSC::JSGlobalObject::defineGetter):
245         (JSC::JSGlobalObject::defineSetter):
246         * runtime/JSGlobalObject.h:
247         * runtime/JSObject.cpp:
248         (JSC::JSObject::defineGetter):
249         (JSC::JSObject::defineSetter):
250         (JSC::putDescriptor):
251         (JSC::JSObject::defineOwnProperty):
252         * runtime/JSObject.h:
253         * runtime/ObjectConstructor.cpp:
254         (JSC::ObjectConstructor::ObjectConstructor):
255         (JSC::objectConstructorGetOwnPropertyDescriptor):
256         (JSC::toPropertyDescriptor):
257         (JSC::objectConstructorDefineProperty):
258         * runtime/ObjectPrototype.cpp:
259         (JSC::objectProtoFuncDefineGetter):
260         (JSC::objectProtoFuncDefineSetter):
261         * runtime/PropertyDescriptor.cpp:
262         (JSC::PropertyDescriptor::writable):
263         (JSC::PropertyDescriptor::enumerable):
264         (JSC::PropertyDescriptor::configurable):
265         (JSC::PropertyDescriptor::isDataDescriptor):
266         (JSC::PropertyDescriptor::isGenericDescriptor):
267         (JSC::PropertyDescriptor::isAccessorDescriptor):
268         (JSC::PropertyDescriptor::getter):
269         (JSC::PropertyDescriptor::setter):
270         (JSC::PropertyDescriptor::setDescriptor):
271         (JSC::PropertyDescriptor::setAccessorDescriptor):
272         (JSC::PropertyDescriptor::setWritable):
273         (JSC::PropertyDescriptor::setEnumerable):
274         (JSC::PropertyDescriptor::setConfigurable):
275         (JSC::PropertyDescriptor::setSetter):
276         (JSC::PropertyDescriptor::setGetter):
277         (JSC::PropertyDescriptor::equalTo):
278         (JSC::PropertyDescriptor::attributesEqual):
279         (JSC::PropertyDescriptor::attributesWithOverride):
280         * runtime/PropertyDescriptor.h:
281         (JSC::PropertyDescriptor::PropertyDescriptor):
282         (JSC::PropertyDescriptor::value):
283         (JSC::PropertyDescriptor::setValue):
284         (JSC::PropertyDescriptor::isEmpty):
285         (JSC::PropertyDescriptor::writablePresent):
286         (JSC::PropertyDescriptor::enumerablePresent):
287         (JSC::PropertyDescriptor::configurablePresent):
288         (JSC::PropertyDescriptor::setterPresent):
289         (JSC::PropertyDescriptor::getterPresent):
290         (JSC::PropertyDescriptor::operator==):
291         (JSC::PropertyDescriptor::):
292
293 2009-09-18  Gabor Loki  <loki@inf.u-szeged.hu>
294
295         Reviewed by Gavin Barraclough.
296
297         Build fix to enable ARM_THUMB2 on Linux
298         https://bugs.webkit.org/show_bug.cgi?id=
299
300         * jit/ExecutableAllocator.h:
301         (JSC::ExecutableAllocator::cacheFlush):
302         * jit/JITStubs.cpp:
303         * wtf/Platform.h:
304
305 2009-09-18  Gabor Loki  <loki@inf.u-szeged.hu>
306
307         Reviewed by Gavin Barraclough.
308
309         Defines two pseudo-platforms for ARM and Thumb-2 instruction set.
310         https://bugs.webkit.org/show_bug.cgi?id=29122
311
312         Introduces WTF_PLATFORM_ARM_TRADITIONAL and WTF_PLATFORM_ARM_THUMB2
313         macros on ARM platforms. The PLATFORM(ARM_THUMB2) should be used
314         when Thumb-2 instruction set is the required target. The
315         PLATFORM(ARM_TRADITIONAL) is for generic ARM instruction set. In
316         case where the code is common the PLATFORM(ARM) have to be used.
317
318         * assembler/ARMAssembler.cpp:
319         * assembler/ARMAssembler.h:
320         * assembler/ARMv7Assembler.h:
321         * assembler/MacroAssembler.h:
322         * assembler/MacroAssemblerARM.cpp:
323         * assembler/MacroAssemblerARM.h:
324         * assembler/MacroAssemblerCodeRef.h:
325         (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
326         * jit/ExecutableAllocator.h:
327         * jit/JIT.h:
328         * jit/JITInlineMethods.h:
329         (JSC::JIT::beginUninterruptedSequence):
330         (JSC::JIT::preserveReturnAddressAfterCall):
331         (JSC::JIT::restoreReturnAddressBeforeReturn):
332         (JSC::JIT::restoreArgumentReference):
333         (JSC::JIT::restoreArgumentReferenceForTrampoline):
334         * jit/JITOpcodes.cpp:
335         * jit/JITStubs.cpp:
336         (JSC::JITThunks::JITThunks):
337         * jit/JITStubs.h:
338         * wtf/Platform.h:
339         * yarr/RegexJIT.cpp:
340         (JSC::Yarr::RegexGenerator::generateEnter):
341
342 2009-09-18  Joerg Bornemann  <joerg.bornemann@nokia.com>
343
344         Reviewed by Simon Hausmann.
345
346         Fix the Qt/Windows CE build.
347
348         * JavaScriptCore.pri: Build the ce_time.cpp functions from
349         within Qt externally.
350         * wtf/DateMath.cpp: Removed unnecessary Qt #ifdef, for the
351         Qt build these functions are no external, too.
352
353 2009-09-17  Janne Koskinen  <janne.p.koskinen@digia.com>
354
355         Reviewed by Simon Hausmann.
356
357         Symbian/WINSCW build fox.
358
359         Repeat Q_OS_WIN wchar_t hack for WINSCW, similar to
360         revision 24774.
361
362         WINSCW defines wchar_t, thus UChar has to be wchar_t
363
364         * wtf/unicode/qt4/UnicodeQt4.h:
365
366 2009-09-17  Janne Koskinen  <janne.p.koskinen@digia.com>
367
368         Reviewed by Simon Hausmann.
369
370         Symbian/WINSCW build fix.
371
372         https://bugs.webkit.org/show_bug.cgi?id=29186
373
374         WINSCW Template specialisation name in declaration must the be the same as in implementation.
375
376         * runtime/LiteralParser.h:
377
378 2009-09-15  Norbert Leser  <norbert.leser@nokia.com>
379
380         Reviewed by Darin Adler.
381
382         https://bugs.webkit.org/show_bug.cgi?id=27060
383
384         Symbian compiler for emulator target (WINSCW) fails with
385         "illegal operand" for m_attributesInPrevious in structure.ccp
386         (when calling make_pair functions).
387         This error is apparently due to the compiler not properly
388         resolving the unsigned type of the declared bitfield.
389
390         Initial patch explicitly casted m_attributesInPrevious
391         to unsigned, but since bitfield optimization is not critical for
392         the emulator target, this conditional change in header file
393         appears to be least intrusive.
394
395         * runtime/Structure.h:
396
397 2009-09-16  Gabor Loki  <loki@inf.u-szeged.hu>
398
399         Reviewed by Darin Adler.
400
401         Fix GCC warnings on ARM_THUMB2 platform
402
403         * assembler/ARMv7Assembler.h:
404         (JSC::ARMThumbImmediate::countLeadingZerosPartial):
405         * assembler/MacroAssemblerARMv7.h:
406         (JSC::MacroAssemblerARMv7::branchTruncateDoubleToInt32):
407         (JSC::MacroAssemblerARMv7::moveFixedWidthEncoding):
408
409 2009-09-16  Greg Bolsinga  <bolsinga@apple.com>
410
411         Add ENABLE(INSPECTOR)
412         https://bugs.webkit.org/show_bug.cgi?id=29260
413
414         Reviewed by David Kilzer.
415
416         * wtf/Platform.h:
417
418 2009-09-16  Greg Bolsinga  <bolsinga@apple.com>
419
420         Add ENABLE(CONTEXT_MENUS)
421         https://bugs.webkit.org/show_bug.cgi?id=29225
422
423         Reviewed by David Kilzer.
424
425         * wtf/Platform.h:
426
427 2009-09-16  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>
428
429         Reviewed by Eric Seidel.
430
431         The webkit stdint and stdbool headers exists because
432         the compiler MSVC doesn't include them.  The check
433         should not check for PLATFORM(WIN_OS) but for MSVC.
434
435         * os-win32/stdbool.h:
436         * os-win32/stdint.h:
437
438 2009-09-16  Greg Bolsinga  <bolsinga@apple.com>
439
440         Add ENABLE(DRAG_SUPPORT)
441         https://bugs.webkit.org/show_bug.cgi?id=29233
442
443         Reviewed by David Kilzer.
444
445         * wtf/Platform.h:
446
447 2009-09-16  Kevin Ollivier  <kevino@theolliviers.com>
448
449         waf build fix after flag was moved to correct place.
450
451         * wscript:
452
453 2009-09-16  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
454
455         Reviewed by Simon Hausmann.
456
457         [Qt] Build fix for 64-bit Qt on Mac OS X
458
459         * wtf/Platform.h: Use JSVALUE64 on DARWIN, not only on MAC
460
461 2009-09-16  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>
462
463         Reviewed by Simon Hausmann.
464
465         [Qt] Fix wtf/ThreadSpecific.h under Qt to free thread local objects.
466         https://bugs.webkit.org/show_bug.cgi?id=29295
467
468         This is an important fix when JavaScript workers are in use, since
469         unfreed ThreadGlobalDatas leak a big amount of memory (50-100k each).
470         QThreadStorage calls the destructor of a given object, which is the
471         ThreadSpecific::Data. Unlike pthread, Qt is object oriented, and does
472         not support the calling of a static utility function when the thread
473         is about to close. In this patch we call the ThreadSpecific::destroy()
474         utility function from the destructor of ThreadSpecific::Data. Moreover,
475         since Qt resets all thread local values to 0 before the calling of the
476         appropriate destructors, we set back the pointer to its original value.
477         This is necessary because the get() method of the ThreadSpecific
478         object may be called during the exuction of the destructor.
479
480         * wtf/ThreadSpecific.h:
481         (WTF::ThreadSpecific::Data::~Data):
482         (WTF::::~ThreadSpecific):
483         (WTF::::set):
484         (WTF::::destroy):
485
486 2009-09-10  Oliver Hunt  <oliver@apple.com>
487
488         Reviewed by Geoff Garen.
489
490         Allow anonymous storage inside JSObject
491         https://bugs.webkit.org/show_bug.cgi?id=29168
492
493         Add the concept of anonymous slots to Structures so that it is
494         possible to store references to values that need marking in the
495         standard JSObject storage buffer.  This allows us to reduce the
496         malloc overhead of some objects (by allowing them to store JS
497         values in the inline storage of the object) and reduce the 
498         dependence of custom mark functions (if all an objects children
499         are in the standard object property storage there's no need to
500         mark them manually).
501
502         * JavaScriptCore.exp:
503         * runtime/JSObject.h:
504         (JSC::JSObject::putAnonymousValue):
505         (JSC::JSObject::getAnonymousValue):
506         (JSC::JSObject::addAnonymousSlots):
507         * runtime/JSWrapperObject.h:
508         (JSC::JSWrapperObject::createStructure):
509         (JSC::JSWrapperObject::JSWrapperObject):
510         (JSC::JSWrapperObject::setInternalValue):
511         * runtime/PropertyMapHashTable.h:
512         * runtime/Structure.cpp:
513         (JSC::Structure::~Structure):
514         (JSC::Structure::materializePropertyMap):
515         (JSC::Structure::addAnonymousSlotsTransition):
516         (JSC::Structure::copyPropertyTable):
517         (JSC::Structure::put):
518         (JSC::Structure::rehashPropertyMapHashTable):
519         * runtime/Structure.h:
520         (JSC::Structure::propertyStorageSize):
521         (JSC::StructureTransitionTable::reifySingleTransition):
522         * runtime/StructureTransitionTable.h:
523         (JSC::StructureTransitionTable::TransitionTable::addSlotTransition):
524         (JSC::StructureTransitionTable::TransitionTable::removeSlotTransition):
525         (JSC::StructureTransitionTable::TransitionTable::getSlotTransition):
526         (JSC::StructureTransitionTable::getAnonymousSlotTransition):
527         (JSC::StructureTransitionTable::addAnonymousSlotTransition):
528         (JSC::StructureTransitionTable::removeAnonymousSlotTransition):
529
530 2009-09-15  Alex Milowski  <alex@milowski.com>
531
532         Reviewed by Tor Arne Vestbø.
533
534         Added the ENABLE_MATHML define to the features
535
536         * Configurations/FeatureDefines.xcconfig:
537
538 2009-09-15 Csaba Osztrogonac <oszi@inf.u-szeged.hu>
539
540         Reviewed by Tor Arne Vestbø.
541
542         [Qt] Build fix for windows.
543
544         After http://trac.webkit.org/changeset/47795 the MinGW build broke,
545         because MinGW has __mingw_aligned_malloc instead of _aligned_malloc.
546
547         * runtime/Collector.cpp:
548         (JSC::Heap::allocateBlock): MinGW case added.
549         (JSC::Heap::freeBlock): MinGW case added.
550
551 2009-09-15  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>
552
553         Reviewed by Tor Arne Vestbø.
554
555         [Qt] Build fix for Windows/MinGW
556
557         https://bugs.webkit.org/show_bug.cgi?id=29268
558
559         * wtf/Platform.h: JSVALUE32_64 temporarily disabled on PLATFORM(WIN_OS) with COMPILER(MINGW)
560
561 2009-09-14  Gabor Loki  <loki@inf.u-szeged.hu>
562
563         Reviewed by Gavin Barraclough.
564
565         Detect VFP at runtime in generic ARM port on Linux platform.
566         https://bugs.webkit.org/show_bug.cgi?id=29076
567
568         * JavaScriptCore.pri:
569         * assembler/MacroAssemblerARM.cpp: Added.
570         (JSC::isVFPPresent):
571         * assembler/MacroAssemblerARM.h:
572         (JSC::MacroAssemblerARM::supportsFloatingPoint):
573
574 2009-09-14  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>
575
576         Reviewed by Tor Arne Vestbø.
577
578         [Qt] Build fix for windows build.
579
580         * JavaScriptCore.pri: Correct a logic error.
581         * pcre/dftables: Add missing paranthesis for tmpdir function.
582
583 2009-09-12  Oliver Hunt  <oliver@apple.com>
584
585         Reviewed by NOBODY (Build fix).
586
587         Build fix for windows exports (again).
588
589         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
590         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
591
592 2009-09-12  Oliver Hunt  <oliver@apple.com>
593
594         Reviewed by NOBODY (Build fix).
595
596         Build fix for windows exports.
597
598         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
599         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
600
601 2009-09-12  Oliver Hunt  <oliver@apple.com>
602
603         Reviewed by NOBODY (Build fix).
604
605         Correct fix for non-allinonefile builds
606
607         * runtime/ObjectConstructor.cpp:
608
609 2009-09-12  Oliver Hunt  <oliver@apple.com>
610
611         Reviewed by NOBODY (Build fix).
612
613         Fix non-allinonefile builds
614
615         * runtime/ObjectConstructor.cpp:
616
617 2009-09-12  Oliver Hunt  <oliver@apple.com>
618
619         Reviewed by Maciej Stachowiak.
620
621         [ES5] Implement Object.keys
622         https://bugs.webkit.org/show_bug.cgi?id=29170
623
624         This patch basically requires two separate steps, the first is to split getPropertyNames
625         into two functions -- getOwnPropertyNames and getPropertyNames, basically making them behave
626         in the same way as getOwnPropertySlot and getPropertySlot.  In essence getOwnPropertyNames
627         produces the list of properties on an object excluding its prototype chain and getPropertyNames
628         just iterates the the object and its prototype chain calling getOwnPropertyNames at each level.
629
630         * API/JSCallbackObject.h:
631         * API/JSCallbackObjectFunctions.h:
632         (JSC::::getOwnPropertyNames):
633         * JavaScriptCore.exp:
634         * debugger/DebuggerActivation.cpp:
635         (JSC::DebuggerActivation::getOwnPropertyNames):
636         * debugger/DebuggerActivation.h:
637         * runtime/CommonIdentifiers.h:
638         * runtime/JSArray.cpp:
639         (JSC::JSArray::getOwnPropertyNames):
640         * runtime/JSArray.h:
641         * runtime/JSByteArray.cpp:
642         (JSC::JSByteArray::getOwnPropertyNames):
643         * runtime/JSByteArray.h:
644         * runtime/JSNotAnObject.cpp:
645         (JSC::JSNotAnObject::getOwnPropertyNames):
646         * runtime/JSNotAnObject.h:
647         * runtime/JSObject.cpp:
648         (JSC::JSObject::getOwnPropertyNames):
649         * runtime/JSObject.h:
650         * runtime/JSVariableObject.cpp:
651         (JSC::JSVariableObject::getOwnPropertyNames):
652         * runtime/JSVariableObject.h:
653         * runtime/ObjectConstructor.cpp:
654         (JSC::ObjectConstructor::ObjectConstructor):
655         (JSC::objectConstructorKeys):
656         * runtime/RegExpMatchesArray.h:
657         (JSC::RegExpMatchesArray::getOwnPropertyNames):
658         * runtime/StringObject.cpp:
659         (JSC::StringObject::getOwnPropertyNames):
660         * runtime/StringObject.h:
661         * runtime/Structure.cpp:
662         (JSC::Structure::getOwnEnumerablePropertyNames):
663         (JSC::Structure::getEnumerablePropertyNames):
664         * runtime/Structure.h:
665
666 2009-09-11  Oliver Hunt  <oliver@apple.com>
667
668         Reviewed by Sam Weinig.
669
670         getPropertyNames caching is invalid when the prototype chain contains objects with custom getPropertyNames
671         https://bugs.webkit.org/show_bug.cgi?id=29214
672
673         Add a flag to TypeInfo to indicate whether a type overrides getPropertyNames.
674         This flag is used to make sure that caching of the property name data is safe.
675
676         * API/JSCallbackConstructor.h:
677         (JSC::JSCallbackConstructor::createStructure):
678         * debugger/DebuggerActivation.h:
679         (JSC::DebuggerActivation::createStructure):
680         * runtime/BooleanObject.h:
681         (JSC::BooleanObject::createStructure):
682         * runtime/DatePrototype.h:
683         (JSC::DatePrototype::createStructure):
684         * runtime/FunctionPrototype.h:
685         (JSC::FunctionPrototype::createStructure):
686         * runtime/JSONObject.h:
687         (JSC::JSONObject::createStructure):
688         * runtime/JSObject.h:
689         (JSC::JSObject::createStructure):
690         * runtime/JSTypeInfo.h:
691         (JSC::TypeInfo::hasDefaultGetPropertyNames):
692         * runtime/JSVariableObject.h:
693         (JSC::JSVariableObject::createStructure):
694         * runtime/JSWrapperObject.h:
695         (JSC::JSWrapperObject::createStructure):
696         * runtime/MathObject.h:
697         (JSC::MathObject::createStructure):
698         * runtime/NumberConstructor.h:
699         (JSC::NumberConstructor::createStructure):
700         * runtime/NumberObject.h:
701         (JSC::NumberObject::createStructure):
702         * runtime/RegExpConstructor.h:
703         (JSC::RegExpConstructor::createStructure):
704         * runtime/RegExpObject.h:
705         (JSC::RegExpObject::createStructure):
706         * runtime/StructureChain.cpp:
707         (JSC::StructureChain::isCacheable):
708
709 2009-09-11  Alexey Proskuryakov  <ap@webkit.org>
710
711         Reviewed by Geoff Garen.
712
713         https://bugs.webkit.org/show_bug.cgi?id=29207
714         Add checks for using WebCore JS context on secondary threads
715
716         * runtime/JSGlobalData.cpp: (JSC::JSGlobalData::JSGlobalData):
717         * runtime/JSGlobalData.h:
718         Added a new mainThreadOnly flag that WebCore would set.
719
720         * runtime/Collector.cpp: (JSC::Heap::registerThread): JSC API methods always call this,
721         so this is a good place to check that the API isn't used form a wrong thread.
722
723 2009-09-11  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>
724
725         Reviewed by Simon Hausmann.
726
727         Compiling JavaScriptCore on sparc 64 with gcc fails.
728
729         ThreadSafeShared uses the atomic __gnu_cxx::__exchange_and_add with an int,
730         however on sparc 64 the _Atomic_word argument is typedefed to long (8 bytes).
731
732         The patch disables WTF_USE_LOCKFREE_THREADSAFESHARED in ThreadSafeShared to use
733         a mutex instead when compiling for sparc 64 with gcc.
734
735         https://bugs.webkit.org/show_bug.cgi?id=29175
736
737         * wtf/Platform.h:
738         __sparc64__ is not defined on all OS.
739         Uses instead: __sparc__ && __arch64__ || __sparcv9
740         * wtf/Threading.h:
741
742 2009-09-11  Prasanth Ullattil  <prasanth.ullattil@nokia.com>
743
744         Reviewed by Simon Hausmann.
745
746         Fix compile error on Windows7(64Bit) with latest SDK.
747
748         Added the missing include file.
749
750         * runtime/UString.cpp:
751
752 2009-09-11  Joerg Bornemann  <joerg.bornemann@trolltech.com>
753
754         Reviewed by Simon Hausmann.
755
756         Qt/Windows CE compile fix, include the executable allocator and
757         markstack implementation in the windows build.
758
759         * JavaScriptCore.pri:
760
761 2009-09-08  John Abd-El-Malek  <jam@chromium.org>
762
763         Reviewed by Dimitri Glazkov.
764
765         Remove unneeded define for ActiveX.
766         https://bugs.webkit.org/show_bug.cgi?id=29054
767
768         * wtf/Platform.h:
769
770 2009-09-10  Mark Rowe  <mrowe@apple.com>
771
772         Rubber-stamped by Sam Weinig.
773
774         Update JavaScriptCore and WebKit's FeatureDefines.xcconfig so that they are in sync with WebCore as they need to be.
775
776         * Configurations/FeatureDefines.xcconfig:
777
778 2009-09-10  Fumitoshi Ukai  <ukai@chromium.org>
779
780         Reviewed by Alexey Proskuryakov.
781
782         Export WTF::tryFastMalloc used in WebSocketChannel.
783         https://bugs.webkit.org/show_bug.cgi?id=28038
784
785         * JavaScriptCore.exp:
786         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
787         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
788
789 2009-09-10  Oliver Hunt  <oliver@apple.com>
790
791         Reviewed by NOBODY (Build fix).
792
793         Make StructureTransitionTable use an enum for the PtrAndFlags member
794         used for the single transition slot optimisation.
795
796         * runtime/StructureTransitionTable.h:
797         (JSC::StructureTransitionTable::StructureTransitionTable):
798         (JSC::StructureTransitionTable::usingSingleTransitionSlot):
799         (JSC::StructureTransitionTable::):
800
801 2009-09-10  Oliver Hunt  <oliver@apple.com>
802
803         Reviewed by Geoff Garen.
804
805         Refactor StructureTransitionTable and Structure to unify handling of the single slot optimization
806         https://bugs.webkit.org/show_bug.cgi?id=29141
807
808         Make StructureTransitionTable encapsulate the single transition slot optimization.
809
810         * runtime/Structure.cpp:
811         (JSC::Structure::Structure):
812         (JSC::Structure::~Structure):
813         (JSC::Structure::addPropertyTransitionToExistingStructure):
814         (JSC::Structure::addPropertyTransition):
815         (JSC::Structure::addPropertyWithoutTransition):
816         (JSC::Structure::removePropertyWithoutTransition):
817         (JSC::Structure::hasTransition):
818         * runtime/Structure.h:
819         (JSC::StructureTransitionTable::contains):
820         (JSC::StructureTransitionTable::get):
821         (JSC::StructureTransitionTable::hasTransition):
822         (JSC::StructureTransitionTable::reifySingleTransition):
823         * runtime/StructureTransitionTable.h:
824         (JSC::StructureTransitionTable::StructureTransitionTable):
825         (JSC::StructureTransitionTable::~StructureTransitionTable):
826         (JSC::StructureTransitionTable::remove):
827         (JSC::StructureTransitionTable::add):
828         (JSC::StructureTransitionTable::table):
829         (JSC::StructureTransitionTable::singleTransition):
830         (JSC::StructureTransitionTable::usingSingleTransitionSlot):
831         (JSC::StructureTransitionTable::setSingleTransition):
832         (JSC::StructureTransitionTable::setTransitionTable):
833         (JSC::StructureTransitionTable::):
834         * wtf/PtrAndFlags.h:
835         (WTF::PtrAndFlags::PtrAndFlags):
836
837 2009-09-10  Zoltan Horvath  <zoltan@webkit.org>
838
839         Reviewed by Darin Adler.
840
841         Implement fastDeleteSkippingDestructor for FastAllocBase and fastDeleteAllValues for HashSet
842         https://bugs.webkit.org/show_bug.cgi?id=25930
843
844         FastAllocBase has been extended with fastDeleteSkippingDestructor function which
845         releases memory without destructor call. fastDeleteAllValues has been implemented 
846         similar as deleteAllValues but it uses fastDelete function to release memory.
847
848         * wtf/FastAllocBase.h:
849         (WTF::fastDeleteSkippingDestructor):
850         * wtf/HashSet.h:
851         (WTF::fastDeleteAllValues):
852
853 2009-09-10  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
854
855         Reviewed by Darin Adler.
856
857         ARM compiler does not understand GCC visibility attribute
858         https://bugs.webkit.org/show_bug.cgi?id=29079
859
860         * API/JSBase.h: Make the test more specific to hit only
861         the GCC compiler
862
863 2009-09-10  Adam Barth  <abarth@webkit.org>
864
865         Unreviewed revert of the previous change.  It broke the tests.
866
867         * wtf/dtoa.cpp:
868         (WTF::dtoa):
869
870 2009-09-10  Ben Laurie  <benl@google.com>
871
872         Reviewed by Adam Barth.
873
874         <https://bugs.webkit.org/show_bug.cgi?id=26836>
875
876         If dtoa was given a small buffer and the number was either infinite or
877         NaN, then the buffer would be overflowed.
878
879         * wtf/dtoa.cpp:
880
881 2009-09-09  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
882
883         Reviewed by Darin Adler.
884
885         Change reinterpret_cast to static_cast in r48212.
886
887         * jit/ExecutableAllocator.h:
888         (JSC::ExecutableAllocator::cacheFlush):
889
890 2009-09-09  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
891
892         Reviewed by Darin Adler.
893
894         Remove WTF_PLATFORM_FORCE_PACK as it is no longer used
895         https://bugs.webkit.org/show_bug.cgi?id=29066
896
897         * wtf/Platform.h:
898
899 2009-09-09  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
900
901         Reviewed by Ariya Hidayat.
902
903         Implement flushing the instruction cache for Symbian
904         https://bugs.webkit.org/show_bug.cgi?id=29075
905
906         * jit/ExecutableAllocator.h:
907         (JSC::ExecutableAllocator::cacheFlush): Call IMB_Range to flush
908         the instruction cache on Symbian
909
910 2009-09-09  Kent Hansen  <khansen@trolltech.com>
911
912         Reviewed by Darin Adler.
913
914         https://bugs.webkit.org/show_bug.cgi?id=29024
915         Make JavaScriptCore compile on platforms with case-insensitive file systems and typeinfo.h in STL
916
917         These platforms include Microsoft Visual Studio 2003, and Symbian with Metrowerks compiler.
918
919         * JavaScriptCore.gypi:
920         * JavaScriptCore.xcodeproj/project.pbxproj:
921         * runtime/JSTypeInfo.h: Copied from JavaScriptCore/runtime/TypeInfo.h.
922         * runtime/Structure.h:
923         * runtime/TypeInfo.h: Removed.
924
925 2009-09-08  Oliver Hunt  <oliver@apple.com>
926
927         Reviewed by Maciej Stachowiak.
928
929         JSON.stringify(Date) loses the milliseconds information
930         https://bugs.webkit.org/show_bug.cgi?id=29063
931
932         Make sure we include milliseconds in the output of toISOString.
933
934         * runtime/DatePrototype.cpp:
935         (JSC::dateProtoFuncToISOString):
936
937 2009-09-08  Kevin Ollivier  <kevino@theolliviers.com>
938
939         wx build fix, generate derived sources earlier in order to make sure
940         they're found by the build system when generating the list of sources to build.
941
942         * wscript:
943
944 2009-09-08  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
945
946         Reviewed by Simon Hausmann.
947
948         Build fix when USE(LOCKFREE_THREADSAFESHARED) is not defined
949         https://bugs.webkit.org/show_bug.cgi?id=29011
950
951         * wtf/Threading.h: Use LOCKFREE_THREADSAFESHARED guard for 
952         atomicIncrement and atomicDecrement
953
954 2009-09-07  Zoltan Horvath  <zoltan@webkit.org>
955
956         Reviewed by Darin Adler.
957
958         Allow custom memory allocation control in Yarr's RegexInterpreter
959         https://bugs.webkit.org/show_bug.cgi?id=29025
960
961         Inherits RegexInterpreter classes from FastAllocBase (bug #20422), which has
962         been instantiated by 'new':
963
964         class ByteDisjunction
965         -> instantiated in JavaScriptCore/yarr/RegexInterpreter.cpp:1462
966
967         struct BytecodePattern
968         -> instantiated in JavaScriptCore/yarr/RegexInterpreter.cpp:1279
969
970         * yarr/RegexInterpreter.h:
971
972 2009-09-07  Drew Wilson  <atwilson@google.com>
973
974         Reverting r48121 to fix Windows build errors.
975
976         * JavaScriptCore.exp:
977
978 2009-09-07  Drew Wilson  <atwilson@google.com>
979
980         Reviewed by David Levin.
981
982         Enable SHARED_WORKERS by default
983         https://bugs.webkit.org/show_bug.cgi?id=28959
984
985         * Configurations/FeatureDefines.xcconfig:
986
987 2009-09-07  Fumitoshi Ukai  <ukai@chromium.org>
988
989         Reviewed by Alexey Proskuryakov.
990
991         Export WTF::tryFastMalloc used in WebSocketChannel.
992         https://bugs.webkit.org/show_bug.cgi?id=28038
993
994         * JavaScriptCore.exp:
995
996 2009-09-04  Oliver Hunt  <oliver@apple.com>
997
998         Reviewed by NOBODY (Build fix).
999
1000         Fix windows export files
1001
1002         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1003         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1004
1005 2009-09-04  Oliver Hunt  <oliver@apple.com>
1006
1007         Reviewed by Gavin Barraclough.
1008
1009         [[ToString]] conversion should use the actual toString function for String objects.
1010
1011         Remove incorrect specialisations of toString conversions on StringObject.
1012
1013         * JavaScriptCore.exp:
1014         * runtime/StringObject.cpp:
1015         * runtime/StringObject.h:
1016
1017 2009-09-04  Steve Falkenburg  <sfalken@apple.com>
1018
1019         Windows build fix.
1020
1021         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Add new export.
1022         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Add new export.
1023
1024 2009-09-04  Steve Falkenburg  <sfalken@apple.com>
1025
1026         Windows build fix.
1027
1028         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Remove unneeded export.
1029         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Remove unneeded export.
1030
1031 2009-09-04  Darin Adler  <darin@apple.com>
1032
1033         Reviewed by Geoff Garen.
1034
1035         DateInstance object collected on ARM JIT (JSValue: WTF_USE_JSVALUE32)
1036         https://bugs.webkit.org/show_bug.cgi?id=28909
1037
1038         Part two.
1039
1040         Make some improvements to garbage collection code:
1041
1042             1) Create a runtime assertion that catches any classes that
1043                override markChildren but have the HasDefaultMark bit set.
1044             2) Remove checks of the mark bit outside the MarkStack::append
1045                function; they are redundant.
1046             3) Improve the efficiency of the asObject and asArray functions
1047                when called on JSCell* to avoid a round trip to JSValue.
1048             4) Make more callers use the checked asCell and asObject
1049                casting functions rather than unchecked casts.
1050             5) Removed the JSCell::marked function and other GC-related
1051                functions because these operations are no longer things that
1052                code other than the core GC code needs to do directly. Fixed
1053                callers that were calling them.
1054
1055         * runtime/Collector.cpp:
1056         (JSC::Heap::markConservatively): Removed unneeded call to MarkStack::drain.
1057         (JSC::Heap::markProtectedObjects): Removed unneeded check of the mark
1058         bit and call to MarkStack::drain.
1059         (JSC::Heap::collect): Removed unneeded checks of the mark bit and also
1060         changed call to SmallStrings::mark to call markChildren instead to match
1061         the rest of the objects.
1062         (JSC::typeName): Removed unneeded cast to JSObject*.
1063
1064         * runtime/JSArray.h:
1065         (JSC::asArray): Added an overload for JSCell* and changed the JSValue
1066         version to call it. Removed some unneeded casts.
1067         (JSC::JSArray::markChildrenDirect): Marked this function inline. It's in
1068         a header, and if not marked inline this could lead to linking problems.
1069         (JSC::MarkStack::markChildren): Added. This helper function is used by
1070         the drain function to avoid repating code. Also added the code here to
1071         check fro default mark violations in debug code. If a markChildren
1072         function adds something to the mark stack, but the type info claimed
1073         hasDefaultMark was true, then we will get an assertion now. Also fixed
1074         the assertion about the mark bit to use the Heap function directly
1075         because we don't have a JSCell::marked function any more.
1076         (JSC::MarkStack::drain): Changed a local variable from "v" to "value",
1077         and from "currentCell" to "cell". Changed to call markChildren in two
1078         places instead of repeating a chain of if statements twice. Changed
1079         code that reads and writes the mark bit to use Heap::isCellMarked and
1080         Heap::markCell so we can eliminate the JSCell::marked and
1081         JSCell::markCellDirect functions.
1082
1083         * runtime/JSCell.h: Removed JSCell's markCellDirect and marked member
1084         functions. Added a comment explaining that asCell should be deprecated
1085         in favor of the JSValue asCell member function.
1086         (JSC::MarkStack::append): Added the assertion that catches callers
1087         that have set the HasDefaultMark bit incorrectly. Changed
1088         code that reads and writes the mark bit to use Heap::isCellMarked and
1089         Heap::markCell so we can eliminate the JSCell::marked and
1090         JSCell::markCellDirect functions. Moved the overload of
1091         MarkStack::append for JSValue here so it can call through to the cell
1092         version. The old version had a copy of all the code instead, but that
1093         repeated the conversion from JSValue to JSCell* and the check for
1094         whether a value is a cell multiple times.
1095         (JSC::Structure::markAggregate): Moved this function here to avoid
1096         dependencies for Structure.h, since this calls MarkStack::append.
1097
1098         * runtime/JSObject.cpp:
1099         (JSC::JSObject::markChildren): Added code to clear
1100         m_isCheckingForDefaultMarkViolation so the marking done by JSObject
1101         doesn't trigger the assertion.
1102
1103         * runtime/JSValue.h: Moved some stray includes that were outside the
1104         header guard inside it. Not sure how that happened! Removed the
1105         GC-related member functions markChildren, hasChildren, marked, and
1106         markDirect.
1107
1108         * runtime/JSWrapperObject.h: Made markChildren private.
1109         (JSC::JSWrapperObject::createStructure): Added. Fixes a bug where the
1110         HasDefaultMark bit was set.
1111
1112         * runtime/MarkStack.h: Added m_isCheckingForDefaultMarkViolation and
1113         initialized it to false. Moved the append function body from here to
1114         JSCell.h. Added a declaration of a private markChildren function used
1115         inside the drain function.
1116
1117         * runtime/SmallStrings.cpp:
1118         (JSC::SmallStrings::markChildren): Changed the name and style of this
1119         function to match other functions. This allows us to share the normal
1120         mark stack code path.
1121
1122         * runtime/SmallStrings.h: Changed the name and interface of mark to
1123         the more-normal markChildren style.
1124
1125         * runtime/Structure.h: Moved the body of markAggregate into the
1126         JSCell.h to avoid a circular dependency with JSCell.h.
1127
1128 2009-09-04  Darin Adler  <darin@apple.com>
1129
1130         Reviewed by Geoff Garen.
1131
1132         DateInstance object collected on ARM JIT (JSValue: WTF_USE_JSVALUE32)
1133         https://bugs.webkit.org/show_bug.cgi?id=28909
1134
1135         Part one.
1136
1137         Make some improvements to garbage collection code:
1138
1139             1) Fix the two classes that had the default mark bit set but
1140                should not.
1141             2) Remove checks of the mark bit outside the MarkStack::append
1142                function; they are redundant.
1143             3) Make more callers use the checked asCell and asObject
1144                casting functions rather than unchecked casts.
1145             4) Removed some GC-related functions because these operations are
1146                no longer things that code other than the core GC code needs
1147                to do directly. Fixed callers that were calling them.
1148
1149         * bytecode/CodeBlock.cpp:
1150         (JSC::CodeBlock::markAggregate): Removed unneeded check of the mark
1151         bit before calling MarkStack::append.
1152
1153         * interpreter/Register.h: Removed unneeded marked and markChildren
1154         functions.
1155
1156         * jit/JITStubs.cpp:
1157         (op_eq): Removed unneeded assertions, instead using checked casting
1158         functions such as asObject.
1159
1160         * runtime/ArgList.h: Added now-needed forward declaration of MarkStack.
1161
1162         * runtime/GetterSetter.cpp:
1163         (JSC::GetterSetter::markChildren): Remmoved unneeded check of the mark bit.
1164
1165         * runtime/GlobalEvalFunction.h:
1166         (JSC::GlobalEvalFunction::createStructure): Added. Fixes a bug where the
1167         HasDefaultMark bit was set.
1168
1169         * runtime/JSCell.cpp:
1170         (JSC::JSCell::getObject): Use asObject to avoid a direct static_cast.
1171
1172         * runtime/JSObject.h:
1173         (JSC::asObject): Added an overload for JSCell* and changed the JSValue
1174         version to call it.
1175         (JSC::JSValue::get): Use asObject to avoid a direct static_cast.
1176
1177         * runtime/JSWrapperObject.h: Made markChildren private.
1178         (JSC::JSWrapperObject::createStructure): Added. Fixes a bug where the
1179         HasDefaultMark bit was set. Later we may want to optimize this for
1180         wrapper types that never have cells in their internal values, but there
1181         is no measured performance regression in SunSpider or V8 doing this
1182         all the time.
1183
1184         * runtime/MarkStack.cpp: Tweaked formatting.
1185
1186 2009-09-04  Kevin Ollivier  <kevino@theolliviers.com>
1187
1188         wx build fix. Switch USE_ defines over to the compiler so that they can be
1189         checked by files not including config.h (like WebCorePrefix.h).
1190
1191         * wtf/Platform.h:
1192
1193 2009-09-03  Yong Li  <yong.li@torchmobile.com>
1194
1195         Reviewed by David Levin.
1196
1197         Remove unnecessary dependency on unistd.h
1198         https://bugs.webkit.org/show_bug.cgi?id=28962
1199
1200         * runtime/Completion.cpp:
1201
1202 2009-09-03  Fumitoshi Ukai  <ukai@chromium.org>
1203
1204         Reviewed by Eric Seidel.
1205
1206         Add strnstr for Linux and Windows in StringExtras.h
1207         https://bugs.webkit.org/show_bug.cgi?id=28901
1208
1209         * wtf/StringExtras.h:
1210         (strnstr):
1211
1212 2009-09-03  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>
1213
1214         Reviewed by Darin Adler.
1215
1216         Allow custom memory allocation control for JavaScriptCore's HashEntry class
1217         https://bugs.webkit.org/show_bug.cgi?id=27830
1218
1219         Inherits HashEntry class from FastAllocBase because it has been
1220         instantiated by 'new' JavaScriptCore/runtime/Lookup.cpp:32.
1221
1222         * runtime/Lookup.h:
1223
1224 2009-09-02  Gavin Barraclough  <barraclough@apple.com>
1225
1226         Should crash if JIT code buffer allocation fails.
1227
1228         https://bugs.webkit.org/show_bug.cgi?id=28926
1229         <rdar://problem/7031922>
1230
1231         * jit/ExecutableAllocatorPosix.cpp:
1232         (JSC::ExecutablePool::systemAlloc):
1233         * jit/ExecutableAllocatorWin.cpp:
1234         (JSC::ExecutablePool::systemAlloc):
1235
1236 2009-09-02  Kevin Ollivier  <kevino@theolliviers.com>
1237
1238         waf build fixes for Windows/MSVC.
1239
1240         * wscript:
1241
1242 2009-09-02  Kevin Ollivier  <kevino@theolliviers.com>
1243
1244         Build fix for building on Windows.
1245
1246         * wtf/ThreadingPthreads.cpp:
1247
1248 2009-09-02  Norbert Leser  <norbert.leser@nokia.com>
1249
1250         Reviewed by Eric Seidel.
1251
1252         Use fastMalloc when neither MMAP nor VIRTUALALLOC are enabled
1253         
1254         RegisterFile constructor currently throws #error when both
1255         MMAP and VIRTUALALLOC conditions fail.
1256         On any platform that does not provide these features
1257         (for instance, Symbian),
1258         the fallback should be regular malloc (or fastMalloc).
1259         It is functionally equivalent in this case, even though it may
1260         have certain drawbacks such as lack of dynamic pre-allocation.
1261
1262         * interpreter/RegisterFile.cpp:
1263         (JSC::RegisterFile::~RegisterFile):
1264         * interpreter/RegisterFile.h:
1265         (JSC::RegisterFile::RegisterFile):
1266
1267 2009-08-31  Robert Agoston  <Agoston.Robert@stud.u-szeged.hu>
1268
1269         Reviewed by Gavin Barraclough.
1270
1271         Fixed typo.
1272         https://bugs.webkit.org/show_bug.cgi?id=28691
1273
1274         * parser/Parser.h:
1275         (JSC::Parser::parse):
1276
1277 2009-08-27  Oliver Hunt  <oliver@apple.com>
1278
1279         Reviewed by Maciej Stachowiak.
1280
1281         JSON Stringifier does not follow ES5 spec for handling of Number, String and Boolean objects
1282         https://bugs.webkit.org/show_bug.cgi?id=28797
1283
1284         Fixed unwrapBoxedPrimitive to do the right thing, which necessitated a couple of new exception
1285         checks, and corrected the logic in gap to correctly convert Number and String objects.
1286
1287         * runtime/JSONObject.cpp:
1288         (JSC::unwrapBoxedPrimitive):
1289         (JSC::gap):
1290         (JSC::Stringifier::Stringifier):
1291         (JSC::Stringifier::appendStringifiedValue):
1292
1293 2009-08-27  Oliver Hunt  <oliver@apple.com>
1294
1295         Reviewed by Adam Roben.
1296
1297         JSON.stringify replacer array does not accept values that are not string primitives.
1298         https://bugs.webkit.org/show_bug.cgi?id=28788
1299
1300         Update the JSON stringifier to initialise its replacer array according to the most
1301         recent version of the spec.
1302
1303         * runtime/Identifier.h:
1304         (JSC::Identifier::from):
1305         * runtime/JSONObject.cpp:
1306         (JSC::Stringifier::Stringifier):
1307
1308 2009-08-27  Alexey Proskuryakov  <ap@apple.com>
1309
1310         Reviewed by Oliver Hunt.
1311
1312         https://bugs.webkit.org/show_bug.cgi?id=28753
1313         <rdar://problem/7173448> Excessive number of threads (and a crash)
1314
1315         * wtf/Threading.h: (WTF::atomicIncrement): Changed atomicIncrement to match decrement
1316         and return the new value. Also added using directives for these functions, to match
1317         te rest of WTF.
1318
1319 2009-08-27  Brent Fulgham  <bfulgham@webkit.org>
1320
1321         Reviewed by Adam Roben.
1322
1323         Link the testapi against CFLite when building the WinCairo port.
1324
1325         * JavaScriptCore.vcproj/testapi/testapi.vcproj: Add new Release_CFLite
1326           target.  Update all targets to inherit from either the
1327           JavaScriptCF.vsprops (Apple target) or the JavaScriptCFLite.vsprops
1328           file (WinCairo target).
1329         * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: Remove
1330           input file CoreFoundation.lib. This is provided by either the
1331           JavaScriptCF.vsprops or JavaScriptCFLite.vsprops file.
1332
1333 2009-08-27  Steve Falkenburg  <sfalken@apple.com>
1334
1335         Reviewed by Geoff Garen.
1336         
1337         Fix Windows-specific crash due to missing memory clearing call.
1338         
1339         * runtime/Collector.cpp:
1340         (JSC::Heap::allocateBlock):
1341
1342 2009-08-27  Brent Fulgham  <bfulgham@webkit.org>
1343
1344         Build fix: JavaScriptCore_debug.def missing some exports.  Apple
1345         Windows build does not use this file, so it was not noticed previously.
1346
1347         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1348
1349 2009-08-27  Gavin Barraclough  <barraclough@apple.com>
1350
1351         Reviewed by Oliver Hunt.
1352
1353         x86-64 GTK broken due to code offsets changing, pointers sometimes packed into immediates.
1354         https://bugs.webkit.org/show_bug.cgi?id=28317
1355
1356         Missed one, fix part II.
1357
1358         * assembler/MacroAssemblerX86Common.h:
1359         (JSC::MacroAssemblerX86Common::move):
1360         * assembler/X86Assembler.h:
1361         (JSC::CAN_SIGN_EXTEND_8_32):
1362
1363 2009-08-27  Oliver Hunt  <oliver@apple.com>
1364
1365         Reviewed by Adam Roben.
1366
1367         JSON.stringify replacer array does not accept values that are not string primitives.
1368         https://bugs.webkit.org/show_bug.cgi?id=28788
1369
1370         Update the JSON stringifier to initialise its replacer array according to the most
1371         recent version of the spec.
1372
1373         * runtime/Identifier.h:
1374         (JSC::Identifier::from):
1375         * runtime/JSONObject.cpp:
1376         (JSC::Stringifier::Stringifier):
1377
1378 2009-08-27  Oliver Hunt  <oliver@apple.com>
1379
1380         Reviewed by Alexey Proskuryakov.
1381
1382         JSON parser accepts trailing comma in array literals
1383         https://bugs.webkit.org/show_bug.cgi?id=28779
1384
1385         Update parser to correctly fail if there's a trailing comma.
1386
1387         * runtime/LiteralParser.cpp:
1388         (JSC::LiteralParser::parse):
1389
1390 2009-08-26  Oliver Hunt  <oliver@apple.com>
1391
1392         Reviewed by Gavin Barraclough.
1393
1394         'this' in JSON.parse reviver is the global object
1395         https://bugs.webkit.org/show_bug.cgi?id=28752
1396
1397         This is a technically simple change, we merely update the code for calling
1398         the reviver function to pass the correct this object.  Doing so however
1399         exposes the holder to arbitrary mutation by the reviver function so it is
1400         necessary for us to now guard all property accesses against the possibility
1401         of failure.
1402
1403         * runtime/JSArray.h:
1404           JSON needs to delete a property from the array, so we friend its 
1405           Walker class so that we can make a non-virtual call to the arrays
1406           delete and getOwnPropertySlot methods.
1407         * runtime/JSONObject.cpp:
1408         (JSC::Walker::callReviver):
1409           We need to pass the correct this object
1410         (JSC::Walker::walk):
1411           Update calls to callReviver, and update property logic logic
1412           to correctly handle the holder being mutated by the reviver
1413           function.
1414
1415 2009-08-26  Alice Liu  <alice.liu@apple.com>
1416
1417         Windows build fix: added some exported symbols
1418
1419         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1420         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1421
1422 2009-08-26  Geoffrey Garen  <ggaren@apple.com>
1423
1424         Windows build fix: Removed some exported symbols that no longer exist.
1425
1426         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1427         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1428
1429 2009-08-26  Gavin Barraclough  <barraclough@apple.com>
1430
1431         Reviewed by Olliejver Hunt.
1432
1433         x86-64 GTK broken due to code offsets changing, pointers sometimes packed into immediates.
1434         https://bugs.webkit.org/show_bug.cgi?id=28317
1435
1436         We rely on a slightly OS X specific behaviour, that x86-64 applications have a 4Gb zero page,
1437         so pointers are never representable as a 32-bit integer, and always have to be represented by
1438         a separate immediate load instruction, rather than within the immediate field of an arithmetic
1439         or memory operation.
1440
1441         We explicitly check for a couple of cases where a value might be representable in 32-bit, but
1442         these probably never kick in on Mac OS, and only kick in to hose GTK.  Deleting these does not
1443         show a performance degradation on SunSpider.  Remove.
1444
1445         * assembler/MacroAssemblerX86_64.h:
1446         (JSC::MacroAssemblerX86_64::storePtr):
1447         (JSC::MacroAssemblerX86_64::branchPtr):
1448
1449 2009-08-26  Geoffrey Garen  <ggaren@apple.com>
1450
1451         Reviewed by Oliver Hunt.
1452
1453         A bit of Collector refatoring.
1454         
1455         SunSpider says no change. v8 says 1.003x faster (1.02x faster on splay).
1456
1457         * JavaScriptCore.exp:
1458
1459         * runtime/JSCell.cpp:
1460         (JSC::JSCell::toPrimitive):
1461         (JSC::JSCell::getPrimitiveNumber):
1462         (JSC::JSCell::toBoolean):
1463         (JSC::JSCell::toNumber):
1464         (JSC::JSCell::toString):
1465         (JSC::JSCell::toObject): Removed pure virtual functions from
1466         JSCell, so the collector can construct one. This allowed
1467         me to remove a bunch of ASSERT_NOT_REACHED throughout the
1468         code, too.
1469
1470         * runtime/JSCell.h:
1471         (JSC::JSCell::JSCell): ditto
1472         (JSC::Heap::heap): Inlined this function because it's trivial.
1473
1474         * JavaScriptCore.exp:
1475
1476         * runtime/Collector.cpp:
1477         (JSC::Heap::destroy):
1478         (JSC::Heap::allocateBlock):
1479         (JSC::Heap::freeBlock):
1480         (JSC::Heap::freeBlocks): Renamed freeHeap to freeBlocks, since
1481         it doesn't actually free the Heap object.
1482         (JSC::Heap::heapAllocate):
1483         (JSC::Heap::sweep):
1484         * runtime/Collector.h: Refactored block allocation and destruction
1485         into helper functions.
1486         
1487         * runtime/GetterSetter.cpp:
1488         * runtime/JSAPIValueWrapper.cpp:
1489         * runtime/JSPropertyNameIterator.cpp: Removed dummy implementations
1490         of pure virtual functions. (See above.)
1491
1492 === End re-roll-in of r47738:47740 with Windows crash fixed ===
1493
1494 2009-08-26  Geoffrey Garen  <ggaren@apple.com>
1495
1496         Build fix: start out with a 32-bit value to avoid a shortening warning.
1497
1498         * runtime/Collector.cpp:
1499         (JSC::Heap::sweep):
1500
1501 2009-08-24  Geoffrey Garen  <ggaren@apple.com>
1502
1503         Reviewed by Oliver Hunt.
1504
1505         Substantially reduced VM thrash in the GC heap.
1506         
1507         1.08x faster on v8 (1.60x faster on v8-splay).
1508         
1509         1.40x faster on bench-alloc-nonretained.
1510         
1511         1.90x faster on bench-alloc-retained.
1512         
1513         SunSpider says no change.
1514         
1515         * runtime/Collector.cpp:
1516         (JSC::Heap::heapAllocate): Fixed a long-standing bug: update a few local
1517         variables unconditionally after calling collect(), since they may be used
1518         even if we don't "goto scan". (In the bug I saw, usedBlocks got out of
1519         sync with heap.usedBlocks).
1520         (JSC::Heap::sweep): Keep enough free heap space to accomodate 
1521         the number of objects we'll allocate before the next GC, plus 25%, for
1522         good measure.
1523         * runtime/Collector.h: Bumped the block size to 256k. This seems to give
1524         the best cache performance, and it prevents us from initiating lots of
1525         VM traffic to recover very small chunks of memory.
1526
1527 === Begin re-roll-in of r47738:47740 with Windows crash fixed ===
1528
1529 2009-08-25  Drew Wilson  <atwilson@google.com>
1530
1531         Reviewed by David Levin.
1532
1533         postMessage() spec now supports sending arrays of ports
1534         https://bugs.webkit.org/show_bug.cgi?id=26902
1535
1536         Added OwnPtr to VectorTraits so we can store OwnPtrs in Vectors.
1537
1538         * wtf/VectorTraits.h:
1539
1540 2009-08-26  Xan Lopez  <xlopez@igalia.com>
1541
1542         Rubber-stamped by Gustavo Noronha.
1543
1544         Remove duplicated files from file list.
1545
1546         * GNUmakefile.am:
1547
1548 2009-08-26  Oliver Hunt  <oliver@apple.com>
1549
1550         Reviewed by NOBODY (Build fix).
1551
1552         More export fixes.
1553
1554         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1555         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1556
1557 2009-08-26  Oliver Hunt  <oliver@apple.com>
1558
1559         Reviewed by NOBODY (Build fix).
1560
1561         Hopefully fix all the exports from JSC on windows
1562
1563         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1564         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1565
1566 2009-08-26  Oliver Hunt  <oliver@apple.com>
1567
1568         Reviewed by NOBODY (Build fixes).
1569
1570         Forgot I added files to JavaScriptCore. 
1571
1572         * GNUmakefile.am:
1573         * JavaScriptCore.gypi:
1574         * JavaScriptCore.pri:
1575         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1576         * JavaScriptCoreSources.bkl:
1577
1578 2009-08-25  Oliver Hunt  <oliver@apple.com>
1579
1580         Reviewed by Gavin Barraclough.
1581
1582         [ES5] Implement getOwnPropertyDescriptor
1583         https://bugs.webkit.org/show_bug.cgi?id=28724
1584
1585         Implement the core runtime support for getOwnPropertyDescriptor.
1586         This adds a virtual getOwnPropertyDescriptor method to every class
1587         that implements getOwnPropertySlot that shadows the behaviour of
1588         getOwnPropertySlot.  The alternative would be to make getOwnPropertySlot
1589         (or PropertySlots in general) provide property attribute information,
1590         but quick testing showed this to be a regression.
1591
1592         * JavaScriptCore.exp:
1593         * JavaScriptCore.xcodeproj/project.pbxproj:
1594         * runtime/Arguments.cpp:
1595         (JSC::Arguments::getOwnPropertyDescriptor):
1596         * runtime/Arguments.h:
1597         * runtime/ArrayPrototype.cpp:
1598         (JSC::ArrayPrototype::getOwnPropertyDescriptor):
1599         * runtime/ArrayPrototype.h:
1600         * runtime/CommonIdentifiers.h:
1601         * runtime/DatePrototype.cpp:
1602         (JSC::DatePrototype::getOwnPropertyDescriptor):
1603         * runtime/DatePrototype.h:
1604         * runtime/JSArray.cpp:
1605         (JSC::JSArray::getOwnPropertyDescriptor):
1606         * runtime/JSArray.h:
1607         * runtime/JSByteArray.cpp:
1608         (JSC::JSByteArray::getOwnPropertyDescriptor):
1609         * runtime/JSByteArray.h:
1610         * runtime/JSFunction.cpp:
1611         (JSC::JSFunction::getOwnPropertyDescriptor):
1612         * runtime/JSFunction.h:
1613         * runtime/JSGlobalObject.h:
1614         (JSC::JSGlobalObject::getOwnPropertyDescriptor):
1615         * runtime/JSNotAnObject.cpp:
1616         (JSC::JSNotAnObject::getOwnPropertyDescriptor):
1617         * runtime/JSNotAnObject.h:
1618         * runtime/JSONObject.cpp:
1619         (JSC::JSONObject::getOwnPropertySlot):
1620         (JSC::JSONObject::getOwnPropertyDescriptor):
1621         * runtime/JSONObject.h:
1622         * runtime/JSObject.cpp:
1623         (JSC::JSObject::getOwnPropertyDescriptor):
1624         (JSC::JSObject::getPropertyDescriptor):
1625         * runtime/JSObject.h:
1626         * runtime/JSString.cpp:
1627         (JSC::JSString::getStringPropertyDescriptor):
1628         (JSC::JSString::getOwnPropertyDescriptor):
1629         * runtime/JSString.h:
1630         * runtime/JSVariableObject.cpp:
1631         (JSC::JSVariableObject::symbolTableGet):
1632         * runtime/JSVariableObject.h:
1633         * runtime/Lookup.h:
1634         (JSC::getStaticPropertyDescriptor):
1635         (JSC::getStaticFunctionDescriptor):
1636         (JSC::getStaticValueDescriptor):
1637           Add property descriptor equivalents of the lookup
1638           table access functions
1639
1640         * runtime/MathObject.cpp:
1641         (JSC::MathObject::getOwnPropertySlot):
1642         (JSC::MathObject::getOwnPropertyDescriptor):
1643         * runtime/MathObject.h:
1644         * runtime/NumberConstructor.cpp:
1645         (JSC::NumberConstructor::getOwnPropertyDescriptor):
1646         * runtime/NumberConstructor.h:
1647         * runtime/ObjectConstructor.cpp:
1648         (JSC::ObjectConstructor::ObjectConstructor):
1649         (JSC::objectConstructorGetOwnPropertyDescriptor):
1650         * runtime/PropertyDescriptor.cpp: Added.
1651         (JSC::PropertyDescriptor::writable):
1652         (JSC::PropertyDescriptor::enumerable):
1653         (JSC::PropertyDescriptor::configurable):
1654         (JSC::PropertyDescriptor::hasAccessors):
1655         (JSC::PropertyDescriptor::setUndefined):
1656         (JSC::PropertyDescriptor::getter):
1657         (JSC::PropertyDescriptor::setter):
1658         (JSC::PropertyDescriptor::setDescriptor):
1659         (JSC::PropertyDescriptor::setAccessorDescriptor):
1660         * runtime/PropertyDescriptor.h: Added.
1661         (JSC::PropertyDescriptor::PropertyDescriptor):
1662         (JSC::PropertyDescriptor::attributes):
1663         (JSC::PropertyDescriptor::isValid):
1664         (JSC::PropertyDescriptor::value):
1665         * runtime/RegExpConstructor.cpp:
1666         (JSC::RegExpConstructor::getOwnPropertyDescriptor):
1667         * runtime/RegExpConstructor.h:
1668         * runtime/RegExpMatchesArray.h:
1669         (JSC::RegExpMatchesArray::getOwnPropertyDescriptor):
1670         * runtime/RegExpObject.cpp:
1671         (JSC::RegExpObject::getOwnPropertyDescriptor):
1672         * runtime/RegExpObject.h:
1673         * runtime/StringObject.cpp:
1674         (JSC::StringObject::getOwnPropertyDescriptor):
1675         * runtime/StringObject.h:
1676         * runtime/StringPrototype.cpp:
1677         (JSC::StringPrototype::getOwnPropertyDescriptor):
1678         * runtime/StringPrototype.h:
1679
1680 2009-08-24  Gavin Barraclough  <barraclough@apple.com>
1681
1682         Reviewed by Darin Adler.
1683
1684         How many copies of the parameters do you need?
1685         https://bugs.webkit.org/show_bug.cgi?id=28701
1686
1687         The function parameters in JSC get copied a lot - and unnecessarily so.
1688
1689         Originally this happened due to duplicating FunctionBodyNodes on recompilation,
1690         though the problem has been exacerbated by copying the parameters from the
1691         original function body onto the executable, then back onto the real body that
1692         will be generated (this happens on every function).  And this is all made worse
1693         since the data structures in question are a little ugly - C style arrays of C++
1694         objects containing ref counts, so they need a full copy-construct (rather than
1695         a simple memcpy).
1696
1697         This can all be greatly simplified by just punting the parameters off into
1698         their own ref-counted object, and forgoing all the copying.
1699
1700         ~no performance change, possible slight progression.
1701
1702         * bytecompiler/BytecodeGenerator.cpp:
1703         (JSC::BytecodeGenerator::BytecodeGenerator):
1704         * bytecompiler/BytecodeGenerator.h:
1705         (JSC::BytecodeGenerator::makeFunction):
1706         * parser/Nodes.cpp:
1707         (JSC::FunctionParameters::FunctionParameters):
1708         (JSC::FunctionBodyNode::FunctionBodyNode):
1709         (JSC::FunctionBodyNode::finishParsing):
1710         * parser/Nodes.h:
1711         (JSC::FunctionBodyNode::parameters):
1712         (JSC::FunctionBodyNode::parameterCount):
1713         * runtime/Executable.cpp:
1714         (JSC::FunctionExecutable::~FunctionExecutable):
1715         (JSC::FunctionExecutable::compile):
1716         (JSC::FunctionExecutable::reparseExceptionInfo):
1717         (JSC::FunctionExecutable::fromGlobalCode):
1718         (JSC::FunctionExecutable::paramString):
1719         * runtime/Executable.h:
1720         (JSC::FunctionExecutable::FunctionExecutable):
1721         (JSC::FunctionExecutable::parameterCount):
1722
1723 2009-08-25  Brent Fulgham  <bfulgham@webkit.org>
1724
1725         Reviewed by NOBODY (Buildfix).
1726
1727         * JavaScriptCore.vcproj/jsc/jsc.vcproj: Add Debug_CFLite target
1728           that inherits from the debug_wincairo property sheet and therefore
1729           links to the proper debug library.
1730         * JavaScriptCore.vcproj/testapi/testapi.vcproj: Add Debug_CFLite target
1731           that inherits from the debug_wincairo property sheet and therefore
1732           links to the proper debug library.
1733
1734 2009-08-25  Chris Marrin  <cmarrin@apple.com>
1735
1736         Reviewed by Simon Fraser.
1737
1738         Export tryFastMalloc for Canvas3D work
1739         https://bugs.webkit.org/show_bug.cgi?id=28018
1740
1741         * JavaScriptCore.exp:
1742
1743 2009-08-25  David Levin  <levin@chromium.org>
1744
1745         Reviewed by Adam Roben.
1746
1747         PLATFORM(CFNETWORK) should be USE(CFNETWORK).
1748         https://bugs.webkit.org/show_bug.cgi?id=28713
1749
1750         * wtf/Platform.h: Added a #define to catch this issue in the
1751         future. The define would generate an error on gcc without the
1752         space in the expansion, but Visual C++ needs the space to cause an error.
1753
1754 2009-08-24  Brent Fulgham  <bfulgham@webkit.org>
1755
1756         Reviewed by Steve Falkenburg.
1757
1758         Revise CFLite Debug build to emit DLL's with _debug label.
1759         https://bugs.webkit.org/show_bug.cgi?id=28695.
1760
1761         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Modify
1762           Cairo debug build to inherit from new debug_cairo property sheet.
1763         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCFLite.vsprops:
1764           Modify to look for debug CFLite when in debug build.
1765
1766 2009-08-24  Gavin Barraclough  <barraclough@apple.com>
1767
1768         Reviewed by Oliver Adler & Darin Hunt.
1769
1770         https://bugs.webkit.org/show_bug.cgi?id=28691
1771         Do not retain ScopeNodes outside of parsing
1772         
1773         There is now no need for these to exist outside of parsing - their use in the runtime is replaced by Executable types.
1774
1775         * bytecode/EvalCodeCache.h:
1776         (JSC::EvalCodeCache::get):
1777         * bytecompiler/BytecodeGenerator.cpp:
1778         (JSC::BytecodeGenerator::BytecodeGenerator):
1779         (JSC::BytecodeGenerator::emitNewFunction):
1780         (JSC::BytecodeGenerator::emitNewFunctionExpression):
1781         * bytecompiler/BytecodeGenerator.h:
1782         (JSC::BytecodeGenerator::makeFunction):
1783         * debugger/Debugger.cpp:
1784         (JSC::Debugger::recompileAllJSFunctions):
1785         (JSC::evaluateInGlobalCallFrame):
1786         * debugger/DebuggerCallFrame.cpp:
1787         (JSC::DebuggerCallFrame::evaluate):
1788         * interpreter/Interpreter.cpp:
1789         (JSC::Interpreter::execute):
1790         (JSC::Interpreter::prepareForRepeatCall):
1791         (JSC::Interpreter::privateExecute):
1792         * jit/JITStubs.cpp:
1793         (JSC::DEFINE_STUB_FUNCTION):
1794         * parser/Nodes.cpp:
1795         (JSC::ScopeNodeData::ScopeNodeData):
1796         (JSC::ProgramNode::create):
1797         (JSC::EvalNode::create):
1798         (JSC::FunctionBodyNode::create):
1799         * parser/Nodes.h:
1800         (JSC::ScopeNode::adoptData):
1801         (JSC::FunctionBodyNode::parameterCount):
1802         * parser/Parser.cpp:
1803         * parser/Parser.h:
1804         (JSC::Parser::arena):
1805         (JSC::Parser::Parser):
1806         (JSC::Parser::parse):
1807         * runtime/ArrayPrototype.cpp:
1808         (JSC::isNumericCompareFunction):
1809         (JSC::arrayProtoFuncSort):
1810         * runtime/Completion.cpp:
1811         (JSC::checkSyntax):
1812         (JSC::evaluate):
1813         * runtime/Executable.cpp:
1814         (JSC::FunctionExecutable::~FunctionExecutable):
1815         (JSC::EvalExecutable::compile):
1816         (JSC::ProgramExecutable::checkSyntax):
1817         (JSC::ProgramExecutable::compile):
1818         (JSC::FunctionExecutable::compile):
1819         (JSC::EvalExecutable::generateJITCode):
1820         (JSC::ProgramExecutable::generateJITCode):
1821         (JSC::FunctionExecutable::generateJITCode):
1822         (JSC::FunctionExecutable::reparseExceptionInfo):
1823         (JSC::EvalExecutable::reparseExceptionInfo):
1824         (JSC::FunctionExecutable::recompile):
1825         (JSC::FunctionExecutable::fromGlobalCode):
1826         (JSC::FunctionExecutable::copyParameters):
1827         (JSC::FunctionExecutable::paramString):
1828         * runtime/Executable.h:
1829         (JSC::ScriptExecutable::ScriptExecutable):
1830         (JSC::ScriptExecutable::sourceID):
1831         (JSC::ScriptExecutable::sourceURL):
1832         (JSC::ScriptExecutable::lineNo):
1833         (JSC::ScriptExecutable::lastLine):
1834         (JSC::ScriptExecutable::usesEval):
1835         (JSC::ScriptExecutable::usesArguments):
1836         (JSC::ScriptExecutable::needsActivation):
1837         (JSC::ScriptExecutable::recordParse):
1838         (JSC::EvalExecutable::bytecode):
1839         (JSC::EvalExecutable::jitCode):
1840         (JSC::ProgramExecutable::bytecode):
1841         (JSC::ProgramExecutable::reparseExceptionInfo):
1842         (JSC::ProgramExecutable::jitCode):
1843         (JSC::FunctionExecutable::FunctionExecutable):
1844         (JSC::FunctionExecutable::make):
1845         (JSC::FunctionExecutable::bytecode):
1846         (JSC::FunctionExecutable::isGenerated):
1847         (JSC::FunctionExecutable::name):
1848         (JSC::FunctionExecutable::parameterCount):
1849         (JSC::FunctionExecutable::jitCode):
1850         * runtime/FunctionConstructor.cpp:
1851         (JSC::constructFunction):
1852         * runtime/JSGlobalData.cpp:
1853         (JSC::JSGlobalData::numericCompareFunction):
1854         * runtime/JSGlobalObjectFunctions.cpp:
1855         (JSC::globalFuncEval):
1856
1857 2009-08-24  Darin Adler  <darin@apple.com>
1858
1859         * runtime/ObjectPrototype.cpp:
1860         (JSC::ObjectPrototype::put): Landed revised version I had tested but forgot
1861         to land. Leave out the branch, since we don't need one.
1862
1863 2009-08-24  Darin Adler  <darin@apple.com>
1864
1865         Reviewed by Geoff Garen.
1866
1867         Array index miss case creates a string every time
1868         https://bugs.webkit.org/show_bug.cgi?id=28664
1869
1870         SunSpider test results I saw:
1871
1872             0.5% faster overall
1873             1% faster on crypto-aes
1874             20% faster on crypto-md5
1875             13% faster on crypto-sha1
1876
1877         * runtime/ObjectPrototype.cpp:
1878         (JSC::ObjectPrototype::ObjectPrototype): Initialize m_hasNoPropertiesWithUInt32Names
1879         to true.
1880         (JSC::ObjectPrototype::put): Clearly m_hasNoPropertiesWithUInt32Names if the new
1881         property has a name that is the string form of a UInt32.
1882         (JSC::ObjectPrototype::getOwnPropertySlot): Don't call JSObject::getOwnPropertySlot
1883         if m_hasNoPropertiesWithUInt32Names is true, and it is highly likely to be true.
1884
1885         * runtime/ObjectPrototype.h: Added declarations for the above.
1886
1887 2009-08-24  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>
1888
1889         Unreviewed. Fix a typo in my distcheck build fix.
1890
1891         * GNUmakefile.am:
1892
1893 2009-08-23  Gustavo Noronha Silva  <gns@gnome.org>
1894
1895         Unreviewed build fix for make distcheck.
1896
1897         * GNUmakefile.am: Added files required for the build.
1898
1899 2009-08-22  Maciej Stachowiak  <mjs@apple.com>
1900
1901         Reviewed by Mark Rowe.
1902
1903         REGRESSION(r47639-r47660): Webkit crashes on launch on PowerPC
1904         https://bugs.webkit.org/show_bug.cgi?id=28655
1905
1906         * runtime/JSFunction.cpp:
1907         (JSC::JSFunction::JSFunction): Initialize properly with a VPtrHackExecutable.
1908         * wtf/Platform.h:
1909
1910 2009-08-22  Darin Adler  <darin@apple.com>
1911
1912         Fix storage leak from syntax tree arena allocation patch.
1913
1914         * parser/Nodes.h: CommaNode needs to inherit from ParserArenaDeletable
1915         because it has a vector.
1916
1917 2009-08-21  Darin Adler  <darin@apple.com>
1918
1919         Fix Qt build.
1920
1921         * parser/Nodes.cpp:
1922         (JSC::ScopeNodeData::ScopeNodeData): Made non-inline again.
1923         This is used outside Nodes.cpp so can't be inline unless
1924         it is in the header.
1925
1926 2009-08-21  Darin Adler  <darin@apple.com>
1927
1928         Two loose ends from the last commit.
1929
1930         * JavaScriptCore.xcodeproj/project.pbxproj: Made ParserArena.h
1931         and create_hash_table project-internal instead of "private".
1932         * runtime/Executable.h: Removed accidentally-added constructor.
1933
1934 2009-08-21  Darin Adler  <darin@apple.com>
1935
1936         Reviewed by Gavin Barraclough.
1937
1938         Syntax tree nodes should use arena allocation
1939         https://bugs.webkit.org/show_bug.cgi?id=25674
1940
1941         Use an actual arena now. 0.6% speedup on SunSpider.
1942
1943         New and improved with 100% less leaking of the universe.
1944
1945         * JavaScriptCore.exp:
1946         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1947         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1948         Removed all exports involving the class FunctionBodyNode, which no
1949         longer needs to be used outside JavaScriptCore.
1950
1951         * JavaScriptCore.xcodeproj/project.pbxproj: Made Nodes.h and
1952         Executable.h project-internal instead of "private".
1953
1954         * bytecompiler/BytecodeGenerator.cpp:
1955         (JSC::BytecodeGenerator::BytecodeGenerator): Updated since VarStack
1956         contains const Identifier* now.
1957
1958         * parser/Grammar.y: Made identifiers from the lexer be const
1959         Identifier* and updated since VarStack contains const Identifier* now.
1960
1961         * parser/Lexer.cpp:
1962         (JSC::Lexer::setCode): Pass in ParserArena, used for identifiers.
1963         (JSC::Lexer::makeIdentifier): Changed return type to const Identifier*
1964         and changed to call ParserArena.
1965         (JSC::Lexer::clear): Removed the code to manage m_identifiers and
1966         added code to set m_arena to 0.
1967         * parser/Lexer.h: Updated for changes above.
1968
1969         * parser/NodeConstructors.h:
1970         (JSC::ParserArenaFreeable::operator new): Added. Calls allocateFreeable
1971         on the arena.
1972         (JSC::ParserArenaDeletable::operator new): Changed to call the
1973         allocateDeletable function on the arena instead of deleteWithArena.
1974         (JSC::PropertyNode::PropertyNode): Added new constructor that makes
1975         numeric identifiers. Some day we might want to optimize this for
1976         integers so it doesn't create a string for each one.
1977         (JSC::ContinueNode::ContinueNode): Initialize m_ident to nullIdentifier
1978         since it's now a const Identifier& so it can't be left uninitialized.
1979         (JSC::BreakNode::BreakNode): Ditto.
1980         (JSC::CaseClauseNode::CaseClauseNode): Updated to use SourceElements*
1981         to keep track of the statements rather than a separate statement vector.
1982         (JSC::BlockNode::BlockNode): Ditto.
1983         (JSC::ForInNode::ForInNode): Initialize m_ident to nullIdentifier.
1984
1985         * parser/Nodes.cpp: Moved the comment explaining emitBytecode in here.
1986         It seemed strangely out of place in the header.
1987         (JSC::ThrowableExpressionData::emitThrowError): Added an overload for
1988         UString as well as Identifier.
1989         (JSC::SourceElements::singleStatement): Added.
1990         (JSC::SourceElements::lastStatement): Added.
1991         (JSC::RegExpNode::emitBytecode): Changed the throwError code to use
1992         the substitution mechanism instead of doing a string append.
1993         (JSC::SourceElements::emitBytecode): Added. Replaces the old
1994         statementListEmitCode function, since we now keep the SourceElements
1995         objects around.
1996         (JSC::BlockNode::lastStatement): Added.
1997         (JSC::BlockNode::emitBytecode): Changed to use emitBytecode instead of
1998         statementListEmitCode.
1999         (JSC::CaseClauseNode::emitBytecode): Added.
2000         (JSC::CaseBlockNode::emitBytecodeForBlock): Changed to use emitBytecode
2001         instead of statementListEmitCode.
2002         (JSC::ScopeNodeData::ScopeNodeData): Changed to store the
2003         SourceElements* instead of using releaseContentsIntoVector.
2004         (JSC::ScopeNode::emitStatementsBytecode): Added.
2005         (JSC::ScopeNode::singleStatement): Added.
2006         (JSC::ProgramNode::emitBytecode): Call emitStatementsBytecode instead
2007         of statementListEmitCode.
2008         (JSC::EvalNode::emitBytecode): Ditto.
2009         (JSC::FunctionBodyNode::emitBytecode): Call emitStatementsBytecode
2010         insetad of statementListEmitCode and check for the return node using
2011         the new functions.
2012
2013         * parser/Nodes.h: Changed VarStack to store const Identifier* instead
2014         of Identifier and rely on the arena to control lifetime. Added a new
2015         ParserArenaFreeable class. Made ParserArenaDeletable inherit from
2016         FastAllocBase instead of having its own operator new. Base the Node
2017         class on ParserArenaFreeable. Changed the various Node classes
2018         to use const Identifier& instead of Identifier to avoid the need to
2019         call their destructors and allow them to function as "freeable" in the
2020         arena. Removed extraneous JSC_FAST_CALL on definitions of inline functions.
2021         Changed ElementNode, PropertyNode, ArgumentsNode, ParameterNode,
2022         CaseClauseNode, ClauseListNode, and CaseBlockNode to use ParserArenaFreeable
2023         as a base class since they do not descend from Node. Eliminated the
2024         StatementVector type and instead have various classes use SourceElements*
2025         instead of StatementVector. This prevents those classes from having to
2026         use ParserArenaDeletable to make sure the vector destructor is called.
2027
2028         * parser/Parser.cpp:
2029         (JSC::Parser::parse): Pass the arena to the lexer.
2030
2031         * parser/Parser.h: Added an include of ParserArena.h, which is no longer
2032         included by Nodes.h.
2033         (JSC::Parser::parseFunctionFromGlobalCode): Changed to use the
2034         singleStatement function, since there is no longer any children function.
2035         Removed some unneeded use of RefPtr.
2036
2037         * parser/ParserArena.cpp:
2038         (JSC::ParserArena::ParserArena): Added. Initializes the new members,
2039         m_freeableMemory, m_freeablePoolEnd, and m_identifiers.
2040         (JSC::ParserArena::freeablePool): Added. Computes the pool pointer,
2041         since we store only the current pointer and the end of pool pointer.
2042         (JSC::ParserArena::deallocateObjects): Added. Contains the common
2043         memory-deallocation logic used by both the destructor and the
2044         reset function.
2045         (JSC::ParserArena::~ParserArena): Changed to call deallocateObjects.
2046         (JSC::ParserArena::reset): Ditto. Also added code to zero out the
2047         new structures, and switched to use clear() instead of shrink(0) since
2048         we don't really reuse arenas.
2049         (JSC::ParserArena::makeNumericIdentifier): Added.
2050         (JSC::ParserArena::allocateFreeablePool): Added. Used when the pool
2051         is empty.
2052         (JSC::ParserArena::isEmpty): Added. No longer inline, which is fine
2053         since this is used only for assertions at the moment.
2054         (JSC::ParserArena::derefWithArena): Make non-inline.
2055
2056         * parser/ParserArena.h: Added an actual arena of "freeable" objects,
2057         ones that don't need destructors to be called. Also added a separate
2058         IdentifierArena object, a segmented vector of identifiers that used
2059         to be in the Lexer.
2060
2061         * runtime/Executable.h: Moved the definition of the
2062         FunctionExecutable::make function here. It can't go in JSFunction.h
2063         since that header has to be used outside JavaScriptCore and so can't
2064         include this, which includes Nodes.h. The function could be moved
2065         elswhere if we don't want to include JSFunction.h in this header, but
2066         for now this seems to be the best place.
2067
2068         * runtime/JSFunction.h: Removed the include of Executable.h and
2069         definition of the FunctionExecutable::make function.
2070
2071         * wtf/FastMalloc.cpp: Fixed an incorrect comment.
2072
2073 2009-08-21  Mark Rowe  <mrowe@apple.com>
2074
2075         Fix the non-JIT build.
2076
2077         * runtime/Executable.cpp:
2078         * runtime/Executable.h:
2079
2080 2009-08-21  Gavin Barraclough  <barraclough@apple.com>
2081
2082         Speculative QuickTime build fix.
2083
2084         * runtime/JSArray.cpp:
2085
2086 2009-08-21  Gavin Barraclough  <barraclough@apple.com>
2087
2088         Speculative QT build fix.
2089
2090         * runtime/StringPrototype.cpp:
2091
2092 2009-08-21  Gavin Barraclough  <barraclough@apple.com>
2093
2094         Reviewed by Oliver Hunt.
2095
2096         Restructure Executable types so that host functions do not hold a FunctionExecutable.
2097         https://bugs.webkit.org/show_bug.cgi?id=28621
2098
2099         All JSFunction objects have a pointer to an Executable*.  This is currently always a
2100         FunctionExecutable, however this has a couple of drawbacks.  Host functions do not
2101         store a range of information that the FunctionExecutable provides (source, name,
2102         CodeBlock & information presently held on the FunctionBodyNode). 
2103
2104         [ * nearly all... see below! ]
2105
2106         Instead, make JSFunctions hold a pointer to an ExecutableBase, move fields specific
2107         to JS sourced executable types (source, node) into a new subclass (ScriptExecutable),
2108         and create a new NativeExecutable type.  We now provide a new method in JSFunction
2109         to access & downcast to FunctionExecutable, but in doing so we can make an early
2110         check (with an ASSERT) to ensure that the Executable read from a function will only
2111         be treated as a FunctionExecutable (and thus the JS sepcific fields will only be
2112         accessed) if the JSFunction is not a host function.
2113
2114         There is one JSFunction that currently does not have an Executable, which is the
2115         object created to allow us to read out the vtable pointer.  By making this change
2116         we can also add a new Executable type fror this object (VPtrHackExecutable).
2117         Since this means that really all JSFunctions have an Executable we no longer have
2118         to null-check m_executable before us it - particularly in isHostFunction().
2119
2120         This patch removes CacheableEvalExecutable, since all subclasses of ExecutableBase
2121         can now be ref-counted - since both JSFunction holds (and ref-counts) an ExecutableBase
2122         that might be a FunctionExecutable or a NativeExecutable.  This does now mean that all
2123         ProgramExecutables and EvalExecutables (unnecessarily) provide an interface to be
2124         ref-counted, however this seems less-bad than host functions unnecessarily providing
2125         interface to access non-host specific information.
2126
2127         The class hierarcy has changed from this:
2128         
2129         - ExecutableBase
2130             - ProgramExecutable
2131             - EvalExecutable
2132                 - CacheableEvalExecutable (also RefCounted by multiple-inheritance)
2133             - FunctionExecutable (also RefCounted by multiple-inheritance, 'special' FunctionExecutable also used for host functions)
2134
2135         To this:
2136         
2137         - RefCounted
2138             - ExecutableBase
2139                 - NativeExecutable
2140                 - VPtrHackExecutable
2141                 - ScriptExecutable
2142                     - ProgramExecutable
2143                     - EvalExecutable
2144                     - FunctionExecutable
2145
2146         This patch speeds up sunspidey by a couple of ms (presumably due to the changes to isHostFunction()).
2147
2148         * bytecode/CodeBlock.cpp:
2149         (JSC::CodeBlock::CodeBlock):
2150         * bytecode/CodeBlock.h:
2151         (JSC::CodeBlock::ownerExecutable):
2152         (JSC::GlobalCodeBlock::GlobalCodeBlock):
2153         * bytecode/EvalCodeCache.h:
2154         (JSC::EvalCodeCache::get):
2155         * debugger/Debugger.cpp:
2156         (JSC::Debugger::recompileAllJSFunctions):
2157         * interpreter/CachedCall.h:
2158         (JSC::CachedCall::CachedCall):
2159         * interpreter/Interpreter.cpp:
2160         (JSC::Interpreter::callEval):
2161         (JSC::Interpreter::privateExecute):
2162         * jit/JITStubs.cpp:
2163         (JSC::DEFINE_STUB_FUNCTION):
2164         * profiler/Profiler.cpp:
2165         (JSC::createCallIdentifierFromFunctionImp):
2166         * runtime/Arguments.h:
2167         (JSC::Arguments::getArgumentsData):
2168         (JSC::Arguments::Arguments):
2169         * runtime/Executable.cpp:
2170         (JSC::NativeExecutable::~NativeExecutable):
2171         (JSC::VPtrHackExecutable::~VPtrHackExecutable):
2172         * runtime/Executable.h:
2173         (JSC::ExecutableBase::ExecutableBase):
2174         (JSC::ExecutableBase::~ExecutableBase):
2175         (JSC::ExecutableBase::isHostFunction):
2176         (JSC::NativeExecutable::NativeExecutable):
2177         (JSC::VPtrHackExecutable::VPtrHackExecutable):
2178         (JSC::ScriptExecutable::ScriptExecutable):
2179         (JSC::ScriptExecutable::source):
2180         (JSC::ScriptExecutable::sourceID):
2181         (JSC::ScriptExecutable::sourceURL):
2182         (JSC::ScriptExecutable::lineNo):
2183         (JSC::ScriptExecutable::lastLine):
2184         (JSC::ScriptExecutable::usesEval):
2185         (JSC::ScriptExecutable::usesArguments):
2186         (JSC::ScriptExecutable::needsActivation):
2187         (JSC::EvalExecutable::EvalExecutable):
2188         (JSC::EvalExecutable::create):
2189         (JSC::ProgramExecutable::ProgramExecutable):
2190         (JSC::FunctionExecutable::FunctionExecutable):
2191         * runtime/FunctionPrototype.cpp:
2192         (JSC::functionProtoFuncToString):
2193         * runtime/JSFunction.cpp:
2194         (JSC::JSFunction::JSFunction):
2195         (JSC::JSFunction::~JSFunction):
2196         (JSC::JSFunction::markChildren):
2197         (JSC::JSFunction::getCallData):
2198         (JSC::JSFunction::call):
2199         (JSC::JSFunction::lengthGetter):
2200         (JSC::JSFunction::getConstructData):
2201         (JSC::JSFunction::construct):
2202         * runtime/JSFunction.h:
2203         (JSC::JSFunction::executable):
2204         (JSC::JSFunction::jsExecutable):
2205         (JSC::JSFunction::isHostFunction):
2206
2207 2009-08-20  Oliver Hunt  <oliver@apple.com>
2208
2209         Reviewed by Maciej Stachowiak.
2210
2211         Browser hangs on opening Web Inspector.
2212         https://bugs.webkit.org/show_bug.cgi?id=28438
2213
2214         Code generation needs to be able to walk the entire scopechain in some
2215         cases, however the symbol table used by activations was a member of the
2216         codeblock.  Following recompilation this may no longer exist, leading
2217         to a crash or hang on lookup.
2218
2219         We fix this by introducing a refcounted SymbolTable subclass, SharedSymbolTable,
2220         for the CodeBlocks used by function code.  This allows activations to
2221         maintain ownership of a copy of the symbol table even after recompilation so
2222         they can continue to work.
2223
2224         * bytecode/CodeBlock.cpp:
2225         (JSC::CodeBlock::CodeBlock):
2226         * bytecode/CodeBlock.h:
2227         (JSC::CodeBlock::symbolTable):
2228         (JSC::CodeBlock::sharedSymbolTable):
2229         (JSC::GlobalCodeBlock::GlobalCodeBlock):
2230         (JSC::FunctionCodeBlock::FunctionCodeBlock):
2231         (JSC::FunctionCodeBlock::~FunctionCodeBlock):
2232         * interpreter/Interpreter.cpp:
2233         (JSC::Interpreter::retrieveArguments):
2234         * runtime/Executable.cpp:
2235         (JSC::EvalExecutable::generateBytecode):
2236         (JSC::FunctionExecutable::generateBytecode):
2237         (JSC::FunctionExecutable::reparseExceptionInfo):
2238         (JSC::EvalExecutable::reparseExceptionInfo):
2239         * runtime/JSActivation.h:
2240         (JSC::JSActivation::JSActivationData::JSActivationData):
2241         (JSC::JSActivation::JSActivationData::~JSActivationData):
2242         * runtime/SymbolTable.h:
2243
2244 2009-08-20  Xan Lopez  <xlopez@igalia.com>
2245
2246         Add new file to GTK+ build.
2247
2248         * GNUmakefile.am:
2249
2250 2009-08-20  Geoffrey Garen  <ggaren@apple.com>
2251
2252         Reviewed by Maciej Stachowiak.
2253
2254         Added a number => string cache.
2255         
2256         1.07x faster on v8 (1.7x faster on v8-splay).
2257         1.004x faster on SunSpider.
2258
2259         * runtime/JSCell.h: Moved JSValue::toString to JSString.h.
2260         * runtime/JSGlobalData.h: Holds the cache.
2261         * runtime/JSNumberCell.cpp:
2262         (JSC::JSNumberCell::toString):
2263         (JSC::JSNumberCell::toThisString): Removed -0 special case.
2264         UString handles this now, since too many clients were
2265         special-casing it.
2266
2267         * runtime/JSString.h:
2268         (JSC::JSValue::toString): Use the cache when converting
2269         an int or double to string.
2270
2271         * runtime/Operations.h:
2272         (JSC::concatenateStrings): Call toString to take advantage
2273         of the cache.
2274
2275         * runtime/SmallStrings.h:
2276         (JSC::NumericStrings::add):
2277         (JSC::NumericStrings::lookup): The cache.
2278
2279         * runtime/UString.cpp:
2280         (JSC::UString::from): Added -0 special case mentioned above.
2281         Removed appendNumeric because it's mutually exclusive with the
2282         cache.
2283
2284 2009-08-20  Oliver Hunt  <oliver@apple.com>
2285
2286         Reviewed by Gavin Barraclough.
2287
2288         REGRESSION: fast/profiler/call.html is crashing occasionally
2289         https://bugs.webkit.org/show_bug.cgi?id=28476
2290
2291         Using the codeblock for information about how many parameters and
2292         locals a function has is unsafe in certain circumstances.  The
2293         basic scenario is all function code being cleared in response to
2294         the debugger or profiler being enabled, and then an activation is
2295         marked before its associated function is re-executed.
2296
2297         To deal with this scenario we store the variable count of a function
2298         directly in the FunctionExecutable, and then use that information.
2299
2300         * runtime/Arguments.h:
2301         (JSC::Arguments::getArgumentsData):
2302         * runtime/Executable.cpp:
2303         (JSC::FunctionExecutable::generateBytecode):
2304         * runtime/Executable.h:
2305         (JSC::FunctionExecutable::FunctionExecutable):
2306         (JSC::FunctionExecutable::variableCount):
2307         * runtime/JSActivation.cpp:
2308         (JSC::JSActivation::markChildren):
2309
2310 2009-08-20  Gavin Barraclough  <barraclough@apple.com>
2311
2312         Reviewed by Oliver Hunt.
2313
2314         Numbering of arguments to emitGetJITStubArg/emitPutJITStubArg incorrect
2315         <bug lost in the great bug disasteroony of 08/20/09!>
2316
2317         The argumentNumber argument to emitGetJITStubArg/emitPutJITStubArg should match
2318         the argument number used within the stub functions in JITStubs.cpp, but it doesn't.
2319
2320         Firstly, all the numbers changed when we added a void* 'reserved' as the first slot
2321         (rather than leaving argument 0 unused), and secondly in 32_64 builds the index to
2322         peek/poke needs to be multiplies by 2 (since the argument to peek/poke is a number
2323         of machine words, and on 32_64 build the argument slots to stub functions are two
2324         words wide).
2325
2326         * jit/JIT.h:
2327         * jit/JITCall.cpp:
2328         (JSC::JIT::compileOpCallSetupArgs):
2329         (JSC::JIT::compileOpConstructSetupArgs):
2330         (JSC::JIT::compileOpCallVarargsSetupArgs):
2331         (JSC::JIT::compileOpCall):
2332         * jit/JITInlineMethods.h:
2333         (JSC::JIT::emitPutJITStubArg):
2334         (JSC::JIT::emitPutJITStubArgConstant):
2335         (JSC::JIT::emitGetJITStubArg):
2336         (JSC::JIT::emitPutJITStubArgFromVirtualRegister):
2337         * jit/JITOpcodes.cpp:
2338         (JSC::JIT::privateCompileCTIMachineTrampolines):
2339         * jit/JITPropertyAccess.cpp:
2340         (JSC::JIT::privateCompilePutByIdTransition):
2341
2342 2009-08-20  Oliver Hunt  <oliver@apple.com>
2343
2344         Reviewed by Geoff Garen.
2345
2346         REGRESSION: significant slowdown on Celtic Kane "AJAX declaration" subtest
2347         https://bugs.webkit.org/show_bug.cgi?id=28332
2348
2349         Follow up style fixes that were missed in review.
2350
2351         * runtime/Structure.cpp:
2352         (JSC::Structure::hasTransition):
2353         * runtime/Structure.h:
2354         (JSC::Structure::get):
2355         (JSC::StructureTransitionTable::contains):
2356         * runtime/StructureTransitionTable.h:
2357         (JSC::StructureTransitionTable::add):
2358
2359 2009-08-20  Oliver Hunt  <oliver@apple.com>
2360
2361         Add new exports to windows jsc build
2362
2363         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2364         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
2365
2366 2009-08-20  Oliver Hunt  <oliver@apple.com>
2367
2368         Reviewed by Gavin Barraclough.
2369
2370         REGRESSION: significant slowdown on Celtic Kane "AJAX declaration" subtest
2371         https://bugs.webkit.org/show_bug.cgi?id=28332
2372
2373         The method check optimisation made transitions aware of the value being
2374         assigned when a transition was assigning a function.  This had the side
2375         effect of making every assignment of a function expression result in a
2376         new transition, and thus a new Structure.  The net result of this is that
2377         the common JS idiom of
2378
2379             function MyObject() {
2380                 this.myFunction = function(...){...};
2381             }
2382             new MyObject();
2383
2384         Will produce a unique structure on every iteration, meaning that all
2385         caching is defeated and there is a significant amount of structure churn.
2386
2387         The fix is to return the transition to its original form where it is
2388         keyed off a property name + attributes tuple, but have each transition
2389         support an optional transition on a specific value.
2390
2391         * JavaScriptCore.exp:
2392         * runtime/JSObject.h:
2393         (JSC::JSObject::putDirectInternal):
2394         * runtime/Structure.cpp:
2395         (JSC::Structure::~Structure):
2396         (JSC::Structure::addPropertyTransitionToExistingStructure):
2397         (JSC::Structure::addPropertyTransition):
2398         (JSC::Structure::hasTransition):
2399         * runtime/Structure.h:
2400         (JSC::Structure::transitionedFor):
2401         (JSC::Structure::hasTransition):
2402         (JSC::Structure::):
2403         (JSC::StructureTransitionTable::contains):
2404         (JSC::StructureTransitionTable::get):
2405         * runtime/StructureTransitionTable.h:
2406         (JSC::StructureTransitionTableHashTraits::emptyValue):
2407         (JSC::StructureTransitionTable::hasTransition):
2408         (JSC::StructureTransitionTable::remove):
2409         (JSC::StructureTransitionTable::add):
2410
2411 2009-08-20  Gavin Barraclough  <barraclough@apple.com>
2412
2413         Reviewed by Oliver Hunt.
2414
2415         Remove FunctionCodeBlock.
2416         https://bugs.webkit.org/show_bug.cgi?id=28502
2417
2418         These only exist to allow JIT code to dereference properties off the
2419         CodeBlock for any callee, regardless of whether it is a host function.
2420
2421         Instead just use the FunctionExecutable.  Copy the m_parameters field
2422         from the CodeBlock into the Executable, and use this to distinguish
2423         between host functions, functions that have been bytecompiled, and
2424         functions that have not.
2425
2426         m_parameters is moved to ExecutableBase rather than FunctionExecutable
2427         so that (as a separate change) we can move make a separate class of
2428         executable for host code, which is not devived from FunctionExecutable
2429         (host code does not feature any of the properties that normal executable
2430         do and will provide, such as source, attributes, and a parsed name).
2431
2432         1% win on v8 tests, 0.5% on sunspider.
2433
2434         * bytecode/CodeBlock.cpp:
2435         (JSC::CodeBlock::derefStructures):
2436         (JSC::CodeBlock::refStructures):
2437         (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
2438         (JSC::CodeBlock::handlerForBytecodeOffset):
2439         (JSC::CodeBlock::lineNumberForBytecodeOffset):
2440         (JSC::CodeBlock::expressionRangeForBytecodeOffset):
2441         (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset):
2442         (JSC::CodeBlock::functionRegisterForBytecodeOffset):
2443         (JSC::CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset):
2444         (JSC::CodeBlock::hasGlobalResolveInfoAtBytecodeOffset):
2445         * bytecode/CodeBlock.h:
2446         (JSC::):
2447         (JSC::CodeBlock::source):
2448         (JSC::CodeBlock::sourceOffset):
2449         (JSC::CodeBlock::evalCodeCache):
2450         (JSC::CodeBlock::createRareDataIfNecessary):
2451         
2452             remove NativeCodeBlocks and the NativeCode code type.
2453         
2454         * jit/JIT.cpp:
2455         (JSC::JIT::linkCall):
2456
2457             Revert to previous behaviour (as currently still commented!) that Hhost functions have a null codeblock.
2458
2459         * jit/JITCall.cpp:
2460         (JSC::JIT::compileOpCallInitializeCallFrame):
2461         (JSC::JIT::compileOpCallSetupArgs):
2462         (JSC::JIT::compileOpCallVarargsSetupArgs):
2463         (JSC::JIT::compileOpConstructSetupArgs):
2464         (JSC::JIT::compileOpCallVarargs):
2465         (JSC::JIT::compileOpCall):
2466         (JSC::JIT::compileOpCallSlowCase):
2467
2468             Bring the 32_64 & non-32_64 JITs into line with each other, callee in regT0.
2469
2470         * jit/JITOpcodes.cpp:
2471         (JSC::JIT::privateCompileCTIMachineTrampolines):
2472
2473             Rewrite call trampolines to not use the CodeBlock.
2474
2475         * jit/JITStubs.cpp:
2476         (JSC::DEFINE_STUB_FUNCTION):
2477
2478             Make call_JSFunction & call_arityCheck return the callee, don't expect to be passed the CodeBlock.
2479
2480         * runtime/Executable.cpp:
2481         (JSC::FunctionExecutable::generateBytecode):
2482         (JSC::FunctionExecutable::recompile):
2483         (JSC::FunctionExecutable::FunctionExecutable):
2484         * runtime/Executable.h:
2485         (JSC::ExecutableBase::):
2486         (JSC::ExecutableBase::ExecutableBase):
2487         (JSC::FunctionExecutable::isHostFunction):
2488
2489             Add m_numParameters.
2490
2491         * runtime/JSFunction.cpp:
2492         (JSC::JSFunction::~JSFunction):
2493
2494             Only call generatedBytecode() on JSFunctions non-host FunctionExecutables.
2495
2496 2009-08-20  Yongjun Zhang  <yongjun.zhang@nokia.com>
2497
2498         Reviewed by Eric Seidel.
2499
2500         https://bugs.webkit.org/show_bug.cgi?id=28054
2501        
2502         Use a helper function to work around winscw compiler forward declaration bug
2503         regarding templated classes.
2504
2505         Add parenthesis around (PassRefPtr::*UnspecifiedBoolType) to make winscw compiler
2506         work with the default UnSpecifiedBoolType() operator, which removes the winscw
2507         specific bool cast hack.
2508
2509         * wtf/PassRefPtr.h:
2510         (WTF::derefIfNotNull):
2511         (WTF::PassRefPtr::~PassRefPtr):
2512
2513 2009-08-19  Yong Li  <yong.li@torchmobile.com>
2514
2515         Reviewed by Gavin Barraclough.
2516
2517         Change namespace ARM to ARMRegisters
2518         X86 to X86Registers to avoid conflict with macros
2519         https://bugs.webkit.org/show_bug.cgi?id=28428
2520
2521         * assembler/ARMAssembler.cpp:
2522         * assembler/ARMAssembler.h:
2523         * assembler/ARMv7Assembler.h:
2524         * assembler/MacroAssemblerARM.h:
2525         * assembler/MacroAssemblerARMv7.h:
2526         * assembler/MacroAssemblerX86Common.h:
2527         * assembler/MacroAssemblerX86_64.h:
2528         * assembler/X86Assembler.h:
2529         * jit/JIT.h:
2530         * jit/JITArithmetic.cpp:
2531         * jit/JITInlineMethods.h:
2532         * jit/JITOpcodes.cpp:
2533         * wrec/WRECGenerator.cpp:
2534         * wrec/WRECGenerator.h:
2535         * yarr/RegexJIT.cpp:
2536
2537 2009-08-19  Oliver Hunt  <oliver@apple.com>
2538
2539         Reviewed by Gavin Barraclough.
2540
2541         Devirtualise marking
2542         https://bugs.webkit.org/show_bug.cgi?id=28294
2543
2544         We actually need to mark the value in a number object if we're using the
2545         32bit number representation.
2546
2547         * runtime/NumberObject.h:
2548         (JSC::NumberObject::createStructure):
2549
2550 2009-08-19  Gavin Barraclough  <barraclough@apple.com>
2551
2552         Reviewed by Darin Adler.
2553
2554          We probably shouldn't be keeping the AST for eval nodes around forevar.
2555         https://bugs.webkit.org/show_bug.cgi?id=28469
2556
2557         EvalNodes don't destroyData() (delete their parser data) since they need to hold onto
2558         their varStack.  Copy a list of variable onto EvalCodeBlock, and this can go away.
2559
2560         * bytecode/CodeBlock.h:
2561         (JSC::EvalCodeBlock::variable):
2562         (JSC::EvalCodeBlock::numVariables):
2563         (JSC::EvalCodeBlock::adoptVariables):
2564         * bytecompiler/BytecodeGenerator.cpp:
2565         (JSC::BytecodeGenerator::BytecodeGenerator):
2566         * interpreter/Interpreter.cpp:
2567         (JSC::Interpreter::execute):
2568         * parser/Nodes.h:
2569         * runtime/Executable.cpp:
2570         (JSC::EvalExecutable::generateBytecode):
2571         * runtime/Executable.h:
2572
2573 2009-08-19  Jungshik Shin  <jshin@chromium.org>
2574
2575         Reviewed by Darin Adler.
2576
2577         http://bugs.webkit.org/show_bug.cgi?id=28441
2578
2579         Fix a build issue with ICU 4.2 or later on Windows with Visual C++. 
2580         Instead of defining all isXXX and toupper/tolower as 
2581           WTF_Please_use_ASCIICType_instead_of_ctype_see_comment_in_ASCIICType_h,
2582         #define them to be different by prepending 'WTF_...ASCIIType_h' with
2583         the originial names like 'toupper_WTF_...ASCIIType_h'. 
2584
2585         * wtf/DisallowCType.h:
2586
2587 2009-08-18  Oliver Hunt  <oliver@apple.com>
2588
2589         Reviewed by Gavin Barraclough.
2590
2591         Assigning a function to an object should always use the existing transition, even if the transition is not specialized
2592         https://bugs.webkit.org/show_bug.cgi?id=28442
2593
2594         Check for an unspecialized transition as an alternative to always failing if specialisation does not match.
2595
2596         * runtime/Structure.cpp:
2597         (JSC::Structure::addPropertyTransitionToExistingStructure):
2598
2599 2009-08-18  Dirk Schulze  <krit@webkit.org>
2600
2601         Reviewed by Oliver Hunt.
2602
2603         Added additional getter to ByteArray with an unsigned char as return.
2604         ByteArray can take unsigned char directly now.
2605
2606         * wtf/ByteArray.h:
2607         (WTF::ByteArray::set):
2608         (WTF::ByteArray::get):
2609
2610 2009-08-18  Peter Kasting  <pkasting@google.com>
2611
2612         Reviewed by Eric Seidel.
2613
2614         https://bugs.webkit.org/show_bug.cgi?id=28415
2615         Set svn:eol-style CRLF on all .sln and .vcproj files that don't already
2616         have it.
2617
2618         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
2619         * JavaScriptCore.vcproj/testapi/testapi.vcproj:
2620         
2621 2009-08-18  Xan Lopez  <xlopez@igalia.com>
2622
2623         Try to fix the GTK+ build.
2624
2625         * GNUmakefile.am:
2626
2627 2009-08-17  Gavin Barraclough  <barraclough@apple.com>
2628
2629         Reviewed by Sam Weinig.
2630
2631         No, silly runtime, AST nodes are not for you.
2632
2633         We still use AST nodes (ScopeNodes, particularly FunctionBodyNodes) within
2634         the runtime, which means that these nodes must be persisted outside of the
2635         arena, contain both parser & runtime data, etc.  This is all a bit of a mess.
2636
2637         Move functionality into a new FunctionExecutable class.
2638
2639         * API/JSCallbackFunction.cpp:
2640         * API/JSObjectRef.cpp:
2641         * JavaScriptCore.exp:
2642         * JavaScriptCore.xcodeproj/project.pbxproj:
2643         * bytecode/CodeBlock.cpp:
2644         (JSC::CodeBlock::CodeBlock):
2645         (JSC::CodeBlock::markAggregate):
2646         (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
2647         (JSC::CodeBlock::lineNumberForBytecodeOffset):
2648         (JSC::CodeBlock::shrinkToFit):
2649         * bytecode/CodeBlock.h:
2650         (JSC::CodeBlock::getBytecodeIndex):
2651         (JSC::CodeBlock::discardBytecode):
2652         (JSC::CodeBlock::instructionCount):
2653         (JSC::CodeBlock::getJITCode):
2654         (JSC::CodeBlock::executablePool):
2655         (JSC::CodeBlock::ownerExecutable):
2656         (JSC::CodeBlock::extractExceptionInfo):
2657         (JSC::CodeBlock::addFunctionDecl):
2658         (JSC::CodeBlock::functionDecl):
2659         (JSC::CodeBlock::numberOfFunctionDecls):
2660         (JSC::CodeBlock::addFunctionExpr):
2661         (JSC::CodeBlock::functionExpr):
2662         (JSC::GlobalCodeBlock::GlobalCodeBlock):
2663         (JSC::ProgramCodeBlock::ProgramCodeBlock):
2664         (JSC::EvalCodeBlock::EvalCodeBlock):
2665         (JSC::FunctionCodeBlock::FunctionCodeBlock):
2666         (JSC::NativeCodeBlock::NativeCodeBlock):
2667         * bytecode/EvalCodeCache.h:
2668         * bytecode/SamplingTool.cpp:
2669         (JSC::SamplingTool::doRun):
2670         * bytecompiler/BytecodeGenerator.cpp:
2671         (JSC::BytecodeGenerator::BytecodeGenerator):
2672         (JSC::BytecodeGenerator::emitNewFunction):
2673         (JSC::BytecodeGenerator::emitNewFunctionExpression):
2674         * bytecompiler/BytecodeGenerator.h:
2675         * debugger/Debugger.cpp:
2676         (JSC::Debugger::recompileAllJSFunctions):
2677         * interpreter/CachedCall.h:
2678         (JSC::CachedCall::CachedCall):
2679         * interpreter/CallFrameClosure.h:
2680         * interpreter/Interpreter.cpp:
2681         (JSC::Interpreter::unwindCallFrame):
2682         (JSC::Interpreter::throwException):
2683         (JSC::Interpreter::execute):
2684         (JSC::Interpreter::prepareForRepeatCall):
2685         (JSC::Interpreter::debug):
2686         (JSC::Interpreter::privateExecute):
2687         (JSC::Interpreter::retrieveLastCaller):
2688         * interpreter/Interpreter.h:
2689         * jit/JIT.cpp:
2690         (JSC::JIT::privateCompile):
2691         * jit/JIT.h:
2692         (JSC::JIT::compile):
2693         * jit/JITOpcodes.cpp:
2694         (JSC::JIT::privateCompileCTIMachineTrampolines):
2695         (JSC::JIT::emit_op_new_func):
2696         (JSC::JIT::emit_op_new_func_exp):
2697         * jit/JITStubs.cpp:
2698         (JSC::DEFINE_STUB_FUNCTION):
2699         * jit/JITStubs.h:
2700         (JSC::):
2701         * parser/Nodes.cpp:
2702         (JSC::FunctionBodyNode::reparseDataIfNecessary):
2703         * parser/Nodes.h:
2704         (JSC::EvalNode::partialDestroyData):
2705         * parser/Parser.h:
2706         * profiler/ProfileGenerator.cpp:
2707         * profiler/Profiler.cpp:
2708         (JSC::Profiler::createCallIdentifier):
2709         (JSC::createCallIdentifierFromFunctionImp):
2710         * runtime/Arguments.h:
2711         (JSC::Arguments::getArgumentsData):
2712         (JSC::Arguments::Arguments):
2713         (JSC::JSActivation::copyRegisters):
2714         * runtime/ArrayPrototype.cpp:
2715         (JSC::isNumericCompareFunction):
2716         * runtime/CallData.h:
2717         (JSC::):
2718         * runtime/Collector.cpp:
2719         (JSC::Heap::collect):
2720         * runtime/ConstructData.h:
2721         (JSC::):
2722         * runtime/ExceptionHelpers.cpp:
2723         (JSC::createUndefinedVariableError):
2724         (JSC::createInvalidParamError):
2725         (JSC::createNotAConstructorError):
2726         (JSC::createNotAFunctionError):
2727         (JSC::createNotAnObjectError):
2728         * runtime/Executable.cpp: Added.
2729         (JSC::EvalExecutable::generateBytecode):
2730         (JSC::ProgramExecutable::generateBytecode):
2731         (JSC::FunctionExecutable::generateBytecode):
2732         (JSC::EvalExecutable::generateJITCode):
2733         (JSC::ProgramExecutable::generateJITCode):
2734         (JSC::FunctionExecutable::generateJITCode):
2735         (JSC::FunctionExecutable::isHostFunction):
2736         (JSC::FunctionExecutable::markAggregate):
2737         (JSC::FunctionExecutable::reparseExceptionInfo):
2738         (JSC::EvalExecutable::reparseExceptionInfo):
2739         (JSC::FunctionExecutable::recompile):
2740         (JSC::FunctionExecutable::FunctionExecutable):
2741         * runtime/Executable.h:
2742         (JSC::ExecutableBase::~ExecutableBase):
2743         (JSC::ExecutableBase::ExecutableBase):
2744         (JSC::ExecutableBase::source):
2745         (JSC::ExecutableBase::sourceID):
2746         (JSC::ExecutableBase::lastLine):
2747         (JSC::ExecutableBase::usesEval):
2748         (JSC::ExecutableBase::usesArguments):
2749         (JSC::ExecutableBase::needsActivation):
2750         (JSC::ExecutableBase::astNode):
2751         (JSC::ExecutableBase::generatedJITCode):
2752         (JSC::ExecutableBase::getExecutablePool):
2753         (JSC::EvalExecutable::EvalExecutable):
2754         (JSC::EvalExecutable::bytecode):
2755         (JSC::EvalExecutable::varStack):
2756         (JSC::EvalExecutable::evalNode):
2757         (JSC::EvalExecutable::jitCode):
2758         (JSC::ProgramExecutable::ProgramExecutable):
2759         (JSC::ProgramExecutable::reparseExceptionInfo):
2760         (JSC::ProgramExecutable::bytecode):
2761         (JSC::ProgramExecutable::programNode):
2762         (JSC::ProgramExecutable::jitCode):
2763         (JSC::FunctionExecutable::FunctionExecutable):
2764         (JSC::FunctionExecutable::name):
2765         (JSC::FunctionExecutable::bytecode):
2766         (JSC::FunctionExecutable::generatedBytecode):
2767         (JSC::FunctionExecutable::usesEval):
2768         (JSC::FunctionExecutable::usesArguments):
2769         (JSC::FunctionExecutable::parameterCount):
2770         (JSC::FunctionExecutable::paramString):
2771         (JSC::FunctionExecutable::isGenerated):
2772         (JSC::FunctionExecutable::body):
2773         (JSC::FunctionExecutable::jitCode):
2774         (JSC::FunctionExecutable::createNativeThunk):
2775         * runtime/FunctionConstructor.cpp:
2776         (JSC::constructFunction):
2777         * runtime/FunctionPrototype.cpp:
2778         (JSC::functionProtoFuncToString):
2779         * runtime/JSActivation.cpp:
2780         (JSC::JSActivation::JSActivation):
2781         (JSC::JSActivation::markChildren):
2782         (JSC::JSActivation::isDynamicScope):
2783         (JSC::JSActivation::argumentsGetter):
2784         * runtime/JSActivation.h:
2785         (JSC::JSActivation::JSActivationData::JSActivationData):
2786         * runtime/JSFunction.cpp:
2787         (JSC::JSFunction::isHostFunction):
2788         (JSC::JSFunction::JSFunction):
2789         (JSC::JSFunction::~JSFunction):
2790         (JSC::JSFunction::markChildren):
2791         (JSC::JSFunction::getCallData):
2792         (JSC::JSFunction::call):
2793         (JSC::JSFunction::lengthGetter):
2794         (JSC::JSFunction::getConstructData):
2795         (JSC::JSFunction::construct):
2796         * runtime/JSFunction.h:
2797         (JSC::JSFunction::executable):
2798         (JSC::FunctionExecutable::make):
2799         * runtime/JSGlobalData.cpp:
2800         (JSC::JSGlobalData::JSGlobalData):
2801         (JSC::JSGlobalData::numericCompareFunction):
2802         * runtime/JSGlobalData.h:
2803
2804 2009-08-17  Mark Rowe  <mrowe@apple.com>
2805
2806         Reviewed by Darin Adler.
2807
2808         Fix 300,000+ leaks seen during the regression tests.
2809
2810         EvalCodeCache::get was heap-allocating an EvalExecutable instance without adopting the initial reference.
2811         While fixing this we noticed that EvalExecutable was a RefCounted type that was sometimes stack allocated.
2812         To make this cleaner and to prevent clients from attempting to ref a stack-allocated instance, we move the
2813         refcounting down to a new CacheableEvalExecutable class that derives from EvalExecutable. EvalCodeCache::get
2814         now uses CacheableEvalExecutable::create and avoids the leak.
2815
2816         * bytecode/EvalCodeCache.h:
2817         (JSC::EvalCodeCache::get):
2818         * interpreter/Interpreter.cpp:
2819         (JSC::Interpreter::callEval):
2820         * runtime/Executable.h:
2821         (JSC::CacheableEvalExecutable::create):
2822         (JSC::CacheableEvalExecutable::CacheableEvalExecutable):
2823
2824 2009-08-17  Oliver Hunt  <oliver@apple.com>
2825
2826         RS=Mark Rowe.
2827
2828         REGRESSION (r47292): Prototype.js is broken by ES5 Arguments changes
2829         https://bugs.webkit.org/show_bug.cgi?id=28341
2830         <rdar://problem/7145615>
2831
2832         Reverting r47292.  Alas Prototype.js breaks with Arguments inheriting
2833         from Array as ES5 attempted.  Prototype.js defines $A in terms of a 
2834         function it places on (among other global objects) the Array prototype,
2835         thus breaking $A for arrays.
2836
2837         * runtime/Arguments.h:
2838         (JSC::Arguments::Arguments):
2839         * runtime/JSGlobalObject.cpp:
2840         (JSC::JSGlobalObject::reset):
2841         (JSC::JSGlobalObject::markChildren):
2842         * runtime/JSGlobalObject.h:
2843         (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
2844         * runtime/ObjectPrototype.cpp:
2845         (JSC::ObjectPrototype::ObjectPrototype):
2846         * runtime/ObjectPrototype.h:
2847         * tests/mozilla/ecma_3/Function/arguments-001.js:
2848
2849 2009-08-17  Peter Kasting  <pkasting@google.com>
2850
2851         Reviewed by Steve Falkenburg.
2852
2853         https://bugs.webkit.org/show_bug.cgi?id=27323
2854         Only add Cygwin to the path when it isn't already there.  This avoids
2855         causing problems for people who purposefully have non-Cygwin versions of
2856         executables like svn in front of the Cygwin ones in their paths.
2857
2858         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
2859         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
2860         * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:
2861         * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
2862         * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops:
2863
2864 2009-08-17  Xan Lopez  <xlopez@igalia.com>
2865
2866         Reviewed by Mark Rowe.
2867
2868         Fix build with FAST_MALLOC_MATCH_VALIDATION enabled.
2869
2870         * wtf/FastMalloc.cpp:
2871         (WTF::fastMalloc):
2872         (WTF::fastCalloc):
2873         (WTF::fastRealloc):
2874
2875 2009-08-16  Holger Hans Peter Freyther  <zecke@selfish.org>
2876
2877         Reviewed by Mark Rowe.
2878
2879         Fix crash on ./ecma_2/RegExp/exec-002.js.
2880         https://bugs.webkit.org/show_bug.cgi?id=28353
2881
2882         Change the order of freeParenthesesDisjunctionContext and
2883         popParenthesesDisjunctionContext on all call sites as the pop
2884         method is accessing backTrack->lastContext which is the context
2885         that is about to be freed.
2886
2887         * yarr/RegexInterpreter.cpp:
2888         (JSC::Yarr::Interpreter::parenthesesDoBacktrack):
2889         (JSC::Yarr::Interpreter::backtrackParentheses):
2890
2891 2009-08-16  Holger Hans Peter Freyther  <zecke@selfish.org>
2892
2893         Reviewed by Mark Rowe.
2894
2895         https://bugs.webkit.org/show_bug.cgi?id=28352
2896
2897         Fix coding style violations. Use m_ for C++ class members. Remove
2898         trailing whitespace on empty lines.
2899
2900         * yarr/RegexInterpreter.cpp:
2901         (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::ParenthesesDisjunctionContext):
2902         (JSC::Yarr::Interpreter::tryConsumeCharacter):
2903         (JSC::Yarr::Interpreter::tryConsumeBackReference):
2904         (JSC::Yarr::Interpreter::parenthesesDoBacktrack):
2905         (JSC::Yarr::Interpreter::backtrackParentheses):
2906         (JSC::Yarr::ByteCompiler::ByteCompiler):
2907         (JSC::Yarr::ByteCompiler::compile):
2908         (JSC::Yarr::ByteCompiler::checkInput):
2909         (JSC::Yarr::ByteCompiler::assertionBOL):
2910         (JSC::Yarr::ByteCompiler::assertionEOL):
2911         (JSC::Yarr::ByteCompiler::assertionWordBoundary):
2912         (JSC::Yarr::ByteCompiler::atomPatternCharacter):
2913         (JSC::Yarr::ByteCompiler::atomCharacterClass):
2914         (JSC::Yarr::ByteCompiler::atomBackReference):
2915         (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternBegin):
2916         (JSC::Yarr::ByteCompiler::atomParentheticalAssertionBegin):
2917         (JSC::Yarr::ByteCompiler::popParenthesesStack):
2918         (JSC::Yarr::ByteCompiler::closeAlternative):
2919         (JSC::Yarr::ByteCompiler::closeBodyAlternative):
2920         (JSC::Yarr::ByteCompiler::atomParenthesesEnd):
2921         (JSC::Yarr::ByteCompiler::regexBegin):
2922         (JSC::Yarr::ByteCompiler::alterantiveBodyDisjunction):
2923         (JSC::Yarr::ByteCompiler::alterantiveDisjunction):
2924         (JSC::Yarr::ByteCompiler::emitDisjunction):
2925
2926 2009-08-15  Mark Rowe  <mrowe@apple.com>
2927
2928         Fix the build with JIT disabled.
2929
2930         * runtime/Arguments.h: Only compile the jitCode method when the JIT is enabled.
2931         * runtime/Executable.h: Include PrototypeFunction.h so the compiler knows what
2932         NativeFunctionWrapper is when the JIT is disabled.
2933
2934 2009-08-15  Adam Bergkvist  <adam.bergkvist@ericsson.com>
2935
2936         Reviewed by Sam Weinig.
2937
2938         Added ENABLE_EVENTSOURCE flag.
2939         https://bugs.webkit.org/show_bug.cgi?id=14997
2940
2941         * Configurations/FeatureDefines.xcconfig:
2942
2943 2009-08-14  Gavin Barraclough  <barraclough@apple.com>
2944
2945         * parser/Parser.h:
2946         (JSC::EvalExecutable::parse):
2947         (JSC::ProgramExecutable::parse):
2948         * runtime/Executable.h:
2949
2950 2009-08-14  Gavin Barraclough  <barraclough@apple.com>
2951
2952         Reviewed by Oliver Hunt.
2953
2954         Remove AST nodes from use within the Runtime (outside of parsing), stage 1
2955         https://bugs.webkit.org/show_bug.cgi?id=28330
2956
2957         Remove the EvalNode and ProgramNode from use in the runtime.  They still exist
2958         after this patch, but are hidden behind EvalExecutable and FunctionExecutable,
2959         and are also still reachable behind CodeBlock::m_ownerNode.
2960
2961         The next step will be to beat back FunctionBodyNode in the same fashion.
2962         Then remove the usage via CodeBlock, then only construct these nodes only on
2963         demand during bytecode generation.
2964
2965         * JavaScriptCore.xcodeproj/project.pbxproj:
2966         * bytecode/CodeBlock.h:
2967         (JSC::GlobalCodeBlock::GlobalCodeBlock):
2968         (JSC::GlobalCodeBlock::~GlobalCodeBlock):
2969         (JSC::ProgramCodeBlock::ProgramCodeBlock):
2970         (JSC::EvalCodeBlock::EvalCodeBlock):
2971         (JSC::FunctionCodeBlock::FunctionCodeBlock):
2972         (JSC::NativeCodeBlock::NativeCodeBlock):
2973         * bytecode/EvalCodeCache.h:
2974         (JSC::EvalCodeCache::get):
2975         * debugger/Debugger.cpp:
2976         (JSC::evaluateInGlobalCallFrame):
2977         * debugger/DebuggerCallFrame.cpp:
2978         (JSC::DebuggerCallFrame::evaluate):
2979         * interpreter/Interpreter.cpp:
2980         (JSC::Interpreter::callEval):
2981         (JSC::Interpreter::execute):
2982         * interpreter/Interpreter.h:
2983         * parser/Nodes.cpp:
2984         (JSC::FunctionBodyNode::createNativeThunk):
2985         (JSC::FunctionBodyNode::generateBytecode):
2986         (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse):
2987         * parser/Parser.h:
2988         (JSC::Parser::parse):
2989         (JSC::Parser::reparse):
2990         (JSC::Parser::parseFunctionFromGlobalCode):
2991         (JSC::::parse):
2992         * runtime/Completion.cpp:
2993         (JSC::checkSyntax):
2994         (JSC::evaluate):
2995         * runtime/Error.cpp:
2996         (JSC::throwError):
2997         * runtime/Error.h:
2998         * runtime/Executable.h: Added.
2999         (JSC::TemplateExecutable::TemplateExecutable):
3000         (JSC::TemplateExecutable::markAggregate):
3001         (JSC::TemplateExecutable::sourceURL):
3002         (JSC::TemplateExecutable::lineNo):
3003         (JSC::TemplateExecutable::bytecode):
3004         (JSC::TemplateExecutable::jitCode):
3005         (JSC::EvalExecutable::EvalExecutable):
3006         (JSC::ProgramExecutable::ProgramExecutable):
3007         * runtime/FunctionConstructor.cpp:
3008         (JSC::constructFunction):
3009         * runtime/FunctionConstructor.h:
3010         * runtime/JSGlobalData.cpp:
3011         (JSC::JSGlobalData::numericCompareFunction):
3012         * runtime/JSGlobalObject.cpp:
3013         (JSC::JSGlobalObject::~JSGlobalObject):
3014         (JSC::JSGlobalObject::markChildren):
3015         * runtime/JSGlobalObject.h:
3016         (JSC::JSGlobalObject::codeBlocks):
3017         * runtime/JSGlobalObjectFunctions.cpp:
3018         (JSC::globalFuncEval):
3019
3020 2009-08-14  Darin Adler  <darin@apple.com>
3021
3022         Reviewed by Sam Weinig.
3023
3024         Rename the confusing isObject(<class>) to inherits(<class>).
3025         It still works on non-objects, returning false.
3026
3027         * runtime/ArrayConstructor.cpp:
3028         (JSC::arrayConstructorIsArray): Removed unneeded isObject call
3029         and updated remaining isObject call to new name, inherits.
3030
3031         * runtime/JSCell.h: Renamed isObject(<class>) to inherits(<class>)
3032         but more importantly, made it non-virtual (it was already inline)
3033         so it is now as fast as JSObject::inherits was.
3034
3035         * runtime/JSObject.h: Removed inherits function since the one
3036         in the base class is fine as-is. Also made various JSCell functions
3037         that should not be called on JSObject uncallable by making them
3038         both private and not implemented.
3039         (JSC::JSCell::inherits): Updated name.
3040         (JSC::JSValue::inherits): Ditto.
3041
3042         * debugger/Debugger.cpp:
3043         (JSC::Debugger::recompileAllJSFunctions):
3044         * interpreter/Interpreter.cpp:
3045         (JSC::Interpreter::unwindCallFrame):
3046         * runtime/ArrayPrototype.cpp:
3047         (JSC::arrayProtoFuncToString):
3048         (JSC::arrayProtoFuncToLocaleString):
3049         (JSC::arrayProtoFuncConcat):
3050         * runtime/BooleanPrototype.cpp:
3051         (JSC::booleanProtoFuncToString):
3052         (JSC::booleanProtoFuncValueOf):
3053         * runtime/DateConstructor.cpp:
3054         (JSC::constructDate):
3055         * runtime/DatePrototype.cpp:
3056         (JSC::dateProtoFuncToString):
3057         (JSC::dateProtoFuncToUTCString):
3058         (JSC::dateProtoFuncToISOString):
3059         (JSC::dateProtoFuncToDateString):
3060         (JSC::dateProtoFuncToTimeString):
3061         (JSC::dateProtoFuncToLocaleString):
3062         (JSC::dateProtoFuncToLocaleDateString):
3063         (JSC::dateProtoFuncToLocaleTimeString):
3064         (JSC::dateProtoFuncGetTime):
3065         (JSC::dateProtoFuncGetFullYear):
3066         (JSC::dateProtoFuncGetUTCFullYear):
3067         (JSC::dateProtoFuncToGMTString):
3068         (JSC::dateProtoFuncGetMonth):
3069         (JSC::dateProtoFuncGetUTCMonth):
3070         (JSC::dateProtoFuncGetDate):
3071         (JSC::dateProtoFuncGetUTCDate):
3072         (JSC::dateProtoFuncGetDay):
3073         (JSC::dateProtoFuncGetUTCDay):
3074         (JSC::dateProtoFuncGetHours):
3075         (JSC::dateProtoFuncGetUTCHours):
3076         (JSC::dateProtoFuncGetMinutes):
3077         (JSC::dateProtoFuncGetUTCMinutes):
3078         (JSC::dateProtoFuncGetSeconds):
3079         (JSC::dateProtoFuncGetUTCSeconds):
3080         (JSC::dateProtoFuncGetMilliSeconds):
3081         (JSC::dateProtoFuncGetUTCMilliseconds):
3082         (JSC::dateProtoFuncGetTimezoneOffset):
3083         (JSC::dateProtoFuncSetTime):
3084         (JSC::setNewValueFromTimeArgs):
3085         (JSC::setNewValueFromDateArgs):
3086         (JSC::dateProtoFuncSetYear):
3087         (JSC::dateProtoFuncGetYear):
3088         * runtime/FunctionPrototype.cpp:
3089         (JSC::functionProtoFuncToString):
3090         * runtime/JSActivation.cpp:
3091         (JSC::JSActivation::argumentsGetter):
3092         * runtime/JSValue.h:
3093         * runtime/RegExpConstructor.cpp:
3094         (JSC::constructRegExp):
3095         * runtime/RegExpPrototype.cpp:
3096         (JSC::regExpProtoFuncTest):
3097         (JSC::regExpProtoFuncExec):
3098         (JSC::regExpProtoFuncCompile):
3099         (JSC::regExpProtoFuncToString):
3100         * runtime/ScopeChain.cpp:
3101         (JSC::ScopeChain::localDepth):
3102         * runtime/StringPrototype.cpp:
3103         (JSC::stringProtoFuncReplace):
3104         (JSC::stringProtoFuncToString):
3105         (JSC::stringProtoFuncMatch):
3106         (JSC::stringProtoFuncSearch):
3107         (JSC::stringProtoFuncSplit):
3108         Updated to new name, inherits, from old name, isObject.
3109
3110 2009-07-31  Harald Fernengel  <harald.fernengel@nokia.com>
3111
3112         Reviewed by Simon Hausmann.
3113
3114         Adding QNX as a platform. Currently only tested with Qt.
3115
3116         https://bugs.webkit.org/show_bug.cgi?id=27885
3117
3118         * JavaScriptCore/runtime/Collector.cpp: Added retrieving of stack base
3119           since QNX doesn't have the pthread _nt functions
3120         * JavaScriptCore/wtf/Platform.h: Added WTF_PLATFORM_QNX and corresponding
3121           defines
3122         * WebCore/bridge/npapi.h: Build fix for missing typedefs on QNX
3123
3124 2009-08-14  Gabor Loki  <loki@inf.u-szeged.hu>
3125
3126         Reviewed by Simon Hausmann.
3127
3128         Currently generic ARM and ARMv7 platforms work only with JSVALUE32
3129         https://bugs.webkit.org/show_bug.cgi?id=28300
3130
3131         * wtf/Platform.h:
3132
3133 2009-08-14  Gabor Loki  <loki@inf.u-szeged.hu>
3134
3135         Reviewed by Simon Hausmann.
3136
3137         Enable JIT on ARM for QT by default
3138         https://bugs.webkit.org/show_bug.cgi?id=28259
3139
3140         * wtf/Platform.h:
3141
3142 2009-08-14  Gabor Loki  <loki@inf.u-szeged.hu>
3143
3144         Reviewed by Simon Hausmann.
3145
3146         Enable YARR_JIT on ARM for QT by default
3147         https://bugs.webkit.org/show_bug.cgi?id=28259
3148
3149         * wtf/Platform.h:
3150
3151 2009-08-14  Oliver Hunt  <oliver@apple.com>
3152
3153         Reviewed by Gavin Barraclough.
3154
3155         [ES5] Arguments object should inherit from Array
3156         https://bugs.webkit.org/show_bug.cgi?id=28298
3157
3158         Make the Arguments object conform to the behaviour specified in ES5.
3159         The simple portion of this is to make Arguments use Array.prototype
3160         as its prototype rather than Object.prototype.
3161
3162         The spec then requires us to set instance.constructor to the pristine
3163         Object constructor, and instance.toString and instance.toLocaleString
3164         to the pristine versions from Object.prototype.  To do this we now 
3165         make the ObjectPrototype constructor return its toString and
3166         toLocaleString functions (similar to the call and apply functions
3167         from FunctionPrototype).
3168
3169         Oddly enough this reports itself as a slight win, but given the code
3170         isn't hit in the tests that claim to have improved I put this down to
3171         code motion.
3172
3173         * runtime/Arguments.h:
3174         (JSC::Arguments::Arguments):
3175         (JSC::Arguments::initializeStandardProperties):
3176         * runtime/JSGlobalObject.cpp:
3177         (JSC::JSGlobalObject::reset):
3178         (JSC::JSGlobalObject::markChildren):
3179         * runtime/JSGlobalObject.h:
3180         (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
3181         (JSC::JSGlobalObject::objectConstructor):
3182         (JSC::JSGlobalObject::objectToStringFunction):
3183         (JSC::JSGlobalObject::objectToLocaleStringFunction):
3184         * runtime/ObjectPrototype.cpp:
3185         (JSC::ObjectPrototype::ObjectPrototype):
3186         * runtime/ObjectPrototype.h:
3187         * tests/mozilla/ecma_3/Function/arguments-001.js:
3188           Update test to new es5 behaviour
3189
3190 2009-08-14  Oliver Hunt  <oliver@apple.com>
3191
3192         Remove MarkStack::drain from the JSC exports file
3193
3194         MarkStack::drain is now marked inline, the including it in the exports file
3195         produces an ld warning
3196
3197         * JavaScriptCore.exp:
3198
3199 2009-08-13  Sam Weinig  <sam@webkit.org>
3200
3201         Reviewed by Oliver Hunt.
3202
3203         Remove accidentally left in debugging statement.
3204
3205         * runtime/JSArray.h:
3206         (JSC::MarkStack::drain):
3207
3208 2009-08-13  Oliver Hunt  <oliver@apple.com>
3209
3210         Reviewed by Maciej Stachowiak.
3211
3212         [ES5] Implement Array.isArray
3213         https://bugs.webkit.org/show_bug.cgi?id=28296
3214
3215         Add support for Array.isArray to the Array constructor
3216
3217         * runtime/ArrayConstructor.cpp:
3218         (JSC::ArrayConstructor::ArrayConstructor):
3219         (JSC::arrayConstructorIsArray):
3220         * runtime/ArrayConstructor.h:
3221         * runtime/CommonIdentifiers.h:
3222         * runtime/JSArray.h:
3223         (JSC::MarkStack::drain):
3224         * runtime/JSGlobalObject.cpp:
3225         (JSC::JSGlobalObject::reset):
3226
3227 2009-08-13  Oliver Hunt  <oliver@apple.com>
3228
3229         Reviewed by NOBODY (Buildfix).
3230
3231         Attempt to fix windows build
3232
3233         * runtime/Collector.cpp:
3234
3235 2009-08-13  Oliver Hunt  <oliver@apple.com>
3236
3237         Reviewed by Maciej Stachowiak.
3238
3239         Devirtualise marking
3240         https://bugs.webkit.org/show_bug.cgi?id=28294
3241
3242         Add a bit to TypeInfo to indicate that an object uses the standard
3243         JSObject::markChildren method.  This allows us to devirtualise marking
3244         of most objects (though a branch is still needed).  We also add a branch
3245         to identify arrays thus devirtualising marking in that case as well.
3246
3247         In order to make the best use of this devirtualisation I've also reworked
3248         the MarkStack::drain() logic to make the iteration more efficient.
3249
3250         * API/JSCallbackConstructor.h:
3251         (JSC::JSCallbackConstructor::createStructure):
3252         * API/JSCallbackFunction.h:
3253         (JSC::JSCallbackFunction::createStructure):
3254         * JavaScriptCore.exp:
3255         * runtime/BooleanObject.h:
3256         (JSC::BooleanObject::createStructure):
3257         * runtime/FunctionPrototype.h:
3258         (JSC::FunctionPrototype::createStructure):
3259         * runtime/InternalFunction.h:
3260         (JSC::InternalFunction::createStructure):
3261         * runtime/JSAPIValueWrapper.h:
3262         (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
3263         * runtime/JSArray.cpp:
3264         (JSC::JSArray::markChildren):
3265         * runtime/JSArray.h:
3266         (JSC::JSArray::markChildrenDirect):
3267         (JSC::MarkStack::drain):
3268         * runtime/JSByteArray.cpp:
3269         (JSC::JSByteArray::createStructure):
3270         * runtime/JSCell.h:
3271         (JSC::MarkStack::append):
3272         * runtime/JSGlobalData.cpp:
3273         (JSC::JSGlobalData::JSGlobalData):
3274         * runtime/JSNumberCell.h:
3275         (JSC::JSNumberCell::createStructure):
3276         * runtime/JSONObject.h:
3277         (JSC::JSONObject::createStructure):
3278         * runtime/JSObject.cpp:
3279         (JSC::JSObject::markChildren):
3280         * runtime/JSObject.h:
3281         (JSC::JSObject::markChildrenDirect):
3282         (JSC::JSObject::createStructure):
3283         * runtime/JSString.h:
3284         (JSC::JSString::createStructure):
3285         * runtime/JSType.h:
3286         (JSC::):
3287         * runtime/MarkStack.h:
3288         (JSC::MarkStack::MarkStack):
3289         (JSC::MarkStack::MarkSet::MarkSet):
3290         (JSC::MarkStack::MarkStackArray::last):
3291         * runtime/MathObject.h:
3292         (JSC::MathObject::createStructure):
3293         * runtime/NumberConstructor.h:
3294         (JSC::NumberConstructor::createStructure):
3295         * runtime/NumberObject.h:
3296         (JSC::NumberObject::createStructure):
3297         * runtime/RegExpConstructor.h:
3298         (JSC::RegExpConstructor::createStructure):
3299         * runtime/RegExpObject.h:
3300         (JSC::RegExpObject::createStructure):
3301         * runtime/StringObjectThatMasqueradesAsUndefined.h:
3302         (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
3303         * runtime/TypeInfo.h:
3304         (JSC::TypeInfo::hasDefaultMark):
3305
3306 2009-08-13  Darin Adler  <darin@apple.com>
3307
3308         Reviewed by Mark Rowe.
3309
3310         Some small bits of housekeeping.
3311
3312         * JavaScriptCore.xcodeproj/project.pbxproj: Make Parser.h
3313         project instead of private. Remove JSONObject.lut.h.
3314
3315         * assembler/ARMAssembler.h: Remove unneeded WTF prefix.
3316         * assembler/AssemblerBufferWithConstantPool.h: Ditto.
3317         * bytecompiler/BytecodeGenerator.h: Ditto.
3318
3319         * wtf/SegmentedVector.h: Add a "using" statement as we do
3320         with the other WTF headers.
3321
3322 2009-08-13  Darin Adler  <darin@apple.com>
3323
3324         Fix Tiger build.
3325
3326         * parser/Grammar.y: Use a template function so we can compile
3327         setStatementLocation even if it comes before YYLTYPE is defined.
3328
3329 2009-08-13  Darin Adler  <darin@apple.com>
3330
3331         Reviewed by George Staikos.
3332
3333         Too much use of void* in Grammar.y
3334         https://bugs.webkit.org/show_bug.cgi?id=28287
3335
3336         * parser/Grammar.y: Changed all the helper functions to
3337         take a JSGlobalData* instead of a void*. A couple formatting
3338         tweaks that I missed when breaking this into pieces.
3339
3340 2009-08-13  Darin Adler  <darin@apple.com>
3341
3342         Reviewed by George Staikos.
3343
3344         Another part of https://bugs.webkit.org/show_bug.cgi?id=28287
3345
3346         * parser/Grammar.y: Reduced and sorted includes. Tweaked comment
3347         format. Marked a few more functions inline.
3348
3349 2009-08-13  Darin Adler  <darin@apple.com>
3350
3351         Reviewed by George Staikos.
3352
3353         Another part of https://bugs.webkit.org/show_bug.cgi?id=28287
3354
3355         * parser/Grammar.y: Pass the number to the PropertyNode instead of
3356         first turning it into an Identifier.
3357
3358         * parser/NodeConstructors.h:
3359         (JSC::PropertyNode::PropertyNode): Add an overload that takes a double
3360         so the code to convert to a string can be here instead of Grammar.y.
3361         * parser/Nodes.h: Ditto.
3362
3363 2009-08-13  Darin Adler  <darin@apple.com>
3364
3365         Reviewed by George Staikos.
3366
3367         Another part of https://bugs.webkit.org/show_bug.cgi?id=28287
3368
3369         * parser/Grammar.y: Eliminate the DBG macro.
3370
3371 2009-08-13  Darin Adler  <darin@apple.com>
3372
3373         Reviewed by George Staikos.
3374
3375         Another part of https://bugs.webkit.org/show_bug.cgi?id=28287
3376
3377         * parser/Grammar.y: Eliminate the SET_EXCEPTION_LOCATION macro.
3378
3379 2009-08-13  Darin Adler  <darin@apple.com>
3380
3381         Reviewed by George Staikos.
3382
3383         George asked me to break the patch from
3384         https://bugs.webkit.org/show_bug.cgi?id=28287
3385         into smaller pieces and land it in stages.
3386
3387         * parser/Grammar.y: Eliminate the LEXER macro.
3388
3389 2009-08-13  Mark Rowe  <mrowe@apple.com>
3390
3391         Try some more to fix the Windows build.
3392
3393         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export a new symbol.
3394         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Ditto.
3395
3396 2009-08-13  Mark Rowe  <mrowe@apple.com>
3397
3398         Try and fix the Windows build.
3399
3400         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export a new symbol.
3401         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Ditto.
3402
3403 2009-08-13  Darin Adler  <darin@apple.com>
3404
3405         Reviewed by David Levin.
3406
3407         JavaScriptCore tweaks to get ready for the parser arena
3408         https://bugs.webkit.org/show_bug.cgi?id=28243
3409
3410         Eliminate dependencies on Nodes.h outside JavaScriptCore,
3411         and cut down on them inside JavaScriptCore.
3412
3413         Change regular expression parsing to use identifiers as
3414         with other strings we parse.
3415
3416         Fix a couple things that are needed to use const Identifier
3417         more, which will be part of the parser arena work.
3418
3419         * JavaScriptCore.exp: Resorted and updated.
3420
3421         * JavaScriptCore.xcodeproj/project.pbxproj: Changed
3422         CollectorHeapIterator.h to be project-internal.
3423
3424         * bytecompiler/BytecodeGenerator.cpp:
3425         (JSC::BytecodeGenerator::emitPushNewScope): Added const.
3426         * bytecompiler/BytecodeGenerator.h: Ditto.
3427
3428         * debugger/Debugger.cpp:
3429         (JSC::Debugger::recompileAllJSFunctions): Moved this function
3430         here from WebCore. Here is better since it uses so many internals.
3431         Removed unimportant optimization for the no listener case.
3432         * debugger/Debugger.h: Ditto. Also removed unneeded include
3433         and tweaked formatting and comments.
3434
3435         * debugger/DebuggerCallFrame.cpp:
3436         (JSC::DebuggerCallFrame::functionName): Call asFunction instead
3437         of doing the unchecked static_cast.
3438         (JSC::DebuggerCallFrame::calculatedFunctionName): Ditto.
3439
3440         * jit/JITStubs.cpp:
3441         (JSC::op_call_JSFunction): Call isHostFunction on the body rather
3442         than on the JSFunction.
3443         (JSC::vm_lazyLinkCall): Ditto.
3444         (JSC::op_construct_JSConstruct): Ditto.
3445
3446         * parser/Grammar.y: Changed callers to use new scanRegExp with
3447         out arguments instead of relying on state in the Lexer. And
3448         callers that just want to skip a regular expression to use
3449         skipRegExp.
3450
3451         * parser/Lexer.cpp:
3452         (JSC::Lexer::scanRegExp): Changed to use out arguments, and to
3453         add a prefix argument so we can add in the "=" character as needed.
3454         Also rewrote to streamline the logic a bit inspired by suggestions
3455         by David Levin.
3456         (JSC::Lexer::skipRegExp): Added. Version of the function above that
3457         does not actually put the regular expression into a string.
3458         (JSC::Lexer::clear): Removed code to clear m_pattern and m_flags.
3459         * parser/Lexer.h: Changed scanRegExp to have out arguments. Added
3460         skipRegExp. Eliminated pattern, flags, m_pattern, and m_flags.
3461
3462         * parser/NodeConstructors.h:
3463         (JSC::RegExpNode::RegExpNode): Changed to take const Identifier&.
3464         * parser/Nodes.cpp:
3465         (JSC::RegExpNode::emitBytecode): Changed since m_pattern and
3466         m_flags are now Identifier instead of UString.
3467         (JSC::FunctionBodyNode::make): Moved this function here instead
3468         of putting it in the JSFunction.h header.
3469         * parser/Nodes.h: Changed RegExpNode to use Identifier.
3470
3471         * profiler/Profiler.cpp:
3472         (JSC::Profiler::createCallIdentifier): Changed to use isHostFunction
3473         on the body instead of on the JSFunction object.
3474         * runtime/FunctionPrototype.cpp:
3475         (JSC::functionProtoFuncToString): Ditto.
3476
3477         * runtime/JSFunction.cpp:
3478         (JSC::JSFunction::isHostFunction): Moved here from header.
3479         (JSC::JSFunction::isHostFunctionNonInline): Added.
3480         (JSC::JSFunction::JSFunction): Removed unneeded initialization of
3481         m_body to 0.
3482         (JSC::JSFunction::setBody): Moved here from header.
3483
3484         * runtime/JSFunction.h: Removed unneeded includes. Moved private
3485         constructor down to the private section. Made virtual functions
3486         private. Removed unneeded overload of setBody and moved the body
3487         of the function into the .cpp file. Changed assertions to use
3488         the non-inline version of isHostFunction.
3489
3490         * runtime/PropertySlot.cpp:
3491         (JSC::PropertySlot::functionGetter): Use asFunction instead
3492         of doing the unchecked static_cast.
3493
3494         * wtf/SegmentedVector.h:
3495         (WTF::SegmentedVector::isEmpty): Added.
3496
3497 2009-08-13  Mark Rowe  <mrowe@apple.com>
3498
3499         Rubber-stamped by Darin Adler.
3500
3501         Use the version of operator new that takes a JSGlobalData when allocating FuncDeclNode and FuncExprNode
3502         from within the grammar to prevent these nodes from being leaked.
3503
3504         * parser/Grammar.y:
3505
3506 2009-08-13  Simon Hausmann  <simon.hausmann@nokia.com>
3507
3508         Reviewed by Ariya Hidayat.
3509
3510         Remove the special-case for Qt wrt JSVALUE_32 introduced in
3511         r46709. It must've been a dependency issue on the bot, as
3512         after a manual build all the tests pass on amd64 and ia32.
3513
3514         * wtf/Platform.h:
3515
3516 2009-08-12  Gabor Loki  <loki@inf.u-szeged.hu>
3517
3518         Reviewed by Gavin Barraclough.
3519
3520         Add optimize call and property access support for ARM JIT.
3521         https://bugs.webkit.org/show_bug.cgi?id=24986
3522
3523         For tightly coupled sequences the BEGIN_UNINTERRUPTED_SEQUENCE and
3524         END_UNINTERRUPTED_SEQUENCE macros have been introduced which ensure
3525         space for instructions and constants of the named sequence. This
3526         method is vital for those architecture which are using constant pool.
3527
3528         The 'latePatch' method - which was linked to JmpSrc - is replaced with
3529         a port specific solution (each calls are marked to place their address
3530         on the constant pool).
3531
3532         * assembler/ARMAssembler.cpp:
3533         (JSC::ARMAssembler::linkBranch):
3534         (JSC::ARMAssembler::executableCopy): Add extra align for constant pool.
3535         * assembler/ARMAssembler.h:
3536         (JSC::ARMAssembler::JmpSrc::JmpSrc):
3537         (JSC::ARMAssembler::sizeOfConstantPool):
3538         (JSC::ARMAssembler::jmp):
3539         (JSC::ARMAssembler::linkCall):
3540         * assembler/ARMv7Assembler.h:
3541         * assembler/AbstractMacroAssembler.h:
3542         * assembler/AssemblerBufferWithConstantPool.h:
3543         (JSC::AssemblerBufferWithConstantPool::flushIfNoSpaceFor): Fix the
3544         computation of the remaining space.
3545         * assembler/MacroAssemblerARM.h:
3546         (JSC::MacroAssemblerARM::branch32):
3547         (JSC::MacroAssemblerARM::nearCall):
3548         (JSC::MacroAssemblerARM::call):
3549         (JSC::MacroAssemblerARM::branchPtrWithPatch):
3550         (JSC::MacroAssemblerARM::ensureSpace):
3551         (JSC::MacroAssemblerARM::sizeOfConstantPool):
3552         (JSC::MacroAssemblerARM::prepareCall):
3553         * assembler/X86Assembler.h:
3554         * jit/JIT.h:
3555         * jit/JITCall.cpp:
3556         (JSC::JIT::compileOpCall):
3557         * jit/JITInlineMethods.h:
3558         (JSC::JIT::beginUninterruptedSequence):
3559         (JSC::JIT::endUninterruptedSequence):
3560         * jit/JITPropertyAccess.cpp:
3561         (JSC::JIT::emit_op_method_check):
3562         (JSC::JIT::compileGetByIdHotPath):
3563         (JSC::JIT::compileGetByIdSlowCase):
3564         (JSC::JIT::emit_op_put_by_id):
3565
3566 2009-08-12  Gavin Barraclough  <barraclough@apple.com>
3567
3568         Rubber Stamped by Dave Kilzer.
3569
3570         Disable WTF_USE_JSVALUE32_64 on iPhone for now (support not yet added for ARMv7).
3571
3572         * wtf/Platform.h:
3573
3574 2009-08-12  Gavin Barraclough  <barraclough@apple.com>
3575
3576         Reviewed by Maciej Stachoviak.
3577
3578         Ooops - moved code that had been accidentally added to op_new_func instead of
3579         op_new_func_exp, to where it shoulds be.
3580
3581         * interpreter/Interpreter.cpp:
3582         (JSC::Interpreter::privateExecute):
3583         * wtf/Platform.h:
3584
3585 2009-08-12  Ada Chan  <adachan@apple.com>
3586
3587         Added workaround for the limitation that VirtualFree with MEM_RELEASE
3588         can only accept the base address returned by VirtualAlloc when the region
3589         was reserved and it can only free the entire region, and not a part of it.
3590
3591         Reviewed by Oliver Hunt.
3592
3593         * runtime/MarkStack.h:
3594         (JSC::MarkStack::MarkStackArray::shrinkAllocation):
3595         * runtime/MarkStackWin.cpp:
3596         (JSC::MarkStack::releaseStack):
3597
3598 2009-08-12  Balazs Kelemen  <kelemen.balazs.3@stud.u-szeged.hu>
3599
3600         Reviewed by Ariya Hidayat.
3601
3602         Build fix: use std::numeric_limits<long long>::min() instead of LLONG_MIN
3603         since LLONG_MIN is not defined in standard c++.
3604
3605         * runtime/UString.cpp:
3606         (JSC::UString::from):
3607
3608 2009-08-12  Benjamin Otte  <otte@gnome.org>
3609
3610         Reviewed by Jan Alonzo.
3611