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