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