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