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