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