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