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