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