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