73da476da97f4d44895ee496752bcc1b7a4e876a
[WebKit-https.git] / JavaScriptCore / ChangeLog
1 2009-02-04  Alexey Proskuryakov  <ap@webkit.org>
2
3         Reviewed by Sam Weinig.
4
5         https://bugs.webkit.org/show_bug.cgi?id=23681
6         Worker tests crash in debug builds if run --singly
7
8         The crash happened because worker threads continued running while debug-only static objects
9         were already being destroyed on main thread.
10
11         * runtime/Structure.cpp: Create static debug-only sets in heap, so that they don't get
12         destroyed.
13
14         * wtf/ThreadingPthreads.cpp: Changed assertions to conventional form.
15
16 2009-02-03  Gavin Barraclough  <barraclough@apple.com>
17
18         Reviewed by Geoff Garen.
19
20         https://bugs.webkit.org/show_bug.cgi?id=23715
21
22         Simplify MacroAssembler interface, by combining comparison methods.
23         Seprate operations are combined as follows:
24             jz32/jnz32/jzPtr/jnzPtr -> branchTest32/branchTestPtr,
25             j*(Add|Mul|Sub)32/j*(Add|Mul|Sub)Ptr -> branch(Add|Mul|Sub)32/branch(Add|Mul|Sub)Ptr
26             j*32/j*Ptr (all other two op combparisons) -> branch32/brnachPtr
27             set*32 -> set32
28
29         Also, represent the Scale of BaseIndex addresses as a plain enum (0,1,2,3),
30         instead of as multiplicands (1,2,4,8).
31
32         This patch singificantly reduces replication of code, and increases functionality supported
33         by the MacroAssembler.  No performance impact.
34
35         * assembler/MacroAssembler.h:
36         (JSC::MacroAssembler::):
37         (JSC::MacroAssembler::branchPtr):
38         (JSC::MacroAssembler::branchPtrWithPatch):
39         (JSC::MacroAssembler::branch32):
40         (JSC::MacroAssembler::branch16):
41         (JSC::MacroAssembler::branchTestPtr):
42         (JSC::MacroAssembler::branchTest32):
43         (JSC::MacroAssembler::branchAddPtr):
44         (JSC::MacroAssembler::branchAdd32):
45         (JSC::MacroAssembler::branchMul32):
46         (JSC::MacroAssembler::branchSubPtr):
47         (JSC::MacroAssembler::branchSub32):
48         (JSC::MacroAssembler::set32):
49         (JSC::MacroAssembler::setTest32):
50         * assembler/X86Assembler.h:
51         (JSC::X86Assembler::):
52         (JSC::X86Assembler::jccRel32):
53         (JSC::X86Assembler::setccOpcode):
54         (JSC::X86Assembler::cmpq_mr):
55         (JSC::X86Assembler::setcc_r):
56         (JSC::X86Assembler::sete_r):
57         (JSC::X86Assembler::setne_r):
58         (JSC::X86Assembler::jne):
59         (JSC::X86Assembler::je):
60         (JSC::X86Assembler::jl):
61         (JSC::X86Assembler::jb):
62         (JSC::X86Assembler::jle):
63         (JSC::X86Assembler::jbe):
64         (JSC::X86Assembler::jge):
65         (JSC::X86Assembler::jg):
66         (JSC::X86Assembler::ja):
67         (JSC::X86Assembler::jae):
68         (JSC::X86Assembler::jo):
69         (JSC::X86Assembler::jp):
70         (JSC::X86Assembler::js):
71         (JSC::X86Assembler::jcc):
72         (JSC::X86Assembler::X86InstructionFormatter::putModRmSib):
73         * jit/JIT.cpp:
74         (JSC::JIT::compileOpStrictEq):
75         (JSC::JIT::emitSlowScriptCheck):
76         (JSC::JIT::privateCompileMainPass):
77         (JSC::JIT::privateCompileSlowCases):
78         (JSC::JIT::privateCompile):
79         (JSC::JIT::privateCompileCTIMachineTrampolines):
80         * jit/JITArithmetic.cpp:
81         (JSC::JIT::compileFastArith_op_lshift):
82         (JSC::JIT::compileFastArith_op_mod):
83         (JSC::JIT::compileFastArith_op_post_inc):
84         (JSC::JIT::compileFastArith_op_post_dec):
85         (JSC::JIT::compileFastArith_op_pre_inc):
86         (JSC::JIT::compileFastArith_op_pre_dec):
87         (JSC::JIT::compileBinaryArithOp):
88         (JSC::JIT::compileFastArith_op_add):
89         (JSC::JIT::compileFastArith_op_mul):
90         * jit/JITCall.cpp:
91         (JSC::JIT::compileOpCall):
92         (JSC::JIT::compileOpCallSlowCase):
93         * jit/JITInlineMethods.h:
94         (JSC::JIT::checkStructure):
95         (JSC::JIT::emitJumpIfJSCell):
96         (JSC::JIT::emitJumpIfNotJSCell):
97         (JSC::JIT::emitJumpIfImmediateNumber):
98         (JSC::JIT::emitJumpIfNotImmediateNumber):
99         (JSC::JIT::emitJumpIfImmediateInteger):
100         (JSC::JIT::emitJumpIfNotImmediateInteger):
101         (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
102         * jit/JITPropertyAccess.cpp:
103         (JSC::JIT::compileGetByIdHotPath):
104         (JSC::JIT::compilePutByIdHotPath):
105         (JSC::JIT::privateCompilePutByIdTransition):
106         (JSC::JIT::privateCompilePatchGetArrayLength):
107         (JSC::JIT::privateCompileGetByIdProto):
108         (JSC::JIT::privateCompileGetByIdProtoList):
109         (JSC::JIT::privateCompileGetByIdChainList):
110         (JSC::JIT::privateCompileGetByIdChain):
111         * runtime/RegExp.cpp:
112         (JSC::RegExp::match):
113         * wrec/WRECGenerator.cpp:
114         (JSC::WREC::Generator::generateEnter):
115         (JSC::WREC::Generator::generateIncrementIndex):
116         (JSC::WREC::Generator::generateLoadCharacter):
117         (JSC::WREC::Generator::generateJumpIfNotEndOfInput):
118         (JSC::WREC::Generator::generateBackreferenceQuantifier):
119         (JSC::WREC::Generator::generateNonGreedyQuantifier):
120         (JSC::WREC::Generator::generateGreedyQuantifier):
121         (JSC::WREC::Generator::generatePatternCharacterPair):
122         (JSC::WREC::Generator::generatePatternCharacter):
123         (JSC::WREC::Generator::generateCharacterClassInvertedRange):
124         (JSC::WREC::Generator::generateCharacterClassInverted):
125         (JSC::WREC::Generator::generateAssertionBOL):
126         (JSC::WREC::Generator::generateAssertionEOL):
127         (JSC::WREC::Generator::generateAssertionWordBoundary):
128         (JSC::WREC::Generator::generateBackreference):
129
130 2009-02-03  David Hyatt  <hyatt@apple.com>
131
132         Fix a bug in Vector's shrinkCapacity method.  It did not properly copy elements into the inline buffer
133         when shrinking down from a size that was greater than the inline capacity.
134
135         Reviewed by Maciej
136
137         * wtf/Vector.h:
138         (WTF::VectorBuffer::VectorBuffer):
139         (WTF::VectorBuffer::allocateBuffer):
140
141 2009-02-03  Simon Hausmann  <simon.hausmann@nokia.com>
142
143         Reviewed by Tor Arne Vestbø.
144
145         Added accessor for JSByteArray storage.
146
147         * runtime/JSByteArray.h:
148         (JSC::JSByteArray::storage):
149
150 2009-02-03  Dmitry Titov  <dimich@chromium.org>
151
152         Reviewed by Alexey Proskuryakov.
153
154         https://bugs.webkit.org/show_bug.cgi?id=23560
155         Implement SharedTimer on WorkerRunLoop
156
157         * JavaScriptCore.exp:
158         Forgot to expose ThreadCondition::timedWait() in one of previous patches.
159
160 2009-02-02  Oliver Hunt  <oliver@apple.com>
161
162         Reviewed by Gavin Barraclough.
163
164         <https://bugs.webkit.org/show_bug.cgi?id=21414> REGRESSION: Regular Expressions and character classes, shorthands and ranges
165         <rdar://problem/6543487>
166
167         In certain circumstances when WREC::Generator::generateCharacterClassInvertedRange invokes
168         itself recursively, it will incorrectly emit (and thus consume) the next single character
169         match in the current character class.  As WREC uses a binary search this out of sequence
170         codegen could result in a character match being missed and so cause the regex to produce
171         incorrect results.
172
173         * wrec/WRECGenerator.cpp:
174         (JSC::WREC::Generator::generateCharacterClassInvertedRange):
175
176 2009-02-02  Darin Adler  <darin@apple.com>
177
178         Reviewed by Dave Hyatt.
179
180         Bug 23676: Speed up uses of reserveCapacity on new vectors by adding a new reserveInitialCapacity
181         https://bugs.webkit.org/show_bug.cgi?id=23676
182
183         * API/JSObjectRef.cpp:
184         (JSObjectCopyPropertyNames): Use reserveInitialCapacity.
185         * parser/Lexer.cpp:
186         (JSC::Lexer::Lexer): Ditto.
187         (JSC::Lexer::clear): Ditto.
188
189         * wtf/Vector.h: Added reserveInitialCapacity, a more efficient version of
190         reserveCapacity for use when the vector is brand new (still size 0 with no
191         capacity other than the inline capacity).
192
193 2009-01-30  Mark Rowe  <mrowe@apple.com>
194
195         Rubber-stamped by Oliver Hunt.
196
197         <rdar://problem/6391501> Enable the JIT on Mac OS X x86_64 as it passes all tests.
198
199         * wtf/Platform.h:
200
201 2009-01-30  Oliver Hunt  <oliver@apple.com>
202
203         Reviewed by Mark Rowe and Sam Weinig.
204
205         Finally fix load() to propagate exceptions correctly.
206
207         * jsc.cpp:
208         (functionLoad):
209
210 2009-01-30  David Levin  <levin@chromium.org>
211
212         Reviewed by Darin Adler.
213
214         https://bugs.webkit.org/show_bug.cgi?id=23618
215         Templated worker tasks should be more error proof to use.
216         Fix Chromium build.
217
218         * wtf/TypeTraits.h:
219         (WTF::IsConvertibleToInteger::IsConvertibleToDouble):
220         Avoid "possible loss of data" warning when using Microsoft's C++ compiler
221         by avoiding an implicit conversion of int types to doubles.
222
223 2009-01-30  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
224
225         Reviewed by Simon Hausmann.
226
227         Bug 23580: GNU mode RVCT compilation support
228         <https://bugs.webkit.org/show_bug.cgi?id=23580>
229
230         * pcre/pcre_exec.cpp: Use COMPILER(GCC) instead of __GNUC__.
231         * wtf/FastMalloc.cpp: Ditto.
232         (WTF::TCMallocStats::):
233         * wtf/Platform.h: Don't define COMPILER(GCC) with RVCT --gnu.
234
235 2009-01-30  David Levin  <levin@chromium.org>
236
237         Reviewed by Alexey Proskuryakov.
238
239         Bug 23618: Templated worker tasks should be more error proof to use
240         <https://bugs.webkit.org/show_bug.cgi?id=23618>
241
242         Add the type traits needed for the generic worker tasks
243         and compile asserts for them.
244
245         Add a summary header to the TypeTraits.h file to explain what is in there.
246
247         Add a note to explain IsPod's deficiencies.
248
249         * wtf/TypeTraits.h:
250
251 2009-01-30  David Levin  <levin@chromium.org>
252
253         Reviewed by Alexey Proskuryakov.
254
255         Bug 23616: Various "template helpers" should be consolidated from isolated files in JavaScriptCore.
256         <https://bugs.webkit.org/show_bug.cgi?id=23616>
257
258         * wtf/TypeTraits.h: Moved RemovePointer, IsPod, IsInteger to this file.
259
260         * wtf/OwnPtr.h: Use RemovePointer from TypeTraits.h.
261         * wtf/RetainPtr.h:  Ditto.
262
263         * wtf/HashTraits.h: Use IsInteger from TypeTraits.h.
264
265         * wtf/VectorTraits.h: Use IsPod from TypeTraits.h.
266
267         * GNUmakefile.am:
268         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
269         * JavaScriptCore.xcodeproj/project.pbxproj:
270         Added TypeTraits.h.
271
272 2009-01-29  Stephanie Lewis <slewis@apple.com>
273
274         RS by Oliver Hunt.
275
276         Update the order files.
277
278         * JavaScriptCore.order:
279
280 2009-01-29  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
281
282         Reviewed by Oliver Hunt.
283
284         Bug 23551: Crash on page load with profiler enabled and running
285         <https://bugs.webkit.org/show_bug.cgi?id=23551>
286         <rdar://problem/6529521>
287
288         Interpreter::execute(FunctionBodyNode*, ...) calls Profiler::didExecute()
289         with a stale CallFrame. If some part of the scope chain has already been
290         freed, Profiler::didExecute() will crash when attempting to get the lexical
291         global object. The fix is to make the didExecute() call use the caller's
292         CallFrame, not the one made for the function call. In this case, the
293         willExecute() call should also be changed to match.
294
295         Since this occurs in the actual inspector JS, it is difficult to reduce.
296         I couldn't make a layout test.
297
298         * interpreter/Interpreter.cpp:
299         (JSC::Interpreter::execute):
300
301 2009-01-28  Sam Weinig  <sam@webkit.org>
302
303         Reviewed by Gavin Barraclough.
304
305         Fix for <rdar://problem/6525537>
306         Hang occurs when closing Installer window (iTunes, Aperture)
307
308         * JavaScriptCore.exp: Export JSGlobalData::sharedInstance.
309
310 2009-01-28  Sam Weinig  <sam@webkit.org>
311
312         Reviewed by Geoff Garen.
313
314         Initial patch by Mark Rowe.
315
316         <rdar://problem/6519356>
317         REGRESSION (r36006): "out of memory" alert running dromaeo on Windows
318
319         Report the cost of the ArrayStorage vector more accurately/often.
320
321         * runtime/JSArray.cpp:
322         (JSC::JSArray::JSArray): Report the extra cost even for a filled array
323         because JSString using the single character optimization and immediates
324         wont increase the cost themselves. 
325         (JSC::JSArray::putSlowCase): Update the cost when increasing the size of
326         the array.
327         (JSC::JSArray::increaseVectorLength): Ditto.
328
329 2009-01-28  Sam Weinig  <sam@webkit.org>
330
331         Reviewed by Geoff Garen.
332
333         Fix for <rdar://problem/6129678>
334         REGRESSION (Safari 3-4): Local variable not accessible from Dashcode console or variables view
335
336         Iterating the properties of activation objects accessed through the WebKit debugging
337         APIs was broken by forced conversion of JSActivation to the global object. To fix this,
338         we use a proxy activation object that acts more like a normal JSObject.
339
340         * debugger/DebuggerActivation.cpp: Added.
341         (JSC::DebuggerActivation::DebuggerActivation):
342         (JSC::DebuggerActivation::mark):
343         (JSC::DebuggerActivation::className):
344         (JSC::DebuggerActivation::getOwnPropertySlot):
345         (JSC::DebuggerActivation::put):
346         (JSC::DebuggerActivation::putWithAttributes):
347         (JSC::DebuggerActivation::deleteProperty):
348         (JSC::DebuggerActivation::getPropertyNames):
349         (JSC::DebuggerActivation::getPropertyAttributes):
350         (JSC::DebuggerActivation::defineGetter):
351         (JSC::DebuggerActivation::defineSetter):
352         (JSC::DebuggerActivation::lookupGetter):
353         (JSC::DebuggerActivation::lookupSetter):
354         * debugger/DebuggerActivation.h: Added.
355         Proxy JSActivation object for Debugging.
356
357         * runtime/JSActivation.h:
358         (JSC::JSActivation::isActivationObject): Added.
359         * runtime/JSObject.h:
360         (JSC::JSObject::isActivationObject): Added.
361
362 2009-01-28  David Kilzer  <ddkilzer@apple.com>
363
364         Bug 23490: Remove initialRefCount argument from RefCounted class
365
366         <https://bugs.webkit.org/show_bug.cgi?id=23490>
367
368         Reviewed by Darin Adler.
369
370         RefCountedBase now always starts with a ref count of 1, so there
371         is no need to pass the initialRefCount into the class anymore.
372
373         * wtf/ByteArray.h:
374         (WTF::ByteArray::ByteArray): Removed call to RefCounted(1).
375         * wtf/RefCounted.h:
376         (WTF::RefCountedBase::RefCountedBase): Changed to start with a
377         ref count of 1.
378         (WTF::RefCounted::RefCounted): Removed initialRefCount argument
379         and removed call to RefCounted(1).
380
381 2009-01-26  Adele Peterson  <adele@apple.com>
382
383         Build fix.  
384
385         * debugger/Debugger.cpp:
386
387 2009-01-26  Gavin Barraclough  <barraclough@apple.com>
388
389         Reviewed by Darin Adler.
390
391         Fixes for eq null & neq null, on 64-bit JIT.
392         https://bugs.webkit.org/show_bug.cgi?id=23559
393
394         This patch degrades 64-bit JIT performance on some benchmarks,
395         due to the whole not-being-incorrect thing.
396
397         * jit/JIT.cpp:
398         (JSC::JIT::privateCompileMainPass):
399
400 2009-01-26  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
401
402         Reviewed by Gavin Barraclough.
403
404         Bug 23552: Dashcode evaluator no longer works after making ExecStates actual call frames
405         <https://bugs.webkit.org/show_bug.cgi?id=23552>
406         <rdar://problem/6398839>
407
408         * JavaScriptCore.exp:
409         * debugger/Debugger.cpp:
410         (JSC::evaluateInGlobalCallFrame): Added so that WebScriptCallFrame can
411         evaluate JS starting from a global call frame.
412         * debugger/Debugger.h:
413
414 2009-01-25  Mark Rowe  <mrowe@apple.com>
415
416         Rubber-stamped by Dan Bernstein.
417
418         Improve the consistency of settings in our .xcconfig files.
419
420         * Configurations/Base.xcconfig: Enable GCC_OBJC_CALL_CXX_CDTORS to match other projects.
421
422 2009-01-25  Darin Adler  <darin@apple.com>
423
424         Reviewed by Mark Rowe.
425
426         Bug 23352: Turn on more compiler warnings in the Mac build
427         https://bugs.webkit.org/show_bug.cgi?id=23352
428
429         Turn on the following warnings:
430
431             -Wcast-qual
432             -Wextra-tokens
433             -Wformat=2
434             -Winit-self
435             -Wmissing-noreturn
436             -Wpacked
437             -Wrendundant-decls
438
439         * Configurations/Base.xcconfig: Added the new warnings. Switched to -Wextra instead of
440         -W for clarity since we don't have to support the older versions of gcc that require the
441         old -W syntax. Since we now use -Wformat=2, removed -Wformat-security. Also removed
442         -Wno-format-y2k since we can have that one on now.
443
444 2009-01-25  Judit Jasz  <jasy@inf.u-szeged.hu>
445
446         Reviewed by Darin Adler.
447         
448         Compilation problem fixing 
449         http://bugs.webkit.org/show_bug.cgi?id=23497
450
451         * jit/JITCall.cpp:
452         (JSC::JIT::compileOpCall): Use JSValuePtr::encode.
453
454 2009-01-25  Darin Adler  <darin@apple.com>
455
456         Reviewed by Sam Weinig.
457
458         Bug 23352: Turn on more compiler warnings in the Mac build
459         https://bugs.webkit.org/show_bug.cgi?id=23352
460
461         Fourth patch: Deal with the last few stray warnings.
462
463         * parser/Parser.cpp: Only declare jscyyparse if it's not already declared.
464         This makes both separate compilation and all-in-one compilation work with the
465         -Wredundant-decls warning.
466
467 2009-01-25  Darin Adler  <darin@apple.com>
468
469         Reviewed by Sam Weinig.
470
471         Bug 23352: Turn on more compiler warnings in the Mac build
472         https://bugs.webkit.org/show_bug.cgi?id=23352
473
474         Third patch: Use the noreturn attribute on functions that don't
475         return to prepare for the use of the -Wmissing-noreturn warning.
476
477         * jit/JITCall.cpp:
478         (JSC::unreachable): Added NO_RETURN.
479         * jsc.cpp:
480         (functionQuit): Ditto.
481         (printUsageStatement): Ditto.
482         * wtf/AlwaysInline.h: Added definition of NO_RETURN.
483
484 2009-01-24  Oliver Hunt  <oliver@apple.com>
485
486         Reviewed by Maciej Stachowiak.
487
488         Force inlining of Lexer::matchPunctuator
489
490         2.2% win when parsing jQuery, Mootools, Prototype, etc
491
492         * parser/Lexer.h:
493
494 2009-01-23  Gavin Barraclough  <barraclough@apple.com>
495
496         Reviewed by Geoff Garen.
497
498         Fix for <rdar://problem/6126212>
499         Ensure that callbacks out from the JSC interface are only allowed
500         to return in reverse-chronological order to that in which they were
501         made.  If we allow earlier callbacks to return first, then this may
502         result in setions of the RegisterFile in use by another thread
503         being trampled.
504
505         See uber-comment in JSLock.h for details.
506
507         * runtime/JSLock.cpp:
508         (JSC::JSLock::DropAllLocks::DropAllLocks):
509         (JSC::JSLock::DropAllLocks::~DropAllLocks):
510
511 2009-01-23  Darin Adler  <darin@apple.com>
512
513         Try to fix WX build.
514
515         * runtime/JSGlobalObjectFunctions.h: Include <wtf/unicode/Unicode.h>
516         for the definition of UChar.
517
518 2009-01-23  Anders Carlsson  <andersca@apple.com>
519
520         * Configurations/Base.xcconfig:
521         GCC 4.0 build fix.
522         
523         * runtime/JSNumberCell.h:
524         64-bit build fix.
525
526 2009-01-23  Anders Carlsson  <andersca@apple.com>
527
528         Reviewed by Sam Weinig.
529         
530         Turn on -Wmissing-prototypes and fix the warnings.
531         
532         * API/JSClassRef.cpp:
533         (clearReferenceToPrototype):
534         * Configurations/Base.xcconfig:
535         * runtime/Collector.cpp:
536         (JSC::getPlatformThreadRegisters):
537         * runtime/ExceptionHelpers.cpp:
538         (JSC::createError):
539         * runtime/JSGlobalObjectFunctions.h:
540         * runtime/JSNumberCell.h:
541         * runtime/UString.cpp:
542         (JSC::initializeStaticBaseString):
543         (JSC::createRep):
544         * wtf/FastMalloc.cpp:
545         * wtf/Threading.cpp:
546
547 2009-01-22  Mark Rowe  <mrowe@apple.com>
548
549         Rubber-stamped by Anders Carlsson.
550
551         Disable GCC_WARN_ABOUT_MISSING_PROTOTYPES temporarily.
552
553         Current versions of Xcode only respect it for C and Objective-C files,
554         and our code doesn't currently compile if it is applied to C++ and
555         Objective-C++ files.
556
557         * Configurations/Base.xcconfig:
558
559 2009-01-22  Steve Falkenburg  <sfalken@apple.com>
560
561         https://bugs.webkit.org/show_bug.cgi?id=23489
562         
563         Return currentTime() in correct units for the two early return cases.
564
565         Reviewed by Mark Rowe.
566
567         * wtf/CurrentTime.cpp:
568         (WTF::currentTime):
569
570 2009-01-22  Sam Weinig  <sam@webkit.org>
571
572         Reviewed by Mark Rowe.
573
574         Fix for <rdar://problem/6439247>
575         FastMalloc allocating an extra 4MB of meta-data on 64-bit
576
577         Rely on the fact that on all known x86-64 platforms only use 48 bits of
578         address space to shrink the initial size of the PageMap from ~4MB to 120K.
579         For 64-bit we still use a 3-level radix tree, but now each level is only 12
580         bits wide.
581
582         No performance change.
583
584         * wtf/FastMalloc.cpp:
585         (WTF::MapSelector): Add specialization for 64 bit that takes into account the
586         16 bits of unused address space on x86-64.
587
588 2009-01-22  Beth Dakin  <bdakin@apple.com>
589
590         Reviewed by Sam Weinig.
591
592         Fix for https://bugs.webkit.org/show_bug.cgi?id=23461 LayoutTests/
593         fast/js/numeric-conversion.html is broken, and corresponding 
594         <rdar://problem/6514842>
595
596         The basic problem here is that parseInt(Infinity) should be NaN, 
597         but we were returning 0. NaN matches Safari 3.2.1 and Firefox.
598
599         * runtime/JSGlobalObjectFunctions.cpp:
600         (JSC::globalFuncParseInt):
601
602 2009-01-22  Oliver Hunt  <oliver@apple.com>
603
604         Reviewed by Geoff Garen.
605
606         <rdar://problem/6516853> (r39682-r39736) JSFunFuzz: crash on "(function(){({ x2: x }), })()"
607         <https://bugs.webkit.org/show_bug.cgi?id=23479>
608
609         Automatic semicolon insertion was resulting in this being accepted in the initial
610         nodeless parsing, but subsequent reparsing for code generation would fail, leading
611         to a crash.  The solution is to ensure that reparsing a function performs parsing
612         in the same state as the initial parse.  We do this by modifying the saved source
613         ranges to include rather than exclude the opening and closing braces.
614
615         * bytecode/CodeBlock.cpp:
616         (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): add an assertion for successful recompile
617         * parser/Lexer.h:
618         (JSC::Lexer::sourceCode): include rather than exclude braces.
619         * parser/Nodes.h:
620         (JSC::FunctionBodyNode::toSourceString):  No need to append braces anymore.
621
622 2009-01-22  Dmitry Titov  <dimich@chromium.org>
623
624         Reviewed by Alexey Proskuryakov.
625
626         https://bugs.webkit.org/show_bug.cgi?id=23373
627
628         Implement ThreadCondition::timedWait().
629         Since we borrow the code for condition variables from other sources,
630         I did the same for timedWait(). See comments in ThreadingWin.cpp for
631         rationale and more info.
632
633         * wtf/CONTRIBUTORS.pthreads-win32: 
634         Added. A list of Pthreads-win32 contributors mentioned in their license. The license itself
635         is included into wtf/ThreadingWin32.cpp.
636
637         * wtf/Threading.h:
638         * wtf/ThreadingWin.cpp:
639         Additional info and Pthreads-win32 license at the beginning.
640         (WTF::PlatformCondition::timedWait): new method, derived from Pthreads-win32.
641         (WTF::PlatformCondition::signal): same
642         (WTF::ThreadCondition::ThreadCondition):
643         (WTF::ThreadCondition::~ThreadCondition):
644         (WTF::ThreadCondition::wait): this now calls PlatformCondition::timedWait.
645         (WTF::ThreadCondition::timedWait): same
646         (WTF::ThreadCondition::signal): this now calls PlatformCondition::signal.
647         (WTF::ThreadCondition::broadcast): same
648
649 2009-01-21  Gavin Barraclough  <barraclough@apple.com>
650
651         Reviewed by Oliver Hunt.
652
653         Fix for https://bugs.webkit.org/show_bug.cgi?id=23469.
654
655         We need to check all numbers in integer switches, not just those
656         represented as integer JSImmediates.
657
658         * interpreter/Interpreter.cpp:
659         (JSC::Interpreter::privateExecute):
660         (JSC::Interpreter::cti_op_switch_imm):
661
662 2009-01-21  Gavin Barraclough  <barraclough@apple.com>
663
664         Reviewed by Geoff Garen.
665
666         Fix for https://bugs.webkit.org/show_bug.cgi?id=23468.
667
668         * interpreter/Interpreter.cpp:
669         (JSC::Interpreter::privateExecute):
670
671 2009-01-21  Alexey Proskuryakov  <ap@webkit.org>
672
673         Suggested by Oliver Hunt. Reviewed by Oliver Hunt.
674
675         https://bugs.webkit.org/show_bug.cgi?id=23456
676         Function argument names leak
677
678         * parser/Nodes.cpp: (JSC::FunctionBodyNode::~FunctionBodyNode): Destruct parameter names.
679
680 2009-01-20  Oliver Hunt  <oliver@apple.com>
681
682         Reviewed by NOBODY (Build fix).
683
684         Windows build fix
685
686         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
687
688 2009-01-20  Gavin Barraclough  <barraclough@apple.com>
689
690         Reviewed by Mark Rowe.
691
692         Structure property table deleted offset maps are being leaked.
693         Probably shouldn't be doing that.
694
695         https://bugs.webkit.org/show_bug.cgi?id=23442
696
697         * runtime/Structure.cpp:
698         (JSC::Structure::~Structure):
699
700 2009-01-20  Oliver Hunt  <oliver@apple.com>
701
702         Reviewed by NOBODY (build fix).
703
704         Attempt to fix gtk build
705
706         * GNUmakefile.am:
707
708 2009-01-20  Darin Adler  <darin@apple.com>
709
710         * runtime/StringPrototype.cpp:
711         (JSC::substituteBackreferences): Add back the initialization to fix the build.
712
713 2009-01-20  Darin Adler  <darin@apple.com>
714
715         Reviewed by Mark Rowe.
716
717         Bug 23352: Turn on more compiler warnings in the Mac build
718         https://bugs.webkit.org/show_bug.cgi?id=23352
719
720         First patch: Fix some simple cases of various warnings.
721
722         * pcre/pcre_compile.cpp:
723         (jsRegExpCompile): Use const_cast to change const-ness.
724
725         * runtime/StringPrototype.cpp:
726         (JSC::substituteBackreferences): Remove unneeded initialization and
727         use UChar instead of unsigned short for UTF-16 values.
728
729         * wtf/dtoa.cpp:
730         (WTF::strtod): Use const_cast to change const-ness.
731
732 2009-01-20  Oliver Hunt  <oliver@apple.com>
733
734         Reviewed by NOBODY (build fix).
735
736         Whoops, remove runtime/ByteArray references from .pri and .scons builds, update .bkl
737
738         * JavaScriptCore.pri:
739         * JavaScriptCore.scons:
740         * JavaScriptCoreSources.bkl:
741
742 2009-01-20  Oliver Hunt  <oliver@apple.com>
743
744         RS=Dan Bernstein.
745
746         Move runtime/ByteArray to wtf/ByteArray
747
748         * GNUmakefile.am:
749         * JavaScriptCore.exp:
750         * JavaScriptCore.pri:
751         * JavaScriptCore.scons:
752         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
753         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
754         * JavaScriptCore.xcodeproj/project.pbxproj:
755         * runtime/JSByteArray.cpp:
756         * runtime/JSByteArray.h:
757         * wtf/ByteArray.cpp: Renamed from JavaScriptCore/runtime/ByteArray.cpp.
758         (WTF::ByteArray::create):
759         * wtf/ByteArray.h: Renamed from JavaScriptCore/runtime/ByteArray.h.
760         (WTF::ByteArray::length):
761         (WTF::ByteArray::set):
762         (WTF::ByteArray::get):
763         (WTF::ByteArray::data):
764         (WTF::ByteArray::deref):
765         (WTF::ByteArray::ByteArray):
766
767 2009-01-19  Sam Weinig  <sam@webkit.org>
768
769         Rubber-stamped by Gavin Barraclough.
770
771         Remove temporary operator-> from JSValuePtr.
772
773         * API/JSCallbackFunction.cpp:
774         (JSC::JSCallbackFunction::call):
775         * API/JSCallbackObjectFunctions.h:
776         (JSC::::call):
777         (JSC::::toNumber):
778         (JSC::::toString):
779         * API/JSObjectRef.cpp:
780         (JSObjectSetPrototype):
781         * API/JSValueRef.cpp:
782         (JSValueGetType):
783         (JSValueIsUndefined):
784         (JSValueIsNull):
785         (JSValueIsBoolean):
786         (JSValueIsNumber):
787         (JSValueIsString):
788         (JSValueIsObject):
789         (JSValueIsObjectOfClass):
790         (JSValueToBoolean):
791         (JSValueToNumber):
792         (JSValueToStringCopy):
793         (JSValueToObject):
794         * bytecode/CodeBlock.cpp:
795         (JSC::valueToSourceString):
796         (JSC::CodeBlock::mark):
797         * bytecode/CodeBlock.h:
798         (JSC::CodeBlock::isKnownNotImmediate):
799         * bytecompiler/BytecodeGenerator.cpp:
800         (JSC::BytecodeGenerator::emitEqualityOp):
801         (JSC::keyForImmediateSwitch):
802         * interpreter/Interpreter.cpp:
803         (JSC::jsLess):
804         (JSC::jsLessEq):
805         (JSC::jsAddSlowCase):
806         (JSC::jsAdd):
807         (JSC::jsTypeStringForValue):
808         (JSC::jsIsObjectType):
809         (JSC::jsIsFunctionType):
810         (JSC::isNotObject):
811         (JSC::Interpreter::callEval):
812         (JSC::Interpreter::throwException):
813         (JSC::cachePrototypeChain):
814         (JSC::Interpreter::tryCachePutByID):
815         (JSC::countPrototypeChainEntriesAndCheckForProxies):
816         (JSC::Interpreter::tryCacheGetByID):
817         (JSC::Interpreter::privateExecute):
818         (JSC::Interpreter::tryCTICachePutByID):
819         (JSC::Interpreter::tryCTICacheGetByID):
820         (JSC::Interpreter::cti_op_convert_this):
821         (JSC::Interpreter::cti_op_add):
822         (JSC::Interpreter::cti_op_pre_inc):
823         (JSC::Interpreter::cti_op_put_by_id_generic):
824         (JSC::Interpreter::cti_op_get_by_id_generic):
825         (JSC::Interpreter::cti_op_put_by_id):
826         (JSC::Interpreter::cti_op_put_by_id_second):
827         (JSC::Interpreter::cti_op_put_by_id_fail):
828         (JSC::Interpreter::cti_op_get_by_id):
829         (JSC::Interpreter::cti_op_get_by_id_second):
830         (JSC::Interpreter::cti_op_get_by_id_self_fail):
831         (JSC::Interpreter::cti_op_get_by_id_proto_list):
832         (JSC::Interpreter::cti_op_get_by_id_proto_list_full):
833         (JSC::Interpreter::cti_op_get_by_id_proto_fail):
834         (JSC::Interpreter::cti_op_get_by_id_array_fail):
835         (JSC::Interpreter::cti_op_get_by_id_string_fail):
836         (JSC::Interpreter::cti_op_instanceof):
837         (JSC::Interpreter::cti_op_del_by_id):
838         (JSC::Interpreter::cti_op_mul):
839         (JSC::Interpreter::cti_op_call_JSFunction):
840         (JSC::Interpreter::cti_op_call_NotJSFunction):
841         (JSC::Interpreter::cti_op_construct_JSConstruct):
842         (JSC::Interpreter::cti_op_construct_NotJSConstruct):
843         (JSC::Interpreter::cti_op_get_by_val):
844         (JSC::Interpreter::cti_op_get_by_val_byte_array):
845         (JSC::Interpreter::cti_op_sub):
846         (JSC::Interpreter::cti_op_put_by_val):
847         (JSC::Interpreter::cti_op_put_by_val_array):
848         (JSC::Interpreter::cti_op_put_by_val_byte_array):
849         (JSC::Interpreter::cti_op_loop_if_true):
850         (JSC::Interpreter::cti_op_negate):
851         (JSC::Interpreter::cti_op_div):
852         (JSC::Interpreter::cti_op_pre_dec):
853         (JSC::Interpreter::cti_op_not):
854         (JSC::Interpreter::cti_op_jtrue):
855         (JSC::Interpreter::cti_op_post_inc):
856         (JSC::Interpreter::cti_op_lshift):
857         (JSC::Interpreter::cti_op_bitand):
858         (JSC::Interpreter::cti_op_rshift):
859         (JSC::Interpreter::cti_op_bitnot):
860         (JSC::Interpreter::cti_op_mod):
861         (JSC::Interpreter::cti_op_post_dec):
862         (JSC::Interpreter::cti_op_urshift):
863         (JSC::Interpreter::cti_op_bitxor):
864         (JSC::Interpreter::cti_op_bitor):
865         (JSC::Interpreter::cti_op_push_scope):
866         (JSC::Interpreter::cti_op_is_undefined):
867         (JSC::Interpreter::cti_op_is_boolean):
868         (JSC::Interpreter::cti_op_is_number):
869         (JSC::Interpreter::cti_op_to_jsnumber):
870         (JSC::Interpreter::cti_op_in):
871         (JSC::Interpreter::cti_op_put_by_index):
872         (JSC::Interpreter::cti_op_switch_imm):
873         (JSC::Interpreter::cti_op_switch_char):
874         (JSC::Interpreter::cti_op_switch_string):
875         (JSC::Interpreter::cti_op_del_by_val):
876         (JSC::Interpreter::cti_op_put_getter):
877         (JSC::Interpreter::cti_op_put_setter):
878         (JSC::Interpreter::cti_op_new_error):
879         * interpreter/Interpreter.h:
880         (JSC::Interpreter::isJSArray):
881         (JSC::Interpreter::isJSString):
882         (JSC::Interpreter::isJSByteArray):
883         * interpreter/Register.h:
884         (JSC::Register::marked):
885         (JSC::Register::mark):
886         * jit/JITInlineMethods.h:
887         (JSC::JIT::getConstantOperandImmediateInt):
888         (JSC::JIT::isOperandConstantImmediateInt):
889         * jsc.cpp:
890         (functionPrint):
891         (functionDebug):
892         (functionRun):
893         (functionLoad):
894         (runWithScripts):
895         (runInteractive):
896         * parser/Nodes.cpp:
897         (JSC::processClauseList):
898         * profiler/ProfileGenerator.cpp:
899         (JSC::ProfileGenerator::addParentForConsoleStart):
900         * profiler/Profiler.cpp:
901         (JSC::Profiler::createCallIdentifier):
902         * runtime/ArrayConstructor.cpp:
903         (JSC::constructArrayWithSizeQuirk):
904         * runtime/ArrayPrototype.cpp:
905         (JSC::arrayProtoFuncToString):
906         (JSC::arrayProtoFuncToLocaleString):
907         (JSC::arrayProtoFuncJoin):
908         (JSC::arrayProtoFuncConcat):
909         (JSC::arrayProtoFuncPop):
910         (JSC::arrayProtoFuncPush):
911         (JSC::arrayProtoFuncReverse):
912         (JSC::arrayProtoFuncShift):
913         (JSC::arrayProtoFuncSlice):
914         (JSC::arrayProtoFuncSort):
915         (JSC::arrayProtoFuncSplice):
916         (JSC::arrayProtoFuncUnShift):
917         (JSC::arrayProtoFuncFilter):
918         (JSC::arrayProtoFuncMap):
919         (JSC::arrayProtoFuncEvery):
920         (JSC::arrayProtoFuncForEach):
921         (JSC::arrayProtoFuncSome):
922         (JSC::arrayProtoFuncIndexOf):
923         (JSC::arrayProtoFuncLastIndexOf):
924         * runtime/BooleanConstructor.cpp:
925         (JSC::constructBoolean):
926         (JSC::callBooleanConstructor):
927         * runtime/BooleanPrototype.cpp:
928         (JSC::booleanProtoFuncToString):
929         (JSC::booleanProtoFuncValueOf):
930         * runtime/Collector.cpp:
931         (JSC::Heap::protect):
932         (JSC::Heap::unprotect):
933         (JSC::Heap::heap):
934         (JSC::Heap::collect):
935         (JSC::typeName):
936         * runtime/Completion.cpp:
937         (JSC::evaluate):
938         * runtime/DateConstructor.cpp:
939         (JSC::constructDate):
940         (JSC::dateParse):
941         (JSC::dateUTC):
942         * runtime/DateInstance.h:
943         (JSC::DateInstance::internalNumber):
944         * runtime/DatePrototype.cpp:
945         (JSC::formatLocaleDate):
946         (JSC::fillStructuresUsingTimeArgs):
947         (JSC::fillStructuresUsingDateArgs):
948         (JSC::dateProtoFuncToString):
949         (JSC::dateProtoFuncToUTCString):
950         (JSC::dateProtoFuncToDateString):
951         (JSC::dateProtoFuncToTimeString):
952         (JSC::dateProtoFuncToLocaleString):
953         (JSC::dateProtoFuncToLocaleDateString):
954         (JSC::dateProtoFuncToLocaleTimeString):
955         (JSC::dateProtoFuncGetTime):
956         (JSC::dateProtoFuncGetFullYear):
957         (JSC::dateProtoFuncGetUTCFullYear):
958         (JSC::dateProtoFuncToGMTString):
959         (JSC::dateProtoFuncGetMonth):
960         (JSC::dateProtoFuncGetUTCMonth):
961         (JSC::dateProtoFuncGetDate):
962         (JSC::dateProtoFuncGetUTCDate):
963         (JSC::dateProtoFuncGetDay):
964         (JSC::dateProtoFuncGetUTCDay):
965         (JSC::dateProtoFuncGetHours):
966         (JSC::dateProtoFuncGetUTCHours):
967         (JSC::dateProtoFuncGetMinutes):
968         (JSC::dateProtoFuncGetUTCMinutes):
969         (JSC::dateProtoFuncGetSeconds):
970         (JSC::dateProtoFuncGetUTCSeconds):
971         (JSC::dateProtoFuncGetMilliSeconds):
972         (JSC::dateProtoFuncGetUTCMilliseconds):
973         (JSC::dateProtoFuncGetTimezoneOffset):
974         (JSC::dateProtoFuncSetTime):
975         (JSC::setNewValueFromTimeArgs):
976         (JSC::setNewValueFromDateArgs):
977         (JSC::dateProtoFuncSetYear):
978         (JSC::dateProtoFuncGetYear):
979         * runtime/ErrorConstructor.cpp:
980         (JSC::constructError):
981         * runtime/ErrorPrototype.cpp:
982         (JSC::errorProtoFuncToString):
983         * runtime/ExceptionHelpers.cpp:
984         (JSC::createError):
985         (JSC::createErrorMessage):
986         * runtime/FunctionConstructor.cpp:
987         (JSC::constructFunction):
988         * runtime/FunctionPrototype.cpp:
989         (JSC::functionProtoFuncToString):
990         (JSC::functionProtoFuncApply):
991         (JSC::functionProtoFuncCall):
992         * runtime/GetterSetter.cpp:
993         (JSC::GetterSetter::toObject):
994         * runtime/JSActivation.cpp:
995         (JSC::JSActivation::getOwnPropertySlot):
996         * runtime/JSArray.cpp:
997         (JSC::JSArray::put):
998         (JSC::JSArray::mark):
999         (JSC::JSArray::sort):
1000         (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key):
1001         (JSC::JSArray::compactForSorting):
1002         * runtime/JSByteArray.h:
1003         (JSC::JSByteArray::setIndex):
1004         * runtime/JSCell.h:
1005         (JSC::asCell):
1006         * runtime/JSFunction.cpp:
1007         (JSC::JSFunction::call):
1008         (JSC::JSFunction::construct):
1009         * runtime/JSGlobalObject.cpp:
1010         (JSC::markIfNeeded):
1011         (JSC::lastInPrototypeChain):
1012         * runtime/JSGlobalObjectFunctions.cpp:
1013         (JSC::encode):
1014         (JSC::decode):
1015         (JSC::globalFuncEval):
1016         (JSC::globalFuncParseInt):
1017         (JSC::globalFuncParseFloat):
1018         (JSC::globalFuncIsNaN):
1019         (JSC::globalFuncIsFinite):
1020         (JSC::globalFuncEscape):
1021         (JSC::globalFuncUnescape):
1022         (JSC::globalFuncJSCPrint):
1023         * runtime/JSImmediate.cpp:
1024         (JSC::JSImmediate::toThisObject):
1025         (JSC::JSImmediate::toObject):
1026         (JSC::JSImmediate::prototype):
1027         (JSC::JSImmediate::toString):
1028         * runtime/JSImmediate.h:
1029         * runtime/JSObject.cpp:
1030         (JSC::JSObject::mark):
1031         (JSC::JSObject::put):
1032         (JSC::callDefaultValueFunction):
1033         (JSC::JSObject::getPrimitiveNumber):
1034         (JSC::JSObject::defineGetter):
1035         (JSC::JSObject::defineSetter):
1036         (JSC::JSObject::lookupGetter):
1037         (JSC::JSObject::lookupSetter):
1038         (JSC::JSObject::hasInstance):
1039         (JSC::JSObject::toNumber):
1040         (JSC::JSObject::toString):
1041         * runtime/JSObject.h:
1042         (JSC::JSObject::JSObject):
1043         (JSC::JSObject::inlineGetOwnPropertySlot):
1044         (JSC::JSObject::getOwnPropertySlotForWrite):
1045         (JSC::JSObject::getPropertySlot):
1046         (JSC::JSValuePtr::get):
1047         * runtime/JSPropertyNameIterator.h:
1048         (JSC::JSPropertyNameIterator::create):
1049         * runtime/JSString.cpp:
1050         (JSC::JSString::getOwnPropertySlot):
1051         * runtime/JSValue.h:
1052         * runtime/JSWrapperObject.cpp:
1053         (JSC::JSWrapperObject::mark):
1054         * runtime/JSWrapperObject.h:
1055         (JSC::JSWrapperObject::setInternalValue):
1056         * runtime/MathObject.cpp:
1057         (JSC::mathProtoFuncAbs):
1058         (JSC::mathProtoFuncACos):
1059         (JSC::mathProtoFuncASin):
1060         (JSC::mathProtoFuncATan):
1061         (JSC::mathProtoFuncATan2):
1062         (JSC::mathProtoFuncCeil):
1063         (JSC::mathProtoFuncCos):
1064         (JSC::mathProtoFuncExp):
1065         (JSC::mathProtoFuncFloor):
1066         (JSC::mathProtoFuncLog):
1067         (JSC::mathProtoFuncMax):
1068         (JSC::mathProtoFuncMin):
1069         (JSC::mathProtoFuncPow):
1070         (JSC::mathProtoFuncRound):
1071         (JSC::mathProtoFuncSin):
1072         (JSC::mathProtoFuncSqrt):
1073         (JSC::mathProtoFuncTan):
1074         * runtime/NativeErrorConstructor.cpp:
1075         (JSC::NativeErrorConstructor::NativeErrorConstructor):
1076         (JSC::NativeErrorConstructor::construct):
1077         * runtime/NumberConstructor.cpp:
1078         (JSC::constructWithNumberConstructor):
1079         (JSC::callNumberConstructor):
1080         * runtime/NumberPrototype.cpp:
1081         (JSC::numberProtoFuncToString):
1082         (JSC::numberProtoFuncToLocaleString):
1083         (JSC::numberProtoFuncValueOf):
1084         (JSC::numberProtoFuncToFixed):
1085         (JSC::numberProtoFuncToExponential):
1086         (JSC::numberProtoFuncToPrecision):
1087         * runtime/ObjectConstructor.cpp:
1088         (JSC::constructObject):
1089         * runtime/ObjectPrototype.cpp:
1090         (JSC::objectProtoFuncValueOf):
1091         (JSC::objectProtoFuncHasOwnProperty):
1092         (JSC::objectProtoFuncIsPrototypeOf):
1093         (JSC::objectProtoFuncDefineGetter):
1094         (JSC::objectProtoFuncDefineSetter):
1095         (JSC::objectProtoFuncLookupGetter):
1096         (JSC::objectProtoFuncLookupSetter):
1097         (JSC::objectProtoFuncPropertyIsEnumerable):
1098         (JSC::objectProtoFuncToLocaleString):
1099         (JSC::objectProtoFuncToString):
1100         * runtime/Operations.h:
1101         (JSC::JSValuePtr::equalSlowCaseInline):
1102         (JSC::JSValuePtr::strictEqual):
1103         (JSC::JSValuePtr::strictEqualSlowCaseInline):
1104         * runtime/Protect.h:
1105         (JSC::gcProtect):
1106         (JSC::gcUnprotect):
1107         * runtime/RegExpConstructor.cpp:
1108         (JSC::setRegExpConstructorInput):
1109         (JSC::setRegExpConstructorMultiline):
1110         (JSC::constructRegExp):
1111         * runtime/RegExpObject.cpp:
1112         (JSC::setRegExpObjectLastIndex):
1113         (JSC::RegExpObject::match):
1114         * runtime/RegExpPrototype.cpp:
1115         (JSC::regExpProtoFuncTest):
1116         (JSC::regExpProtoFuncExec):
1117         (JSC::regExpProtoFuncCompile):
1118         (JSC::regExpProtoFuncToString):
1119         * runtime/StringConstructor.cpp:
1120         (JSC::stringFromCharCodeSlowCase):
1121         (JSC::stringFromCharCode):
1122         (JSC::constructWithStringConstructor):
1123         (JSC::callStringConstructor):
1124         * runtime/StringPrototype.cpp:
1125         (JSC::stringProtoFuncReplace):
1126         (JSC::stringProtoFuncToString):
1127         (JSC::stringProtoFuncCharAt):
1128         (JSC::stringProtoFuncCharCodeAt):
1129         (JSC::stringProtoFuncConcat):
1130         (JSC::stringProtoFuncIndexOf):
1131         (JSC::stringProtoFuncLastIndexOf):
1132         (JSC::stringProtoFuncMatch):
1133         (JSC::stringProtoFuncSearch):
1134         (JSC::stringProtoFuncSlice):
1135         (JSC::stringProtoFuncSplit):
1136         (JSC::stringProtoFuncSubstr):
1137         (JSC::stringProtoFuncSubstring):
1138         (JSC::stringProtoFuncToLowerCase):
1139         (JSC::stringProtoFuncToUpperCase):
1140         (JSC::stringProtoFuncLocaleCompare):
1141         (JSC::stringProtoFuncBig):
1142         (JSC::stringProtoFuncSmall):
1143         (JSC::stringProtoFuncBlink):
1144         (JSC::stringProtoFuncBold):
1145         (JSC::stringProtoFuncFixed):
1146         (JSC::stringProtoFuncItalics):
1147         (JSC::stringProtoFuncStrike):
1148         (JSC::stringProtoFuncSub):
1149         (JSC::stringProtoFuncSup):
1150         (JSC::stringProtoFuncFontcolor):
1151         (JSC::stringProtoFuncFontsize):
1152         (JSC::stringProtoFuncAnchor):
1153         (JSC::stringProtoFuncLink):
1154         * runtime/Structure.cpp:
1155         (JSC::Structure::Structure):
1156         (JSC::Structure::getEnumerablePropertyNames):
1157         (JSC::Structure::createCachedPrototypeChain):
1158         * runtime/Structure.h:
1159         (JSC::Structure::mark):
1160         * runtime/StructureChain.cpp:
1161         (JSC::StructureChain::StructureChain):
1162
1163 2009-01-19  Darin Adler  <darin@apple.com>
1164
1165         Reviewed by Sam Weinig.
1166
1167         Bug 23409: REGRESSION: RegExp 'replace()' function improperly processes '$$'
1168         <https://bugs.webkit.org/show_bug.cgi?id=23409>
1169         <rdar://problem/6505723>
1170
1171         Test: fast/js/string-replace-3.html
1172
1173         * runtime/StringPrototype.cpp:
1174         (JSC::substituteBackreferences): Remove code that adds an extra $ -- not sure
1175         how this ever worked.
1176
1177 2009-01-16  Gavin Barraclough  <barraclough@apple.com>
1178
1179         Reviewed by Oliver Hunt.
1180
1181         On x86-64 jit, cache JSImmedate::TagMask & JSImmedate::TagTypeNumber in
1182         registers, save reloading them every time they're used.
1183
1184         Draws x86-64 jit performance close to that of i386 jit.
1185
1186         * assembler/MacroAssembler.h:
1187         (JSC::MacroAssembler::subPtr):
1188         (JSC::MacroAssembler::jnzPtr):
1189         (JSC::MacroAssembler::jzPtr):
1190         * jit/JIT.cpp:
1191         (JSC::JIT::privateCompileMainPass):
1192         * jit/JIT.h:
1193         * jit/JITArithmetic.cpp:
1194         (JSC::JIT::compileBinaryArithOpSlowCase):
1195         * jit/JITInlineMethods.h:
1196         (JSC::JIT::emitJumpIfJSCell):
1197         (JSC::JIT::emitJumpIfNotJSCell):
1198         (JSC::JIT::emitJumpIfImmediateNumber):
1199         (JSC::JIT::emitJumpIfNotImmediateNumber):
1200         (JSC::JIT::emitJumpIfImmediateInteger):
1201         (JSC::JIT::emitJumpIfNotImmediateInteger):
1202         (JSC::JIT::emitFastArithIntToImmNoCheck):
1203
1204 2009-01-16  Gavin Barraclough  <barraclough@apple.com>
1205
1206         Reviewed by Oliver Hunt.
1207
1208         Add support to x86-64 JIT for inline double precision arithmetic ops.
1209         +5/6% on x86-64, JIT enabled, sunspider.
1210
1211         * assembler/MacroAssembler.h:
1212         (JSC::MacroAssembler::addPtr):
1213         * assembler/X86Assembler.h:
1214         (JSC::X86Assembler::movq_rr):
1215         * jit/JIT.h:
1216         * jit/JITArithmetic.cpp:
1217         (JSC::JIT::compileFastArith_op_pre_inc):
1218         (JSC::JIT::compileBinaryArithOp):
1219         (JSC::JIT::compileBinaryArithOpSlowCase):
1220         (JSC::JIT::compileFastArith_op_add):
1221         (JSC::JIT::compileFastArithSlow_op_add):
1222         (JSC::JIT::compileFastArith_op_mul):
1223         (JSC::JIT::compileFastArithSlow_op_mul):
1224         (JSC::JIT::compileFastArith_op_sub):
1225         (JSC::JIT::compileFastArithSlow_op_sub):
1226         * parser/ResultType.h:
1227         (JSC::ResultType::isReusable):
1228         (JSC::ResultType::isInt32):
1229         (JSC::ResultType::definitelyIsNumber):
1230         (JSC::ResultType::mightBeNumber):
1231         (JSC::ResultType::isNotNumber):
1232         (JSC::ResultType::unknownType):
1233
1234 2009-01-16  Gavin Barraclough  <barraclough@apple.com>
1235
1236         Reviewed by Geoff Garen.
1237
1238         Fixes for SamplingTool.
1239
1240         https://bugs.webkit.org/show_bug.cgi?id=23390
1241
1242         * assembler/MacroAssembler.h:
1243         (JSC::MacroAssembler::storePtr):
1244         * bytecode/SamplingTool.cpp:
1245         (JSC::SamplingTool::run):
1246         (JSC::SamplingTool::dump):
1247         * bytecode/SamplingTool.h:
1248         (JSC::SamplingTool::encodeSample):
1249         * jit/JIT.cpp:
1250         (JSC::JIT::privateCompileMainPass):
1251         (JSC::JIT::privateCompile):
1252         * jit/JIT.h:
1253         (JSC::JIT::samplingToolTrackCodeBlock):
1254         * jit/JITCall.cpp:
1255         (JSC::JIT::compileOpCall):
1256         (JSC::JIT::compileOpCallSlowCase):
1257         * jit/JITInlineMethods.h:
1258         (JSC::JIT::emitCTICall_internal):
1259
1260 2009-01-16  Geoffrey Garen  <ggaren@apple.com>
1261
1262         Reviewed by Darin Adler.
1263         
1264         Fixed <rdar://problem/6452301> REGRESSION: Latest WebKit nightlies
1265         turn "c" into "" when stripping \\c_ character
1266
1267         * wrec/WRECParser.cpp:
1268         (JSC::WREC::Parser::consumeEscape): Mimic a Firefox quirk when parsing
1269         control escapes inside character classes.
1270
1271 2009-01-16  Adam Roben  <aroben@apple.com>
1272
1273         Windows build fix
1274
1275         * wrec/WRECParser.cpp:
1276         (JSC::WREC::Parser::parseParentheses): Removed unreachable code.
1277
1278 2009-01-15  Geoffrey Garen  <ggaren@apple.com>
1279
1280         Reviewed by Cameron Zwarich.
1281         
1282         Fixed <rdar://problem/6471394> REGRESSION (r39164): Discarding quantifier
1283         on assertion gives incorrect result (23075)
1284         
1285         https://bugs.webkit.org/show_bug.cgi?id=23075
1286
1287         * pcre/pcre_compile.cpp:
1288         (compileBranch): Throw away an assertion if it's followed by a quantifier
1289         with a 0 minimum, to match SpiderMonkey, v8, and the ECMA spec.
1290
1291         * wrec/WRECParser.cpp:
1292         (JSC::WREC::Parser::parseParentheses): Fall back on PCRE for the rare
1293         case of an assertion with a quantifier with a 0 minimum, since we
1294         don't handle quantified subexpressions yet, and in this special case,
1295         we can't just throw away the quantifier.
1296
1297 2009-01-15  Gavin Barraclough  <barraclough@apple.com>
1298
1299         Reviewed by Oliver Hunt.
1300
1301         Add support in ResultType to track that the results of bitops
1302         are always of type int32_t.
1303
1304         * parser/Nodes.cpp:
1305         (JSC::ReadModifyResolveNode::emitBytecode):
1306         (JSC::ReadModifyDotNode::emitBytecode):
1307         (JSC::ReadModifyBracketNode::emitBytecode):
1308         * parser/Nodes.h:
1309         (JSC::ExpressionNode::):
1310         (JSC::BooleanNode::):
1311         (JSC::NumberNode::):
1312         (JSC::StringNode::):
1313         (JSC::PrePostResolveNode::):
1314         (JSC::TypeOfResolveNode::):
1315         (JSC::TypeOfValueNode::):
1316         (JSC::UnaryPlusNode::):
1317         (JSC::NegateNode::):
1318         (JSC::BitwiseNotNode::):
1319         (JSC::LogicalNotNode::):
1320         (JSC::MultNode::):
1321         (JSC::DivNode::):
1322         (JSC::ModNode::):
1323         (JSC::SubNode::):
1324         (JSC::LeftShiftNode::):
1325         (JSC::RightShiftNode::):
1326         (JSC::UnsignedRightShiftNode::):
1327         (JSC::LessNode::):
1328         (JSC::GreaterNode::):
1329         (JSC::LessEqNode::):
1330         (JSC::GreaterEqNode::):
1331         (JSC::InstanceOfNode::):
1332         (JSC::EqualNode::):
1333         (JSC::NotEqualNode::):
1334         (JSC::StrictEqualNode::):
1335         (JSC::NotStrictEqualNode::):
1336         (JSC::BitAndNode::):
1337         (JSC::BitOrNode::):
1338         (JSC::BitXOrNode::):
1339         (JSC::LogicalOpNode::):
1340         * parser/ResultType.h:
1341         (JSC::ResultType::isInt32):
1342         (JSC::ResultType::isNotNumber):
1343         (JSC::ResultType::booleanType):
1344         (JSC::ResultType::numberType):
1345         (JSC::ResultType::numberTypeCanReuse):
1346         (JSC::ResultType::numberTypeCanReuseIsInt32):
1347         (JSC::ResultType::stringOrNumberTypeCanReuse):
1348         (JSC::ResultType::stringType):
1349         (JSC::ResultType::unknownType):
1350         (JSC::ResultType::forAdd):
1351         (JSC::ResultType::forBitOp):
1352         (JSC::OperandTypes::OperandTypes):
1353
1354 2009-01-15  Gavin Barraclough  <barraclough@apple.com>
1355
1356         Reviewed by Oliver Hunt.
1357
1358         Add support for integer addition, subtraction and multiplication
1359         in JIT code on x86-64.
1360
1361         * assembler/MacroAssembler.h:
1362         (JSC::MacroAssembler::mul32):
1363         (JSC::MacroAssembler::sub32):
1364         (JSC::MacroAssembler::joMul32):
1365         (JSC::MacroAssembler::joSub32):
1366         * jit/JIT.cpp:
1367         (JSC::JIT::privateCompileMainPass):
1368         (JSC::JIT::privateCompileSlowCases):
1369         * jit/JIT.h:
1370         * jit/JITArithmetic.cpp:
1371         (JSC::JIT::compileFastArith_op_add):
1372         (JSC::JIT::compileFastArithSlow_op_add):
1373         (JSC::JIT::compileFastArith_op_mul):
1374         (JSC::JIT::compileFastArithSlow_op_mul):
1375         (JSC::JIT::compileFastArith_op_sub):
1376         (JSC::JIT::compileFastArithSlow_op_sub):
1377
1378 2009-01-15  Gavin Barraclough  <barraclough@apple.com>
1379
1380         Reviewed by Geoff Garen.
1381
1382         On x86-64 allow JSImmediate to encode 64-bit double precision values.
1383         This patch only affects builds that set USE(ALTERNATE_JSIMMEDIATE).
1384         Updates the implementation of JSValuePtr:: and JSImmediate:: methods
1385         that operate on neumeric values to be be aware of the new representation.
1386         When this representation is in use, the class JSNumberCell is redundant
1387         and is compiled out.
1388
1389         The format of the new immediate representation is documented in JSImmediate.h.
1390
1391         * JavaScriptCore.exp:
1392         * assembler/MacroAssembler.h:
1393         (JSC::MacroAssembler::subPtr):
1394         * assembler/X86Assembler.h:
1395         (JSC::X86Assembler::):
1396         (JSC::X86Assembler::subq_rr):
1397         (JSC::X86Assembler::movq_rr):
1398         (JSC::X86Assembler::ucomisd_rr):
1399         (JSC::X86Assembler::X86InstructionFormatter::twoByteOp64):
1400         * interpreter/Interpreter.cpp:
1401         (JSC::Interpreter::cti_op_stricteq):
1402         (JSC::Interpreter::cti_op_nstricteq):
1403         * jit/JIT.cpp:
1404         (JSC::JIT::compileOpStrictEq):
1405         (JSC::JIT::privateCompileMainPass):
1406         (JSC::JIT::privateCompileSlowCases):
1407         * jit/JIT.h:
1408         * jit/JITArithmetic.cpp:
1409         (JSC::JIT::compileFastArith_op_lshift):
1410         (JSC::JIT::compileFastArith_op_rshift):
1411         (JSC::JIT::compileFastArith_op_bitand):
1412         (JSC::JIT::compileFastArith_op_mod):
1413         (JSC::JIT::compileFastArith_op_add):
1414         (JSC::JIT::compileFastArith_op_mul):
1415         (JSC::JIT::compileFastArith_op_post_inc):
1416         (JSC::JIT::compileFastArith_op_post_dec):
1417         (JSC::JIT::compileFastArith_op_pre_inc):
1418         (JSC::JIT::compileFastArith_op_pre_dec):
1419         (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate):
1420         (JSC::JIT::compileBinaryArithOp):
1421         * jit/JITInlineMethods.h:
1422         (JSC::JIT::emitJumpIfBothJSCells):
1423         (JSC::JIT::emitJumpIfEitherNumber):
1424         (JSC::JIT::emitJumpIfNotEitherNumber):
1425         (JSC::JIT::emitJumpIfImmediateIntegerNumber):
1426         (JSC::JIT::emitJumpIfNotImmediateIntegerNumber):
1427         (JSC::JIT::emitJumpIfNotImmediateIntegerNumbers):
1428         (JSC::JIT::emitJumpSlowCaseIfNotImmediateIntegerNumber):
1429         (JSC::JIT::emitJumpSlowCaseIfNotImmediateIntegerNumbers):
1430         (JSC::JIT::emitFastArithDeTagImmediate):
1431         (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
1432         (JSC::JIT::emitFastArithReTagImmediate):
1433         (JSC::JIT::emitFastArithIntToImmNoCheck):
1434         * runtime/JSCell.h:
1435         * runtime/JSGlobalData.cpp:
1436         (JSC::JSGlobalData::JSGlobalData):
1437         * runtime/JSImmediate.cpp:
1438         (JSC::JSImmediate::toThisObject):
1439         (JSC::JSImmediate::toObject):
1440         (JSC::JSImmediate::toString):
1441         * runtime/JSImmediate.h:
1442         (JSC::wtf_reinterpret_cast):
1443         (JSC::JSImmediate::isNumber):
1444         (JSC::JSImmediate::isIntegerNumber):
1445         (JSC::JSImmediate::isDoubleNumber):
1446         (JSC::JSImmediate::isPositiveIntegerNumber):
1447         (JSC::JSImmediate::areBothImmediateIntegerNumbers):
1448         (JSC::JSImmediate::makeInt):
1449         (JSC::JSImmediate::makeDouble):
1450         (JSC::JSImmediate::doubleValue):
1451         (JSC::doubleToBoolean):
1452         (JSC::JSImmediate::toBoolean):
1453         (JSC::JSImmediate::getTruncatedUInt32):
1454         (JSC::JSImmediate::makeOutOfIntegerRange):
1455         (JSC::JSImmediate::from):
1456         (JSC::JSImmediate::getTruncatedInt32):
1457         (JSC::JSImmediate::toDouble):
1458         (JSC::JSImmediate::getUInt32):
1459         (JSC::JSValuePtr::isInt32Fast):
1460         (JSC::JSValuePtr::isUInt32Fast):
1461         (JSC::JSValuePtr::areBothInt32Fast):
1462         (JSC::JSFastMath::canDoFastBitwiseOperations):
1463         (JSC::JSFastMath::xorImmediateNumbers):
1464         (JSC::JSFastMath::canDoFastRshift):
1465         (JSC::JSFastMath::canDoFastUrshift):
1466         (JSC::JSFastMath::rightShiftImmediateNumbers):
1467         (JSC::JSFastMath::canDoFastAdditiveOperations):
1468         (JSC::JSFastMath::addImmediateNumbers):
1469         (JSC::JSFastMath::subImmediateNumbers):
1470         * runtime/JSNumberCell.cpp:
1471         (JSC::jsNumberCell):
1472         * runtime/JSNumberCell.h:
1473         (JSC::createNumberStructure):
1474         (JSC::isNumberCell):
1475         (JSC::asNumberCell):
1476         (JSC::jsNumber):
1477         (JSC::JSValuePtr::isDoubleNumber):
1478         (JSC::JSValuePtr::getDoubleNumber):
1479         (JSC::JSValuePtr::isNumber):
1480         (JSC::JSValuePtr::uncheckedGetNumber):
1481         (JSC::jsNaN):
1482         (JSC::JSValuePtr::getNumber):
1483         (JSC::JSValuePtr::numberToInt32):
1484         (JSC::JSValuePtr::numberToUInt32):
1485         * runtime/JSValue.h:
1486         * runtime/NumberConstructor.cpp:
1487         (JSC::numberConstructorNegInfinity):
1488         (JSC::numberConstructorPosInfinity):
1489         (JSC::numberConstructorMaxValue):
1490         (JSC::numberConstructorMinValue):
1491         * runtime/NumberObject.cpp:
1492         (JSC::constructNumber):
1493         * runtime/NumberObject.h:
1494         * runtime/Operations.h:
1495         (JSC::JSValuePtr::equal):
1496         (JSC::JSValuePtr::equalSlowCaseInline):
1497         (JSC::JSValuePtr::strictEqual):
1498         (JSC::JSValuePtr::strictEqualSlowCaseInline):
1499         * wtf/Platform.h:
1500
1501 2009-01-15  Sam Weinig  <sam@webkit.org>
1502
1503         Reviewed by Geoffrey Garen.
1504
1505         <rdar://problem/6045018>
1506         REGRESSION (r34838): JavaScript objects appear to be leaked after loading google.com
1507
1508         Subtract the number of JSStrings cached in SmallStrings when calculating the
1509         number of live JSObjects.
1510
1511         * runtime/Collector.cpp:
1512         (JSC::Heap::objectCount):
1513         * runtime/SmallStrings.cpp:
1514         (JSC::SmallStrings::count):
1515         * runtime/SmallStrings.h:
1516
1517 2009-01-15  Sam Weinig  <sam@webkit.org>
1518
1519         Fix Qt build.
1520
1521         * runtime/Collector.cpp:
1522
1523 2009-01-15  Sam Weinig  <sam@webkit.org>
1524
1525         Reviewed by Gavin Barraclough.
1526
1527         Fix crash seen running fast/canvas.
1528
1529         Make sure to mark the ScopeNode and CodeBlock being created
1530         in the re-parse for exception information.
1531
1532         * bytecode/CodeBlock.cpp:
1533         (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
1534         * parser/Nodes.h:
1535         (JSC::ScopeNode::mark):
1536         * runtime/Collector.cpp:
1537         (JSC::Heap::collect):
1538         * runtime/JSGlobalData.cpp:
1539         (JSC::JSGlobalData::JSGlobalData):
1540         * runtime/JSGlobalData.h:
1541
1542 2009-01-15  Craig Schlenter  <craig.schlenter@gmail.com>
1543
1544         Reviewed by Darin Adler.
1545
1546         https://bugs.webkit.org/show_bug.cgi?id=23347
1547         Compilation of JavaScriptCore/wtf/ThreadingPthreads.cpp fails on Linux
1548
1549         * wtf/ThreadingPthreads.cpp: included limits.h as INT_MAX is defined there.
1550
1551 2009-01-15  Oliver Hunt  <oliver@apple.com>
1552
1553         Reviewed by Geoff Garen.
1554
1555         Bug 23225: REGRESSION: Assertion failure in reparseInPlace() (m_sourceElements) at sfgate.com
1556         <https://bugs.webkit.org/show_bug.cgi?id=23225> <rdar://problem/6487432>
1557
1558         Character position for open and closing brace was incorrectly referencing m_position to
1559         record their position in a source document, however this is unsafe as BOMs may lead to
1560         m_position being an arbitrary position from the real position of the current character.
1561
1562         * parser/Lexer.cpp:
1563         (JSC::Lexer::matchPunctuator):
1564
1565 2009-01-14  David Kilzer  <ddkilzer@apple.com>
1566
1567         Bug 23153: JSC build always touches JavaScriptCore/docs/bytecode.html
1568
1569         <https://bugs.webkit.org/show_bug.cgi?id=23153>
1570
1571         Reviewed by Darin Adler.
1572
1573         Instead of building bytecode.html into ${SRCROOT}/docs/bytecode.html, build it
1574         into ${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore/docs/bytecode.html.
1575
1576         Also fixes make-bytecode-docs.pl to actually generate documentation.
1577
1578         * DerivedSources.make: Changed bytecode.html to be built into local docs
1579         directory in ${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore.
1580         * JavaScriptCore.xcodeproj/project.pbxproj: Added "/docs" to the end of the
1581         "mkdir -p" command so that the docs subdirectory is automatically created.
1582         * docs/make-bytecode-docs.pl: Changed BEGIN_OPCODE to DEFINE_OPCODE so that
1583         documentation is actually generated.
1584
1585 2009-01-14  Adam Treat  <adam.treat@torchmobile.com>
1586
1587         Build fix for Qt from Dmitry Titov.
1588
1589         * wtf/ThreadingQt.cpp:
1590         (WTF::ThreadCondition::timedWait):
1591
1592 2009-01-14  Oliver Hunt  <oliver@apple.com>
1593
1594         Reviewed by Cameron Zwarich.
1595
1596         Bug 22903: REGRESSION (r36267): visiting this site reliably crashes WebKit nightly
1597
1598         EvalCodeBlock's do not reference the functions that are declared inside the eval
1599         code, this means that simply marking the EvalCodeBlock through the global object
1600         is insufficient to mark the declared functions.  This patch corrects this by
1601         explicitly marking the CodeBlocks of all the functions declared in the cached
1602         EvalNode.
1603
1604         * bytecode/CodeBlock.cpp:
1605         (JSC::CodeBlock::mark):
1606         * bytecode/CodeBlock.h:
1607         (JSC::CodeBlock::hasFunctions):
1608         * bytecode/EvalCodeCache.h:
1609         (JSC::EvalCodeCache::mark):
1610         * parser/Nodes.cpp:
1611         (JSC::ScopeNodeData::mark):
1612         (JSC::EvalNode::mark):
1613         * parser/Nodes.h:
1614
1615 2009-01-14  Dmitry Titov  <dimich@chromium.org>
1616
1617         Reviewed by Alexey Proskuryakov.
1618
1619         https://bugs.webkit.org/show_bug.cgi?id=23312
1620         Implement MessageQueue::waitForMessageTimed()
1621         Also fixed ThreadCondition::timedWait() to take absolute time, as discussed on webkit-dev.
1622         Win32 version of timedWait still has to be implemented.
1623
1624         * wtf/MessageQueue.h:
1625         (WTF::MessageQueueWaitResult: new enum for the result of MessageQueue::waitForMessageTimed.
1626         (WTF::MessageQueue::waitForMessage):
1627         (WTF::MessageQueue::waitForMessageTimed): New method.
1628         * wtf/Threading.h:
1629         * wtf/ThreadingGtk.cpp:
1630         (WTF::ThreadCondition::timedWait): changed to use absolute time instead of interval.
1631         * wtf/ThreadingNone.cpp:
1632         (WTF::ThreadCondition::timedWait): ditto.
1633         * wtf/ThreadingPthreads.cpp:
1634         (WTF::ThreadCondition::timedWait): ditto.
1635         * wtf/ThreadingQt.cpp:
1636         (WTF::ThreadCondition::timedWait): ditto.
1637         * wtf/ThreadingWin.cpp:
1638         (WTF::ThreadCondition::timedWait): ditto. The actual Win32 code is still to be implemented.
1639
1640 2009-01-14  Dean McNamee  <deanm@chromium.org>
1641
1642         Reviewed by Darin Adler and Oliver hunt.
1643
1644         Correctly match allocation functions by implementing a custom deref().
1645
1646         https://bugs.webkit.org/show_bug.cgi?id=23315
1647
1648         * runtime/ByteArray.h:
1649         (JSC::ByteArray::deref):
1650         (JSC::ByteArray::ByteArray):
1651
1652 2009-01-14  Dan Bernstein  <mitz@apple.com>
1653
1654         Reviewed by John Sullivan.
1655
1656         - update copyright
1657
1658         * Info.plist:
1659
1660 2009-01-13  Beth Dakin  <bdakin@apple.com>
1661
1662         Reviewed by Darin Adler and Oliver Hunt.
1663
1664         <rdar://problem/6489314> REGRESSION: Business widget's front side 
1665         fails to render correctly when flipping widget
1666
1667         The problem here is that parseInt was parsing NaN as 0. This patch 
1668         corrects that by parsing NaN as NaN. This matches our old behavior 
1669         and Firefox. 
1670
1671         * runtime/JSGlobalObjectFunctions.cpp:
1672         (JSC::globalFuncParseInt):
1673
1674 2009-01-13  Gavin Barraclough  <barraclough@apple.com>
1675
1676         Reviewed by Oliver Hunt.
1677
1678         Fix for: https://bugs.webkit.org/show_bug.cgi?id=23292
1679
1680         Implementation of two argument canDoFastAdditiveOperations does not correlate well with reality.
1681
1682         * runtime/JSImmediate.h:
1683         (JSC::JSFastMath::canDoFastAdditiveOperations):
1684
1685 2009-01-13  Zalan Bujtas  <zbujtas@gmail.com>
1686
1687         Reviewed by Darin Adler.
1688
1689         https://bugs.webkit.org/show_bug.cgi?id=23290
1690         Fix JSImmediate::isImmediate(src) to !src->isCell()
1691
1692         * interpreter/Interpreter.cpp:
1693         (JSC::Interpreter::privateExecute):
1694
1695 2009-01-13  Dmitry Titov  <dimich@chromium.org>
1696
1697         Reviewed by Darin Adler.
1698
1699         https://bugs.webkit.org/show_bug.cgi?id=23281
1700         Fix the Chromium Win build.
1701         Need to use PLATFORM(WIN_OS) instead of PLATFORM(WIN).
1702         Moved GTK and WX up in #if sequence because they could come with WIN_OS too,
1703         while they have their own implementation even on Windows.
1704
1705         * wtf/CurrentTime.cpp:
1706         (WTF::currentTime):
1707
1708 2009-01-12  Gavin Barraclough  <barraclough@apple.com>
1709
1710         Reviewed by Oliver Hunt.
1711
1712         Make the JSImmediate interface private.
1713
1714         All manipulation of JS values should be through the JSValuePtr class, not by using JSImmediate
1715         directly.  The key missing methods on JSValuePtr are:
1716
1717             * isCell() - check for values that are JSCell*s, and as such where asCell() may be used.
1718             * isInt32Fast() getInt32Fast() - fast check/access for integer immediates.
1719             * isUInt32Fast() getUInt32Fast() - ditto for unsigned integer immediates.
1720
1721         The JIT is allowed full access to JSImmediate, since it needs to be able to directly
1722         manipulate JSValuePtrs.  The Interpreter is provided access to perform operations directly
1723         on JSValuePtrs through the new JSFastMath interface.
1724
1725         No performance impact.
1726
1727         * API/JSCallbackObjectFunctions.h:
1728         (JSC::::toNumber):
1729         * API/JSValueRef.cpp:
1730         (JSValueIsEqual):
1731         (JSValueIsStrictEqual):
1732         * JavaScriptCore.exp:
1733         * bytecode/CodeBlock.h:
1734         (JSC::CodeBlock::isKnownNotImmediate):
1735         * bytecompiler/BytecodeGenerator.cpp:
1736         (JSC::keyForImmediateSwitch):
1737         * bytecompiler/BytecodeGenerator.h:
1738         (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue):
1739         (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue):
1740         * interpreter/Interpreter.cpp:
1741         (JSC::jsLess):
1742         (JSC::jsLessEq):
1743         (JSC::jsAdd):
1744         (JSC::jsIsObjectType):
1745         (JSC::cachePrototypeChain):
1746         (JSC::Interpreter::tryCachePutByID):
1747         (JSC::Interpreter::tryCacheGetByID):
1748         (JSC::Interpreter::privateExecute):
1749         (JSC::Interpreter::tryCTICachePutByID):
1750         (JSC::Interpreter::tryCTICacheGetByID):
1751         (JSC::Interpreter::cti_op_add):
1752         (JSC::Interpreter::cti_op_get_by_id_self_fail):
1753         (JSC::Interpreter::cti_op_get_by_id_proto_list):
1754         (JSC::Interpreter::cti_op_instanceof):
1755         (JSC::Interpreter::cti_op_mul):
1756         (JSC::Interpreter::cti_op_get_by_val):
1757         (JSC::Interpreter::cti_op_get_by_val_byte_array):
1758         (JSC::Interpreter::cti_op_sub):
1759         (JSC::Interpreter::cti_op_put_by_val):
1760         (JSC::Interpreter::cti_op_put_by_val_array):
1761         (JSC::Interpreter::cti_op_put_by_val_byte_array):
1762         (JSC::Interpreter::cti_op_negate):
1763         (JSC::Interpreter::cti_op_div):
1764         (JSC::Interpreter::cti_op_eq):
1765         (JSC::Interpreter::cti_op_lshift):
1766         (JSC::Interpreter::cti_op_bitand):
1767         (JSC::Interpreter::cti_op_rshift):
1768         (JSC::Interpreter::cti_op_bitnot):
1769         (JSC::Interpreter::cti_op_neq):
1770         (JSC::Interpreter::cti_op_urshift):
1771         (JSC::Interpreter::cti_op_call_eval):
1772         (JSC::Interpreter::cti_op_throw):
1773         (JSC::Interpreter::cti_op_is_undefined):
1774         (JSC::Interpreter::cti_op_stricteq):
1775         (JSC::Interpreter::cti_op_nstricteq):
1776         (JSC::Interpreter::cti_op_switch_imm):
1777         (JSC::Interpreter::cti_vm_throw):
1778         * interpreter/Interpreter.h:
1779         (JSC::Interpreter::isJSArray):
1780         (JSC::Interpreter::isJSString):
1781         (JSC::Interpreter::isJSByteArray):
1782         * jit/JIT.cpp:
1783         (JSC::JIT::compileOpStrictEq):
1784         (JSC::JIT::privateCompileMainPass):
1785         * jit/JIT.h:
1786         (JSC::JIT::isStrictEqCaseHandledInJITCode):
1787         * jit/JITArithmetic.cpp:
1788         (JSC::JIT::compileFastArith_op_rshift):
1789         (JSC::JIT::compileFastArith_op_bitand):
1790         (JSC::JIT::compileFastArith_op_mod):
1791         * jit/JITCall.cpp:
1792         (JSC::JIT::unlinkCall):
1793         (JSC::JIT::compileOpCall):
1794         * jit/JITInlineMethods.h:
1795         (JSC::JIT::getConstantOperandImmediateInt):
1796         (JSC::JIT::isOperandConstantImmediateInt):
1797         * parser/Nodes.cpp:
1798         (JSC::processClauseList):
1799         * runtime/ArrayPrototype.cpp:
1800         (JSC::arrayProtoFuncIndexOf):
1801         (JSC::arrayProtoFuncLastIndexOf):
1802         * runtime/BooleanPrototype.cpp:
1803         (JSC::booleanProtoFuncValueOf):
1804         * runtime/Collector.cpp:
1805         (JSC::Heap::protect):
1806         (JSC::Heap::unprotect):
1807         (JSC::Heap::heap):
1808         * runtime/JSByteArray.cpp:
1809         (JSC::JSByteArray::getOwnPropertySlot):
1810         * runtime/JSByteArray.h:
1811         (JSC::JSByteArray::getIndex):
1812         * runtime/JSCell.cpp:
1813         * runtime/JSCell.h:
1814         (JSC::JSValuePtr::isNumberCell):
1815         (JSC::JSValuePtr::asCell):
1816         (JSC::JSValuePtr::isNumber):
1817         * runtime/JSGlobalObjectFunctions.cpp:
1818         (JSC::globalFuncParseInt):
1819         * runtime/JSImmediate.h:
1820         (JSC::js0):
1821         (JSC::jsImpossibleValue):
1822         (JSC::JSValuePtr::toInt32):
1823         (JSC::JSValuePtr::toUInt32):
1824         (JSC::JSValuePtr::isCell):
1825         (JSC::JSValuePtr::isInt32Fast):
1826         (JSC::JSValuePtr::getInt32Fast):
1827         (JSC::JSValuePtr::isUInt32Fast):
1828         (JSC::JSValuePtr::getUInt32Fast):
1829         (JSC::JSValuePtr::makeInt32Fast):
1830         (JSC::JSValuePtr::areBothInt32Fast):
1831         (JSC::JSFastMath::canDoFastBitwiseOperations):
1832         (JSC::JSFastMath::equal):
1833         (JSC::JSFastMath::notEqual):
1834         (JSC::JSFastMath::andImmediateNumbers):
1835         (JSC::JSFastMath::xorImmediateNumbers):
1836         (JSC::JSFastMath::orImmediateNumbers):
1837         (JSC::JSFastMath::canDoFastRshift):
1838         (JSC::JSFastMath::canDoFastUrshift):
1839         (JSC::JSFastMath::rightShiftImmediateNumbers):
1840         (JSC::JSFastMath::canDoFastAdditiveOperations):
1841         (JSC::JSFastMath::addImmediateNumbers):
1842         (JSC::JSFastMath::subImmediateNumbers):
1843         (JSC::JSFastMath::incImmediateNumber):
1844         (JSC::JSFastMath::decImmediateNumber):
1845         * runtime/JSNumberCell.h:
1846         (JSC::JSValuePtr::asNumberCell):
1847         (JSC::jsNumber):
1848         (JSC::JSValuePtr::uncheckedGetNumber):
1849         (JSC::JSNumberCell::toInt32):
1850         (JSC::JSNumberCell::toUInt32):
1851         (JSC::JSValuePtr::toJSNumber):
1852         (JSC::JSValuePtr::getNumber):
1853         (JSC::JSValuePtr::numberToInt32):
1854         (JSC::JSValuePtr::numberToUInt32):
1855         * runtime/JSObject.h:
1856         (JSC::JSValuePtr::isObject):
1857         (JSC::JSValuePtr::get):
1858         (JSC::JSValuePtr::put):
1859         * runtime/JSValue.cpp:
1860         (JSC::JSValuePtr::toInteger):
1861         (JSC::JSValuePtr::toIntegerPreserveNaN):
1862         * runtime/JSValue.h:
1863         * runtime/Operations.cpp:
1864         (JSC::JSValuePtr::equalSlowCase):
1865         (JSC::JSValuePtr::strictEqualSlowCase):
1866         * runtime/Operations.h:
1867         (JSC::JSValuePtr::equal):
1868         (JSC::JSValuePtr::equalSlowCaseInline):
1869         (JSC::JSValuePtr::strictEqual):
1870         (JSC::JSValuePtr::strictEqualSlowCaseInline):
1871         * runtime/Protect.h:
1872         (JSC::gcProtect):
1873         (JSC::gcUnprotect):
1874         * runtime/StringPrototype.cpp:
1875         (JSC::stringProtoFuncCharAt):
1876         (JSC::stringProtoFuncCharCodeAt):
1877         * runtime/Structure.cpp:
1878         (JSC::Structure::createCachedPrototypeChain):
1879
1880 2009-01-12  Kevin Ollivier  <kevino@theolliviers.com>
1881
1882         Since date time functions have moved here, now the wx port JSC
1883         needs to depend on wx.
1884
1885         * jscore.bkl:
1886
1887 2009-01-11  David Levin  <levin@chromium.org>
1888
1889         Reviewed by Darin Adler.
1890
1891         https://bugs.webkit.org/show_bug.cgi?id=23245
1892
1893         Add initializeThreading to key places in JS API to ensure that
1894         UString is properly initialized.
1895
1896         * API/JSContextRef.cpp:
1897         (JSContextGroupCreate):
1898         (JSGlobalContextCreate):
1899         * API/JSObjectRef.cpp:
1900         (JSClassCreate):
1901         * API/JSStringRef.cpp:
1902         (JSStringCreateWithCharacters):
1903         (JSStringCreateWithUTF8CString):
1904         * API/JSStringRefCF.cpp:
1905         (JSStringCreateWithCFString):
1906
1907 2009-01-11  David Levin  <levin@chromium.org>
1908
1909         Reviewed by Darin Adler.
1910
1911         https://bugs.webkit.org/show_bug.cgi?id=23175
1912
1913         Separate out BaseString information from UString::Rep and make all baseString access go through
1914         a member function, so that it may be used for something else (in the future) in the BaseString
1915         case.
1916
1917         * runtime/SmallStrings.cpp:
1918         (JSC::SmallStringsStorage::rep):
1919         (JSC::SmallStringsStorage::SmallStringsStorage):
1920         (JSC::SmallStrings::SmallStrings):
1921         (JSC::SmallStrings::mark):
1922         Adjust to account for the changes in UString and put the UString in place in
1923         SmallStringsStorage to aid in locality of reference among the UChar[] and UString::Rep's.
1924
1925         * runtime/SmallStrings.h:
1926         * runtime/UString.cpp:
1927         (JSC::initializeStaticBaseString):
1928         (JSC::initializeUString):
1929         (JSC::UString::Rep::create):
1930         (JSC::UString::Rep::destroy):
1931         (JSC::UString::Rep::checkConsistency):
1932         (JSC::expandCapacity):
1933         (JSC::UString::expandPreCapacity):
1934         (JSC::concatenate):
1935         (JSC::UString::append):
1936         (JSC::UString::operator=):
1937         * runtime/UString.h:
1938         (JSC::UString::Rep::baseIsSelf):
1939         (JSC::UString::Rep::setBaseString):
1940         (JSC::UString::Rep::baseString):
1941         (JSC::UString::Rep::):
1942         (JSC::UString::Rep::null):
1943         (JSC::UString::Rep::empty):
1944         (JSC::UString::Rep::data):
1945         (JSC::UString::cost):
1946         Separate out the items out used by base strings from those used in Rep's that only
1947         point to base strings.  (This potentially saves 24 bytes per Rep.)
1948
1949 2009-01-11  Darin Adler  <darin@apple.com>
1950
1951         Reviewed by Dan Bernstein.
1952
1953         Bug 23239: improve handling of unused arguments in JavaScriptCore
1954         https://bugs.webkit.org/show_bug.cgi?id=23239
1955
1956         * runtime/DatePrototype.cpp: Moved LocaleDateTimeFormat enum outside #if
1957         so we can use this on all platforms. Changed valueOf to share the same
1958         function with getTime, since the contents of the two are identical. Removed
1959         a FIXME since the idea isn't really specific enough or helpful enough to
1960         need to sit here in the source code.
1961         (JSC::formatLocaleDate): Changed the Mac version of this function to take
1962         the same arguments as the non-Mac version so the caller doesn't have to
1963         special-case the two platforms. Also made the formatString array be const;
1964         before the characters were, but the array was a modifiable global variable.
1965         (JSC::dateProtoFuncToLocaleString): Changed to call the new unified
1966         version of formatLocaleDate and remove the ifdef.
1967         (JSC::dateProtoFuncToLocaleDateString): Ditto.
1968         (JSC::dateProtoFuncToLocaleTimeString): Ditto.
1969
1970         * runtime/JSNotAnObject.cpp:
1971         (JSC::JSNotAnObject::toObject): Use the new ASSERT_UNUSED instead of the
1972         old UNUSED_PARAM.
1973
1974         * runtime/RegExp.cpp:
1975         (JSC::RegExp::RegExp): Changed to only use UNUSED_PARAM when the parameter
1976         is actually unused.
1977
1978         * wtf/TCSystemAlloc.cpp:
1979         (TCMalloc_SystemRelease): Changed to only use UNUSED_PARAM when the parameter
1980         is actually unused.
1981         (TCMalloc_SystemCommit): Changed to omit the argument names instead of using
1982         UNUSED_PARAM.
1983
1984 2009-01-11  Oliver Hunt  <oliver@apple.com>
1985
1986         Reviewed by NOBODY (Build fix).
1987
1988         Fix the build (whoops)
1989
1990         * interpreter/Interpreter.cpp:
1991         (JSC::Interpreter::cti_op_get_by_val):
1992
1993 2009-01-11  Oliver Hunt  <oliver@apple.com>
1994
1995         Reviewed by Darin Adler and Anders Carlsson
1996
1997         Bug 23128: get/put_by_val need to respecialise in the face of ByteArray
1998
1999         Restructure the code slightly, and add comments per Darin's suggestions
2000
2001         * interpreter/Interpreter.cpp:
2002         (JSC::Interpreter::cti_op_get_by_val):
2003         (JSC::Interpreter::cti_op_get_by_val_byte_array):
2004         (JSC::Interpreter::cti_op_put_by_val):
2005         (JSC::Interpreter::cti_op_put_by_val_byte_array):
2006
2007 2009-01-11  Oliver Hunt  <oliver@apple.com>
2008
2009         Reviewed by Anders Carlsson.
2010
2011         Whoops, I accidentally removed an exception check from fast the
2012         fast path for string indexing when i originally landed the
2013         byte array logic.
2014
2015         * interpreter/Interpreter.cpp:
2016         (JSC::Interpreter::cti_op_get_by_val):
2017
2018 2009-01-11  Oliver Hunt  <oliver@apple.com>
2019
2020         Reviewed by Anders Carlsson.
2021
2022         Bug 23128: get/put_by_val need to respecialise in the face of ByteArray
2023         <https://bugs.webkit.org/show_bug.cgi?id=23128>
2024
2025         Fairly simple patch, add specialised versions of cti_op_get/put_by_val
2026         that assume ByteArray, thus avoiding a few branches in the case of bytearray
2027         manipulation.
2028
2029         No effect on SunSpider.  15% win on the original testcase.
2030
2031         * interpreter/Interpreter.cpp:
2032         (JSC::Interpreter::cti_op_get_by_val):
2033         (JSC::Interpreter::cti_op_get_by_val_byte_array):
2034         (JSC::Interpreter::cti_op_put_by_val):
2035         (JSC::Interpreter::cti_op_put_by_val_byte_array):
2036         * interpreter/Interpreter.h:
2037
2038 2009-01-11  Alexey Proskuryakov  <ap@webkit.org>
2039
2040         Try to fix Windows build.
2041
2042         * wtf/CurrentTime.cpp: Added a definition of msPerSecond (previously, this code was in
2043         DateMath.cpp, with constant definition in DateTime.h)
2044
2045 2009-01-11  Alexey Proskuryakov  <ap@webkit.org>
2046
2047         Try to fix Windows build.
2048
2049         * wtf/CurrentTime.cpp: Include <sys/types.h> and <sys/timeb.h>, as MSDN says to.
2050
2051 2009-01-11  Dmitry Titov  <dimich@chromium.org>
2052
2053         Reviewed by Darin Adler.
2054
2055         https://bugs.webkit.org/show_bug.cgi?id=23207
2056         Moved currentTime() to from WebCore to WTF.
2057
2058         * GNUmakefile.am:
2059         * JavaScriptCore.exp: added export for WTF::currentTime()
2060         * JavaScriptCore.pri:
2061         * JavaScriptCore.scons:
2062         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
2063         * JavaScriptCore.xcodeproj/project.pbxproj:
2064         * JavaScriptCoreSources.bkl:
2065         * runtime/DateMath.cpp:
2066         (JSC::getCurrentUTCTimeWithMicroseconds): This function had another implementation of currentTime(), essentially. Now uses WTF version.
2067         * wtf/CurrentTime.cpp: Added.
2068         (WTF::currentTime):
2069         (WTF::highResUpTime):
2070         (WTF::lowResUTCTime):
2071         (WTF::qpcAvailable):
2072         * wtf/CurrentTime.h: Added.
2073
2074 2009-01-09  Gavin Barraclough  <barraclough@apple.com>
2075
2076         Reviewed by Oliver Hunt.
2077
2078         Stage two of converting JSValue from a pointer to a class type.
2079         Remove the class JSValue.  The functionallity has been transitioned
2080         into the wrapper class type JSValuePtr.
2081
2082         The last stage will be to rename JSValuePtr to JSValue, remove the
2083         overloaded -> operator, and switch operations on JSValuePtrs from
2084         using '->' to use '.' instead.
2085
2086         * API/APICast.h:
2087         * JavaScriptCore.exp:
2088         * runtime/JSCell.h:
2089         (JSC::asCell):
2090         (JSC::JSValuePtr::asCell):
2091         (JSC::JSValuePtr::isNumber):
2092         (JSC::JSValuePtr::isString):
2093         (JSC::JSValuePtr::isGetterSetter):
2094         (JSC::JSValuePtr::isObject):
2095         (JSC::JSValuePtr::getNumber):
2096         (JSC::JSValuePtr::getString):
2097         (JSC::JSValuePtr::getObject):
2098         (JSC::JSValuePtr::getCallData):
2099         (JSC::JSValuePtr::getConstructData):
2100         (JSC::JSValuePtr::getUInt32):
2101         (JSC::JSValuePtr::getTruncatedInt32):
2102         (JSC::JSValuePtr::getTruncatedUInt32):
2103         (JSC::JSValuePtr::mark):
2104         (JSC::JSValuePtr::marked):
2105         (JSC::JSValuePtr::toPrimitive):
2106         (JSC::JSValuePtr::getPrimitiveNumber):
2107         (JSC::JSValuePtr::toBoolean):
2108         (JSC::JSValuePtr::toNumber):
2109         (JSC::JSValuePtr::toString):
2110         (JSC::JSValuePtr::toObject):
2111         (JSC::JSValuePtr::toThisObject):
2112         (JSC::JSValuePtr::needsThisConversion):
2113         (JSC::JSValuePtr::toThisString):
2114         (JSC::JSValuePtr::getJSNumber):
2115         * runtime/JSImmediate.h:
2116         (JSC::JSValuePtr::isUndefined):
2117         (JSC::JSValuePtr::isNull):
2118         (JSC::JSValuePtr::isUndefinedOrNull):
2119         (JSC::JSValuePtr::isBoolean):
2120         (JSC::JSValuePtr::getBoolean):
2121         (JSC::JSValuePtr::toInt32):
2122         (JSC::JSValuePtr::toUInt32):
2123         * runtime/JSNumberCell.h:
2124         (JSC::JSValuePtr::uncheckedGetNumber):
2125         (JSC::JSValuePtr::toJSNumber):
2126         * runtime/JSObject.h:
2127         (JSC::JSValuePtr::isObject):
2128         (JSC::JSValuePtr::get):
2129         (JSC::JSValuePtr::put):
2130         * runtime/JSString.h:
2131         (JSC::JSValuePtr::toThisJSString):
2132         * runtime/JSValue.cpp:
2133         (JSC::JSValuePtr::toInteger):
2134         (JSC::JSValuePtr::toIntegerPreserveNaN):
2135         (JSC::JSValuePtr::toInt32SlowCase):
2136         (JSC::JSValuePtr::toUInt32SlowCase):
2137         * runtime/JSValue.h:
2138         (JSC::JSValuePtr::makeImmediate):
2139         (JSC::JSValuePtr::immediateValue):
2140         (JSC::JSValuePtr::JSValuePtr):
2141         (JSC::JSValuePtr::operator->):
2142         (JSC::JSValuePtr::operator bool):
2143         (JSC::JSValuePtr::operator==):
2144         (JSC::JSValuePtr::operator!=):
2145         (JSC::JSValuePtr::encode):
2146         (JSC::JSValuePtr::decode):
2147         (JSC::JSValuePtr::toFloat):
2148         (JSC::JSValuePtr::asValue):
2149         (JSC::operator==):
2150         (JSC::operator!=):
2151
2152 2009-01-09  David Levin  <levin@chromium.org>
2153
2154         Reviewed by Oliver Hunt.
2155
2156         https://bugs.webkit.org/show_bug.cgi?id=23175
2157
2158         Adjustment to previous patch.  Remove call to initilizeThreading from JSGlobalCreate
2159         and fix jsc.cpp instead.
2160
2161         * jsc.cpp:
2162         (main):
2163         (jscmain):
2164         * runtime/JSGlobalData.cpp:
2165         (JSC::JSGlobalData::create):
2166
2167 2009-01-09  Sam Weinig  <sam@webkit.org>
2168
2169         Roll r39720 back in with a working interpreted mode.
2170
2171 2009-01-09  David Levin  <levin@chromium.org>
2172
2173         Reviewed by Oliver Hunt.
2174
2175         https://bugs.webkit.org/show_bug.cgi?id=23175
2176
2177         Added a template to make the pointer and flags combination
2178         in UString more readable and less error prone.
2179
2180         * GNUmakefile.am:
2181         * JavaScriptCore.exp:
2182         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
2183         * JavaScriptCore.xcodeproj/project.pbxproj:
2184         Added PtrAndFlags.h (and sorted the xcode project file).
2185
2186         * runtime/Identifier.cpp:
2187         (JSC::Identifier::add):
2188         (JSC::Identifier::addSlowCase):
2189         * runtime/InitializeThreading.cpp:
2190         (JSC::initializeThreadingOnce):
2191         Made the init threading initialize the UString globals.  Before
2192         these were initilized using {} but that became harder due to the
2193         addition of this tempalte class.
2194
2195         * runtime/JSGlobalData.cpp:
2196         (JSC::JSGlobalData::create):
2197         * runtime/PropertyNameArray.cpp:
2198         (JSC::PropertyNameArray::add):
2199         * runtime/UString.cpp:
2200         (JSC::initializeStaticBaseString):
2201         (JSC::initializeUString):
2202         (JSC::UString::Rep::create):
2203         (JSC::UString::Rep::createFromUTF8):
2204         (JSC::createRep):
2205         (JSC::UString::UString):
2206         (JSC::concatenate):
2207         (JSC::UString::operator=):
2208         (JSC::UString::makeNull):
2209         (JSC::UString::nullRep):
2210         * runtime/UString.h:
2211         (JSC::UString::Rep::identifierTable):
2212         (JSC::UString::Rep::setIdentifierTable):
2213         (JSC::UString::Rep::isStatic):
2214         (JSC::UString::Rep::setStatic):
2215         (JSC::UString::Rep::):
2216         (JSC::UString::Rep::null):
2217         (JSC::UString::Rep::empty):
2218         (JSC::UString::isNull):
2219         (JSC::UString::null):
2220         (JSC::UString::UString):
2221
2222         * wtf/PtrAndFlags.h: Added.
2223         (WTF::PtrAndFlags::PtrAndFlags):
2224         (WTF::PtrAndFlags::isFlagSet):
2225         (WTF::PtrAndFlags::setFlag):
2226         (WTF::PtrAndFlags::clearFlag):
2227         (WTF::PtrAndFlags::get):
2228         (WTF::PtrAndFlags::set):
2229         A simple way to layer together a pointer and 2 flags.  It relies on the pointer being 4 byte aligned,
2230         which should happen for all allocators (due to aligning pointers, int's, etc. on 4 byte boundaries).
2231
2232 2009-01-08  Gavin Barraclough  <barraclough@apple.com>
2233
2234         Reviewed by -O-l-i-v-e-r- -H-u-n-t- Sam Weinig (sorry, Sam!).
2235
2236         Encode immediates in the low word of JSValuePtrs, on x86-64.
2237
2238         On 32-bit platforms a JSValuePtr may represent a 31-bit signed integer.
2239         On 64-bit platforms, if USE(ALTERNATE_JSIMMEDIATE) is defined, a full
2240         32-bit integer may be stored in an immediate.
2241         
2242         Presently USE(ALTERNATE_JSIMMEDIATE) uses the same encoding as the default
2243         immediate format - the value is left shifted by one, so a one bit tag can
2244         be added to indicate the value is an immediate.  However this means that
2245         values must be commonly be detagged (by right shifting by one) before
2246         arithmetic operations can be performed on immediates.  This patch modifies
2247         the formattting so the the high bits of the immediate mark values as being
2248         integer.
2249
2250         * assembler/MacroAssembler.h:
2251         (JSC::MacroAssembler::not32):
2252         (JSC::MacroAssembler::orPtr):
2253         (JSC::MacroAssembler::zeroExtend32ToPtr):
2254         (JSC::MacroAssembler::jaePtr):
2255         (JSC::MacroAssembler::jbPtr):
2256         (JSC::MacroAssembler::jnzPtr):
2257         (JSC::MacroAssembler::jzPtr):
2258         * assembler/X86Assembler.h:
2259         (JSC::X86Assembler::):
2260         (JSC::X86Assembler::notl_r):
2261         (JSC::X86Assembler::testq_i32r):
2262         * jit/JIT.cpp:
2263         (JSC::JIT::privateCompileMainPass):
2264         (JSC::JIT::privateCompileSlowCases):
2265         (JSC::JIT::privateCompileCTIMachineTrampolines):
2266         * jit/JIT.h:
2267         * jit/JITArithmetic.cpp:
2268         (JSC::JIT::compileFastArith_op_lshift):
2269         (JSC::JIT::compileFastArith_op_rshift):
2270         (JSC::JIT::compileFastArith_op_bitand):
2271         (JSC::JIT::compileFastArithSlow_op_bitand):
2272         (JSC::JIT::compileFastArith_op_mod):
2273         (JSC::JIT::compileFastArithSlow_op_mod):
2274         (JSC::JIT::compileFastArith_op_add):
2275         (JSC::JIT::compileFastArith_op_mul):
2276         (JSC::JIT::compileFastArith_op_post_inc):
2277         (JSC::JIT::compileFastArith_op_post_dec):
2278         (JSC::JIT::compileFastArith_op_pre_inc):
2279         (JSC::JIT::compileFastArith_op_pre_dec):
2280         (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate):
2281         (JSC::JIT::compileBinaryArithOp):
2282         * jit/JITCall.cpp:
2283         (JSC::JIT::compileOpCallSlowCase):
2284         * jit/JITInlineMethods.h:
2285         (JSC::JIT::emitJumpIfJSCell):
2286         (JSC::JIT::emitJumpIfNotJSCell):
2287         (JSC::JIT::emitJumpIfImmNum):
2288         (JSC::JIT::emitJumpSlowCaseIfNotImmNum):
2289         (JSC::JIT::emitJumpSlowCaseIfNotImmNums):
2290         (JSC::JIT::emitFastArithDeTagImmediate):
2291         (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
2292         (JSC::JIT::emitFastArithReTagImmediate):
2293         (JSC::JIT::emitFastArithImmToInt):
2294         (JSC::JIT::emitFastArithIntToImmNoCheck):
2295         (JSC::JIT::emitTagAsBoolImmediate):
2296         * jit/JITPropertyAccess.cpp:
2297         (JSC::resizePropertyStorage):
2298         (JSC::JIT::privateCompilePutByIdTransition):
2299         (JSC::JIT::privateCompilePatchGetArrayLength):
2300         (JSC::JIT::privateCompileGetByIdSelf):
2301         (JSC::JIT::privateCompileGetByIdProto):
2302         (JSC::JIT::privateCompileGetByIdChain):
2303         (JSC::JIT::privateCompilePutByIdReplace):
2304         * runtime/JSImmediate.h:
2305         (JSC::JSImmediate::isNumber):
2306         (JSC::JSImmediate::isPositiveNumber):
2307         (JSC::JSImmediate::areBothImmediateNumbers):
2308         (JSC::JSImmediate::xorImmediateNumbers):
2309         (JSC::JSImmediate::rightShiftImmediateNumbers):
2310         (JSC::JSImmediate::canDoFastAdditiveOperations):
2311         (JSC::JSImmediate::addImmediateNumbers):
2312         (JSC::JSImmediate::subImmediateNumbers):
2313         (JSC::JSImmediate::makeInt):
2314         (JSC::JSImmediate::toBoolean):
2315         * wtf/Platform.h:
2316
2317 2009-01-08  Sam Weinig  <sam@webkit.org>
2318
2319         Revert r39720. It broke Interpreted mode.
2320
2321 2009-01-08  Sam Weinig  <sam@webkit.org>
2322
2323         Reviewed by Oliver Hunt.
2324
2325         Fix for https://bugs.webkit.org/show_bug.cgi?id=23197
2326         Delay creating the PCVector until an exception is thrown
2327         Part of <rdar://problem/6469060>
2328         Don't store exception information for a CodeBlock until first exception is thrown
2329
2330         - Change the process for re-parsing/re-generating bytecode for exception information
2331           to use data from the original CodeBlock (offsets of GlobalResolve instructions) to
2332           aid in creating an identical instruction stream on re-parse, instead of padding
2333           interchangeable opcodes, which would result in different JITed code.
2334         - Fix bug where the wrong ScopeChainNode was used when re-parsing/regenerating from
2335           within some odd modified scope chains.
2336         - Lazily create the pcVector by re-JITing the regenerated CodeBlock and stealing the
2337           the pcVector from it.
2338
2339         Saves ~2MB on Membuster head.
2340
2341         * bytecode/CodeBlock.cpp:
2342         (JSC::CodeBlock::dump):
2343         (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
2344         (JSC::CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset):
2345         (JSC::CodeBlock::hasGlobalResolveInfoAtBytecodeOffset):
2346         * bytecode/CodeBlock.h:
2347         (JSC::JITCodeRef::JITCodeRef):
2348         (JSC::GlobalResolveInfo::GlobalResolveInfo):
2349         (JSC::CodeBlock::getBytecodeIndex):
2350         (JSC::CodeBlock::addGlobalResolveInstruction):
2351         (JSC::CodeBlock::addGlobalResolveInfo):
2352         (JSC::CodeBlock::addFunctionRegisterInfo):
2353         (JSC::CodeBlock::hasExceptionInfo):
2354         (JSC::CodeBlock::pcVector):
2355         (JSC::EvalCodeBlock::EvalCodeBlock):
2356         (JSC::EvalCodeBlock::baseScopeDepth):
2357         * bytecode/Opcode.h:
2358         * bytecompiler/BytecodeGenerator.cpp:
2359         (JSC::BytecodeGenerator::BytecodeGenerator):
2360         (JSC::BytecodeGenerator::emitResolve):
2361         (JSC::BytecodeGenerator::emitGetScopedVar):
2362         * bytecompiler/BytecodeGenerator.h:
2363         (JSC::BytecodeGenerator::setRegeneratingForExceptionInfo):
2364         * interpreter/Interpreter.cpp:
2365         (JSC::bytecodeOffsetForPC):
2366         (JSC::Interpreter::unwindCallFrame):
2367         (JSC::Interpreter::privateExecute):
2368         (JSC::Interpreter::retrieveLastCaller):
2369         (JSC::Interpreter::cti_op_instanceof):
2370         (JSC::Interpreter::cti_op_call_NotJSFunction):
2371         (JSC::Interpreter::cti_op_resolve):
2372         (JSC::Interpreter::cti_op_construct_NotJSConstruct):
2373         (JSC::Interpreter::cti_op_resolve_func):
2374         (JSC::Interpreter::cti_op_resolve_skip):
2375         (JSC::Interpreter::cti_op_resolve_global):
2376         (JSC::Interpreter::cti_op_resolve_with_base):
2377         (JSC::Interpreter::cti_op_throw):
2378         (JSC::Interpreter::cti_op_in):
2379         (JSC::Interpreter::cti_vm_throw):
2380         * jit/JIT.cpp:
2381         (JSC::JIT::privateCompile):
2382         * parser/Nodes.cpp:
2383         (JSC::EvalNode::generateBytecode):
2384         (JSC::EvalNode::bytecodeForExceptionInfoReparse):
2385         (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse):
2386         * parser/Nodes.h:
2387
2388 2009-01-08  Jian Li  <jianli@chromium.org>
2389
2390         Reviewed by Alexey Proskuryakov.
2391
2392         Add Win32 implementation of ThreadSpecific.
2393         https://bugs.webkit.org/show_bug.cgi?id=22614
2394
2395         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
2396         * wtf/ThreadSpecific.h:
2397         (WTF::ThreadSpecific::ThreadSpecific):
2398         (WTF::ThreadSpecific::~ThreadSpecific):
2399         (WTF::ThreadSpecific::get):
2400         (WTF::ThreadSpecific::set):
2401         (WTF::ThreadSpecific::destroy):
2402         * wtf/ThreadSpecificWin.cpp: Added.
2403         (WTF::ThreadSpecificThreadExit):
2404         * wtf/ThreadingWin.cpp:
2405         (WTF::wtfThreadEntryPoint):
2406
2407 2009-01-08  Justin McPherson <justin.mcpherson@nokia.com>
2408
2409         Reviewed by Simon Hausmann.
2410
2411         Fix compilation with Qt on NetBSD.
2412
2413         * runtime/Collector.cpp:
2414         (JSC::currentThreadStackBase): Use PLATFORM(NETBSD) to enter the
2415         code path to retrieve the stack base using pthread_attr_get_np.
2416         The PTHREAD_NP_H define is not used because the header file does
2417         not exist on NetBSD, but the function is declared nevertheless.
2418         * wtf/Platform.h: Introduce WTF_PLATFORM_NETBSD.
2419
2420 2009-01-07  Sam Weinig  <sam@webkit.org>
2421
2422         Reviewed by Geoffrey Garen.
2423
2424         <rdar://problem/6469060> Don't store exception information for a CodeBlock until first exception is thrown
2425
2426         Don't initially store exception information (lineNumber/expressionRange/getByIdExcecptionInfo)
2427         in CodeBlocks blocks.  Instead, re-parse for the data on demand and cache it then.
2428
2429         One important change that was needed to make this work was to pad op_get_global_var with nops to
2430         be the same length as op_resolve_global, since one could be replaced for the other on re-parsing,
2431         and we want to keep the offsets bytecode offsets the same.
2432
2433         1.3MB improvement on Membuster head.
2434
2435         * bytecode/CodeBlock.cpp:
2436         (JSC::CodeBlock::dump): Update op_get_global_var to account for the padding.
2437         (JSC::CodeBlock::dumpStatistics): Add more statistic dumping.
2438         (JSC::CodeBlock::CodeBlock): Initialize m_exceptionInfo.
2439         (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): Re-parses the CodeBlocks
2440         associated SourceCode and steals the ExceptionInfo from it.
2441         (JSC::CodeBlock::lineNumberForBytecodeOffset): Creates the exception info on demand.
2442         (JSC::CodeBlock::expressionRangeForBytecodeOffset): Ditto.
2443         (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset): Ditto.
2444         * bytecode/CodeBlock.h:
2445         (JSC::CodeBlock::numberOfExceptionHandlers): Updated to account for m_exceptionInfo indirection.
2446         (JSC::CodeBlock::addExceptionHandler): Ditto.
2447         (JSC::CodeBlock::exceptionHandler): Ditto.
2448         (JSC::CodeBlock::clearExceptionInfo): Ditto.
2449         (JSC::CodeBlock::addExpressionInfo): Ditto.
2450         (JSC::CodeBlock::addGetByIdExceptionInfo): Ditto.
2451         (JSC::CodeBlock::numberOfLineInfos): Ditto.
2452         (JSC::CodeBlock::addLineInfo): Ditto.
2453         (JSC::CodeBlock::lastLineInfo): Ditto.
2454
2455         * bytecode/Opcode.h: Change length of op_get_global_var to match op_resolve_global.
2456
2457         * bytecode/SamplingTool.cpp:
2458         (JSC::SamplingTool::dump): Add comment indicating why it is okay not to pass a CallFrame.
2459
2460         * bytecompiler/BytecodeGenerator.cpp:
2461         (JSC::BytecodeGenerator::generate): Clear the exception info after generation for Function and Eval
2462         Code when not in regenerate for exception info mode.
2463         (JSC::BytecodeGenerator::BytecodeGenerator): Initialize m_regeneratingForExceptionInfo to false.
2464         (JSC::BytecodeGenerator::emitGetScopedVar): Pad op_get_global_var with 2 nops.
2465         * bytecompiler/BytecodeGenerator.h:
2466         (JSC::BytecodeGenerator::setRegeneratingForExcpeptionInfo): Added.
2467
2468         * interpreter/Interpreter.cpp:
2469         (JSC::Interpreter::throwException): Pass the CallFrame to exception info accessors.
2470         (JSC::Interpreter::privateExecute): Ditto.
2471         (JSC::Interpreter::retrieveLastCaller): Ditto.
2472         (JSC::Interpreter::cti_op_new_error): Ditto.
2473
2474         * jit/JIT.cpp:
2475         (JSC::JIT::privateCompileMainPass): Pass the current bytecode offset instead of hard coding the
2476         line number, the stub will do the accessing if it gets called.
2477
2478         * parser/Nodes.cpp:
2479         (JSC::ProgramNode::emitBytecode): Moved.
2480         (JSC::ProgramNode::generateBytecode): Moved.
2481         (JSC::EvalNode::create): Moved.
2482         (JSC::EvalNode::bytecodeForExceptionInfoReparse): Added.
2483         (JSC::FunctionBodyNode::generateBytecode): Rename reparse to reparseInPlace.
2484         (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse): Addded.
2485
2486         * parser/Nodes.h:
2487         (JSC::ScopeNode::features): Added getter.
2488         * parser/Parser.cpp:
2489         (JSC::Parser::reparseInPlace): Renamed from reparse.
2490         * parser/Parser.h:
2491         (JSC::Parser::reparse): Added. Re-parses the passed in Node into
2492         a new Node.
2493         * runtime/ExceptionHelpers.cpp:
2494         (JSC::createUndefinedVariableError): Pass along CallFrame.
2495         (JSC::createInvalidParamError): Ditto.
2496         (JSC::createNotAConstructorError): Ditto.
2497         (JSC::createNotAFunctionError): Ditto.
2498         (JSC::createNotAnObjectError): Ditto.
2499
2500 2009-01-06  Gavin Barraclough  <baraclough@apple.com>
2501
2502         Reviewed by Maciej Stachowiak.
2503
2504         Replace accidentally removed references in BytecodeGenerator, deleting these
2505         will be hindering the sharing of constant numbers and strings.
2506
2507         The code to add a new constant (either number or string) to their respective
2508         map works by attempting to add a null entry, then checking the result of the
2509         add for null.  The first time, this should return the null (or noValue).
2510         The code checks for null (to see if this is the initial add), and then allocates
2511         a new number / string object.  This code relies on the result returned from
2512         the add to the map being stored as a reference, such that the allocated object
2513         will be stored in the map, and will be resused if the same constant is encountered
2514         again.  By failing to use a reference we will be leaking GC object for each
2515         additional entry added to the map.  As GC objects they should be clollected,
2516         be we should no be allocatin them in the first place.
2517
2518         https://bugs.webkit.org/show_bug.cgi?id=23158
2519
2520         * bytecompiler/BytecodeGenerator.cpp:
2521         (JSC::BytecodeGenerator::emitLoad):
2522
2523 2009-01-06  Oliver Hunt  <oliver@apple.com>
2524
2525         Reviewed by Gavin Barraclough.
2526
2527         <rdar://problem/6040850> JavaScript register file should use VirtualAlloc on Windows
2528
2529         Fairly simple, just reserve 4Mb of address space for the
2530         register file, and then commit one section at a time.  We
2531         don't release committed memory as we drop back, but then
2532         mac doesn't either so this probably not too much of a 
2533         problem.
2534
2535         * interpreter/RegisterFile.cpp:
2536         (JSC::RegisterFile::~RegisterFile):
2537         * interpreter/RegisterFile.h:
2538         (JSC::RegisterFile::RegisterFile):
2539         (JSC::RegisterFile::grow):
2540
2541 2009-01-06  Alexey Proskuryakov  <ap@webkit.org>
2542
2543         Reviewed by Darin Adler.
2544
2545         https://bugs.webkit.org/show_bug.cgi?id=23142
2546         ThreadGlobalData leaks seen on buildbot
2547
2548         * wtf/ThreadSpecific.h: (WTF::ThreadSpecific::destroy): Temporarily reset the thread
2549         specific value to make getter work on Mac OS X.
2550
2551         * wtf/Platform.h: Touch this file again to make sure all Windows builds use the most recent
2552         version of ThreadSpecific.h.
2553
2554 2009-01-05  Gavin Barraclough  <baraclough@apple.com>
2555
2556         Reviewed by Oliver Hunt.
2557
2558         Replace all uses of JSValue* with a new smart pointer type, JSValuePtr.
2559         
2560         A JavaScript value may be a heap object or boxed primitive, represented by a
2561         pointer, or may be an unboxed immediate value, such as an integer.  Since a
2562         value may dynamically need to contain either a pointer value or an immediate,
2563         we encode immediates as pointer values (since all valid JSCell pointers are
2564         allocated at alligned addesses, unaligned addresses are available to encode
2565         immediates).  As such all JavaScript values are represented using a JSValue*.
2566
2567         This implementation is encumbered by a number of constraints.  It ties the
2568         JSValue representation to the size of pointer on the platform, which, for
2569         example, means that we currently can represent different ranges of integers
2570         as immediates on x86 and x86-64.  It also prevents us from overloading the
2571         to-boolean conversion used to test for noValue() - effectively forcing us
2572         to represent noValue() as 0.  This would potentially be problematic were we
2573         to wish to encode integer values differently (e.g. were we to use the v8
2574         encoding, where pointers are tagged with 1 and integers with 0, then the
2575         immediate integer 0 would conflict with noValue()).
2576
2577         This patch replaces all usage of JSValue* with a new class, JSValuePtr,
2578         which encapsulates the pointer.  JSValuePtr maintains the same interface as
2579         JSValue*, overloading operator-> and operator bool such that previous
2580         operations in the code on variables of type JSValue* are still supported.
2581
2582         In order to provide a ProtectPtr<> type with support for the new value
2583         representation (without using the internal JSValue type directly), a new
2584         ProtectJSValuePtr type has been added, equivalent to the previous type
2585         ProtectPtr<JSValue>.
2586
2587         This patch is likely the first in a sequence of three changes.  With the
2588         value now encapsulated it will likely make sense to migrate the functionality
2589         from JSValue into JSValuePtr, such that the internal pointer representation
2590         need not be exposed.  Through migrating the functionality to the wrapper
2591         class the existing JSValue should be rendered redundant, and the class is
2592         likely to be removed (the JSValuePtr now wrapping a pointer to a JSCell).
2593         At this stage it will likely make sense to rename JSValuePtr to JSValue.
2594
2595         https://bugs.webkit.org/show_bug.cgi?id=23114
2596
2597         * API/APICast.h:
2598         (toJS):
2599         (toRef):
2600         * API/JSBase.cpp:
2601         (JSEvaluateScript):
2602         * API/JSCallbackConstructor.h:
2603         (JSC::JSCallbackConstructor::createStructure):
2604         * API/JSCallbackFunction.cpp:
2605         (JSC::JSCallbackFunction::call):
2606         * API/JSCallbackFunction.h:
2607         (JSC::JSCallbackFunction::createStructure):
2608         * API/JSCallbackObject.h:
2609         (JSC::JSCallbackObject::createStructure):
2610         * API/JSCallbackObjectFunctions.h:
2611         (JSC::::asCallbackObject):
2612         (JSC::::put):
2613         (JSC::::hasInstance):
2614         (JSC::::call):
2615         (JSC::::staticValueGetter):
2616         (JSC::::staticFunctionGetter):
2617         (JSC::::callbackGetter):
2618         * API/JSContextRef.cpp:
2619         * API/JSObjectRef.cpp:
2620         (JSObjectMakeConstructor):
2621         (JSObjectSetPrototype):
2622         (JSObjectGetProperty):
2623         (JSObjectSetProperty):
2624         (JSObjectGetPropertyAtIndex):
2625         (JSObjectSetPropertyAtIndex):
2626         * API/JSValueRef.cpp:
2627         (JSValueGetType):
2628         (JSValueIsUndefined):
2629         (JSValueIsNull):
2630         (JSValueIsBoolean):
2631         (JSValueIsNumber):
2632         (JSValueIsString):
2633         (JSValueIsObject):
2634         (JSValueIsObjectOfClass):
2635         (JSValueIsEqual):
2636         (JSValueIsStrictEqual):
2637         (JSValueIsInstanceOfConstructor):
2638         (JSValueToBoolean):
2639         (JSValueToNumber):
2640         (JSValueToStringCopy):
2641         (JSValueToObject):
2642         (JSValueProtect):
2643         (JSValueUnprotect):
2644         * JavaScriptCore.exp:
2645         * bytecode/CodeBlock.cpp:
2646         (JSC::valueToSourceString):
2647         (JSC::constantName):
2648         (JSC::CodeBlock::dump):
2649         * bytecode/CodeBlock.h:
2650         (JSC::CodeBlock::getConstant):
2651         (JSC::CodeBlock::addUnexpectedConstant):
2652         (JSC::CodeBlock::unexpectedConstant):
2653         * bytecode/EvalCodeCache.h:
2654         (JSC::EvalCodeCache::get):
2655         * bytecompiler/BytecodeGenerator.cpp:
2656         (JSC::BytecodeGenerator::BytecodeGenerator):
2657         (JSC::BytecodeGenerator::addConstant):
2658         (JSC::BytecodeGenerator::addUnexpectedConstant):
2659         (JSC::BytecodeGenerator::emitLoad):
2660         (JSC::BytecodeGenerator::emitLoadJSV):
2661         (JSC::BytecodeGenerator::emitGetScopedVar):
2662         (JSC::BytecodeGenerator::emitPutScopedVar):
2663         (JSC::BytecodeGenerator::emitNewError):
2664         (JSC::keyForImmediateSwitch):
2665         * bytecompiler/BytecodeGenerator.h:
2666         (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue):
2667         (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue):
2668         * debugger/DebuggerCallFrame.cpp:
2669         (JSC::DebuggerCallFrame::evaluate):
2670         * debugger/DebuggerCallFrame.h:
2671         (JSC::DebuggerCallFrame::DebuggerCallFrame):
2672         (JSC::DebuggerCallFrame::exception):
2673         * interpreter/CallFrame.cpp:
2674         (JSC::CallFrame::thisValue):
2675         * interpreter/CallFrame.h:
2676         (JSC::ExecState::setException):
2677         (JSC::ExecState::exception):
2678         (JSC::ExecState::exceptionSlot):
2679         (JSC::ExecState::hadException):
2680         * interpreter/Interpreter.cpp:
2681         (JSC::fastIsNumber):
2682         (JSC::fastToInt32):
2683         (JSC::fastToUInt32):
2684         (JSC::jsLess):
2685         (JSC::jsLessEq):
2686         (JSC::jsAddSlowCase):
2687         (JSC::jsAdd):
2688         (JSC::jsTypeStringForValue):
2689         (JSC::jsIsObjectType):
2690         (JSC::jsIsFunctionType):
2691         (JSC::Interpreter::resolve):
2692         (JSC::Interpreter::resolveSkip):
2693         (JSC::Interpreter::resolveGlobal):
2694         (JSC::inlineResolveBase):
2695         (JSC::Interpreter::resolveBase):
2696         (JSC::Interpreter::resolveBaseAndProperty):
2697         (JSC::Interpreter::resolveBaseAndFunc):
2698         (JSC::isNotObject):
2699         (JSC::Interpreter::callEval):
2700         (JSC::Interpreter::unwindCallFrame):
2701         (JSC::Interpreter::throwException):
2702         (JSC::Interpreter::execute):
2703         (JSC::Interpreter::checkTimeout):
2704         (JSC::Interpreter::createExceptionScope):
2705         (JSC::cachePrototypeChain):
2706         (JSC::Interpreter::tryCachePutByID):
2707         (JSC::countPrototypeChainEntriesAndCheckForProxies):
2708         (JSC::Interpreter::tryCacheGetByID):
2709         (JSC::Interpreter::privateExecute):
2710         (JSC::Interpreter::retrieveArguments):
2711         (JSC::Interpreter::retrieveCaller):
2712         (JSC::Interpreter::retrieveLastCaller):
2713         (JSC::Interpreter::tryCTICachePutByID):
2714         (JSC::Interpreter::tryCTICacheGetByID):
2715         (JSC::returnToThrowTrampoline):
2716         (JSC::Interpreter::cti_op_convert_this):
2717         (JSC::Interpreter::cti_op_add):
2718         (JSC::Interpreter::cti_op_pre_inc):
2719         (JSC::Interpreter::cti_op_loop_if_less):
2720         (JSC::Interpreter::cti_op_loop_if_lesseq):
2721         (JSC::Interpreter::cti_op_get_by_id_generic):
2722         (JSC::Interpreter::cti_op_get_by_id):
2723         (JSC::Interpreter::cti_op_get_by_id_second):
2724         (JSC::Interpreter::cti_op_get_by_id_self_fail):
2725         (JSC::Interpreter::cti_op_get_by_id_proto_list):
2726         (JSC::Interpreter::cti_op_get_by_id_proto_list_full):
2727         (JSC::Interpreter::cti_op_get_by_id_proto_fail):
2728         (JSC::Interpreter::cti_op_get_by_id_array_fail):
2729         (JSC::Interpreter::cti_op_get_by_id_string_fail):
2730         (JSC::Interpreter::cti_op_instanceof):
2731         (JSC::Interpreter::cti_op_del_by_id):
2732         (JSC::Interpreter::cti_op_mul):
2733         (JSC::Interpreter::cti_op_call_NotJSFunction):
2734         (JSC::Interpreter::cti_op_resolve):
2735         (JSC::Interpreter::cti_op_construct_NotJSConstruct):
2736         (JSC::Interpreter::cti_op_get_by_val):
2737         (JSC::Interpreter::cti_op_resolve_func):
2738         (JSC::Interpreter::cti_op_sub):
2739         (JSC::Interpreter::cti_op_put_by_val):
2740         (JSC::Interpreter::cti_op_put_by_val_array):
2741         (JSC::Interpreter::cti_op_lesseq):
2742         (JSC::Interpreter::cti_op_loop_if_true):
2743         (JSC::Interpreter::cti_op_negate):
2744         (JSC::Interpreter::cti_op_resolve_base):
2745         (JSC::Interpreter::cti_op_resolve_skip):
2746         (JSC::Interpreter::cti_op_resolve_global):
2747         (JSC::Interpreter::cti_op_div):
2748         (JSC::Interpreter::cti_op_pre_dec):
2749         (JSC::Interpreter::cti_op_jless):
2750         (JSC::Interpreter::cti_op_not):
2751         (JSC::Interpreter::cti_op_jtrue):
2752         (JSC::Interpreter::cti_op_post_inc):
2753         (JSC::Interpreter::cti_op_eq):
2754         (JSC::Interpreter::cti_op_lshift):
2755         (JSC::Interpreter::cti_op_bitand):
2756         (JSC::Interpreter::cti_op_rshift):
2757         (JSC::Interpreter::cti_op_bitnot):
2758         (JSC::Interpreter::cti_op_resolve_with_base):
2759         (JSC::Interpreter::cti_op_mod):
2760         (JSC::Interpreter::cti_op_less):
2761         (JSC::Interpreter::cti_op_neq):
2762         (JSC::Interpreter::cti_op_post_dec):
2763         (JSC::Interpreter::cti_op_urshift):
2764         (JSC::Interpreter::cti_op_bitxor):
2765         (JSC::Interpreter::cti_op_bitor):
2766         (JSC::Interpreter::cti_op_call_eval):
2767         (JSC::Interpreter::cti_op_throw):
2768         (JSC::Interpreter::cti_op_next_pname):
2769         (JSC::Interpreter::cti_op_typeof):
2770         (JSC::Interpreter::cti_op_is_undefined):
2771         (JSC::Interpreter::cti_op_is_boolean):
2772         (JSC::Interpreter::cti_op_is_number):
2773         (JSC::Interpreter::cti_op_is_string):
2774         (JSC::Interpreter::cti_op_is_object):
2775         (JSC::Interpreter::cti_op_is_function):
2776         (JSC::Interpreter::cti_op_stricteq):
2777         (JSC::Interpreter::cti_op_nstricteq):
2778         (JSC::Interpreter::cti_op_to_jsnumber):
2779         (JSC::Interpreter::cti_op_in):
2780         (JSC::Interpreter::cti_op_switch_imm):
2781         (JSC::Interpreter::cti_op_switch_char):
2782         (JSC::Interpreter::cti_op_switch_string):
2783         (JSC::Interpreter::cti_op_del_by_val):
2784         (JSC::Interpreter::cti_op_new_error):
2785         (JSC::Interpreter::cti_vm_throw):
2786         * interpreter/Interpreter.h:
2787         (JSC::Interpreter::isJSArray):
2788         (JSC::Interpreter::isJSString):
2789         * interpreter/Register.h:
2790         (JSC::Register::):
2791         (JSC::Register::Register):
2792         (JSC::Register::jsValue):
2793         (JSC::Register::getJSValue):
2794         * jit/JIT.cpp:
2795         (JSC::):
2796         (JSC::JIT::compileOpStrictEq):
2797         (JSC::JIT::privateCompileMainPass):
2798         (JSC::JIT::privateCompileSlowCases):
2799         * jit/JIT.h:
2800         (JSC::):
2801         (JSC::JIT::execute):
2802         * jit/JITArithmetic.cpp:
2803         (JSC::JIT::compileFastArith_op_rshift):
2804         (JSC::JIT::compileFastArithSlow_op_rshift):
2805         * jit/JITCall.cpp:
2806         (JSC::JIT::unlinkCall):
2807         (JSC::JIT::compileOpCallInitializeCallFrame):
2808         (JSC::JIT::compileOpCall):
2809         * jit/JITInlineMethods.h:
2810         (JSC::JIT::emitGetVirtualRegister):
2811         (JSC::JIT::getConstantOperand):
2812         (JSC::JIT::isOperandConstant31BitImmediateInt):
2813         (JSC::JIT::emitPutJITStubArgFromVirtualRegister):
2814         (JSC::JIT::emitInitRegister):
2815         * jit/JITPropertyAccess.cpp:
2816         (JSC::resizePropertyStorage):
2817         (JSC::JIT::privateCompilePutByIdTransition):
2818         (JSC::JIT::patchGetByIdSelf):
2819         (JSC::JIT::patchPutByIdReplace):
2820         (JSC::JIT::privateCompileGetByIdSelf):
2821         (JSC::JIT::privateCompileGetByIdProto):
2822         (JSC::JIT::privateCompileGetByIdSelfList):
2823         (JSC::JIT::privateCompileGetByIdProtoList):
2824         (JSC::JIT::privateCompileGetByIdChainList):
2825         (JSC::JIT::privateCompileGetByIdChain):
2826         (JSC::JIT::privateCompilePutByIdReplace):
2827         * jsc.cpp:
2828         (functionPrint):
2829         (functionDebug):
2830         (functionGC):
2831         (functionVersion):
2832         (functionRun):
2833         (functionLoad):
2834         (functionReadline):
2835         (functionQuit):
2836         * parser/Nodes.cpp:
2837         (JSC::NullNode::emitBytecode):
2838         (JSC::ArrayNode::emitBytecode):
2839         (JSC::FunctionCallValueNode::emitBytecode):
2840         (JSC::FunctionCallResolveNode::emitBytecode):
2841         (JSC::VoidNode::emitBytecode):
2842         (JSC::ConstDeclNode::emitCodeSingle):
2843         (JSC::ReturnNode::emitBytecode):
2844         (JSC::processClauseList):
2845         (JSC::EvalNode::emitBytecode):
2846         (JSC::FunctionBodyNode::emitBytecode):
2847         (JSC::ProgramNode::emitBytecode):
2848         * profiler/ProfileGenerator.cpp:
2849         (JSC::ProfileGenerator::addParentForConsoleStart):
2850         * profiler/Profiler.cpp:
2851         (JSC::Profiler::willExecute):
2852         (JSC::Profiler::didExecute):
2853         (JSC::Profiler::createCallIdentifier):
2854         * profiler/Profiler.h:
2855         * runtime/ArgList.cpp:
2856         (JSC::ArgList::slowAppend):
2857         * runtime/ArgList.h:
2858         (JSC::ArgList::at):
2859         (JSC::ArgList::append):
2860         * runtime/Arguments.cpp:
2861         (JSC::Arguments::put):
2862         * runtime/Arguments.h:
2863         (JSC::Arguments::createStructure):
2864         (JSC::asArguments):
2865         * runtime/ArrayConstructor.cpp:
2866         (JSC::callArrayConstructor):
2867         * runtime/ArrayPrototype.cpp:
2868         (JSC::getProperty):
2869         (JSC::putProperty):
2870         (JSC::arrayProtoFuncToString):
2871         (JSC::arrayProtoFuncToLocaleString):
2872         (JSC::arrayProtoFuncJoin):
2873         (JSC::arrayProtoFuncConcat):
2874         (JSC::arrayProtoFuncPop):
2875         (JSC::arrayProtoFuncPush):
2876         (JSC::arrayProtoFuncReverse):
2877         (JSC::arrayProtoFuncShift):
2878         (JSC::arrayProtoFuncSlice):
2879         (JSC::arrayProtoFuncSort):
2880         (JSC::arrayProtoFuncSplice):
2881         (JSC::arrayProtoFuncUnShift):
2882         (JSC::arrayProtoFuncFilter):
2883         (JSC::arrayProtoFuncMap):
2884         (JSC::arrayProtoFuncEvery):
2885         (JSC::arrayProtoFuncForEach):
2886         (JSC::arrayProtoFuncSome):
2887         (JSC::arrayProtoFuncIndexOf):
2888         (JSC::arrayProtoFuncLastIndexOf):
2889         * runtime/BooleanConstructor.cpp:
2890         (JSC::callBooleanConstructor):
2891         (JSC::constructBooleanFromImmediateBoolean):
2892         * runtime/BooleanConstructor.h:
2893         * runtime/BooleanObject.h:
2894         (JSC::asBooleanObject):
2895         * runtime/BooleanPrototype.cpp:
2896         (JSC::booleanProtoFuncToString):
2897         (JSC::booleanProtoFuncValueOf):
2898         * runtime/CallData.cpp:
2899         (JSC::call):
2900         * runtime/CallData.h:
2901         * runtime/Collector.cpp:
2902         (JSC::Heap::protect):
2903         (JSC::Heap::unprotect):
2904         (JSC::Heap::heap):
2905         (JSC::Heap::collect):
2906         * runtime/Collector.h:
2907         * runtime/Completion.cpp:
2908         (JSC::evaluate):
2909         * runtime/Completion.h:
2910         (JSC::Completion::Completion):
2911         (JSC::Completion::value):
2912         (JSC::Completion::setValue):
2913         (JSC::Completion::isValueCompletion):
2914         * runtime/ConstructData.cpp:
2915         (JSC::construct):
2916         * runtime/ConstructData.h:
2917         * runtime/DateConstructor.cpp:
2918         (JSC::constructDate):
2919         (JSC::callDate):
2920         (JSC::dateParse):
2921         (JSC::dateNow):
2922         (JSC::dateUTC):
2923         * runtime/DateInstance.h:
2924         (JSC::asDateInstance):
2925         * runtime/DatePrototype.cpp:
2926         (JSC::dateProtoFuncToString):
2927         (JSC::dateProtoFuncToUTCString):
2928         (JSC::dateProtoFuncToDateString):
2929         (JSC::dateProtoFuncToTimeString):
2930         (JSC::dateProtoFuncToLocaleString):
2931         (JSC::dateProtoFuncToLocaleDateString):
2932         (JSC::dateProtoFuncToLocaleTimeString):
2933         (JSC::dateProtoFuncValueOf):
2934         (JSC::dateProtoFuncGetTime):
2935         (JSC::dateProtoFuncGetFullYear):
2936         (JSC::dateProtoFuncGetUTCFullYear):
2937         (JSC::dateProtoFuncToGMTString):
2938         (JSC::dateProtoFuncGetMonth):
2939         (JSC::dateProtoFuncGetUTCMonth):
2940         (JSC::dateProtoFuncGetDate):
2941         (JSC::dateProtoFuncGetUTCDate):
2942         (JSC::dateProtoFuncGetDay):
2943         (JSC::dateProtoFuncGetUTCDay):
2944         (JSC::dateProtoFuncGetHours):
2945         (JSC::dateProtoFuncGetUTCHours):
2946         (JSC::dateProtoFuncGetMinutes):
2947         (JSC::dateProtoFuncGetUTCMinutes):
2948         (JSC::dateProtoFuncGetSeconds):
2949         (JSC::dateProtoFuncGetUTCSeconds):
2950         (JSC::dateProtoFuncGetMilliSeconds):
2951         (JSC::dateProtoFuncGetUTCMilliseconds):
2952         (JSC::dateProtoFuncGetTimezoneOffset):
2953         (JSC::dateProtoFuncSetTime):
2954         (JSC::setNewValueFromTimeArgs):
2955         (JSC::setNewValueFromDateArgs):
2956         (JSC::dateProtoFuncSetMilliSeconds):
2957         (JSC::dateProtoFuncSetUTCMilliseconds):
2958         (JSC::dateProtoFuncSetSeconds):
2959         (JSC::dateProtoFuncSetUTCSeconds):
2960         (JSC::dateProtoFuncSetMinutes):
2961         (JSC::dateProtoFuncSetUTCMinutes):
2962         (JSC::dateProtoFuncSetHours):
2963         (JSC::dateProtoFuncSetUTCHours):
2964         (JSC::dateProtoFuncSetDate):
2965         (JSC::dateProtoFuncSetUTCDate):
2966         (JSC::dateProtoFuncSetMonth):
2967         (JSC::dateProtoFuncSetUTCMonth):
2968         (JSC::dateProtoFuncSetFullYear):
2969         (JSC::dateProtoFuncSetUTCFullYear):
2970         (JSC::dateProtoFuncSetYear):
2971         (JSC::dateProtoFuncGetYear):
2972         * runtime/DatePrototype.h:
2973         (JSC::DatePrototype::createStructure):
2974         * runtime/ErrorConstructor.cpp:
2975         (JSC::callErrorConstructor):
2976         * runtime/ErrorPrototype.cpp:
2977         (JSC::errorProtoFuncToString):
2978         * runtime/ExceptionHelpers.cpp:
2979         (JSC::createInterruptedExecutionException):
2980         (JSC::createError):
2981         (JSC::createStackOverflowError):
2982         (JSC::createUndefinedVariableError):
2983         (JSC::createErrorMessage):
2984         (JSC::createInvalidParamError):
2985         (JSC::createNotAConstructorError):
2986         (JSC::createNotAFunctionError):
2987         * runtime/ExceptionHelpers.h:
2988         * runtime/FunctionConstructor.cpp:
2989         (JSC::callFunctionConstructor):
2990         * runtime/FunctionPrototype.cpp:
2991         (JSC::callFunctionPrototype):
2992         (JSC::functionProtoFuncToString):
2993         (JSC::functionProtoFuncApply):
2994         (JSC::functionProtoFuncCall):
2995         * runtime/FunctionPrototype.h:
2996         (JSC::FunctionPrototype::createStructure):
2997         * runtime/GetterSetter.cpp:
2998         (JSC::GetterSetter::toPrimitive):
2999         (JSC::GetterSetter::getPrimitiveNumber):
3000         * runtime/GetterSetter.h:
3001         (JSC::asGetterSetter):
3002         * runtime/InitializeThreading.cpp:
3003         * runtime/InternalFunction.h:
3004         (JSC::InternalFunction::createStructure):
3005         (JSC::asInternalFunction):
3006         * runtime/JSActivation.cpp:
3007         (JSC::JSActivation::getOwnPropertySlot):
3008         (JSC::JSActivation::put):
3009         (JSC::JSActivation::putWithAttributes):
3010         (JSC::JSActivation::argumentsGetter):
3011         * runtime/JSActivation.h:
3012         (JSC::JSActivation::createStructure):
3013         (JSC::asActivation):
3014         * runtime/JSArray.cpp:
3015         (JSC::storageSize):
3016         (JSC::JSArray::JSArray):
3017         (JSC::JSArray::getOwnPropertySlot):
3018         (JSC::JSArray::put):
3019         (JSC::JSArray::putSlowCase):
3020         (JSC::JSArray::deleteProperty):
3021         (JSC::JSArray::getPropertyNames):
3022         (JSC::JSArray::setLength):
3023         (JSC::JSArray::pop):
3024         (JSC::JSArray::push):
3025         (JSC::JSArray::mark):
3026         (JSC::JSArray::sort):
3027         (JSC::JSArray::compactForSorting):
3028         (JSC::JSArray::checkConsistency):
3029         (JSC::constructArray):
3030         * runtime/JSArray.h:
3031         (JSC::JSArray::getIndex):
3032         (JSC::JSArray::setIndex):
3033         (JSC::JSArray::createStructure):
3034         (JSC::asArray):
3035         * runtime/JSCell.cpp:
3036         (JSC::JSCell::put):
3037         (JSC::JSCell::getJSNumber):
3038         * runtime/JSCell.h:
3039         (JSC::asCell):
3040         (JSC::JSValue::asCell):
3041         (JSC::JSValue::toPrimitive):
3042         (JSC::JSValue::getPrimitiveNumber):
3043         (JSC::JSValue::getJSNumber):
3044         * runtime/JSFunction.cpp:
3045         (JSC::JSFunction::call):
3046         (JSC::JSFunction::argumentsGetter):
3047         (JSC::JSFunction::callerGetter):
3048         (JSC::JSFunction::lengthGetter):
3049         (JSC::JSFunction::getOwnPropertySlot):
3050         (JSC::JSFunction::put):
3051         (JSC::JSFunction::construct):
3052         * runtime/JSFunction.h:
3053         (JSC::JSFunction::createStructure):
3054         (JSC::asFunction):
3055         * runtime/JSGlobalData.h:
3056         * runtime/JSGlobalObject.cpp:
3057         (JSC::markIfNeeded):
3058         (JSC::JSGlobalObject::put):
3059         (JSC::JSGlobalObject::putWithAttributes):
3060         (JSC::JSGlobalObject::reset):
3061         (JSC::JSGlobalObject::resetPrototype):
3062         * runtime/JSGlobalObject.h:
3063         (JSC::JSGlobalObject::createStructure):
3064         (JSC::JSGlobalObject::GlobalPropertyInfo::GlobalPropertyInfo):
3065         (JSC::asGlobalObject):
3066         (JSC::Structure::prototypeForLookup):
3067         * runtime/JSGlobalObjectFunctions.cpp:
3068         (JSC::encode):
3069         (JSC::decode):
3070         (JSC::globalFuncEval):
3071         (JSC::globalFuncParseInt):
3072         (JSC::globalFuncParseFloat):
3073         (JSC::globalFuncIsNaN):
3074         (JSC::globalFuncIsFinite):
3075         (JSC::globalFuncDecodeURI):
3076         (JSC::globalFuncDecodeURIComponent):
3077         (JSC::globalFuncEncodeURI):
3078         (JSC::globalFuncEncodeURIComponent):
3079         (JSC::globalFuncEscape):
3080         (JSC::globalFuncUnescape):
3081         (JSC::globalFuncJSCPrint):
3082         * runtime/JSGlobalObjectFunctions.h:
3083         * runtime/JSImmediate.cpp:
3084         (JSC::JSImmediate::toThisObject):
3085         (JSC::JSImmediate::toObject):
3086         (JSC::JSImmediate::prototype):
3087         (JSC::JSImmediate::toString):
3088         * runtime/JSImmediate.h:
3089         (JSC::JSImmediate::isImmediate):
3090         (JSC::JSImmediate::isNumber):
3091         (JSC::JSImmediate::isPositiveNumber):
3092         (JSC::JSImmediate::isBoolean):
3093         (JSC::JSImmediate::isUndefinedOrNull):
3094         (JSC::JSImmediate::isNegative):
3095         (JSC::JSImmediate::isEitherImmediate):
3096         (JSC::JSImmediate::isAnyImmediate):
3097         (JSC::JSImmediate::areBothImmediate):
3098         (JSC::JSImmediate::areBothImmediateNumbers):
3099         (JSC::JSImmediate::andImmediateNumbers):
3100         (JSC::JSImmediate::xorImmediateNumbers):
3101         (JSC::JSImmediate::orImmediateNumbers):
3102         (JSC::JSImmediate::rightShiftImmediateNumbers):
3103         (JSC::JSImmediate::canDoFastAdditiveOperations):
3104         (JSC::JSImmediate::addImmediateNumbers):
3105         (JSC::JSImmediate::subImmediateNumbers):
3106         (JSC::JSImmediate::incImmediateNumber):
3107         (JSC::JSImmediate::decImmediateNumber):
3108         (JSC::JSImmediate::makeValue):
3109         (JSC::JSImmediate::makeInt):
3110         (JSC::JSImmediate::makeBool):
3111         (JSC::JSImmediate::makeUndefined):
3112         (JSC::JSImmediate::makeNull):
3113         (JSC::JSImmediate::intValue):
3114         (JSC::JSImmediate::uintValue):
3115         (JSC::JSImmediate::boolValue):
3116         (JSC::JSImmediate::rawValue):
3117         (JSC::JSImmediate::trueImmediate):
3118         (JSC::JSImmediate::falseImmediate):
3119         (JSC::JSImmediate::undefinedImmediate):
3120         (JSC::JSImmediate::nullImmediate):
3121         (JSC::JSImmediate::zeroImmediate):
3122         (JSC::JSImmediate::oneImmediate):
3123         (JSC::JSImmediate::impossibleValue):
3124         (JSC::JSImmediate::toBoolean):
3125         (JSC::JSImmediate::getTruncatedUInt32):
3126         (JSC::JSImmediate::from):
3127         (JSC::JSImmediate::getTruncatedInt32):
3128         (JSC::JSImmediate::toDouble):
3129         (JSC::JSImmediate::getUInt32):
3130         (JSC::jsNull):
3131         (JSC::jsBoolean):
3132         (JSC::jsUndefined):
3133         (JSC::JSValue::isUndefined):
3134         (JSC::JSValue::isNull):
3135         (JSC::JSValue::isUndefinedOrNull):
3136         (JSC::JSValue::isBoolean):
3137         (JSC::JSValue::getBoolean):
3138         (JSC::JSValue::toInt32):
3139         (JSC::JSValue::toUInt32):
3140         (JSC::toInt32):
3141         (JSC::toUInt32):
3142         * runtime/JSNotAnObject.cpp:
3143         (JSC::JSNotAnObject::toPrimitive):
3144         (JSC::JSNotAnObject::getPrimitiveNumber):
3145         (JSC::JSNotAnObject::put):
3146         * runtime/JSNotAnObject.h:
3147         (JSC::JSNotAnObject::createStructure):
3148         * runtime/JSNumberCell.cpp:
3149         (JSC::JSNumberCell::toPrimitive):
3150         (JSC::JSNumberCell::getPrimitiveNumber):
3151         (JSC::JSNumberCell::getJSNumber):
3152         (JSC::jsNumberCell):
3153         (JSC::jsNaN):
3154         * runtime/JSNumberCell.h:
3155         (JSC::JSNumberCell::createStructure):
3156         (JSC::asNumberCell):
3157         (JSC::jsNumber):
3158         (JSC::JSValue::toJSNumber):
3159         * runtime/JSObject.cpp:
3160         (JSC::JSObject::mark):
3161         (JSC::JSObject::put):
3162         (JSC::JSObject::putWithAttributes):
3163         (JSC::callDefaultValueFunction):
3164         (JSC::JSObject::getPrimitiveNumber):
3165         (JSC::JSObject::defaultValue):
3166         (JSC::JSObject::defineGetter):
3167         (JSC::JSObject::defineSetter):
3168         (JSC::JSObject::lookupGetter):
3169         (JSC::JSObject::lookupSetter):
3170         (JSC::JSObject::hasInstance):
3171         (JSC::JSObject::toNumber):
3172         (JSC::JSObject::toString):
3173         (JSC::JSObject::fillGetterPropertySlot):
3174         * runtime/JSObject.h:
3175         (JSC::JSObject::getDirect):
3176         (JSC::JSObject::getDirectLocation):
3177         (JSC::JSObject::offsetForLocation):
3178         (JSC::JSObject::locationForOffset):
3179         (JSC::JSObject::getDirectOffset):
3180         (JSC::JSObject::putDirectOffset):
3181         (JSC::JSObject::createStructure):
3182         (JSC::asObject):
3183         (JSC::JSObject::prototype):
3184         (JSC::JSObject::setPrototype):
3185         (JSC::JSObject::inlineGetOwnPropertySlot):
3186         (JSC::JSObject::getOwnPropertySlotForWrite):
3187         (JSC::JSObject::getPropertySlot):
3188         (JSC::JSObject::get):
3189         (JSC::JSObject::putDirect):
3190         (JSC::JSObject::putDirectWithoutTransition):
3191         (JSC::JSObject::toPrimitive):
3192         (JSC::JSValue::get):
3193         (JSC::JSValue::put):
3194         (JSC::JSObject::allocatePropertyStorageInline):
3195         * runtime/JSPropertyNameIterator.cpp:
3196         (JSC::JSPropertyNameIterator::toPrimitive):
3197         (JSC::JSPropertyNameIterator::getPrimitiveNumber):
3198         * runtime/JSPropertyNameIterator.h:
3199         (JSC::JSPropertyNameIterator::create):
3200         (JSC::JSPropertyNameIterator::next):
3201         * runtime/JSStaticScopeObject.cpp:
3202         (JSC::JSStaticScopeObject::put):
3203         (JSC::JSStaticScopeObject::putWithAttributes):
3204         * runtime/JSStaticScopeObject.h:
3205         (JSC::JSStaticScopeObject::JSStaticScopeObject):
3206         (JSC::JSStaticScopeObject::createStructure):
3207         * runtime/JSString.cpp:
3208         (JSC::JSString::toPrimitive):
3209         (JSC::JSString::getPrimitiveNumber):
3210         (JSC::JSString::getOwnPropertySlot):
3211         * runtime/JSString.h:
3212         (JSC::JSString::createStructure):
3213         (JSC::asString):
3214         * runtime/JSValue.h:
3215         (JSC::JSValuePtr::makeImmediate):
3216         (JSC::JSValuePtr::immediateValue):
3217         (JSC::JSValuePtr::JSValuePtr):
3218         (JSC::JSValuePtr::operator->):
3219         (JSC::JSValuePtr::hasValue):
3220         (JSC::JSValuePtr::operator==):
3221         (JSC::JSValuePtr::operator!=):
3222         (JSC::JSValuePtr::encode):
3223         (JSC::JSValuePtr::decode):
3224         (JSC::JSValue::asValue):
3225         (JSC::noValue):
3226         (JSC::operator==):
3227         (JSC::operator!=):
3228         * runtime/JSVariableObject.h:
3229         (JSC::JSVariableObject::symbolTablePut):
3230         (JSC::JSVariableObject::symbolTablePutWithAttributes):
3231         * runtime/JSWrapperObject.cpp:
3232         (JSC::JSWrapperObject::mark):
3233         * runtime/JSWrapperObject.h:
3234         (JSC::JSWrapperObject::internalValue):
3235         (JSC::JSWrapperObject::setInternalValue):
3236         * runtime/Lookup.cpp:
3237         (JSC::setUpStaticFunctionSlot):
3238         * runtime/Lookup.h:
3239         (JSC::lookupPut):
3240         * runtime/MathObject.cpp:
3241         (JSC::mathProtoFuncAbs):
3242         (JSC::mathProtoFuncACos):
3243         (JSC::mathProtoFuncASin):
3244         (JSC::mathProtoFuncATan):
3245         (JSC::mathProtoFuncATan2):
3246         (JSC::mathProtoFuncCeil):
3247         (JSC::mathProtoFuncCos):
3248         (JSC::mathProtoFuncExp):
3249         (JSC::mathProtoFuncFloor):
3250         (JSC::mathProtoFuncLog):
3251         (JSC::mathProtoFuncMax):
3252         (JSC::mathProtoFuncMin):
3253         (JSC::mathProtoFuncPow):
3254         (JSC::mathProtoFuncRandom):
3255         (JSC::mathProtoFuncRound):
3256         (JSC::mathProtoFuncSin):
3257         (JSC::mathProtoFuncSqrt):
3258         (JSC::mathProtoFuncTan):
3259         * runtime/MathObject.h:
3260         (JSC::MathObject::createStructure):
3261         * runtime/NativeErrorConstructor.cpp:
3262         (JSC::callNativeErrorConstructor):
3263         * runtime/NumberConstructor.cpp:
3264         (JSC::numberConstructorNaNValue):
3265         (JSC::numberConstructorNegInfinity):
3266         (JSC::numberConstructorPosInfinity):
3267         (JSC::numberConstructorMaxValue):
3268         (JSC::numberConstructorMinValue):
3269         (JSC::callNumberConstructor):
3270         * runtime/NumberConstructor.h:
3271         (JSC::NumberConstructor::createStructure):
3272         * runtime/NumberObject.cpp:
3273         (JSC::NumberObject::getJSNumber):
3274         (JSC::constructNumberFromImmediateNumber):
3275         * runtime/NumberObject.h:
3276         * runtime/NumberPrototype.cpp:
3277         (JSC::numberProtoFuncToString):
3278         (JSC::numberProtoFuncToLocaleString):
3279         (JSC::numberProtoFuncValueOf):
3280         (JSC::numberProtoFuncToFixed):
3281         (JSC::numberProtoFuncToExponential):
3282         (JSC::numberProtoFuncToPrecision):
3283         * runtime/ObjectConstructor.cpp:
3284         (JSC::constructObject):
3285         (JSC::callObjectConstructor):
3286         * runtime/ObjectPrototype.cpp:
3287         (JSC::objectProtoFuncValueOf):
3288         (JSC::objectProtoFuncHasOwnProperty):
3289         (JSC::objectProtoFuncIsPrototypeOf):
3290         (JSC::objectProtoFuncDefineGetter):
3291         (JSC::objectProtoFuncDefineSetter):
3292         (JSC::objectProtoFuncLookupGetter):
3293         (JSC::objectProtoFuncLookupSetter):
3294         (JSC::objectProtoFuncPropertyIsEnumerable):
3295         (JSC::objectProtoFuncToLocaleString):
3296         (JSC::objectProtoFuncToString):
3297         * runtime/ObjectPrototype.h:
3298         * runtime/Operations.cpp:
3299         (JSC::equal):
3300         (JSC::equalSlowCase):
3301         (JSC::strictEqual):
3302         (JSC::strictEqualSlowCase):
3303         (JSC::throwOutOfMemoryError):
3304         * runtime/Operations.h:
3305         (JSC::equalSlowCaseInline):
3306         (JSC::strictEqualSlowCaseInline):
3307         * runtime/PropertySlot.cpp:
3308         (JSC::PropertySlot::functionGetter):
3309         * runtime/PropertySlot.h:
3310         (JSC::PropertySlot::PropertySlot):
3311         (JSC::PropertySlot::getValue):
3312         (JSC::PropertySlot::putValue):
3313         (JSC::PropertySlot::setValueSlot):
3314         (JSC::PropertySlot::setValue):
3315         (JSC::PropertySlot::setCustom):
3316         (JSC::PropertySlot::setCustomIndex):
3317         (JSC::PropertySlot::slotBase):
3318         (JSC::PropertySlot::setBase):
3319         (JSC::PropertySlot::):
3320         * runtime/Protect.h:
3321         (JSC::gcProtect):
3322         (JSC::gcUnprotect):
3323         (JSC::ProtectedPtr::ProtectedPtr):
3324         (JSC::ProtectedPtr::operator JSValuePtr):
3325         (JSC::ProtectedJSValuePtr::ProtectedJSValuePtr):
3326         (JSC::ProtectedJSValuePtr::get):
3327         (JSC::ProtectedJSValuePtr::operator JSValuePtr):
3328         (JSC::ProtectedJSValuePtr::operator->):
3329         (JSC::::ProtectedPtr):
3330         (JSC::::~ProtectedPtr):
3331         (JSC::::operator):
3332         (JSC::ProtectedJSValuePtr::~ProtectedJSValuePtr):
3333         (JSC::ProtectedJSValuePtr::operator=):
3334         (JSC::operator==):
3335         (JSC::operator!=):
3336         * runtime/RegExpConstructor.cpp:
3337         (JSC::RegExpConstructor::getBackref):
3338         (JSC::RegExpConstructor::getLastParen):
3339         (JSC::RegExpConstructor::getLeftContext):
3340         (JSC::RegExpConstructor::getRightContext):
3341         (JSC::regExpConstructorDollar1):
3342         (JSC::regExpConstructorDollar2):
3343         (JSC::regExpConstructorDollar3):
3344         (JSC::regExpConstructorDollar4):
3345         (JSC::regExpConstructorDollar5):
3346         (JSC::regExpConstructorDollar6):
3347         (JSC::regExpConstructorDollar7):
3348         (JSC::regExpConstructorDollar8):
3349         (JSC::regExpConstructorDollar9):
3350         (JSC::regExpConstructorInput):
3351         (JSC::regExpConstructorMultiline):
3352         (JSC::regExpConstructorLastMatch):
3353         (JSC::regExpConstructorLastParen):
3354         (JSC::regExpConstructorLeftContext):
3355         (JSC::regExpConstructorRightContext):
3356         (JSC::RegExpConstructor::put):
3357         (JSC::setRegExpConstructorInput):
3358         (JSC::setRegExpConstructorMultiline):
3359         (JSC::constructRegExp):
3360         (JSC::callRegExpConstructor):
3361         * runtime/RegExpConstructor.h:
3362         (JSC::RegExpConstructor::createStructure):
3363         (JSC::asRegExpConstructor):
3364         * runtime/RegExpMatchesArray.h:
3365         (JSC::RegExpMatchesArray::put):
3366         * runtime/RegExpObject.cpp:
3367         (JSC::regExpObjectGlobal):
3368         (JSC::regExpObjectIgnoreCase):
3369         (JSC::regExpObjectMultiline):
3370         (JSC::regExpObjectSource):
3371         (JSC::regExpObjectLastIndex):
3372         (JSC::RegExpObject::put):
3373         (JSC::setRegExpObjectLastIndex):
3374         (JSC::RegExpObject::test):
3375         (JSC::RegExpObject::exec):
3376         (JSC::callRegExpObject):
3377         * runtime/RegExpObject.h:
3378         (JSC::RegExpObject::createStructure):
3379         (JSC::asRegExpObject):
3380         * runtime/RegExpPrototype.cpp:
3381         (JSC::regExpProtoFuncTest):
3382         (JSC::regExpProtoFuncExec):
3383         (JSC::regExpProtoFuncCompile):
3384         (JSC::regExpProtoFuncToString):
3385         * runtime/StringConstructor.cpp:
3386         (JSC::stringFromCharCodeSlowCase):
3387         (JSC::stringFromCharCode):
3388         (JSC::callStringConstructor):
3389         * runtime/StringObject.cpp:
3390         (JSC::StringObject::put):
3391         * runtime/StringObject.h:
3392         (JSC::StringObject::createStructure):
3393         (JSC::asStringObject):
3394         * runtime/StringObjectThatMasqueradesAsUndefined.h:
3395         (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
3396         * runtime/StringPrototype.cpp:
3397         (JSC::stringProtoFuncReplace):
3398         (JSC::stringProtoFuncToString):
3399         (JSC::stringProtoFuncCharAt):
3400         (JSC::stringProtoFuncCharCodeAt):
3401         (JSC::stringProtoFuncConcat):
3402         (JSC::stringProtoFuncIndexOf):
3403         (JSC::stringProtoFuncLastIndexOf):
3404         (JSC::stringProtoFuncMatch):
3405         (JSC::stringProtoFuncSearch):
3406         (JSC::stringProtoFuncSlice):
3407         (JSC::stringProtoFuncSplit):
3408         (JSC::stringProtoFuncSubstr):
3409         (JSC::stringProtoFuncSubstring):
3410         (JSC::stringProtoFuncToLowerCase):
3411         (JSC::stringProtoFuncToUpperCase):
3412         (JSC::stringProtoFuncLocaleCompare):
3413         (JSC::stringProtoFuncBig):
3414         (JSC::stringProtoFuncSmall):
3415         (JSC::stringProtoFuncBlink):
3416         (JSC::stringProtoFuncBold):
3417         (JSC::stringProtoFuncFixed):
3418         (JSC::stringProtoFuncItalics):
3419         (JSC::stringProtoFuncStrike):
3420         (JSC::stringProtoFuncSub):
3421         (JSC::stringProtoFuncSup):
3422         (JSC::stringProtoFuncFontcolor):
3423         (JSC::stringProtoFuncFontsize):
3424         (JSC::stringProtoFuncAnchor):
3425         (JSC::stringProtoFuncLink):
3426         * runtime/Structure.cpp:
3427         (JSC::Structure::Structure):
3428         (JSC::Structure::changePrototypeTransition):
3429         (JSC::Structure::createCachedPrototypeChain):
3430         * runtime/Structure.h:
3431         (JSC::Structure::create):
3432         (JSC::Structure::setPrototypeWithoutTransition):
3433         (JSC::Structure::storedPrototype):
3434
3435 2009-01-06  Oliver Hunt  <oliver@apple.com>
3436
3437         Reviewed by Cameron Zwarich.
3438
3439         <https://bugs.webkit.org/show_bug.cgi?id=23085> [jsfunfuzz] Over released ScopeChainNode
3440         <rdar://problem/6474110>
3441
3442         So this delightful bug was caused by our unwind code using a ScopeChain to perform
3443         the unwind.  The ScopeChain would ref the initial top of the scope chain, then deref
3444         the resultant top of scope chain, which is incorrect.
3445
3446         This patch removes the dependency on ScopeChain for the unwind, and i've filed
3447         <https://bugs.webkit.org/show_bug.cgi?id=23144> to look into the unintuitive
3448         ScopeChain behaviour.
3449
3450         * interpreter/Interpreter.cpp:
3451         (JSC::Interpreter::throwException):
3452
3453 2009-01-06  Adam Roben  <aroben@apple.com>
3454
3455         Hopeful Windows crash-on-launch fix
3456
3457         * wtf/Platform.h: Force a world rebuild by touching this file.
3458
3459 2009-01-06  Holger Hans Peter Freyther  <zecke@selfish.org>
3460
3461         Reviewed by NOBODY (Build fix).
3462
3463         * GNUmakefile.am:Add ByteArray.cpp too
3464
3465 2009-01-06  Holger Hans Peter Freyther  <zecke@selfish.org>
3466
3467         Reviewed by NOBODY (Speculative build fix).
3468
3469         AllInOneFile.cpp does not include the JSByteArray.cpp include it...
3470
3471         * GNUmakefile.am:
3472
3473 2009-01-05  Oliver Hunt  <oliver@apple.com>
3474
3475         Reviewed by NOBODY (Build fix).
3476
3477         Fix Wx build
3478
3479         * JavaScriptCoreSources.bkl:
3480
3481 2009-01-05  Oliver Hunt  <oliver@apple.com>
3482
3483         Windows build fixes
3484
3485         Rubber-stamped by Alice Liu.
3486
3487         * interpreter/Interpreter.cpp:
3488         (JSC::Interpreter::Interpreter):
3489         * runtime/ByteArray.cpp:
3490         (JSC::ByteArray::create):
3491         * runtime/ByteArray.h:
3492
3493 2009-01-05  Oliver Hunt  <oliver@apple.com>
3494
3495         Reviewed by Gavin Barraclough.
3496
3497         CanvasPixelArray performance is too slow 
3498         <https://bugs.webkit.org/show_bug.cgi?id=23123>
3499
3500         The fix to this is to devirtualise get and put in a manner similar to
3501         JSString and JSArray.  To do this I've added a ByteArray implementation
3502         and JSByteArray wrapper to JSC.  We can then do vptr comparisons to
3503         devirtualise the calls.
3504
3505         This devirtualisation improves performance by 1.5-2x in my somewhat ad
3506         hoc tests.
3507
3508         * GNUmakefile.am:
3509         * JavaScriptCore.exp:
3510         * JavaScriptCore.pri:
3511         * JavaScriptCore.scons:
3512         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3513         * JavaScriptCore.xcodeproj/project.pbxproj:
3514         * interpreter/Interpreter.cpp:
3515         (JSC::Interpreter::Interpreter):
3516         (JSC::Interpreter::privateExecute):
3517         (JSC::Interpreter::cti_op_get_by_val):
3518         (JSC::Interpreter::cti_op_put_by_val):
3519         * interpreter/Interpreter.h:
3520         (JSC::Interpreter::isJSByteArray):
3521         * runtime/ByteArray.cpp: Added.
3522         (JSC::ByteArray::create):
3523         * runtime/ByteArray.h: Added.
3524         (JSC::ByteArray::length):
3525         (JSC::ByteArray::set):
3526         (JSC::ByteArray::get):
3527         (JSC::ByteArray::data):
3528         (JSC::ByteArray::ByteArray):
3529         * runtime/JSByteArray.cpp: Added.
3530         (JSC::):
3531         (JSC::JSByteArray::JSByteArray):
3532         (JSC::JSByteArray::createStructure):
3533         (JSC::JSByteArray::getOwnPropertySlot):
3534         (JSC::JSByteArray::put):
3535         (JSC::JSByteArray::getPropertyNames):
3536         * runtime/JSByteArray.h: Added.
3537         (JSC::JSByteArray::canAccessIndex):
3538         (JSC::JSByteArray::getIndex):
3539         (JSC::JSByteArray::setIndex):
3540         (JSC::JSByteArray::classInfo):
3541         (JSC::JSByteArray::length):
3542         (JSC::JSByteArray::):
3543         (JSC::JSByteArray::JSByteArray):
3544         (JSC::asByteArray):
3545
3546 2009-01-05  Alexey Proskuryakov  <ap@webkit.org>
3547
3548         Reviewed by Darin Adler.
3549
3550         https://bugs.webkit.org/show_bug.cgi?id=23073
3551         <rdar://problem/6471129> Workers crash on Windows Release builds
3552
3553         * wtf/ThreadSpecific.h:
3554         (WTF::ThreadSpecific::destroy): Changed to clear the pointer only after data object
3555         destruction is finished - otherwise, WebCore::ThreadGlobalData destructor was re-creating
3556         the object in order to access atomic string table.
3557         (WTF::ThreadSpecific::operator T*): Symmetrically, set up the per-thread pointer before
3558         data constructor is called.
3559
3560         * wtf/ThreadingWin.cpp: (WTF::wtfThreadEntryPoint): Remove a Windows-only hack to finalize
3561         a thread - pthreadVC2 is a DLL, so it gets thread detached messages, and cleans up thread
3562         specific data automatically. Besides, this code wasn't even compiled in for some time now.
3563
3564 2009-01-05  Alexey Proskuryakov  <ap@webkit.org>
3565
3566         Reviewed by Darin Adler.
3567
3568         https://bugs.webkit.org/show_bug.cgi?id=23115
3569         Create a version of ASSERT for use with otherwise unused variables
3570
3571         * wtf/Assertions.h: Added ASSERT_UNUSED.
3572
3573         * jit/ExecutableAllocatorPosix.cpp:
3574         (JSC::ExecutablePool::systemRelease):
3575         * runtime/Collector.cpp:
3576         (JSC::Heap::destroy):
3577         (JSC::Heap::heapAllocate):
3578         * runtime/JSNotAnObject.cpp:
3579         (JSC::JSNotAnObject::toPrimitive):
3580         (JSC::JSNotAnObject::getPrimitiveNumber):
3581         (JSC::JSNotAnObject::toBoolean):
3582         (JSC::JSNotAnObject::toNumber):
3583         (JSC::JSNotAnObject::toString):
3584         (JSC::JSNotAnObject::getOwnPropertySlot):
3585         (JSC::JSNotAnObject::put):
3586         (JSC::JSNotAnObject::deleteProperty):
3587         (JSC::JSNotAnObject::getPropertyNames):
3588         * wtf/TCSystemAlloc.cpp:
3589         (TCMalloc_SystemRelease):
3590         Use it in some places that used other idioms for this purpose.
3591
3592 2009-01-04  Alice Liu  <alice.liu@apple.com>
3593
3594         <rdar://problem/6341776> Merge m_transitionCount and m_offset in Structure.
3595
3596         Reviewed by Darin Adler.
3597
3598         * runtime/Structure.cpp:
3599         (JSC::Structure::Structure): Remove m_transitionCount
3600         (JSC::Structure::addPropertyTransitionToExistingStructure): No need to wait until after the assignment to offset to assert if it's notFound; move it up.
3601         (JSC::Structure::addPropertyTransition): Use method for transitionCount instead of m_transitionCount. Remove line that maintains the m_transitionCount.
3602         (JSC::Structure::changePrototypeTransition): Remove line that maintains the m_transitionCount.
3603         (JSC::Structure::getterSetterTransition): Remove line that maintains the m_transitionCount.
3604         * runtime/Structure.h:
3605         Changed s_maxTransitionLength and m_offset from size_t to signed char.  m_offset will never become greater than 64 
3606         because the structure transitions to a dictionary at that time.
3607         (JSC::Structure::transitionCount): method to replace the data member
3608
3609 2009-01-04  Darin Adler  <darin@apple.com>
3610
3611         Reviewed by David Kilzer.
3612
3613         Bug 15114: Provide compile-time assertions for sizeof(UChar), sizeof(DeprecatedChar), etc.
3614         https://bugs.webkit.org/show_bug.cgi?id=15114
3615
3616         * wtf/unicode/Unicode.h: Assert size of UChar. There is no DeprecatedChar any more.
3617
3618 2009-01-03  Sam Weinig  <sam@webkit.org>
3619
3620         Reviewed by Oliver Hunt.
3621
3622         Change the pcVector from storing native code pointers to storing offsets
3623         from the base pointer. This will allow us to generate the pcVector on demand
3624         for exceptions.
3625
3626         * bytecode/CodeBlock.h:
3627         (JSC::PC::PC):
3628         (JSC::getNativePCOffset):
3629         (JSC::CodeBlock::getBytecodeIndex):
3630         * jit/JIT.cpp:
3631         (JSC::JIT::privateCompile):
3632
3633 2009-01-02  Oliver Hunt  <oliver@apple.com>
3634
3635         Reviewed by NOBODY (Build fix).
3636         
3637         * runtime/ScopeChain.cpp:
3638
3639 2009-01-02  Oliver Hunt  <oliver@apple.com>
3640
3641         Reviewed by Gavin Barraclough.
3642
3643         [jsfunfuzz] unwind logic for exceptions in eval fails to account for dynamic scope external to the eval
3644         https://bugs.webkit.org/show_bug.cgi?id=23078
3645
3646         This bug was caused by eval codeblocks being generated without accounting
3647         for the depth of the scope chain they inherited.  This meant that exception
3648         handlers would understate their expected scope chain depth, which in turn
3649         led to incorrectly removing nodes from the scope chain.
3650
3651         * bytecompiler/BytecodeGenerator.cpp:
3652         (JSC::BytecodeGenerator::BytecodeGenerator):
3653         (JSC::BytecodeGenerator::emitCatch):
3654         * bytecompiler/BytecodeGenerator.h:
3655         * interpreter/Interpreter.cpp:
3656         (JSC::depth):
3657         * runtime/ScopeChain.cpp:
3658         (JSC::ScopeChain::localDepth):
3659         * runtime/ScopeChain.h:
3660         (JSC::ScopeChainNode::deref):
3661         (JSC::ScopeChainNode::ref):
3662
3663 2009-01-02  David Smith  <catfish.man@gmail.com>
3664
3665         Reviewed by Darin Adler.
3666         
3667         https://bugs.webkit.org/show_bug.cgi?id=22699
3668         Enable NodeList caching for getElementsByTagName
3669
3670         * wtf/HashFunctions.h: Moved the definition of PHI here and renamed to stringHashingStartValue
3671
3672 2009-01-02  David Kilzer  <ddkilzer@apple.com>
3673
3674         Attempt to fix Qt Linux build after r39553
3675
3676         * wtf/RandomNumberSeed.h: Include <sys/time.h> for gettimeofday().
3677         Include <sys/types.h> and <unistd.h> for getpid().
3678
3679 2009-01-02  David Kilzer  <ddkilzer@apple.com>
3680
3681         Bug 23081: These files are no longer part of the KDE libraries
3682
3683         <https://bugs.webkit.org/show_bug.cgi?id=23081>
3684
3685         Reviewed by Darin Adler.
3686
3687         Removed "This file is part of the KDE libraries" comment from
3688         source files.  Added or updated Apple copyrights as well.
3689
3690         * parser/Lexer.h:
3691         * wtf/HashCountedSet.h:
3692         * wtf/RetainPtr.h:
3693         * wtf/VectorTraits.h:
3694
3695 2009-01-02  David Kilzer  <ddkilzer@apple.com>
3696
3697         Bug 23080: Remove last vestiges of KJS references
3698
3699         <https://bugs.webkit.org/show_bug.cgi?id=23080>
3700
3701         Reviewed by Darin Adler.
3702
3703         Also updated Apple copyright statements.
3704
3705         * DerivedSources.make: Changed bison "kjsyy" prefix to "jscyy".
3706         * GNUmakefile.am: Ditto.
3707         * JavaScriptCore.pri: Ditto.  Also changed KJSBISON to JSCBISON
3708         and kjsbison to jscbison.
3709
3710         * JavaScriptCoreSources.bkl: Changed JSCORE_KJS_SOURCES to
3711         JSCORE_JSC_SOURCES.
3712         * jscore.bkl: Ditto.
3713
3714         * create_hash_table: Updated copyright and removed old comment.
3715
3716         * parser/Grammar.y: Changed "kjsyy" prefix to "jscyy" prefix.
3717         * parser/Lexer.cpp: Ditto.  Also changed KJS_DEBUG_LEX to
3718         JSC_DEBUG_LEX.
3719         (jscyylex):
3720         (JSC::Lexer::lex):
3721         * parser/Parser.cpp: Ditto.
3722         (JSC::Parser::parse):
3723
3724         * pcre/dftables: Changed "kjs_pcre_" prefix to "jsc_pcre_".
3725         * pcre/pcre_compile.cpp: Ditto.
3726         (getOthercaseRange):
3727         (encodeUTF8):
3728         (compileBranch):
3729         (calculateCompiledPatternLength):
3730         * pcre/pcre_exec.cpp: Ditto.
3731         (matchRef):
3732         (getUTF8CharAndIncrementLength):
3733         (match):
3734         * pcre/pcre_internal.h: Ditto.
3735         (toLowerCase):
3736         (flipCase):
3737         (classBitmapForChar):
3738         (charTypeForChar):
3739         * pcre/pcre_tables.cpp: Ditto.
3740         * pcre/pcre_ucp_searchfuncs.cpp: Ditto.
3741         (jsc_pcre_ucp_othercase):
3742         * pcre/pcre_xclass.cpp: Ditto.
3743         (getUTF8CharAndAdvancePointer):
3744         (jsc_pcre_xclass):
3745
3746         * runtime/Collector.h: Updated header guards using the
3747         clean-header-guards script.
3748         * runtime/CollectorHeapIterator.h: Added missing header guard.
3749         * runtime/Identifier.h: Updated header guards.
3750         * runtime/JSFunction.h: Fixed end-of-namespace comment.
3751
3752         * runtime/JSGlobalObject.cpp:
3753         (JSC::JSGlobalObject::reset): Renamed "kjsprint" debug function
3754         to "jscprint".  Changed implementation method from
3755         globalFuncKJSPrint() to globalFuncJSCPrint().
3756         * runtime/JSGlobalObjectFunctions.cpp:
3757         (JSC::globalFuncJSCPrint): Renamed from globalFuncKJSPrint().
3758         * runtime/JSGlobalObjectFunctions.h: Ditto.
3759
3760         * runtime/JSImmediate.h: Updated header guards.
3761         * runtime/JSLock.h: Ditto.
3762         * runtime/JSType.h: Ditto.
3763         * runtime/JSWrapperObject.h: Ditto.
3764         * runtime/Lookup.h: Ditto.
3765         * runtime/Operations.h: Ditto.
3766         * runtime/Protect.h: Ditto.
3767         * runtime/RegExp.h: Ditto.
3768         * runtime/UString.h: Ditto.
3769
3770         * tests/mozilla/js1_5/Array/regress-157652.js: Changed "KJS"
3771         reference in comment to "JSC".
3772
3773         * wrec/CharacterClassConstructor.cpp: Change "kjs_pcre_" function
3774         prefixes to "jsc_pcre_".
3775         (JSC::WREC::CharacterClassConstructor::put):
3776         (JSC::WREC::CharacterClassConstructor::flush):
3777
3778         * wtf/unicode/Unicode.h: Change "KJS_" header guard to "WTF_".
3779         * wtf/unicode/icu/UnicodeIcu.h: Ditto.
3780         * wtf/unicode/qt4/UnicodeQt4.h: Ditto.
3781
3782 2009-01-02  Oliver Hunt  <oliver@apple.com>
3783
3784         Reviewed by Maciej Stachowiak.
3785
3786         Make randomNumber generate 2^53 values instead of 2^32 (or 2^31 for rand() platforms)
3787
3788         * wtf/RandomNumber.cpp:
3789         (WTF::randomNumber):
3790
3791 2009-01-02  David Kilzer  <ddkilzer@apple.com>
3792
3793         Remove declaration for JSC::Identifier::initializeIdentifierThreading()
3794
3795         Reviewed by Alexey Proskuryakov.
3796
3797         * runtime/Identifier.h:
3798         (JSC::Identifier::initializeIdentifierThreading): Removed
3799         declaration since the implementation was removed in r34412.
3800
3801 2009-01-01  Darin Adler  <darin@apple.com>
3802
3803         Reviewed by Oliver Hunt.
3804
3805         String.replace does not support $& replacement metacharacter when search term is not a RegExp
3806         <https://bugs.webkit.org/show_bug.cgi?id=21431>
3807         <rdar://problem/6274993>
3808
3809         Test: fast/js/string-replace-3.html
3810
3811         * runtime/StringPrototype.cpp:
3812         (JSC::substituteBackreferences): Added a null check here so we won't try to handle $$-$9
3813         backreferences when the search term is a string, not a RegExp. Added a check for 0 so we
3814         won't try to handle $0 or $00 as a backreference.
3815         (JSC::stringProtoFuncReplace): Added a call to substituteBackreferences.
3816
3817 2009-01-01  Gavin Barraclough  <barraclough@apple.com>
3818
3819         Reviewed by Darin Adler.
3820
3821         Allow 32-bit integers to be stored in JSImmediates, on x64-bit.
3822         Presently the top 32-bits of a 64-bit JSImmediate serve as a sign extension of a 31-bit
3823         int stored in the low word (shifted left by one, to make room for a tag).  In the new
3824         format, the top 31-bits serve as a sign extension of a 32-bit int, still shifted left by
3825         one.
3826
3827         The new behavior is enabled using a flag in Platform.h, 'WTF_USE_ALTERNATE_JSIMMEDIATE'.
3828         When this is set the constants defining the range of ints allowed to be stored as
3829         JSImmediate values is extended.  The code in JSImmediate.h can safely operate on either
3830         format.  This patch updates the JIT so that it can also operate with the new format.
3831
3832         ~2% progression on x86-64, with & without the JIT, on sunspider & v8 tests.
3833
3834         * assembler/MacroAssembler.h:
3835         (JSC::MacroAssembler::addPtr):
3836         (JSC::MacroAssembler::orPtr):
3837         (JSC::MacroAssembler::or32):
3838         (JSC::MacroAssembler::rshiftPtr):
3839         (JSC::MacroAssembler::rshift32):
3840         (JSC::MacroAssembler::subPtr):
3841         (JSC::MacroAssembler::xorPtr):
3842         (JSC::MacroAssembler::xor32):
3843         (JSC::MacroAssembler::move):
3844         (JSC::MacroAssembler::compareImm64ForBranch):
3845         (JSC::MacroAssembler::compareImm64ForBranchEquality):
3846         (JSC::MacroAssembler::jePtr):
3847         (JSC::MacroAssembler::jgePtr):
3848         (JSC::MacroAssembler::jlPtr):
3849         (JSC::MacroAssembler::jlePtr):
3850         (JSC::MacroAssembler::jnePtr):
3851         (JSC::MacroAssembler::jnzSubPtr):
3852         (JSC::MacroAssembler::joAddPtr):
3853         (JSC::MacroAssembler::jzSubPtr):
3854         * assembler/X86Assembler.h:
3855         (JSC::X86Assembler::addq_rr):
3856         (JSC::X86Assembler::orq_ir):
3857         (JSC::X86Assembler::subq_ir):
3858         (JSC::X86Assembler::xorq_rr):
3859         (JSC::X86Assembler::sarq_CLr):
3860         (JSC::X86Assembler::sarq_i8r):
3861         (JSC::X86Assembler::cmpq_ir):
3862         * jit/JIT.cpp:
3863         (JSC::JIT::compileOpStrictEq):
3864         (JSC::JIT::privateCompileMainPass):
3865         (JSC::JIT::privateCompileSlowCases):
3866         (JSC::JIT::privateCompileCTIMachineTrampolines):
3867         * jit/JIT.h:
3868         * jit/JITArithmetic.cpp:
3869         (JSC::JIT::compileFastArith_op_lshift):
3870         (JSC::JIT::compileFastArithSlow_op_lshift):
3871         (JSC::JIT::compileFastArith_op_rshift):
3872         (JSC::JIT::compileFastArithSlow_op_rshift):
3873         (JSC::JIT::compileFastArith_op_bitand):
3874         (JSC::JIT::compileFastArithSlow_op_bitand):
3875         (JSC::JIT::compileFastArith_op_mod):
3876         (JSC::JIT::compileFastArithSlow_op_mod):
3877         (JSC::JIT::compileFastArith_op_add):
3878         (JSC::JIT::compileFastArithSlow_op_add):
3879         (JSC::JIT::compileFastArith_op_mul):
3880         (JSC::JIT::compileFastArithSlow_op_mul):
3881         (JSC::JIT::compileFastArith_op_post_inc):
3882         (JSC::JIT::compileFastArithSlow_op_post_inc):
3883         (JSC::JIT::compileFastArith_op_post_dec):
3884         (JSC::JIT::compileFastArithSlow_op_post_dec):
3885         (JSC::JIT::compileFastArith_op_pre_inc):
3886         (JSC::JIT::compileFastArithSlow_op_pre_inc):
3887         (JSC::JIT::compileFastArith_op_pre_dec):
3888         (JSC::JIT::compileFastArithSlow_op_pre_dec):
3889         (JSC::JIT::compileBinaryArithOp):
3890         * jit/JITInlineMethods.h:
3891         (JSC::JIT::getConstantOperand):
3892         (JSC::JIT::getConstantOperandImmediateInt):
3893         (JSC::JIT::isOperandConstantImmediateInt):
3894         (JSC::JIT::isOperandConstant31BitImmediateInt):
3895         (JSC::JIT::emitFastArithDeTagImmediate):
3896         (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
3897         (JSC::JIT::emitFastArithReTagImmediate):
3898         (JSC::JIT::emitFastArithImmToInt):
3899         (JSC::JIT::emitFastArithIntToImmNoCheck):
3900         * runtime/JSImmediate.h:
3901         (JSC::JSImmediate::isPositiveNumber):
3902         (JSC::JSImmediate::isNegative):
3903         (JSC::JSImmediate::rightShiftImmediateNumbers):
3904         (JSC::JSImmediate::canDoFastAdditiveOperations):
3905         (JSC::JSImmediate::makeValue):
3906         (JSC::JSImmediate::makeInt):
3907         (JSC::JSImmediate::makeBool):
3908         (JSC::JSImmediate::intValue):
3909         (JSC::JSImmediate::rawValue):
3910         (JSC::JSImmediate::toBoolean):
3911         (JSC::JSImmediate::from):
3912         * wtf/Platform.h:
3913
3914 2008-12-31  Oliver Hunt  <oliver@apple.com>
3915
3916         Reviewed by Cameron Zwarich.
3917
3918         [jsfunfuzz] Assertion + incorrect behaviour with dynamically created local variable in a catch block
3919         <https://bugs.webkit.org/show_bug.cgi?id=23063>
3920
3921         Eval inside a catch block attempts to use the catch block's static scope in
3922         an unsafe way by attempting to add new properties to the scope.  This patch
3923         fixes this issue simply by preventing the catch block from using a static
3924         scope if it contains an eval.
3925
3926         * parser/Grammar.y:
3927         * parser/Nodes.cpp:
3928         (JSC::TryNode::emitBytecode):
3929         * parser/Nodes.h:
3930         (JSC::TryNode::):
3931
3932 2008-12-31  Oliver Hunt  <oliver@apple.com>
3933
3934         Reviewed by Gavin Barraclough.
3935
3936         [jsfunfuzz] Computed exception offset wrong when first instruction is attempt to resolve deleted eval
3937         <https://bugs.webkit.org/show_bug.cgi?id=23062>
3938
3939         This was caused by the expression information for the initial resolve of
3940         eval not being emitted.  If this resolve was the first instruction that
3941         could throw an exception the information search would fail leading to an
3942         assertion failure.  If it was not the first throwable opcode the wrong
3943         expression information would used.
3944
3945         Fix is simply to emit the expression info.
3946
3947         * parser/Nodes.cpp:
3948         (JSC::EvalFunctionCallNode::emitBytecode):
3949
3950 2008-12-31  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
3951
3952         Reviewed by Oliver Hunt.
3953
3954         Bug 23054: Caching of global lookups occurs even when the global object has become a dictionary
3955         <https://bugs.webkit.org/show_bug.cgi?id=23054>
3956         <rdar://problem/6469905>
3957
3958         * interpreter/Interpreter.cpp:
3959         (JSC::Interpreter::resolveGlobal): Do not cache lookup if the global
3960         object has transitioned to a dictionary.
3961         (JSC::Interpreter::cti_op_resolve_global): Do not cache lookup if the
3962         global object has transitioned to a dictionary.
3963
3964 2008-12-30  Oliver Hunt  <oliver@apple.com>
3965
3966         Reviewed by Darin Adler.
3967
3968         <https://bugs.webkit.org/show_bug.cgi?id=23049> [jsfunfuzz] With blocks do not correctly protect their scope object
3969         <rdar://problem/6469742> Crash in JSC::TypeInfo::hasStandardGetOwnPropertySlot() running jsfunfuzz
3970
3971         The problem that caused this was that with nodes were not correctly protecting
3972         the final object that was placed in the scope chain.  We correct this by forcing
3973         the use of a temporary register (which stops us relying on a local register
3974         protecting the scope) and changing the behaviour of op_push_scope so that it
3975         will store the final scope object.
3976
3977         * bytecompiler/BytecodeGenerator.cpp:
3978         (JSC::BytecodeGenerator::emitPushScope):
3979         * interpreter/Interpreter.cpp:
3980         (JSC::Interpreter::privateExecute):
3981         (JSC::Interpreter::cti_op_push_scope):
3982         * interpreter/Interpreter.h:
3983         * jit/JIT.cpp:
3984         (JSC::JIT::privateCompileMainPass):
3985         * parser/Nodes.cpp:
3986         (JSC::WithNode::emitBytecode):
3987
3988 2008-12-30  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
3989
3990         Reviewed by Sam Weinig.
3991
3992         Bug 23037: Parsing and reparsing disagree on automatic semicolon insertion
3993         <https://bugs.webkit.org/show_bug.cgi?id=23037>
3994         <rdar://problem/6467124>
3995
3996         Parsing and reparsing disagree about automatic semicolon insertion, so that a
3997         function like
3998
3999         function() { a = 1, }
4000
4001         is parsed as being syntactically valid but gets a syntax error upon reparsing.
4002         This leads to an assertion failure in Parser::reparse(). It is not that big of
4003         an issue in practice, because in a Release build such a function will return
4004         'undefined' when called.
4005
4006         In this case, we are not following the spec and it should be a syntax error.
4007         However, unless there is a newline separating the ',' and the '}', WebKit would
4008         not treat it as a syntax error in the past either. It would be a bit of work to
4009         make the automatic semicolon insertion match the spec exactly, so this patch
4010         changes it to match our past behaviour.
4011
4012         The problem is that even during reparsing, the Lexer adds a semicolon at the
4013         end of the input, which confuses allowAutomaticSemicolon(), because it is
4014         expecting either a '}', the end of input, or a terminator like a newline.
4015
4016         * parser/Lexer.cpp:
4017         (JSC::Lexer::Lexer): Initialize m_isReparsing to false.
4018         (JSC::Lexer::lex): Do not perform automatic semicolon insertion in the Lexer if
4019         we are in the middle of reparsing.
4020         (JSC::Lexer::clear): Set m_isReparsing to false.
4021         * parser/Lexer.h:
4022         (JSC::Lexer::setIsReparsing): Added.
4023         * parser/Parser.cpp:
4024         (JSC::Parser::reparse): Call Lexer::setIsReparsing() to notify the Lexer of
4025         reparsing.
4026
4027 2008-12-29  Oliver Hunt  <oliver@apple.com>
4028
4029         Reviewed by NOBODY (Build fix).
4030
4031         Yet another attempt to fix Tiger.
4032
4033         * wtf/RandomNumber.cpp:
4034         (WTF::randomNumber):
4035
4036 2008-12-29  Oliver Hunt  <oliver@apple.com>
4037
4038         Reviewed by NOBODY (Build fix).
4039
4040         Tiger build fix (correct this time)
4041
4042         * wtf/RandomNumber.cpp:
4043
4044 2008-12-29  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
4045
4046         Rubber-stamped by Alexey Proskuryakov.
4047
4048         Revert r39509, because kjsyydebug is used in the generated code if YYDEBUG is 1.
4049
4050         * parser/Grammar.y:
4051
4052 2008-12-29  Oliver Hunt  <oliver@apple.com>
4053
4054         Reviewed by NOBODY (Build fix).
4055
4056         Tiger build fix.
4057
4058         * wtf/RandomNumber.cpp:
4059
4060 2008-12-29  Oliver Hunt  <oliver@apple.com>
4061
4062         Reviewed by Mark Rowe.
4063
4064         <rdar://problem/6358108> Insecure randomness in Math.random() leads to user tracking
4065
4066         Switch to arc4random on PLATFORM(DARWIN), this is ~1.5x slower than random(), but the
4067         it is still so fast that there is no fathomable way it could be a bottleneck for anything.
4068
4069         randomNumber is called in two places
4070           * During form submission where it is called once per form
4071           * Math.random in JSC.  For this difference to show up you have to be looping on
4072             a cached local copy of random, for a large (>10000) calls.
4073
4074         No change in SunSpider.
4075
4076         * wtf/RandomNumber.cpp:
4077         (WTF::randomNumber):
4078         * wtf/RandomNumberSeed.h:
4079         (WTF::initializeRandomNumberGenerator):
4080
4081 2008-12-29  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
4082
4083         Rubber-stamped by Sam Weinig.
4084
4085         Remove unused kjsyydebug #define.
4086
4087         * parser/Grammar.y:
4088
4089 2008-12-29  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
4090
4091         Reviewed by Oliver Hunt and Sam Weinig.
4092
4093         Bug 23029: REGRESSION (r39337): jsfunfuzz generates identical test files
4094         <https://bugs.webkit.org/show_bug.cgi?id=23029>
4095         <rdar://problem/6469185>
4096
4097         The unification of random number generation in r39337 resulted in random()
4098         being initialized on Darwin, but rand() actually being used. Fix this by
4099         making randomNumber() use random() instead of rand() on Darwin.
4100
4101         * wtf/RandomNumber.cpp:
4102         (WTF::randomNumber):
4103
4104 2008-12-29  Sam Weinig  <sam@webkit.org>
4105
4106         Fix buildbots.
4107
4108         * runtime/Structure.cpp:
4109
4110 2008-12-29  Sam Weinig  <sam@webkit.org>
4111
4112         Reviewed by Oliver Hunt.
4113
4114         Patch for https://bugs.webkit.org/show_bug.cgi?id=23026
4115         Move the deleted offsets vector into the PropertyMap
4116
4117         Saves 3 words per Structure.
4118
4119         * runtime/PropertyMapHashTable.h:
4120         * runtime/Structure.cpp:
4121         (JSC::Structure::addPropertyTransition):
4122         (JSC::Structure::changePrototypeTransition):
4123         (JSC::Structure::getterSetterTransition):
4124         (JSC::Structure::toDictionaryTransition):
4125         (JSC::Structure::fromDictionaryTransition):
4126         (JSC::Structure::copyPropertyTable):
4127         (JSC::Structure::put):
4128         (JSC::Structure::remove):
4129         (JSC::Structure::rehashPropertyMapHashTable):
4130         * runtime/Structure.h:
4131         (JSC::Structure::propertyStorageSize):
4132
4133 2008-12-29  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
4134
4135         Reviewed by Oliver Hunt.
4136
4137         Change code using m_body.get() as a boolean to take advantage of the 
4138         implicit conversion of RefPtr to boolean.
4139
4140         * runtime/JSFunction.cpp:
4141         (JSC::JSFunction::~JSFunction):
4142
4143 2008-12-28  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
4144
4145         Reviewed by Oliver Hunt.
4146
4147         Bug 22840: REGRESSION (r38349): Gmail doesn't load with profiling enabled
4148         <https://bugs.webkit.org/show_bug.cgi?id=22840>
4149         <rdar://problem/6468077>
4150
4151         * bytecompiler/BytecodeGenerator.cpp:
4152         (JSC::BytecodeGenerator::emitNewArray): Add an assertion that the range
4153         of registers passed to op_new_array is sequential.
4154         (JSC::BytecodeGenerator::emitCall): Correct the relocation of registers
4155         when emitting profiler hooks so that registers aren't leaked. Also, add
4156         an assertion that the 'this' register is always ref'd (because it is),
4157         remove the needless protection of the 'this' register when relocating,
4158         and add an assertion that the range of registers passed to op_call for
4159         function call arguments is sequential.
4160         (JSC::BytecodeGenerator::emitConstruct): Correct the relocation of
4161         registers when emitting profiler hooks so that registers aren't leaked.
4162         Also, add an assertion that the range of registers passed to op_construct
4163         for function call arguments is sequential.
4164
4165 2008-12-26 &n