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