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